dsh-permission-rules 0.7.10 → 0.7.12
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 +10 -1
- package/LICENSE +1 -1
- package/README-es.md +19 -0
- package/README-hi.md +19 -0
- package/README-pt.md +19 -0
- package/README-zh.md +19 -0
- package/README.md +19 -0
- package/lib/index.js +2 -2
- package/package.json +1 -1
- package/src/runtime.ts +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -515,7 +515,16 @@ All notable changes to dsh-permission-rules are recorded here, newest first.
|
|
|
515
515
|
- Rename the four translated READMEs to `README-<lang>.md`. npm selects the package-page readme as the first markdown file matching its `{README,README.*}` glob (`@npmcli/package-json`, publish path), and that glob order puts `README.<lang>.md` ahead of `README.md` — so npm was serving the Simplified-Chinese file for this package too (measured on 15/15 sampled packages of the family). The new names sit outside the glob, so the English source is served again. No content changed apart from the language-switcher link each translation holds to its siblings, and the repo readme gate still passes. Takes effect with the next release; an already-published version cannot gain a corrected readme retroactively.
|
|
516
516
|
- Pin the `@deepseek-ai/dsh-*` dev/test dependencies to the published `0.1.5-rc.2` line and record `0.1.5-rc.2` in `dshWorkshop.compatibility.dshVersions`; the monthly Compat workflow now runs against `0.1.5-rc.2`. The peer range `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0` is unchanged, so no supported host line is dropped.
|
|
517
517
|
|
|
518
|
-
##
|
|
518
|
+
## v0.7.12 - 2026-10-05
|
|
519
|
+
|
|
520
|
+
Adds the versioned five-language **interoperability declaration** to the READMEs: the plugin records, against DSH `0.2.0-rc.2`, every injection point it 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 each ordering-sensitive event it listens on, that the listener delegates through `next()` so a shared waterfall chain is never short-circuited. Verified by `dsh-plugin-doctor` K10-K14 (checkset `R0-R8+K1-K14+D0-D3,D9+CC1-CC5/3`). Documentation only; no behaviour change.
|
|
521
|
+
|
|
522
|
+
## v0.7.11 - 2026-10-05
|
|
523
|
+
|
|
524
|
+
### Fixed
|
|
525
|
+
|
|
526
|
+
- An unreadable peer version now fails closed. `peerVersion()` resolves the pinned peer's `package.json` through `createRequire`; inside a profile install that lookup throws `MODULE_NOT_FOUND`, so the runtime saw `null` and the guard `version !== null && isUnmarkedHostVersion(version)` skipped the unmarked-host check entirely. Every process start then landed one unmarked audit row, and each unmarked row is what makes a session unresumable on stricter harness builds. Both call sites -- the decision path and `auditNetworkBlock` -- now read `version === null || isUnmarkedHostVersion(version)`, matching the sibling defend and auto-review plugins, and `test/audit-support.spec.ts` gains the null-version case it was missing (the sibling auto-review spec has one; this repo and defend did not).
|
|
527
|
+
- Residual, by design: a STABLE `0.2.x` host is still classified as possibly-marker-aware, so the append probe still runs once there -- a restored marker surface is adopted without a new plugin release.
|
|
519
528
|
|
|
520
529
|
## v0.7.10 - 2026-10-04
|
|
521
530
|
|
package/LICENSE
CHANGED
|
@@ -186,7 +186,7 @@
|
|
|
186
186
|
same "printed page" as the copyright notice for easier
|
|
187
187
|
identification within third-party archives.
|
|
188
188
|
|
|
189
|
-
Copyright 2026
|
|
189
|
+
Copyright 2026 PerryLink
|
|
190
190
|
|
|
191
191
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
192
|
you may not use this file except in compliance with the License.
|
package/README-es.md
CHANGED
|
@@ -230,6 +230,25 @@ node scripts/check-readme-sync.mjs # five-language README sync gate (also in C
|
|
|
230
230
|
|
|
231
231
|
Consulta [VERIFICATION.md](VERIFICATION.md) para el registro de verificación end-to-end sin cabeza.
|
|
232
232
|
|
|
233
|
+
## Interoperability with other DSH plugins
|
|
234
|
+
|
|
235
|
+
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.
|
|
236
|
+
|
|
237
|
+
Este plugin **no interfiere** con otros plugins, incluidos los de más estrellas:
|
|
238
|
+
|
|
239
|
+
- **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.
|
|
240
|
+
- **Sin colisión de clave de servicio.** Solo provee `permissionRules`, `permissionRulesRuntime`; esa clave no es una costura incluida ni la provee ningún plugin de más estrellas.
|
|
241
|
+
- **Sin colisión de slot.** No registra ninguna clave de slot de cliente, así que no disputa un asiento `shadows-shipped-ui`.
|
|
242
|
+
- **Sin colisión de ruta HTTP.** No registra ningún prefijo `webServer`.
|
|
243
|
+
- **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.
|
|
244
|
+
- **Sin mutación global.** No parchea prototipos, ni reescribe `process.env`, ni reemplaza el dispatcher global de fetch.
|
|
245
|
+
|
|
246
|
+
**Los listeners de eventos compartidos no interfieren por construcción.** Observa los eventos sensibles al orden `tools/post-execute`, `tools/pre-execute` 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:
|
|
247
|
+
- `tools/post-execute` — also used by `cc-safety-net` (1576★).
|
|
248
|
+
- `tools/pre-execute` — also used by `cc-safety-net` (1576★).
|
|
249
|
+
|
|
250
|
+
Evidencia estática: `dsh-plugin-doctor` K10–K13 dan `pass` en todas las comprobaciones de este repositorio.
|
|
251
|
+
|
|
233
252
|
## Topics
|
|
234
253
|
|
|
235
254
|
`dsh`, `dsh-plugin`, `deepseek-harness`, `permission`, `policy`, `allow-deny-ask`, `approval`, `safety`, `network`, `network-policy`, `proxy`
|
package/README-hi.md
CHANGED
|
@@ -232,6 +232,25 @@ node scripts/check-readme-sync.mjs # five-language README sync gate (also in C
|
|
|
232
232
|
|
|
233
233
|
हेडलेस एंड-टू-एंड सत्यापन रिकॉर्ड के लिए [VERIFICATION.md](VERIFICATION.md) देखें।
|
|
234
234
|
|
|
235
|
+
## Interoperability with other DSH plugins
|
|
236
|
+
|
|
237
|
+
**DSH `0.2.0-rc.2`** (वह रनटाइम जिसके लिए यह README प्रकाशित है) और 2026-10-05 को सर्वे किए गए उच्च-स्टार प्लगइन सेट के विरुद्ध सत्यापित।
|
|
238
|
+
|
|
239
|
+
यह प्लगइन अन्य प्लगइनों में **हस्तक्षेप नहीं करता**, उन उच्च-स्टार प्लगइनों सहित जो व्यापक रूप से इंस्टॉल हैं:
|
|
240
|
+
|
|
241
|
+
- **कोई टूल-नाम टकराव नहीं।** सभी टूल नेमस्पेस युक्त हैं; कोई भी ऐसा नंगा नाम नहीं लेता जो पहले से किसी अंतर्निहित टूल या अन्य प्लगइन का हो।
|
|
242
|
+
- **कोई सर्विस-की टकराव नहीं।** यह केवल `permissionRules`, `permissionRulesRuntime` प्रदान करता है; यह key न अंतर्निहित सीम है और न किसी सर्वे किए गए उच्च-स्टार प्लगइन द्वारा प्रदान की जाती है।
|
|
243
|
+
- **कोई स्लॉट टकराव नहीं।** यह कोई क्लाइंट slot key पंजीकृत नहीं करता, इसलिए `shadows-shipped-ui` सीट के लिए प्रतिस्पर्धा नहीं करता।
|
|
244
|
+
- **कोई HTTP रूट टकराव नहीं।** यह कोई `webServer` प्रीफ़िक्स पंजीकृत नहीं करता।
|
|
245
|
+
- **कोई patch-लेयर टकराव नहीं।** बंडल patch केवल अपनी पंक्ति `insert` करता है; कभी किसी अंतर्निहित पंक्ति का `config` ओवरराइड नहीं करता।
|
|
246
|
+
- **कोई वैश्विक परिवर्तन नहीं।** यह प्रोटोटाइप नहीं बदलता, `process.env` नहीं लिखता, और वैश्विक fetch dispatcher प्रतिस्थापित नहीं करता।
|
|
247
|
+
|
|
248
|
+
**साझा ईवेंट लिसनर रचना से ही अहस्तक्षेपी हैं।** यह क्रम-संवेदनशील ईवेंट `tools/post-execute`, `tools/pre-execute` को `ctx.on()` से देखता है — Cordis का **ब्रॉडकास्ट** पंजीकरण, जहाँ हर लिसनर चलता है और कोई किसी दूसरे को वंचित नहीं कर सकता। **यहाँ प्रत्येक लिसनर `next()` से डेलिगेट करता है**, इसलिए श्रृंखला कभी शॉर्ट-सर्किट नहीं होती:
|
|
249
|
+
- `tools/post-execute` — also used by `cc-safety-net` (1576★).
|
|
250
|
+
- `tools/pre-execute` — also used by `cc-safety-net` (1576★).
|
|
251
|
+
|
|
252
|
+
स्थैतिक प्रमाण: इस रिपॉज़िटरी पर `dsh-plugin-doctor` के K10–K13 सभी `pass` हैं।
|
|
253
|
+
|
|
235
254
|
## Topics
|
|
236
255
|
|
|
237
256
|
`dsh`, `dsh-plugin`, `deepseek-harness`, `permission`, `policy`, `allow-deny-ask`, `approval`, `safety`, `network`, `network-policy`, `proxy`
|
package/README-pt.md
CHANGED
|
@@ -230,6 +230,25 @@ node scripts/check-readme-sync.mjs # five-language README sync gate (also in C
|
|
|
230
230
|
|
|
231
231
|
Consulte [VERIFICATION.md](VERIFICATION.md) para o registro de verificação end-to-end sem cabeça.
|
|
232
232
|
|
|
233
|
+
## Interoperability with other DSH plugins
|
|
234
|
+
|
|
235
|
+
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.
|
|
236
|
+
|
|
237
|
+
Este plugin **não interfere** em outros plugins, incluindo os de mais estrelas:
|
|
238
|
+
|
|
239
|
+
- **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.
|
|
240
|
+
- **Sem colisão de chave de serviço.** Fornece apenas `permissionRules`, `permissionRulesRuntime`; essa chave não é uma costura embutida nem é fornecida por nenhum plugin de mais estrelas.
|
|
241
|
+
- **Sem colisão de slot.** Não registra nenhuma chave de slot de cliente, então não disputa um assento `shadows-shipped-ui`.
|
|
242
|
+
- **Sem colisão de rota HTTP.** Não registra nenhum prefixo `webServer`.
|
|
243
|
+
- **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.
|
|
244
|
+
- **Sem mutação global.** Não altera protótipos, não reescreve `process.env` nem substitui o dispatcher global de fetch.
|
|
245
|
+
|
|
246
|
+
**Listeners de eventos compartilhados não interferem por construção.** Observa os eventos sensíveis à ordem `tools/post-execute`, `tools/pre-execute` 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:
|
|
247
|
+
- `tools/post-execute` — also used by `cc-safety-net` (1576★).
|
|
248
|
+
- `tools/pre-execute` — also used by `cc-safety-net` (1576★).
|
|
249
|
+
|
|
250
|
+
Evidência estática: `dsh-plugin-doctor` K10–K13 retornam `pass` em todas as verificações deste repositório.
|
|
251
|
+
|
|
233
252
|
## Topics
|
|
234
253
|
|
|
235
254
|
`dsh`, `dsh-plugin`, `deepseek-harness`, `permission`, `policy`, `allow-deny-ask`, `approval`, `safety`, `network`, `network-policy`, `proxy`
|
package/README-zh.md
CHANGED
|
@@ -230,6 +230,25 @@ node scripts/check-readme-sync.mjs # five-language README sync gate (also in C
|
|
|
230
230
|
|
|
231
231
|
无头端到端验证记录见 [VERIFICATION.md](VERIFICATION.md)。
|
|
232
232
|
|
|
233
|
+
## Interoperability with other DSH plugins
|
|
234
|
+
|
|
235
|
+
已对照 **DSH `0.2.0-rc.2`**(本 README 面向的运行时)与 2026-10-05 实测的高星插件集验证。
|
|
236
|
+
|
|
237
|
+
本插件**不干扰**其他插件,包括广泛安装的高星插件:
|
|
238
|
+
|
|
239
|
+
- **无工具名冲突。** 所有工具都带命名空间,不占用任何已被内置工具或其他插件持有的裸名。
|
|
240
|
+
- **无服务键冲突。** 只提供 `permissionRules`, `permissionRulesRuntime`;该键既不是内置 seam,也没有被任何已调研的高星插件提供。
|
|
241
|
+
- **无 slot 冲突。** 不注册客户端 slot key,因此不参与 `shadows-shipped-ui` 座位争抢。
|
|
242
|
+
- **无 HTTP 路由冲突。** 不注册任何 `webServer` 前缀。
|
|
243
|
+
- **无 patch 层冲突。** 组合包 patch 只 `insert` 自己那一行,从不覆写内置行的 `config`。
|
|
244
|
+
- **无全局改写。** 不改原型、不改写 `process.env`、不替换全局 fetch dispatcher。
|
|
245
|
+
|
|
246
|
+
**共享事件监听器在构造上就不互相干扰。** 它用 `ctx.on()` 监听顺序敏感事件 `tools/post-execute`, `tools/pre-execute` —— Cordis 的**广播**语义:每个监听器都会运行,任何一个都无法饿死其他监听器。**此处每个监听器都通过 `next()` 委托**,因此链条绝不会被短路;改写作用在 `next()` 产出的值上,而不是用它顶替返回:
|
|
247
|
+
- `tools/post-execute` — also used by `cc-safety-net` (1576★).
|
|
248
|
+
- `tools/pre-execute` — also used by `cc-safety-net` (1576★).
|
|
249
|
+
|
|
250
|
+
静态证据:`dsh-plugin-doctor` 的 K10–K13 在本仓全部为 `pass`。
|
|
251
|
+
|
|
233
252
|
## Topics
|
|
234
253
|
|
|
235
254
|
`dsh`, `dsh-plugin`, `deepseek-harness`, `permission`, `policy`, `allow-deny-ask`, `approval`, `safety`, `network`, `network-policy`, `proxy`
|
package/README.md
CHANGED
|
@@ -232,6 +232,25 @@ node scripts/check-readme-sync.mjs # five-language README sync gate (also in C
|
|
|
232
232
|
|
|
233
233
|
See [VERIFICATION.md](VERIFICATION.md) for the headless end-to-end verification record.
|
|
234
234
|
|
|
235
|
+
## Interoperability with other DSH plugins
|
|
236
|
+
|
|
237
|
+
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.
|
|
238
|
+
|
|
239
|
+
This plugin **does not interfere** with other plugins, including the widely installed high-star ones:
|
|
240
|
+
|
|
241
|
+
- **No tool-name collision.** Every tool is namespaced; no bare name owned by a shipped tool or another plugin is registered.
|
|
242
|
+
- **No service-key collision.** It provides `permissionRules`, `permissionRulesRuntime`; those keys are not a built-in seam and are not provided by any surveyed high-star plugin.
|
|
243
|
+
- **No slot collision.** It registers no client slot key, so it cannot contend for a `shadows-shipped-ui` seat.
|
|
244
|
+
- **No HTTP route collision.** It registers no `webServer` prefix.
|
|
245
|
+
- **No patch-layer collision.** The bundle patch only `insert`s its own row; it never overrides a built-in row's `config`.
|
|
246
|
+
- **No global mutation.** It does not patch prototypes, rewrite `process.env`, or replace the global fetch dispatcher.
|
|
247
|
+
|
|
248
|
+
**Shared event listeners are non-interfering by construction.** It observes the ordering-sensitive events `tools/post-execute`, `tools/pre-execute` 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:
|
|
249
|
+
- `tools/post-execute` — also used by `cc-safety-net` (1576★).
|
|
250
|
+
- `tools/pre-execute` — also used by `cc-safety-net` (1576★).
|
|
251
|
+
|
|
252
|
+
Static evidence: `dsh-plugin-doctor` K10–K13 report `pass` for every check on this repository.
|
|
253
|
+
|
|
235
254
|
## Topics
|
|
236
255
|
|
|
237
256
|
`dsh`, `dsh-plugin`, `deepseek-harness`, `permission`, `policy`, `allow-deny-ask`, `approval`, `safety`, `network`, `network-policy`, `proxy`
|
package/lib/index.js
CHANGED
|
@@ -3555,7 +3555,7 @@ var PermissionRulesRuntime = class {
|
|
|
3555
3555
|
if (this.auditSupport === "unsupported") return;
|
|
3556
3556
|
if (this.auditSupport === "unknown" && !this.config.allowUnmarkedAudit) {
|
|
3557
3557
|
const version = this.peerVersion();
|
|
3558
|
-
if (version
|
|
3558
|
+
if (version === null || isUnmarkedHostVersion(version)) {
|
|
3559
3559
|
this.auditSupport = "unsupported";
|
|
3560
3560
|
this.warnUnmarkedAuditHost();
|
|
3561
3561
|
return;
|
|
@@ -3740,7 +3740,7 @@ var PermissionRulesRuntime = class {
|
|
|
3740
3740
|
if (agent === void 0 || this.auditSupport === "unsupported") return;
|
|
3741
3741
|
if (this.auditSupport === "unknown" && !this.config.allowUnmarkedAudit) {
|
|
3742
3742
|
const version = this.peerVersion();
|
|
3743
|
-
if (version
|
|
3743
|
+
if (version === null || isUnmarkedHostVersion(version)) {
|
|
3744
3744
|
this.auditSupport = "unsupported";
|
|
3745
3745
|
this.warnUnmarkedAuditHost();
|
|
3746
3746
|
return;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-permission-rules",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.12",
|
|
4
4
|
"description": "Declarative Claude Code-style permission rules plus a Codex-style process-level network policy for DeepSeek Harness: ordered allow/deny/ask rules with tool-name, argument (glob/regex), workspace-path, and network-target (domain/ip/port/scheme) matching on the tools/pre-execute waterfall, a built-in local HTTP/CONNECT proxy governing shell subprocess traffic, three network modes mapped onto the official sandbox presets, full session-log audit, HMR rule reload, and a settings page with a rule editor, block counters, and recent interception lists.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
package/src/runtime.ts
CHANGED
|
@@ -523,7 +523,7 @@ export class PermissionRulesRuntime {
|
|
|
523
523
|
if (this.auditSupport === 'unsupported') return
|
|
524
524
|
if (this.auditSupport === 'unknown' && !this.config.allowUnmarkedAudit) {
|
|
525
525
|
const version = this.peerVersion()
|
|
526
|
-
if (version
|
|
526
|
+
if (version === null || isUnmarkedHostVersion(version)) {
|
|
527
527
|
this.auditSupport = 'unsupported'
|
|
528
528
|
this.warnUnmarkedAuditHost()
|
|
529
529
|
return
|
|
@@ -705,7 +705,7 @@ export class PermissionRulesRuntime {
|
|
|
705
705
|
if (agent === undefined || this.auditSupport === 'unsupported') return
|
|
706
706
|
if (this.auditSupport === 'unknown' && !this.config.allowUnmarkedAudit) {
|
|
707
707
|
const version = this.peerVersion()
|
|
708
|
-
if (version
|
|
708
|
+
if (version === null || isUnmarkedHostVersion(version)) {
|
|
709
709
|
this.auditSupport = 'unsupported'
|
|
710
710
|
this.warnUnmarkedAuditHost()
|
|
711
711
|
return
|