"text":"МЕХАНИЗМ ПАМЯТИ dsh-memory v2\n\nСлои. Protocol (track agent, importance always) инжектится в первый ход. Session (directive scope workspace) инжектится в первый ход текущего чата. Reference и Archive — только по запросу.\n\nЧто инжектится всегда: все track agent + importance always, плюс directive_ scope workspace для текущего chatId. Fingerprint: если тот же набор уже в истории чата — пропуск всего блока. Метка DSHM:SKILLS fingerprint.\n\nЗапросы через /memory/query:\nlist track scope importance since limit — items с preview и bytes, totalBytes, matched\nget ids — items с content, totalBytes\nrecent since — items, totalBytes\nunread chatId — новее lastInjectAt для чата\nsearch query track — plain substring, items, totalBytes\nbudgets — used по track и scope, alwaysCount, лимиты\nwrite op add replace remove — ok, id, version\n\nСервер ВСЕГДА отдаёт totalBytes в meta ДО контента. Модель видит объём и решает: взять всё, взять по ids, взять preview, отложить.\n\nТаксономия ключей: user_ (факты о пользователе), project_ (проекты), directive_ (правила), pref_ (привычки), tech_ (стек), interest_. Префикс задаёт группу, программа не решает релевантность.\n\nЛимиты первой итерации: always записей 10, tags 5 на запись по 32 символа, директив на чат 5, preview 200 символов. Калибровать по обратной связи.\n\nОбновление факта: replace по тому же id, не дубликат. AUTHENTIC EXTRACTION ONLY: только явно сказанное пользователем. NEVER cite memory tags в ответе.\n\nДИРЕКТИВЫ: op directives chatId state active|done|archive all. Директива = Entry с key directive_*, scope workspace, поле state. Активные инжектятся автоматически. Жизненный цикл: add с state active, replace state done когда шаг выполнен, replace state active чтобы вернуть из архива, state archive для окончательно выполненных. Привязка к чату через chatId (пусто = все чаты). Лимит активных директив на чат: 5.",
"text":"МЕХАНИЗМ ПАМЯТИ dsh-memory v2\n\nСлои. Protocol (track agent, importance always) инжектится в первый ход. Session (directive scope workspace) инжектится в первый ход текущего чата. Reference (called) и Archive (state archive) только по запросу.\n\nЧто инжектится всегда: все track agent + importance always, плюс directive_ scope workspace state active для текущего chatId с проверкой workspaceKey. Fingerprint: если тот же набор уже в истории чата — пропуск всего блока.\n\nЗапросы через dsh_memory (op):\nlist track scope importance state since limit — items с preview и bytes, totalBytes, matched\nget ids — items с content, totalBytes\nrecent since — items\nunread chatId — новее lastInjectAt\nsearch query track — plain substring, totalBytes\ndirectives chatId state active|done|archive|all — директивы\nbudgets — used по track и scope, alwaysCount, лимиты\nadd entry — новая запись, entry включает track scope workspaceKey key text importance tags\nreplace id text tags importance state chatId — правка\nremove id — удаление\n\nСервер ВСЕГДА отдаёт totalBytes в meta ДО контента. Модель видит объём и решает: взять всё, взять по ids, взять preview, отложить.\n\nТаксономия ключей: user_ факты о пользователе, project_ проекты, directive_ правила и шаги, pref_ привычки, tech_ стек, interest_ интересы, pitfall_ грабли и обходы, decision_ архитектурные решения. Префикс задаёт группу, программа не решает релевантность.\n\nЛимиты: always записей 10, tags 5 на запись по 32 символа, директив на чат 5, preview 200. Калибровать по обратной связи.\n\nОбновление факта: replace по тому же id, не дубликат. AUTHENTIC EXTRACTION ONLY: только явно сказанное пользователем. NEVER cite memory tags в ответе.",