Files
spark-mind/README.md
T
n1kt4r 436dd5fa31 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 шагов с критериями приёмки
2026-09-23 14:37:17 +05:00

108 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# spark-mind
Self-hosted автономный агент (MVP). Концепт позаимствован из
[Animus](https://github.com/Craigtut/animus) (Craigtut): heartbeat,
4 слоя памяти, persona в 8 слоёв. Движок — **Ornith-1.5-9B** (локально, self-hosted, Ollama).
## Почему Ornith-1.5-9B
- Локальный inference (Ollama), никаких облачных ключей
- Нативная поддержка tool-calling (саб-агенты) + thinking
- 262K контекст (для heartbeat держим 4K-16K + внешняя память)
- ~40-60 t/s на Q6_K
> ⚠️ Spark X2.5-4B не грузится в Ollama (unknown architecture 'spark2_5').
> Ornith-9B — рабочая замена: thinking + tools, дефицитный ресурс.
## Архитектура
```
heartbeat.ts — ядро: 5 триггеров тика, состояния Cold/Warm
memory.ts — 4 слоя памяти (short/working/core self/long-term) + SQLite
persona.ts — 8 слоёв → системный промпт
mind.ts — оркестратор: heartbeat + memory + persona + LLM
subagent.ts — SubAgent SDK: researcher, coder, analyst, content-writer
embedding.ts — bge-m3 embeddings (dim=1024), cosine similarity
database.ts — SQLite репозиторий: 5 таблиц, WAL-режим
telegram.ts — Telegram Channel Layer: MAX Messenger API
```
### Heartbeat (5 триггеров)
1. **Interval** — idle-мысли по таймеру (default 5 мин)
2. **Message** — сообщение от known-контакта
3. **Task** — scheduled-задача (cron)
4. **SubAgent-Complete** — завершение саб-агента
5. **Plugin** — внешний триггер (HomeKit, сенсор и т.д.)
Таймер сбрасывается после любого тика. Warmth-окно 15 мин —
сессия переиспользуется, иначе cold-start.
### Memory (4 слоя)
| Слой | Хранение | Что держит |
|------|----------|-----------|
| short-term | SQLite (thoughts) | последние ~10 мыслей/опыт/сообщений |
| working | SQLite (notepads) | notepad по контактам |
| core self | SQLite (self_observations) | самосознательность |
| long-term | SQLite (long_term + embeddings) | факты/опыт/процедуры + bge-m3 векторы |
### Sub-Agents
Поддерживаемые агенты:
- **researcher** — сбор и анализ информации (web_search, file_read, web_extract)
- **coder** — написание и ревью кода (file_write, terminal, code_review)
- **analyst** — анализ данных и ситуаций (data_query, spreadsheet, chart_generator)
- **content-writer** — создание веб-контента (template_search, seo_check, grammar_check)
## Запуск
```bash
npm install
npm run build # tsc -p tsconfig.json (проверка типов)
npm start # node dist/index.js
```
Ornith-1.5-9B должен быть доступен по OpenAI-совместимому API (Ollama):
- Ollama: `http://localhost:11434` (модель `ornith-1.5-9b:latest`)
### Настройка Telegram
Для отправки ответов в Telegram добавьте в `index.ts`:
```typescript
import { TelegramMessenger } from './src/telegram.js';
const telegram = new TelegramMessenger({
botUrl: 'https://bot.qw4.ru/bot/nik_bot',
userId: '140245519',
});
```
> ⚠️ Примечание: если bot.qw4.ru недоступен (SSL-ошибка 'unrecognized name'),
> агент работает в console-only режиме.
## Статус P0–P5
| Priority | Компонент | Статус |
|----------|-----------|--------|
| P0 | heartbeat → mind wiring | ✅ |
| P1 | structured JSON output (parseSparkOutput) | ✅ |
| P2 | bge-m3 embeddings + cosine search | ✅ |
| P3 | SubAgent SDK (researcher, coder, analyst, content-writer) | ✅ |
| P4 | SQLite persistence (5 таблиц, WAL) | ✅ |
| P5 | Telegram Channel Layer (MAX API + fallback) | ✅ |
## Roadmap (P6+)
- **План** — [DESIGN.md](./DESIGN.md): заземлённый контур + автономия по заслугам
- **Чек-лист** — [TODO.md](./TODO.md)
Суть программы: агент оценивается не своими же рассуждениями, а замером метрик
реального мира (охват, конверсии, продажи, деньги, скорость) до/после действия,
с отложенным вердиктом. Права (автономия) выдаются по подтверждённому трек-рекорду,
а не сразу; границы persona непреодолимы на любом уровне.
## License
MIT — концепт вдохновлён Animus (MIT, Craig Tuttle).