Версия 1.13 — 06.11.2026. Живой документ: «трафарет» поверх кода, а не описание.
v1.1: T7/T9 решены (A3, коммит abcb171); онтология в цепочке онбординга (Конституция v1.2, ст. 11.1) и в правиле синхронизации (ст. 8.5).
v1.2: T13 (нет реактивного сжатия контекста — платформенное ограничение) + направление F (gauge, сводка сессии, адаптивная инжекция); §5.3 — ограничение на переписывание истории.
v1.3: A2 выполнен — тест-харнесс node:test (test/, 61 тест, 9 модулей); T2 решён; bugfix engine.js (queryTerms в пустом пути retrieve — единый контракт результата).
v1.4: B1 выполнен — журнал вызовов dist/tools/callJournal.js (JSONL, только метаданные) + wiring в loopGuard; +8 тестов (69); подсистема 3, состояние §3.6, карта приложения B, DEVELOPMENT-раздел, README-строка.
v1.5: C1 выполнен — очередь pending-извлечений dist/memory/processing/pendingQueue.js (JSONL рядом с memory.db; drain в preprocessor переживает перезапуск); T4 решён; +16 тестов (85); сверка чисел: dist 48 файлов / ~536 КБ, tools 24, memory 13.
v1.6: F1 выполнен — dist/tools/contextGauge.js: оценка по символам каждый ход → точная токенизация чата (tokenSource, без on-demand загрузки) при >60% → одноразовое предупреждение ≥80% + эскалация +5п.п.; состояние contextGauge в .plugin_state.json; контур обратной связи №4 (§3.4); 96 тестов.
v1.11: C1.1 (ai.js через tokenSource, строковые чанки) + F3 (lastPct-скейлинг инжекции, sanitize дайджеста, хинты-гейт ≥85%) — направление F закрыто; 125 тестов; прод = клон (применяется перезапуском плагина).
v1.12: B2 выполнен — dist/tools/diagnostics.js (maestro_status: сводка журнала, loopGuardStats, denials, gauge/lastPct, очереди, vitals; read-only) + loopGuard.loopGuardStats(); System-группа 10, дефолтных 49.
v1.13: C3 выполнен — dist/memory/health.js (computeHealth в поле health Memory Status: распределения/confidence/stale/expiry/capped near-dup, garbage-safe); подсистема 4 = 15 файлов, dist 52.
v1.7: релиз 06.11 выполнен в прод (A2+B1+C1+F1; живая проверка: журнал пополняется, contextGauge в состоянии, структ. ошибка 403); рантайм 0.4.26 — production.js=ESM-лаунчер, src/ обязателен в активе (установщик исключает его по .lmsignore); §6.2 исправлена; поправка Конституции ст. 6.1 принята пользователем 06.11 (v1.3, коммит 5d0bdfd), SYSTEM_PROMPT v1.2 синхронизирован.
v1.9: F2 выполнен — dist/memory/sessionCompact.js: инструмент compact_session (планирует дайджест) + хук в memory/preprocessor (на следующем сообщении: pullHistory → сводка моделью чата через tokenSource → память, scope activeProject, тег session-compact) + автопланирование в gauge при ≥90%. Отложенное исполнение осознанно: внутри хода модель занята → синхронный дайджест из инструмента = deadlock. 67 инструментов, 117 тестов.
Объект: плагин LM Studio maestro (рабочий клон ~/ai-projects/LM_Studio/maestro, owner rura, rev 81; состояние кода — dist/ на базе rev 81).
Цель: собрать плагин как единый объект — с границами, структурой, процессами, функциями и инвариантами — чтобы любое его усовершенствование было изменением известной структуры, а не гаданием.
0. Способ: как построена эта онтология
0.1. Две онтологии. По «Сводам — СМД-схемы» (§2.3) и Щедровицкому, у любого методологического объекта всегда две онтологии, и знание о нём — «матрёшка» из двух знаний:
натурально-объектная (§1–§5): что плагин есть как объект — границы, структура, процессы, функции, инварианты;
организационно-деятельностная (§6): структура кооперированной деятельности по разработке и эксплуатации этого объекта — кто что делает, в каком порядке, с каким согласованием.
Документ держит обе, но не смешивает: §1–5 говорят об объекте «как он есть сам по себе», §6 — о деятельности вокруг него.
0.2. Объект вырезается из фона. «Всякий объект есть, прежде всего, предмет человеческой деятельности» (Щедровицкий, «Оргуправленческое мышление»). Границы maestro нарисованы не природой, а нашей деятельностью: для деятельности усовершенствования плагина объектом является код dist/ + состояние рантайма + состояние на диске. LM Studio, модели, пользователь — окружение (граничные условия), а не часть объекта.
0.3. Объект и окружение — относительные понятия (Акофф–Эмери, 2.11–2.13): одно и то же образование — объект для одной деятельности и окружение для другой. Для LM Studio maestro — установленный плагин (элемент окружения); для агента (модели в чате) — среда инструментов; для разработчика — объект. Документ фиксирует все три позиции.
0.4. Схема как трафарет (Щедровицкий, «От теории мышления к теории деятельности»): документ — это схема, накладываемая на эмпирический материал (код), которая «вырезает» из него фрагменты. Это средство, а не описание: его накладывают на код перед изменением (§8); если фрагмент кода не вписывается в схему — схема правится в том же коммите (Конституция, ст. 8.4).
0.5. Различие функционирования и развития (Щедровицкий, «Мышление, Понимание, Рефлексия»): у объекта два сочленённых процесса разного масштаба — функционирование (работает на rev 81; §3) и развитие (смена структуры; §7). План усовершенствования строится не как список «починить», а как процесс со своим organizing principle: рефлексивность — само-модель объекта улучшается с каждым изменением.
0.6. Рефлексивность. Суть рефлексии — организация ситуации, в которой все действующие индивиды, при различии позиций, видят и восстанавливают один и тот же объективированный смысл. Для maestro это буквально: плагин эксплуатируют разные модели в разных чатах и сессиях; CONSTITUTION / DEVELOPMENT / README / SYSTEM_PROMPT / ONTOLOGY + память (Remember/Recall) — средства, делающие это возможным.
1. Объект и окружение
1.1. Что есть объект
Maestro — плагин LM Studio: node-процесс, который сам LM Studio спавнит (node ./.lmstudio/production.js, родитель — LM Studio.app) и который регистрирует в хосте три хука:
withToolsProvider — до 67 инструментов для модели (dist/toolsProvider.js);
withPromptPreprocessor — инжекция памяти и доков инструментов в каждое сообщение (dist/preprocessor.js).
В терминах Акофф–Эмери maestro — целеустремлённая однонаправленная система с памятью: откликается на события (сообщения, tool-вызовы), обладает памятью (memory.db, .plugin_state.json) и, по определению 4.24, «располагая памятью, может с течением времени повышать свою эффективность в продуцировании результата, являющегося их задачей»: обучается (памятный слой) и саморегулируется (loopGuard-слой).
1.2. Границы объекта
Граница проведена по процессу: всё, что процесс плагина пишет/читает как своё состояние, — внутри; всё, с чем он лишь взаимодействует (HTTP API, UI, чужие файлы), — окружение. («Естественные границы объекта задаются тем, на что сумел распространиться определённый процесс» — Щедровицкий, «Путеводитель по методологии ОРУ».)
По дефолту в промпте модели: 49 (18+5+4+10+8+4); опционально добавляется 19 (6+6+1+1+5).
2.3. Граф зависимостей (упрощённо)
3. Процессы объекта (динамика)
3.1. Главный процесс: ход чата
Каждая ступень — в try/catch: сбой любой ступени не рвёт ход — процесс отказоустойчив по конструкции (preprocessor никогда не блокирует чат).
3.2. Процесс вызова инструмента (последовательность)
3.3. Процесс памяти
Запись: инструмент Remember ИЛИ AI-извлечение (фон; C1.1: модель — tokenSource-хэндл чата, ai.js принимает её параметром — client.llm к чат-модели слеп; C1: до начала — регистрация в pending-facts.jsonl, после — complete; незавершённые переживают перезапуск и разбираются drain в следующем вызове preprocessor) → dedup (retrieve top-3; включение или Jaccard-пересечение >0.75 при score >0.7) → db.store (scope global/project/session, project, valid_until) → engine.indexMemory (TF-IDF-индекс).
Чтение: query → engine.retrieve (TF-IDF всегда + embedding опционально через локальный API LM Studio, retry доступности раз в 60 с) → composite score → top-N (дефолт 5) → (+ памяти activeProject) → tiered-формат: L0 identity (400 симв.) / L1 essential (1600 симв., 5 записей) / L2 query (остаток бюджета; всего ≤5000) → дедап между слоями → инжекция в сообщение.
Параметры (memory/constants.js — единый источник): MAX_MEMORIES_TOTAL 10 000; MAX_MEMORY_CONTENT_LENGTH 4000; DECAY_HALF_LIFE_DAYS 45; MIN_RELEVANCE_THRESHOLD 0.05.
3.4. Процесс саморегуляции (обратная связь)
По Акофф–Эмери: «обратная связь — информация, получаемая любым функциональным объектом относительно продукта его поведения». У maestro четыре контура:
3.5. Процесс суб-агента
consult_secondary_agent → выбор модели: только загруженные (/api/v0/models, state=loaded, type≠embeddings; намеренно НЕ /v1/models — он листает скачанные и запускал on-demand-загрузку, что давало OOM-креш, прецедент qwen3.6-35b) → если второй модели нет — делегирование себе → луп ≤8 итераций: модель → tool-call (JSON или markdown [tool](json)) → диспетчеризация по permission-уровню (read_only: файлы+web; standard: +память; full: +code) → результат → … → финальный ответ. Images: путь/dataURI → автосжатие 768px q45 (ffmpeg, fallback sips) → base64 в image_url (vision-модели видят, text-only молча игнорируют). Глубина ≤2 (суб-агент не спавнит суб-агента). Auto-debug: coding-задачи получают второй проход ревьюера.
3.6. Состояние объекта
Состояние
Где
Время жизни
Памяти (факты, категории, теги, scope, confidence, valid_until)
Для пользователя:
6. Персистентный контекст без повторных объяснений (L0/L1/L2-инжекция).
7. Автоматизация машины: shell, код, фоновые процессы, macOS-приложения (опционально).
8. Медиа и дизайн: анализ изображений/видео, 70 дизайн-систем, 11 гайдов, HTML→MP4.
Для хоста (LM Studio):
9. Регистрация тремя хуками, изолированный node-процесс, per-chat конфигурация через UI.
5. Инварианты и ограничения
5.1. Инварианты кода (нарушение = баг)
5.2. Инварианты деятельности (Конституция, ст. 2)
Живой production не убивается посреди сессии · lms push — только явное разрешение · .lmstudio/*, install-state.json, node_modules/, owner/name/type/runner в manifest — не редактируются · dist/*.js — единственный исходник, каждое изменение — git-коммит · OOM-дисциплина (lms ps; RAM ≥ модель + 10GB) · секреты не коммитятся.
6.2. Кооперированная деятельность: цикл разработки (проверен 05.11.2026)
Definition of Done (ст. 4.6): сборка без ошибок · поведение проверено в живом чате · коммит · README синхронизирован (ст. 8).
6.3. Уровни согласования (Конституция, ст. 7)
Автономно
По запросу
Явное разрешение
документация; bugfix (с тестом); новый инструмент/модуль (с тестом + README)
релиз в прод; изменения config.js (поля/дефолты)
lms push; изменения Конституции; опасные фичи (code execution, macOS) в активных чатах
6.4. Средства объективирования («матрёшка» знаний)
Средство
Знание об объекте
Знание о деятельности
CONSTITUTION.md
инварианты (§5)
согласования, инциденты, онбординг
DEVELOPMENT.md
модель рантайма, SDK
dev-цикл, lms, релиз
README.md
функции, инструменты, настройки
— (публичное описание)
SYSTEM_PROMPT.md
—
операционный контур для агента в чате
ONTOLOGY.md (этот документ)
§1–§5
§6–§8
Память (Remember/Recall)
code-map, архитектура
workflow, инциденты, решения
git log
история структуры
история изменений
Смысл матрёшки: любой новый агент восстанавливает и объект и деятельность по этому комплексу — и видит тот же объективированный смысл, что и предыдущие агенты (рефлексивность, §0.6).
7. Развитие: от функционирования к изменению
7.1. Состояние (rev 81): что работает
Полная платформа инструментов (68) + персистентная память + слой надёжности + медиа/дизайн. Проверенный dev-цикл с hot-reload. Губернана на месте (Конституция v1.3, SYSTEM_PROMPT v1.2, бэкап-база rev 81). Тест-харнесс чистых модулей, журнала, очереди, гейджа, сводки и самодиагностики (135 тестов, node:test, без LM Studio).
7.2. Напряжения и открытые проблемы (вырезаны из кода при построении онтологии)
№
Напряжение
Где
Последствие
T1
dist/ — источник: нет типов, нет TS, нет автотестов
весь dist/
правки «вслепую»; регрессия находитcя в живом чате
решено (A3, abcb171): фантом get_project_overview удалён, →
7.3. Направления развития (по organizing principle)
A — Надёжность знания об объекте (рефлексивность). Основа: нельзя улучшать то, что не измерено.
A1. Реконструкция TS-источника из dist (tsc не искажает имена) — отдельная задача по явному решению (ст. 3.1).
A2. Тест-харнесс чистых модулей (без LM Studio): loopGuard, tfidf, engine, errorCodes, outputLimits, spillToDisk, workflowCoordinator, projectMemory, validatePath. vitest + фейковый ctl. — выполнено 06.11.2026 (node:test вместо vitest: нет npm на машине; ctl не нужен — тестируются чистые функции).
A3. Точечные фиксы: T9 (доки), T7 (фантомы).
Риски: низкие. Согласование: автономно (A3 — фиксы; A2 — новый модуль с тестами).
B — Наблюдаемость. Основа: обратная связь, о которой нет записи, — не обратная связь.
B1.выполнено 06.11.2026 (dist/tools/callJournal.js, wiring в loopGuard): журнал вызовов JSONL — инструмент, paramsHash (sha1, 12 hex), статус ok/error/loop_blocked/streak_blocked/denied, код, длительность. Только метаданные, без контента. Ротация 2MB.
C — Качество памяти. Основа: память — главное «обучение» объекта; её потери и дубли — прямые дефекты функции 2 (§4).
F — Управление контекстом (реактивное). Основа: переписать историю нельзя (платформа, §5.3), но можно измерить окно, предупредить и обеспечить преемственность.
E — Губернана и объект.
E1. ONTOLOGY.md — в цепочку онбординга (ст. 11.1) — требует явного разрешения (изменение Конституции).
E2. Правило «онтология в том же коммите» (расширение ст. 8) — явное разрешение.
E3. Разрешение T3: судьба brdcastro/maestro vs rura/maestro (один артефакт) — явное разрешение.
7.4. Предлагаемый порядок (зависимости)
8. Как поддерживается эта онтология
8.1. Когда обновлять (в том же коммите, что и изменение):
появилась новая подсистема/хук → §2;
изменился набор инструментов или настроек → §2.2, §4 (и README — ст. 8.1);
изменилось состояние (новые файлы на диске, в-процессные трекеры) → §1.2, §3.6;
новый инвариант или нарушение инварианта → §5;
новый актер/согласование/процедура → §6;
напряжение из §7.2 решено → перенести в «решено» с указанием коммита; обнаружено новое → добавить строку.
8.2. Как обновлять (способ — наложение трафарета на код):
find dist -type f + grep exports — композиция та же (§2)?
diff -rq dist <предыдущее-состояние> — что изменилось?
Сверить параметры в таблицах: memory/constants.js, config.js, loopGuard.js.
8.3. Проверка документа. Документ — не источник истины (источник — код), а трафарет: его ценность — скорость наложения. Если обновление документа начинает стоить дороже изменения — документ разросся и делится (подсистема → свой файл-секция).
8.4. Версия фиксируется в шапке; история — git log.
Щедровицкий Д. Г. — «Путеводитель по методологии ОРУ»: система как система (процессы + материал, естественные границы), схематизация, поиск объекта в понятиях.
Щедровицкий Д. Г. — «Избранные труды»: объектные конструкции, граничные условия.
Щедровицкий Д. Г. — «Оргуправленческое мышление»: объект вырезается из фона; всякий объект — предмет деятельности.
Щедровицкий Д. Г. — «От теории мышления к теории деятельности»: схема как трафарет, треугольник схема–материал–схематизм.
Щедровицкий Д. Г. — «Мышление, Понимание, Рефлексия»: различие функционирования и развития; рефлексия как организация кооперативных ситуаций.
Акофф Р., Эмери М. — «О целеустремлённых системах»: структура (индивид/окружение/класс), обратная связь, общение, память, целеустремлённая система.
Своды — «СМД-схемы, сводный документ»: §2.3 две онтологии методологической работы (матрёшка), §5.3 схема акта деятельности.
Версия 1.13 — 06.11.2026. Живой документ: «трафарет» поверх кода, а не описание.
v1.1: T7/T9 решены (A3, коммит abcb171); онтология в цепочке онбординга (Конституция v1.2, ст. 11.1) и в правиле синхронизации (ст. 8.5).
v1.2: T13 (нет реактивного сжатия контекста — платформенное ограничение) + направление F (gauge, сводка сессии, адаптивная инжекция); §5.3 — ограничение на переписывание истории.
v1.3: A2 выполнен — тест-харнесс node:test (test/, 61 тест, 9 модулей); T2 решён; bugfix engine.js (queryTerms в пустом пути retrieve — единый контракт результата).
v1.4: B1 выполнен — журнал вызовов dist/tools/callJournal.js (JSONL, только метаданные) + wiring в loopGuard; +8 тестов (69); подсистема 3, состояние §3.6, карта приложения B, DEVELOPMENT-раздел, README-строка.
v1.5: C1 выполнен — очередь pending-извлечений dist/memory/processing/pendingQueue.js (JSONL рядом с memory.db; drain в preprocessor переживает перезапуск); T4 решён; +16 тестов (85); сверка чисел: dist 48 файлов / ~536 КБ, tools 24, memory 13.
v1.6: F1 выполнен — dist/tools/contextGauge.js: оценка по символам каждый ход → точная токенизация чата (tokenSource, без on-demand загрузки) при >60% → одноразовое предупреждение ≥80% + эскалация +5п.п.; состояние contextGauge в .plugin_state.json; контур обратной связи №4 (§3.4); 96 тестов.
v1.11: C1.1 (ai.js через tokenSource, строковые чанки) + F3 (lastPct-скейлинг инжекции, sanitize дайджеста, хинты-гейт ≥85%) — направление F закрыто; 125 тестов; прод = клон (применяется перезапуском плагина).
v1.12: B2 выполнен — dist/tools/diagnostics.js (maestro_status: сводка журнала, loopGuardStats, denials, gauge/lastPct, очереди, vitals; read-only) + loopGuard.loopGuardStats(); System-группа 10, дефолтных 49.
v1.13: C3 выполнен — dist/memory/health.js (computeHealth в поле health Memory Status: распределения/confidence/stale/expiry/capped near-dup, garbage-safe); подсистема 4 = 15 файлов, dist 52.
v1.7: релиз 06.11 выполнен в прод (A2+B1+C1+F1; живая проверка: журнал пополняется, contextGauge в состоянии, структ. ошибка 403); рантайм 0.4.26 — production.js=ESM-лаунчер, src/ обязателен в активе (установщик исключает его по .lmsignore); §6.2 исправлена; поправка Конституции ст. 6.1 принята пользователем 06.11 (v1.3, коммит 5d0bdfd), SYSTEM_PROMPT v1.2 синхронизирован.
v1.9: F2 выполнен — dist/memory/sessionCompact.js: инструмент compact_session (планирует дайджест) + хук в memory/preprocessor (на следующем сообщении: pullHistory → сводка моделью чата через tokenSource → память, scope activeProject, тег session-compact) + автопланирование в gauge при ≥90%. Отложенное исполнение осознанно: внутри хода модель занята → синхронный дайджест из инструмента = deadlock. 67 инструментов, 117 тестов.
Объект: плагин LM Studio maestro (рабочий клон ~/ai-projects/LM_Studio/maestro, owner rura, rev 81; состояние кода — dist/ на базе rev 81).
Цель: собрать плагин как единый объект — с границами, структурой, процессами, функциями и инвариантами — чтобы любое его усовершенствование было изменением известной структуры, а не гаданием.
0. Способ: как построена эта онтология
0.1. Две онтологии. По «Сводам — СМД-схемы» (§2.3) и Щедровицкому, у любого методологического объекта всегда две онтологии, и знание о нём — «матрёшка» из двух знаний:
натурально-объектная (§1–§5): что плагин есть как объект — границы, структура, процессы, функции, инварианты;
организационно-деятельностная (§6): структура кооперированной деятельности по разработке и эксплуатации этого объекта — кто что делает, в каком порядке, с каким согласованием.
Документ держит обе, но не смешивает: §1–5 говорят об объекте «как он есть сам по себе», §6 — о деятельности вокруг него.
0.2. Объект вырезается из фона. «Всякий объект есть, прежде всего, предмет человеческой деятельности» (Щедровицкий, «Оргуправленческое мышление»). Границы maestro нарисованы не природой, а нашей деятельностью: для деятельности усовершенствования плагина объектом является код dist/ + состояние рантайма + состояние на диске. LM Studio, модели, пользователь — окружение (граничные условия), а не часть объекта.
0.3. Объект и окружение — относительные понятия (Акофф–Эмери, 2.11–2.13): одно и то же образование — объект для одной деятельности и окружение для другой. Для LM Studio maestro — установленный плагин (элемент окружения); для агента (модели в чате) — среда инструментов; для разработчика — объект. Документ фиксирует все три позиции.
0.4. Схема как трафарет (Щедровицкий, «От теории мышления к теории деятельности»): документ — это схема, накладываемая на эмпирический материал (код), которая «вырезает» из него фрагменты. Это средство, а не описание: его накладывают на код перед изменением (§8); если фрагмент кода не вписывается в схему — схема правится в том же коммите (Конституция, ст. 8.4).
0.5. Различие функционирования и развития (Щедровицкий, «Мышление, Понимание, Рефлексия»): у объекта два сочленённых процесса разного масштаба — функционирование (работает на rev 81; §3) и развитие (смена структуры; §7). План усовершенствования строится не как список «починить», а как процесс со своим organizing principle: рефлексивность — само-модель объекта улучшается с каждым изменением.
0.6. Рефлексивность. Суть рефлексии — организация ситуации, в которой все действующие индивиды, при различии позиций, видят и восстанавливают один и тот же объективированный смысл. Для maestro это буквально: плагин эксплуатируют разные модели в разных чатах и сессиях; CONSTITUTION / DEVELOPMENT / README / SYSTEM_PROMPT / ONTOLOGY + память (Remember/Recall) — средства, делающие это возможным.
1. Объект и окружение
1.1. Что есть объект
Maestro — плагин LM Studio: node-процесс, который сам LM Studio спавнит (node ./.lmstudio/production.js, родитель — LM Studio.app) и который регистрирует в хосте три хука:
withToolsProvider — до 67 инструментов для модели (dist/toolsProvider.js);
withPromptPreprocessor — инжекция памяти и доков инструментов в каждое сообщение (dist/preprocessor.js).
В терминах Акофф–Эмери maestro — целеустремлённая однонаправленная система с памятью: откликается на события (сообщения, tool-вызовы), обладает памятью (memory.db, .plugin_state.json) и, по определению 4.24, «располагая памятью, может с течением времени повышать свою эффективность в продуцировании результата, являющегося их задачей»: обучается (памятный слой) и саморегулируется (loopGuard-слой).
1.2. Границы объекта
Граница проведена по процессу: всё, что процесс плагина пишет/читает как своё состояние, — внутри; всё, с чем он лишь взаимодействует (HTTP API, UI, чужие файлы), — окружение. («Естественные границы объекта задаются тем, на что сумел распространиться определённый процесс» — Щедровицкий, «Путеводитель по методологии ОРУ».)
По дефолту в промпте модели: 49 (18+5+4+10+8+4); опционально добавляется 19 (6+6+1+1+5).
2.3. Граф зависимостей (упрощённо)
3. Процессы объекта (динамика)
3.1. Главный процесс: ход чата
Каждая ступень — в try/catch: сбой любой ступени не рвёт ход — процесс отказоустойчив по конструкции (preprocessor никогда не блокирует чат).
3.2. Процесс вызова инструмента (последовательность)
3.3. Процесс памяти
Запись: инструмент Remember ИЛИ AI-извлечение (фон; C1.1: модель — tokenSource-хэндл чата, ai.js принимает её параметром — client.llm к чат-модели слеп; C1: до начала — регистрация в pending-facts.jsonl, после — complete; незавершённые переживают перезапуск и разбираются drain в следующем вызове preprocessor) → dedup (retrieve top-3; включение или Jaccard-пересечение >0.75 при score >0.7) → db.store (scope global/project/session, project, valid_until) → engine.indexMemory (TF-IDF-индекс).
Чтение: query → engine.retrieve (TF-IDF всегда + embedding опционально через локальный API LM Studio, retry доступности раз в 60 с) → composite score → top-N (дефолт 5) → (+ памяти activeProject) → tiered-формат: L0 identity (400 симв.) / L1 essential (1600 симв., 5 записей) / L2 query (остаток бюджета; всего ≤5000) → дедап между слоями → инжекция в сообщение.
Параметры (memory/constants.js — единый источник): MAX_MEMORIES_TOTAL 10 000; MAX_MEMORY_CONTENT_LENGTH 4000; DECAY_HALF_LIFE_DAYS 45; MIN_RELEVANCE_THRESHOLD 0.05.
3.4. Процесс саморегуляции (обратная связь)
По Акофф–Эмери: «обратная связь — информация, получаемая любым функциональным объектом относительно продукта его поведения». У maestro четыре контура:
3.5. Процесс суб-агента
consult_secondary_agent → выбор модели: только загруженные (/api/v0/models, state=loaded, type≠embeddings; намеренно НЕ /v1/models — он листает скачанные и запускал on-demand-загрузку, что давало OOM-креш, прецедент qwen3.6-35b) → если второй модели нет — делегирование себе → луп ≤8 итераций: модель → tool-call (JSON или markdown [tool](json)) → диспетчеризация по permission-уровню (read_only: файлы+web; standard: +память; full: +code) → результат → … → финальный ответ. Images: путь/dataURI → автосжатие 768px q45 (ffmpeg, fallback sips) → base64 в image_url (vision-модели видят, text-only молча игнорируют). Глубина ≤2 (суб-агент не спавнит суб-агента). Auto-debug: coding-задачи получают второй проход ревьюера.
3.6. Состояние объекта
Состояние
Где
Время жизни
Памяти (факты, категории, теги, scope, confidence, valid_until)
Для пользователя:
6. Персистентный контекст без повторных объяснений (L0/L1/L2-инжекция).
7. Автоматизация машины: shell, код, фоновые процессы, macOS-приложения (опционально).
8. Медиа и дизайн: анализ изображений/видео, 70 дизайн-систем, 11 гайдов, HTML→MP4.
Для хоста (LM Studio):
9. Регистрация тремя хуками, изолированный node-процесс, per-chat конфигурация через UI.
5. Инварианты и ограничения
5.1. Инварианты кода (нарушение = баг)
5.2. Инварианты деятельности (Конституция, ст. 2)
Живой production не убивается посреди сессии · lms push — только явное разрешение · .lmstudio/*, install-state.json, node_modules/, owner/name/type/runner в manifest — не редактируются · dist/*.js — единственный исходник, каждое изменение — git-коммит · OOM-дисциплина (lms ps; RAM ≥ модель + 10GB) · секреты не коммитятся.
6.2. Кооперированная деятельность: цикл разработки (проверен 05.11.2026)
Definition of Done (ст. 4.6): сборка без ошибок · поведение проверено в живом чате · коммит · README синхронизирован (ст. 8).
6.3. Уровни согласования (Конституция, ст. 7)
Автономно
По запросу
Явное разрешение
документация; bugfix (с тестом); новый инструмент/модуль (с тестом + README)
релиз в прод; изменения config.js (поля/дефолты)
lms push; изменения Конституции; опасные фичи (code execution, macOS) в активных чатах
6.4. Средства объективирования («матрёшка» знаний)
Средство
Знание об объекте
Знание о деятельности
CONSTITUTION.md
инварианты (§5)
согласования, инциденты, онбординг
DEVELOPMENT.md
модель рантайма, SDK
dev-цикл, lms, релиз
README.md
функции, инструменты, настройки
— (публичное описание)
SYSTEM_PROMPT.md
—
операционный контур для агента в чате
ONTOLOGY.md (этот документ)
§1–§5
§6–§8
Память (Remember/Recall)
code-map, архитектура
workflow, инциденты, решения
git log
история структуры
история изменений
Смысл матрёшки: любой новый агент восстанавливает и объект и деятельность по этому комплексу — и видит тот же объективированный смысл, что и предыдущие агенты (рефлексивность, §0.6).
7. Развитие: от функционирования к изменению
7.1. Состояние (rev 81): что работает
Полная платформа инструментов (68) + персистентная память + слой надёжности + медиа/дизайн. Проверенный dev-цикл с hot-reload. Губернана на месте (Конституция v1.3, SYSTEM_PROMPT v1.2, бэкап-база rev 81). Тест-харнесс чистых модулей, журнала, очереди, гейджа, сводки и самодиагностики (135 тестов, node:test, без LM Studio).
7.2. Напряжения и открытые проблемы (вырезаны из кода при построении онтологии)
№
Напряжение
Где
Последствие
T1
dist/ — источник: нет типов, нет TS, нет автотестов
весь dist/
правки «вслепую»; регрессия находитcя в живом чате
решено (A3, abcb171): фантом get_project_overview удалён, →
7.3. Направления развития (по organizing principle)
A — Надёжность знания об объекте (рефлексивность). Основа: нельзя улучшать то, что не измерено.
A1. Реконструкция TS-источника из dist (tsc не искажает имена) — отдельная задача по явному решению (ст. 3.1).
A2. Тест-харнесс чистых модулей (без LM Studio): loopGuard, tfidf, engine, errorCodes, outputLimits, spillToDisk, workflowCoordinator, projectMemory, validatePath. vitest + фейковый ctl. — выполнено 06.11.2026 (node:test вместо vitest: нет npm на машине; ctl не нужен — тестируются чистые функции).
A3. Точечные фиксы: T9 (доки), T7 (фантомы).
Риски: низкие. Согласование: автономно (A3 — фиксы; A2 — новый модуль с тестами).
B — Наблюдаемость. Основа: обратная связь, о которой нет записи, — не обратная связь.
B1.выполнено 06.11.2026 (dist/tools/callJournal.js, wiring в loopGuard): журнал вызовов JSONL — инструмент, paramsHash (sha1, 12 hex), статус ok/error/loop_blocked/streak_blocked/denied, код, длительность. Только метаданные, без контента. Ротация 2MB.
C — Качество памяти. Основа: память — главное «обучение» объекта; её потери и дубли — прямые дефекты функции 2 (§4).
F — Управление контекстом (реактивное). Основа: переписать историю нельзя (платформа, §5.3), но можно измерить окно, предупредить и обеспечить преемственность.
E — Губернана и объект.
E1. ONTOLOGY.md — в цепочку онбординга (ст. 11.1) — требует явного разрешения (изменение Конституции).
E2. Правило «онтология в том же коммите» (расширение ст. 8) — явное разрешение.
E3. Разрешение T3: судьба brdcastro/maestro vs rura/maestro (один артефакт) — явное разрешение.
7.4. Предлагаемый порядок (зависимости)
8. Как поддерживается эта онтология
8.1. Когда обновлять (в том же коммите, что и изменение):
появилась новая подсистема/хук → §2;
изменился набор инструментов или настроек → §2.2, §4 (и README — ст. 8.1);
изменилось состояние (новые файлы на диске, в-процессные трекеры) → §1.2, §3.6;
новый инвариант или нарушение инварианта → §5;
новый актер/согласование/процедура → §6;
напряжение из §7.2 решено → перенести в «решено» с указанием коммита; обнаружено новое → добавить строку.
8.2. Как обновлять (способ — наложение трафарета на код):
find dist -type f + grep exports — композиция та же (§2)?
diff -rq dist <предыдущее-состояние> — что изменилось?
Сверить параметры в таблицах: memory/constants.js, config.js, loopGuard.js.
8.3. Проверка документа. Документ — не источник истины (источник — код), а трафарет: его ценность — скорость наложения. Если обновление документа начинает стоить дороже изменения — документ разросся и делится (подсистема → свой файл-секция).
8.4. Версия фиксируется в шапке; история — git log.
Щедровицкий Д. Г. — «Путеводитель по методологии ОРУ»: система как система (процессы + материал, естественные границы), схематизация, поиск объекта в понятиях.
Щедровицкий Д. Г. — «Избранные труды»: объектные конструкции, граничные условия.
Щедровицкий Д. Г. — «Оргуправленческое мышление»: объект вырезается из фона; всякий объект — предмет деятельности.
Щедровицкий Д. Г. — «От теории мышления к теории деятельности»: схема как трафарет, треугольник схема–материал–схематизм.
Щедровицкий Д. Г. — «Мышление, Понимание, Рефлексия»: различие функционирования и развития; рефлексия как организация кооперативных ситуаций.
Акофф Р., Эмери М. — «О целеустремлённых системах»: структура (индивид/окружение/класс), обратная связь, общение, память, целеустремлённая система.
Своды — «СМД-схемы, сводный документ»: §2.3 две онтологии методологической работы (матрёшка), §5.3 схема акта деятельности.
SDK передаёт параметры (zod-схема из определения инструмента).
createSafeToolImplementation (shared.js): если инструмент выключен гейтом — TOOL_DISABLED с recovery hint; validatePath — граница workspace для файловых путей.
Обёртка loopGuard (до выполнения): проверка exact-match-трекера и error-streak'а.
implementation (логика модуля): ctx.status()/warn() (видно в UI, не в промпте), ctx.signal для долгих операций.
Вывод: транкация по outputLimits (бюджет) → при превышении spillIfNeeded: полный текст в /tmp/maestro-spill/, в контекст — превью + путь (читается read_file).
Ошибка: toolError(code, category, message) — числовой код 100–799 + getRecoveryHint (модель действует по коду, а не по free-text).
loopGuard (после выполнения): ошибка → streak++ (и denialTracker для 3xx); успех → сброс streak, phaseToolCounts[reads|writes|tests|executions]++.
loopGuard — контур против повторения. Трекеры module-scoped — критично: SDK повторно вызывает toolsProvider (каждый ход, иногда каждый tool-call), и если бы Map'ы жили в замыкании, счётчик никогда не накапливался бы выше 1. 3× идентичных (tool+params) за 2 мин → «STOP, ответь пользователю»; 4× подряд ошибок инструмента → «попробуй принципиально иначе» + recovery hint; denial (коды 300–399) → консолидированное напоминание обо всех активных denial'ах (экономия контекста, против frustration-лупов).
workflowCoordinator — контур фаз. Классификация инструментов (reads/writes/tests/executions) → инференс фазы: tests>0 → verify; writes>0 → implement; executions>0 ∧ reads≥2 → implement; reads≥3 → plan; иначе understand. Guidance при переходах: «изменяешь, не читая — сначала прочитай», «5 правок без тестов — проверь».
denialTracker — контур против повторного удара о security-границу: вместо серии одинаковых отказов — одно сводное напоминание.
contextGauge (F1) — контур контекстного окна: оценка заполненности по символам каждый ход (бесплатно), точная токенизация реального чата (applyPromptTemplate+countTokens через ctl.tokenSource() — только модель текущего чата, без on-demand загрузки) при пересечении 60%, одноразовое предупреждение ≥80% + пере-предупреждение при эскалации +5п.п. История не переписывается (§5.3) — предупреждение заставляет перенести состояние в память ДО падения чата.
Контракт main(pluginContext); шим src/index.ts → dist/index.js.
Loop-трекеры module-scoped (иначе guard не накапливает счётчики — см. §3.4).
Суб-агент вызывает только загруженные модели (иначе on-demand OOM).
Никакого base64 изображений в результатах инструментов — история контекста реплейтится в каждом следующем tool-call; один 500KB base64 оплачивается десятки раз («ловушка rev 65»).
Memory-preprocessor: любой сбой → вернуть исходное сообщение (память никогда не блокирует чат).
Файловые инструменты sandbox'ены validatePath в workspaceRoot. Нюанс: shell/code/macOS-инструменты (execute_command, run_python, run_applescript…) песочницей НЕ охвачены — их граница — только opt-in гейт. Это сознательный риск, закреплённый уровнями согласования (Конституция, ст. 7).
AI-извлечение памяти — fire-and-forget с таймаутами (никогда не блокирует ход).
M5 Max: 128GB RAM, без swap — переполнение крешит систему (прецедент 04.11.2026).
Контекстные окна локальных моделей (4K–262K) — причина всех «local model optimizations».
LM Studio стартует node без shell PATH — ffmpeg/ffprobe резолвятся явно (media/ffmpegPath.js).
~/.lmstudio общий для LM Studio и Bionic — изменения видны обоим.
SDK повторно вызывает toolsProvider каждый ход — любое мутируемое состояние должно жить вне замыканий.
Плагин не может переписать историю чата: PromptPreprocessor обрабатывает только текущее сообщение; withPredictionLoopHandler (полный контроль цикла) взаимоисключаем с withToolsProvider (SDK). Последствие: реактивного compact (сжатия истории) нет — при исчерпании окна ход падает с ошибкой хоста; возможны только gauge/предупреждение, сводка сессии в память и адаптивная инжекция (T13, направление F).
lint_file
analyze_project
tools/workflowCoordinator.js
—
T8
мёртвые зависимости: sharp, puppeteer (в dist не используются; ресайз — ffmpeg/sips)
C1.выполнено 06.11.2026 (dist/memory/processing/pendingQueue.js + wiring в preprocessor): очередь на диске (pending facts) + обработка в следующем preprocessor (фикс T4).
C2. Включение detectConflicts (уже есть в memory/processing/ai.js) в инструмент Remember.
C3.выполнено 06.11.2026 (dist/memory/health.js): поле health в Memory Status — byCategory/byScope/bySource, avg/low confidence, stale за half-life, expiry ≤7д, near-dup Jaccard ≥0.75 (скан cap 500, вывод cap 20 пар), garbage-safe.
Риски: средние (схема memory.db — сначала версионирование миграций, T10). Согласование: автономно; новые поля конфига — по запросу.
F1.выполнено 06.11.2026 (dist/tools/contextGauge.js): контекст-гейдж на каждый ход — дешёвая оценка по символам → точная токенизация при >60% (модель текущего чата через ctl.tokenSource(), с таймаутом) → одноразовое предупреждение ≥80% с эскалацией +5п.п.: «сохрани в Remember, предложи новый чат, прекрати читать большое».
F2.выполнено 06.11.2026 (dist/memory/sessionCompact.js): сводка сессии — инструмент compact_session планирует запрос; хук в preprocessor на следующем входящем сообщении читает pullHistory, digest-ит его моделью чата (tokenSource) и пишет заметки в память (scope activeProject, теги session-compact); gauge авто-планирует при ≥90%. Исполнение отложено из-за deadlock-ограничения платформы (внутри хода модель занята). LIVE-verified 06.11: 15/15 заметок из реального чата; стрим tokenSource отдаёт чанки-СТРОКИ (client SDK — объекты {content}); модель чата видна только через tokenSource (listLoaded сервера/клиента её не показывает).
F3.выполнено 06.11.2026: gauge пишет lastPct; scaleMemoryInjection (≥70%: count×0.8/chars×0.85, ≥85%: ×0.5/×0.6) режет L2 и бюджеты L0/L1/общий в memory-препроцессоре; делегационные хинты молчат ≥85%; sanitizeHistoryText вырезает memory/hint-блоки из входа дайджеста (боролся с память-эхом). C1.1: ai.js принимает модель (tokenSource; строковые чанки), memory-препроцессор резолвит chatModel.
B2, C3 выполнены 06.11.2026; D2 — следующий; F1 выполнен ранее.
F2 и F3 выполнены 06.11.2026 — направление F закрыто (F1 gauge + предупреждения, F2 live 15/15, F3 адаптивность).
D1, A1, E1–E3 — по явным решениям.
Если код противоречит документу — правильен код, документ правится в том же коммите (ст. 8.4: документация, противоречащая коду, — баг).
Tiered-инжекция L0/L1/L2
dist/memory/preprocessor.js
AI-обработка (extractFacts, detectConflicts; модель = injected tokenSource-handle, C1.1)
dist/memory/processing/ai.js
Pending-очередь извлечения (C1)
dist/memory/processing/pendingQueue.js
Здоровье памяти (C3)
dist/memory/health.js
Сводка сессии (F2)
dist/memory/sessionCompact.js
Инструменты памяти (7)
dist/memory/toolsProvider.js
Project-scoping
dist/memory/projectMemory.js
Все параметры памяти
dist/memory/constants.js
Суб-агент
dist/tools/secondaryAgent.js
Состояние (cwd, messageCount, contextGauge)
dist/tools/stateManager.js
Context-gauge (F1)
dist/tools/contextGauge.js
Дизайн-системы (70)
dist/media/designSystems.js
Дизайн-референсы (11)
dist/media/designReferences.js
Пути ffmpeg/ffprobe
dist/media/ffmpegPath.js
main = withConfigSchematics(dist/config.js) + withToolsProvider(dist/toolsProvider.js) + withPromptPreprocessor(dist/preprocessor.js)
index.js → config.js, toolsProvider.js, preprocessor.jstoolsProvider.js → tools/toolsProvider.js + memory/toolsProvider.js + media/* tools/toolsProvider.js → stateManager, gitTools, fileTools, codeTools, webTools, systemTools, macosTools, secondaryAgent, videoTools, outputLimits, diagnostics все tools/* → shared.js (validatePath, createSafeToolImplementation), errorCodes.jspreprocessor.js → memory/preprocessor.js + tools/promptPreprocessor.js memory/preprocessor.js → sessionCompact (F2-хук дайджеста) tools/promptPreprocessor.js → contextGauge → (opts) sessionCompact (авто при ≥90%)loopGuard.js → denialTracker, workflowCoordinator (обёртка implementation всех инструментов)tools/promptPreprocessor.js → contextGauge (F1: gauge на каждый ход через pullHistory)
Сообщение пользователя → [preprocessor, ступень 1] ПАМЯТЬ: L0+L1+L2 (бюджет 5000 симв.); в фоне (fire-and-forget) — AI-извлечение фактов из сообщений ≥100 симв.; хук F2: если есть compact-request — дайджест всей истории в память (до начала хода, модель свободна) → [preprocessor, ступень 2] ИНСТРУМЕНТЫ: динамические доки (только включённые), phase-индикатор, RAG/контекст-инжекция, delegation-hints (subAgentFrequency), context-gauge (F1: одноразовое предупреждение при ≥80% окна) → модель (LLM) → tool-вызовы (0..n) → [loopGuard] 3× идентичных / 4× ошибок → блокировка с объяснением → [инструмент] zod-схема → validatePath → implementation → outputLimits (транкация) → spillIfNeeded (перелив на диск) → результат модели: строка ИЛИ структурированная ошибка {error, errorCode, hint} → (цикл, пока модель не ответит пользователю)
онбординг: CONSTITUTION → ONTOLOGY → DEVELOPMENT → README (+ SYSTEM_PROMPT в чате), git status, lms whoami (= rura), Recall→ lms dev --no-notify из клона; в UI отключить установленный brdcastro/maestro→ правка dist/ → esbuild hot-reload → живой тест (happy-path И error-path)→ kill dev-процесса → в UI вернуть установленный → git commit→ релиз (по запросу): cp -R dist → активная папка + src на месте → перезапуск (0.4.26: лаунчер+рантайм-импорт; in-place lms dev --install запрещён — см. DEVELOPMENT)→ публикация (явное разрешение): lms push → rura/maestro (новая revision)
SDK передаёт параметры (zod-схема из определения инструмента).
createSafeToolImplementation (shared.js): если инструмент выключен гейтом — TOOL_DISABLED с recovery hint; validatePath — граница workspace для файловых путей.
Обёртка loopGuard (до выполнения): проверка exact-match-трекера и error-streak'а.
implementation (логика модуля): ctx.status()/warn() (видно в UI, не в промпте), ctx.signal для долгих операций.
Вывод: транкация по outputLimits (бюджет) → при превышении spillIfNeeded: полный текст в /tmp/maestro-spill/, в контекст — превью + путь (читается read_file).
Ошибка: toolError(code, category, message) — числовой код 100–799 + getRecoveryHint (модель действует по коду, а не по free-text).
loopGuard (после выполнения): ошибка → streak++ (и denialTracker для 3xx); успех → сброс streak, phaseToolCounts[reads|writes|tests|executions]++.
loopGuard — контур против повторения. Трекеры module-scoped — критично: SDK повторно вызывает toolsProvider (каждый ход, иногда каждый tool-call), и если бы Map'ы жили в замыкании, счётчик никогда не накапливался бы выше 1. 3× идентичных (tool+params) за 2 мин → «STOP, ответь пользователю»; 4× подряд ошибок инструмента → «попробуй принципиально иначе» + recovery hint; denial (коды 300–399) → консолидированное напоминание обо всех активных denial'ах (экономия контекста, против frustration-лупов).
workflowCoordinator — контур фаз. Классификация инструментов (reads/writes/tests/executions) → инференс фазы: tests>0 → verify; writes>0 → implement; executions>0 ∧ reads≥2 → implement; reads≥3 → plan; иначе understand. Guidance при переходах: «изменяешь, не читая — сначала прочитай», «5 правок без тестов — проверь».
denialTracker — контур против повторного удара о security-границу: вместо серии одинаковых отказов — одно сводное напоминание.
contextGauge (F1) — контур контекстного окна: оценка заполненности по символам каждый ход (бесплатно), точная токенизация реального чата (applyPromptTemplate+countTokens через ctl.tokenSource() — только модель текущего чата, без on-demand загрузки) при пересечении 60%, одноразовое предупреждение ≥80% + пере-предупреждение при эскалации +5п.п. История не переписывается (§5.3) — предупреждение заставляет перенести состояние в память ДО падения чата.
Контракт main(pluginContext); шим src/index.ts → dist/index.js.
Loop-трекеры module-scoped (иначе guard не накапливает счётчики — см. §3.4).
Суб-агент вызывает только загруженные модели (иначе on-demand OOM).
Никакого base64 изображений в результатах инструментов — история контекста реплейтится в каждом следующем tool-call; один 500KB base64 оплачивается десятки раз («ловушка rev 65»).
Memory-preprocessor: любой сбой → вернуть исходное сообщение (память никогда не блокирует чат).
Файловые инструменты sandbox'ены validatePath в workspaceRoot. Нюанс: shell/code/macOS-инструменты (execute_command, run_python, run_applescript…) песочницей НЕ охвачены — их граница — только opt-in гейт. Это сознательный риск, закреплённый уровнями согласования (Конституция, ст. 7).
AI-извлечение памяти — fire-and-forget с таймаутами (никогда не блокирует ход).
M5 Max: 128GB RAM, без swap — переполнение крешит систему (прецедент 04.11.2026).
Контекстные окна локальных моделей (4K–262K) — причина всех «local model optimizations».
LM Studio стартует node без shell PATH — ffmpeg/ffprobe резолвятся явно (media/ffmpegPath.js).
~/.lmstudio общий для LM Studio и Bionic — изменения видны обоим.
SDK повторно вызывает toolsProvider каждый ход — любое мутируемое состояние должно жить вне замыканий.
Плагин не может переписать историю чата: PromptPreprocessor обрабатывает только текущее сообщение; withPredictionLoopHandler (полный контроль цикла) взаимоисключаем с withToolsProvider (SDK). Последствие: реактивного compact (сжатия истории) нет — при исчерпании окна ход падает с ошибкой хоста; возможны только gauge/предупреждение, сводка сессии в память и адаптивная инжекция (T13, направление F).
lint_file
analyze_project
tools/workflowCoordinator.js
—
T8
мёртвые зависимости: sharp, puppeteer (в dist не используются; ресайз — ffmpeg/sips)
C1.выполнено 06.11.2026 (dist/memory/processing/pendingQueue.js + wiring в preprocessor): очередь на диске (pending facts) + обработка в следующем preprocessor (фикс T4).
C2. Включение detectConflicts (уже есть в memory/processing/ai.js) в инструмент Remember.
C3.выполнено 06.11.2026 (dist/memory/health.js): поле health в Memory Status — byCategory/byScope/bySource, avg/low confidence, stale за half-life, expiry ≤7д, near-dup Jaccard ≥0.75 (скан cap 500, вывод cap 20 пар), garbage-safe.
Риски: средние (схема memory.db — сначала версионирование миграций, T10). Согласование: автономно; новые поля конфига — по запросу.
F1.выполнено 06.11.2026 (dist/tools/contextGauge.js): контекст-гейдж на каждый ход — дешёвая оценка по символам → точная токенизация при >60% (модель текущего чата через ctl.tokenSource(), с таймаутом) → одноразовое предупреждение ≥80% с эскалацией +5п.п.: «сохрани в Remember, предложи новый чат, прекрати читать большое».
F2.выполнено 06.11.2026 (dist/memory/sessionCompact.js): сводка сессии — инструмент compact_session планирует запрос; хук в preprocessor на следующем входящем сообщении читает pullHistory, digest-ит его моделью чата (tokenSource) и пишет заметки в память (scope activeProject, теги session-compact); gauge авто-планирует при ≥90%. Исполнение отложено из-за deadlock-ограничения платформы (внутри хода модель занята). LIVE-verified 06.11: 15/15 заметок из реального чата; стрим tokenSource отдаёт чанки-СТРОКИ (client SDK — объекты {content}); модель чата видна только через tokenSource (listLoaded сервера/клиента её не показывает).
F3.выполнено 06.11.2026: gauge пишет lastPct; scaleMemoryInjection (≥70%: count×0.8/chars×0.85, ≥85%: ×0.5/×0.6) режет L2 и бюджеты L0/L1/общий в memory-препроцессоре; делегационные хинты молчат ≥85%; sanitizeHistoryText вырезает memory/hint-блоки из входа дайджеста (боролся с память-эхом). C1.1: ai.js принимает модель (tokenSource; строковые чанки), memory-препроцессор резолвит chatModel.
B2, C3 выполнены 06.11.2026; D2 — следующий; F1 выполнен ранее.
F2 и F3 выполнены 06.11.2026 — направление F закрыто (F1 gauge + предупреждения, F2 live 15/15, F3 адаптивность).
D1, A1, E1–E3 — по явным решениям.
Если код противоречит документу — правильен код, документ правится в том же коммите (ст. 8.4: документация, противоречащая коду, — баг).
Tiered-инжекция L0/L1/L2
dist/memory/preprocessor.js
AI-обработка (extractFacts, detectConflicts; модель = injected tokenSource-handle, C1.1)
dist/memory/processing/ai.js
Pending-очередь извлечения (C1)
dist/memory/processing/pendingQueue.js
Здоровье памяти (C3)
dist/memory/health.js
Сводка сессии (F2)
dist/memory/sessionCompact.js
Инструменты памяти (7)
dist/memory/toolsProvider.js
Project-scoping
dist/memory/projectMemory.js
Все параметры памяти
dist/memory/constants.js
Суб-агент
dist/tools/secondaryAgent.js
Состояние (cwd, messageCount, contextGauge)
dist/tools/stateManager.js
Context-gauge (F1)
dist/tools/contextGauge.js
Дизайн-системы (70)
dist/media/designSystems.js
Дизайн-референсы (11)
dist/media/designReferences.js
Пути ffmpeg/ffprobe
dist/media/ffmpegPath.js
main = withConfigSchematics(dist/config.js) + withToolsProvider(dist/toolsProvider.js) + withPromptPreprocessor(dist/preprocessor.js)
index.js → config.js, toolsProvider.js, preprocessor.jstoolsProvider.js → tools/toolsProvider.js + memory/toolsProvider.js + media/* tools/toolsProvider.js → stateManager, gitTools, fileTools, codeTools, webTools, systemTools, macosTools, secondaryAgent, videoTools, outputLimits, diagnostics все tools/* → shared.js (validatePath, createSafeToolImplementation), errorCodes.jspreprocessor.js → memory/preprocessor.js + tools/promptPreprocessor.js memory/preprocessor.js → sessionCompact (F2-хук дайджеста) tools/promptPreprocessor.js → contextGauge → (opts) sessionCompact (авто при ≥90%)loopGuard.js → denialTracker, workflowCoordinator (обёртка implementation всех инструментов)tools/promptPreprocessor.js → contextGauge (F1: gauge на каждый ход через pullHistory)
Сообщение пользователя → [preprocessor, ступень 1] ПАМЯТЬ: L0+L1+L2 (бюджет 5000 симв.); в фоне (fire-and-forget) — AI-извлечение фактов из сообщений ≥100 симв.; хук F2: если есть compact-request — дайджест всей истории в память (до начала хода, модель свободна) → [preprocessor, ступень 2] ИНСТРУМЕНТЫ: динамические доки (только включённые), phase-индикатор, RAG/контекст-инжекция, delegation-hints (subAgentFrequency), context-gauge (F1: одноразовое предупреждение при ≥80% окна) → модель (LLM) → tool-вызовы (0..n) → [loopGuard] 3× идентичных / 4× ошибок → блокировка с объяснением → [инструмент] zod-схема → validatePath → implementation → outputLimits (транкация) → spillIfNeeded (перелив на диск) → результат модели: строка ИЛИ структурированная ошибка {error, errorCode, hint} → (цикл, пока модель не ответит пользователю)
онбординг: CONSTITUTION → ONTOLOGY → DEVELOPMENT → README (+ SYSTEM_PROMPT в чате), git status, lms whoami (= rura), Recall→ lms dev --no-notify из клона; в UI отключить установленный brdcastro/maestro→ правка dist/ → esbuild hot-reload → живой тест (happy-path И error-path)→ kill dev-процесса → в UI вернуть установленный → git commit→ релиз (по запросу): cp -R dist → активная папка + src на месте → перезапуск (0.4.26: лаунчер+рантайм-импорт; in-place lms dev --install запрещён — см. DEVELOPMENT)→ публикация (явное разрешение): lms push → rura/maestro (новая revision)