diff --git a/build/build-release.cjs b/build/build-release.cjs index 549e5b7f..c3cc3230 100644 --- a/build/build-release.cjs +++ b/build/build-release.cjs @@ -59,11 +59,17 @@ const harnessHostEntry = 'out/main/deepseek-harness-host-bootstrap.js' const harnessBundleManifest = 'out/main/package.json' const harnessPackageVersions = { - '@deepseek-ai/dsh-agent': '0.1.0-rc.6', - '@napi-rs/canvas': '1.0.3', - 'node-pty': '1.1.0' + '@deepseek-ai/dsh-agent': + packageLock.packages['node_modules/@deepseek-ai/dsh-agent'] + ?.version, + '@napi-rs/canvas': + packageLock.packages['node_modules/@napi-rs/canvas'] + ?.version, + 'node-pty': + packageLock.packages['node_modules/node-pty']?.version } -const koffiVersion = '3.1.4' +const koffiVersion = + packageLock.packages['node_modules/koffi']?.version const harnessLicenseFiles = [ 'agent-client-protocol-Apache-2.0.txt', 'deepseek-cordis-MIT.txt', diff --git a/build/deepseek-harness-utility-smoke.cjs b/build/deepseek-harness-utility-smoke.cjs index 1f9e3047..09633343 100644 --- a/build/deepseek-harness-utility-smoke.cjs +++ b/build/deepseek-harness-utility-smoke.cjs @@ -183,7 +183,7 @@ async function run() { provider: 'goodbuddy', model: 'qwen-plus', supportsImageInput: false, - harnessVersion: '0.1.0-rc.6', + harnessVersion: '0.1.0-rc.8', credentialRefs: ['GOODBUDDY_HARNESS_MODEL_API_KEY'], skillPackages: [], extensionPackages: [], diff --git a/build/run-deepseek-harness-utility-smoke.cjs b/build/run-deepseek-harness-utility-smoke.cjs index 331a1724..92f8eda5 100644 --- a/build/run-deepseek-harness-utility-smoke.cjs +++ b/build/run-deepseek-harness-utility-smoke.cjs @@ -88,7 +88,7 @@ async function main() { `${JSON.stringify( { name: '@deepseek-ai/dsh-llm', - version: '0.1.0-rc.6', + version: '0.1.0-rc.8', private: true, type: 'module' }, diff --git a/docs/architecture/deepseek-harness-runtime-design.md b/docs/architecture/deepseek-harness-runtime-design.md index 624bc523..e3a840db 100644 --- a/docs/architecture/deepseek-harness-runtime-design.md +++ b/docs/architecture/deepseek-harness-runtime-design.md @@ -7,7 +7,7 @@ | 文档状态 | 实现与发布验收基线 | | 设计目标 | 将 DeepSeek Harness 作为 GoodBuddy 的第三个 Agent Runtime | | Runtime 标识 | `deepseek-harness` | -| 首版依赖基线 | 实际使用的 `@deepseek-ai/dsh-*` 底层库,精确锁定 `0.1.0-rc.6` | +| 当前依赖基线 | 实际使用的 `@deepseek-ai/dsh-*` 底层库,精确锁定 `0.1.0-rc.8` | | 上游状态 | Developer Preview,允许出现破坏性变更 | | 上游许可证 | MIT | | GoodBuddy 目标平台 | Windows、macOS、Linux,x64 与 arm64 | @@ -446,7 +446,7 @@ DeepSeek Harness 首版只使用符合下列边界的 GoodBuddy 模型连接: - 文本模型收到图片时必须在启动 Host 或发起模型网络调用前返回明确错误,不能静默丢弃图片。 - 图片模型只接受内联 JPEG/PNG,不接受 URL、文件路径、ACP `uri` 或其他媒体类型。 - Main 已通过 `nativeImage` 解码用户选择的图片并生成有界模型输入;Utility 仍须独立执行严格 base64、签名、容器结构、CRC(PNG)、完整解码、尺寸和摘要校验,不能把 Main 校验当作跨进程信任替代。 -- 每条消息最多 8 张图,单图编码后最多 1 MiB,图片合计最多 2 MiB,单图最多 1,600 万像素,累计解码像素最多 3,200 万(重复引用也计入预算)。进程内 Store 另设 32 MiB、256 个唯一对象的总上限。 +- 每条消息最多 8 张图,单图编码后最多 1 MiB,图片合计最多 2 MiB,单边最长 8,192 px,单图最多 1,600 万像素,累计解码像素最多 3,200 万(重复引用也计入预算)。进程内 Store 另设 32 MiB、256 个唯一对象的总上限。 - Attachment Store 只服务当前非持久 Harness Session;引用按 Session 释放,Host 退出时清空,不写入磁盘或 GoodBuddy 第二份会话日志。 - GoodBuddy 历史、Prompt、系统指令分别保持不同信任层。 - 任何用户文本都不能进入 Cordis 配置表达式或模块名。 @@ -459,7 +459,7 @@ DeepSeek Harness 首版只使用符合下列边界的 GoodBuddy 模型连接: | --- | --- | | 单个 JSON-RPC 帧 | 8 MiB | | 单图 / 单条消息图片 | 1 MiB / 8 张且合计 2 MiB | -| 单图 / 单条消息解码像素 | 1,600 万 / 3,200 万 | +| 单图尺寸 / 单条消息解码像素 | 单边最长 8,192 px 且 1,600 万像素 / 3,200 万像素 | | Host 临时图片存储 | 32 MiB 且最多 256 个唯一对象 | | 单个文本或推理事件 | 64 KiB | | 单次请求累计协议输出 | 4 MiB | @@ -497,7 +497,7 @@ Runtime: GoodBuddy 内置 DeepSeek Harness 模型配置: 跟随 GoodBuddy · 企业网关(qwen-plus) 状态: 已就绪 路径: <受控 Host 路径> -版本: 0.1.0-rc.6 +版本: 0.1.0-rc.8 执行权限: 当前用户权限 Host 始终由当前 GoodBuddy 版本提供,不存在自定义 Host 入口。 diff --git a/package-lock.json b/package-lock.json index 9ad10527..e0c7dee4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,28 +12,28 @@ "@agentclientprotocol/sdk": "0.25.1", "@antv/g6": "^5.1.1", "@deepseek-ai/cordis": "4.0.1", - "@deepseek-ai/dsh-agent": "0.1.0-rc.6", - "@deepseek-ai/dsh-agent-loop": "0.1.0-rc.6", - "@deepseek-ai/dsh-bash-local": "0.1.0-rc.6", - "@deepseek-ai/dsh-credentials": "0.1.0-rc.6", - "@deepseek-ai/dsh-fs-local": "0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "0.1.0-rc.6", - "@deepseek-ai/dsh-llm-pi-ai": "0.1.0-rc.6", - "@deepseek-ai/dsh-pwsh-local": "0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox-policy": "0.1.0-rc.6", - "@deepseek-ai/dsh-session": "0.1.0-rc.6", - "@deepseek-ai/dsh-shell-env": "0.1.0-rc.6", - "@deepseek-ai/dsh-skill": "0.1.0-rc.6", - "@deepseek-ai/dsh-subprocess-local": "0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "0.1.0-rc.6", - "@deepseek-ai/dsh-token-meter": "0.1.0-rc.6", - "@deepseek-ai/dsh-tool-bash": "0.1.0-rc.6", - "@deepseek-ai/dsh-tool-fs": "0.1.0-rc.6", - "@deepseek-ai/dsh-tool-pwsh": "0.1.0-rc.6", - "@deepseek-ai/dsh-tool-skill": "0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "0.1.0-rc.6", - "@deepseek-ai/dsh-user-approval": "0.1.0-rc.6", + "@deepseek-ai/dsh-agent": "0.1.0-rc.8", + "@deepseek-ai/dsh-agent-loop": "0.1.0-rc.8", + "@deepseek-ai/dsh-bash-local": "0.1.0-rc.8", + "@deepseek-ai/dsh-credentials": "0.1.0-rc.8", + "@deepseek-ai/dsh-fs-local": "0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "0.1.0-rc.8", + "@deepseek-ai/dsh-llm-pi-ai": "0.1.0-rc.8", + "@deepseek-ai/dsh-pwsh-local": "0.1.0-rc.8", + "@deepseek-ai/dsh-sandbox": "0.1.0-rc.8", + "@deepseek-ai/dsh-sandbox-policy": "0.1.0-rc.8", + "@deepseek-ai/dsh-session": "0.1.0-rc.8", + "@deepseek-ai/dsh-shell-env": "0.1.0-rc.8", + "@deepseek-ai/dsh-skill": "0.1.0-rc.8", + "@deepseek-ai/dsh-subprocess-local": "0.1.0-rc.8", + "@deepseek-ai/dsh-system-prompt": "0.1.0-rc.8", + "@deepseek-ai/dsh-token-meter": "0.1.0-rc.8", + "@deepseek-ai/dsh-tool-bash": "0.1.0-rc.8", + "@deepseek-ai/dsh-tool-fs": "0.1.0-rc.8", + "@deepseek-ai/dsh-tool-pwsh": "0.1.0-rc.8", + "@deepseek-ai/dsh-tool-skill": "0.1.0-rc.8", + "@deepseek-ai/dsh-tools": "0.1.0-rc.8", + "@deepseek-ai/dsh-user-approval": "0.1.0-rc.8", "@huggingface/tokenizers": "^0.1.3", "@modelcontextprotocol/sdk": "^1.30.0", "@napi-rs/canvas": "1.0.3", @@ -1485,96 +1485,96 @@ "license": "MIT" }, "node_modules/@deepseek-ai/dsh-agent": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent/-/dsh-agent-0.1.0-rc.6.tgz", - "integrity": "sha512-vtqq2pWTrzn0dKfj5kREZRpP82AwtGjGx9V1lYnKvF+Uc/a8zyWbSvjDE7V1d3YQAQJzs2cWO31hURWDekDXIA==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent/-/dsh-agent-0.1.0-rc.8.tgz", + "integrity": "sha512-fOl46ZvzoYHalrlyfOJAHNhzyKeVDTUnZZKNSJEr9GY/98WJTjcV21agVEofTXldkJ7a/ws2HpJkVNJVFMtslg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.8", + "@deepseek-ai/dsh-session": "^0.1.0-rc.8", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", + "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-agent-loop": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-loop/-/dsh-agent-loop-0.1.0-rc.6.tgz", - "integrity": "sha512-yShuKIMW360H14L4y13j3gz3Ix1s/3lwEEpfJW4hnFAE09h9Z4yJA7UfTQmQdzMRMnuj4uWFPw0e0BbapnkFuw==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-loop/-/dsh-agent-loop-0.1.0-rc.8.tgz", + "integrity": "sha512-6Vg5oLy3UZ6lJKMPxldqqBylKSMOpbV/FRrqzDqn3hGdksYBzt9K2hUJm/rE2RyguYKUKFPm2hExs0nn4HKmWA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.6", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.8", + "@deepseek-ai/dsh-session": "^0.1.0-rc.8", + "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.8", + "@deepseek-ai/dsh-settings": "^0.1.0-rc.8", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-attachment": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-attachment/-/dsh-attachment-0.1.0-rc.6.tgz", - "integrity": "sha512-3P6N17NQ8jqSQGzeCs+svCIqArU8oq0YmgEAo+axN9aVuUDferWU4DLRSX59UGpmyldX4LQn81toA+c+DqMcHg==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-attachment/-/dsh-attachment-0.1.0-rc.8.tgz", + "integrity": "sha512-cCrg4WWiav7pGtbdU8dJTpAG28cPnkWVB2YPOrlBCgBbhQziGcG9Dv67Ti6L3PI4OQKC55gYBFinQghFO/7FGg==", "license": "MIT", "peer": true, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-bash-local": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-bash-local/-/dsh-bash-local-0.1.0-rc.6.tgz", - "integrity": "sha512-YAc5W9uR7sN1Rrobp6fQlCaOdHqCWatTktV68UsoDuOJs5eM3nWEUUUVN8jdZCIDZhktT5hqbhe3+DzOX3Xg1w==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-bash-local/-/dsh-bash-local-0.1.0-rc.8.tgz", + "integrity": "sha512-vMf3dMRrvVvwWCLJxobYONSebPtWqy2ZZKpRZ6o5fBrZbM88irbvL6F/6r/mu4ADTIDigUtpoxlRpOEQKbSuTg==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-settings": "^0.1.0-rc.8", + "@deepseek-ai/dsh-shell": "^0.1.0-rc.8", + "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.8", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-brand": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-brand/-/dsh-brand-0.1.0-rc.6.tgz", - "integrity": "sha512-E8j9Nby24qP4rfrdcfc7bpt1CHpGT3tYmycOJJkEOH4ptIdT1m2ro9nmnSd5CWYukTr64A77vjm2WGqHRI92UA==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-brand/-/dsh-brand-0.1.0-rc.8.tgz", + "integrity": "sha512-402aUAfHxIZJrArBV4gDf0I/A/69A/By26FX6HTIOyFmCnB4wUBKh8jnglz1CorKWdZy8AKldAhh8HQhQEbGOQ==", "license": "MIT", "peer": true, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-code-runtime": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-code-runtime/-/dsh-code-runtime-0.1.0-rc.6.tgz", - "integrity": "sha512-aw8D4IOeMo11A3uxQeE4LFoW3bvaQnVkGFqqtS+lsINDARrOCJHXLUgecoKpys+Lc5erZZ4UQDnymJmL4OCcKA==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-code-runtime/-/dsh-code-runtime-0.1.0-rc.8.tgz", + "integrity": "sha512-6ZKyEE7dHH1UkKe5b0lg18Byww/7ocZyrNMVjAoUWEWp5i96Brf9Eavu9q3zepBMDMZJErCfV0pyt7KDhBJSig==", "license": "MIT", "peer": true, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-commands": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-commands/-/dsh-commands-0.1.0-rc.6.tgz", - "integrity": "sha512-dq1GZmGTPXEGG01ksZ6Jj6DxAkzAbg+nepvfnM/P74d6EUcsFsEy7CfS18n0VJ6/2Wp0xOWsQyyuFElqbynO7w==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-commands/-/dsh-commands-0.1.0-rc.8.tgz", + "integrity": "sha512-/i99EDLrUyd4bUVn4d7XS46vg09ZE0ervbE/aQaVUWLjDYKrarb7hPx9slADAg5/cUlJsN6L6CP544h9qlUo4g==", "license": "MIT", "peer": true, "dependencies": { @@ -1582,58 +1582,60 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", + "@deepseek-ai/dsh-attachment": "^0.1.0-rc.8", + "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.8", + "@deepseek-ai/dsh-session": "^0.1.0-rc.8", + "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-compaction": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-compaction/-/dsh-compaction-0.1.0-rc.6.tgz", - "integrity": "sha512-Uu8qgrHom13gdwwxAnqmNuWM8MqafkRlhjQMMJYmaMVVxjEUewSJ6lwtMbUEBR5ViLsfv4pTm5TnhxNCjedBUw==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-compaction/-/dsh-compaction-0.1.0-rc.8.tgz", + "integrity": "sha512-sWNqZqejzpKsnEMPsNVA/WYK4S59XlYJtnWw8wCPushzQdUt5zhf+g7LVx0cStSozEfwurxRvaZdOmNaa4WhNQ==", "license": "MIT", "peer": true, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6" + "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", + "@deepseek-ai/dsh-commands": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", + "@deepseek-ai/dsh-session": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-credentials": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-credentials/-/dsh-credentials-0.1.0-rc.6.tgz", - "integrity": "sha512-zyYRs3A9gxfZjZfONzJdMhM0Gzbslpha+FGYkLDRAozgPj0N7mZdE+Qflx2V4WNrCnsSjuvOW0HFBxWtSRUTUw==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-credentials/-/dsh-credentials-0.1.0-rc.8.tgz", + "integrity": "sha512-VopOhtUEa/fSmJr3fyKbsEG043kX1oGuBrmELAbkhmuDigl1cN88g0VPb9rMG2/dJ1h08wg+h0RJP+Ex4LjRWw==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-fs": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-fs/-/dsh-fs-0.1.0-rc.6.tgz", - "integrity": "sha512-OTkwb4QsZgmjtA/8ZEPh1FapmrBr3N989/G4Wmo1JkAvKbMxkYty6LxjckOawTTz7GJTfUoZCrw9uopDfIMMNw==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-fs/-/dsh-fs-0.1.0-rc.8.tgz", + "integrity": "sha512-ge5GW56+z20vYACQ2jqtevusdgMXa64laeU/Chql+VIA3+6xyJ8gLX+oj/1O5TlzhvmZ7ZPfZGBFBEVsEZzTQw==", "license": "MIT", "peer": true, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.6" + "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", + "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-fs-local": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-fs-local/-/dsh-fs-local-0.1.0-rc.6.tgz", - "integrity": "sha512-zP0OW474s7tvzEVQnBBTGL6Jrv/YyQXt4nswIbc3Aqr9JyHSfhZ/5IJoipZqfYXLS3ISWMhrF2npRg8L1NGsIQ==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-fs-local/-/dsh-fs-local-0.1.0-rc.8.tgz", + "integrity": "sha512-yWk6WrAHs8b6395XnZZOCf3wY90xYKjh/tyU3/rwFy4oU8zq9gzn/x8rdaZD0zUp+wE0XqfBf2AS4Jo03SKHyQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -1641,25 +1643,25 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-fs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-fs": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-home-paths": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-home-paths/-/dsh-home-paths-0.1.0-rc.6.tgz", - "integrity": "sha512-gIiUBmqB3L8inFr+hvjZv2/i6EVJOHIHCHg7bBFVhcl4HDK94+8wUCXTLGy80tcuISzIQiIaLuJq/NhSmV9Amw==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-home-paths/-/dsh-home-paths-0.1.0-rc.8.tgz", + "integrity": "sha512-9cQhH9CZsw7Zi73VnZk7CcuEVA6yR/Ox+7lp3VHq53fFYSPi0RL+kMWmh5XCrZB4U1OM3+PVsWsA5II9tB+t0Q==", "license": "MIT", "peer": true, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-invariants": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-invariants/-/dsh-invariants-0.1.0-rc.6.tgz", - "integrity": "sha512-WfEfOi99a4cpOugRAHTBSTnesLieu3ist1q9PXDXFBHX++K1rAl9+sB7YrdnbB8LH0UOY532gS9xJUYU6w0SLw==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-invariants/-/dsh-invariants-0.1.0-rc.8.tgz", + "integrity": "sha512-u0lYqyxOYwfsVnbsfGXZos5vFvA4cqFnBEW3/ezgljNwkYwzeUP/Y5wjPnQjP+ZzBn3CnVeIF6s2N2Vk3iA5mQ==", "license": "MIT", "peer": true, "dependencies": { @@ -1670,50 +1672,50 @@ } }, "node_modules/@deepseek-ai/dsh-jobs": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-jobs/-/dsh-jobs-0.1.0-rc.6.tgz", - "integrity": "sha512-fmyvSOVsNObmRnciuH57ZntuCSb0gflRleCeQx1ToGHRoGrR4Ndnstx33SuIXUQt6OSUhD2w2WKQTReXogpnSQ==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-jobs/-/dsh-jobs-0.1.0-rc.8.tgz", + "integrity": "sha512-HqQudOA4VkjCMpxWiqTCMmuiTa/pehW6yG7dDsctO1vW5K48hWQ/h7czdJKgrh4SMuK4kchv3IipS1KaJmdaog==", "license": "MIT", "peer": true, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", + "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-session": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-launch-environment": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-launch-environment/-/dsh-launch-environment-0.1.0-rc.6.tgz", - "integrity": "sha512-tTRJ1464PJUDe1Em1qq0mfdgGREzGGWo3JSqP6xeYDoX+MRXVP9/ChsZ5k6VBMjARAxw0HGBf7WR6VcupHbMZg==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-launch-environment/-/dsh-launch-environment-0.1.0-rc.8.tgz", + "integrity": "sha512-VvYo5R7tu4QhX/dsNpuBy3AaauizU6yPCeWQUNzI3ZjGA0VHkkZhInilcgxVJkPA1lwEXYB+OoCAo07PUy6D/w==", "license": "MIT", "peer": true, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-llm": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-llm/-/dsh-llm-0.1.0-rc.6.tgz", - "integrity": "sha512-kuFGC8bHlzGTwlRxQhXjf3CYWl8M4NzH+EYIkrW8rri4iMc9W53xrdvkil5No/DUlMm8g1u7GdeiWYFy0TMvtA==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-llm/-/dsh-llm-0.1.0-rc.8.tgz", + "integrity": "sha512-hf6RmX2Stn1UtzpktSHQLkIktQkBm9i/3yFfJlbGSkwyw5Cv9sTYJbyoHzsSnnh6i8nRRcMcBhvMgm23I00oIw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.6", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6" + "@deepseek-ai/dsh-attachment": "^0.1.0-rc.8", + "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-llm-pi-ai": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-llm-pi-ai/-/dsh-llm-pi-ai-0.1.0-rc.6.tgz", - "integrity": "sha512-5RvzkpVCYLg9A3IGdm04px7XOaF/xikuMLe2toBY4A0qtJraXiZtUN1QBOL9i6u7DTOLG9oHP/USsbWRpyI+1Q==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-llm-pi-ai/-/dsh-llm-pi-ai-0.1.0-rc.8.tgz", + "integrity": "sha512-r9dmHYy759gKtAG0S96wTCS6O8WFDqGLQu8t+zGY6LnfdT4qUJdmWtJ+GwCn+BGwq1AglBzjabvyRBp6BxXcMQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -1721,104 +1723,104 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.6", - "@deepseek-ai/dsh-credentials": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6" + "@deepseek-ai/dsh-attachment": "^0.1.0-rc.8", + "@deepseek-ai/dsh-credentials": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", + "@deepseek-ai/dsh-settings": "^0.1.0-rc.8", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-pwsh-local": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-pwsh-local/-/dsh-pwsh-local-0.1.0-rc.6.tgz", - "integrity": "sha512-TtITwtlDvxyXDE4HKJW9R6uWKU5kr72Y+8JHYV3Kj/HPAzQqwbVo/2e9wvq7H4t5Soo8K+KG5ZqBpMmpp+FAWg==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-pwsh-local/-/dsh-pwsh-local-0.1.0-rc.8.tgz", + "integrity": "sha512-lHAEwC4pL5bVSKgwaeO2dMM9s/jnpDBRuTeVD2HkunpFfT1Kq4lFi+/YXj00L7mW9DBP6FMfwRRV/0Wgo1FtdA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-settings": "^0.1.0-rc.8", + "@deepseek-ai/dsh-shell": "^0.1.0-rc.8", + "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.8", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-sandbox": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-sandbox/-/dsh-sandbox-0.1.0-rc.6.tgz", - "integrity": "sha512-SLZjuivQQKHTx4H7xlsjraEGGMIEA8BYOwvlm/9uZBrBrlttMU+d8Ne6QYpDcOwIEubL8mvrWRg8j3rtY3lVyA==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-sandbox/-/dsh-sandbox-0.1.0-rc.8.tgz", + "integrity": "sha512-dJpy5p/KjKkHG9AnMKU4+/ilj/4DCglsq3kof/jhIwtsZJCix07TEXP9vV8LCv4fU8af7cK3antXw4eVMqkwuQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", + "@deepseek-ai/dsh-session": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-sandbox-policy": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-sandbox-policy/-/dsh-sandbox-policy-0.1.0-rc.6.tgz", - "integrity": "sha512-XEB7+pJZVPWmZXv27EX/4V/1noVLUF5ZHyy3EY5tC4XtEyayWKtvHL4y9OTLIYhlU4Ualv5ag8s5ueGGq3ID8Q==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-sandbox-policy/-/dsh-sandbox-policy-0.1.0-rc.8.tgz", + "integrity": "sha512-xQOlYWbUr1Oj6cnRd5aHZIz52EOEAdSO1HJIfeDkQrVaOgohFsiiCIp6PNFumuGNWdCEnf4Q18ebafLNtazYlA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.8", + "@deepseek-ai/dsh-session": "^0.1.0-rc.8", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-scope": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-scope/-/dsh-scope-0.1.0-rc.6.tgz", - "integrity": "sha512-UlDLV4syLoJinNg9imhXrSAHrdaTa5Ff8gg46rzjFJGPUOhAk3DZff0hryT5OhrBi0A5Tj92qVpg2pRVvxnUzQ==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-scope/-/dsh-scope-0.1.0-rc.8.tgz", + "integrity": "sha512-/o+PxkVV2zUy9lYlMFr4TWSb+ESW4DE+fI891yIbsLzOJdFgfbmmLpGrlWgnz8/unIGJZxjeXdwyppV04Z277Q==", "license": "MIT", "peer": true, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-session": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session/-/dsh-session-0.1.0-rc.6.tgz", - "integrity": "sha512-8tu8I6VWC7050GAUXWhcEWQw4pakALQc8TlhKr52m7Y4+kIKeNt3FBgP86PaGPBtpK0p5zUPRQNkFpzZbBdxyw==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session/-/dsh-session-0.1.0-rc.8.tgz", + "integrity": "sha512-Qs5Mgn32WPPVB4rKHjsZBgLOkh0TQurUAcc9GaDVudK4dUkpno2HDh++qu/PrwRA3CZ/iwPAoFHCpB3AMMaoLg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.6" + "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.8", + "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-session-persistence": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-persistence/-/dsh-session-persistence-0.1.0-rc.6.tgz", - "integrity": "sha512-AbNBe+IYCbZqSHqOACVdj8QTynm2HZ0cThrEuI6nGMtlWLYLx6lzZ1rgO/56Av9mIScjyTBGJAIKhEYaMTBG9g==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-persistence/-/dsh-session-persistence-0.1.0-rc.8.tgz", + "integrity": "sha512-JujorG/UCern0+zxJzNswyWl2tFG9sLzfVNvA5YkTLaRLZt7ZsEhxG4DxWZ6uj+3RJ8sf4bqdKqvpIn9t1pwUw==", "license": "MIT", "peer": true, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6" + "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-session": "^0.1.0-rc.8", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-session-projection": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-projection/-/dsh-session-projection-0.1.0-rc.6.tgz", - "integrity": "sha512-DYLALBPdEI1LZjJ4B6rdGdGY4gy+iR2+5Xh2xJoAGa/pTyN5Z55TNfvuMJrmeRBjAuDXNUQpmURbvos5rJ4veg==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-projection/-/dsh-session-projection-0.1.0-rc.8.tgz", + "integrity": "sha512-q00B+rl7WAuK0Bgh93SY2+ZpqaH2kJhfJ9n6Jg6R/m4plnH0Ip4oCAHl6u8rBzDgb1mniQGEQDz/7BN5Q3It8Q==", "license": "MIT", "peer": true, "dependencies": { @@ -1826,126 +1828,127 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-session": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-settings": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-settings/-/dsh-settings-0.1.0-rc.6.tgz", - "integrity": "sha512-5ZlH2FNRU0kkdcCoEJohvdb2fiNnxM+iZqN3icbR3WQbMm8RPRrXlZlps5YUaQKPRbNRHA2LkOXW998QRlhHcA==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-settings/-/dsh-settings-0.1.0-rc.8.tgz", + "integrity": "sha512-pqbMoiSP+Ieww9/4gcHYXcBCDlno1zYDu2OPq+5xdZ+McnK+5YBtHsiRpnR9cHQxGTH7lkfIv+adkOueQW0utg==", "license": "MIT", "peer": true, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", + "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", "@deepseek-ai/schemastery": "^3.18.1" } }, "node_modules/@deepseek-ai/dsh-shell": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-shell/-/dsh-shell-0.1.0-rc.6.tgz", - "integrity": "sha512-l/pcwbdpM+Zgp2AzH0kH0z7bPU7L3k4uG1t5Du1V5ilk70tyMSxz2upNfAbjkDHZZZO18LTs33aq+zRWHX1CUg==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-shell/-/dsh-shell-0.1.0-rc.8.tgz", + "integrity": "sha512-RNhp7Y25DXUH7o36X4GcN0lnOLg6NXTlWZpYNURT7aDj3UHcLLajRsyddiAh1EbwQnl0GRKRZhLaZHrrG6gMIw==", "license": "MIT", "peer": true, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.8", + "@deepseek-ai/dsh-settings": "^0.1.0-rc.8", + "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-shell-env": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-shell-env/-/dsh-shell-env-0.1.0-rc.6.tgz", - "integrity": "sha512-znxHFSqduw8U/AxKSO8SgSt703Bl+irRzTU0ukJT+ySlnyAwSAg8sZHLo5ZlEt5K8BdWhxz8Vc5jibOtJPB3ZQ==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-shell-env/-/dsh-shell-env-0.1.0-rc.8.tgz", + "integrity": "sha512-E/Rlka8BnpB7GM67ZJPjvZyp0O9L5x28giyJhHWZcPHN4rsEQFVVqk0cH6iDT5STy+dMc9BAUW+im18kATIxsA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.6", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.8", + "@deepseek-ai/dsh-shell": "^0.1.0-rc.8", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-skill": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-skill/-/dsh-skill-0.1.0-rc.6.tgz", - "integrity": "sha512-VyRlCOASIRuTflKwn4NvbdAXxSPnnLJ+RAQUI4GK5pOtPwI2DhJrbovqpyp5kNAkZMsqvIeHWu5PcCEJ+FpQ2w==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-skill/-/dsh-skill-0.1.0-rc.8.tgz", + "integrity": "sha512-MqcOzl4Y5pQEvFBNVAi5w0IZWH5kVbXmp1RYScrl+8HpVATZbgumDhztVnEc2kUrZu+o6LKb1hnbunK6JHUE5g==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-subprocess": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subprocess/-/dsh-subprocess-0.1.0-rc.6.tgz", - "integrity": "sha512-nZaZRjSnE1he+GAd14vURAH7n3Fw5eGx3nzMbkB96Y6Qx+oQB/7PTuXxKVxlCh8TSfMJTf851ahwWb1eALjKlw==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subprocess/-/dsh-subprocess-0.1.0-rc.8.tgz", + "integrity": "sha512-rTWwWCq/WrBTjaXhApu7gaho6UHwMZq0+l7nZ06YMUreNZoCHfg67pAXopMqTgr/iotphmXQdChrLgBabzL1gA==", "license": "MIT", "peer": true, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-subprocess-local": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subprocess-local/-/dsh-subprocess-local-0.1.0-rc.6.tgz", - "integrity": "sha512-D2daTRaprE25ti1Ra69eURPwLULpnRyUHqAGtcMHddcjNIsZ4yR0DGinYOsgoRymzu3t02qLxyoio05atSViRw==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subprocess-local/-/dsh-subprocess-local-0.1.0-rc.8.tgz", + "integrity": "sha512-2QMd6Nwjd+ARor4g+GSZ3dNyTvEf2IPOje47nQwa3UCmltLxn8K8gjDAN/5sGr/IF56P14FeF4xFag7tMK+Zdg==", "hasInstallScript": true, "license": "MIT", "dependencies": { - "node-pty": "^1.1.0" + "koffi": "^3.1.0", + "node-pty": "1.2.0-beta.15" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.8", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-system-prompt": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-system-prompt/-/dsh-system-prompt-0.1.0-rc.6.tgz", - "integrity": "sha512-E7g+XChh4q4/wX++v56z1pV4SA1Rtz42xkznLPPi9FlXrrzJxwHMOUzBZ9Rz3Y1kLhQ++HJG3ZatmNx3rjFilg==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-system-prompt/-/dsh-system-prompt-0.1.0-rc.8.tgz", + "integrity": "sha512-yk8Z85rzX2EwpKNWA5i+K3I3mqsIIUc9niwbDpXO8vlHvpC2qR3RNHjJIJN2EZYDqfSzTVtkbxHFsuMzDXIbew==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-timeout": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-timeout/-/dsh-timeout-0.1.0-rc.6.tgz", - "integrity": "sha512-CUean0fAnfsJVszFEip7PsU/S26W+JfDFfsza2dCtlw8n6xlkbHA9Gjxdk2aTwqDGCgXEPkRW7mYkdJ0n6FR7w==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-timeout/-/dsh-timeout-0.1.0-rc.8.tgz", + "integrity": "sha512-RwOC/qHribE6b+LStAO7aAgweefLE5sqDO7Uz6/mnTDyJxCt7HNQnE/Op8sAvRa33d752aUkPfO9S0mgzVAoFQ==", "license": "MIT", "peer": true, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-token-meter": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-token-meter/-/dsh-token-meter-0.1.0-rc.6.tgz", - "integrity": "sha512-qU5FT4n1RJXP3Ss8NJ5TTvPo8rZ6cxcrCedp1t0sTAj93SGssAanq47voSmznPP52nwz/SLeunznAIT0jhbsZQ==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-token-meter/-/dsh-token-meter-0.1.0-rc.8.tgz", + "integrity": "sha512-ZcS6vuuJhoqjUrbyROuiiYk4nrvChkkYEfIoj7CjGbNArWOhbStmBaiPyahtcB1kThcnUKdu7vv7DaZJdLw8Lg==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -1953,40 +1956,40 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-compaction": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.6" + "@deepseek-ai/dsh-compaction": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", + "@deepseek-ai/dsh-session": "^0.1.0-rc.8", + "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-tool-bash": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-bash/-/dsh-tool-bash-0.1.0-rc.6.tgz", - "integrity": "sha512-yzo/xPCObiFe+OU0e8E5nVOGpW6mp9vx/3q+MHQ0aqEbqrqHUfVMGPobfDAd/I1Ja/9Nag5NIvHpI2Hwx7lACg==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-bash/-/dsh-tool-bash-0.1.0-rc.8.tgz", + "integrity": "sha512-VvP8Ky8ifqS7Iy7XUxc6cWB7sse3X6gqr92m0hBuodwQblzrZq2b6IyzfTzXKZKLqt5mMUaLRt7IPIDOOG+WEQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-jobs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.6", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.6", - "@deepseek-ai/dsh-shell-env": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6", - "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-jobs": "^0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", + "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.8", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.8", + "@deepseek-ai/dsh-shell": "^0.1.0-rc.8", + "@deepseek-ai/dsh-shell-env": "^0.1.0-rc.8", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.8", + "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-tool-fs": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-fs/-/dsh-tool-fs-0.1.0-rc.6.tgz", - "integrity": "sha512-bJfo8cCacX3WBygG8GbIlGz3jQ15MyIv4htGCjKpIIRHrXHSAelNtzceO2xQ21/9BkXrvg+i50mqySOcKQ0b3w==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-fs/-/dsh-tool-fs-0.1.0-rc.8.tgz", + "integrity": "sha512-pxo2YfVlqcw0sCA2+4DtqaaYsuxkx1QfvjT3VO+ckZMWn/UnGOUuzjJtKhVynwjm8prttGqK2LBXUTBZPlKTWg==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -1994,106 +1997,106 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.6", - "@deepseek-ai/dsh-fs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6", - "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.6" + "@deepseek-ai/dsh-attachment": "^0.1.0-rc.8", + "@deepseek-ai/dsh-fs": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", + "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.8", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.8", + "@deepseek-ai/dsh-session": "^0.1.0-rc.8", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.8", + "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-tool-pwsh": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-pwsh/-/dsh-tool-pwsh-0.1.0-rc.6.tgz", - "integrity": "sha512-x8ZlXUpOmcEiQobSTNSj18TPWVzyGe68pXJi6njea28DKVSe5Cx/L1bl9WImxru9f06+BkAm2ievJ+VKe89aeA==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-pwsh/-/dsh-tool-pwsh-0.1.0-rc.8.tgz", + "integrity": "sha512-B5F08tsSD7DHqXDXjn/Q11FavHw1U8/WAEqp8AC47vDRymPJIgTM8zSlJ0Lx7aZaKPTW4zQYtSmwUhy93q6zfw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-jobs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.6", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.6", - "@deepseek-ai/dsh-shell-env": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6", - "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-jobs": "^0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", + "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.8", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.8", + "@deepseek-ai/dsh-shell": "^0.1.0-rc.8", + "@deepseek-ai/dsh-shell-env": "^0.1.0-rc.8", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.8", + "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-tool-skill": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-skill/-/dsh-tool-skill-0.1.0-rc.6.tgz", - "integrity": "sha512-AebSfHSt6j0PXuN3yK9+X4aC6tHSnFdm2hZglII7aEHr/lL9UbynPb3NTumh6thXZ9Earvwhf9JdOxHMsjHqfw==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-skill/-/dsh-tool-skill-0.1.0-rc.8.tgz", + "integrity": "sha512-oQAPyXiQDDZ73rZwST7KqwUAr0Al3U1dxWdtzETsMzvNSQE9fmMBz5jUObFIEjxxJcA07Pp1DFzuJdpkCIDeCw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-skill": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", + "@deepseek-ai/dsh-skill": "^0.1.0-rc.8", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-tools": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tools/-/dsh-tools-0.1.0-rc.6.tgz", - "integrity": "sha512-Tu08EPK3JyK0iNjH4FGzu/1uADynNSS6SmwOLdfytUN0YNqwNuKFSt2OJUg19famNlTgy992DcHfDu0T+gLXFg==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tools/-/dsh-tools-0.1.0-rc.8.tgz", + "integrity": "sha512-tvuGAVUS4yoPW9zH7CGWJgMlAzGjfu2UlRiricldlcwSKAaJZPZx/K/YfTivUyDTER6aK1DJUnIpVG7RD/DoHQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-code-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", + "@deepseek-ai/dsh-code-runtime": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.8", + "@deepseek-ai/dsh-session": "^0.1.0-rc.8", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8", + "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-typert-protocol": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-typert-protocol/-/dsh-typert-protocol-0.1.0-rc.6.tgz", - "integrity": "sha512-weWzN8r01YCkoDCAM7BsKw2YhRrD4zL8N2SAZu9hovYtXSq8xHXsP4Zh8RLYIlYcuotjyff/6hic+0TJPd14YA==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-typert-protocol/-/dsh-typert-protocol-0.1.0-rc.8.tgz", + "integrity": "sha512-scwEAefRBL7gRpaXiEdiHRMvlr8dLmUbiEvy0LOAX/8X3FZBd/5tHQ/8lCppAQNTDZMI/LSiSMpu5XrFId+7cQ==", "license": "MIT", "peer": true, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/dsh-user-approval": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-user-approval/-/dsh-user-approval-0.1.0-rc.6.tgz", - "integrity": "sha512-9rnkSDGOpu2XUeGwbPeTzVUTFWTND1PMPM5L/ZQPptV5yyZlQiNxM2rCC6OdL+ZVerwxEqrRhZIQn/KVtQfKag==", + "version": "0.1.0-rc.8", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-user-approval/-/dsh-user-approval-0.1.0-rc.8.tgz", + "integrity": "sha512-6SFCxp7dgNFEyzQIcs5i9C+5djgXsAeV0iKmZUCLlcIeVM1chcCMHyGcoXlw8yyB14qFMrMs+TPvhvpu2WWxAw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.8", + "@deepseek-ai/dsh-brand": "^0.1.0-rc.8", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.8", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.8", + "@deepseek-ai/dsh-session": "^0.1.0-rc.8", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.8" } }, "node_modules/@deepseek-ai/schemastery": { @@ -12161,9 +12164,9 @@ "license": "MIT" }, "node_modules/node-pty": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-1.1.0.tgz", - "integrity": "sha512-20JqtutY6JPXTUnL0ij1uad7Qe1baT46lyolh2sSENDd4sTzKZ4nmAFkeAARDKwmlLjPx6XKRlwRUxwjOy+lUg==", + "version": "1.2.0-beta.15", + "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-1.2.0-beta.15.tgz", + "integrity": "sha512-vORSzHXi4Ofl7HemVWpuudLqCPdaQb4LfpRCUpE5HPxhp4JYscl8zZwxh11p26v2wvW24WMwnMfLjhRLixrfxA==", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 17beedc3..f7c4192f 100644 --- a/package.json +++ b/package.json @@ -261,28 +261,28 @@ "@agentclientprotocol/sdk": "0.25.1", "@antv/g6": "^5.1.1", "@deepseek-ai/cordis": "4.0.1", - "@deepseek-ai/dsh-agent": "0.1.0-rc.6", - "@deepseek-ai/dsh-agent-loop": "0.1.0-rc.6", - "@deepseek-ai/dsh-bash-local": "0.1.0-rc.6", - "@deepseek-ai/dsh-credentials": "0.1.0-rc.6", - "@deepseek-ai/dsh-fs-local": "0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "0.1.0-rc.6", - "@deepseek-ai/dsh-llm-pi-ai": "0.1.0-rc.6", - "@deepseek-ai/dsh-pwsh-local": "0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox-policy": "0.1.0-rc.6", - "@deepseek-ai/dsh-session": "0.1.0-rc.6", - "@deepseek-ai/dsh-shell-env": "0.1.0-rc.6", - "@deepseek-ai/dsh-skill": "0.1.0-rc.6", - "@deepseek-ai/dsh-subprocess-local": "0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "0.1.0-rc.6", - "@deepseek-ai/dsh-token-meter": "0.1.0-rc.6", - "@deepseek-ai/dsh-tool-bash": "0.1.0-rc.6", - "@deepseek-ai/dsh-tool-fs": "0.1.0-rc.6", - "@deepseek-ai/dsh-tool-pwsh": "0.1.0-rc.6", - "@deepseek-ai/dsh-tool-skill": "0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "0.1.0-rc.6", - "@deepseek-ai/dsh-user-approval": "0.1.0-rc.6", + "@deepseek-ai/dsh-agent": "0.1.0-rc.8", + "@deepseek-ai/dsh-agent-loop": "0.1.0-rc.8", + "@deepseek-ai/dsh-bash-local": "0.1.0-rc.8", + "@deepseek-ai/dsh-credentials": "0.1.0-rc.8", + "@deepseek-ai/dsh-fs-local": "0.1.0-rc.8", + "@deepseek-ai/dsh-llm": "0.1.0-rc.8", + "@deepseek-ai/dsh-llm-pi-ai": "0.1.0-rc.8", + "@deepseek-ai/dsh-pwsh-local": "0.1.0-rc.8", + "@deepseek-ai/dsh-sandbox": "0.1.0-rc.8", + "@deepseek-ai/dsh-sandbox-policy": "0.1.0-rc.8", + "@deepseek-ai/dsh-session": "0.1.0-rc.8", + "@deepseek-ai/dsh-shell-env": "0.1.0-rc.8", + "@deepseek-ai/dsh-skill": "0.1.0-rc.8", + "@deepseek-ai/dsh-subprocess-local": "0.1.0-rc.8", + "@deepseek-ai/dsh-system-prompt": "0.1.0-rc.8", + "@deepseek-ai/dsh-token-meter": "0.1.0-rc.8", + "@deepseek-ai/dsh-tool-bash": "0.1.0-rc.8", + "@deepseek-ai/dsh-tool-fs": "0.1.0-rc.8", + "@deepseek-ai/dsh-tool-pwsh": "0.1.0-rc.8", + "@deepseek-ai/dsh-tool-skill": "0.1.0-rc.8", + "@deepseek-ai/dsh-tools": "0.1.0-rc.8", + "@deepseek-ai/dsh-user-approval": "0.1.0-rc.8", "@huggingface/tokenizers": "^0.1.3", "@modelcontextprotocol/sdk": "^1.30.0", "@napi-rs/canvas": "1.0.3", diff --git a/resources/release-notes.json b/resources/release-notes.json index e0850355..7606de4e 100644 --- a/resources/release-notes.json +++ b/resources/release-notes.json @@ -15,6 +15,7 @@ "**独立会话分支。** 本地会话可通过“在新会话中继续”创建独立分支并保留来源,不复制原会话的任务、队列、运行记录、记忆或成果归属。", "**应用内反馈。** 可在“关于与更新”中提交问题、建议或体验反馈;邮箱和单张截图均为可选项,失败后会保留草稿供重试。", "**魔法笔记待办数量。** 左侧导航可显示未完成待办数量,并可在“平台功能 → 魔法笔记”中关闭;超过 99 项时显示“99+”。", + "**DeepSeek Harness Runtime。** 内置 DeepSeek Harness 已从 `0.1.0-rc.6` 升级至 `0.1.0-rc.8`;GoodBuddy 同步适配新版图片附件限制,现有受控 Host、Ask/Execute 与插件边界保持不变。", "**Linux 与 LoongArch 构建。** Linux x64/arm64 桌面版新增 RPM 安装包,并提供独立、可复现的 Debian loong64 实验性预览构建流程。" ], "fixes": [ @@ -41,6 +42,7 @@ "**Independent conversation branches.** Continue a local conversation in a new branch that records its source without copying Tasks, queued input, runs, memories, or artifact ownership.", "**In-app feedback.** Submit problems, ideas, or experience notes from About & Updates. An email address and one screenshot are optional, and failed submissions retain the draft for retry.", "**Magic Notes todo count.** The primary navigation can show incomplete todo counts, with an option under Platform Features → Magic Notes to hide the badge. Counts above 99 display as “99+”.", + "**DeepSeek Harness Runtime.** The bundled DeepSeek Harness is updated from `0.1.0-rc.6` to `0.1.0-rc.8`. GoodBuddy now matches the updated image attachment limits while preserving its controlled Host, Ask/Execute, and plugin boundaries.", "**Linux and LoongArch builds.** Linux x64/arm64 desktop releases add RPM installers, and the repository now provides a separate reproducible experimental Debian loong64 preview build." ], "fixes": [ diff --git a/src/main/agent/bundled-runtimes.ts b/src/main/agent/bundled-runtimes.ts index abc50427..8de97209 100644 --- a/src/main/agent/bundled-runtimes.ts +++ b/src/main/agent/bundled-runtimes.ts @@ -7,7 +7,7 @@ export type BundledRuntimePaths = { } export const bundledContinueVersion = '1.5.47' -export const bundledDeepSeekHarnessVersion = '0.1.0-rc.6' +export const bundledDeepSeekHarnessVersion = '0.1.0-rc.8' export function resolveBundledRuntimePaths(input: { appPath: string diff --git a/src/main/agent/deepseek-harness-acp-e2e.test.ts b/src/main/agent/deepseek-harness-acp-e2e.test.ts index 99207525..68de4a33 100644 --- a/src/main/agent/deepseek-harness-acp-e2e.test.ts +++ b/src/main/agent/deepseek-harness-acp-e2e.test.ts @@ -329,7 +329,7 @@ function createInProcessLaunch( provider: 'goodbuddy', model: options.model, supportsImageInput: options.supportsImageInput, - harnessVersion: '0.1.0-rc.6', + harnessVersion: '0.1.0-rc.8', credentialRefs: options.credentialRefs, skillPackages: options.skillPackages, extensionPackages: options.extensionPackages, diff --git a/src/main/agent/deepseek-harness-control-protocol.ts b/src/main/agent/deepseek-harness-control-protocol.ts index cd028f7c..0a438452 100644 --- a/src/main/agent/deepseek-harness-control-protocol.ts +++ b/src/main/agent/deepseek-harness-control-protocol.ts @@ -5,11 +5,13 @@ import { runtimeExtensionConfigurationSchema, runtimeExtensionIdSchema } from '../../shared/runtime-extension-contracts' +import { bundledDeepSeekHarnessVersion } from './bundled-runtimes' export const DEEPSEEK_HARNESS_CONTROL_PROTOCOL = 'goodbuddy.deepseek-harness.control' export const DEEPSEEK_HARNESS_CONTROL_VERSION = 2 -export const DEEPSEEK_HARNESS_HOST_VERSION = '0.1.0-rc.6' +export const DEEPSEEK_HARNESS_HOST_VERSION = + bundledDeepSeekHarnessVersion export const DEEPSEEK_HARNESS_CREDENTIAL_REF = 'GOODBUDDY_HARNESS_MODEL_API_KEY' export const DEEPSEEK_HARNESS_MAX_FRAME_BYTES = diff --git a/src/main/agent/deepseek-harness-runtime.test.ts b/src/main/agent/deepseek-harness-runtime.test.ts index d3ce9dfd..45fd067d 100644 --- a/src/main/agent/deepseek-harness-runtime.test.ts +++ b/src/main/agent/deepseek-harness-runtime.test.ts @@ -156,7 +156,7 @@ function setup( if (method === 'goodbuddy/handshake') { return { controlProtocolVersion: 1, - harnessVersion: '0.1.0-rc.6', + harnessVersion: '0.1.0-rc.8', acpProtocolVersion: 1, supports: { cancellation: true, diff --git a/src/main/agent/dsh-extension-marketplace.e2e.test.ts b/src/main/agent/dsh-extension-marketplace.e2e.test.ts index faf85eda..74a07072 100644 --- a/src/main/agent/dsh-extension-marketplace.e2e.test.ts +++ b/src/main/agent/dsh-extension-marketplace.e2e.test.ts @@ -95,7 +95,7 @@ describe.skipIf(!enabled)('DSH marketplace live E2E', () => { api: 'openai-completions', provider: 'goodbuddy', model: 'deepseek-test', - harnessVersion: '0.1.0-rc.6', + harnessVersion: '0.1.0-rc.8', credentialRefs: ['GOODBUDDY_API_KEY'], skillPackages: [], extensionPackages: extensions, diff --git a/src/main/agent/goodbuddy-harness-attachment-store.test.ts b/src/main/agent/goodbuddy-harness-attachment-store.test.ts index ea5a5093..d04e24cc 100644 --- a/src/main/agent/goodbuddy-harness-attachment-store.test.ts +++ b/src/main/agent/goodbuddy-harness-attachment-store.test.ts @@ -8,6 +8,7 @@ const canvas = createCanvas(1, 1) const transparentPng = canvas.toBuffer('image/png') const jpeg = canvas.toBuffer('image/jpeg') const secondPng = createCanvas(2, 1).toBuffer('image/png') +const overwidePng = createCanvas(8_193, 1).toBuffer('image/png') describe('GoodBuddy Harness attachment store', () => { it('decodes, stores, verifies, and releases inline images', async () => { @@ -32,12 +33,18 @@ describe('GoodBuddy Harness attachment store', () => { const stored = await store.readImage(first) expect(stored.ref).toBe(first) expect(Buffer.from(stored.data).equals(transparentPng)).toBe(true) + await expect( + store.readImage({ + ...first, + width: first.width + 1 + }) + ).rejects.toMatchObject({ code: 'INVALID_ATTACHMENT_REF' }) store.releaseImage(first) await expect(store.readImage(first)).resolves.toBeDefined() store.releaseImage(second) await expect(store.readImage(first)).rejects.toMatchObject({ - code: 'NOT_FOUND' + code: 'ATTACHMENT_NOT_FOUND' }) const jpegRef = await store.saveImage({ @@ -62,7 +69,7 @@ describe('GoodBuddy Harness attachment store', () => { data: transparentPng, mediaType: 'image/jpeg' }) - ).rejects.toMatchObject({ code: 'INVALID_IMAGE' }) + ).rejects.toMatchObject({ code: 'IMAGE_TYPE_MISMATCH' }) await expect( store.saveImage({ data: Buffer.from([ @@ -81,6 +88,14 @@ describe('GoodBuddy Harness attachment store', () => { mediaType: 'image/png' }) ).rejects.toMatchObject({ code: 'INVALID_IMAGE' }) + await expect( + store.saveImage({ + data: overwidePng, + mediaType: 'image/png' + }) + ).rejects.toMatchObject({ + code: 'IMAGE_DIMENSION_TOO_LARGE' + }) await store.saveImage({ data: transparentPng, @@ -91,7 +106,7 @@ describe('GoodBuddy Harness attachment store', () => { data: secondPng, mediaType: 'image/png' }) - ).rejects.toMatchObject({ code: 'STORAGE_LIMIT' }) + ).rejects.toMatchObject({ code: 'ATTACHMENT_WRITE_FAILED' }) }) it('does not retain a partial batch when capacity is exceeded', async () => { @@ -104,7 +119,7 @@ describe('GoodBuddy Harness attachment store', () => { { data: transparentPng, mediaType: 'image/png' }, { data: jpeg, mediaType: 'image/jpeg' } ]) - ).rejects.toMatchObject({ code: 'STORAGE_LIMIT' }) + ).rejects.toMatchObject({ code: 'ATTACHMENT_WRITE_FAILED' }) await expect( store.saveImage({ data: jpeg, @@ -130,4 +145,21 @@ describe('GoodBuddy Harness attachment store', () => { height: 1 }) }) -}) + + it('enforces the upstream per-message image count', async () => { + const store = new GoodBuddyHarnessAttachmentStore(new Context()) + const input = { + data: transparentPng, + mediaType: 'image/png' as const + } + + await expect( + store.saveImages( + Array.from( + { length: store.imageLimits.maxImagesPerMessage + 1 }, + () => input + ) + ) + ).rejects.toMatchObject({ code: 'TOO_MANY_IMAGES' }) + }) +}) \ No newline at end of file diff --git a/src/main/agent/goodbuddy-harness-attachment-store.ts b/src/main/agent/goodbuddy-harness-attachment-store.ts index 16bc34ae..e9b184ef 100644 --- a/src/main/agent/goodbuddy-harness-attachment-store.ts +++ b/src/main/agent/goodbuddy-harness-attachment-store.ts @@ -6,6 +6,7 @@ import { AttachmentError, AttachmentId, AttachmentStore, + type ImageAdmissionErrorCode, type ImageAttachmentLimits, type ImageAttachmentRef, type ImageMediaType, @@ -23,6 +24,7 @@ export const GOODBUDDY_HARNESS_IMAGE_LIMITS: ImageAttachmentLimits = maxImagesPerMessage: 8, maxMessageImageBytes: 2 * 1024 * 1024, maxImagePixels: 16_000_000, + maxImageDimension: 8_192, mediaTypes: Object.freeze([ 'image/png', 'image/jpeg' @@ -47,8 +49,12 @@ export type GoodBuddyHarnessAttachmentStoreConfig = { maxBatchImagePixels?: number } -function invalidImage(message: string, cause?: unknown): AttachmentError { - return new AttachmentError(message, 'INVALID_IMAGE', { +function imageError( + message: string, + code: ImageAdmissionErrorCode, + cause?: unknown +): AttachmentError { + return new AttachmentError(message, code, { ...(cause === undefined ? {} : { cause }) }) } @@ -88,6 +94,57 @@ function matchesSignature( ) } +function validateImageInputBounds( + input: SaveImageAttachment, + limits: ImageAttachmentLimits +): void { + if (!limits.mediaTypes.includes(input.mediaType)) { + throw imageError( + 'Image media type is not supported', + 'UNSUPPORTED_IMAGE_TYPE' + ) + } + if (input.data.byteLength === 0) { + throw imageError('Image data is empty', 'INVALID_IMAGE') + } + if (input.data.byteLength > limits.maxImageBytes) { + throw imageError( + 'Image exceeds the per-image byte limit', + 'IMAGE_TOO_LARGE' + ) + } +} + +function validateImageDimensions( + width: number, + height: number, + limits: ImageAttachmentLimits +): void { + if ( + !Number.isSafeInteger(width) || + !Number.isSafeInteger(height) || + width < 1 || + height < 1 + ) { + throw imageError('Image dimensions are invalid', 'INVALID_IMAGE') + } + if ( + width > limits.maxImageDimension || + height > limits.maxImageDimension + ) { + throw imageError( + 'Image exceeds the per-side dimension limit', + 'IMAGE_DIMENSION_TOO_LARGE' + ) + } + if (width * height > limits.maxImagePixels) { + throw imageError( + 'Image dimensions exceed the pixel limit', + 'IMAGE_TOO_MANY_PIXELS' + ) + } +} + function pngDimensions(data: Buffer): { width: number height: number @@ -200,34 +257,26 @@ async function inspectImage( input: SaveImageAttachment, limits: ImageAttachmentLimits ): Promise { - if (!limits.mediaTypes.includes(input.mediaType)) { - throw invalidImage('Image media type is not supported') - } - if ( - input.data.byteLength === 0 || - input.data.byteLength > limits.maxImageBytes - ) { - throw invalidImage('Image exceeds the per-image byte limit') - } + validateImageInputBounds(input, limits) const data = Buffer.from(input.data) if (!matchesSignature(data, input.mediaType)) { - throw invalidImage('Image media type does not match its bytes') + throw imageError( + 'Image media type does not match its bytes', + 'IMAGE_TYPE_MISMATCH' + ) } const encodedDimensions = input.mediaType === 'image/png' ? pngDimensions(data) : jpegDimensions(data) if (!encodedDimensions) { - throw invalidImage('Image container is malformed') - } - if ( - encodedDimensions.width < 1 || - encodedDimensions.height < 1 || - encodedDimensions.width * encodedDimensions.height > - limits.maxImagePixels - ) { - throw invalidImage('Image dimensions exceed the pixel limit') + throw imageError('Image container is malformed', 'INVALID_IMAGE') } + validateImageDimensions( + encodedDimensions.width, + encodedDimensions.height, + limits + ) let width: number let height: number let loadImage: typeof import('@napi-rs/canvas')['loadImage'] @@ -237,7 +286,7 @@ async function inspectImage( } catch (error) { throw new AttachmentError( 'Harness image decoder is unavailable', - 'DECODER_UNAVAILABLE', + 'ATTACHMENT_WRITE_FAILED', { cause: error } ) } @@ -246,18 +295,21 @@ async function inspectImage( width = image.naturalWidth || image.width height = image.naturalHeight || image.height } catch (error) { - throw invalidImage('Image bytes could not be decoded', error) + throw imageError( + 'Image bytes could not be decoded', + 'INVALID_IMAGE', + error + ) } + validateImageDimensions(width, height, limits) if ( - !Number.isSafeInteger(width) || - !Number.isSafeInteger(height) || - width < 1 || - height < 1 || - width * height > limits.maxImagePixels || width !== encodedDimensions.width || height !== encodedDimensions.height ) { - throw invalidImage('Image dimensions exceed the pixel limit') + throw imageError( + 'Decoded image dimensions do not match its container', + 'INVALID_IMAGE' + ) } return { data, width, height } } @@ -314,6 +366,23 @@ export class GoodBuddyHarnessAttachmentStore extends AttachmentStore { async saveImages( inputs: readonly SaveImageAttachment[] ): Promise { + if (inputs.length > this.imageLimits.maxImagesPerMessage) { + throw new AttachmentError( + 'Images exceed the per-message count limit', + 'TOO_MANY_IMAGES' + ) + } + let batchBytes = 0 + for (const input of inputs) { + validateImageInputBounds(input, this.imageLimits) + batchBytes += input.data.byteLength + if (batchBytes > this.imageLimits.maxMessageImageBytes) { + throw new AttachmentError( + 'Images exceed the per-message byte limit', + 'IMAGES_TOO_LARGE' + ) + } + } const inspectedByContent = new Map() const candidates: Array<{ input: SaveImageAttachment @@ -322,13 +391,6 @@ export class GoodBuddyHarnessAttachmentStore extends AttachmentStore { }> = [] let batchPixels = 0 for (const input of inputs) { - if ( - !this.imageLimits.mediaTypes.includes(input.mediaType) || - input.data.byteLength === 0 || - input.data.byteLength > this.imageLimits.maxImageBytes - ) { - throw invalidImage('Image exceeds the attachment limits') - } const digest = createHash('sha256') .update(input.data) .digest('hex') @@ -340,7 +402,10 @@ export class GoodBuddyHarnessAttachmentStore extends AttachmentStore { } batchPixels += inspected.width * inspected.height if (batchPixels > this.maxBatchImagePixels) { - throw invalidImage('Images exceed the batch pixel limit') + throw imageError( + 'Images exceed the batch pixel limit', + 'INVALID_IMAGE' + ) } candidates.push({ input, @@ -370,7 +435,7 @@ export class GoodBuddyHarnessAttachmentStore extends AttachmentStore { ) { throw new AttachmentError( 'Harness attachment store is full', - 'STORAGE_LIMIT' + 'ATTACHMENT_WRITE_FAILED' ) } return candidates.map(({ input, inspected, attachmentId }) => { @@ -407,7 +472,7 @@ export class GoodBuddyHarnessAttachmentStore extends AttachmentStore { if (!stored) { throw new AttachmentError( 'Harness image attachment was not found', - 'NOT_FOUND' + 'ATTACHMENT_NOT_FOUND' ) } if ( @@ -419,8 +484,8 @@ export class GoodBuddyHarnessAttachmentStore extends AttachmentStore { stored.ref.name !== ref.name ) { throw new AttachmentError( - 'Harness image attachment failed integrity validation', - 'INTEGRITY' + 'Harness image attachment reference is invalid', + 'INVALID_ATTACHMENT_REF' ) } return { diff --git a/src/main/agent/goodbuddy-harness-control-plane.test.ts b/src/main/agent/goodbuddy-harness-control-plane.test.ts index 50c1612a..365aa897 100644 --- a/src/main/agent/goodbuddy-harness-control-plane.test.ts +++ b/src/main/agent/goodbuddy-harness-control-plane.test.ts @@ -22,7 +22,7 @@ function controlPlane() { provider: 'goodbuddy', model: 'deepseek-test', workspace: resolve('workspace'), - harnessVersion: '0.1.0-rc.6', + harnessVersion: '0.1.0-rc.8', execution: { mode: 'host' }, credentialRefs: ['GOODBUDDY_API_KEY'], skills: [] @@ -75,7 +75,7 @@ function stubAgentContext() { provider: 'goodbuddy', model: 'deepseek-test', workspace: resolve('workspace'), - harnessVersion: '0.1.0-rc.6', + harnessVersion: '0.1.0-rc.8', execution: { mode: 'host' }, credentialRefs: ['GOODBUDDY_API_KEY'], skills: [], @@ -172,7 +172,7 @@ describe('GoodBuddy Harness internal control plane', () => { model: 'vision-test', supportsImageInput: true, workspace: resolve('workspace'), - harnessVersion: '0.1.0-rc.6', + harnessVersion: '0.1.0-rc.8', execution: { mode: 'host' }, credentialRefs: ['GOODBUDDY_API_KEY'], skills: [] @@ -223,7 +223,7 @@ describe('GoodBuddy Harness internal control plane', () => { subject.releaseAttachments(refs) await expect(store.readImage(refs[0]!)).rejects.toMatchObject({ - code: 'NOT_FOUND' + code: 'ATTACHMENT_NOT_FOUND' }) await expect( subject.storePromptImages([ diff --git a/src/main/agent/goodbuddy-harness-control-plane.ts b/src/main/agent/goodbuddy-harness-control-plane.ts index 6aac0666..ad1dce21 100644 --- a/src/main/agent/goodbuddy-harness-control-plane.ts +++ b/src/main/agent/goodbuddy-harness-control-plane.ts @@ -13,6 +13,7 @@ import type { Context } from '@deepseek-ai/cordis' import type { AgentHandle } from '@deepseek-ai/dsh-agent' import { AttachmentError, + isImageAdmissionError, type ImageAttachmentRef, type SaveImageAttachment } from '@deepseek-ai/dsh-attachment' @@ -1059,16 +1060,13 @@ export class GoodBuddyHarnessControlPlane { return await store.saveImages(inputs) } catch (error) { if (error instanceof AttachmentError) { - if (error.code === 'INVALID_IMAGE') { + if (isImageAdmissionError(error)) { throw RequestError.invalidParams( undefined, 'invalid inline image prompt content' ) } - if ( - error.code === 'STORAGE_LIMIT' || - error.code === 'DECODER_UNAVAILABLE' - ) { + if (error.code === 'ATTACHMENT_WRITE_FAILED') { throw RequestError.internalError( undefined, 'Harness image attachment service is unavailable' diff --git a/src/main/agent/runtime-discovery.test.ts b/src/main/agent/runtime-discovery.test.ts index 27c24e7d..a1163485 100644 --- a/src/main/agent/runtime-discovery.test.ts +++ b/src/main/agent/runtime-discovery.test.ts @@ -192,7 +192,7 @@ describe('runtime discovery', () => { binaryPath: '', bundledPath: bundledScript, bundledValidation: 'canonical-file', - bundledVersion: '0.1.0-rc.6', + bundledVersion: '0.1.0-rc.8', binaryNames: [], label: 'GoodBuddy DeepSeek Harness Host' }) @@ -200,7 +200,7 @@ describe('runtime discovery', () => { expect(detection).toMatchObject({ available: true, path: await realpath(bundledScript), - version: '0.1.0-rc.6', + version: '0.1.0-rc.8', source: 'bundled' }) expect(detection.detail).toContain('内置') diff --git a/src/main/deepseek-harness-host.test.ts b/src/main/deepseek-harness-host.test.ts index d7c919cf..1b9884d6 100644 --- a/src/main/deepseek-harness-host.test.ts +++ b/src/main/deepseek-harness-host.test.ts @@ -34,7 +34,7 @@ describe('controlled DeepSeek Harness host', () => { api: 'openai-completions', provider: 'goodbuddy', model: 'deepseek-test', - harnessVersion: '0.1.0-rc.6', + harnessVersion: '0.1.0-rc.8', credentialRefs: ['GOODBUDDY_API_KEY'], dshHome: 'C:\\controlled-dsh-home', skillPackages: [] @@ -82,7 +82,7 @@ describe('controlled DeepSeek Harness host', () => { provider: 'goodbuddy', model: 'qwen-plus', supportsImageInput: true, - harnessVersion: '0.1.0-rc.6', + harnessVersion: '0.1.0-rc.8', credentialRefs: ['GOODBUDDY_API_KEY'], skillPackages: [], stream: { @@ -140,7 +140,7 @@ describe('controlled DeepSeek Harness host', () => { api: 'openai-completions', provider: 'goodbuddy', model: 'deepseek-test', - harnessVersion: '0.1.0-rc.6', + harnessVersion: '0.1.0-rc.8', credentialRefs: ['GOODBUDDY_API_KEY'], skillPackages: [], stream: { @@ -177,7 +177,7 @@ describe('controlled DeepSeek Harness host', () => { api: 'openai-completions', provider: 'goodbuddy', model: 'deepseek-test', - harnessVersion: '0.1.0-rc.6', + harnessVersion: '0.1.0-rc.8', credentialRefs: ['GOODBUDDY_API_KEY'], skillPackages: [], extensionPackages: [ @@ -232,7 +232,7 @@ describe('controlled DeepSeek Harness host', () => { api: 'openai-completions', provider: 'goodbuddy', model: 'deepseek-test', - harnessVersion: '0.1.0-rc.6', + harnessVersion: '0.1.0-rc.8', credentialRefs: ['GOODBUDDY_API_KEY'], skillPackages: [ { id: 'web-3d-game', directory: skillDirectory } diff --git a/src/main/deepseek-harness-third-party-plugin.e2e.test.ts b/src/main/deepseek-harness-third-party-plugin.e2e.test.ts index 33b7228b..70c9f431 100644 --- a/src/main/deepseek-harness-third-party-plugin.e2e.test.ts +++ b/src/main/deepseek-harness-third-party-plugin.e2e.test.ts @@ -31,7 +31,7 @@ describe.skipIf(!entrypoint)( api: 'openai-completions', provider: 'goodbuddy', model: 'deepseek-test', - harnessVersion: '0.1.0-rc.6', + harnessVersion: '0.1.0-rc.8', credentialRefs: ['GOODBUDDY_API_KEY'], skillPackages: [], extensionPackages: [ diff --git a/src/renderer/src/SettingsPanel.test.tsx b/src/renderer/src/SettingsPanel.test.tsx index 71f500ee..389520a8 100644 --- a/src/renderer/src/SettingsPanel.test.tsx +++ b/src/renderer/src/SettingsPanel.test.tsx @@ -171,7 +171,7 @@ const detectAgentRuntimes = vi.fn< deepseekHarness: { available: true, path: 'bundled://deepseek-harness', - version: '0.1.0-rc.6', + version: '0.1.0-rc.8', source: 'bundled', detail: '内置 Harness Adapter 已就绪' } @@ -2665,11 +2665,11 @@ describe('SettingsPanel runtime files', () => { ) ).toHaveClass('runtime-overview__path') expect( - within(harnessOverview).getByText('0.1.0-rc.6') + within(harnessOverview).getByText('0.1.0-rc.8') ).toBeInTheDocument() expect( within(harnessOverview).getByText( - '内置 DeepSeek Harness 0.1.0-rc.6 已就绪' + '内置 DeepSeek Harness 0.1.0-rc.8 已就绪' ) ).toBeInTheDocument() expect( diff --git a/tests/build-release.test.ts b/tests/build-release.test.ts index cd76caf8..8c01dbf1 100644 --- a/tests/build-release.test.ts +++ b/tests/build-release.test.ts @@ -863,7 +863,7 @@ describe('release build arguments', () => { join(projectRoot, 'package.json'), JSON.stringify({ dependencies: { - '@deepseek-ai/dsh-llm': '0.1.0-rc.6' + '@deepseek-ai/dsh-llm': '0.1.0-rc.8' } }) ) @@ -923,7 +923,7 @@ describe('release build arguments', () => { ) ).toMatchObject({ name: '@deepseek-ai/dsh-llm', - version: '0.1.0-rc.6' + version: '0.1.0-rc.8' }) } finally { rmSync(projectRoot, { recursive: true, force: true })