@deepseek-ai/dsh-tool-bash 0.0.1-rc.2 → 0.0.1-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.i18n.yaml +3 -3
- package/README.md +15 -15
- package/README.zh.md +20 -20
- package/lib/index.js +20 -20
- package/lib/types/background.d.ts +3 -3
- package/lib/types/index.d.ts +3 -3
- package/lib/types/render.d.ts +7 -7
- package/package.json +35 -35
package/README.i18n.yaml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
|
|
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
|
-
# pnpm run verify-translation-pairing --write packages/
|
|
5
|
-
README.md:
|
|
6
|
-
README.zh.md:
|
|
4
|
+
# pnpm run verify-translation-pairing --write packages/shell/tool-bash/README.md
|
|
5
|
+
README.md: 344cf599cb9f6391bcb51488ed407fff56b330fa
|
|
6
|
+
README.zh.md: d10c0faee56acca23f1a8dbe27ed8f37d97c7b3a
|
package/README.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
English | [中文](README.zh.md)
|
|
4
4
|
|
|
5
|
-
The model-facing `bash` tool registered over the `ctx.
|
|
5
|
+
The model-facing `bash` tool registered over the `ctx.shell` executor seam. Foreground execution stays behind that seam; a background process handle is registered with the generic `ctx.jobs` runtime and controlled through `job_output`, `job_list`, and `job_kill` from `@deepseek-ai/dsh-tool-jobs`.
|
|
6
6
|
|
|
7
|
-
Requires a loaded executor Service provider (e.g. `@deepseek-ai/dsh-bash-local`) and the [`@deepseek-ai/dsh-
|
|
7
|
+
Requires a loaded executor Service provider (e.g. `@deepseek-ai/dsh-bash-local`) and the [`@deepseek-ai/dsh-shell-env`](../shell-env/README.md) registry; the plugin stays pending until every injected service exists (`inject: ['tools', 'bash', 'systemPrompt', 'bashEnv']`). The tool contract is bash-dialect — mount a bash-parsing executor.
|
|
8
8
|
|
|
9
9
|
The package root exposes only the Cordis plugin contract (`name`, `inject`, `Config`, `apply`); result rendering and background-process adaptation remain package-internal.
|
|
10
10
|
|
|
@@ -20,29 +20,29 @@ The plugin also contributes the `tool:bash` prompt section (order 105): check th
|
|
|
20
20
|
| `description` | string (required) | One-line, active-voice summary of the command (5-10 words), for UI/log display only — no effect on execution. |
|
|
21
21
|
| `timeoutMs` | number | Timeout override in milliseconds. The executor applies its configured default and cap. |
|
|
22
22
|
| `workdir` | string | Working directory for this call. Defaults to the filesystem identity of the calling agent's session cwd (`session.header.cwd`) so each session runs in its own workspace; a relative `workdir` is resolved against that same identity. |
|
|
23
|
-
| `run_in_background` | boolean | Return a
|
|
24
|
-
| `sandbox_permissions` | string enum | ADVERTISED ONLY when the mounted executor sandboxes (`ctx.
|
|
23
|
+
| `run_in_background` | boolean | Return a job id immediately; no timeout applies. |
|
|
24
|
+
| `sandbox_permissions` | string enum | ADVERTISED ONLY when the mounted executor sandboxes (`ctx.shell.sandboxMode` reports a confining default): the wider mode a denied command needs, from the closed target vocabulary `workspace-write`/`danger-full-access` (never cut down to the executor's default — the effective mode is per-session; strict widening is checked at execution against it, and a non-widening request fails without prompting anyone). |
|
|
25
25
|
| `justification` | string | Required together with `sandbox_permissions` (each without the other is a validation error): one sentence for the user explaining why this exact command needs the wider access. |
|
|
26
26
|
|
|
27
|
-
`command`, `workdir`, and `timeoutMs` are resolved against the executor's config defaults via `ctx.
|
|
27
|
+
`command`, `workdir`, and `timeoutMs` are resolved against the executor's config defaults via `ctx.shell.resolve()` before execution, so the Service Definition (`ShellExecSpec`) receives explicit `workdir`/`timeoutMs` values. The workdir default is applied in the tool layer from the calling agent's `session.header.cwd` BEFORE `resolve()` — the per-session cwd must come from `exec.agent`, since N sessions share one executor; only when no session cwd is available does the executor fall back to its own config / `process.cwd()`. When sandbox policy is present, the tool reuses its already-canonical `workspaceRoot` as the workdir base so confinement and process launch cannot resolve the same session spelling differently.
|
|
28
28
|
|
|
29
29
|
### Managed shell environment
|
|
30
30
|
|
|
31
|
-
Every foreground and background model bash call receives a freshly collected trusted `DSH_*` environment through the shared [`dsh-
|
|
31
|
+
Every foreground and background model bash call receives a freshly collected trusted `DSH_*` environment through the shared [`dsh-shell-env`](../shell-env/README.md) registry: `DSH_HOME` (the absolute Harness home), `DSH_SHELL=1`, the agent's `DSH_SESSION_ID`, and `DSH_SESSION_JSONL` when the active persistence backend locates one. The registry contract — contributor registration, loud duplicate/undeclared-key failure, the built-in reservations, and the contributor example — lives in that package's README. The snapshot passes through the dedicated `ShellExecRequest.dshEnv` channel; the local executor removes all inherited `DSH_*` before merging it, so nested harnesses and concurrent parent/child agents cannot leak stale identities, and `process.env` is never modified. The tool description teaches the generic `$DSH_*` convention rather than naming persistence-specific variables or adding a permanent system-prompt section.
|
|
32
32
|
|
|
33
33
|
Result text contains stdout, an optional `[stderr]` section, then applicable sandbox-denial, timeout, signal, exit-code, and truncation markers. Timeout is reported independently of final exit status; nonzero exit remains a model-interpreted result rather than `isError`. Truncation links a safe complete spill file or reports it unavailable. Only infrastructure failures such as spawn errors and aborts produce `isError`.
|
|
34
34
|
|
|
35
|
-
The canonical success is `{ kind: 'foreground', ...
|
|
35
|
+
The canonical success is `{ kind: 'foreground', ...ShellRunResult }` for a completed foreground process or `{ kind: 'background', jobId }` for a published task. The Native renderer preserves the text above, including exactly `started background job <id>`; programmatic consumers use the typed fields without parsing those strings. Executor stream caps remain acquisition limits on `ShellRunResult` and carry their spill paths.
|
|
36
36
|
|
|
37
|
-
When `run_in_background` is true, this plugin preflights `ctx.
|
|
37
|
+
When `run_in_background` is true, this plugin preflights `ctx.jobs.start()` before spawning, registers the calling agent as owner, and adapts the returned `ShellProcess` handle into generic cancel/done/incremental-output hooks. The job runtime owns ids, cross-session isolation, completion notices, waiting, and disposal cleanup; this plugin only maps bash exit/sandbox facts into job output and outcome detail. `enableRunInBackground: false` removes the parameter and rejects a forced background call at execution time.
|
|
38
38
|
|
|
39
39
|
## UI presentation
|
|
40
40
|
|
|
41
|
-
The tool owns its `presentCall`/`presentResult` render intent. A foreground call is a terminal card carrying command, description, cwd, output, and parsed exit status. Because the card shows the exit as its own pill, the `[exit code: N]` / `[killed by signal: …]` marker the parse consumes leaves the output; every other marker (truncation, timeout, sandbox) stays in it. A background start is a generic execute card because it returns only a
|
|
41
|
+
The tool owns its `presentCall`/`presentResult` render intent. A foreground call is a terminal card carrying command, description, cwd, output, and parsed exit status. Because the card shows the exit as its own pill, the `[exit code: N]` / `[killed by signal: …]` marker the parse consumes leaves the output; every other marker (truncation, timeout, sandbox) stays in it. A background start is a generic execute card because it returns only a job id; the generic `job_*` tools own their own cards. These presenters are pure and replay-safe.
|
|
42
42
|
|
|
43
43
|
## The tool builds its request from named args only
|
|
44
44
|
|
|
45
|
-
`
|
|
45
|
+
`ShellExecRequest` carries optional `stdoutMaxBytes`, `stdin`, ordinary `env`, and managed `dshEnv`, used by trusted in-process plugins and this tool's environment registry. The model-facing tool exposes none of `stdoutMaxBytes`, `stdin`, or `env`: it builds requests from named command/workdir/timeout/signal/sandbox fields plus the registry-collected `dshEnv`. Extra model keys are ignored and cannot replace managed values. Shell syntax provides equivalent command-level behavior, while the local executor scrubs ambient credentials and stale `DSH_*` values. See the [stdin/env Agent Note](../../../.agents/notes/implemented/architecture/2026-06-30-bash-stdin-env-trusted-plugin-api.md).
|
|
46
46
|
|
|
47
47
|
## Permissions and escalation
|
|
48
48
|
|
|
@@ -52,7 +52,7 @@ Escalating bash calls resolve `ctx.approval` before execution. `allowed-once` ap
|
|
|
52
52
|
|
|
53
53
|
## Per-session mode switching
|
|
54
54
|
|
|
55
|
-
For sandboxing executors, each call resolves mode as one-shot escalation, then session override, then executor default. Non-sandboxing and agent-less calls carry no session override. The policy owner contributes the current capability-neutral standing mode; denial results still own the operation-specific effective mode and retry guidance. See the [`dsh-
|
|
55
|
+
For sandboxing executors, each call resolves mode as one-shot escalation, then session override, then executor default. Non-sandboxing and agent-less calls carry no session override. The policy owner contributes the current capability-neutral standing mode; denial results still own the operation-specific effective mode and retry guidance. See the [`dsh-shell` fold](../shell/README.md) and [sandbox switching contract](../../../.agents/notes/implemented/feature/2026-07-06-sandbox.md).
|
|
56
56
|
|
|
57
57
|
## Model Experience
|
|
58
58
|
|
|
@@ -104,11 +104,11 @@ Zero result tokens before a call. Output is bounded per stream, while each emitt
|
|
|
104
104
|
|
|
105
105
|
Append-only; newly visible content follows the reusable request prefix and does not invalidate existing KV-cache entries.
|
|
106
106
|
|
|
107
|
-
### Background
|
|
107
|
+
### Background job context and results
|
|
108
108
|
|
|
109
109
|
#### What the model sees
|
|
110
110
|
|
|
111
|
-
Start returns exactly `started background
|
|
111
|
+
Start returns exactly `started background job <jobId>`. This producer supplies incremental process output, optional `[some output was dropped from memory; full output: <paths-or-(unavailable)>]`, sandbox facts, and terminal detail such as `exit code: <exitCode>` or `signal: <signal>` to the generic job runtime. [`dsh-tool-jobs`](../../jobs/tool-jobs/README.md) owns the visible status line, completion notice, listing, and cancellation response.
|
|
112
112
|
|
|
113
113
|
#### Token effect
|
|
114
114
|
|
|
@@ -122,7 +122,7 @@ Append-only; newly visible content follows the reusable request prefix and does
|
|
|
122
122
|
|
|
123
123
|
#### What the model sees
|
|
124
124
|
|
|
125
|
-
Validation and policy failures are normalized as `Error: <message>`. This package's stable messages are `invalid command: expected a non-empty string`, `invalid description: expected a non-empty string`, `invalid timeoutMs: expected a positive number, got <value>`, `invalid escalation: sandbox_permissions requires a justification`, `invalid escalation: justification is only valid together with sandbox_permissions`, `invalid justification: expected a non-empty sentence`, `background execution is disabled for this bash tool`, `background
|
|
125
|
+
Validation and policy failures are normalized as `Error: <message>`. This package's stable messages are `invalid command: expected a non-empty string`, `invalid description: expected a non-empty string`, `invalid timeoutMs: expected a positive number, got <value>`, `invalid escalation: sandbox_permissions requires a justification`, `invalid escalation: justification is only valid together with sandbox_permissions`, `invalid justification: expected a non-empty sentence`, `background execution is disabled for this bash tool`, `background jobs unavailable: load @deepseek-ai/dsh-jobs and @deepseek-ai/dsh-tool-jobs`, `sandbox_permissions is not available in this composition (no sandboxing executor to escalate)`, `sandbox escalation to "<mode>" is not strictly wider than this call's current "<mode>" mode`, the approval-availability/rejection/cancellation variants, and `tool call aborted`.
|
|
126
126
|
|
|
127
127
|
#### Token effect
|
|
128
128
|
|
|
@@ -136,4 +136,4 @@ Append-only; newly visible content follows the reusable request prefix and does
|
|
|
136
136
|
|
|
137
137
|
- **Replay exit pills parse from result text** — output whose final line happens to be exactly `[exit code: N]` / `[killed by signal: …]` shows a wrong pill on session replay and loses that line from the card body, because the parse treats it as the marker it consumes; a display-only known residual.
|
|
138
138
|
- **The `bash` tool opts out of `timeout-policy` budgets** — it keeps the executor-owned `BASH_TIMEOUT` path, per [the tool-call timeout-policy Agent Note](../../../.agents/notes/implemented/architecture/2026-07-07-tool-call-timeout-policy.md).
|
|
139
|
-
- **Background processes have no executor timeout** — callers must use `
|
|
139
|
+
- **Background processes have no executor timeout** — callers must use `job_kill`, or rely on owner/service disposal, when work no longer matters.
|
package/README.zh.md
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.md) | 中文
|
|
4
4
|
|
|
5
|
-
模型侧 `bash` 工具,注册在 `ctx.
|
|
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-
|
|
7
|
+
需要加载执行器 Service provider(例如 `@deepseek-ai/dsh-bash-local`)与 [`@deepseek-ai/dsh-shell-env`](../shell-env/README.md) 注册表;在每个注入服务就绪之前,插件会保持等待状态(`inject: ['tools', 'bash', 'systemPrompt', 'bashEnv']`)。工具约定是 bash 方言——请挂载能解析 bash 的执行器。
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
包根只公开 Cordis 插件约定(`name`、`inject`、`Config`、`apply`);结果渲染和后台进程适配仍保留在包内部。
|
|
10
10
|
|
|
11
11
|
插件还会提供 `tool:bash` 提示词段落(顺序 105):检查每个结果中的 `[exit code: N]` 标记,发现失败时先调查原因再继续。
|
|
12
12
|
|
|
@@ -20,39 +20,39 @@
|
|
|
20
20
|
| `description` | string(必填) | 用一行主动语态概述命令(5~10 个词),仅用于 UI/日志显示,不影响执行。 |
|
|
21
21
|
| `timeoutMs` | number | 以毫秒为单位覆盖超时时间。执行器会应用其配置的默认值和上限。 |
|
|
22
22
|
| `workdir` | string | 本次调用的工作目录。默认为调用方 agent(智能体)会话 cwd 的文件系统标识(`session.header.cwd`),使每个会话都在自己的工作区中运行;相对 `workdir` 也以同一标识为基准解析。 |
|
|
23
|
-
| `run_in_background` | boolean | 立即返回
|
|
24
|
-
| `sandbox_permissions` | string enum | 仅当已挂载的执行器启用沙箱时才会公开(`ctx.
|
|
23
|
+
| `run_in_background` | boolean | 立即返回 job id;不应用超时。 |
|
|
24
|
+
| `sandbox_permissions` | string enum | 仅当已挂载的执行器启用沙箱时才会公开(`ctx.shell.sandboxMode` 报告一个具有限制作用的默认值):被拒命令所需的更宽模式,取自封闭的目标词汇 `workspace-write`/`danger-full-access`(绝不能缩减为执行器默认值;有效模式按会话确定,执行时会基于它检查是否严格拓宽,未拓宽的请求直接失败,不会向任何人发起提示)。 |
|
|
25
25
|
| `justification` | string | 必须与 `sandbox_permissions` 一同提供(缺少任一项都会产生验证错误):用一句话向用户解释此命令为何需要这项更宽权限。 |
|
|
26
26
|
|
|
27
|
-
执行前,`command`、`workdir` 和 `timeoutMs` 会通过 `ctx.
|
|
27
|
+
执行前,`command`、`workdir` 和 `timeoutMs` 会通过 `ctx.shell.resolve()` 依据执行器配置默认值完成解析,因此 Service Definition(`ShellExecSpec`)收到显式的 `workdir`/`timeoutMs` 值。工具层会根据调用方 agent 的 `session.header.cwd` 应用工作目录默认值,然后才调用 `resolve()`:由于 N 个会话共享一个执行器,逐会话 cwd 必须来自 `exec.agent`;只有无法取得会话 cwd 时,执行器才回退到自身配置/`process.cwd()`。存在沙箱策略时,工具会复用已经规范化的 `workspaceRoot` 作为工作目录基准,防止限制逻辑与进程启动过程对同一个会话路径拼写产生不同解析结果。
|
|
28
28
|
|
|
29
29
|
### 托管 shell 环境
|
|
30
30
|
|
|
31
|
-
每次模型发起的前台或后台 bash 调用都会通过共享的 [`dsh-
|
|
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_*` 约定,不会点名持久化专用变量,也不会添加永久的系统提示词段落。
|
|
32
32
|
|
|
33
33
|
结果文本依次包含 stdout、可选的 `[stderr]` 段落和适用的沙箱拒绝、超时、信号、退出代码及截断标记。超时与最终退出状态分别报告;非零退出仍是由模型解释的结果,不会成为 `isError`。截断结果会链接安全的完整 spill 文件,或报告文件不可用。只有 spawn 错误和中止等基础设施故障才会产生 `isError`。
|
|
34
34
|
|
|
35
|
-
已完成前台进程的规范成功值为 `{ kind: 'foreground', ...
|
|
35
|
+
已完成前台进程的规范成功值为 `{ kind: 'foreground', ...ShellRunResult }`,已发布任务则为 `{ kind: 'background', jobId }`。Native renderer 保留上述文本,包括精确的 `started background job <id>`;程序化消费方使用带类型字段,无需解析这些字符串。执行器的流上限仍是 `ShellRunResult` 的采集限制,并携带其 spill 路径。
|
|
36
36
|
|
|
37
|
-
当 `run_in_background` 为 true 时,此插件会在 spawn 前预检 `ctx.
|
|
37
|
+
当 `run_in_background` 为 true 时,此插件会在 spawn 前预检 `ctx.jobs.start()`,把调用方 agent 注册为持有者,并将返回的 `ShellProcess` 句柄适配为通用的取消/完成/增量输出钩子。任务运行时负责 job id、跨会话隔离、完成通知、等待和 dispose(资源释放)清理;此插件只把 bash 退出/沙箱事实映射为任务输出和结果详情。`enableRunInBackground: false` 会移除该参数,并在执行时拒绝强制后台调用。
|
|
38
38
|
|
|
39
39
|
## UI 展示
|
|
40
40
|
|
|
41
|
-
工具持有自己的 `presentCall`/`presentResult` 渲染意图。前台调用是终端卡片,包含命令、说明、cwd、输出和解析后的退出状态。由于卡片以独立的 pill 展示退出状态,解析所消耗的 `[exit code: N]` / `[killed by signal: …]` 标记会从输出中移除;其他所有标记(截断、超时、沙箱)都保留在输出中。后台启动只返回
|
|
41
|
+
工具持有自己的 `presentCall`/`presentResult` 渲染意图。前台调用是终端卡片,包含命令、说明、cwd、输出和解析后的退出状态。由于卡片以独立的 pill 展示退出状态,解析所消耗的 `[exit code: N]` / `[killed by signal: …]` 标记会从输出中移除;其他所有标记(截断、超时、沙箱)都保留在输出中。后台启动只返回 job id,因此使用通用执行卡片;通用 `job_*` 工具持有各自的卡片。这些 presenter 是纯函数,可安全回放。
|
|
42
42
|
|
|
43
43
|
## 工具仅使用具名参数构建请求
|
|
44
44
|
|
|
45
|
-
`
|
|
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)。
|
|
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`
|
|
51
|
+
需要升权的 bash 调用会在执行前解析 `ctx.approval`。`allowed-once` 只对该次调用应用请求模式;审批被拒、取消、不可用或缺少审批上下文时,命令完全不会执行,并返回不同的错误。发生真实拒绝后,模型可以在同一轮次中使用满足需要的最窄模式和理由重试同一命令一次;审批提示本身就是征求同意的步骤。升权绝不能预先推测,禁用或拒绝审批即为最终结果。其理由见 [沙箱 Agent Note](../../../.agents/notes/implemented/feature/2026-07-06-sandbox.md)。
|
|
52
52
|
|
|
53
53
|
## 逐会话模式切换
|
|
54
54
|
|
|
55
|
-
对于启用沙箱的执行器,每次调用依次按单次升权、会话覆盖、执行器默认值解析模式。未启用沙箱以及没有 agent
|
|
55
|
+
对于启用沙箱的执行器,每次调用依次按单次升权、会话覆盖、执行器默认值解析模式。未启用沙箱以及没有 agent 的调用不携带会话覆盖。策略归属方贡献当前且不区分具体能力的常驻模式;拒绝结果仍负责特定于该操作的有效模式与重试引导。参见 [`dsh-shell` 折叠计算](../shell/README.md)和[沙箱切换约定](../../../.agents/notes/implemented/feature/2026-07-06-sandbox.md)。
|
|
56
56
|
|
|
57
57
|
## 模型体验
|
|
58
58
|
|
|
@@ -88,7 +88,7 @@ Check the [exit code: N] marker on every bash result; investigate failures befor
|
|
|
88
88
|
|
|
89
89
|
#### KV Cache 影响
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
只要可见性、后台支持和执行器沙箱能力保持不变,前缀即可稳定复用。限制、配置或执行器发生变化时,可能从首个变化的工具定义开始使复用失效。
|
|
92
92
|
|
|
93
93
|
### 前台结果
|
|
94
94
|
|
|
@@ -102,13 +102,13 @@ renderer 先输出依数据而定的 stdout 尾部,再输出可选的 `[stderr
|
|
|
102
102
|
|
|
103
103
|
#### KV Cache 影响
|
|
104
104
|
|
|
105
|
-
仅追加;新可见内容位于可复用请求前缀之后,不会使现有 KV
|
|
105
|
+
仅追加;新可见内容位于可复用请求前缀之后,不会使现有 KV Cache 条目失效。
|
|
106
106
|
|
|
107
107
|
### 后台任务上下文与结果
|
|
108
108
|
|
|
109
109
|
#### 模型看到的内容
|
|
110
110
|
|
|
111
|
-
启动会精确返回 `started background
|
|
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) 负责模型可见的状态行、完成通知、列表和取消响应。
|
|
112
112
|
|
|
113
113
|
#### Token 影响
|
|
114
114
|
|
|
@@ -116,13 +116,13 @@ renderer 先输出依数据而定的 stdout 尾部,再输出可选的 `[stderr
|
|
|
116
116
|
|
|
117
117
|
#### KV Cache 影响
|
|
118
118
|
|
|
119
|
-
仅追加;新可见内容位于可复用请求前缀之后,不会使现有 KV
|
|
119
|
+
仅追加;新可见内容位于可复用请求前缀之后,不会使现有 KV Cache 条目失效。
|
|
120
120
|
|
|
121
121
|
### 工具错误
|
|
122
122
|
|
|
123
123
|
#### 模型看到的内容
|
|
124
124
|
|
|
125
|
-
验证和策略失败统一为 `Error: <message>`。此包的稳定消息包括 `invalid command: expected a non-empty string`、`invalid description: expected a non-empty string`、`invalid timeoutMs: expected a positive number, got <value>`、`invalid escalation: sandbox_permissions requires a justification`、`invalid escalation: justification is only valid together with sandbox_permissions`、`invalid justification: expected a non-empty sentence`、`background execution is disabled for this bash tool`、`background
|
|
125
|
+
验证和策略失败统一为 `Error: <message>`。此包的稳定消息包括 `invalid command: expected a non-empty string`、`invalid description: expected a non-empty string`、`invalid timeoutMs: expected a positive number, got <value>`、`invalid escalation: sandbox_permissions requires a justification`、`invalid escalation: justification is only valid together with sandbox_permissions`、`invalid justification: expected a non-empty sentence`、`background execution is disabled for this bash tool`、`background jobs unavailable: load @deepseek-ai/dsh-jobs and @deepseek-ai/dsh-tool-jobs`、`sandbox_permissions is not available in this composition (no sandboxing executor to escalate)`、`sandbox escalation to "<mode>" is not strictly wider than this call's current "<mode>" mode`、审批不可用/拒绝/取消变体,以及 `tool call aborted`。
|
|
126
126
|
|
|
127
127
|
#### Token 影响
|
|
128
128
|
|
|
@@ -130,10 +130,10 @@ renderer 先输出依数据而定的 stdout 尾部,再输出可选的 `[stderr
|
|
|
130
130
|
|
|
131
131
|
#### KV Cache 影响
|
|
132
132
|
|
|
133
|
-
仅追加;新可见内容位于可复用请求前缀之后,不会使现有 KV
|
|
133
|
+
仅追加;新可见内容位于可复用请求前缀之后,不会使现有 KV Cache 条目失效。
|
|
134
134
|
|
|
135
135
|
## 已知限制与延期工作
|
|
136
136
|
|
|
137
137
|
- **回放退出状态 pill 从结果文本解析**:如果输出最后一行恰好精确为 `[exit code: N]` / `[killed by signal: …]`,会话回放将显示错误的 pill,并且该行会从卡片正文中丢失,因为解析会把它当作自己消耗的标记;这是仅影响展示的已知残留问题。
|
|
138
138
|
- **`bash` 工具不采用 `timeout-policy` 预算**:根据[工具调用 timeout-policy Agent Note](../../../.agents/notes/implemented/architecture/2026-07-07-tool-call-timeout-policy.md),它保留由执行器持有的 `BASH_TIMEOUT` 路径。
|
|
139
|
-
- **后台进程没有执行器超时**:工作不再需要时,调用方必须使用 `
|
|
139
|
+
- **后台进程没有执行器超时**:工作不再需要时,调用方必须使用 `job_kill`,或依赖持有者/服务的 dispose。
|
package/lib/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import { isAbsolute, resolve } from "node:path";
|
|
|
3
3
|
import { TOOL_ABORTED, defineTool } from "@deepseek-ai/dsh-tools";
|
|
4
4
|
import { HarnessError } from "@deepseek-ai/dsh-llm";
|
|
5
5
|
import { ESCALATION_TARGETS, approveEscalation, canonicalPath, escalationHintMarker, sandboxDenialMarker, validateEscalationArgs } from "@deepseek-ai/dsh-sandbox";
|
|
6
|
-
import { DSH_ENV_PREFIX, parseExitStatus } from "@deepseek-ai/dsh-
|
|
6
|
+
import { DSH_ENV_PREFIX, parseExitStatus } from "@deepseek-ai/dsh-shell";
|
|
7
7
|
//#region lib/types/background.js
|
|
8
8
|
/**
|
|
9
9
|
* Generic-task adaptation for background bash process handles.
|
|
@@ -16,7 +16,7 @@ import { DSH_ENV_PREFIX, parseExitStatus } from "@deepseek-ai/dsh-bash";
|
|
|
16
16
|
* else is `completed` with the exit code as detail. A nonzero command exit is
|
|
17
17
|
* reported, not failed, exactly like the foreground rendering.
|
|
18
18
|
* @param proc - the settled process handle.
|
|
19
|
-
* @returns the outcome for the `ctx.
|
|
19
|
+
* @returns the outcome for the `ctx.jobs` registration.
|
|
20
20
|
*/
|
|
21
21
|
function processOutcome(proc) {
|
|
22
22
|
if (proc.status === "killed") return {
|
|
@@ -73,10 +73,10 @@ function renderResult(result, escalationModes = []) {
|
|
|
73
73
|
return body + markers.join("\n");
|
|
74
74
|
}
|
|
75
75
|
/**
|
|
76
|
-
* Shape one background-process read into the `
|
|
76
|
+
* Shape one background-process read into the `job_output` delta the model
|
|
77
77
|
* sees: the incremental delta, plus the lossy-read notice (with full-stream
|
|
78
78
|
* spill paths) when in-memory truncation dropped unread bytes. Empty-delta
|
|
79
|
-
* rendering (`(no new output)`) is the generic
|
|
79
|
+
* rendering (`(no new output)`) is the generic job controller's job.
|
|
80
80
|
* @param read - one incremental read from the process handle.
|
|
81
81
|
* @param sandbox - settled sandbox facts, when this was a confined process.
|
|
82
82
|
* @param escalationModes - escalation targets advertised by this composition.
|
|
@@ -99,20 +99,20 @@ function renderProcessRead(read, sandbox, escalationModes = []) {
|
|
|
99
99
|
//#endregion
|
|
100
100
|
//#region lib/types/index.js
|
|
101
101
|
/**
|
|
102
|
-
* Model-facing Consumer of the `ctx.
|
|
103
|
-
* register process handles with `ctx.
|
|
102
|
+
* Model-facing Consumer of the `ctx.shell` capability seam. Background calls
|
|
103
|
+
* register process handles with `ctx.jobs`; their work uses job cancellation
|
|
104
104
|
* rather than the tool-call signal after an id is returned.
|
|
105
105
|
*
|
|
106
106
|
* TODO(permissions): deployment policy belongs in `tools/pre-execute` and
|
|
107
|
-
* sandboxing executors; see docs/architecture.md §
|
|
107
|
+
* sandboxing executors; see docs/architecture.md § Where new behavior goes.
|
|
108
108
|
* @module @deepseek-ai/dsh-tool-bash
|
|
109
109
|
*/
|
|
110
110
|
const name = "tool-bash";
|
|
111
111
|
const inject = [
|
|
112
112
|
"tools",
|
|
113
|
-
"
|
|
113
|
+
"shell",
|
|
114
114
|
"systemPrompt",
|
|
115
|
-
"
|
|
115
|
+
"shellEnv"
|
|
116
116
|
];
|
|
117
117
|
/** Runtime configuration schema for the bash tool plugin. */
|
|
118
118
|
const Config = z.object({ enableRunInBackground: z.boolean().default(true) });
|
|
@@ -123,7 +123,7 @@ function validateBashArgs(args) {
|
|
|
123
123
|
validateEscalationArgs(args.sandbox_permissions, args.justification);
|
|
124
124
|
}
|
|
125
125
|
function bashDescription(backgroundEnabled, escalationModes) {
|
|
126
|
-
const background = backgroundEnabled ? "Set `run_in_background: true` for long-running commands: the call returns a
|
|
126
|
+
const background = backgroundEnabled ? "Set `run_in_background: true` for long-running commands: the call returns a job id immediately; read its output with `job_output` and stop it with `job_kill`." : "Background execution is not available; long-running commands must finish within the timeout.";
|
|
127
127
|
const base = `Execute a bash command (\`bash -c\`) and return its stdout/stderr. Each call runs in a fresh shell: no state (cwd, variables, functions) persists between calls — pass \`workdir\` instead of using \`cd\`. Non-zero exits are reported as \`[exit code: N]\`. Current harness environment facts are exposed through managed \`$${DSH_ENV_PREFIX}*\` variables; inspect them when needed. Commands may run under a file sandbox; a blocked file operation is reported as \`[sandbox: file access denied under <mode> mode]\` — a policy denial, not a bug in the command; do not retry another way. Long output is truncated to its tail; the full output is saved to a file whose path is reported when available. ` + background;
|
|
128
128
|
if (escalationModes.length === 0) return base;
|
|
129
129
|
return base + " Attempting a command the sandbox may deny is safe and expected: run it and read the marker rather than assuming the denial. When a command is denied and a wider mode would let it succeed, escalate immediately in the same turn — the one sanctioned exception to a denial: retry the exact same command once with `sandbox_permissions` (the narrowest wider mode that suffices) plus a one-sentence `justification`. Do not detour through chat to ask permission first — the approval prompt raised by that retry is how the user consents. If the session states approval prompts are disabled, there is no exception: a denial is final — do not set `sandbox_permissions`. Never escalate speculatively: ground the request in a real denial — normally the one this command just hit; escalating up front is fine only when this session already denied the same access. A rejected escalation is final for that command — stop and explain, never work around it — but it does not forbid attempting or escalating other commands later.";
|
|
@@ -211,14 +211,14 @@ const BACKGROUND_OUTPUT_PROPERTIES = {
|
|
|
211
211
|
required: true,
|
|
212
212
|
const: "background"
|
|
213
213
|
},
|
|
214
|
-
|
|
214
|
+
jobId: {
|
|
215
215
|
type: "string",
|
|
216
216
|
required: true
|
|
217
217
|
}
|
|
218
218
|
};
|
|
219
219
|
function apply(ctx, config = {}) {
|
|
220
220
|
const backgroundEnabled = config.enableRunInBackground ?? true;
|
|
221
|
-
const defaultMode = ctx.
|
|
221
|
+
const defaultMode = ctx.shell.sandboxMode;
|
|
222
222
|
const escalationModes = defaultMode === void 0 ? [] : ESCALATION_TARGETS;
|
|
223
223
|
const sandboxPolicy = defaultMode === void 0 ? void 0 : ctx.get("sandboxPolicy");
|
|
224
224
|
if (defaultMode !== void 0 && sandboxPolicy === void 0) throw new Error("tool-bash: the mounted bash executor confines but ctx.sandboxPolicy is missing");
|
|
@@ -280,7 +280,7 @@ function apply(ctx, config = {}) {
|
|
|
280
280
|
},
|
|
281
281
|
...backgroundEnabled ? { run_in_background: {
|
|
282
282
|
type: "boolean",
|
|
283
|
-
description: "Run in the background and return a
|
|
283
|
+
description: "Run in the background and return a job id immediately (collect with job_output, stop with job_kill). No timeout applies."
|
|
284
284
|
} } : {},
|
|
285
285
|
...escalationModes.length > 0 ? {
|
|
286
286
|
sandbox_permissions: {
|
|
@@ -380,7 +380,7 @@ function apply(ctx, config = {}) {
|
|
|
380
380
|
}] },
|
|
381
381
|
render: (_args, value) => [{
|
|
382
382
|
type: "text",
|
|
383
|
-
text: value.kind === "background" ? `started background
|
|
383
|
+
text: value.kind === "background" ? `started background job ${value.jobId}` : renderResult(value, escalationModes)
|
|
384
384
|
}]
|
|
385
385
|
},
|
|
386
386
|
async execute(args, exec) {
|
|
@@ -392,7 +392,7 @@ function apply(ctx, config = {}) {
|
|
|
392
392
|
mode: approvedMode
|
|
393
393
|
};
|
|
394
394
|
const workdir = resolveWorkdir(args.workdir, exec, standingPolicy?.workspaceRoot);
|
|
395
|
-
const dshEnv = ctx.
|
|
395
|
+
const dshEnv = ctx.shellEnv.collect(exec);
|
|
396
396
|
const request = {
|
|
397
397
|
command: args.command,
|
|
398
398
|
...workdir !== void 0 ? { workdir } : {},
|
|
@@ -402,8 +402,8 @@ function apply(ctx, config = {}) {
|
|
|
402
402
|
};
|
|
403
403
|
if (args.run_in_background === true) {
|
|
404
404
|
if (!backgroundEnabled) throw new Error("run_in_background is disabled for this deployment (enableRunInBackground: false)");
|
|
405
|
-
const
|
|
406
|
-
if (
|
|
405
|
+
const jobs = ctx.get("jobs");
|
|
406
|
+
if (jobs === void 0) throw new Error("background jobs unavailable: load @deepseek-ai/dsh-jobs and @deepseek-ai/dsh-tool-jobs");
|
|
407
407
|
if (exec.signal.aborted) {
|
|
408
408
|
const error = new HarnessError("tool call aborted", TOOL_ABORTED);
|
|
409
409
|
error.name = "AbortError";
|
|
@@ -411,12 +411,12 @@ function apply(ctx, config = {}) {
|
|
|
411
411
|
}
|
|
412
412
|
return {
|
|
413
413
|
kind: "background",
|
|
414
|
-
|
|
414
|
+
jobId: jobs.start({
|
|
415
415
|
kind: "bash",
|
|
416
416
|
label: args.command,
|
|
417
417
|
...exec.agent ? { owner: exec.agent } : {},
|
|
418
418
|
run: () => {
|
|
419
|
-
const proc = ctx.
|
|
419
|
+
const proc = ctx.shell.start(ctx.shell.resolve(request));
|
|
420
420
|
return {
|
|
421
421
|
cancel: () => void proc.kill(),
|
|
422
422
|
done: proc.done.then(() => processOutcome(proc)),
|
|
@@ -426,7 +426,7 @@ function apply(ctx, config = {}) {
|
|
|
426
426
|
})
|
|
427
427
|
};
|
|
428
428
|
}
|
|
429
|
-
const result = await ctx.
|
|
429
|
+
const result = await ctx.shell.run(ctx.shell.resolve({
|
|
430
430
|
...request,
|
|
431
431
|
signal: exec.signal
|
|
432
432
|
}));
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module @deepseek-ai/dsh-tool-bash/background
|
|
5
5
|
*/
|
|
6
|
-
import type {
|
|
6
|
+
import type { ShellProcess } from '@deepseek-ai/dsh-shell';
|
|
7
7
|
/**
|
|
8
8
|
* Map a settled background process onto the generic task-outcome vocabulary:
|
|
9
9
|
* `killed` stays `killed` (detail: the signal when one is known), everything
|
|
10
10
|
* else is `completed` with the exit code as detail. A nonzero command exit is
|
|
11
11
|
* reported, not failed, exactly like the foreground rendering.
|
|
12
12
|
* @param proc - the settled process handle.
|
|
13
|
-
* @returns the outcome for the `ctx.
|
|
13
|
+
* @returns the outcome for the `ctx.jobs` registration.
|
|
14
14
|
*/
|
|
15
|
-
export declare function processOutcome(proc:
|
|
15
|
+
export declare function processOutcome(proc: ShellProcess): {
|
|
16
16
|
status: 'completed' | 'killed';
|
|
17
17
|
detail: string;
|
|
18
18
|
};
|
package/lib/types/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Model-facing Consumer of the `ctx.
|
|
3
|
-
* register process handles with `ctx.
|
|
2
|
+
* Model-facing Consumer of the `ctx.shell` capability seam. Background calls
|
|
3
|
+
* register process handles with `ctx.jobs`; their work uses job cancellation
|
|
4
4
|
* rather than the tool-call signal after an id is returned.
|
|
5
5
|
*
|
|
6
6
|
* TODO(permissions): deployment policy belongs in `tools/pre-execute` and
|
|
7
|
-
* sandboxing executors; see docs/architecture.md §
|
|
7
|
+
* sandboxing executors; see docs/architecture.md § Where new behavior goes.
|
|
8
8
|
* @module @deepseek-ai/dsh-tool-bash
|
|
9
9
|
*/
|
|
10
10
|
import type { Context } from '@deepseek-ai/cordis';
|
package/lib/types/render.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module @deepseek-ai/dsh-tool-bash/render
|
|
5
5
|
*/
|
|
6
|
-
import type {
|
|
6
|
+
import type { ShellProcessRead, ShellRunResult, ShellSandboxInfo } from '@deepseek-ai/dsh-shell';
|
|
7
7
|
import type { SandboxMode } from '@deepseek-ai/dsh-sandbox';
|
|
8
8
|
/**
|
|
9
9
|
* Shape one finished run into the text the model sees: stdout, then a marked
|
|
@@ -16,23 +16,23 @@ import type { SandboxMode } from '@deepseek-ai/dsh-sandbox';
|
|
|
16
16
|
* (default `[]`: no hint).
|
|
17
17
|
* @returns the model-facing text: output body (or `(no output)`), then any timeout/signal/exit markers, each on its own line.
|
|
18
18
|
*/
|
|
19
|
-
export declare function renderResult(result:
|
|
19
|
+
export declare function renderResult(result: ShellRunResult, escalationModes?: readonly SandboxMode[]): string;
|
|
20
20
|
/**
|
|
21
|
-
* Shape one background-process read into the `
|
|
21
|
+
* Shape one background-process read into the `job_output` delta the model
|
|
22
22
|
* sees: the incremental delta, plus the lossy-read notice (with full-stream
|
|
23
23
|
* spill paths) when in-memory truncation dropped unread bytes. Empty-delta
|
|
24
|
-
* rendering (`(no new output)`) is the generic
|
|
24
|
+
* rendering (`(no new output)`) is the generic job controller's job.
|
|
25
25
|
* @param read - one incremental read from the process handle.
|
|
26
26
|
* @param sandbox - settled sandbox facts, when this was a confined process.
|
|
27
27
|
* @param escalationModes - escalation targets advertised by this composition.
|
|
28
28
|
* @returns the delta text with any loss or sandbox notice appended.
|
|
29
29
|
*/
|
|
30
|
-
export declare function renderProcessRead(read:
|
|
30
|
+
export declare function renderProcessRead(read: ShellProcessRead, sandbox?: ShellSandboxInfo, escalationModes?: readonly SandboxMode[]): string;
|
|
31
31
|
/**
|
|
32
32
|
* The exit-status parse is the shared marker-contract half of the shell-tool
|
|
33
|
-
* rendering story, owned by `@deepseek-ai/dsh-
|
|
33
|
+
* rendering story, owned by `@deepseek-ai/dsh-shell` so `dsh-tool-pwsh` reuses
|
|
34
34
|
* it (its renderer emits the same markers). Re-exported here to keep
|
|
35
35
|
* `../src/render.ts` a single import root for bash-tool consumers.
|
|
36
36
|
*/
|
|
37
|
-
export { parseExitStatus, type ParsedExitStatus } from '@deepseek-ai/dsh-
|
|
37
|
+
export { parseExitStatus, type ParsedExitStatus } from '@deepseek-ai/dsh-shell';
|
|
38
38
|
//# sourceMappingURL=render.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepseek-ai/dsh-tool-bash",
|
|
3
|
-
"description": "Model-facing bash tool with optional generic background-
|
|
4
|
-
"version": "0.0.1-rc.
|
|
3
|
+
"description": "Model-facing bash tool with optional generic background-job and sandbox-escalation support",
|
|
4
|
+
"version": "0.0.1-rc.3",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "restricted"
|
|
7
7
|
},
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
10
|
"url": "git+https://github.com/deepseek-ai/deepseek-harness.git",
|
|
11
|
-
"directory": "packages/
|
|
11
|
+
"directory": "packages/shell/tool-bash"
|
|
12
12
|
},
|
|
13
13
|
"type": "module",
|
|
14
14
|
"main": "lib/index.js",
|
|
@@ -32,42 +32,42 @@
|
|
|
32
32
|
],
|
|
33
33
|
"license": "BSD-3-Clause",
|
|
34
34
|
"peerDependencies": {
|
|
35
|
-
"@deepseek-ai/dsh-agent": "^0.0.1-rc.
|
|
36
|
-
"@deepseek-ai/dsh-
|
|
37
|
-
"@deepseek-ai/dsh-
|
|
38
|
-
"@deepseek-ai/dsh-invariants": "^0.0.1-rc.
|
|
39
|
-
"@deepseek-ai/dsh-
|
|
40
|
-
"@deepseek-ai/dsh-
|
|
41
|
-
"@deepseek-ai/dsh-
|
|
42
|
-
"@deepseek-ai/dsh-
|
|
43
|
-
"@deepseek-ai/dsh-
|
|
44
|
-
"@deepseek-ai/
|
|
45
|
-
"@deepseek-ai/dsh-
|
|
46
|
-
"@deepseek-ai/
|
|
35
|
+
"@deepseek-ai/dsh-agent": "^0.0.1-rc.3",
|
|
36
|
+
"@deepseek-ai/dsh-shell": "^0.0.1-rc.3",
|
|
37
|
+
"@deepseek-ai/dsh-shell-env": "^0.0.1-rc.3",
|
|
38
|
+
"@deepseek-ai/dsh-invariants": "^0.0.1-rc.3",
|
|
39
|
+
"@deepseek-ai/dsh-llm": "^0.0.1-rc.3",
|
|
40
|
+
"@deepseek-ai/dsh-system-prompt": "^0.0.1-rc.3",
|
|
41
|
+
"@deepseek-ai/dsh-jobs": "^0.0.1-rc.3",
|
|
42
|
+
"@deepseek-ai/dsh-tools": "^0.0.1-rc.3",
|
|
43
|
+
"@deepseek-ai/dsh-user-approval": "^0.0.1-rc.3",
|
|
44
|
+
"@deepseek-ai/cordis": "^4.0.1-rc.1",
|
|
45
|
+
"@deepseek-ai/dsh-sandbox": "^0.0.1-rc.3",
|
|
46
|
+
"@deepseek-ai/dsh-sandbox-policy": "^0.0.1-rc.3"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@deepseek-ai/schemastery": "^3.18.1-rc.1"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@deepseek-ai/dsh-agent": "^0.0.1-rc.
|
|
53
|
-
"@deepseek-ai/dsh-agent-loop
|
|
54
|
-
"@deepseek-ai/dsh-agent-loop": "^0.0.1-rc.
|
|
55
|
-
"@deepseek-ai/dsh-
|
|
56
|
-
"@deepseek-ai/dsh-
|
|
57
|
-
"@deepseek-ai/dsh-
|
|
58
|
-
"@deepseek-ai/dsh-llm": "^0.0.1-rc.
|
|
59
|
-
"@deepseek-ai/dsh-
|
|
60
|
-
"@deepseek-ai/dsh-
|
|
61
|
-
"@deepseek-ai/dsh-sandbox
|
|
62
|
-
"@deepseek-ai/dsh-session": "^0.0.1-rc.
|
|
63
|
-
"@deepseek-ai/dsh-session-persistence-jsonl": "^0.0.1-rc.
|
|
64
|
-
"@deepseek-ai/dsh-
|
|
65
|
-
"@deepseek-ai/dsh-
|
|
66
|
-
"@deepseek-ai/dsh-
|
|
67
|
-
"@deepseek-ai/dsh-
|
|
68
|
-
"@deepseek-ai/dsh-
|
|
69
|
-
"@deepseek-ai/dsh-
|
|
70
|
-
"@deepseek-ai/
|
|
71
|
-
"@deepseek-ai/
|
|
52
|
+
"@deepseek-ai/dsh-agent": "^0.0.1-rc.3",
|
|
53
|
+
"@deepseek-ai/dsh-agent-loop": "^0.0.1-rc.3",
|
|
54
|
+
"@deepseek-ai/dsh-agent-loop-testkit": "^0.0.1-rc.3",
|
|
55
|
+
"@deepseek-ai/dsh-shell-env": "^0.0.1-rc.3",
|
|
56
|
+
"@deepseek-ai/dsh-shell": "^0.0.1-rc.3",
|
|
57
|
+
"@deepseek-ai/dsh-bash-local": "^0.0.1-rc.3",
|
|
58
|
+
"@deepseek-ai/dsh-llm": "^0.0.1-rc.3",
|
|
59
|
+
"@deepseek-ai/dsh-invariants": "^0.0.1-rc.3",
|
|
60
|
+
"@deepseek-ai/dsh-subprocess-local": "^0.0.1-rc.3",
|
|
61
|
+
"@deepseek-ai/dsh-sandbox": "^0.0.1-rc.3",
|
|
62
|
+
"@deepseek-ai/dsh-session": "^0.0.1-rc.3",
|
|
63
|
+
"@deepseek-ai/dsh-session-persistence-jsonl": "^0.0.1-rc.3",
|
|
64
|
+
"@deepseek-ai/dsh-sandbox-policy": "^0.0.1-rc.3",
|
|
65
|
+
"@deepseek-ai/dsh-jobs": "^0.0.1-rc.3",
|
|
66
|
+
"@deepseek-ai/dsh-system-prompt": "^0.0.1-rc.3",
|
|
67
|
+
"@deepseek-ai/dsh-jobs-local": "^0.0.1-rc.3",
|
|
68
|
+
"@deepseek-ai/dsh-tool-jobs": "^0.0.1-rc.3",
|
|
69
|
+
"@deepseek-ai/dsh-tools": "^0.0.1-rc.3",
|
|
70
|
+
"@deepseek-ai/dsh-user-approval": "^0.0.1-rc.3",
|
|
71
|
+
"@deepseek-ai/cordis": "^4.0.1-rc.1"
|
|
72
72
|
}
|
|
73
73
|
}
|