v0.9.14 — качество процедурной памяти, кросс-сессионный recall, пэйсинг в плагине
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 web0.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 фактов. Две причины, обе закрыты:
- Recall чисто релевантен: identity-факты (имя и т.п.) могли не попасть
в top-N при лексическом fallback (эмбеддинг-бэкенд недоступен).
Теперь топ-3 user_info-факта по confidence закрепляются в начале
semantic-recall каждого цикла (memory-identity.ts, pinIdentityFacts)
и попадают в секцию Known Facts независимо от запроса. - Инструкции противоречили друг другу: 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:
- TTL time-цели был фиксированным (дефолт 24ч) — цель «напомни
через месяц» молча истекала задолго до триггера. Теперь при
экстракции TTL time-цели вычисляется как время до триггера- час буфера (но не меньше дефолтного TTL) — goal-stack.ts.
- hasGoalIntent не ловил форму «Поставь мне напоминание…» и
краткое «напомни» без «мне» — экстракция целей не запускалась,
и модель лишь обещала напоминание, не создавая цель. Паттерн
расширен (поставь напоминание / напоминание на|через|о|об|про /
напомни(те)( мне)? / remind).
Проверено вживую: 3-минутный таймер, поставленный в сессии A,
сработал в другой сессии B (доставка pickAgent по последней
активности); месячная цель создана с триггером +31 день и TTL 745ч.
+4 проверки (goal-intent.test.ts): 805 тестов, 52 файла.