@deepseek-ai/dsh-tool-bash 0.1.0-rc.7 → 0.1.1-rc.1

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
@@ -3,4 +3,4 @@
3
3
  # after editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write packages/shell/tool-bash/README.md
5
5
  README.md: 21749bf0a1cd3cdc46257fb2a02ba6b4ab1f5ee6
6
- README.zh.md: e79190ced58abbd73d85127f3a4362f4e6b292cd
6
+ README.zh.md: 860db1a4c347d1aefe04f70e14a65e4b511ff7f6
package/README.zh.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  模型侧 `bash` 工具,注册在 `ctx.shell` 执行器 seam 上。前台执行始终位于该 seam 之后;后台进程句柄会注册到通用 `ctx.jobs` 运行时,并通过 `job_output`、`job_list` 和 `job_kill` 控制;这些工具由 `@deepseek-ai/dsh-tool-jobs` 提供。
6
6
 
7
- 需要加载执行器 Service Provider(例如 `@deepseek-ai/dsh-bash-local`)与 [`@deepseek-ai/dsh-shell-env`](../shell-env/README.md) 注册表;在每个注入服务就绪之前,插件会保持等待状态(`inject: ['tools', 'bash', 'systemPrompt', 'bashEnv']`)。工具约定是 bash 方言——请挂载能解析 bash 的执行器。
7
+ 需要加载执行器 Service Provider(例如 `@deepseek-ai/dsh-bash-local`)与 [`@deepseek-ai/dsh-shell-env`](../shell-env/README.zh.md) 注册表;在每个注入服务就绪之前,插件会保持等待状态(`inject: ['tools', 'bash', 'systemPrompt', 'bashEnv']`)。工具约定是 bash 方言——请挂载能解析 bash 的执行器。
8
8
 
9
9
  包根只公开 Cordis 插件约定(`name`、`inject`、`Config`、`apply`);结果渲染和后台进程适配仍保留在包内部。
10
10
 
@@ -28,7 +28,7 @@
28
28
 
29
29
  ### 托管 shell 环境
30
30
 
31
- 每次模型发起的前台或后台 bash 调用都会通过共享的 [`dsh-shell-env`](../shell-env/README.md) 注册表收到新收集的一组可信 `DSH_*` 环境变量:`DSH_HOME`(Harness home 绝对路径)、`DSH_SHELL=1`、agent 的 `DSH_SESSION_ID`,以及当活跃持久化后端能定位时的 `DSH_SESSION_JSONL`。注册表约定——贡献方注册、重复键/未声明键的显式报错机制、内置项保留与贡献方示例——载于该包的 README。快照通过专用的 `ShellExecRequest.dshEnv` 通道传递;本地执行器会先删除继承的所有 `DSH_*` 再合并,因此嵌套 harness 和并发的父/子 agent 不会泄漏陈旧身份,且绝不修改 `process.env`。工具说明只教授通用 `$DSH_*` 约定,不会点名持久化专用变量,也不会添加永久的系统提示词段落。
31
+ 每次模型发起的前台或后台 bash 调用都会通过共享的 [`dsh-shell-env`](../shell-env/README.zh.md) 注册表收到新收集的一组可信 `DSH_*` 环境变量:`DSH_HOME`(Harness home 绝对路径)、`DSH_SHELL=1`、agent 的 `DSH_SESSION_ID`,以及当活跃持久化后端能定位时的 `DSH_SESSION_JSONL`。注册表约定——贡献方注册、重复键/未声明键的显式报错机制、内置项保留与贡献方示例——载于该包的 README。快照通过专用的 `ShellExecRequest.dshEnv` 通道传递;本地执行器会先删除继承的所有 `DSH_*` 再合并,因此嵌套 harness 和并发的父/子 agent 不会泄漏陈旧身份,且绝不修改 `process.env`。工具说明只教授通用 `$DSH_*` 约定,不会点名持久化专用变量,也不会添加永久的系统提示词段落。
32
32
 
33
33
  结果文本依次包含 stdout、可选的 `[stderr]` 段落和适用的沙箱拒绝、超时、信号、退出代码及截断标记。超时与最终退出状态分别报告;非零退出仍是由模型解释的结果,不会成为 `isError`。截断结果会链接安全的完整 spill 文件,或报告文件不可用。只有 spawn 错误和中止等基础设施故障才会产生 `isError`。
34
34
 
@@ -42,17 +42,17 @@
42
42
 
43
43
  ## 工具仅使用具名参数构建请求
44
44
 
45
- `ShellExecRequest` 携带可选的 `stdoutMaxBytes`、`stdin`、普通 `env` 和托管 `dshEnv`,供可信进程内插件及此工具的环境注册表使用。模型侧工具不公开 `stdoutMaxBytes`、`stdin` 或 `env`:它使用具名的命令/工作目录/超时/信号/沙箱字段,加上从注册表收集的 `dshEnv` 来构建请求。额外模型键会被忽略,无法替换托管值。Shell 语法可以提供等价的命令级行为,而本地执行器会清除环境中的凭据和陈旧 `DSH_*` 值。参见 [stdin/env Agent Note](../../../.agents/notes/implemented/architecture/2026-06-30-bash-stdin-env-trusted-plugin-api.md)。
45
+ `ShellExecRequest` 携带可选的 `stdoutMaxBytes`、`stdin`、普通 `env` 和托管 `dshEnv`,供可信进程内插件及此工具的环境注册表使用。模型侧工具不公开 `stdoutMaxBytes`、`stdin` 或 `env`:它使用具名的命令/工作目录/超时/信号/沙箱字段,加上从注册表收集的 `dshEnv` 来构建请求。额外模型键会被忽略,无法替换托管值。Shell 语法可以提供等价的命令级行为,而本地执行器会清除环境中的凭据和陈旧 `DSH_*` 值。参见 [stdin/env Agent Note](../../../.agents/notes/implemented/architecture/2026-06-30-bash-stdin-env-trusted-plugin-api.zh.md)。
46
46
 
47
47
  ## 权限与升权
48
48
 
49
49
  除非启用沙箱的执行器([`dsh-bash-sandbox`](../bash-sandbox/))限制命令,否则命令以执行器的完整权限运行。仅拒绝型沙箱会把拒绝作为结果事实报告,并在此渲染为拒绝标记;逐调用的允许/拒绝/询问策略由 `tools/pre-execute` waterfall(瀑布式事件)负责(参见 docs/architecture.md)。
50
50
 
51
- 需要升权的 bash 调用会在执行前解析 `ctx.approval`。`allowed-once` 只对该次调用应用请求模式;审批被拒、取消、不可用或缺少审批上下文时,命令完全不会执行,并返回不同的错误。发生真实拒绝后,模型可以在同一轮次中使用满足需要的最窄模式和理由重试同一命令一次;审批提示本身就是征求同意的步骤。升权绝不能预先推测,禁用或拒绝审批即为最终结果。其理由见 [沙箱 Agent Note](../../../.agents/notes/implemented/feature/2026-07-06-sandbox.md)。
51
+ 需要升权的 bash 调用会在执行前解析 `ctx.approval`。`allowed-once` 只对该次调用应用请求模式;审批被拒、取消、不可用或缺少审批上下文时,命令完全不会执行,并返回不同的错误。发生真实拒绝后,模型可以在同一轮次中使用满足需要的最窄模式和理由重试同一命令一次;审批提示本身就是征求同意的步骤。升权绝不能预先推测,禁用或拒绝审批即为最终结果。其理由见 [沙箱 Agent Note](../../../.agents/notes/implemented/feature/2026-07-06-sandbox.zh.md)。
52
52
 
53
53
  ## 逐会话模式切换
54
54
 
55
- 对于启用沙箱的执行器,每次调用依次按单次升权、会话覆盖、执行器默认值解析模式。未启用沙箱以及没有 agent 的调用不携带会话覆盖。策略归属方贡献当前且不区分具体能力的常驻模式;拒绝结果仍负责特定于该操作的有效模式与重试引导。参见 [`dsh-shell` 折叠计算](../shell/README.md)和[沙箱切换约定](../../../.agents/notes/implemented/feature/2026-07-06-sandbox.md)。
55
+ 对于启用沙箱的执行器,每次调用依次按单次升权、会话覆盖、执行器默认值解析模式。未启用沙箱以及没有 agent 的调用不携带会话覆盖。策略归属方贡献当前且不区分具体能力的常驻模式;拒绝结果仍负责特定于该操作的有效模式与重试引导。参见 [`dsh-shell` 折叠计算](../shell/README.zh.md)和[沙箱切换约定](../../../.agents/notes/implemented/feature/2026-07-06-sandbox.zh.md)。
56
56
 
57
57
  ## 模型体验
58
58
 
@@ -80,7 +80,7 @@ Check the [exit code: N] marker on every bash result; investigate failures befor
80
80
 
81
81
  #### 模型看到的内容
82
82
 
83
- 模型会看到生成的 [`bash` schema](../../../docs/tool-catalog.md#deepseek-aidsh-tool-bash)。仅当此生产方启用 `run_in_background` 时,该字段才会出现;仅当已挂载执行器声明支持沙箱时,`sandbox_permissions` 和 `justification` 才会出现。Agent 作用域的工具限制可以移除该 agent 的定义。
83
+ 模型会看到生成的 [`bash` schema](../../../docs/tool-catalog.zh.md#deepseek-aidsh-tool-bash)。仅当此生产方启用 `run_in_background` 时,该字段才会出现;仅当已挂载执行器声明支持沙箱时,`sandbox_permissions` 和 `justification` 才会出现。Agent 作用域的工具限制可以移除该 agent 的定义。
84
84
 
85
85
  #### Token 影响
86
86
 
@@ -94,7 +94,7 @@ Check the [exit code: N] marker on every bash result; investigate failures befor
94
94
 
95
95
  #### 模型看到的内容
96
96
 
97
- renderer 先输出依数据而定的 stdout 尾部,再输出可选的 `[stderr]` 和 stderr 尾部。没有输出时,它会精确输出 `(no output)`。条件行精确为 `[output truncated; full output: <path-or-(unavailable)>]`、`[sandbox: file access denied under <mode> mode]`、`[timed out after <timeoutMs>ms]`、`[killed by signal: <signal>]` 和 `[exit code: <exitCode>]`;沙箱升权与 runner 故障行原文列于 [`dsh-bash-sandbox`](../bash-sandbox/README.md)。
97
+ renderer 先输出依数据而定的 stdout 尾部,再输出可选的 `[stderr]` 和 stderr 尾部。没有输出时,它会精确输出 `(no output)`。条件行精确为 `[output truncated; full output: <path-or-(unavailable)>]`、`[sandbox: file access denied under <mode> mode]`、`[timed out after <timeoutMs>ms]`、`[killed by signal: <signal>]` 和 `[exit code: <exitCode>]`;沙箱升权与 runner 故障行原文列于 [`dsh-bash-sandbox`](../bash-sandbox/README.zh.md)。
98
98
 
99
99
  #### Token 影响
100
100
 
@@ -108,7 +108,7 @@ renderer 先输出依数据而定的 stdout 尾部,再输出可选的 `[stderr
108
108
 
109
109
  #### 模型看到的内容
110
110
 
111
- 启动会精确返回 `started background job <jobId>`。此生产方会向通用任务运行时提供增量进程输出、可选的 `[some output was dropped from memory; full output: <paths-or-(unavailable)>]`、沙箱事实,以及 `exit code: <exitCode>` 或 `signal: <signal>` 等终止详情。[`dsh-tool-jobs`](../../jobs/tool-jobs/README.md) 负责模型可见的状态行、完成通知、列表和取消响应。
111
+ 启动会精确返回 `started background job <jobId>`。此生产方会向通用任务运行时提供增量进程输出、可选的 `[some output was dropped from memory; full output: <paths-or-(unavailable)>]`、沙箱事实,以及 `exit code: <exitCode>` 或 `signal: <signal>` 等终止详情。[`dsh-tool-jobs`](../../jobs/tool-jobs/README.zh.md) 负责模型可见的状态行、完成通知、列表和取消响应。
112
112
 
113
113
  #### Token 影响
114
114
 
@@ -135,5 +135,5 @@ renderer 先输出依数据而定的 stdout 尾部,再输出可选的 `[stderr
135
135
  ## 已知限制与延期工作
136
136
 
137
137
  - **回放退出状态 pill 从结果文本解析**:如果输出最后一行恰好精确为 `[exit code: N]` / `[killed by signal: …]`,会话回放将显示错误的 pill,并且该行会从卡片正文中丢失,因为解析会把它当作自己消耗的标记;这是仅影响展示的已知残留问题。
138
- - **`bash` 工具不采用 `timeout-policy` 预算**:根据[工具调用 timeout-policy Agent Note](../../../.agents/notes/implemented/architecture/2026-07-07-tool-call-timeout-policy.md),它保留由执行器持有的 `BASH_TIMEOUT` 路径。
138
+ - **`bash` 工具不采用 `timeout-policy` 预算**:根据[工具调用 timeout-policy Agent Note](../../../.agents/notes/implemented/architecture/2026-07-07-tool-call-timeout-policy.zh.md),它保留由执行器持有的 `BASH_TIMEOUT` 路径。
139
139
  - **后台进程没有执行器超时**:工作不再需要时,调用方必须使用 `job_kill`,或依赖持有者/服务的 dispose。
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-tool-bash",
3
3
  "description": "Model-facing bash tool with optional generic background-job and sandbox-escalation support",
4
- "version": "0.1.0-rc.7",
4
+ "version": "0.1.1-rc.1",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -32,42 +32,42 @@
32
32
  ],
33
33
  "license": "MIT",
34
34
  "peerDependencies": {
35
- "@deepseek-ai/dsh-agent": "^0.1.0-rc.7",
36
- "@deepseek-ai/dsh-shell": "^0.1.0-rc.7",
37
- "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7",
38
- "@deepseek-ai/dsh-llm": "^0.1.0-rc.7",
39
- "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.7",
40
- "@deepseek-ai/dsh-jobs": "^0.1.0-rc.7",
41
- "@deepseek-ai/dsh-tools": "^0.1.0-rc.7",
42
- "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.7",
43
- "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.7",
44
- "@deepseek-ai/dsh-shell-env": "^0.1.0-rc.7",
35
+ "@deepseek-ai/dsh-agent": "^0.1.1-rc.1",
36
+ "@deepseek-ai/dsh-shell-env": "^0.1.1-rc.1",
37
+ "@deepseek-ai/dsh-shell": "^0.1.1-rc.1",
38
+ "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1",
39
+ "@deepseek-ai/dsh-llm": "^0.1.1-rc.1",
40
+ "@deepseek-ai/dsh-sandbox-policy": "^0.1.1-rc.1",
41
+ "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1",
42
+ "@deepseek-ai/dsh-jobs": "^0.1.1-rc.1",
43
+ "@deepseek-ai/dsh-tools": "^0.1.1-rc.1",
45
44
  "@deepseek-ai/cordis": "^4.0.1",
46
- "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7"
45
+ "@deepseek-ai/dsh-user-approval": "^0.1.1-rc.1",
46
+ "@deepseek-ai/dsh-sandbox": "^0.1.1-rc.1"
47
47
  },
48
48
  "dependencies": {
49
49
  "@deepseek-ai/schemastery": "^3.18.1"
50
50
  },
51
51
  "devDependencies": {
52
- "@deepseek-ai/dsh-agent": "^0.1.0-rc.7",
53
- "@deepseek-ai/dsh-agent-loop": "^0.1.0-rc.7",
54
- "@deepseek-ai/dsh-agent-loop-testkit": "^0.1.0-rc.7",
55
- "@deepseek-ai/dsh-shell-env": "^0.1.0-rc.7",
56
- "@deepseek-ai/dsh-shell": "^0.1.0-rc.7",
57
- "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7",
58
- "@deepseek-ai/dsh-llm": "^0.1.0-rc.7",
59
- "@deepseek-ai/dsh-bash-local": "^0.1.0-rc.7",
60
- "@deepseek-ai/dsh-subprocess-local": "^0.1.0-rc.7",
61
- "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.7",
62
- "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.7",
63
- "@deepseek-ai/dsh-session-persistence-jsonl": "^0.1.0-rc.7",
64
- "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7",
65
- "@deepseek-ai/dsh-jobs": "^0.1.0-rc.7",
66
- "@deepseek-ai/dsh-jobs-local": "^0.1.0-rc.7",
67
- "@deepseek-ai/dsh-tool-jobs": "^0.1.0-rc.7",
68
- "@deepseek-ai/dsh-tools": "^0.1.0-rc.7",
69
- "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.7",
70
- "@deepseek-ai/cordis": "^4.0.1",
71
- "@deepseek-ai/dsh-session": "^0.1.0-rc.7"
52
+ "@deepseek-ai/dsh-agent": "^0.1.1-rc.1",
53
+ "@deepseek-ai/dsh-agent-loop": "^0.1.1-rc.1",
54
+ "@deepseek-ai/dsh-invariants": "^0.1.1-rc.1",
55
+ "@deepseek-ai/dsh-shell": "^0.1.1-rc.1",
56
+ "@deepseek-ai/dsh-agent-loop-testkit": "^0.1.1-rc.1",
57
+ "@deepseek-ai/dsh-bash-local": "^0.1.1-rc.1",
58
+ "@deepseek-ai/dsh-shell-env": "^0.1.1-rc.1",
59
+ "@deepseek-ai/dsh-llm": "^0.1.1-rc.1",
60
+ "@deepseek-ai/dsh-subprocess-local": "^0.1.1-rc.1",
61
+ "@deepseek-ai/dsh-session": "^0.1.1-rc.1",
62
+ "@deepseek-ai/dsh-session-persistence-jsonl": "^0.1.1-rc.1",
63
+ "@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.1",
64
+ "@deepseek-ai/dsh-jobs": "^0.1.1-rc.1",
65
+ "@deepseek-ai/dsh-jobs-local": "^0.1.1-rc.1",
66
+ "@deepseek-ai/dsh-tool-jobs": "^0.1.1-rc.1",
67
+ "@deepseek-ai/dsh-tools": "^0.1.1-rc.1",
68
+ "@deepseek-ai/dsh-user-approval": "^0.1.1-rc.1",
69
+ "@deepseek-ai/dsh-sandbox": "^0.1.1-rc.1",
70
+ "@deepseek-ai/dsh-sandbox-policy": "^0.1.1-rc.1",
71
+ "@deepseek-ai/cordis": "^4.0.1"
72
72
  }
73
73
  }