dsh-plugin-upgrade 0.1.3 → 2.0.0
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/AGENTS.md +146 -47
- package/CHANGELOG.md +92 -32
- package/README-es.md +241 -0
- package/README-hi.md +241 -0
- package/README-pt.md +241 -0
- package/README-zh.md +241 -0
- package/README.md +115 -46
- package/SECURITY.md +1 -1
- package/THIRD_PARTY_NOTICES.md +3 -3
- package/cordis.patch.yml +6 -6
- package/docs/EVIDENCE.md +354 -0
- package/index.mjs +21 -17
- package/lib/route.mjs +112 -0
- package/lib/scan-0.1.6.mjs +310 -0
- package/lib/scan.mjs +264 -31
- package/package.json +55 -10
- package/scripts/changelog-section.mjs +1 -0
- package/scripts/check-readme-sync.mjs +4 -1
- package/scripts/scan-0.1.5.mjs +20 -6
- package/scripts/sweep-all.mjs +6 -2
- package/scripts/verify-artifacts.mjs +44 -14
- package/scripts/verify-self-contained.mjs +13 -3
- package/skills/plugin-upgrade/SKILL.md +88 -0
- package/skills/plugin-upgrade/references/v0.1.3-alpha.1-to-v0.1.5-rc.1.md +421 -0
- package/skills/plugin-upgrade/references/v0.1.5-rc.2-to-v0.1.6-alpha.2.md +75 -0
- package/skills/plugin-upgrade/scripts/scan-0.1.5.mjs +29 -0
- package/types.d.ts +39 -7
- package/README.es.md +0 -172
- package/README.hi.md +0 -172
- package/README.pt.md +0 -172
- package/README.zh.md +0 -172
- package/skills/plugin-upgrade-015/SKILL.md +0 -38
- package/skills/plugin-upgrade-015/references/v0.1.3-alpha.1-to-v0.1.5-alpha.1.md +0 -90
- package/skills/plugin-upgrade-015/scripts/scan-0.1.5.mjs +0 -14
package/README.md
CHANGED
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
- **1024 store channel**: `npm i -g dsh1024` once, then `dsh1024 plugin --profile web add dsh-plugin-upgrade` (counts toward the [deepseek1024.com](https://deepseek1024.com) install ranking).
|
|
5
5
|
[](https://gitee.com/perrylink/dsh-plugin-upgrade)
|
|
6
6
|
|
|
7
|
-
**
|
|
7
|
+
**Merged, version-locked plugin upgrade skill for DeepSeek Harness — `0.1.3-alpha.1` → `0.1.5-rc.1`, carried as two closed legs.**
|
|
8
8
|
|
|
9
|
-
*A
|
|
9
|
+
*Leg A `0.1.3-alpha.1` → `0.1.5-alpha.1`, leg B `0.1.5-alpha.1` → `0.1.5-rc.1`: one corridor card plus one zero-dependency seam scanner over the merged 20-seam catalog, so a client half that stopped mounting silently is never mistaken for "typecheck is green".*
|
|
10
10
|
|
|
11
|
-
> **Official repository.** This is the only official repository of dsh-plugin-upgrade, maintained by PerryLink. Same-name repositories under other accounts are not affiliated.
|
|
11
|
+
> **Official repository.** This is the only official repository of dsh-plugin-upgrade, maintained by PerryLink. It supersedes the two version-locked packages `dsh-plugin-upgrade` (leg A) and `dsh-plugin-upgrade-rc1` (leg B). Same-name repositories under other accounts are not affiliated.
|
|
12
12
|
|
|
13
13
|
[](LICENSE)
|
|
14
14
|
[](https://github.com/topics/dsh-plugin)
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
[](https://www.npmjs.com/package/dsh-plugin-upgrade)
|
|
20
20
|
[](https://www.npmjs.com/package/dsh-plugin-upgrade)
|
|
21
21
|
|
|
22
|
-
[English](README.md) · [简体中文](README
|
|
22
|
+
[English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
|
|
23
23
|
|
|
24
24
|
</div>
|
|
25
25
|
|
|
@@ -29,25 +29,29 @@
|
|
|
29
29
|
|
|
30
30
|
| Surface | Status |
|
|
31
31
|
|---|---|
|
|
32
|
-
| Harness | DeepSeek Harness `0.1.5-rc.1` (
|
|
32
|
+
| Harness | DeepSeek Harness `0.1.5-rc.1` (tag `dsh-v0.1.5-rc.1` = `183f08e9c6dd`; leg A→B handoff `dsh-v0.1.5-alpha.1` = `5dda764ed3aa`; corridor start `0.1.3-alpha.1`). Peer band `@deepseek-ai/dsh-skill >=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0`, `@deepseek-ai/cordis ^4.0.2`, `@deepseek-ai/schemastery ^3.18.2`. |
|
|
33
33
|
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
34
34
|
| Platforms | Anywhere Node runs; the scanner is filesystem-only and platform-neutral |
|
|
35
35
|
| Model | Text-only models fully supported; the skill is a Markdown body, no tool or vision requirement |
|
|
36
|
-
| Scope | **
|
|
36
|
+
| Scope | **Two closed legs, one span**: leg A `0.1.3-alpha.1` → `0.1.5-alpha.1` plus leg B `0.1.5-alpha.1` → `0.1.5-rc.1`. A corridor never widens: a hop after `0.1.5-rc.1` is a new package. |
|
|
37
|
+
| Legs | Both legs live in this package: leg A keeps the `S1`–`S10` + `M1` seams, leg B keeps `C1`, `C2`, `C4`, `C5`, `H1`–`H4`, `P1` — each with its own evidence, card section, fixtures and rollback path. There is no sibling package to install. |
|
|
38
|
+
| `C3` | Retired: leg B's card spelled the stale-type-line false green `C3`, which is the same defect as leg A's `M1`. The fold is recorded on the card; `--seams C3` matches nothing. |
|
|
39
|
+
| Sibling | Do not mount the retired `dsh-plugin-upgrade` in the same profile: both register the agent skill `plugin-upgrade`, so the second mount collides on the skill name. That package is deprecated on npm and its repository is retired; this package replaces both of its legs. |
|
|
37
40
|
|
|
38
41
|
## What you get
|
|
39
42
|
|
|
40
43
|
Two halves, one seam catalog:
|
|
41
44
|
|
|
42
|
-
- **A bundled agent skill (`plugin-upgrade
|
|
43
|
-
- **A zero-dependency CLI (`dsh-plugin-upgrade-scan`)** — reports `file:line` facts for
|
|
45
|
+
- **A bundled agent skill (`plugin-upgrade`)** — the merged corridor card and a fix-and-verify loop. The body first routes the caller to the leg that matches its peer band; the model loads it only when a task actually needs it, and the package contributes no system-prompt paragraph and no tool.
|
|
46
|
+
- **A zero-dependency CLI (`dsh-plugin-upgrade-scan`)** — reports `file:line` facts for the merged twenty seams (`S3`, `S8`, `S9`, `M1`, `S4`, `S5`, `S6`, `S7`, `S2`, `S1`, `S10`, `C1`, `C2`, `P1`, `C4`, `C5`, `H1`, `H2`, `H4`, `H3`) re-read from the harness tag ranges on 2026-09-09 (leg A) and 2026-09-10 (leg B). Exit `1` on any error-severity hit, so it drops straight into CI.
|
|
44
47
|
|
|
45
|
-
The point is the failure mode
|
|
48
|
+
The point is the failure mode this corridor exists to kill: **this span's breakage is mostly silent, from both ends.** The type line can be stale, so the repo compiles against the **old** catalog (seam `M1`), and the bare `conversation` client slot was deleted with no alias while `ctx.slots.inject()` only runs its callback when the declaration exists — so a client half that still targets it stops mounting with no error, no log line and no failed build (seam `C1`). Three classes of breakage survive `typecheck` + `test`:
|
|
46
49
|
|
|
47
|
-
1. the
|
|
48
|
-
2.
|
|
50
|
+
1. the local gate compiles a stale type line — old `paths` alias, or dev/test types pinned at `0.1.5-alpha.*` (seam `M1`);
|
|
51
|
+
2. a log writer omits the V3 required `stream` field, so the session imports and then refuses to resume (seam `S3`);
|
|
52
|
+
3. the tests are mocked against the old shape, so they pass while the host drops the contribution (seam `C1`).
|
|
49
53
|
|
|
50
|
-
|
|
54
|
+
Honest sizing: leg B's workspace sweep found that the family's client halves use only **8** slot keys, all of which survive in rc.1 — for them the rc.1 breakage is **latent, not actual**. Third-party client plugins that targeted the bare `conversation` key are the ones that break, and they break quietly. Leg A's sweep found the opposite texture: 40 repos, 11 of them hit `M1`, and fixing the stale path exposed real TypeScript errors in 3 repos that were previously "green".
|
|
51
55
|
|
|
52
56
|
## Quick start
|
|
53
57
|
|
|
@@ -62,8 +66,8 @@ dsh --profile web --dump-config | grep -A3 'id: dsh-plugin-upgrade'
|
|
|
62
66
|
npx dsh-plugin-upgrade-scan --repo ../my-plugin
|
|
63
67
|
```
|
|
64
68
|
|
|
65
|
-
Then ask the agent to use the `plugin-upgrade
|
|
66
|
-
`skills/plugin-upgrade
|
|
69
|
+
Then ask the agent to use the `plugin-upgrade` skill, or drive the loop yourself with the card at
|
|
70
|
+
`skills/plugin-upgrade/references/v0.1.3-alpha.1-to-v0.1.5-rc.1.md` (leg A is §1, leg B is §2, the merged seam index is §3).
|
|
67
71
|
|
|
68
72
|
## Install & uninstall
|
|
69
73
|
|
|
@@ -82,7 +86,7 @@ Every key is optional and lives in the profile patch:
|
|
|
82
86
|
| Key | Default | Meaning |
|
|
83
87
|
|---|---|---|
|
|
84
88
|
| `enabled` | `true` | Register the packaged skill. Set `false` to keep the dependency mounted but silent. |
|
|
85
|
-
| `skillName` | `plugin-upgrade
|
|
89
|
+
| `skillName` | `plugin-upgrade` | Directory under `skillsRoot` to register, and the name shown in the catalog. |
|
|
86
90
|
| `skillsRoot` | the package's own `./skills` | Where `<skillName>/SKILL.md` lives. Point it at your own card to reuse the plumbing. |
|
|
87
91
|
| `userInvocable` | `true` | Whether a human can invoke the skill by name in addition to the model. |
|
|
88
92
|
|
|
@@ -91,53 +95,67 @@ Every key is optional and lives in the profile patch:
|
|
|
91
95
|
- id: dsh-plugin-upgrade
|
|
92
96
|
name: dsh-plugin-upgrade
|
|
93
97
|
config:
|
|
94
|
-
skillName: plugin-upgrade
|
|
98
|
+
skillName: plugin-upgrade
|
|
95
99
|
```
|
|
96
100
|
|
|
97
101
|
The plugin mounts loud: a missing `SKILL.md`, an empty body, or a frontmatter without `name` fails the mount instead of registering an empty skill.
|
|
98
102
|
|
|
99
103
|
## Surfaces
|
|
100
104
|
|
|
101
|
-
**Skill** — `plugin-upgrade
|
|
105
|
+
**Skill** — `plugin-upgrade` (model- and user-invocable by default). Body: leg routing table, the 8 hard rules and the 6-step loop. References: the merged corridor card. Scripts: the detector, shipped inside the skill directory so relative paths resolve.
|
|
102
106
|
|
|
103
107
|
**CLI** — `dsh-plugin-upgrade-scan`:
|
|
104
108
|
|
|
105
109
|
```sh
|
|
106
|
-
dsh-plugin-upgrade-scan [--repo <path>] [--json <out.json>] [--seams S3,
|
|
110
|
+
dsh-plugin-upgrade-scan [--repo <path>] [--json <out.json>] [--seams S3,C1,P1] [--quiet]
|
|
107
111
|
```
|
|
108
112
|
|
|
109
113
|
| Flag | Meaning |
|
|
110
114
|
|---|---|
|
|
111
115
|
| `--repo <path>` | Repository to scan (default: cwd). |
|
|
112
116
|
| `--json <out.json>` | Also write the machine-readable report (`repo`, `scannedAt`, `files`, `hits[]`, `bySeam`). |
|
|
113
|
-
| `--seams S3,
|
|
117
|
+
| `--seams S3,C1,P1` | Restrict to specific seams of the merged catalog. |
|
|
114
118
|
| `--quiet` | Suppress the human rendering (pair with `--json`). |
|
|
115
119
|
|
|
116
|
-
Exit codes: `0` no error-severity hit · `1` at least one error-severity hit · `2` usage or scan failure. A clean scan is necessary but not sufficient — the
|
|
120
|
+
Exit codes: `0` no error-severity hit · `1` at least one error-severity hit · `2` usage or scan failure. A clean scan is necessary but not sufficient — the exit criterion is a real-host smoke, plus a resume round-trip for log writers (leg A) and a real browser assertion for the client half (leg B).
|
|
117
121
|
|
|
118
|
-
## The
|
|
122
|
+
## The twenty seams
|
|
119
123
|
|
|
120
|
-
|
|
124
|
+
Order follows the catalog in `lib/scan.mjs` (leg A first, then leg B), which is also the order `test/card.test.mjs` pins the card to.
|
|
125
|
+
|
|
126
|
+
| Id | Severity | What changed on the way to `0.1.5-rc.1` |
|
|
121
127
|
|---|---|---|
|
|
122
|
-
| `
|
|
123
|
-
| `
|
|
124
|
-
| `
|
|
125
|
-
| `
|
|
126
|
-
| `
|
|
127
|
-
| `
|
|
128
|
-
| `
|
|
129
|
-
| `
|
|
130
|
-
| `
|
|
131
|
-
| `
|
|
132
|
-
|
|
133
|
-
|
|
128
|
+
| `S3` | error | `assistant/message` gained a required `stream` field (session format V3): a log written without it imports successfully and then refuses to resume (`Session.fromRestore` throws `invalid settlement fields`). |
|
|
129
|
+
| `S8` | error | `SessionHandle.read()` returns `SessionHandleReadResult` (`{ eventState, events }`) instead of the event array; array operations must unwrap `.events`. |
|
|
130
|
+
| `S9` | error | `SystemPrompt`'s config renamed `persona` → `personaPrefix` / `personaSuffix`. Substituting `includeHarnessIdentity: false` is **not** equivalent — it deletes the harness identity block. |
|
|
131
|
+
| `M1` | error | The local gate compiles a stale type line: dev/test types pinned at `0.1.5-alpha.*`, or a `tsconfig` `paths` alias resolving to a missing checkout directory, makes TypeScript fall back silently to the published types. Green gate, wrong ruler. |
|
|
132
|
+
| `S4` | error | `tool/code-dispatch` was renamed `tool/ptc-dispatch`; the old label is no longer recognized in V3 sessions. |
|
|
133
|
+
| `S5` | error | `ctx.agent` was removed: the caller must pass the Agent explicitly (e.g. the second parameter of `setup(agentCtx, agent)`). |
|
|
134
|
+
| `S6` | error | `Inbox` is a type interface, not a constructable class; fixtures use the official unsupported shape and runtime code reads `agent.inbox`. |
|
|
135
|
+
| `S7` | warn | `SubprocessHandle.pid` was removed (only `SubprocessTerminalHandle.pid` remains); drop the field from test fixtures. |
|
|
136
|
+
| `S2` | warn | `EpochHeader.system` was removed: the system prompt is surface node 0's `system/message` now. |
|
|
137
|
+
| `S1` | warn | Session format V3 and generation-suffixed log names — the current generation is `session.v3.jsonl.zstd`, so scripts that hardcode `session.jsonl.zstd` fail silently. |
|
|
138
|
+
| `S10` | warn | Plugin-authored session events must go through the host's fail-closed adaptation gate: `Session.append` has no `ignorable` write channel, so an unconditional append can make a session unreadable. |
|
|
139
|
+
| `C1` | error | The bare client slot `conversation` was deleted and replaced by `main` + `main.conversation`, with **no alias**. `ctx.slots.inject()` only fires when the declaration exists, so a plugin targeting it stops mounting **silently**. |
|
|
140
|
+
| `C2` | error | `@deepseek-ai/dsh-client-ui-sidebar-textpreview` was renamed `…-sidebar-documentpreview`; the old name is gone with no shim package. |
|
|
141
|
+
| `P1` | error | The peer band must keep its second segment: `>=0.1.2-rc.1 <0.2.0` alone **rejects** `0.1.5-rc.1` under npm semver's prerelease-tuple rule (measured `false` on semver 7.8.5). |
|
|
142
|
+
| `C4` | warn | rc.1 added a global main-panel model (`main`, `sidebar.panellist`, `ctx.layout.selectPanel(MainPanelId \| null)`) and appended a `usePanelInfo` standard prop to almost every slot. |
|
|
143
|
+
| `C5` | warn | Document preview moved to the keyed slot `sidebar.right.tab.document` (`DocumentContent`); `sidebar.right.pane.tab` survives but its parent entry became `rightbar.session`. |
|
|
144
|
+
| `H1` | warn | `KNOWN_SESSION_EVENT_TYPES` gained `deliverables/presented` and `subagent/catalog` — the fail-closed vocabulary grew. |
|
|
145
|
+
| `H2` | warn | The new `present` tool's row occupies `tool.call.toolview` key `'present'`, which was free in alpha.1. |
|
|
146
|
+
| `H4` | info | The DeepSeek adapter's default advisory catalog now leads with `deepseek-flash` (DeepSeek-V41-Flash). |
|
|
147
|
+
| `H3` | info | New optional capabilities: `ctx.sessionFeedback`, `ctx.layout.beginNavigation()`, `ctx.workspaces.openSession()` / `openWorkspace()` / `forkSession()`. Listed on the card; deliberately not auto-detected. |
|
|
148
|
+
|
|
149
|
+
`S7`, `S2`, `S1`, `S10`, `C4`, `C5`, `H1`, `H2` and `H4` are deliberately advisory: they have legitimate matches (a repo that already uses the new API, a documentation snapshot, a plugin's own model-id table, a Node `ChildProcess.pid`), so the scanner reports them as leads for manual review rather than failures. `M1` and `P1` are **structured** checks — they resolve `package.json` and `tsconfig*.json` instead of matching text — and `H3` is **card-only**: documented, id-parity checked, and deliberately without a detector (`CARD_ONLY = ['H3']`).
|
|
134
150
|
|
|
135
151
|
## What this does not cover
|
|
136
152
|
|
|
137
|
-
- **
|
|
153
|
+
- **A hop after `0.1.5-rc.1`.** The merged span ends at rc.1 by construction: the harness hop `0.1.5-rc.1` → `0.1.5-rc.2` added no plugin-facing seam (this package's own dev/test pin and CI probe run on the `0.1.5-rc.2` line so the catalog is verified against the newest published types). Anything that adds a seam later is a **new package** — a card that drifts is worse than no card.
|
|
154
|
+
- **The `0.1.1` → `0.1.2` hop.** Use the community convergence skill.
|
|
155
|
+
- **Restating across legs.** Leg A owns the session-format seams (`assistant/message.stream`, `SessionHandleReadResult`, `EpochHeader.system`, `ctx.agent`, `Inbox`, `SystemPrompt.persona`, the V3 log generation) and leg B does not restate them — the whole `packages/core/session/src` diff in leg B's range is two added event-type literals and one comment line. Each leg's card section keeps its own scope statement.
|
|
138
156
|
- **The DSH user-facing upgrade path.** This package upgrades *plugin source code*, not a user's harness installation.
|
|
139
|
-
- **
|
|
140
|
-
- **Proof.** A clean scan is a hypothesis. The exit criterion is a real-host smoke (temp `DSH_HOME`, target CLI, `plugin add <tarball>`, `--dump-config
|
|
157
|
+
- **Theme tokens.** `docs/web-styling.md` has zero changes in leg B's range.
|
|
158
|
+
- **Proof.** A clean scan is a hypothesis. The exit criterion is a real-host smoke (temp `DSH_HOME`, target CLI, `plugin add <tarball>`, `--dump-config`) plus a resume round-trip for session-log writers (leg A) and a real browser assertion for every client-side hit (leg B).
|
|
141
159
|
|
|
142
160
|
## Security boundaries
|
|
143
161
|
|
|
@@ -149,23 +167,74 @@ Exit codes: `0` no error-severity hit · `1` at least one error-severity hit ·
|
|
|
149
167
|
## Development
|
|
150
168
|
|
|
151
169
|
```sh
|
|
152
|
-
pnpm install
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
170
|
+
npm install # or: pnpm install (the repo ships a pnpm-lock.yaml)
|
|
171
|
+
npm test # node --test: scanner, card<->catalog parity, real Cordis + SkillRegistry
|
|
172
|
+
npm run verify:self-contained # every import resolves inside the package
|
|
173
|
+
npm run verify:artifacts # the packed tarball carries the skill, CLI and patch, and excludes tests
|
|
174
|
+
npm run check:readmes # five-language README consistency
|
|
175
|
+
npm pack
|
|
158
176
|
```
|
|
159
177
|
|
|
160
|
-
The scanner has
|
|
178
|
+
The scanner has a synthetic fixture pair **per leg**: `fixtures/leg-a-bad-repo` (leg A's session/config seams, every error seam present on purpose) with `fixtures/leg-a-good-repo` (adapted), and `fixtures/bad-repo` (leg B's client-slot seams) with `fixtures/good-repo` (adapted) — plus a live negative on a family repository already pinned to `0.1.5-rc.1`, so a regression in the catalog fails the suite rather than a downstream user. `test/card.test.mjs` asserts that the merged card index and `lib/scan.mjs` name **exactly** the same twenty seam ids with the same severities, and that `CARD_ONLY` is exactly `['H3']` — the evidence-binding rule as a machine gate.
|
|
161
179
|
|
|
162
180
|
## Topics
|
|
163
181
|
|
|
164
|
-
`dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `plugin-upgrade`, `migration`, `skill`, `version-card`, `scanner` (mirror `package.json` keywords; `dsh-plugin` is the ecosystem's visibility channel).
|
|
182
|
+
`dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `plugin-upgrade`, `migration`, `skill`, `version-card`, `scanner`, `client-slots` (mirror `package.json` keywords; `dsh-plugin` is the ecosystem's visibility channel).
|
|
165
183
|
|
|
166
184
|
## PerryLink DSH Plugin Family
|
|
167
185
|
|
|
168
|
-
|
|
186
|
+
This project is one of the [40 DeepSeek Harness plugins](https://github.com/PerryLink) maintained by [PerryLink](https://github.com/PerryLink). If this one helps you, the others likely will too:
|
|
187
|
+
|
|
188
|
+
| Plugin | One-liner |
|
|
189
|
+
|---|---|
|
|
190
|
+
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Second-model auto-review on the approval chain, fail-closed by default | |
|
|
191
|
+
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | |
|
|
192
|
+
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Durable background child agents with a Web UI sidebar, messaging and interrupt | |
|
|
193
|
+
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | |
|
|
194
|
+
| **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | |
|
|
195
|
+
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | |
|
|
196
|
+
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Unified session + workspace + config checkpoints with one-shot `/rewind` | |
|
|
197
|
+
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code, Codex, OpenCode and Hermes sessions, memories and skills into DSH | |
|
|
198
|
+
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness — Windows first. | |
|
|
199
|
+
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Terminal-style input history for the web composer: arrows, Ctrl+R search | |
|
|
200
|
+
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Deterministic dataset profiling, cleaning and citation verification | |
|
|
201
|
+
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | |
|
|
202
|
+
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Engineering-discipline guard: requirements grill, test gates, adversary review | |
|
|
203
|
+
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. | |
|
|
204
|
+
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics: load, spill, compaction and cache hit rate | |
|
|
205
|
+
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Chinese mutual-fund research with sealed, traceable source snapshots | |
|
|
206
|
+
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issue/CI integration with every write approval-gated | |
|
|
207
|
+
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | Industry and company research pack: chain map, policy timeline, company cards | |
|
|
208
|
+
| **[dsh-kit](https://github.com/PerryLink/dsh-kit)** | One-command starter pack that installs the core family | |
|
|
209
|
+
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | Local document knowledge base with hybrid search and citation-aware injection | |
|
|
210
|
+
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | Local Ollama model discovery and task-based routing with cloud fallback | |
|
|
211
|
+
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions, symbols and rename | |
|
|
212
|
+
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking at the model boundary with a host-side restore table | |
|
|
213
|
+
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | MCP management console: `/mcp` command, Settings tab and trial calls | |
|
|
214
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory protocol (`ctx.memory` + SQLite) | |
|
|
215
|
+
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse telemetry export from the session event stream | |
|
|
216
|
+
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Runtime-switchable model output styles | |
|
|
217
|
+
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Declarative allow/deny/ask rules plus a process-level network policy | |
|
|
218
|
+
| **[dsh-plugin-certification](https://github.com/PerryLink/dsh-plugin-certification)** | Community certification registry with repro-checkable grades and badges | |
|
|
219
|
+
| **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | Zero-dependency static + sandbox smoke detector for DSH plugins | |
|
|
220
|
+
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-dev knowledge base, agent skill and the `dsh-plugin-dev` CLI toolchain | |
|
|
221
|
+
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
|
|
222
|
+
| **[dsh-plugin-portal](https://github.com/PerryLink/dsh-plugin-portal)** | Zero-dependency static portal rendering the whole plugin family as one page | |
|
|
223
|
+
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat, Telegram, Feishu + a session console | |
|
|
224
|
+
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research reports: evidence ledger, manifest seal, per-claim verdicts | |
|
|
225
|
+
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional plugin quality scoring with an evidence-backed leaderboard | |
|
|
226
|
+
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions and workspaces in the Web sidebar with per-pin colors | |
|
|
227
|
+
| **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | Git-backed cross-device session synchronization with keep-both merges | |
|
|
228
|
+
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | Security-audit skill pack plus the `plugin_vet` supply-chain gate | |
|
|
229
|
+
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | Voice-first session loop: speech-to-text input and text-to-speech replies | |
|
|
230
|
+
| **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | Cross-session team rooms: shared message bus, task board and timeline | |
|
|
231
|
+
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | Isolated install-and-smoke test drives with a pass/fail matrix | |
|
|
232
|
+
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | TickTick/Dida365 task bridge: session-header panel plus eleven agent tools | |
|
|
233
|
+
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | Vendor parameter translation and deterministic JSON repair | |
|
|
234
|
+
| **[dsh-wechat](https://github.com/pan17/dsh-wechat)** | WeChat ↔ DSH bridge (Tencent iLink bot) developed with [pan17](https://github.com/pan17/dsh-wechat), who hosts the repo | |
|
|
235
|
+
| **[dsh-personal-directive](https://github.com/PerryLink/dsh-personal-directive)** | Personal directive injector with a top-bar toggle (fork of liucai2026/dsh-personal-directive) | |
|
|
236
|
+
|
|
237
|
+
Part of the PerryLink DSH plugin family — 40+ repositories covering sessions, memory, permissions, delivery, observability and developer tooling. Browse the catalog at [perrylink-dsh-catalog.perrylink.workers.dev](https://perrylink-dsh-catalog.perrylink.workers.dev) or the [`dsh-plugin` topic](https://github.com/topics/dsh-plugin).
|
|
169
238
|
|
|
170
239
|
## License
|
|
171
240
|
|
package/SECURITY.md
CHANGED
|
@@ -32,7 +32,7 @@ In scope:
|
|
|
32
32
|
Out of scope:
|
|
33
33
|
|
|
34
34
|
- findings in the DeepSeek Harness itself (report those upstream);
|
|
35
|
-
- the *content* of the
|
|
35
|
+
- the *content* of the corridor card being incomplete for a repository the maintainer has
|
|
36
36
|
never seen — that is a bug report, not a vulnerability;
|
|
37
37
|
- anything that requires the attacker to already control the machine or the repository
|
|
38
38
|
being scanned.
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Third-party notices
|
|
2
2
|
|
|
3
|
-
`dsh-plugin-upgrade` ships **no bundled third-party code**. The published tarball
|
|
4
|
-
only this repository's source, the packaged skill and its version card.
|
|
3
|
+
`dsh-plugin-upgrade` ships **no bundled third-party code**. The published tarball
|
|
4
|
+
contains only this repository's source, the packaged skill and its merged version card.
|
|
5
5
|
|
|
6
6
|
The dependencies below are declared as `peerDependencies` (the host provides them at
|
|
7
7
|
runtime) and as `devDependencies` (used only to run the test suite in this repository). None
|
|
@@ -12,7 +12,7 @@ of them is copied into the published artifact.
|
|
|
12
12
|
| `@deepseek-ai/cordis` | `^4.0.2` (peer) | Plugin runtime (Context, effect, inject) | Apache-2.0 |
|
|
13
13
|
| `@deepseek-ai/dsh-skill` | `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0` (peer) | `skills` service and `SkillRegistry` used by the tests | Apache-2.0 |
|
|
14
14
|
| `@deepseek-ai/schemastery` | `^3.18.2` (peer) | `Config` schema | Apache-2.0 |
|
|
15
|
-
| `@deepseek-ai/dsh-skill` | `0.1.5-
|
|
15
|
+
| `@deepseek-ai/dsh-skill` | `0.1.5-rc.2` (dev) | Real-registry mount test against the published `0.1.5-rc.2` line (the newest published types verify the same merged seam catalog) | Apache-2.0 |
|
|
16
16
|
|
|
17
17
|
The scanner (`lib/scan.mjs`) and the CLI import only Node.js built-ins (`node:fs`,
|
|
18
18
|
`node:path`) and therefore add no transitive install-time dependency of their own.
|
package/cordis.patch.yml
CHANGED
|
@@ -3,19 +3,19 @@
|
|
|
3
3
|
#
|
|
4
4
|
# A loader patch file is a top-level YAML array; each entry inserts (or removes)
|
|
5
5
|
# composition rows. This bundle mounts one row and registers one bundled agent
|
|
6
|
-
# skill (`plugin-upgrade
|
|
6
|
+
# skill (`plugin-upgrade`) through the `skills` service. It contributes no
|
|
7
7
|
# system-prompt paragraph and no tool: the model sees the skill only when a task
|
|
8
|
-
# needs it, and the CLI (`dsh-plugin-upgrade-scan`) stays an explicit
|
|
9
|
-
# action. Every key below is a Config field (Schemastery schema);
|
|
10
|
-
# fail the profile load loudly. See README.md "Configuration".
|
|
8
|
+
# needs it, and the CLI (`dsh-plugin-upgrade-scan`) stays an explicit
|
|
9
|
+
# developer action. Every key below is a Config field (Schemastery schema);
|
|
10
|
+
# invalid values fail the profile load loudly. See README.md "Configuration".
|
|
11
11
|
- insert:
|
|
12
12
|
- id: dsh-plugin-upgrade
|
|
13
13
|
name: dsh-plugin-upgrade
|
|
14
14
|
config:
|
|
15
15
|
# Register the packaged skill. Default true.
|
|
16
16
|
enabled: true
|
|
17
|
-
# Skill name published to the model catalog. Default 'plugin-upgrade
|
|
18
|
-
skillName: plugin-upgrade
|
|
17
|
+
# Skill name published to the model catalog. Default 'plugin-upgrade'.
|
|
18
|
+
skillName: plugin-upgrade
|
|
19
19
|
# Skill root inside the package; must contain <skillName>/SKILL.md.
|
|
20
20
|
# Default: the package's own ./skills directory.
|
|
21
21
|
# skillsRoot: /absolute/path/to/skills
|