dsh-doublecheck 0.9.23 → 0.9.26
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 +36 -0
- package/README-es.md +59 -11
- package/README-hi.md +59 -11
- package/README-pt.md +59 -11
- package/README-zh.md +59 -11
- package/README.md +58 -11
- package/lib/guard/activation.d.ts +31 -0
- package/lib/guard/activation.js +1 -0
- package/lib/guard/gate.d.ts +2 -0
- package/lib/guard/gate.js +33 -9
- package/lib/guard/index.d.ts +4 -0
- package/lib/guard/index.js +14 -2
- package/lib/guard/review.d.ts +2 -0
- package/lib/guard/review.js +31 -9
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,7 +1,43 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.9.26] - 2026-10-18
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- Add a 1280×720 hero and a 960×540, 4-second terminal GIF rendered from the test run; `screenshots.json` is an object array and `capture.json` records the command.
|
|
8
|
+
|
|
9
|
+
## [0.9.25] - 2026-10-18
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **Reviewers use `subagents.startActivation` on 0.2.1+.** The adversary and gate reviewers detect the new API, require a read-only Agent Preset (`adversaryPreset` / `gate.consistency|review.preset`), and fail closed without one; alpha hosts keep the old `start()` + `toolFilter` path. This closes the functional failure where every reviewer call on 0.2.1 was rejected.
|
|
14
|
+
|
|
3
15
|
All notable changes to dsh-doublecheck are recorded here, newest first.
|
|
4
16
|
|
|
17
|
+
## [Unreleased]
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- **The `doublecheck` session projection could never be read in full.** Its wire value was a JSON object of eight fields costing **131 characters when empty** and 139 with a short goal, while the one-line renderer a chat bridge uses keeps a value only up to 120 characters and otherwise cuts it to 117 plus `…`. Every possible value was truncated: the empty state lost `gateVerdict` to `"ga…` and `gateRedCount` entirely, and as soon as a spec goal existed `specGoal`, `reviewed`, `editCount`, `gateVerdict` and `gateRedCount` all disappeared — exactly the verdict and red-light count a user opens `/status` on a phone to see. A JSON object cannot be fixed by shortening fields either: the eight keys alone put its theoretical minimum at 126 characters.
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- The wire value is now one string this package renders itself, led by the three facts a user reads first and bounded to **120 characters worst case** by construction: `gate:rework r2 | stage:green | test:green edits:12 spec:yes review:yes | goal:ship parser fix`. Every variable field is capped (counts print as `9999+` / `99999+`, the goal excerpt is sanitized to one line and clipped to the remaining budget, at most 40 characters, ending in `…`), so no field can push the line over budget. `goal:` is the only lossy segment; the complete goal stays in `/doublecheck status` and the delivery report. The READMEs document how to read the line.
|
|
26
|
+
- The projection's `stateVersion` moves **2 → 3** (the wire value changed type). A persisted projection-cache row written at `ver: 2` is discarded and the key refolds from the session log, which is the host's documented version-mismatch path — no migration code, and a pre-upgrade session never fails to load. The persisted fold state is unchanged.
|
|
27
|
+
- A string wire value also quiets the change feed: the host publishes a projection change only when `Object.is` differs from the previous raw view, and equal strings compare equal, where the old fresh object literal published on every state change.
|
|
28
|
+
|
|
29
|
+
## [0.9.24] - 2026-10-10
|
|
30
|
+
|
|
31
|
+
### Changed
|
|
32
|
+
|
|
33
|
+
- The README now carries the terminal demo and an animated version of it: the same
|
|
34
|
+
real run, shown assembling line by line. The static image stays as the primary
|
|
35
|
+
one, because a crawler or an assistant can read a PNG and cannot read a GIF.
|
|
36
|
+
|
|
37
|
+
Both frames are that plugin's own output — the card is generated by running its
|
|
38
|
+
code over its own fixture, not drawn by hand.
|
|
39
|
+
|
|
40
|
+
|
|
5
41
|
## [0.9.23] - 2026-10-06
|
|
6
42
|
|
|
7
43
|
### Changed
|
package/README-es.md
CHANGED
|
@@ -26,12 +26,27 @@
|
|
|
26
26
|
---
|
|
27
27
|
|
|
28
28
|
|
|
29
|
+
**📖 Base de conocimiento del ecosistema** — datos medidos, no marketing: [guía de desarrollo · datos de selección · criterios de mantenimiento](https://perrylink.github.io/dsh-plugin-guide/).
|
|
30
|
+
|
|
29
31
|
<!-- star-cta -->
|
|
30
32
|
## ⭐ 如果它帮到了你
|
|
31
33
|
|
|
32
34
|
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.
|
|
33
35
|
|
|
34
36
|
*English:* part of a 40+ plugin family for DeepSeek Harness. If it is useful, **a star helps the next person find it** — nothing is gated behind it.
|
|
37
|
+
|
|
38
|
+
## What is dsh-doublecheck?
|
|
39
|
+
|
|
40
|
+
La puerta de calidad de entrega para DeepSeek Harness: interroga los requisitos, prueba la implementación, demuestra la entrega — y controla el traspaso con una decisión de entregable / rehacer.
|
|
41
|
+
|
|
42
|
+
Los requisitos se interrogan antes de la primera edición; la entrega se demuestra, nunca se afirma.
|
|
43
|
+
|
|
44
|
+

|
|
45
|
+
|
|
46
|
+

|
|
47
|
+
|
|
48
|
+
*La misma ejecución, animada.*
|
|
49
|
+
|
|
35
50
|
## Compatibilidad
|
|
36
51
|
|
|
37
52
|
| Superficie | Estado |
|
|
@@ -68,9 +83,13 @@ grill ──▶ design ──▶ red ──▶ green ──▶ review ──▶
|
|
|
68
83
|
|
|
69
84
|
## Inicio rápido
|
|
70
85
|
|
|
86
|
+
```sh
|
|
87
|
+
dsh plugin --profile web add github:PerryLink/dsh-doublecheck
|
|
88
|
+
```
|
|
89
|
+
|
|
71
90
|
```sh
|
|
72
91
|
# 1. install the bundle into your profile
|
|
73
|
-
dsh plugin --profile web add
|
|
92
|
+
dsh plugin --profile web add github:PerryLink/dsh-doublecheck
|
|
74
93
|
|
|
75
94
|
# or from npm (published releases)
|
|
76
95
|
dsh plugin --profile web add dsh-doublecheck
|
|
@@ -83,7 +102,7 @@ Ambas filas (`doublecheck-grill` y `doublecheck-guard`) se activan automáticame
|
|
|
83
102
|
|
|
84
103
|
## Instalación y desinstalación
|
|
85
104
|
|
|
86
|
-
- **canal git** (última `main`): `dsh plugin --profile web add
|
|
105
|
+
- **canal git** (última `main`): `dsh plugin --profile web add github:PerryLink/dsh-doublecheck` — el script `prepare` compila solo con dependencias de producción.
|
|
87
106
|
- **canal npm** (versiones publicadas): `dsh plugin --profile web add dsh-doublecheck`.
|
|
88
107
|
- **canal tarball**: `pnpm pack` en este repo y luego `dsh plugin --profile web add ./dsh-doublecheck-<version>.tgz`.
|
|
89
108
|
- **desinstalar**: `dsh plugin --profile web remove dsh-doublecheck` (o elimina las filas del parche de perfil).
|
|
@@ -153,6 +172,34 @@ La mala configuración falla en voz alta al cargar: regex inválidas, listas de
|
|
|
153
172
|
| `gate` | campo de configuración en vivo | La lista enchufable es el único campo `.volatile()` de la fila del guard: se edita desde la tarjeta de ajustes de la fila (espacio de nombres = el id de entrada de perfil de la fila) y se lee una vez al cargar. |
|
|
154
173
|
| `strict.patch.yml` | capa superpuesta | Cada puerta activa con intensidad `block` más el requisito de cobertura, en una capa de parche. |
|
|
155
174
|
| `dsh-doublecheck/invariant` | fila acompañante | Informa contradicciones de ruta de escritura propias del paquete a través del registro `invariants` del host. |
|
|
175
|
+
| `doublecheck` | proyección de sesión | Una línea de estado acotada que el cliente muestra: etapa, último veredicto de la puerta, cuenta de rojos, ediciones y marcas spec/review. Ver [Cómo leer la línea de estado](#cómo-leer-la-línea-de-estado). |
|
|
176
|
+
|
|
177
|
+
### Cómo leer la línea de estado
|
|
178
|
+
|
|
179
|
+
La proyección de sesión `doublecheck` es una **cadena**, y es deliberadamente una sola línea: la idea es que cualquier cliente pueda mostrarla sin recortar nada. El `/status` de un puente de chat, una barra de estado o cualquier consumidor propio la muestra tal cual:
|
|
180
|
+
|
|
181
|
+
```text
|
|
182
|
+
gate:rework r2 | stage:green | test:green edits:12 spec:yes review:yes | goal:ship parser fix
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
| Segmento | Se lee como |
|
|
186
|
+
|---|---|
|
|
187
|
+
| `gate:<veredicto> r<n>` | El último veredicto de la puerta de entrega — `none` antes de cualquier ejecución, `deliverable` o `rework` — y su cuenta de rojos `r<n>`. |
|
|
188
|
+
| `stage:<etapa>` | La etapa de disciplina alcanzada con evidencia durable: `grill`, `design`, `red`, `green`, `review`, `verify`. |
|
|
189
|
+
| `test:<color>` | El color de la última ejecución de pruebas: `none`, `red`, `green`. |
|
|
190
|
+
| `edits:<n>` | Ediciones de implementación plegadas del registro de sesión (escribir archivos de prueba no cuenta). |
|
|
191
|
+
| `spec:yes` / `spec:no` | Si existe un `doublecheck_spec` confirmado. |
|
|
192
|
+
| `review:yes` / `review:no` | Si existe un registro de revisión adversaria. |
|
|
193
|
+
| `goal:<extracto>` | El objetivo del spec confirmado, recortado. Solo aparece con `spec:yes`. |
|
|
194
|
+
|
|
195
|
+
La línea está acotada **por construcción**, así que ningún renderizador la trunca:
|
|
196
|
+
|
|
197
|
+
- Presupuesto duro: **120 caracteres**. Un renderizador que conserva los valores de hasta 120 caracteres — el renderizador genérico de proyecciones del puente de WeChat es uno de ellos — muestra la línea completa. La forma de objeto anterior tenía 131 caracteres **en vacío**, y por eso el veredicto y la cuenta de rojos se recortaban.
|
|
198
|
+
- Los tres primeros segmentos son **sin pérdida**. Las cuentas por encima de `9999` rojos o `99999` ediciones se imprimen como `9999+` / `99999+` en lugar de crecer sin límite; una cuenta no finita o negativa se imprime como `0`.
|
|
199
|
+
- `goal:` es el único segmento con pérdida. Se aplana a una sola línea (los saltos de línea y los caracteres de control pasan a espacios, `|` pasa a `/`) y se recorta al presupuesto restante, como máximo 40 caracteres, terminando en `…` cuando se recortó. El objetivo completo está en `/doublecheck status` y en el informe de entrega.
|
|
200
|
+
- Esto es un vistazo, no el registro: `/gate status` y `/doublecheck status` muestran el estado completo.
|
|
201
|
+
|
|
202
|
+
El `stateVersion` de la proyección es **3**. Incrementarlo descarta una fila de caché de proyección escrita por una versión anterior y vuelve a plegar la clave desde el registro de sesión, de modo que una sesión actualizada recalcula la línea en lugar de mostrar una obsoleta. El estado plegado en sí no cambia, y una sesión anterior a la actualización nunca falla al cargar.
|
|
156
203
|
|
|
157
204
|
## Fases de la puerta
|
|
158
205
|
|
|
@@ -289,24 +336,24 @@ Evidencia estática: `dsh-plugin-doctor` K10–K13 dan `pass` en todas las compr
|
|
|
289
336
|
|
|
290
337
|
## PerryLink DSH Plugin Family
|
|
291
338
|
|
|
292
|
-
|
|
339
|
+
Este proyecto es uno de los **34 plugins activamente mantenidos** de DeepSeek Harness de [PerryLink](https://github.com/PerryLink): el registro tiene **42**, de los cuales **5** están congelados y **3** retirados; cada uno conserva su fila abajo, con el motivo en la columna Estado. Si este te ayuda, probablemente los demás también:
|
|
293
340
|
|
|
294
|
-
| Plugin |
|
|
295
|
-
|
|
341
|
+
| Plugin | En una línea | Estado |
|
|
342
|
+
|---|---|---|
|
|
296
343
|
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Second-model auto-review on the approval chain, fail-closed by default | |
|
|
297
344
|
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | |
|
|
298
345
|
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Durable background child agents with a Web UI sidebar, messaging and interrupt | 🚫 **RETIRADO** — ver la nota arriba |
|
|
299
|
-
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. |
|
|
346
|
+
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | 🧊 CONGELADO — ver el README del repositorio |
|
|
300
347
|
| **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | |
|
|
301
348
|
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | |
|
|
302
349
|
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore | |
|
|
303
|
-
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH |
|
|
350
|
+
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH | 🧊 CONGELADO — ver el README del repositorio |
|
|
304
351
|
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness — Windows first. | |
|
|
305
352
|
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Terminal-style input history for the web composer: arrows, Ctrl+R search | |
|
|
306
353
|
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) | |
|
|
307
|
-
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. |
|
|
354
|
+
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | 🧊 CONGELADO — ver el README del repositorio |
|
|
308
355
|
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Engineering-discipline guard: requirements grill, test gates, adversary review | |
|
|
309
|
-
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. |
|
|
356
|
+
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. | 🧊 CONGELADO — ver el README del repositorio |
|
|
310
357
|
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics for DeepSeek Harness. | |
|
|
311
358
|
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Deterministic research reports for Chinese public mutual funds | |
|
|
312
359
|
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issues integration for DSH, every write gated by approval | |
|
|
@@ -317,7 +364,7 @@ This project is one of the **44 DeepSeek Harness plugins** maintained by [PerryL
|
|
|
317
364
|
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
|
|
318
365
|
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
|
|
319
366
|
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
|
|
320
|
-
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
367
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
321
368
|
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
|
|
322
369
|
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
|
|
323
370
|
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
|
|
@@ -326,7 +373,8 @@ This project is one of the **44 DeepSeek Harness plugins** maintained by [PerryL
|
|
|
326
373
|
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-development knowledge base as an on-demand agent skill | |
|
|
327
374
|
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
|
|
328
375
|
| **[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 | |
|
|
329
|
-
| **[dsh-
|
|
376
|
+
| **[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 | 🚫 RETIRADO — corredores asumidos por `dsh-plugin-upgrade` |
|
|
377
|
+
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console | 🧊 CONGELADO — ver el README del repositorio |
|
|
330
378
|
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research-report engine: content-addressed evidence ledger and sealed versions | |
|
|
331
379
|
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional quality scoring for DeepSeek Harness plugins. | |
|
|
332
380
|
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions in the Web sidebar with durable ordering | 🚫 **RETIRADO** — ver la nota arriba |
|
package/README-hi.md
CHANGED
|
@@ -26,12 +26,27 @@
|
|
|
26
26
|
---
|
|
27
27
|
|
|
28
28
|
|
|
29
|
+
**📖 इकोसिस्टम नॉलेज बेस** — मापे गए आँकड़े, मार्केटिंग नहीं: [डेवलपमेंट गाइड · चयन डेटा · रखरखाव मानदंड](https://perrylink.github.io/dsh-plugin-guide/)।
|
|
30
|
+
|
|
29
31
|
<!-- star-cta -->
|
|
30
32
|
## ⭐ 如果它帮到了你
|
|
31
33
|
|
|
32
34
|
यह प्लगइन [DSH प्लगइन परिवार](https://github.com/PerryLink) का हिस्सा है (40+ प्लगइन, सभी Apache-2.0)। अगर यह उपयोगी लगे, तो **एक स्टार दें** — इससे कोई सुविधा अनलॉक नहीं होती, पर अगला व्यक्ति इसे खोज में आसानी से पा लेता है।
|
|
33
35
|
|
|
34
36
|
*English:* part of a 40+ plugin family for DeepSeek Harness. If it is useful, **a star helps the next person find it** — nothing is gated behind it.
|
|
37
|
+
|
|
38
|
+
## What is dsh-doublecheck?
|
|
39
|
+
|
|
40
|
+
DeepSeek Harness के लिए डिलीवरी गुणवत्ता-द्वार: आवश्यकताओं की पड़ताल करें, कार्यान्वयन का परीक्षण करें, डिलीवरी साबित करें — फिर deliverable / rework required निर्णय से हैंडऑफ़ को नियंत्रित करें।
|
|
41
|
+
|
|
42
|
+
पहली एडिट से पहले आवश्यकताओं की पड़ताल होती है; डिलीवरी साबित की जाती है, दावा नहीं किया जाता।
|
|
43
|
+
|
|
44
|
+

|
|
45
|
+
|
|
46
|
+

|
|
47
|
+
|
|
48
|
+
*वही रन, एनिमेटेड।*
|
|
49
|
+
|
|
35
50
|
## अनुकूलता
|
|
36
51
|
|
|
37
52
|
| सतह | स्थिति |
|
|
@@ -68,9 +83,13 @@ grill ──▶ design ──▶ red ──▶ green ──▶ review ──▶
|
|
|
68
83
|
|
|
69
84
|
## त्वरित शुरुआत
|
|
70
85
|
|
|
86
|
+
```sh
|
|
87
|
+
dsh plugin --profile web add github:PerryLink/dsh-doublecheck
|
|
88
|
+
```
|
|
89
|
+
|
|
71
90
|
```sh
|
|
72
91
|
# 1. install the bundle into your profile
|
|
73
|
-
dsh plugin --profile web add
|
|
92
|
+
dsh plugin --profile web add github:PerryLink/dsh-doublecheck
|
|
74
93
|
|
|
75
94
|
# or from npm (published releases)
|
|
76
95
|
dsh plugin --profile web add dsh-doublecheck
|
|
@@ -83,7 +102,7 @@ dsh --profile web --dump-config | grep -E -A3 'id: doublecheck-(grill|guard)'
|
|
|
83
102
|
|
|
84
103
|
## इंस्टॉल और अनइंस्टॉल
|
|
85
104
|
|
|
86
|
-
- **git चैनल** (नवीनतम `main`): `dsh plugin --profile web add
|
|
105
|
+
- **git चैनल** (नवीनतम `main`): `dsh plugin --profile web add github:PerryLink/dsh-doublecheck` — `prepare` स्क्रिप्ट केवल उत्पादन निर्भरताओं के साथ बिल्ड करती है।
|
|
87
106
|
- **npm चैनल** (प्रकाशित रिलीज़): `dsh plugin --profile web add dsh-doublecheck`।
|
|
88
107
|
- **tarball चैनल**: इस repo में `pnpm pack`, फिर `dsh plugin --profile web add ./dsh-doublecheck-<version>.tgz`।
|
|
89
108
|
- **अनइंस्टॉल**: `dsh plugin --profile web remove dsh-doublecheck` (या प्रोफ़ाइल पैच से पंक्तियाँ हटाएँ)।
|
|
@@ -153,6 +172,34 @@ dsh --profile web --dump-config | grep -E -A3 'id: doublecheck-(grill|guard)'
|
|
|
153
172
|
| `gate` | लाइव कॉन्फ़िग फ़ील्ड | प्लग करने योग्य सूची guard पंक्ति की एकमात्र `.volatile()` फ़ील्ड है: इसे पंक्ति के सेटिंग्स कार्ड से संपादित किया जाता है (नेमस्पेस = पंक्ति की profile प्रविष्टि id) और लोड पर एक बार पढ़ा जाता है। |
|
|
154
173
|
| `strict.patch.yml` | ओवरले | `block` तीव्रता पर हर द्वार चालू और कवरेज आवश्यकता, एक पैच परत में। |
|
|
155
174
|
| `dsh-doublecheck/invariant` | सहयोगी पंक्ति | host `invariants` रजिस्ट्री के माध्यम से पैकेज-स्वामित्व वाले लेखन-पथ विरोधाभासों की रिपोर्ट करता है। |
|
|
175
|
+
| `doublecheck` | सत्र प्रोजेक्शन | क्लाइंट द्वारा दिखाई जाने वाली एक सीमित स्थिति पंक्ति: चरण, नवीनतम द्वार निर्णय, लाल-बत्ती गिनती, संपादन और spec/review ध्वज। देखें [स्थिति पंक्ति को कैसे पढ़ें](#स्थिति-पंक्ति-को-कैसे-पढ़ें)। |
|
|
176
|
+
|
|
177
|
+
### स्थिति पंक्ति को कैसे पढ़ें
|
|
178
|
+
|
|
179
|
+
`doublecheck` सत्र प्रोजेक्शन एक **स्ट्रिंग** है, और यह जानबूझकर एक ही पंक्ति है — उद्देश्य यही है कि कोई भी क्लाइंट इसे बिना कुछ काटे पूरा दिखा सके। चैट ब्रिज का `/status`, कोई स्टेटस बार, या कोई भी अपना उपभोक्ता इसे जैसा है वैसा ही दिखाता है:
|
|
180
|
+
|
|
181
|
+
```text
|
|
182
|
+
gate:rework r2 | stage:green | test:green edits:12 spec:yes review:yes | goal:ship parser fix
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
| खंड | पढ़ने का अर्थ |
|
|
186
|
+
|---|---|
|
|
187
|
+
| `gate:<निर्णय> r<n>` | नवीनतम डिलीवरी-द्वार निर्णय — किसी भी रन से पहले `none`, अन्यथा `deliverable` या `rework` — और उसकी लाल-बत्ती गिनती `r<n>`। |
|
|
188
|
+
| `stage:<चरण>` | टिकाऊ साक्ष्य पर पहुँचा अनुशासन चरण: `grill`, `design`, `red`, `green`, `review`, `verify`। |
|
|
189
|
+
| `test:<रंग>` | नवीनतम परीक्षण रन का रंग: `none`, `red`, `green`। |
|
|
190
|
+
| `edits:<n>` | सत्र लॉग से मोड़े गए कार्यान्वयन संपादन (परीक्षण फ़ाइल लिखना नहीं गिना जाता)। |
|
|
191
|
+
| `spec:yes` / `spec:no` | क्या कोई प्रतिबद्ध `doublecheck_spec` मौजूद है। |
|
|
192
|
+
| `review:yes` / `review:no` | क्या कोई प्रतिद्वंद्वी समीक्षा रिकॉर्ड मौजूद है। |
|
|
193
|
+
| `goal:<अंश>` | प्रतिबद्ध spec लक्ष्य, छाँटा हुआ। केवल `spec:yes` पर दिखता है। |
|
|
194
|
+
|
|
195
|
+
यह पंक्ति **रचना से ही सीमित** है, इसलिए कोई भी रेंडरर इसे काटता नहीं:
|
|
196
|
+
|
|
197
|
+
- कठोर बजट: **120 अक्षर**। जो रेंडरर 120 अक्षर तक के मान बिना बदले रखता है — WeChat ब्रिज का सामान्य प्रोजेक्शन रेंडरर उनमें से एक है — वह पूरी पंक्ति दिखाता है। पहले का ऑब्जेक्ट रूप **खाली अवस्था में ही 131 अक्षर** था, और इसीलिए निर्णय तथा लाल-बत्ती गिनती कट जाते थे।
|
|
198
|
+
- पहले तीन खंड **हानिरहित** हैं। `9999` से अधिक लाल बत्तियाँ या `99999` से अधिक संपादन `9999+` / `99999+` के रूप में छपते हैं, बिना सीमा बढ़ाए; अशून्य-असीमित या ऋणात्मक गिनती `0` छपती है।
|
|
199
|
+
- `goal:` एकमात्र हानिकर खंड है। इसे एक पंक्ति में समतल किया जाता है (नई पंक्तियाँ और नियंत्रण अक्षर रिक्त स्थान बन जाते हैं, `|` बन जाता है `/`) और बचे बजट तक छाँटा जाता है — अधिकतम 40 अक्षर — कटने पर `…` पर समाप्त होता है। पूरा लक्ष्य `/doublecheck status` और डिलीवरी रिपोर्ट में है।
|
|
200
|
+
- यह एक नज़र है, रिकॉर्ड नहीं: `/gate status` और `/doublecheck status` पूरी स्थिति दिखाते हैं।
|
|
201
|
+
|
|
202
|
+
प्रोजेक्शन का `stateVersion` **3** है। इसे बढ़ाने पर पुराने संस्करण द्वारा लिखी गई स्थायी प्रोजेक्शन कैश पंक्ति हटा दी जाती है और कुंजी सत्र लॉग से फिर से मोड़ी जाती है, इसलिए उन्नयन के बाद का सत्र पुरानी पंक्ति दिखाने के बजाय उसे दोबारा गणना करता है। मोड़ी गई स्थिति स्वयं नहीं बदलती, और उन्नयन-पूर्व सत्र कभी लोड होने में विफल नहीं होता।
|
|
156
203
|
|
|
157
204
|
## द्वार चरण
|
|
158
205
|
|
|
@@ -289,24 +336,24 @@ pnpm run pack:check # build + pack the tarball
|
|
|
289
336
|
|
|
290
337
|
## PerryLink DSH Plugin Family
|
|
291
338
|
|
|
292
|
-
|
|
339
|
+
यह प्रोजेक्ट [PerryLink](https://github.com/PerryLink) के DeepSeek Harness प्लगइन परिवार का हिस्सा है — **34 सक्रिय रूप से अनुरक्षित**, कुल सूची **42** है जिसमें **5 फ़्रोज़न** और **3 सेवानिवृत्त** हैं; हर एक की पंक्ति नीचे बनी रहती है, कारण “स्थिति” कॉलम में है। अगर यह उपयोगी लगे, तो अन्य भी मददगार होंगे:
|
|
293
340
|
|
|
294
|
-
| Plugin |
|
|
295
|
-
|
|
341
|
+
| Plugin | एक पंक्ति में | स्थिति |
|
|
342
|
+
|---|---|---|
|
|
296
343
|
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Second-model auto-review on the approval chain, fail-closed by default | |
|
|
297
344
|
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | |
|
|
298
345
|
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Durable background child agents with a Web UI sidebar, messaging and interrupt | 🚫 **सेवानिवृत्त** — ऊपर देखें |
|
|
299
|
-
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. |
|
|
346
|
+
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | 🧊 फ़्रोज़न — रिपॉज़िटरी README देखें |
|
|
300
347
|
| **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | |
|
|
301
348
|
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | |
|
|
302
349
|
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore | |
|
|
303
|
-
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH |
|
|
350
|
+
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH | 🧊 फ़्रोज़न — रिपॉज़िटरी README देखें |
|
|
304
351
|
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness — Windows first. | |
|
|
305
352
|
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Terminal-style input history for the web composer: arrows, Ctrl+R search | |
|
|
306
353
|
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) | |
|
|
307
|
-
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. |
|
|
354
|
+
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | 🧊 फ़्रोज़न — रिपॉज़िटरी README देखें |
|
|
308
355
|
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Engineering-discipline guard: requirements grill, test gates, adversary review | |
|
|
309
|
-
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. |
|
|
356
|
+
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. | 🧊 फ़्रोज़न — रिपॉज़िटरी README देखें |
|
|
310
357
|
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics for DeepSeek Harness. | |
|
|
311
358
|
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Deterministic research reports for Chinese public mutual funds | |
|
|
312
359
|
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issues integration for DSH, every write gated by approval | |
|
|
@@ -317,7 +364,7 @@ This project is one of the **44 DeepSeek Harness plugins** maintained by [PerryL
|
|
|
317
364
|
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
|
|
318
365
|
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
|
|
319
366
|
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
|
|
320
|
-
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
367
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
321
368
|
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
|
|
322
369
|
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
|
|
323
370
|
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
|
|
@@ -326,7 +373,8 @@ This project is one of the **44 DeepSeek Harness plugins** maintained by [PerryL
|
|
|
326
373
|
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-development knowledge base as an on-demand agent skill | |
|
|
327
374
|
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
|
|
328
375
|
| **[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 | |
|
|
329
|
-
| **[dsh-
|
|
376
|
+
| **[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 | 🚫 सेवानिवृत्त — कॉरिडोर अब `dsh-plugin-upgrade` द्वारा |
|
|
377
|
+
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console | 🧊 फ़्रोज़न — रिपॉज़िटरी README देखें |
|
|
330
378
|
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research-report engine: content-addressed evidence ledger and sealed versions | |
|
|
331
379
|
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional quality scoring for DeepSeek Harness plugins. | |
|
|
332
380
|
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions in the Web sidebar with durable ordering | 🚫 **सेवानिवृत्त** — ऊपर देखें |
|
package/README-pt.md
CHANGED
|
@@ -26,12 +26,27 @@
|
|
|
26
26
|
---
|
|
27
27
|
|
|
28
28
|
|
|
29
|
+
**📖 Base de conhecimento do ecossistema** — dados medidos, não marketing: [guia de desenvolvimento · dados de seleção · critérios de manutenção](https://perrylink.github.io/dsh-plugin-guide/).
|
|
30
|
+
|
|
29
31
|
<!-- star-cta -->
|
|
30
32
|
## ⭐ 如果它帮到了你
|
|
31
33
|
|
|
32
34
|
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.
|
|
33
35
|
|
|
34
36
|
*English:* part of a 40+ plugin family for DeepSeek Harness. If it is useful, **a star helps the next person find it** — nothing is gated behind it.
|
|
37
|
+
|
|
38
|
+
## What is dsh-doublecheck?
|
|
39
|
+
|
|
40
|
+
O portão de qualidade de entrega para o DeepSeek Harness: interrogue os requisitos, teste a implementação, comprove a entrega — e então controle a passagem com uma decisão de entregável / retrabalho necessário.
|
|
41
|
+
|
|
42
|
+
Os requisitos são interrogados antes da primeira edição; a entrega é comprovada, nunca afirmada.
|
|
43
|
+
|
|
44
|
+

|
|
45
|
+
|
|
46
|
+

|
|
47
|
+
|
|
48
|
+
*A mesma execução, animada.*
|
|
49
|
+
|
|
35
50
|
## Compatibilidade
|
|
36
51
|
|
|
37
52
|
| Superfície | Status |
|
|
@@ -68,9 +83,13 @@ grill ──▶ design ──▶ red ──▶ green ──▶ review ──▶
|
|
|
68
83
|
|
|
69
84
|
## Início rápido
|
|
70
85
|
|
|
86
|
+
```sh
|
|
87
|
+
dsh plugin --profile web add github:PerryLink/dsh-doublecheck
|
|
88
|
+
```
|
|
89
|
+
|
|
71
90
|
```sh
|
|
72
91
|
# 1. install the bundle into your profile
|
|
73
|
-
dsh plugin --profile web add
|
|
92
|
+
dsh plugin --profile web add github:PerryLink/dsh-doublecheck
|
|
74
93
|
|
|
75
94
|
# or from npm (published releases)
|
|
76
95
|
dsh plugin --profile web add dsh-doublecheck
|
|
@@ -83,7 +102,7 @@ Ambas as linhas (`doublecheck-grill` e `doublecheck-guard`) são ativadas automa
|
|
|
83
102
|
|
|
84
103
|
## Instalar e desinstalar
|
|
85
104
|
|
|
86
|
-
- **canal git** (última `main`): `dsh plugin --profile web add
|
|
105
|
+
- **canal git** (última `main`): `dsh plugin --profile web add github:PerryLink/dsh-doublecheck` — o script `prepare` compila apenas com dependências de produção.
|
|
87
106
|
- **canal npm** (versões publicadas): `dsh plugin --profile web add dsh-doublecheck`.
|
|
88
107
|
- **canal tarball**: `pnpm pack` neste repo e então `dsh plugin --profile web add ./dsh-doublecheck-<version>.tgz`.
|
|
89
108
|
- **desinstalar**: `dsh plugin --profile web remove dsh-doublecheck` (ou remova as linhas do patch de perfil).
|
|
@@ -153,6 +172,34 @@ A má configuração falha em voz alta ao carregar: regex inválidas, listas de
|
|
|
153
172
|
| `gate` | campo de configuração ao vivo | A lista plugável é o único campo `.volatile()` da linha do guard: é editada no cartão de configurações da linha (namespace = o id de entrada de perfil da linha) e lida uma vez ao carregar. |
|
|
154
173
|
| `strict.patch.yml` | camada de sobreposição | Cada portão ativo com intensidade `block` mais o requisito de cobertura, em uma camada de patch. |
|
|
155
174
|
| `dsh-doublecheck/invariant` | linha acompanhante | Reporta contradições de caminho de escrita próprias do pacote por meio do registro `invariants` do host. |
|
|
175
|
+
| `doublecheck` | projeção de sessão | Uma linha de status limitada que o cliente exibe: etapa, último veredicto do portão, contagem de vermelhos, edições e marcas spec/review. Ver [Como ler a linha de status](#como-ler-a-linha-de-status). |
|
|
176
|
+
|
|
177
|
+
### Como ler a linha de status
|
|
178
|
+
|
|
179
|
+
A projeção de sessão `doublecheck` é uma **string**, e é deliberadamente uma única linha: a ideia é que qualquer cliente possa exibi-la sem cortar nada. O `/status` de uma ponte de chat, uma barra de status ou qualquer consumidor próprio a exibe como está:
|
|
180
|
+
|
|
181
|
+
```text
|
|
182
|
+
gate:rework r2 | stage:green | test:green edits:12 spec:yes review:yes | goal:ship parser fix
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
| Segmento | Lê-se como |
|
|
186
|
+
|---|---|
|
|
187
|
+
| `gate:<veredicto> r<n>` | O último veredicto do portão de entrega — `none` antes de qualquer execução, `deliverable` ou `rework` — e sua contagem de vermelhos `r<n>`. |
|
|
188
|
+
| `stage:<etapa>` | A etapa de disciplina alcançada com evidência durável: `grill`, `design`, `red`, `green`, `review`, `verify`. |
|
|
189
|
+
| `test:<cor>` | A cor da última execução de testes: `none`, `red`, `green`. |
|
|
190
|
+
| `edits:<n>` | Edições de implementação dobradas do registro de sessão (escrever arquivos de teste não conta). |
|
|
191
|
+
| `spec:yes` / `spec:no` | Se existe um `doublecheck_spec` confirmado. |
|
|
192
|
+
| `review:yes` / `review:no` | Se existe um registro de revisão adversária. |
|
|
193
|
+
| `goal:<trecho>` | O objetivo do spec confirmado, recortado. Só aparece com `spec:yes`. |
|
|
194
|
+
|
|
195
|
+
A linha é limitada **por construção**, então nenhum renderizador a trunca:
|
|
196
|
+
|
|
197
|
+
- Orçamento rígido: **120 caracteres**. Um renderizador que preserva valores de até 120 caracteres — o renderizador genérico de projeções da ponte do WeChat é um deles — mostra a linha inteira. A forma de objeto anterior tinha 131 caracteres **vazia**, e é por isso que o veredicto e a contagem de vermelhos eram cortados.
|
|
198
|
+
- Os três primeiros segmentos são **sem perda**. Contagens acima de `9999` vermelhos ou `99999` edições são impressas como `9999+` / `99999+` em vez de crescer sem limite; uma contagem não finita ou negativa é impressa como `0`.
|
|
199
|
+
- `goal:` é o único segmento com perda. Ele é achatado em uma única linha (quebras de linha e caracteres de controle viram espaços, `|` vira `/`) e recortado pelo orçamento restante, no máximo 40 caracteres, terminando em `…` quando foi recortado. O objetivo completo está em `/doublecheck status` e no relatório de entrega.
|
|
200
|
+
- Isto é um relance, não o registro: `/gate status` e `/doublecheck status` mostram o estado completo.
|
|
201
|
+
|
|
202
|
+
O `stateVersion` da projeção é **3**. Incrementá-lo descarta uma linha de cache de projeção escrita por uma versão anterior e dobra a chave novamente a partir do registro de sessão, de modo que uma sessão atualizada recalcula a linha em vez de mostrar uma obsoleta. O estado dobrado em si não muda, e uma sessão anterior à atualização nunca falha ao carregar.
|
|
156
203
|
|
|
157
204
|
## Fases do portão
|
|
158
205
|
|
|
@@ -289,24 +336,24 @@ Evidência estática: `dsh-plugin-doctor` K10–K13 retornam `pass` em todas as
|
|
|
289
336
|
|
|
290
337
|
## PerryLink DSH Plugin Family
|
|
291
338
|
|
|
292
|
-
|
|
339
|
+
Este projeto é um dos **34 plugins ativamente mantidos** do DeepSeek Harness da [PerryLink](https://github.com/PerryLink): o registro tem **42**, dos quais **5** estão congelados e **3** aposentados; cada um mantém sua linha abaixo, com o motivo na coluna Status. Se este ajudou você, provavelmente os outros também ajudarão:
|
|
293
340
|
|
|
294
|
-
| Plugin |
|
|
295
|
-
|
|
341
|
+
| Plugin | Em uma linha | Status |
|
|
342
|
+
|---|---|---|
|
|
296
343
|
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Second-model auto-review on the approval chain, fail-closed by default | |
|
|
297
344
|
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | |
|
|
298
345
|
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Durable background child agents with a Web UI sidebar, messaging and interrupt | 🚫 **APOSENTADO** — ver a nota acima |
|
|
299
|
-
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. |
|
|
346
|
+
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | 🧊 CONGELADO — ver o README do repositório |
|
|
300
347
|
| **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | |
|
|
301
348
|
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | |
|
|
302
349
|
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore | |
|
|
303
|
-
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH |
|
|
350
|
+
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH | 🧊 CONGELADO — ver o README do repositório |
|
|
304
351
|
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness — Windows first. | |
|
|
305
352
|
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Terminal-style input history for the web composer: arrows, Ctrl+R search | |
|
|
306
353
|
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) | |
|
|
307
|
-
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. |
|
|
354
|
+
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | 🧊 CONGELADO — ver o README do repositório |
|
|
308
355
|
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Engineering-discipline guard: requirements grill, test gates, adversary review | |
|
|
309
|
-
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. |
|
|
356
|
+
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. | 🧊 CONGELADO — ver o README do repositório |
|
|
310
357
|
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics for DeepSeek Harness. | |
|
|
311
358
|
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Deterministic research reports for Chinese public mutual funds | |
|
|
312
359
|
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issues integration for DSH, every write gated by approval | |
|
|
@@ -317,7 +364,7 @@ This project is one of the **44 DeepSeek Harness plugins** maintained by [PerryL
|
|
|
317
364
|
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
|
|
318
365
|
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
|
|
319
366
|
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
|
|
320
|
-
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
367
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
321
368
|
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
|
|
322
369
|
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
|
|
323
370
|
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
|
|
@@ -326,7 +373,8 @@ This project is one of the **44 DeepSeek Harness plugins** maintained by [PerryL
|
|
|
326
373
|
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-development knowledge base as an on-demand agent skill | |
|
|
327
374
|
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
|
|
328
375
|
| **[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 | |
|
|
329
|
-
| **[dsh-
|
|
376
|
+
| **[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 | 🚫 APOSENTADO — corredores assumidos por `dsh-plugin-upgrade` |
|
|
377
|
+
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console | 🧊 CONGELADO — ver o README do repositório |
|
|
330
378
|
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research-report engine: content-addressed evidence ledger and sealed versions | |
|
|
331
379
|
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional quality scoring for DeepSeek Harness plugins. | |
|
|
332
380
|
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions in the Web sidebar with durable ordering | 🚫 **APOSENTADO** — ver a nota acima |
|
package/README-zh.md
CHANGED
|
@@ -26,12 +26,27 @@
|
|
|
26
26
|
---
|
|
27
27
|
|
|
28
28
|
|
|
29
|
+
**📖 生态实测知识库**(实测数据,不是营销):[插件开发指南 · 选型实测数据 · 维护取舍判据](https://perrylink.github.io/dsh-plugin-guide/)。
|
|
30
|
+
|
|
29
31
|
<!-- star-cta -->
|
|
30
32
|
## ⭐ 如果它帮到了你
|
|
31
33
|
|
|
32
34
|
这个插件是 [DSH 插件家族](https://github.com/PerryLink)的一员(40+ 个,全部 Apache-2.0)。如果你在用,**给个 star** —— 它不会解锁任何功能,但会让下一个人在搜索里更容易找到它。
|
|
33
35
|
|
|
34
36
|
*English:* part of a 40+ plugin family for DeepSeek Harness. If it is useful, **a star helps the next person find it** — nothing is gated behind it.
|
|
37
|
+
|
|
38
|
+
## What is dsh-doublecheck?
|
|
39
|
+
|
|
40
|
+
DeepSeek Harness 的交付质量门禁:先拷问需求,再测试实现,最后证明交付——并用「可交付 / 需要返工」的裁决来把关交接。
|
|
41
|
+
|
|
42
|
+
需求在第一次改动之前就被拷问清楚;交付是被证明的,而不是被口头宣称的。
|
|
43
|
+
|
|
44
|
+

|
|
45
|
+
|
|
46
|
+

|
|
47
|
+
|
|
48
|
+
*同一次运行,动图版。*
|
|
49
|
+
|
|
35
50
|
## 兼容性
|
|
36
51
|
|
|
37
52
|
| 方面 | 状态 |
|
|
@@ -68,9 +83,13 @@ grill ──▶ design ──▶ red ──▶ green ──▶ review ──▶
|
|
|
68
83
|
|
|
69
84
|
## 快速开始
|
|
70
85
|
|
|
86
|
+
```sh
|
|
87
|
+
dsh plugin --profile web add github:PerryLink/dsh-doublecheck
|
|
88
|
+
```
|
|
89
|
+
|
|
71
90
|
```sh
|
|
72
91
|
# 1. install the bundle into your profile
|
|
73
|
-
dsh plugin --profile web add
|
|
92
|
+
dsh plugin --profile web add github:PerryLink/dsh-doublecheck
|
|
74
93
|
|
|
75
94
|
# or from npm (published releases)
|
|
76
95
|
dsh plugin --profile web add dsh-doublecheck
|
|
@@ -83,7 +102,7 @@ dsh --profile web --dump-config | grep -E -A3 'id: doublecheck-(grill|guard)'
|
|
|
83
102
|
|
|
84
103
|
## 安装与卸载
|
|
85
104
|
|
|
86
|
-
- **git 渠道**(最新 `main`):`dsh plugin --profile web add
|
|
105
|
+
- **git 渠道**(最新 `main`):`dsh plugin --profile web add github:PerryLink/dsh-doublecheck` —— `prepare` 脚本只使用生产依赖进行构建。
|
|
87
106
|
- **npm 渠道**(发布版本):`dsh plugin --profile web add dsh-doublecheck`。
|
|
88
107
|
- **tarball 渠道**:在本仓库中执行 `pnpm pack`,然后 `dsh plugin --profile web add ./dsh-doublecheck-<version>.tgz`。
|
|
89
108
|
- **卸载**:`dsh plugin --profile web remove dsh-doublecheck`(或从配置文件补丁中移除这些行)。
|
|
@@ -153,6 +172,34 @@ dsh --profile web --dump-config | grep -E -A3 'id: doublecheck-(grill|guard)'
|
|
|
153
172
|
| `gate` | 活动配置字段 | 可插拔清单是守卫行唯一的 `.volatile()` 字段:从该行的设置卡片编辑(命名空间 = 该行的 profile 条目 id),在加载时读取一次。 |
|
|
154
173
|
| `strict.patch.yml` | 覆盖层 | 一个补丁层内以 `block` 强度开启每个门禁并启用覆盖率要求。 |
|
|
155
174
|
| `dsh-doublecheck/invariant` | 伴生行 | 通过宿主 `invariants` 注册表报告包自有写路径矛盾。 |
|
|
175
|
+
| `doublecheck` | 会话投影 | 客户端渲染的一行有界状态:阶段、最近裁决、红灯数、编辑数与 spec/review 标记。见[如何读这一行](#如何读这一行)。 |
|
|
176
|
+
|
|
177
|
+
### 如何读这一行
|
|
178
|
+
|
|
179
|
+
`doublecheck` 会话投影是一个**字符串**,而且刻意只有一行——这样任何客户端都能完整显示它、不会切掉任何内容。聊天桥的 `/status`、状态栏或任何自定义消费者都原样渲染:
|
|
180
|
+
|
|
181
|
+
```text
|
|
182
|
+
gate:rework r2 | stage:green | test:green edits:12 spec:yes review:yes | goal:ship parser fix
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
| 片段 | 读法 |
|
|
186
|
+
|---|---|
|
|
187
|
+
| `gate:<裁决> r<n>` | 最近一次交付门禁的裁决——未运行时是 `none`,否则是 `deliverable` 或 `rework`——以及它的红灯数 `r<n>`。 |
|
|
188
|
+
| `stage:<阶段>` | 依据持久证据到达的纪律阶段:`grill`、`design`、`red`、`green`、`review`、`verify`。 |
|
|
189
|
+
| `test:<颜色>` | 最近一次测试运行的颜色:`none`、`red`、`green`。 |
|
|
190
|
+
| `edits:<n>` | 从会话日志折叠出的实现编辑数(写测试文件不计入)。 |
|
|
191
|
+
| `spec:yes` / `spec:no` | 日志中是否存在已提交的 `doublecheck_spec`。 |
|
|
192
|
+
| `review:yes` / `review:no` | 是否存在对手审查记录。 |
|
|
193
|
+
| `goal:<摘录>` | 已提交的 spec 目标,会被裁剪。仅当 `spec:yes` 时出现。 |
|
|
194
|
+
|
|
195
|
+
这一行的长度**由构造保证有界**,因此不会被任何渲染器截断:
|
|
196
|
+
|
|
197
|
+
- 硬预算:**120 个字符**。凡是原样保留 120 字符以内取值的渲染器——微信桥的通用投影渲染器就是其中之一——都会完整显示这一行。旧的「对象」形态**空态就有 131 个字符**,这正是裁决与红灯数过去总被切掉的原因。
|
|
198
|
+
- 前三段是**无损的**。红灯数超过 `9999`、编辑数超过 `99999` 时打印为 `9999+` / `99999+`,而不会无限增长;非有限值或负数打印为 `0`。
|
|
199
|
+
- `goal:` 是唯一有损的一段。它会被压成单行(换行与控制字符变空格,`|` 变 `/`),并裁剪到剩余预算,最多 40 个字符,被裁剪时以 `…` 结尾。完整目标见 `/doublecheck status` 与交付报告。
|
|
200
|
+
- 这是一眼速览,不是记录本身:`/gate status` 与 `/doublecheck status` 渲染完整状态。
|
|
201
|
+
|
|
202
|
+
该投影的 `stateVersion` 为 **3**。递增它会丢弃旧版本写入的持久化投影缓存行,并以该键从会话日志重新折叠,因此升级后的会话会重算这一行,而不是显示过期值。折叠状态本身没有变化,升级前的会话不会因此加载失败。
|
|
156
203
|
|
|
157
204
|
## 门禁阶段
|
|
158
205
|
|
|
@@ -289,24 +336,24 @@ pnpm run pack:check # build + pack the tarball
|
|
|
289
336
|
|
|
290
337
|
## PerryLink DSH Plugin Family
|
|
291
338
|
|
|
292
|
-
|
|
339
|
+
本项目是 [PerryLink](https://github.com/PerryLink) 维护的 DeepSeek Harness 插件家族成员:**34 个活跃维护**,名册共 **42** 个,其中 **5 个已冻结**、**3 个已退役**——每一个都在下表保留自己的行,原因见「状态」列。如果它能帮到你,其他的也会:
|
|
293
340
|
|
|
294
|
-
| Plugin |
|
|
295
|
-
|
|
341
|
+
| Plugin | 一句话 | 状态 |
|
|
342
|
+
|---|---|---|
|
|
296
343
|
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Second-model auto-review on the approval chain, fail-closed by default | |
|
|
297
344
|
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | |
|
|
298
345
|
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Durable background child agents with a Web UI sidebar, messaging and interrupt | 🚫 **已退役** — 见上方说明 |
|
|
299
|
-
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. |
|
|
346
|
+
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | 🧊 已冻结 — 见仓库 README |
|
|
300
347
|
| **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | |
|
|
301
348
|
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | |
|
|
302
349
|
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore | |
|
|
303
|
-
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH |
|
|
350
|
+
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH | 🧊 已冻结 — 见仓库 README |
|
|
304
351
|
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness — Windows first. | |
|
|
305
352
|
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Terminal-style input history for the web composer: arrows, Ctrl+R search | |
|
|
306
353
|
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) | |
|
|
307
|
-
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. |
|
|
354
|
+
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | 🧊 已冻结 — 见仓库 README |
|
|
308
355
|
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Engineering-discipline guard: requirements grill, test gates, adversary review | |
|
|
309
|
-
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. |
|
|
356
|
+
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. | 🧊 已冻结 — 见仓库 README |
|
|
310
357
|
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics for DeepSeek Harness. | |
|
|
311
358
|
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Deterministic research reports for Chinese public mutual funds | |
|
|
312
359
|
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issues integration for DSH, every write gated by approval | |
|
|
@@ -317,7 +364,7 @@ This project is one of the **44 DeepSeek Harness plugins** maintained by [PerryL
|
|
|
317
364
|
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
|
|
318
365
|
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
|
|
319
366
|
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
|
|
320
|
-
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
367
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
321
368
|
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
|
|
322
369
|
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
|
|
323
370
|
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
|
|
@@ -326,7 +373,8 @@ This project is one of the **44 DeepSeek Harness plugins** maintained by [PerryL
|
|
|
326
373
|
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-development knowledge base as an on-demand agent skill | |
|
|
327
374
|
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
|
|
328
375
|
| **[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 | |
|
|
329
|
-
| **[dsh-
|
|
376
|
+
| **[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 | 🚫 已退役 —— 走廊由 `dsh-plugin-upgrade` 承担 |
|
|
377
|
+
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console | 🧊 已冻结 — 见仓库 README |
|
|
330
378
|
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research-report engine: content-addressed evidence ledger and sealed versions | |
|
|
331
379
|
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional quality scoring for DeepSeek Harness plugins. | |
|
|
332
380
|
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions in the Web sidebar with durable ordering | 🚫 **已退役** — 见上方说明 |
|
package/README.md
CHANGED
|
@@ -26,6 +26,8 @@
|
|
|
26
26
|
|
|
27
27
|
---
|
|
28
28
|
|
|
29
|
+
**📖 Ecosystem knowledge base** — measured data, not marketing: [plugin development guide · plugin-selection data · maintenance criteria](https://perrylink.github.io/dsh-plugin-guide/).
|
|
30
|
+
|
|
29
31
|
<!-- star-cta -->
|
|
30
32
|
## ⭐ 如果它帮到了你
|
|
31
33
|
|
|
@@ -34,6 +36,18 @@
|
|
|
34
36
|
*English:* part of a 40+ plugin family for DeepSeek Harness. If it is useful, **a star helps the next person find it** — nothing is gated behind it.
|
|
35
37
|
|
|
36
38
|
|
|
39
|
+
## What is dsh-doublecheck?
|
|
40
|
+
|
|
41
|
+
The delivery quality gate for DeepSeek Harness: grill the requirements, test the implementation, prove the delivery — then gate the handoff with a deliverable/rework decision.
|
|
42
|
+
|
|
43
|
+
Requirements get interrogated before the first edit; delivery is proven, never claimed.
|
|
44
|
+
|
|
45
|
+

|
|
46
|
+
|
|
47
|
+

|
|
48
|
+
|
|
49
|
+
*The same run, animated.*
|
|
50
|
+
|
|
37
51
|
## Compatibility
|
|
38
52
|
|
|
39
53
|
| Surface | Status |
|
|
@@ -70,9 +84,13 @@ grill ──▶ design ──▶ red ──▶ green ──▶ review ──▶
|
|
|
70
84
|
|
|
71
85
|
## Quick start
|
|
72
86
|
|
|
87
|
+
```sh
|
|
88
|
+
dsh plugin --profile web add github:PerryLink/dsh-doublecheck
|
|
89
|
+
```
|
|
90
|
+
|
|
73
91
|
```sh
|
|
74
92
|
# 1. install the bundle into your profile
|
|
75
|
-
dsh plugin --profile web add
|
|
93
|
+
dsh plugin --profile web add github:PerryLink/dsh-doublecheck
|
|
76
94
|
|
|
77
95
|
# or from npm (published releases)
|
|
78
96
|
dsh plugin --profile web add dsh-doublecheck
|
|
@@ -85,7 +103,7 @@ Both rows (`doublecheck-grill` and `doublecheck-guard`) activate automatically w
|
|
|
85
103
|
|
|
86
104
|
## Install & uninstall
|
|
87
105
|
|
|
88
|
-
- **git channel** (latest `main`): `dsh plugin --profile web add
|
|
106
|
+
- **git channel** (latest `main`): `dsh plugin --profile web add github:PerryLink/dsh-doublecheck` — the `prepare` script builds with production dependencies only.
|
|
89
107
|
- **npm channel** (published releases): `dsh plugin --profile web add dsh-doublecheck`.
|
|
90
108
|
- **tarball channel**: `pnpm pack` in this repo, then `dsh plugin --profile web add ./dsh-doublecheck-<version>.tgz`.
|
|
91
109
|
- **uninstall**: `dsh plugin --profile web remove dsh-doublecheck` (or remove the rows from the profile patch).
|
|
@@ -162,6 +180,34 @@ Misconfiguration fails loud at load: invalid regexes, empty or duplicated name l
|
|
|
162
180
|
| `gate` | live config field | The pluggable checklist is the guard row's one `.volatile()` field: it is edited from the row's settings card (namespace = the row's profile entry id) and read once at load. |
|
|
163
181
|
| `strict.patch.yml` | overlay | Every gate on at `block` intensity plus the coverage requirement, in one patch layer. |
|
|
164
182
|
| `dsh-doublecheck/invariant` | companion row | Reports package-owned write-path contradictions through the host `invariants` registry. |
|
|
183
|
+
| `doublecheck` | session projection | One bounded status line a client renders: stage, latest gate verdict, red-light count, edits, spec/review flags. See [Reading the status line](#reading-the-status-line). |
|
|
184
|
+
|
|
185
|
+
### Reading the status line
|
|
186
|
+
|
|
187
|
+
The `doublecheck` session projection is a plain **string**, and it is deliberately one line — the whole point is that a client can show it without cutting anything off. A chat bridge's `/status`, a status bar, or any custom consumer renders it as it is:
|
|
188
|
+
|
|
189
|
+
```text
|
|
190
|
+
gate:rework r2 | stage:green | test:green edits:12 spec:yes review:yes | goal:ship parser fix
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
| Segment | Reads as |
|
|
194
|
+
|---|---|
|
|
195
|
+
| `gate:<verdict> r<n>` | The latest delivery-gate verdict — `none` before any run, `deliverable`, or `rework` — and its red-light count `r<n>`. |
|
|
196
|
+
| `stage:<stage>` | The discipline stage reached on durable evidence: `grill`, `design`, `red`, `green`, `review`, `verify`. |
|
|
197
|
+
| `test:<color>` | The latest test-run color: `none`, `red`, `green`. |
|
|
198
|
+
| `edits:<n>` | Implementation edits folded from the session log (test-file writes are not counted). |
|
|
199
|
+
| `spec:yes` / `spec:no` | Whether a committed `doublecheck_spec` exists. |
|
|
200
|
+
| `review:yes` / `review:no` | Whether an adversary review record exists. |
|
|
201
|
+
| `goal:<excerpt>` | The committed spec goal, clipped. Present only when `spec:yes`. |
|
|
202
|
+
|
|
203
|
+
The line is bounded **by construction**, so no renderer truncates it:
|
|
204
|
+
|
|
205
|
+
- Hard budget: **120 characters**. A renderer that keeps values up to 120 characters — the WeChat bridge's generic projection renderer is one — shows the entire line. The old object-shaped payload was 131 characters when *empty*, which is why the verdict and the red count used to be cut off.
|
|
206
|
+
- The first three segments are **lossless**. Counts above `9999` red lights or `99999` edits print as `9999+` / `99999+` instead of growing without bound; a non-finite or negative count prints as `0`.
|
|
207
|
+
- `goal:` is the one lossy segment. It is flattened to a single line (newlines and control characters become spaces, `|` becomes `/`) and clipped to the budget that is left, at most 40 characters, ending in `…` when it was clipped. The complete goal is in `/doublecheck status` and the delivery report.
|
|
208
|
+
- This is a glance, not the record: `/gate status` and `/doublecheck status` render the full state.
|
|
209
|
+
|
|
210
|
+
The projection's `stateVersion` is **3**. Bumping it discards a persisted projection-cache row written by an older version and refolds the key from the session log, so an upgraded session recomputes the line instead of showing a stale one. The persisted fold state itself is unchanged, and a pre-upgrade session never fails to load.
|
|
165
211
|
|
|
166
212
|
## Gate phases
|
|
167
213
|
|
|
@@ -298,24 +344,24 @@ Static evidence: `dsh-plugin-doctor` K10–K13 report `pass` for every check on
|
|
|
298
344
|
|
|
299
345
|
## PerryLink DSH Plugin Family
|
|
300
346
|
|
|
301
|
-
This project is one of the **
|
|
347
|
+
This project is one of the **34 actively maintained** DeepSeek Harness plugins from [PerryLink](https://github.com/PerryLink) — the roster is **42**, of which **5** are frozen and **3** retired; every one keeps its row below, with the reason in the Status column. If this one helps you, the others likely will too:
|
|
302
348
|
|
|
303
|
-
| Plugin | One-liner |
|
|
304
|
-
|
|
349
|
+
| Plugin | One-liner | Status |
|
|
350
|
+
|---|---|---|
|
|
305
351
|
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | Second-model auto-review on the approval chain, fail-closed by default | |
|
|
306
352
|
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | Automatic strong/cheap model-tier routing with deterministic risk guards and a `/tier` command | |
|
|
307
353
|
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | Durable background child agents with a Web UI sidebar, messaging and interrupt | 🚫 **RETIRED** — see the note above |
|
|
308
|
-
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. |
|
|
354
|
+
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | 🧊 FROZEN — see the repo README |
|
|
309
355
|
| **[dsh-catalog](https://github.com/PerryLink/dsh-catalog)** | DSH Desktop Market standard catalog source for the PerryLink family | |
|
|
310
356
|
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | |
|
|
311
357
|
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore | |
|
|
312
|
-
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH |
|
|
358
|
+
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH | 🧊 FROZEN — see the repo README |
|
|
313
359
|
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | Cross-platform native desktop control for DeepSeek Harness — Windows first. | |
|
|
314
360
|
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | Terminal-style input history for the web composer: arrows, Ctrl+R search | |
|
|
315
361
|
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) | |
|
|
316
|
-
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. |
|
|
362
|
+
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. | 🧊 FROZEN — see the repo README |
|
|
317
363
|
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | Engineering-discipline guard: requirements grill, test gates, adversary review | |
|
|
318
|
-
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. |
|
|
364
|
+
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | Unified static-image generation routing for DeepSeek Harness. | 🧊 FROZEN — see the repo README |
|
|
319
365
|
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | Read-only performance diagnostics for DeepSeek Harness. | |
|
|
320
366
|
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | Deterministic research reports for Chinese public mutual funds | |
|
|
321
367
|
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | GitHub PR/issues integration for DSH, every write gated by approval | |
|
|
@@ -326,7 +372,7 @@ This project is one of the **44 DeepSeek Harness plugins** maintained by [PerryL
|
|
|
326
372
|
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | LSP diagnostics, formatting, completion, code actions and rename over language servers | |
|
|
327
373
|
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | PII masking middleware: anonymize at the model boundary, restore at the display layer | |
|
|
328
374
|
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | |
|
|
329
|
-
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
375
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | |
|
|
330
376
|
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. | |
|
|
331
377
|
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | Claude Code outputStyles-equivalent runtime style switching | |
|
|
332
378
|
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | Claude Code-style declarative allow/deny/ask permission rules with audit | |
|
|
@@ -335,7 +381,8 @@ This project is one of the **44 DeepSeek Harness plugins** maintained by [PerryL
|
|
|
335
381
|
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | Plugin-development knowledge base as an on-demand agent skill | |
|
|
336
382
|
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | |
|
|
337
383
|
| **[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 | |
|
|
338
|
-
| **[dsh-
|
|
384
|
+
| **[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 | 🚫 RETIRED — corridors carried by `dsh-plugin-upgrade` |
|
|
385
|
+
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console | 🧊 FROZEN — see the repo README |
|
|
339
386
|
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | Verifiable research-report engine: content-addressed evidence ledger and sealed versions | |
|
|
340
387
|
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | Multi-dimensional quality scoring for DeepSeek Harness plugins. | |
|
|
341
388
|
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | Pin sessions in the Web sidebar with durable ordering | 🚫 **RETIRED** — see the note above |
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal shape of the 0.2.1+ `subagents.startActivation` surface. The alpha
|
|
3
|
+
* host line only exposes `start(provider, request)`; keeping this structural
|
|
4
|
+
* lets the same guard code compile against both.
|
|
5
|
+
*/
|
|
6
|
+
import type { Agent } from '@deepseek-ai/dsh-agent';
|
|
7
|
+
import type { ContentBlock } from '@deepseek-ai/dsh-llm';
|
|
8
|
+
import type { SessionId } from '@deepseek-ai/dsh-session';
|
|
9
|
+
export interface GuardActivationService {
|
|
10
|
+
startActivation?: (spec: {
|
|
11
|
+
provider: string;
|
|
12
|
+
label: string;
|
|
13
|
+
request: {
|
|
14
|
+
prompt: ContentBlock[];
|
|
15
|
+
parent: Agent;
|
|
16
|
+
outputSchema: unknown;
|
|
17
|
+
maxDepth?: number;
|
|
18
|
+
agentOptions?: Record<string, unknown>;
|
|
19
|
+
agentPreset: string;
|
|
20
|
+
};
|
|
21
|
+
signal: AbortSignal;
|
|
22
|
+
delivery: 'caller';
|
|
23
|
+
}) => Promise<{
|
|
24
|
+
childId: SessionId;
|
|
25
|
+
result: Promise<{
|
|
26
|
+
stopReason: string;
|
|
27
|
+
structured?: unknown;
|
|
28
|
+
}>;
|
|
29
|
+
dispose(): Promise<void>;
|
|
30
|
+
}>;
|
|
31
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/lib/guard/gate.d.ts
CHANGED
|
@@ -38,6 +38,8 @@ export interface GateReviewerConfig {
|
|
|
38
38
|
provider: string;
|
|
39
39
|
/** Model route for the local reviewer; null means the main model reviews. */
|
|
40
40
|
model: string | null;
|
|
41
|
+
/** Read-only Agent Preset for the startActivation path. */
|
|
42
|
+
preset?: string;
|
|
41
43
|
/** Tools the local reviewer may call (read-only by default). */
|
|
42
44
|
tools: string[];
|
|
43
45
|
/** Hard time budget for one local reviewer run. */
|
package/lib/guard/gate.js
CHANGED
|
@@ -114,6 +114,7 @@ export const GateConfigSchema = z.object({
|
|
|
114
114
|
consistency: z.object({
|
|
115
115
|
enabled: z.boolean().default(true),
|
|
116
116
|
provider: z.string().min(1).default('fork'),
|
|
117
|
+
preset: z.string(),
|
|
117
118
|
model: z.union([z.string(), z.const(null)]).default(null),
|
|
118
119
|
tools: z.array(z.string()).default(['read', 'glob', 'grep']),
|
|
119
120
|
timeoutMs: z.number().default(120000),
|
|
@@ -123,6 +124,7 @@ export const GateConfigSchema = z.object({
|
|
|
123
124
|
enabled: z.boolean().default(true),
|
|
124
125
|
engine: z.union(['auto', 'local']).default('auto'),
|
|
125
126
|
provider: z.string().min(1).default('fork'),
|
|
127
|
+
preset: z.string(),
|
|
126
128
|
model: z.union([z.string(), z.const(null)]).default(null),
|
|
127
129
|
tools: z.array(z.string()).default(['read', 'glob', 'grep']),
|
|
128
130
|
timeoutMs: z.number().default(120000),
|
|
@@ -248,15 +250,37 @@ async function runLocalReviewer(ctx, reviewer, agent, task, label, signal) {
|
|
|
248
250
|
const runSignal = AbortSignal.any([signal, timeout]);
|
|
249
251
|
let run;
|
|
250
252
|
try {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
253
|
+
const activation = subagents;
|
|
254
|
+
if (typeof activation.startActivation === 'function') {
|
|
255
|
+
if (reviewer.preset === undefined) {
|
|
256
|
+
return { findings: null, unavailable: 'this host uses subagents.startActivation; set the reviewer preset to a read-only Agent Preset' };
|
|
257
|
+
}
|
|
258
|
+
const started = await activation.startActivation({
|
|
259
|
+
provider: reviewer.provider,
|
|
260
|
+
label,
|
|
261
|
+
request: {
|
|
262
|
+
prompt: [{ type: 'text', text: task }],
|
|
263
|
+
parent: agent,
|
|
264
|
+
outputSchema: GATE_FINDINGS_SCHEMA,
|
|
265
|
+
agentPreset: reviewer.preset,
|
|
266
|
+
...reviewer.model !== null ? { agentOptions: { model: reviewer.model } } : {},
|
|
267
|
+
},
|
|
268
|
+
signal: runSignal,
|
|
269
|
+
delivery: 'caller',
|
|
270
|
+
});
|
|
271
|
+
run = started;
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
run = await subagents.start(reviewer.provider, {
|
|
275
|
+
label,
|
|
276
|
+
prompt: [{ type: 'text', text: task }],
|
|
277
|
+
parent: agent,
|
|
278
|
+
signal: runSignal,
|
|
279
|
+
...reviewer.model !== null ? { agentOptions: { model: reviewer.model } } : {},
|
|
280
|
+
outputSchema: GATE_FINDINGS_SCHEMA,
|
|
281
|
+
toolFilter: { allow: reviewer.tools },
|
|
282
|
+
});
|
|
283
|
+
}
|
|
260
284
|
}
|
|
261
285
|
catch (error) {
|
|
262
286
|
return { findings: null, unavailable: String(error) };
|
package/lib/guard/index.d.ts
CHANGED
|
@@ -58,6 +58,8 @@ export interface Config {
|
|
|
58
58
|
adversaryModel: string | null;
|
|
59
59
|
/** Subagent provider name the critic runs on (default `fork`). */
|
|
60
60
|
adversaryProvider: string;
|
|
61
|
+
/** Read-only Agent Preset for hosts that use startActivation. */
|
|
62
|
+
adversaryPreset?: string;
|
|
61
63
|
/** Maximum structured findings injected into the session. */
|
|
62
64
|
adversaryMaxFindings: number;
|
|
63
65
|
/** Tools the critic may call (read-only by default; never mutation tools). */
|
|
@@ -125,6 +127,7 @@ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
|
|
|
125
127
|
}>>, "defined">;
|
|
126
128
|
adversaryModel: z<string | null, string | null, "defined">;
|
|
127
129
|
adversaryProvider: z<string, string, "defined">;
|
|
130
|
+
adversaryPreset: z<string, string, "plain">;
|
|
128
131
|
adversaryMaxFindings: z<number, number, "defined">;
|
|
129
132
|
adversaryTools: z<string[], string[], "defined">;
|
|
130
133
|
adversaryTimeoutMs: z<number, number, "defined">;
|
|
@@ -150,6 +153,7 @@ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
|
|
|
150
153
|
}>>, "defined">;
|
|
151
154
|
adversaryModel: z<string | null, string | null, "defined">;
|
|
152
155
|
adversaryProvider: z<string, string, "defined">;
|
|
156
|
+
adversaryPreset: z<string, string, "plain">;
|
|
153
157
|
adversaryMaxFindings: z<number, number, "defined">;
|
|
154
158
|
adversaryTools: z<string[], string[], "defined">;
|
|
155
159
|
adversaryTimeoutMs: z<number, number, "defined">;
|
package/lib/guard/index.js
CHANGED
|
@@ -94,6 +94,7 @@ export const Config = z.object({
|
|
|
94
94
|
}).default({ grill: true, tdd: true, adversary: false }),
|
|
95
95
|
adversaryModel: z.union([z.string(), z.const(null)]).default(null),
|
|
96
96
|
adversaryProvider: z.string().min(1).default('fork'),
|
|
97
|
+
adversaryPreset: z.string(),
|
|
97
98
|
adversaryMaxFindings: z.number().default(5),
|
|
98
99
|
adversaryTools: z.array(z.string()).default(['read', 'glob', 'grep']),
|
|
99
100
|
adversaryTimeoutMs: z.number().default(120000),
|
|
@@ -577,7 +578,8 @@ export function apply(ctx, config) {
|
|
|
577
578
|
}
|
|
578
579
|
});
|
|
579
580
|
// The `doublecheck` session projection: folds the same durable discipline
|
|
580
|
-
// facts the guard reads into
|
|
581
|
+
// facts the guard reads into the wire value a client renders — one bounded
|
|
582
|
+
// status line (`renderDoublecheckLine`), not a JSON object.
|
|
581
583
|
// Activates only when a projection registry is composed.
|
|
582
584
|
ctx.inject(['sessionProjections'], (projectionCtx) => {
|
|
583
585
|
const registry = projectionCtx.get('sessionProjections');
|
|
@@ -597,7 +599,16 @@ export function apply(ctx, config) {
|
|
|
597
599
|
viewSchema: doublecheckViewSchema,
|
|
598
600
|
view: viewDoublecheck,
|
|
599
601
|
},
|
|
600
|
-
|
|
602
|
+
// v3: the wire value changed type (object -> one bounded line). The
|
|
603
|
+
// bump is the persisted-cache invalidation the registry documents, and
|
|
604
|
+
// it IS the backward-compatibility story: the state fields themselves
|
|
605
|
+
// are unchanged and still pass `doublecheckStateSchema`, but a row
|
|
606
|
+
// written at `ver: 2` is discarded on a `ver: 3` unit and the key
|
|
607
|
+
// refolds from `init` over the full log (the host's `restoreFloor`
|
|
608
|
+
// drops to seq 0 on any version mismatch). No migration code, and a
|
|
609
|
+
// pre-upgrade session degrades to a recomputed line instead of a
|
|
610
|
+
// stale one or a crash.
|
|
611
|
+
stateVersion: 3,
|
|
601
612
|
}), 'dsh-doublecheck: projection');
|
|
602
613
|
});
|
|
603
614
|
// The invariant companion, registered from the main plugin so its checks
|
|
@@ -616,6 +627,7 @@ export function apply(ctx, config) {
|
|
|
616
627
|
function adversaryConfig(config) {
|
|
617
628
|
return {
|
|
618
629
|
adversaryProvider: config.adversaryProvider,
|
|
630
|
+
adversaryPreset: config.adversaryPreset,
|
|
619
631
|
adversaryModel: config.adversaryModel ?? null,
|
|
620
632
|
adversaryMaxFindings: config.adversaryMaxFindings,
|
|
621
633
|
adversaryTools: config.adversaryTools,
|
package/lib/guard/review.d.ts
CHANGED
|
@@ -21,6 +21,8 @@ import { type GuardProse, type ProseLanguage } from './prose.js';
|
|
|
21
21
|
/** The adversary knobs the review runner reads. */
|
|
22
22
|
export interface AdversaryConfig {
|
|
23
23
|
adversaryProvider: string;
|
|
24
|
+
/** Read-only Agent Preset for the startActivation path. */
|
|
25
|
+
adversaryPreset?: string;
|
|
24
26
|
adversaryModel: string | null;
|
|
25
27
|
adversaryMaxFindings: number;
|
|
26
28
|
adversaryTools: string[];
|
package/lib/guard/review.js
CHANGED
|
@@ -99,15 +99,37 @@ export async function runAdversaryReview(ctx, config, agent, turnSignal) {
|
|
|
99
99
|
const signal = turnSignal === undefined ? timeout : AbortSignal.any([turnSignal, timeout]);
|
|
100
100
|
let run;
|
|
101
101
|
try {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
102
|
+
const activation = subagents;
|
|
103
|
+
if (typeof activation.startActivation === 'function') {
|
|
104
|
+
if (config.adversaryPreset === undefined) {
|
|
105
|
+
return { verdict: 'unavailable', findings: [], text: prose.reviewUnavailableFailed('this host uses subagents.startActivation; set adversaryPreset to a read-only Agent Preset') };
|
|
106
|
+
}
|
|
107
|
+
const started = await activation.startActivation({
|
|
108
|
+
provider: config.adversaryProvider,
|
|
109
|
+
label: 'doublecheck-adversary',
|
|
110
|
+
request: {
|
|
111
|
+
prompt: [{ type: 'text', text: prose.criticTask }],
|
|
112
|
+
parent: agent,
|
|
113
|
+
outputSchema: REVIEW_OUTPUT_SCHEMA,
|
|
114
|
+
agentPreset: config.adversaryPreset,
|
|
115
|
+
...config.adversaryModel !== null ? { agentOptions: { model: config.adversaryModel } } : {},
|
|
116
|
+
},
|
|
117
|
+
signal,
|
|
118
|
+
delivery: 'caller',
|
|
119
|
+
});
|
|
120
|
+
run = started;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
run = await subagents.start(config.adversaryProvider, {
|
|
124
|
+
label: 'doublecheck-adversary',
|
|
125
|
+
prompt: [{ type: 'text', text: prose.criticTask }],
|
|
126
|
+
parent: agent,
|
|
127
|
+
signal,
|
|
128
|
+
...config.adversaryModel !== null ? { agentOptions: { model: config.adversaryModel } } : {},
|
|
129
|
+
outputSchema: REVIEW_OUTPUT_SCHEMA,
|
|
130
|
+
toolFilter: { allow: config.adversaryTools },
|
|
131
|
+
});
|
|
132
|
+
}
|
|
111
133
|
}
|
|
112
134
|
catch (error) {
|
|
113
135
|
// Provider absence, capability rejection, or a child that could not be
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-doublecheck",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.26",
|
|
4
4
|
"description": "Delivery quality gate for DeepSeek Harness: grill the requirements, test the implementation, prove the delivery, and gate the handoff with a deliverable/rework decision.",
|
|
5
5
|
"packageManager": "pnpm@11.7.0",
|
|
6
6
|
"repository": {
|