Смена целенаправленности: не реклама/аналитика метрик, а производство контента (текст, изображение, подкаст, видео) + анализ его метрик + SEO. - Новый центральный объект content_items (kind, status-конвейер brief→generated→optimized→published→measured, site, deal_id) - areas: text, image, podcast, video, seo_onpage, seo_semantics, publish - metric_kind: reach, engagement, position, traffic, conversion, revenue, speed, quality - источники метрик: Метрика API, GSC, Yandex Webmaster, Wordstat (+platform/manual/client) - skills привязаны к реальному стеку: editor-pro, ComfyUI, Silero TTS, video-pipeline, Wordstat, Astro (retrieval по bge-m3) - автономия по заслугам: тир на область, +1 за 3 успеха, -1 за провал - конвейер производства добавлен как сквозной процесс - TODO переписан: 8 шагов (0-7) с критериями приёмки
89 lines
5.9 KiB
Markdown
89 lines
5.9 KiB
Markdown
# spark-mind — Оставшиеся TODO
|
|
|
|
Полный план — в [DESIGN.md](./DESIGN.md): **автономный контент-продюсер
|
|
с заземлением на метриках и автономией по заслугам.**
|
|
|
|
Статус: P0–P5 базовые завершены (heartbeat→mind, JSON output, bge-m3 embeddings,
|
|
sub-agents, SQLite, Telegram+fallback). Далее — программа контент-производства.
|
|
|
|
Порядок обязателен: есть зависимости между шагами.
|
|
|
|
## Шаг 0 — Основа
|
|
- [ ] P5: `decision.noAction: true` — агент может решить, что действие не нужно,
|
|
и не писать thought (сейчас heartbeat всегда «работает» → шум в памяти).
|
|
- [ ] Тонкий `Channel`: `ConsoleChannel`, `TelegramChannel`, `FileChannel`.
|
|
`sendReply` сейчас жёстко зашит на Telegram+console.
|
|
|
|
## Шаг 1 — Планировщик (нужен для pipeline/measure/reflection)
|
|
- [ ] Cron-задачи: триггер `{type:'task'}` объявлен, но никто не эмитит.
|
|
- [ ] Проверка due-записей в SQLite → эмит `{type:'pipeline'}` и `{type:'measure'}`.
|
|
- [ ] Ночной `{type:'reflection'}`.
|
|
- Приёмка: задача с датой выполняется в срок.
|
|
|
|
## Шаг 2 — Конвейер контента (центральный объект)
|
|
- [ ] Таблица `content_items` (kind: text|image|podcast|video; status:
|
|
brief→generated→optimized→published→measured→archived).
|
|
- [ ] Переходы статусов + журнал переходов.
|
|
- [ ] Привязка к `site` (свои сайты) и `deal_id` (клиентские заказы).
|
|
- Приёмка: item проходит brief→published, все переходы в журнале.
|
|
|
|
## Шаг 3 — Заземление: outcomes + measure
|
|
- [ ] Таблица `outcomes`: metric_kind (reach, engagement, position, traffic,
|
|
conversion, revenue, speed, quality), direction, horizon_days, due_at.
|
|
- [ ] Замер через `{type:'measure'}`: Метрика API / GSC / Yandex Webmaster / Wordstat.
|
|
- [ ] Нормализация в `score` [-1..+1]; базлайн области для нового контента.
|
|
- Приёмка: метрика замеряется через horizon, score пишется.
|
|
|
|
## Шаг 4 — Автономия по заслугам
|
|
- [ ] Таблица `capabilities` (тир на область: text, image, podcast, video,
|
|
seo_onpage, seo_semantics, publish).
|
|
- [ ] Тиры 0..4 (observer → suggest → ask → act+report → autonomous).
|
|
- [ ] +1 тир за 3 нетто-положительных; −1 за 1 отрицательный; затухание 90 дней.
|
|
- [ ] Границы persona `values` непреодолимы на любом тире.
|
|
- Приёмка: тир растёт после 3 успехов и падает после провала.
|
|
|
|
## Шаг 5 — Методы: skills + reflection
|
|
- [ ] Таблица `skills` (name, area, method_md, tool, validated, uses,
|
|
success_rate, embedding).
|
|
- [ ] Retrieval нужного метода по эмбеддингу bge-m3 (не грузить всё сразу).
|
|
- [ ] Наполнение методами из реального стека: editor-pro (text/seo_onpage),
|
|
ComfyUI (image), Silero TTS (podcast), video-pipeline (video),
|
|
Wordstat (seo_semantics), Astro (publish).
|
|
- [ ] `reflection`: ночной цикл обобщает items+outcomes+thoughts →
|
|
long-term и `self_observations` (**сейчас мёртвый слой**).
|
|
- [ ] Tool-runtime для под-агентов: tools сейчас — только строки-декларации.
|
|
|
|
## Шаг 6 — Заказы: deals + counterparties
|
|
- [ ] Таблицы `counterparties`, `deals`, `deal_events` (append-only).
|
|
- [ ] `trust_score` выводится из истории, не задаётся руками.
|
|
- [ ] Заказ клиента на контент: offered→accepted→delivered→paid|refused|defaulted.
|
|
- Приёмка: заказ проходит полный цикл.
|
|
|
|
## Шаг 7 — Энергия: ledger
|
|
- [ ] Таблица `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`, серверная).
|
|
Сейчас console-only fallback.
|
|
|
|
## Движок
|
|
- [ ] Spark X2.5-4B: не грузится в Ollama (`unknown architecture 'spark2_5'`).
|
|
Варианты: совместимый GGUF / llama.cpp напрямую / остаться на Ornith-1.5-9B.
|
|
**Важно:** локальные модели пумолкают (пустой ответ), если `subAgent`
|
|
в JSON-схеме structured output.
|
|
|
|
## Косметика
|
|
- [ ] Устаревший doc-комментарий в `mind.ts` (класс `SparkLLMClient` описан как
|
|
«клиент для Spark X2.5-4B, в MVP заглушка»).
|
|
- [ ] Дефолт модели в конструкторе `SparkLLMClient` = `'spark-x2.5-4b'`.
|