dsh-desktop-kit 2.2.0 → 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 +6 -0
- package/README.md +10 -10
- package/client.js +1 -1
- package/docs/COMPATIBILITY.md +1 -1
- package/docs/INSTALL.md +1 -1
- package/docs/TEST-0.2.2.md +1 -1
- package/doctor.ps1 +122 -0
- package/install.ps1 +99 -0
- package/package.json +4 -1
- package/skills/manifest.json +2 -2
- package/skills-baseline.json +27 -0
- package/uninstall.ps1 +74 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
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
|
+
|
|
3
9
|
## 2.2.0 — 2026-11-06
|
|
4
10
|
|
|
5
11
|
Безопасные обновления: пакет больше не оставляет старые навыки «навсегда» и не затирает правки пользователя.
|
package/README.md
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
Набор из **7 плагинов и 25 навыков** для DeepSeek Harness 0.2.x: русский интерфейс, автопилот навыков, токен-лаборатория, студия навыков, память проектов, перенос чатов и резервные копии профиля.
|
|
6
6
|
|
|
7
|
-

|
|
8
8
|
|
|
9
|
-
**v2.2.
|
|
9
|
+
**v2.2.1** · MIT · проверено на DSH `0.2.1-rc.5` и `0.2.2-rc.1` (Windows 11) · без внешних зависимостей и телеметрии
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
@@ -60,19 +60,19 @@
|
|
|
60
60
|
|
|
61
61
|
### Skills Studio: каталог, стоимость и редактор
|
|
62
62
|
|
|
63
|
-

|
|
64
64
|
|
|
65
|
-

|
|
66
66
|
|
|
67
67
|
### Token Lab: куда уходит контекст
|
|
68
68
|
|
|
69
|
-

|
|
70
70
|
|
|
71
71
|
### Тёмная тема и мобильный
|
|
72
72
|
|
|
73
|
-

|
|
74
74
|
|
|
75
|
-
<img src="https://cdn.jsdelivr.net/npm/dsh-desktop-kit@2.2.
|
|
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">
|
|
76
76
|
|
|
77
77
|
## Окно-напоминание: пиковый тариф
|
|
78
78
|
|
|
@@ -82,11 +82,11 @@ DeepSeek включает двойной тариф в пиковые часы (
|
|
|
82
82
|
- **в окне** — красная карточка: причина, границы окна в местном времени и UTC, живой отсчёт до конца и рекомендация, когда вернуться;
|
|
83
83
|
- **после окна** — карточка исчезает; состояние всегда доступно через `window.__DSH_PEAK_GUARD__.state()`.
|
|
84
84
|
|
|
85
|
-

|
|
86
86
|
|
|
87
|
-

|
|
88
88
|
|
|
89
|
-
<img src="https://cdn.jsdelivr.net/npm/dsh-desktop-kit@2.2.
|
|
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">
|
|
90
90
|
|
|
91
91
|
Подробности и настройки — [plugins/dsh-peak-guard/README.md](plugins/dsh-peak-guard/README.md).
|
|
92
92
|
|
package/client.js
CHANGED
|
@@ -4155,7 +4155,7 @@ var(--dsw-alias-bg-layer-1,#fff);box-shadow:inset 0 1px 0 color-mix(in srgb,#fff
|
|
|
4155
4155
|
if (__kitErrors.length <= 5) console.error("[dsh-desktop-kit] registration failed:", label, message);
|
|
4156
4156
|
};
|
|
4157
4157
|
try {
|
|
4158
|
-
window.__DSH_DESKTOP_KIT__ = { version: "2.2.
|
|
4158
|
+
window.__DSH_DESKTOP_KIT__ = { version: "2.2.1", parts: __partNames, errors: __kitErrors, ready: false };
|
|
4159
4159
|
} catch {}
|
|
4160
4160
|
const __inject = [];
|
|
4161
4161
|
for (const __part of __parts) {
|
package/docs/COMPATIBILITY.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
| DSH | Состояние | Что проверено |
|
|
6
6
|
|---|---|---|
|
|
7
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.
|
|
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
11
|
## Политика обновлений
|
package/docs/INSTALL.md
CHANGED
package/docs/TEST-0.2.2.md
CHANGED
|
@@ -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.2.
|
|
3
|
+
Дата: **2026-11-06** · пакет: **dsh-desktop-kit 2.2.1** (первый прогон — 2.1.3, фикс автопилота — 2.1.4) · ОС: Windows 11.
|
|
4
4
|
|
|
5
5
|
## Стенд
|
|
6
6
|
|
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
|
package/install.ps1
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
#requires -Version 5.1
|
|
2
|
+
<#
|
|
3
|
+
.SYNOPSIS
|
|
4
|
+
Install dsh-desktop-kit into a DeepSeek Harness profile.
|
|
5
|
+
|
|
6
|
+
.DESCRIPTION
|
|
7
|
+
Copies nothing into the profile outside pnpm's own dependency install:
|
|
8
|
+
the kit is linked from this repository, the bundle is added to
|
|
9
|
+
dsh.profile.bundles, and the DSH launcher is asked to run pnpm.
|
|
10
|
+
Skills are copied by the kit itself on its first start.
|
|
11
|
+
|
|
12
|
+
.PARAMETER Profile
|
|
13
|
+
DSH profile name, default "desktop".
|
|
14
|
+
|
|
15
|
+
.PARAMETER DshHome
|
|
16
|
+
DSH home; defaults to $env:DSH_HOME or %USERPROFILE%\.dsh.
|
|
17
|
+
|
|
18
|
+
.PARAMETER RepoPath
|
|
19
|
+
Repository root; defaults to this script's folder.
|
|
20
|
+
#>
|
|
21
|
+
param(
|
|
22
|
+
[string]$Profile = "desktop",
|
|
23
|
+
[string]$DshHome = "",
|
|
24
|
+
[string]$RepoPath = ""
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
$ErrorActionPreference = "Stop"
|
|
28
|
+
|
|
29
|
+
function Write-Step([string]$Text) {
|
|
30
|
+
Write-Host ""
|
|
31
|
+
Write-Host "==> $Text" -ForegroundColor Cyan
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if ([string]::IsNullOrWhiteSpace($RepoPath)) { $RepoPath = $PSScriptRoot }
|
|
35
|
+
if (-not (Test-Path (Join-Path $RepoPath "package.json"))) {
|
|
36
|
+
throw "package.json not found in $RepoPath"
|
|
37
|
+
}
|
|
38
|
+
if ([string]::IsNullOrWhiteSpace($DshHome)) {
|
|
39
|
+
if ($env:DSH_HOME) { $DshHome = $env:DSH_HOME } else { $DshHome = Join-Path $env:USERPROFILE ".dsh" }
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
$profileDir = Join-Path $DshHome "profiles\$Profile"
|
|
43
|
+
$profileJson = Join-Path $profileDir "package.json"
|
|
44
|
+
|
|
45
|
+
Write-Step "Checking the DSH environment"
|
|
46
|
+
$dsh = $null
|
|
47
|
+
$command = Get-Command dsh -ErrorAction SilentlyContinue
|
|
48
|
+
if ($command) { $dsh = $command.Source }
|
|
49
|
+
if (-not $dsh) {
|
|
50
|
+
$fallback = Join-Path ${env:LOCALAPPDATA} "Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd"
|
|
51
|
+
if (Test-Path $fallback) { $dsh = $fallback }
|
|
52
|
+
}
|
|
53
|
+
if (-not $dsh) { throw "dsh CLI not found. Install DeepSeek Harness, run it once, then retry." }
|
|
54
|
+
if (-not (Test-Path $profileJson)) {
|
|
55
|
+
throw "Profile '$Profile' does not exist ($profileDir). Start DSH once, close it, then retry."
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
Write-Host "dsh: $dsh"
|
|
59
|
+
Write-Host "DSH home: $DshHome"
|
|
60
|
+
Write-Host "Profile: $Profile"
|
|
61
|
+
Write-Host "Repository: $RepoPath"
|
|
62
|
+
|
|
63
|
+
$running = Get-Process -Name "DeepSeek Harness" -ErrorAction SilentlyContinue
|
|
64
|
+
if ($running) {
|
|
65
|
+
Write-Host "DSH is running. Close it before installing so the profile is not written twice." -ForegroundColor Yellow
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
Write-Step "Backing up the profile manifest"
|
|
69
|
+
$stamp = Get-Date -Format "yyyyMMdd-HHmmss"
|
|
70
|
+
$backupDir = Join-Path $profileDir ("backup-kit-" + $stamp)
|
|
71
|
+
New-Item -ItemType Directory -Path $backupDir -Force | Out-Null
|
|
72
|
+
Copy-Item $profileJson (Join-Path $backupDir "package.json") -Force
|
|
73
|
+
$patchFile = Join-Path $profileDir "cordis.patch.yml"
|
|
74
|
+
if (Test-Path $patchFile) { Copy-Item $patchFile (Join-Path $backupDir "cordis.patch.yml") -Force }
|
|
75
|
+
Write-Host "Backup: $backupDir"
|
|
76
|
+
|
|
77
|
+
Write-Step "Installing the package through the DSH launcher (pnpm)"
|
|
78
|
+
& $dsh plugin --profile $Profile add $RepoPath
|
|
79
|
+
if ($LASTEXITCODE -ne 0) {
|
|
80
|
+
throw "dsh plugin add exited with code $LASTEXITCODE. See the output above."
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
Write-Step "Enabling the bundle in the profile manifest"
|
|
84
|
+
$json = Get-Content -Path $profileJson -Raw | ConvertFrom-Json
|
|
85
|
+
if ($null -eq $json.dsh) { $json | Add-Member -NotePropertyName dsh -NotePropertyValue ([pscustomobject]@{}) }
|
|
86
|
+
if ($null -eq $json.dsh.profile) { $json.dsh | Add-Member -NotePropertyName profile -NotePropertyValue ([pscustomobject]@{}) }
|
|
87
|
+
$bundles = @()
|
|
88
|
+
if ($json.dsh.profile.bundles) { $bundles = @($json.dsh.profile.bundles) }
|
|
89
|
+
if ($bundles -notcontains "dsh-desktop-kit") { $bundles += "dsh-desktop-kit" }
|
|
90
|
+
$json.dsh.profile | Add-Member -NotePropertyName bundles -NotePropertyValue $bundles -Force
|
|
91
|
+
$jsonText = $json | ConvertTo-Json -Depth 20
|
|
92
|
+
[System.IO.File]::WriteAllText($profileJson, $jsonText, (New-Object System.Text.UTF8Encoding($false)))
|
|
93
|
+
|
|
94
|
+
Write-Step "Done"
|
|
95
|
+
Write-Host "1. Start DeepSeek Harness (restart it if it was running)." -ForegroundColor Green
|
|
96
|
+
Write-Host "2. Settings -> Plugins: 'dsh-desktop-kit' is enabled." -ForegroundColor Green
|
|
97
|
+
Write-Host "3. The kit copies missing skills into $DshHome\skills on first start." -ForegroundColor Green
|
|
98
|
+
Write-Host ""
|
|
99
|
+
Write-Host "Rollback: run uninstall.ps1, or restore package.json from $backupDir." -ForegroundColor DarkGray
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-desktop-kit",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.1",
|
|
4
4
|
"description": "DeepSeek Harness desktop kit 2.2: update-safe self-applying skills, live token lab, Skills Studio, self-scanning project memory, Russian UI, peak guard, chat move and profile transfer.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"deepseek-harness",
|
|
@@ -34,6 +34,9 @@
|
|
|
34
34
|
"README.md",
|
|
35
35
|
"CHANGELOG.md",
|
|
36
36
|
"LICENSE",
|
|
37
|
+
"doctor.ps1",
|
|
38
|
+
"install.ps1",
|
|
39
|
+
"uninstall.ps1",
|
|
37
40
|
"lib/**",
|
|
38
41
|
"docs/**",
|
|
39
42
|
"skills-baseline.json",
|
package/skills/manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": 1,
|
|
3
|
-
"kitVersion": "2.2.
|
|
4
|
-
"generatedAt": "2026-11-
|
|
3
|
+
"kitVersion": "2.2.1",
|
|
4
|
+
"generatedAt": "2026-11-06T12:03:12.122Z",
|
|
5
5
|
"skills": {
|
|
6
6
|
"code-review-checklist": {
|
|
7
7
|
"hash": "e665bf72cfbfb77948a3cd6df6ebced38777f9aff543d7b9c80b2ced8cccc662",
|
package/skills-baseline.json
CHANGED
|
@@ -54,6 +54,33 @@
|
|
|
54
54
|
"ui-design-system": "19244221171995b758dbad02f2e3602859308370b50cc37d93c6f2a6d44cd6f1",
|
|
55
55
|
"web-research": "9bf4d8ba6d2a0fc39c241cdd9f5fe54835af28872473aa617941589c526387c8",
|
|
56
56
|
"wow-design": "81139f32fc759f438a36eb4c0212ed3ea17df9d8075e909580e12bc47a0848dd"
|
|
57
|
+
},
|
|
58
|
+
"2.2.1": {
|
|
59
|
+
"code-review-checklist": "e665bf72cfbfb77948a3cd6df6ebced38777f9aff543d7b9c80b2ced8cccc662",
|
|
60
|
+
"content-writing": "a21b26ff814e0337d03eeb587b200a1dc66e7de91bfea0f32840ddf8884deeee",
|
|
61
|
+
"context-economy": "bc8fa2e15327d21cf9ebd187b0df5f620d6a5b617976fa88910ae7877eb46b75",
|
|
62
|
+
"database-safety": "56f43f6bac270aefce34355e2a932192e4d17725d8faec5f91f476792b28c617",
|
|
63
|
+
"debugging-playbook": "0d70b8102f04d29774e466efd81abb448c84a6537a2ca3438f6931a2d6fe0c3a",
|
|
64
|
+
"design-critique": "bbc6ca34b0b76798d581dcd78e83a59040dfac028b5e10d8e7a9be28225410b8",
|
|
65
|
+
"dev-workflow": "832d36da6d3dc3e6e7d1feb18c38260ed8669c7702dffbd2d7a96fc9bc93d22f",
|
|
66
|
+
"git-and-ci": "0681041edb935da2c124265bbdacd3b6a0a96c7f163323960cff8c8ea67fd2f4",
|
|
67
|
+
"pg-upgrade-verify": "d734178c5dad317fc55842215bbeeba85230cdd8e7b0ea46d74eed92910b8dea",
|
|
68
|
+
"project-deep-dive": "a70355f2a40b42a6ff03e745ba42389549b4efe4f392c98033fe5073f946452e",
|
|
69
|
+
"project-memory-maintenance": "648f175093f6a86e20157156d8731b8e9602badedc79188e77160b18832f4893",
|
|
70
|
+
"release-and-deploy": "e6ed27856b00e8759d31659162290307c16e203d2b5d28fcacb574be17fc795b",
|
|
71
|
+
"requirements-and-planning": "532cbccfb2d0f7eca06343927aba100bd653145ccd9b9173ca50299194631a05",
|
|
72
|
+
"security-review": "8665b2c469de8e83aca670021d5c335fa8c9b93b8dc6bb866759e6062b1abde4",
|
|
73
|
+
"seo": "ed48ebc4c1278f857ff430f9a5ec55f638c2f9ba07cc406185cfb94be18ee80d",
|
|
74
|
+
"service-desk-conventions": "22ae6c29b7debb0154d183bc732795b67557aeaa0ac906d7b038134aea8ba39a",
|
|
75
|
+
"service-desk-db-safety": "672c08d25e0a9262aeb0eec27b6daa2a619fade6ff3269bc2b9dc27e22c83d28",
|
|
76
|
+
"service-desk-release": "1bd0c03f772bf4b79ec4e887f5d0ebd564653bafd3d0d33d70f6c934afdcce47",
|
|
77
|
+
"service-desk-testing": "eaff64154a596590684308cdccb3f55099240589b57c0f506a85e5b38ddf5ac5",
|
|
78
|
+
"service-desk-ui": "a3a0e78ab147f4837e4ca9736f4d87cf77a6638c2db7c5859629df70abdd2c1c",
|
|
79
|
+
"skills-router": "63c2dcdeb07dd4af464a30a8065465bd06b73e4caa8aa874802e5188d4d5a4ae",
|
|
80
|
+
"testing-strategy": "773fdf1e389e59841b7766862f8890a11fba4a2fce42a2022b9c4bfaae8f6ecc",
|
|
81
|
+
"ui-design-system": "19244221171995b758dbad02f2e3602859308370b50cc37d93c6f2a6d44cd6f1",
|
|
82
|
+
"web-research": "9bf4d8ba6d2a0fc39c241cdd9f5fe54835af28872473aa617941589c526387c8",
|
|
83
|
+
"wow-design": "81139f32fc759f438a36eb4c0212ed3ea17df9d8075e909580e12bc47a0848dd"
|
|
57
84
|
}
|
|
58
85
|
}
|
|
59
86
|
}
|
package/uninstall.ps1
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
#requires -Version 5.1
|
|
2
|
+
<#
|
|
3
|
+
.SYNOPSIS
|
|
4
|
+
Remove dsh-desktop-kit from a DSH profile.
|
|
5
|
+
|
|
6
|
+
.PARAMETER RemoveSkills
|
|
7
|
+
Also delete the bundled skill folders from the DSH home.
|
|
8
|
+
#>
|
|
9
|
+
param(
|
|
10
|
+
[string]$Profile = "desktop",
|
|
11
|
+
[string]$DshHome = "",
|
|
12
|
+
[switch]$RemoveSkills
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
$ErrorActionPreference = "Stop"
|
|
16
|
+
|
|
17
|
+
function Write-Step([string]$Text) {
|
|
18
|
+
Write-Host ""
|
|
19
|
+
Write-Host "==> $Text" -ForegroundColor Cyan
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if ([string]::IsNullOrWhiteSpace($DshHome)) {
|
|
23
|
+
if ($env:DSH_HOME) { $DshHome = $env:DSH_HOME } else { $DshHome = Join-Path $env:USERPROFILE ".dsh" }
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
$profileDir = Join-Path $DshHome "profiles\$Profile"
|
|
27
|
+
$profileJson = Join-Path $profileDir "package.json"
|
|
28
|
+
if (-not (Test-Path $profileJson)) { throw "Profile manifest not found: $profileJson" }
|
|
29
|
+
|
|
30
|
+
$dsh = $null
|
|
31
|
+
$command = Get-Command dsh -ErrorAction SilentlyContinue
|
|
32
|
+
if ($command) { $dsh = $command.Source }
|
|
33
|
+
if (-not $dsh) {
|
|
34
|
+
$fallback = Join-Path ${env:LOCALAPPDATA} "Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd"
|
|
35
|
+
if (Test-Path $fallback) { $dsh = $fallback }
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
$stamp = Get-Date -Format "yyyyMMdd-HHmmss"
|
|
39
|
+
$backupDir = Join-Path $profileDir ("backup-kit-remove-" + $stamp)
|
|
40
|
+
New-Item -ItemType Directory -Path $backupDir -Force | Out-Null
|
|
41
|
+
Copy-Item $profileJson (Join-Path $backupDir "package.json") -Force
|
|
42
|
+
|
|
43
|
+
Write-Step "Disabling the bundle"
|
|
44
|
+
$json = Get-Content -Path $profileJson -Raw | ConvertFrom-Json
|
|
45
|
+
if ($json.dsh -and $json.dsh.profile -and $json.dsh.profile.bundles) {
|
|
46
|
+
$json.dsh.profile.bundles = @($json.dsh.profile.bundles | Where-Object { $_ -ne "dsh-desktop-kit" })
|
|
47
|
+
}
|
|
48
|
+
[System.IO.File]::WriteAllText($profileJson, ($json | ConvertTo-Json -Depth 20), (New-Object System.Text.UTF8Encoding($false)))
|
|
49
|
+
|
|
50
|
+
Write-Step "Removing the package"
|
|
51
|
+
if ($dsh) {
|
|
52
|
+
& $dsh plugin --profile $Profile remove dsh-desktop-kit
|
|
53
|
+
if ($LASTEXITCODE -ne 0) { Write-Host "pnpm remove exited with $LASTEXITCODE; remove the dependency by hand if it stays." -ForegroundColor Yellow }
|
|
54
|
+
} else {
|
|
55
|
+
Write-Host "dsh CLI not found; edit package.json by hand." -ForegroundColor Yellow
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if ($RemoveSkills) {
|
|
59
|
+
Write-Step "Removing bundled skills"
|
|
60
|
+
$skillsDir = Join-Path $DshHome "skills"
|
|
61
|
+
$source = Join-Path $PSScriptRoot "skills"
|
|
62
|
+
if ((Test-Path $skillsDir) -and (Test-Path $source)) {
|
|
63
|
+
foreach ($entry in Get-ChildItem $source -Directory) {
|
|
64
|
+
$target = Join-Path $skillsDir $entry.Name
|
|
65
|
+
if (Test-Path $target) {
|
|
66
|
+
Remove-Item $target -Recurse -Force
|
|
67
|
+
Write-Host "removed $($entry.Name)"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
Write-Step "Done"
|
|
74
|
+
Write-Host "Restart DeepSeek Harness. Backup: $backupDir" -ForegroundColor Green
|