# 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+) - [ ] Sleep & energy (циркадный ритм) - [ ] Web UI (persona setup) - [ ] Sleep & energy (циркадный ритм) - [ ] Web UI (persona setup) ## License MIT — концепт вдохновлён Animus (MIT, Craig Tuttle).