Skip to content

Releases: stas130286-blip/dsh-brainagent

v0.9.19 — фильтрация шумных корреляционных инсайтов

Choose a tag to compare

@stas130286-blip stas130286-blip released this 25 Aug 22:30

Исправлено

  • Корреляционные инсайты больше не рождаются из структурного шума. Все модули получают одну и ту же награду одновременно (credit assignment делится поровну), поэтому попарная корреляция наград всегда была r=1.00 — чистой формальностью. Такие пары теперь пропускаются, и память не заполняется записями вида «Modules X and Y are strongly correlated (r=1.00)», которые не несут информации и могли становиться поводом для автономной инициативы агента.
  • Реально расходящиеся модули (включая анти-корреляции) по-прежнему отслеживаются.

Добавлено

  • correlation-insights.test.ts: синхронные одинаковые награды не дают инсайтов; антифазные модули дают.

Проверки

  • tsc --noEmit — чисто
  • 862/862 тестов зелёные (58 файлов)
  • L3 security review — 0 замечаний

Эта версия завершает тройку источников шума: ложные «Language mismatch» (v0.9.17), проактивные сообщения сразу после пользователя (v0.9.18), мусорные r=1.00 инсайты (v0.9.19).

v0.9.14 — качество процедурной памяти, кросс-сессионный recall, пэйсинг в плагине

Choose a tag to compare

@stas130286-blip stas130286-blip released this 25 Aug 18:48

Highlights (v0.9.10 → v0.9.14)

  • Cross-session recall fixed (v0.9.12): top user_info facts are pinned into every recall + explicit Memory-Usage instructions — the agent no longer answers “I don't know you” to «что ты знаешь обо мне?».
  • Goal-round pacing built into the plugin (v0.9.11): no more host source patching needed; armed host goals are paused/resumed through public seams only.
  • Procedural memory quality (v0.9.13–v0.9.14): only real multi-step procedures are stored, placeholder steps are filtered, and duplicate procedures (LLM trigger paraphrases) are merged — including cleanup of already-accumulated junk at startup.
  • Long time-reminders fixed (v0.9.10): “remind me in a month” goals no longer expire silently.

Battle-tested live in the dsh Web UI: cross-session memory recall, timed reminders with autonomous delivery, procedural dictation → reuse in a fresh session, prompt-injection refusal. 850/850 tests, errors: {}.

Install:

npx @deepseek-ai/dsh plugin --profile web add github:stas130286-blip/dsh-brainagent
npx @deepseek-ai/dsh web

0.9.14 - 2026-08-25

Дедупликация процедур по набору шагов.

  • Дедупликация по отпечатку шагов (storeWorkflow): записи с одинаковым набором шагов сливаются, даже если LLM сформулировал триггер иначе (боевой тест v0.9.13: идентичная диктовка создала вторую запись из-за парафраза триггера).
  • Слияние накопленных дублей при старте (mergeDuplicateWorkflows): оставляет самую используемую запись, суммирует usageCount, берёт лучший successRate; идемпотентно.
  • Тесты: +4 (846 → 850), все проходят.

0.9.13 - 2026-08-25

Качество процедурной памяти: стор больше не засоряется «псевдопроцедурами».

  • Гейт сохраняемости (isStorableProcedure): в стор попадают только процедуры с ≥2 реальными уникальными шагами. Одиночные команды («Action: ANY», «Действие: напоминание») больше не сохраняются — в боевом сторе 14 из 16 записей были таким мусором.
  • Фильтр шагов (isMeaningfulStep): плейсхолдеры («...», «any», «шаг 1», «TODO») и повторы триггера отбрасываются и в regex-, и в LLM-извлечении.
  • Промпт LLM-извлечения: шаги берутся только из текста сообщения (без выдумывания); одиночная команда без последовательности — не процедура.
  • Чистка стора при старте (pruneWeakWorkflows): слабые записи (<2 содержательных шагов) удаляются из процедурного стора и векторного индекса; вызывается в инициализации плагина, идемпотентна.
  • Тесты: +15 (831 → 846), все проходят.

0.9.12 - 2026-08-25

Память о пользователе больше не теряется на вопросе «что ты знаешь обо мне?».

Боевое тестирование перед заявкой в registry выявило: инъекция памяти
работает (метрики), но модель отвечала «я ничего не знаю о тебе» или
вспоминала 2 из 3 фактов. Две причины, обе закрыты:

  1. Recall чисто релевантен: identity-факты (имя и т.п.) могли не попасть
    в top-N при лексическом fallback (эмбеддинг-бэкенд недоступен).
    Теперь топ-3 user_info-факта по confidence закрепляются в начале
    semantic-recall каждого цикла (memory-identity.ts, pinIdentityFacts)
    и попадают в секцию Known Facts независимо от запроса.
  2. Инструкции противоречили друг другу: Honesty Rules требовали «честно
    сказать, что не помнишь», и модель отказывалась от уже влитых фактов.
    Добавлен блок Memory Usage («факты выше — твоя реальная память,
    используй их уверенно»), правило честности уточнено: отрицать можно
    только то, чего в блоке фактов нет.

+8 тестов: 831 тест.

0.9.11 - 2026-08-25

Пейсинг гол-раундов встроен в сам плагин.

Реестровая версия dsh-goal-round-driver не имеет пейсинга: armed-цель
хоста получает инжект раунда при каждом переходе агента в idle
(несколько автономных раундов в минуту). Раньше это лечилось патчем
исходников моно-репо (host-patches/), который на npx/registry-установках
не работает. Теперь пейсер живёт внутри плагина (goal-round-pacer.ts),
используя только публичные швы хоста:

  • перехватывает agent/inbox/inserted и снимает преждевременные раунды
    (source.kind === "goal", round > 0) из inbox;
  • ставит цель на паузу сервисом целей и возвращает её по истечении окна
    тишины — раунд откладывается, а не теряется;
  • окно: DSH_GOAL_ROUND_MIN_IDLE_MS (по умолчанию 180000 мс; 0 — выключить);
  • корректен и на уже пропатченном хосте (двойной пейсинг безвреден).

+18 тестов: 823 теста. На собственные цели BrainAgent не влияет — они
живут в отдельном сторе и доставляются планировщиком goal-reminder.

0.9.10 - 2026-08-25

Напоминания «через месяц» больше не умирают в тишине.

Два боевых дефекта долгих time-напоминаний, найдены живым тестом
на переустановленном dsh:

  1. TTL time-цели был фиксированным (дефолт 24ч) — цель «напомни
    через месяц» молча истекала задолго до триггера. Теперь при
    экстракции TTL time-цели вычисляется как время до триггера
    • час буфера (но не меньше дефолтного TTL) — goal-stack.ts.
  2. hasGoalIntent не ловил форму «Поставь мне напоминание…» и
    краткое «напомни» без «мне» — экстракция целей не запускалась,
    и модель лишь обещала напоминание, не создавая цель. Паттерн
    расширен (поставь напоминание / напоминание на|через|о|об|про /
    напомни(те)( мне)? / remind).

Проверено вживую: 3-минутный таймер, поставленный в сессии A,
сработал в другой сессии B (доставка pickAgent по последней
активности); месячная цель создана с триггером +31 день и TTL 745ч.

+4 проверки (goal-intent.test.ts): 805 тестов, 52 файла.

v0.9.9 — напоминание может действовать (инструменты по времени)

Choose a tag to compare

@stas130286-blip stas130286-blip released this 25 Aug 01:27

Что нового

Напоминание может не только напоминать, но и действовать.
Уточнение правила из v0.9.8: запрет касается только самодельных
таймеров. Когда время настало, агент вправе полностью выполнить то,
о чём просил пользователь — включая запуск инструментов
(«запусти проверку диска в 9:00»). Ожидание ведёт внутренний
планировщик, само действие — агент.

Изменения

  • prefrontal-cortex.ts: в секции ## Reminders добавлена строка
    «When the reminder time arrives... including using your tools».

Проверка

  • 805 unit-тестов, 52 файла (+1: prefrontal-context.test.ts)
  • Боевые тесты: память между сессиями работает (факт о сервере
    «Атлас» вспомнен в новом чате), напоминание доставляется
    в самую свежую активную сессию, дублей нет.

Установка

# из корня monorepo dsh — патч хоста применится автоматически
pnpm install
# либо в существующей копии brainagent:
node host-patches/apply-goal-round-pacing.cjs [путь-к-dsh]

v0.9.8 — фикс дубля напоминаний (боевой тест)

Choose a tag to compare

@stas130286-blip stas130286-blip released this 25 Aug 01:06

Что нового

Фикс дубля напоминаний — найдено боевым тестом.
На «напомни через 3 минуты» напоминание приходило дважды:
сначала от внутреннего планировщика BrainAgent, потом ещё раз
от таймера, который модель завела сама (фоновая Pwsh-задача).
Каждый дубль — отдельный LLM-вызов и лишние деньги.

Теперь в контекстном блоке каждого цикла есть секция ## Reminders:
напоминание уже ведёт внутренний планировщик, собственные таймеры,
sleep-команды и фоновые задачи для напоминаний запрещены.

Изменения

  • prefrontal-cortex.ts: секция ## Reminders в assembleContext
    входит в каждый контекстный блок (~25 входных токенов, кэшируются).

Проверка

  • 804 unit-теста, 52 файла (+2 новых: prefrontal-context.test.ts)
  • Бандл: 629.4kb, smoke-прогоны OK
  • Боевой тест: память («Атлас»/IP вспомнил), эмпатия, ориентация
    во времени (вторник, 25 августа) — всё отработало.

Установка

# из корня monorepo dsh — патч хоста применится автоматически
pnpm install
# либо в существующей копии brainagent:
node host-patches/apply-goal-round-pacing.cjs [путь-к-dsh]

v0.9.7 — напоминания звонят и в тишине; патч хоста ставится сам

Choose a tag to compare

@stas130286-blip stas130286-blip released this 25 Aug 00:24

Что нового

Напоминания по времени теперь реально звонят — даже в тишине.
Раньше «напомни через 10 минут» никогда не срабатывало, пока пользователь
молчал: time-цели проверялись только внутри Vital Impulse по сигналам шины,
а фоновый тик был убран ради анти-спам-борьбы. Теперь напоминания проверяет
отдельный фоновый таймер (по умолчанию раз в 30 с).

Патч хоста ставится сам. Анти-спам-патч goal-round-driver
(host-patches/) применяется автоматически при установке пакета
(postinstall) — отдельный ручной шаг больше не нужен, забытый патч
не сломает агента.

Изменения

  • goal-reminder.ts (новый): фоновый планировщик time-напоминаний —
    интервал 30 с по умолчанию, настраивается BRAINAGENT_REMINDER_CHECK_MS
    (минимум 5 с); ошибки проверки не убивают таймер.
  • Приоритетная доставка напоминаний: маркер <autonomy-priority>
    напоминание проходит мимо loop-breaker и 10-минутного минимума-гэпа
    проактивных сообщений (напоминание — обязательство, а не спонтанный
    выход на связь).
  • host-patches/postinstall.cjs: при установке сам находит корень dsh
    и применяет патч хоста идемпотентным скриптом; установку никогда
    не роняет.
  • Защита: если хост всё же без патча и спамит гол-раундами
    (> 2 за минуту), агент один раз предупреждает в лог и называет
    команду исправления.

Проверка

  • 802 unit-теста, 51 файл (+9 новых: goal-reminder.test.ts)
  • Бандл: 629.0kb, smoke-прогоны OK

Установка

# из корня monorepo dsh — патч хоста применится автоматически
pnpm install
# либо в существующей копии brainagent:
node host-patches/apply-goal-round-pacing.cjs [путь-к-dsh]

v0.9.6 — патч хоста в репозитории, формат дат DD.MM.YYYY

Choose a tag to compare

@stas130286-blip stas130286-blip released this 25 Aug 00:02

Что нового

Патч хоста — теперь часть репозитория; запасной формат дат.

host-patches/

  • Анти-спам-патч хостового goal-round-driver (из v0.9.5) зафиксирован
    в репозитории: идемпотентный скрипт host-patches/apply-goal-round-pacing.cjs.
    После обновления dsh достаточно выполнить его заново — повторный запуск
    ничего не меняет, при несовместимых изменениях хоста скрипт
    останавливается без правок. Больше не теряется при переустановке dsh.

Парсер дат

  • parseTimeTriggerCondition() дополнительно понимает европейский формат
    DD.MM.YYYY[, HH:MM[:SS]] (боевой кейс: LLM отдала его вместо ISO)
    с защитой от несуществующих дат и времени («31.02.2026», «25:00»).

Тесты

+3 теста (goal-time): 793 теста, 50 файлов, tsc чистый.

Полные детали — в CHANGELOG.md и коммите этого релиза.

v0.9.5 — календарное время и анти-спам гол-раундов

Choose a tag to compare

@stas130286-blip stas130286-blip released this 24 Aug 23:32

Что нового

Ориентация во времени и анти-спам гол-раундов.

Календарное время для агента

  • В каждый цикл агенту инжектируются точные локальные дата и время
    (день недели, число, месяц, год, часы:минуты) — хост dsh не передаёт
    модели календарное время, и сроки вида «эта неделя»/«завтра» повисали
    в воздухе.
  • Извлечение целей теперь знает текущую дату: time-триггеры LLM отдаёт
    ISO-датой (2026-08-28T09:00), плагин конвертирует её в epoch-мс.
    Мусорные условия и даты до 2000 года отклоняются.

Анти-спам автономных гол-раундов (патч хоста dsh)

  • goal-round-driver допускает раунд только после непрерывного idle
    агента ≥ DSH_GOAL_ROUND_MIN_IDLE_MS (по умолчанию 3 минуты, 0
    прежнее поведение). До фикса цель-напоминание порождала четыре раунда
    за минуту.

Тесты

+8 тестов (goal-time, clock-context): 790 тестов, 50 файлов, tsc чистый.

Полные детали — в CHANGELOG.md и коммите 8b13d07.

v0.9.4 — Goal Stack: явные цели извлекаются сразу

Choose a tag to compare

@stas130286-blip stas130286-blip released this 24 Aug 23:10

v0.9.4 — Goal Stack: явные цели извлекаются сразу

Найдено полным аудитом способностей (боевой тест h6): когда
пользователь говорил «планирую на этой неделе две задачи…», план
попадал в семантическую память, а Goal Stack оставался пустым.

Причина

LLM-извлечение целей запускалось строго раз в extractionInterval
(10) реплик и анализировало ТОЛЬКО текущую реплику. Цель,
сформулированная в «не тот» цикл, терялась для Goal Stack.

Фикс

  • goal-stack.ts: hasGoalIntent() — детектор явного целеполагания:
    «планирую…», «запланировал…», «моя цель…», «поставь цель…»,
    «напомни…», «не забудь…», «хочу успеть…», «задачи на
    неделю/сегодня/завтра…», plan/goal/todo/remind me.
    Защита от ложных срабатываний: «планшет» и «goalkeeper» не
    срабатывают (границы слов).
  • cycles.ts: при явном намерении извлечение целей запускается
    сразу, не дожидаясь периодического цикла. Периодика раз в
    10 реплик сохранена как фоновый механизм для неявных целей.

Проверка

  • 782 unit-теста, 48 файлов — все зелёные.
  • Новый goal-intent.test.ts: 6 тестов на русские/английские
    формулировки и ложные срабатывания.

v0.9.3 — процедурная память: дедупликация, шаги «1) 2) 3)», фильтр инъекций хоста

Choose a tag to compare

@stas130286-blip stas130286-blip released this 24 Aug 21:02

Что нового

Длинный боевой прогон: найдены и закрыты четыре дефекта процедурной памяти и контура обучения.

Процедурная память

  • storeWorkflow дедуплицирует по триггеру — повторное извлечение усиливает существующую запись вместо плождения копий (боевой тест: 11 копий одного триггера).
  • Процедуры без шагов (вопросы вида «как у тебя дела») больше не сохраняются и не попадают в инъекции пустыми «Learned Workflow».
  • Экстрактор распознаёт нумерованные перечисления «1) … 2) … 3)» — так пользователи диктуют процедуры.

Контур обучения

  • Наблюдатель user/message учится только на прямых репликах человека (source.kind === 'user'). dsh вбрасывает runtime-context снапшоты, каталог скиллов и goal-продолжения как user-role сообщения; снапшот, пришедший в тёрне после реплики пользователя, перезаписывал цикл — обучающее сообщение не доходило до контура обучения.
  • message-guard: текстовые маркеры runtime-context снапшотов («Current runtime context…») — защита в глубину.

Боевой тест

Продиктованная процедура «подготовить отчёт» сохранилась, и в НОВОЙ сессии агент выполнил ровно три шага без уточняющих вопросов — по инъекции Learned Workflow. Кросс-сессионная семантическая память (факты «синий», «Нейроклав») подтверждена ранее.

Проверки

  • tsc без ошибок, 776 unit-тестов (47 файлов), smoke-phase2/3 OK.
  • Обновлены README и CHANGELOG.

v0.9.2 — каталог скиллов dsh не попадает в память

Choose a tag to compare

@stas130286-blip stas130286-blip released this 24 Aug 20:15

Фикс: каталог скиллов dsh больше не попадает в память

Боевой тест выявил второй канал самоотравления: пакет dsh tool-skill
вставляет в сессию каталог скиллов как самостоятельное user-сообщение
в обёртке <system-reminder>. Контур обучения BrainAgent обрабатывал
его как реплику пользователя — эпизодическая память сохраняла
«разговор о скиллах», а семантическая извлекала из каталога «факты».

Что исправлено

  • Новый фильтр isHarnessSystemMessage в message-guard.ts:
    сообщения, начинающиеся с <system-reminder>, признаны служебными
    сообщениями хоста (по аналогии с фильтром собственных инъекций).
  • Наблюдатель сессии пропускает их до startCycle и контуров обучения.

Итоги боевого теста

  • Память подтверждена: факты «любимый цвет — синий» и «проект
    Нейроклав» запомнены и точно воспроизведены на проверочном вопросе.
  • Инъекции: 2 цикла, в среднем ~842 токена, перерасхода бюджета нет.
  • После фикса служебные сообщения хоста в память не попадают.

Проверки

  • 770/770 теста, 46 файлов (+3 новых теста); tsc без ошибок;
    esbuild-бандл 618.8kb; smoke-phase2/3 ОК.