@agentclientprotocol/claude-agent-acp 0.66.0 → 0.67.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 +8 -0
- package/dist/acp-agent.d.ts.map +1 -1
- package/dist/acp-agent.js +497 -69
- package/dist/tools.d.ts +4 -6
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +127 -15
- package/package.json +8 -8
package/dist/acp-agent.d.ts
CHANGED
|
@@ -238,6 +238,11 @@ type Session = {
|
|
|
238
238
|
* cancel() routes orphan accounting to `orphanCommands` (exact, per-uuid)
|
|
239
239
|
* instead of `pendingOrphanResults` (count, coalescing-blind). */
|
|
240
240
|
msgLifecycleV1?: boolean;
|
|
241
|
+
/** Latched from `system`/init `terminal_slash_commands` (CLI 2.1.232+):
|
|
242
|
+
* names of advertised slash commands whose UX is bound to the CLI's own
|
|
243
|
+
* terminal (e.g. /doctor, /color). ACP clients aren't that terminal, so
|
|
244
|
+
* these are filtered out of `available_commands_update` payloads. */
|
|
245
|
+
terminalSlashCommands?: string[];
|
|
241
246
|
/** The long-lived consumer task. Lazily started on the first `prompt()` and
|
|
242
247
|
* kept alive for the session so between-turn/background messages are still
|
|
243
248
|
* drained and forwarded. */
|
|
@@ -553,6 +558,8 @@ export type ToolUpdateMeta = {
|
|
|
553
558
|
nonExecutionKind?: string;
|
|
554
559
|
userFeedback?: string;
|
|
555
560
|
subagent?: true;
|
|
561
|
+
skill?: string;
|
|
562
|
+
skillPath?: string;
|
|
556
563
|
};
|
|
557
564
|
terminal_info?: {
|
|
558
565
|
terminal_id: string;
|
|
@@ -706,6 +713,7 @@ export declare class ClaudeAcpAgent {
|
|
|
706
713
|
prompt(params: PromptRequest): Promise<PromptResponse>;
|
|
707
714
|
goal(params: GoalRequest): Promise<GoalControlResponse>;
|
|
708
715
|
private publishGoal;
|
|
716
|
+
private publishTaskPlan;
|
|
709
717
|
private publishGoalFromPrompt;
|
|
710
718
|
private publishRuntimeGoal;
|
|
711
719
|
/** Steer the session per the ACP steering wire protocol: inject a follow-up
|
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,EAGL,mBAAmB,EAGnB,kBAAkB,EAClB,kBAAkB,EAClB,+BAA+B,EAC/B,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EAGb,iBAAiB,EACjB,kBAAkB,EAElB,aAAa,EACb,cAAc,EAEd,mBAAmB,EACnB,oBAAoB,EAEpB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,6BAA6B,EAC7B,8BAA8B,EAC9B,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EAEtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,SAAS,EACT,UAAU,EAGV,sBAAsB,EACtB,aAAa,EAKb,SAAS,EAIT,OAAO,EACP,cAAc,EAGd,KAAK,EAKL,gBAAgB,EAChB,0BAA0B,EAC1B,cAAc,EAGf,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAKL,WAAW,EACX,mBAAmB,EACnB,YAAY,EAIb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAqBlG,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EASL,SAAS,EAKV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAwC,QAAQ,EAAe,MAAM,YAAY,CAAC;AAEzF,eAAO,MAAM,iBAAiB,QACuC,CAAC;AAkBtE;;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,gBAAgB,GAAG;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAoDF;mDACmD;AACnD,KAAK,SAAS,GAAG;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE;QACT,YAAY,CAAC,EAAE,gBAAgB,CAAC;KACjC,CAAC;CACH,CAAC;AAEF;;;4CAG4C;AAC5C,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF;;4EAE4E;AAC5E,MAAM,MAAM,aAAa,GACrB;IAAE,OAAO,EAAE,UAAU,CAAA;CAAE,GACvB;IAAE,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC7B;IAAE,OAAO,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC;AAgC3D;;;yDAGyD;AACzD,KAAK,iBAAiB,GAAG;IACvB,eAAe,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChF,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;;iFAIiF;AACjF,KAAK,IAAI,GAAG;IACV;qEACiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB;;4DAEwD;IACxD,kBAAkB,EAAE,OAAO,CAAC;IAC5B;2EACuE;IACvE,OAAO,EAAE,OAAO,CAAC;IACjB;;;+EAG2E;IAC3E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;;mDAO+C;IAC/C,eAAe,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;IAC1D;;;;;;;;iCAQ6B;IAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;;;;6EAQyE;IACzE,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAmCgC;IAChC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;;;;;;;;;;;;;gEAe4D;IAC5D,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B;8EAC0E;IAC1E,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC,CAAC;AAEF,KAAK,OAAO,GAAG;IACb,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB;4EACwE;IACxE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;IACnB;2EACuE;IACvE,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB;;;;+EAI2E;IAC3E,iBAAiB,CAAC,EAAE;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;QAC9B,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;QAC1C,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IACF;mEAC+D;IAC/D,iBAAiB,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACxC;;;;;;;;;;;;;+EAa2E;IAC3E,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;;;;;;;;;;;;;;;;;gDAuB4C;IAC5C,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;IAC/D;;uEAEmE;IACnE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;iCAE6B;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB;;;;4CAIwC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ;+EAC2E;IAC3E,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,aAAa,EAAE,mBAAmB,EAAE,CAAC;IACrC;;;qDAGiD;IACjD,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB;gEAC4D;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB;;wEAEoE;IACpE,eAAe,EAAE,OAAO,CAAC;IACzB;;;;;gFAK4E;IAC5E,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD,eAAe,EAAE,eAAe,CAAC;IACjC;;;;;uEAKmE;IACnE,gBAAgB,CAAC,EAAE,eAAe,CAAC;IACnC;;kBAEc;IACd,gBAAgB,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IACjD,kBAAkB,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACjD;+EAC2E;IAC3E,mBAAmB,EAAE,OAAO,CAAC;IAC7B;;;;;;;;;2CASuC;IACvC,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;;;8CAK0C;IAC1C,0BAA0B,EAAE,OAAO,CAAC;IACpC;;;;;;;;+EAQ2E;IAC3E,gBAAgB,EAAE,MAAM,CAAC;IACzB;yEACqE;IACrE,SAAS,EAAE,SAAS,CAAC;IACrB;;;;mCAI+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;4CAIwC;IACxC,YAAY,EAAE,YAAY,CAAC;IAC3B;;;;;;wEAMoE;IACpE,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAsC6B;IAC7B,mBAAmB,EAAE,GAAG,CACtB,MAAM,EACN;QACE,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,UAAU,EAAE,OAAO,CAAC;QACpB;;;;;;;;;;;;iDAYyC;QACzC,aAAa,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;KACzC,CACF,CAAC;IACF;;;;;;;;;;;;;;;;;;;;;;;;sEAwBkE;IAClE,oBAAoB,EAAE,OAAO,CAAC;IAC9B;;;;;uCAKmC;IACnC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB,CAAC;IAC1D;;;;;;;;;;;;;;;iCAe6B;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;;;;;;;;uBAgBmB;IACnB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC,CAAC;AAkEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;CACnC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,CAAC,EAAE;QACX;;;;;;;;;;;;;;WAcG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB;;;;;;WAMG;QACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAAC;KACnD,CAAC;IACF,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,KAAK,eAAe,GAAG;IACrB;;;;;OAKG;IACH,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC,CAAC;CACH,CAAC;AAEF,KAAK,kBAAkB,GAAG,mBAAmB,GAAG;IAAE,KAAK,CAAC,EAAE,eAAe,CAAA;CAAE,CAAC;AA6B5E;;;;;GAKG;AACH,KAAK,cAAc,GAAG;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,+CAA+C;IAC/C,MAAM,CAAC,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,CAAC,EAAE;QAEX,QAAQ,EAAE,MAAM,CAAC;QAEjB,KAAK,CAAC,EAAE,MAAM,CAAC;QAEf,YAAY,CAAC,EAAE,OAAO,CAAC;QAIvB,eAAe,CAAC,EAAE,MAAM,CAAC;QAMzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAG1B,YAAY,CAAC,EAAE,MAAM,CAAC;QAKtB,QAAQ,CAAC,EAAE,IAAI,CAAC;KACjB,CAAC;IAEF,aAAa,CAAC,EAAE;QACd,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,eAAe,CAAC,EAAE;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,aAAa,CAAC,EAAE;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,CAAC;CACH,CAAC;AAwBF,MAAM,MAAM,YAAY,GAAG;IACzB,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,OAAO,CAAC;KAChB,CAAC;CACH,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB;wEACoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB;2EACuE;IACvE,iBAAiB,EAAE,MAAM,CAAC;IAC1B;0EACsE;IACtE,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;AA0DjF,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAsCrD;AAsED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CA0B1E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAEhE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAepE;AAeD,wBAAgB,qBAAqB,CACnC,WAAW,CAAC,EAAE,OAAO,EACrB,MAAM,GAAE,MAAgB,GACvB,cAAc,CA8BhB;AAwHD;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D;;kFAE8E;IAC9E,iBAAiB,CACf,MAAM,EAAE,wBAAwB,EAChC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACtC,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACzE,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC5E;iFAC6E;IAC7E,0BAA0B,CACxB,MAAM,EAAE,wBAAwB,EAChC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACtC,4BAA4B,CAAC,MAAM,EAAE,+BAA+B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,yEAAyE;IACzE,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjF;AAkDD,qBAAa,cAAc;IACzB,QAAQ,EAAE;QACR,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,MAAM,EAAE,SAAS,CAAC;IAClB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC;;oEAEgE;IAChE,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;+BAE2B;IAC3B,kBAAkB,EAAE,MAAM,CAAiC;gBAE/C,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM;IAMxC,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwKnE,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAYlE,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAoB9E,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAU3E,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAarE,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAkB9E;;;;gEAI4D;YAC9C,uBAAuB;IA6B/B,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/D;;;;;;;OAOG;IACG,sBAAsB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAW3F;;;;;OAKG;IACG,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAiDpF;;;;;;OAMG;IACG,wBAAwB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAShG;;;;OAIG;IACH,qBAAqB,IAAI,cAAc,GAAG,IAAI;IAOxC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC7C,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IA8CtD,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAc/C,WAAW;YAcX,qBAAqB;YAoBrB,kBAAkB;IAgBhC;;;;;;;;;;;;;;;;;;;;;;;;mEAwB+D;IACzD,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IA+DzD;qFACiF;IACjF,OAAO,CAAC,cAAc;IActB;;;;qEAIiE;YACnD,WAAW;IAulEzB;;;;;;;;;;;;;;yDAcqD;IACrD,OAAO,CAAC,kBAAkB;IAapB,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6NvD;;;;;;;;;;;;;;;;;;gBAkBY;IACZ,OAAO,CAAC,gBAAgB;IAWxB;yDACqD;YACvC,eAAe;IAwB7B,4EAA4E;IACtE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAQxE,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAU3E,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAiB9E,sBAAsB,CAC1B,MAAM,EAAE,6BAA6B,GACpC,OAAO,CAAC,8BAA8B,CAAC;YAoG5B,gBAAgB;YAoChB,oBAAoB;IA4D5B,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAKxE,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAKjF;;;;;;6CAMyC;YAC3B,2BAA2B;IA6BzC;;;;;;;;;;;iEAW6D;YAC/C,qBAAqB;IAkCnC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU;IAkOzC;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IA8B5B;;;;OAIG;YACW,qBAAqB;IAmCnC;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;YAmCV,2BAA2B;YAa3B,kBAAkB;YAmBlB,sBAAsB;IAyJpC;;;;;oEAKgE;YAClD,6BAA6B;IA+B3C;;;oBAGgB;IAChB,OAAO,CAAC,qBAAqB;IAW7B;;;iEAG6D;YAC/C,aAAa;IAQ3B;;;;;;;;;;;;;;;;;;;;;;yEAsBqE;YACvD,iBAAiB;YAkDjB,kBAAkB;IA2ChC;;;;;OAKG;YACW,WAAW;YAuBX,aAAa;CAyhB5B;AA0OD,eAAO,MAAM,mBAAmB,aAM9B,CAAC;AAOH,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAE1C;;;gBAGgB;AAChB,wBAAsB,oBAAoB,CAAC,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAOzE;AAED;;;8CAG8C;AAC9C,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,gBAAgB,WAAW,CAAC;AACzC,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,mBAAmB,SAAS,CAAC;AAE1C;+DAC+D;AAC/D,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,aAAa,QAAQ,CAAC;AAGnC;;;gCAGgC;AAChC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAElE;AAqBD;;;;2DAI2D;AAC3D,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,sBAAsB,GAAG,SAAS,GACzC,sBAAsB,GAAG,SAAS,CAEpC;AAED;;;sEAGsE;AACtE,wBAAgB,kCAAkC,CAChD,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAC7C,OAAO,CAET;AAED;;;;;;;;;+CAS+C;AAC/C,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,EAChB,gBAAgB,EAAE,OAAO,EACzB,cAAc,CAAC,EAAE,sBAAsB,GACtC,mBAAmB,CAwBrB;AAED;;0CAE0C;AAC1C,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAYrF;AAED;6EAC6E;AAC7E,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,4DAA4D;IAC5D,gBAAgB,EAAE,OAAO,CAAC;IAC1B;kDAC8C;IAC9C,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,iBAAiB,EACzB,UAAU,EAAE,SAAS,EAAE,EACvB,kBAAkB,CAAC,EAAE,MAAM,EAC3B,MAAM,GAAE,SAAS,EAAO,EACxB,YAAY,GAAE,MAAyB,EACvC,QAAQ,CAAC,EAAE,mBAAmB,GAC7B,mBAAmB,EAAE,CAmGvB;AAoFD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CA+DhG;AAED;;;;;;;;;;;;;;;;;;;gFAmBgF;AAChF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CAiCnF;AAkBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,SAAS,EAAE,EACtB,SAAS,EAAE,MAAM,EAAE,EACnB,sBAAsB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9C,SAAS,EAAE,CAsDb;AAoLD,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc,CAmFpE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,MAAM,GAAG,SAAS,CAYrB;AAwKD;;;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,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IACR,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,SAAS,CAAC;IAOtB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAM/B,SAAS,CAAC,EAAE,MAAM,CAAC;IAKnB,aAAa,CAAC,EAAE,OAAO,CAAC;IAIxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GACA,mBAAmB,EAAE,CAiXvB;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,0BAA0B,EACnC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IACR,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,sBAAsB,CAAC;CAC7C,GACA,mBAAmB,EAAE,CAgIvB;AAED;;;;;;;;;;;oEAWoE;AACpE,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAC3D,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,cAAc,CAAC,CAczB;AAED,wBAAgB,MAAM;;;EAgDrB"}
|
|
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
|
@@ -3,6 +3,7 @@ import { deleteSession, getSessionInfo, getSessionMessages, listSessions, query,
|
|
|
3
3
|
import { GOAL_ACTIONS, GOAL_CONTROL_METHOD, GOAL_EXTENSION_VERSION, goalUpdateFromPrompt, parseGoalRequest, toGoalSnapshot, } from "./goal-extension.js";
|
|
4
4
|
import { execFile } from "node:child_process";
|
|
5
5
|
import { randomUUID } from "node:crypto";
|
|
6
|
+
import { existsSync } from "node:fs";
|
|
6
7
|
import * as fs from "node:fs/promises";
|
|
7
8
|
import * as os from "node:os";
|
|
8
9
|
import * as path from "node:path";
|
|
@@ -10,7 +11,7 @@ import { promisify } from "node:util";
|
|
|
10
11
|
import packageJson from "../package.json" with { type: "json" };
|
|
11
12
|
import { applyAskElicitationResponse, askUserQuestionsToCreateRequest, createElicitationResponseToElicitResult, extractAskUserQuestions, extractRefusalFallbackPrompt, mcpElicitationToCreateRequest, REFUSAL_FALLBACK_DIALOG_KIND, refusalFallbackResultFromResponse, refusalFallbackToCreateRequest, } from "./elicitation.js";
|
|
12
13
|
import { SettingsManager } from "./settings.js";
|
|
13
|
-
import { applyTaskCreate, applyTaskUpdate, createPostToolUseHook, createTaskHook, parseTaskCreateOutput, planEntries, registerHookCallback, taskStateToPlanEntries, toolInfoFromToolUse, toolUpdateFromDiffToolResponse, toolUpdateFromToolResult, } from "./tools.js";
|
|
14
|
+
import { applyTaskCreate, applyTaskList, applyTaskUpdate, createPostToolUseHook, createTaskHook, parseTaskCreateOutput, parseTaskListOutput, parseTaskUpdateOutput, planEntries, registerHookCallback, taskStateToPlanEntries, toolInfoFromToolUse, toolUpdateFromDiffToolResponse, toolUpdateFromToolResult, } from "./tools.js";
|
|
14
15
|
import { nodeToWebReadable, nodeToWebWritable, Pushable, unreachable } from "./utils.js";
|
|
15
16
|
export const CLAUDE_CONFIG_DIR = process.env.CLAUDE_CONFIG_DIR ?? path.join(os.homedir(), ".claude");
|
|
16
17
|
const execFileAsync = promisify(execFile);
|
|
@@ -100,11 +101,13 @@ function parseSteerRequest(params) {
|
|
|
100
101
|
* result is the turn's real terminal.
|
|
101
102
|
*
|
|
102
103
|
* Deliberately fail-OPEN: an unknown future kind defaults to the user
|
|
103
|
-
* lane
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
* result
|
|
107
|
-
*
|
|
104
|
+
* lane — including `unclassified` (SDK 0.3.232+), the CLI's own "couldn't
|
|
105
|
+
* attribute this" marker, which gets the same safe default. Misrouting a
|
|
106
|
+
* USER result into the autonomous lane hangs the prompt un-detectably
|
|
107
|
+
* (the result is skipped, its trailing idle absorbed as owed, so the
|
|
108
|
+
* #825 detector can't fire); misrouting an autonomous result into the
|
|
109
|
+
* user lane is the bounded misattribution class this set exists to
|
|
110
|
+
* reduce. */
|
|
108
111
|
const AUTONOMOUS_RESULT_ORIGINS = new Set([
|
|
109
112
|
"task-notification",
|
|
110
113
|
"peer",
|
|
@@ -155,9 +158,118 @@ const PROVIDER_ID = "main";
|
|
|
155
158
|
*/
|
|
156
159
|
const SUPPORTED_PROTOCOLS = ["anthropic", "bedrock", "vertex"];
|
|
157
160
|
const SUBAGENT_TRANSCRIPT_CAPABILITY = "subagent-transcript";
|
|
161
|
+
// This is a protocol namespace, not user-facing branding: `jetbrains` owns the
|
|
162
|
+
// non-standard contract and `air` identifies the client defining its rendering
|
|
163
|
+
// semantics, without affecting unrelated JetBrains ACP clients.
|
|
164
|
+
const JETBRAINS_META_KEY = "jetbrains";
|
|
165
|
+
const AIR_META_KEY = "air";
|
|
166
|
+
const AIR_EXTENSION_VERSION_KEY = "version";
|
|
167
|
+
const AIR_EXTENSION_CAPABILITIES_KEY = "capabilities";
|
|
168
|
+
const AIR_SESSION_FAILURE_KEY = "sessionFailure";
|
|
169
|
+
const AIR_EXTENSION_VERSION = 1;
|
|
158
170
|
function supportsSubagentTranscript(capabilities) {
|
|
159
171
|
return capabilities?._meta?.[SUBAGENT_TRANSCRIPT_CAPABILITY] === true;
|
|
160
172
|
}
|
|
173
|
+
const AIR_FAILURE_PRESENTATION = {
|
|
174
|
+
// A non-fatal notice whose wording comes from the adapter or the SDK, so this message is only the
|
|
175
|
+
// fallback for an advisory published without one.
|
|
176
|
+
advisory: {
|
|
177
|
+
message: "Claude reported a notice.",
|
|
178
|
+
retryable: false,
|
|
179
|
+
actions: [],
|
|
180
|
+
},
|
|
181
|
+
auth_required: {
|
|
182
|
+
message: "Sign in to continue using Claude.",
|
|
183
|
+
retryable: false,
|
|
184
|
+
actions: ["login"],
|
|
185
|
+
},
|
|
186
|
+
bad_request: {
|
|
187
|
+
message: "Claude could not process this request.",
|
|
188
|
+
retryable: false,
|
|
189
|
+
actions: ["new_turn"],
|
|
190
|
+
},
|
|
191
|
+
budget_exhausted: {
|
|
192
|
+
message: "This Claude session reached its configured budget.",
|
|
193
|
+
retryable: false,
|
|
194
|
+
actions: ["new_session"],
|
|
195
|
+
},
|
|
196
|
+
context_exhausted: {
|
|
197
|
+
message: "This Claude turn reached its configured limit.",
|
|
198
|
+
retryable: false,
|
|
199
|
+
actions: ["new_turn"],
|
|
200
|
+
},
|
|
201
|
+
internal_error: {
|
|
202
|
+
message: "Claude Agent encountered an internal error.",
|
|
203
|
+
retryable: true,
|
|
204
|
+
actions: ["retry"],
|
|
205
|
+
},
|
|
206
|
+
overloaded: {
|
|
207
|
+
message: "Claude is temporarily overloaded.",
|
|
208
|
+
retryable: true,
|
|
209
|
+
actions: ["retry"],
|
|
210
|
+
},
|
|
211
|
+
provider_error: {
|
|
212
|
+
message: "The model provider reported an error.",
|
|
213
|
+
retryable: true,
|
|
214
|
+
actions: ["retry"],
|
|
215
|
+
},
|
|
216
|
+
quota_exhausted: {
|
|
217
|
+
message: "The Claude account has no available quota.",
|
|
218
|
+
retryable: false,
|
|
219
|
+
actions: ["new_session"],
|
|
220
|
+
},
|
|
221
|
+
rate_limited: {
|
|
222
|
+
message: "Claude is temporarily rate limited.",
|
|
223
|
+
retryable: true,
|
|
224
|
+
actions: ["retry"],
|
|
225
|
+
},
|
|
226
|
+
transport_lost: {
|
|
227
|
+
message: "The connection to Claude was lost.",
|
|
228
|
+
retryable: false,
|
|
229
|
+
actions: ["new_session"],
|
|
230
|
+
},
|
|
231
|
+
worker_shutdown: {
|
|
232
|
+
message: "The Claude worker is shutting down.",
|
|
233
|
+
retryable: false,
|
|
234
|
+
actions: ["new_session"],
|
|
235
|
+
},
|
|
236
|
+
};
|
|
237
|
+
function supportsAirSessionFailures(capabilities) {
|
|
238
|
+
const jetbrains = capabilities?._meta?.[JETBRAINS_META_KEY];
|
|
239
|
+
const air = jetbrains?.[AIR_META_KEY];
|
|
240
|
+
const version = air?.[AIR_EXTENSION_VERSION_KEY];
|
|
241
|
+
const advertised = air?.[AIR_EXTENSION_CAPABILITIES_KEY];
|
|
242
|
+
return (typeof version === "number" &&
|
|
243
|
+
Number.isFinite(version) &&
|
|
244
|
+
Number.isInteger(version) &&
|
|
245
|
+
version >= AIR_EXTENSION_VERSION &&
|
|
246
|
+
Array.isArray(advertised) &&
|
|
247
|
+
advertised.some((capability) => capability === AIR_SESSION_FAILURE_KEY));
|
|
248
|
+
}
|
|
249
|
+
function providerFailureCategory(errorKind) {
|
|
250
|
+
switch (errorKind) {
|
|
251
|
+
case "authentication_failed":
|
|
252
|
+
case "oauth_org_not_allowed":
|
|
253
|
+
return "auth_required";
|
|
254
|
+
case "billing_error":
|
|
255
|
+
return "quota_exhausted";
|
|
256
|
+
case "rate_limit":
|
|
257
|
+
return "rate_limited";
|
|
258
|
+
case "overloaded":
|
|
259
|
+
return "overloaded";
|
|
260
|
+
case "invalid_request":
|
|
261
|
+
case "model_not_found":
|
|
262
|
+
return "bad_request";
|
|
263
|
+
case "max_output_tokens":
|
|
264
|
+
return "context_exhausted";
|
|
265
|
+
case "server_error":
|
|
266
|
+
case "unknown":
|
|
267
|
+
case undefined:
|
|
268
|
+
return "provider_error";
|
|
269
|
+
default:
|
|
270
|
+
return "provider_error";
|
|
271
|
+
}
|
|
272
|
+
}
|
|
161
273
|
function parentToolUseIdOf(message) {
|
|
162
274
|
if (!("parent_tool_use_id" in message))
|
|
163
275
|
return null;
|
|
@@ -734,6 +846,12 @@ export class ClaudeAcpAgent {
|
|
|
734
846
|
// steering extension contract: advertises the `_session/steering` request
|
|
735
847
|
// so clients know they may inject a follow-up into a running turn.
|
|
736
848
|
_meta: {
|
|
849
|
+
[JETBRAINS_META_KEY]: {
|
|
850
|
+
[AIR_META_KEY]: {
|
|
851
|
+
[AIR_EXTENSION_VERSION_KEY]: AIR_EXTENSION_VERSION,
|
|
852
|
+
[AIR_EXTENSION_CAPABILITIES_KEY]: [AIR_SESSION_FAILURE_KEY],
|
|
853
|
+
},
|
|
854
|
+
},
|
|
737
855
|
steering: {
|
|
738
856
|
supported: true,
|
|
739
857
|
},
|
|
@@ -966,6 +1084,9 @@ export class ClaudeAcpAgent {
|
|
|
966
1084
|
if (session.queryClosed) {
|
|
967
1085
|
throw RequestError.internalError(undefined, SESSION_ENDED_MESSAGE);
|
|
968
1086
|
}
|
|
1087
|
+
if (Array.from(session.taskState.values()).some((task) => task.status !== "completed")) {
|
|
1088
|
+
await this.publishTaskPlan(params.sessionId, session.taskState);
|
|
1089
|
+
}
|
|
969
1090
|
const userMessage = promptToClaude(params);
|
|
970
1091
|
const promptUuid = randomUUID();
|
|
971
1092
|
userMessage.uuid = promptUuid;
|
|
@@ -1021,6 +1142,15 @@ export class ClaudeAcpAgent {
|
|
|
1021
1142
|
},
|
|
1022
1143
|
});
|
|
1023
1144
|
}
|
|
1145
|
+
async publishTaskPlan(sessionId, taskState) {
|
|
1146
|
+
await this.client.sessionUpdate({
|
|
1147
|
+
sessionId,
|
|
1148
|
+
update: {
|
|
1149
|
+
sessionUpdate: "plan",
|
|
1150
|
+
entries: taskStateToPlanEntries(taskState),
|
|
1151
|
+
},
|
|
1152
|
+
});
|
|
1153
|
+
}
|
|
1024
1154
|
async publishGoalFromPrompt(sessionId, prompt, commandUuid) {
|
|
1025
1155
|
const goalUpdate = goalUpdateFromPrompt(prompt);
|
|
1026
1156
|
if (goalUpdate !== undefined) {
|
|
@@ -1221,6 +1351,115 @@ export class ClaudeAcpAgent {
|
|
|
1221
1351
|
}
|
|
1222
1352
|
await this.client.sessionUpdate(notification);
|
|
1223
1353
|
};
|
|
1354
|
+
const isAdvisory = (failure) => failure.severity === "warning";
|
|
1355
|
+
const failureRevisions = new Map();
|
|
1356
|
+
const sessionFailureEpoch = randomUUID();
|
|
1357
|
+
const activeSessionFailures = new Map();
|
|
1358
|
+
let pendingWorkerShutdown = false;
|
|
1359
|
+
const isCurrentConsumer = () => this.sessions[params.sessionId] === session;
|
|
1360
|
+
const sessionFailureMeta = (failure, phase) => {
|
|
1361
|
+
const presentation = AIR_FAILURE_PRESENTATION[failure.category];
|
|
1362
|
+
return {
|
|
1363
|
+
[JETBRAINS_META_KEY]: {
|
|
1364
|
+
[AIR_META_KEY]: {
|
|
1365
|
+
[AIR_EXTENSION_VERSION_KEY]: AIR_EXTENSION_VERSION,
|
|
1366
|
+
[AIR_SESSION_FAILURE_KEY]: {
|
|
1367
|
+
id: failure.id,
|
|
1368
|
+
revision: failure.revision,
|
|
1369
|
+
phase,
|
|
1370
|
+
category: failure.category,
|
|
1371
|
+
source: "claude",
|
|
1372
|
+
safeMessage: failure.safeMessage ?? presentation.message,
|
|
1373
|
+
retryable: presentation.retryable,
|
|
1374
|
+
actions: presentation.actions,
|
|
1375
|
+
...(failure.turnId ? { turnId: failure.turnId } : {}),
|
|
1376
|
+
...(failure.severity ? { severity: failure.severity } : {}),
|
|
1377
|
+
},
|
|
1378
|
+
},
|
|
1379
|
+
},
|
|
1380
|
+
};
|
|
1381
|
+
};
|
|
1382
|
+
const emitSessionFailure = async (failure, phase) => {
|
|
1383
|
+
if (!isCurrentConsumer()) {
|
|
1384
|
+
this.logger.error(`Session ${params.sessionId}: ignored AIR session failure from a stale query consumer`);
|
|
1385
|
+
return false;
|
|
1386
|
+
}
|
|
1387
|
+
try {
|
|
1388
|
+
await sendUpdate({
|
|
1389
|
+
sessionId: params.sessionId,
|
|
1390
|
+
update: {
|
|
1391
|
+
sessionUpdate: "session_info_update",
|
|
1392
|
+
_meta: sessionFailureMeta(failure, phase),
|
|
1393
|
+
},
|
|
1394
|
+
});
|
|
1395
|
+
return true;
|
|
1396
|
+
}
|
|
1397
|
+
catch (error) {
|
|
1398
|
+
this.logger.error(`Session ${params.sessionId}: failed to publish AIR session failure: ${error}`);
|
|
1399
|
+
return false;
|
|
1400
|
+
}
|
|
1401
|
+
};
|
|
1402
|
+
const clearSessionFailure = async (shouldClear = () => true) => {
|
|
1403
|
+
if (!supportsAirSessionFailures(this.clientCapabilities))
|
|
1404
|
+
return;
|
|
1405
|
+
for (const failure of [...activeSessionFailures.values()]) {
|
|
1406
|
+
if (!shouldClear(failure))
|
|
1407
|
+
continue;
|
|
1408
|
+
const cleared = {
|
|
1409
|
+
...failure,
|
|
1410
|
+
revision: failure.revision + 1,
|
|
1411
|
+
};
|
|
1412
|
+
if (await emitSessionFailure(cleared, "cleared")) {
|
|
1413
|
+
failureRevisions.set(cleared.id, cleared.revision);
|
|
1414
|
+
activeSessionFailures.delete(cleared.id);
|
|
1415
|
+
}
|
|
1416
|
+
}
|
|
1417
|
+
};
|
|
1418
|
+
const createSessionFailure = async (category, options = {}) => {
|
|
1419
|
+
if (!supportsAirSessionFailures(this.clientCapabilities) || !isCurrentConsumer()) {
|
|
1420
|
+
return undefined;
|
|
1421
|
+
}
|
|
1422
|
+
// An advisory is not a failure of the turn: it keeps its own id namespace and its own slot, so
|
|
1423
|
+
// it neither clears an actionable error nor is cleared by one. Only the newest advisory
|
|
1424
|
+
// matters, so they all share one id and bump its revision.
|
|
1425
|
+
if (category === "advisory") {
|
|
1426
|
+
const id = `${params.sessionId}:notice:${sessionFailureEpoch}`;
|
|
1427
|
+
return {
|
|
1428
|
+
id,
|
|
1429
|
+
revision: (failureRevisions.get(id) ?? 0) + 1,
|
|
1430
|
+
category,
|
|
1431
|
+
severity: "warning",
|
|
1432
|
+
...(options.safeMessage ? { safeMessage: options.safeMessage } : {}),
|
|
1433
|
+
};
|
|
1434
|
+
}
|
|
1435
|
+
const turnId = options.turnScoped === false ? undefined : session.activeTurn?.promptUuid;
|
|
1436
|
+
const id = turnId
|
|
1437
|
+
? `${turnId}:error`
|
|
1438
|
+
: `${params.sessionId}:session-error:${sessionFailureEpoch}`;
|
|
1439
|
+
await clearSessionFailure((failure) => failure.id !== id && !isAdvisory(failure));
|
|
1440
|
+
return {
|
|
1441
|
+
id,
|
|
1442
|
+
revision: (failureRevisions.get(id) ?? 0) + 1,
|
|
1443
|
+
category,
|
|
1444
|
+
...(turnId ? { turnId } : {}),
|
|
1445
|
+
};
|
|
1446
|
+
};
|
|
1447
|
+
const publishSessionFailure = async (category, options = {}) => {
|
|
1448
|
+
const failure = await createSessionFailure(category, options);
|
|
1449
|
+
if (!failure)
|
|
1450
|
+
return;
|
|
1451
|
+
if (await emitSessionFailure(failure, "active")) {
|
|
1452
|
+
failureRevisions.set(failure.id, failure.revision);
|
|
1453
|
+
activeSessionFailures.set(failure.id, failure);
|
|
1454
|
+
}
|
|
1455
|
+
};
|
|
1456
|
+
const clearFailuresFromEarlierTurns = async () => {
|
|
1457
|
+
const activeTurnId = session.activeTurn?.promptUuid;
|
|
1458
|
+
// Advisories carry no turnId, so without the guard every turn boundary would sweep them away.
|
|
1459
|
+
// They are session-scoped and stay until superseded or dismissed by the user.
|
|
1460
|
+
await clearSessionFailure((failure) => failure.turnId !== activeTurnId && !isAdvisory(failure));
|
|
1461
|
+
};
|
|
1462
|
+
const internalErrorForClient = (data, rawDetail) => RequestError.internalError(data, supportsAirSessionFailures(this.clientCapabilities) ? undefined : rawDetail);
|
|
1224
1463
|
const resetTurnScratch = () => {
|
|
1225
1464
|
lastAssistantTotalUsage = null;
|
|
1226
1465
|
lastAssistantUsage = null;
|
|
@@ -1504,6 +1743,7 @@ export class ClaudeAcpAgent {
|
|
|
1504
1743
|
disarmForceCancel(session);
|
|
1505
1744
|
const turn = session.activeTurn;
|
|
1506
1745
|
if (!turn || turn.settled) {
|
|
1746
|
+
this.logger.error(`Session ${params.sessionId}: cannot fail active turn because no unsettled active turn exists: ${error}`);
|
|
1507
1747
|
return;
|
|
1508
1748
|
}
|
|
1509
1749
|
turn.settled = true;
|
|
@@ -1517,6 +1757,32 @@ export class ClaudeAcpAgent {
|
|
|
1517
1757
|
session.emittedAssistantText = false;
|
|
1518
1758
|
turn.reject(error);
|
|
1519
1759
|
};
|
|
1760
|
+
/** Complete a negotiated terminal failure on the prompt response itself,
|
|
1761
|
+
* which is the canonical AIR carrier. Legacy clients keep the historical
|
|
1762
|
+
* JSON-RPC rejection path. */
|
|
1763
|
+
const failActiveWithSessionFailure = async (category, error) => {
|
|
1764
|
+
if (!supportsAirSessionFailures(this.clientCapabilities)) {
|
|
1765
|
+
failActive(error);
|
|
1766
|
+
return;
|
|
1767
|
+
}
|
|
1768
|
+
if (!session.activeTurn || session.activeTurn.settled) {
|
|
1769
|
+
this.logger.error(`Session ${params.sessionId}: cannot attach ${category} to a prompt response because no active turn exists; publishing a session-scoped failure`);
|
|
1770
|
+
await publishSessionFailure(category, { turnScoped: false });
|
|
1771
|
+
return;
|
|
1772
|
+
}
|
|
1773
|
+
const failure = await createSessionFailure(category);
|
|
1774
|
+
if (!failure) {
|
|
1775
|
+
failActive(error);
|
|
1776
|
+
return;
|
|
1777
|
+
}
|
|
1778
|
+
failureRevisions.set(failure.id, failure.revision);
|
|
1779
|
+
activeSessionFailures.set(failure.id, failure);
|
|
1780
|
+
settleActive({
|
|
1781
|
+
stopReason: "end_turn",
|
|
1782
|
+
usage: sessionUsage(session),
|
|
1783
|
+
_meta: sessionFailureMeta(failure, "active"),
|
|
1784
|
+
});
|
|
1785
|
+
};
|
|
1520
1786
|
/** Reject every in-flight turn — used when the stream dies. */
|
|
1521
1787
|
const failAllTurns = (error) => {
|
|
1522
1788
|
disarmForceCancel(session);
|
|
@@ -1634,6 +1900,24 @@ export class ClaudeAcpAgent {
|
|
|
1634
1900
|
pendingNext = null;
|
|
1635
1901
|
const { value: message, done } = raced.result;
|
|
1636
1902
|
if (done || !message) {
|
|
1903
|
+
if (pendingWorkerShutdown) {
|
|
1904
|
+
pendingWorkerShutdown = false;
|
|
1905
|
+
if (session.activeTurn) {
|
|
1906
|
+
if (!isHeldOpen(session.activeTurn)) {
|
|
1907
|
+
await failActiveWithSessionFailure("worker_shutdown", internalErrorForClient({ errorKind: "worker_shutdown" }));
|
|
1908
|
+
}
|
|
1909
|
+
else {
|
|
1910
|
+
// The held turn already has its authoritative terminal outcome,
|
|
1911
|
+
// but EOF permanently closes the non-revivable Query. Preserve
|
|
1912
|
+
// the turn result below and report the independent session-health
|
|
1913
|
+
// failure without a turnId so AIR can offer a new session.
|
|
1914
|
+
await publishSessionFailure("worker_shutdown", { turnScoped: false });
|
|
1915
|
+
}
|
|
1916
|
+
}
|
|
1917
|
+
else {
|
|
1918
|
+
await publishSessionFailure("worker_shutdown", { turnScoped: false });
|
|
1919
|
+
}
|
|
1920
|
+
}
|
|
1637
1921
|
// The stream ended. Settle the in-flight turns FIRST, then release the
|
|
1638
1922
|
// stream resources — same order as the error paths (failAllTurns before
|
|
1639
1923
|
// closeQueryStream). Settling is the user-facing contract; resource
|
|
@@ -1785,6 +2069,23 @@ export class ClaudeAcpAgent {
|
|
|
1785
2069
|
// updated Fast mode state; reconcile it with what we seeded at
|
|
1786
2070
|
// session creation.
|
|
1787
2071
|
await this.syncFastModeState(message.session_id, session, message.fast_mode_state, message.fast_mode_disabled_reason);
|
|
2072
|
+
// Terminal-bound slash commands (absent when none, and on
|
|
2073
|
+
// older CLIs). The session/new advertisement runs before any
|
|
2074
|
+
// init frame can be observed, so the first latch (or a
|
|
2075
|
+
// genuine change) re-publishes the now-filtered list.
|
|
2076
|
+
if (message.terminal_slash_commands &&
|
|
2077
|
+
JSON.stringify(message.terminal_slash_commands) !==
|
|
2078
|
+
JSON.stringify(session.terminalSlashCommands)) {
|
|
2079
|
+
session.terminalSlashCommands = message.terminal_slash_commands;
|
|
2080
|
+
try {
|
|
2081
|
+
await this.sendAvailableCommandsUpdate(message.session_id);
|
|
2082
|
+
}
|
|
2083
|
+
catch (error) {
|
|
2084
|
+
// Advisory reconcile only — the client keeps its current
|
|
2085
|
+
// (unfiltered) list; never fail the turn over it.
|
|
2086
|
+
this.logger.error(`Failed to re-advertise slash commands: ${error}`);
|
|
2087
|
+
}
|
|
2088
|
+
}
|
|
1788
2089
|
break;
|
|
1789
2090
|
case "status": {
|
|
1790
2091
|
// These banners count as delivered text (via sendUpdate), so
|
|
@@ -1977,7 +2278,7 @@ export class ClaudeAcpAgent {
|
|
|
1977
2278
|
// the next prompt; only a timer could tell those apart.
|
|
1978
2279
|
this.logger.error(`Session ${params.sessionId}: SDK went idle without emitting a result ` +
|
|
1979
2280
|
`for the active turn; failing the in-flight prompt (issue #825)`);
|
|
1980
|
-
|
|
2281
|
+
await failActiveWithSessionFailure("internal_error", RequestError.internalError(errorKindData("no_result"), TURN_NO_RESULT_MESSAGE));
|
|
1981
2282
|
}
|
|
1982
2283
|
// The SDK generates the session title in a background task and
|
|
1983
2284
|
// persists it to the session file; `idle` is the turn-over
|
|
@@ -2035,7 +2336,7 @@ export class ClaudeAcpAgent {
|
|
|
2035
2336
|
sessionId: message.session_id,
|
|
2036
2337
|
update: {
|
|
2037
2338
|
sessionUpdate: "available_commands_update",
|
|
2038
|
-
availableCommands: getAvailableSlashCommands(message.commands),
|
|
2339
|
+
availableCommands: getAvailableSlashCommands(message.commands, session.terminalSlashCommands),
|
|
2039
2340
|
},
|
|
2040
2341
|
});
|
|
2041
2342
|
break;
|
|
@@ -2177,9 +2478,14 @@ export class ClaudeAcpAgent {
|
|
|
2177
2478
|
}
|
|
2178
2479
|
break;
|
|
2179
2480
|
case "worker_shutting_down":
|
|
2180
|
-
//
|
|
2181
|
-
//
|
|
2182
|
-
//
|
|
2481
|
+
// Defer until stream end. The announcement is durable and may be
|
|
2482
|
+
// replayed before later frames, but those frames do not prove that
|
|
2483
|
+
// a new worker epoch began: they can be buffered output from the
|
|
2484
|
+
// shutting-down worker. Keep the signal armed until the transport
|
|
2485
|
+
// actually ends. Deliberately do not add a quiet-period timer: the
|
|
2486
|
+
// iterator has no replay/live boundary, so a timeout could publish
|
|
2487
|
+
// while a slow replay is still in flight.
|
|
2488
|
+
pendingWorkerShutdown = true;
|
|
2183
2489
|
break;
|
|
2184
2490
|
case "elicitation_complete": {
|
|
2185
2491
|
// A url-mode MCP elicitation finished server-side. Let the client
|
|
@@ -2216,7 +2522,15 @@ export class ClaudeAcpAgent {
|
|
|
2216
2522
|
// CLIs, where "revert" marked a turn-only fallback — for that
|
|
2217
2523
|
// direction the session stays on the original model, so skip
|
|
2218
2524
|
// the persistent-swap claim and the state sync.
|
|
2219
|
-
|
|
2525
|
+
//
|
|
2526
|
+
// `scope` (CLI 2.1.232+) marks WHERE the fallback happened:
|
|
2527
|
+
// "local" means a subagent / side-question / background fork
|
|
2528
|
+
// response fell back and the session model is unchanged, so
|
|
2529
|
+
// syncing the picker would advertise a model the session
|
|
2530
|
+
// isn't running. Absent scope means an older CLI, where every
|
|
2531
|
+
// retry was a session-level swap — treat as "session".
|
|
2532
|
+
const local = message.scope === "local";
|
|
2533
|
+
const persistent = message.direction !== "revert" && !local;
|
|
2220
2534
|
const category = message.api_refusal_category
|
|
2221
2535
|
? ` (${message.api_refusal_category})`
|
|
2222
2536
|
: "";
|
|
@@ -2225,17 +2539,29 @@ export class ClaudeAcpAgent {
|
|
|
2225
2539
|
: "";
|
|
2226
2540
|
const outcome = persistent
|
|
2227
2541
|
? `The session will continue on ${message.fallback_model}.`
|
|
2228
|
-
:
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
|
|
2234
|
-
|
|
2235
|
-
|
|
2542
|
+
: local
|
|
2543
|
+
? `Only that response came from ${message.fallback_model}; the session stays on ${message.original_model}.`
|
|
2544
|
+
: `The session stays on ${message.original_model}.`;
|
|
2545
|
+
const fallbackNotice = `${message.original_model} declined this request${category}; ` +
|
|
2546
|
+
`retried with ${message.fallback_model}. ${outcome}${explanation}`;
|
|
2547
|
+
// A silent model swap is a session-level advisory, not something the model said.
|
|
2548
|
+
// Clients that negotiated typed records get it as one; the rest keep the bold-label
|
|
2549
|
+
// transcript line, which was the only way to flag it before.
|
|
2550
|
+
if (supportsAirSessionFailures(this.clientCapabilities)) {
|
|
2551
|
+
await publishSessionFailure("advisory", { safeMessage: fallbackNotice });
|
|
2552
|
+
}
|
|
2553
|
+
else {
|
|
2554
|
+
await sendUpdate({
|
|
2555
|
+
sessionId: message.session_id,
|
|
2556
|
+
update: {
|
|
2557
|
+
sessionUpdate: "agent_message_chunk",
|
|
2558
|
+
content: {
|
|
2559
|
+
type: "text",
|
|
2560
|
+
text: `**Model fallback:** ${fallbackNotice}`,
|
|
2561
|
+
},
|
|
2236
2562
|
},
|
|
2237
|
-
}
|
|
2238
|
-
}
|
|
2563
|
+
});
|
|
2564
|
+
}
|
|
2239
2565
|
if (persistent) {
|
|
2240
2566
|
await this.syncModelAfterRefusalFallback(params.sessionId, session, message.fallback_model);
|
|
2241
2567
|
}
|
|
@@ -2473,6 +2799,7 @@ export class ClaudeAcpAgent {
|
|
|
2473
2799
|
}
|
|
2474
2800
|
if (session.cancelled) {
|
|
2475
2801
|
if (!isAutonomousResult) {
|
|
2802
|
+
await clearFailuresFromEarlierTurns();
|
|
2476
2803
|
stopReason = "cancelled";
|
|
2477
2804
|
}
|
|
2478
2805
|
break;
|
|
@@ -2508,6 +2835,7 @@ export class ClaudeAcpAgent {
|
|
|
2508
2835
|
}
|
|
2509
2836
|
break;
|
|
2510
2837
|
}
|
|
2838
|
+
await clearFailuresFromEarlierTurns();
|
|
2511
2839
|
// A refusal can arrive on any result subtype (and may even set
|
|
2512
2840
|
// is_error), so handle it before the subtype switch — otherwise the
|
|
2513
2841
|
// is_error throw below would surface it as an internal error. The
|
|
@@ -2544,10 +2872,13 @@ export class ClaudeAcpAgent {
|
|
|
2544
2872
|
settleOrDefer({ stopReason: "end_turn", usage: sessionUsage(session) });
|
|
2545
2873
|
break;
|
|
2546
2874
|
}
|
|
2875
|
+
if (!message.is_error) {
|
|
2876
|
+
await clearSessionFailure();
|
|
2877
|
+
}
|
|
2547
2878
|
switch (message.subtype) {
|
|
2548
2879
|
case "success": {
|
|
2549
2880
|
if (message.result.includes("Please run /login")) {
|
|
2550
|
-
|
|
2881
|
+
await failActiveWithSessionFailure("auth_required", RequestError.authRequired());
|
|
2551
2882
|
break;
|
|
2552
2883
|
}
|
|
2553
2884
|
if (message.stop_reason === "max_tokens") {
|
|
@@ -2555,7 +2886,7 @@ export class ClaudeAcpAgent {
|
|
|
2555
2886
|
break;
|
|
2556
2887
|
}
|
|
2557
2888
|
if (message.is_error) {
|
|
2558
|
-
|
|
2889
|
+
await failActiveWithSessionFailure(providerFailureCategory(lastAssistantError), internalErrorForClient(errorKindData(lastAssistantError), message.result));
|
|
2559
2890
|
break;
|
|
2560
2891
|
}
|
|
2561
2892
|
// The result text is forwarded in two cases. Local-only
|
|
@@ -2591,17 +2922,29 @@ export class ClaudeAcpAgent {
|
|
|
2591
2922
|
break;
|
|
2592
2923
|
}
|
|
2593
2924
|
if (message.is_error) {
|
|
2594
|
-
|
|
2925
|
+
await failActiveWithSessionFailure(providerFailureCategory(lastAssistantError), internalErrorForClient(errorKindData(lastAssistantError), message.errors.join(", ") || message.subtype));
|
|
2595
2926
|
break;
|
|
2596
2927
|
}
|
|
2597
2928
|
stopReason = "end_turn";
|
|
2598
2929
|
break;
|
|
2599
2930
|
}
|
|
2600
2931
|
case "error_max_budget_usd":
|
|
2932
|
+
if (message.is_error) {
|
|
2933
|
+
await failActiveWithSessionFailure("budget_exhausted", internalErrorForClient(errorKindData(lastAssistantError), message.errors.join(", ") || message.subtype));
|
|
2934
|
+
break;
|
|
2935
|
+
}
|
|
2936
|
+
stopReason = "max_turn_requests";
|
|
2937
|
+
break;
|
|
2601
2938
|
case "error_max_turns":
|
|
2939
|
+
if (message.is_error) {
|
|
2940
|
+
await failActiveWithSessionFailure("provider_error", internalErrorForClient(errorKindData(lastAssistantError), message.errors.join(", ") || message.subtype));
|
|
2941
|
+
break;
|
|
2942
|
+
}
|
|
2943
|
+
stopReason = "max_turn_requests";
|
|
2944
|
+
break;
|
|
2602
2945
|
case "error_max_structured_output_retries":
|
|
2603
2946
|
if (message.is_error) {
|
|
2604
|
-
|
|
2947
|
+
await failActiveWithSessionFailure("provider_error", internalErrorForClient(errorKindData(lastAssistantError), message.errors.join(", ") || message.subtype));
|
|
2605
2948
|
break;
|
|
2606
2949
|
}
|
|
2607
2950
|
stopReason = "max_turn_requests";
|
|
@@ -2933,7 +3276,7 @@ export class ClaudeAcpAgent {
|
|
|
2933
3276
|
break;
|
|
2934
3277
|
}
|
|
2935
3278
|
if (message.type === "assistant" && isSyntheticLoginMessage(message.message)) {
|
|
2936
|
-
|
|
3279
|
+
await failActiveWithSessionFailure("auth_required", RequestError.authRequired());
|
|
2937
3280
|
break;
|
|
2938
3281
|
}
|
|
2939
3282
|
let content;
|
|
@@ -3095,13 +3438,22 @@ export class ClaudeAcpAgent {
|
|
|
3095
3438
|
}
|
|
3096
3439
|
break;
|
|
3097
3440
|
}
|
|
3098
|
-
|
|
3099
|
-
|
|
3100
|
-
|
|
3441
|
+
case "conversation_reset": {
|
|
3442
|
+
// The SDK has switched to a fresh conversation, whose Task* IDs
|
|
3443
|
+
// and task store are independent of the previous transcript.
|
|
3444
|
+
// Clear both the in-memory snapshot and the client's visible plan
|
|
3445
|
+
// before any follow-up prompt can republish stale tasks.
|
|
3446
|
+
session.taskState.clear();
|
|
3447
|
+
await this.publishTaskPlan(params.sessionId, session.taskState);
|
|
3448
|
+
break;
|
|
3449
|
+
}
|
|
3101
3450
|
case "tool_use_summary":
|
|
3102
|
-
case "auth_status":
|
|
3103
3451
|
case "prompt_suggestion":
|
|
3104
|
-
|
|
3452
|
+
break;
|
|
3453
|
+
case "auth_status":
|
|
3454
|
+
if (!message.isAuthenticating && message.error === undefined) {
|
|
3455
|
+
await clearSessionFailure((failure) => failure.category === "auth_required");
|
|
3456
|
+
}
|
|
3105
3457
|
break;
|
|
3106
3458
|
default:
|
|
3107
3459
|
unreachable(message, this.logger);
|
|
@@ -3123,6 +3475,19 @@ export class ClaudeAcpAgent {
|
|
|
3123
3475
|
message.includes("process exited with") ||
|
|
3124
3476
|
message.includes("process terminated by signal") ||
|
|
3125
3477
|
message.includes("Failed to write to process stdin"));
|
|
3478
|
+
if (supportsAirSessionFailures(this.clientCapabilities) && session.activeTurn) {
|
|
3479
|
+
if (!isHeldOpen(session.activeTurn)) {
|
|
3480
|
+
await failActiveWithSessionFailure("transport_lost", internalErrorForClient({ errorKind: "transport_lost" }));
|
|
3481
|
+
}
|
|
3482
|
+
else {
|
|
3483
|
+
// The held turn keeps its recorded PromptResponse outcome, while the
|
|
3484
|
+
// exhausted Query makes the session independently unrecoverable.
|
|
3485
|
+
await publishSessionFailure("transport_lost", { turnScoped: false });
|
|
3486
|
+
}
|
|
3487
|
+
}
|
|
3488
|
+
else {
|
|
3489
|
+
await publishSessionFailure("transport_lost", { turnScoped: false });
|
|
3490
|
+
}
|
|
3126
3491
|
// Either way the query iterator is finished and the consumer is exiting,
|
|
3127
3492
|
// so release its resources via closeQueryStream (idempotent). A process
|
|
3128
3493
|
// death is unrecoverable, so additionally evict the session so the client
|
|
@@ -3136,7 +3501,9 @@ export class ClaudeAcpAgent {
|
|
|
3136
3501
|
}
|
|
3137
3502
|
else {
|
|
3138
3503
|
this.logger.error(`Session ${params.sessionId}: query stream error: ${message}`);
|
|
3139
|
-
failAllTurns(
|
|
3504
|
+
failAllTurns(supportsAirSessionFailures(this.clientCapabilities)
|
|
3505
|
+
? internalErrorForClient({ errorKind: "transport_lost" })
|
|
3506
|
+
: error);
|
|
3140
3507
|
this.closeQueryStream(session);
|
|
3141
3508
|
}
|
|
3142
3509
|
}
|
|
@@ -3992,7 +4359,7 @@ export class ClaudeAcpAgent {
|
|
|
3992
4359
|
sessionId,
|
|
3993
4360
|
update: {
|
|
3994
4361
|
sessionUpdate: "available_commands_update",
|
|
3995
|
-
availableCommands: getAvailableSlashCommands(commands),
|
|
4362
|
+
availableCommands: getAvailableSlashCommands(commands, session.terminalSlashCommands),
|
|
3996
4363
|
},
|
|
3997
4364
|
});
|
|
3998
4365
|
}
|
|
@@ -4506,15 +4873,7 @@ export class ClaudeAcpAgent {
|
|
|
4506
4873
|
hooks: [
|
|
4507
4874
|
createTaskHook({
|
|
4508
4875
|
taskState,
|
|
4509
|
-
onChange:
|
|
4510
|
-
await this.client.sessionUpdate({
|
|
4511
|
-
sessionId,
|
|
4512
|
-
update: {
|
|
4513
|
-
sessionUpdate: "plan",
|
|
4514
|
-
entries: taskStateToPlanEntries(taskState),
|
|
4515
|
-
},
|
|
4516
|
-
});
|
|
4517
|
-
},
|
|
4876
|
+
onChange: () => this.publishTaskPlan(sessionId, taskState),
|
|
4518
4877
|
}),
|
|
4519
4878
|
],
|
|
4520
4879
|
},
|
|
@@ -4525,15 +4884,7 @@ export class ClaudeAcpAgent {
|
|
|
4525
4884
|
hooks: [
|
|
4526
4885
|
createTaskHook({
|
|
4527
4886
|
taskState,
|
|
4528
|
-
onChange:
|
|
4529
|
-
await this.client.sessionUpdate({
|
|
4530
|
-
sessionId,
|
|
4531
|
-
update: {
|
|
4532
|
-
sessionUpdate: "plan",
|
|
4533
|
-
entries: taskStateToPlanEntries(taskState),
|
|
4534
|
-
},
|
|
4535
|
-
});
|
|
4536
|
-
},
|
|
4887
|
+
onChange: () => this.publishTaskPlan(sessionId, taskState),
|
|
4537
4888
|
}),
|
|
4538
4889
|
],
|
|
4539
4890
|
},
|
|
@@ -5113,11 +5464,21 @@ export function buildConfigOptions(modes, models, modelInfos, currentEffortLevel
|
|
|
5113
5464
|
category: "model",
|
|
5114
5465
|
type: "select",
|
|
5115
5466
|
currentValue: models.currentModelId,
|
|
5116
|
-
options: models.availableModels.map((m) =>
|
|
5117
|
-
|
|
5118
|
-
|
|
5119
|
-
|
|
5120
|
-
|
|
5467
|
+
options: models.availableModels.map((m) => {
|
|
5468
|
+
if (m.modelId === "default") {
|
|
5469
|
+
const defaultInfo = modelInfos.find((mi) => mi.value === "default");
|
|
5470
|
+
const resolvedModel = defaultInfo?.resolvedModel;
|
|
5471
|
+
if (resolvedModel) {
|
|
5472
|
+
const namedMatch = modelInfos.find((mi) => mi.value !== "default" && mi.resolvedModel === resolvedModel);
|
|
5473
|
+
return {
|
|
5474
|
+
value: m.modelId,
|
|
5475
|
+
name: m.name,
|
|
5476
|
+
description: namedMatch?.displayName ?? resolvedModel,
|
|
5477
|
+
};
|
|
5478
|
+
}
|
|
5479
|
+
}
|
|
5480
|
+
return { value: m.modelId, name: m.name, description: m.description ?? undefined };
|
|
5481
|
+
}),
|
|
5121
5482
|
},
|
|
5122
5483
|
];
|
|
5123
5484
|
// Add effort level option based on the currently selected model
|
|
@@ -5549,7 +5910,11 @@ async function getAvailableModels(query, models, sdkModels, settingsManager, log
|
|
|
5549
5910
|
resumedContextWindow,
|
|
5550
5911
|
};
|
|
5551
5912
|
}
|
|
5552
|
-
function getAvailableSlashCommands(commands
|
|
5913
|
+
function getAvailableSlashCommands(commands,
|
|
5914
|
+
// Names the CLI tagged terminal-bound on `system`/init (their UX lives in
|
|
5915
|
+
// the CLI's own terminal, which ACP clients aren't) — filtered alongside
|
|
5916
|
+
// the static list. Raw CLI names, matched before the MCP rename.
|
|
5917
|
+
terminalCommands) {
|
|
5553
5918
|
const UNSUPPORTED_COMMANDS = [
|
|
5554
5919
|
"clear",
|
|
5555
5920
|
"cost",
|
|
@@ -5561,6 +5926,7 @@ function getAvailableSlashCommands(commands) {
|
|
|
5561
5926
|
"todos",
|
|
5562
5927
|
];
|
|
5563
5928
|
return commands
|
|
5929
|
+
.filter((command) => !terminalCommands?.includes(command.name))
|
|
5564
5930
|
.map((command) => {
|
|
5565
5931
|
const input = command.argumentHint
|
|
5566
5932
|
? {
|
|
@@ -5739,7 +6105,7 @@ function shouldEmitToolCall(toolName) {
|
|
|
5739
6105
|
* are kept out of ACP's standard `title`, which clients may use as the shell
|
|
5740
6106
|
* command preview, while still giving clients access to Claude's concise
|
|
5741
6107
|
* human-readable title. */
|
|
5742
|
-
function claudeCodeMetaFromToolUse(toolUse) {
|
|
6108
|
+
function claudeCodeMetaFromToolUse(toolUse, cwd) {
|
|
5743
6109
|
const description = toolUse.name === "Bash" &&
|
|
5744
6110
|
toolUse.input !== null &&
|
|
5745
6111
|
typeof toolUse.input === "object" &&
|
|
@@ -5747,12 +6113,54 @@ function claudeCodeMetaFromToolUse(toolUse) {
|
|
|
5747
6113
|
typeof toolUse.input.description === "string"
|
|
5748
6114
|
? toolUse.input.description
|
|
5749
6115
|
: undefined;
|
|
6116
|
+
const skillName = toolUse.name === "Skill"
|
|
6117
|
+
? toolUse.input?.skill
|
|
6118
|
+
: undefined;
|
|
6119
|
+
const skillPath = skillName ? resolveSkillPath(skillName, cwd) : undefined;
|
|
5750
6120
|
return {
|
|
5751
6121
|
toolName: toolUse.name,
|
|
5752
6122
|
...(description ? { title: description } : {}),
|
|
5753
6123
|
...((toolUse.name === "Agent" || toolUse.name === "Task") && { subagent: true }),
|
|
6124
|
+
...(skillName ? { skill: skillName } : {}),
|
|
6125
|
+
...(skillPath ? { skillPath } : {}),
|
|
5754
6126
|
};
|
|
5755
6127
|
}
|
|
6128
|
+
/** Roots a skill's directory may sit under, relative to the directory the scope resolves to. */
|
|
6129
|
+
const SKILL_CONTAINER_DIRS = [".claude/skills", ".agents/skills"];
|
|
6130
|
+
/**
|
|
6131
|
+
* Absolute path of a skill's `SKILL.md`, or `undefined` when none of the known layouts holds one.
|
|
6132
|
+
*
|
|
6133
|
+
* The `Skill` tool reports only the skill's name, so the file has to be located by probing the layouts skills
|
|
6134
|
+
* actually use: project- and user-level `.claude/skills` (plus this repo's `.agents/skills` source of truth), and
|
|
6135
|
+
* for a `<prefix>:<name>` spelling either a plugin (`.claude/plugins/<prefix>/skills/<name>`) or a
|
|
6136
|
+
* directory-scoped skill (`<prefix>/.claude/skills/<name>`), which share that spelling. Only a path that exists
|
|
6137
|
+
* on disk is returned, so a wrong guess costs nothing and clients never render a link to a missing file.
|
|
6138
|
+
*/
|
|
6139
|
+
function resolveSkillPath(skillName, cwd) {
|
|
6140
|
+
if (!cwd) {
|
|
6141
|
+
return undefined;
|
|
6142
|
+
}
|
|
6143
|
+
const colon = skillName.indexOf(":");
|
|
6144
|
+
const scope = colon < 0 ? undefined : skillName.slice(0, colon);
|
|
6145
|
+
const name = colon < 0 ? skillName : skillName.slice(colon + 1);
|
|
6146
|
+
if (!name) {
|
|
6147
|
+
return undefined;
|
|
6148
|
+
}
|
|
6149
|
+
const candidates = [];
|
|
6150
|
+
const addCandidates = (base) => {
|
|
6151
|
+
for (const container of SKILL_CONTAINER_DIRS) {
|
|
6152
|
+
candidates.push(path.join(base, container, name, "SKILL.md"));
|
|
6153
|
+
}
|
|
6154
|
+
};
|
|
6155
|
+
if (scope) {
|
|
6156
|
+
// A `<prefix>:<name>` skill is either directory-scoped or a plugin's; both spellings look identical.
|
|
6157
|
+
addCandidates(path.join(cwd, scope));
|
|
6158
|
+
candidates.push(path.join(cwd, ".claude/plugins", scope, "skills", name, "SKILL.md"));
|
|
6159
|
+
}
|
|
6160
|
+
addCandidates(cwd);
|
|
6161
|
+
addCandidates(os.homedir());
|
|
6162
|
+
return candidates.find((candidate) => existsSync(candidate));
|
|
6163
|
+
}
|
|
5756
6164
|
/** Build the `tool_call` (or, with `refine`, the `tool_call_update`)
|
|
5757
6165
|
* notification for a tool_use. Shared by every site that surfaces a tool call:
|
|
5758
6166
|
* the streamed tool_use path (first encounter → tool_call, later encounter →
|
|
@@ -5763,7 +6171,7 @@ function claudeCodeMetaFromToolUse(toolUse) {
|
|
|
5763
6171
|
function toolCallNotification(toolUse, rawInput, supportsTerminalOutput, cwd, refine = false) {
|
|
5764
6172
|
if (refine) {
|
|
5765
6173
|
return {
|
|
5766
|
-
_meta: { claudeCode: claudeCodeMetaFromToolUse(toolUse) },
|
|
6174
|
+
_meta: { claudeCode: claudeCodeMetaFromToolUse(toolUse, cwd) },
|
|
5767
6175
|
toolCallId: toolUse.id,
|
|
5768
6176
|
sessionUpdate: "tool_call_update",
|
|
5769
6177
|
rawInput,
|
|
@@ -5772,7 +6180,7 @@ function toolCallNotification(toolUse, rawInput, supportsTerminalOutput, cwd, re
|
|
|
5772
6180
|
}
|
|
5773
6181
|
return {
|
|
5774
6182
|
_meta: {
|
|
5775
|
-
claudeCode: claudeCodeMetaFromToolUse(toolUse),
|
|
6183
|
+
claudeCode: claudeCodeMetaFromToolUse(toolUse, cwd),
|
|
5776
6184
|
...(toolUse.name === "Bash" && supportsTerminalOutput
|
|
5777
6185
|
? { terminal_info: { terminal_id: toolUse.id } }
|
|
5778
6186
|
: {}),
|
|
@@ -5798,7 +6206,7 @@ function streamedInputRefinement(toolUse, input, supportsTerminalOutput, cwd) {
|
|
|
5798
6206
|
const { title, kind, locations } = toolInfoFromToolUse({ ...toolUse, input }, supportsTerminalOutput, cwd);
|
|
5799
6207
|
return {
|
|
5800
6208
|
_meta: {
|
|
5801
|
-
claudeCode: claudeCodeMetaFromToolUse({ ...toolUse, input }),
|
|
6209
|
+
claudeCode: claudeCodeMetaFromToolUse({ ...toolUse, input }, cwd),
|
|
5802
6210
|
},
|
|
5803
6211
|
toolCallId: toolUse.id,
|
|
5804
6212
|
sessionUpdate: "tool_call_update",
|
|
@@ -6081,20 +6489,40 @@ export function toAcpNotifications(content, role, sessionId, toolUseCache, clien
|
|
|
6081
6489
|
}
|
|
6082
6490
|
if (isTaskTool(toolUse.name)) {
|
|
6083
6491
|
// Headless/SDK sessions emit Task* tools instead of TodoWrite.
|
|
6084
|
-
// TaskCreate / TaskUpdate mutate the accumulated task list
|
|
6085
|
-
//
|
|
6086
|
-
//
|
|
6087
|
-
//
|
|
6492
|
+
// TaskCreate / TaskUpdate mutate the accumulated task list. TaskList
|
|
6493
|
+
// reconciles it from the SDK's authoritative snapshot, which repairs
|
|
6494
|
+
// resumed or compacted sessions whose creating calls are no longer in
|
|
6495
|
+
// replay history. TaskGet is read-only and remains suppressed. Plan
|
|
6496
|
+
// updates always carry the full accumulated snapshot, mirroring the
|
|
6497
|
+
// legacy TodoWrite behavior.
|
|
6088
6498
|
const isError = "is_error" in chunk && chunk.is_error;
|
|
6499
|
+
let shouldEmitTaskPlan = false;
|
|
6089
6500
|
if (!isError) {
|
|
6090
6501
|
if (toolUse.name === "TaskCreate") {
|
|
6091
|
-
applyTaskCreate(taskState, toolUse.input, parseTaskCreateOutput(chunk.content));
|
|
6502
|
+
applyTaskCreate(taskState, toolUse.input, parseTaskCreateOutput(toolUseResult) ?? parseTaskCreateOutput(chunk.content));
|
|
6503
|
+
shouldEmitTaskPlan = true;
|
|
6092
6504
|
}
|
|
6093
6505
|
else if (toolUse.name === "TaskUpdate") {
|
|
6094
|
-
|
|
6506
|
+
const input = toolUse.input;
|
|
6507
|
+
const output = parseTaskUpdateOutput(toolUseResult, input?.taskId) ??
|
|
6508
|
+
parseTaskUpdateOutput(chunk.content, input?.taskId);
|
|
6509
|
+
// Older CLI transcripts have no structured output, so retain the
|
|
6510
|
+
// input-based fallback. When an output is available, only apply a
|
|
6511
|
+
// confirmed update for the same task.
|
|
6512
|
+
if (!output || (output.success && output.taskId === input?.taskId)) {
|
|
6513
|
+
applyTaskUpdate(taskState, input);
|
|
6514
|
+
shouldEmitTaskPlan = true;
|
|
6515
|
+
}
|
|
6516
|
+
}
|
|
6517
|
+
else if (toolUse.name === "TaskList") {
|
|
6518
|
+
const output = parseTaskListOutput(toolUseResult) ?? parseTaskListOutput(chunk.content);
|
|
6519
|
+
if (output) {
|
|
6520
|
+
applyTaskList(taskState, output);
|
|
6521
|
+
shouldEmitTaskPlan = true;
|
|
6522
|
+
}
|
|
6095
6523
|
}
|
|
6096
6524
|
}
|
|
6097
|
-
if (
|
|
6525
|
+
if (shouldEmitTaskPlan) {
|
|
6098
6526
|
update = {
|
|
6099
6527
|
sessionUpdate: "plan",
|
|
6100
6528
|
entries: taskStateToPlanEntries(taskState),
|
package/dist/tools.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PlanEntry, ToolCallContent, ToolCallLocation, ToolKind } from "@agentclientprotocol/sdk";
|
|
2
2
|
import { HookCallback } from "@anthropic-ai/claude-agent-sdk";
|
|
3
|
-
import { TaskCreateInput, TaskCreateOutput, TaskUpdateInput } from "@anthropic-ai/claude-agent-sdk/sdk-tools.js";
|
|
3
|
+
import { TaskCreateInput, TaskCreateOutput, TaskListOutput, TaskUpdateInput, TaskUpdateOutput } from "@anthropic-ai/claude-agent-sdk/sdk-tools.js";
|
|
4
4
|
import { ToolResultBlockParam, WebSearchToolResultBlockParam } from "@anthropic-ai/sdk/resources";
|
|
5
5
|
import { BetaBashCodeExecutionToolResultBlockParam, BetaCodeExecutionToolResultBlockParam, BetaRequestMCPToolResultBlockParam, BetaTextEditorCodeExecutionToolResultBlockParam, BetaToolResultBlockParam, BetaToolSearchToolResultBlockParam, BetaWebFetchToolResultBlockParam, BetaWebSearchToolResultBlockParam } from "@anthropic-ai/sdk/resources/beta.mjs";
|
|
6
6
|
interface ToolInfo {
|
|
@@ -57,14 +57,12 @@ export type TaskEntry = {
|
|
|
57
57
|
description?: string;
|
|
58
58
|
};
|
|
59
59
|
export type TaskState = Map<string, TaskEntry>;
|
|
60
|
-
/**
|
|
61
|
-
* Best-effort parse of a TaskCreate tool_result content into the structured
|
|
62
|
-
* TaskCreateOutput. The SDK delivers tool outputs either as a string or as
|
|
63
|
-
* an array of TextBlockParam-like blocks containing JSON text; try both.
|
|
64
|
-
*/
|
|
65
60
|
export declare function parseTaskCreateOutput(content: unknown): TaskCreateOutput | undefined;
|
|
61
|
+
export declare function parseTaskListOutput(content: unknown): TaskListOutput | undefined;
|
|
62
|
+
export declare function parseTaskUpdateOutput(content: unknown, expectedTaskId?: string): TaskUpdateOutput | undefined;
|
|
66
63
|
export declare function applyTaskCreate(state: TaskState, input: TaskCreateInput | undefined, output: TaskCreateOutput | undefined): void;
|
|
67
64
|
export declare function applyTaskUpdate(state: TaskState, input: TaskUpdateInput | undefined): void;
|
|
65
|
+
export declare function applyTaskList(state: TaskState, output: TaskListOutput): void;
|
|
68
66
|
export declare function taskStateToPlanEntries(state: TaskState): PlanEntry[];
|
|
69
67
|
export declare function markdownEscape(text: string): string;
|
|
70
68
|
/**
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,QAAQ,EACT,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAaL,eAAe,EACf,gBAAgB,EAChB,eAAe,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.js
CHANGED
|
@@ -96,7 +96,7 @@ export function toolInfoFromToolUse(toolUse, supportsTerminalOutput = false, cwd
|
|
|
96
96
|
}
|
|
97
97
|
const displayPath = input?.file_path ? toDisplayPath(input.file_path, cwd) : undefined;
|
|
98
98
|
return {
|
|
99
|
-
title: displayPath ? `Write ${displayPath}` : "
|
|
99
|
+
title: displayPath ? `Write ${displayPath}` : "Preparing file…",
|
|
100
100
|
kind: "edit",
|
|
101
101
|
content,
|
|
102
102
|
locations: input?.file_path ? [{ path: input.file_path }] : [],
|
|
@@ -291,6 +291,15 @@ export function toolInfoFromToolUse(toolUse, supportsTerminalOutput = false, cwd
|
|
|
291
291
|
: [],
|
|
292
292
|
};
|
|
293
293
|
}
|
|
294
|
+
case "Skill": {
|
|
295
|
+
const input = toolUse.input;
|
|
296
|
+
const skillName = input?.skill;
|
|
297
|
+
return {
|
|
298
|
+
title: skillName ? `Load skill: ${skillName}` : "Load skill",
|
|
299
|
+
kind: "other",
|
|
300
|
+
content: [],
|
|
301
|
+
};
|
|
302
|
+
}
|
|
294
303
|
case "AskUserQuestion": {
|
|
295
304
|
const input = toolUse.input;
|
|
296
305
|
const questions = Array.isArray(input?.questions) ? input.questions : [];
|
|
@@ -658,6 +667,9 @@ export function toolUpdateFromToolResult(toolResult, toolUse, supportsTerminalOu
|
|
|
658
667
|
// renders, no worse than before.
|
|
659
668
|
return toAcpContentUpdate(stripAgentTrailerFromContent(toolResult.content), "is_error" in toolResult ? toolResult.is_error : false);
|
|
660
669
|
}
|
|
670
|
+
case "Skill": {
|
|
671
|
+
return {};
|
|
672
|
+
}
|
|
661
673
|
case "Edit": // Edit is handled in hooks
|
|
662
674
|
case "Write": {
|
|
663
675
|
return {};
|
|
@@ -798,35 +810,32 @@ function toAcpContentBlock(content, isError) {
|
|
|
798
810
|
}
|
|
799
811
|
export function planEntries(input) {
|
|
800
812
|
return (input?.todos ?? []).map((todo) => ({
|
|
801
|
-
content: todo.content,
|
|
813
|
+
content: todo.status === "in_progress" && todo.activeForm ? todo.activeForm : todo.content,
|
|
802
814
|
status: todo.status,
|
|
803
815
|
priority: "medium",
|
|
804
816
|
}));
|
|
805
817
|
}
|
|
806
818
|
/**
|
|
807
|
-
* Best-effort parse of a
|
|
808
|
-
*
|
|
809
|
-
*
|
|
819
|
+
* Best-effort parse of a structured Task* tool_result. The SDK delivers tool
|
|
820
|
+
* outputs either as a string or as an array of TextBlockParam-like blocks
|
|
821
|
+
* containing JSON text; try both.
|
|
810
822
|
*/
|
|
811
|
-
|
|
823
|
+
function parseJsonToolOutput(content, isExpectedOutput) {
|
|
812
824
|
const tryParse = (text) => {
|
|
813
825
|
try {
|
|
814
826
|
const parsed = JSON.parse(text);
|
|
815
|
-
|
|
816
|
-
typeof parsed === "object" &&
|
|
817
|
-
parsed.task &&
|
|
818
|
-
typeof parsed.task.id === "string") {
|
|
819
|
-
return parsed;
|
|
820
|
-
}
|
|
827
|
+
return isExpectedOutput(parsed) ? parsed : undefined;
|
|
821
828
|
}
|
|
822
829
|
catch {
|
|
823
|
-
|
|
830
|
+
return undefined;
|
|
824
831
|
}
|
|
825
|
-
return undefined;
|
|
826
832
|
};
|
|
827
833
|
if (typeof content === "string") {
|
|
828
834
|
return tryParse(content);
|
|
829
835
|
}
|
|
836
|
+
if (content && typeof content === "object" && !Array.isArray(content)) {
|
|
837
|
+
return isExpectedOutput(content) ? content : undefined;
|
|
838
|
+
}
|
|
830
839
|
if (Array.isArray(content)) {
|
|
831
840
|
for (const block of content) {
|
|
832
841
|
if (block && typeof block === "object" && "type" in block && block.type === "text") {
|
|
@@ -841,6 +850,96 @@ export function parseTaskCreateOutput(content) {
|
|
|
841
850
|
}
|
|
842
851
|
return undefined;
|
|
843
852
|
}
|
|
853
|
+
function toolOutputTexts(content) {
|
|
854
|
+
if (typeof content === "string")
|
|
855
|
+
return [content];
|
|
856
|
+
if (!Array.isArray(content))
|
|
857
|
+
return [];
|
|
858
|
+
return content.flatMap((block) => block &&
|
|
859
|
+
typeof block === "object" &&
|
|
860
|
+
"type" in block &&
|
|
861
|
+
block.type === "text" &&
|
|
862
|
+
"text" in block &&
|
|
863
|
+
typeof block.text === "string"
|
|
864
|
+
? [block.text]
|
|
865
|
+
: []);
|
|
866
|
+
}
|
|
867
|
+
export function parseTaskCreateOutput(content) {
|
|
868
|
+
const structured = parseJsonToolOutput(content, (parsed) => Boolean(parsed &&
|
|
869
|
+
typeof parsed === "object" &&
|
|
870
|
+
"task" in parsed &&
|
|
871
|
+
parsed.task &&
|
|
872
|
+
typeof parsed.task === "object" &&
|
|
873
|
+
"id" in parsed.task &&
|
|
874
|
+
typeof parsed.task.id === "string"));
|
|
875
|
+
if (structured)
|
|
876
|
+
return structured;
|
|
877
|
+
for (const text of toolOutputTexts(content)) {
|
|
878
|
+
const match = /^Task #(\S+) created successfully: (.+)$/.exec(text.trim());
|
|
879
|
+
if (match)
|
|
880
|
+
return { task: { id: match[1], subject: match[2] } };
|
|
881
|
+
}
|
|
882
|
+
return undefined;
|
|
883
|
+
}
|
|
884
|
+
export function parseTaskListOutput(content) {
|
|
885
|
+
const validStatuses = new Set(["pending", "in_progress", "completed"]);
|
|
886
|
+
const structured = parseJsonToolOutput(content, (parsed) => Boolean(parsed &&
|
|
887
|
+
typeof parsed === "object" &&
|
|
888
|
+
"tasks" in parsed &&
|
|
889
|
+
Array.isArray(parsed.tasks) &&
|
|
890
|
+
parsed.tasks.every((task) => task &&
|
|
891
|
+
typeof task === "object" &&
|
|
892
|
+
typeof task.id === "string" &&
|
|
893
|
+
typeof task.subject === "string" &&
|
|
894
|
+
typeof task.status === "string" &&
|
|
895
|
+
validStatuses.has(task.status))));
|
|
896
|
+
if (structured)
|
|
897
|
+
return structured;
|
|
898
|
+
for (const text of toolOutputTexts(content)) {
|
|
899
|
+
if (text.trim() === "No tasks found")
|
|
900
|
+
return { tasks: [] };
|
|
901
|
+
const tasks = [];
|
|
902
|
+
const lines = text.trim().split("\n");
|
|
903
|
+
for (const line of lines) {
|
|
904
|
+
const match = /^#(\S+) \[(pending|in_progress|completed)\] (.+?)(?: \(([^()]*)\))?(?: \[blocked by ((?:#[^,\]]+(?:, )?)+)\])?$/.exec(line);
|
|
905
|
+
if (!match) {
|
|
906
|
+
tasks.length = 0;
|
|
907
|
+
break;
|
|
908
|
+
}
|
|
909
|
+
tasks.push({
|
|
910
|
+
id: match[1],
|
|
911
|
+
subject: match[3],
|
|
912
|
+
status: match[2],
|
|
913
|
+
...(match[4] ? { owner: match[4] } : {}),
|
|
914
|
+
blockedBy: match[5] ? match[5].split(", ").map((id) => id.slice(1)) : [],
|
|
915
|
+
});
|
|
916
|
+
}
|
|
917
|
+
if (tasks.length > 0)
|
|
918
|
+
return { tasks };
|
|
919
|
+
}
|
|
920
|
+
return undefined;
|
|
921
|
+
}
|
|
922
|
+
export function parseTaskUpdateOutput(content, expectedTaskId) {
|
|
923
|
+
const structured = parseJsonToolOutput(content, (parsed) => Boolean(parsed &&
|
|
924
|
+
typeof parsed === "object" &&
|
|
925
|
+
"success" in parsed &&
|
|
926
|
+
typeof parsed.success === "boolean" &&
|
|
927
|
+
"taskId" in parsed &&
|
|
928
|
+
typeof parsed.taskId === "string" &&
|
|
929
|
+
"updatedFields" in parsed &&
|
|
930
|
+
Array.isArray(parsed.updatedFields) &&
|
|
931
|
+
parsed.updatedFields.every((field) => typeof field === "string")));
|
|
932
|
+
if (structured)
|
|
933
|
+
return structured;
|
|
934
|
+
for (const text of toolOutputTexts(content)) {
|
|
935
|
+
const notFound = /^Task #(\S+) not found$/.exec(text.trim());
|
|
936
|
+
const taskId = notFound?.[1] ?? expectedTaskId;
|
|
937
|
+
if (taskId && (notFound || text.trim() === "Failed to delete task")) {
|
|
938
|
+
return { success: false, taskId, updatedFields: [], error: text.trim() };
|
|
939
|
+
}
|
|
940
|
+
}
|
|
941
|
+
return undefined;
|
|
942
|
+
}
|
|
844
943
|
export function applyTaskCreate(state, input, output) {
|
|
845
944
|
const taskId = output?.task?.id;
|
|
846
945
|
if (!taskId || !input)
|
|
@@ -872,9 +971,22 @@ export function applyTaskUpdate(state, input) {
|
|
|
872
971
|
description: input.description ?? existing?.description,
|
|
873
972
|
});
|
|
874
973
|
}
|
|
974
|
+
export function applyTaskList(state, output) {
|
|
975
|
+
const previous = new Map(state);
|
|
976
|
+
state.clear();
|
|
977
|
+
for (const task of output.tasks) {
|
|
978
|
+
const existing = previous.get(task.id);
|
|
979
|
+
state.set(task.id, {
|
|
980
|
+
subject: task.subject,
|
|
981
|
+
status: task.status,
|
|
982
|
+
activeForm: existing?.activeForm,
|
|
983
|
+
description: existing?.description,
|
|
984
|
+
});
|
|
985
|
+
}
|
|
986
|
+
}
|
|
875
987
|
export function taskStateToPlanEntries(state) {
|
|
876
988
|
return Array.from(state.values()).map((task) => ({
|
|
877
|
-
content: task.subject,
|
|
989
|
+
content: task.status === "in_progress" && task.activeForm ? task.activeForm : task.subject,
|
|
878
990
|
status: task.status,
|
|
879
991
|
priority: "medium",
|
|
880
992
|
}));
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.67.0",
|
|
7
7
|
"description": "An ACP-compatible coding agent powered by the Claude Agent SDK (TypeScript)",
|
|
8
8
|
"main": "dist/lib.js",
|
|
9
9
|
"types": "dist/lib.d.ts",
|
|
@@ -66,19 +66,19 @@
|
|
|
66
66
|
},
|
|
67
67
|
"dependencies": {
|
|
68
68
|
"@agentclientprotocol/sdk": "1.3.0",
|
|
69
|
-
"@anthropic-ai/claude-agent-sdk": "0.3.
|
|
69
|
+
"@anthropic-ai/claude-agent-sdk": "0.3.232",
|
|
70
70
|
"zod": "^3.25.0 || ^4.0.0"
|
|
71
71
|
},
|
|
72
72
|
"devDependencies": {
|
|
73
|
-
"@anthropic-ai/sdk": "0.
|
|
73
|
+
"@anthropic-ai/sdk": "0.117.1",
|
|
74
74
|
"@eslint/js": "10.0.1",
|
|
75
75
|
"@tsconfig/node22": "22.0.5",
|
|
76
|
-
"@types/node": "26.
|
|
77
|
-
"@typescript-eslint/eslint-plugin": "8.
|
|
78
|
-
"@typescript-eslint/parser": "8.
|
|
79
|
-
"eslint": "10.8.
|
|
76
|
+
"@types/node": "26.2.0",
|
|
77
|
+
"@typescript-eslint/eslint-plugin": "8.67.0",
|
|
78
|
+
"@typescript-eslint/parser": "8.67.0",
|
|
79
|
+
"eslint": "10.8.1",
|
|
80
80
|
"eslint-config-prettier": "10.1.8",
|
|
81
|
-
"globals": "17.
|
|
81
|
+
"globals": "17.11.0",
|
|
82
82
|
"prettier": "3.9.6",
|
|
83
83
|
"ts-node": "10.9.2",
|
|
84
84
|
"typescript": "6.0.3",
|