dsh-local-ai 0.2.14 → 0.2.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,19 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
8
 
9
+ ## [0.2.16] - 2026-10-05
10
+
11
+ ### Added
12
+
13
+ - **Versioned interoperability declaration in all five READMEs.** Each file now records, against DSH `0.2.0-rc.2`, the injection points this plugin owns and why none of them collide with another plugin: no tool-name, service-key, slot, HTTP-route, patch-layer or global-mutation overlap, and — for every ordering-sensitive event it listens on (`llm/stream`) — that the listener delegates through `next()`, so a shared waterfall chain is never short-circuited. The section also names the surveyed high-star plugin that shares that event, so the claim is checkable rather than asserted. Verified by `dsh-plugin-doctor` K10–K14 (checkset `R0-R8+K1-K14+D0-D3,D9+CC1-CC5/3`). Documentation only; no behaviour change.
14
+
15
+ ## [0.2.15] - 2026-10-04
16
+
17
+ ### Changed
18
+
19
+ - **Widen the declared host line to `0.2.x` and re-verify against it.** `engines.dsh` and all six `@deepseek-ai/dsh-*` peer bands gain the `|| >=0.2.0-rc.1 <0.3.0-0` arm — the previous four-clause union ended at `<0.2.0`, so a `0.2.x` host disabled the plugin — and the fourteen `@deepseek-ai/dsh-*` dev/test pins move from `0.1.7-rc.1` to the published `0.2.0-rc.2` line. `dshWorkshop.compatibility.dshVersions` appends `0.2.0-rc.2` and `0.2.1-alpha.1`, the five READMEs name the `dsh-v0.2.1-alpha.1` host line, the CI and compat workflow labels follow, and the compat workflow installs the `0.2.0-rc.2` host (`@deepseek-ai/dsh`, `dsh-base`, `dsh-headless`). `pnpm-lock.yaml` is regenerated with the declared `pnpm@11.7.0`. **No existing arm was removed or narrowed**: the declared union still admits every supported `0.1.x` line down to `0.1.2-rc.1`, and the runtime fallbacks for the pre-`0.1.7` `tool-result` wrapper are untouched — this is a host-line widening, not a behaviour rewrite.
20
+ - Re-verified against the local `dsh-v0.2.1-alpha.1` harness checkout (`5badb15`): `typecheck`, `typecheck:ci` and `typecheck:checkout` (the checkout ruler) plus 142 tests, the coverage gate, the build, `verify:self-contained`, `verify:artifacts`, `check:lockfile`, the five-language README gate and `pnpm pack` all pass with the `0.2.0-rc.2` peers installed.
21
+
9
22
  ## [0.2.14] - 2026-09-24
10
23
 
11
24
  ### Fixed
package/README-es.md CHANGED
@@ -35,7 +35,7 @@ Este plugin forma parte de la [familia de plugins DSH](https://github.com/PerryL
35
35
 
36
36
  | Superficie | Estado |
37
37
  |---|---|
38
- | Harness | DeepSeek Harness `dsh-v0.1.7-rc.1` (verificado el 2026-09-24: tres typecheck (instalado, CI, checkout) + 142 pruebas + puertas self-contained/artifacts; la unión de bloques de contenido de `0.1.7` está adaptada — un resultado de herramienta es ahora un mensaje de rol `tool` de primera clase, y un envoltorio `tool-result` anterior a `0.1.7` todavía se lee para registros antiguos). El rango de peers admite todas las líneas soportadas: `>=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`; los pines dev/test son `0.1.7-rc.1`. |
38
+ | Harness | DeepSeek Harness `dsh-v0.2.1-alpha.1` (verificado el 2026-10-04: tres typecheck (instalado, CI, checkout) + 142 pruebas + puertas self-contained/artifacts; la unión de bloques de contenido de `0.1.7` está adaptada — un resultado de herramienta es ahora un mensaje de rol `tool` de primera clase, y un envoltorio `tool-result` anterior a `0.1.7` todavía se lee para registros antiguos). El rango de peers admite todas las líneas soportadas: `>=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 \|\| >=0.2.0-rc.1 <0.3.0-0`; los pines dev/test son `0.2.0-rc.2`. |
39
39
  | Node | `^22.19.0 \|\| >=24.0.0` |
40
40
  | Backend | [Ollama](https://ollama.com) (API HTTP local + sonda CLI) |
41
41
  | Modelo | Ruta solo texto (`inputModalities: ['text']`); se admiten llamadas y resultados de herramientas |
@@ -164,7 +164,7 @@ Todos los ajustes son campos `Config` de Schemastery (modificables desde cordis.
164
164
 
165
165
  ## Known limitations
166
166
 
167
- - **npm 0.1.5-rc.2** — desarrollado y probado contra `@deepseek-ai/dsh@0.1.5-rc.2`; se espera que baselines más nuevos funcionen, pero los verifica el workflow mensual de compat.
167
+ - **npm 0.2.0-rc.2** — desarrollado y probado contra `@deepseek-ai/dsh@0.2.0-rc.2`; se espera que baselines más nuevos funcionen, pero los verifica el workflow mensual de compat.
168
168
  - **Vision cuando el modelo la informa** — los modelos cuyas capacidades de `/api/show` incluyen `vision` declaran `inputModalities: ["text","image"]` y llevan cargas de imagen base64 en los mensajes de usuario (exclusión con `vision: false`); los modelos solo texto siguen rechazando el contenido de imagen (`UNSUPPORTED_CONTENT`).
169
169
  - **Respaldo a mitad de flujo** — una vez que una ruta local empezó a producir contenido, un fallo posterior se reenvía (no se retira); solo un fallo antes del primer token respalda a la nube.
170
170
 
@@ -172,7 +172,7 @@ Todos los ajustes son campos `Config` de Schemastery (modificables desde cordis.
172
172
 
173
173
  ```sh
174
174
  pnpm install # node ^22.19 || >=24
175
- pnpm run typecheck # tsc: src + tests contra los tipos publicados 0.1.5-rc.2
175
+ pnpm run typecheck # tsc: src + tests contra los tipos publicados 0.2.0-rc.2
176
176
  pnpm run typecheck:ci # tsc estricto contra los tipos publicados rc.2 (skipLibCheck off)
177
177
  pnpm test # vitest: costuras reales Context/LlmRuntime/ToolRuntime/CommandRuntime/subprocess
178
178
  pnpm run test:coverage # puerta de cobertura (90/80/90/90)
@@ -184,6 +184,24 @@ node scripts/check-endpoints.mjs # sonda de actividad M3 (Ollama /api/version)
184
184
  pnpm pack # el tarball publicado
185
185
  ```
186
186
 
187
+ ## Interoperability with other DSH plugins
188
+
189
+ Verificado contra **DSH `0.2.0-rc.2`** (el runtime para el que se publica este README) y el conjunto de plugins con más estrellas sondeado el 2026-10-05.
190
+
191
+ Este plugin **no interfiere** con otros plugins, incluidos los de más estrellas:
192
+
193
+ - **Sin colisión de nombres de herramienta.** Todas las herramientas llevan espacio de nombres; ninguna ocupa un nombre desnudo ya perteneciente a una herramienta incluida u otro plugin.
194
+ - **Sin colisión de clave de servicio.** No provee ninguna clave de servicio, así que no puede colisionar en una.
195
+ - **Sin colisión de slot.** No registra ninguna clave de slot de cliente, así que no disputa un asiento `shadows-shipped-ui`.
196
+ - **Sin colisión de ruta HTTP.** No registra ningún prefijo `webServer`.
197
+ - **Sin colisión en la capa de patch.** El patch del bundle solo hace `insert` de su propia fila; nunca sobrescribe el `config` de una fila incluida.
198
+ - **Sin mutación global.** No parchea prototipos, ni reescribe `process.env`, ni reemplaza el dispatcher global de fetch.
199
+
200
+ **Los listeners de eventos compartidos no interfieren por construcción.** Observa los eventos sensibles al orden `llm/stream` con `ctx.on()` — el registro de difusión de Cordis, donde cada listener se ejecuta y ninguno puede dejar sin turno a otro. **Todos los listeners aquí delegan por `next()`**, así que la cadena nunca se cortocircuita:
201
+ - `llm/stream` — also used by `dsh-routing-suite` (7000★).
202
+
203
+ Evidencia estática: `dsh-plugin-doctor` K10–K13 dan `pass` en todas las comprobaciones de este repositorio.
204
+
187
205
  ## Topics
188
206
 
189
207
  `dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `ollama`, `local-llm`, `local-models`, `offline`, `privacy`, `model-routing`
package/README-hi.md CHANGED
@@ -35,7 +35,7 @@
35
35
 
36
36
  | सतह | स्थिति |
37
37
  |---|---|
38
- | Harness | DeepSeek Harness `dsh-v0.1.7-rc.1` (2026-09-24 को सत्यापित: तीन typecheck (इंस्टॉल, CI, checkout) + 142 टेस्ट + self-contained/artifacts गेट; `0.1.7` का content-block union अनुकूलित है — टूल परिणाम अब प्रथम-श्रेणी का `tool` रोल संदेश है, और `0.1.7` से पहले का `tool-result` आवरण पुराने लॉग के लिए अब भी पढ़ा जाता है)। 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`; dev/test पिन `0.1.7-rc.1` हैं। |
38
+ | Harness | DeepSeek Harness `dsh-v0.2.1-alpha.1` (2026-10-04 को सत्यापित: तीन typecheck (इंस्टॉल, CI, checkout) + 142 टेस्ट + self-contained/artifacts गेट; `0.1.7` का content-block union अनुकूलित है — टूल परिणाम अब प्रथम-श्रेणी का `tool` रोल संदेश है, और `0.1.7` से पहले का `tool-result` आवरण पुराने लॉग के लिए अब भी पढ़ा जाता है)। 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 \|\| >=0.2.0-rc.1 <0.3.0-0`; dev/test पिन `0.2.0-rc.2` हैं। |
39
39
  | Node | `^22.19.0 \|\| >=24.0.0` |
40
40
  | Backend | [Ollama](https://ollama.com) (स्थानीय HTTP API + CLI जाँच) |
41
41
  | Model | केवल-पाठ रूट (`inputModalities: ['text']`); टूल कॉल व परिणाम समर्थित हैं |
@@ -164,7 +164,7 @@ dsh --profile web --dump-config | grep -A2 'id: dsh-local-ai'
164
164
 
165
165
  ## Known limitations
166
166
 
167
- - **npm 0.1.5-rc.2** — `@deepseek-ai/dsh@0.1.5-rc.2` के विरुद्ध विकसित व परीक्षित; नए harness बेसलाइन काम करने की अपेक्षा है, पर मासिक compat workflow उन्हें सत्यापित करता है।
167
+ - **npm 0.2.0-rc.2** — `@deepseek-ai/dsh@0.2.0-rc.2` के विरुद्ध विकसित व परीक्षित; नए harness बेसलाइन काम करने की अपेक्षा है, पर मासिक compat workflow उन्हें सत्यापित करता है।
168
168
  - **मॉडल द्वारा vision रिपोर्ट करने पर विज़न** — जिन मॉडलों की `/api/show` capabilities में `vision` है, वे `inputModalities: ["text","image"]` घोषित करते हैं और उपयोगकर्ता संदेशों पर base64 छवि पेलोड ले जाते हैं (`vision: false` से बंद करें); केवल-टेक्स्ट मॉडल अब भी छवि सामग्री अस्वीकार करते हैं (`UNSUPPORTED_CONTENT`)।
169
169
  - **मध्य-स्ट्रीम वापसी** — एक बार स्थानीय रूट सामग्री बनाना शुरू कर दे, तो बाद की विफलता आगे भेजी जाती है (वापस नहीं ली जाती); केवल पहले टोकन से पहले की विफलता क्लाउड पर लौटती है।
170
170
 
@@ -172,7 +172,7 @@ dsh --profile web --dump-config | grep -A2 'id: dsh-local-ai'
172
172
 
173
173
  ```sh
174
174
  pnpm install # node ^22.19 || >=24
175
- pnpm run typecheck # tsc: src + परीक्षण, प्रकाशित 0.1.5-rc.2 प्रकारों के विरुद्ध
175
+ pnpm run typecheck # tsc: src + परीक्षण, प्रकाशित 0.2.0-rc.2 प्रकारों के विरुद्ध
176
176
  pnpm run typecheck:ci # सख्त tsc, प्रकाशित rc.2 प्रकारों के विरुद्ध (skipLibCheck बंद)
177
177
  pnpm test # vitest: वास्तविक Context/LlmRuntime/ToolRuntime/CommandRuntime/subprocess सीम
178
178
  pnpm run test:coverage # कवरेज द्वार (90/80/90/90)
@@ -184,6 +184,24 @@ node scripts/check-endpoints.mjs # M3 एंडपॉइंट-लाइवन
184
184
  pnpm pack # प्रकाशित tarball
185
185
  ```
186
186
 
187
+ ## Interoperability with other DSH plugins
188
+
189
+ **DSH `0.2.0-rc.2`** (वह रनटाइम जिसके लिए यह README प्रकाशित है) और 2026-10-05 को सर्वे किए गए उच्च-स्टार प्लगइन सेट के विरुद्ध सत्यापित।
190
+
191
+ यह प्लगइन अन्य प्लगइनों में **हस्तक्षेप नहीं करता**, उन उच्च-स्टार प्लगइनों सहित जो व्यापक रूप से इंस्टॉल हैं:
192
+
193
+ - **कोई टूल-नाम टकराव नहीं।** सभी टूल नेमस्पेस युक्त हैं; कोई भी ऐसा नंगा नाम नहीं लेता जो पहले से किसी अंतर्निहित टूल या अन्य प्लगइन का हो।
194
+ - **कोई सर्विस-की टकराव नहीं।** यह कोई सर्विस key प्रदान नहीं करता, इसलिए टकराव संभव नहीं।
195
+ - **कोई स्लॉट टकराव नहीं।** यह कोई क्लाइंट slot key पंजीकृत नहीं करता, इसलिए `shadows-shipped-ui` सीट के लिए प्रतिस्पर्धा नहीं करता।
196
+ - **कोई HTTP रूट टकराव नहीं।** यह कोई `webServer` प्रीफ़िक्स पंजीकृत नहीं करता।
197
+ - **कोई patch-लेयर टकराव नहीं।** बंडल patch केवल अपनी पंक्ति `insert` करता है; कभी किसी अंतर्निहित पंक्ति का `config` ओवरराइड नहीं करता।
198
+ - **कोई वैश्विक परिवर्तन नहीं।** यह प्रोटोटाइप नहीं बदलता, `process.env` नहीं लिखता, और वैश्विक fetch dispatcher प्रतिस्थापित नहीं करता।
199
+
200
+ **साझा ईवेंट लिसनर रचना से ही अहस्तक्षेपी हैं।** यह क्रम-संवेदनशील ईवेंट `llm/stream` को `ctx.on()` से देखता है — Cordis का **ब्रॉडकास्ट** पंजीकरण, जहाँ हर लिसनर चलता है और कोई किसी दूसरे को वंचित नहीं कर सकता। **यहाँ प्रत्येक लिसनर `next()` से डेलिगेट करता है**, इसलिए श्रृंखला कभी शॉर्ट-सर्किट नहीं होती:
201
+ - `llm/stream` — also used by `dsh-routing-suite` (7000★).
202
+
203
+ स्थैतिक प्रमाण: इस रिपॉज़िटरी पर `dsh-plugin-doctor` के K10–K13 सभी `pass` हैं।
204
+
187
205
  ## Topics
188
206
 
189
207
  `dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `ollama`, `local-llm`, `local-models`, `offline`, `privacy`, `model-routing`
package/README-pt.md CHANGED
@@ -35,7 +35,7 @@ Este plugin faz parte da [família de plugins DSH](https://github.com/PerryLink)
35
35
 
36
36
  | Superfície | Status |
37
37
  |---|---|
38
- | Harness | DeepSeek Harness `dsh-v0.1.7-rc.1` (verificado em 2026-09-24: typecheck triplo (instalado, CI, checkout) + 142 testes + portas self-contained/artifacts; a união de blocos de conteúdo de `0.1.7` está adaptada — um resultado de ferramenta agora é uma mensagem de papel `tool` de primeira classe, e um envelope `tool-result` anterior a `0.1.7` ainda é lido para registros antigos). O intervalo de peers admite todas as linhas suportadas: `>=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`; os pins dev/test são `0.1.7-rc.1`. |
38
+ | Harness | DeepSeek Harness `dsh-v0.2.1-alpha.1` (verificado em 2026-10-04: typecheck triplo (instalado, CI, checkout) + 142 testes + portas self-contained/artifacts; a união de blocos de conteúdo de `0.1.7` está adaptada — um resultado de ferramenta agora é uma mensagem de papel `tool` de primeira classe, e um envelope `tool-result` anterior a `0.1.7` ainda é lido para registros antigos). O intervalo de peers admite todas as linhas suportadas: `>=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 \|\| >=0.2.0-rc.1 <0.3.0-0`; os pins dev/test são `0.2.0-rc.2`. |
39
39
  | Node | `^22.19.0 \|\| >=24.0.0` |
40
40
  | Backend | [Ollama](https://ollama.com) (API HTTP local + sonda CLI) |
41
41
  | Modelo | Rota somente texto (`inputModalities: ['text']`); chamadas e resultados de ferramentas são suportados |
@@ -164,7 +164,7 @@ Todos os ajustes são campos `Config` de Schemastery (modificáveis pelo cordis.
164
164
 
165
165
  ## Known limitations
166
166
 
167
- - **npm 0.1.5-rc.2** — desenvolvido e testado contra `@deepseek-ai/dsh@0.1.5-rc.2`; espera-se que baselines mais novos funcionem, mas são verificados pelo workflow mensal de compat.
167
+ - **npm 0.2.0-rc.2** — desenvolvido e testado contra `@deepseek-ai/dsh@0.2.0-rc.2`; espera-se que baselines mais novos funcionem, mas são verificados pelo workflow mensal de compat.
168
168
  - **Vision quando o modelo a informa** — modelos cujas capacidades de `/api/show` incluem `vision` declaram `inputModalities: ["text","image"]` e carregam payloads de imagem base64 nas mensagens do usuário (desative com `vision: false`); modelos somente texto continuam rejeitando conteúdo de imagem (`UNSUPPORTED_CONTENT`).
169
169
  - **Fallback no meio do fluxo** — uma vez que uma rota local começou a produzir conteúdo, uma falha posterior é reencaminhada (não retirada); apenas uma falha antes do primeiro token faz fallback para a nuvem.
170
170
 
@@ -172,7 +172,7 @@ Todos os ajustes são campos `Config` de Schemastery (modificáveis pelo cordis.
172
172
 
173
173
  ```sh
174
174
  pnpm install # node ^22.19 || >=24
175
- pnpm run typecheck # tsc: src + testes contra os tipos publicados 0.1.5-rc.2
175
+ pnpm run typecheck # tsc: src + testes contra os tipos publicados 0.2.0-rc.2
176
176
  pnpm run typecheck:ci # tsc estrito contra os tipos publicados rc.2 (skipLibCheck off)
177
177
  pnpm test # vitest: costuras reais Context/LlmRuntime/ToolRuntime/CommandRuntime/subprocess
178
178
  pnpm run test:coverage # porta de cobertura (90/80/90/90)
@@ -184,6 +184,24 @@ node scripts/check-endpoints.mjs # sonda de atividade M3 (Ollama /api/version)
184
184
  pnpm pack # o tarball publicado
185
185
  ```
186
186
 
187
+ ## Interoperability with other DSH plugins
188
+
189
+ Verificado contra **DSH `0.2.0-rc.2`** (o runtime para o qual este README é publicado) e o conjunto de plugins com mais estrelas pesquisado em 2026-10-05.
190
+
191
+ Este plugin **não interfere** em outros plugins, incluindo os de mais estrelas:
192
+
193
+ - **Sem colisão de nome de ferramenta.** Todas as ferramentas têm namespace; nenhuma ocupa um nome puro já pertencente a uma ferramenta embutida ou a outro plugin.
194
+ - **Sem colisão de chave de serviço.** Não fornece nenhuma chave de serviço, portanto não pode colidir em uma.
195
+ - **Sem colisão de slot.** Não registra nenhuma chave de slot de cliente, então não disputa um assento `shadows-shipped-ui`.
196
+ - **Sem colisão de rota HTTP.** Não registra nenhum prefixo `webServer`.
197
+ - **Sem colisão na camada de patch.** O patch do bundle apenas faz `insert` da própria linha; nunca sobrescreve o `config` de uma linha embutida.
198
+ - **Sem mutação global.** Não altera protótipos, não reescreve `process.env` nem substitui o dispatcher global de fetch.
199
+
200
+ **Listeners de eventos compartilhados não interferem por construção.** Observa os eventos sensíveis à ordem `llm/stream` com `ctx.on()` — o registro de difusão do Cordis, onde cada listener executa e nenhum pode privar outro do turno. **Todos os listeners aqui delegam via `next()`**, então a cadeia nunca é curto-circuitada:
201
+ - `llm/stream` — also used by `dsh-routing-suite` (7000★).
202
+
203
+ Evidência estática: `dsh-plugin-doctor` K10–K13 retornam `pass` em todas as verificações deste repositório.
204
+
187
205
  ## Topics
188
206
 
189
207
  `dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `ollama`, `local-llm`, `local-models`, `offline`, `privacy`, `model-routing`
package/README-zh.md CHANGED
@@ -37,7 +37,7 @@
37
37
 
38
38
  | 项目 | 状态 |
39
39
  |---|---|
40
- | Harness | DeepSeek Harness `dsh-v0.1.7-rc.1`(2026-09-24 核验:三把 typecheck 尺子(已装包、CI、checkout)+ 142 项测试 + self-contained/artifacts 门;已适配 `0.1.7` 的内容块联合 —— 工具结果现为一等 `tool` 角色消息,旧日志里的 `tool-result` 包裹块仍可读取)。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`;dev/test 钉号 `0.1.7-rc.1`。 |
40
+ | Harness | DeepSeek Harness `dsh-v0.2.1-alpha.1`(2026-10-04 核验:三把 typecheck 尺子(已装包、CI、checkout)+ 142 项测试 + self-contained/artifacts 门;已适配 `0.1.7` 的内容块联合 —— 工具结果现为一等 `tool` 角色消息,旧日志里的 `tool-result` 包裹块仍可读取)。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 \|\| >=0.2.0-rc.1 <0.3.0-0`;dev/test 钉号 `0.2.0-rc.2`。 |
41
41
  | Node | `^22.19.0 \|\| >=24.0.0` |
42
42
  | 后端 | [Ollama](https://ollama.com)(本地 HTTP API + CLI 探测) |
43
43
  | 模型 | 纯文本路由(`inputModalities: ['text']`);支持工具调用与工具结果 |
@@ -166,7 +166,7 @@ dsh --profile web --dump-config | grep -A2 'id: dsh-local-ai'
166
166
 
167
167
  ## Known limitations
168
168
 
169
- - **npm 0.1.5-rc.2** —— 针对 `@deepseek-ai/dsh@0.1.5-rc.2` 开发与测试;更新版本的 harness 基线预期可用,但由每月 compat workflow 验证。
169
+ - **npm 0.2.0-rc.2** —— 针对 `@deepseek-ai/dsh@0.2.0-rc.2` 开发与测试;更新版本的 harness 基线预期可用,但由每月 compat workflow 验证。
170
170
  - **模型声明 vision 时启用视觉** — `/api/show` capabilities 含 `vision` 的模型声明 `inputModalities: ["text","image"]`,并在用户消息上携带 base64 图片载荷(可用 `vision: false` 退出);纯文本模型仍拒绝图片内容(`UNSUPPORTED_CONTENT`)。
171
171
  - **中途失败不回退** —— 本地路由一旦开始产出内容,之后的失败会透传(无法撤回);只有首个 token 前的失败才回退云端。
172
172
 
@@ -174,7 +174,7 @@ dsh --profile web --dump-config | grep -A2 'id: dsh-local-ai'
174
174
 
175
175
  ```sh
176
176
  pnpm install # node ^22.19 || >=24
177
- pnpm run typecheck # tsc:src + 测试,对发布版 0.1.5-rc.2 类型
177
+ pnpm run typecheck # tsc:src + 测试,对发布版 0.2.0-rc.2 类型
178
178
  pnpm run typecheck:ci # 严格 tsc,对发布版 rc.2 类型(关闭 skipLibCheck)
179
179
  pnpm test # vitest:真实 Context/LlmRuntime/ToolRuntime/CommandRuntime/subprocess 机制
180
180
  pnpm run test:coverage # 覆盖率门禁(90/80/90/90)
@@ -186,6 +186,24 @@ node scripts/check-endpoints.mjs # M3 端点存活探测(Ollama /api/version
186
186
  pnpm pack # 发布用 tarball
187
187
  ```
188
188
 
189
+ ## Interoperability with other DSH plugins
190
+
191
+ 已对照 **DSH `0.2.0-rc.2`**(本 README 面向的运行时)与 2026-10-05 实测的高星插件集验证。
192
+
193
+ 本插件**不干扰**其他插件,包括广泛安装的高星插件:
194
+
195
+ - **无工具名冲突。** 所有工具都带命名空间,不占用任何已被内置工具或其他插件持有的裸名。
196
+ - **无服务键冲突。** 不提供任何服务键,因此不存在服务键冲突。
197
+ - **无 slot 冲突。** 不注册客户端 slot key,因此不参与 `shadows-shipped-ui` 座位争抢。
198
+ - **无 HTTP 路由冲突。** 不注册任何 `webServer` 前缀。
199
+ - **无 patch 层冲突。** 组合包 patch 只 `insert` 自己那一行,从不覆写内置行的 `config`。
200
+ - **无全局改写。** 不改原型、不改写 `process.env`、不替换全局 fetch dispatcher。
201
+
202
+ **共享事件监听器在构造上就不互相干扰。** 它用 `ctx.on()` 监听顺序敏感事件 `llm/stream` —— Cordis 的**广播**语义:每个监听器都会运行,任何一个都无法饿死其他监听器。**此处每个监听器都通过 `next()` 委托**,因此链条绝不会被短路;改写作用在 `next()` 产出的值上,而不是用它顶替返回:
203
+ - `llm/stream` — also used by `dsh-routing-suite` (7000★).
204
+
205
+ 静态证据:`dsh-plugin-doctor` 的 K10–K13 在本仓全部为 `pass`。
206
+
189
207
  ## Topics
190
208
 
191
209
  `dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `ollama`, `local-llm`, `local-models`, `offline`, `privacy`, `model-routing`
package/README.md CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
  | Surface | Status |
40
40
  |---|---|
41
- | Harness | DeepSeek Harness `dsh-v0.1.7-rc.1` (verified 2026-09-24: three typecheck rulers (installed, CI, checkout) + 142 tests + self-contained/artifacts gates; the `0.1.7` content-block union is adapted — a tool result is a first-class `tool`-role message, and a pre-`0.1.7` `tool-result` wrapper is still read for old logs). The peer range admits every supported line: `>=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`; dev/test pins are `0.1.7-rc.1`. |
41
+ | Harness | DeepSeek Harness `dsh-v0.2.1-alpha.1` (verified 2026-10-04: three typecheck rulers (installed, CI, checkout) + 142 tests + self-contained/artifacts gates; the `0.1.7` content-block union is adapted — a tool result is a first-class `tool`-role message, and a pre-`0.1.7` `tool-result` wrapper is still read for old logs). The peer range admits every supported line: `>=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 \|\| >=0.2.0-rc.1 <0.3.0-0`; dev/test pins are `0.2.0-rc.2`. |
42
42
  | Node | `^22.19.0 \|\| >=24.0.0` |
43
43
  | Backend | [Ollama](https://ollama.com) (local HTTP API + CLI probe) |
44
44
  | Model | Text-only route (`inputModalities: ['text']`); tool calls and tool results are supported |
@@ -169,7 +169,7 @@ All tunables are Schemastery `Config` fields (changeable from cordis.yml). An id
169
169
 
170
170
  ## Known limitations
171
171
 
172
- - **npm 0.1.5-rc.2** — developed and tested against `@deepseek-ai/dsh@0.1.5-rc.2`; newer harness baselines are expected to work but are verified by the monthly compat workflow.
172
+ - **npm 0.2.0-rc.2** — developed and tested against `@deepseek-ai/dsh@0.2.0-rc.2`; newer harness baselines are expected to work but are verified by the monthly compat workflow.
173
173
  - **Vision when the model reports it** — models whose `/api/show` capabilities include `vision` declare `inputModalities: ["text","image"]` and carry base64 image payloads on user messages (opt out with `vision: false`); text-only models still reject image content (`UNSUPPORTED_CONTENT`).
174
174
  - **Mid-stream fallback** — once a local route has started producing content, a later failure is forwarded (not retracted); only a failure before the first token falls back to the cloud.
175
175
 
@@ -177,7 +177,7 @@ All tunables are Schemastery `Config` fields (changeable from cordis.yml). An id
177
177
 
178
178
  ```sh
179
179
  pnpm install # node ^22.19 || >=24
180
- pnpm run typecheck # tsc: src + tests against the published 0.1.5-rc.2 types
180
+ pnpm run typecheck # tsc: src + tests against the published 0.2.0-rc.2 types
181
181
  pnpm run typecheck:ci # strict tsc against published rc.2 types (skipLibCheck off)
182
182
  pnpm test # vitest: real Context/LlmRuntime/ToolRuntime/CommandRuntime/subprocess seams
183
183
  pnpm run test:coverage # coverage gate (90/80/90/90)
@@ -189,6 +189,24 @@ node scripts/check-endpoints.mjs # M3 endpoint-liveness probe (Ollama /api/vers
189
189
  pnpm pack # the published tarball
190
190
  ```
191
191
 
192
+ ## Interoperability with other DSH plugins
193
+
194
+ Verified against **DSH `0.2.0-rc.2`** (the runtime this README ships for) and the high-star plugin set surveyed on 2026-10-05.
195
+
196
+ This plugin **does not interfere** with other plugins, including the widely installed high-star ones:
197
+
198
+ - **No tool-name collision.** Every tool is namespaced; no bare name owned by a shipped tool or another plugin is registered.
199
+ - **No service-key collision.** It provides no service key at all, so it cannot collide on one.
200
+ - **No slot collision.** It registers no client slot key, so it cannot contend for a `shadows-shipped-ui` seat.
201
+ - **No HTTP route collision.** It registers no `webServer` prefix.
202
+ - **No patch-layer collision.** The bundle patch only `insert`s its own row; it never overrides a built-in row's `config`.
203
+ - **No global mutation.** It does not patch prototypes, rewrite `process.env`, or replace the global fetch dispatcher.
204
+
205
+ **Shared event listeners are non-interfering by construction.** It observes the ordering-sensitive event `llm/stream` with `ctx.on()` — Cordis's broadcast registration, where every listener runs and none can starve another. **Every listener here delegates through `next()`**, so the chain is never short-circuited, and a mutation is applied to the value `next()` produced rather than returned in its place:
206
+ - `llm/stream` — also used by `dsh-routing-suite` (7000★).
207
+
208
+ Static evidence: `dsh-plugin-doctor` K10–K13 report `pass` for every check on this repository.
209
+
192
210
  ## Topics
193
211
 
194
212
  `dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `ollama`, `local-llm`, `local-models`, `offline`, `privacy`, `model-routing`
@@ -13,7 +13,7 @@ published tarball; these are install-time dependencies:
13
13
  | [typescript](https://github.com/microsoft/TypeScript) | `^5.9.0` | Apache-2.0 | Build-time declaration emission (`lib/types/`) |
14
14
  | [@deepseek-ai/cordis](https://www.npmjs.com/package/@deepseek-ai/cordis) | `^4.0.2` (peer) | See package | The plugin runtime |
15
15
  | [@deepseek-ai/schemastery](https://www.npmjs.com/package/@deepseek-ai/schemastery) | `^3.18.2` (peer) | See package | Configuration schema |
16
- | `@deepseek-ai/dsh-*` peers | `0.1.2-alpha.3` (peer) | See packages | Official harness seams (`dsh-llm`, `dsh-tools`, `dsh-subprocess`, `dsh-commands`, `dsh-timeout`) |
16
+ | `@deepseek-ai/dsh-*` peers | `>=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 \|\| >=0.2.0-rc.1 <0.3.0-0` (peer; devDependencies pin `0.2.0-rc.2`) | See packages | Official harness seams (`dsh-llm`, `dsh-tools`, `dsh-subprocess`, `dsh-commands`, `dsh-timeout`) |
17
17
 
18
18
  At runtime the plugin only talks to the Ollama endpoint you configure (over
19
19
  its HTTP API and, for the process-liveness probe, its CLI); it performs no
package/lib/index.js CHANGED
@@ -1944,7 +1944,7 @@ async function checkHealth(baseURL, fetchImpl, subprocess, requestTimeoutMs, gra
1944
1944
  * The `dsh-local-ai` plugin version. The release script bumps this string
1945
1945
  * alongside `package.json`; `test/version.spec.ts` trips when the two drift.
1946
1946
  */
1947
- const VERSION = "0.2.14";
1947
+ const VERSION = "0.2.16";
1948
1948
  //#endregion
1949
1949
  //#region src/index.ts
1950
1950
  const name = "local-ai";
@@ -2,5 +2,5 @@
2
2
  * The `dsh-local-ai` plugin version. The release script bumps this string
3
3
  * alongside `package.json`; `test/version.spec.ts` trips when the two drift.
4
4
  */
5
- export declare const VERSION = "0.2.14";
5
+ export declare const VERSION = "0.2.16";
6
6
  //# sourceMappingURL=version.d.ts.map
@@ -2,5 +2,5 @@
2
2
  * The `dsh-local-ai` plugin version. The release script bumps this string
3
3
  * alongside `package.json`; `test/version.spec.ts` trips when the two drift.
4
4
  */
5
- export const VERSION = '0.2.14';
5
+ export const VERSION = '0.2.16';
6
6
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-local-ai",
3
- "version": "0.2.14",
3
+ "version": "0.2.16",
4
4
  "description": "Local-model (Ollama) integration for DeepSeek Harness: discover, pull, remove, and inspect local models, route requests to them by task type or keyword with automatic fallback to the cloud, and get a one-shot status overview via /ollama.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -68,7 +68,9 @@
68
68
  "0.1.2-rc.1",
69
69
  "0.1.6-alpha.2",
70
70
  "0.1.7-alpha.2",
71
- "0.1.7-rc.1"
71
+ "0.1.7-rc.1",
72
+ "0.2.0-rc.2",
73
+ "0.2.1-alpha.1"
72
74
  ]
73
75
  },
74
76
  "capability": {
@@ -99,17 +101,17 @@
99
101
  ],
100
102
  "engines": {
101
103
  "node": "^22.19.0 || >=24.0.0",
102
- "dsh": ">=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"
104
+ "dsh": ">=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 || >=0.2.0-rc.1 <0.3.0-0"
103
105
  },
104
106
  "packageManager": "pnpm@11.7.0",
105
107
  "peerDependencies": {
106
108
  "@deepseek-ai/cordis": "^4.0.2",
107
- "@deepseek-ai/dsh-attachment": ">=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",
108
- "@deepseek-ai/dsh-commands": ">=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",
109
- "@deepseek-ai/dsh-llm": ">=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",
110
- "@deepseek-ai/dsh-subprocess": ">=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",
111
- "@deepseek-ai/dsh-timeout": ">=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",
112
- "@deepseek-ai/dsh-tools": ">=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",
109
+ "@deepseek-ai/dsh-attachment": ">=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 || >=0.2.0-rc.1 <0.3.0-0",
110
+ "@deepseek-ai/dsh-commands": ">=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 || >=0.2.0-rc.1 <0.3.0-0",
111
+ "@deepseek-ai/dsh-llm": ">=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 || >=0.2.0-rc.1 <0.3.0-0",
112
+ "@deepseek-ai/dsh-subprocess": ">=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 || >=0.2.0-rc.1 <0.3.0-0",
113
+ "@deepseek-ai/dsh-timeout": ">=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 || >=0.2.0-rc.1 <0.3.0-0",
114
+ "@deepseek-ai/dsh-tools": ">=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 || >=0.2.0-rc.1 <0.3.0-0",
113
115
  "@deepseek-ai/schemastery": "^3.18.2"
114
116
  },
115
117
  "dependencies": {
@@ -117,23 +119,23 @@
117
119
  "typescript": "^5.9.0"
118
120
  },
119
121
  "devDependencies": {
120
- "@deepseek-ai/dsh-util-values": "0.1.7-rc.1",
122
+ "@deepseek-ai/dsh-util-values": "0.2.0-rc.2",
121
123
  "@deepseek-ai/cordis": "^4.0.4",
122
124
  "@deepseek-ai/cordis-plugin-include": "^1.0.7",
123
125
  "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
124
- "@deepseek-ai/dsh-attachment": "0.1.7-rc.1",
125
- "@deepseek-ai/dsh-agent": "0.1.7-rc.1",
126
- "@deepseek-ai/dsh-commands": "0.1.7-rc.1",
127
- "@deepseek-ai/dsh-invariants": "0.1.7-rc.1",
128
- "@deepseek-ai/dsh-llm": "0.1.7-rc.1",
129
- "@deepseek-ai/dsh-scope": "0.1.7-rc.1",
130
- "@deepseek-ai/dsh-session": "0.1.7-rc.1",
131
- "@deepseek-ai/dsh-subprocess": "0.1.7-rc.1",
132
- "@deepseek-ai/dsh-subprocess-local": "0.1.7-rc.1",
133
- "@deepseek-ai/dsh-system-prompt": "0.1.7-rc.1",
134
- "@deepseek-ai/dsh-timeout": "0.1.7-rc.1",
135
- "@deepseek-ai/dsh-tools": "0.1.7-rc.1",
136
- "@deepseek-ai/dsh-user-approval": "0.1.7-rc.1",
126
+ "@deepseek-ai/dsh-attachment": "0.2.0-rc.2",
127
+ "@deepseek-ai/dsh-agent": "0.2.0-rc.2",
128
+ "@deepseek-ai/dsh-commands": "0.2.0-rc.2",
129
+ "@deepseek-ai/dsh-invariants": "0.2.0-rc.2",
130
+ "@deepseek-ai/dsh-llm": "0.2.0-rc.2",
131
+ "@deepseek-ai/dsh-scope": "0.2.0-rc.2",
132
+ "@deepseek-ai/dsh-session": "0.2.0-rc.2",
133
+ "@deepseek-ai/dsh-subprocess": "0.2.0-rc.2",
134
+ "@deepseek-ai/dsh-subprocess-local": "0.2.0-rc.2",
135
+ "@deepseek-ai/dsh-system-prompt": "0.2.0-rc.2",
136
+ "@deepseek-ai/dsh-timeout": "0.2.0-rc.2",
137
+ "@deepseek-ai/dsh-tools": "0.2.0-rc.2",
138
+ "@deepseek-ai/dsh-user-approval": "0.2.0-rc.2",
137
139
  "@deepseek-ai/schemastery": "^3.18.4",
138
140
  "@types/node": "^22.19.0",
139
141
  "@vitest/coverage-v8": "^3.2.0",
package/src/version.ts CHANGED
@@ -2,4 +2,4 @@
2
2
  * The `dsh-local-ai` plugin version. The release script bumps this string
3
3
  * alongside `package.json`; `test/version.spec.ts` trips when the two drift.
4
4
  */
5
- export const VERSION = '0.2.14'
5
+ export const VERSION = '0.2.16'