Files
spark-mind/TODO.md
T
n1kt4r 97f03a9dd5 DESIGN v2: refocus to autonomous content producer with grounding
Смена целенаправленности: не реклама/аналитика метрик, а производство
контента (текст, изображение, подкаст, видео) + анализ его метрик + 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) с критериями приёмки
2026-09-23 14:42:15 +05:00

5.9 KiB

spark-mind — Оставшиеся TODO

Полный план — в 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'.