dsh-doublecheck 0.9.2 → 0.9.3

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,12 @@
2
2
 
3
3
  All notable changes to dsh-doublecheck are recorded here, newest first.
4
4
 
5
+ ## [0.9.3] - 2026-09-02
6
+
7
+ ### Changed
8
+
9
+ - Align the devDependency pins to the published dsh 0.1.2-alpha.5 line and re-verify the adaptation claims; no behavior change.
10
+
5
11
  ## [0.9.2] - 2026-09-01
6
12
 
7
13
  ### Changed
package/README.es.md CHANGED
@@ -223,8 +223,8 @@ El CLI solo serializa el `GateState` ya asentado — nunca vuelve a ejecutar la
223
223
 
224
224
  ## Limitaciones conocidas
225
225
 
226
- - **Escrituras durables.** `/doublecheck on\|off` → `doublecheck/state` y `/gate run` → `doublecheck/gate` necesitan la superficie de append `ignorable` del host (post-rc.6 hasta `0.1.1-rc.2`). En hosts sin esa superficie (rc.6/rc.8 y `0.1.2-alpha.1`, que eliminó el sobre — `0.1.2-alpha.3` restaura el campo solo para compatibilidad de lectura de logs almacenados y aún no puede estamparlo), las escrituras se omiten y el interruptor queda en proceso.
227
- 0.1.2-alpha.3 (adaptado el 2026-09-01): 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.
226
+ - **Escrituras durables.** `/doublecheck on\|off` → `doublecheck/state` y `/gate run` → `doublecheck/gate` necesitan la superficie de append `ignorable` del host (post-rc.6 hasta `0.1.1-rc.2`). En hosts sin esa superficie (rc.6/rc.8 y `0.1.2-alpha.1`, que eliminó el sobre — `0.1.2-alpha.5` restaura el campo solo para compatibilidad de lectura de logs almacenados y aún no puede estamparlo), las escrituras se omiten y el interruptor queda en proceso.
227
+ 0.1.2-alpha.5 (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.
228
228
  - **Interfaces opcionales.** El espacio de ajustes `doublecheck.gate` se registra solo cuando el servicio de ajustes está montado; la línea de modo plan de `/gate status` lee el `ctx.planMode` opcional (muestra `unknown` sin él); la revisión adversarial necesita `ctx.subagents`; la verificación necesita `workflowEngine`.
229
229
  - **Degradación local.** `gate.review.engine: auto` degrada al revisor local cuando dsh-auto-review está ausente o no tiene registros de veredicto en esta sesión — el informe nombra la razón en lugar de inventar un veredicto.
230
230
  - **La evidencia dsh-eval se basa en archivos.** El motor de evaluación de dsh-auto-review (`dsh-eval`) escribe sus resultados de regresión de prompt / estrés / equidad en un archivo de informe del espacio de trabajo, no en el registro de sesión. `gate.tests.evalReports.enabled` pliega ese archivo (desactivado por defecto; salta cuando está ausente) y los recuentos pliegados viajan en el registro duradero `doublecheck/gate` para que una ejecución asentada siga siendo reproducible.
package/README.hi.md CHANGED
@@ -223,8 +223,8 @@ CLI केवल पहले से स्थापित `GateState` को
223
223
 
224
224
  ## ज्ञात सीमाएँ
225
225
 
226
- - **टिकाऊ लेखन।** `/doublecheck on\|off` → `doublecheck/state` और `/gate run` → `doublecheck/gate` को host की `ignorable` append सतह (rc.6 के बाद से `0.1.1-rc.2` तक) चाहिए। उस सतह के बिना hosts (rc.6/rc.8 और `0.1.2-alpha.1`, जिसने envelope हटा दिया — `0.1.2-alpha.3` केवल संग्रहीत-लॉग पठन संगतता के लिए फ़ील्ड बहाल करता है और अभी भी स्टैम्प नहीं कर सकता) पर लेखन छोड़ दिया जाता है और स्विच प्रक्रिया-स्थानीय रहता है।
227
- 0.1.2-alpha.3 (2026-09-01 को अनुकूलित): सत्र लिफ़ाफ़ा अपना ignorable फ़ील्ड केवल संग्रहीत-लॉग पठन संगतता के लिए रखता है - Session.append अभी भी इसे स्टैम्प नहीं कर सकता, इसलिए गेट व्यवहार अपरिवर्तित है।
226
+ - **टिकाऊ लेखन।** `/doublecheck on\|off` → `doublecheck/state` और `/gate run` → `doublecheck/gate` को host की `ignorable` append सतह (rc.6 के बाद से `0.1.1-rc.2` तक) चाहिए। उस सतह के बिना hosts (rc.6/rc.8 और `0.1.2-alpha.1`, जिसने envelope हटा दिया — `0.1.2-alpha.5` केवल संग्रहीत-लॉग पठन संगतता के लिए फ़ील्ड बहाल करता है और अभी भी स्टैम्प नहीं कर सकता) पर लेखन छोड़ दिया जाता है और स्विच प्रक्रिया-स्थानीय रहता है।
227
+ 0.1.2-alpha.5 (2026-09-02 को अनुकूलित): सत्र लिफ़ाफ़ा अपना ignorable फ़ील्ड केवल संग्रहीत-लॉग पठन संगतता के लिए रखता है - Session.append अभी भी इसे स्टैम्प नहीं कर सकता, इसलिए गेट व्यवहार अपरिवर्तित है।
228
228
  - **वैकल्पिक इंटरफ़ेस।** `doublecheck.gate` सेटिंग्स नेमस्पेस केवल तब पंजीकृत होता है जब सेटिंग्स सेवा माउंट हो; `/gate status` की प्लान-मोड पंक्ति वैकल्पिक `ctx.planMode` पढ़ती है (इसके बिना `unknown` दिखाती है); प्रतिकूल समीक्षा को `ctx.subagents` चाहिए; सत्यापन को `workflowEngine` चाहिए।
229
229
  - **स्थानीय अवनति।** जब dsh-auto-review अनुपस्थित हो या इस सत्र में उसके कोई निर्णय रिकॉर्ड न हों, तो `gate.review.engine: auto` स्थानीय समीक्षक पर घट जाता है — रिपोर्ट निर्णय गढ़ने के बजाय कारण बताती है।
230
230
  - **dsh-eval साक्ष्य फ़ाइल-आधारित है।** dsh-auto-review का मूल्यांकन इंजन (`dsh-eval`) अपने prompt-regression / stress / fairness परिणाम कार्यक्षेत्र रिपोर्ट फ़ाइल में लिखता है, सत्र लॉग में नहीं। `gate.tests.evalReports.enabled` उस फ़ाइल को मोड़ता है (डिफ़ॉल्ट रूप से बंद; अनुपस्थित होने पर छोड़ देता है) और मोड़ी गई गणनाएँ टिकाऊ `doublecheck/gate` रिकॉर्ड पर चलती हैं, ताकि तयशुदा रन फिर भी रीप्ले हो सके।
package/README.md CHANGED
@@ -224,8 +224,8 @@ The CLI only serializes the already-settled `GateState` — it never re-runs the
224
224
 
225
225
  ## Known limitations
226
226
 
227
- - **Durable writes.** `/doublecheck on\|off` → `doublecheck/state` and `/gate run` → `doublecheck/gate` ride the host's `ignorable` append surface (post-rc.6 through `0.1.1-rc.2`). On hosts without that surface (rc.6/rc.8, and `0.1.2-alpha.1`, which removed the envelope — `0.1.2-alpha.3` restores the field for stored-log read compatibility only and still cannot stamp it), the writes are skipped and the switch stays process-local.
228
- 0.1.2-alpha.3 (adapted 2026-09-01): 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.
227
+ - **Durable writes.** `/doublecheck on\|off` → `doublecheck/state` and `/gate run` → `doublecheck/gate` ride the host's `ignorable` append surface (post-rc.6 through `0.1.1-rc.2`). On hosts without that surface (rc.6/rc.8, and `0.1.2-alpha.1`, which removed the envelope — `0.1.2-alpha.5` restores the field for stored-log read compatibility only and still cannot stamp it), the writes are skipped and the switch stays process-local.
228
+ 0.1.2-alpha.5 (adapted 2026-09-02): 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.
229
229
  - **Optional seams.** The `doublecheck.gate` settings namespace registers only when the settings service is mounted; the `/gate status` plan-mode line reads the optional `ctx.planMode` (shows `unknown` without it); the adversary review needs `ctx.subagents`; verification needs `workflowEngine`.
230
230
  - **Local degrade.** `gate.review.engine: auto` degrades to the local reviewer when dsh-auto-review is absent or has no verdict records this session — the report names the reason instead of inventing a verdict.
231
231
  - **dsh-eval evidence is file-based.** The dsh-auto-review eval engine (`dsh-eval`) writes its prompt-regression / stress / fairness results to a workspace report file, not the session log. `gate.tests.evalReports.enabled` folds that file (off by default; skips when absent) and the folded counts ride the durable `doublecheck/gate` record so a settled run still replays.
package/README.pt.md CHANGED
@@ -223,8 +223,8 @@ O CLI apenas serializa o `GateState` já assentado — nunca reexecuta a porta d
223
223
 
224
224
  ## Limitações conhecidas
225
225
 
226
- - **Escritas duráveis.** `/doublecheck on\|off` → `doublecheck/state` e `/gate run` → `doublecheck/gate` precisam da superfície de append `ignorable` do host (pós-rc.6 até `0.1.1-rc.2`). Em hosts sem essa superfície (rc.6/rc.8 e `0.1.2-alpha.1`, que removeu o envelope — `0.1.2-alpha.3` restaura o campo apenas para compatibilidade de leitura de logs armazenados e ainda não consegue estampá-lo), as escritas são omitidas e o interruptor permanece em processo.
227
- 0.1.2-alpha.3 (adaptado em 2026-09-01): 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.
226
+ - **Escritas duráveis.** `/doublecheck on\|off` → `doublecheck/state` e `/gate run` → `doublecheck/gate` precisam da superfície de append `ignorable` do host (pós-rc.6 até `0.1.1-rc.2`). Em hosts sem essa superfície (rc.6/rc.8 e `0.1.2-alpha.1`, que removeu o envelope — `0.1.2-alpha.5` restaura o campo apenas para compatibilidade de leitura de logs armazenados e ainda não consegue estampá-lo), as escritas são omitidas e o interruptor permanece em processo.
227
+ 0.1.2-alpha.5 (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.
228
228
  - **Interfaces opcionais.** O namespace de configurações `doublecheck.gate` é registrado apenas quando o serviço de configurações está montado; a linha de modo plano de `/gate status` lê o `ctx.planMode` opcional (mostra `unknown` sem ele); a revisão adversarial precisa de `ctx.subagents`; a verificação precisa de `workflowEngine`.
229
229
  - **Degradação local.** `gate.review.engine: auto` degrada para o revisor local quando o dsh-auto-review está ausente ou não tem registros de veredicto nesta sessão — o relatório nomeia a razão em vez de inventar um veredicto.
230
230
  - **A evidência dsh-eval é baseada em arquivos.** O motor de avaliação do dsh-auto-review (`dsh-eval`) grava seus resultados de regressão de prompt / estresse / equidade em um arquivo de relatório do espaço de trabalho, não no registro de sessão. `gate.tests.evalReports.enabled` dobra esse arquivo (desativado por padrão; pula quando ausente) e as contagens dobradas viajam no registro durável `doublecheck/gate` para que uma execução assentada ainda seja reproduzível.
package/README.zh.md CHANGED
@@ -223,8 +223,8 @@ CLI 只序列化已定的 `GateState` —— 它从不重新运行四阶段门
223
223
 
224
224
  ## 已知限制
225
225
 
226
- - **持久写入。** `/doublecheck on\|off` → `doublecheck/state` 与 `/gate run` → `doublecheck/gate` 需要宿主的 `ignorable` 追加接口(rc.6 之后至 `0.1.1-rc.2`)。在无此接口的宿主上(rc.6/rc.8,以及移除该信封的 `0.1.2-alpha.1`——`0.1.2-alpha.3` 仅恢复存量日志读取兼容字段、仍无法盖章),写入被跳过、开关保持进程内状态。
227
- 0.1.2-alpha.3(2026-09-01 已适配):会话信封保留 ignorable 字段但仅用于存量日志读取兼容——Session.append 仍无法盖章,门控行为不变。
226
+ - **持久写入。** `/doublecheck on\|off` → `doublecheck/state` 与 `/gate run` → `doublecheck/gate` 需要宿主的 `ignorable` 追加接口(rc.6 之后至 `0.1.1-rc.2`)。在无此接口的宿主上(rc.6/rc.8,以及移除该信封的 `0.1.2-alpha.1`——`0.1.2-alpha.5` 仅恢复存量日志读取兼容字段、仍无法盖章),写入被跳过、开关保持进程内状态。
227
+ 0.1.2-alpha.5(2026-09-02 已适配):会话信封保留 ignorable 字段但仅用于存量日志读取兼容——Session.append 仍无法盖章,门控行为不变。
228
228
  - **可选接口。** `doublecheck.gate` 设置命名空间仅在挂载设置服务时注册;`/gate status` 的计划模式行读取可选的 `ctx.planMode`(没有则显示 `unknown`);对抗式评审需要 `ctx.subagents`;验证需要 `workflowEngine`。
229
229
  - **本地降级。** 当 dsh-auto-review 缺失或本会话没有裁决记录时,`gate.review.engine: auto` 会降级到本地评审者——报告会写明原因,而不是捏造裁决。
230
230
  - **dsh-eval 证据基于文件。** dsh-auto-review 评测引擎(`dsh-eval`)把其 prompt 回归 / 压测 / 公平性结果写入工作区报告文件,而非会话日志。`gate.tests.evalReports.enabled` 折叠该文件(默认关闭;缺失时跳过),折叠出的计数随持久 `doublecheck/gate` 记录保存,使已定的运行仍可重放。
@@ -19,6 +19,7 @@ import { DEFAULT_MUTATION_TOOLS, DEFAULT_TEST_COMMAND_PATTERNS, DEFAULT_TEST_FIL
19
19
  import { SPEC_TOOL_NAME } from "../domain/stages.js";
20
20
  import { buildVerifyScript, deriveReportVerdict, foldReportFacts, renderReportMarkdown, VERIFY_META, } from "../domain/report.js";
21
21
  import { SPEC_FIELD_NAMES, VERIFY_DIMENSIONS } from "../domain/vocabulary.js";
22
+ import { sessionEvents } from "../session-events.js";
22
23
  import { BundledSkillProvider, PROVIDER_NAME } from "./provider.js";
23
24
  export const name = 'doublecheck-grill';
24
25
  export const inject = ['skills', 'tools'];
@@ -362,7 +363,7 @@ export function apply(ctx, config) {
362
363
  const session = exec.agent?.session;
363
364
  const facts = session === undefined
364
365
  ? { spec: null, testRuns: { failed: 0, passed: 0 }, timeline: [], edits: 0, review: null }
365
- : foldReportFacts(session.events, reportDetection);
366
+ : foldReportFacts(sessionEvents(session), reportDetection);
366
367
  const verify = args.verify ?? config.reportVerify;
367
368
  const verification = verify
368
369
  ? await runVerifyWorkflow(ctx, config, facts.spec, exec)
@@ -15,6 +15,7 @@
15
15
  */
16
16
  import { createUserMessage } from '@deepseek-ai/dsh-llm';
17
17
  import { Session, SessionId } from '@deepseek-ai/dsh-session';
18
+ import { sessionEvents } from "../session-events.js";
18
19
  import { deriveReportVerdict, foldReportFacts, renderReportMarkdown } from "../domain/report.js";
19
20
  import { PROSE } from "./prose.js";
20
21
  /**
@@ -106,7 +107,7 @@ export function doublecheckHandler(deps) {
106
107
  };
107
108
  }
108
109
  if (input === 'report') {
109
- const facts = foldReportFacts(session.events, detection);
110
+ const facts = foldReportFacts(sessionEvents(session), detection);
110
111
  const report = {
111
112
  ...facts,
112
113
  verdict: deriveReportVerdict(facts, null),
package/lib/guard/gate.js CHANGED
@@ -24,6 +24,7 @@
24
24
  * @module dsh-doublecheck/guard/gate
25
25
  */
26
26
  import { createUserMessage } from '@deepseek-ai/dsh-llm';
27
+ import { sessionEvents } from "../session-events.js";
27
28
  import z from '@deepseek-ai/schemastery';
28
29
  import { attachEvalChecks, countRedChecks, DEFAULT_COVERAGE_PATTERN, DEFAULT_EVAL_REPORTS_CONFIG, DEFAULT_GATE_QUESTIONS, deriveGateVerdict, evaluateConsistency, evaluateRequirements, evaluateReview, evaluateTests, foldAutoReviewEvidence, foldRequirementsEvidence, foldTestEvidence, GATE_FINDINGS_SCHEMA, parseEvalReport, renderGateReportJson, renderGateReportMarkdown, renderPhaseMarkdown, skippedPhase, } from "../domain/gate.js";
29
30
  import { sortFindings } from "./review.js";
@@ -295,7 +296,7 @@ function autoReviewInstalled(ctx, agent) {
295
296
  // Fall through to the durable-event probe.
296
297
  }
297
298
  }
298
- return agent.session.events.some(event => event.type.startsWith('autoReview/'));
299
+ return sessionEvents(agent.session).some(event => event.type.startsWith('autoReview/'));
299
300
  }
300
301
  /**
301
302
  * Run the full delivery gate over the agent's session and settle the state.
@@ -310,7 +311,7 @@ function autoReviewInstalled(ctx, agent) {
310
311
  * @returns the settled gate state.
311
312
  */
312
313
  export async function runGate(ctx, config, detection, agent, signal, language) {
313
- const events = agent.session.events;
314
+ const events = sessionEvents(agent.session);
314
315
  const coverageRegex = new RegExp(config.tests.coveragePattern, 'i');
315
316
  const requirements = config.requirements.enabled
316
317
  ? evaluateRequirements(foldRequirementsEvidence(events, config.requirements.interrogateTool), { checklist: config.requirements.checklist, minConfirmed: config.requirements.minConfirmed })
@@ -511,7 +512,7 @@ export function gateHandler(deps) {
511
512
  if (input !== 'status' && input !== '') {
512
513
  return { kind: 'error', text: prose.gateCommandUnknown(invocation.rawInput.trim()) };
513
514
  }
514
- const events = session.events;
515
+ const events = sessionEvents(session);
515
516
  const coverageRegex = new RegExp(config.tests.coveragePattern, 'i');
516
517
  const requirements = config.requirements.enabled
517
518
  ? evaluateRequirements(foldRequirementsEvidence(events, config.requirements.interrogateTool), { checklist: config.requirements.checklist, minConfirmed: config.requirements.minConfirmed })
@@ -27,6 +27,7 @@
27
27
  * @module dsh-doublecheck/guard
28
28
  */
29
29
  import { createUserMessage } from '@deepseek-ai/dsh-llm';
30
+ import { sessionEvents } from "../session-events.js";
30
31
  import z from '@deepseek-ai/schemastery';
31
32
  import { DEFAULT_MUTATION_TOOLS, DEFAULT_TEST_COMMAND_PATTERNS, DEFAULT_TEST_FILE_PATTERNS, DEFAULT_TEST_TOOL_NAMES, compileDetection, isTestFilePath, mutationTargetPath, parseRawArguments, } from "../domain/evidence.js";
32
33
  import { emptyDisciplineState, foldDisciplineRange } from "../domain/stages.js";
@@ -197,12 +198,12 @@ export function apply(ctx, config) {
197
198
  }
198
199
  /**
199
200
  * Fold the session log to its current guard facts. The log is append-only
200
- * and `session.events` is an immutable snapshot replaced on each append, so
201
+ * and the event snapshot is an immutable array replaced on each append, so
201
202
  * a resumed fold reuses the already-folded prefix: a per-call read costs
202
203
  * O(new events) instead of rescanning the whole log.
203
204
  */
204
205
  function snapshotOf(session) {
205
- const events = session.events;
206
+ const events = sessionEvents(session);
206
207
  const cached = snapshots.get(session);
207
208
  if (cached !== undefined) {
208
209
  if (cached.events === events && events.length === cached.scanned)
package/lib/invariant.js CHANGED
@@ -25,6 +25,7 @@
25
25
  import { SPEC_FIELD_NAMES } from "./domain/vocabulary.js";
26
26
  import { deriveReportVerdict, foldReportFacts } from "./domain/report.js";
27
27
  import { deriveGateVerdict, GATE_PHASES } from "./domain/gate.js";
28
+ import { sessionEvents } from "./session-events.js";
28
29
  /** Full npm package name owning the reported failures. */
29
30
  export const PACKAGE_NAME = 'dsh-doublecheck';
30
31
  /** Cordis companion plugin name. */
@@ -49,7 +50,7 @@ export function installInvariant(facts) {
49
50
  }
50
51
  });
51
52
  ctx.on('doublecheck/report', (payload) => {
52
- const folded = foldReportFacts(payload.session.events, facts.detection());
53
+ const folded = foldReportFacts(sessionEvents(payload.session), facts.detection());
53
54
  if (payload.verification === null) {
54
55
  const rederived = deriveReportVerdict(folded, null);
55
56
  if (rederived !== payload.verdict) {
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Session event access shared by the guard, grill, and invariant rows.
3
+ * 0.1.2-alpha.5 renamed the `Session.events` getter to `snapshotEvents()`
4
+ * while the peer floor (>=0.1.0-rc.8) still exposes `.events`; the runtime
5
+ * probe below keeps both harness lines working without tightening peers.
6
+ * @module dsh-doublecheck/session-events
7
+ */
8
+ import type { Session, SessionEvent } from '@deepseek-ai/dsh-session';
9
+ /** A session-like that only needs to expose the events the folds read. */
10
+ export type SessionEventsSource = Session | {
11
+ events?: readonly SessionEvent[];
12
+ };
13
+ /**
14
+ * The current event snapshot of one session, whichever harness line owns it.
15
+ * @param session - the host Session (or a fixture-shaped session in tests).
16
+ * @returns a frozen full log snapshot on alpha.5+, the `.events` array earlier.
17
+ */
18
+ export declare function sessionEvents(session: SessionEventsSource | null | undefined): readonly SessionEvent[];
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Session event access shared by the guard, grill, and invariant rows.
3
+ * 0.1.2-alpha.5 renamed the `Session.events` getter to `snapshotEvents()`
4
+ * while the peer floor (>=0.1.0-rc.8) still exposes `.events`; the runtime
5
+ * probe below keeps both harness lines working without tightening peers.
6
+ * @module dsh-doublecheck/session-events
7
+ */
8
+ /**
9
+ * The current event snapshot of one session, whichever harness line owns it.
10
+ * @param session - the host Session (or a fixture-shaped session in tests).
11
+ * @returns a frozen full log snapshot on alpha.5+, the `.events` array earlier.
12
+ */
13
+ export function sessionEvents(session) {
14
+ if (session === null || session === undefined)
15
+ return [];
16
+ if (typeof session.snapshotEvents === 'function')
17
+ return session.snapshotEvents();
18
+ return session.events ?? [];
19
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-doublecheck",
3
- "version": "0.9.2",
3
+ "version": "0.9.3",
4
4
  "description": "Delivery quality gate for DeepSeek Harness: grill the requirements, test the implementation, prove the delivery, and gate the handoff with a deliverable/rework decision.",
5
5
  "packageManager": "pnpm@11.7.0",
6
6
  "repository": {
@@ -111,7 +111,7 @@
111
111
  ],
112
112
  "compatibility": {
113
113
  "dshVersions": [
114
- "0.1.2-alpha.3"
114
+ "0.1.2-alpha.5"
115
115
  ]
116
116
  },
117
117
  "capability": {
@@ -131,7 +131,7 @@
131
131
  "@deepseek-ai/cordis": "^4.0.2",
132
132
  "@deepseek-ai/dsh-agent": ">=0.1.0-rc.8 <0.2.0",
133
133
  "@deepseek-ai/dsh-commands": ">=0.1.0-rc.8 <0.2.0",
134
- "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2",
134
+ "@deepseek-ai/dsh-invariants": ">=0.1.0-rc.8 <0.2.0",
135
135
  "@deepseek-ai/dsh-llm": ">=0.1.0-rc.8 <0.2.0",
136
136
  "@deepseek-ai/dsh-session": ">=0.1.0-rc.8 <0.2.0",
137
137
  "@deepseek-ai/dsh-session-projection": ">=0.1.1-rc.2 <0.2.0",
@@ -146,17 +146,17 @@
146
146
  "devDependencies": {
147
147
  "@deepseek-ai/cordis": "^4.0.2",
148
148
  "@deepseek-ai/cordis-plugin-loader": "1.0.2",
149
- "@deepseek-ai/dsh-agent": "0.1.2-alpha.3",
150
- "@deepseek-ai/dsh-commands": "0.1.2-alpha.3",
151
- "@deepseek-ai/dsh-fs": "0.1.2-alpha.3",
152
- "@deepseek-ai/dsh-llm": "0.1.2-alpha.3",
153
- "@deepseek-ai/dsh-session": "0.1.2-alpha.3",
154
- "@deepseek-ai/dsh-session-projection": "0.1.2-alpha.3",
155
- "@deepseek-ai/dsh-skill": "0.1.2-alpha.3",
156
- "@deepseek-ai/dsh-subagent": "0.1.2-alpha.3",
157
- "@deepseek-ai/dsh-system-prompt": "0.1.2-alpha.3",
158
- "@deepseek-ai/dsh-tools": "0.1.2-alpha.3",
159
- "@deepseek-ai/dsh-workflow": "0.1.2-alpha.3",
149
+ "@deepseek-ai/dsh-agent": "0.1.2-alpha.5",
150
+ "@deepseek-ai/dsh-commands": "0.1.2-alpha.5",
151
+ "@deepseek-ai/dsh-fs": "0.1.2-alpha.5",
152
+ "@deepseek-ai/dsh-llm": "0.1.2-alpha.5",
153
+ "@deepseek-ai/dsh-session": "0.1.2-alpha.5",
154
+ "@deepseek-ai/dsh-session-projection": "0.1.2-alpha.5",
155
+ "@deepseek-ai/dsh-skill": "0.1.2-alpha.5",
156
+ "@deepseek-ai/dsh-subagent": "0.1.2-alpha.5",
157
+ "@deepseek-ai/dsh-system-prompt": "0.1.2-alpha.5",
158
+ "@deepseek-ai/dsh-tools": "0.1.2-alpha.5",
159
+ "@deepseek-ai/dsh-workflow": "0.1.2-alpha.5",
160
160
  "@deepseek-ai/schemastery": "^3.18.2",
161
161
  "@eslint/js": "^9.30.0",
162
162
  "@types/node": "^22.15.0",