dsh-plugin-upgrade 2.0.0 → 2.0.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.
- package/AGENTS.md +74 -43
- package/CHANGELOG.md +58 -0
- package/README-es.md +71 -55
- package/README-hi.md +66 -50
- package/README-pt.md +71 -55
- package/README-zh.md +66 -50
- package/README.md +66 -50
- package/THIRD_PARTY_NOTICES.md +2 -2
- package/docs/EVIDENCE.md +69 -0
- package/lib/route.mjs +20 -4
- package/lib/scan-0.1.6.mjs +39 -4
- package/package.json +11 -8
- package/scripts/verify-artifacts.mjs +3 -2
- package/skills/plugin-upgrade/SKILL.md +12 -12
- package/skills/plugin-upgrade/references/v0.1.5-rc.2-to-v0.1.6-alpha.2.md +2 -2
package/AGENTS.md
CHANGED
|
@@ -2,37 +2,52 @@
|
|
|
2
2
|
|
|
3
3
|
Standalone DeepSeek Harness plugin repository (`dsh-plugin-upgrade`). Development
|
|
4
4
|
follows the dsh-plugin-guide skill and the official plugin contract; this file records
|
|
5
|
-
repo-local decisions. Read `README.md` (external contract) and
|
|
6
|
-
|
|
7
|
-
behavior.
|
|
8
|
-
|
|
9
|
-
##
|
|
10
|
-
|
|
11
|
-
- **A corridor never widens.**
|
|
12
|
-
|
|
13
|
-
a drifting card is worse than no card.
|
|
14
|
-
- **
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
5
|
+
repo-local decisions. Read `README.md` (external contract) and **both** packaged corridor
|
|
6
|
+
cards (`skills/plugin-upgrade/references/v0.1.3-alpha.1-to-v0.1.5-rc.1.md` and
|
|
7
|
+
`skills/plugin-upgrade/references/v0.1.5-rc.2-to-v0.1.6-alpha.2.md`) before changing behavior.
|
|
8
|
+
|
|
9
|
+
## One package, one corridor index (a corridor still never widens)
|
|
10
|
+
|
|
11
|
+
- **A corridor never widens.** A corridor is one *closed, measured* span with its own card,
|
|
12
|
+
catalog, evidence, fixtures and rollback path. Never stretch a card to "all versions":
|
|
13
|
+
a drifting card is worse than no card.
|
|
14
|
+
- **A new corridor adds a card and an index row, not a package.** Owner decision
|
|
15
|
+
(2026-09-19), recorded in `lib/route.mjs`: this package carries the corridor **index**.
|
|
16
|
+
`resolveCorridor()` reads the target repository's declared band (`engines.dsh`, the
|
|
17
|
+
`@deepseek-ai/dsh*` ranges) and routes to the matching corridor; `--span legAB|legC`
|
|
18
|
+
overrides the guess, and an undeclared band falls back to the older corridor.
|
|
19
|
+
- **`legAB`** — `0.1.3-alpha.1 → 0.1.5-rc.1`, carried as leg A (`0.1.3-alpha.1 →
|
|
20
|
+
0.1.5-alpha.1`) and leg B (`0.1.5-alpha.1 → 0.1.5-rc.1`): 20 seams, catalog
|
|
21
|
+
`lib/scan.mjs`, card `…/references/v0.1.3-alpha.1-to-v0.1.5-rc.1.md` (§1 leg A, §2 leg B,
|
|
22
|
+
§3 the 20-seam index), evidence `docs/EVIDENCE.md` §A + §1–§10.
|
|
23
|
+
- **`legC`** — `0.1.5-rc.2 → 0.1.6-alpha.2`: 5 seams (`E1`–`E5`, all `error`), catalog
|
|
24
|
+
`lib/scan-0.1.6.mjs`, card `…/references/v0.1.5-rc.2-to-v0.1.6-alpha.2.md`, evidence
|
|
25
|
+
`docs/EVIDENCE.md` §11. The retired `dsh-plugin-upgrade-016` name never reached the
|
|
26
|
+
registry; this corridor is folded in here.
|
|
27
|
+
- **The seam arrays are never merged.** Two corridors mean two catalogs, two cards and two
|
|
28
|
+
parity gates, so every card claim stays traceable to its own measurement. What the
|
|
29
|
+
corridors *do* share is the entry point: one skill id (`plugin-upgrade`), one CLI
|
|
30
|
+
(`dsh-plugin-upgrade-scan`), one report shape.
|
|
31
|
+
- **This supersedes the family's earlier rule.** The retired `dsh-plugin-upgrade`,
|
|
32
|
+
`dsh-plugin-upgrade-rc1` and `dsh-plugin-upgrade-016` each carried a "**The corridor is
|
|
33
|
+
locked** … a new corridor is a new package" section plus "**zero code dependency on the
|
|
34
|
+
sibling corridor**: no `import`, no vendoring, no shared `SEAMS`". The owner deliberately
|
|
35
|
+
superseded that pair: one package now carries the index, and each corridor keeps its own
|
|
36
|
+
`SEAMS` while the *plumbing* (router, entry point, report shape) is shared. What survives
|
|
24
37
|
unchanged is the numbering discipline — a corridor is *closed*, not open-ended — and the
|
|
25
38
|
per-leg ownership below.
|
|
26
39
|
|
|
27
40
|
Consequences accepted by this repository:
|
|
28
41
|
|
|
29
|
-
- The
|
|
42
|
+
- The `legAB` catalog (20 seams: `S3`, `S8`, `S9`, `M1`, `S4`, `S5`, `S6`, `S7`, `S2`, `S1`,
|
|
30
43
|
`S10`, `C1`, `C2`, `P1`, `C4`, `C5`, `H1`, `H2`, `H4`, `H3`) is evidence-bound to the two
|
|
31
44
|
tag ranges it was measured on — leg A `dsh-v0.1.5-alpha.1` (2026-09-09 wave over 40 plugin
|
|
32
|
-
repos) and leg B `dsh-v0.1.5-alpha.1..dsh-v0.1.5-rc.1` (2026-09-10).
|
|
33
|
-
`0.1.5-rc.1
|
|
34
|
-
|
|
35
|
-
the
|
|
45
|
+
repos) and leg B `dsh-v0.1.5-alpha.1..dsh-v0.1.5-rc.1` (2026-09-10). The harness hop
|
|
46
|
+
`0.1.5-rc.1 → 0.1.5-rc.2` added no plugin-facing seam, which is why that span ends at rc.1
|
|
47
|
+
while the dev/test pin runs on the `0.1.7-alpha.2` line and the compat probe matrix covers
|
|
48
|
+
every published line the peer band admits (`0.1.2-rc.1`, `0.1.5-rc.2`, `0.1.6-alpha.2`,
|
|
49
|
+
`0.1.7-alpha.2`). The `legC` catalog (`E1`–`E5`)
|
|
50
|
+
is evidence-bound to `dsh-v0.1.6-alpha.2` (2026-09-19, §11).
|
|
36
51
|
- **Leg A owns the session-format seams** (`assistant/message.stream`, `S3`;
|
|
37
52
|
`SessionHandleReadResult`, `S8`; `EpochHeader.system`, `S2`; `ctx.agent`, `S5`; `Inbox`,
|
|
38
53
|
`S6`; `SystemPrompt.persona`, `S9`; the V3 log generation, `S1`) and **leg B does not
|
|
@@ -47,7 +62,9 @@ Consequences accepted by this repository:
|
|
|
47
62
|
- The peer band is **unchanged** by both legs. `>=0.1.2-rc.1 <0.2.0` alone rejects
|
|
48
63
|
`0.1.5-rc.1` under npm semver's prerelease-tuple rule (measured `false` on semver 7.8.5);
|
|
49
64
|
the `|| >=0.1.5-alpha.1 <0.2.0` segment is what admits it. `P1` forbids dropping it, and
|
|
50
|
-
this package's own `peerDependencies` keeps
|
|
65
|
+
this package's own `peerDependencies` keeps all four segments
|
|
66
|
+
(`>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0 || >=0.1.7-0 <0.2.0`),
|
|
67
|
+
each newly published prerelease tuple having gained its own clause under the same rule.
|
|
51
68
|
- The `C1` ruling (the bare `conversation` slot removal is a **public extension-point
|
|
52
69
|
break**, kept at `error`, with a rewrite recipe and a real-browser exit criterion) is
|
|
53
70
|
recorded in card §2 §3.3. Do not downgrade it to an advisory without new upstream
|
|
@@ -58,8 +75,14 @@ Consequences accepted by this repository:
|
|
|
58
75
|
```
|
|
59
76
|
index.mjs single host face: Config schema + skill bundle reader + apply()
|
|
60
77
|
types.d.ts Config, SeamId, SeamHit, ScanReport and the public function surface
|
|
61
|
-
lib/
|
|
62
|
-
|
|
78
|
+
lib/route.mjs the corridor index: CORRIDORS, declaredBand(), resolveCorridor(),
|
|
79
|
+
--span/--repo parsing, loadCatalog()
|
|
80
|
+
lib/scan.mjs zero-dependency `legAB` seam catalog (legs A+B) + scanner + CLI main()
|
|
81
|
+
lib/scan-0.1.6.mjs zero-dependency `legC` seam catalog (E1–E5) + scanner + CLI main()
|
|
82
|
+
scripts/scan-0.1.5.mjs thin bin wrapper (npx dsh-plugin-upgrade-scan): resolves the
|
|
83
|
+
corridor through lib/route.mjs and hands the same argv to that
|
|
84
|
+
corridor's catalog main(). The filename is historical; the wrapper
|
|
85
|
+
routes both corridors
|
|
63
86
|
skills/plugin-upgrade/scripts/scan-0.1.5.mjs the same wrapper inside the skill
|
|
64
87
|
directory, so the skill body's `./scripts/...` resolves against its
|
|
65
88
|
resourceBase
|
|
@@ -71,17 +94,19 @@ scripts/verify-artifacts.mjs pack + inspect the published tarball (also as
|
|
|
71
94
|
leg-A seam fails the packaged CLI)
|
|
72
95
|
scripts/check-readme-sync.mjs five-language README consistency
|
|
73
96
|
skills/plugin-upgrade/SKILL.md the bundled skill body (frontmatter name is the skill id;
|
|
74
|
-
it routes the caller to the
|
|
75
|
-
skills/plugin-upgrade/references/v0.1.3-alpha.1-to-v0.1.5-rc.1.md the
|
|
97
|
+
it routes the caller to the corridor matching its peer band)
|
|
98
|
+
skills/plugin-upgrade/references/v0.1.3-alpha.1-to-v0.1.5-rc.1.md the `legAB` card:
|
|
76
99
|
§1 Leg A, §2 Leg B, §3 the 20-seam index
|
|
100
|
+
skills/plugin-upgrade/references/v0.1.5-rc.2-to-v0.1.6-alpha.2.md the `legC` card:
|
|
101
|
+
the 5-seam `E1`–`E5` index and the fix/verify recipes
|
|
77
102
|
test/scan.test.mjs synthetic bad/good fixtures for BOTH legs + --seams + a live negative
|
|
78
103
|
test/plugin.test.mjs real Cordis Context + real SkillRegistry: register, dispose, negatives
|
|
79
|
-
test/card.test.mjs the card↔catalog id/severity parity gate
|
|
104
|
+
test/card.test.mjs the card↔catalog id/severity parity gate for BOTH corridors
|
|
80
105
|
fixtures/ scanner fixtures — never published:
|
|
81
106
|
bad-repo / good-repo leg B (client-slot oriented)
|
|
82
107
|
leg-a-bad-repo / leg-a-good-repo leg A (TypeScript/session oriented)
|
|
83
108
|
docs/EVIDENCE.md the command→output record every card claim traces to
|
|
84
|
-
(§A = leg A's provenance, §1–§10 = leg B's records)
|
|
109
|
+
(§A = leg A's provenance, §1–§10 = leg B's records, §11 = leg C's)
|
|
85
110
|
cordis.patch.yml bundle declaration (insert dsh-plugin-upgrade); every
|
|
86
111
|
Config key inline
|
|
87
112
|
pnpm-workspace.yaml nearest-workspace root (isolates this repo from a surrounding harness checkout)
|
|
@@ -118,9 +143,10 @@ LICENSE Apache-2.0
|
|
|
118
143
|
adaptation: this span's breakage is silent from both ends, so a session-log writer needs a
|
|
119
144
|
resume round-trip (`S3`), a client half needs a real browser assertion, and the card's exit
|
|
120
145
|
criterion is a real-host smoke on a temp `DSH_HOME`.
|
|
121
|
-
- **The card and the catalog are one catalog.** `test/card.test.mjs` fails when
|
|
122
|
-
|
|
123
|
-
|
|
146
|
+
- **The card and the catalog are one catalog — per corridor.** `test/card.test.mjs` fails when
|
|
147
|
+
a card's index and that corridor's catalog disagree on ids or severities, when a card mints
|
|
148
|
+
an id outside its own catalog, and when `legC`'s `CARD_ONLY` is not empty. The two corridors'
|
|
149
|
+
catalogs are never merged. Change the card first, then the catalog, in the same commit.
|
|
124
150
|
- **Mount loud.** A missing `SKILL.md`, an empty body, or a frontmatter without `name` must
|
|
125
151
|
abort the mount. Never register a placeholder skill.
|
|
126
152
|
- **The skill id is the frontmatter name.** `skillName` selects the directory; the registered
|
|
@@ -140,6 +166,9 @@ LICENSE Apache-2.0
|
|
|
140
166
|
```sh
|
|
141
167
|
npm install # or: pnpm install (pnpm-lock.yaml is committed)
|
|
142
168
|
npm test # node --test: scanner (both legs) + card parity + real-registry mount
|
|
169
|
+
npm run check # tsc -p tsconfig.check.json: the checked-JS shipping surface (index.mjs, lib/**, scripts/**)
|
|
170
|
+
npm run typecheck:ci # tsc -p tsconfig.check.ci.json: same program, published host types (empty paths)
|
|
171
|
+
npm run typecheck:checkout # tsc -p tsconfig.checkout.json: shipping surface + checkout/host-surface.mts, against the local harness checkout's built types
|
|
143
172
|
npm run verify:self-contained # every import resolves inside the package
|
|
144
173
|
npm run verify:artifacts # tarball contents + entry import + dev-only content excluded
|
|
145
174
|
npm run check:readmes # five-language README consistency
|
|
@@ -153,9 +182,9 @@ after every harness release.
|
|
|
153
182
|
|
|
154
183
|
## Release
|
|
155
184
|
|
|
156
|
-
Version is currently `0.1.0
|
|
157
|
-
|
|
158
|
-
|
|
185
|
+
Version is currently `2.0.1` (`2.0.0` was the package that returned as the corridor index;
|
|
186
|
+
`2.0.1` re-published the corrected npm description). The retired packages' histories live in
|
|
187
|
+
`CHANGELOG.md` under `[Unreleased]` and below. For a new version: bump
|
|
159
188
|
`package.json#version`, stamp the CHANGELOG `[Unreleased]` section into `## [<x.y.z>] - <UTC
|
|
160
189
|
date>`, re-run the full gate, commit `chore(release): <x.y.z>`, and `git tag -a v<x.y.z>`.
|
|
161
190
|
`git push origin main --follow-tags` triggers `.github/workflows/release.yml`, which re-runs
|
|
@@ -182,9 +211,11 @@ same commit.
|
|
|
182
211
|
row expects `PerryLink/dsh-plugin-doctor` to carry a
|
|
183
212
|
`PerryLink__dsh-plugin-upgrade.svg` badge, and the family also enrols each package
|
|
184
213
|
in the Gitee mirror, the `dsh-catalog` directory and the omdsh workshop list. Those are
|
|
185
|
-
release-side steps performed from the family workspace after the first tag. The
|
|
186
|
-
package names
|
|
187
|
-
|
|
214
|
+
release-side steps performed from the family workspace after the first tag. The three
|
|
215
|
+
retired package names (`dsh-plugin-upgrade` leg A, `dsh-plugin-upgrade-rc1` leg B, and the
|
|
216
|
+
never-published `dsh-plugin-upgrade-016` corridor) stay on the registry or in history only
|
|
217
|
+
(unpublished content is not removed by publishing a new name); their README/card wording is
|
|
218
|
+
now historical.
|
|
188
219
|
|
|
189
220
|
## Docs
|
|
190
221
|
|
|
@@ -196,7 +227,7 @@ name); their README/card wording is now historical.
|
|
|
196
227
|
`package.json` keywords; the ecosystem's visibility channel is the `dsh-plugin` topic).
|
|
197
228
|
- License is Apache-2.0 (`LICENSE` + the package.json `license` field).
|
|
198
229
|
`THIRD_PARTY_NOTICES.md` documents install-time dependencies; nothing is bundled.
|
|
199
|
-
- Every factual claim in
|
|
230
|
+
- Every factual claim in a card or the scanner traces to a command recorded in
|
|
200
231
|
`docs/EVIDENCE.md` — §A for leg A's provenance (via the retired `dsh-plugin-upgrade` card,
|
|
201
|
-
now merged in as Leg A)
|
|
202
|
-
it is marked **unverified** and kept out of the card.
|
|
232
|
+
now merged in as Leg A), §1–§10 for leg B's records, and §11 for leg C's. Where a claim
|
|
233
|
+
could not be verified it is marked **unverified** and kept out of the card.
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,64 @@ All notable changes to this project are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.0.2] - 2026-09-23
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- A checkout ruler: `checkout/host-surface.mts`, `tsconfig.checkout.json` and `typecheck:checkout` (`tsc -p tsconfig.checkout.json --noEmit`). The probe mirrors the real call sites — the Schemastery `Config` from `index.mjs`, the exact `SkillRegistration` object `apply()` hands `ctx.skills.register()`, and a real `Context` + `SkillRegistry` + `ctx.effect()` as in `test/plugin.test.mjs` — and the three `@deepseek-ai/*` specifiers this package really imports (`index.mjs` → `schemastery`; `test/plugin.test.mjs` → `cordis`, `dsh-skill`) are aliased to the local harness checkout's built types. The `@deepseek-ai/*` names under `fixtures/` are synthetic scanner inputs, including packages that no longer exist, so they are deliberately not mapped. It is never executed; it exists so a host-line shape change fails against the checkout instead of at a user's first mount.
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- The published line this package checks against moves to `0.1.7-alpha.2`: the `@deepseek-ai/dsh-skill` dev/test pin moves from `0.1.5-rc.2`, `@deepseek-ai/cordis` to `^4.0.4` and `@deepseek-ai/schemastery` to `^3.18.4`; the `0.1.7` tuple gains its own clause on the `@deepseek-ai/dsh-skill` peer band; `dshWorkshop.compatibility.dshVersions` records `0.1.7-alpha.2`; and the `compat.yml` probe matrix now covers `0.1.2-rc.1`, `0.1.5-rc.2`, `0.1.6-alpha.2` and `0.1.7-alpha.2`. This is a correctness fix, not a tightening: under npm semver's prerelease rule a comparator set whose only prerelease comparators sit on earlier `[major, minor, patch]` tuples cannot admit a later alpha, so the three-clause band could not admit the very host this release targets. The three existing clauses are unchanged, in place and in order; `P1` still forbids collapsing them. The lockfile now resolves exactly one `cordis` and one `schemastery` copy, so the two-copy `Volatile` typing trap cannot occur here.
|
|
17
|
+
- The five-language READMEs name the `0.1.7-alpha.2` line and quote the four-clause band; `AGENTS.md`, `THIRD_PARTY_NOTICES.md` and the checks block are brought in line with the declared state (the prose commit `070309e`), including the `AGENTS.md` peer-segment note that still said the package keeps "both segments" and the dev/test-pin sentence that still said `0.1.5-rc.2`.
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- `pnpm run check` (`tsc -p tsconfig.check.json`) had been red since the corridor index landed: 24 `TS7006` (implicitly-`any` parameter) errors, all of them in two committed checked-JS source files that no build step generates (`lib/route.mjs` 8, `lib/scan-0.1.6.mjs` 16). The same 24 errors reddened `pnpm run typecheck:ci`, whose config includes the same file set. The defects were genuine rather than checker noise — those two files were the only checked-JS sources in the repo whose functions carried no JSDoc. Every annotation was derived from the function body and its call sites and mirrors the sibling catalog `lib/scan.mjs`, which already passes the same checker; the change is comment-only (all 58 added lines sit inside JSDoc blocks), `allowJs`, `checkJs` and `noImplicitAny: true` are untouched, no file was dropped from `include`, and no `@ts-nocheck` or `@ts-ignore` was added. With the shipping surface type-checking, the checkout ruler compiles what actually ships (`index.mjs`, `lib/**`, `scripts/**`) instead of only the probe, which is what the ruler was for.
|
|
22
|
+
- **The documentation still described the retired "one package per hop" model.** `2.0.0`
|
|
23
|
+
introduced the corridor index (`lib/route.mjs`) and folded the `0.1.5-rc.2` →
|
|
24
|
+
`0.1.6-alpha.2` corridor in as `legC`, but the surrounding prose had not caught up: the
|
|
25
|
+
internal `AGENTS.md` still said the package "upgrades plugins across `0.1.3-alpha.1` →
|
|
26
|
+
`0.1.5-rc.1` and nothing else" and that "a hop after `0.1.5-rc.1` … is a new package"; the
|
|
27
|
+
`legC` card still called itself the new package `dsh-plugin-upgrade-016`; the skill
|
|
28
|
+
frontmatter still carried a single `corridor:` key and a `whenToUse` that told the model a
|
|
29
|
+
later hop is a new package; and all five READMEs described one merged corridor with two
|
|
30
|
+
legs, never naming `legC`. Corrected here, with the two corridors now named consistently
|
|
31
|
+
everywhere (`legAB` = `0.1.3-alpha.1` → `0.1.5-rc.1`, `legC` = `0.1.5-rc.2` →
|
|
32
|
+
`0.1.6-alpha.2`) and the "a new corridor adds a card and an index row, not a package" rule
|
|
33
|
+
stated wherever the old rule was.
|
|
34
|
+
- **`test/card.test.mjs` had no gate for the second corridor.** The evidence-binding parity
|
|
35
|
+
check only pinned the `legAB` card to `lib/scan.mjs`. It now also pins the `legC` card to
|
|
36
|
+
`lib/scan-0.1.6.mjs` (ids, order, severities), asserts `legC`'s `CARD_ONLY` is empty,
|
|
37
|
+
asserts the two catalogs share no seam id, and asserts the skill frontmatter names both
|
|
38
|
+
corridors while the superseded "a new package" phrasing is gone.
|
|
39
|
+
`scripts/verify-artifacts.mjs` checks the packaged `SKILL.md` frontmatter for both
|
|
40
|
+
corridors instead of the retired single `corridor:` key.
|
|
41
|
+
- No functional change: `index.mjs`, `lib/**`, `cordis.patch.yml`, `fixtures/**` and the
|
|
42
|
+
cards' seam facts are untouched. `package.json` changes only documentation fields
|
|
43
|
+
(`dshWorkshop.capability.expected`, and `compatibility.dshVersions` gains
|
|
44
|
+
`0.1.6-alpha.2`, which `peerDependencies` already admitted). The gate chain is re-run in
|
|
45
|
+
full; the published `2.0.1` tarball is unaffected and this lands with the next release.
|
|
46
|
+
- **The family-size claim was one release behind.** All five READMEs said this package is
|
|
47
|
+
"one of the **40** DeepSeek Harness plugins"; the family roster is **41** (`PerryLink/dsh-kit`
|
|
48
|
+
states 41 in both the tagline and the same family line, and `dsh-wechat` left the family).
|
|
49
|
+
Corrected in all five in the same commit.
|
|
50
|
+
|
|
51
|
+
## [2.0.1] - 2026-09-20
|
|
52
|
+
|
|
53
|
+
### Fixed
|
|
54
|
+
|
|
55
|
+
- **The package description named the retired corridor card instead of this one.** `package.json`
|
|
56
|
+
described 2.0.0 as "the merged version-locked `0.1.3-alpha.1` -> `0.1.5-rc.1` corridor card …
|
|
57
|
+
over one 20-seam catalog" and never mentioned the second corridor. 2.0.0 is the opposite of
|
|
58
|
+
version-locked: the scanner reads the caller peer band and routes between two closed corridors
|
|
59
|
+
(`0.1.3-alpha.1` -> `0.1.5-rc.1` as legs A+B, and `0.1.5-rc.2` -> `0.1.6-alpha.2` as leg C).
|
|
60
|
+
The text was corrected in the repository on 2026-09-20 (`b543400`); npm metadata is immutable
|
|
61
|
+
per version, so 2.0.1 is the release that carries the corrected description to the registry,
|
|
62
|
+
and with it to every catalog that copies an author's own words.
|
|
63
|
+
- No functional change: `lib/route.mjs`, `lib/scan.mjs`, `lib/scan-0.1.6.mjs`, the cards, the
|
|
64
|
+
skill body and the CLI are byte-identical to 2.0.0.
|
|
65
|
+
|
|
8
66
|
## [2.0.0] - 2026-09-19
|
|
9
67
|
|
|
10
68
|
### Changed
|
package/README-es.md
CHANGED
|
@@ -3,16 +3,18 @@
|
|
|
3
3
|
# ⬆️ dsh-plugin-upgrade
|
|
4
4
|
- **Canal de la tienda 1024**: ejecuta `npm i -g dsh1024` una vez y luego `dsh1024 plugin --profile web add dsh-plugin-upgrade` (cuenta para el ranking de instalaciones de [deepseek1024.com](https://deepseek1024.com)).
|
|
5
5
|
[](https://gitee.com/perrylink/dsh-plugin-upgrade)
|
|
6
|
+
[](https://dshfind.com/es/plugins/PerryLink/dsh-plugin-upgrade?ref=badge)
|
|
6
7
|
|
|
7
|
-
**Habilidad de actualización de plugins para DeepSeek Harness,
|
|
8
|
+
**Habilidad de actualización de plugins para DeepSeek Harness — un paquete, un índice de corredores, dos corredores cerrados: `0.1.3-alpha.1` → `0.1.5-rc.1` (`legAB`) y `0.1.5-rc.2` → `0.1.6-alpha.2` (`legC`).**
|
|
8
9
|
|
|
9
|
-
*
|
|
10
|
+
*El escáner se enruta solo: lee la banda dsh declarada por el repositorio destino (o toma `--span`) y luego aplica el catálogo propio de ese corredor, vinculado a evidencia — las 20 costuras de `legAB` (tramo A `0.1.3-alpha.1` → `0.1.5-alpha.1` más tramo B `0.1.5-alpha.1` → `0.1.5-rc.1`) o las 5 costuras de `legC` (`E1`–`E5`). Un solo punto de entrada, para que una mitad de cliente que dejó de montarse en silencio nunca se confunda con «typecheck en verde».*
|
|
10
11
|
|
|
11
|
-
> **Repositorio oficial.** Este es el único repositorio oficial de dsh-plugin-upgrade, mantenido por PerryLink. Sustituye a los dos paquetes con versión bloqueada `dsh-plugin-upgrade` (tramo A) y `dsh-plugin-upgrade-rc1` (tramo B). Los repositorios con el mismo nombre en otras cuentas no están afiliados.
|
|
12
|
+
> **Repositorio oficial.** Este es el único repositorio oficial de dsh-plugin-upgrade, mantenido por PerryLink. Sustituye a los dos paquetes retirados con versión bloqueada `dsh-plugin-upgrade` (tramo A) y `dsh-plugin-upgrade-rc1` (tramo B), y es el paquete en el que se integró el corredor `0.1.5-rc.2` → `0.1.6-alpha.2` (tramo C): el nombre `dsh-plugin-upgrade-016` nunca llegó al registro. Los repositorios con el mismo nombre en otras cuentas no están afiliados.
|
|
12
13
|
|
|
13
14
|
[](LICENSE)
|
|
14
15
|
[](https://github.com/topics/dsh-plugin)
|
|
15
16
|
[](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
|
|
17
|
+
[](https://dsh.market/)
|
|
16
18
|
[](#)
|
|
17
19
|
[](https://github.com/PerryLink/dsh-plugin-upgrade/actions)
|
|
18
20
|
[](https://github.com/PerryLink/dsh-plugin-upgrade/releases)
|
|
@@ -29,21 +31,22 @@
|
|
|
29
31
|
|
|
30
32
|
| Superficie | Estado |
|
|
31
33
|
|---|---|
|
|
32
|
-
| Harness | DeepSeek Harness `0.1.5-rc.1` (tag `dsh-v0.1.
|
|
34
|
+
| Harness | DeepSeek Harness `0.1.5-rc.1` (tag `dsh-v0.1.7-alpha.2` = `183f08e9c6dd`; relevo tramo A→B `dsh-v0.1.7-alpha.2` = `5dda764ed3aa`; inicio del corredor `0.1.3-alpha.1`) y, para `legC`, DeepSeek Harness `0.1.6-alpha.2` (tag `dsh-v0.1.7-alpha.2`). Banda de peers `@deepseek-ai/dsh-skill >=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0 \|\| >=0.1.6-0 <0.2.0 \|\| >=0.1.7-0 <0.2.0`, `@deepseek-ai/cordis ^4.0.2`, `@deepseek-ai/schemastery ^3.18.2`. |
|
|
33
35
|
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
34
36
|
| Plataformas | Donde corra Node; el escáner solo usa el sistema de archivos y es neutral respecto a la plataforma |
|
|
35
37
|
| Modelo | Modelos solo de texto totalmente soportados; la habilidad es un Markdown, sin requisitos de herramientas ni visión |
|
|
36
|
-
|
|
|
37
|
-
|
|
|
38
|
+
| Índice de corredores | Un paquete, un punto de entrada. `lib/route.mjs` contiene los corredores cerrados y la CLI enruta al que corresponde según la banda declarada del repo destino (`engines.dsh`, los rangos `@deepseek-ai/dsh*`); `--span legAB\|legC` anula la conjetura y una banda no declarada recae en el corredor más antiguo. Los dos catálogos nunca se fusionan: cada corredor conserva su propio array de costuras, tarjeta, evidencia, fixtures y puerta de paridad. |
|
|
39
|
+
| Alcance | **Dos corredores cerrados**: `legAB` = `0.1.3-alpha.1` → `0.1.5-rc.1` (tramo A + tramo B), `legC` = `0.1.5-rc.2` → `0.1.6-alpha.2`. Un corredor nunca se ensancha: un salto que añade una costura es un corredor nuevo — una tarjeta nueva y una fila nueva en el índice, no un paquete nuevo. |
|
|
40
|
+
| Tramos | Cada tramo vive en este paquete: el tramo A conserva las costuras `S1`–`S10` + `M1`, el tramo B conserva `C1`, `C2`, `C4`, `C5`, `H1`–`H4`, `P1`, y el tramo C conserva `E1`–`E5` — cada uno con su propia evidencia, sección de tarjeta, fixtures y ruta de reversión. No hay paquete hermano que instalar. |
|
|
38
41
|
| `C3` | Retirada: la tarjeta del tramo B escribía como `C3` el falso verde de la línea de tipos obsoleta, que es el mismo defecto que el `M1` del tramo A. La fusión queda registrada en la tarjeta; `--seams C3` no coincide con nada. |
|
|
39
42
|
| Paquete anterior | No montes el retirado `dsh-plugin-upgrade` en el mismo perfil: ambos registran la skill `plugin-upgrade`, así que el segundo montaje colisiona con ese nombre. Ese paquete está obsoleto en npm y su repositorio se retiró; este paquete sustituye sus dos tramos. |
|
|
40
43
|
|
|
41
44
|
## Lo que obtienes
|
|
42
45
|
|
|
43
|
-
Dos mitades, un
|
|
46
|
+
Dos mitades, un catálogo de costuras por corredor:
|
|
44
47
|
|
|
45
48
|
- **Una habilidad de agente incluida (`plugin-upgrade`)** — la tarjeta del corredor fusionado y un bucle de arreglar-y-verificar. El cuerpo primero enruta a quien la llama al tramo que corresponde a su banda de peers; el modelo la carga solo cuando una tarea la necesita de verdad, y el paquete no aporta ningún párrafo al prompt del sistema ni registra herramientas.
|
|
46
|
-
- **Una CLI sin dependencias (`dsh-plugin-upgrade-scan`)** — informa hechos `file:line` de las veinte
|
|
49
|
+
- **Una CLI sin dependencias (`dsh-plugin-upgrade-scan`)** — resuelve el corredor e informa hechos `file:line` de las costuras de ese corredor: las veinte de `legAB` (`S3`, `S8`, `S9`, `M1`, `S4`, `S5`, `S6`, `S7`, `S2`, `S1`, `S10`, `C1`, `C2`, `P1`, `C4`, `C5`, `H1`, `H2`, `H4`, `H3`) releídas de los rangos de tags del harness el 2026-09-09 (tramo A) y el 2026-09-10 (tramo B), o las cinco de `legC` (`E1`–`E5`) medidas en `dsh-v0.1.7-alpha.1` (2026-09-19). Sale con `1` ante cualquier hallazgo de severidad error, así que entra directo en CI.
|
|
47
50
|
|
|
48
51
|
El objetivo es el modo de fallo que este corredor existe para matar: **la rotura de este lapso es mayormente silenciosa, y lo es por ambos extremos.** La línea de tipos puede estar obsoleta, así que el repo compila contra el **catálogo antiguo** (costura `M1`), y el slot de cliente desnudo `conversation` se eliminó sin alias mientras `ctx.slots.inject()` solo ejecuta su callback cuando la declaración existe: una mitad de cliente que aún lo apunta deja de montarse sin error, sin línea de log y sin build fallido (costura `C1`). Tres clases de rotura sobreviven a `typecheck` + `test`:
|
|
49
52
|
|
|
@@ -66,8 +69,8 @@ dsh --profile web --dump-config | grep -A3 'id: dsh-plugin-upgrade'
|
|
|
66
69
|
npx dsh-plugin-upgrade-scan --repo ../my-plugin
|
|
67
70
|
```
|
|
68
71
|
|
|
69
|
-
Luego pide al agente que use la habilidad `plugin-upgrade`, o lleva el bucle tú mismo con la tarjeta
|
|
70
|
-
`skills/plugin-upgrade/references/v0.1.3-alpha.1-to-v0.1.5-rc.1.md` (el tramo A es §1, el tramo B es §2, el índice de costuras fusionado es §3).
|
|
72
|
+
Luego pide al agente que use la habilidad `plugin-upgrade`, o lleva el bucle tú mismo con la tarjeta que corresponda a tu banda:
|
|
73
|
+
`skills/plugin-upgrade/references/v0.1.3-alpha.1-to-v0.1.5-rc.1.md` (`legAB` — el tramo A es §1, el tramo B es §2, el índice de costuras fusionado es §3) o `skills/plugin-upgrade/references/v0.1.5-rc.2-to-v0.1.6-alpha.2.md` (`legC`). El escáner elige el corredor por ti; añade `--span legC` cuando la banda declarada sea ambigua.
|
|
71
74
|
|
|
72
75
|
## Instalación y desinstalación
|
|
73
76
|
|
|
@@ -107,19 +110,20 @@ El plugin monta de forma ruidosa: un `SKILL.md` ausente, un cuerpo vacío o un f
|
|
|
107
110
|
**CLI** — `dsh-plugin-upgrade-scan`:
|
|
108
111
|
|
|
109
112
|
```sh
|
|
110
|
-
dsh-plugin-upgrade-scan [--repo <path>] [--json <out.json>] [--seams S3,C1,P1] [--quiet]
|
|
113
|
+
dsh-plugin-upgrade-scan [--repo <path>] [--span legAB|legC|<span>] [--json <out.json>] [--seams S3,C1,P1] [--quiet]
|
|
111
114
|
```
|
|
112
115
|
|
|
113
116
|
| Bandera | Significado |
|
|
114
117
|
|---|---|
|
|
115
|
-
| `--repo <path>` | Repositorio a escanear (por defecto: el directorio actual). |
|
|
118
|
+
| `--repo <path>` | Repositorio a escanear (por defecto: el directorio actual). Su banda dsh declarada elige el corredor. |
|
|
119
|
+
| `--span legAB\|legC\|<span>` | Fuerza un corredor en lugar de conjeturarlo desde la banda declarada. Una banda desconocida recae en `legAB`. |
|
|
116
120
|
| `--json <out.json>` | También escribe el informe legible por máquina (`repo`, `scannedAt`, `files`, `hits[]`, `bySeam`). |
|
|
117
|
-
| `--seams S3,C1,P1` | Restringe a costuras concretas del catálogo
|
|
121
|
+
| `--seams S3,C1,P1` | Restringe a costuras concretas del catálogo del corredor resuelto (los ids nunca se comparten entre corredores). |
|
|
118
122
|
| `--quiet` | Suprime la salida humana (combínala con `--json`). |
|
|
119
123
|
|
|
120
124
|
Códigos de salida: `0` sin hallazgos de severidad error · `1` al menos un hallazgo de severidad error · `2` uso o fallo del escaneo. Un escaneo limpio es necesario pero no suficiente: el criterio de salida es un smoke real en el host, más un ida y vuelta de reanudación para los escritores de logs (tramo A) y una aserción en un navegador real para la mitad de cliente (tramo B).
|
|
121
125
|
|
|
122
|
-
## Las veinte costuras
|
|
126
|
+
## Las veinte costuras de `legAB`
|
|
123
127
|
|
|
124
128
|
El orden sigue el catálogo de `lib/scan.mjs` (primero el tramo A, luego el tramo B), que es también el orden al que `test/card.test.mjs` fija la tarjeta.
|
|
125
129
|
|
|
@@ -148,9 +152,23 @@ El orden sigue el catálogo de `lib/scan.mjs` (primero el tramo A, luego el tram
|
|
|
148
152
|
|
|
149
153
|
`S7`, `S2`, `S1`, `S10`, `C4`, `C5`, `H1`, `H2` y `H4` son deliberadamente asesorables: tienen coincidencias legítimas (un repo que ya usa la API nueva, una instantánea de documentación, la tabla de ids de modelo de un plugin, un `ChildProcess.pid` de Node), así que el escáner las reporta como pistas para revisión manual, no como fallos. `M1` y `P1` son comprobaciones **estructurales** — resuelven `package.json` y `tsconfig*.json` en lugar de coincidir texto — y `H3` es **solo de tarjeta**: documentada, con paridad de ids comprobada y deliberadamente sin detector (`CARD_ONLY = ['H3']`).
|
|
150
154
|
|
|
155
|
+
## Las cinco costuras de `legC` (`0.1.5-rc.2` → `0.1.6-alpha.2`)
|
|
156
|
+
|
|
157
|
+
El orden sigue el catálogo de `lib/scan-0.1.6.mjs`, que es también el orden al que `test/card.test.mjs` fija la tarjeta de `legC`. Aquí toda costura es `error` y todas se detectan (`CARD_ONLY = []`).
|
|
158
|
+
|
|
159
|
+
| Id | Severidad | Qué cambió en el camino a `0.1.6-alpha.2` |
|
|
160
|
+
|---|---|---|
|
|
161
|
+
| `E1` | error | `agent/created` despacha sus listeners en serie: un listener que lanza — o que hace trabajo lento — bloquea por completo la creación del agente. Envuelve el trabajo síncrono en `try`/`catch` y aplaza el resto con `queueMicrotask`/`setImmediate` o tu propia cola. |
|
|
162
|
+
| `E2` | error | Un `apply()` asíncrono cuyo primer `await` precede a sus registros: todo lo registrado después cae en la ventana de descarga y lanza `INACTIVE_EFFECT`, mientras el cierre antiguo sigue corriendo. Registra todo antes del primer `await`, dentro de un único `ctx.effect()`. |
|
|
163
|
+
| `E3` | error | Claves de slot/estado eliminadas: `settings.plugin.item` pasó a ser el keyed→list `plugins.item`, y `SessionListState.current` desapareció — una tarjeta de ajustes desaparece **en silencio** (retorno temprano por `spec === undefined`), y los casts de `current` siguen compilando mientras la función está muerta. |
|
|
164
|
+
| `E4` | error | API de cliente eliminada: `sessions.open` / `openSubagent` / `clear` pasaron a `retain` / `using` / `retainInfo`. |
|
|
165
|
+
| `E5` | error | Literales de modelo eliminados: `deepseek-v4-flash*` y `deepseek-v4-vision-exp`. El catálogo de modelos por defecto se encogió de 4 a 2, y un id sin catalogar pasa tal cual como solo texto. |
|
|
166
|
+
|
|
167
|
+
Se aplica la misma disciplina que en `legAB`: un escaneo limpio es necesario, no suficiente. La rotura de `legC` es silenciosa o solo en tiempo de ejecución (la línea de tipos publicada oculta las eliminaciones), así que el criterio de salida sigue siendo un smoke real en el host sobre un `DSH_HOME` temporal, más el ida y vuelta del escritor de logs y la aserción en navegador real donde correspondan.
|
|
168
|
+
|
|
151
169
|
## Lo que esto no cubre
|
|
152
170
|
|
|
153
|
-
- **Un salto
|
|
171
|
+
- **Un salto más allá de todos los corredores de aquí.** `legAB` termina en `0.1.5-rc.1` por construcción: el salto del harness `0.1.5-rc.1` → `0.1.5-rc.2` no añadió ninguna costura de cara a los plugins (el pin de dev/test de este propio paquete corre ahora sobre la línea `0.1.7-alpha.2`, de modo que el catálogo queda verificado contra esos tipos publicados; la sonda del workflow compat sigue anclada en `0.1.6-alpha.2`), y `legC` cubre `0.1.5-rc.2` → `0.1.6-alpha.2`. Un salto posterior que añada una costura **no** está cubierto: un corredor está cerrado, y ensanchar una tarjeta es peor que añadir una. Ese salto recibe una tarjeta nueva y una fila nueva en el índice — no un paquete nuevo.
|
|
154
172
|
- **El salto `0.1.1` → `0.1.2`.** Usa la habilidad de convergencia de la comunidad.
|
|
155
173
|
- **Repetir entre tramos.** El tramo A posee las costuras del formato de sesión (`assistant/message.stream`, `SessionHandleReadResult`, `EpochHeader.system`, `ctx.agent`, `Inbox`, `SystemPrompt.persona`, la generación de log V3) y el tramo B no las repite: todo el diff de `packages/core/session/src` en el rango del tramo B son dos literales de tipo de evento añadidos y una línea de comentario. La sección de tarjeta de cada tramo conserva su propia declaración de alcance.
|
|
156
174
|
- **La ruta de actualización del usuario de DSH.** Este paquete actualiza *código fuente de plugins*, no la instalación del harness de un usuario.
|
|
@@ -175,15 +193,20 @@ npm run check:readmes # consistencia de los README en cinco idiomas
|
|
|
175
193
|
npm pack
|
|
176
194
|
```
|
|
177
195
|
|
|
178
|
-
El escáner tiene un par de fixtures sintéticos **por tramo
|
|
196
|
+
El escáner tiene un par de fixtures sintéticos **por tramo de `legAB`**: `fixtures/leg-a-bad-repo` (las costuras de sesión/configuración del tramo A, con todas las costuras de error presentes a propósito) junto con `fixtures/leg-a-good-repo` (adaptado), y `fixtures/bad-repo` (las costuras de slot de cliente del tramo B) junto con `fixtures/good-repo` (adaptado) — más un negativo en vivo sobre un repositorio de la familia ya fijado a `0.1.5-rc.1`, de modo que una regresión del catálogo falla en esta suite y no en un usuario aguas abajo. `test/card.test.mjs` afirma que el índice de cada tarjeta y su propio catálogo (`lib/scan.mjs` para `legAB`, `lib/scan-0.1.6.mjs` para `legC`) nombran **exactamente** los mismos ids de costura con las mismas severidades, que el `CARD_ONLY` de `legAB` es exactamente `['H3']` mientras el de `legC` está vacío, y que los dos catálogos no comparten ningún id de costura — la regla de vinculación de evidencia como puerta de máquina, por corredor.
|
|
179
197
|
|
|
180
198
|
## Temas
|
|
181
199
|
|
|
182
200
|
`dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `plugin-upgrade`, `migration`, `skill`, `version-card`, `scanner`, `client-slots` (reflejan las `keywords` de `package.json`; `dsh-plugin` es el canal de visibilidad del ecosistema).
|
|
183
201
|
|
|
184
|
-
##
|
|
202
|
+
## Licencia
|
|
203
|
+
|
|
204
|
+
Apache-2.0 — consulta [LICENSE](LICENSE). Las dependencias de instalación y sus licencias están en [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md); no se incluye nada empaquetado.
|
|
185
205
|
|
|
186
|
-
|
|
206
|
+
|
|
207
|
+
## PerryLink DSH Plugin Family
|
|
208
|
+
|
|
209
|
+
This project is one of the **45 DeepSeek Harness plugins** maintained by [PerryLink](https://github.com/PerryLink). If this one helps you, the others likely will too:
|
|
187
210
|
|
|
188
211
|
| Plugin | One-liner |
|
|
189
212
|
|---|---|
|
|
@@ -193,49 +216,42 @@ Este proyecto es uno de los [40 complementos de DeepSeek Harness](https://github
|
|
|
193
216
|
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | |
|
|
194
217
|
| **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | |
|
|
195
218
|
| **[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)** |
|
|
197
|
-
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code
|
|
219
|
+
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore | |
|
|
220
|
+
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH | |
|
|
198
221
|
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness — Windows first. | |
|
|
199
222
|
| **[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)** |
|
|
223
|
+
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) | |
|
|
201
224
|
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | |
|
|
202
225
|
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Engineering-discipline guard: requirements grill, test gates, adversary review | |
|
|
203
226
|
| **[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
|
|
205
|
-
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** |
|
|
206
|
-
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/
|
|
207
|
-
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | Industry
|
|
208
|
-
| **[dsh-
|
|
209
|
-
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | Local document knowledge base
|
|
210
|
-
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | Local Ollama
|
|
211
|
-
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions
|
|
212
|
-
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking at the model boundary
|
|
213
|
-
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | MCP
|
|
214
|
-
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory
|
|
215
|
-
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse
|
|
216
|
-
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** |
|
|
217
|
-
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** |
|
|
227
|
+
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics for DeepSeek Harness. | |
|
|
228
|
+
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Deterministic research reports for Chinese public mutual funds | |
|
|
229
|
+
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issues integration for DSH, every write gated by approval | |
|
|
230
|
+
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | Industry research orchestration that seals its deliverables through this plugin's `ctx.researchReport.assemble` | |
|
|
231
|
+
| **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | Laya typed decisions (`noul`/`choice`/`score`) as a first-class Cordis service and model-visible tools | |
|
|
232
|
+
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | Local document knowledge base for DeepSeek Harness. | |
|
|
233
|
+
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | Local-model (Ollama) integration for DeepSeek Harness. | |
|
|
234
|
+
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
|
|
235
|
+
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
|
|
236
|
+
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
|
|
237
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
238
|
+
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
|
|
239
|
+
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
|
|
240
|
+
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
|
|
218
241
|
| **[dsh-plugin-certification](https://github.com/PerryLink/dsh-plugin-certification)** | Community certification registry with repro-checkable grades and badges | |
|
|
219
242
|
| **[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-
|
|
243
|
+
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-development knowledge base as an on-demand agent skill | |
|
|
221
244
|
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
|
|
222
|
-
| **[dsh-plugin-
|
|
223
|
-
| **[dsh-
|
|
224
|
-
| **[dsh-
|
|
225
|
-
| **[dsh-
|
|
226
|
-
| **[dsh-
|
|
227
|
-
| **[dsh-session-
|
|
228
|
-
| **[dsh-
|
|
229
|
-
| **[dsh-
|
|
245
|
+
| **[dsh-plugin-upgrade](https://github.com/PerryLink/dsh-plugin-upgrade)** | One-package, one-corridor-index plugin upgrade skill: routes a repository to the matching closed corridor card | |
|
|
246
|
+
| **[dsh-plugin-upgrade-015](https://github.com/PerryLink/dsh-plugin-upgrade-015)** | Merged `0.1.3-alpha.1` → `0.1.5-rc.1` upgrade corridor card plus a zero-dependency seam scanner | |
|
|
247
|
+
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console | |
|
|
248
|
+
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research-report engine: content-addressed evidence ledger and sealed versions | |
|
|
249
|
+
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional quality scoring for DeepSeek Harness plugins. | |
|
|
250
|
+
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions in the Web sidebar with durable ordering | |
|
|
251
|
+
| **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | Cross-device session sync for DeepSeek Harness — a dedicated git mirror of your session store. | |
|
|
252
|
+
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | Security-audit skill pack: secret scan, dependency and supply-chain review | |
|
|
253
|
+
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. | |
|
|
230
254
|
| **[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
|
|
232
|
-
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | TickTick/Dida365 task bridge: session-header panel
|
|
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
|
-
Parte de la familia de plugins DSH de PerryLink: más de 40 repositorios que cubren sesiones, memoria, permisos, entrega, observabilidad y herramientas para desarrolladores. Explora el catálogo en [perrylink-dsh-catalog.perrylink.workers.dev](https://perrylink-dsh-catalog.perrylink.workers.dev) o el [tema `dsh-plugin`](https://github.com/topics/dsh-plugin).
|
|
238
|
-
|
|
239
|
-
## Licencia
|
|
240
|
-
|
|
241
|
-
Apache-2.0 — consulta [LICENSE](LICENSE). Las dependencias de instalación y sus licencias están en [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md); no se incluye nada empaquetado.
|
|
255
|
+
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | Isolated install-and-smoke test drives for DeepSeek Harness plugins. | |
|
|
256
|
+
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | TickTick/Dida365 task bridge: session-header panel + 11 tools | |
|
|
257
|
+
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. | |
|