dsh-auto-review 0.10.6 → 0.11.0

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,16 @@
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
+ ## [0.11.0] - 2026-09-08
6
+
7
+ ### Changed
8
+
9
+ - Migrate the dev pins from `@deepseek-ai/dsh@0.1.2-rc.1` to `@deepseek-ai/dsh@0.1.3-alpha.2` (all 15 `@deepseek-ai/dsh-*` devDependencies; `@deepseek-ai/dsh-agent-spine-demo` stays on `0.1.1-rc.2`). Dual-line runtime compatibility is preserved: the runtime `dependencies` and the `>=0.1.2-rc.1 <0.2.0` peer range stay on the published rc line, the trace fold reads stream timing from `assistant/chunk` (0.1.2) or the message's timed `stream` (0.1.3, including the new `assistant/attempt` settlement records), and the session-artifact renderer feature-detects the removed `packChunkRuns` export.
10
+ - Test fixtures now stamp headers with the host line's `SESSION_FORMAT_VERSION` (0 on 0.1.2, 2 on 0.1.3) instead of the literal `0`, and the fake-session header carries `isSeeded`; the reviewer/isolation suites pass on both published lines (278/278 each).
11
+ - `src/audit.ts`: `0.1.3-alpha.2` joins the known-unmarked host lines (its `Session.append` still assembles the envelope without the `ignorable` marker, and `autoReview/*` is still absent from `KNOWN_SESSION_EVENT_TYPES` — verified against the published tarball), so session-log audit stays fail-closed on the alpha line; unit tests cover both lines.
12
+ - `scripts/check-host-versions.mjs`: the `0.1.3-alpha.2` stay-behind exemption is removed — the migrated dev pins now cover the newest alpha line natively.
13
+ - `dshWorkshop.compatibility.dshVersions` and the five-language READMEs now state both supported host lines (`0.1.2-rc.1` and `0.1.3-alpha.2`).
14
+
5
15
  ## [0.10.6] - 2026-09-07
6
16
 
7
17
  ### Fixed
package/README.es.md CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  | Superficie | Estado |
28
28
  |---|---|
29
- | Harness | DeepSeek Harness `dsh-v0.1.3-alpha.1` (tag de GitHub, verificado el 2026-09-06; dependencias npm fijadas a `0.1.2-rc.1`, peers `>=0.1.2-rc.1 <0.2.0`) 0.1.2-rc.1 (adaptado el 2026-09-02): el sobre de sesión conserva su campo ignorable solo para compatibilidad de lectura de logs almacenados - Session.append aún no puede estamparlo, por lo que el comportamiento de la puerta no cambia. Verificado el 2026-09-06 contra el checkout master `dsh-v0.1.3-alpha.1` (cadena completa de gates + prueba de humo de instalación en el perfil). |
29
+ | Harness | DeepSeek Harness `dsh-v0.1.3-alpha.1` (tag de GitHub, verificado el 2026-09-06). Soporte npm de doble línea (migrado el 2026-09-08): pins de desarrollo `0.1.3-alpha.2`, dependencias de runtime `0.1.2-rc.1`, peers `>=0.1.2-rc.1 <0.2.0` — el runtime maneja ambas líneas de host publicadas (detección de características), y cada línea ejecuta la cadena completa de gates. |
30
30
  | Node | `^22.19.0 \|\| >=24.0.0` |
31
31
  | Plataformas | Todas (answerer de host; panel web opcional mediante la capacidad de proyección de sesión) |
32
32
  | Modelo | Cualquiera (el revisor hereda la ruta del agente de sesión; `reviewerModel` la reemplaza) |
@@ -317,7 +317,7 @@ El servidor es de solo lectura y determinista: sin red, sin modelo, sin escritur
317
317
 
318
318
  - **Permisos**: el manifiesto del workshop declara `session:append`, `approval:answer`, `subagent:spawn`, `command:register` y `tools:observe`.
319
319
  - **Datos**: nada se guarda en disco; el búfer circular de informes está en memoria y acotado. Sin peticiones de red propias.
320
- - **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); el host `0.1.2-rc.1` mantiene 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.
320
+ - **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` y `0.1.3-alpha.2` 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
321
 
322
322
  ## Límites de seguridad
323
323
 
package/README.hi.md CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  | सतह | स्थिति |
28
28
  |---|---|
29
- | Harness | DeepSeek Harness `dsh-v0.1.3-alpha.1` (GitHub tag, 2026-09-06 को सत्यापित; npm dependencies `0.1.2-rc.1` पर पिन की गईं, peers `>=0.1.2-rc.1 <0.2.0`) 0.1.2-rc.1 (2026-09-02 को अनुकूलित): सत्र लिफ़ाफ़ा अपना ignorable फ़ील्ड केवल संग्रहीत-लॉग पठन संगतता के लिए रखता है - Session.append अभी भी इसे स्टैम्प नहीं कर सकता, इसलिए गेट व्यवहार अपरिवर्तित है। 2026-09-06 को `dsh-v0.1.3-alpha.1` master checkout के विरुद्ध सत्यापित (पूर्ण गेट श्रृंखला + profile इंस्टॉल स्मोक)। |
29
+ | Harness | DeepSeek Harness `dsh-v0.1.3-alpha.1` (GitHub tag, 2026-09-06 को सत्यापित)। दोहरी-लाइन npm समर्थन (2026-09-08 को माइग्रेट): dev पिन `0.1.3-alpha.2`, रनटाइम निर्भरताएँ `0.1.2-rc.1`, peers `>=0.1.2-rc.1 <0.2.0` — रनटाइम दोनों प्रकाशित होस्ट लाइनों को संभालता है (फ़ीचर-डिटेक्टेड), और हर लाइन पूरी गेट श्रृंखला चलाती है। |
30
30
  | Node | `^22.19.0 \|\| >=24.0.0` |
31
31
  | प्लेटफ़ॉर्म | सभी (होस्ट answerer; सत्र-प्रोजेक्शन क्षमता के ज़रिए वैकल्पिक वेब समीक्षा पैनल) |
32
32
  | मॉडल | कोई भी (समीक्षक सत्र एजेंट का मार्ग विरासत में लेता है; `reviewerModel` उसे बदल देता है) |
@@ -317,7 +317,7 @@ Claude Desktop (`claude_desktop_config.json`) उदाहरण:
317
317
 
318
318
  - **अनुमतियाँ**: workshop मेनिफ़ेस्ट `session:append`, `approval:answer`, `subagent:spawn`, `command:register` और `tools:observe` घोषित करता है।
319
319
  - **डेटा**: डिस्क पर कुछ नहीं लिखा जाता; रिपोर्ट रिंग बफ़र मेमोरी में और सीमित है। अपनी ओर से कोई नेटवर्क अनुरोध नहीं।
320
- - **सत्र लॉग**: `autoReview/*` घटनाएँ समीक्षक पहचान, निर्णय, कारण, जोखिम और अवधि रखती हैं — लिफ़ाफ़े के `ignorable: true` मार्कर के साथ जोड़ी जाती हैं ताकि कोई भी बिल्ड लॉग लोड कर सके। जिन होस्ट का `Session.append` मार्कर से पुराना है (`0.1.1-rc.2` तक की हर रिलीज़ rc लाइन — कोई रिलीज़ अभी मार्कर नहीं छापती) उन्हें पहले append से पहले ही पहचान लिया जाता है (peer संस्करण पूर्व-जाँच, फिर लौटे लिफ़ाफ़े की जाँच); होस्ट `0.1.2-rc.1` लिफ़ाफ़े पर `ignorable` फ़ील्ड रखता है, लेकिन `Session.append` उसे स्टैम्प करने का कोई तरीका नहीं देता (इसका तीसरा पैरामीटर केवल सतही घटनाओं के लिए `SurfaceIntent` है), और पर्सिस्टेंस रीड पथ बिना-मार्क वाले अज्ञात घटना प्रकारों को अस्वीकार करता है, इसलिए वे लाइनें — और असमाधेय संस्करण — भी किसी भी append से पहले fail closed हो जाते हैं। ऑडिट बिना मार्कर वाले फीडबैक के साथ इन-मेमोरी मिरर में डिग्रेड हो जाता है — सत्र हर जगह लोड होने योग्य रहते हैं।
320
+ - **सत्र लॉग**: `autoReview/*` घटनाएँ समीक्षक पहचान, निर्णय, कारण, जोखिम और अवधि रखती हैं — लिफ़ाफ़े के `ignorable: true` मार्कर के साथ जोड़ी जाती हैं ताकि कोई भी बिल्ड लॉग लोड कर सके। जिन होस्ट का `Session.append` मार्कर से पुराना है (`0.1.1-rc.2` तक की हर रिलीज़ rc लाइन — कोई रिलीज़ अभी मार्कर नहीं छापती) उन्हें पहले append से पहले ही पहचान लिया जाता है (peer संस्करण पूर्व-जाँच, फिर लौटे लिफ़ाफ़े की जाँच); होस्ट `0.1.2-rc.1` और `0.1.3-alpha.2` लिफ़ाफ़े पर `ignorable` फ़ील्ड रखते हैं, लेकिन `Session.append` उसे स्टैम्प करने का कोई तरीका नहीं देता (इसका तीसरा पैरामीटर केवल सतही घटनाओं के लिए `SurfaceIntent` है), और पर्सिस्टेंस रीड पथ बिना-मार्क वाले अज्ञात घटना प्रकारों को अस्वीकार करता है, इसलिए वे लाइनें — और असमाधेय संस्करण — भी किसी भी append से पहले fail closed हो जाते हैं। ऑडिट बिना मार्कर वाले फीडबैक के साथ इन-मेमोरी मिरर में डिग्रेड हो जाता है — सत्र हर जगह लोड होने योग्य रहते हैं।
321
321
 
322
322
  ## सुरक्षा सीमाएँ
323
323
 
package/README.md CHANGED
@@ -27,7 +27,7 @@
27
27
 
28
28
  | Surface | Status |
29
29
  |---|---|
30
- | Harness | DeepSeek Harness `dsh-v0.1.3-alpha.1` (GitHub tag, verified 2026-09-06; npm dependencies pinned `0.1.2-rc.1`, peers `>=0.1.2-rc.1 <0.2.0`). Verified 2026-09-06 against the `dsh-v0.1.3-alpha.1` master checkout (full gate chain + profile install smoke). |
30
+ | Harness | DeepSeek Harness `dsh-v0.1.3-alpha.1` (GitHub tag, verified 2026-09-06). Dual-line npm support (migrated 2026-09-08): dev pins `0.1.3-alpha.2`, runtime deps `0.1.2-rc.1`, peers `>=0.1.2-rc.1 <0.2.0` — the runtime handles both published host lines (feature-detected), and each line runs the full gate chain. |
31
31
  | Node | `^22.19.0 \|\| >=24.0.0` |
32
32
  | Platforms | All (host answerer; optional Web review panel via the session-projection capability) |
33
33
  | Model | Any (the reviewer inherits the session agent's route; `reviewerModel` overrides) |
@@ -319,7 +319,7 @@ The server is read-only and deterministic: no network, no model, no writes.
319
319
 
320
320
  - **Permissions**: the workshop manifest declares `session:append`, `approval:answer`, `subagent:spawn`, `command:register`, and `tools:observe`.
321
321
  - **Data**: nothing is stored on disk; the report ring buffer is in-memory and bounded. No network requests of its own.
322
- - **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); host `0.1.2-rc.1` keeps 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.
322
+ - **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` and `0.1.3-alpha.2` 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
323
 
324
324
  ## Security boundaries
325
325
 
package/README.pt.md CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  | Superfície | Status |
28
28
  |---|---|
29
- | Harness | DeepSeek Harness `dsh-v0.1.3-alpha.1` (tag do GitHub, verificado em 2026-09-06; dependências npm fixadas em `0.1.2-rc.1`, peers `>=0.1.2-rc.1 <0.2.0`) 0.1.2-rc.1 (adaptado em 2026-09-02): o envelope de sessão mantém seu campo ignorable apenas para compatibilidade de leitura de logs armazenados - o Session.append ainda não consegue estampá-lo, então o comportamento da porta não muda. Verificado em 2026-09-06 contra o checkout master `dsh-v0.1.3-alpha.1` (cadeia completa de gates + instalação de perfil e smoke). |
29
+ | Harness | DeepSeek Harness `dsh-v0.1.3-alpha.1` (tag do GitHub, verificado em 2026-09-06). Suporte npm de linha dupla (migrado em 2026-09-08): pins de desenvolvimento `0.1.3-alpha.2`, dependências de runtime `0.1.2-rc.1`, peers `>=0.1.2-rc.1 <0.2.0` — o runtime lida com ambas as linhas de host publicadas (detecção de recursos), e cada linha executa a cadeia completa de gates. |
30
30
  | Node | `^22.19.0 \|\| >=24.0.0` |
31
31
  | Plataformas | Todas (answerer de host; painel web opcional via capacidade de projeção de sessão) |
32
32
  | Modelo | Qualquer (o revisor herda a rota do agente da sessão; `reviewerModel` sobrescreve) |
@@ -317,7 +317,7 @@ O servidor é somente-leitura e determinista: sem rede, sem modelo, sem gravaç
317
317
 
318
318
  - **Permissões**: o manifesto do workshop declara `session:append`, `approval:answer`, `subagent:spawn`, `command:register` e `tools:observe`.
319
319
  - **Dados**: nada é gravado em disco; o buffer circular de relatórios fica em memória e é limitado. Sem requisições de rede próprias.
320
- - **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); o host `0.1.2-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.
320
+ - **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` e `0.1.3-alpha.2` 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
321
 
322
322
  ## Limites de segurança
323
323
 
package/README.zh.md CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  | 方面 | 状态 |
28
28
  |---|---|
29
- | Harness | DeepSeek Harness `dsh-v0.1.3-alpha.1`(GitHub tag,2026-09-06 已核验;npm 依赖锁定 `0.1.2-rc.1`,peer 范围 `>=0.1.2-rc.1 <0.2.0`) 0.1.2-rc.1(2026-09-02 已适配):会话信封保留 ignorable 字段但仅用于存量日志读取兼容——Session.append 仍无法盖章,门控行为不变。 2026-09-06 已针对 `dsh-v0.1.3-alpha.1` master 检出核验(完整门禁链 + profile 安装冒烟)。 |
29
+ | Harness | DeepSeek Harness `dsh-v0.1.3-alpha.1`(GitHub tag,2026-09-06 已核验)。双线 npm 支持(2026-09-08 迁移):dev 钉号 `0.1.3-alpha.2`、运行时依赖 `0.1.2-rc.1`、peer 范围 `>=0.1.2-rc.1 <0.2.0` —— 运行时兼容两条已发布宿主线(特性探测),两线均跑完整门禁链。 |
30
30
  | Node | `^22.19.0 \|\| >=24.0.0` |
31
31
  | 平台 | 全部(宿主 answerer;可选 Web 审查面板,依赖会话投影能力) |
32
32
  | 模型 | 任意(审查器默认继承会话代理的路由;`reviewerModel` 可覆盖) |
@@ -317,7 +317,7 @@ Claude Desktop(`claude_desktop_config.json`)配置示例:
317
317
 
318
318
  - **权限**:workshop 清单声明 `session:append`、`approval:answer`、`subagent:spawn`、`command:register` 与 `tools:observe`。
319
319
  - **数据**:不向磁盘写入任何内容;报告环形缓冲在内存中且有界。自身不发起网络请求。
320
- - **会话日志**:`autoReview/*` 事件携带审查器身份、裁决、理由、风险与耗时 —— 以信封 `ignorable: true` 标记追加,任何构建都能加载日志。`Session.append` 早于该标记的宿主(迄今发布的所有 rc 版本,至 `0.1.1-rc.2`——任何发布版都还未盖标记)会在首次追加前被探测出来(peer 版本预检 + 返回信封探测);宿主 `0.1.2-rc.1` 在信封上保留 `ignorable` 字段,但 `Session.append` 没有任何方式为其盖章(其第三参数是仅用于 surface 事件的 `SurfaceIntent`),且持久化读取路径拒绝未标记的未知事件类型,因此这些版本线——以及无法解析的版本——同样在首次追加前 fail closed。审计降级为内存镜像 + 无标记反馈,会话日志始终保持可加载。
320
+ - **会话日志**:`autoReview/*` 事件携带审查器身份、裁决、理由、风险与耗时 —— 以信封 `ignorable: true` 标记追加,任何构建都能加载日志。`Session.append` 早于该标记的宿主(迄今发布的所有 rc 版本,至 `0.1.1-rc.2`——任何发布版都还未盖标记)会在首次追加前被探测出来(peer 版本预检 + 返回信封探测);宿主 `0.1.2-rc.1` 与 `0.1.3-alpha.2` 在信封上保留 `ignorable` 字段,但 `Session.append` 没有任何方式为其盖章(其第三参数是仅用于 surface 事件的 `SurfaceIntent`),且持久化读取路径拒绝未标记的未知事件类型,因此这些版本线——以及无法解析的版本——同样在首次追加前 fail closed。审计降级为内存镜像 + 无标记反馈,会话日志始终保持可加载。
321
321
 
322
322
  ## 安全边界
323
323
 
File without changes
package/bin/dsh-eval.mjs CHANGED
File without changes
package/lib/index.js CHANGED
@@ -12,11 +12,11 @@ import { assertObjectJsonSchema } from "@deepseek-ai/dsh-tools";
12
12
  * marker on host builds that expose the surface (post-rc.6
13
13
  * `@deepseek-ai/dsh-session`); the `0.1.0-rc.6` line silently drops the
14
14
  * options bag, so audit events land unmarked and stricter hosts refuse to
15
- * resume those sessions (`SessionFormatUnsupportedError`). Host master
16
- * `0.1.2-alpha.2` keeps the `ignorable` field on the event envelope but
17
- * offers no append option to write it — the third parameter is
18
- * `SurfaceIntent`, accepted only for surface event types — so `append`
19
- * never stamps the marker there either. The runtime detects the host
15
+ * resume those sessions (`SessionFormatUnsupportedError`). The published
16
+ * `0.1.2-rc.1` and `0.1.3-alpha.2` hosts keep the `ignorable` field on
17
+ * the event envelope but offer no append option to write it — the third
18
+ * parameter is `SurfaceIntent`, accepted only for surface event types —
19
+ * so `append` never stamps the marker there either. The runtime detects the host
20
20
  * before polluting a log: the installed peer version is checked against
21
21
  * the known-unmarked lines first, and an unknown (unresolvable) version is
22
22
  * verified by probing the FIRST appended event's returned envelope. The
@@ -40,19 +40,22 @@ function isMarkedAuditEvent(result) {
40
40
  * Whether a `@deepseek-ai/dsh-session` version line lacks a safe audit
41
41
  * write path: every released rc line through `0.1.1-rc.2` silently drops
42
42
  * the marker from `Session.append` options (no release ever stamps it),
43
- * and host master `0.1.2-alpha.2` keeps the `ignorable` field on the
44
- * event envelope but has no append option that writes it (the third
45
- * parameter is `SurfaceIntent` for surface event types only), so writing
43
+ * and the `0.1.2-rc.1` / `0.1.3-alpha.2` hosts keep the `ignorable` field
44
+ * on the event envelope but have no append option that writes it (the
45
+ * third parameter is `SurfaceIntent` for surface event types only — the
46
+ * alpha.2 `append` still assembles the envelope without the marker,
47
+ * verified against the published tarball), so writing
46
48
  * on those lines still lands an unmarked event. The persistence read path
47
49
  * fails closed on unmarked unknown event types (`autoReview/*` is not in
48
- * `KNOWN_SESSION_EVENT_TYPES`), so writing there makes sessions
49
- * unresumable. Extend the bound when a new line ships that still cannot
50
- * stamp the marker. Non-matching (later rc, stable 0.2+, or unresolvable)
51
- * versions are treated as possibly-marker-aware and verified by the append
52
- * probe.
50
+ * `KNOWN_SESSION_EVENT_TYPES` on either line), so writing there makes
51
+ * sessions unresumable. Extend the bound when a new line ships that still
52
+ * cannot stamp the marker. Non-matching (later rc, stable 0.2+, or
53
+ * unresolvable) versions are treated as possibly-marker-aware and verified
54
+ * by the append probe.
53
55
  * @param version - the installed peer version string.
54
56
  * @returns true for the known-unmarked `0.1.0-rc.1–rc.8`, `0.1.1-rc.1–rc.2`,
55
- * and `0.1.2-alpha.1`+ non-stamping lines.
57
+ * and the non-stamping `0.1.2+`/`0.1.3+` prerelease lines
58
+ * (`0.1.2-alpha.1` through the published `0.1.2-rc.1` and `0.1.3-alpha.2`).
56
59
  */
57
60
  function isUnmarkedHostVersion(version) {
58
61
  const v = version.trim();
@@ -5,11 +5,11 @@
5
5
  * marker on host builds that expose the surface (post-rc.6
6
6
  * `@deepseek-ai/dsh-session`); the `0.1.0-rc.6` line silently drops the
7
7
  * options bag, so audit events land unmarked and stricter hosts refuse to
8
- * resume those sessions (`SessionFormatUnsupportedError`). Host master
9
- * `0.1.2-alpha.2` keeps the `ignorable` field on the event envelope but
10
- * offers no append option to write it — the third parameter is
11
- * `SurfaceIntent`, accepted only for surface event types — so `append`
12
- * never stamps the marker there either. The runtime detects the host
8
+ * resume those sessions (`SessionFormatUnsupportedError`). The published
9
+ * `0.1.2-rc.1` and `0.1.3-alpha.2` hosts keep the `ignorable` field on
10
+ * the event envelope but offer no append option to write it — the third
11
+ * parameter is `SurfaceIntent`, accepted only for surface event types —
12
+ * so `append` never stamps the marker there either. The runtime detects the host
13
13
  * before polluting a log: the installed peer version is checked against
14
14
  * the known-unmarked lines first, and an unknown (unresolvable) version is
15
15
  * verified by probing the FIRST appended event's returned envelope. The
@@ -33,19 +33,22 @@ export declare function isMarkedAuditEvent(result: unknown): boolean;
33
33
  * Whether a `@deepseek-ai/dsh-session` version line lacks a safe audit
34
34
  * write path: every released rc line through `0.1.1-rc.2` silently drops
35
35
  * the marker from `Session.append` options (no release ever stamps it),
36
- * and host master `0.1.2-alpha.2` keeps the `ignorable` field on the
37
- * event envelope but has no append option that writes it (the third
38
- * parameter is `SurfaceIntent` for surface event types only), so writing
36
+ * and the `0.1.2-rc.1` / `0.1.3-alpha.2` hosts keep the `ignorable` field
37
+ * on the event envelope but have no append option that writes it (the
38
+ * third parameter is `SurfaceIntent` for surface event types only — the
39
+ * alpha.2 `append` still assembles the envelope without the marker,
40
+ * verified against the published tarball), so writing
39
41
  * on those lines still lands an unmarked event. The persistence read path
40
42
  * fails closed on unmarked unknown event types (`autoReview/*` is not in
41
- * `KNOWN_SESSION_EVENT_TYPES`), so writing there makes sessions
42
- * unresumable. Extend the bound when a new line ships that still cannot
43
- * stamp the marker. Non-matching (later rc, stable 0.2+, or unresolvable)
44
- * versions are treated as possibly-marker-aware and verified by the append
45
- * probe.
43
+ * `KNOWN_SESSION_EVENT_TYPES` on either line), so writing there makes
44
+ * sessions unresumable. Extend the bound when a new line ships that still
45
+ * cannot stamp the marker. Non-matching (later rc, stable 0.2+, or
46
+ * unresolvable) versions are treated as possibly-marker-aware and verified
47
+ * by the append probe.
46
48
  * @param version - the installed peer version string.
47
49
  * @returns true for the known-unmarked `0.1.0-rc.1–rc.8`, `0.1.1-rc.1–rc.2`,
48
- * and `0.1.2-alpha.1`+ non-stamping lines.
50
+ * and the non-stamping `0.1.2+`/`0.1.3+` prerelease lines
51
+ * (`0.1.2-alpha.1` through the published `0.1.2-rc.1` and `0.1.3-alpha.2`).
49
52
  */
50
53
  export declare function isUnmarkedHostVersion(version: string): boolean;
51
54
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,sGAAsG;AACtG,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,CAAA;AAElE;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAE3D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAc9D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAOlD"}
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,sGAAsG;AACtG,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,CAAA;AAElE;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAE3D;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAiB9D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAOlD"}
@@ -5,11 +5,11 @@
5
5
  * marker on host builds that expose the surface (post-rc.6
6
6
  * `@deepseek-ai/dsh-session`); the `0.1.0-rc.6` line silently drops the
7
7
  * options bag, so audit events land unmarked and stricter hosts refuse to
8
- * resume those sessions (`SessionFormatUnsupportedError`). Host master
9
- * `0.1.2-alpha.2` keeps the `ignorable` field on the event envelope but
10
- * offers no append option to write it — the third parameter is
11
- * `SurfaceIntent`, accepted only for surface event types — so `append`
12
- * never stamps the marker there either. The runtime detects the host
8
+ * resume those sessions (`SessionFormatUnsupportedError`). The published
9
+ * `0.1.2-rc.1` and `0.1.3-alpha.2` hosts keep the `ignorable` field on
10
+ * the event envelope but offer no append option to write it — the third
11
+ * parameter is `SurfaceIntent`, accepted only for surface event types —
12
+ * so `append` never stamps the marker there either. The runtime detects the host
13
13
  * before polluting a log: the installed peer version is checked against
14
14
  * the known-unmarked lines first, and an unknown (unresolvable) version is
15
15
  * verified by probing the FIRST appended event's returned envelope. The
@@ -34,19 +34,22 @@ export function isMarkedAuditEvent(result) {
34
34
  * Whether a `@deepseek-ai/dsh-session` version line lacks a safe audit
35
35
  * write path: every released rc line through `0.1.1-rc.2` silently drops
36
36
  * the marker from `Session.append` options (no release ever stamps it),
37
- * and host master `0.1.2-alpha.2` keeps the `ignorable` field on the
38
- * event envelope but has no append option that writes it (the third
39
- * parameter is `SurfaceIntent` for surface event types only), so writing
37
+ * and the `0.1.2-rc.1` / `0.1.3-alpha.2` hosts keep the `ignorable` field
38
+ * on the event envelope but have no append option that writes it (the
39
+ * third parameter is `SurfaceIntent` for surface event types only — the
40
+ * alpha.2 `append` still assembles the envelope without the marker,
41
+ * verified against the published tarball), so writing
40
42
  * on those lines still lands an unmarked event. The persistence read path
41
43
  * fails closed on unmarked unknown event types (`autoReview/*` is not in
42
- * `KNOWN_SESSION_EVENT_TYPES`), so writing there makes sessions
43
- * unresumable. Extend the bound when a new line ships that still cannot
44
- * stamp the marker. Non-matching (later rc, stable 0.2+, or unresolvable)
45
- * versions are treated as possibly-marker-aware and verified by the append
46
- * probe.
44
+ * `KNOWN_SESSION_EVENT_TYPES` on either line), so writing there makes
45
+ * sessions unresumable. Extend the bound when a new line ships that still
46
+ * cannot stamp the marker. Non-matching (later rc, stable 0.2+, or
47
+ * unresolvable) versions are treated as possibly-marker-aware and verified
48
+ * by the append probe.
47
49
  * @param version - the installed peer version string.
48
50
  * @returns true for the known-unmarked `0.1.0-rc.1–rc.8`, `0.1.1-rc.1–rc.2`,
49
- * and `0.1.2-alpha.1`+ non-stamping lines.
51
+ * and the non-stamping `0.1.2+`/`0.1.3+` prerelease lines
52
+ * (`0.1.2-alpha.1` through the published `0.1.2-rc.1` and `0.1.3-alpha.2`).
50
53
  */
51
54
  export function isUnmarkedHostVersion(version) {
52
55
  const v = version.trim();
@@ -56,7 +59,10 @@ export function isUnmarkedHostVersion(version) {
56
59
  const patch = Number(rc[2]);
57
60
  // `0.1.2-rc.1` ships the alpha.5 surface: the third append parameter is
58
61
  // `SurfaceIntent` for surface event types only, so no rc line in the
59
- // 0.1.2 minor stamps the marker either.
62
+ // 0.1.2 minor stamps the marker either. `0.1.3-alpha.2` ships the v2
63
+ // session format (SESSION_FORMAT_VERSION 2, assistant streams embedded)
64
+ // but its `append` still assembles the envelope without `ignorable`, so
65
+ // the 0.1.3 line is non-stamping too (verified against the tarball).
60
66
  return (minor === 0 && patch <= 8) || (minor === 1 && patch <= 2) || minor >= 2;
61
67
  }
62
68
  const line = /^0\.1\.(\d+)(?:-.*)?$/.exec(v);
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAK3C;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAe;IAChD,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAK,MAAkC,CAAC,SAAS,KAAK,IAAI,CAAA;AAChH,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;IACxB,MAAM,EAAE,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC5C,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3B,wEAAwE;QACxE,qEAAqE;QACrE,wCAAwC;QACxC,OAAO,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IACjF,CAAC;IACD,MAAM,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC5C,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAC9C,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB;IAChC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,uCAAuC,CAA0B,CAAA;QAC5G,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAK3C;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAe;IAChD,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAK,MAAkC,CAAC,SAAS,KAAK,IAAI,CAAA;AAChH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;IACxB,MAAM,EAAE,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC5C,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3B,wEAAwE;QACxE,qEAAqE;QACrE,qEAAqE;QACrE,wEAAwE;QACxE,wEAAwE;QACxE,qEAAqE;QACrE,OAAO,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IACjF,CAAC;IACD,MAAM,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC5C,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAC9C,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB;IAChC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,uCAAuC,CAA0B,CAAA;QAC5G,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "name": "dsh-auto-review",
3
- "version": "0.10.6",
4
- "packageManager": "pnpm@11.7.0",
3
+ "version": "0.11.0",
5
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.",
6
5
  "private": false,
7
6
  "author": {
@@ -106,7 +105,8 @@
106
105
  ],
107
106
  "compatibility": {
108
107
  "dshVersions": [
109
- "0.1.2-rc.1"
108
+ "0.1.2-rc.1",
109
+ "0.1.3-alpha.2"
110
110
  ]
111
111
  },
112
112
  "capability": {
@@ -194,22 +194,22 @@
194
194
  "@deepseek-ai/cordis": "^4.0.2",
195
195
  "@deepseek-ai/cordis-plugin-include": "^1.0.7",
196
196
  "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
197
- "@deepseek-ai/dsh-agent": "0.1.2-rc.1",
197
+ "@deepseek-ai/dsh-agent": "0.1.3-alpha.2",
198
198
  "@deepseek-ai/dsh-agent-spine-demo": "0.1.1-rc.2",
199
- "@deepseek-ai/dsh-api-remotes": "0.1.2-rc.1",
200
- "@deepseek-ai/dsh-brand": "0.1.2-rc.1",
201
- "@deepseek-ai/dsh-client-connection": "0.1.2-rc.1",
202
- "@deepseek-ai/dsh-client-locale": "0.1.2-rc.1",
203
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.2-rc.1",
204
- "@deepseek-ai/dsh-client-ui-slots": "0.1.2-rc.1",
205
- "@deepseek-ai/dsh-commands": "0.1.2-rc.1",
206
- "@deepseek-ai/dsh-invariants": "0.1.2-rc.1",
207
- "@deepseek-ai/dsh-llm": "0.1.2-rc.1",
208
- "@deepseek-ai/dsh-session": "0.1.2-rc.1",
209
- "@deepseek-ai/dsh-session-projection": "0.1.2-rc.1",
210
- "@deepseek-ai/dsh-subagent": "0.1.2-rc.1",
211
- "@deepseek-ai/dsh-tools": "0.1.2-rc.1",
212
- "@deepseek-ai/dsh-user-approval": "0.1.2-rc.1",
199
+ "@deepseek-ai/dsh-api-remotes": "0.1.3-alpha.2",
200
+ "@deepseek-ai/dsh-brand": "0.1.3-alpha.2",
201
+ "@deepseek-ai/dsh-client-connection": "0.1.3-alpha.2",
202
+ "@deepseek-ai/dsh-client-locale": "0.1.3-alpha.2",
203
+ "@deepseek-ai/dsh-client-ui-conversation": "0.1.3-alpha.2",
204
+ "@deepseek-ai/dsh-client-ui-slots": "0.1.3-alpha.2",
205
+ "@deepseek-ai/dsh-commands": "0.1.3-alpha.2",
206
+ "@deepseek-ai/dsh-invariants": "0.1.3-alpha.2",
207
+ "@deepseek-ai/dsh-llm": "0.1.3-alpha.2",
208
+ "@deepseek-ai/dsh-session": "0.1.3-alpha.2",
209
+ "@deepseek-ai/dsh-session-projection": "0.1.3-alpha.2",
210
+ "@deepseek-ai/dsh-subagent": "0.1.3-alpha.2",
211
+ "@deepseek-ai/dsh-tools": "0.1.3-alpha.2",
212
+ "@deepseek-ai/dsh-user-approval": "0.1.3-alpha.2",
213
213
  "@deepseek-ai/schemastery": "^3.18.2",
214
214
  "@types/node": "^26.2.0",
215
215
  "@types/react": "18.3.31",
@@ -220,6 +220,11 @@
220
220
  "react-dom": "18.3.1",
221
221
  "vitest": "^4.1.10"
222
222
  },
223
+ "license": "Apache-2.0",
224
+ "funding": {
225
+ "type": "individual",
226
+ "url": "https://github.com/sponsors/PerryLink"
227
+ },
223
228
  "scripts": {
224
229
  "build": "node scripts/prepare.mjs",
225
230
  "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.test.json --noEmit",
@@ -227,13 +232,6 @@
227
232
  "test:coverage": "vitest run --coverage",
228
233
  "lint": "oxlint",
229
234
  "check:readmes": "node scripts/check-readme-sync.mjs",
230
- "prepare": "node scripts/prepare.mjs",
231
- "verify:self-contained": "node scripts/verify-self-contained.mjs",
232
- "prepublishOnly": "pnpm run typecheck && pnpm test && pnpm run build && pnpm run verify:self-contained"
233
- },
234
- "license": "Apache-2.0",
235
- "funding": {
236
- "type": "individual",
237
- "url": "https://github.com/sponsors/PerryLink"
235
+ "verify:self-contained": "node scripts/verify-self-contained.mjs"
238
236
  }
239
- }
237
+ }
package/src/audit.ts CHANGED
@@ -5,11 +5,11 @@
5
5
  * marker on host builds that expose the surface (post-rc.6
6
6
  * `@deepseek-ai/dsh-session`); the `0.1.0-rc.6` line silently drops the
7
7
  * options bag, so audit events land unmarked and stricter hosts refuse to
8
- * resume those sessions (`SessionFormatUnsupportedError`). Host master
9
- * `0.1.2-alpha.2` keeps the `ignorable` field on the event envelope but
10
- * offers no append option to write it — the third parameter is
11
- * `SurfaceIntent`, accepted only for surface event types — so `append`
12
- * never stamps the marker there either. The runtime detects the host
8
+ * resume those sessions (`SessionFormatUnsupportedError`). The published
9
+ * `0.1.2-rc.1` and `0.1.3-alpha.2` hosts keep the `ignorable` field on
10
+ * the event envelope but offer no append option to write it — the third
11
+ * parameter is `SurfaceIntent`, accepted only for surface event types —
12
+ * so `append` never stamps the marker there either. The runtime detects the host
13
13
  * before polluting a log: the installed peer version is checked against
14
14
  * the known-unmarked lines first, and an unknown (unresolvable) version is
15
15
  * verified by probing the FIRST appended event's returned envelope. The
@@ -40,19 +40,22 @@ export function isMarkedAuditEvent(result: unknown): boolean {
40
40
  * Whether a `@deepseek-ai/dsh-session` version line lacks a safe audit
41
41
  * write path: every released rc line through `0.1.1-rc.2` silently drops
42
42
  * the marker from `Session.append` options (no release ever stamps it),
43
- * and host master `0.1.2-alpha.2` keeps the `ignorable` field on the
44
- * event envelope but has no append option that writes it (the third
45
- * parameter is `SurfaceIntent` for surface event types only), so writing
43
+ * and the `0.1.2-rc.1` / `0.1.3-alpha.2` hosts keep the `ignorable` field
44
+ * on the event envelope but have no append option that writes it (the
45
+ * third parameter is `SurfaceIntent` for surface event types only — the
46
+ * alpha.2 `append` still assembles the envelope without the marker,
47
+ * verified against the published tarball), so writing
46
48
  * on those lines still lands an unmarked event. The persistence read path
47
49
  * fails closed on unmarked unknown event types (`autoReview/*` is not in
48
- * `KNOWN_SESSION_EVENT_TYPES`), so writing there makes sessions
49
- * unresumable. Extend the bound when a new line ships that still cannot
50
- * stamp the marker. Non-matching (later rc, stable 0.2+, or unresolvable)
51
- * versions are treated as possibly-marker-aware and verified by the append
52
- * probe.
50
+ * `KNOWN_SESSION_EVENT_TYPES` on either line), so writing there makes
51
+ * sessions unresumable. Extend the bound when a new line ships that still
52
+ * cannot stamp the marker. Non-matching (later rc, stable 0.2+, or
53
+ * unresolvable) versions are treated as possibly-marker-aware and verified
54
+ * by the append probe.
53
55
  * @param version - the installed peer version string.
54
56
  * @returns true for the known-unmarked `0.1.0-rc.1–rc.8`, `0.1.1-rc.1–rc.2`,
55
- * and `0.1.2-alpha.1`+ non-stamping lines.
57
+ * and the non-stamping `0.1.2+`/`0.1.3+` prerelease lines
58
+ * (`0.1.2-alpha.1` through the published `0.1.2-rc.1` and `0.1.3-alpha.2`).
56
59
  */
57
60
  export function isUnmarkedHostVersion(version: string): boolean {
58
61
  const v = version.trim()
@@ -62,7 +65,10 @@ export function isUnmarkedHostVersion(version: string): boolean {
62
65
  const patch = Number(rc[2])
63
66
  // `0.1.2-rc.1` ships the alpha.5 surface: the third append parameter is
64
67
  // `SurfaceIntent` for surface event types only, so no rc line in the
65
- // 0.1.2 minor stamps the marker either.
68
+ // 0.1.2 minor stamps the marker either. `0.1.3-alpha.2` ships the v2
69
+ // session format (SESSION_FORMAT_VERSION 2, assistant streams embedded)
70
+ // but its `append` still assembles the envelope without `ignorable`, so
71
+ // the 0.1.3 line is non-stamping too (verified against the tarball).
66
72
  return (minor === 0 && patch <= 8) || (minor === 1 && patch <= 2) || minor >= 2
67
73
  }
68
74
  const line = /^0\.1\.(\d+)(?:-.*)?$/.exec(v)