DESIGN: grounded loop + merit-based autonomy; reprioritize TODO (7 steps)
- DESIGN.md: три контура (сделки / заземление / методы), модель данных, правила нормализации метрик, тиры автономии по заслугам, энергия от результата - Судья = метрики разного типа: охват, позиции, вовлечённость, конверсии, продажи, деньги, стоимость, скорость, качество (ручной вердикт) - Автономия по областям (seo/ads_budget/content_publish/client_comms/...), +1 тир за 3 успеха, -1 за провал, затухание 90 дней, границы persona непреодолимы - P7 сужен до тонкого Channel (console/telegram/file); harness-реестр отложен - TODO.md переписан под 7 шагов с критериями приёмки
This commit is contained in:
1 parent
288d05825f
commit
436dd5fa31
3 files changed
+298
-56
No files matched your search
@@ -1,63 +1,79 @@
|
||||
# spark-mind — Оставшиеся TODO
|
||||
|
||||
Статус: **P0–P5 завершены** (heartbeat→mind, JSON output, embeddings, sub-agents,
|
||||
SQLite, Telegram). Ниже — реально незакрытые пункты, проверенные по коду
|
||||
(2026-09-15). Порядок — по приоритету.
|
||||
Полный план — в [DESIGN.md](./DESIGN.md) (заземлённый контур + автономия по заслугам).
|
||||
Здесь — рабочий чек-лист. Порядок обязателен: зависимости между шагами.
|
||||
|
||||
## P6 — Функциональная полнота
|
||||
Статус: **P0–P5 базовые завершены** (heartbeat→mind, JSON output, bge-m3
|
||||
embeddings, sub-agents, SQLite, Telegram+fallback). Далее — новая программа.
|
||||
|
||||
- [ ] **Sleep & energy (циркадный ритм).** Сейчас heartbeat тикает всегда
|
||||
с фиксированным интервалом 5 мин. Нужно: окна активности/сна, накопление
|
||||
«энергии», снижение частоты тиков в пассивные периоды.
|
||||
- [ ] **Планировщик задач (cron).** Тип триггера `{ type: 'task' }` объявлен
|
||||
в `heartbeat.ts`, но **ничто его не эмитит** — планировщика нет
|
||||
(`scheduleNext` — это idle-таймер, не cron). Нужен движок отложенных задач.
|
||||
- [ ] **Рабочая память (notepads) в цикле mind.** Таблица `notepads` и методы
|
||||
`updateNotepad()`/`getNotepad()` реализованы, но **вне memory.ts не
|
||||
вызываются** — слой не участвует в `handleTick`.
|
||||
- [ ] **Core self (self_observations) в цикле mind.** Аналогично: `addSelfObservation()` /
|
||||
`getAllSelfObservations()` реализованы, но из mind не вызываются.
|
||||
Самосознательность не накапливается автоматически.
|
||||
- [ ] **Реальное исполнение инструментов под-агентов.** `subagent.ts` объявляет
|
||||
список tools (web_search, terminal, file_write…), но это **строки-декларации** —
|
||||
исполнения нет. Нужен tool-runtime для под-агентов.
|
||||
## Шаг 0 — Основа (дёшево, чистит память)
|
||||
- [ ] P5: `decision.noAction: true` — агент может решить, что действие не нужно,
|
||||
и не писать thought. Сейчас heartbeat всегда «работает» → шум в памяти.
|
||||
- [ ] Тонкий `Channel`-интерфейс: `ConsoleChannel`, `TelegramChannel`, `FileChannel`.
|
||||
`sendReply` сейчас жёстко зашит на Telegram+console.
|
||||
|
||||
## P7 — Инфраструктура
|
||||
## Шаг 1 — Планировщик (нужен для measure/reflection)
|
||||
- [ ] Cron/otlozhennye задачи: триггер `{type:'task'}` объявлен, но никто не эмитит.
|
||||
- [ ] Проверка due-записей в SQLite → эмит `{type:'measure'}`.
|
||||
- [ ] Ночной `{type:'reflection'}`.
|
||||
- Приёмка: задача с датой выполняется в срок.
|
||||
|
||||
- [ ] **Web UI (persona setup).** Настройка 8 слоёв persona через интерфейс
|
||||
вместо `DEFAULT_PERSONA` в коде.
|
||||
- [ ] **Конфиг / .env.** URL-ы Ollama (`localhost:11434`), dbPath, Telegram
|
||||
захардкожены в `index.ts`. Вынести в конфиг/`.env`.
|
||||
- [ ] **Retry + timeout для LLM-запросов.** `fetch` в `mind.ts` и `embedding.ts`
|
||||
без retry и без `AbortController` — один сетевой сбой роняет тик.
|
||||
- [ ] **Тесты.** Их нет вообще. Минимум: unit на `parseSparkOutput` (nested JSON,
|
||||
fences, fallback), на `Database` CRUD, на cosine-поиск.
|
||||
## Шаг 2 — Контур A: сделки и контрагенты
|
||||
- [ ] Таблицы `counterparties`, `deals`, `deal_events` (append-only).
|
||||
- [ ] `trust_score` выводится из истории, не задаётся руками.
|
||||
- [ ] Mind умеет открывать/двигать сделку (offered→accepted→delivered→paid|refused|defaulted).
|
||||
- Приёмка: сделка проходит полный цикл, все переходы в журнале.
|
||||
|
||||
## Шаг 3 — Контур B: outcomes (ядро уникальности)
|
||||
- [ ] Таблица `outcomes`: метрики разного типа (reach, position, engagement,
|
||||
conversion, sale, revenue, cost, speed, quality), `direction`, `horizon_days`, `due_at`.
|
||||
- [ ] Замер через `{type:'measure'}`: тянем метрику из источника (Метрика/GSC/Директ/Вордстат/manual).
|
||||
- [ ] Нормализация в `score` [-1..+1] (формула в DESIGN.md §4.1).
|
||||
- Приёмка: метрика замеряется через horizon, score пишется.
|
||||
|
||||
## Шаг 4 — Контур B: автономия по заслугам
|
||||
- [ ] Таблица `capabilities` (уровень НА ОБЛАСТЬ: seo, ads_budget, content_publish,
|
||||
client_comms, research, code).
|
||||
- [ ] Тиры 0..4 (observer → suggest → ask → act+report → autonomous).
|
||||
- [ ] +1 тир за 3 нетто-положительных; −1 за 1 отрицательный; затухание 90 дней.
|
||||
- [ ] Границы persona `values` непреодолимы на любом тире.
|
||||
- Приёмка: тир растёт после 3 успехов и падает после провала.
|
||||
|
||||
## Шаг 5 — Контур C: reflection
|
||||
- [ ] Ночной цикл: обобщает deals + outcomes + thoughts → long-term.
|
||||
- [ ] Пишет в `self_observations` — **сейчас мёртвый слой**, оживляется здесь.
|
||||
- [ ] Дешёвая модель (не основная).
|
||||
|
||||
## Шаг 6 — Контур C: skills registry
|
||||
- [ ] Таблица `skills` (name, method_md, source, validated, uses, success_rate, embedding).
|
||||
- [ ] Retrieval нужного метода по эмбеддингу bge-m3 (не грузить всё сразу).
|
||||
- [ ] Заменяет 4 захардкоженные роли sub-agents.
|
||||
- [ ] Tool-runtime для под-агентов: tools сейчас — только строки-декларации.
|
||||
|
||||
## Шаг 7 — Контур B: энергия (бывший P6 sleep & energy)
|
||||
- [ ] Таблица `ledger`.
|
||||
- [ ] Расход: тик, внешнее действие, саб-агент. Приход: положительные outcomes + донат.
|
||||
- [ ] Низкий баланс → интервал тиков растёт → Deep Rest.
|
||||
- Приёмка: результат пополняет энергию, дефицит замедляет тики.
|
||||
|
||||
## Инфраструктура (по мере надобности)
|
||||
- [ ] Конфиг / `.env`: URL-ы Ollama, dbPath, Telegram захардкожены в `index.ts`.
|
||||
- [ ] Retry + timeout (AbortController) для LLM/embedding fetch — один сбой роняет тик.
|
||||
- [ ] Тесты: `parseSparkOutput`, `Database` CRUD, cosine-поиск, нормализация score.
|
||||
- [ ] Web UI (persona setup) вместо `DEFAULT_PERSONA` в коде.
|
||||
|
||||
## Каналы вывода
|
||||
|
||||
- [ ] **Telegram: обход SSL-проблемы bot.qw4.ru.** Сервер отдаёт
|
||||
`tlsv1 unrecognized name` (SSL alert 112) при TLS-handshake — проблема
|
||||
на стороне сервера, не клиента (проверено curl-ом и Node https).
|
||||
Агент сейчас работает в console-only fallback. Варианты: починить
|
||||
SNI/сертификат на qw4.ru, поднять локальный MAX-релей, или другой канал
|
||||
(Telegram Bot API напрямую).
|
||||
- [ ] Telegram: обход SSL-проблемы bot.qw4.ru (`tlsv1 unrecognized name`, серверная).
|
||||
Сейчас console-only fallback. Варианты: починить SNI на qw4.ru, локальный
|
||||
MAX-релей, или Telegram Bot API напрямую.
|
||||
|
||||
## Движок
|
||||
|
||||
- [ ] **Spark X2.5-4B.** Не грузится в текущей Ollama:
|
||||
`error loading model: unknown model architecture: 'spark2_5'`.
|
||||
Варианты: собрать совместимый GGUF, поднять через llama.cpp напрямую
|
||||
(OpenAI-сервер на :8080), или оставить Ornith-1.5-9B как основной движок.
|
||||
- [ ] Spark X2.5-4B: не грузится в Ollama (`unknown architecture 'spark2_5'`).
|
||||
Варианты: совместимый GGUF / llama.cpp напрямую / остаться на Ornith-1.5-9B.
|
||||
**Важно:** локальные модели пумолкают (пустой ответ), если `subAgent`
|
||||
присутствует в JSON-схеме structured output — учитывать при правках промпта.
|
||||
в JSON-схеме structured output.
|
||||
|
||||
## Косметика
|
||||
|
||||
- [ ] Устаревший doc-комментарий в `mind.ts`: класс `SparkLLMClient` всё ещё
|
||||
описан как «Реальный LLM-клиент для Spark X2.5-4B. В MVP — заглушка»,
|
||||
хотя работает с Ornith-9B и без заглушки.
|
||||
- [ ] Дефолтное имя модели в конструкторе `SparkLLMClient` = `'spark-x2.5-4b'`
|
||||
(index.ts переопределяет на `ornith-1.5-9b:latest`, но дефолт вводит в заблуждение).
|
||||
|
||||
---
|
||||
Проверено `grep`-ом по коду: dead-code слои, отсутствие cron/retry/tests/.env, SSL-ошибка Telegram.
|
||||
- [ ] Устаревший doc-комментарий в `mind.ts` (класс `SparkLLMClient` описан как
|
||||
«клиент для Spark X2.5-4B, в MVP заглушка»).
|
||||
- [ ] Дефолт модели в конструкторе `SparkLLMClient` = `'spark-x2.5-4b'` (вводит в заблуждение).
|
||||
Reference in new issue
Block a user