dsh-autotier 0.2.3 → 0.2.6

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