diff --git a/memory/state.template.json b/memory/state.template.json index 96a436c..07e41e8 100644 --- a/memory/state.template.json +++ b/memory/state.template.json @@ -1,6 +1,6 @@ { "version": 2, - "updatedAt": "2026-11-07T05:58:15.566Z", + "updatedAt": "2026-11-07T05:58:58.606Z", "entries": [ { "id": "0f90dcf0-5d43-4ca4-bf86-ad8b3ee20382", @@ -269,6 +269,223 @@ "lastRecalled": null, "recallCount": 0, "bytes": 1880 + }, + { + "id": "cb490030-d6ed-4257-adbf-aa3950317f4c", + "track": "agent", + "scope": "user-global", + "workspaceKey": "", + "key": "project_dsh_memory", + "text": "Проект dsh-memory: unified Chrome-расширение. Замена DSH PRO и dsmemory (оба больше не нужны). Версия 1.0.0 — функционально завершено, дальше косметика и расширение.\n\nМост 127.0.0.1:8766, zero npm deps, Node.js. SSE основной путь исполнения вызовов (текст из XHR, минуя DOM-рендерер), DOM резервный (только если SSE сломался после обновления DeepSeek).\n\nПамять v2: Entry-модель, директивы scope workspace, служебная папка .dsh-memory/ в workspace (logs, outputs, notes). Инъекция протокола в первый ход нового чата автоматически. STG-кнопка в настройках панели — принудительная инъекция в старые чаты.\n\nЭтапы 1-5 закрыты. Этап 6 (калибровка контекста) отложен до накопления статистики по чатам. README содержит установку для новичка на Windows, описание протокола и команд, интерфейс панели, режимы моста, заимствования.", + "importance": "called", + "tags": [ + "project", + "architecture", + "dsh-memory" + ], + "state": null, + "chatId": "", + "version": 2, + "createdAt": "2026-11-03T03:40:13.183Z", + "updatedAt": "2026-11-03T07:44:27.175Z", + "lastRecalled": null, + "recallCount": 0, + "bytes": 1317 + }, + { + "id": "ced4efed-0c7a-4e5a-a717-4efaf4ad1b9a", + "track": "agent", + "scope": "user-global", + "workspaceKey": "", + "key": "tech_stack_dsh_memory", + "text": "Стек dsh-memory: Node.js без зависимостей, Chrome MV3 extension. MAIN world XHR hook в injected/chat-logger.js перехватывает chat/completion, extractAssistant отделяет thinking от answer. ISOLATED content/content.js парсит вызовы, отправляет в мост через bridge-client.js. Мост: bridge/server.js HTTP, bridge/tools.js инструменты, bridge/memory.js память, bridge/state-dir.js служебная папка, bridge/guard.js безопасность путей. Хранилище: memory/state.json (runtime, gitignore) + memory/state.template.json (в git).", + "importance": "called", + "tags": [ + "tech", + "stack", + "dsh-memory" + ], + "state": null, + "chatId": "", + "version": 1, + "createdAt": "2026-11-03T03:40:16.201Z", + "updatedAt": "2026-11-03T03:40:16.201Z", + "lastRecalled": null, + "recallCount": 0, + "bytes": 653 + }, + { + "id": "c075b839-41ed-499e-bdeb-95539477e3f4", + "track": "user", + "scope": "user-global", + "workspaceKey": "", + "key": "pref_language_style", + "text": "Пользователь: русский язык. Технический стиль, минимум воды, конкретика. Не терпит поспешных выводов и гаданий. Требует проверки кода фактами, а не по памяти. Ценит честные ответы 'не знаю' больше чем догадки. Все объяснения с обоснованием, а не просто результат.", + "importance": "called", + "tags": [ + "pref", + "communication" + ], + "state": null, + "chatId": "", + "version": 1, + "createdAt": "2026-11-03T03:40:19.219Z", + "updatedAt": "2026-11-03T03:40:19.219Z", + "lastRecalled": null, + "recallCount": 0, + "bytes": 476 + }, + { + "id": "400aecd2-7a3c-46c8-b5e4-ea0039ee3816", + "track": "user", + "scope": "user-global", + "workspaceKey": "", + "key": "pref_workflow_discipline", + "text": "Рабочий процесс: сначала план, потом шаги с согласованием. После блока работы — коммит, после этапа — push. Не делать поспешных выводов о лимитах контекста. Проверять факты в коде, не по памяти. При сомнении спрашивать. Тесты и проверки важнее скорости.", + "importance": "called", + "tags": [ + "pref", + "workflow" + ], + "state": null, + "chatId": "", + "version": 1, + "createdAt": "2026-11-03T03:40:29.451Z", + "updatedAt": "2026-11-03T03:40:29.451Z", + "lastRecalled": null, + "recallCount": 0, + "bytes": 456 + }, + { + "id": "54fb4b87-0114-4d1f-a60a-cc5cebfedeb8", + "track": "agent", + "scope": "user-global", + "workspaceKey": "", + "key": "pitfall_mjs_escaping", + "text": "В content .mjs не использовать обратный слэш + n для переводов строк. Многоуровневое экранирование в JSON-маркере (четыре бэкслэша) ломает JSON.parse, парсер молча пропускает вызов. Симптом: packet.sseCalls больше parsedCount. Использовать String.fromCharCode(10) или массив строк с .join(sep). Для литерального бэкслэша — String.fromCharCode(92).", + "importance": "called", + "tags": [ + "pitfall", + "escaping", + "mjs" + ], + "state": null, + "chatId": "", + "version": 2, + "createdAt": "2026-11-03T03:40:32.461Z", + "updatedAt": "2026-11-03T03:41:22.376Z", + "lastRecalled": null, + "recallCount": 0, + "bytes": 537 + }, + { + "id": "fbbc5ef3-e6bc-43ed-8d1c-e2631b2b798e", + "track": "agent", + "scope": "user-global", + "workspaceKey": "", + "key": "pitfall_crlf_mixed", + "text": "Смешанные переводы строк (часть CRLF, часть LF) в файле ломают патчи по номерам строк. Индексы съезжают, guard ABORT при корректном содержимом. Нормализовать к LF перед патчем (split CRLF join LF), писать обратно однородным LF. Проверять счётчики CR и LF до патча.", + "importance": "called", + "tags": [ + "pitfall", + "crlf", + "patching" + ], + "state": null, + "chatId": "", + "version": 1, + "createdAt": "2026-11-03T03:40:35.473Z", + "updatedAt": "2026-11-03T03:40:35.473Z", + "lastRecalled": null, + "recallCount": 0, + "bytes": 438 + }, + { + "id": "a559d2bb-6a79-43fd-a562-e4a71a594e01", + "track": "agent", + "scope": "user-global", + "workspaceKey": "", + "key": "pitfall_double_patch", + "text": "Патч применяется дважды из-за дублирования вызовов рендерером. Симптом: в файле дубли строк или блоков после одного запуска. Anchor патчера не должен присутствовать в тексте замены. После запуска прогнать патчер второй раз: должно быть SKIP или fixed 0. Защита в самом патчере: if indexOf marker already present then exit.", + "importance": "called", + "tags": [ + "pitfall", + "patching" + ], + "state": null, + "chatId": "", + "version": 1, + "createdAt": "2026-11-03T03:40:46.974Z", + "updatedAt": "2026-11-03T03:40:46.974Z", + "lastRecalled": null, + "recallCount": 0, + "bytes": 535 + }, + { + "id": "bef39421-5921-445a-8bb4-2e918d6c7805", + "track": "agent", + "scope": "user-global", + "workspaceKey": "", + "key": "decision_state_dir", + "text": "Папка .dsh-memory/ заменяет .dsh-pro/. Единая служебная папка в корне workspace: logs/ (execution-log.jsonl), outputs/ (большие результаты, git diff), notes/ (чекпоинты, протоколы, README с шаблоном). Создаётся мостом при старте для каждого allowedRoots и при каждом logExecution через ensureStateDir. В .gitignore проекта. Модуль bridge/state-dir.js — единая точка путей. DSH PRO и dsmemory больше не нужны.", + "importance": "called", + "tags": [ + "decision", + "architecture", + "dsh-memory" + ], + "state": null, + "chatId": "", + "version": 1, + "createdAt": "2026-11-03T03:40:49.982Z", + "updatedAt": "2026-11-03T03:40:49.982Z", + "lastRecalled": null, + "recallCount": 0, + "bytes": 586 + }, + { + "id": "df427310-12de-4260-bb00-033a6758944d", + "track": "agent", + "scope": "user-global", + "workspaceKey": "", + "key": "decision_dom_sse", + "text": "SSE основной путь: текст из XHR через extractAssistant, минуя DOM-рендерер. Нет линкификации, многострочный oldText работает, любой юникод и пунктуация. Лимит 10 вызовов. DOM резервный: линкификация доменов, многострочный edit падает, лимит 3-4 вызова. Переключатель в панели, ключ storage dshmem-transport, значения dom/sse. При падении DOM сравнивать packet.text с dom-parse-fail.msgText.", + "importance": "called", + "tags": [ + "decision", + "modes", + "dsh-memory" + ], + "state": null, + "chatId": "", + "version": 1, + "createdAt": "2026-11-03T03:40:52.990Z", + "updatedAt": "2026-11-03T03:40:52.990Z", + "lastRecalled": null, + "recallCount": 0, + "bytes": 608 + }, + { + "id": "117b3835-5042-46b9-974f-6ef0691d7d76", + "track": "agent", + "scope": "workspace", + "workspaceKey": "V:/Site", + "key": "pitfall_git_push", + "text": "После коммитов в dsh-memory всегда делать git push origin master — иначе коммиты остаются локально и не видны в веб-репозитории git.starvery.ru. git status 'ahead N' = не отправлено.", + "importance": "called", + "tags": [ + "git", + "push", + "dsh-memory" + ], + "state": null, + "chatId": "", + "version": 1, + "createdAt": "2026-11-06T02:17:17.727Z", + "updatedAt": "2026-11-06T02:17:17.727Z", + "lastRecalled": null, + "recallCount": 0, + "bytes": 273 } ], "chats": {}