dsh-desktop-kit 2.1.4 → 2.2.1

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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,52 @@
1
+ # Changelog
2
+
3
+ ## 2.2.1 — 2026-11-06
4
+
5
+ - В npm-пакет добавлены `install.ps1`, `uninstall.ps1` и `doctor.ps1` — документация ссылается на них, но в 2.2.0 их не было в tarball.
6
+ - Манифест навыков пересобран под 2.2.1; хэши не изменились.
7
+ - Проверка: 25 навыков, тесты, `/kit` на 0.2.2.
8
+
9
+ ## 2.2.0 — 2026-11-06
10
+
11
+ Безопасные обновления: пакет больше не оставляет старые навыки «навсегда» и не затирает правки пользователя.
12
+
13
+ - **Манифест и состояние навыков.** `skills/manifest.json` хранит SHA-256 каждого навыка; `~/.dsh/skills/.dsh-kit-skills.json` — что установлено и когда. При обновлении неизменённые навыки обновляются, изменённые пользователем — сохраняются и попадают в конфликты.
14
+ - **Бэкап перед заменой.** Старая версия навыка уходит в `~/.dsh/skills/.dsh-kit-backups/skills/<name>-<дата>`.
15
+ - **Команда `/kit`:** `status`, `sync`, `conflicts`, `force` (принудительно, с бэкапом).
16
+ - **Изоляция клиентских частей.** Ошибка одного клиентского плагина не снимает остальные; версия и ошибки видны в `window.__DSH_DESKTOP_KIT__`.
17
+ - **Диагностика установки:** `doctor.ps1` показывает версию пакета, состояние синхронизации и конфликты.
18
+ - **0.2.2-rc.1:** исправлен разбор `user/message` для автопилота; добавлен отчёт [docs/TEST-0.2.2.md](docs/TEST-0.2.2.md).
19
+
20
+ ## 2.1.4 — 2026-11-06
21
+
22
+ - Автопилот читает оба формата `user/message` (0.2.1 и 0.2.2) + fallback на `session.snapshotEvents()`.
23
+ - Отчёт тестирования на DSH 0.2.2-rc.1 win-x64.
24
+
25
+ ## 2.1.3 — 2026-11-06
26
+
27
+ - Исправлены машинные переводы RU-словаря и добавлен живой DOM-fixer (retry/stream/cache/queue).
28
+
29
+ ## 2.1.2 — 2026-11-06
30
+
31
+ - Убрана дублирующая строка стека в дайджесте памяти.
32
+
33
+ ## 2.1.1 — 2026-11-06
34
+
35
+ - Стек `Node.js` для проектов без фреймворков; паспорт проекта заполняется из автоскана.
36
+
37
+ ## 2.1.0 — 2026-11-06
38
+
39
+ - Память проектов 2.1: авто-распознавание, локальный автоскан, `brief`/`scan`, auto-recall, redaction, `/memory`.
40
+ - Раздел «Окно-напоминание» и hero 2.1.
41
+
42
+ ## 2.0.1 — 2026-11-06
43
+
44
+ - Исправлены ссылки на изображения и документация.
45
+
46
+ ## 2.0.0 — 2026-11-06
47
+
48
+ - 25 компактных навыков, автопилот, Token Lab, Skills Studio, адаптивный сайдбар.
49
+
50
+ ## 1.0.0 — 2026-11-06
51
+
52
+ - Первый публичный выпуск: русский UI, пиковый тариф, память, перенос чатов и профиля.
package/README.md CHANGED
@@ -1,17 +1,18 @@
1
- # DSH Desktop Kit 2.1
1
+ # DSH Desktop Kit 2.2
2
2
 
3
3
  **Навыки, которые применяются сами. Контекст, который видно. Интерфейс, который не мешает.**
4
4
 
5
5
  Набор из **7 плагинов и 25 навыков** для DeepSeek Harness 0.2.x: русский интерфейс, автопилот навыков, токен-лаборатория, студия навыков, память проектов, перенос чатов и резервные копии профиля.
6
6
 
7
- ![DSH Desktop Kit 2.1](https://cdn.jsdelivr.net/npm/dsh-desktop-kit@2.1.4/docs/images/hero.png)
7
+ ![DSH Desktop Kit 2.2](https://cdn.jsdelivr.net/npm/dsh-desktop-kit@2.2.1/docs/images/hero.png)
8
8
 
9
- **v2.1.4** · MIT · проверено на DSH `0.2.1-rc.5` (Windows 11) · без внешних зависимостей и телеметрии
9
+ **v2.2.1** · MIT · проверено на DSH `0.2.1-rc.5` и `0.2.2-rc.1` (Windows 11) · без внешних зависимостей и телеметрии
10
10
 
11
11
  ---
12
12
 
13
13
  ## Что нового
14
14
 
15
+ - **Обновления без потерь 2.2.0.** Навыки синхронизируются по манифесту SHA-256: неизменённые обновляются, ваши правки сохраняются и попадают в `/kit conflicts`; перед заменой — бэкап. Клиентские плагины изолированы: ошибка одной части не отключает остальные. Подробности — [docs/UPGRADING.md](docs/UPGRADING.md).
15
16
  - **Проверено на DSH `0.2.2-rc.1` (win-x64).** Установка из репозитория, все 7 плагинов, 25 навыков, Skills Studio, Token Lab, Peak Guard, перенос чатов/профиля и память проектов. Найден и исправлен сдвиг формата `user/message` в 0.2.2, из-за которого автопилот молчал. Отчёт: [docs/TEST-0.2.2.md](docs/TEST-0.2.2.md).
16
17
  - **Русский интерфейс 2.1.3.** Исправлены машинные переводы: «Этот повтор не удался» → «Не удалось выполнить запрос», ошибка потока DeepSeek, «Кэш попаданий», очередь сообщений и ещё 18 формулировок — в словаре и на живом экране.
17
18
  - **Память проектов 2.1.** Проект распознаётся сам по рабочей папке, локальный автоскан (без LLM и сети) сразу даёт стек, команды, точки входа и тесты; дайджест сам подмешивает фрагменты досье, похожие на текущий запрос. Секреты и PII вычищаются до записи, файлы приватные (`0700/0600`). Новые действия `brief`/`scan` и команда `/memory`.
@@ -59,19 +60,19 @@
59
60
 
60
61
  ### Skills Studio: каталог, стоимость и редактор
61
62
 
62
- ![Каталог навыков](https://cdn.jsdelivr.net/npm/dsh-desktop-kit@2.1.4/plugins/dsh-gkb-ru-ui/screenshots/02-skills-1440-light.png)
63
+ ![Каталог навыков](https://cdn.jsdelivr.net/npm/dsh-desktop-kit@2.2.1/plugins/dsh-gkb-ru-ui/screenshots/02-skills-1440-light.png)
63
64
 
64
- ![Редактор навыка](https://cdn.jsdelivr.net/npm/dsh-desktop-kit@2.1.4/plugins/dsh-gkb-ru-ui/screenshots/03-skills-editor-1440-light.png)
65
+ ![Редактор навыка](https://cdn.jsdelivr.net/npm/dsh-desktop-kit@2.2.1/plugins/dsh-gkb-ru-ui/screenshots/03-skills-editor-1440-light.png)
65
66
 
66
67
  ### Token Lab: куда уходит контекст
67
68
 
68
- ![Токен-лаборатория](https://cdn.jsdelivr.net/npm/dsh-desktop-kit@2.1.4/plugins/dsh-token-lab/screenshots/01-token-lab-1440-light.png)
69
+ ![Токен-лаборатория](https://cdn.jsdelivr.net/npm/dsh-desktop-kit@2.2.1/plugins/dsh-token-lab/screenshots/01-token-lab-1440-light.png)
69
70
 
70
71
  ### Тёмная тема и мобильный
71
72
 
72
- ![Тёмная тема](https://cdn.jsdelivr.net/npm/dsh-desktop-kit@2.1.4/plugins/dsh-gkb-ru-ui/screenshots/04-skills-1440-dark.png)
73
+ ![Тёмная тема](https://cdn.jsdelivr.net/npm/dsh-desktop-kit@2.2.1/plugins/dsh-gkb-ru-ui/screenshots/04-skills-1440-dark.png)
73
74
 
74
- <img src="https://cdn.jsdelivr.net/npm/dsh-desktop-kit@2.1.4/plugins/dsh-gkb-ru-ui/screenshots/05-skills-390-light.png" alt="Каталог навыков на 390 px" width="390">
75
+ <img src="https://cdn.jsdelivr.net/npm/dsh-desktop-kit@2.2.1/plugins/dsh-gkb-ru-ui/screenshots/05-skills-390-light.png" alt="Каталог навыков на 390 px" width="390">
75
76
 
76
77
  ## Окно-напоминание: пиковый тариф
77
78
 
@@ -81,11 +82,11 @@ DeepSeek включает двойной тариф в пиковые часы (
81
82
  - **в окне** — красная карточка: причина, границы окна в местном времени и UTC, живой отсчёт до конца и рекомендация, когда вернуться;
82
83
  - **после окна** — карточка исчезает; состояние всегда доступно через `window.__DSH_PEAK_GUARD__.state()`.
83
84
 
84
- ![Окно-напоминание: светлая тема](https://cdn.jsdelivr.net/npm/dsh-desktop-kit@2.1.4/plugins/dsh-peak-guard/screenshots/03-peak-card-1440-light.png)
85
+ ![Окно-напоминание: светлая тема](https://cdn.jsdelivr.net/npm/dsh-desktop-kit@2.2.1/plugins/dsh-peak-guard/screenshots/03-peak-card-1440-light.png)
85
86
 
86
- ![Окно-напоминание: тёмная тема](https://cdn.jsdelivr.net/npm/dsh-desktop-kit@2.1.4/plugins/dsh-peak-guard/screenshots/04-peak-card-1440-dark.png)
87
+ ![Окно-напоминание: тёмная тема](https://cdn.jsdelivr.net/npm/dsh-desktop-kit@2.2.1/plugins/dsh-peak-guard/screenshots/04-peak-card-1440-dark.png)
87
88
 
88
- <img src="https://cdn.jsdelivr.net/npm/dsh-desktop-kit@2.1.4/plugins/dsh-peak-guard/screenshots/05-peak-card-390-light.png" alt="Окно-напоминание на 390 px" width="390">
89
+ <img src="https://cdn.jsdelivr.net/npm/dsh-desktop-kit@2.2.1/plugins/dsh-peak-guard/screenshots/05-peak-card-390-light.png" alt="Окно-напоминание на 390 px" width="390">
89
90
 
90
91
  Подробности и настройки — [plugins/dsh-peak-guard/README.md](plugins/dsh-peak-guard/README.md).
91
92
 
@@ -156,9 +157,20 @@ powershell -ExecutionPolicy Bypass -File "$env:USERPROFILE\dsh-desktop-kit\insta
156
157
  | Перенос чатов | `...\dsh-desktop-kit\plugins\dsh-session-move` |
157
158
  | Перенос и бэкапы | `...\dsh-desktop-kit\plugins\dsh-profile-transfer` |
158
159
 
160
+ ## Обновление без сюрпризов
161
+
162
+ Обновляйтесь поверх старой версии — данные и правки сохраняются:
163
+
164
+ - **Навыки.** `skills/manifest.json` хранит хэши, `~/.dsh/skills/.dsh-kit-skills.json` — что установлено. Неизменённые навыки обновляются, ваши правки **не перезаписываются** и видны в `/kit conflicts`; перед заменой создаётся копия в `.dsh-kit-backups/skills/`.
165
+ - **Команда `/kit`:** `status`, `sync`, `conflicts`, `force` (принудительно, с бэкапом).
166
+ - **Настройки.** `dsh-autopilot.json` и память проектов дочитываются с дефолтами; новые поля не ломают старые файлы.
167
+ - **DSH.** Пакет не фиксирует `@deepseek-ai/*` и не задаёт жёсткий `engines.dsh`; дочерние плагины и клиентские части изолированы. Ошибки видны в `window.__DSH_DESKTOP_KIT__` и `doctor.ps1`.
168
+
169
+ Полный протокол и откат — [docs/UPGRADING.md](docs/UPGRADING.md), история — [CHANGELOG.md](CHANGELOG.md).
170
+
159
171
  ## Совместимость
160
172
 
161
- - DSH `0.2.1-rc.5` — проверено вживую: хост-часть, клиентские плагины, Skills Studio, Token Lab, автопилот.
173
+ - DSH `0.2.1-rc.5` — проверено вживую: хост-часть, клиентские плагины, Skills Studio, Token Lab, автопилот, синхронизация навыков 2.2.0.
162
174
  - DSH `0.2.2-rc.1` (win-x64) — проверено 2026-11-06: установка из репозитория, 4 плитки, 25 навыков, редактор, Token Lab, Peak Guard, Session Move, Profile Transfer, память проектов и автопилот. Подробности и ограничения — [docs/TEST-0.2.2.md](docs/TEST-0.2.2.md).
163
175
  - Пакет **не тянет** версии `@deepseek-ai/*`: обновление клиента не ломает плагины.
164
176
 
@@ -173,6 +185,8 @@ powershell -ExecutionPolicy Bypass -File "$env:USERPROFILE\dsh-desktop-kit\insta
173
185
  ## Документация
174
186
 
175
187
  - [docs/TEST-0.2.2.md](docs/TEST-0.2.2.md) — отчёт тестирования на DSH 0.2.2-rc.1.
188
+ - [docs/UPGRADING.md](docs/UPGRADING.md) — обновление, конфликты навыков, откат.
189
+ - [CHANGELOG.md](CHANGELOG.md) — история версий.
176
190
  - [docs/TOKENS.md](docs/TOKENS.md) — экономика токенов, бюджеты, как измерять.
177
191
  - [docs/ROADMAP.md](docs/ROADMAP.md) — развитие плагинов и навыков.
178
192
  - [docs/INSTALL.md](docs/INSTALL.md) — все способы установки и проверка.
package/client.js CHANGED
@@ -4147,6 +4147,16 @@ var(--dsw-alias-bg-layer-1,#fff);box-shadow:inset 0 1px 0 color-mix(in srgb,#fff
4147
4147
  return module.exports;
4148
4148
  })());
4149
4149
 
4150
+ const __partNames = ["dsh-gkb-ru-ui","dsh-token-lab","dsh-peak-guard","dsh-session-move","dsh-profile-transfer"];
4151
+ const __kitErrors = [];
4152
+ const __pushKitError = (label, error) => {
4153
+ const message = String(error && error.message ? error.message : error);
4154
+ if (__kitErrors.length < 50) __kitErrors.push({ label: String(label || ""), message });
4155
+ if (__kitErrors.length <= 5) console.error("[dsh-desktop-kit] registration failed:", label, message);
4156
+ };
4157
+ try {
4158
+ window.__DSH_DESKTOP_KIT__ = { version: "2.2.1", parts: __partNames, errors: __kitErrors, ready: false };
4159
+ } catch {}
4150
4160
  const __inject = [];
4151
4161
  for (const __part of __parts) {
4152
4162
  for (const __name of __part.inject || []) {
@@ -4155,13 +4165,18 @@ var(--dsw-alias-bg-layer-1,#fff);box-shadow:inset 0 1px 0 color-mix(in srgb,#fff
4155
4165
  }
4156
4166
  exports.inject = __inject;
4157
4167
  exports.apply = function apply(ctx) {
4168
+ /* Keep each plugin isolated at the part boundary. Do not swallow errors
4169
+ * inside ctx.effect: plugins use those synchronous errors for feature
4170
+ * detection (e.g. "ru locale already registered") and must see them. */
4158
4171
  for (let index = 0; index < __parts.length; index += 1) {
4159
4172
  try {
4160
4173
  __parts[index].apply(ctx);
4161
4174
  } catch (error) {
4162
- console.error("[dsh-desktop-kit] browser part " + index + " failed to start", error);
4175
+ __pushKitError(__partNames[index] || String(index), error);
4176
+ console.error("[dsh-desktop-kit] browser part " + index + " failed to start", String(error && error.message ? error.message : error));
4163
4177
  }
4164
4178
  }
4179
+ try { window.__DSH_DESKTOP_KIT__.ready = true; } catch {}
4165
4180
  };
4166
4181
  return module.exports;
4167
4182
  },
@@ -34,7 +34,7 @@ DSH ставит плагин как пакет профиля и загружа
34
34
  - отключение `dsh-desktop-kit` в списке плагинов снимает все семь;
35
35
  - ошибка монтирования одного плагина логируется и не мешает остальным.
36
36
 
37
- При старте `installSkills()` копирует из `skills/` только отсутствующие папки в `~/.dsh/skills`. Существующие навыки не перезаписываются: обновление библиотеки — отдельное осознанное действие.
37
+ При старте `installSkills()` вызывает `syncSkills()` из `lib/skills-sync.js`. Манифест `skills/manifest.json` хранит SHA-256 каждого навыка, состояние `~/.dsh/skills/.dsh-kit-skills.json` — что установлено. Неизменённые навыки обновляются с бэкапом в `.dsh-kit-backups/skills/`, изменённые пользователем не перезаписываются и попадают в `/kit conflicts`. Установка без state-файла принимается только при совпадении с базой из `skills-baseline.json`.
38
38
 
39
39
  ## Автопилот навыков
40
40
 
@@ -4,10 +4,18 @@
4
4
 
5
5
  | DSH | Состояние | Что проверено |
6
6
  |---|---|---|
7
- | `0.2.1-rc.5` | работает | **2.1 проверена вживую**: память проектов (авто-распознавание, автоскан, `brief`/`scan`, `/memory`, redaction), Skills Studio, Token Lab, автопилот, 25 навыков |
8
- | `0.2.2-rc.1` | работает (2.1.4+) | **проверено 2026-11-06**: установка из репозитория, 4 плитки, 25 навыков, редактор с бэкапом, Token Lab (27 217 токенов / 24 узла), Peak Guard (карточка + бейдж), Session Move, Profile Transfer, память проектов (`/memory`, `scan.json`, дайджест), автопилот после фикса формата `user/message`. Отчёт: [TEST-0.2.2.md](TEST-0.2.2.md) |
7
+ | `0.2.1-rc.5` | работает | **2.2 проверена вживую**: память проектов (авто-распознавание, автоскан, `brief`/`scan`, `/memory`, redaction), Skills Studio, Token Lab, автопилот, 25 навыков, синхронизация навыков с бэкапом |
8
+ | `0.2.2-rc.1` | работает (2.2.1+) | **проверено 2026-11-06**: установка из репозитория, 4 плитки, 25 навыков, редактор с бэкапом, Token Lab (27 217 токенов / 24 узла), Peak Guard (карточка + бейдж), Session Move, Profile Transfer, память проектов (`/memory`, `scan.json`, дайджест), автопилот после фикса формата `user/message`, обновление 2.2.0 с сохранением правки навыка и `/kit status` (7/7). Отчёт: [TEST-0.2.2.md](TEST-0.2.2.md) |
9
9
  | новее `0.2.2` | не проверено | API плагинов в 0.2.x ещё меняется; см. «Если сломалось» |
10
10
 
11
+ ## Политика обновлений
12
+
13
+ - **Нет жёстких версий DSH.** Пакет не объявляет `engines.dsh` и не тянет `@deepseek-ai/*`: диапазон сам стал бы причиной «плагины несовместимы» после обновления клиента.
14
+ - **Нет потери правок.** Навыки обновляются по SHA-256-манифесту; изменённые пользователем остаются нетронутыми, перед заменой — бэкап. Состояние: `~/.dsh/skills/.dsh-kit-skills.json`; команда `/kit conflicts`.
15
+ - **Изоляция.** Каждый дочерний хост-плагин монтируется отдельно; каждая клиентская часть набора изолирована — ошибка одной не снимает остальные. Диагностика: `window.__DSH_DESKTOP_KIT__`, `doctor.ps1`.
16
+ - **Проверка перед релизом.** Матрица выше обновляется отчётом `docs/TEST-<версия>.md`; для нового DSH прогоняются установка из репозитория, все 7 плагинов и `/kit status`.
17
+ - **Откат.** Предыдущая версия ставится поверх; навыки возвращаются из `.dsh-kit-backups/skills/`. Полный протокол — [UPGRADING.md](UPGRADING.md).
18
+
11
19
  ### 0.2.2-rc.1: что отличается
12
20
 
13
21
  - `user/message` storing: Message лежит в `event.data`, а не в `event.data.message`; автопилот теперь читает оба формата и дополнительно смотрит `session.snapshotEvents()`.
package/docs/INSTALL.md CHANGED
@@ -3,7 +3,7 @@
3
3
  ## Требования
4
4
 
5
5
  - Windows 10/11.
6
- - DeepSeek Harness **0.2.1-rc.5** или новее (`0.2.2-rc.1` проверен на 1.x).
6
+ - DeepSeek Harness **0.2.1-rc.5** или новее; `0.2.1-rc.5` и `0.2.2-rc.1` проверены вживую на пакете 2.2.0.
7
7
  - Профиль `desktop` уже создан: запустите DSH один раз и закройте окно.
8
8
 
9
9
  ## Способ 0. Пакет из npm (быстрее всего)
@@ -11,7 +11,7 @@
11
11
  В DSH: **Плагины → Add plugin** → вставьте:
12
12
 
13
13
  ```
14
- dsh-desktop-kit@2.1.4
14
+ dsh-desktop-kit@2.2.1
15
15
  ```
16
16
 
17
17
  Либо локально: `npm i dsh-desktop-kit@2.0.0` — но для GUI всё равно нужен Add plugin/bundle.
package/docs/PRIVACY.md CHANGED
@@ -31,6 +31,8 @@
31
31
  | Файл | Что содержит | Можно удалить |
32
32
  |---|---|---|
33
33
  | `~/.dsh/dsh-autopilot.json` | режим автопилота и лимит навыков | да, вернётся к значениям по умолчанию |
34
+ | `~/.dsh/skills/.dsh-kit-skills.json` | хэши установленных навыков и конфликты (без текста навыков) | да, тогда пакет заново сравнит файлы |
35
+ | `~/.dsh/skills/.dsh-kit-backups/skills/<name>-<дата>/` | копии навыков перед обновлением или `/kit force` | да, это только копии |
34
36
  | `~/.dsh/skills/.dsh-kit-backups/*.md` | резервные копии `SKILL.md` перед сохранением в Studio | да, это только копии |
35
37
  | `~/.dsh/skills/.dsh-kit-trash/<дата>-<навык>/` | навыки, удалённые через Studio | да, после проверки |
36
38
  | `~/.dsh/projects-memory/` | локальные досье проектов, журнал, `scan.json`, реестр | да, но потеряется память проектов |
@@ -1,6 +1,6 @@
1
1
  # Тест на DeepSeek Harness 0.2.2-rc.1 (win-x64)
2
2
 
3
- Дата: **2026-11-06** · пакет: **dsh-desktop-kit 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
 
@@ -40,6 +40,13 @@
40
40
  2. **Путь рабочей области по умолчанию.** На русской Windows 0.2.2 создаёт `C:\Users\<user>\OneDrive\Документы\deepseek-harness\default-workspace` — битая кодировка «Документы», каталог не существует. Это поведение самого 0.2.2, не пакета; для теста путь рабочей области заменён на репозиторий.
41
41
  3. **Headless-профиль** по умолчанию использует API-key route `deepseek-official`; без `DEEPSEEK_API_KEY` ход падает `MISSING_CREDENTIAL`. Web-профиль с `deepseek-account` работает; это ограничение окружения, не плагинов.
42
42
 
43
+ ## Обновление до 2.2.0 (проверено на этом же стенде)
44
+
45
+ - В `C:\Users\bulav\dsh-022-home` не было state-файла; один навык (`code-review-checklist`) был намеренно изменён в Skills Studio.
46
+ - После запуска 2.2.0: 24 навыка приняты как пакетные, **1 конфликт** (`modified-unknown-base`), правка сохранена в файле; в UI по-прежнему 25 карточек.
47
+ - `/kit status` вернул `DSH Desktop Kit 2.2.0`, `Плагины: 7/7`, `конфликтов: 1`, путь состояния.
48
+ - `window.__DSH_DESKTOP_KIT__`: version `2.2.0`, 5 частей, `errors: []`.
49
+
43
50
  ## Ограничения теста
44
51
 
45
52
  - Проверялся профиль `web` и UI через Playwright; отдельный `desktop`-шелл 0.2.2 не запускался (он использует тот же рантайм).
package/docs/TOKENS.md CHANGED
@@ -1,4 +1,4 @@
1
- # Экономия токенов в DSH Desktop Kit 2.1
1
+ # Экономия токенов в DSH Desktop Kit 2.2
2
2
 
3
3
  Документ отвечает на три вопроса: **куда уходили токены раньше**, **что изменилось в 2.x** и **как измерить эффект** на своей сессии.
4
4
 
@@ -0,0 +1,70 @@
1
+ # Обновление без потери данных
2
+
3
+ Пакет рассчитан на то, что пользователь обновляется поверх старой версии. Ниже — что происходит с навыками, настройками и DSH.
4
+
5
+ ## 1. Навыки
6
+
7
+ Каждый навык в пакете имеет SHA-256 в `skills/manifest.json`. После установки пакет пишет состояние:
8
+
9
+ ```
10
+ ~/.dsh/skills/.dsh-kit-skills.json
11
+ ```
12
+
13
+ При следующем запуске:
14
+
15
+ | Ситуация | Действие |
16
+ |---|---|
17
+ | Навыка нет | устанавливается |
18
+ | Навык не менялся с прошлой синхронизации | обновляется, старая версия — в `.dsh-kit-backups/skills/` |
19
+ | Навык изменён пользователем | **не трогается**, попадает в `/kit conflicts` |
20
+ | Нет state-файла, но содержимое совпадает с базой 2.1.4/2.2.0 | обновляется |
21
+ | Нет state-файла, содержимое неизвестно | считается пользовательским, не трогается |
22
+
23
+ Проверить и разрулить:
24
+
25
+ ```text
26
+ /kit status # версия, состояние, конфликты
27
+ /kit sync # синхронизировать без перезаписи правок
28
+ /kit conflicts # список сохранённых пользовательских версий
29
+ /kit force # принудительно заменить (сначала бэкап)
30
+ ```
31
+
32
+ Принудительная замена делает копию в `~/.dsh/skills/.dsh-kit-backups/skills/<name>-<дата>`; оттуда можно вернуть свою версию.
33
+
34
+ ## 2. Настройки
35
+
36
+ - `~/.dsh/dsh-autopilot.json` и `~/.dsh/projects-memory/registry.json` читаются с дефолтами: новые ключи появляются автоматически, старые значения сохраняются.
37
+ - `~/.dsh/projects-memory/<slug>/` не мигрируется и не удаляется.
38
+ - `.dsh-kit-backups/` и `.dsh-kit-trash/` — данные пользователя, пакет их не чистит.
39
+
40
+ ## 3. Обновление DSH
41
+
42
+ Пакет **не фиксирует** `@deepseek-ai/*` и не задаёт `engines.dsh`: жёсткий диапазон сам стал бы причиной «плагины несовместимы» после обновления клиента. Вместо этого:
43
+
44
+ - каждый дочерний плагин монтируется отдельно; ошибка одного не снимает остальные;
45
+ - каждая клиентская часть (плагин набора) изолирована: ошибка внутри одной не снимает остальные;
46
+ - ошибки клиента доступны в `window.__DSH_DESKTOP_KIT__` (версия, части, список ошибок);
47
+ - `doctor.ps1` показывает версию, bundle, состояние навыков и закреплённые пакеты.
48
+
49
+ Проверенная матрица: `0.2.1-rc.5`, `0.2.2-rc.1` (win-x64). Новые версии DSH проверяются отдельным прогоном; отчёт — `docs/TEST-<версия>.md`.
50
+
51
+ ## 4. Откат
52
+
53
+ 1. Поставьте предыдущую версию пакета через «Плагины» (`dsh-desktop-kit@2.1.4`) или `npm i`.
54
+ 2. Навыки: верните нужные папки из `.dsh-kit-backups/skills/`.
55
+ 3. Сброс состояния навыков (если нужно заново принять пакетные версии):
56
+
57
+ ```powershell
58
+ Remove-Item "$env:USERPROFILE\.dsh\skills\.dsh-kit-skills.json"
59
+ ```
60
+
61
+ После этого `/kit sync` заново сравнит хэши; пользовательские правки всё равно не будут перезаписаны без `/kit force`.
62
+
63
+ ## 5. Что проверить после обновления
64
+
65
+ - `/kit status` — версия и конфликты.
66
+ - Плитки «Навыки / Токены / Баланс / Расход».
67
+ - Skills Studio: открывается, карточки на месте.
68
+ - Token Lab: панель считает текущую сессию.
69
+ - Память: `/memory status` для рабочей папки.
70
+ - `doctor.ps1` — нет закреплённых `@deepseek-ai/*`.
Binary file
package/doctor.ps1 ADDED
@@ -0,0 +1,122 @@
1
+ #requires -Version 5.1
2
+ <#
3
+ .SYNOPSIS
4
+ Report whether dsh-desktop-kit is installed and enabled.
5
+ #>
6
+ param(
7
+ [string]$Profile = "desktop",
8
+ [string]$DshHome = ""
9
+ )
10
+
11
+ $ErrorActionPreference = "Continue"
12
+
13
+ if ([string]::IsNullOrWhiteSpace($DshHome)) {
14
+ if ($env:DSH_HOME) { $DshHome = $env:DSH_HOME } else { $DshHome = Join-Path $env:USERPROFILE ".dsh" }
15
+ }
16
+
17
+ $profileDir = Join-Path $DshHome "profiles\$Profile"
18
+ $profileJson = Join-Path $profileDir "package.json"
19
+
20
+ Write-Host "DSH home: $DshHome"
21
+ Write-Host "Profile: $profileDir"
22
+
23
+ $dsh = $null
24
+ $command = Get-Command dsh -ErrorAction SilentlyContinue
25
+ if ($command) { $dsh = $command.Source }
26
+ if (-not $dsh) {
27
+ $fallback = Join-Path ${env:LOCALAPPDATA} "Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd"
28
+ if (Test-Path $fallback) { $dsh = $fallback }
29
+ }
30
+ if ($dsh) {
31
+ $version = & $dsh --version 2>$null
32
+ Write-Host "DSH CLI: $version"
33
+ } else {
34
+ Write-Host "DSH CLI: not found" -ForegroundColor Yellow
35
+ }
36
+
37
+ if (-not (Test-Path $profileJson)) {
38
+ Write-Host "Profile manifest not found." -ForegroundColor Red
39
+ exit 1
40
+ }
41
+
42
+ $json = Get-Content -Path $profileJson -Raw | ConvertFrom-Json
43
+ $issues = 0
44
+
45
+ $dependency = $null
46
+ if ($json.dependencies) { $dependency = $json.dependencies.'dsh-desktop-kit' }
47
+ if ($dependency) {
48
+ Write-Host "Package: $dependency" -ForegroundColor Green
49
+ } else {
50
+ Write-Host "Package: not installed" -ForegroundColor Red
51
+ $issues += 1
52
+ }
53
+
54
+ $bundles = @()
55
+ if ($json.dsh -and $json.dsh.profile -and $json.dsh.profile.bundles) { $bundles = @($json.dsh.profile.bundles) }
56
+ if ($bundles -contains "dsh-desktop-kit") {
57
+ Write-Host "Bundle: enabled" -ForegroundColor Green
58
+ } else {
59
+ Write-Host "Bundle: not enabled" -ForegroundColor Red
60
+ $issues += 1
61
+ }
62
+
63
+ $link = Join-Path $profileDir "node_modules\dsh-desktop-kit"
64
+ if (Test-Path $link) {
65
+ Write-Host "Link: $((Get-Item $link).Target)" -ForegroundColor Green
66
+ $kitPackage = Join-Path $link "package.json"
67
+ if (Test-Path $kitPackage) {
68
+ $kit = Get-Content -Path $kitPackage -Raw | ConvertFrom-Json
69
+ Write-Host "Kit: $($kit.version)" -ForegroundColor Green
70
+ }
71
+ } else {
72
+ Write-Host "Link: missing (run install.ps1 again)" -ForegroundColor Red
73
+ $issues += 1
74
+ }
75
+
76
+ $statePath = Join-Path $DshHome "skills\.dsh-kit-skills.json"
77
+ if (Test-Path $statePath) {
78
+ try {
79
+ $state = Get-Content -Path $statePath -Raw | ConvertFrom-Json
80
+ $skillNames = @()
81
+ if ($state.skills) { $skillNames = @($state.skills.PSObject.Properties | ForEach-Object { $_.Name } | Where-Object { $_ }) }
82
+ $conflictNames = @()
83
+ if ($state.conflicts) { $conflictNames = @($state.conflicts.PSObject.Properties | ForEach-Object { $_.Name } | Where-Object { $_ }) }
84
+ Write-Host "Skill sync: $($skillNames.Count) packaged, $($conflictNames.Count) conflicts, updated $($state.updatedAt)" -ForegroundColor Green
85
+ if ($conflictNames.Count -gt 0) {
86
+ Write-Host "Skill conflicts (your edits were kept): $($conflictNames -join ', ')" -ForegroundColor Yellow
87
+ Write-Host " /kit conflicts - list; /kit sync - update without overwriting"
88
+ }
89
+ } catch {
90
+ Write-Host "Skill sync: state file is unreadable ($($_.Exception.Message))" -ForegroundColor Yellow
91
+ }
92
+ } else {
93
+ Write-Host "Skill sync: not written yet (start DSH once or run /kit sync)" -ForegroundColor Yellow
94
+ }
95
+
96
+ $pinned = @()
97
+ foreach ($name in @($json.dependencies.PSObject.Properties.Name)) {
98
+ if ($name -like "@deepseek-ai/*") { $pinned += $name }
99
+ }
100
+ if ($pinned.Count -gt 0) {
101
+ Write-Host "Pinned @deepseek-ai packages (possible 'incompatible plugins' after a DSH update):" -ForegroundColor Yellow
102
+ $pinned | ForEach-Object { Write-Host " $_" }
103
+ } else {
104
+ Write-Host "Pinned packages: none" -ForegroundColor Green
105
+ }
106
+
107
+ $skillsDir = Join-Path $DshHome "skills"
108
+ if (Test-Path $skillsDir) {
109
+ $count = (Get-ChildItem $skillsDir -Directory | Measure-Object).Count
110
+ Write-Host "Skills: $count" -ForegroundColor Green
111
+ } else {
112
+ Write-Host "Skills: folder missing (the kit creates it on first start)" -ForegroundColor Yellow
113
+ }
114
+
115
+ if ($issues -eq 0) {
116
+ Write-Host ""
117
+ Write-Host "Everything is in place." -ForegroundColor Green
118
+ exit 0
119
+ }
120
+ Write-Host ""
121
+ Write-Host "$issues problem(s) found." -ForegroundColor Red
122
+ exit 1