dsh-autotier 0.2.3 → 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.
Files changed (51) hide show
  1. package/AGENTS.md +50 -21
  2. package/CHANGELOG.md +36 -0
  3. package/README-es.md +94 -13
  4. package/README-hi.md +93 -14
  5. package/README-pt.md +96 -16
  6. package/README-zh.md +83 -11
  7. package/README.md +110 -18
  8. package/cordis.patch.yml +2 -2
  9. package/lib/client.js +72 -40
  10. package/lib/client.js.map +1 -1
  11. package/lib/index.js +233 -66
  12. package/lib/typert.host.js +1 -1
  13. package/lib/types/client/TierSettingsCard.d.ts +14 -12
  14. package/lib/types/client/TierSettingsCard.d.ts.map +1 -1
  15. package/lib/types/client/index.d.ts +5 -4
  16. package/lib/types/client/index.d.ts.map +1 -1
  17. package/lib/types/client/remote.d.ts +12 -12
  18. package/lib/types/config.d.ts +20 -9
  19. package/lib/types/config.d.ts.map +1 -1
  20. package/lib/types/index.d.ts +11 -8
  21. package/lib/types/index.d.ts.map +1 -1
  22. package/lib/types/judge.d.ts +17 -0
  23. package/lib/types/judge.d.ts.map +1 -1
  24. package/lib/types/preflight.d.ts +21 -1
  25. package/lib/types/preflight.d.ts.map +1 -1
  26. package/lib/types/routing.d.ts.map +1 -1
  27. package/lib/types/schema.d.ts +44 -2
  28. package/lib/types/schema.d.ts.map +1 -1
  29. package/lib/types/selection.d.ts +36 -10
  30. package/lib/types/selection.d.ts.map +1 -1
  31. package/lib/types/service.d.ts +16 -9
  32. package/lib/types/service.d.ts.map +1 -1
  33. package/lib/types/settings.d.ts +44 -0
  34. package/lib/types/settings.d.ts.map +1 -0
  35. package/lib/types/typert.host.d.ts +12 -12
  36. package/lib/types/wire.d.ts +24 -24
  37. package/lib/types/wire.d.ts.map +1 -1
  38. package/lib/{wire-BpKSOHgo.js → wire-BxsY8BiN.js} +22 -20
  39. package/package.json +58 -52
  40. package/src/client/TierSettingsCard.tsx +25 -12
  41. package/src/client/index.ts +29 -16
  42. package/src/config.ts +70 -12
  43. package/src/index.ts +23 -19
  44. package/src/judge.ts +30 -2
  45. package/src/preflight.ts +68 -1
  46. package/src/routing.ts +11 -0
  47. package/src/schema.ts +48 -9
  48. package/src/selection.ts +54 -20
  49. package/src/service.ts +20 -18
  50. package/src/settings.ts +80 -0
  51. package/src/wire.ts +19 -20
package/README-pt.md CHANGED
@@ -4,10 +4,13 @@
4
4
  [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)
5
5
  [![DSH plugin](https://img.shields.io/badge/dsh--plugin-✅-green)](https://github.com/topics/dsh-plugin)
6
6
  [![dsh-doctor](https://raw.githubusercontent.com/PerryLink/dsh-plugin-doctor/main/badges/PerryLink__dsh-autotier.svg)](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
7
+ [![DSH Market](https://raw.githubusercontent.com/2BingLing/dsh-market/master/assets/readme/badge-listed-en.svg)](https://dsh.market/)
7
8
  [![Node](https://img.shields.io/badge/node-%5E22.19.0%20%7C%7C%20%3E%3D24.0.0-brightgreen.svg)](#)
8
9
  [![CI](https://img.shields.io/github/actions/workflow/status/PerryLink/dsh-autotier/ci.yml?branch=main&label=CI)](https://github.com/PerryLink/dsh-autotier/actions)
9
10
  [![Version](https://img.shields.io/github/v/tag/PerryLink/dsh-autotier?label=version)](https://github.com/PerryLink/dsh-autotier/releases)
10
11
 
12
+ [English](README.md) | [简体中文](README-zh.md) | [Español](README-es.md) | **Português** | [हिन्दी](README-hi.md)
13
+
11
14
  Roteamento automático por níveis de modelo para o DeepSeek Harness: entra uma
12
15
  instrução do usuário, sai uma decisão de nível — sem trocar de modelo à mão.
13
16
 
@@ -26,13 +29,27 @@ retorno.
26
29
 
27
30
  | Harness | Estado |
28
31
  |---|---|
29
- | `@deepseek-ai/dsh` `0.1.2-rc.1` | compatível; o fluxo compat instala esta linha ponta a ponta |
30
- | `@deepseek-ai/dsh` `0.1.5-rc.2` | compatível; verificada ponta a ponta (perfil real, linha no `--dump-config`, smoke keyless) e na matriz compat |
31
- | `@deepseek-ai/cordis` `^4.0.2`, `@deepseek-ai/schemastery` `^3.18.2` | base de peers |
32
+ | `@deepseek-ai/dsh` `0.1.2-rc.1` | não é mais suportada; essa linha é anterior ao contrato `SettingsForms` que o plugin agora mira |
33
+ | `@deepseek-ai/dsh` `0.1.5-rc.2` | não é mais suportada; o contrato `settings.register` / `settings/updated` que ela expõe foi removido a montante |
34
+ | `@deepseek-ai/dsh` `0.1.6-alpha.2` | não é mais suportada; a mesma remoção, primeira linha com `SettingsForms` |
35
+ | `@deepseek-ai/dsh` `0.1.7-alpha.1` | **obrigatória**; verificada contra o checkout correspondente (`typecheck`) e os pacotes publicados (`typecheck:ci`, 214 testes) |
36
+ | `@deepseek-ai/cordis` `^4.0.3`, `@deepseek-ai/cosmokit` `^1.8.4`, `@deepseek-ai/schemastery` `^3.18.3` | base de peers |
32
37
 
33
- Os ranges de peers nomeiam as duas linhas publicadas (`>=0.1.2-rc.1 <0.2.0 ||
34
- >=0.1.5-alpha.1 <0.2.0`), porque um range cujo único comparador de prerelease
38
+ Os ranges de peers nomeiam as quatro linhas 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 um range cujo único comparador de prerelease
35
39
  está numa tupla anterior não admite um alpha posterior. São atualizados por onda.
40
+ O range declarado é deliberadamente mais amplo que o verificado: documenta o que o
41
+ manifesto aceita, não o que foi testado.
42
+
43
+ **Esta versão é uma adaptação que quebra compatibilidade.** O host da geração
44
+ `0.1.6` removeu a costura de *provider* de settings sobre a qual este plugin foi
45
+ construído: o pacote `@deepseek-ai/dsh-settings-file` não existe mais,
46
+ `ctx.settings` agora é `SettingsForms` (um projetor schema→formulário, sem
47
+ `register`), e `settings/updated` também não existe. Nenhuma superfície
48
+ compartilhada permite que um plugin observe o documento de configurações de
49
+ outro, então nenhuma versão deste plugin pode suportar os dois contratos ao mesmo
50
+ tempo. A configuração agora flui pelo mecanismo de configuração volátil do host;
51
+ o **modo de roteamento por sessão** — a configuração que de fato muda o
52
+ comportamento em tempo de execução — não muda.
36
53
 
37
54
  O plugin vive apenas no plano host e não precisa de preset próprio: a linha host
38
55
  vale para todas as sessões. Uma seção de prompt no *seu* preset é opcional e
@@ -108,9 +125,10 @@ modelo saiba em qual nível está, acrescente uma linha ao *seu* preset
108
125
  dsh plugin --profile web remove dsh-autotier
109
126
  ```
110
127
 
111
- A linha, seu namespace de settings, seu comando, suas ferramentas e seus
112
- listeners são removidos com o plugin; nada é escrito fora do documento de
113
- settings.
128
+ A linha, seu comando, suas ferramentas e seus listeners são removidos com o
129
+ plugin. A configuração que um usuário salvou pela página Plugins vive no patch do
130
+ perfil ativo e pertence àquele perfil, não a este plugin; remover a linha a deixa
131
+ ali intacta.
114
132
 
115
133
  ## Configuração
116
134
 
@@ -126,12 +144,12 @@ documenta as mesmas chaves em linha.
126
144
  | `tiers.strong.followSession` | `false` | `false` = o effort deste nível substitui o da sessão. |
127
145
  | `tiers.strong.fallback` | `[]` | Aterrissagens provider/model ordenadas se o nível estiver indisponível. |
128
146
  | `tiers.cheap.provider` | `deepseek-official` | Provider do nível de implementação. |
129
- | `tiers.cheap.model` | `deepseek-v4-flash` | Id de catálogo do modelo cheap. |
147
+ | `tiers.cheap.model` | `deepseek-flash` | Id de catálogo do modelo cheap. |
130
148
  | `tiers.cheap.effort` | `low` | Vocabulário do adaptador `off` \| `low` \| `high` \| `max`. |
131
149
  | `tiers.cheap.followSession` | `true` | `true` = herda o effort da sessão e a escolha explícita vence. |
132
150
  | `tiers.cheap.fallback` | `[]` | Aterrissagens provider/model ordenadas se o nível estiver indisponível. |
133
151
  | `tiers.vision.provider` | `deepseek-official` | Provider para turnos com imagens. |
134
- | `tiers.vision.model` | `deepseek-v4-flash-vision-exp` | O único modelo do catálogo com modalidade de imagem. |
152
+ | `tiers.vision.model` | `deepseek-flash` | O único modelo do catálogo com modalidade de imagem. |
135
153
  | `intent.ruleThreshold` | `0.7` | Confiança a partir da qual a camada de regras decide sozinha. |
136
154
  | `intent.attemptBand.enabled` | `false` | Começar a faixa média no cheap e escalar ao primeiro sinal. |
137
155
  | `intent.attemptBand.tauLow` | `0.45` | Limite inferior da faixa attempt-first. |
@@ -159,9 +177,18 @@ documenta as mesmas chaves em linha.
159
177
  | `escalation.signature` | `true` | Contar recorrências da mesma assinatura em vez de cada falha. |
160
178
  | `routingMode` | `auto` | `auto` \| `strong` \| `cheap` \| `delegated` \| `off`. |
161
179
 
162
- Todas as chaves também podem ser editadas a quente pelo namespace de settings
163
- `autotier` (`$DSH_HOME/settings.yaml`); uma escrita que viole um requisito
164
- cruzado é recusada ao salvar e a última política válida continua em vigor.
180
+ Todas as chaves também podem ser editadas a quente pelo cartão do plugin na
181
+ página Plugins: o Host valida o valor novo contra o schema e o confirma com
182
+ `loader/volatile-update`, e este plugin então rejulga a configuração inteira com
183
+ o mesmo juiz de campos cruzados que usa na montagem. Um valor que viole um
184
+ requisito cruzado (dois tiers caindo na mesma rota, um par de histerese que não
185
+ freia o piscar, uma regra sem pattern nem tool) deixa a última política válida
186
+ roteando em vez de instalar algo inroteável.
187
+
188
+ `routingMode` é a única chave que **não** é a quente: é o padrão da composição, e
189
+ o interruptor em tempo de execução é a sobreposição por sessão escrita por
190
+ `/tier`, pela pílula do compositor e pelo seletor do cartão. Torná-la a quente
191
+ também daria a um mesmo comportamento dois donos.
165
192
 
166
193
  ## Ferramentas e superfícies
167
194
 
@@ -176,8 +203,9 @@ cruzado é recusada ao salvar e a última política válida continua em vigor.
176
203
 
177
204
  ## Permissões e dados
178
205
 
179
- - **Arquivos** — o plugin não lê nem escreve nada além do serviço compartilhado
180
- de settings (o namespace `autotier`).
206
+ - **Arquivos** — o plugin não lê nenhum arquivo nem escreve nenhum. A
207
+ configuração é do Host: um valor salvo na página Plugins é persistido pelo Host
208
+ no patch do perfil ativo, e este plugin apenas lê o snapshot vivo que recebe.
181
209
  - **Rede** — o único tráfego de saída é a chamada ao juiz, que passa pelo caminho
182
210
  normal de `ctx.llm` e pelo provider configurado.
183
211
  - **Log de sessão** — o plugin não anexa eventos de sessão próprios. O rastro de
@@ -228,7 +256,7 @@ cruzado é recusada ao salvar e a última política válida continua em vigor.
228
256
  ```bash
229
257
  pnpm install
230
258
  pnpm run typecheck # contra as faces de tipo do checkout local do harness
231
- pnpm run typecheck:ci # contra as faces publicadas 0.1.5-rc.2 (o que a CI executa)
259
+ pnpm run typecheck:ci # contra as faces publicadas 0.1.7-alpha.1 (o que a CI executa)
232
260
  pnpm test
233
261
  pnpm run build
234
262
  pnpm run verify:self-contained
@@ -255,3 +283,55 @@ PerryLink. Issues e pull requests em
255
283
 
256
284
  Apache-2.0. Veja [LICENSE](./LICENSE) e
257
285
  [THIRD_PARTY_NOTICES.md](./THIRD_PARTY_NOTICES.md).
286
+
287
+ ## PerryLink DSH Plugin Family
288
+
289
+ 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:
290
+
291
+ | Plugin | One-liner |
292
+ |---|---|
293
+ | **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Second-model auto-review on the approval chain, fail-closed by default | |
294
+ | **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | |
295
+ | **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Durable background child agents with a Web UI sidebar, messaging and interrupt | |
296
+ | **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | |
297
+ | **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | |
298
+ | **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | |
299
+ | **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore | |
300
+ | **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH | |
301
+ | **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness — Windows first. | |
302
+ | **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Terminal-style input history for the web composer: arrows, Ctrl+R search | |
303
+ | **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) | |
304
+ | **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | |
305
+ | **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Engineering-discipline guard: requirements grill, test gates, adversary review | |
306
+ | **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. | |
307
+ | **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics for DeepSeek Harness. | |
308
+ | **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Deterministic research reports for Chinese public mutual funds | |
309
+ | **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issues integration for DSH, every write gated by approval | |
310
+ | **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | Industry research orchestration that seals its deliverables through this plugin's `ctx.researchReport.assemble` | |
311
+ | **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | Laya typed decisions (`noul`/`choice`/`score`) as a first-class Cordis service and model-visible tools | |
312
+ | **[dsh-library](https://github.com/PerryLink/dsh-library)** | Local document knowledge base for DeepSeek Harness. | |
313
+ | **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | Local-model (Ollama) integration for DeepSeek Harness. | |
314
+ | **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
315
+ | **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
316
+ | **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
317
+ | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
318
+ | **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
319
+ | **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
320
+ | **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
321
+ | **[dsh-plugin-certification](https://github.com/PerryLink/dsh-plugin-certification)** | Community certification registry with repro-checkable grades and badges | |
322
+ | **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | Zero-dependency static + sandbox smoke detector for DSH plugins | |
323
+ | **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-development knowledge base as an on-demand agent skill | |
324
+ | **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
325
+ | **[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 | |
326
+ | **[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 | |
327
+ | **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console | |
328
+ | **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research-report engine: content-addressed evidence ledger and sealed versions | |
329
+ | **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional quality scoring for DeepSeek Harness plugins. | |
330
+ | **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions in the Web sidebar with durable ordering | |
331
+ | **[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. | |
332
+ | **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | Security-audit skill pack: secret scan, dependency and supply-chain review | |
333
+ | **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. | |
334
+ | **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | Cross-session team rooms: shared message bus, task board and timeline | |
335
+ | **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | Isolated install-and-smoke test drives for DeepSeek Harness plugins. | |
336
+ | **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | TickTick/Dida365 task bridge: session-header panel + 11 tools | |
337
+ | **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. | |
package/README-zh.md CHANGED
@@ -4,10 +4,13 @@
4
4
  [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)
5
5
  [![DSH plugin](https://img.shields.io/badge/dsh--plugin-✅-green)](https://github.com/topics/dsh-plugin)
6
6
  [![dsh-doctor](https://raw.githubusercontent.com/PerryLink/dsh-plugin-doctor/main/badges/PerryLink__dsh-autotier.svg)](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
7
+ [![DSH Market](https://raw.githubusercontent.com/2BingLing/dsh-market/master/assets/readme/badge-listed-zh.svg)](https://dsh.market/)
7
8
  [![Node](https://img.shields.io/badge/node-%5E22.19.0%20%7C%7C%20%3E%3D24.0.0-brightgreen.svg)](#)
8
9
  [![CI](https://img.shields.io/github/actions/workflow/status/PerryLink/dsh-autotier/ci.yml?branch=main&label=CI)](https://github.com/PerryLink/dsh-autotier/actions)
9
10
  [![Version](https://img.shields.io/github/v/tag/PerryLink/dsh-autotier?label=version)](https://github.com/PerryLink/dsh-autotier/releases)
10
11
 
12
+ [English](README.md) | **简体中文** | [Español](README-es.md) | [Português](README-pt.md) | [हिन्दी](README-hi.md)
13
+
11
14
  DeepSeek Harness 的自动模型分档路由:一条用户指令进来,一个档位决策出去 ——
12
15
  无需手动切换模型。
13
16
 
@@ -22,13 +25,20 @@ DeepSeek Harness 的自动模型分档路由:一条用户指令进来,一个
22
25
 
23
26
  | Harness | 状态 |
24
27
  |---|---|
25
- | `@deepseek-ai/dsh` `0.1.2-rc.1` | 兼容;compat 工作流对该线做端到端安装验证 |
26
- | `@deepseek-ai/dsh` `0.1.5-rc.2` | 兼容;已端到端实测(真实 profile 安装、`--dump-config` 行、keyless headless 冒烟)并纳入 compat 矩阵 |
27
- | `@deepseek-ai/cordis` `^4.0.2`、`@deepseek-ai/schemastery` `^3.18.2` | peer 基线 |
28
+ | `@deepseek-ai/dsh` `0.1.2-rc.1` | 不再支持;该线早于本插件现在对准的 `SettingsForms` 契约 |
29
+ | `@deepseek-ai/dsh` `0.1.5-rc.2` | 不再支持;它所暴露的 `settings.register` / `settings/updated` 契约已被上游删除 |
30
+ | `@deepseek-ai/dsh` `0.1.6-alpha.2` | 不再支持;同一处删除,首个带 `SettingsForms` 的版本 |
31
+ | `@deepseek-ai/dsh` `0.1.7-alpha.1` | **必需**;已对同版 checkout(`typecheck`)与已发布包(`typecheck:ci`、214 项测试)双向验证 |
32
+ | `@deepseek-ai/cordis` `^4.0.3`、`@deepseek-ai/cosmokit` `^1.8.4`、`@deepseek-ai/schemastery` `^3.18.3` | peer 基线 |
33
+
34
+ peer 范围显式列出四条已发布线(`>=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`)——因为仅含较早版本元组预发布比较符的 semver 范围无法接纳更晚的 alpha;
35
+ 每次发布波同步刷新。声明的范围刻意宽于已验证范围:它记录清单接受什么,而不是测过什么。
28
36
 
29
- peer 范围显式列出两条已发布线(`>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1
30
- <0.2.0`)——因为仅含较早版本元组预发布比较符的 semver 范围无法接纳更晚的 alpha;
31
- 每次发布波同步刷新。
37
+ **本次发布是破坏性适配。** `0.1.6` 代宿主移除了本插件赖以构建的 settings **provider** 缝:
38
+ `@deepseek-ai/dsh-settings-file` 整包消失,`ctx.settings` 现为 `SettingsForms`
39
+ (schema→表单投影器,没有 `register`),`settings/updated` 亦不复存在。没有任何共享面能让一个插件观察另一个插件的设置文档,
40
+ 因此本插件无法同时支持两种契约。配置现在走宿主的 volatile 配置机制;真正在运行时改变行为的
41
+ **按会话路由模式**未变。
32
42
 
33
43
  本插件只驻留 host 平面,不需要自带 agent preset:host 行对所有会话生效。
34
44
  在你的 preset 中加一段提示是可选项,仅用于让模型看见路由决策
@@ -113,12 +123,12 @@ dsh plugin --profile web remove dsh-autotier
113
123
  | `tiers.strong.followSession` | `false` | `false` = 本档 effort 覆盖会话自身的设置。 |
114
124
  | `tiers.strong.fallback` | `[]` | 该档不可用时的有序 provider/model 落点。 |
115
125
  | `tiers.cheap.provider` | `deepseek-official` | 实施档的 provider。 |
116
- | `tiers.cheap.model` | `deepseek-v4-flash` | 弱档模型的目录 id。 |
126
+ | `tiers.cheap.model` | `deepseek-flash` | 弱档模型的目录 id。 |
117
127
  | `tiers.cheap.effort` | `low` | 适配器词表 `off` \| `low` \| `high` \| `max`。 |
118
128
  | `tiers.cheap.followSession` | `true` | `true` = 继承会话 effort,让显式选择优先。 |
119
129
  | `tiers.cheap.fallback` | `[]` | 该档不可用时的有序 provider/model 落点。 |
120
130
  | `tiers.vision.provider` | `deepseek-official` | 含图 turn 的 provider。 |
121
- | `tiers.vision.model` | `deepseek-v4-flash-vision-exp` | 目录中唯一支持图像模态的模型。 |
131
+ | `tiers.vision.model` | `deepseek-flash` | 目录中唯一支持图像模态的模型。 |
122
132
  | `intent.ruleThreshold` | `0.7` | 规则层可独立决策的置信度下限。 |
123
133
  | `intent.attemptBand.enabled` | `false` | 中间波段:先跑弱档,出现信号再升级。 |
124
134
  | `intent.attemptBand.tauLow` | `0.45` | attempt-first 波段的下界。 |
@@ -146,8 +156,15 @@ dsh plugin --profile web remove dsh-autotier
146
156
  | `escalation.signature` | `true` | 按同签名复发计数,而非统计每次失败。 |
147
157
  | `routingMode` | `auto` | `auto` \| `strong` \| `cheap` \| `delegated` \| `off`。 |
148
158
 
149
- 所有键也可通过 `autotier` settings 命名空间(`$DSH_HOME/settings.yaml`)热改;
150
- 违反跨字段约束的写入会在保存期被拒绝,并保留上一份可用策略。
159
+ 所有键也可在 Plugins 页的本插件卡片上热改:Host 先按 schema 校验新值,
160
+ 再以 `loader/volatile-update` 提交;本插件随后用与挂载期同一套跨字段判据
161
+ 重新裁决整份配置。违反跨字段要求的值(两个 tier 落在同一路由、
162
+ 无法止住抖动的滞回对、既无 pattern 也无 tool 的规则)会让**上一份可用策略**
163
+ 继续生效,而不是换上一个无法路由的配置。
164
+
165
+ `routingMode` 是唯一**不**热更的键:它是组合默认值,运行时开关是由
166
+ `/tier`、输入框胶囊与卡片选择器写入的按会话覆盖。让它同时热更
167
+ 会让同一行为有两个归属。
151
168
 
152
169
  ## 工具与表面
153
170
 
@@ -204,7 +221,7 @@ dsh plugin --profile web remove dsh-autotier
204
221
  ```bash
205
222
  pnpm install
206
223
  pnpm run typecheck # 对照本地 harness checkout 的类型面
207
- pnpm run typecheck:ci # 对照已发布的 0.1.5-rc.2 类型面(CI 实际执行)
224
+ pnpm run typecheck:ci # 对照已发布的 0.1.7-alpha.1 类型面(CI 实际执行)
208
225
  pnpm test
209
226
  pnpm run build
210
227
  pnpm run verify:self-contained
@@ -230,3 +247,58 @@ PerryLink。欢迎在 <https://github.com/PerryLink/dsh-autotier/issues> 提 iss
230
247
 
231
248
  Apache-2.0。见 [LICENSE](./LICENSE) 与
232
249
  [THIRD_PARTY_NOTICES.md](./THIRD_PARTY_NOTICES.md)。
250
+
251
+ **适用的 DSH 版本:** 已在 `dsh-v0.1.7-alpha.1`(本构建所针对的宿主版本)上验证;要求 `>=0.1.7-alpha.1 <0.2.0`。
252
+
253
+ ## PerryLink DSH Plugin Family
254
+
255
+ 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:
256
+
257
+ | Plugin | One-liner |
258
+ |---|---|
259
+ | **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Second-model auto-review on the approval chain, fail-closed by default | |
260
+ | **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | |
261
+ | **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Durable background child agents with a Web UI sidebar, messaging and interrupt | |
262
+ | **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | |
263
+ | **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | |
264
+ | **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | |
265
+ | **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore | |
266
+ | **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH | |
267
+ | **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness — Windows first. | |
268
+ | **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Terminal-style input history for the web composer: arrows, Ctrl+R search | |
269
+ | **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) | |
270
+ | **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | |
271
+ | **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Engineering-discipline guard: requirements grill, test gates, adversary review | |
272
+ | **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. | |
273
+ | **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics for DeepSeek Harness. | |
274
+ | **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Deterministic research reports for Chinese public mutual funds | |
275
+ | **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issues integration for DSH, every write gated by approval | |
276
+ | **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | Industry research orchestration that seals its deliverables through this plugin's `ctx.researchReport.assemble` | |
277
+ | **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | Laya typed decisions (`noul`/`choice`/`score`) as a first-class Cordis service and model-visible tools | |
278
+ | **[dsh-library](https://github.com/PerryLink/dsh-library)** | Local document knowledge base for DeepSeek Harness. | |
279
+ | **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | Local-model (Ollama) integration for DeepSeek Harness. | |
280
+ | **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
281
+ | **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
282
+ | **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
283
+ | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
284
+ | **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
285
+ | **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
286
+ | **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
287
+ | **[dsh-plugin-certification](https://github.com/PerryLink/dsh-plugin-certification)** | Community certification registry with repro-checkable grades and badges | |
288
+ | **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | Zero-dependency static + sandbox smoke detector for DSH plugins | |
289
+ | **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-development knowledge base as an on-demand agent skill | |
290
+ | **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
291
+ | **[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 | |
292
+ | **[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 | |
293
+ | **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console | |
294
+ | **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research-report engine: content-addressed evidence ledger and sealed versions | |
295
+ | **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional quality scoring for DeepSeek Harness plugins. | |
296
+ | **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions in the Web sidebar with durable ordering | |
297
+ | **[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. | |
298
+ | **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | Security-audit skill pack: secret scan, dependency and supply-chain review | |
299
+ | **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. | |
300
+ | **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | Cross-session team rooms: shared message bus, task board and timeline | |
301
+ | **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | Isolated install-and-smoke test drives for DeepSeek Harness plugins. | |
302
+ | **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | TickTick/Dida365 task bridge: session-header panel + 11 tools | |
303
+ | **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. | |
304
+
package/README.md CHANGED
@@ -1,13 +1,17 @@
1
1
  # dsh-autotier
2
2
 
3
3
  [![Gitee](https://img.shields.io/badge/Gitee-mirror-c71d23?logo=gitee)](https://gitee.com/perrylink/dsh-autotier)
4
+ [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/PerryLink/dsh-autotier/badge)](https://api.securityscorecards.dev/projects/github.com/PerryLink/dsh-autotier)
4
5
  [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)
5
6
  [![DSH plugin](https://img.shields.io/badge/dsh--plugin-✅-green)](https://github.com/topics/dsh-plugin)
6
7
  [![dsh-doctor](https://raw.githubusercontent.com/PerryLink/dsh-plugin-doctor/main/badges/PerryLink__dsh-autotier.svg)](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
8
+ [![DSH Market](https://raw.githubusercontent.com/2BingLing/dsh-market/master/assets/readme/badge-listed-en.svg)](https://dsh.market/)
7
9
  [![Node](https://img.shields.io/badge/node-%5E22.19.0%20%7C%7C%20%3E%3D24.0.0-brightgreen.svg)](#)
8
10
  [![CI](https://img.shields.io/github/actions/workflow/status/PerryLink/dsh-autotier/ci.yml?branch=main&label=CI)](https://github.com/PerryLink/dsh-autotier/actions)
9
11
  [![Version](https://img.shields.io/github/v/tag/PerryLink/dsh-autotier?label=version)](https://github.com/PerryLink/dsh-autotier/releases)
10
12
 
13
+ **English** | [简体中文](README-zh.md) | [Español](README-es.md) | [Português](README-pt.md) | [हिन्दी](README-hi.md)
14
+
11
15
  Automatic model-tier routing for DeepSeek Harness: one user instruction enters,
12
16
  one tier decision comes out — no manual model switching.
13
17
 
@@ -25,14 +29,27 @@ escalate to the strong tier with a TTL fallback.
25
29
 
26
30
  | Harness | Status |
27
31
  |---|---|
28
- | `@deepseek-ai/dsh` `0.1.2-rc.1` | compatible; the compat workflow installs this line end-to-end |
29
- | `@deepseek-ai/dsh` `0.1.5-rc.2` | compatible; verified end-to-end (real profile install, `--dump-config` row, keyless headless smoke) and in the compat matrix |
30
- | `@deepseek-ai/cordis` `^4.0.2`, `@deepseek-ai/schemastery` `^3.18.2` | peer baseline |
32
+ | `@deepseek-ai/dsh` `0.1.2-rc.1` | no longer supported; that line predates the `SettingsForms` contract this plugin now targets |
33
+ | `@deepseek-ai/dsh` `0.1.5-rc.2` | no longer supported; the `settings.register` / `settings/updated` contract it exposes was removed upstream |
34
+ | `@deepseek-ai/dsh` `0.1.6-alpha.2` | no longer supported; same removal, first line to ship `SettingsForms` |
35
+ | `@deepseek-ai/dsh` `0.1.7-alpha.1` | **required**; verified against the matching checkout (`typecheck`) and the published packages (`typecheck:ci`, 214 tests) |
36
+ | `@deepseek-ai/cordis` `^4.0.3`, `@deepseek-ai/cosmokit` `^1.8.4`, `@deepseek-ai/schemastery` `^3.18.3` | peer baseline |
31
37
 
32
- Peer ranges name both published lines explicitly (`>=0.1.2-rc.1 <0.2.0 ||
33
- >=0.1.5-alpha.1 <0.2.0`), because a semver range whose only prerelease
38
+ Peer ranges name all published lines explicitly (`>=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`), because a semver range whose only prerelease
34
39
  comparator sits on an earlier version tuple does not admit a later alpha.
35
- They are refreshed per published wave.
40
+ They are refreshed per published wave. The declared range is deliberately wider
41
+ than the verified one: it documents what the manifest accepts, not what has been
42
+ tested.
43
+
44
+ **This release is a breaking adaptation.** The `0.1.6`-generation harness
45
+ removed the settings *provider* seam this plugin was built on: the
46
+ `@deepseek-ai/dsh-settings-file` package is gone, `ctx.settings` is now
47
+ `SettingsForms` (a schema→form projector, with no `register`), and
48
+ `settings/updated` no longer exists. There is no shared surface that lets one
49
+ plugin observe another plugin's settings document, so no version of this plugin
50
+ can support both contracts at once. Configuration now flows through the host's
51
+ volatile-config mechanism, and the per-session routing mode — the setting that
52
+ actually changes behaviour at runtime — is unchanged.
36
53
 
37
54
  The plugin is host-plane only. It needs no agent preset of its own: the host
38
55
  row applies to every session. A one-line prompt section in *your* preset is
@@ -66,6 +83,7 @@ optional and only makes the router's decisions visible to the model (see
66
83
  ## Quick start
67
84
 
68
85
  ```bash
86
+ dsh plugin --profile web add dsh-autotier
69
87
  npm i -g dsh1024
70
88
  dsh1024 plugin --profile web add dsh-autotier
71
89
  ```
@@ -78,6 +96,7 @@ Then start (or restart) the harness. The row is appended to your profile's
78
96
  **npm channel**
79
97
 
80
98
  ```bash
99
+ dsh plugin --profile web add dsh-autotier
81
100
  npm i -g dsh1024
82
101
  dsh1024 plugin --profile web add dsh-autotier
83
102
  ```
@@ -85,6 +104,7 @@ dsh1024 plugin --profile web add dsh-autotier
85
104
  **git channel**
86
105
 
87
106
  ```bash
107
+ dsh plugin --profile web add "github:PerryLink/dsh-autotier#main"
88
108
  git clone https://github.com/PerryLink/dsh-autotier.git
89
109
  cd dsh-autotier && pnpm install && pnpm run build
90
110
  dsh plugin --profile web add .
@@ -107,8 +127,10 @@ model know which tier it is running on, add one row to *your* agent preset
107
127
  dsh plugin --profile web remove dsh-autotier
108
128
  ```
109
129
 
110
- The row, its settings namespace, its command, its tools and its listeners are
111
- all removed with the plugin; nothing is written outside the settings document.
130
+ The row, its command, its tools and its listeners are all removed with the
131
+ plugin. Configuration a user saved through the Plugins page lives in the active
132
+ profile patch and belongs to that profile, not to this plugin; removing the row
133
+ leaves it there untouched.
112
134
 
113
135
  ## Configuration
114
136
 
@@ -124,12 +146,12 @@ same keys inline.
124
146
  | `tiers.strong.followSession` | `false` | `false` = this tier's effort overrides the session's. |
125
147
  | `tiers.strong.fallback` | `[]` | Ordered provider/model landings when the tier is unavailable. |
126
148
  | `tiers.cheap.provider` | `deepseek-official` | Provider for the implementation tier. |
127
- | `tiers.cheap.model` | `deepseek-v4-flash` | Catalog id of the cheap model. |
149
+ | `tiers.cheap.model` | `deepseek-flash` | Catalog id of the cheap model. |
128
150
  | `tiers.cheap.effort` | `low` | Adapter vocabulary `off` \| `low` \| `high` \| `max`. |
129
151
  | `tiers.cheap.followSession` | `true` | `true` = inherit the session's effort so an explicit choice wins. |
130
152
  | `tiers.cheap.fallback` | `[]` | Ordered provider/model landings when the tier is unavailable. |
131
153
  | `tiers.vision.provider` | `deepseek-official` | Provider for image-carrying turns. |
132
- | `tiers.vision.model` | `deepseek-v4-flash-vision-exp` | The catalog's image-capable model. |
154
+ | `tiers.vision.model` | `deepseek-flash` | The catalog's image-capable model. |
133
155
  | `intent.ruleThreshold` | `0.7` | Confidence at or above which the rule layer decides alone. |
134
156
  | `intent.attemptBand.enabled` | `false` | Start the middle band on the cheap tier and escalate on a signal. |
135
157
  | `intent.attemptBand.tauLow` | `0.45` | Lower bound of the attempt-first band. |
@@ -157,9 +179,18 @@ same keys inline.
157
179
  | `escalation.signature` | `true` | Count same-signature recurrences instead of every failure. |
158
180
  | `routingMode` | `auto` | `auto` \| `strong` \| `cheap` \| `delegated` \| `off`. |
159
181
 
160
- All keys can also be edited live from the `autotier` settings namespace
161
- (`$DSH_HOME/settings.yaml`); a write that violates a cross-field requirement is
162
- refused at save time and the last good policy stays in effect.
182
+ All keys can also be edited live from the plugin's card on the Plugins page; the
183
+ Host validates the new value against the schema and commits it with
184
+ `loader/volatile-update`, and this plugin then re-judges the whole configuration
185
+ through the same cross-field judge the mount path uses. A value that violates a
186
+ cross-field requirement (two tiers landing on the same route, a hysteresis pair
187
+ that cannot stop flapping, a rule with neither a pattern nor a tool) leaves the
188
+ last good policy routing instead of swapping in something unroutable.
189
+
190
+ `routingMode` is the one key that is **not** live: it is the composition
191
+ default, and the runtime switch is the session-scoped override written by
192
+ `/tier`, the composer pill and the card's selector. Making it live as well would
193
+ give the same behaviour two owners.
163
194
 
164
195
  ## Tools & surfaces
165
196
 
@@ -174,8 +205,10 @@ refused at save time and the last good policy stays in effect.
174
205
 
175
206
  ## Permissions & data
176
207
 
177
- - **Files** — the plugin reads nothing and writes nothing except through the
178
- shared settings service (the `autotier` namespace).
208
+ - **Files** — the plugin reads no file and writes none. Configuration is the
209
+ host's: a value saved on the Plugins page is persisted by the Host into the
210
+ active profile patch, and this plugin only reads the live snapshot it is
211
+ handed.
179
212
  - **Network** — the only outbound traffic is the judge call, which goes through
180
213
  the normal `ctx.llm` path and the configured provider.
181
214
  - **Session log** — the plugin appends no custom session events. The routing
@@ -228,7 +261,7 @@ refused at save time and the last good policy stays in effect.
228
261
  ```bash
229
262
  pnpm install
230
263
  pnpm run typecheck # against the local harness checkout type faces
231
- pnpm run typecheck:ci # against the published 0.1.5-rc.2 faces (what CI runs)
264
+ pnpm run typecheck:ci # against the published 0.1.7-alpha.1 faces (what CI runs)
232
265
  pnpm test
233
266
  pnpm run build
234
267
  pnpm run verify:self-contained
@@ -238,8 +271,12 @@ pnpm pack
238
271
 
239
272
  `pnpm run build` emits `lib/types` (tsc declarations) and `lib/index.js`
240
273
  (tsdown bundle). Tests use the published host packages directly — real
241
- `Context`, real session/tools/commands/settings services — plus one real Loader
242
- composition over a temporary `cordis.yml`.
274
+ `Context`, real session/tools/commands services — plus one real Loader
275
+ composition over a temporary `cordis.yml`. The `settings` service is the one
276
+ stand-in: the host's real `SettingsForms` binds to `configEditor`,
277
+ `profileContext` and the Loader's fiber graph, none of which this plugin
278
+ consumes, while the plugin's whole contract with it is `configure({ auto })`
279
+ plus the Loader's `loader/volatile-update` event.
243
280
 
244
281
  ## Topics
245
282
 
@@ -251,6 +288,61 @@ composition over a temporary `cordis.yml`.
251
288
  PerryLink. Issues and pull requests are welcome at
252
289
  <https://github.com/PerryLink/dsh-autotier/issues>.
253
290
 
291
+ **Applicable DSH version:** verified against `dsh-v0.1.7-alpha.1` (the host release this build targets); requires `>=0.1.7-alpha.1 <0.2.0`.
292
+
293
+ ## PerryLink DSH Plugin Family
294
+
295
+ 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:
296
+
297
+ | Plugin | One-liner |
298
+ |---|---|
299
+ | **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Second-model auto-review on the approval chain, fail-closed by default | |
300
+ | **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | |
301
+ | **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Durable background child agents with a Web UI sidebar, messaging and interrupt | |
302
+ | **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | |
303
+ | **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | |
304
+ | **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | |
305
+ | **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore | |
306
+ | **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH | |
307
+ | **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness — Windows first. | |
308
+ | **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Terminal-style input history for the web composer: arrows, Ctrl+R search | |
309
+ | **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) | |
310
+ | **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | |
311
+ | **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Engineering-discipline guard: requirements grill, test gates, adversary review | |
312
+ | **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. | |
313
+ | **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics for DeepSeek Harness. | |
314
+ | **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Deterministic research reports for Chinese public mutual funds | |
315
+ | **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issues integration for DSH, every write gated by approval | |
316
+ | **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | Industry research orchestration that seals its deliverables through this plugin's `ctx.researchReport.assemble` | |
317
+ | **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | Laya typed decisions (`noul`/`choice`/`score`) as a first-class Cordis service and model-visible tools | |
318
+ | **[dsh-library](https://github.com/PerryLink/dsh-library)** | Local document knowledge base for DeepSeek Harness. | |
319
+ | **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | Local-model (Ollama) integration for DeepSeek Harness. | |
320
+ | **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
321
+ | **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
322
+ | **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
323
+ | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
324
+ | **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
325
+ | **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
326
+ | **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
327
+ | **[dsh-plugin-certification](https://github.com/PerryLink/dsh-plugin-certification)** | Community certification registry with repro-checkable grades and badges | |
328
+ | **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | Zero-dependency static + sandbox smoke detector for DSH plugins | |
329
+ | **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-development knowledge base as an on-demand agent skill | |
330
+ | **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
331
+ | **[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 | |
332
+ | **[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 | |
333
+ | **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console | |
334
+ | **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research-report engine: content-addressed evidence ledger and sealed versions | |
335
+ | **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional quality scoring for DeepSeek Harness plugins. | |
336
+ | **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions in the Web sidebar with durable ordering | |
337
+ | **[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. | |
338
+ | **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | Security-audit skill pack: secret scan, dependency and supply-chain review | |
339
+ | **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. | |
340
+ | **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | Cross-session team rooms: shared message bus, task board and timeline | |
341
+ | **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | Isolated install-and-smoke test drives for DeepSeek Harness plugins. | |
342
+ | **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | TickTick/Dida365 task bridge: session-header panel + 11 tools | |
343
+ | **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. | |
344
+
345
+
254
346
  ## License
255
347
 
256
348
  Apache-2.0. See [LICENSE](./LICENSE) and
package/cordis.patch.yml CHANGED
@@ -31,7 +31,7 @@
31
31
  # The implementation tier.
32
32
  cheap:
33
33
  provider: deepseek-official
34
- model: deepseek-v4-flash
34
+ model: deepseek-flash
35
35
  effort: low
36
36
  # true = inherit the session's effort, so an explicit user choice
37
37
  # still wins inside the cheap tier.
@@ -41,7 +41,7 @@
41
41
  # because a text-only model silently substitutes image placeholders.
42
42
  vision:
43
43
  provider: deepseek-official
44
- model: deepseek-v4-flash-vision-exp
44
+ model: deepseek-flash
45
45
  # ---- intent classification -----------------------------------------
46
46
  intent:
47
47
  # Confidence at or above which the deterministic rule layer decides