@finityno/claude-code-acp 0.13.7 → 0.15.0

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.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  > **Fork of [@zed-industries/claude-code-acp](https://github.com/zed-industries/claude-code-acp)**
6
6
  >
7
- > This fork adds support for **subagent (Task tool) tracking** and will soon include **AskUserQuestion tool** support.
7
+ > This fork adds support for **subagent (Task tool) tracking** and **AskUserQuestion tool** support.
8
8
 
9
9
  Use [Claude Code](https://www.anthropic.com/claude-code) from [ACP-compatible](https://agentclientprotocol.com) clients such as [Zed](https://zed.dev)!
10
10
 
@@ -34,6 +34,7 @@ This adapter implements an ACP agent using the official [Claude Agent SDK](https
34
34
  - Custom [Slash commands](https://docs.anthropic.com/en/docs/claude-code/slash-commands)
35
35
  - Client MCP servers
36
36
  - **Subagent tracking** (Task tool lifecycle events)
37
+ - **AskUserQuestion** (Claude can ask clarifying questions)
37
38
 
38
39
  ## Subagent Tracking
39
40
 
@@ -66,6 +67,38 @@ tracker.getStats(); // Counts & avg duration
66
67
 
67
68
  See [docs/subagent-tracking.md](docs/subagent-tracking.md) for full API documentation.
68
69
 
70
+ ## AskUserQuestion
71
+
72
+ Claude can ask clarifying questions during execution. Questions are presented via the ACP permission request system:
73
+
74
+ ```typescript
75
+ // Claude sends a question like:
76
+ {
77
+ "question": "Which testing framework should we use?",
78
+ "header": "Testing",
79
+ "options": [
80
+ { "label": "Jest", "description": "Popular JavaScript testing framework" },
81
+ { "label": "Vitest", "description": "Vite-native, fast testing framework" }
82
+ ],
83
+ "multiSelect": false
84
+ }
85
+
86
+ // User selects an option, Claude receives:
87
+ {
88
+ "answers": {
89
+ "Which testing framework should we use?": "Vitest"
90
+ }
91
+ }
92
+ ```
93
+
94
+ Features:
95
+ - Multiple questions per request (1-4)
96
+ - 2-4 options per question with labels and descriptions
97
+ - MultiSelect support for non-mutually-exclusive choices
98
+ - "Other" option for free-text input
99
+
100
+ See [docs/ask-user-question.md](docs/ask-user-question.md) for ACP client integration details.
101
+
69
102
  ## Usage
70
103
 
71
104
  ### With Zed
@@ -19,6 +19,10 @@ type Session = {
19
19
  cancelled: boolean;
20
20
  permissionMode: PermissionMode;
21
21
  settingsManager: SettingsManager;
22
+ approvedBashPrompts?: Array<{
23
+ tool: string;
24
+ prompt: string;
25
+ }>;
22
26
  };
23
27
  type BackgroundTerminal = {
24
28
  handle: TerminalHandle;
@@ -87,6 +91,10 @@ export declare class ClaudeAcpAgent implements Agent {
87
91
  authenticate(_params: AuthenticateRequest): Promise<void>;
88
92
  prompt(params: PromptRequest): Promise<PromptResponse>;
89
93
  cancel(params: CancelNotification): Promise<void>;
94
+ /**
95
+ * Handle SDK task notification for background tasks
96
+ */
97
+ private handleTaskNotification;
90
98
  unstable_setSessionModel(params: SetSessionModelRequest): Promise<SetSessionModelResponse | void>;
91
99
  setSessionMode(params: SetSessionModeRequest): Promise<SetSessionModeResponse>;
92
100
  readTextFile(params: ReadTextFileRequest): Promise<ReadTextFileResponse>;
@@ -1 +1 @@
1
- {"version":3,"file":"acp-agent.d.ts","sourceRoot":"","sources":["../src/acp-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acp-agent.d.ts","sourceRoot":"","sources":["../src/acp-agent.ts"],"names":[],"mappings":"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"}
package/dist/acp-agent.js CHANGED
@@ -122,9 +122,15 @@ export class ClaudeAcpAgent {
122
122
  break;
123
123
  case "compact_boundary":
124
124
  case "hook_response":
125
+ case "hook_started":
126
+ case "hook_progress":
125
127
  case "status":
126
128
  // Todo: process via status api: https://docs.claude.com/en/docs/claude-code/hooks#hook-output
127
129
  break;
130
+ case "task_notification":
131
+ // Handle SDK task notification for background tasks
132
+ await this.handleTaskNotification(message, params.sessionId);
133
+ break;
128
134
  default:
129
135
  unreachable(message, this.logger);
130
136
  break;
@@ -237,6 +243,19 @@ export class ClaudeAcpAgent {
237
243
  }
238
244
  await this.sessions[params.sessionId].query.interrupt();
239
245
  }
246
+ /**
247
+ * Handle SDK task notification for background tasks
248
+ */
249
+ async handleTaskNotification(message, sessionId) {
250
+ // Update the subagent tracker
251
+ await this.subagentTracker.handleTaskNotification({
252
+ task_id: message.task_id,
253
+ status: message.status,
254
+ output_file: message.output_file,
255
+ summary: message.summary,
256
+ });
257
+ this.logger.log(`[ACP] Task notification: ${message.task_id} -> ${message.status}`);
258
+ }
240
259
  async unstable_setSessionModel(params) {
241
260
  if (!this.sessions[params.sessionId]) {
242
261
  throw new Error("Session not found");
@@ -285,8 +304,25 @@ export class ClaudeAcpAgent {
285
304
  };
286
305
  }
287
306
  if (toolName === "ExitPlanMode") {
307
+ // Parse allowedPrompts from the tool input
308
+ const exitPlanInput = toolInput;
309
+ const allowedPrompts = exitPlanInput.allowedPrompts || [];
310
+ // Format requested permissions for display
311
+ const toolCallContent = [];
312
+ if (allowedPrompts.length > 0) {
313
+ const permissionLines = allowedPrompts.map((p) => ` - ${p.tool}(prompt: ${p.prompt})`);
314
+ toolCallContent.push({
315
+ type: "text",
316
+ text: `**Requested permissions:**\n${permissionLines.join("\n")}`,
317
+ });
318
+ }
288
319
  const response = await this.client.requestPermission({
289
320
  options: [
321
+ {
322
+ kind: "allow_always",
323
+ name: "Yes, clear context and auto-accept edits",
324
+ optionId: "clearAndAcceptEdits",
325
+ },
290
326
  {
291
327
  kind: "allow_always",
292
328
  name: "Yes, and auto-accept edits",
@@ -300,26 +336,52 @@ export class ClaudeAcpAgent {
300
336
  toolCallId: toolUseID,
301
337
  rawInput: toolInput,
302
338
  title: toolInfoFromToolUse({ name: toolName, input: toolInput }).title,
339
+ content: toolCallContent.length > 0 ? toolCallContent : undefined,
303
340
  },
341
+ _meta: allowedPrompts.length > 0 ? { requestedPermissions: allowedPrompts } : undefined,
304
342
  });
305
343
  if (signal.aborted || response.outcome?.outcome === "cancelled") {
306
344
  throw new Error("Tool use aborted");
307
345
  }
308
- if (response.outcome?.outcome === "selected" &&
309
- (response.outcome.optionId === "default" || response.outcome.optionId === "acceptEdits")) {
310
- session.permissionMode = response.outcome.optionId;
346
+ const selectedOption = response.outcome?.outcome === "selected" ? response.outcome.optionId : null;
347
+ if (selectedOption === "default" || selectedOption === "acceptEdits" || selectedOption === "clearAndAcceptEdits") {
348
+ // Store approved bash prompts in session
349
+ if (allowedPrompts.length > 0) {
350
+ session.approvedBashPrompts = allowedPrompts;
351
+ }
352
+ // Determine the permission mode based on selection
353
+ const permissionMode = selectedOption === "default" ? "default" : "acceptEdits";
354
+ session.permissionMode = permissionMode;
311
355
  await this.client.sessionUpdate({
312
356
  sessionId,
313
357
  update: {
314
358
  sessionUpdate: "current_mode_update",
315
- currentModeId: response.outcome.optionId,
359
+ currentModeId: permissionMode,
316
360
  },
317
361
  });
362
+ // Handle context clearing if requested
363
+ if (selectedOption === "clearAndAcceptEdits") {
364
+ // Get the plan content from the tool input to preserve it after clearing
365
+ const planFilePath = toolInput.planFilePath;
366
+ const compactInstructions = planFilePath
367
+ ? `Keep a summary of the implementation plan. The user has approved the plan and wants to start coding. The plan file is at: ${planFilePath}`
368
+ : "Keep a summary of the implementation plan. The user has approved the plan and wants to start coding.";
369
+ // Send a synthetic message to trigger compact
370
+ session.input.push({
371
+ type: "user",
372
+ message: {
373
+ role: "user",
374
+ content: `/compact ${compactInstructions}`,
375
+ },
376
+ parent_tool_use_id: null,
377
+ session_id: sessionId,
378
+ });
379
+ }
318
380
  return {
319
381
  behavior: "allow",
320
382
  updatedInput: toolInput,
321
383
  updatedPermissions: suggestions ?? [
322
- { type: "setMode", mode: response.outcome.optionId, destination: "session" },
384
+ { type: "setMode", mode: permissionMode, destination: "session" },
323
385
  ],
324
386
  };
325
387
  }
@@ -331,6 +393,71 @@ export class ClaudeAcpAgent {
331
393
  };
332
394
  }
333
395
  }
396
+ if (toolName === "AskUserQuestion") {
397
+ const input = toolInput;
398
+ const answers = {};
399
+ // Process each question sequentially
400
+ for (const question of input.questions || []) {
401
+ // Build permission options from question options
402
+ const permissionOptions = question.options.map((opt) => ({
403
+ kind: "allow_once",
404
+ name: `${opt.label} - ${opt.description}`,
405
+ optionId: opt.label,
406
+ }));
407
+ // Add "Other" option for free-text input
408
+ permissionOptions.push({
409
+ kind: "allow_once",
410
+ name: "Other (type custom answer)",
411
+ optionId: "__other__",
412
+ });
413
+ const response = await this.client.requestPermission({
414
+ options: permissionOptions,
415
+ sessionId,
416
+ toolCall: {
417
+ toolCallId: toolUseID,
418
+ rawInput: { question: question.question, header: question.header },
419
+ title: question.header || "Question",
420
+ },
421
+ _meta: {
422
+ claudeCode: {
423
+ questionType: "askUserQuestion",
424
+ multiSelect: question.multiSelect,
425
+ },
426
+ },
427
+ });
428
+ if (signal.aborted || response.outcome?.outcome === "cancelled") {
429
+ return {
430
+ behavior: "deny",
431
+ message: "User cancelled the question",
432
+ interrupt: true,
433
+ };
434
+ }
435
+ if (response.outcome?.outcome === "selected") {
436
+ const selectedId = response.outcome.optionId;
437
+ if (selectedId === "__other__") {
438
+ // Handle free-text - ACP client should provide custom text in _meta
439
+ const customText = response.outcome._meta?.customText ||
440
+ "Other";
441
+ answers[question.question] = customText;
442
+ }
443
+ else if (question.multiSelect) {
444
+ // For multiSelect, collect all selected labels
445
+ const existing = answers[question.question];
446
+ answers[question.question] = existing ? `${existing}, ${selectedId}` : selectedId;
447
+ }
448
+ else {
449
+ answers[question.question] = selectedId;
450
+ }
451
+ }
452
+ }
453
+ return {
454
+ behavior: "allow",
455
+ updatedInput: {
456
+ questions: input.questions,
457
+ answers,
458
+ },
459
+ };
460
+ }
334
461
  if (session.permissionMode === "bypassPermissions" ||
335
462
  (session.permissionMode === "acceptEdits" && EDIT_TOOL_NAMES.includes(toolName))) {
336
463
  return {
@@ -341,6 +468,26 @@ export class ClaudeAcpAgent {
341
468
  ],
342
469
  };
343
470
  }
471
+ // Check if Bash command matches approved prompts from plan mode
472
+ if (toolName === "Bash" && session.approvedBashPrompts && session.approvedBashPrompts.length > 0) {
473
+ const bashInput = toolInput;
474
+ const description = bashInput.description || "";
475
+ // Substring match: if any approved prompt appears in the command description
476
+ const matchesApprovedPrompt = session.approvedBashPrompts.some((prompt) => {
477
+ if (prompt.tool !== "Bash")
478
+ return false;
479
+ return description.toLowerCase().includes(prompt.prompt.toLowerCase());
480
+ });
481
+ if (matchesApprovedPrompt) {
482
+ return {
483
+ behavior: "allow",
484
+ updatedInput: toolInput,
485
+ updatedPermissions: suggestions ?? [
486
+ { type: "addRules", rules: [{ toolName }], behavior: "allow", destination: "session" },
487
+ ],
488
+ };
489
+ }
490
+ }
344
491
  const response = await this.client.requestPermission({
345
492
  options: [
346
493
  {
@@ -508,8 +655,7 @@ export class ClaudeAcpAgent {
508
655
  ...creationOpts,
509
656
  };
510
657
  const allowedTools = [];
511
- // Disable this for now, not a great way to expose this over ACP at the moment (in progress work so we can revisit)
512
- const disallowedTools = ["AskUserQuestion"];
658
+ const disallowedTools = [];
513
659
  // Check if built-in tools should be disabled
514
660
  const disableBuiltInTools = params._meta?.disableBuiltInTools === true;
515
661
  if (!disableBuiltInTools) {
package/dist/lib.d.ts CHANGED
@@ -3,6 +3,8 @@ export { loadManagedSettings, applyEnvironmentSettings, nodeToWebReadable, nodeT
3
3
  export { createMcpServer } from "./mcp-server.js";
4
4
  export { toolInfoFromToolUse, planEntries, toolUpdateFromToolResult, createPreToolUseHook, acpToolNames as toolNames, normalizeToolName, getCanonicalToolName, } from "./tools.js";
5
5
  export { SettingsManager, type ClaudeCodeSettings, type PermissionSettings, type PermissionDecision, type PermissionCheckResult, type SettingsManagerOptions, } from "./settings.js";
6
- export { SubagentTracker, isTaskToolInput, extractSubagentMeta, type TrackedSubagent, type SubagentStatus, type SubagentType, type SubagentEventType, type SubagentUpdateMeta, type SubagentEventListener, type SubagentStats, type TaskToolInput, } from "./subagent-tracker.js";
6
+ export { SubagentTracker, isTaskToolInput, extractSubagentMeta, type TrackedSubagent, type SubagentStatus, type SubagentType, type SubagentEventType, type SubagentUpdateMeta, type SubagentEventListener, type SubagentStats, type TaskToolInput, type SerializedTrackerState, type SerializedTask, type SDKTaskNotification, } from "./subagent-tracker.js";
7
+ export { TaskManager, type TaskManagerOptions, type TaskFilter, } from "./task-manager.js";
8
+ export { registerTaskMcpTools, type TaskMcpToolsOptions } from "./task-mcp-tools.js";
7
9
  export type { ClaudePlanEntry } from "./tools.js";
8
10
  //# sourceMappingURL=lib.d.ts.map
package/dist/lib.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,MAAM,EACN,kBAAkB,EAClB,6BAA6B,EAC7B,KAAK,cAAc,EACnB,KAAK,cAAc,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,EACR,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,wBAAwB,EACxB,oBAAoB,EACpB,YAAY,IAAI,SAAS,EACzB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,aAAa,GACnB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,MAAM,EACN,kBAAkB,EAClB,6BAA6B,EAC7B,KAAK,cAAc,EACnB,KAAK,cAAc,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,EACR,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,wBAAwB,EACxB,oBAAoB,EACpB,YAAY,IAAI,SAAS,EACzB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,mBAAmB,GACzB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,WAAW,EACX,KAAK,kBAAkB,EACvB,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAGrF,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
package/dist/lib.js CHANGED
@@ -6,3 +6,7 @@ export { toolInfoFromToolUse, planEntries, toolUpdateFromToolResult, createPreTo
6
6
  export { SettingsManager, } from "./settings.js";
7
7
  // Export subagent tracking
8
8
  export { SubagentTracker, isTaskToolInput, extractSubagentMeta, } from "./subagent-tracker.js";
9
+ // Export task management
10
+ export { TaskManager, } from "./task-manager.js";
11
+ // Export task MCP tools registration
12
+ export { registerTaskMcpTools } from "./task-mcp-tools.js";
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASpE,OAAO,EAAqB,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EACL,kBAAkB,EAGnB,MAAM,0BAA0B,CAAC;AAQlC,eAAO,MAAM,eAAe,iSAIT,CAAC;AA2BpB,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,kBAAkB,EAAE,kBAAkB,GAAG,SAAS,GACjD,SAAS,CA2nBX;AA+DD;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,KAAK,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC,GACD;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,CAyF/C"}
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASpE,OAAO,EAAqB,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EACL,kBAAkB,EAGnB,MAAM,0BAA0B,CAAC;AASlC,eAAO,MAAM,eAAe,iSAIT,CAAC;AA2BpB,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,kBAAkB,EAAE,kBAAkB,GAAG,SAAS,GACjD,SAAS,CAioBX;AA+DD;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,KAAK,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC,GACD;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,CAyF/C"}
@@ -57,6 +57,7 @@ import * as diff from "diff";
57
57
  import * as path from "node:path";
58
58
  import * as fs from "node:fs/promises";
59
59
  import { sleep, unreachable, extractLinesWithByteLimit } from "./utils.js";
60
+ import { registerTaskMcpTools } from "./task-mcp-tools.js";
60
61
  import { acpToolNames } from "./tools.js";
61
62
  export const SYSTEM_REMINDER = `
62
63
 
@@ -649,6 +650,11 @@ In sessions with ${acpToolNames.killShell} always use it instead of KillShell.`,
649
650
  }
650
651
  });
651
652
  }
653
+ // Register task management tools
654
+ registerTaskMcpTools(server, {
655
+ tracker: agent.subagentTracker,
656
+ sessionId,
657
+ });
652
658
  return server;
653
659
  }
654
660
  function stripCommonPrefix(a, b) {
@@ -1,9 +1,10 @@
1
1
  import { AgentSideConnection } from "@agentclientprotocol/sdk";
2
2
  import { Logger } from "./acp-agent.js";
3
+ import { PermissionMode } from "@anthropic-ai/claude-agent-sdk";
3
4
  /**
4
5
  * Subagent status lifecycle
5
6
  */
6
- export type SubagentStatus = "pending" | "running" | "completed" | "failed" | "cancelled";
7
+ export type SubagentStatus = "pending" | "running" | "completed" | "failed" | "cancelled" | "stopped";
7
8
  /**
8
9
  * Subagent type from Claude Code Task tool
9
10
  */
@@ -44,15 +45,30 @@ export interface TrackedSubagent {
44
45
  maxTurns?: number;
45
46
  /** Agent ID returned by Claude Code (for resume capability) */
46
47
  agentId?: string;
48
+ /** Output file path for background tasks (from SDK task_notification) */
49
+ outputFile?: string;
50
+ /** Summary of task result (from SDK task_notification) */
51
+ summary?: string;
52
+ /** Name given to the spawned agent */
53
+ agentName?: string;
54
+ /** Team name if spawned as teammate */
55
+ teamName?: string;
56
+ /** Permission mode used for this task */
57
+ permissionMode?: PermissionMode;
58
+ /** Whether this task was resumed from a previous execution */
59
+ isResumed?: boolean;
60
+ /** Original task ID if this is a resumed task */
61
+ originalTaskId?: string;
47
62
  }
48
63
  /**
49
64
  * Subagent event types for notifications
50
65
  */
51
- export type SubagentEventType = "subagent_started" | "subagent_progress" | "subagent_completed" | "subagent_failed" | "subagent_cancelled";
66
+ export type SubagentEventType = "subagent_started" | "subagent_progress" | "subagent_completed" | "subagent_failed" | "subagent_cancelled" | "subagent_stopped";
52
67
  /**
53
68
  * Metadata for subagent-related notifications
54
69
  */
55
70
  export interface SubagentUpdateMeta {
71
+ [key: string]: unknown;
56
72
  claudeCode?: {
57
73
  subagent: {
58
74
  id: string;
@@ -67,6 +83,17 @@ export interface SubagentUpdateMeta {
67
83
  agentId?: string;
68
84
  /** Duration in milliseconds (for completed/failed events) */
69
85
  durationMs?: number;
86
+ /** Output file for background tasks */
87
+ outputFile?: string;
88
+ /** Summary from SDK task notification */
89
+ summary?: string;
90
+ };
91
+ /** Task notification from SDK (for background tasks) */
92
+ taskNotification?: {
93
+ taskId: string;
94
+ status: "completed" | "failed" | "stopped";
95
+ outputFile: string;
96
+ summary: string;
70
97
  };
71
98
  };
72
99
  }
@@ -80,7 +107,14 @@ export interface TaskToolInput {
80
107
  model?: "sonnet" | "opus" | "haiku";
81
108
  max_turns?: number;
82
109
  run_in_background?: boolean;
110
+ /** Agent ID to resume from (SDK 0.2.17) */
83
111
  resume?: string;
112
+ /** Name for spawned agent (SDK 0.2.17) */
113
+ name?: string;
114
+ /** Team name for spawning (SDK 0.2.17) */
115
+ team_name?: string;
116
+ /** Permission mode for spawned teammate (SDK 0.2.17) */
117
+ mode?: PermissionMode;
84
118
  }
85
119
  export type SubagentEventListener = (subagent: TrackedSubagent, data?: unknown) => void | Promise<void>;
86
120
  export interface SubagentStats {
@@ -90,9 +124,52 @@ export interface SubagentStats {
90
124
  completed: number;
91
125
  failed: number;
92
126
  cancelled: number;
127
+ stopped: number;
93
128
  byType: Record<string, number>;
94
129
  averageDurationMs?: number;
95
130
  }
131
+ /**
132
+ * Serializable state for task persistence
133
+ */
134
+ export interface SerializedTrackerState {
135
+ version: number;
136
+ tasks: SerializedTask[];
137
+ lastUpdated: number;
138
+ }
139
+ export interface SerializedTask {
140
+ id: string;
141
+ parentSessionId: string;
142
+ parentToolUseId?: string;
143
+ subagentType: string;
144
+ description: string;
145
+ prompt: string;
146
+ model?: string;
147
+ status: SubagentStatus;
148
+ createdAt: number;
149
+ startedAt?: number;
150
+ completedAt?: number;
151
+ result?: unknown;
152
+ error?: string;
153
+ runInBackground: boolean;
154
+ maxTurns?: number;
155
+ agentId?: string;
156
+ outputFile?: string;
157
+ summary?: string;
158
+ agentName?: string;
159
+ teamName?: string;
160
+ permissionMode?: string;
161
+ isResumed?: boolean;
162
+ originalTaskId?: string;
163
+ }
164
+ /**
165
+ * SDK Task Notification from SDKTaskNotificationMessage
166
+ */
167
+ export interface SDKTaskNotification {
168
+ task_id: string;
169
+ status: "completed" | "failed" | "stopped";
170
+ output_file: string;
171
+ summary: string;
172
+ }
96
173
  /**
97
174
  * SubagentTracker manages the lifecycle of all subagents spawned via the Task tool
98
175
  */
@@ -101,6 +178,8 @@ export declare class SubagentTracker {
101
178
  private subagents;
102
179
  /** Map of session ID to subagent IDs in that session */
103
180
  private sessionSubagents;
181
+ /** Map of agent ID to subagent ID (for resume lookups) */
182
+ private agentIdToSubagent;
104
183
  /** Event listeners for subagent lifecycle events */
105
184
  private listeners;
106
185
  private client;
@@ -126,6 +205,11 @@ export declare class SubagentTracker {
126
205
  * Mark a subagent as cancelled
127
206
  */
128
207
  cancelSubagent(toolUseId: string): Promise<void>;
208
+ /**
209
+ * Handle SDKTaskNotificationMessage from the Claude Agent SDK.
210
+ * This is called when a background task completes/fails/stops.
211
+ */
212
+ handleTaskNotification(notification: SDKTaskNotification): Promise<void>;
129
213
  /**
130
214
  * Send progress update for a running subagent
131
215
  */
@@ -156,6 +240,14 @@ export declare class SubagentTracker {
156
240
  * Get all subagents (for debugging/monitoring)
157
241
  */
158
242
  getAllSubagents(): TrackedSubagent[];
243
+ /**
244
+ * Find a subagent by its agent ID (for resume operations)
245
+ */
246
+ findByAgentId(agentId: string): TrackedSubagent | undefined;
247
+ /**
248
+ * Get tasks that can be resumed (have agentId and are completed/failed/stopped)
249
+ */
250
+ getResumableTasks(): TrackedSubagent[];
159
251
  /**
160
252
  * Check if a tool use ID is a Task tool (subagent)
161
253
  */
@@ -172,6 +264,14 @@ export declare class SubagentTracker {
172
264
  * Clean up completed subagents older than given age (in ms)
173
265
  */
174
266
  cleanup(maxAgeMs?: number): number;
267
+ /**
268
+ * Export current state for persistence
269
+ */
270
+ exportState(): SerializedTrackerState;
271
+ /**
272
+ * Import state from persistence
273
+ */
274
+ importState(state: SerializedTrackerState): void;
175
275
  /**
176
276
  * Get statistics about subagents
177
277
  */
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-tracker.d.ts","sourceRoot":"","sources":["../src/subagent-tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subagent-tracker.d.ts","sourceRoot":"","sources":["../src/subagent-tracker.ts"],"names":[],"mappings":"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"}