@lucascouts/claude-agent-acp-plus 0.8.1 → 0.9.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.
Files changed (62) hide show
  1. package/dist/acp-agent.d.ts +107 -95
  2. package/dist/acp-agent.d.ts.map +1 -1
  3. package/dist/acp-agent.js +1050 -817
  4. package/dist/clear-context-coordinator.d.ts +58 -0
  5. package/dist/clear-context-coordinator.d.ts.map +1 -0
  6. package/dist/clear-context-coordinator.js +79 -0
  7. package/dist/exit-plan.d.ts +42 -0
  8. package/dist/exit-plan.d.ts.map +1 -0
  9. package/dist/exit-plan.js +154 -0
  10. package/dist/file-change-audit.d.ts +56 -0
  11. package/dist/file-change-audit.d.ts.map +1 -0
  12. package/dist/file-change-audit.js +379 -0
  13. package/dist/index.js +24 -1
  14. package/dist/permissions/effects.d.ts +19 -0
  15. package/dist/permissions/effects.d.ts.map +1 -0
  16. package/dist/permissions/effects.js +166 -0
  17. package/dist/permissions/modes.d.ts +8 -0
  18. package/dist/permissions/modes.d.ts.map +1 -0
  19. package/dist/permissions/modes.js +41 -0
  20. package/dist/permissions/normalization.d.ts +6 -0
  21. package/dist/permissions/normalization.d.ts.map +1 -0
  22. package/dist/permissions/normalization.js +100 -0
  23. package/dist/permissions/options/filesystem.d.ts +9 -0
  24. package/dist/permissions/options/filesystem.d.ts.map +1 -0
  25. package/dist/permissions/options/filesystem.js +124 -0
  26. package/dist/permissions/options/shared.d.ts +39 -0
  27. package/dist/permissions/options/shared.d.ts.map +1 -0
  28. package/dist/permissions/options/shared.js +64 -0
  29. package/dist/permissions/options/shell.d.ts +5 -0
  30. package/dist/permissions/options/shell.d.ts.map +1 -0
  31. package/dist/permissions/options/shell.js +100 -0
  32. package/dist/permissions/options/tools.d.ts +11 -0
  33. package/dist/permissions/options/tools.d.ts.map +1 -0
  34. package/dist/permissions/options/tools.js +135 -0
  35. package/dist/permissions/options.d.ts +5 -0
  36. package/dist/permissions/options.d.ts.map +1 -0
  37. package/dist/permissions/options.js +60 -0
  38. package/dist/permissions/presentation.d.ts +15 -0
  39. package/dist/permissions/presentation.d.ts.map +1 -0
  40. package/dist/permissions/presentation.js +83 -0
  41. package/dist/permissions/response.d.ts +11 -0
  42. package/dist/permissions/response.d.ts.map +1 -0
  43. package/dist/permissions/response.js +19 -0
  44. package/dist/session-config-ids.d.ts +5 -0
  45. package/dist/session-config-ids.d.ts.map +1 -0
  46. package/dist/session-config-ids.js +4 -0
  47. package/dist/session-failure-extension.d.ts +104 -0
  48. package/dist/session-failure-extension.d.ts.map +1 -0
  49. package/dist/session-failure-extension.js +352 -0
  50. package/dist/session-mode.d.ts +66 -0
  51. package/dist/session-mode.d.ts.map +1 -0
  52. package/dist/session-mode.js +246 -0
  53. package/dist/session-titles.d.ts +77 -0
  54. package/dist/session-titles.d.ts.map +1 -0
  55. package/dist/session-titles.js +199 -0
  56. package/dist/tool-result-meta.d.ts +8 -0
  57. package/dist/tool-result-meta.d.ts.map +1 -0
  58. package/dist/tool-result-meta.js +19 -0
  59. package/dist/tools.d.ts +4 -6
  60. package/dist/tools.d.ts.map +1 -1
  61. package/dist/tools.js +129 -24
  62. package/package.json +3 -3
@@ -0,0 +1,60 @@
1
+ import { buildEditPermissionOptions, buildGlobPermissionOptions, buildGrepPermissionOptions, buildNotebookEditPermissionOptions, buildReadPermissionOptions, buildWritePermissionOptions, } from "./options/filesystem.js";
2
+ import { buildBashPermissionOptions, buildPowerShellPermissionOptions } from "./options/shell.js";
3
+ import { buildComputerUseMcpPermissionOptions, buildEnterPlanModePermissionOptions, buildExitPlanModePermissionOptions, buildFallbackPermissionOptions, buildSandboxNetworkPermissionOptions, buildSkillPermissionOptions, buildWebFetchPermissionOptions, isComputerUseMcpTool, } from "./options/tools.js";
4
+ export { PERMISSION_OPTION_ID } from "./options/shared.js";
5
+ export function buildClaudePermissionOptions(context) {
6
+ return buildUnsortedClaudePermissionOptions(context).sort((left, right) => permissionOptionOrder(left) - permissionOptionOrder(right));
7
+ }
8
+ function buildUnsortedClaudePermissionOptions(context) {
9
+ if (isComputerUseMcpTool(context.toolName)) {
10
+ return buildComputerUseMcpPermissionOptions(context);
11
+ }
12
+ switch (context.toolName) {
13
+ case "AskUserQuestion":
14
+ throw new Error("AskUserQuestion must be handled by ACP elicitation, not permission options");
15
+ case "Bash":
16
+ return buildBashPermissionOptions(context);
17
+ case "PowerShell":
18
+ return buildPowerShellPermissionOptions(context);
19
+ case "Read":
20
+ return buildReadPermissionOptions(context);
21
+ case "Glob":
22
+ return buildGlobPermissionOptions(context);
23
+ case "Grep":
24
+ return buildGrepPermissionOptions(context);
25
+ case "Edit":
26
+ return buildEditPermissionOptions(context);
27
+ case "Write":
28
+ return buildWritePermissionOptions(context);
29
+ case "NotebookEdit":
30
+ return buildNotebookEditPermissionOptions(context);
31
+ case "WebFetch":
32
+ return buildWebFetchPermissionOptions(context);
33
+ case "Skill":
34
+ return buildSkillPermissionOptions(context);
35
+ case "EnterPlanMode":
36
+ return buildEnterPlanModePermissionOptions();
37
+ case "ExitPlanMode":
38
+ return buildExitPlanModePermissionOptions(context);
39
+ case "SandboxNetworkAccess":
40
+ return buildSandboxNetworkPermissionOptions(context);
41
+ case "WebSearch":
42
+ case "Agent":
43
+ case "Task":
44
+ default:
45
+ return buildFallbackPermissionOptions(context);
46
+ }
47
+ }
48
+ function permissionOptionOrder(option) {
49
+ switch (option.kind) {
50
+ case "allow_once":
51
+ return 0;
52
+ case "allow_always":
53
+ return 1;
54
+ case "reject_once":
55
+ case "reject_always":
56
+ return 3;
57
+ default:
58
+ return 2;
59
+ }
60
+ }
@@ -0,0 +1,15 @@
1
+ import type { RequestPermissionRequest } from "@agentclientprotocol/sdk";
2
+ export interface ClaudePermissionPresentationInput {
3
+ toolName: string;
4
+ input: Record<string, unknown>;
5
+ toolUseID: string;
6
+ cwd?: string;
7
+ supportsTerminalOutput?: boolean;
8
+ blockedPath?: string;
9
+ title?: string;
10
+ displayName?: string;
11
+ description?: string;
12
+ decisionReason?: string;
13
+ }
14
+ export declare function buildClaudePermissionPresentation(value: ClaudePermissionPresentationInput): Pick<RequestPermissionRequest, "toolCall" | "_meta">;
15
+ //# sourceMappingURL=presentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation.d.ts","sourceRoot":"","sources":["../../src/permissions/presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAoB,MAAM,0BAA0B,CAAC;AAG3F,MAAM,WAAW,iCAAiC;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAqCD,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,iCAAiC,GACvC,IAAI,CAAC,wBAAwB,EAAE,UAAU,GAAG,OAAO,CAAC,CA0DtD"}
@@ -0,0 +1,83 @@
1
+ import { toolInfoFromToolUse } from "../tools.js";
2
+ function humanText(value, maxLength, singleLine = false) {
3
+ if (typeof value !== "string")
4
+ return undefined;
5
+ const withoutControls = Array.from(value)
6
+ .filter((character) => {
7
+ const code = character.charCodeAt(0);
8
+ return !(code <= 0x08 ||
9
+ code === 0x0b ||
10
+ code === 0x0c ||
11
+ (code >= 0x0e && code <= 0x1f) ||
12
+ code === 0x7f);
13
+ })
14
+ .join("");
15
+ const normalized = singleLine
16
+ ? withoutControls.replace(/\s+/gu, " ").trim()
17
+ : withoutControls.trim();
18
+ return normalized && normalized.length <= maxLength ? normalized : undefined;
19
+ }
20
+ function compactText(value) {
21
+ return humanText(value, 160, true);
22
+ }
23
+ function withBlockedPath(locations, blockedPath) {
24
+ const path = humanText(blockedPath, 4_096, true);
25
+ if (!path)
26
+ return locations;
27
+ const result = [...(locations ?? [])];
28
+ if (!result.some((location) => location.path === path))
29
+ result.push({ path });
30
+ return result;
31
+ }
32
+ export function buildClaudePermissionPresentation(value) {
33
+ const info = toolInfoFromToolUse({ id: value.toolUseID, name: value.toolName, input: value.input }, value.supportsTerminalOutput ?? false, value.cwd);
34
+ const host = value.toolName === "SandboxNetworkAccess" ? compactText(value.input.host) : undefined;
35
+ const isComputerUse = value.toolName.startsWith("mcp__computer-use__");
36
+ const subjectTitle = host ?? (isComputerUse ? compactText(value.displayName) : undefined);
37
+ const subjectContent = (host || isComputerUse) && info.content.length === 0
38
+ ? [
39
+ {
40
+ type: "content",
41
+ content: {
42
+ type: "text",
43
+ text: `\`\`\`json\n${JSON.stringify(value.input, null, 2)}\n\`\`\``,
44
+ },
45
+ },
46
+ ]
47
+ : info.content;
48
+ // Reuse the exact standard tool-call heading as the permission heading so
49
+ // the approval never maintains a second, divergent name for the operation.
50
+ // decisionReason is temporarily exposed as the permission description so
51
+ // its actual SDK values can be inspected; it remains diagnostic policy text.
52
+ const shellTitle = value.toolName === "Bash" || value.toolName === "PowerShell"
53
+ ? (compactText(value.input.description) ?? value.toolName)
54
+ : undefined;
55
+ const toolCallTitle = shellTitle ?? subjectTitle ?? info.title;
56
+ const permissionTitle = value.toolName === "ExitPlanMode" ? "Ready to code?" : toolCallTitle;
57
+ const title = humanText(permissionTitle, 4_000, true) ?? "Use tool?";
58
+ const decisionReason = humanText(value.decisionReason, 4_000);
59
+ const description = decisionReason ? `Reason: ${decisionReason}` : undefined;
60
+ return {
61
+ toolCall: {
62
+ toolCallId: value.toolUseID,
63
+ name: value.toolName,
64
+ status: "pending",
65
+ rawInput: value.input,
66
+ ...info,
67
+ title: toolCallTitle,
68
+ content: subjectContent,
69
+ locations: withBlockedPath(info.locations, value.blockedPath),
70
+ },
71
+ ...(title
72
+ ? {
73
+ _meta: {
74
+ permission: {
75
+ version: 1,
76
+ title,
77
+ ...(description ? { description } : {}),
78
+ },
79
+ },
80
+ }
81
+ : {}),
82
+ };
83
+ }
@@ -0,0 +1,11 @@
1
+ import type { RequestPermissionResponse } from "@agentclientprotocol/sdk";
2
+ import type { PermissionOption } from "@agentclientprotocol/sdk";
3
+ import type { PermissionMode, PermissionResult } from "@anthropic-ai/claude-agent-sdk";
4
+ import type { DurablePermissionChangeSet } from "./normalization.js";
5
+ export interface ClaudePermissionDecision {
6
+ permissionResult: PermissionResult;
7
+ contextResetMode?: PermissionMode;
8
+ }
9
+ /** Decode, validate, and interpret an ACP response exactly once. */
10
+ export declare function decodeClaudePermissionResponse(response: RequestPermissionResponse, toolName: string, input: Record<string, unknown>, toolUseID: string, offeredOptions: readonly PermissionOption[], durableChangeSet?: DurablePermissionChangeSet): ClaudePermissionDecision;
11
+ //# sourceMappingURL=response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/permissions/response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAGrE,MAAM,WAAW,wBAAwB;IACvC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gBAAgB,CAAC,EAAE,cAAc,CAAC;CACnC;AAED,oEAAoE;AACpE,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,yBAAyB,EACnC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,SAAS,gBAAgB,EAAE,EAC3C,gBAAgB,CAAC,EAAE,0BAA0B,GAC5C,wBAAwB,CAgB1B"}
@@ -0,0 +1,19 @@
1
+ import { applyClaudePermissionSelection, parseClaudePermissionSelection } from "./effects.js";
2
+ /** Decode, validate, and interpret an ACP response exactly once. */
3
+ export function decodeClaudePermissionResponse(response, toolName, input, toolUseID, offeredOptions, durableChangeSet) {
4
+ const selection = parseClaudePermissionSelection(response, toolName);
5
+ const offeredOption = offeredOptions.find((option) => option.optionId === selection.optionId);
6
+ if (!offeredOption) {
7
+ throw new Error(`Permission option was not offered: ${selection.optionId}`);
8
+ }
9
+ const permissionResult = applyClaudePermissionSelection(selection, {
10
+ toolName,
11
+ input,
12
+ toolUseID,
13
+ durableChangeSet,
14
+ });
15
+ return {
16
+ permissionResult,
17
+ ...(selection.contextResetMode ? { contextResetMode: selection.contextResetMode } : {}),
18
+ };
19
+ }
@@ -0,0 +1,5 @@
1
+ /** Shared sentinels and ids for session preferences managed by the adapter. */
2
+ export declare const DEFAULT_MODEL_ID = "default";
3
+ export declare const DEFAULT_AGENT_ID = "default";
4
+ export declare const EFFORT_CONFIG_ID = "effort";
5
+ //# sourceMappingURL=session-config-ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-config-ids.d.ts","sourceRoot":"","sources":["../src/session-config-ids.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAC1C,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAC1C,eAAO,MAAM,gBAAgB,WAAW,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** Shared sentinels and ids for session preferences managed by the adapter. */
2
+ export const DEFAULT_MODEL_ID = "default";
3
+ export const DEFAULT_AGENT_ID = "default";
4
+ export const EFFORT_CONFIG_ID = "effort";
@@ -0,0 +1,104 @@
1
+ import type { ClientCapabilities, SessionNotification } from "@agentclientprotocol/sdk";
2
+ import { getSessionMessages, type SDKAssistantMessageError } from "@anthropic-ai/claude-agent-sdk";
3
+ export declare function airSessionFailureCapabilityMeta(...additionalCapabilities: string[]): {
4
+ jetbrains: {
5
+ air: {
6
+ version: number;
7
+ capabilities: string[];
8
+ };
9
+ };
10
+ };
11
+ export type ClaudeFailureKind = "advisory" | "auth_required" | "bad_request" | "budget_exhausted" | "context_exhausted" | "internal_error" | "overloaded" | "provider_error" | "quota_exhausted" | "rate_limited" | "transport_lost" | "worker_shutdown";
12
+ type AirSessionFailureCategory = "connection" | "access" | "limit" | "request" | "service" | "unknown";
13
+ type AirSessionFailureSeverity = "warning" | "error";
14
+ type AirSessionFailureAction = "retry" | "login" | "new_session";
15
+ type SessionFailureRecoveryPolicy = "never" | "next_attempt" | "real_model_success" | "auth_status" | "runtime_rebind";
16
+ export type PublishedSessionFailure = {
17
+ id: string;
18
+ revision: number;
19
+ kind: ClaudeFailureKind;
20
+ category: AirSessionFailureCategory;
21
+ turnId?: string;
22
+ severity: AirSessionFailureSeverity;
23
+ title: string;
24
+ details?: string;
25
+ actions: AirSessionFailureAction[];
26
+ recoveryPolicy: SessionFailureRecoveryPolicy;
27
+ };
28
+ type SessionFailureOptions = {
29
+ turnId?: string;
30
+ sessionScoped?: boolean;
31
+ title?: string;
32
+ details?: string;
33
+ severity?: AirSessionFailureSeverity;
34
+ };
35
+ export type SessionFailureState = {
36
+ epoch: string;
37
+ revisions: Map<string, number>;
38
+ active: Map<string, PublishedSessionFailure>;
39
+ nextIncident?: number;
40
+ lastNotice?: {
41
+ title: string;
42
+ id: string;
43
+ };
44
+ };
45
+ type Logger = {
46
+ error: (...args: unknown[]) => void;
47
+ };
48
+ export declare function createSessionFailureState(): SessionFailureState;
49
+ export declare function sessionFailureMeta(failure: PublishedSessionFailure): {
50
+ jetbrains: {
51
+ air: {
52
+ version: number;
53
+ sessionFailure: {
54
+ actions: AirSessionFailureAction[];
55
+ details?: string | undefined;
56
+ id: string;
57
+ revision: number;
58
+ category: AirSessionFailureCategory;
59
+ severity: AirSessionFailureSeverity;
60
+ title: string;
61
+ };
62
+ };
63
+ };
64
+ };
65
+ /** `getSessionMessages` deliberately exposes only the API message and strips
66
+ * transcript-level `error` / `isApiErrorMessage` fields. The SDK exports the
67
+ * exact stable prefixes used by its synthetic usage-limit errors, so replay
68
+ * can recover this one typed failure without matching arbitrary model prose. */
69
+ export declare function assistantMessageText(apiMessage: unknown): string | undefined;
70
+ export declare function isSyntheticUsageLimitMessage(apiMessage: unknown): boolean;
71
+ export declare function activeUsageLimitMessage(messages: Awaited<ReturnType<typeof getSessionMessages>>): {
72
+ uuid: string;
73
+ title: string;
74
+ } | undefined;
75
+ export declare function supportsAirSessionFailures(capabilities?: ClientCapabilities): boolean;
76
+ /** Owns the AIR failure lifecycle for both the live consumer and history replay.
77
+ * Published revisions become active only after delivery succeeds; recovery only
78
+ * removes internal active state because transcript records are historical. */
79
+ export declare class SessionFailureController {
80
+ private readonly sessionId;
81
+ private readonly state;
82
+ private readonly capabilities?;
83
+ private readonly isCurrent;
84
+ private readonly sendUpdate;
85
+ private readonly logger;
86
+ constructor(options: {
87
+ sessionId: string;
88
+ state: SessionFailureState;
89
+ capabilities?: ClientCapabilities;
90
+ isCurrent: () => boolean;
91
+ sendUpdate: (notification: SessionNotification) => Promise<void>;
92
+ logger: Logger;
93
+ });
94
+ private isSupported;
95
+ private emit;
96
+ recordActive(failure: PublishedSessionFailure): void;
97
+ clear(shouldClear?: (failure: PublishedSessionFailure) => boolean): Promise<boolean>;
98
+ prepare(kind: ClaudeFailureKind, failureOptions?: SessionFailureOptions): Promise<PublishedSessionFailure | undefined>;
99
+ publish(kind: ClaudeFailureKind, failureOptions?: SessionFailureOptions): Promise<void>;
100
+ restore(id: string, kind: ClaudeFailureKind, title: string, active?: boolean): Promise<boolean>;
101
+ }
102
+ export declare function providerFailureCategory(errorKind?: SDKAssistantMessageError, isUsageLimit?: boolean): ClaudeFailureKind;
103
+ export {};
104
+ //# sourceMappingURL=session-failure-extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-failure-extension.d.ts","sourceRoot":"","sources":["../src/session-failure-extension.ts"],"names":[],"mappings":"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"}