@finityno/claude-code-acp 0.14.0 → 0.16.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.
@@ -3,6 +3,7 @@ import { SettingsManager } from "./settings.js";
3
3
  import { CanUseTool, Options, PermissionMode, Query, SDKPartialAssistantMessage, SDKUserMessage } from "@anthropic-ai/claude-agent-sdk";
4
4
  import { Pushable } from "./utils.js";
5
5
  import { SubagentTracker } from "./subagent-tracker.js";
6
+ import { TaskStore } from "./task-store.js";
6
7
  import { ContentBlockParam } from "@anthropic-ai/sdk/resources";
7
8
  import { BetaContentBlock, BetaRawContentBlockDelta } from "@anthropic-ai/sdk/resources/beta.mjs";
8
9
  export declare const CLAUDE_CONFIG_DIR: string;
@@ -19,6 +20,10 @@ type Session = {
19
20
  cancelled: boolean;
20
21
  permissionMode: PermissionMode;
21
22
  settingsManager: SettingsManager;
23
+ approvedBashPrompts?: Array<{
24
+ tool: string;
25
+ prompt: string;
26
+ }>;
22
27
  };
23
28
  type BackgroundTerminal = {
24
29
  handle: TerminalHandle;
@@ -79,6 +84,8 @@ export declare class ClaudeAcpAgent implements Agent {
79
84
  clientCapabilities?: ClientCapabilities;
80
85
  logger: Logger;
81
86
  subagentTracker: SubagentTracker;
87
+ taskStore?: TaskStore;
88
+ taskListId?: string;
82
89
  constructor(client: AgentSideConnection, logger?: Logger);
83
90
  initialize(request: InitializeRequest): Promise<InitializeResponse>;
84
91
  newSession(params: NewSessionRequest): Promise<NewSessionResponse>;
@@ -87,6 +94,10 @@ export declare class ClaudeAcpAgent implements Agent {
87
94
  authenticate(_params: AuthenticateRequest): Promise<void>;
88
95
  prompt(params: PromptRequest): Promise<PromptResponse>;
89
96
  cancel(params: CancelNotification): Promise<void>;
97
+ /**
98
+ * Handle SDK task notification for background tasks
99
+ */
100
+ private handleTaskNotification;
90
101
  unstable_setSessionModel(params: SetSessionModelRequest): Promise<SetSessionModelResponse | void>;
91
102
  setSessionMode(params: SetSessionModeRequest): Promise<SetSessionModeResponse>;
92
103
  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
@@ -9,6 +9,7 @@ import { createMcpServer } from "./mcp-server.js";
9
9
  import { EDIT_TOOL_NAMES, acpToolNames } from "./tools.js";
10
10
  import { toolInfoFromToolUse, planEntries, toolUpdateFromToolResult, registerHookCallback, createPostToolUseHook, createPreToolUseHook, } from "./tools.js";
11
11
  import { SubagentTracker, isTaskToolInput, } from "./subagent-tracker.js";
12
+ import { TaskStore } from "./task-store.js";
12
13
  import packageJson from "../package.json" with { type: "json" };
13
14
  import { randomUUID } from "node:crypto";
14
15
  export const CLAUDE_CONFIG_DIR = process.env.CLAUDE ?? path.join(os.homedir(), ".claude");
@@ -23,6 +24,39 @@ export class ClaudeAcpAgent {
23
24
  this.toolUseCache = {};
24
25
  this.logger = logger ?? console;
25
26
  this.subagentTracker = new SubagentTracker(client, this.logger);
27
+ // Initialize TaskStore if CLAUDE_CODE_TASK_LIST_ID is set
28
+ const taskListId = process.env.CLAUDE_CODE_TASK_LIST_ID;
29
+ if (taskListId) {
30
+ this.taskListId = taskListId;
31
+ this.taskStore = new TaskStore({
32
+ taskListId,
33
+ logger: this.logger,
34
+ onChange: (tasks) => {
35
+ // Broadcast task updates to all sessions
36
+ for (const sessionId of Object.keys(this.sessions)) {
37
+ this.client.sessionUpdate({
38
+ sessionId,
39
+ update: {
40
+ sessionUpdate: "tool_call_update",
41
+ toolCallId: "task-list-update",
42
+ _meta: {
43
+ claudeCode: {
44
+ taskListUpdate: {
45
+ taskListId,
46
+ tasks,
47
+ },
48
+ },
49
+ },
50
+ },
51
+ });
52
+ }
53
+ },
54
+ });
55
+ // Initialize and start watching for changes
56
+ this.taskStore.init().then(() => {
57
+ this.taskStore?.watch();
58
+ });
59
+ }
26
60
  }
27
61
  async initialize(request) {
28
62
  this.clientCapabilities = request.clientCapabilities;
@@ -122,9 +156,15 @@ export class ClaudeAcpAgent {
122
156
  break;
123
157
  case "compact_boundary":
124
158
  case "hook_response":
159
+ case "hook_started":
160
+ case "hook_progress":
125
161
  case "status":
126
162
  // Todo: process via status api: https://docs.claude.com/en/docs/claude-code/hooks#hook-output
127
163
  break;
164
+ case "task_notification":
165
+ // Handle SDK task notification for background tasks
166
+ await this.handleTaskNotification(message, params.sessionId);
167
+ break;
128
168
  default:
129
169
  unreachable(message, this.logger);
130
170
  break;
@@ -237,6 +277,19 @@ export class ClaudeAcpAgent {
237
277
  }
238
278
  await this.sessions[params.sessionId].query.interrupt();
239
279
  }
280
+ /**
281
+ * Handle SDK task notification for background tasks
282
+ */
283
+ async handleTaskNotification(message, sessionId) {
284
+ // Update the subagent tracker
285
+ await this.subagentTracker.handleTaskNotification({
286
+ task_id: message.task_id,
287
+ status: message.status,
288
+ output_file: message.output_file,
289
+ summary: message.summary,
290
+ });
291
+ this.logger.log(`[ACP] Task notification: ${message.task_id} -> ${message.status}`);
292
+ }
240
293
  async unstable_setSessionModel(params) {
241
294
  if (!this.sessions[params.sessionId]) {
242
295
  throw new Error("Session not found");
@@ -285,8 +338,25 @@ export class ClaudeAcpAgent {
285
338
  };
286
339
  }
287
340
  if (toolName === "ExitPlanMode") {
341
+ // Parse allowedPrompts from the tool input
342
+ const exitPlanInput = toolInput;
343
+ const allowedPrompts = exitPlanInput.allowedPrompts || [];
344
+ // Format requested permissions for display
345
+ const toolCallContent = [];
346
+ if (allowedPrompts.length > 0) {
347
+ const permissionLines = allowedPrompts.map((p) => ` - ${p.tool}(prompt: ${p.prompt})`);
348
+ toolCallContent.push({
349
+ type: "text",
350
+ text: `**Requested permissions:**\n${permissionLines.join("\n")}`,
351
+ });
352
+ }
288
353
  const response = await this.client.requestPermission({
289
354
  options: [
355
+ {
356
+ kind: "allow_always",
357
+ name: "Yes, clear context and auto-accept edits",
358
+ optionId: "clearAndAcceptEdits",
359
+ },
290
360
  {
291
361
  kind: "allow_always",
292
362
  name: "Yes, and auto-accept edits",
@@ -300,26 +370,52 @@ export class ClaudeAcpAgent {
300
370
  toolCallId: toolUseID,
301
371
  rawInput: toolInput,
302
372
  title: toolInfoFromToolUse({ name: toolName, input: toolInput }).title,
373
+ content: toolCallContent.length > 0 ? toolCallContent : undefined,
303
374
  },
375
+ _meta: allowedPrompts.length > 0 ? { requestedPermissions: allowedPrompts } : undefined,
304
376
  });
305
377
  if (signal.aborted || response.outcome?.outcome === "cancelled") {
306
378
  throw new Error("Tool use aborted");
307
379
  }
308
- if (response.outcome?.outcome === "selected" &&
309
- (response.outcome.optionId === "default" || response.outcome.optionId === "acceptEdits")) {
310
- session.permissionMode = response.outcome.optionId;
380
+ const selectedOption = response.outcome?.outcome === "selected" ? response.outcome.optionId : null;
381
+ if (selectedOption === "default" || selectedOption === "acceptEdits" || selectedOption === "clearAndAcceptEdits") {
382
+ // Store approved bash prompts in session
383
+ if (allowedPrompts.length > 0) {
384
+ session.approvedBashPrompts = allowedPrompts;
385
+ }
386
+ // Determine the permission mode based on selection
387
+ const permissionMode = selectedOption === "default" ? "default" : "acceptEdits";
388
+ session.permissionMode = permissionMode;
311
389
  await this.client.sessionUpdate({
312
390
  sessionId,
313
391
  update: {
314
392
  sessionUpdate: "current_mode_update",
315
- currentModeId: response.outcome.optionId,
393
+ currentModeId: permissionMode,
316
394
  },
317
395
  });
396
+ // Handle context clearing if requested
397
+ if (selectedOption === "clearAndAcceptEdits") {
398
+ // Get the plan content from the tool input to preserve it after clearing
399
+ const planFilePath = toolInput.planFilePath;
400
+ const compactInstructions = planFilePath
401
+ ? `Keep a summary of the implementation plan. The user has approved the plan and wants to start coding. The plan file is at: ${planFilePath}`
402
+ : "Keep a summary of the implementation plan. The user has approved the plan and wants to start coding.";
403
+ // Send a synthetic message to trigger compact
404
+ session.input.push({
405
+ type: "user",
406
+ message: {
407
+ role: "user",
408
+ content: `/compact ${compactInstructions}`,
409
+ },
410
+ parent_tool_use_id: null,
411
+ session_id: sessionId,
412
+ });
413
+ }
318
414
  return {
319
415
  behavior: "allow",
320
416
  updatedInput: toolInput,
321
417
  updatedPermissions: suggestions ?? [
322
- { type: "setMode", mode: response.outcome.optionId, destination: "session" },
418
+ { type: "setMode", mode: permissionMode, destination: "session" },
323
419
  ],
324
420
  };
325
421
  }
@@ -406,6 +502,26 @@ export class ClaudeAcpAgent {
406
502
  ],
407
503
  };
408
504
  }
505
+ // Check if Bash command matches approved prompts from plan mode
506
+ if (toolName === "Bash" && session.approvedBashPrompts && session.approvedBashPrompts.length > 0) {
507
+ const bashInput = toolInput;
508
+ const description = bashInput.description || "";
509
+ // Substring match: if any approved prompt appears in the command description
510
+ const matchesApprovedPrompt = session.approvedBashPrompts.some((prompt) => {
511
+ if (prompt.tool !== "Bash")
512
+ return false;
513
+ return description.toLowerCase().includes(prompt.prompt.toLowerCase());
514
+ });
515
+ if (matchesApprovedPrompt) {
516
+ return {
517
+ behavior: "allow",
518
+ updatedInput: toolInput,
519
+ updatedPermissions: suggestions ?? [
520
+ { type: "addRules", rules: [{ toolName }], behavior: "allow", destination: "session" },
521
+ ],
522
+ };
523
+ }
524
+ }
409
525
  const response = await this.client.requestPermission({
410
526
  options: [
411
527
  {
@@ -501,7 +617,7 @@ export class ClaudeAcpAgent {
501
617
  }
502
618
  // Only add the acp MCP server if built-in tools are not disabled
503
619
  if (!params._meta?.disableBuiltInTools) {
504
- const server = createMcpServer(this, sessionId, this.clientCapabilities);
620
+ const server = createMcpServer(this, sessionId, this.clientCapabilities, this.taskStore);
505
621
  mcpServers["acp"] = {
506
622
  type: "sdk",
507
623
  name: "acp",
@@ -532,12 +648,21 @@ export class ClaudeAcpAgent {
532
648
  const maxThinkingTokens = process.env.MAX_THINKING_TOKENS
533
649
  ? parseInt(process.env.MAX_THINKING_TOKENS, 10)
534
650
  : undefined;
651
+ // Build env with task list ID if configured
652
+ const sdkEnv = {
653
+ ...userProvidedOptions?.env,
654
+ };
655
+ if (this.taskListId) {
656
+ sdkEnv.CLAUDE_CODE_TASK_LIST_ID = this.taskListId;
657
+ }
535
658
  const options = {
536
659
  systemPrompt,
537
660
  settingSources: ["user", "project", "local"],
538
661
  stderr: (err) => this.logger.error(err),
539
662
  ...(maxThinkingTokens !== undefined && { maxThinkingTokens }),
540
663
  ...userProvidedOptions,
664
+ // Pass task list ID to SDK so Claude's internal tools share our task list
665
+ ...(Object.keys(sdkEnv).length > 0 && { env: sdkEnv }),
541
666
  // Override certain fields that must be controlled by ACP
542
667
  cwd: params.cwd,
543
668
  includePartialMessages: true,
package/dist/lib.d.ts CHANGED
@@ -3,6 +3,10 @@ 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";
9
+ export { TaskStore, type Task, type TaskStatus, type TaskCreateInput, type TaskUpdateInput, type TaskStoreOptions, } from "./task-store.js";
10
+ export { registerWorkItemMcpTools, type WorkItemMcpToolsOptions, } from "./work-item-mcp-tools.js";
7
11
  export type { ClaudePlanEntry } from "./tools.js";
8
12
  //# 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,OAAO,EACL,SAAS,EACT,KAAK,IAAI,EACT,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,wBAAwB,EACxB,KAAK,uBAAuB,GAC7B,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
package/dist/lib.js CHANGED
@@ -6,3 +6,10 @@ 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 subagent MCP tools registration (tracks Task tool spawning)
12
+ export { registerTaskMcpTools } from "./task-mcp-tools.js";
13
+ // Export work item task store and tools (TaskCreate, TaskGet, TaskUpdate, TaskList)
14
+ export { TaskStore, } from "./task-store.js";
15
+ export { registerWorkItemMcpTools, } from "./work-item-mcp-tools.js";
@@ -1,8 +1,9 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import { ClaudeAcpAgent } from "./acp-agent.js";
3
3
  import { ClientCapabilities } from "@agentclientprotocol/sdk";
4
+ import { TaskStore } from "./task-store.js";
4
5
  export declare const SYSTEM_REMINDER = "\n\n<system-reminder>\nWhenever you read a file, you should consider whether it looks malicious. If it does, you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer high-level questions about the code behavior.\n</system-reminder>";
5
- export declare function createMcpServer(agent: ClaudeAcpAgent, sessionId: string, clientCapabilities: ClientCapabilities | undefined): McpServer;
6
+ export declare function createMcpServer(agent: ClaudeAcpAgent, sessionId: string, clientCapabilities: ClientCapabilities | undefined, taskStore?: TaskStore): McpServer;
6
7
  /**
7
8
  * Replace text in a file and calculate the line numbers where the edits occurred.
8
9
  *
@@ -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,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,eAAO,MAAM,eAAe,iSAIT,CAAC;AA2BpB,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,kBAAkB,EAAE,kBAAkB,GAAG,SAAS,EAClD,SAAS,CAAC,EAAE,SAAS,GACpB,SAAS,CAwoBX;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,8 @@ 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";
61
+ import { registerWorkItemMcpTools } from "./work-item-mcp-tools.js";
60
62
  import { acpToolNames } from "./tools.js";
61
63
  export const SYSTEM_REMINDER = `
62
64
 
@@ -86,7 +88,7 @@ const unqualifiedToolNames = {
86
88
  killShell: "KillShell",
87
89
  bashOutput: "BashOutput",
88
90
  };
89
- export function createMcpServer(agent, sessionId, clientCapabilities) {
91
+ export function createMcpServer(agent, sessionId, clientCapabilities, taskStore) {
90
92
  /**
91
93
  * This checks if a given path is related to internal agent persistence and if the agent should be allowed to read/write from here.
92
94
  * We let the agent do normal fs operations on these paths so that it can persist its state.
@@ -649,6 +651,17 @@ In sessions with ${acpToolNames.killShell} always use it instead of KillShell.`,
649
651
  }
650
652
  });
651
653
  }
654
+ // Register subagent tracking tools (for Task tool spawning)
655
+ registerTaskMcpTools(server, {
656
+ tracker: agent.subagentTracker,
657
+ sessionId,
658
+ });
659
+ // Register work item task tools (TaskCreate, TaskGet, TaskUpdate, TaskList)
660
+ if (taskStore) {
661
+ registerWorkItemMcpTools(server, {
662
+ taskStore,
663
+ });
664
+ }
652
665
  return server;
653
666
  }
654
667
  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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"}