@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 +34 -1
- package/dist/acp-agent.d.ts +8 -0
- package/dist/acp-agent.d.ts.map +1 -1
- package/dist/acp-agent.js +153 -7
- package/dist/lib.d.ts +3 -1
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +4 -0
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +6 -0
- 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/tools.d.ts.map +1 -1
- package/dist/tools.js +9 -2
- package/package.json +2 -2
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
|
|
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
|
package/dist/acp-agent.d.ts
CHANGED
|
@@ -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>;
|
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":"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;IACjC,mBAAmB,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/D,CAAC;AAEF,KAAK,kBAAkB,GACnB;IACE,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAAC;CAC3C,GACD;IACE,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;IACrD,aAAa,EAAE,sBAAsB,CAAC;CACvC,CAAC;AAEN;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,CAAC,EAAE;QACX;;;;;;;;;;;;WAYG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,CAAC,EAAE;QAEX,QAAQ,EAAE,MAAM,CAAC;QAEjB,YAAY,CAAC,EAAE,OAAO,CAAC;QAEvB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,IAAI,EAAE,UAAU,GAAG,iBAAiB,GAAG,cAAc,CAAC;QACtD,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,GAAG,CAAC;KACZ,CAAC;CACH,CAAC;AAMF,qBAAa,cAAe,YAAW,KAAK;IAC1C,QAAQ,EAAE;QACR,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,MAAM,EAAE,mBAAmB,CAAC;IAC5B,YAAY,EAAE,YAAY,CAAC;IAC3B,mBAAmB,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAA;KAAE,CAAM;IAChE,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,eAAe,CAAC;gBAErB,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,MAAM;IAQlD,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAgDnE,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAclE,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAc9E,sBAAsB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAepF,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IA4KtD,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBvD;;OAEG;YACW,sBAAsB;IAsB9B,wBAAwB,CAC5B,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;IAOpC,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA0B9E,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAKxE,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAKjF,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU;YA8R3B,aAAa;CA6P5B;AAwED,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc,CA6EpE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,GAAG,iBAAiB,EAAE,GAAG,gBAAgB,EAAE,GAAG,wBAAwB,EAAE,EACvF,IAAI,EAAE,WAAW,GAAG,MAAM,EAC1B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,eAAe;AACjC,kGAAkG;AAClG,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,GACjC,mBAAmB,EAAE,CAiRvB;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,0BAA0B,EACnC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,eAAe,GAChC,mBAAmB,EAAE,CAuCvB;AAED,wBAAgB,MAAM,SAMrB"}
|
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
|
-
|
|
309
|
-
|
|
310
|
-
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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,
|
|
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";
|
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,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"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -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":"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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"}
|