@deepseek-ai/dsh-subagent-acp 0.2.1-alpha.1 → 0.2.1-alpha.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 CHANGED
@@ -18,11 +18,11 @@
18
18
  en: 78623be74507229d
19
19
  zh: b0ed9c9d0c6eb040
20
20
  /deepseek-ai-dsh-subagent-acp/use-this-package/when-to-choose-it:
21
- en: 56946ab7637bb8f9
22
- zh: c54c4da98092dd9c
21
+ en: d18adbe82d4a362d
22
+ zh: 3b9c0cca1f67a587
23
23
  /deepseek-ai-dsh-subagent-acp/use-this-package/configuration:
24
- en: 6f5fdf9a955841ce
25
- zh: 7193a3c07fc54199
24
+ en: 8d725f040ad14301
25
+ zh: 379664b42a38b3e5
26
26
  /deepseek-ai-dsh-subagent-acp/use-this-package/what-you-get:
27
27
  en: 0a809bd7b8cebddc
28
28
  zh: e2c1edf8f485e8f8
@@ -39,8 +39,8 @@
39
39
  en: c98e6bcd784bbf8a
40
40
  zh: b96218f6e639755c
41
41
  /deepseek-ai-dsh-subagent-acp/understand-the-implementation/start-and-ownership-flow:
42
- en: c0f7f78468f84c3b
43
- zh: c9cb417d84d868ce
42
+ en: 4a857c21457f917d
43
+ zh: ef980a48deb2fca0
44
44
  /deepseek-ai-dsh-subagent-acp/understand-the-implementation/stop-reason-mapping:
45
45
  en: 88bb2b62c6e2f114
46
46
  zh: f6b720ca8ce90343
@@ -57,8 +57,8 @@
57
57
  en: 05e6180f1498fdf9
58
58
  zh: 2b05d2b97bfa67da
59
59
  /deepseek-ai-dsh-subagent-acp/model-experience/child-agent-request/what-the-model-sees:
60
- en: f7f619ca78d74c6f
61
- zh: f642dc7b4ff69a10
60
+ en: 5d8a1acb2e0510ce
61
+ zh: 34b446c2770f35ff
62
62
  /deepseek-ai-dsh-subagent-acp/model-experience/child-agent-request/token-effect:
63
63
  en: c0b78d334d5d0a9c
64
64
  zh: d54bf504933e132d
@@ -69,17 +69,17 @@
69
69
  en: 75d061c2151624a7
70
70
  zh: 71e58e020b60ff90
71
71
  /deepseek-ai-dsh-subagent-acp/model-experience/parent-tool-result-indirectly/what-the-model-sees:
72
- en: 6779463ffe1c724c
73
- zh: 9797d5910039fd3a
72
+ en: 5e4e3efe7517f782
73
+ zh: 0465e164583f6bc3
74
74
  /deepseek-ai-dsh-subagent-acp/model-experience/parent-tool-result-indirectly/token-effect:
75
- en: 600ac97cdd163650
76
- zh: cd26bb541f56699b
75
+ en: 4fae54e2ff0c4874
76
+ zh: 1574bfe874f66a1f
77
77
  /deepseek-ai-dsh-subagent-acp/model-experience/parent-tool-result-indirectly/kv-cache-effect:
78
78
  en: f5d5f97a153f7c70
79
79
  zh: 3d6bc05b9eadfbc2
80
80
  /deepseek-ai-dsh-subagent-acp/known-limitations-and-deferred-work:
81
- en: 53a0e7fb49fe6e23
82
- zh: 51096d4eb51fb4ba
81
+ en: eb44a9bebc00b3f7
82
+ zh: 6e65866e85086207
83
83
  /deepseek-ai-dsh-subagent-acp/known-limitations-and-deferred-work/dev-note:
84
84
  en: d8323b3200db6ac9
85
85
  zh: f8a5273b887b9552
package/README.md CHANGED
@@ -29,7 +29,7 @@ Mount this provider when a composition needs a fully isolated, out-of-process ch
29
29
 
30
30
  ### When to choose it
31
31
 
32
- Choose this backend when the child must run with its own runtime, model, and tools in a separate process — for example an ACP agent from another project — or when you want delegation that cannot touch the parent harness. Choose an in-process backend when the child must share the parent's composition or honor parent-enforced capabilities: this provider advertises no optional start-time capabilities, so the seam rejects requests for `agentOptions`, structured output, depth caps, tool filters, or personas rather than silently omitting them.
32
+ Choose this backend when the child must run with its own runtime, model, and tools in a separate process — for example an ACP agent from another project — or when you want delegation that cannot touch the parent harness. Choose an in-process backend when the child must share the parent's composition or honor parent-enforced capabilities: this provider advertises no optional start-time capabilities, so the seam rejects requests for `agentPreset`, `agentOptions`, structured output, or depth caps rather than silently omitting them.
33
33
 
34
34
  ### Configuration
35
35
 
@@ -38,7 +38,6 @@ Choose this backend when the child must run with its own runtime, model, and too
38
38
  | `providerName` | `acp` | Registry name on `ctx.subagents` |
39
39
  | `command` | required | Executable spawned for each run (the child ACP agent) |
40
40
  | `args` | `[]` | Command arguments |
41
- | `cwd` | parent session cwd | Working-directory override for the child process and its ACP session |
42
41
  | `permission` | `reject` | Auto-answer permission requests by rejecting, or choosing the first `allow_once` or `allow_always` option (`allow`) |
43
42
  | `env` | `{}` | Explicit child environment layered over the credential-scrubbed parent environment |
44
43
  | `disposeEofGraceMs` | `6000` | Grace after stdin EOF before platform termination |
@@ -91,7 +90,7 @@ This section explains how the backend drives a child over ACP and where the obse
91
90
 
92
91
  ### Start and ownership flow
93
92
 
94
- A start resolves the child's working directory (the configured `cwd` override, else the parent session's cwd), spawns the command through the subprocess seam, performs the ACP `initialize` and `newSession` handshake, and only then publishes the run. Fulfillment means a remote session is ready and ownership has transferred to the caller. Disposal is idempotent: it closes stdin and waits a configured grace for cooperative quiescence, then escalates through SIGTERM to SIGKILL and awaits whole-range exit. Cleanup failures remain observable as ordered safe facts and never claim quiescence.
93
+ Startup uses the manager-resolved child directory (the request override, else the parent's current effective directory), spawns the command through the subprocess seam, performs the ACP `initialize` and `newSession` handshake, and only then publishes the run. Fulfillment transfers the external run to the activation manager. The startup signal detaches after acceptance; the activation receipt cancels execution and awaits cleanup. Each activation runs one task and cannot receive follow-up input. Disposal is idempotent: it closes stdin and waits a configured grace for cooperative quiescence, then escalates through SIGTERM to SIGKILL and awaits whole-range exit. Cleanup failures remain observable as ordered safe facts and never claim quiescence.
95
94
 
96
95
  ### Stop-reason mapping
97
96
 
@@ -125,7 +124,7 @@ Read these pages when the package-level contract is not enough. They move from t
125
124
 
126
125
  #### What the model sees
127
126
 
128
- The remote child receives the standalone task content through ACP plus its own process's configured system prompt, tools, and fresh session. It receives no parent conversation. This provider advertises no optional start-time capabilities, so the local service rejects requests for `agentOptions`, persona, tool filtering, depth enforcement, or structured output instead of silently omitting them.
127
+ The remote child receives the standalone task content through ACP plus its own process's configured system prompt, tools, and fresh session. It receives no parent conversation. This provider advertises no optional start-time capabilities, so the local service rejects requests for `agentPreset`, `agentOptions`, depth enforcement, or structured output instead of silently omitting them.
129
128
 
130
129
  #### Token effect
131
130
 
@@ -139,11 +138,11 @@ Independent of the parent request cache. Each ACP child can reuse only prefixes
139
138
 
140
139
  #### What the model sees
141
140
 
142
- Through `dsh-tool-subagent`, the parent receives only the child's final streamed assistant text or that consumer's exact stop-reason error, not intermediate messages or tool traffic. Non-completed results present the safe diagnostic before separately preserved partial assistant output. A request already cancelled before publication becomes exactly `Error: subagent request was aborted before the ACP child started`; another start failure contains only the fixed `Subagent failure (...)` line.
141
+ Through `dsh-tool-subagent`, the parent model first receives a child id, then a completion notice containing final or partial assistant text, the stop reason, and safe diagnostic. The parent Session independently retains the external task identity and complete terminal result. Intermediate messages and tool traffic do not enter the parent Session.
143
142
 
144
143
  #### Token effect
145
144
 
146
- Parent input grows only by the final result or error, which is data-dependent and retained until compaction. This provider adds no parent schema itself.
145
+ Parent input grows by the start acknowledgement and completion notice, whose size depends on the result data and persists until compaction. This provider adds no parent schema by itself.
147
146
 
148
147
  #### KV Cache effect
149
148
 
@@ -158,7 +157,7 @@ These limits define when this backend is a poor fit or needs special operational
158
157
 
159
158
  - **A fresh process per run** — there is no process pooling; each delegation pays the full spawn and ACP handshake cost.
160
159
  - **Local workspaces only** — the resolved working directory is a local path handed to a child on the same machine; remote workspace mapping is not designed.
161
- - **No optional start-time capabilities** — this provider cannot apply `agentOptions`, `outputSchema`, a depth cap, a tool filter, or a persona inside the remote process, so the seam rejects requests that require them.
160
+ - **No optional start-time capabilities** — this provider cannot apply `agentPreset`, `agentOptions`, `outputSchema`, or a depth cap inside the remote process, so the seam rejects requests that require them.
162
161
  - **Only committed `agent_message_chunk` text is collected** — the automation server keeps reasoning, tool activity, plans, and other trace data in the child session log rather than emitting them on ACP.
163
162
  - **Permission prompts are auto-answered** (`permission: allow | reject`) — no human is surfaced a child's `session/request_permission`.
164
163
 
package/README.zh.md CHANGED
@@ -29,7 +29,7 @@ kind: "package-reference"
29
29
 
30
30
  ### 何时选择
31
31
 
32
- 当子 agent 必须在独立进程中运行、拥有自己的运行时、模型和工具时选择此后端——例如来自其他项目的 ACP agent——或者你希望委派完全无法触及父 harness 时。当子 agent 必须共享父级组合或遵守父级强制执行的能力约束时,请选择进程内后端:本提供方不声明任何可选启动时能力,因此 seam 会拒绝要求 `agentOptions`、结构化输出、深度上限、工具过滤或 persona 的请求,而不是静默省略。
32
+ 当子 agent 必须在独立进程中运行、拥有自己的运行时、模型和工具时选择此后端——例如来自其他项目的 ACP agent——或者你希望委派完全无法触及父 harness 时。当子 agent 必须共享父级组合或遵守父级强制执行的能力约束时,请选择进程内后端:本提供方不声明任何可选启动时能力,因此 seam 会拒绝要求 `agentPreset`、`agentOptions`、结构化输出或深度上限 的请求,而不是静默省略。
33
33
 
34
34
  ### 配置
35
35
 
@@ -38,7 +38,6 @@ kind: "package-reference"
38
38
  | `providerName` | `acp` | `ctx.subagents` 上的注册表名称 |
39
39
  | `command` | 必填 | 每次运行时 spawn 的可执行文件(子 ACP agent) |
40
40
  | `args` | `[]` | 命令参数 |
41
- | `cwd` | 父会话 cwd | 子进程及其 ACP 会话的工作目录覆盖值 |
42
41
  | `permission` | `reject` | 自动应答权限请求:拒绝,或选择第一个 `allow_once` 或 `allow_always` 选项(`allow`) |
43
42
  | `env` | `{}` | 叠加在已清理凭据的父环境之上的显式子环境 |
44
43
  | `disposeEofGraceMs` | `6000` | stdin EOF 之后、平台终止之前的宽限 |
@@ -91,7 +90,7 @@ spawn、初始化或新建会话失败会在发布前拒绝,通常先证明 ma
91
90
 
92
91
  ### 启动与所有权流程
93
92
 
94
- 一次启动先解析子 agent 的工作目录(配置的 `cwd` 覆盖值,否则取父会话 cwd),经子进程 seam spawn 命令,完成 ACP `initialize` 与 `newSession` 握手,然后才发布运行。兑现意味着远程会话已就绪、所有权已转移给调用方。dispose(资源释放)是幂等的:先关闭 stdin 并按配置的宽限等待协作式完全停稳,再经 SIGTERM 升级到 SIGKILL,并等待整个 managed range 退出。清理失败会作为有序的安全事实保持可观察,且绝不声称已经完全停稳。
93
+ 一次启动使用管理器解析的子 agent 工作目录(请求覆盖值,否则取父级当前有效目录),经子进程 seam spawn 命令,完成 ACP `initialize` 与 `newSession` 握手,然后才发布运行。兑现后,外部运行由 activation 管理器接管。任务接受后会解除启动信号的绑定;activation 凭据用于取消执行并等待清理。每个 activation 只运行一个任务,不能接收追加输入。dispose(资源释放)是幂等的:先关闭 stdin 并按配置的宽限等待协作式完全停稳,再经 SIGTERM 升级到 SIGKILL,并等待整个 managed range 退出。清理失败会作为有序的安全事实保持可观察,且绝不声称已经完全停稳。
95
94
 
96
95
  ### 停止原因映射
97
96
 
@@ -125,7 +124,7 @@ spawn、初始化或新建会话失败会在发布前拒绝,通常先证明 ma
125
124
 
126
125
  #### 模型看到什么
127
126
 
128
- 远程子 agent 通过 ACP 接收独立任务内容,并使用其自身进程配置的系统提示词、工具和全新会话。它不接收父级对话。本提供方不声明可选启动时能力,因此本地服务会拒绝要求 `agentOptions`、persona、工具过滤、深度强制或结构化输出的请求,而不是静默省略。
127
+ 远程子 agent 通过 ACP 接收独立任务内容,并使用其自身进程配置的系统提示词、工具和全新会话。它不接收父级对话。本提供方不声明可选启动时能力,因此本地服务会拒绝要求 `agentPreset`、`agentOptions`、深度强制或结构化输出的请求,而不是静默省略。
129
128
 
130
129
  #### Token 影响
131
130
 
@@ -139,11 +138,11 @@ spawn、初始化或新建会话失败会在发布前拒绝,通常先证明 ma
139
138
 
140
139
  #### 模型看到什么
141
140
 
142
- 通过 `dsh-tool-subagent`,父级只接收子 agent 最终的流式 assistant 文本或该消费方给出的精确停止原因错误,不接收中间消息或工具流量。未完成的结果会先呈现安全诊断,再单独保留部分 assistant 输出。发布前已经取消的请求会精确变为 `Error: subagent request was aborted before the ACP child started`;其他启动失败只包含固定的 `Subagent failure (...)` 行。
141
+ 通过 `dsh-tool-subagent`,父模型先收到 child id,随后收到含最终或部分 assistant 文本、停止原因与安全诊断的完成通知。父会话独立保存外部任务身份和完整终态结果。中间消息与工具通信不进入父会话。
143
142
 
144
143
  #### Token 影响
145
144
 
146
- 父级输入只增加最终结果或错误,其内容依赖数据,并保留到压缩(compaction)为止。本提供方自身不会添加父级 schema。
145
+ 父级输入增加启动确认与完成通知,内容大小取决于数据,并保留到压缩(compaction)为止。本提供方自身不会向父级添加任何 schema。
147
146
 
148
147
  #### KV Cache 影响
149
148
 
@@ -158,7 +157,7 @@ spawn、初始化或新建会话失败会在发布前拒绝,通常先证明 ma
158
157
 
159
158
  - **每次运行使用全新进程**——没有进程池;每次委派都要付出完整的 spawn 与 ACP 握手成本。
160
159
  - **仅支持本地工作区**——解析后的工作目录是交给同一台机器上子进程的本地路径;远程工作区映射尚未设计。
161
- - **不支持可选启动时能力**——本提供方无法在远程进程内应用 `agentOptions`、`outputSchema`、深度上限、工具过滤器或 persona,因此 seam 会拒绝需要它们的请求。
160
+ - **不支持可选启动时能力**——本提供方无法在远程进程内应用 `agentPreset`、`agentOptions`、`outputSchema` 或深度上限,因此 seam 会拒绝需要它们的请求。
162
161
  - **只收集已提交的 `agent_message_chunk` 文本**——自动化服务器把推理(reasoning)、工具活动、计划和其他 trace 数据保留在子 agent 会话日志中,不通过 ACP 发出。
163
162
  - **权限提示自动应答**(`permission: allow | reject`)——不会把子 agent 的 `session/request_permission` 呈现给人。
164
163
 
package/lib/index.js CHANGED
@@ -1,12 +1,10 @@
1
- import { accessSync, constants, statSync } from "node:fs";
2
- import { isAbsolute, resolve } from "node:path";
3
1
  import z from "@deepseek-ai/schemastery";
2
+ import { AssistantOutputFold, assertUsableCwd, settleRunResult, subprocessRunHandle } from "@deepseek-ai/dsh-subagent";
4
3
  import { MAX_TIMER_DELAY_MS } from "@deepseek-ai/dsh-timeout";
5
4
  import { randomUUID } from "node:crypto";
6
5
  import { Readable, Writable } from "node:stream";
7
6
  import { PROTOCOL_VERSION, client, methods, ndJsonStream } from "@agentclientprotocol/sdk";
8
7
  import { brandString } from "@deepseek-ai/dsh-brand";
9
- import { AssistantOutputFold, settleRunResult, subprocessRunHandle } from "@deepseek-ai/dsh-subagent";
10
8
  //#region lib/types/run.js
11
9
  /**
12
10
  * Fresh-process ACP subagent client. Drives one child session and owns cancellation and
@@ -434,8 +432,8 @@ async function startAcpRun(request, spec) {
434
432
  /**
435
433
  * Out-of-process ACP subagent backend. Each child has its own process, session, model, and
436
434
  * tools, so it shares no Cordis context and advertises no parent-enforced start capabilities;
437
- * the ONE thing it reads off `request.parent` is the session's workspace cwd (see
438
- * {@link resolveCwd}). This plugin uses named exports only; a default would hide its
435
+ * the subagent service supplies the captured child working directory. This plugin uses
436
+ * named exports only; a default would hide its
439
437
  * loader metadata (see `docs/postmortem/0001-acp-default-export-drops-inject.md`).
440
438
  * @module @deepseek-ai/dsh-subagent-acp
441
439
  */
@@ -445,7 +443,6 @@ const Config = z.object({
445
443
  providerName: z.string().default("acp"),
446
444
  command: z.string().required(),
447
445
  args: z.array(z.string()).default([]),
448
- cwd: z.string(),
449
446
  permission: z.union(["allow", "reject"]).default("reject"),
450
447
  env: z.dict(z.string()).default({}),
451
448
  disposeEofGraceMs: z.number().default(DEFAULT_DISPOSE_EOF_GRACE_MS),
@@ -456,51 +453,9 @@ function assertPositiveFinite(name, value) {
456
453
  if (!Number.isFinite(value) || value <= 0 || value > MAX_TIMER_DELAY_MS) throw new Error(`subagent-acp: ${name} must be a positive finite number no greater than ${MAX_TIMER_DELAY_MS}`);
457
454
  }
458
455
  /**
459
- * Whether `path` names an existing directory the harness can ENTER. The
460
- * search-permission probe matters: `statSync().isDirectory()` is true for a
461
- * mode-600 directory, but a subprocess cwd needs `X_OK` or spawn fails EACCES.
462
- */
463
- function isDirectory(path) {
464
- try {
465
- if (!statSync(path).isDirectory()) return false;
466
- accessSync(path, constants.X_OK);
467
- return true;
468
- } catch {
469
- return false;
470
- }
471
- }
472
- /**
473
- * Assert `cwd` can actually host the child: absolute (it doubles as the ACP
474
- * session workspace, and a relative path would be re-anchored to the server
475
- * process's launch directory) and an existing directory (fail here, before the
476
- * process boundary, instead of as an ambiguous spawn ENOENT).
477
- * @param label - which source supplied the value, for the diagnostic.
478
- * @param cwd - the candidate working directory.
479
- * @returns `cwd`, validated.
480
- */
481
- function assertUsableCwd(label, cwd) {
482
- if (!isAbsolute(cwd)) throw new Error(`subagent-acp: ${label} must be an absolute path: ${cwd}`);
483
- if (!isDirectory(cwd)) throw new Error(`subagent-acp: ${label} is not an accessible directory: ${cwd}`);
484
- return cwd;
485
- }
486
- /**
487
- * Resolve the child's working directory: the deployment `cwd` override when
488
- * configured (already validated at load), else the parent session's workspace
489
- * cwd (validated here, its earliest resolvable point). Fails loud when neither
490
- * exists — falling back to the harness process cwd would silently bind the
491
- * child to the server's launch directory instead of the delegating session's
492
- * workspace (one server process serves many sessions, each with its own cwd).
493
- */
494
- function resolveCwd(configured, request) {
495
- if (configured !== void 0) return configured;
496
- const parentCwd = request.parent.session.header.cwd;
497
- if (parentCwd === void 0) throw new Error("subagent-acp: no working directory for the child — configure `cwd` or delegate from a parent session that has one");
498
- return assertUsableCwd("parent session cwd", parentCwd);
499
- }
500
- /**
501
456
  * The ACP provider. Advertises NO start-time capabilities: an out-of-process
502
- * child cannot honor `agentOptions`/`outputSchema`/`maxDepth`/`toolFilter`/
503
- * `persona` (the service rejects a request needing any before `start` runs).
457
+ * child cannot honor `agentOptions`/`agentPreset`/`outputSchema`/`maxDepth`.
458
+ * The service rejects a request needing any before execution starts.
504
459
  */
505
460
  var AcpProvider = class {
506
461
  name;
@@ -508,10 +463,9 @@ var AcpProvider = class {
508
463
  config;
509
464
  capabilities = {
510
465
  agentOptions: false,
466
+ agentPreset: false,
511
467
  outputSchema: false,
512
- depthLimit: false,
513
- toolFilter: false,
514
- persona: false
468
+ depthLimit: false
515
469
  };
516
470
  inheritsParentContext = false;
517
471
  constructor(name, ctx, config) {
@@ -523,7 +477,7 @@ var AcpProvider = class {
523
477
  if (request.signal.aborted) throw new Error("subagent request was aborted before the ACP child started");
524
478
  let cwd;
525
479
  try {
526
- cwd = resolveCwd(this.config.cwd, request);
480
+ cwd = assertUsableCwd("subagent-acp", "child cwd", request.cwd);
527
481
  } catch (error) {
528
482
  const failure = acpConfigurationFailure(error);
529
483
  this.ctx.logger.warn(`subagent-acp "${this.name}": child start failed: %o`, error);
@@ -548,12 +502,7 @@ function apply(ctx, config) {
548
502
  const resolved = config;
549
503
  assertPositiveFinite("disposeEofGraceMs", resolved.disposeEofGraceMs);
550
504
  assertPositiveFinite("disposeGraceMs", resolved.disposeGraceMs);
551
- if (resolved.cwd === "") throw new Error("subagent-acp: config cwd must not be empty — omit the key to inherit the parent session cwd");
552
- const validated = resolved.cwd === void 0 ? resolved : {
553
- ...resolved,
554
- cwd: assertUsableCwd("config cwd", resolve(resolved.cwd))
555
- };
556
- ctx.subagents.registerProvider(new AcpProvider(validated.providerName, ctx, validated));
505
+ ctx.subagents.registerProvider(new AcpProvider(resolved.providerName, ctx, resolved));
557
506
  }
558
507
  //#endregion
559
508
  export { Config, apply, inject, name };
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Out-of-process ACP subagent backend. Each child has its own process, session, model, and
3
3
  * tools, so it shares no Cordis context and advertises no parent-enforced start capabilities;
4
- * the ONE thing it reads off `request.parent` is the session's workspace cwd (see
5
- * {@link resolveCwd}). This plugin uses named exports only; a default would hide its
4
+ * the subagent service supplies the captured child working directory. This plugin uses
5
+ * named exports only; a default would hide its
6
6
  * loader metadata (see `docs/postmortem/0001-acp-default-export-drops-inject.md`).
7
7
  * @module @deepseek-ai/dsh-subagent-acp
8
8
  */
@@ -19,14 +19,6 @@ export interface Config {
19
19
  command: string;
20
20
  /** Arguments passed to {@link command}. */
21
21
  args: string[];
22
- /**
23
- * Working directory override for the child process and its ACP session.
24
- * Must be non-empty; a relative path resolves against the harness launch
25
- * directory at load, and the result must be an existing directory. When
26
- * omitted, each child inherits its delegating parent session's cwd — and
27
- * starting one from a parent session that has no cwd fails.
28
- */
29
- cwd?: string;
30
22
  /**
31
23
  * How to auto-answer the child's `session/request_permission` prompts:
32
24
  * `reject` (default — decline every prompt) or `allow` (approve via the first
@@ -18,8 +18,7 @@ export interface AcpRunSpec {
18
18
  args: string[];
19
19
  /**
20
20
  * Absolute working directory for the child process AND its ACP session
21
- * `cwd`. The provider resolves it before this spec exists: config override,
22
- * else the delegating parent session's workspace.
21
+ * `cwd`, selected before provider startup.
23
22
  */
24
23
  cwd: string;
25
24
  /** How to auto-answer the child's permission prompts. */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-subagent-acp",
3
3
  "description": "Out-of-process ACP subagent backend: drives a child agent in a spawned subprocess over the Agent Client Protocol",
4
- "version": "0.2.1-alpha.1",
4
+ "version": "0.2.1-alpha.3",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -27,34 +27,34 @@
27
27
  ],
28
28
  "license": "MIT",
29
29
  "peerDependencies": {
30
- "@deepseek-ai/cordis": "~4.0.5-alpha.1",
31
- "@deepseek-ai/dsh-agent": "0.2.1-alpha.1",
32
- "@deepseek-ai/dsh-session": "0.2.1-alpha.1",
33
- "@deepseek-ai/dsh-subagent": "0.2.1-alpha.1",
34
- "@deepseek-ai/dsh-subprocess": "0.2.1-alpha.1",
35
- "@deepseek-ai/dsh-timeout": "0.2.1-alpha.1",
36
- "@deepseek-ai/dsh-llm": "0.2.1-alpha.1"
30
+ "@deepseek-ai/cordis": "~4.0.5-alpha.2",
31
+ "@deepseek-ai/dsh-agent": "0.2.1-alpha.3",
32
+ "@deepseek-ai/dsh-llm": "0.2.1-alpha.3",
33
+ "@deepseek-ai/dsh-session": "0.2.1-alpha.3",
34
+ "@deepseek-ai/dsh-subagent": "0.2.1-alpha.3",
35
+ "@deepseek-ai/dsh-subprocess": "0.2.1-alpha.3",
36
+ "@deepseek-ai/dsh-timeout": "0.2.1-alpha.3"
37
37
  },
38
38
  "dependencies": {
39
39
  "@agentclientprotocol/sdk": "1.4.0",
40
- "@deepseek-ai/schemastery": "~3.18.5-alpha.1",
41
- "@deepseek-ai/dsh-brand": "0.2.1-alpha.1"
40
+ "@deepseek-ai/dsh-brand": "0.2.1-alpha.3",
41
+ "@deepseek-ai/schemastery": "~3.18.5-alpha.2"
42
42
  },
43
43
  "devDependencies": {
44
- "@deepseek-ai/cordis": "~4.0.5-alpha.1",
45
- "@deepseek-ai/cordis-plugin-loader": "~1.0.6-alpha.1",
46
- "@deepseek-ai/dsh-agent": "0.2.1-alpha.1",
47
- "@deepseek-ai/dsh-app-boot": "0.2.1-alpha.1",
48
- "@deepseek-ai/dsh-llm": "0.2.1-alpha.1",
49
- "@deepseek-ai/dsh-loader-smoke": "0.2.1-alpha.1",
50
- "@deepseek-ai/dsh-session": "0.2.1-alpha.1",
51
- "@deepseek-ai/dsh-session-checkpoint-policy": "0.2.1-alpha.1",
52
- "@deepseek-ai/dsh-session-persistence-jsonl": "0.2.1-alpha.1",
53
- "@deepseek-ai/dsh-session-projection": "0.2.1-alpha.1",
54
- "@deepseek-ai/dsh-subagent": "0.2.1-alpha.1",
55
- "@deepseek-ai/dsh-subprocess": "0.2.1-alpha.1",
56
- "@deepseek-ai/dsh-subprocess-local": "0.2.1-alpha.1",
57
- "@deepseek-ai/dsh-tool-subagent": "0.2.1-alpha.1",
58
- "@deepseek-ai/dsh-timeout": "0.2.1-alpha.1"
44
+ "@deepseek-ai/cordis": "~4.0.5-alpha.2",
45
+ "@deepseek-ai/cordis-plugin-loader": "~1.0.6-alpha.2",
46
+ "@deepseek-ai/dsh-agent": "0.2.1-alpha.3",
47
+ "@deepseek-ai/dsh-app-boot": "0.2.1-alpha.3",
48
+ "@deepseek-ai/dsh-llm": "0.2.1-alpha.3",
49
+ "@deepseek-ai/dsh-loader-smoke": "0.2.1-alpha.3",
50
+ "@deepseek-ai/dsh-session": "0.2.1-alpha.3",
51
+ "@deepseek-ai/dsh-session-checkpoint-policy": "0.2.1-alpha.3",
52
+ "@deepseek-ai/dsh-session-persistence-jsonl": "0.2.1-alpha.3",
53
+ "@deepseek-ai/dsh-session-projection": "0.2.1-alpha.3",
54
+ "@deepseek-ai/dsh-subagent": "0.2.1-alpha.3",
55
+ "@deepseek-ai/dsh-subprocess": "0.2.1-alpha.3",
56
+ "@deepseek-ai/dsh-subprocess-local": "0.2.1-alpha.3",
57
+ "@deepseek-ai/dsh-timeout": "0.2.1-alpha.3",
58
+ "@deepseek-ai/dsh-tool-subagent": "0.2.1-alpha.3"
59
59
  }
60
60
  }