dsh-autotier 0.2.2 → 0.2.5
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 +52 -23
- package/CHANGELOG.md +44 -0
- package/{README.es.md → README-es.md} +94 -13
- package/{README.hi.md → README-hi.md} +93 -14
- package/{README.pt.md → README-pt.md} +96 -16
- package/{README.zh.md → README-zh.md} +83 -11
- package/README.md +110 -18
- package/cordis.patch.yml +2 -2
- package/lib/client.js +72 -40
- package/lib/client.js.map +1 -1
- package/lib/index.js +233 -66
- package/lib/typert.host.js +1 -1
- package/lib/types/client/TierSettingsCard.d.ts +14 -12
- package/lib/types/client/TierSettingsCard.d.ts.map +1 -1
- package/lib/types/client/index.d.ts +5 -4
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/remote.d.ts +12 -12
- package/lib/types/config.d.ts +20 -9
- package/lib/types/config.d.ts.map +1 -1
- package/lib/types/index.d.ts +11 -8
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/judge.d.ts +17 -0
- package/lib/types/judge.d.ts.map +1 -1
- package/lib/types/preflight.d.ts +21 -1
- package/lib/types/preflight.d.ts.map +1 -1
- package/lib/types/routing.d.ts.map +1 -1
- package/lib/types/schema.d.ts +44 -2
- package/lib/types/schema.d.ts.map +1 -1
- package/lib/types/selection.d.ts +36 -10
- package/lib/types/selection.d.ts.map +1 -1
- package/lib/types/service.d.ts +16 -9
- package/lib/types/service.d.ts.map +1 -1
- package/lib/types/settings.d.ts +44 -0
- package/lib/types/settings.d.ts.map +1 -0
- package/lib/types/typert.host.d.ts +12 -12
- package/lib/types/wire.d.ts +24 -24
- package/lib/types/wire.d.ts.map +1 -1
- package/lib/{wire-BpKSOHgo.js → wire-BxsY8BiN.js} +22 -20
- package/package.json +62 -56
- package/src/client/TierSettingsCard.tsx +25 -12
- package/src/client/index.ts +29 -16
- package/src/config.ts +70 -12
- package/src/index.ts +23 -19
- package/src/judge.ts +30 -2
- package/src/preflight.ts +68 -1
- package/src/routing.ts +11 -0
- package/src/schema.ts +48 -9
- package/src/selection.ts +54 -20
- package/src/service.ts +20 -18
- package/src/settings.ts +80 -0
- package/src/wire.ts +19 -20
package/AGENTS.md
CHANGED
|
@@ -12,13 +12,21 @@ records repo-local decisions.
|
|
|
12
12
|
`sessionProjections` and `sandboxPolicy` are read with `ctx.get()` and degrade
|
|
13
13
|
when absent.
|
|
14
14
|
- `src/schema.ts` — the Schemastery schema and the raw (partial) config
|
|
15
|
-
interfaces it resolves
|
|
16
|
-
|
|
15
|
+
interfaces it resolves, plus the `VolatileConfig` face the Loader hands
|
|
16
|
+
`apply`. Kept free of executable logic so a schema module never mixes function
|
|
17
|
+
values into its declarations (the plugin-doctor K4 rule).
|
|
17
18
|
- `src/config.ts` — the explicit `resolveConfig` judge (no hidden `?? default`
|
|
18
|
-
in callers) and the resolved interfaces.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
in callers) and the resolved interfaces. It accepts BOTH config faces (plain
|
|
20
|
+
data and the Loader's `Volatile` references) and is the plugin's only
|
|
21
|
+
cross-field judge: Schemastery cannot express those rules and is all the Host
|
|
22
|
+
validates a form write against, so mount and every live update route through
|
|
23
|
+
here. Object defaults are COMPLETE objects; the adapter-owned effort
|
|
24
|
+
vocabulary is `off | low | high | max` (there is no `medium`).
|
|
25
|
+
- `src/service.ts` — `ctx.autotier` (`status()` and `reconfigure()`, which the
|
|
26
|
+
settings binding calls to swap the live policy).
|
|
27
|
+
- `src/settings.ts` — the host settings seam: claims the instance's Plugins-page
|
|
28
|
+
policy (`ctx.settings.configure({ auto: false })`) and re-resolves the routing
|
|
29
|
+
policy on every `loader/volatile-update`.
|
|
22
30
|
- `src/types.ts` — shared vocabulary (tier ids, effort ids, routing modes,
|
|
23
31
|
scenarios, route/status shapes).
|
|
24
32
|
- `src/wire.ts` — the `tier` Remote wire vocabulary: `TierStatus` (the public
|
|
@@ -34,15 +42,22 @@ records repo-local decisions.
|
|
|
34
42
|
`/tier` read; `agents` is read optionally through the injected resolver.
|
|
35
43
|
- `src/client/` — browser half: `$mount`s the Remote contribution, registers the
|
|
36
44
|
composer pill into `conversation.input.left` (id `tier-pill`) and the Settings
|
|
37
|
-
card into `
|
|
45
|
+
card into `plugins.item` (id `autotier`), with a pure presenter
|
|
38
46
|
(`present.ts`), inline scoped stylesheet (`styles.ts`), and en/zh dictionaries
|
|
39
47
|
(`locales.ts`). The slot registry is read through a local structural
|
|
40
|
-
`SlotsFace` (its owning package differs across host lines).
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
48
|
+
`SlotsFace` (its owning package differs across host lines). The browser half
|
|
49
|
+
needs no `configForms` entry: the Host generates the config form for the
|
|
50
|
+
`autotier` row from its `Config` schema, and this card is the dedicated
|
|
51
|
+
runtime surface (routing mode, live landings, catalog).
|
|
52
|
+
- `tests/` — vitest over the REAL published `0.1.7-alpha.1` host packages
|
|
53
|
+
(`Context`, `SessionStore`, `SystemPrompt`, `ToolRuntime`, `CommandRuntime`)
|
|
54
|
+
plus one real Loader composition. The `settings` service is the one stand-in:
|
|
55
|
+
the host's real `SettingsForms` binds to `configEditor`, `profileContext` and
|
|
56
|
+
the Loader's fiber graph, none of which this plugin consumes, while the
|
|
57
|
+
plugin's contract with it is only `configure({ auto })` and
|
|
58
|
+
`loader/volatile-update`. The browser half is covered through its pure units
|
|
59
|
+
(wire codecs, presenter, dictionaries) and the `tier` service through a real
|
|
60
|
+
mount with a scripted `agents` face.
|
|
46
61
|
|
|
47
62
|
## Hard rules applied here
|
|
48
63
|
|
|
@@ -59,15 +74,27 @@ records repo-local decisions.
|
|
|
59
74
|
- **Guard is defence in depth**: it never weakens `dsh-defend`, the approval
|
|
60
75
|
service or the sandbox policy. A guard that throws escalates the call instead
|
|
61
76
|
of allowing it.
|
|
62
|
-
- **Fail loud**: invalid configuration throws at mount
|
|
77
|
+
- **Fail loud**: invalid configuration throws at mount, and a live update the
|
|
78
|
+
cross-field judge refuses keeps the last good policy and logs — configuration
|
|
63
79
|
never silently disables routing.
|
|
80
|
+
- **One cross-field judge**: Schemastery cannot express this plugin's cross-field
|
|
81
|
+
rules and is all the Host validates a settings-form write against, so
|
|
82
|
+
`resolveConfig` is the only judge and both paths (mount, live update) call it.
|
|
83
|
+
`.volatile()` sits on each top-level Config section — never inside an array,
|
|
84
|
+
dict or union, which Schemastery forbids — and `routingMode` stays plain
|
|
85
|
+
because the per-session override is its runtime switch.
|
|
64
86
|
- **Model-visible ⟺ logged**: the only model-visible content is the `/tier`
|
|
65
|
-
output and the guard's corrective denial.
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
87
|
+
output and the guard's corrective denial. The judge's own model call carries a
|
|
88
|
+
producer-owned source kind (`dsh-autotier`, declared by module augmentation in
|
|
89
|
+
`src/judge.ts`); there is no shared `kind: 'plugin'` catch-all, and the session
|
|
90
|
+
format's row admission rejects that retired wrapper. No custom session event is
|
|
91
|
+
appended (that vocabulary is fail-closed on `0.1.2-alpha.1` and later); the
|
|
92
|
+
trail is the plugin logger plus the live `autotier/tier-changed` bus event, and
|
|
93
|
+
the sole append is the `plan/mode` fallback when the plan-mode service is
|
|
94
|
+
absent.
|
|
69
95
|
- **Registration is an effect**: every listener, command, tool, service and
|
|
70
|
-
|
|
96
|
+
page-policy claim rides the plugin fiber and disappears on dispose. (There is
|
|
97
|
+
no settings namespace to release any more: the Host owns the form.)
|
|
71
98
|
|
|
72
99
|
## Config
|
|
73
100
|
|
|
@@ -95,8 +122,10 @@ with the shell's platform modules (`react`, `react/jsx-runtime`, the
|
|
|
95
122
|
pnpm run verify:self-contained && pnpm run verify:artifacts && pnpm pack`. The
|
|
96
123
|
plain `typecheck` resolves the local harness checkout's type faces through
|
|
97
124
|
tsconfig `paths` (four levels up to `D:\deepseek-harness`); `typecheck:ci`
|
|
98
|
-
resolves the npm-published `0.1.
|
|
99
|
-
keep both green.
|
|
125
|
+
resolves the npm-published `0.1.7-alpha.1` faces (no paths) and is what CI runs —
|
|
126
|
+
keep both green. Both rulers must be on the SAME host line: this plugin's
|
|
127
|
+
settings seam exists only from `0.1.6-alpha.2` on, so a green checkout ruler with
|
|
128
|
+
a stale published pin would prove nothing.
|
|
100
129
|
|
|
101
130
|
## Release
|
|
102
131
|
|
|
@@ -108,8 +137,8 @@ and creates the GitHub Release from the CHANGELOG section.
|
|
|
108
137
|
|
|
109
138
|
## Docs
|
|
110
139
|
|
|
111
|
-
- Five-language READMEs (`README.md`, `README
|
|
112
|
-
`README
|
|
140
|
+
- Five-language READMEs (`README.md`, `README-zh.md`, `README-es.md`,
|
|
141
|
+
`README-pt.md`, `README-hi.md`) — keep all five in sync; the English file is
|
|
113
142
|
the source of truth.
|
|
114
143
|
- GitHub topics mirror `package.json` keywords.
|
|
115
144
|
- `THIRD_PARTY_NOTICES.md` records the MIT-licensed guard-rule port from
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,50 @@ 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
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.2.5] - 2026-09-22
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- **Adapted to the `0.1.7-alpha.1` host. This is a breaking adaptation: the older lines are dropped.** The `0.1.6`-generation harness replaced the settings *provider* seam with `SettingsForms`, so `ctx.settings.register(ns, schema, { base, validate })` and the `settings/updated` event no longer exist on any published line that ships the new service. Configuration is now read from the row's own volatile references: each top-level `Config` section is declared `.volatile()`, the plugin claims its Plugins-page policy with `ctx.settings.configure({ auto: false })`, and a live edit re-resolves the routing policy on `loader/volatile-update`. `.volatile()` cannot sit inside an array, dict or union, so it is applied per top-level section rather than per nested field. `routingMode` stays plain on purpose: it is the composition default, and the runtime switch remains the per-session override written by `/tier`, the composer pill and the card. Cross-field validation is unchanged in kind but moved owner: `.check()` does not exist in the pinned Schemastery, so `resolveConfig` — still the single judge at mount — now also runs on every live update and keeps the last good policy when it refuses a value.
|
|
15
|
+
- The `@deepseek-ai/dsh-settings-file` test dependency is gone (the package was deleted upstream); the composition suite provides the `settings` service through the Loader runner instead, since the real `SettingsForms` injects `configEditor` and `profileContext` from the launcher.
|
|
16
|
+
- External-change detection in `SelectionSync` is now a re-read comparison rather than a subscription. `settings/updated` is gone, so `observeExternalSelection()` reads `agentDefaultModel.currentSelection()` and delegates every live session when it differs from the value this plugin last wrote. It runs immediately before a tier is mirrored, so a user's model pick is still never overwritten by a routing decision; before this plugin's first write nothing is delegated, because at that point "not ours" describes the composition default rather than an override.
|
|
17
|
+
- The `@deepseek-ai/dsh-*` dev/test pins are unified onto the published `0.1.7-alpha.1` line (the frozen `0.1.5-rc.3` line still carries the removed `SettingsProvider` contract, so it cannot type-check this plugin's settings seam). This also settles the previous mixed line, where most pins sat on `0.1.5-rc.2` and two on `0.1.6-alpha.2`. `@deepseek-ai/cordis` moves to `^4.0.3` (4.0.2 does not export `Volatile`), `@deepseek-ai/schemastery` to `^3.18.3` (3.18.2 has neither `.volatile()` nor `Volatile<`), and `@deepseek-ai/cosmokit ^1.8.4` is added as a peer/dev dependency for `Volatile`/`isVolatile`; `@deepseek-ai/cordis-plugin-loader` moves to `^1.0.4`, which is the first version declaring `loader/volatile-update`.
|
|
18
|
+
- The declared host range gains the `0.1.7` line (`>=0.1.7-0 <0.2.0`). This is a correctness fix, not a widening: a semver range whose only prerelease comparator sits on an earlier version tuple does not admit a later alpha, so `engines.dsh` and every peer range previously excluded the very host this release targets.
|
|
19
|
+
- The strict Typert codecs are single-face. The protocol declares exactly `create(): TypertSchema`, the typert-loader enforces it, and nothing reads the `schema` property the codec used to carry alongside it — so the dual-face shape was dead weight that still looked supported. `scripts/verify-artifacts.mjs` now asserts `create()` is present and `schema` is absent.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- The judge's model call no longer uses the removed `kind: 'plugin'` message-source catch-all. `MessageSourceMap` is a merge-extensible sum type with no shared plugin kind, and the session format's physical-row admission rejects `kind === 'plugin'` outright. The call now declares its own `dsh-autotier` kind by module augmentation in `src/judge.ts`, with a bounded `notice` summary so the durable log says why an extra model call happened (`tool-jobs` is the upstream precedent).
|
|
24
|
+
- The integration suite runs on the new host contract: the in-memory `SettingsProvider` subclasses are replaced by a real cordis `Service` stand-in that implements `configure`, the settings-namespace assertions become live-update assertions, `settings/updated` emissions become re-read comparisons, and the duplicate-service remount assertion tracks cordis 4.0.3's wording.
|
|
25
|
+
|
|
26
|
+
### Removed
|
|
27
|
+
|
|
28
|
+
- The `validateConfig` save-time hook. It is no longer wired to anything (the Host has no validate hook to attach it to) and remains exported only as a deprecated alias of `resolveConfig` for existing importers.
|
|
29
|
+
|
|
30
|
+
## [0.2.3] - 2026-09-12
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
|
|
34
|
+
- The default cheap and vision tiers now land on `deepseek-flash` (the 0.1.6 catalogue id, image-capable) instead of the removed `deepseek-v4-flash*` ids — a behavior change: image turns no longer fail with `UNSUPPORTED_CONTENT` on hosts with the new catalogue, and the vision tier is genuinely multimodal again.
|
|
35
|
+
- The mount now fails loudly when a default tier model id is missing from a new-generation host catalogue (a missing id used to degrade silently to a text-only passthrough); hosts whose catalogue predates `deepseek-flash` keep the documented degradation and skip the check.
|
|
36
|
+
- The card moved from the Settings → Plugins tab to the Plugins page (`plugins.item`, Official group) with a `summary` one-liner and a `page` form, and reads the shell's current session from the main-view retention — the removed `SessionListState.current` no longer leaves the selector permanently disabled.
|
|
37
|
+
- Declared `dsh.manifestVersion: 1` and the `engines.dsh` range; the peer range now also admits the 0.1.6 line.
|
|
38
|
+
|
|
39
|
+
### Fixed
|
|
40
|
+
|
|
41
|
+
- The strict Typert codecs now carry the `create()` factory the 0.1.6-alpha.2 typert-loader requires, so the plugin tree boots on the new line (the dual-face codec keeps the rc.2 `schema` field too).
|
|
42
|
+
- Per-agent routing state is backfilled synchronously on `agent/created`, so the first request of a turn no longer pays the lazy-init path.
|
|
43
|
+
|
|
44
|
+
## [0.2.3] - 2026-09-12
|
|
45
|
+
|
|
46
|
+
### Changed
|
|
47
|
+
|
|
48
|
+
- Rename the four translated READMEs to `README-<lang>.md`. npm selects the package-page readme as the first markdown file matching its `{README,README.*}` glob (`@npmcli/package-json`, publish path), and that glob order puts `README.<lang>.md` ahead of `README.md` — so npm was serving the Simplified-Chinese file for every package of this family (measured on 15/15 sampled packages). The new names sit outside the glob, so the English source is served again. No content changed: the four renames are byte-identical (verified by content hash) and `check:readmes` still passes. Takes effect from the next release; an already-published version cannot gain a corrected readme retroactively.
|
|
49
|
+
- `scripts/check-readme-sync.mjs` now fails when the package root holds more than one npm-visible `README*.md` (it mirrors npm's `{README,README.*}` glob plus the markdown test), so the regression cannot return silently.
|
|
50
|
+
- Pin the `@deepseek-ai/dsh-*` dev/test dependencies to the published `0.1.5-rc.2` line and record `0.1.5-rc.2` in `dshWorkshop.compatibility.dshVersions`; the monthly Compat workflow now runs against `0.1.5-rc.2`. The peer range `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0` is unchanged, so no supported host line is dropped.
|
|
51
|
+
|
|
8
52
|
## [0.2.2] - 2026-09-10
|
|
9
53
|
|
|
10
54
|
### Changed
|
|
@@ -4,10 +4,13 @@
|
|
|
4
4
|
[](LICENSE)
|
|
5
5
|
[](https://github.com/topics/dsh-plugin)
|
|
6
6
|
[](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
|
|
7
|
+
[](https://dsh.market/)
|
|
7
8
|
[](#)
|
|
8
9
|
[](https://github.com/PerryLink/dsh-autotier/actions)
|
|
9
10
|
[](https://github.com/PerryLink/dsh-autotier/releases)
|
|
10
11
|
|
|
12
|
+
[English](README.md) | [简体中文](README-zh.md) | **Español** | [Português](README-pt.md) | [हिन्दी](README-hi.md)
|
|
13
|
+
|
|
11
14
|
Enrutamiento automático por niveles de modelo para DeepSeek Harness: entra una
|
|
12
15
|
instrucción del usuario y sale una decisión de nivel — sin cambiar de modelo a
|
|
13
16
|
mano.
|
|
@@ -27,13 +30,27 @@ strong con un TTL de retorno.
|
|
|
27
30
|
|
|
28
31
|
| Harness | Estado |
|
|
29
32
|
|---|---|
|
|
30
|
-
| `@deepseek-ai/dsh` `0.1.2-rc.1` | compatible;
|
|
31
|
-
| `@deepseek-ai/dsh` `0.1.5-rc.
|
|
32
|
-
| `@deepseek-ai/
|
|
33
|
+
| `@deepseek-ai/dsh` `0.1.2-rc.1` | ya no compatible; esa línea es anterior al contrato `SettingsForms` al que apunta ahora el plugin |
|
|
34
|
+
| `@deepseek-ai/dsh` `0.1.5-rc.2` | ya no compatible; el contrato `settings.register` / `settings/updated` que expone fue eliminado aguas arriba |
|
|
35
|
+
| `@deepseek-ai/dsh` `0.1.6-alpha.2` | ya no compatible; la misma eliminación, primera línea con `SettingsForms` |
|
|
36
|
+
| `@deepseek-ai/dsh` `0.1.7-alpha.1` | **requerida**; verificada contra el checkout correspondiente (`typecheck`) y los paquetes publicados (`typecheck:ci`, 214 pruebas) |
|
|
37
|
+
| `@deepseek-ai/cordis` `^4.0.3`, `@deepseek-ai/cosmokit` `^1.8.4`, `@deepseek-ai/schemastery` `^3.18.3` | base de peers |
|
|
33
38
|
|
|
34
|
-
Los rangos de peers nombran
|
|
35
|
-
>=0.1.5-alpha.1 <0.2.0`), porque un rango cuyo único comparador de prerelease
|
|
39
|
+
Los rangos de peers nombran las cuatro líneas publicadas (`>=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`), porque un rango cuyo único comparador de prerelease
|
|
36
40
|
está en una tupla anterior no admite un alpha posterior. Se refrescan por ola.
|
|
41
|
+
El rango declarado es deliberadamente más amplio que el verificado: documenta lo
|
|
42
|
+
que acepta el manifiesto, no lo que se ha probado.
|
|
43
|
+
|
|
44
|
+
**Esta versión es una adaptación rompiente.** El host de la generación `0.1.6`
|
|
45
|
+
eliminó la costura de *provider* de settings sobre la que se construyó este
|
|
46
|
+
plugin: el paquete `@deepseek-ai/dsh-settings-file` ya no existe,
|
|
47
|
+
`ctx.settings` es ahora `SettingsForms` (un proyector schema→formulario, sin
|
|
48
|
+
`register`), y `settings/updated` tampoco existe. Ninguna superficie compartida
|
|
49
|
+
permite que un plugin observe el documento de ajustes de otro, así que ninguna
|
|
50
|
+
versión de este plugin puede soportar ambos contratos a la vez. La configuración
|
|
51
|
+
fluye ahora por el mecanismo de configuración volátil del host; el **modo de
|
|
52
|
+
enrutado por sesión** —el ajuste que realmente cambia el comportamiento en
|
|
53
|
+
tiempo de ejecución— no cambia.
|
|
37
54
|
|
|
38
55
|
El plugin vive solo en el plano host y no necesita un preset propio: la fila host
|
|
39
56
|
se aplica a todas las sesiones. Una sección de prompt en *tu* preset es opcional
|
|
@@ -127,12 +144,12 @@ repositorio documenta las mismas claves en línea.
|
|
|
127
144
|
| `tiers.strong.followSession` | `false` | `false` = el effort de este nivel anula el de la sesión. |
|
|
128
145
|
| `tiers.strong.fallback` | `[]` | Aterrizajes provider/model ordenados si el nivel no está disponible. |
|
|
129
146
|
| `tiers.cheap.provider` | `deepseek-official` | Provider del nivel de implementación. |
|
|
130
|
-
| `tiers.cheap.model` | `deepseek-
|
|
147
|
+
| `tiers.cheap.model` | `deepseek-flash` | Id de catálogo del modelo cheap. |
|
|
131
148
|
| `tiers.cheap.effort` | `low` | Vocabulario del adaptador `off` \| `low` \| `high` \| `max`. |
|
|
132
149
|
| `tiers.cheap.followSession` | `true` | `true` = hereda el effort de la sesión y gana la elección explícita. |
|
|
133
150
|
| `tiers.cheap.fallback` | `[]` | Aterrizajes provider/model ordenados si el nivel no está disponible. |
|
|
134
151
|
| `tiers.vision.provider` | `deepseek-official` | Provider para turnos con imágenes. |
|
|
135
|
-
| `tiers.vision.model` | `deepseek-
|
|
152
|
+
| `tiers.vision.model` | `deepseek-flash` | El único modelo del catálogo con modalidad de imagen. |
|
|
136
153
|
| `intent.ruleThreshold` | `0.7` | Confianza a partir de la cual la capa de reglas decide sola. |
|
|
137
154
|
| `intent.attemptBand.enabled` | `false` | Empezar la banda media en cheap y escalar ante una señal. |
|
|
138
155
|
| `intent.attemptBand.tauLow` | `0.45` | Límite inferior de la banda attempt-first. |
|
|
@@ -160,9 +177,19 @@ repositorio documenta las mismas claves en línea.
|
|
|
160
177
|
| `escalation.signature` | `true` | Contar recurrencias de la misma firma en vez de cada fallo. |
|
|
161
178
|
| `routingMode` | `auto` | `auto` \| `strong` \| `cheap` \| `delegated` \| `off`. |
|
|
162
179
|
|
|
163
|
-
Todas las claves se pueden editar en caliente desde
|
|
164
|
-
|
|
165
|
-
|
|
180
|
+
Todas las claves también se pueden editar en caliente desde la tarjeta del
|
|
181
|
+
plugin en la página Plugins: el Host valida el valor nuevo contra el schema y lo
|
|
182
|
+
confirma con `loader/volatile-update`, y este plugin vuelve a juzgar toda la
|
|
183
|
+
configuración con el mismo juez de campos cruzados que usa al montar. Un valor
|
|
184
|
+
que viole un requisito cruzado (dos tiers aterrizando en la misma ruta, un par de
|
|
185
|
+
histéresis que no frena el parpadeo, una regla sin pattern ni tool) deja la
|
|
186
|
+
última política válida enrutando en lugar de instalar algo inenrutable.
|
|
187
|
+
|
|
188
|
+
`routingMode` es la única clave que **no** es en caliente: es el valor por
|
|
189
|
+
defecto de la composición, y el interruptor en tiempo de ejecución es la
|
|
190
|
+
anulación por sesión que escriben `/tier`, la píldora del compositor y el
|
|
191
|
+
selector de la tarjeta. Hacerla en caliente también daría a un mismo
|
|
192
|
+
comportamiento dos dueños.
|
|
166
193
|
|
|
167
194
|
## Herramientas y superficies
|
|
168
195
|
|
|
@@ -177,8 +204,10 @@ cruzado se rechaza al guardar y la última política válida sigue vigente.
|
|
|
177
204
|
|
|
178
205
|
## Permisos y datos
|
|
179
206
|
|
|
180
|
-
- **Ficheros** — el plugin no lee ni escribe
|
|
181
|
-
|
|
207
|
+
- **Ficheros** — el plugin no lee ningún fichero ni escribe ninguno. La
|
|
208
|
+
configuración es del Host: un valor guardado en la página Plugins lo persiste
|
|
209
|
+
el Host en el parche del perfil activo, y este plugin solo lee la instantánea
|
|
210
|
+
viva que se le entrega.
|
|
182
211
|
- **Red** — el único tráfico saliente es la llamada al juez, que pasa por la ruta
|
|
183
212
|
normal de `ctx.llm` y el provider configurado.
|
|
184
213
|
- **Registro de sesión** — el plugin no añade eventos de sesión propios. El rastro
|
|
@@ -229,7 +258,7 @@ cruzado se rechaza al guardar y la última política válida sigue vigente.
|
|
|
229
258
|
```bash
|
|
230
259
|
pnpm install
|
|
231
260
|
pnpm run typecheck # contra las caras de tipo del checkout local del harness
|
|
232
|
-
pnpm run typecheck:ci # contra las caras publicadas 0.1.
|
|
261
|
+
pnpm run typecheck:ci # contra las caras publicadas 0.1.7-alpha.1 (lo que ejecuta CI)
|
|
233
262
|
pnpm test
|
|
234
263
|
pnpm run build
|
|
235
264
|
pnpm run verify:self-contained
|
|
@@ -256,3 +285,55 @@ PerryLink. Issues y pull requests en
|
|
|
256
285
|
|
|
257
286
|
Apache-2.0. Véase [LICENSE](./LICENSE) y
|
|
258
287
|
[THIRD_PARTY_NOTICES.md](./THIRD_PARTY_NOTICES.md).
|
|
288
|
+
|
|
289
|
+
## PerryLink DSH Plugin Family
|
|
290
|
+
|
|
291
|
+
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:
|
|
292
|
+
|
|
293
|
+
| Plugin | One-liner |
|
|
294
|
+
|---|---|
|
|
295
|
+
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Second-model auto-review on the approval chain, fail-closed by default | |
|
|
296
|
+
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | |
|
|
297
|
+
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Durable background child agents with a Web UI sidebar, messaging and interrupt | |
|
|
298
|
+
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | |
|
|
299
|
+
| **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | |
|
|
300
|
+
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | |
|
|
301
|
+
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore | |
|
|
302
|
+
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH | |
|
|
303
|
+
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness — Windows first. | |
|
|
304
|
+
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Terminal-style input history for the web composer: arrows, Ctrl+R search | |
|
|
305
|
+
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) | |
|
|
306
|
+
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | |
|
|
307
|
+
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Engineering-discipline guard: requirements grill, test gates, adversary review | |
|
|
308
|
+
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. | |
|
|
309
|
+
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics for DeepSeek Harness. | |
|
|
310
|
+
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Deterministic research reports for Chinese public mutual funds | |
|
|
311
|
+
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issues integration for DSH, every write gated by approval | |
|
|
312
|
+
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | Industry research orchestration that seals its deliverables through this plugin's `ctx.researchReport.assemble` | |
|
|
313
|
+
| **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | Laya typed decisions (`noul`/`choice`/`score`) as a first-class Cordis service and model-visible tools | |
|
|
314
|
+
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | Local document knowledge base for DeepSeek Harness. | |
|
|
315
|
+
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | Local-model (Ollama) integration for DeepSeek Harness. | |
|
|
316
|
+
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
|
|
317
|
+
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
|
|
318
|
+
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
|
|
319
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
320
|
+
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
|
|
321
|
+
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
|
|
322
|
+
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
|
|
323
|
+
| **[dsh-plugin-certification](https://github.com/PerryLink/dsh-plugin-certification)** | Community certification registry with repro-checkable grades and badges | |
|
|
324
|
+
| **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | Zero-dependency static + sandbox smoke detector for DSH plugins | |
|
|
325
|
+
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-development knowledge base as an on-demand agent skill | |
|
|
326
|
+
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
|
|
327
|
+
| **[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 | |
|
|
328
|
+
| **[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 | |
|
|
329
|
+
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console | |
|
|
330
|
+
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research-report engine: content-addressed evidence ledger and sealed versions | |
|
|
331
|
+
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional quality scoring for DeepSeek Harness plugins. | |
|
|
332
|
+
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions in the Web sidebar with durable ordering | |
|
|
333
|
+
| **[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. | |
|
|
334
|
+
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | Security-audit skill pack: secret scan, dependency and supply-chain review | |
|
|
335
|
+
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. | |
|
|
336
|
+
| **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | Cross-session team rooms: shared message bus, task board and timeline | |
|
|
337
|
+
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | Isolated install-and-smoke test drives for DeepSeek Harness plugins. | |
|
|
338
|
+
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | TickTick/Dida365 task bridge: session-header panel + 11 tools | |
|
|
339
|
+
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. | |
|
|
@@ -4,10 +4,13 @@
|
|
|
4
4
|
[](LICENSE)
|
|
5
5
|
[](https://github.com/topics/dsh-plugin)
|
|
6
6
|
[](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
|
|
7
|
+
[](https://dsh.market/)
|
|
7
8
|
[](#)
|
|
8
9
|
[](https://github.com/PerryLink/dsh-autotier/actions)
|
|
9
10
|
[](https://github.com/PerryLink/dsh-autotier/releases)
|
|
10
11
|
|
|
12
|
+
[English](README.md) | [简体中文](README-zh.md) | [Español](README-es.md) | [Português](README-pt.md) | **हिन्दी**
|
|
13
|
+
|
|
11
14
|
DeepSeek Harness के लिए स्वचालित मॉडल-स्तर रूटिंग: एक उपयोगकर्ता निर्देश अंदर
|
|
12
15
|
आता है, एक स्तर-निर्णय बाहर आता है — मॉडल हाथ से बदलने की ज़रूरत नहीं।
|
|
13
16
|
|
|
@@ -25,14 +28,25 @@ DeepSeek Harness के लिए स्वचालित मॉडल-स्
|
|
|
25
28
|
|
|
26
29
|
| Harness | स्थिति |
|
|
27
30
|
|---|---|
|
|
28
|
-
| `@deepseek-ai/dsh` `0.1.2-rc.1` |
|
|
29
|
-
| `@deepseek-ai/dsh` `0.1.5-rc.
|
|
30
|
-
| `@deepseek-ai/
|
|
31
|
+
| `@deepseek-ai/dsh` `0.1.2-rc.1` | अब समर्थित नहीं; वह लाइन उस `SettingsForms` अनुबंध से पुरानी है जिस पर यह प्लगइन अब लक्ष्य करता है |
|
|
32
|
+
| `@deepseek-ai/dsh` `0.1.5-rc.2` | अब समर्थित नहीं; उसका `settings.register` / `settings/updated` अनुबंध upstream में हटा दिया गया |
|
|
33
|
+
| `@deepseek-ai/dsh` `0.1.6-alpha.2` | अब समर्थित नहीं; वही हटाव, `SettingsForms` वाली पहली लाइन |
|
|
34
|
+
| `@deepseek-ai/dsh` `0.1.7-alpha.1` | **आवश्यक**; मेल खाते checkout (`typecheck`) और प्रकाशित पैकेजों (`typecheck:ci`, 214 टेस्ट) दोनों पर सत्यापित |
|
|
35
|
+
| `@deepseek-ai/cordis` `^4.0.3`, `@deepseek-ai/cosmokit` `^1.8.4`, `@deepseek-ai/schemastery` `^3.18.3` | peer आधार |
|
|
31
36
|
|
|
32
|
-
peer ranges
|
|
33
|
-
|| >=0.1.5-alpha.1 <0.2.0`), क्योंकि जिस range का एकमात्र prerelease comparator
|
|
37
|
+
peer ranges चारों प्रकाशित लाइनें स्पष्ट रूप से लिखती हैं (`>=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`), क्योंकि जिस range का एकमात्र prerelease comparator
|
|
34
38
|
पुराने tuple पर हो वह बाद के alpha को स्वीकार नहीं करता। हर प्रकाशन-लहर पर
|
|
35
|
-
रिफ़्रेश होता है।
|
|
39
|
+
रिफ़्रेश होता है। घोषित range जानबूझकर सत्यापित range से व्यापक है: यह दर्ज करती
|
|
40
|
+
है कि manifest क्या स्वीकार करता है, यह नहीं कि क्या परखा गया।
|
|
41
|
+
|
|
42
|
+
**यह रिलीज़ एक breaking adaptation है।** `0.1.6` पीढ़ी के होस्ट ने वह settings
|
|
43
|
+
*provider* सीवन हटा दिया जिस पर यह प्लगइन बना था: `@deepseek-ai/dsh-settings-file`
|
|
44
|
+
पैकेज अब मौजूद नहीं है, `ctx.settings` अब `SettingsForms` है (schema→form
|
|
45
|
+
प्रोजेक्टर, जिसमें `register` नहीं है), और `settings/updated` भी नहीं है। कोई
|
|
46
|
+
साझा सतह ऐसी नहीं है जो एक प्लगइन को दूसरे प्लगइन का settings दस्तावेज़ देखने
|
|
47
|
+
दे, इसलिए इस प्लगइन का कोई संस्करण दोनों अनुबंध एक साथ सहन नहीं कर सकता।
|
|
48
|
+
कॉन्फ़िगरेशन अब होस्ट के volatile-config तंत्र से बहती है; **प्रति-सत्र रूटिंग
|
|
49
|
+
मोड** — वही सेटिंग जो रनटाइम पर व्यवहार बदलती है — अपरिवर्तित है।
|
|
36
50
|
|
|
37
51
|
यह प्लगइन केवल host plane पर रहता है और अपना preset नहीं माँगता: host पंक्ति
|
|
38
52
|
हर सत्र पर लागू होती है। *आपके* preset में एक प्रॉम्प्ट खंड वैकल्पिक है और
|
|
@@ -106,8 +120,9 @@ dsh plugin --profile web add .
|
|
|
106
120
|
dsh plugin --profile web remove dsh-autotier
|
|
107
121
|
```
|
|
108
122
|
|
|
109
|
-
पंक्ति, उसका
|
|
110
|
-
|
|
123
|
+
पंक्ति, उसका कमांड, उसके टूल और सभी listeners प्लगइन के साथ हट जाते हैं।
|
|
124
|
+
Plugins पेज से सहेजी गई कॉन्फ़िगरेशन सक्रिय profile patch में रहती है और उस
|
|
125
|
+
profile की है, इस प्लगइन की नहीं; पंक्ति हटाने पर वह वहीं अछूती रहती है।
|
|
111
126
|
|
|
112
127
|
## कॉन्फ़िगरेशन
|
|
113
128
|
|
|
@@ -123,12 +138,12 @@ dsh plugin --profile web remove dsh-autotier
|
|
|
123
138
|
| `tiers.strong.followSession` | `false` | `false` = इस स्तर का effort सत्र के effort को ओवरराइड करता है। |
|
|
124
139
|
| `tiers.strong.fallback` | `[]` | स्तर अनुपलब्ध होने पर क्रमबद्ध provider/model लैंडिंग। |
|
|
125
140
|
| `tiers.cheap.provider` | `deepseek-official` | कार्यान्वयन स्तर का provider। |
|
|
126
|
-
| `tiers.cheap.model` | `deepseek-
|
|
141
|
+
| `tiers.cheap.model` | `deepseek-flash` | cheap मॉडल की कैटलॉग id। |
|
|
127
142
|
| `tiers.cheap.effort` | `low` | एडाप्टर शब्दावली `off` \| `low` \| `high` \| `max`। |
|
|
128
143
|
| `tiers.cheap.followSession` | `true` | `true` = सत्र का effort विरासत में लें, जिससे स्पष्ट चयन जीते। |
|
|
129
144
|
| `tiers.cheap.fallback` | `[]` | स्तर अनुपलब्ध होने पर क्रमबद्ध provider/model लैंडिंग। |
|
|
130
145
|
| `tiers.vision.provider` | `deepseek-official` | चित्र वाले turn का provider। |
|
|
131
|
-
| `tiers.vision.model` | `deepseek-
|
|
146
|
+
| `tiers.vision.model` | `deepseek-flash` | कैटलॉग का एकमात्र image-सक्षम मॉडल। |
|
|
132
147
|
| `intent.ruleThreshold` | `0.7` | जिस आत्मविश्वास से नियम-परत अकेले निर्णय लेती है। |
|
|
133
148
|
| `intent.attemptBand.enabled` | `false` | मध्य पट्टी को cheap पर शुरू कर संकेत मिलने पर बढ़ाना। |
|
|
134
149
|
| `intent.attemptBand.tauLow` | `0.45` | attempt-first पट्टी की निचली सीमा। |
|
|
@@ -156,9 +171,18 @@ dsh plugin --profile web remove dsh-autotier
|
|
|
156
171
|
| `escalation.signature` | `true` | हर विफलता के बजाय समान हस्ताक्षर की पुनरावृत्ति गिनें। |
|
|
157
172
|
| `routingMode` | `auto` | `auto` \| `strong` \| `cheap` \| `delegated` \| `off`। |
|
|
158
173
|
|
|
159
|
-
सभी कुंजियाँ
|
|
160
|
-
|
|
161
|
-
|
|
174
|
+
सभी कुंजियाँ Plugins पेज पर इस प्लगइन के कार्ड से लाइव भी बदली जा सकती हैं:
|
|
175
|
+
होस्ट नया मान schema के विरुद्ध जाँचता है और उसे `loader/volatile-update` से
|
|
176
|
+
कमिट करता है, फिर यह प्लगइन पूरी कॉन्फ़िगरेशन को उसी क्रॉस-फ़ील्ड जज से दोबारा
|
|
177
|
+
आँकता है जो माउंट के समय चलता है। क्रॉस-फ़ील्ड शर्त तोड़ने वाला मान (दो tiers
|
|
178
|
+
एक ही रूट पर, झूला रोक न पाने वाला hysteresis युग्म, बिना pattern और बिना tool
|
|
179
|
+
वाला नियम) अंतिम वैध नीति को चालू रहने देता है, बजाय किसी अनरूटेबल चीज़ को
|
|
180
|
+
लागू करने के।
|
|
181
|
+
|
|
182
|
+
`routingMode` अकेली ऐसी कुंजी है जो लाइव **नहीं** है: वह composition का
|
|
183
|
+
डिफ़ॉल्ट है, और रनटाइम स्विच वह प्रति-सत्र override है जो `/tier`, composer
|
|
184
|
+
pill और कार्ड का सेलेक्टर लिखते हैं। उसे भी लाइव बनाने से एक ही व्यवहार के दो
|
|
185
|
+
मालिक हो जाते।
|
|
162
186
|
|
|
163
187
|
## टूल और सतहें
|
|
164
188
|
|
|
@@ -225,7 +249,7 @@ dsh plugin --profile web remove dsh-autotier
|
|
|
225
249
|
```bash
|
|
226
250
|
pnpm install
|
|
227
251
|
pnpm run typecheck # स्थानीय harness checkout के type faces के विरुद्ध
|
|
228
|
-
pnpm run typecheck:ci # प्रकाशित 0.1.
|
|
252
|
+
pnpm run typecheck:ci # प्रकाशित 0.1.7-alpha.1 faces के विरुद्ध (CI यही चलाता है)
|
|
229
253
|
pnpm test
|
|
230
254
|
pnpm run build
|
|
231
255
|
pnpm run verify:self-contained
|
|
@@ -252,3 +276,58 @@ PerryLink. Issues और pull requests:
|
|
|
252
276
|
|
|
253
277
|
Apache-2.0. देखें [LICENSE](./LICENSE) और
|
|
254
278
|
[THIRD_PARTY_NOTICES.md](./THIRD_PARTY_NOTICES.md)।
|
|
279
|
+
|
|
280
|
+
**लागू DSH संस्करण:** `dsh-v0.1.7-alpha.1` (यह बिल्ड जिस होस्ट रिलीज़ को लक्षित करता है) पर सत्यापित; आवश्यक `>=0.1.7-alpha.1 <0.2.0`।
|
|
281
|
+
|
|
282
|
+
## PerryLink DSH Plugin Family
|
|
283
|
+
|
|
284
|
+
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:
|
|
285
|
+
|
|
286
|
+
| Plugin | One-liner |
|
|
287
|
+
|---|---|
|
|
288
|
+
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Second-model auto-review on the approval chain, fail-closed by default | |
|
|
289
|
+
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | |
|
|
290
|
+
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Durable background child agents with a Web UI sidebar, messaging and interrupt | |
|
|
291
|
+
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | |
|
|
292
|
+
| **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | |
|
|
293
|
+
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | |
|
|
294
|
+
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore | |
|
|
295
|
+
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH | |
|
|
296
|
+
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness — Windows first. | |
|
|
297
|
+
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Terminal-style input history for the web composer: arrows, Ctrl+R search | |
|
|
298
|
+
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) | |
|
|
299
|
+
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | |
|
|
300
|
+
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Engineering-discipline guard: requirements grill, test gates, adversary review | |
|
|
301
|
+
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. | |
|
|
302
|
+
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics for DeepSeek Harness. | |
|
|
303
|
+
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Deterministic research reports for Chinese public mutual funds | |
|
|
304
|
+
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issues integration for DSH, every write gated by approval | |
|
|
305
|
+
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | Industry research orchestration that seals its deliverables through this plugin's `ctx.researchReport.assemble` | |
|
|
306
|
+
| **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | Laya typed decisions (`noul`/`choice`/`score`) as a first-class Cordis service and model-visible tools | |
|
|
307
|
+
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | Local document knowledge base for DeepSeek Harness. | |
|
|
308
|
+
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | Local-model (Ollama) integration for DeepSeek Harness. | |
|
|
309
|
+
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
|
|
310
|
+
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
|
|
311
|
+
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
|
|
312
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
313
|
+
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
|
|
314
|
+
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
|
|
315
|
+
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
|
|
316
|
+
| **[dsh-plugin-certification](https://github.com/PerryLink/dsh-plugin-certification)** | Community certification registry with repro-checkable grades and badges | |
|
|
317
|
+
| **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | Zero-dependency static + sandbox smoke detector for DSH plugins | |
|
|
318
|
+
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-development knowledge base as an on-demand agent skill | |
|
|
319
|
+
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
|
|
320
|
+
| **[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 | |
|
|
321
|
+
| **[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 | |
|
|
322
|
+
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console | |
|
|
323
|
+
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research-report engine: content-addressed evidence ledger and sealed versions | |
|
|
324
|
+
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional quality scoring for DeepSeek Harness plugins. | |
|
|
325
|
+
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions in the Web sidebar with durable ordering | |
|
|
326
|
+
| **[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. | |
|
|
327
|
+
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | Security-audit skill pack: secret scan, dependency and supply-chain review | |
|
|
328
|
+
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. | |
|
|
329
|
+
| **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | Cross-session team rooms: shared message bus, task board and timeline | |
|
|
330
|
+
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | Isolated install-and-smoke test drives for DeepSeek Harness plugins. | |
|
|
331
|
+
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | TickTick/Dida365 task bridge: session-header panel + 11 tools | |
|
|
332
|
+
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. | |
|
|
333
|
+
|