dsh-desktop-kit 2.2.0 → 2.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/README.md +113 -27
  3. package/client.js +3121 -32
  4. package/docs/AGENT-HARNESS.md +144 -0
  5. package/docs/ARCHITECTURE.md +38 -7
  6. package/docs/COMPATIBILITY.md +5 -3
  7. package/docs/DEVELOPMENT.md +56 -0
  8. package/docs/INSTALL.md +20 -11
  9. package/docs/LAPTOP-INSTALL.md +96 -0
  10. package/docs/ROADMAP-3.0.md +353 -0
  11. package/docs/ROADMAP.md +1 -1
  12. package/docs/SUBAGENTS.md +25 -0
  13. package/docs/TEST-0.2.2.md +6 -6
  14. package/docs/TEST-2.3.0.md +49 -0
  15. package/docs/TEST-2.7.2.md +46 -0
  16. package/docs/TOKENS.md +2 -2
  17. package/docs/TROUBLESHOOTING.md +27 -0
  18. package/docs/UI-QA.md +28 -0
  19. package/docs/images/peak-toast-peak.png +0 -0
  20. package/docs/images/peak-toast-soon.png +0 -0
  21. package/docs/preview/peak-toast.html +155 -0
  22. package/doctor.ps1 +122 -0
  23. package/index.js +18 -1
  24. package/install.ps1 +99 -0
  25. package/package.json +29 -6
  26. package/plugins/dsh-agent-extensions/README.md +99 -0
  27. package/plugins/dsh-agent-extensions/index.js +167 -0
  28. package/plugins/dsh-agent-extensions/lib/agents.js +76 -0
  29. package/plugins/dsh-agent-extensions/lib/checkpoints.js +103 -0
  30. package/plugins/dsh-agent-extensions/lib/commands.js +255 -0
  31. package/plugins/dsh-agent-extensions/lib/hooks.js +182 -0
  32. package/plugins/dsh-agent-extensions/lib/policy.js +84 -0
  33. package/plugins/dsh-agent-extensions/lib/project.js +144 -0
  34. package/plugins/dsh-agent-extensions/lib/scaffold.js +151 -0
  35. package/plugins/dsh-agent-extensions/package.json +9 -0
  36. package/plugins/dsh-browser-qa/README.md +221 -0
  37. package/plugins/dsh-browser-qa/cordis.patch.yml +4 -0
  38. package/plugins/dsh-browser-qa/index.js +165 -0
  39. package/plugins/dsh-browser-qa/lib/cdp.js +224 -0
  40. package/plugins/dsh-browser-qa/lib/chrome.js +466 -0
  41. package/plugins/dsh-browser-qa/lib/pages.js +552 -0
  42. package/plugins/dsh-browser-qa/lib/qa.js +827 -0
  43. package/plugins/dsh-browser-qa/lib/ui-gate.js +256 -0
  44. package/plugins/dsh-browser-qa/package.json +31 -0
  45. package/plugins/dsh-checkpoints/README.md +22 -0
  46. package/plugins/dsh-checkpoints/cordis.patch.yml +3 -0
  47. package/plugins/dsh-checkpoints/index.js +80 -0
  48. package/plugins/dsh-checkpoints/lib/checkpoints.js +111 -0
  49. package/plugins/dsh-checkpoints/package.json +25 -0
  50. package/plugins/dsh-github-review/README.md +131 -0
  51. package/plugins/dsh-github-review/cordis.patch.yml +3 -0
  52. package/plugins/dsh-github-review/index.js +536 -0
  53. package/plugins/dsh-github-review/lib/gh.js +494 -0
  54. package/plugins/dsh-github-review/lib/normalize.js +662 -0
  55. package/plugins/dsh-github-review/package.json +28 -0
  56. package/plugins/dsh-guardrails/README.md +264 -0
  57. package/plugins/dsh-guardrails/cordis.patch.yml +5 -0
  58. package/plugins/dsh-guardrails/index.js +389 -0
  59. package/plugins/dsh-guardrails/lib/hooks.js +262 -0
  60. package/plugins/dsh-guardrails/lib/modes.js +77 -0
  61. package/plugins/dsh-guardrails/lib/policy.js +592 -0
  62. package/plugins/dsh-guardrails/lib/scan.js +451 -0
  63. package/plugins/dsh-guardrails/lib/secrets.js +274 -0
  64. package/plugins/dsh-guardrails/package.json +26 -0
  65. package/plugins/dsh-mcp-manager/README.md +78 -0
  66. package/plugins/dsh-mcp-manager/client.js +373 -0
  67. package/plugins/dsh-mcp-manager/index.js +159 -0
  68. package/plugins/dsh-mcp-manager/lib/api.js +250 -0
  69. package/plugins/dsh-mcp-manager/lib/client.js +219 -0
  70. package/plugins/dsh-mcp-manager/lib/config.js +217 -0
  71. package/plugins/dsh-mcp-manager/lib/manager.js +146 -0
  72. package/plugins/dsh-mcp-manager/package.json +18 -0
  73. package/plugins/dsh-mcp-manager/screenshots/modal-390.png +0 -0
  74. package/plugins/dsh-mcp-manager/screenshots/settings-1440.png +0 -0
  75. package/plugins/dsh-mcp-manager/screenshots/settings-390.png +0 -0
  76. package/plugins/dsh-memory-bridge/README.md +161 -0
  77. package/plugins/dsh-memory-bridge/client.js +2264 -0
  78. package/plugins/dsh-memory-bridge/cordis.patch.yml +5 -0
  79. package/plugins/dsh-memory-bridge/docs/images/conflicts.png +0 -0
  80. package/plugins/dsh-memory-bridge/docs/images/hero.png +0 -0
  81. package/plugins/dsh-memory-bridge/docs/images/settings-dark.png +0 -0
  82. package/plugins/dsh-memory-bridge/docs/images/settings-light.png +0 -0
  83. package/plugins/dsh-memory-bridge/docs/images/settings-mobile.png +0 -0
  84. package/plugins/dsh-memory-bridge/docs/images/setup.png +0 -0
  85. package/plugins/dsh-memory-bridge/icon.svg +13 -0
  86. package/plugins/dsh-memory-bridge/index.js +378 -0
  87. package/plugins/dsh-memory-bridge/lib/bridge.js +636 -0
  88. package/plugins/dsh-memory-bridge/lib/github.js +473 -0
  89. package/plugins/dsh-memory-bridge/lib/merge.js +205 -0
  90. package/plugins/dsh-memory-bridge/lib/portable.js +314 -0
  91. package/plugins/dsh-memory-bridge/lib/state.js +565 -0
  92. package/plugins/dsh-memory-bridge/lib/sync.js +984 -0
  93. package/plugins/dsh-memory-bridge/locale/en.json +6 -0
  94. package/plugins/dsh-memory-bridge/locale/ru.json +6 -0
  95. package/plugins/dsh-memory-bridge/package.json +67 -0
  96. package/plugins/dsh-peak-guard/README.md +16 -3
  97. package/plugins/dsh-peak-guard/client.js +223 -8
  98. package/plugins/dsh-peak-guard/package.json +1 -1
  99. package/plugins/dsh-plan-mode/README.md +24 -0
  100. package/plugins/dsh-plan-mode/cordis.patch.yml +3 -0
  101. package/plugins/dsh-plan-mode/index.js +103 -0
  102. package/plugins/dsh-plan-mode/lib/plan.js +89 -0
  103. package/plugins/dsh-plan-mode/package.json +18 -0
  104. package/plugins/dsh-profile-transfer/client.js +277 -17
  105. package/plugins/dsh-profile-transfer/index.js +10 -0
  106. package/plugins/dsh-profile-transfer/package.json +3 -1
  107. package/plugins/dsh-profile-transfer/transfer.js +101 -2
  108. package/plugins/dsh-project-memory/index.js +92 -2
  109. package/plugins/dsh-project-memory/package.json +1 -1
  110. package/plugins/dsh-repo-map/README.md +26 -0
  111. package/plugins/dsh-repo-map/cordis.patch.yml +3 -0
  112. package/plugins/dsh-repo-map/index.js +99 -0
  113. package/plugins/dsh-repo-map/lib/repo-map.js +170 -0
  114. package/plugins/dsh-repo-map/package.json +25 -0
  115. package/plugins/dsh-skill-autopilot/index.js +135 -11
  116. package/skills/delivery-gate/SKILL.md +31 -0
  117. package/skills/git-and-ci/SKILL.md +5 -1
  118. package/skills/manifest.json +31 -6
  119. package/skills/requirements-and-planning/SKILL.md +3 -0
  120. package/skills/research-first/SKILL.md +35 -0
  121. package/skills/research-first/references/query-patterns.md +20 -0
  122. package/skills/subagent-playbook/SKILL.md +36 -0
  123. package/skills/subagent-playbook/references/prompts.md +39 -0
  124. package/skills/ui-craft/SKILL.md +43 -0
  125. package/skills/visual-qa/SKILL.md +29 -0
  126. package/skills/visual-qa/references/commands.md +32 -0
  127. package/skills-baseline.json +246 -0
  128. package/uninstall.ps1 +74 -0
@@ -0,0 +1,353 @@
1
+ # DSH Memory Fabric — программа развития kit и плагинов
2
+
3
+ **Дата:** 2026-11-09
4
+ **Статус:** предложение к утверждению (v1)
5
+ **Область:** `dsh-desktop-kit` 3.x, `dsh-memory-bridge` 3.x, `dsh-project-memory` 2.x,
6
+ `dsh-profile-transfer` 2.x и остальные семь плагинов kit.
7
+
8
+ ---
9
+
10
+ ## 1. Коротко
11
+
12
+ Сейчас это четырнадцать хороших локальных плагинов, которые работают по отдельности. Следующий уровень —
13
+ **единая локальная «Memory Fabric»**: локальный Markdown остаётся источником истины, к нему
14
+ добавляются проверяемые метаданные (происхождение, уверенность, время), локальный поиск и
15
+ семантическое слияние, а GitHub остаётся транспортом и резервной копией. Сверху — один
16
+ «Memory Hub» с диагностикой, историей, конфликтами и переносом между машинами.
17
+
18
+ Цель программы:
19
+
20
+ 1. **Ноль молчаливых потерь данных** при синхронизации и переносах.
21
+ 2. **Память, которая умеет выбирать, что важно**, а не просто хранить всё (LongMemEval:
22
+ извлечение, многосессионные выводы, время, обновления, abstention).
23
+ 3. **Ноль обязательных токенов** для синхронизации и базовой памяти; LLM — только
24
+ по явному действию пользователя.
25
+ 4. **Промышленный релиз**: CI, тесты, безопасность, npm trusted publishing, документация.
26
+
27
+ ---
28
+
29
+ ## 2. Что уже есть (аудит на 2026-11-09)
30
+
31
+ | Компонент | Версия | Сильные стороны | Ограничения |
32
+ |---|---:|---|---|
33
+ | `dsh-desktop-kit` | 2.7.2 | 14 плагинов, 30 навыков, сборка, update-safe, doctor, CI | 8.5 MB пакет, нет единого хаба и сквозной диагностики |
34
+ | `dsh-project-memory` | 1.1.3 | локальный автоскан, дайджест ≤ 2800 символов, redaction, `/memory`, принятие синхронизированного досье | нет индекса/поиска, provenance/confidence, temporal, дедупликации, health-метрик |
35
+ | `dsh-memory-bridge` | 2.2.1 | приватный GitHub, 3-way merge, конфликты, история/откат, проверка приватности, 0 токенов | нужен `gh`, merge по строкам, нет per-project controls, backoff, semantic merge, device flow |
36
+ | `dsh-profile-transfer` | 1.3.1 | профиль, навыки, workspace, локальные плагины, bootstrap | архив `.tar.gz` без шифрования/подписи, нет preview/delta/rollback |
37
+ | `dsh-gkb-ru-ui` | 2.0.1 | русская локализация | нет полного QA локали и глоссария |
38
+ | `dsh-token-lab` | 1.0.0 | замер контекста, состав | нет прогноза бюджета, ROI навыков, алертов |
39
+ | `dsh-peak-guard` | 1.2.0 | защита от пиков контекста | нет прогноза и per-model окон |
40
+ | `dsh-session-move` | 1.0.0 | перенос сессий | нет транзакционности/rollback/bulk |
41
+ | `dsh-skill-autopilot` | 1.0.1 | подсказка навыков | нет explainability, метрик успеха, семантического роутинга |
42
+
43
+ Текущая проверка: kit `npm test` — exit 0; smoke 49/49, bridge 35/35,
44
+ transfer 49/49; `check-client`, `validate-skills`, `build-client` — OK;
45
+ kit установлен локально в профиль, bridge-маршруты живы.
46
+
47
+ ---
48
+
49
+ ## 3. Что говорит исследование (актуально на 2026-11-09)
50
+
51
+ - **DSH-плагины — это Cordis Fiber.** `inject` ждёт сервисы; при исчезновении сервиса плагин
52
+ выгружается и загружается снова, HMR перезапускает `apply` и снимает старые регистрации.
53
+ Значит архитектуру нужно строить на `ctx.effect`, дочерних `ctx.plugin()` и явных `inject`,
54
+ не полагаясь на «вечные» глобальные объекты. ([DeepSeek Harness: plugins and lifecycle](https://github.com/deepseek-ai/DeepSeek-Harness/blob/master/docs/user/develop/framework/index.md?plain=1))
55
+ - **LongMemEval (ICLR 2025)** измеряет пять способностей: извлечение информации,
56
+ многосессионное рассуждение, временное рассуждение, обновление знаний и abstention; у
57
+ коммерческих ассистентов и long-context LLM падение до 30%. Ключевые оптимизации —
58
+ сессионная декомпозиция, расширение ключей фактами и time-aware query expansion; стадии —
59
+ индексация, извлечение, чтение. ([LongMemEval, arXiv:2410.10813](https://arxiv.org/abs/2410.10813))
60
+ - **Память — это не склад, а работа с решениями.** Обзоры бенчмарков показывают, что самые
61
+ сложные вопросы проверяют, что сохранить, что устарело, чему нельзя доверять и когда
62
+ воздержаться. ([What Do Memory Benchmarks Actually Measure?](https://huggingface.co/blog/mjfk/agentic-memory-benchmark))
63
+ - **Mem0** строит память как pipeline `ADD/UPDATE/DELETE/NOOP`, но известны риски
64
+ галлюцинированных записей и потери истории при агрессивном update; **MemGPT** управляет
65
+ памятью через pressure-триггеры и дорогие LLM-вызовы. Вывод: нужна детерминированная база
66
+ с provenance/confidence и опциональная LLM-консолидация, а не постоянная LLM-запись.
67
+ ([Mem0, arXiv:2504.19413](https://arxiv.org/abs/2504.19413),
68
+ [MemGPT, arXiv:2310.08560](https://arxiv.org/abs/2310.08560))
69
+ - **Local-first** — семь принципов: быстро, мультиустройство, офлайн, коллаборация, долговечность,
70
+ приватность, контроль пользователя; Git — хороший асинхронный транспорт, но не real-time
71
+ merge. ([Ink & Switch: Local-first software](https://www.inkandswitch.com/local-first/))
72
+ - **CRDT (Yjs/Automerge)** дают автоматическое слияние, но хранят всю историю и могут давать
73
+ синтаксически невалидный Markdown при конкурентных правках; для асинхронной памяти одного
74
+ пользователя семантический блочный merge выгоднее. ([Yjs docs](https://docs.yjs.dev/),
75
+ [Automerge](https://automerge.org/))
76
+ - **GitHub Device Flow** позволяет авторизовать CLI/desktop-приложение без `gh`, без
77
+ client secret и без собственного сервера; токен можно хранить в защищённом хранилище ОС.
78
+ ([GitHub: authorizing OAuth apps, device flow](https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps#device-flow))
79
+ - **npm trusted publishing** публикует через OIDC без долгоживущих токенов; provenance
80
+ автоматически подписывается Sigstore, но **не генерируется для приватных репозиториев**
81
+ и требует публичного repo/package. Это важно для нашего private-подхода.
82
+ ([npm trusted publishing](https://docs.npmjs.com/trusted-publishers),
83
+ [npm provenance](https://docs.npmjs.com/generating-provenance-statements))
84
+ - **Секреты** надо ловить до публикации: gitleaks (git/dir/stdin, pre-commit, CI),
85
+ GitHub secret scanning/push protection, а не только redaction в памяти.
86
+ ([gitleaks](https://github.com/gitleaks/gitleaks),
87
+ [GitHub secret scanning](https://docs.github.com/en/code-security/secret-scanning))
88
+ - **Локальный поиск** без сервера: SQLite FTS5/BM25; для 10–50k фактов достаточно
89
+ JS-инвертированного индекса или `node:sqlite`, без внешних сервисов.
90
+ ([SQLite FTS5](https://sqlite.org/fts5.html))
91
+
92
+ ---
93
+
94
+ ## 4. Целевая архитектура
95
+
96
+ ```
97
+ ┌──────────────────────── DSH Memory Hub (UI) ───────────────────────┐
98
+ │ статус · проекты · поиск · конфликты · история · перенос · doctor │
99
+ └───────────────▲────────────────────────────▲───────────────────────┘
100
+ │ RPC │ RPC
101
+ ┌──────────────────────────┴─────────┐ ┌───────────┴──────────────────────┐
102
+ │ dsh-project-memory 2.x │ │ dsh-memory-bridge 3.x │
103
+ │ Markdown (канон) │ │ Semantic Sync Engine │
104
+ │ + derived index (FTS/BM25) │◄────►│ block merge · event log · retry │
105
+ │ + provenance/confidence/temporal │ │ private GitHub transport │
106
+ │ + health/doctor/bench │ │ history · restore · conflict UI │
107
+ └──────────────┬─────────────────────┘ └───────────┬─────────────────────┘
108
+ │ │
109
+ ┌──────────────▼─────────────┐ ┌────────────▼─────────────────────┐
110
+ │ dsh-profile-transfer 2.x │ │ GitHub (private) │
111
+ │ encrypted signed archive │ │ repo as cloud peer / history │
112
+ │ preview · delta · rollback │ │ no personal data in package │
113
+ └────────────────────────────┘ └───────────────────────────────────┘
114
+ ```
115
+
116
+ ### 4.1 Память (project-memory 2.0)
117
+
118
+ - **Канон:** Markdown + JSON-манифест; journal — событийный JSONL/Markdown append-only.
119
+ - **Derived index:** локальный индекс фактов/секций/журнала с BM25 + фильтрами
120
+ проект/тип/время; обновление инкрементальное; индекс можно удалить и перестроить.
121
+ - **Fact model:** `id`, `text`, `kind`, `project`, `source`, `validFrom`, `recordedAt`,
122
+ `lastSeen`, `confidence`, `supersedes`, `tags`; без LLM — эвристики из заголовков/маркеров.
123
+ - **Retrieval:** budget-aware упаковка (≤ N символов), recency/importance/confidence,
124
+ MMR-разнообразие, abstention при низком score; explain-почему факт попал в дайджест.
125
+ - **Consolidation:** дедупликация near-duplicate, supersede по ключу, месячная архивация
126
+ журнала, «предложения» на основе git-диффов (review before write).
127
+ - **Health:** stale/дубли/конфликты/отсутствующие секции/размер; `/memory doctor` + UI.
128
+ - **Bench:** фикстуры на 5 способностей LongMemEval-типа (retrieval precision/recall,
129
+ temporal, update, abstention), прогон в CI; сравнение «digest vs full-context».
130
+
131
+ ### 4.2 Синхронизация (bridge 3.0)
132
+
133
+ - **Semantic Markdown merge:** блоки Markdown (заголовок, список, таблица, параграф, код);
134
+ стабильные block-id по контент-хэшу; трёхсторонний merge на уровне блоков; списки —
135
+ union; таблицы — по ключу строки/столбца; журнал — append-only union. Конфликт только когда
136
+ один блок изменён по-разному; сохранение синтаксиса Markdown гарантировано.
137
+ - **Operation log / base snapshots:** локальный append-only лог операций (deviceId, opId,
138
+ timestamp, blockId, hash) для диагностики/повторов; Git commit — снимок.
139
+ - **Sync engine:** per-project sync/exclude, очередь, exponential backoff + jitter,
140
+ lock на проект, offline-детект, rate-limit-aware, статус сети/репо, идемпотентные retry;
141
+ «синхронизировать проект» и «исключить» в UI.
142
+ - **Conflict UX:** 3-way diff по блокам, ручной редактор, «мой/их/оба/выбрать блоки»,
143
+ история и откат (уже есть), preview до записи, бэкап.
144
+ - **Auth:** гибрид — существующий `gh` CLI + встроенный GitHub Device Flow OAuth
145
+ (без `gh`, без сервера), токен в ОС-хранилище (DPAPI), refresh/истечение, revoke;
146
+ проверка scope `repo`, private-only; никаких токенов в репозитории/логах.
147
+ - **Transport safety:** проверка приватности перед каждым циклом (есть), gitleaks перед push,
148
+ redaction, блокировка при публичном репо, never force.
149
+ - **Security:** threat model, secret scanning, SBOM? (опционально), safe mode.
150
+
151
+ ### 4.3 Перенос (profile-transfer 2.0)
152
+
153
+ - **Encrypted archive:** AES-256-GCM + scrypt (или age-совместимый формат), passphrase,
154
+ подпись/манифест SHA-256, версия формата; потоково, без загрузки гигабайт в RAM.
155
+ - **Preview/dry-run:** что будет перезаписано, конфликты реестра, размеры, diff.
156
+ - **Selective restore:** по группам, per-profile, merge registry (уже есть), rollback snapshot.
157
+ - **Delta/incremental:** по content-hash, исключение неизменных large workspaces.
158
+ - **Bridge config:** перенос repo/branch/enabled/autoSync без машинных путей и секретов;
159
+ проверка, установлен ли bridge; после переноса — «подключить и включить» одним действием.
160
+ - **Безопасность:** path traversal, limits, очистка temp, отзыв пароля/ключей.
161
+
162
+ ### 4.4 Kit UX 3.0
163
+
164
+ - **Memory Hub** — единая секция настроек: health score, sync status, конфликты, история,
165
+ список проектов, поиск по досье/журналу, рекомендуемые действия.
166
+ - **Notifications:** бейдж/уведомления о конфликтах, ошибках sync, stale памяти, приближении
167
+ контекстного пика; не спамить.
168
+ - **`/kit doctor`:** окружение, git/gh/device flow, repo privacy, конфликты, плагины, навыки,
169
+ память, переносы; экспорт redacted ZIP диагностики.
170
+ - **Accessibility/i18n:** AA-контраст, 1440/390, light/dark, reduced motion, keyboard;
171
+ ru/en/zh, единый глоссарий.
172
+ - **Visual QA:** Playwright screenshots + diff, живые сценарии, preview-harness для CI.
173
+
174
+ ### 4.5 Остальные плагины
175
+
176
+ - **gkb-ru-ui:** полный locale QA, глоссарий, переключение, скриншот-тесты.
177
+ - **token-lab:** прогноз бюджета, стоимость навыков/ROI, prompt-composition diff, алерты.
178
+ - **peak-guard:** прогноз пиков по модели/контексту, настраиваемые окна, auto-suggest compact.
179
+ - **session-move:** транзакционный перенос, dry-run/rollback, bulk, проверка ссылок.
180
+ - **skill-autopilot:** explainable top-k, локальный семантический роутинг (TF-IDF/BM25),
181
+ обратная связь по успеху, стоимость подсказки.
182
+ - **profile-transfer:** см. 4.3.
183
+
184
+ ---
185
+
186
+ ## 5. Дорожная карта (10–12 недель, можно параллелить)
187
+
188
+ ### S0. Фундамент релиза и качества — 1 неделя
189
+
190
+ - CI matrix (Windows/Node 22/24), `npm test`, `npm pack --dry-run`, `check-client`,
191
+ `validate-skills`, build reproducibility.
192
+ - gitleaks pre-commit + CI; `npm audit`; secret scanning.
193
+ - Release workflow: trusted publishing/OIDC, `publish.yml`, versioning, GitHub Release,
194
+ checksums, CHANGELOG.
195
+ - Исправить/дописать то, что найдёт live-smoke kit 2.3.0.
196
+ - **Выход:** зелёный CI, воспроизводимый `dsh-desktop-kit-2.3.0.tgz`, план публикации.
197
+
198
+ ### S0.5. Память на флешке — сделано (bridge 2.3.0 / kit 2.4.0)
199
+
200
+ - экспорт досье в `dsh-memory-portable/` на флешку;
201
+ - манифест + SHA-256 каждого файла;
202
+ - сканирование флешки, статусы new/update/same;
203
+ - импорт с бэкапом существующих досье;
204
+ - UI в настройках «Память проектов» → «Перенос через флешку»;
205
+ - тест: экспорт → подмена файла отклоняется → импорт на третью машину.
206
+
207
+ ### S1. Sync 3.0: надёжность и семантика — 2–3 недели
208
+
209
+ - per-project sync/exclude; lock; backoff/jitter; offline queue; retry.
210
+ - backoff-логи и метрики; `/sync` diagnostic (уже есть) + redacted bundle.
211
+ - semantic block merge прототип + fuzz-тесты (1000 случайных правок, 0 silent loss).
212
+ - conflict preview/diff на блоках; manual editor.
213
+ - device flow OAuth (opt-in) + DPAPI token store; `gh` fallback.
214
+
215
+ ### S2. Memory 2.0: индекс и качество — 2–3 недели
216
+
217
+ - derived index + incremental rebuild; search API/tool; budget-aware retrieval; explain.
218
+ - provenance/confidence/temporal; dedup/supersede; health/doctor; monthly journal archive.
219
+ - digest: conflict/error alert только при проблеме; abstention.
220
+ - benchmark suite + CI; memory proposals из git diff (review).
221
+
222
+ ### S3. Transfer 2.0: шифрование и перенос — 2 недели
223
+
224
+ - encrypted signed archive; preview/dry-run; rollback; delta.
225
+ - bridge config; post-transfer doctor; bootstrap.
226
+ - tests: wrong passphrase, tamper, path traversal, huge workspace, rollback.
227
+
228
+ ### S4. Hub и остальные плагины — 2–3 недели
229
+
230
+ - Memory Hub, notifications, `/kit doctor`, search UI, history/timeline.
231
+ - token-lab, peak-guard, session-move, autopilot, gkb upgrades.
232
+ - accessibility/i18n and visual regression.
233
+
234
+ ### S5. Релиз 3.0 — 1 неделя
235
+
236
+ - migration/upgrade docs, screenshots, README, security policy, FAQ.
237
+ - load/perf tests; memory/cpu budgets.
238
+ - npm publish bridge 3.0 + kit 3.0 (staged/trusted), GitHub Release, checksums.
239
+ - post-release smoke on clean profile.
240
+
241
+ ---
242
+
243
+ ## 6. Приоритетный backlog
244
+
245
+ | Приоритет | Задача | Компонент | Проверка |
246
+ |---|---|---|---|
247
+ | P0 | per-project sync/exclude + backoff/jitter + lock | bridge | тесты на 2 клонах, retry, offline |
248
+ | P0 | semantic block merge + fuzz | bridge | 1000 сценариев, нет молчаливой потери |
249
+ | P0 | gitleaks + CI + release workflow | kit | CI зелёный, gitleaks 0 |
250
+ | P0 | encrypted transfer archive + preview/rollback | transfer | wrong key/tamper/path traversal |
251
+ | P0 | `/kit doctor` + redacted diagnostic bundle | kit | live-сценарии |
252
+ | P1 | derived memory index + search + explain | memory | precision/recall fixtures |
253
+ | P1 | provenance/confidence/temporal + health | memory | doctor/bench |
254
+ | P1 | device flow OAuth + DPAPI | bridge | auth flow без gh |
255
+ | P1 | Memory Hub + notifications | kit | 1440/390, light/dark, AA |
256
+ | P1 | token-lab forecast/ROI, peak-guard forecast | token-lab/peak-guard | расчёты + UI |
257
+ | P2 | memory proposals из git diff (review) | memory/bridge | approve/reject |
258
+ | P2 | optional local embeddings | memory | offline benchmark |
259
+ | P2 | CRDT/real-time collaboration | bridge | research spike, не в 3.0 |
260
+
261
+ ---
262
+
263
+ ## 7. Метрики и критерии приёмки
264
+
265
+ **Данные**
266
+ - 1000 случайных сценариев merge: ни одной молчаливой потери; 100% восстановимо.
267
+ - restore/history/backup проверены на реальном репозитории.
268
+ - transfer: tamper/wrong passphrase/path traversal отклоняются.
269
+
270
+ **Синхронизация**
271
+ - Успешность после retry ≥ 99% в тестовом сценарии; p95 ручной sync ≤ 5 c для 100 файлов.
272
+ - Публичный репозиторий → синхронизация остановлена; неизвестная приватность → остановлена.
273
+ - 0 токенов LLM на синхронизацию.
274
+
275
+ **Память**
276
+ - Дайджест ≤ 2800 символов по умолчанию; retrieval ≤ 1200 символов в контексте.
277
+ - Benchmark: precision@k/recall/abstention выше baseline «full dossier» на синтетике.
278
+ - `/memory doctor` находит stale/дубли/конфликты; исправление не удаляет данные.
279
+
280
+ **UX**
281
+ - 1440/768/390, light/dark, AA, нет горизонтального скролла; setup ≤ 5 кликов.
282
+ - Visual regression: 0 необъяснённых diff.
283
+
284
+ **Релиз**
285
+ - CI зелёный на Windows; пакет детерминирован; npm publish dry-run OK.
286
+ - Trusted publishing или явно документированный exception (private repo → no provenance).
287
+ - README/скриншоты/CHANGELOG/security policy обновлены.
288
+
289
+ ---
290
+
291
+ ## 8. Риски и откат
292
+
293
+ | Риск | Митигация |
294
+ |---|---|
295
+ | Повреждение досье merge-ом | backup перед записью (есть), snapshots, restore, fuzz, never force |
296
+ | Рассинхронизация схем | версионирование JSON, миграции + тесты, `schemaVersion` |
297
+ | Раздувание пакета | allowlist, build-time excludes, size budget 10 MB |
298
+ | Токены/секреты | redaction, gitleaks, secret scanning, DPAPI, private-only, revoke |
299
+ | Сложность CRDT | не вводим в 3.0; semantic merge + operation log |
300
+ | LLM-стоимость | deterministic by default; LLM только явно и с бюджетом |
301
+ | Несовместимость DSH | matrix 0.2.x, `inject`/Fiber, HMR tests, version gate |
302
+ | Публикация из private repo | документируем отсутствие provenance; вариант — public source repo |
303
+
304
+ **Откат:** feature-флаг на каждую новую подсистему, старые версии плагинов в CHANGELOG,
305
+ локальные бэкапы, `dsh-desktop-kit` rollback, restore из GitHub commit.
306
+
307
+ ---
308
+
309
+ ## 9. Решения, которые нужны от владельца
310
+
311
+ 1. **Merge:** semantic block merge (рекомендую) или CRDT-подход?
312
+ 2. **Auth:** оставить только `gh` или добавить встроенный Device Flow (рекомендую гибрид)?
313
+ 3. **Retrieval:** детерминированный локальный индекс (рекомендую) или сразу эмбеддинги?
314
+ 4. **Шифрование переносов:** включать по умолчанию passphrase (рекомендую да) или опционально?
315
+ 5. **Публикация/provenance:** оставить репозитории private (provenance не будет) или сделать
316
+ исходники kit/bridge публичными ради trusted publishing/provenance?
317
+ 6. **Темп:** сначала S0+S1 (sync/quality), затем S2 (memory) — или memory важнее?
318
+
319
+ ---
320
+
321
+ ## 10. Первый спринт (S0) — конкретные шаги
322
+
323
+ 1. `.github/workflows/test.yml`: matrix Windows, Node 22/24; `npm test`, `npm pack --dry-run`,
324
+ `check-client`, `validate-skills`.
325
+ 2. `.github/workflows/security.yml`: gitleaks + `npm audit`; fail on findings.
326
+ 3. `.github/workflows/publish.yml`: OIDC trusted publishing (после решения по п.9.5),
327
+ staged publish, `id-token: write`, `repository.url` в package.json.
328
+ 4. `docs/SECURITY.md`, `SECURITY.md`, `docs/RELEASE.md`.
329
+ 5. Bridge: backoff/jitter, per-project controls, sync diagnostics; тесты.
330
+ 6. Memory: conflict alert в дайджесте + `/memory doctor`; тесты.
331
+ 7. Transfer: manifest checksum + preview/dry-run; тесты.
332
+ 8. Kit: `/kit doctor` + redacted bundle; screenshot acceptance.
333
+ 9. Прогнать live-smoke: настройки, синхронизация, конфликт, история, перенос.
334
+ 10. Обновить CHANGELOG/README/roadmap после каждого спринта.
335
+
336
+ ---
337
+
338
+ ## Источники
339
+
340
+ - [DeepSeek Harness: plugins and lifecycle](https://github.com/deepseek-ai/DeepSeek-Harness/blob/master/docs/user/develop/framework/index.md?plain=1)
341
+ - [DeepSeek Harness: your first plugin](https://github.com/deepseek-ai/DeepSeek-Harness/blob/master/docs/user/develop/basic/index.md?plain=1)
342
+ - [LongMemEval, ICLR 2025 (arXiv:2410.10813)](https://arxiv.org/abs/2410.10813)
343
+ - [What Do Memory Benchmarks Actually Measure? (2026)](https://huggingface.co/blog/mjfk/agentic-memory-benchmark)
344
+ - [Mem0 (arXiv:2504.19413)](https://arxiv.org/abs/2504.19413)
345
+ - [MemGPT (arXiv:2310.08560)](https://arxiv.org/abs/2310.08560)
346
+ - [Local-first software, Ink & Switch](https://www.inkandswitch.com/local-first/)
347
+ - [Yjs CRDT documentation](https://docs.yjs.dev/)
348
+ - [GitHub OAuth device flow](https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps#device-flow)
349
+ - [npm trusted publishing](https://docs.npmjs.com/trusted-publishers)
350
+ - [npm provenance](https://docs.npmjs.com/generating-provenance-statements)
351
+ - [gitleaks](https://github.com/gitleaks/gitleaks)
352
+ - [GitHub secret scanning](https://docs.github.com/en/code-security/secret-scanning)
353
+ - [SQLite FTS5](https://sqlite.org/fts5.html)
package/docs/ROADMAP.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## Уже в 2.0
6
6
 
7
- - компактные ядра навыков и references (25 навыков);
7
+ - компактные ядра навыков и references (30 навыков);
8
8
  - `dsh-skill-autopilot` — навыки применяются по смыслу запроса, а не по памяти модели;
9
9
  - `dsh-token-lab` — живой замер контекста, состав, топ потребителей, экономия библиотеки;
10
10
  - Skills Studio — редактирование, создание, дублирование и удаление навыков в GUI;
@@ -0,0 +1,25 @@
1
+ # Субагенты: роли и запуск
2
+
3
+ Постоянный набор ролей живёт в навыке `subagent-playbook` (промпты — в
4
+ `skills/subagent-playbook/references/prompts.md`). Роли нужны не «для количества», а как
5
+ независимая проверка.
6
+
7
+ | Роль | Когда | Результат |
8
+ |---|---|---|
9
+ | **research-scout** | нужны свежие факты/версии/практики | матрица вариантов + ссылки |
10
+ | **ui-critic** | UI готов или «поехал» | 5–7 правок + скриншоты |
11
+ | **responsive-qa** | адаптив, overflow, мобилки | список багов + измерения |
12
+ | **release-auditor** | релиз/публикация | go/no-go, блокеры |
13
+ | **code-reviewer** | большой дифф | баги/регрессии, severity |
14
+
15
+ ## Как попросить Lead
16
+ - «Запусти research-scout по <тема> и принеси матрицу вариантов».
17
+ - «Запусти ui-critic на скриншотах 1440/768/390, нужен список правок».
18
+ - «Перед релизом — release-auditor, файлы не менять».
19
+ - «Сделай code-reviewer по этим диффам и верни только блокеры».
20
+
21
+ ## Правила
22
+ - 1–2 роли на задачу; не дублировать одну работу.
23
+ - Роль-читатель не меняет файлы; пишет только отчёт.
24
+ - Решение и финальный ответ остаются за Lead.
25
+ - Параллельно — только независимые роли; зависимые — последовательно.
@@ -1,17 +1,17 @@
1
1
  # Тест на DeepSeek Harness 0.2.2-rc.1 (win-x64)
2
2
 
3
- Дата: **2026-11-06** · пакет: **dsh-desktop-kit 2.2.0** (первый прогон — 2.1.3, фикс автопилота — 2.1.4) · ОС: Windows 11.
3
+ Дата: **2026-11-06** · пакет: **dsh-desktop-kit 2.2.1** (первый прогон — 2.1.3, фикс автопилота — 2.1.4) · ОС: Windows 11.
4
4
 
5
5
  ## Стенд
6
6
 
7
- - Установщик: `deepseek-harness-0.2.2-rc.1-win-x64.exe` (293 425 336 байт), распакован в `C:\Users\bulav\dsh-022-runtime` (7-Zip, без установки поверх рабочего DSH).
7
+ - Установщик: `deepseek-harness-0.2.2-rc.1-win-x64.exe` (293 425 336 байт), распакован в `C:\Users\<user>\dsh-022-runtime` (7-Zip, без установки поверх рабочего DSH).
8
8
  - Версия рантайма: `0.2.2-rc.1`, Node `24.21.0`, pnpm `11.28.5`.
9
- - Изолированный `DSH_HOME`: `C:\Users\bulav\dsh-022-home` — рабочий профиль пользователя не тронут.
9
+ - Изолированный `DSH_HOME`: `C:\Users\<user>\dsh-022-home` — рабочий профиль пользователя не тронут.
10
10
  - Профиль `probe` создан из шаблона `web`:
11
11
  ```powershell
12
- $env:DSH_HOME = 'C:\Users\bulav\dsh-022-home'
12
+ $env:DSH_HOME = 'C:\Users\<user>\dsh-022-home'
13
13
  dsh --profile probe --from-default-profile web --dump-config
14
- dsh plugin --profile probe add C:\Users\bulav\OneDrive\Desktop\Projects\dsh
14
+ dsh plugin --profile probe add C:\Users\<user>\OneDrive\Desktop\Projects\dsh
15
15
  ```
16
16
  Установка из репозитория прошла как `link:...\Projects\dsh`; `--dump-config` показывает ряд `dsh-desktop-kit`.
17
17
  - Для UI-проверок скопирован локальный `.credentials.yaml`, модель переключена на `provider: deepseek-account` (иначе web-профиль 0.2.2 по умолчанию идёт в `deepseek-official` без API-ключа).
@@ -42,7 +42,7 @@
42
42
 
43
43
  ## Обновление до 2.2.0 (проверено на этом же стенде)
44
44
 
45
- - В `C:\Users\bulav\dsh-022-home` не было state-файла; один навык (`code-review-checklist`) был намеренно изменён в Skills Studio.
45
+ - В `C:\Users\<user>\dsh-022-home` не было state-файла; один навык (`code-review-checklist`) был намеренно изменён в Skills Studio.
46
46
  - После запуска 2.2.0: 24 навыка приняты как пакетные, **1 конфликт** (`modified-unknown-base`), правка сохранена в файле; в UI по-прежнему 25 карточек.
47
47
  - `/kit status` вернул `DSH Desktop Kit 2.2.0`, `Плагины: 7/7`, `конфликтов: 1`, путь состояния.
48
48
  - `window.__DSH_DESKTOP_KIT__`: version `2.2.0`, 5 частей, `errors: []`.
@@ -0,0 +1,49 @@
1
+ # Отчёт тестирования 2.3.0
2
+
3
+ Дата: **2026-11-09** · пакет: **dsh-desktop-kit 2.3.0** + **dsh-memory-bridge 2.2.1** · ОС: Windows 11 · Node.js 24.20 · DSH `0.2.2-rc.1` (win-x64).
4
+
5
+ ## Что изменилось
6
+
7
+ - Восьмой плагин `dsh-memory-bridge`: GitHub-обмен досье между машинами, страница «Настройки → Память проектов», 3-way merge, конфликты, история/откат, проверка приватности.
8
+ - `dsh-project-memory` подхватывает готовое досье с другой машины и переселяет реестр на локальный путь вместо `<slug>-2`.
9
+ - `dsh-profile-transfer` сливает `projects-memory/registry.json` с локальным и пересчитывает пути с машины-источника.
10
+ - Клиентская половина пакета: 6 частей вместо 5, сборка `client.js` 471 411 байт.
11
+
12
+ ## Прогоны
13
+
14
+ | Проверка | Команда | Результат |
15
+ |---|---|---|
16
+ | Kit smoke | `node tools/smoke-tests.mjs` | 2/2: объединённый клиент и Token Lab регистрируются, части изолированы |
17
+ | Память проектов | `node tools/memory-tests.mjs` | OK: автоскан, redaction, дайджест, инструмент, **адопция досье** и **переселение реестра** |
18
+ | Синхронизация навыков | `node tools/skills-sync-tests.mjs` | OK: обновление, конфликт, бэкап, baseline |
19
+ | Обновление пакета | `node tools/kit-upgrade-tests.mjs` | OK: 25 навыков, правка пользователя сохранена, `/kit status` — **8/8** |
20
+ | Перенос профиля | `node plugins/dsh-profile-transfer/test/transfer.test.mjs` | **49 passed, 0 failed**, включая слияние реестра проектов |
21
+ | GitHub-мост | `node --test plugins/dsh-memory-bridge/test/*.test.mjs` | **35 passed, 0 failed**: 2 клона, конфликты, redaction, per-user GitHub, приватность, история |
22
+ | Клиент | `node tools/build-client.mjs` + `node tools/check-client.mjs client.js` | 6 частей; id `dsh-desktop-kit`, `apply` — функция, синтаксис OK |
23
+ | Навыки | `node tools/validate-skills.mjs` + `node tools/skill-cost.mjs --check` | 25 навыков, frontmatter и ссылки OK; ядра 38 103 токенов, максимум ядра 2 081 токен |
24
+ | Упаковка | `npm pack` | 302 файла, 8 498 950 байт (11 035 272 распакованных); тесты и `support/` не входят, 6 PNG моста входят |
25
+ | Установка из tarball | `npm install dsh-desktop-kit-2.3.0.tgz` в чистый каталог | OK: `apply` — функция, версия 2.3.0, `client.js`, `docs/images`, `lib/**` на месте |
26
+ | Установка моста | `npm install dsh-memory-bridge-2.2.1.tgz` в чистый каталог | OK: `apply` — функция, `inject: ["connection","commands"]`, `client.js` и 6 PNG на месте |
27
+
28
+ ## Проверки на временных `DSH_HOME`
29
+
30
+ 1. **Досье без реестра.** Папка `projects-memory/clinic-app` с `PROJECT.md` создана до первого запуска плагина. После старта: один проект `clinic-app`, папки `clinic-app-2` нет, текст досье сохранён.
31
+ 2. **Реестр с чужого пути.** `registry.json` указывает на `old-machine\clinic-app`; после открытия проекта корень заменён на локальный, дубля нет.
32
+ 3. **Импорт архива на машину с локальными проектами.** `dsh-profile-transfer` сохраняет `local-project`, добавляет `example-project` и пересчитывает его корень на новый home; счётчик `projectsRegistry.added = 1`.
33
+
34
+ ## Визуальный гейт
35
+
36
+ Новых экранов в 2.3.0 нет: страница моста уже проверена в 2.2.0 (скриншоты `plugins/dsh-memory-bridge/docs/images/`: light/dark/390, конфликты, мастер подключения), остальные экраны не менялись. В этой сессии проверена регистрация шести клиентских частей в общем бандле; живой браузерный прогон не повторялся, чтобы не менять установленный профиль.
37
+
38
+ ## Ограничения
39
+
40
+ - Живой `npm publish` требует авторизации npm; на машине токен в `~/.npmrc` возвращает `401`, поэтому пакеты собраны и проверены локально, а публикация — отдельный шаг.
41
+ - `dsh-memory-bridge` требует `git` и `gh` на каждой машине; без них синхронизация показывает точные шаги в UI.
42
+ - Первый импорт архива на машину с другим home пересчитывает пути только по префиксам `origin.userHome` / `origin.dshHome`; нестандартные сетевые пути нужно проверить вручную.
43
+
44
+ ## Откат
45
+
46
+ - Пакет: `npm install dsh-desktop-kit@2.2.1` (или предыдущий tarball), перезапуск DSH.
47
+ - Навыки: `/kit force` не нужен; state и бэкапы лежат в `~/.dsh/skills/.dsh-kit-skills.json` и `.dsh-kit-backups/`.
48
+ - Память проектов: перед импортом `dsh-profile-transfer` создаёт `~/.dsh/backup-import-*`; досье не удаляются.
49
+ - Мост: отключить синхронизацию переключателем на странице; состояние — в `~/.dsh/memory-sync`.
@@ -0,0 +1,46 @@
1
+ # Отчёт тестирования 2.7.2
2
+
3
+ Дата: **2026-11-10** · пакет: **dsh-desktop-kit 2.7.2** · ОС: Windows 11 · Node.js 24.20 · DSH `0.2.2-rc.1` (win-x64).
4
+
5
+ ## Что изменилось
6
+
7
+ - Метаданные и документация приведены к фактической версии 2.7: README 2.7, 14 плагинов, 30 навыков, описание пакета, CHANGELOG 2.4–2.7.
8
+ - Картинки README переведены с npm CDN (`@2.3.0`, ещё не опубликован) на относительные пути.
9
+ - Обновлены `docs/ARCHITECTURE.md`, `docs/COMPATIBILITY.md`, `docs/INSTALL.md`, `docs/TOKENS.md`, `docs/TROUBLESHOOTING.md`, `docs/ROADMAP*`.
10
+ - Код плагинов не менялся относительно 2.7.1; `client.js` пересобран только из-за версии.
11
+
12
+ ## Прогоны
13
+
14
+ | Проверка | Команда | Результат |
15
+ |---|---|---|
16
+ | Kit smoke | `node tools/smoke-tests.mjs` | 3/3: объединённый клиент, Token Lab, угловой peak-guard toast и праздники Китая |
17
+ | Память проектов | `node tools/memory-tests.mjs` | OK: автоскан, redaction, дайджест, адопция досье и переселение реестра |
18
+ | Синхронизация навыков | `node tools/skills-sync-tests.mjs` | OK: обновление, конфликт, бэкап, baseline |
19
+ | Обновление пакета | `node tools/kit-upgrade-tests.mjs` | OK: 30 навыков, правка пользователя сохранена, `/kit status` — 14/14 |
20
+ | Перенос профиля | `node plugins/dsh-profile-transfer/test/transfer.test.mjs` | **52 passed, 0 failed** |
21
+ | GitHub-мост | `node --test plugins/dsh-memory-bridge/test/*.test.mjs` | **36 passed, 0 failed** |
22
+ | Repo map / checkpoints / plan | `tools/repo-map-tests.mjs`, `tools/checkpoints-tests.mjs`, `tools/plan-mode-tests.mjs` | OK |
23
+ | Browser QA / GitHub review | `tools/browser-qa-tests.mjs`, `tools/github-review-tests.mjs` | OK |
24
+ | Guardrails | `plugins/dsh-guardrails/tools/guardrails-tests.mjs` | OK, **39 тестов** |
25
+ | Клиент | `node tools/build-client.mjs` + `check-client.mjs` | 6 частей, 511 979 байт, id и `apply` корректны |
26
+ | Навыки | `validate-skills.mjs` + `skill-cost.mjs --check` | 30 навыков; ядра 42 638 токенов, все в бюджете |
27
+ | Упаковка | `npm pack` / `npm publish --dry-run` | 358 файлов, 8.8 МБ (11.7 МБ распакованных) |
28
+ | Установка из tarball | `npm install dsh-desktop-kit-2.7.2.tgz` в чистый каталог | OK: `apply` — функция, все 14 плагинов и `client.js` на месте |
29
+
30
+ SHA-256 tarball: `1C98B26A4906F9E55585AB475A778A04DC630117497B2ACB18C9C22B405D6AD6`.
31
+
32
+ ## Установка в профиль
33
+
34
+ `plugin_manager install_bundle` с локальной папкой репозитория обновляет профиль `desktop` с npm-версии 2.2.1 на 2.7.2. Host-часть монтирует 14 плагинов; клиентская графика требует `Ctrl+R` в окне DSH. Навыки синхронизируются при старте с бэкапом, правки пользователя не перезаписываются.
35
+
36
+ ## Ограничения
37
+
38
+ - `browser-qa-tests.mjs` использует локальный Chrome/Edge; на машине без браузера часть проверок может быть пропущена.
39
+ - npm-публикация по-прежнему требует `npm login` под владельцем `dsh-desktop-kit`; в этой сессии токен возвращает `401`.
40
+ - Новые экраны (USB-память, режимы переноса, угловой toast) проверены ранее своими наборами скриншотов; в 2.7.2 визуальный код не менялся.
41
+
42
+ ## Откат
43
+
44
+ - Профиль: `plugin_manager install_bundle` с предыдущим tarball 2.3.0/2.7.1 или `npm install dsh-desktop-kit@2.2.1`.
45
+ - Навыки: `.dsh-kit-backups/skills/`; состояние — `~/.dsh/skills/.dsh-kit-skills.json`.
46
+ - Память и переносы: бэкапы `~/.dsh/backup-import-*`, `memory-sync/backups/`.
package/docs/TOKENS.md CHANGED
@@ -1,4 +1,4 @@
1
- # Экономия токенов в DSH Desktop Kit 2.2
1
+ # Экономия токенов в DSH Desktop Kit 2.7
2
2
 
3
3
  Документ отвечает на три вопроса: **куда уходили токены раньше**, **что изменилось в 2.x** и **как измерить эффект** на своей сессии.
4
4
 
@@ -111,7 +111,7 @@ node tools/skill-cost.mjs --json > skill-cost.json
111
111
  | `seo` ядро | ≈11 000 токенов | ≈2 000 |
112
112
  | `wow-design` ядро | ≈5 000 токенов | ≈1 900 |
113
113
  | `skills-router` ядро | ≈2 900 токенов | ≈1 700 |
114
- | Библиотека из 25 навыков | ≈60 600 токенов | ≈37 600 |
114
+ | Библиотека из 30 навыков | ≈60 600 токенов | ≈42 600 |
115
115
  | Типовая задача (3 ядра) | 15 000–30 000 | ≈4 500 |
116
116
  | Подсказка автопилота | — | 80–140 |
117
117
 
@@ -7,6 +7,33 @@
7
7
  3. Поставьте `dsh-desktop-kit` заново через «Add plugin».
8
8
  4. Перезапустите DSH.
9
9
 
10
+ ## После обновления клиента: «Нет разрешения на запись» / `ERR_PNPM_EPERM`
11
+
12
+ Это не ACL и не антивирус: в `node_modules` остался старый **junction** от локальной установки (`link:`), пока пакет уже убран из `package.json`. pnpm не может заменить ссылку и падает.
13
+
14
+ 1. Полностью закройте DSH.
15
+ 2. Проверьте, что это ссылка, и удалите **только её** (цель-репозиторий не трогайте):
16
+
17
+ ```powershell
18
+ $link = "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-desktop-kit"
19
+ (Get-Item $link -Force).LinkType # Junction
20
+ cmd /c "rmdir `"$link`""
21
+ ```
22
+
23
+ 3. Удалите временные копии от неудачных попыток:
24
+
25
+ ```powershell
26
+ Remove-Item "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\.ignored\dsh-desktop-kit_tmp_*" -Recurse -Force -ErrorAction SilentlyContinue
27
+ ```
28
+
29
+ 4. Поставьте пакет заново:
30
+
31
+ ```powershell
32
+ dsh plugin --profile desktop add dsh-desktop-kit@2.7.2
33
+ ```
34
+
35
+ 5. Запустите DSH; в профиле должен появиться `dsh-desktop-kit` в `dependencies` и `dsh.profile.bundles`.
36
+
10
37
  ## Плагин установился, но ничего не появилось
11
38
 
12
39
  - В «Плагинах» переключатель `dsh-desktop-kit` включён?
package/docs/UI-QA.md ADDED
@@ -0,0 +1,28 @@
1
+ # UI QA — постоянный визуальный гейт
2
+
3
+ ## Обязательный набор
4
+ | Ширина | Что проверяем |
5
+ |---|---|
6
+ | 1440×900 | десктоп, две колонки, длинные пути |
7
+ | 768×1024 | планшет, переносы, модалки |
8
+ | 390×844 | мобилка, кнопки, safe-area, composer |
9
+
10
+ Темы: light/dark, если есть; состояния: loading/empty/error/disabled.
11
+
12
+ ## Автоматически
13
+ 1. Открыть экран (живой DSH или preview-harness с реальным client.js).
14
+ 2. Снять PNG на каждой ширине.
15
+ 3. Проверить `document.documentElement.scrollWidth <= clientWidth`.
16
+ 4. Найти элементы с `scrollWidth > clientWidth + 1` и видимым overflow.
17
+ 5. Открыть PNG глазами: отступы, обрезания, фокус, контраст.
18
+
19
+ ## Команды
20
+ См. `skills/visual-qa/references/commands.md` — Chrome headless, CDP-проверка overflow,
21
+ превью-харнесс bridge и peak-toast.
22
+
23
+ ## Приёмка
24
+ - 0 горизонтального скролла на 390/768/1440.
25
+ - Нет обрезанных заголовков/кнопок/путей; текст переносится.
26
+ - Сетка 4/8: одинаковые внешние/внутренние отступы, выравнивание по левому краю.
27
+ - Фокус видим, тач-цели ≥ 40 px, `prefers-reduced-motion` уважается.
28
+ - После правок — повторный снимок; в отчёте указать, что проверено.
Binary file
Binary file