v0.3.0-swift-phase11 · AI-native · Haskell-inspired

Moon Language — AI-native язык для LLM-агентов

Язык для описания LLM-агентов, типизированных моделей данных, монадических пайплайнов и мульти-агентных дебатов — с манифестом проекта Moonfile в духе SwiftPM.

Философия Moon

Moon — это язык второго уровня для оркестрации искусственного интеллекта. Вместо того чтобы вшивать промпты в Python-скрипты, вы описываете агентов с типами, модели с ограничениями, и пайплайны в стиле Haskell (do, <-, pure).

🤖

Агенты как значения

Декларативные LLM-агенты с model, temperature, systemPrompt и произвольными полями конфигурации.

📐

Типы и схемы

Модели с полями, ограничениями (constraint:) и генерацией JSON-схем для валидации ответов LLM.

🔗

IO-пайплайны

Монадические do-блоки связывают вызовы API, память, файлы и агентский анализ в единый поток.

⛈️

Storm

Мульти-агентные панели обсуждают код, синтезатор объединяет вердикты — storm с panel и rounds.

Как устроен проект

┌─────────────────────────────────────────────────────────────┐ │ Moonfile │ │ package · dependencies · targets · providers · runtime │ └──────────────────────────┬──────────────────────────────────┘ │ moon build / moon run ▼ ┌─────────────────────────────────────────────────────────────┐ │ *.moon исходники │ │ import · model · agent · data · function · main │ └──────────────────────────┬──────────────────────────────────┘ │ ┌────────────────┼────────────────┐ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │ Parser │───▶│Typecheck │───▶│ Planner │ └──────────┘ └──────────┘ └──────┬───────┘ ▼ ┌──────────────┐ │ Runtime │ │ LLM · Memory │ │ FS · HTTP │ └──────────────┘
Moonfile отделён от каталога .moon/ (артефакты сборки, память, трейсы). CLI ищет файл Moonfile, затем устаревший Moonfile.moon.

Экосистема Moon

Проект разделён на четыре репозитория. Этот сайт документирует язык и toolchain из moon-lang; расширение, пакеты и установка — в соседних репозиториях.

РепозиторийНазначение
moon-lang Интерпретатор, CLI, LSP, stdlib, примеры, тесты (77)
moon-vscode Расширение VS Code / Cursor (.vsix Releases)
moon-pkg Monorepo пакетов, catalog/index.json, CI verify
moon-setup Установка, обновление, удаление; TUI-менеджер moon-manage.ps1
Исторический TypeScript/Bun toolchain сохранён в ветке legacy репозитория moon-lang.

Быстрый старт

Windows — moon-setup

moon-setup скачивает moon.exe, Swift runtime и stdlib в %APPDATA%\Moon, ставит расширение VS Code / Cursor и добавляет пути в PATH.

Установка

moon + runtime + stdlib + расширение

Менеджер (TUI)

меню: install / update / uninstall / verify

Обновление

последние релизы moon-lang и moon-vscode

powershell
# Установка
irm https://raw.githubusercontent.com/nnxlxde-stack/moon-setup/main/install-all.ps1 | iex

# Интерактивный менеджер (рекомендуется)
irm https://raw.githubusercontent.com/nnxlxde-stack/moon-setup/main/moon-manage.ps1 | iex

# Обновление / удаление
irm https://raw.githubusercontent.com/nnxlxde-stack/moon-setup/main/update-all.ps1 | iex
irm https://raw.githubusercontent.com/nnxlxde-stack/moon-setup/main/uninstall-all.ps1 | iex

moon version
moon check examples/code-analyzer.moon
Перед установкой расширения закройте VS Code / Cursor полностью. Если редактор запущен, скрипт предложит подождать или покажет команду для ручной установки.

Требования

  • Windows 10+ — автоустановка через moon-setup (без Swift SDK)
  • Swift 6.3+ — только для сборки из исходников (macOS, Linux, Windows)
  • DEEPSEEK_API_KEY — для реальных LLM-вызовов (moon run --no-mock)
  • GITHUB_TOKEN — для реальных вызовов Core.GitHub (опционально)

Сборка из исходников

shell
git clone https://github.com/nnxlxde-stack/moon-lang.git
cd moon-lang
swift build
swift test
.build/debug/moon.exe version    # Windows
.build/debug/moon version        # macOS/Linux

moon check examples/code-analyzer.moon
moon plan examples/code-analyzer.moon
moon run --mock --target analyzer
moon build
moon format examples/pr-triage.moon --write

Минимальная программа

moon
-- hello.moon
import Core.Tools

main :: IO ()
main = do
    content <- readFile "README.md"
    saveToFile "out/summary.txt" content

Структура программы

Программа — последовательность деклараций верхнего уровня. Точка входа — обычная функция main :: IO (), как в Haskell.

ДекларацияКлючевые словаНазначение
ИмпортimportПодключение модулей Core.* и локальных .moon
Модельmodel … whereТипизированная схема данных / ответа LLM
Агентagent … ::Конфигурация LLM-агента с типовым классом
Данныеdata … =Алгебраические типы, записи, перечисления
Инстансinstance … for … whereРеализация type class
Функцияname :: TypeУравнения с pattern matching

Комментарии

Однострочные комментарии начинаются с --. Документирующие — с --? (отображаются в hover LSP).

moon
-- обычный комментарий
--? Документация для LSP hover
fetchOpenPRs :: String -> IO [PullRequest]

Импорты

moon
import Core.GitHub
import Core.Memory
import Core.Tools
import Core.Analyzers

Модули stdlib объявляются в секции dependencies: файла Moonfile. Локальные модули резолвятся из lib/, src/ или рядом с entry-файлом.

Модели (model)

Модель описывает структуру данных с полями, опциональными ограничениями и источниками. Поддерживаются параметры типа (юкстапозиция, как в Haskell): model AnalysisResult t where.

moon
model AnalysisResult t where
  item       :: t
  findings   :: [Finding t]
  score      :: Float    constraint: between 0.0 100.0
  summary    :: String
  confidence :: Float    constraint: between 0.0 1.0

Модификаторы полей

МодификаторПример
constraint:constraint: between 0.0 1.0
default:default: "normal"
optionalПоле может отсутствовать в ответе
fetched fromВнешний источник данных

Типы данных (data)

moon
data Verdict = Approved | ChangesRequested | SecurityIssue

data Finding a = Finding
  { location    :: Location
  , severity    :: Severity
  , description :: String
  , category    :: Category a
  }

Агенты (agent)

Агент — конфигурация LLM с типовым классом (Analyzer t, Reviewer t и т.д.). Слово where опционально. Поля конфигурации произвольны.

moon
agent CodeAnalyzer :: Analyzer Code
  model: deepseek-v4-pro
  temperature: 0.18
  systemPrompt: """
    Ты эксперт по код-ревью с 15-летним опытом.
    Ищи проблемы архитектуры, безопасности и производительности.
  """

Вызов агента с контекстом (with)

moon
result <- CodeAnalyzer.analyze item
    with context: context
         maxTokens: 10000
         previousVersion: (getPreviousVersion item)
Блок with — layout-секция: пары ключ: значение на отдельных строках с отступом.

Функции и pattern matching

Сигнатура типа опциональна. Несколько уравнений — сопоставление с образцом.

moon
analyze :: Analyzer t -> t -> IO (AnalysisResult t)
analyze analyzer item = do
    context <- recall "project-knowledge"
    result  <- analyzer.analyze item
        with context: context
    pure $ AnalysisResult
        { item = item
        , findings = result.findings
        , score = calculateScore result
        }

Do-блоки

Монадическая нотация для IO и других монад:

КонструкцияСинтаксис
Связываниеpattern <- expression
Letlet pattern = expression
ДействиеactionCall или выражение с with
moon
main :: IO ()
main = do
    memory LongTerm "project-knowledge"
    prs <- fetchOpenPRs "org/repo"
        filter: (not . isDraft)
    reviews <- mapM (analyze CodeAnalyzer) prs
    when (hasCriticalFindings reviews) $
        escalateCriticalIssues reviews

Выражения

КонструкцияСинтаксисПримечание
Применение $f $ argНизкий приоритет, право-ассоциативно
Bindx >>= fМонадическая композиция
Композицияf . gПробелы вокруг . обязательны
Полеrecord.fieldБез пробелов вокруг .
ЗаписьType { f = v, … }Record syntax
Лямбда\x -> …Как в Haskell
Ifif … then … else …else обязателен
Списки[a, b, c]Гомогенные списки

Система типов

Типы записываются через -> (право-ассоциативно). Базовые типы — обычные идентификаторы из прелюдии, не зарезервированные слова.

moon
String  Int  Float  Bool
IO a                    -- монадические вычисления
Analyzer t               -- type class агента
[PullRequest]              -- список
Maybe Int                 -- применение типа
a -> b -> c               -- = a -> (b -> c)

Правило отступов (layout)

Как в Haskell: ключевые слова where, do, with открывают блок по колонке первого токена.

  • Та же колонка — новый элемент (неявная ;)
  • Больший отступ — продолжение предыдущего элемента
  • Меньший отступ — блок закрыт
Явные { } допустимы, но в реальном коде Moon используются только отступы.

Storm — мульти-агентные дебаты

Привязка storm запускает панель агентов, которые обсуждают артефакт (файл, путь), а synthesizer формирует итоговый консенсус.

moon
consensus <- storm "src/main.cpp"
    with panel: [SecurityReviewer, ArchitectReviewer]
         synthesizer: LeadSynthesizer
         rounds: 2

Параметры по умолчанию задаются в Moonfile: prompts.storm.default_rounds, prompts.storm.max_panel_size.

Примеры в репозитории

ФайлОписание
examples/code-analyzer.moonУниверсальный анализатор с шаблонами и специализациями
examples/code-reviewer.moonКод-ревью PR с вердиктами и отчётами
examples/pr-triage.moonБыстрый triage открытых PR
examples/doc-summarizer.moonСуммаризация документации
examples/requirements-check.moonПроверка требований
examples/code-review-storm.moonStorm-дебаты панели ревьюеров

Манифест проекта Moonfile

Moonfile — декларативный манифест в стиле SwiftPM. Определяет зависимости stdlib, runnable targets, LLM-провайдеров, модели по умолчанию и runtime.

Файл называется Moonfile (без расширения). Расширение .moon зарезервировано для исходного кода.

Секции Moonfile

СекцияНазначение
package "name"Уникальное имя пакета (обязательно)
dependencies:Список модулей Core.*
targets:Именованные entrypoints → путь к .moon
providers:LLM-провайдеры (deepseek)
paths:Пути к pricing, tokenizer
models:default_flash, default_pro
prompts:Суффиксы, trace, настройки storm
runtime:Пул воркеров, память, ретраи

providers.deepseek

КлючОписание
api_keyenv("DEEPSEEK_API_KEY") — литералы sk-… запрещены
base_urlURL или env("DEEPSEEK_BASE_URL")
api_formatanthropic (по умолчанию) или openai
use_betaBeta OpenAI-совместимый API DeepSeek

runtime

КлючОписание
worker_pool.flash_concurrencyПараллельные flash-вызовы (по умолчанию 20)
worker_pool.pro_concurrencyПараллельные pro-вызовы (по умолчанию 5)
memory.long_term_backendURI памяти, напр. file://.moon/memory
retries.max_repair_attemptsПопытки починки JSON после валидации схемы

Секреты и env()

Moonfile намеренно не хранит секреты в открытом виде. Для ключей API используйте:

moonfile
providers:
  deepseek:
    api_key: env("DEEPSEEK_API_KEY")
    base_url: env("DEEPSEEK_BASE_URL")
    api_format: anthropic

Комментарии: -- и --? (документация для LSP hover в редакторе).

Полный пример Moonfile

moonfile
--? Moon project manifest (SwiftPM-style).
package "moon-lang-examples"

dependencies:
  Core.GitHub
  Core.Memory
  Core.Tools
  Core.FS
  Core.Network
  Core.Analyzers

targets:
  analyzer: examples/code-analyzer.moon
  reviewer: examples/code-reviewer.moon
  storm: examples/code-review-storm.moon

providers:
  deepseek:
    api_key: env("DEEPSEEK_API_KEY")
    base_url: env("DEEPSEEK_BASE_URL")
    api_format: anthropic

paths:
  pricing: docs/model-pricing.json
  tokenizer: deepseek-tokenizer/

models:
  default_flash: "deepseek-v4-flash"
  default_pro: "deepseek-v4-pro"

prompts:
  default_system_suffix: "Always respond with valid JSON matching the schema."
  trace_by_default: false
  storm:
    default_rounds: 1
    max_panel_size: 5

runtime:
  worker_pool:
    flash_concurrency: 20
    pro_concurrency: 5
  memory:
    long_term_backend: "file://.moon/memory"
  retries:
    max_repair_attempts: 1

Модули Core.*

МодульНазначениеКлючевые символы
Core.Tools Отчёты, условия, mapM readFile, saveToFile, when, mapM, pure
Core.GitHub GitHub-интеграции fetchOpenPRs, fetchChangedFiles, PullRequest
Core.Memory Долгосрочная память проекта memory, recall
Core.Analyzers Хелперы анализа и ревью calculateScore, hasCriticalFindings, decideOverallVerdict
Core.FS Файловая система (реальный I/O в runtime) readFile, writeFile, listDir, makeDir
Core.Network HTTP-клиент (реальный fetch в runtime) httpGet, httpPost, fetchJson

CLI moon

Основной исполняемый файл собирается из SwiftPM (swift build). Версия toolchain: 0.3.0-swift-phase11 (77 тестов). Windows: установка в %APPDATA%\Moon через moon-setup. LSP: incremental sync, moon-symbols.json, Moonfile support, prompt preview, moon-docs hover. Токенизатор: нативный Swift BPE из deepseek-tokenizer/tokenizer.json.

КомандаОписание
moon check <file>Парсинг и проверка типов
moon runЗапуск target из Moonfile или .moon (--mock, --no-mock, --metrics, --trace-llm)
moon trace showПросмотр LLM-трейса (--run <id>)
moon trace diffСравнение двух прогонов
moon buildСборка targets в .moon/build/ (--target <name>)
moon plan <file>DAG выполнения функции
moon add <pkg[@ver]>Добавить git-зависимость и vendor
moon vendorVendor git-зависимостей из Moonfile
moon publishВалидация пакета и создание git-тега
moon format <file>Форматирование (--write, --check)
moon lspLanguage Server (stdio, Swift)
moon versionВерсии модулей toolchain
Phase 11: нативный Swift-токенизатор, multi-host registry (github.com, gitlab.com, self-hosted HTTPS git). Для --no-mock нужен DEEPSEEK_API_KEY. Спецификация пакетов — в репозитории moon-pkg.
shell
# Запуск конкретного target (mock LLM)
moon run --target analyzer --mock

# Сборка всех targets
moon build

# Registry (см. moon-pkg)
moon add github.com/org/review-kit@0.1.0
moon add gitlab.com/acme/toolkit@2.0.0
moon vendor
moon publish

# Форматирование
moon format examples/pr-triage.moon --write

Модули Swift toolchain

МодульНазначение
MoonLexer / MoonParserЛексер, парсер, layout
MoonTypecheckerПроверка типов, type classes
MoonSchemaCompilerJSON Schema из model
MoonPlannerDAG выполнения, mapM
MoonBuildmoon build, артефакты сборки
MoonRegistryadd, vendor, publish
MoonRuntimeИнтерпретатор (--mock)
MoonFormatter / MoonLSPФорматирование и LSP

VS Code / Cursor

Расширение vscode-moon вынесено в отдельный репозиторий moon-vscode. Подсветка, LSP, автодополнение, hover, форматирование, preview промптов и команды Build/Run.

shell
# Windows — полная установка или TUI-менеджер:
irm https://raw.githubusercontent.com/nnxlxde-stack/moon-setup/main/install-all.ps1 | iex
irm https://raw.githubusercontent.com/nnxlxde-stack/moon-setup/main/moon-manage.ps1 | iex

# Только расширение (закройте редактор перед установкой):
# https://github.com/nnxlxde-stack/moon-vscode/releases/latest
code-insiders --install-extension vscode-moon-0.3.2.vsix

# LSP: moon lsp (после install-all.ps1 или swift build)
# Переопределение: moon.languageServerPath

Языки в редакторе

  • moon — файлы *.moon
  • moonfileMoonfile, Moonfile.moon

Ключевые настройки

НастройкаОписание
moon.languageServerPathПуть к moon CLI (пусто = auto-detect в workspace)
moon.logging.enabledЛоги в Output → Moon
moon.ai.inlineCompletions.enabledAI ghost-text (нужен API key)
moon.build.defaultTargetTarget для Build/Run

Команды палитры

  • Moon: Build / Moon: Run
  • Moon: Preview LLM Prompt
  • Moon: Restart Language Server
  • Moon: Show Output