@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.
- package/dist/acp-agent.d.ts +11 -0
- package/dist/acp-agent.d.ts.map +1 -1
- package/dist/acp-agent.js +131 -6
- package/dist/lib.d.ts +5 -1
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +7 -0
- package/dist/mcp-server.d.ts +2 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +14 -1
- package/dist/subagent-tracker.d.ts +102 -2
- package/dist/subagent-tracker.d.ts.map +1 -1
- package/dist/subagent-tracker.js +189 -22
- package/dist/task-manager.d.ts +106 -0
- package/dist/task-manager.d.ts.map +1 -0
- package/dist/task-manager.js +231 -0
- package/dist/task-mcp-tools.d.ts +16 -0
- package/dist/task-mcp-tools.d.ts.map +1 -0
- package/dist/task-mcp-tools.js +256 -0
- package/dist/task-store.d.ts +123 -0
- package/dist/task-store.d.ts.map +1 -0
- package/dist/task-store.js +292 -0
- package/dist/work-item-mcp-tools.d.ts +12 -0
- package/dist/work-item-mcp-tools.d.ts.map +1 -0
- package/dist/work-item-mcp-tools.js +296 -0
- package/package.json +2 -2
package/dist/acp-agent.d.ts
CHANGED
|
@@ -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>;
|
package/dist/acp-agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acp-agent.d.ts","sourceRoot":"","sources":["../src/acp-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,mBAAmB,EACnB,mBAAmB,EAEnB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAElB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EAEpB,oBAAoB,EACpB,qBAAqB,EAErB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACL,UAAU,EAEV,OAAO,EACP,cAAc,EACd,KAAK,EAEL,0BAA0B,EAC1B,cAAc,EACf,MAAM,gCAAgC,CAAC;AAIxC,OAAO,EAAwC,QAAQ,EAAe,MAAM,YAAY,CAAC;AAYzF,OAAO,EACL,eAAe,EAIhB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAIlG,eAAO,MAAM,iBAAiB,QAA2D,CAAC;AAE1F;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAC9B,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;CACjC;AAED,KAAK,OAAO,GAAG;IACb,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,EAAE,eAAe,CAAC;
|
|
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
|
-
|
|
309
|
-
|
|
310
|
-
|
|
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:
|
|
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:
|
|
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,
|
|
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";
|
package/dist/mcp-server.d.ts
CHANGED
|
@@ -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
|
*
|
package/dist/mcp-server.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -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":"AAAA,OAAO,EAAuB,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"subagent-tracker.d.ts","sourceRoot":"","sources":["../src/subagent-tracker.ts"],"names":[],"mappings":"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"}
|