dsh-auto-review 0.13.3 → 0.13.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/LICENSE +0 -0
- package/README-es.md +7 -5
- package/README-hi.md +10 -6
- package/README-pt.md +7 -5
- package/README-zh.md +7 -5
- package/README.md +6 -4
- package/bin/dsh-auto-review-mcp.mjs +0 -0
- package/bin/dsh-eval.mjs +0 -0
- package/cordis.patch.yml +0 -0
- package/eval/cases/demo.yaml +0 -0
- package/eval/cordis.yml +0 -0
- package/lib/client.js +0 -0
- package/lib/client.js.map +0 -0
- package/lib/eval-cli.js +0 -0
- package/lib/eval.js +0 -0
- package/lib/index.js +190 -15
- package/lib/invariant.js +0 -0
- package/lib/mcp.js +0 -0
- package/lib/report-Df29db58.js +0 -0
- package/lib/session-message-emzsbx_9.js +0 -0
- package/lib/types/audit.d.ts +0 -0
- package/lib/types/audit.d.ts.map +0 -0
- package/lib/types/audit.js +0 -0
- package/lib/types/audit.js.map +0 -0
- package/lib/types/cache.d.ts +0 -0
- package/lib/types/cache.d.ts.map +0 -0
- package/lib/types/cache.js +0 -0
- package/lib/types/cache.js.map +0 -0
- package/lib/types/call-id.d.ts +0 -0
- package/lib/types/call-id.d.ts.map +0 -0
- package/lib/types/call-id.js +0 -0
- package/lib/types/call-id.js.map +0 -0
- package/lib/types/client/ReviewPanel.d.ts +0 -0
- package/lib/types/client/ReviewPanel.d.ts.map +0 -0
- package/lib/types/client/ReviewPanel.js +0 -0
- package/lib/types/client/ReviewPanel.js.map +0 -0
- package/lib/types/client/index.d.ts +0 -0
- package/lib/types/client/index.d.ts.map +0 -0
- package/lib/types/client/index.js +0 -0
- package/lib/types/client/index.js.map +0 -0
- package/lib/types/client/locales.d.ts +0 -0
- package/lib/types/client/locales.d.ts.map +0 -0
- package/lib/types/client/locales.js +0 -0
- package/lib/types/client/locales.js.map +0 -0
- package/lib/types/client/present.d.ts +0 -0
- package/lib/types/client/present.d.ts.map +0 -0
- package/lib/types/client/present.js +0 -0
- package/lib/types/client/present.js.map +0 -0
- package/lib/types/client/styles.d.ts +0 -0
- package/lib/types/client/styles.d.ts.map +0 -0
- package/lib/types/client/styles.js +0 -0
- package/lib/types/client/styles.js.map +0 -0
- package/lib/types/config.d.ts +0 -0
- package/lib/types/config.d.ts.map +0 -0
- package/lib/types/config.js +0 -0
- package/lib/types/config.js.map +0 -0
- package/lib/types/eval/assert.d.ts +0 -0
- package/lib/types/eval/assert.d.ts.map +0 -0
- package/lib/types/eval/assert.js +0 -0
- package/lib/types/eval/assert.js.map +0 -0
- package/lib/types/eval/cli.d.ts +0 -0
- package/lib/types/eval/cli.d.ts.map +0 -0
- package/lib/types/eval/cli.js +0 -0
- package/lib/types/eval/cli.js.map +0 -0
- package/lib/types/eval/diff.d.ts +0 -0
- package/lib/types/eval/diff.d.ts.map +0 -0
- package/lib/types/eval/diff.js +0 -0
- package/lib/types/eval/diff.js.map +0 -0
- package/lib/types/eval/dsl.d.ts +0 -0
- package/lib/types/eval/dsl.d.ts.map +0 -0
- package/lib/types/eval/dsl.js +0 -0
- package/lib/types/eval/dsl.js.map +0 -0
- package/lib/types/eval/index.d.ts +0 -0
- package/lib/types/eval/index.d.ts.map +0 -0
- package/lib/types/eval/index.js +0 -0
- package/lib/types/eval/index.js.map +0 -0
- package/lib/types/eval/report.d.ts +0 -0
- package/lib/types/eval/report.d.ts.map +0 -0
- package/lib/types/eval/report.js +0 -0
- package/lib/types/eval/report.js.map +0 -0
- package/lib/types/eval/review.d.ts +0 -0
- package/lib/types/eval/review.d.ts.map +0 -0
- package/lib/types/eval/review.js +0 -0
- package/lib/types/eval/review.js.map +0 -0
- package/lib/types/eval/runner.d.ts +0 -0
- package/lib/types/eval/runner.d.ts.map +0 -0
- package/lib/types/eval/runner.js +0 -0
- package/lib/types/eval/runner.js.map +0 -0
- package/lib/types/eval/stress.d.ts +0 -0
- package/lib/types/eval/stress.d.ts.map +0 -0
- package/lib/types/eval/stress.js +0 -0
- package/lib/types/eval/stress.js.map +0 -0
- package/lib/types/eval/trace.d.ts +0 -0
- package/lib/types/eval/trace.d.ts.map +0 -0
- package/lib/types/eval/trace.js +0 -0
- package/lib/types/eval/trace.js.map +0 -0
- package/lib/types/events.d.ts +0 -0
- package/lib/types/events.d.ts.map +0 -0
- package/lib/types/events.js +0 -0
- package/lib/types/events.js.map +0 -0
- package/lib/types/index.d.ts +0 -0
- package/lib/types/index.d.ts.map +0 -0
- package/lib/types/index.js +0 -0
- package/lib/types/index.js.map +0 -0
- package/lib/types/invariant.d.ts +0 -0
- package/lib/types/invariant.d.ts.map +0 -0
- package/lib/types/invariant.js +0 -0
- package/lib/types/invariant.js.map +0 -0
- package/lib/types/isolation.d.ts +0 -0
- package/lib/types/isolation.d.ts.map +0 -0
- package/lib/types/isolation.js +0 -0
- package/lib/types/isolation.js.map +0 -0
- package/lib/types/mcp/index.d.ts +0 -0
- package/lib/types/mcp/index.d.ts.map +0 -0
- package/lib/types/mcp/index.js +0 -0
- package/lib/types/mcp/index.js.map +0 -0
- package/lib/types/mcp/server.d.ts +0 -0
- package/lib/types/mcp/server.d.ts.map +0 -0
- package/lib/types/mcp/server.js +0 -0
- package/lib/types/mcp/server.js.map +0 -0
- package/lib/types/mcp/standalone.d.ts +0 -0
- package/lib/types/mcp/standalone.d.ts.map +0 -0
- package/lib/types/mcp/standalone.js +0 -0
- package/lib/types/mcp/standalone.js.map +0 -0
- package/lib/types/message-source.d.ts +0 -0
- package/lib/types/message-source.d.ts.map +0 -0
- package/lib/types/message-source.js +0 -0
- package/lib/types/message-source.js.map +0 -0
- package/lib/types/messages.d.ts +0 -0
- package/lib/types/messages.d.ts.map +0 -0
- package/lib/types/messages.js +0 -0
- package/lib/types/messages.js.map +0 -0
- package/lib/types/projection-types.d.ts +9 -1
- package/lib/types/projection-types.d.ts.map +1 -1
- package/lib/types/projection-types.js +0 -0
- package/lib/types/projection-types.js.map +0 -0
- package/lib/types/projection.d.ts +22 -2
- package/lib/types/projection.d.ts.map +1 -1
- package/lib/types/projection.js +27 -7
- package/lib/types/projection.js.map +1 -1
- package/lib/types/review.d.ts +12 -4
- package/lib/types/review.d.ts.map +1 -1
- package/lib/types/review.js +51 -6
- package/lib/types/review.js.map +1 -1
- package/lib/types/runtime.d.ts +40 -1
- package/lib/types/runtime.d.ts.map +1 -1
- package/lib/types/runtime.js +134 -4
- package/lib/types/runtime.js.map +1 -1
- package/lib/types/session-events.d.ts +0 -0
- package/lib/types/session-events.d.ts.map +0 -0
- package/lib/types/session-events.js +0 -0
- package/lib/types/session-events.js.map +0 -0
- package/lib/types/session-message.d.ts +0 -0
- package/lib/types/session-message.d.ts.map +0 -0
- package/lib/types/session-message.js +0 -0
- package/lib/types/session-message.js.map +0 -0
- package/package.json +4 -4
- package/src/audit.ts +0 -0
- package/src/cache.ts +0 -0
- package/src/call-id.ts +0 -0
- package/src/client/ReviewPanel.tsx +0 -0
- package/src/client/index.ts +0 -0
- package/src/client/locales.ts +0 -0
- package/src/client/present.ts +0 -0
- package/src/client/styles.ts +0 -0
- package/src/config.ts +0 -0
- package/src/eval/assert.ts +0 -0
- package/src/eval/cli.ts +0 -0
- package/src/eval/diff.ts +0 -0
- package/src/eval/dsl.ts +0 -0
- package/src/eval/index.ts +0 -0
- package/src/eval/report.ts +0 -0
- package/src/eval/review.ts +0 -0
- package/src/eval/runner.ts +0 -0
- package/src/eval/stress.ts +0 -0
- package/src/eval/trace.ts +0 -0
- package/src/events.ts +0 -0
- package/src/index.ts +0 -0
- package/src/invariant.ts +0 -0
- package/src/isolation.ts +0 -0
- package/src/mcp/index.ts +0 -0
- package/src/mcp/server.ts +0 -0
- package/src/mcp/standalone.ts +0 -0
- package/src/message-source.ts +0 -0
- package/src/messages.ts +0 -0
- package/src/projection-types.ts +9 -1
- package/src/projection.ts +30 -7
- package/src/review.ts +53 -6
- package/src/runtime.ts +154 -4
- package/src/session-events.ts +0 -0
- package/src/session-message.ts +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.13.4] - 2026-10-18
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- Move `tsdown`/`typescript` (and `@types/react` where present) from runtime dependencies to devDependencies. Git installs still build: pnpm installs devDependencies for a git dependency and runs `prepare`; npm tarballs ship the built `lib/`. The runtime tree no longer carries the build chain.
|
|
8
|
+
|
|
3
9
|
## [0.13.3] - 2026-10-18
|
|
4
10
|
|
|
5
11
|
### Fixed
|
|
@@ -40,6 +46,18 @@
|
|
|
40
46
|
|
|
41
47
|
All notable changes to `dsh-auto-review` are documented here. The repo is pre-release; versions follow the DeepSeek Harness `0.1.0-rc.x` target runtime and bump on every behavior change.
|
|
42
48
|
|
|
49
|
+
## [0.13.5] - 2026-10-18
|
|
50
|
+
|
|
51
|
+
### Fixed
|
|
52
|
+
|
|
53
|
+
- **A secret spelled inside a free-form string argument reached the reviewer verbatim.** `sanitizeArguments` redacts by object KEY, so it sees `{"apiKey": "..."}` but not `deploy --token sk-live-123` or `curl -H "Authorization: Bearer …"` — which is how a secret usually appears in a shell call. Both rendering paths are covered now: the pending call's own preview (`sanitizeArguments`) and the compact transcript line (`contextLine`), the second being the one that reached the reviewer intact. Known limit, pinned by a test: a bare secret with no key adjacent to it (`echo sk-live-123`) stays visible — this is a heuristic, not a secret scanner.
|
|
54
|
+
- **Truncated evidence read as complete evidence.** The pending call's preview is cut at `reasonMaxChars` (default 2000) behind a bare `…`, so a reviewer shown only the benign head of a long call could allow it with the decisive arguments cut off. A truncated preview is now labelled `TRUNCATED`, states the exact counts (`only the first <n> of <m> characters are shown; the remainder is NOT visible to you`), and the verdict rules gained the matching `- truncated evidence counts as insufficient: when the arguments are marked TRUNCATED, DENY.`
|
|
55
|
+
- **The review panel showed all zeros on every host that declines the audit events.** The `autoReview` projection folds the plugin's own `autoReview/*` session events, and on a host whose `Session.append` cannot stamp the `ignorable` marker none of them is ever written — which is every published line — so the panel folded an empty log while the in-memory mirror held the real numbers. The persisted state now carries the owning `sessionId` (state version 4) and the runtime registers a live wire view that serves the switch state and the session's activity from the mirror; on a marker-aware host the pure fold stays authoritative and is returned untouched.
|
|
56
|
+
|
|
57
|
+
### Added
|
|
58
|
+
|
|
59
|
+
- `test/hardening.spec.ts` — a regression case per fix above, including the documented bare-secret limit. `test/projection.spec.ts` covers the state-version-4 contract and the substituted panel view.
|
|
60
|
+
|
|
43
61
|
## [0.12.17] - 2026-10-10
|
|
44
62
|
|
|
45
63
|
### Fixed
|
package/LICENSE
CHANGED
|
File without changes
|
package/README-es.md
CHANGED
|
@@ -46,7 +46,7 @@ dsh plugin --profile <name> add dsh-auto-review
|
|
|
46
46
|
|
|
47
47
|
Este plugin forma parte de la [familia de plugins DSH](https://github.com/PerryLink) (más de 40, todos Apache-2.0). Si te resulta útil, **dale una estrella**: no desbloquea nada, pero ayuda a que la siguiente persona lo encuentre antes.
|
|
48
48
|
|
|
49
|
-
*English:* part of a
|
|
49
|
+
*English:* part of a 95 plugin family for DeepSeek Harness. If it is useful, **a star helps the next person find it** — nothing is gated behind it.
|
|
50
50
|
|
|
51
51
|
## What is dsh-auto-review?
|
|
52
52
|
|
|
@@ -64,7 +64,7 @@ Cuando una acción cruza el límite del sandbox, un segundo modelo lee la eviden
|
|
|
64
64
|
|
|
65
65
|
| Superficie | Estado |
|
|
66
66
|
|---|---|
|
|
67
|
-
| Harness | DeepSeek Harness `dsh-v0.2.1-
|
|
67
|
+
| Harness | DeepSeek Harness `dsh-v0.2.1-rc.2` (verificado 2026-10-18): `engines.dsh >=0.2.1-0 <0.3.0`; las rutas de compatibilidad P0 tienen pruebas de regresión. |
|
|
68
68
|
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
69
69
|
| Plataformas | Todas (answerer de host; panel web opcional mediante la capacidad de proyección de sesión) |
|
|
70
70
|
| Modelo | Cualquiera (el revisor hereda la ruta del agente de sesión; `reviewerModel` la reemplaza) |
|
|
@@ -360,7 +360,7 @@ El servidor es de solo lectura y determinista: sin red, sin modelo, sin escritur
|
|
|
360
360
|
- **Cierre en fallo.** Cada camino anómalo (proveedor ausente, carencias de capacidad, rechazo al iniciar, timeout, razón de parada no `completed`, veredicto ausente/malformado, fallo de correlación de auditoría) se resuelve con `fallbackPolicy`, por defecto `rejected` — y el rechazo devuelve una razón auditable al modelo. `allow-once` concede incondicionalmente; existe solo para despliegues desatendidos cuyo administrador acepta ese riesgo.
|
|
361
361
|
- **Revisor de solo lectura.** La lista blanca `toolFilter` del revisor (`read`/`glob`/`grep`) no puede escribir, editar, ejecutar bash, acceder a la red ni delegar (`maxDepth` = su propia profundidad). Su registro de sesión se persiste y es auditable.
|
|
362
362
|
- **Revisor aislado del contexto.** Los pasos del hijo revisor se filtran en la costura oficial `agent/pre-step`: solo entran su propio prompt y los resultados de sus propias herramientas de solo lectura. Los archivos de instrucciones del espacio de trabajo (`AGENTS.md` / `CLAUDE.md`) y los plugins que inyectan contexto se descartan en esa costura; **la instantánea de contexto de ejecución del propio harness se re-admite después de `agent/pre-step`, el firewall no la elimina y el revisor la ve.** Esto vale con CUALQUIERA de los proveedores de subagente — esos productores inyectan de nuevo en cada sesión de agente, así que lo que los cierra es el filtro y no la elección de proveedor. La lista blanca es por ORIGEN del mensaje, así que un plugin que declare un origen nuevo también se descarta.
|
|
363
|
-
- **Los argumentos sensibles se redactan** (coincidencia por nombre de clave: `token`, `password`, `api_key`, `Authorization`, credenciales, claves privadas …) antes de entrar en el prompt del revisor
|
|
363
|
+
- **Los argumentos sensibles se redactan** (coincidencia por nombre de clave: `token`, `password`, `api_key`, `Authorization`, credenciales, claves privadas …) antes de entrar en el prompt del revisor, y un argumento de texto libre pasa además por una heurística en línea que enmascara las formas `KEY=VALUE` / `KEY: VALUE` / `--flag VALUE` y los esquemas `Bearer`/`Basic` — que es como suele aparecer un secreto en una llamada de shell. El plugin nunca ejecuta los argumentos revisados. Ambas pasadas son de mejor esfuerzo, no un escáner de secretos: un secreto sin clave al lado sigue siendo visible, así que no revises con IA herramientas cuyos valores de argumento no te puedas permitir mostrar a un modelo.
|
|
364
364
|
- **Las desactivaciones duras se explican a sí mismas.** Una herramienta o regla de riesgo `never` rechaza de forma determinista Y registra un evento solo-registro `autoReview/rejection`, y luego inyecta un marcador `[auto-review-never]` en el resultado de la herramienta denegada — el modelo aprende que la acción está duramente desactivada en lugar de reintentarla (verificado por invariant: marcador ⟺ evento).
|
|
365
365
|
- **Disyuntor de rechazos.** Una racha de denegaciones en un turno dispara el disyuntor (`consecutiveDenies` / `windowDenies` dentro de `windowSize`), registrada como un evento solo-registro `autoReview/circuit`; las solicitudes posteriores siguen su `action` (`delegate` / `reject` / `abort-turn`).
|
|
366
366
|
- **El contexto del revisor es transcripción ya presentada.** `contextBudget` alimenta al revisor con contenido de sesión ya presentado. Con el modelo revisor de la misma ruta por defecto, ese contenido permanece dentro de un proveedor; configura `reviewerModel` a un proveedor diferente solo si aceptas presentarle esa transcripción.
|
|
@@ -434,7 +434,7 @@ Este plugin **no interfiere** con otros plugins, incluidos los de más estrellas
|
|
|
434
434
|
|
|
435
435
|
Evidencia estática: `dsh-plugin-doctor` K10–K13 dan `pass` en todas las comprobaciones de este repositorio.
|
|
436
436
|
|
|
437
|
-
##
|
|
437
|
+
## PerryLink DSH Plugin Family
|
|
438
438
|
|
|
439
439
|
Este proyecto es uno de los **87 plugins activamente mantenidos** de DeepSeek Harness de [PerryLink](https://github.com/PerryLink). El registro familiar tiene **95** plugins — **5 congelados**, **3 retirados** — y permanece plegado abajo para que cada README conserve una primera pantalla corta. Expándelo para ver cada fila, con el motivo en la columna Estado.
|
|
440
440
|
|
|
@@ -541,4 +541,6 @@ Este proyecto es uno de los **87 plugins activamente mantenidos** de DeepSeek Ha
|
|
|
541
541
|
|
|
542
542
|
</details>
|
|
543
543
|
|
|
544
|
-
</details>
|
|
544
|
+
</details>
|
|
545
|
+
|
|
546
|
+
</details>
|
package/README-hi.md
CHANGED
|
@@ -44,9 +44,9 @@ dsh plugin --profile <name> add dsh-auto-review
|
|
|
44
44
|
|
|
45
45
|
## ⭐ 如果它帮到了你
|
|
46
46
|
|
|
47
|
-
यह प्लगइन [DSH प्लगइन परिवार](https://github.com/PerryLink) का हिस्सा है (
|
|
47
|
+
यह प्लगइन [DSH प्लगइन परिवार](https://github.com/PerryLink) का हिस्सा है (95 प्लगइन, सभी Apache-2.0)। अगर यह उपयोगी लगे, तो **एक स्टार दें** — इससे कोई सुविधा अनलॉक नहीं होती, पर अगला व्यक्ति इसे खोज में आसानी से पा लेता है।
|
|
48
48
|
|
|
49
|
-
*English:* part of a
|
|
49
|
+
*English:* part of a 95 plugin family for DeepSeek Harness. If it is useful, **a star helps the next person find it** — nothing is gated behind it.
|
|
50
50
|
|
|
51
51
|
## What is dsh-auto-review?
|
|
52
52
|
|
|
@@ -64,7 +64,7 @@ DeepSeek Harness के लिए द्वितीय-मॉडल AI अन
|
|
|
64
64
|
|
|
65
65
|
| सतह | स्थिति |
|
|
66
66
|
|---|---|
|
|
67
|
-
|
|
|
67
|
+
| हारनेस | DeepSeek Harness `dsh-v0.2.1-rc.2` (2026-10-18 सत्यापित): `engines.dsh >=0.2.1-0 <0.3.0`; P0 संगतता पथ के रिग्रेशन परीक्षण हैं। |
|
|
68
68
|
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
69
69
|
| प्लेटफ़ॉर्म | सभी (होस्ट answerer; सत्र-प्रोजेक्शन क्षमता के ज़रिए वैकल्पिक वेब समीक्षा पैनल) |
|
|
70
70
|
| मॉडल | कोई भी (समीक्षक सत्र एजेंट का मार्ग विरासत में लेता है; `reviewerModel` उसे बदल देता है) |
|
|
@@ -283,7 +283,7 @@ dsh-eval eval/cases --model deepseek-flash --timeout-ms 240000 --out .eval-repor
|
|
|
283
283
|
|
|
284
284
|
स्थैतिक प्रमाण: इस रिपॉज़िटरी पर `dsh-plugin-doctor` के K10–K13 सभी `pass` हैं।
|
|
285
285
|
|
|
286
|
-
## PerryLink DSH
|
|
286
|
+
## PerryLink DSH Plugin Family
|
|
287
287
|
|
|
288
288
|
यह प्रोजेक्ट [PerryLink](https://github.com/PerryLink) के **87 सक्रिय रूप से अनुरक्षित** DeepSeek Harness प्लगइन में से एक है। पूरा परिवार **95** प्लगइन है — **5 फ़्रोज़न**, **3 सेवानिवृत्त** — और नीचे संक्षिप्त रखा गया है ताकि हर README की पहली स्क्रीन छोटी रहे। हर पंक्ति देखने के लिए इसे खोलें; कारण स्थिति कॉलम में है।
|
|
289
289
|
|
|
@@ -390,7 +390,11 @@ dsh-eval eval/cases --model deepseek-flash --timeout-ms 240000 --out .eval-repor
|
|
|
390
390
|
|
|
391
391
|
</details>
|
|
392
392
|
|
|
393
|
-
</details
|
|
393
|
+
</details>
|
|
394
|
+
|
|
395
|
+
</details>
|
|
396
|
+
|
|
397
|
+
## MCP सर्वर (स्टैंडअलोन)
|
|
394
398
|
|
|
395
399
|
`dsh-auto-review` एक stdio **MCP सर्वर** (`dsh-auto-review-mcp`) भी देता है ताकि बाहरी MCP क्लाइंट (Claude, Codex, …) बिना harness के एक निर्धारक समीक्षा पथ का उपयोग कर सकें। यह newline-delimited JSON (NDJSON) पर JSON-RPC 2.0 बोलता है — प्रति पंक्ति एक JSON ऑब्जेक्ट, कोई `Content-Length` फ़्रेमिंग नहीं।
|
|
396
400
|
|
|
@@ -445,7 +449,7 @@ Claude Desktop (`claude_desktop_config.json`) उदाहरण:
|
|
|
445
449
|
- **विफल-बंद।** हर असामान्य मार्ग (प्रदाता अनुपस्थित, क्षमता अंतराल, प्रारंभ अस्वीकृति, टाइमआउट, गैर-`completed` स्टॉप कारण, अनुपस्थित/विकृत निर्णय, ऑडिट-सहसंबंध विफलता) `fallbackPolicy` से हल होता है, डिफ़ॉल्ट `rejected` — और अस्वीकृति मॉडल को एक ऑडिट-योग्य कारण लौटाती है। `allow-once` बिना शर्त अनुमति देता है; यह केवल उन अप्रबंधित परिनियोजनों के लिए है जिनका व्यवस्थापक उस जोखिम को स्वीकार करता है।
|
|
446
450
|
- **केवल-पढ़ने वाला समीक्षक।** समीक्षक की `toolFilter` अनुमति-सूची (`read`/`glob`/`grep`) लिख, संपादित, bash चला, नेटवर्क उपयोग या प्रत्यायोजन नहीं कर सकती (`maxDepth` = उसकी अपनी गहराई)। उसका सत्र लॉग स्थायी और ऑडिट-योग्य है।
|
|
447
451
|
- **संदर्भ-पृथक समीक्षक।** समीक्षक चाइल्ड के हर चरण को आधिकारिक `agent/pre-step` सीम पर छाना जाता है: केवल उसका अपना प्रॉम्प्ट और उसके अपने केवल-पढ़ने वाले टूल परिणाम ही भीतर आते हैं। वर्कस्पेस निर्देश फ़ाइलें (`AGENTS.md` / `CLAUDE.md`), हार्नेस का रनटाइम-संदर्भ स्नैपशॉट और संदर्भ इंजेक्ट करने वाला कोई भी प्लगइन लूप द्वारा जोड़े जाने से पहले हटा दिए जाते हैं, इसलिए रिपॉज़िटरी-नियंत्रित पाठ कभी उस घटक तक नहीं पहुँचता जो कॉल की अनुमति तय करता है। यह किसी भी subagent प्रदाता के साथ लागू होता है — ये उत्पादक हर नए एजेंट सत्र में नए सिरे से इंजेक्ट करते हैं, इसलिए इन्हें बंद करने वाला यही फ़िल्टर है, प्रदाता का चुनाव नहीं। अनुमति-सूची संदेश के स्रोत पर आधारित है, इसलिए नया स्रोत घोषित करने वाला प्लगइन भी हटा दिया जाता है।
|
|
448
|
-
- **संवेदनशील तर्क संशोधित किए जाते हैं** (कुंजी-नाम मिलान: `token`, `password`, `api_key`, `Authorization`, क्रेडेंशियल, निजी कुंजियाँ …) समीक्षक प्रॉम्प्ट में जाने से
|
|
452
|
+
- **संवेदनशील तर्क संशोधित किए जाते हैं** (कुंजी-नाम मिलान: `token`, `password`, `api_key`, `Authorization`, क्रेडेंशियल, निजी कुंजियाँ …) समीक्षक प्रॉम्प्ट में जाने से पहले, और एक मुक्त-रूप स्ट्रिंग तर्क पर अतिरिक्त रूप से एक इनलाइन अनुमान लगता है जो `KEY=VALUE` / `KEY: VALUE` / `--flag VALUE` रूपों तथा `Bearer`/`Basic` स्कीमों को छिपा देता है — शेल कॉल में सीक्रेट प्रायः इसी तरह दिखता है। प्लगइन समीक्षित तर्कों को कभी निष्पादित नहीं करता। दोनों पास सर्वोत्तम-प्रयास हैं, कोई सीक्रेट स्कैनर नहीं: बिना कुंजी वाला नंगा सीक्रेट दिखता रहता है, इसलिए उन टूल की AI समीक्षा न करें जिनके तर्क मान आप किसी मॉडल को दिखाने का जोखिम नहीं उठा सकते।
|
|
449
453
|
- **कठोर अक्षमताएँ स्वयं को समझाती हैं।** एक `never` टूल या जोखिम नियम निर्धारक रूप से अस्वीकार करता है और एक केवल-लॉग `autoReview/rejection` घटना दर्ज करता है, फिर अस्वीकृत टूल परिणाम में एक `[auto-review-never]` मार्कर इंजेक्ट करता है — मॉडल सीखता है कि क्रिया कठोर रूप से अक्षम है बजाय उसे पुनः प्रयास करने के (invariant-जाँचा गया: मार्कर ⟺ घटना)।
|
|
450
454
|
- **अस्वीकृति सर्किट ब्रेकर।** एक टर्न में अस्वीकृतियों की एक शृंखला ब्रेकर को ट्रिप करती है (`windowSize` के भीतर `consecutiveDenies` / `windowDenies`), जो एक केवल-लॉग `autoReview/circuit` घटना के रूप में दर्ज होती है; बाद के अनुरोध उसकी `action` (`delegate` / `reject` / `abort-turn`) का पालन करते हैं।
|
|
451
455
|
- **समीक्षक संदर्भ प्रस्तुत ट्रांसक्रिप्ट है।** `contextBudget` समीक्षक को पहले से प्रस्तुत सत्र सामग्री खिलाता है। डिफ़ॉल्ट समान-मार्ग समीक्षक मॉडल के साथ वह सामग्री एक ही प्रदाता के भीतर रहती है; `reviewerModel` को किसी भिन्न प्रदाता पर तभी कॉन्फ़िगर करें जब आप उस ट्रांसक्रिप्ट को उसे प्रस्तुत करना स्वीकार करते हों।
|
package/README-pt.md
CHANGED
|
@@ -38,7 +38,7 @@ dsh plugin --profile <name> add dsh-auto-review
|
|
|
38
38
|
|
|
39
39
|
Este plugin faz parte da [família de plugins DSH](https://github.com/PerryLink) (mais de 40, todos Apache-2.0). Se for útil, **deixe uma estrela**: não desbloqueia nada, mas ajuda a próxima pessoa a encontrá-lo.
|
|
40
40
|
|
|
41
|
-
*English:* part of a
|
|
41
|
+
*English:* part of a 95 plugin family for DeepSeek Harness. If it is useful, **a star helps the next person find it** — nothing is gated behind it.
|
|
42
42
|
|
|
43
43
|
## What is dsh-auto-review?
|
|
44
44
|
|
|
@@ -56,7 +56,7 @@ Quando uma ação cruza a fronteira do sandbox, um segundo modelo lê as evidên
|
|
|
56
56
|
|
|
57
57
|
| Superfície | Status |
|
|
58
58
|
|---|---|
|
|
59
|
-
| Harness | DeepSeek Harness `dsh-v0.2.1-
|
|
59
|
+
| Harness | DeepSeek Harness `dsh-v0.2.1-rc.2` (verificado 2026-10-18): `engines.dsh >=0.2.1-0 <0.3.0`; os caminhos de compatibilidade P0 têm testes de regressão. |
|
|
60
60
|
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
61
61
|
| Plataformas | Todas (answerer de host; painel web opcional via capacidade de projeção de sessão) |
|
|
62
62
|
| Modelo | Qualquer (o revisor herda a rota do agente da sessão; `reviewerModel` sobrescreve) |
|
|
@@ -360,7 +360,7 @@ O servidor é somente-leitura e determinista: sem rede, sem modelo, sem gravaç
|
|
|
360
360
|
- **Falha fechada.** Todo caminho anômalo (provedor ausente, lacunas de capacidade, rejeição ao iniciar, timeout, razão de parada não `completed`, veredito ausente/malformado, falha de correlação de auditoria) se resolve via `fallbackPolicy`, padrão `rejected` — e a rejeição devolve uma razão auditável ao modelo. `allow-once` concede incondicionalmente; existe apenas para implantações desatendidas cujo administrador aceita esse risco.
|
|
361
361
|
- **Revisor somente leitura.** A lista de permissões `toolFilter` do revisor (`read`/`glob`/`grep`) não pode escrever, editar, executar bash, acessar a rede nem delegar (`maxDepth` = sua própria profundidade). Seu log de sessão é persistido e auditável.
|
|
362
362
|
- **Revisor isolado do contexto.** Os passos do filho revisor são filtrados na costura oficial `agent/pre-step`: apenas o seu próprio prompt e os resultados das suas próprias ferramentas somente leitura entram. Arquivos de instruções do workspace (`AGENTS.md` / `CLAUDE.md`) e plugins que injetam contexto são descartados nessa costura; **o instantâneo de contexto de execução do próprio harness é readmitido após `agent/pre-step`, o firewall não o remove e o revisor o vê.** Isso vale sob QUALQUER provedor de subagente — esses produtores injetam de novo em cada sessão de agente, então o que os fecha é o filtro, não a escolha do provedor. A lista de permissões é por ORIGEM da mensagem, então um plugin que declare uma origem nova também é descartado.
|
|
363
|
-
- **Argumentos sensíveis são redigidos** (correspondência por nome de chave: `token`, `password`, `api_key`, `Authorization`, credenciais, chaves privadas …) antes de entrar no prompt do revisor
|
|
363
|
+
- **Argumentos sensíveis são redigidos** (correspondência por nome de chave: `token`, `password`, `api_key`, `Authorization`, credenciais, chaves privadas …) antes de entrar no prompt do revisor, e um argumento de texto livre passa ainda por uma heurística em linha que mascara as formas `KEY=VALUE` / `KEY: VALUE` / `--flag VALUE` e os esquemas `Bearer`/`Basic` — que é como um segredo costuma aparecer numa chamada de shell. O plugin nunca executa os argumentos revisados. Ambas as passadas são de melhor esforço, não um scanner de segredos: um segredo sem chave ao lado continua visível, então não revise com IA ferramentas cujos valores de argumento você não pode se dar ao luxo de mostrar a um modelo.
|
|
364
364
|
- **Desativações duras se explicam.** Uma ferramenta ou regra de risco `never` rejeita de forma determinística E registra um evento somente-log `autoReview/rejection`, e então injeta um marcador `[auto-review-never]` no resultado da ferramenta negada — o modelo aprende que a ação está duramente desativada em vez de tentar novamente (verificado por invariant: marcador ⟺ evento).
|
|
365
365
|
- **Disjuntor de rejeições.** Uma sequência de negações em um turno dispara o disjuntor (`consecutiveDenies` / `windowDenies` dentro de `windowSize`), registrada como um evento somente-log `autoReview/circuit`; solicitações posteriores seguem sua `action` (`delegate` / `reject` / `abort-turn`).
|
|
366
366
|
- **O contexto do revisor é transcrição apresentada.** `contextBudget` alimenta o revisor com conteúdo de sessão já apresentado. Com o modelo revisor da mesma rota por padrão, esse conteúdo permanece dentro de um provedor; configure `reviewerModel` para um provedor diferente apenas se você aceitar apresentar essa transcrição a ele.
|
|
@@ -430,7 +430,7 @@ Este plugin **não interfere** em outros plugins, incluindo os de mais estrelas:
|
|
|
430
430
|
|
|
431
431
|
Evidência estática: `dsh-plugin-doctor` K10–K13 retornam `pass` em todas as verificações deste repositório.
|
|
432
432
|
|
|
433
|
-
##
|
|
433
|
+
## PerryLink DSH Plugin Family
|
|
434
434
|
|
|
435
435
|
Este projeto é um dos **87 plugins ativamente mantidos** do DeepSeek Harness da [PerryLink](https://github.com/PerryLink). O registro da família tem **95** plugins — **5 congelados**, **3 retirados** — e fica recolhido abaixo para que cada README mantenha uma primeira tela curta. Expanda para ver cada linha, com o motivo na coluna Status.
|
|
436
436
|
|
|
@@ -537,4 +537,6 @@ Este projeto é um dos **87 plugins ativamente mantidos** do DeepSeek Harness da
|
|
|
537
537
|
|
|
538
538
|
</details>
|
|
539
539
|
|
|
540
|
-
</details>
|
|
540
|
+
</details>
|
|
541
|
+
|
|
542
|
+
</details>
|
package/README-zh.md
CHANGED
|
@@ -36,9 +36,9 @@ dsh plugin --profile <name> add dsh-auto-review
|
|
|
36
36
|
<!-- star-cta -->
|
|
37
37
|
## ⭐ 如果它帮到了你
|
|
38
38
|
|
|
39
|
-
这个插件是 [DSH 插件家族](https://github.com/PerryLink)的一员(
|
|
39
|
+
这个插件是 [DSH 插件家族](https://github.com/PerryLink)的一员(95 个,全部 Apache-2.0)。如果你在用,**给个 star** —— 它不会解锁任何功能,但会让下一个人在搜索里更容易找到它。
|
|
40
40
|
|
|
41
|
-
*English:* part of a
|
|
41
|
+
*English:* part of a 95 plugin family for DeepSeek Harness. If it is useful, **a star helps the next person find it** — nothing is gated behind it.
|
|
42
42
|
|
|
43
43
|
## What is dsh-auto-review?
|
|
44
44
|
|
|
@@ -56,7 +56,7 @@ DeepSeek Harness 的第二模型 AI 审批 —— 一个只读审查子代理在
|
|
|
56
56
|
|
|
57
57
|
| 方面 | 状态 |
|
|
58
58
|
|---|---|
|
|
59
|
-
|
|
|
59
|
+
| 宿主 | DeepSeek Harness `dsh-v0.2.1-rc.2`(2026-10-18 验证):`engines.dsh >=0.2.1-0 <0.3.0`;P0 兼容路径已有回归测试。 |
|
|
60
60
|
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
61
61
|
| 平台 | 全部(宿主 answerer;可选 Web 审查面板,依赖会话投影能力) |
|
|
62
62
|
| 模型 | 任意(审查器默认继承会话代理的路由;`reviewerModel` 可覆盖) |
|
|
@@ -360,7 +360,7 @@ Claude Desktop(`claude_desktop_config.json`)配置示例:
|
|
|
360
360
|
- **失败关闭。** 每条异常路径(provider 缺失、能力缺口、启动拒绝、超时、非 `completed` 停止原因、缺失/畸形裁决、审计关联失败)都经由 `fallbackPolicy` 处理,默认 `rejected` —— 且拒绝会向模型反馈一条可审计的理由。`allow-once` 是无条件放行;它只用于接受该风险的无值守部署。
|
|
361
361
|
- **只读审查器。** 审查器的 `toolFilter` 白名单(`read`/`glob`/`grep`)无法写入、编辑、运行 bash、访问网络或委派(`maxDepth` = 自身深度)。其会话日志被持久化且可审计。
|
|
362
362
|
- **上下文隔离的审查器。** 审查器子代理的每一步都在官方 `agent/pre-step` 接缝上被过滤:只有它自己的提示词与它自己的只读工具结果能够进入。工作区指令文件(`AGENTS.md` / `CLAUDE.md`)与注入上下文的插件会在该接缝处被丢弃;**宿主自己的运行时上下文快照会在 `agent/pre-step` 之后被循环重新接纳,防火墙无法移除它,因此审查器能看到该快照。**这在任一 subagent provider 下都成立——这些注入方会向任何新建的 agent 会话重新注入,因此关闭它们的是这道过滤,而不是 provider 的选择。白名单按消息来源判定,所以声明了新来源类型的插件同样会被丢弃。
|
|
363
|
-
- **敏感参数会被脱敏**(按键名匹配:`token`、`password`、`api_key`、`Authorization
|
|
363
|
+
- **敏感参数会被脱敏**(按键名匹配:`token`、`password`、`api_key`、`Authorization`、凭据、私钥……)后才进入审查器提示词;自由字符串参数还会额外经过一层内联启发式,掩掉 `KEY=VALUE` / `KEY: VALUE` / `--flag VALUE` 这几种写法以及 `Bearer`/`Basic` 方案 —— 而命令行里的密钥通常正是这样出现的。该插件绝不会执行被审查的参数。两层都是尽力而为,不是密钥扫描器:旁边没有键名的裸密钥仍然可见,所以不要把参数值经不起展示给模型的工具交给 AI 审查。
|
|
364
364
|
- **硬禁用会自我解释。** `never` 工具或风险规则确定性拒绝,并记录一条仅日志的 `autoReview/rejection` 事件,然后把 `[auto-review-never]` 标记注入被拒绝的工具结果 —— 模型学会该操作已被硬禁用,而不是重试(invariant 校验:标记 ⟺ 事件)。
|
|
365
365
|
- **拒绝熔断器。** 一轮内连续拒绝会触发熔断(`consecutiveDenies` / 窗口内的 `windowDenies`),记录为仅日志的 `autoReview/circuit` 事件;后续请求按其 `action`(`delegate` / `reject` / `abort-turn`)处理。
|
|
366
366
|
- **审查上下文是已呈现的 transcript。** `contextBudget` 把已呈现的会话内容喂给审查器。默认同路由审查模型时该内容停留在单一 provider 内;仅当你接受把该 transcript 呈现给另一 provider 时,才把 `reviewerModel` 配成别的 provider。
|
|
@@ -425,7 +425,7 @@ pnpm pack # 发布产物
|
|
|
425
425
|
|
|
426
426
|
静态证据:`dsh-plugin-doctor` 的 K10–K13 在本仓全部为 `pass`。
|
|
427
427
|
|
|
428
|
-
## PerryLink DSH
|
|
428
|
+
## PerryLink DSH Plugin Family
|
|
429
429
|
|
|
430
430
|
本项目是 [PerryLink](https://github.com/PerryLink) 维护的 DeepSeek Harness 插件家族成员:**87 个活跃维护**,名册共 **95** 个,其中 **5 个已冻结**、**3 个已退役**。完整名单默认折叠,避免每个 README 的首屏被长表淹没;点击展开可查看每一行,原因见「状态」列。
|
|
431
431
|
|
|
@@ -534,6 +534,8 @@ pnpm pack # 发布产物
|
|
|
534
534
|
|
|
535
535
|
</details>
|
|
536
536
|
|
|
537
|
+
</details>
|
|
538
|
+
|
|
537
539
|
### 从 DSH Desktop 市场安装
|
|
538
540
|
|
|
539
541
|
所有 PerryLink 插件均可在 DSH Desktop 内置市场中浏览:**市场 → 来源 → 添加来源 → 粘贴** `https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json` **→ 选中**。安装仍需通过市场的 npm 身份校验与你的确认。
|
package/README.md
CHANGED
|
@@ -46,9 +46,9 @@ dsh plugin --profile <name> add dsh-auto-review
|
|
|
46
46
|
|
|
47
47
|
## ⭐ 如果它帮到了你
|
|
48
48
|
|
|
49
|
-
这个插件是 [DSH 插件家族](https://github.com/PerryLink)的一员(
|
|
49
|
+
这个插件是 [DSH 插件家族](https://github.com/PerryLink)的一员(95 个,全部 Apache-2.0)。如果你在用,**给个 star** —— 它不会解锁任何功能,但会让下一个人在搜索里更容易找到它。
|
|
50
50
|
|
|
51
|
-
*English:* part of a
|
|
51
|
+
*English:* part of a 95 plugin family for DeepSeek Harness. If it is useful, **a star helps the next person find it** — nothing is gated behind it.
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
## What is dsh-auto-review?
|
|
@@ -67,7 +67,7 @@ When an action crosses the sandbox boundary, a second model reads the evidence a
|
|
|
67
67
|
|
|
68
68
|
| Surface | Status |
|
|
69
69
|
|---|---|
|
|
70
|
-
| Harness | DeepSeek Harness `dsh-v0.2.1-
|
|
70
|
+
| Harness | DeepSeek Harness `dsh-v0.2.1-rc.2` (verified 2026-10-18): `engines.dsh >=0.2.1-0 <0.3.0`; the P0 compatibility paths have regression tests. |
|
|
71
71
|
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
72
72
|
| Platforms | All (host answerer; optional Web review panel via the session-projection capability) |
|
|
73
73
|
| Model | Any (the reviewer inherits the session agent's route; `reviewerModel` overrides) |
|
|
@@ -363,7 +363,7 @@ The server is read-only and deterministic: no network, no model, no writes.
|
|
|
363
363
|
- **Fail closed.** Every abnormal path (provider missing, capability gaps, start rejection, timeout, non-`completed` stop reason, missing/malformed verdict, audit-correlation failure) resolves through `fallbackPolicy`, default `rejected` — and the rejection feeds an auditable reason back to the model. `allow-once` grants unconditionally; it exists only for unattended deployments whose admin accepts that risk.
|
|
364
364
|
- **Read-only reviewer.** The reviewer's `toolFilter` allow-list (`read`/`glob`/`grep`) cannot write, edit, run bash, fetch the network, or delegate (`maxDepth` = its own depth). Its session log is persisted and auditable.
|
|
365
365
|
- **Context-isolated reviewer.** The reviewer child's steps are filtered on the documented `agent/pre-step` seam: only its own prompt and its own read-only tool results enter them. Workspace instruction files (`AGENTS.md` / `CLAUDE.md`) and context-injecting plugins are dropped from the step this seam controls. **The host's own runtime-context snapshot is re-admitted by the loop after `agent/pre-step`; the firewall does not remove it, so the reviewer sees it.** This holds under EITHER subagent provider. The filter is an allow-list over message SOURCES, so a plugin that declares a new source kind is dropped too.
|
|
366
|
-
- **Sensitive arguments are redacted** (key-name matching: `token`, `password`, `api_key`, `Authorization`, credentials, private keys …) before entering the reviewer prompt
|
|
366
|
+
- **Sensitive arguments are redacted** (key-name matching: `token`, `password`, `api_key`, `Authorization`, credentials, private keys …) before entering the reviewer prompt, and a free-form string argument additionally passes an inline heuristic that masks the `KEY=VALUE` / `KEY: VALUE` / `--flag VALUE` spellings and `Bearer`/`Basic` schemes — which is how a secret usually appears in a shell call. The plugin never executes the reviewed arguments. Both passes are best-effort, not a secret scanner: a bare secret with no key next to it stays visible, so do not AI-review tools whose argument values you cannot afford to show a model.
|
|
367
367
|
- **Hard disables explain themselves.** A `never` tool or risk rule rejects deterministically AND records a log-only `autoReview/rejection` event, then injects a `[auto-review-never]` marker into the denied tool result — the model learns the action is hard-disabled instead of retrying it (invariant-checked: marker ⟺ event).
|
|
368
368
|
- **Rejection circuit breaker.** A run of denials in one turn trips the breaker (`consecutiveDenies` / `windowDenies` inside `windowSize`), recorded as a log-only `autoReview/circuit` event; later requests follow its `action` (`delegate` / `reject` / `abort-turn`).
|
|
369
369
|
- **Reviewer context is presented transcript.** `contextBudget` feeds already-presented session content to the reviewer. With the default same-route reviewer model that content stays inside one provider; configure `reviewerModel` to a different provider only if you accept presenting that transcript to it.
|
|
@@ -537,6 +537,8 @@ This project is one of the **87 actively maintained** DeepSeek Harness plugins f
|
|
|
537
537
|
|
|
538
538
|
</details>
|
|
539
539
|
|
|
540
|
+
</details>
|
|
541
|
+
|
|
540
542
|
### Install from the DSH Desktop Market
|
|
541
543
|
|
|
542
544
|
All PerryLink plugins are browsable in the built-in DSH Desktop Market: **Market → Sources → add source → paste** `https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json` **→ select it**. Installation still goes through the Market's npm-identity verification and your confirmation.
|
|
File without changes
|
package/bin/dsh-eval.mjs
CHANGED
|
File without changes
|
package/cordis.patch.yml
CHANGED
|
File without changes
|
package/eval/cases/demo.yaml
CHANGED
|
File without changes
|
package/eval/cordis.yml
CHANGED
|
File without changes
|
package/lib/client.js
CHANGED
|
File without changes
|
package/lib/client.js.map
CHANGED
|
File without changes
|
package/lib/eval-cli.js
CHANGED
|
File without changes
|
package/lib/eval.js
CHANGED
|
File without changes
|