diff --git a/README.md b/README.md index 3e77335..676bd3e 100644 --- a/README.md +++ b/README.md @@ -94,10 +94,13 @@ const telegram = new TelegramMessenger({ ## Roadmap (P6+) -- [ ] Sleep & energy (циркадный ритм) -- [ ] Web UI (persona setup) -- [ ] Sleep & energy (циркадный ритм) -- [ ] Web UI (persona setup) +Полный список незакрытых задач — в [TODO.md](./TODO.md). + +Кратко: +- P6: sleep & energy, cron-планировщик, рабочие слои памяти (notepads / core self) в цикле mind, tool-runtime для под-агентов +- P7: Web UI (persona setup), конфиг/.env, retry+timeout, тесты +- Каналы: Telegram — обход SSL-проблемы bot.qw4.ru +- Движок: Spark X2.5-4B (unknown architecture в Ollama) ## License diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..27459cd --- /dev/null +++ b/TODO.md @@ -0,0 +1,63 @@ +# spark-mind — Оставшиеся TODO + +Статус: **P0–P5 завершены** (heartbeat→mind, JSON output, embeddings, sub-agents, +SQLite, Telegram). Ниже — реально незакрытые пункты, проверенные по коду +(2026-09-15). Порядок — по приоритету. + +## P6 — Функциональная полнота + +- [ ] **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 для под-агентов. + +## P7 — Инфраструктура + +- [ ] **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-поиск. + +## Каналы вывода + +- [ ] **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 напрямую). + +## Движок + +- [ ] **Spark X2.5-4B.** Не грузится в текущей Ollama: + `error loading model: unknown model architecture: 'spark2_5'`. + Варианты: собрать совместимый GGUF, поднять через llama.cpp напрямую + (OpenAI-сервер на :8080), или оставить Ornith-1.5-9B как основной движок. + **Важно:** локальные модели пумолкают (пустой ответ), если `subAgent` + присутствует в 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.