Философия Moon
Moon — это язык второго уровня для оркестрации искусственного интеллекта.
Вместо того чтобы вшивать промпты в Python-скрипты, вы описываете
агентов с типами, модели с ограничениями,
и пайплайны в стиле Haskell (do, <-, pure).
Агенты как значения
Декларативные LLM-агенты с model, temperature, systemPrompt и произвольными полями конфигурации.
Типы и схемы
Модели с полями, ограничениями (constraint:) и генерацией JSON-схем для валидации ответов LLM.
IO-пайплайны
Монадические do-блоки связывают вызовы API, память, файлы и агентский анализ в единый поток.
Storm
Мульти-агентные панели обсуждают код, синтезатор объединяет вердикты — storm с panel и rounds.
Как устроен проект
.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 |
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
# Установка 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
Требования
- Windows 10+ — автоустановка через moon-setup (без Swift SDK)
- Swift 6.3+ — только для сборки из исходников (macOS, Linux, Windows)
DEEPSEEK_API_KEY— для реальных LLM-вызовов (moon run --no-mock)GITHUB_TOKEN— для реальных вызововCore.GitHub(опционально)
Сборка из исходников
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
Минимальная программа
-- 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).
-- обычный комментарий --? Документация для LSP hover fetchOpenPRs :: String -> IO [PullRequest]
Импорты
import Core.GitHub import Core.Memory import Core.Tools import Core.Analyzers
Модули stdlib объявляются в секции dependencies: файла Moonfile. Локальные модули резолвятся из lib/, src/ или рядом с entry-файлом.
Модели (model)
Модель описывает структуру данных с полями, опциональными ограничениями и источниками.
Поддерживаются параметры типа (юкстапозиция, как в Haskell): model AnalysisResult t where.
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)
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 опционально. Поля конфигурации произвольны.
agent CodeAnalyzer :: Analyzer Code model: deepseek-v4-pro temperature: 0.18 systemPrompt: """ Ты эксперт по код-ревью с 15-летним опытом. Ищи проблемы архитектуры, безопасности и производительности. """
Вызов агента с контекстом (with)
result <- CodeAnalyzer.analyze item with context: context maxTokens: 10000 previousVersion: (getPreviousVersion item)
with — layout-секция: пары ключ: значение на отдельных строках с отступом.
Функции и pattern matching
Сигнатура типа опциональна. Несколько уравнений — сопоставление с образцом.
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 |
| Let | let pattern = expression |
| Действие | actionCall или выражение с with |
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 | Низкий приоритет, право-ассоциативно |
| Bind | x >>= f | Монадическая композиция |
| Композиция | f . g | Пробелы вокруг . обязательны |
| Поле | record.field | Без пробелов вокруг . |
| Запись | Type { f = v, … } | Record syntax |
| Лямбда | \x -> … | Как в Haskell |
| If | if … then … else … | else обязателен |
| Списки | [a, b, c] | Гомогенные списки |
Система типов
Типы записываются через -> (право-ассоциативно). Базовые типы — обычные идентификаторы из прелюдии, не зарезервированные слова.
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 формирует итоговый консенсус.
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.moon | Storm-дебаты панели ревьюеров |
Манифест проекта 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_key | env("DEEPSEEK_API_KEY") — литералы sk-… запрещены |
base_url | URL или env("DEEPSEEK_BASE_URL") |
api_format | anthropic (по умолчанию) или openai |
use_beta | Beta OpenAI-совместимый API DeepSeek |
runtime
| Ключ | Описание |
|---|---|
worker_pool.flash_concurrency | Параллельные flash-вызовы (по умолчанию 20) |
worker_pool.pro_concurrency | Параллельные pro-вызовы (по умолчанию 5) |
memory.long_term_backend | URI памяти, напр. file://.moon/memory |
retries.max_repair_attempts | Попытки починки JSON после валидации схемы |
Секреты и env()
Moonfile намеренно не хранит секреты в открытом виде. Для ключей API используйте:
providers:
deepseek:
api_key: env("DEEPSEEK_API_KEY")
base_url: env("DEEPSEEK_BASE_URL")
api_format: anthropic
Комментарии: -- и --? (документация для LSP hover в редакторе).
Полный пример 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 vendor | Vendor git-зависимостей из Moonfile |
moon publish | Валидация пакета и создание git-тега |
moon format <file> | Форматирование (--write, --check) |
moon lsp | Language Server (stdio, Swift) |
moon version | Версии модулей toolchain |
github.com, gitlab.com, self-hosted HTTPS git).
Для --no-mock нужен DEEPSEEK_API_KEY.
Спецификация пакетов — в репозитории
moon-pkg.
# Запуск конкретного 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 |
MoonSchemaCompiler | JSON Schema из model |
MoonPlanner | DAG выполнения, mapM |
MoonBuild | moon build, артефакты сборки |
MoonRegistry | add, vendor, publish |
MoonRuntime | Интерпретатор (--mock) |
MoonFormatter / MoonLSP | Форматирование и LSP |
VS Code / Cursor
Расширение vscode-moon вынесено в отдельный репозиторий moon-vscode. Подсветка, LSP, автодополнение, hover, форматирование, preview промптов и команды Build/Run.
# 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— файлы*.moonmoonfile—Moonfile,Moonfile.moon
Ключевые настройки
| Настройка | Описание |
|---|---|
moon.languageServerPath | Путь к moon CLI (пусто = auto-detect в workspace) |
moon.logging.enabled | Логи в Output → Moon |
moon.ai.inlineCompletions.enabled | AI ghost-text (нужен API key) |
moon.build.defaultTarget | Target для Build/Run |
Команды палитры
- Moon: Build / Moon: Run
- Moon: Preview LLM Prompt
- Moon: Restart Language Server
- Moon: Show Output