Commit graph

4 commits

Author SHA1 Message Date
Simbiot Harness
935c75d078 fix(spend): BudgetSpent пишется воркером инкрементально + живой usage из 9router (t-260929170544-adebea)
Два корня пустого spend за час:
1) usage-добыча в воркере смотрела m["message"]["usage"] — у strands usage живёт
   в message["metadata"]["usage"] (event_loop.py), поэтому usage всегда был пуст
   (тот же баг, что уже чинили в runtime._extract_usage).
2) BudgetSpent писал scheduler ПОСЛЕ успешного возврата воркера — таймаут убивал
   воркер раньше записи, spend терял весь тик.
3) Модель: strands_harness строит OpenAIResponsesModel, у 9router /responses — шим
   без usage (проверено: response.completed приходит без usage; non-stream возвращает
   chat-completion-объект). Перевёл на OpenAIModel (chat/completions, include_usage) —
   usage приходит и с инструментами, и в reasoning-режиме.

Фикс:
- воркер пишет BudgetSpent ИНКРЕМЕНТАЛЬНО после каждого модельного вызова
  (hook на MessageAddedEvent, assistant с metadata.usage, дедуп по объекту) —
  таймаут теряет максимум хвост текущего вызова, не весь тик;
- _extract_usage: корректная структура + суммирование по шагам (model_calls);
- scheduler дублирует запись только если воркер не смог разобрать usage;
- события помечены source: worker|runner и trace_id тика.

Проверено: дельты воркера == итоговый usage тика (39-шаговый тик сходится);
убитый по таймауту тик сохраняет все завершённые шаги; spend виден в
read model/dashboard.
2026-09-29 20:20:15 +00:00
simbiot-min
ed502650f4 feat: эскалации (min→hour→day) + фикс хвоста событий в CLI
Часть 1 (часовой уровень, задача t-260929155421-9f7bff):
- EscalationRaised/Acknowledged в ES-спину, проекция escalations
- CLI: escalate / escalations / escalation-ack
- уровни видят открытые эскалации в контексте; scheduler перезапускает
  критическую эскалацию сразу (не дожидаясь границы такта)

Часть 2 (минутный, этот тик):
- fix(cli): 'events -n N' показывал первые N событий вместо хвоста стора
  (README обещает хвост) — теперь хвост; --after N — от id N вперёд
- + es.count_events()
2026-09-29 16:13:23 +00:00
Simbiot Harness
94cc921ccd feat: Telegram-инбокс — сообщения Алекса как события
- harness/tg_inbox.py: long-polling поллер (@juno42bot) + send_reply
- события MessageReceived/ReplySent/MessageIgnored (агрегат inbox)
- проекция inbox в read model (кап 100)
- контекст минутного тика: входящие ждущие ответа + мандат триажа
- cli.py tg-reply: Telegram-отправка + ReplySent закрывает входящее
- systemd simbiot-harness-tg.service
- E2E: «йоу» от Алекса → минутный тик ответил в TG + дайджест в сторе
2026-09-29 15:52:46 +00:00
Simbiot Harness
b60439152b Simbiot Harness v0.1: тактовая лестница на Strands + CQRS/ES-спина
- harness/es.py: append-only event store + проекции (образец — кооп-портал)
- harness/levels.py: уровни 1с/1м/1ч/1д, контекст ∝ масштабу
- harness/scheduler.py: уровневые потоки, идемпотентные тики, absorbed-стабы
- harness/isolated_runner.py + _llm_worker.py: LLM-тик в сабпроцессе
  (глобальный asyncio-рантайм Strands не переживает 2+ create_harness)
- cli.py: init/task/tasks/status/events + requeue (написан самим минутным агентом)
- 9router: отдельный ключ sk-simbiot, модель auto (glm-5.3 первым)
2026-09-29 15:28:50 +00:00