@deepseek-ai/dsh-tool-fs 0.0.1-rc.2 → 0.0.1-rc.5

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/README.i18n.yaml CHANGED
@@ -2,5 +2,5 @@
2
2
  # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
3
  # after editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write packages/fs/tool-fs/README.md
5
- README.md: 7e334f886747cd8dc566a572c699cd80c7cf62fe
6
- README.zh.md: b5eb5ae38aba049d77375d31d1509342a23f13fc
5
+ README.md: 71dc4134feee6bf1b5d17eef5f62e587653adf6d
6
+ README.zh.md: dff4b838aea4c6fa50a92ce2102bfdd2a96150a5
package/README.md CHANGED
@@ -2,17 +2,17 @@
2
2
 
3
3
  English | [中文](README.zh.md)
4
4
 
5
- The **model-facing filesystem tools** — `read`, `read_image`, `write`, `edit` — and their **executor**. This is the consumer layer of the filesystem stack: it owns tool names, JSON schemas, argument validation, prompt sections, **read windowing**, and result formatting. It reads/writes/edits through the `ctx.fs` provider contract ([`@deepseek-ai/dsh-fs`](../fs)) **directly**. The freshness/observation policy is contributed by a separate plugin ([`@deepseek-ai/dsh-fs-policy`](../fs-policy)) through the `fs/*` event gate; the tool is not method-coupled to it. Under a confining provider, the shared sandbox-policy service is required for per-session execution and the tool exposes escalation for filesystem mutations.
5
+ The **model-facing filesystem tools** — `read`, `read_image`, `write`, `edit` — and their **executor**. This is the consumer layer of the filesystem stack: it owns tool names, JSON schemas, argument validation, prompt sections, **read windowing**, and result formatting. It reads/writes/edits through the `ctx.fs` provider contract ([`@deepseek-ai/dsh-fs`](../fs)) **directly**. The freshness/observation policy is contributed by a separate plugin ([`@deepseek-ai/dsh-fs-observation-policy`](../fs-observation-policy)) through the `fs/*` event gate; the tool is not method-coupled to it. Under a confining provider, the shared sandbox-policy service is required for per-session execution and the tool exposes escalation for filesystem mutations.
6
6
 
7
7
  ```ts ignore-check
8
8
  // Default deployment: a ctx.fs provider, the policy plugin, then the tools.
9
9
  await ctx.plugin(LocalFileSystem, { cwd: process.cwd() }) // @deepseek-ai/dsh-fs-local
10
- await ctx.plugin(FsPolicy) // @deepseek-ai/dsh-fs-policy (policy gate)
10
+ await ctx.plugin(FsPolicy) // @deepseek-ai/dsh-fs-observation-policy (policy gate)
11
11
  await ctx.plugin(LocalAttachmentStore, { dshHome }) // optional — enables durable read_image results
12
12
  await ctx.plugin(ToolFs) // this package — read/write/edit, plus read_image with attachments
13
13
  ```
14
14
 
15
- `@deepseek-ai/dsh-fs-policy` is **optional**: omit it and the tools run against the bare provider (unconditional write/overwrite/edit, no observed-state). A deployment that loads these tools is expected to also load it, so the behavior is read-before-write/edit.
15
+ `@deepseek-ai/dsh-fs-observation-policy` is **optional**: omit it and the tools run against the bare provider (unconditional write/overwrite/edit, no observed-state). A deployment that loads these tools is expected to also load it, so the behavior is read-before-write/edit.
16
16
 
17
17
  `read_image` registers only while a durable `ctx.attachments` service is mounted — without one the deployment cannot commit image bytes, so the tool never appears. Execution additionally requires the exact routed model to declare `image` input (resolved through `ctx.llm.resolveModelInfo` from the session's latest request header, falling back to agent options); an unknown or text-only route gets a refusal result before any filesystem I/O, so a text route's durable history stays free of image blocks.
18
18
 
@@ -49,13 +49,13 @@ The tools do **not** inject a policy service or inspect any cache. Each tool res
49
49
  - **write** — `ctx.waterfall('fs/write-intent', target, exec, () => undefined)` for the optional guard, then `ctx.fs.writeText(target, content, intent)`, then `fs/observed`. (0 stat.)
50
50
  - **edit** — `ctx.waterfall('fs/edit-intent', target, exec, () => undefined)` for the optional guard, then `ctx.fs.editText(target, edit, intent)`, then `fs/observed`. (0 stat.)
51
51
 
52
- The tool passes `exec` (the tool-execution context) as the opaque `actor` on every dispatch. The default thunks return `undefined` (the unconstrained bare provider). When `@deepseek-ai/dsh-fs-policy` is loaded it occupies the single decision slot — returning `createIfAbsent`/`replaceIfVersion`/`{ version }` or throwing `FS_NOT_OBSERVED` — and records on `fs/observed`. Backend errors (`FsError`) and a thrown `FS_NOT_OBSERVED` flow through `ToolRegistry.execute()` and become `isError` tool results with their `{ name, code }` attached.
52
+ The tool passes `exec` (the tool-execution context) as the opaque `actor` on every dispatch. The default thunks return `undefined` (the unconstrained bare provider). When `@deepseek-ai/dsh-fs-observation-policy` is loaded it occupies the single decision slot — returning `createIfAbsent`/`replaceIfVersion`/`{ version }` or throwing `FS_NOT_OBSERVED` — and records on `fs/observed`. Backend errors (`FsError`) and a thrown `FS_NOT_OBSERVED` flow through `ToolRuntime.execute()` and become `isError` tool results with their `{ name, code }` attached.
53
53
 
54
54
  When `ctx.fs.sandboxMode` reports confinement, write/edit advertise `sandbox_permissions` and `justification` and resolve approved retries through `ctx.approval`. The policy owner contributes capability-neutral standing policy; the tool results retain operation-specific denial and retry guidance.
55
55
 
56
56
  ## `fs/observed` is fire-and-forget
57
57
 
58
- `fs/observed` fires AFTER the read/read_image/write/edit already succeeded, via a plain `ctx.emit`. A listener is contractually a synchronous, side-effect-only recorder (`@deepseek-ai/dsh-fs-policy`'s is a `WeakMap.set`); the tool does not guard the emit, so a listener that throws would surface as the tool's `isError` result — async or fallible observation does not belong on this event.
58
+ `fs/observed` fires AFTER the read/read_image/write/edit already succeeded, via a plain `ctx.emit`. A listener is contractually a synchronous, side-effect-only recorder (`@deepseek-ai/dsh-fs-observation-policy`'s is a `WeakMap.set`); the tool does not guard the emit, so a listener that throws would surface as the tool's `isError` result — async or fallible observation does not belong on this event.
59
59
 
60
60
  `read` opts into concurrent scheduling because its only mutation is the synchronous version recorder. Recorder races fail closed when a later `write` or `edit` re-checks the version under its target lock; both mutation tools remain exclusive. See the [parallel tool-call Agent Note](../../../.agents/notes/implemented/feature/2026-07-10-parallel-tool-call-execution.md).
61
61
 
@@ -78,13 +78,13 @@ Use the read tool — not shell commands like cat — to inspect text files. Res
78
78
  ##### Write guidance
79
79
 
80
80
  ```markdown
81
- Use the write tool to create files or completely replace file contents. Existing files are overwritten, so read an existing file first (the default fs-policy requires it) and prefer edit for targeted changes.
81
+ Use the write tool to create files or completely replace file contents. Existing files are overwritten, so read an existing file first (the default fs-observation-policy requires it) and prefer edit for targeted changes.
82
82
  ```
83
83
 
84
84
  ##### Edit guidance
85
85
 
86
86
  ```markdown
87
- Use the edit tool for targeted changes to existing UTF-8 text files. It replaces literal old_string with new_string; by default old_string must appear exactly once. If old_string appears multiple times, provide a more specific old_string or set replace_all to true. Read the file first (the default fs-policy requires it), unless you just created or edited it in this session.
87
+ Use the edit tool for targeted changes to existing UTF-8 text files. It replaces literal old_string with new_string; by default old_string must appear exactly once. If old_string appears multiple times, provide a more specific old_string or set replace_all to true. Read the file first (the default fs-observation-policy requires it), unless you just created or edited it in this session.
88
88
  ```
89
89
 
90
90
  #### Token effect
package/README.zh.md CHANGED
@@ -2,17 +2,17 @@
2
2
 
3
3
  [English](README.md) | 中文
4
4
 
5
- **面向模型的文件系统工具**(`read`、`read_image`、`write`、`edit`)及其**执行器**。这是文件系统栈的消费方层:拥有工具名称、JSON Schema、参数校验、提示词段、**读取窗口逻辑**和结果格式化。它**直接**通过 `ctx.fs` 提供方约定([`@deepseek-ai/dsh-fs`](../fs))读取/写入/编辑。新鲜度/观察策略由独立插件([`@deepseek-ai/dsh-fs-policy`](../fs-policy))通过 `fs/*` 事件门禁贡献;工具不与其方法耦合。使用施加沙箱限制的提供方时,逐会话执行需要共享沙箱策略服务,工具还会为文件系统变更提供升权路径。
5
+ **面向模型的文件系统工具**(`read`、`read_image`、`write`、`edit`)及其**执行器**。这是文件系统栈的消费方层:拥有工具名称、JSON Schema、参数校验、提示词段、**读取窗口逻辑**和结果格式化。它**直接**通过 `ctx.fs` 提供方约定([`@deepseek-ai/dsh-fs`](../fs))读取/写入/编辑。新鲜度/观察策略由独立插件([`@deepseek-ai/dsh-fs-observation-policy`](../fs-observation-policy))通过 `fs/*` 事件门禁贡献;工具不与其方法耦合。使用施加沙箱限制的提供方时,逐会话执行需要共享沙箱策略服务,工具还会为文件系统变更提供升权路径。
6
6
 
7
7
  ```ts ignore-check
8
8
  // Default deployment: a ctx.fs provider, the policy plugin, then the tools.
9
9
  await ctx.plugin(LocalFileSystem, { cwd: process.cwd() }) // @deepseek-ai/dsh-fs-local
10
- await ctx.plugin(FsPolicy) // @deepseek-ai/dsh-fs-policy (policy gate)
10
+ await ctx.plugin(FsPolicy) // @deepseek-ai/dsh-fs-observation-policy (policy gate)
11
11
  await ctx.plugin(LocalAttachmentStore, { dshHome }) // optional — enables durable read_image results
12
12
  await ctx.plugin(ToolFs) // this package — read/write/edit, plus read_image with attachments
13
13
  ```
14
14
 
15
- `@deepseek-ai/dsh-fs-policy` 是**可选的**:省略时,工具直接使用裸提供方(无条件写入/覆盖/编辑,无已观察状态)。加载这些工具的部署也应加载该插件,从而提供写入/编辑前读取行为。
15
+ `@deepseek-ai/dsh-fs-observation-policy` 是**可选的**:省略时,工具直接使用裸提供方(无条件写入/覆盖/编辑,无已观察状态)。加载这些工具的部署也应加载该插件,从而提供写入/编辑前读取行为。
16
16
 
17
17
  `read_image` 只在持久 `ctx.attachments` 服务已挂载时注册:没有它,部署无法持久提交图像字节,工具就不会出现。执行时还要求确切路由的模型声明 `image` 输入(通过 `ctx.llm.resolveModelInfo` 从会话最新请求 header 解析,缺失时回退到 agent 选项);未知或纯文本路由在任何文件系统 I/O 之前就得到拒绝结果,因此文本路由的持久历史不会出现图像块。
18
18
 
@@ -49,15 +49,15 @@ await ctx.plugin(ToolFs) // this package — re
49
49
  - **write**:调用 `ctx.waterfall('fs/write-intent', target, exec, () => undefined)` 取得可选防护,然后调用 `ctx.fs.writeText(target, content, intent)`,再发出 `fs/observed`。(0 次 stat。)
50
50
  - **edit**:调用 `ctx.waterfall('fs/edit-intent', target, exec, () => undefined)` 取得可选防护,然后调用 `ctx.fs.editText(target, edit, intent)`,再发出 `fs/observed`。(0 次 stat。)
51
51
 
52
- 工具在每次分派中把 `exec`(工具执行上下文)作为不透明 `actor` 传入。默认 thunk 返回 `undefined`(不受约束的裸提供方)。加载 `@deepseek-ai/dsh-fs-policy` 后,它会占用单个决策槽:返回 `createIfAbsent`/`replaceIfVersion`/`{ version }` 或抛出 `FS_NOT_OBSERVED`,并在 `fs/observed` 时记录。后端错误(`FsError`)和抛出的 `FS_NOT_OBSERVED` 会流经 `ToolRegistry.execute()`,变成 `isError` 工具结果,并附带 `{ name, code }`。
52
+ 工具在每次分派中把 `exec`(工具执行上下文)作为不透明 `actor` 传入。默认 thunk 返回 `undefined`(不受约束的裸提供方)。加载 `@deepseek-ai/dsh-fs-observation-policy` 后,它会占用单个决策槽:返回 `createIfAbsent`/`replaceIfVersion`/`{ version }` 或抛出 `FS_NOT_OBSERVED`,并在 `fs/observed` 时记录。后端错误(`FsError`)和抛出的 `FS_NOT_OBSERVED` 会流经 `ToolRuntime.execute()`,变成 `isError` 工具结果,并附带 `{ name, code }`。
53
53
 
54
- 当 `ctx.fs.sandboxMode` 表明提供方施加沙箱限制时,write/edit 会公开 `sandbox_permissions` 与 `justification`,并通过 `ctx.approval` 解析经批准的重试。策略归属方会贡献与具体能力无关的常驻策略;工具结果仍保留操作特定的拒绝与重试引导。
54
+ 当 `ctx.fs.sandboxMode` 表明提供方施加沙箱限制时,write/edit 会公开 `sandbox_permissions` 与 `justification`,并通过 `ctx.approval` 处理获批后的重试。策略归属方会贡献与具体能力无关的常驻策略;工具结果仍保留针对具体操作的拒绝与重试引导。
55
55
 
56
56
  ## `fs/observed` 发后即忘
57
57
 
58
- `fs/observed` 在 read/read_image/write/edit 已经成功之后,通过普通 `ctx.emit` 发出。监听器的约定是同步且只有副作用的记录器(`@deepseek-ai/dsh-fs-policy` 使用 `WeakMap.set`);工具不保护这次发出,因此监听器抛出会作为工具的 `isError` 结果出现。异步或可能失败的观察不属于该事件。
58
+ `fs/observed` 在 read/read_image/write/edit 已经成功之后,通过普通 `ctx.emit` 发出。监听器的约定是同步且只有副作用的记录器(`@deepseek-ai/dsh-fs-observation-policy` 使用 `WeakMap.set`);工具不保护这次发出,因此监听器抛出会作为工具的 `isError` 结果出现。异步或可能失败的观察不属于该事件。
59
59
 
60
- `read` 允许并发调度,因为其唯一变更是同步版本记录器。稍后的 `write` 或 `edit` 会在目标锁内重新检查版本,因此记录器竞态会以拒绝方式关闭;两个变更工具仍保持互斥。见[并行工具调用 Agent Note](../../../.agents/notes/implemented/feature/2026-07-10-parallel-tool-call-execution.md)。
60
+ `read` 允许并发调度,因为它唯一会改变状态的操作是同步记录版本。稍后的 `write` 或 `edit` 会在目标锁内重新检查版本,因此即使记录器发生竞态,系统也会安全地拒绝操作;两个变更工具仍保持互斥。见[并行工具调用 Agent Note](../../../.agents/notes/implemented/feature/2026-07-10-parallel-tool-call-execution.md)。
61
61
 
62
62
  包根目录只导出 Cordis 插件约定(`name`、`inject`、`Config` 和 `apply`)。读取渲染(行窗口与输出格式化)位于 `src/read-render.ts`(不依赖 Cordis,单独进行单元测试);`src/read.ts`/`read-image.ts`/`write.ts`/`edit.ts` 是工具执行器,`src/index.ts` 负责组合。
63
63
 
@@ -78,13 +78,13 @@ Use the read tool — not shell commands like cat — to inspect text files. Res
78
78
  ##### Write 指导
79
79
 
80
80
  ```markdown
81
- Use the write tool to create files or completely replace file contents. Existing files are overwritten, so read an existing file first (the default fs-policy requires it) and prefer edit for targeted changes.
81
+ Use the write tool to create files or completely replace file contents. Existing files are overwritten, so read an existing file first (the default fs-observation-policy requires it) and prefer edit for targeted changes.
82
82
  ```
83
83
 
84
84
  ##### Edit 指导
85
85
 
86
86
  ```markdown
87
- Use the edit tool for targeted changes to existing UTF-8 text files. It replaces literal old_string with new_string; by default old_string must appear exactly once. If old_string appears multiple times, provide a more specific old_string or set replace_all to true. Read the file first (the default fs-policy requires it), unless you just created or edited it in this session.
87
+ Use the edit tool for targeted changes to existing UTF-8 text files. It replaces literal old_string with new_string; by default old_string must appear exactly once. If old_string appears multiple times, provide a more specific old_string or set replace_all to true. Read the file first (the default fs-observation-policy requires it), unless you just created or edited it in this session.
88
88
  ```
89
89
 
90
90
  #### Token 影响
package/lib/index.js CHANGED
@@ -599,7 +599,7 @@ function applyWriteTool(ctx, sandbox) {
599
599
  ctx.systemPrompt.section({
600
600
  name: "tool:write",
601
601
  order: 101,
602
- text: "Use the write tool to create files or completely replace file contents. Existing files are overwritten, so read an existing file first (the default fs-policy requires it) and prefer edit for targeted changes."
602
+ text: "Use the write tool to create files or completely replace file contents. Existing files are overwritten, so read an existing file first (the default fs-observation-policy requires it) and prefer edit for targeted changes."
603
603
  });
604
604
  ctx.tools.register(defineTool({
605
605
  name: "write",
@@ -744,7 +744,7 @@ function applyEditTool(ctx, sandbox) {
744
744
  ctx.systemPrompt.section({
745
745
  name: "tool:edit",
746
746
  order: 102,
747
- text: "Use the edit tool for targeted changes to existing UTF-8 text files. It replaces literal old_string with new_string; by default old_string must appear exactly once. If old_string appears multiple times, provide a more specific old_string or set replace_all to true. Read the file first (the default fs-policy requires it), unless you just created or edited it in this session."
747
+ text: "Use the edit tool for targeted changes to existing UTF-8 text files. It replaces literal old_string with new_string; by default old_string must appear exactly once. If old_string appears multiple times, provide a more specific old_string or set replace_all to true. Read the file first (the default fs-observation-policy requires it), unless you just created or edited it in this session."
748
748
  });
749
749
  ctx.tools.register(defineTool({
750
750
  name: "edit",
@@ -1152,7 +1152,7 @@ var FsSandboxController = class {
1152
1152
  * Map a thrown provider error for the model: a `FS_SANDBOX_DENIED` becomes a
1153
1153
  * `FsError` whose text is the shared `[sandbox: …]` denial marker plus the
1154
1154
  * same-turn escalation hint, so a policy denial reads identically to bash's
1155
- * WHILE keeping the structured `FS_SANDBOX_DENIED` code — `ToolRegistry`
1155
+ * WHILE keeping the structured `FS_SANDBOX_DENIED` code — `ToolRuntime`
1156
1156
  * populates `result.error` only for `HarnessError` instances, so a plain
1157
1157
  * `Error` would strip the code retry/observers key off. Any other error
1158
1158
  * passes through unchanged. A `FS_SANDBOX_DENIED` only arises under a
@@ -66,7 +66,7 @@ export declare class FsSandboxController {
66
66
  * Map a thrown provider error for the model: a `FS_SANDBOX_DENIED` becomes a
67
67
  * `FsError` whose text is the shared `[sandbox: …]` denial marker plus the
68
68
  * same-turn escalation hint, so a policy denial reads identically to bash's
69
- * WHILE keeping the structured `FS_SANDBOX_DENIED` code — `ToolRegistry`
69
+ * WHILE keeping the structured `FS_SANDBOX_DENIED` code — `ToolRuntime`
70
70
  * populates `result.error` only for `HarnessError` instances, so a plain
71
71
  * `Error` would strip the code retry/observers key off. Any other error
72
72
  * passes through unchanged. A `FS_SANDBOX_DENIED` only arises under a
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-tool-fs",
3
3
  "description": "Model-facing filesystem tools (read, write, edit) over the DeepSeek Harness filesystem seam (ctx.fs)",
4
- "version": "0.0.1-rc.2",
4
+ "version": "0.0.1-rc.5",
5
5
  "publishConfig": {
6
6
  "access": "restricted"
7
7
  },
@@ -33,38 +33,38 @@
33
33
  "license": "BSD-3-Clause",
34
34
  "dependencies": {
35
35
  "diff": "^9.0.0",
36
- "@deepseek-ai/schemastery": "^3.18.1-rc.1"
36
+ "@deepseek-ai/schemastery": "^3.18.1-rc.4"
37
37
  },
38
38
  "peerDependencies": {
39
- "@deepseek-ai/dsh-attachment": "^0.0.1-rc.2",
40
- "@deepseek-ai/dsh-invariants": "^0.0.1-rc.2",
41
- "@deepseek-ai/dsh-fs": "^0.0.1-rc.2",
42
- "@deepseek-ai/dsh-sandbox": "^0.0.1-rc.2",
43
- "@deepseek-ai/dsh-sandbox-policy": "^0.0.1-rc.2",
44
- "@deepseek-ai/dsh-session": "^0.0.1-rc.2",
45
- "@deepseek-ai/dsh-system-prompt": "^0.0.1-rc.2",
46
- "@deepseek-ai/dsh-tools": "^0.0.1-rc.2",
47
- "@deepseek-ai/dsh-user-approval": "^0.0.1-rc.2",
48
- "@deepseek-ai/cordis": "^4.0.1-rc.1",
49
- "@deepseek-ai/dsh-llm": "^0.0.1-rc.2"
39
+ "@deepseek-ai/dsh-fs": "^0.0.1-rc.5",
40
+ "@deepseek-ai/dsh-invariants": "^0.0.1-rc.5",
41
+ "@deepseek-ai/dsh-attachment": "^0.0.1-rc.5",
42
+ "@deepseek-ai/dsh-llm": "^0.0.1-rc.5",
43
+ "@deepseek-ai/dsh-sandbox": "^0.0.1-rc.5",
44
+ "@deepseek-ai/dsh-sandbox-policy": "^0.0.1-rc.5",
45
+ "@deepseek-ai/dsh-session": "^0.0.1-rc.5",
46
+ "@deepseek-ai/dsh-tools": "^0.0.1-rc.5",
47
+ "@deepseek-ai/dsh-system-prompt": "^0.0.1-rc.5",
48
+ "@deepseek-ai/dsh-user-approval": "^0.0.1-rc.5",
49
+ "@deepseek-ai/cordis": "^4.0.1-rc.4"
50
50
  },
51
51
  "devDependencies": {
52
- "@deepseek-ai/dsh-agent": "^0.0.1-rc.2",
53
- "@deepseek-ai/dsh-agent-loop": "^0.0.1-rc.2",
54
- "@deepseek-ai/dsh-agent-loop-testkit": "^0.0.1-rc.2",
55
- "@deepseek-ai/dsh-attachment": "^0.0.1-rc.2",
56
- "@deepseek-ai/dsh-fs": "^0.0.1-rc.2",
57
- "@deepseek-ai/dsh-fs-local": "^0.0.1-rc.2",
58
- "@deepseek-ai/dsh-fs-policy": "^0.0.1-rc.2",
59
- "@deepseek-ai/dsh-invariants": "^0.0.1-rc.2",
60
- "@deepseek-ai/dsh-llm-deepseek": "^0.0.1-rc.2",
61
- "@deepseek-ai/dsh-sandbox": "^0.0.1-rc.2",
62
- "@deepseek-ai/dsh-sandbox-policy": "^0.0.1-rc.2",
63
- "@deepseek-ai/dsh-session": "^0.0.1-rc.2",
64
- "@deepseek-ai/dsh-system-prompt": "^0.0.1-rc.2",
65
- "@deepseek-ai/dsh-tools": "^0.0.1-rc.2",
66
- "@deepseek-ai/dsh-user-approval": "^0.0.1-rc.2",
67
- "@deepseek-ai/cordis": "^4.0.1-rc.1",
68
- "@deepseek-ai/dsh-llm": "^0.0.1-rc.2"
52
+ "@deepseek-ai/dsh-agent": "^0.0.1-rc.5",
53
+ "@deepseek-ai/dsh-agent-loop": "^0.0.1-rc.5",
54
+ "@deepseek-ai/dsh-agent-loop-testkit": "^0.0.1-rc.5",
55
+ "@deepseek-ai/dsh-attachment": "^0.0.1-rc.5",
56
+ "@deepseek-ai/dsh-fs": "^0.0.1-rc.5",
57
+ "@deepseek-ai/dsh-fs-observation-policy": "^0.0.1-rc.5",
58
+ "@deepseek-ai/dsh-invariants": "^0.0.1-rc.5",
59
+ "@deepseek-ai/dsh-llm": "^0.0.1-rc.5",
60
+ "@deepseek-ai/dsh-llm-deepseek": "^0.0.1-rc.5",
61
+ "@deepseek-ai/dsh-sandbox": "^0.0.1-rc.5",
62
+ "@deepseek-ai/dsh-sandbox-policy": "^0.0.1-rc.5",
63
+ "@deepseek-ai/dsh-session": "^0.0.1-rc.5",
64
+ "@deepseek-ai/dsh-system-prompt": "^0.0.1-rc.5",
65
+ "@deepseek-ai/dsh-tools": "^0.0.1-rc.5",
66
+ "@deepseek-ai/dsh-user-approval": "^0.0.1-rc.5",
67
+ "@deepseek-ai/cordis": "^4.0.1-rc.4",
68
+ "@deepseek-ai/dsh-fs-local": "^0.0.1-rc.5"
69
69
  }
70
70
  }