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 +10 -0
- package/README.es.md +2 -2
- package/README.hi.md +2 -2
- package/README.md +2 -2
- package/README.pt.md +2 -2
- package/README.zh.md +2 -2
- package/bin/dsh-auto-review-mcp.mjs +0 -0
- package/bin/dsh-eval.mjs +0 -0
- package/lib/index.js +17 -14
- package/lib/types/audit.d.ts +17 -14
- package/lib/types/audit.d.ts.map +1 -1
- package/lib/types/audit.js +21 -15
- package/lib/types/audit.js.map +1 -1
- package/package.json +25 -27
- package/src/audit.ts +21 -15
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
|
|
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);
|
|
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 को
|
|
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` फ़ील्ड
|
|
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
|
|
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);
|
|
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
|
|
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);
|
|
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
|
|
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`).
|
|
16
|
-
* `0.1.2-alpha.2`
|
|
17
|
-
*
|
|
18
|
-
* `SurfaceIntent`, accepted only for surface event types —
|
|
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
|
|
44
|
-
* event envelope but
|
|
45
|
-
* parameter is `SurfaceIntent` for surface event types only
|
|
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
|
|
49
|
-
* unresumable. Extend the bound when a new line ships that still
|
|
50
|
-
* stamp the marker. Non-matching (later rc, stable 0.2+, or
|
|
51
|
-
* versions are treated as possibly-marker-aware and verified
|
|
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
|
|
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();
|
package/lib/types/audit.d.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`).
|
|
9
|
-
* `0.1.2-alpha.2`
|
|
10
|
-
*
|
|
11
|
-
* `SurfaceIntent`, accepted only for surface event types —
|
|
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
|
|
37
|
-
* event envelope but
|
|
38
|
-
* parameter is `SurfaceIntent` for surface event types only
|
|
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
|
|
42
|
-
* unresumable. Extend the bound when a new line ships that still
|
|
43
|
-
* stamp the marker. Non-matching (later rc, stable 0.2+, or
|
|
44
|
-
* versions are treated as possibly-marker-aware and verified
|
|
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
|
|
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
|
/**
|
package/lib/types/audit.d.ts.map
CHANGED
|
@@ -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
|
|
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"}
|
package/lib/types/audit.js
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`).
|
|
9
|
-
* `0.1.2-alpha.2`
|
|
10
|
-
*
|
|
11
|
-
* `SurfaceIntent`, accepted only for surface event types —
|
|
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
|
|
38
|
-
* event envelope but
|
|
39
|
-
* parameter is `SurfaceIntent` for surface event types only
|
|
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
|
|
43
|
-
* unresumable. Extend the bound when a new line ships that still
|
|
44
|
-
* stamp the marker. Non-matching (later rc, stable 0.2+, or
|
|
45
|
-
* versions are treated as possibly-marker-aware and verified
|
|
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
|
|
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);
|
package/lib/types/audit.js.map
CHANGED
|
@@ -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
|
|
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.
|
|
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.
|
|
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.
|
|
200
|
-
"@deepseek-ai/dsh-brand": "0.1.
|
|
201
|
-
"@deepseek-ai/dsh-client-connection": "0.1.
|
|
202
|
-
"@deepseek-ai/dsh-client-locale": "0.1.
|
|
203
|
-
"@deepseek-ai/dsh-client-ui-conversation": "0.1.
|
|
204
|
-
"@deepseek-ai/dsh-client-ui-slots": "0.1.
|
|
205
|
-
"@deepseek-ai/dsh-commands": "0.1.
|
|
206
|
-
"@deepseek-ai/dsh-invariants": "0.1.
|
|
207
|
-
"@deepseek-ai/dsh-llm": "0.1.
|
|
208
|
-
"@deepseek-ai/dsh-session": "0.1.
|
|
209
|
-
"@deepseek-ai/dsh-session-projection": "0.1.
|
|
210
|
-
"@deepseek-ai/dsh-subagent": "0.1.
|
|
211
|
-
"@deepseek-ai/dsh-tools": "0.1.
|
|
212
|
-
"@deepseek-ai/dsh-user-approval": "0.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
|
-
"
|
|
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`).
|
|
9
|
-
* `0.1.2-alpha.2`
|
|
10
|
-
*
|
|
11
|
-
* `SurfaceIntent`, accepted only for surface event types —
|
|
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
|
|
44
|
-
* event envelope but
|
|
45
|
-
* parameter is `SurfaceIntent` for surface event types only
|
|
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
|
|
49
|
-
* unresumable. Extend the bound when a new line ships that still
|
|
50
|
-
* stamp the marker. Non-matching (later rc, stable 0.2+, or
|
|
51
|
-
* versions are treated as possibly-marker-aware and verified
|
|
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
|
|
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)
|