dsh-auto-review 0.12.1 → 0.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,18 @@
2
2
 
3
3
  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.
4
4
 
5
+ ## [Unreleased]
6
+
7
+ ## [0.12.2] - 2026-09-10
8
+
9
+ ### Changed
10
+
11
+ - Pin the `@deepseek-ai/dsh-*` dev/test dependencies to the published `0.1.5-rc.1` line and record `0.1.5-rc.1` in `dshWorkshop.compatibility.dshVersions`; the monthly Compat workflow now runs against `0.1.5-rc.1`. The peer range `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0` is unchanged, so no supported host line is dropped.
12
+
13
+ ### Docs
14
+
15
+ - Refresh the five-language README compatibility baseline to `dsh-v0.1.5-rc.1` (verified 2026-09-10).
16
+
5
17
  ## [0.12.1] - 2026-09-09
6
18
 
7
19
  ### Fixed
package/README.es.md CHANGED
@@ -27,7 +27,7 @@
27
27
 
28
28
  | Superficie | Estado |
29
29
  |---|---|
30
- | Harness | DeepSeek Harness `dsh-v0.1.5-alpha.1` (tag de GitHub, verificado el 2026-09-09). Soporte npm de doble línea: pins de desarrollo y dependencias de runtime `0.1.5-alpha.1`, peers `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0` — el código del plugin detecta ambas líneas de host publicadas (detección de características) y cada línea ejecuta la cadena completa de gates; las dependencias de runtime siguen la línea alpha para que una instalación en un perfil nunca sombree el árbol `0.1.5-alpha.1` del host. |
30
+ | Harness | DeepSeek Harness `dsh-v0.1.5-rc.1` (tag de GitHub, verificado el 2026-09-10). Soporte npm de doble línea: pins de desarrollo y dependencias de runtime `0.1.5-rc.1`, peers `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0` — el código del plugin detecta ambas líneas de host publicadas (detección de características) y cada línea ejecuta la cadena completa de gates; las dependencias de runtime siguen la línea alpha para que una instalación en un perfil nunca sombree el árbol `0.1.5-rc.1` del host. |
31
31
  | Node | `^22.19.0 \|\| >=24.0.0` |
32
32
  | Plataformas | Todas (answerer de host; panel web opcional mediante la capacidad de proyección de sesión) |
33
33
  | Modelo | Cualquiera (el revisor hereda la ruta del agente de sesión; `reviewerModel` la reemplaza) |
@@ -102,7 +102,7 @@ Todas las opciones son campos Schemastery `Config` (modificables desde cordis.ym
102
102
  | `verdictCacheTtlMs` | `60000` | Reutiliza un veredicto reciente para una huella `herramienta + argumentos` idéntica; `0` desactiva la caché. Solo se aplica con `contextBudget.turns: 0` — un veredicto que depende de la transcripción no es reproducible solo desde `herramienta + argumentos` |
103
103
  | `verdictCacheMaxEntries` | `256` | Máximo de huellas en caché antes de desalojar la más antigua |
104
104
  | `language` | `en` | Idioma de la UI de la salida del comando `/auto-review` (`en` \| `zh`) |
105
- | `allowUnmarkedAudit` | `false` | Fuerza la auditoría del registro de sesión en hosts que descartan el marcador `ignorable` (peligroso: los eventos sin marcar hacen las sesiones irrecuperables en otros hosts); por defecto se detecta y se degrada (adaptado el 2026-09-02, reverificado contra `0.1.5-alpha.1` el 2026-09-09) |
105
+ | `allowUnmarkedAudit` | `false` | Fuerza la auditoría del registro de sesión en hosts que descartan el marcador `ignorable` (peligroso: los eventos sin marcar hacen las sesiones irrecuperables en otros hosts); por defecto se detecta y se degrada (adaptado el 2026-09-02, reverificado contra `0.1.5-rc.1` el 2026-09-10) |
106
106
 
107
107
  Ejemplo (forma completa anotada: `fixtures/config/config-full.yaml`):
108
108
 
@@ -318,7 +318,7 @@ El servidor es de solo lectura y determinista: sin red, sin modelo, sin escritur
318
318
 
319
319
  - **Permisos**: el manifiesto del workshop declara `session:append`, `approval:answer`, `subagent:spawn`, `command:register` y `tools:observe`.
320
320
  - **Datos**: nada se guarda en disco; el búfer circular de informes está en memoria y acotado. Sin peticiones de red propias.
321
- - **Registro de sesión**: los eventos `autoReview/*` llevan identidad del revisor, veredicto, razón, riesgo y duración — añadidos con el marcador de sobre `ignorable: true` para que cualquier compilación cargue el registro. Los hosts cuyo `Session.append` es anterior al marcador (todas las líneas rc publicadas hasta `0.1.1-rc.2` — ninguna versión lo estampa aún) se detectan antes del primer append (precomprobación de la versión del peer y luego sondeo del sobre devuelto); los hosts `0.1.2-rc.1`, `0.1.3-alpha.2` y `0.1.5-alpha.1` mantienen el campo `ignorable` en el sobre, pero `Session.append` no ofrece ninguna forma de estamparlo (su tercer parámetro es `SurfaceIntent`, solo para eventos de superficie), y la ruta de lectura de persistencia rechaza los tipos de evento desconocidos sin marcar, por lo que esas líneas — y las versiones irresolubles — también cierran en fallo antes de cualquier append. La auditoría se degrada a un espejo en memoria con comentarios sin marcador, de modo que las sesiones siguen siendo cargables en todas partes.
321
+ - **Registro de sesión**: los eventos `autoReview/*` llevan identidad del revisor, veredicto, razón, riesgo y duración — añadidos con el marcador de sobre `ignorable: true` para que cualquier compilación cargue el registro. Los hosts cuyo `Session.append` es anterior al marcador (todas las líneas rc publicadas hasta `0.1.1-rc.2` — ninguna versión lo estampa aún) se detectan antes del primer append (precomprobación de la versión del peer y luego sondeo del sobre devuelto); los hosts `0.1.2-rc.1`, `0.1.3-alpha.2` y `0.1.5-rc.1` mantienen el campo `ignorable` en el sobre, pero `Session.append` no ofrece ninguna forma de estamparlo (su tercer parámetro es `SurfaceIntent`, solo para eventos de superficie), y la ruta de lectura de persistencia rechaza los tipos de evento desconocidos sin marcar, por lo que esas líneas — y las versiones irresolubles — también cierran en fallo antes de cualquier append. La auditoría se degrada a un espejo en memoria con comentarios sin marcador, de modo que las sesiones siguen siendo cargables en todas partes.
322
322
 
323
323
  ## Límites de seguridad
324
324
 
package/README.hi.md CHANGED
@@ -27,7 +27,7 @@
27
27
 
28
28
  | सतह | स्थिति |
29
29
  |---|---|
30
- | Harness | DeepSeek Harness `dsh-v0.1.5-alpha.1` (GitHub tag, 2026-09-09 को सत्यापित)। दोहरी-लाइन npm समर्थन: dev पिन और रनटाइम निर्भरताएँ `0.1.5-alpha.1`, peers `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0` — प्लगइन कोड दोनों प्रकाशित होस्ट लाइनों को फ़ीचर-डिटेक्ट करता है और हर लाइन पूरी गेट श्रृंखला चलाती है; रनटाइम निर्भरताएँ alpha लाइन का पालन करती हैं ताकि प्रोफ़ाइल इंस्टॉल होस्ट के अपने `0.1.5-alpha.1` ट्री को शैडो न करें। |
30
+ | Harness | DeepSeek Harness `dsh-v0.1.5-rc.1` (GitHub tag, 2026-09-10 को सत्यापित)। दोहरी-लाइन npm समर्थन: dev पिन और रनटाइम निर्भरताएँ `0.1.5-rc.1`, peers `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0` — प्लगइन कोड दोनों प्रकाशित होस्ट लाइनों को फ़ीचर-डिटेक्ट करता है और हर लाइन पूरी गेट श्रृंखला चलाती है; रनटाइम निर्भरताएँ alpha लाइन का पालन करती हैं ताकि प्रोफ़ाइल इंस्टॉल होस्ट के अपने `0.1.5-rc.1` ट्री को शैडो न करें। |
31
31
  | Node | `^22.19.0 \|\| >=24.0.0` |
32
32
  | प्लेटफ़ॉर्म | सभी (होस्ट answerer; सत्र-प्रोजेक्शन क्षमता के ज़रिए वैकल्पिक वेब समीक्षा पैनल) |
33
33
  | मॉडल | कोई भी (समीक्षक सत्र एजेंट का मार्ग विरासत में लेता है; `reviewerModel` उसे बदल देता है) |
@@ -102,7 +102,7 @@ dsh --profile web --dump-config | grep -A4 'id: auto-review'
102
102
  | `verdictCacheTtlMs` | `60000` | समान `टूल + तर्क` फ़िंगरप्रिंट के लिए हालिया निर्णय पुनः उपयोग करें; `0` कैश बंद करता है। यह केवल `contextBudget.turns: 0` के साथ लागू होता है — ट्रांसक्रिप्ट पर निर्भर निर्णय केवल `टूल + तर्क` से दोहराया नहीं जा सकता |
103
103
  | `verdictCacheMaxEntries` | `256` | सबसे पुराने को निकालने से पहले कैश किए गए फ़िंगरप्रिंट की अधिकतम संख्या |
104
104
  | `language` | `en` | `/auto-review` कमांड आउटपुट की UI भाषा (`en` \| `zh`) |
105
- | `allowUnmarkedAudit` | `false` | `ignorable` मार्कर छोड़ने वाले होस्ट पर सत्र-लॉग ऑडिट बलपूर्वक चालू करें (खतरनाक: बिना मार्कर वाली घटनाएँ अन्य होस्ट पर सत्र अप्राप्य बनाती हैं); डिफ़ॉल्ट पहचान-और-डिग्रेड है (2026-09-02 को अनुकूलित, 2026-09-09 को `0.1.5-alpha.1` के विरुद्ध पुनः सत्यापित) |
105
+ | `allowUnmarkedAudit` | `false` | `ignorable` मार्कर छोड़ने वाले होस्ट पर सत्र-लॉग ऑडिट बलपूर्वक चालू करें (खतरनाक: बिना मार्कर वाली घटनाएँ अन्य होस्ट पर सत्र अप्राप्य बनाती हैं); डिफ़ॉल्ट पहचान-और-डिग्रेड है (2026-09-02 को अनुकूलित, 2026-09-10 को `0.1.5-rc.1` के विरुद्ध पुनः सत्यापित) |
106
106
 
107
107
  उदाहरण (टिप्पणी-युक्त पूर्ण रूप: `fixtures/config/config-full.yaml`):
108
108
 
@@ -318,7 +318,7 @@ Claude Desktop (`claude_desktop_config.json`) उदाहरण:
318
318
 
319
319
  - **अनुमतियाँ**: workshop मेनिफ़ेस्ट `session:append`, `approval:answer`, `subagent:spawn`, `command:register` और `tools:observe` घोषित करता है।
320
320
  - **डेटा**: डिस्क पर कुछ नहीं लिखा जाता; रिपोर्ट रिंग बफ़र मेमोरी में और सीमित है। अपनी ओर से कोई नेटवर्क अनुरोध नहीं।
321
- - **सत्र लॉग**: `autoReview/*` घटनाएँ समीक्षक पहचान, निर्णय, कारण, जोखिम और अवधि रखती हैं — लिफ़ाफ़े के `ignorable: true` मार्कर के साथ जोड़ी जाती हैं ताकि कोई भी बिल्ड लॉग लोड कर सके। जिन होस्ट का `Session.append` मार्कर से पुराना है (`0.1.1-rc.2` तक की हर रिलीज़ rc लाइन — कोई रिलीज़ अभी मार्कर नहीं छापती) उन्हें पहले append से पहले ही पहचान लिया जाता है (peer संस्करण पूर्व-जाँच, फिर लौटे लिफ़ाफ़े की जाँच); होस्ट `0.1.2-rc.1`, `0.1.3-alpha.2` और `0.1.5-alpha.1` लिफ़ाफ़े पर `ignorable` फ़ील्ड रखते हैं, लेकिन `Session.append` उसे स्टैम्प करने का कोई तरीका नहीं देता (इसका तीसरा पैरामीटर केवल सतही घटनाओं के लिए `SurfaceIntent` है), और पर्सिस्टेंस रीड पथ बिना-मार्क वाले अज्ञात घटना प्रकारों को अस्वीकार करता है, इसलिए वे लाइनें — और असमाधेय संस्करण — भी किसी भी append से पहले fail closed हो जाते हैं। ऑडिट बिना मार्कर वाले फीडबैक के साथ इन-मेमोरी मिरर में डिग्रेड हो जाता है — सत्र हर जगह लोड होने योग्य रहते हैं।
321
+ - **सत्र लॉग**: `autoReview/*` घटनाएँ समीक्षक पहचान, निर्णय, कारण, जोखिम और अवधि रखती हैं — लिफ़ाफ़े के `ignorable: true` मार्कर के साथ जोड़ी जाती हैं ताकि कोई भी बिल्ड लॉग लोड कर सके। जिन होस्ट का `Session.append` मार्कर से पुराना है (`0.1.1-rc.2` तक की हर रिलीज़ rc लाइन — कोई रिलीज़ अभी मार्कर नहीं छापती) उन्हें पहले append से पहले ही पहचान लिया जाता है (peer संस्करण पूर्व-जाँच, फिर लौटे लिफ़ाफ़े की जाँच); होस्ट `0.1.2-rc.1`, `0.1.3-alpha.2` और `0.1.5-rc.1` लिफ़ाफ़े पर `ignorable` फ़ील्ड रखते हैं, लेकिन `Session.append` उसे स्टैम्प करने का कोई तरीका नहीं देता (इसका तीसरा पैरामीटर केवल सतही घटनाओं के लिए `SurfaceIntent` है), और पर्सिस्टेंस रीड पथ बिना-मार्क वाले अज्ञात घटना प्रकारों को अस्वीकार करता है, इसलिए वे लाइनें — और असमाधेय संस्करण — भी किसी भी append से पहले fail closed हो जाते हैं। ऑडिट बिना मार्कर वाले फीडबैक के साथ इन-मेमोरी मिरर में डिग्रेड हो जाता है — सत्र हर जगह लोड होने योग्य रहते हैं।
322
322
 
323
323
  ## सुरक्षा सीमाएँ
324
324
 
package/README.md CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
  | Surface | Status |
30
30
  |---|---|
31
- | Harness | DeepSeek Harness `dsh-v0.1.5-alpha.1` (GitHub tag, verified 2026-09-09). Dual-line npm support: dev pins and runtime deps `0.1.5-alpha.1`, peers `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0` — the plugin code feature-detects both published host lines and each line runs the full gate chain; the runtime dependency pins follow the alpha line so a profile install never shadows the host's own `0.1.5-alpha.1` tree. |
31
+ | Harness | DeepSeek Harness `dsh-v0.1.5-rc.1` (GitHub tag, verified 2026-09-10). Dual-line npm support: dev pins and runtime deps `0.1.5-rc.1`, peers `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0` — the plugin code feature-detects both published host lines and each line runs the full gate chain; the runtime dependency pins follow the alpha line so a profile install never shadows the host's own `0.1.5-rc.1` tree. |
32
32
  | Node | `^22.19.0 \|\| >=24.0.0` |
33
33
  | Platforms | All (host answerer; optional Web review panel via the session-projection capability) |
34
34
  | Model | Any (the reviewer inherits the session agent's route; `reviewerModel` overrides) |
@@ -104,7 +104,7 @@ All tunables are Schemastery `Config` fields (changeable from cordis.yml). An id
104
104
  | `verdictCacheTtlMs` | `60000` | Reuse a recent verdict for an identical `tool + arguments` fingerprint; `0` disables the cache. Only applies with `contextBudget.turns: 0` — a transcript-dependent verdict is not replayable from `tool + arguments` alone |
105
105
  | `verdictCacheMaxEntries` | `256` | Maximum cached fingerprints before oldest-eviction |
106
106
  | `language` | `en` | UI language of the `/auto-review` command output (`en` \| `zh`) |
107
- | `allowUnmarkedAudit` | `false` | Force session-log audit on hosts that drop the `ignorable` marker or fail-closed on unknown event types (host `0.1.2-rc.1`+) (dangerous: unmarked events make sessions unresumable elsewhere); default is detect-and-degrade (adapted 2026-09-02, re-verified against `0.1.5-alpha.1` on 2026-09-09): the session envelope keeps its ignorable field for stored-log read compatibility only - Session.append still cannot stamp it, so audit-gate behavior is unchanged. |
107
+ | `allowUnmarkedAudit` | `false` | Force session-log audit on hosts that drop the `ignorable` marker or fail-closed on unknown event types (host `0.1.2-rc.1`+) (dangerous: unmarked events make sessions unresumable elsewhere); default is detect-and-degrade (adapted 2026-09-02, re-verified against `0.1.5-rc.1` on 2026-09-10): the session envelope keeps its ignorable field for stored-log read compatibility only - Session.append still cannot stamp it, so audit-gate behavior is unchanged. |
108
108
 
109
109
  Example (annotated full form: `fixtures/config/config-full.yaml`):
110
110
 
@@ -320,7 +320,7 @@ The server is read-only and deterministic: no network, no model, no writes.
320
320
 
321
321
  - **Permissions**: the workshop manifest declares `session:append`, `approval:answer`, `subagent:spawn`, `command:register`, and `tools:observe`.
322
322
  - **Data**: nothing is stored on disk; the report ring buffer is in-memory and bounded. No network requests of its own.
323
- - **Session log**: `autoReview/*` events carry reviewer identity, verdict, reason, risk, and duration — appended with the envelope's `ignorable: true` marker so any build loads the log. Hosts whose `Session.append` predates the marker (every released rc line through `0.1.1-rc.2` — no release stamps it yet) are detected before the first append (peer-version pre-check); hosts `0.1.2-rc.1`, `0.1.3-alpha.2`, and `0.1.5-alpha.1` keep the `ignorable` field on the envelope but `Session.append` offers no way to stamp it (its third parameter is `SurfaceIntent` for surface events only), and the persistence read path refuses unmarked unknown event types, so those lines — and unresolvable versions — also fail closed before any append. Audit then degrades to an in-memory mirror with marker-free feedback, so sessions stay loadable everywhere.
323
+ - **Session log**: `autoReview/*` events carry reviewer identity, verdict, reason, risk, and duration — appended with the envelope's `ignorable: true` marker so any build loads the log. Hosts whose `Session.append` predates the marker (every released rc line through `0.1.1-rc.2` — no release stamps it yet) are detected before the first append (peer-version pre-check); hosts `0.1.2-rc.1`, `0.1.3-alpha.2`, and `0.1.5-rc.1` keep the `ignorable` field on the envelope but `Session.append` offers no way to stamp it (its third parameter is `SurfaceIntent` for surface events only), and the persistence read path refuses unmarked unknown event types, so those lines — and unresolvable versions — also fail closed before any append. Audit then degrades to an in-memory mirror with marker-free feedback, so sessions stay loadable everywhere.
324
324
 
325
325
  ## Security boundaries
326
326
 
package/README.pt.md CHANGED
@@ -27,7 +27,7 @@
27
27
 
28
28
  | Superfície | Status |
29
29
  |---|---|
30
- | Harness | DeepSeek Harness `dsh-v0.1.5-alpha.1` (tag do GitHub, verificado em 2026-09-09). Suporte npm de linha dupla: pins de desenvolvimento e dependências de runtime `0.1.5-alpha.1`, peers `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0` — o código do plugin detecta ambas as linhas de host publicadas (detecção de recursos) e cada linha executa a cadeia completa de gates; as dependências de runtime seguem a linha alpha para que uma instalação em um perfil nunca sombreie a árvore `0.1.5-alpha.1` do host. |
30
+ | Harness | DeepSeek Harness `dsh-v0.1.5-rc.1` (tag do GitHub, verificado em 2026-09-10). Suporte npm de linha dupla: pins de desenvolvimento e dependências de runtime `0.1.5-rc.1`, peers `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0` — o código do plugin detecta ambas as linhas de host publicadas (detecção de recursos) e cada linha executa a cadeia completa de gates; as dependências de runtime seguem a linha alpha para que uma instalação em um perfil nunca sombreie a árvore `0.1.5-rc.1` do host. |
31
31
  | Node | `^22.19.0 \|\| >=24.0.0` |
32
32
  | Plataformas | Todas (answerer de host; painel web opcional via capacidade de projeção de sessão) |
33
33
  | Modelo | Qualquer (o revisor herda a rota do agente da sessão; `reviewerModel` sobrescreve) |
@@ -102,7 +102,7 @@ Todos os ajustes são campos Schemastery `Config` (alteráveis no cordis.yml). U
102
102
  | `verdictCacheTtlMs` | `60000` | Reutiliza um veredito recente para uma impressão `ferramenta + argumentos` idêntica; `0` desativa o cache. Só se aplica com `contextBudget.turns: 0` — um veredito que depende da transcrição não é reproduzível apenas a partir de `ferramenta + argumentos` |
103
103
  | `verdictCacheMaxEntries` | `256` | Máximo de impressões em cache antes de despejar a mais antiga |
104
104
  | `language` | `en` | Idioma da UI da saída do comando `/auto-review` (`en` \| `zh`) |
105
- | `allowUnmarkedAudit` | `false` | Força a auditoria do registro de sessão em hosts que descartam o marcador `ignorable` (perigoso: eventos sem marcador tornam sessões irrecuperáveis em outros hosts); o padrão é detectar e degradar (adaptado em 2026-09-02, reverificado contra `0.1.5-alpha.1` em 2026-09-09) |
105
+ | `allowUnmarkedAudit` | `false` | Força a auditoria do registro de sessão em hosts que descartam o marcador `ignorable` (perigoso: eventos sem marcador tornam sessões irrecuperáveis em outros hosts); o padrão é detectar e degradar (adaptado em 2026-09-02, reverificado contra `0.1.5-rc.1` em 2026-09-10) |
106
106
 
107
107
  Exemplo (forma completa anotada: `fixtures/config/config-full.yaml`):
108
108
 
@@ -318,7 +318,7 @@ O servidor é somente-leitura e determinista: sem rede, sem modelo, sem gravaç
318
318
 
319
319
  - **Permissões**: o manifesto do workshop declara `session:append`, `approval:answer`, `subagent:spawn`, `command:register` e `tools:observe`.
320
320
  - **Dados**: nada é gravado em disco; o buffer circular de relatórios fica em memória e é limitado. Sem requisições de rede próprias.
321
- - **Log de sessão**: os eventos `autoReview/*` carregam identidade do revisor, veredito, razão, risco e duração — anexados com o marcador de envelope `ignorable: true` para que qualquer build carregue o log. Hosts cujo `Session.append` é anterior ao marcador (todas as linhas rc publicadas até `0.1.1-rc.2` — nenhuma versão o estampa ainda) são detectados antes do primeiro append (pré-checagem da versão do peer e, em seguida, sondagem do envelope retornado); os hosts `0.1.2-rc.1`, `0.1.3-alpha.2` e `0.1.5-alpha.1` mantêm o campo `ignorable` no envelope, mas o `Session.append` não oferece nenhuma forma de estampá-lo (seu terceiro parâmetro é `SurfaceIntent`, apenas para eventos de superfície), e o caminho de leitura da persistência recusa tipos de evento desconhecidos sem marcação, então essas linhas — e versões irresolvíveis — também falham fechadas antes de qualquer append. A auditoria degrada para um espelho em memória com feedback sem marcador, mantendo as sessões carregáveis em qualquer lugar.
321
+ - **Log de sessão**: os eventos `autoReview/*` carregam identidade do revisor, veredito, razão, risco e duração — anexados com o marcador de envelope `ignorable: true` para que qualquer build carregue o log. Hosts cujo `Session.append` é anterior ao marcador (todas as linhas rc publicadas até `0.1.1-rc.2` — nenhuma versão o estampa ainda) são detectados antes do primeiro append (pré-checagem da versão do peer e, em seguida, sondagem do envelope retornado); os hosts `0.1.2-rc.1`, `0.1.3-alpha.2` e `0.1.5-rc.1` mantêm o campo `ignorable` no envelope, mas o `Session.append` não oferece nenhuma forma de estampá-lo (seu terceiro parâmetro é `SurfaceIntent`, apenas para eventos de superfície), e o caminho de leitura da persistência recusa tipos de evento desconhecidos sem marcação, então essas linhas — e versões irresolvíveis — também falham fechadas antes de qualquer append. A auditoria degrada para um espelho em memória com feedback sem marcador, mantendo as sessões carregáveis em qualquer lugar.
322
322
 
323
323
  ## Limites de segurança
324
324
 
package/README.zh.md CHANGED
@@ -27,7 +27,7 @@
27
27
 
28
28
  | 方面 | 状态 |
29
29
  |---|---|
30
- | Harness | DeepSeek Harness `dsh-v0.1.5-alpha.1`(GitHub tag,2026-09-09 已核验)。双线 npm 支持:dev 钉号与运行时依赖均为 `0.1.5-alpha.1`、peer 范围 `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0` —— 插件代码兼容两条已发布宿主线(特性探测),两线均跑完整门禁链;运行时依赖钉号随 alpha 线,避免 profile 安装遮蔽宿主自带的 `0.1.5-alpha.1` 树。 |
30
+ | Harness | DeepSeek Harness `dsh-v0.1.5-rc.1`(GitHub tag,2026-09-10 已核验)。双线 npm 支持:dev 钉号与运行时依赖均为 `0.1.5-rc.1`、peer 范围 `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0` —— 插件代码兼容两条已发布宿主线(特性探测),两线均跑完整门禁链;运行时依赖钉号随 alpha 线,避免 profile 安装遮蔽宿主自带的 `0.1.5-rc.1` 树。 |
31
31
  | Node | `^22.19.0 \|\| >=24.0.0` |
32
32
  | 平台 | 全部(宿主 answerer;可选 Web 审查面板,依赖会话投影能力) |
33
33
  | 模型 | 任意(审查器默认继承会话代理的路由;`reviewerModel` 可覆盖) |
@@ -102,7 +102,7 @@ dsh --profile web --dump-config | grep -A4 'id: auto-review'
102
102
  | `verdictCacheTtlMs` | `60000` | 对相同 `工具 + 参数` 指纹复用近期裁决的时长;`0` 关闭缓存。仅在 `contextBudget.turns: 0` 时生效——依赖会话记录的裁决无法仅凭 `工具 + 参数` 重放 |
103
103
  | `verdictCacheMaxEntries` | `256` | 缓存指纹上限,超出后淘汰最旧条目 |
104
104
  | `language` | `en` | `/auto-review` 命令输出的界面语言(`en` \| `zh`) |
105
- | `allowUnmarkedAudit` | `false` | 强制在丢弃 `ignorable` 标记的宿主上写入会话审计(危险:未标记事件会让会话在其他宿主上无法恢复);默认自动探测并降级(2026-09-02 适配,2026-09-09 针对 `0.1.5-alpha.1` 复核) |
105
+ | `allowUnmarkedAudit` | `false` | 强制在丢弃 `ignorable` 标记的宿主上写入会话审计(危险:未标记事件会让会话在其他宿主上无法恢复);默认自动探测并降级(2026-09-02 适配,2026-09-10 针对 `0.1.5-rc.1` 复核) |
106
106
 
107
107
  示例(完整注释形式见 `fixtures/config/config-full.yaml`):
108
108
 
@@ -318,7 +318,7 @@ Claude Desktop(`claude_desktop_config.json`)配置示例:
318
318
 
319
319
  - **权限**:workshop 清单声明 `session:append`、`approval:answer`、`subagent:spawn`、`command:register` 与 `tools:observe`。
320
320
  - **数据**:不向磁盘写入任何内容;报告环形缓冲在内存中且有界。自身不发起网络请求。
321
- - **会话日志**:`autoReview/*` 事件携带审查器身份、裁决、理由、风险与耗时 —— 以信封 `ignorable: true` 标记追加,任何构建都能加载日志。`Session.append` 早于该标记的宿主(迄今发布的所有 rc 版本,至 `0.1.1-rc.2`——任何发布版都还未盖标记)会在首次追加前被探测出来(peer 版本预检 + 返回信封探测);宿主 `0.1.2-rc.1`、`0.1.3-alpha.2` 与 `0.1.5-alpha.1` 在信封上保留 `ignorable` 字段,但 `Session.append` 没有任何方式为其盖章(其第三参数是仅用于 surface 事件的 `SurfaceIntent`),且持久化读取路径拒绝未标记的未知事件类型,因此这些版本线——以及无法解析的版本——同样在首次追加前 fail closed。审计降级为内存镜像 + 无标记反馈,会话日志始终保持可加载。
321
+ - **会话日志**:`autoReview/*` 事件携带审查器身份、裁决、理由、风险与耗时 —— 以信封 `ignorable: true` 标记追加,任何构建都能加载日志。`Session.append` 早于该标记的宿主(迄今发布的所有 rc 版本,至 `0.1.1-rc.2`——任何发布版都还未盖标记)会在首次追加前被探测出来(peer 版本预检 + 返回信封探测);宿主 `0.1.2-rc.1`、`0.1.3-alpha.2` 与 `0.1.5-rc.1` 在信封上保留 `ignorable` 字段,但 `Session.append` 没有任何方式为其盖章(其第三参数是仅用于 surface 事件的 `SurfaceIntent`),且持久化读取路径拒绝未标记的未知事件类型,因此这些版本线——以及无法解析的版本——同样在首次追加前 fail closed。审计降级为内存镜像 + 无标记反馈,会话日志始终保持可加载。
322
322
 
323
323
  ## 安全边界
324
324
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-auto-review",
3
- "version": "0.12.1",
3
+ "version": "0.12.2",
4
4
  "description": "Second-model AI auto-review for DeepSeek Harness approval requests: a read-only reviewer subagent decides allow/deny on the approval answerer chain, with fail-closed fallback and full session-log audit.",
5
5
  "private": false,
6
6
  "author": {
@@ -107,7 +107,7 @@
107
107
  "dshVersions": [
108
108
  "0.1.2-rc.1",
109
109
  "0.1.3-alpha.2",
110
- "0.1.5-alpha.1"
110
+ "0.1.5-rc.1"
111
111
  ]
112
112
  },
113
113
  "capability": {
@@ -171,21 +171,21 @@
171
171
  }
172
172
  },
173
173
  "dependencies": {
174
- "@deepseek-ai/dsh-app-boot": "0.1.5-alpha.1",
175
- "@deepseek-ai/dsh-credentials-local": "0.1.5-alpha.1",
176
- "@deepseek-ai/dsh-fs-observation-policy": "0.1.5-alpha.1",
177
- "@deepseek-ai/dsh-fs-sandbox": "0.1.5-alpha.1",
178
- "@deepseek-ai/dsh-home-paths": "0.1.5-alpha.1",
179
- "@deepseek-ai/dsh-llm-deepseek": "0.1.5-alpha.1",
180
- "@deepseek-ai/dsh-sandbox-local": "0.1.5-alpha.1",
181
- "@deepseek-ai/dsh-sandbox-policy": "0.1.5-alpha.1",
182
- "@deepseek-ai/dsh-session-persistence-jsonl": "0.1.5-alpha.1",
183
- "@deepseek-ai/dsh-settings-file": "0.1.5-alpha.1",
184
- "@deepseek-ai/dsh-subagent-fork-in-process": "0.1.5-alpha.1",
185
- "@deepseek-ai/dsh-subagent-spawn-in-process": "0.1.5-alpha.1",
186
- "@deepseek-ai/dsh-subprocess-local": "0.1.5-alpha.1",
187
- "@deepseek-ai/dsh-tool-fs": "0.1.5-alpha.1",
188
- "@deepseek-ai/dsh-tool-fs-search": "0.1.5-alpha.1",
174
+ "@deepseek-ai/dsh-app-boot": "0.1.5-rc.1",
175
+ "@deepseek-ai/dsh-credentials-local": "0.1.5-rc.1",
176
+ "@deepseek-ai/dsh-fs-observation-policy": "0.1.5-rc.1",
177
+ "@deepseek-ai/dsh-fs-sandbox": "0.1.5-rc.1",
178
+ "@deepseek-ai/dsh-home-paths": "0.1.5-rc.1",
179
+ "@deepseek-ai/dsh-llm-deepseek": "0.1.5-rc.1",
180
+ "@deepseek-ai/dsh-sandbox-local": "0.1.5-rc.1",
181
+ "@deepseek-ai/dsh-sandbox-policy": "0.1.5-rc.1",
182
+ "@deepseek-ai/dsh-session-persistence-jsonl": "0.1.5-rc.1",
183
+ "@deepseek-ai/dsh-settings-file": "0.1.5-rc.1",
184
+ "@deepseek-ai/dsh-subagent-fork-in-process": "0.1.5-rc.1",
185
+ "@deepseek-ai/dsh-subagent-spawn-in-process": "0.1.5-rc.1",
186
+ "@deepseek-ai/dsh-subprocess-local": "0.1.5-rc.1",
187
+ "@deepseek-ai/dsh-tool-fs": "0.1.5-rc.1",
188
+ "@deepseek-ai/dsh-tool-fs-search": "0.1.5-rc.1",
189
189
  "tsdown": "^0.22.14",
190
190
  "typescript": "^7.0.2",
191
191
  "yaml": "^2.8.2",
@@ -195,23 +195,23 @@
195
195
  "@deepseek-ai/cordis": "^4.0.2",
196
196
  "@deepseek-ai/cordis-plugin-include": "^1.0.7",
197
197
  "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
198
- "@deepseek-ai/dsh-agent": "0.1.5-alpha.1",
198
+ "@deepseek-ai/dsh-agent": "0.1.5-rc.1",
199
199
  "@deepseek-ai/dsh-agent-spine-demo": "0.1.1-rc.2",
200
- "@deepseek-ai/dsh-api-remotes": "0.1.5-alpha.1",
201
- "@deepseek-ai/dsh-brand": "0.1.5-alpha.1",
202
- "@deepseek-ai/dsh-client-connection": "0.1.5-alpha.1",
203
- "@deepseek-ai/dsh-client-locale": "0.1.5-alpha.1",
204
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.5-alpha.1",
205
- "@deepseek-ai/dsh-client-ui-slots": "0.1.5-alpha.1",
206
- "@deepseek-ai/dsh-commands": "0.1.5-alpha.1",
207
- "@deepseek-ai/dsh-invariants": "0.1.5-alpha.1",
208
- "@deepseek-ai/dsh-llm": "0.1.5-alpha.1",
209
- "@deepseek-ai/dsh-session": "0.1.5-alpha.1",
210
- "@deepseek-ai/dsh-session-format-catalog": "0.1.5-alpha.1",
211
- "@deepseek-ai/dsh-session-projection": "0.1.5-alpha.1",
212
- "@deepseek-ai/dsh-subagent": "0.1.5-alpha.1",
213
- "@deepseek-ai/dsh-tools": "0.1.5-alpha.1",
214
- "@deepseek-ai/dsh-user-approval": "0.1.5-alpha.1",
200
+ "@deepseek-ai/dsh-api-remotes": "0.1.5-rc.1",
201
+ "@deepseek-ai/dsh-brand": "0.1.5-rc.1",
202
+ "@deepseek-ai/dsh-client-connection": "0.1.5-rc.1",
203
+ "@deepseek-ai/dsh-client-locale": "0.1.5-rc.1",
204
+ "@deepseek-ai/dsh-client-ui-conversation": "0.1.5-rc.1",
205
+ "@deepseek-ai/dsh-client-ui-slots": "0.1.5-rc.1",
206
+ "@deepseek-ai/dsh-commands": "0.1.5-rc.1",
207
+ "@deepseek-ai/dsh-invariants": "0.1.5-rc.1",
208
+ "@deepseek-ai/dsh-llm": "0.1.5-rc.1",
209
+ "@deepseek-ai/dsh-session": "0.1.5-rc.1",
210
+ "@deepseek-ai/dsh-session-format-catalog": "0.1.5-rc.1",
211
+ "@deepseek-ai/dsh-session-projection": "0.1.5-rc.1",
212
+ "@deepseek-ai/dsh-subagent": "0.1.5-rc.1",
213
+ "@deepseek-ai/dsh-tools": "0.1.5-rc.1",
214
+ "@deepseek-ai/dsh-user-approval": "0.1.5-rc.1",
215
215
  "@deepseek-ai/schemastery": "^3.18.2",
216
216
  "@types/node": "^26.2.0",
217
217
  "@types/react": "18.3.31",