@agentclientprotocol/claude-agent-acp 0.69.0 → 0.71.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 +10 -9
- package/dist/acp-agent.d.ts +118 -39
- package/dist/acp-agent.d.ts.map +1 -1
- package/dist/acp-agent.js +1199 -682
- package/dist/acp-subagents.d.ts +82 -0
- package/dist/acp-subagents.d.ts.map +1 -0
- package/dist/acp-subagents.js +13 -0
- package/dist/air-extension.d.ts +23 -0
- package/dist/air-extension.d.ts.map +1 -0
- package/dist/air-extension.js +63 -0
- package/dist/async-tasks.d.ts +109 -0
- package/dist/async-tasks.d.ts.map +1 -0
- package/dist/async-tasks.js +613 -0
- package/dist/clear-context-coordinator.d.ts +60 -0
- package/dist/clear-context-coordinator.d.ts.map +1 -0
- package/dist/clear-context-coordinator.js +80 -0
- package/dist/exit-plan.d.ts +42 -0
- package/dist/exit-plan.d.ts.map +1 -0
- package/dist/exit-plan.js +154 -0
- package/dist/file-change-audit.d.ts.map +1 -1
- package/dist/file-change-audit.js +4 -33
- package/dist/fork-session.d.ts +12 -0
- package/dist/fork-session.d.ts.map +1 -0
- package/dist/fork-session.js +41 -0
- package/dist/index.js +24 -1
- package/dist/native-subagents.d.ts +71 -0
- package/dist/native-subagents.d.ts.map +1 -0
- package/dist/native-subagents.js +422 -0
- package/dist/permissions/effects.d.ts +19 -0
- package/dist/permissions/effects.d.ts.map +1 -0
- package/dist/permissions/effects.js +166 -0
- package/dist/permissions/modes.d.ts +8 -0
- package/dist/permissions/modes.d.ts.map +1 -0
- package/dist/permissions/modes.js +41 -0
- package/dist/permissions/normalization.d.ts +6 -0
- package/dist/permissions/normalization.d.ts.map +1 -0
- package/dist/permissions/normalization.js +100 -0
- package/dist/permissions/options/filesystem.d.ts +9 -0
- package/dist/permissions/options/filesystem.d.ts.map +1 -0
- package/dist/permissions/options/filesystem.js +124 -0
- package/dist/permissions/options/shared.d.ts +39 -0
- package/dist/permissions/options/shared.d.ts.map +1 -0
- package/dist/permissions/options/shared.js +64 -0
- package/dist/permissions/options/shell.d.ts +5 -0
- package/dist/permissions/options/shell.d.ts.map +1 -0
- package/dist/permissions/options/shell.js +100 -0
- package/dist/permissions/options/tools.d.ts +11 -0
- package/dist/permissions/options/tools.d.ts.map +1 -0
- package/dist/permissions/options/tools.js +135 -0
- package/dist/permissions/options.d.ts +5 -0
- package/dist/permissions/options.d.ts.map +1 -0
- package/dist/permissions/options.js +60 -0
- package/dist/permissions/presentation.d.ts +15 -0
- package/dist/permissions/presentation.d.ts.map +1 -0
- package/dist/permissions/presentation.js +83 -0
- package/dist/permissions/response.d.ts +11 -0
- package/dist/permissions/response.d.ts.map +1 -0
- package/dist/permissions/response.js +19 -0
- package/dist/session-config-ids.d.ts +5 -0
- package/dist/session-config-ids.d.ts.map +1 -0
- package/dist/session-config-ids.js +4 -0
- package/dist/session-failure-extension.d.ts +2 -24
- package/dist/session-failure-extension.d.ts.map +1 -1
- package/dist/session-failure-extension.js +13 -40
- package/dist/session-mode.d.ts +66 -0
- package/dist/session-mode.d.ts.map +1 -0
- package/dist/session-mode.js +234 -0
- package/dist/session-titles.d.ts +77 -0
- package/dist/session-titles.d.ts.map +1 -0
- package/dist/session-titles.js +199 -0
- package/dist/tool-result-meta.d.ts +8 -0
- package/dist/tool-result-meta.d.ts.map +1 -0
- package/dist/tool-result-meta.js +19 -0
- package/dist/tools.d.ts +6 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +39 -18
- package/package.json +6 -6
|
@@ -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"}
|
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
import type { ClientCapabilities, SessionNotification } from "@agentclientprotocol/sdk";
|
|
2
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
|
-
};
|
|
3
|
+
export declare function airSessionFailureCapabilityMeta(...additionalCapabilities: string[]): Record<string, unknown>;
|
|
11
4
|
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
5
|
type AirSessionFailureCategory = "connection" | "access" | "limit" | "request" | "service" | "unknown";
|
|
13
6
|
type AirSessionFailureSeverity = "warning" | "error";
|
|
@@ -46,22 +39,7 @@ type Logger = {
|
|
|
46
39
|
error: (...args: unknown[]) => void;
|
|
47
40
|
};
|
|
48
41
|
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
|
-
};
|
|
42
|
+
export declare function sessionFailureMeta(failure: PublishedSessionFailure): Record<string, unknown>;
|
|
65
43
|
/** `getSessionMessages` deliberately exposes only the API message and strips
|
|
66
44
|
* transcript-level `error` / `isApiErrorMessage` fields. The SDK exports the
|
|
67
45
|
* exact stable prefixes used by its synthetic usage-limit errors, so replay
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-failure-extension.d.ts","sourceRoot":"","sources":["../src/session-failure-extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACxF,OAAO,EACL,kBAAkB,EAClB,KAAK,wBAAwB,EAE9B,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"session-failure-extension.d.ts","sourceRoot":"","sources":["../src/session-failure-extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,8 @@
|
|
|
1
1
|
import { USAGE_LIMIT_ERROR_PREFIXES, } from "@anthropic-ai/claude-agent-sdk";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
|
-
|
|
4
|
-
const AIR_META_KEY = "air";
|
|
5
|
-
const AIR_EXTENSION_VERSION_KEY = "version";
|
|
6
|
-
const AIR_EXTENSION_CAPABILITIES_KEY = "capabilities";
|
|
7
|
-
const AIR_SESSION_FAILURE_KEY = "sessionFailure";
|
|
8
|
-
const AIR_EXTENSION_VERSION = 1;
|
|
3
|
+
import { AIR_SESSION_FAILURE_CAPABILITY, airCapabilityMeta, clientSupportsAirCapability, withAirMeta, } from "./air-extension.js";
|
|
9
4
|
export function airSessionFailureCapabilityMeta(...additionalCapabilities) {
|
|
10
|
-
return
|
|
11
|
-
[JETBRAINS_META_KEY]: {
|
|
12
|
-
[AIR_META_KEY]: {
|
|
13
|
-
[AIR_EXTENSION_VERSION_KEY]: AIR_EXTENSION_VERSION,
|
|
14
|
-
[AIR_EXTENSION_CAPABILITIES_KEY]: [AIR_SESSION_FAILURE_KEY, ...additionalCapabilities],
|
|
15
|
-
},
|
|
16
|
-
},
|
|
17
|
-
};
|
|
5
|
+
return airCapabilityMeta(AIR_SESSION_FAILURE_CAPABILITY, ...additionalCapabilities);
|
|
18
6
|
}
|
|
19
7
|
export function createSessionFailureState() {
|
|
20
8
|
return {
|
|
@@ -86,22 +74,15 @@ const AIR_FAILURE_POLICY = {
|
|
|
86
74
|
},
|
|
87
75
|
};
|
|
88
76
|
export function sessionFailureMeta(failure) {
|
|
89
|
-
return {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
title: failure.title,
|
|
99
|
-
...(failure.details ? { details: failure.details } : {}),
|
|
100
|
-
actions: failure.actions,
|
|
101
|
-
},
|
|
102
|
-
},
|
|
103
|
-
},
|
|
104
|
-
};
|
|
77
|
+
return withAirMeta(undefined, AIR_SESSION_FAILURE_CAPABILITY, {
|
|
78
|
+
id: failure.id,
|
|
79
|
+
revision: failure.revision,
|
|
80
|
+
category: failure.category,
|
|
81
|
+
severity: failure.severity,
|
|
82
|
+
title: failure.title,
|
|
83
|
+
...(failure.details ? { details: failure.details } : {}),
|
|
84
|
+
actions: failure.actions,
|
|
85
|
+
});
|
|
105
86
|
}
|
|
106
87
|
/** `getSessionMessages` deliberately exposes only the API message and strips
|
|
107
88
|
* transcript-level `error` / `isApiErrorMessage` fields. The SDK exports the
|
|
@@ -161,16 +142,7 @@ export function activeUsageLimitMessage(messages) {
|
|
|
161
142
|
return active;
|
|
162
143
|
}
|
|
163
144
|
export function supportsAirSessionFailures(capabilities) {
|
|
164
|
-
|
|
165
|
-
const air = jetbrains?.[AIR_META_KEY];
|
|
166
|
-
const version = air?.[AIR_EXTENSION_VERSION_KEY];
|
|
167
|
-
const advertised = air?.[AIR_EXTENSION_CAPABILITIES_KEY];
|
|
168
|
-
return (typeof version === "number" &&
|
|
169
|
-
Number.isFinite(version) &&
|
|
170
|
-
Number.isInteger(version) &&
|
|
171
|
-
version >= AIR_EXTENSION_VERSION &&
|
|
172
|
-
Array.isArray(advertised) &&
|
|
173
|
-
advertised.some((capability) => capability === AIR_SESSION_FAILURE_KEY));
|
|
145
|
+
return clientSupportsAirCapability(capabilities, AIR_SESSION_FAILURE_CAPABILITY);
|
|
174
146
|
}
|
|
175
147
|
function sessionFailureRecoveryPolicy(kind, turnId) {
|
|
176
148
|
switch (kind) {
|
|
@@ -331,6 +303,7 @@ export function providerFailureCategory(errorKind, isUsageLimit = false) {
|
|
|
331
303
|
case "oauth_org_not_allowed":
|
|
332
304
|
return "auth_required";
|
|
333
305
|
case "billing_error":
|
|
306
|
+
case "account_on_hold":
|
|
334
307
|
return "quota_exhausted";
|
|
335
308
|
case "rate_limit":
|
|
336
309
|
return "rate_limited";
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type SessionConfigOption, type SessionModeState, type SessionNotification, type SetSessionModeRequest, type SetSessionModeResponse } from "@agentclientprotocol/sdk";
|
|
2
|
+
import type { ModelInfo, PermissionMode, PermissionResult, Query } from "@anthropic-ai/claude-agent-sdk";
|
|
3
|
+
export declare const MODE_CONFIG_ID = "mode";
|
|
4
|
+
export declare const AUTO_MODE_FALLBACK: PermissionMode;
|
|
5
|
+
export type SessionMode = {
|
|
6
|
+
query: Pick<Query, "setPermissionMode">;
|
|
7
|
+
queryClosed?: boolean;
|
|
8
|
+
modes: SessionModeState;
|
|
9
|
+
models: {
|
|
10
|
+
currentModelId: string;
|
|
11
|
+
};
|
|
12
|
+
modelInfos: ModelInfo[];
|
|
13
|
+
/** Prevents the model-specific Auto fallback from spamming the transcript. */
|
|
14
|
+
autoModeFallbackWarningShown?: boolean;
|
|
15
|
+
/** Initial mode fallback is reported after session/new, on the first prompt. */
|
|
16
|
+
autoModeFallbackWarningPending?: boolean;
|
|
17
|
+
};
|
|
18
|
+
export type SessionModeManagerOptions<S extends SessionMode> = {
|
|
19
|
+
getSession(sessionId: string): S | undefined;
|
|
20
|
+
sessionEndedMessage: string;
|
|
21
|
+
updateConfigOption(sessionId: string, configId: string, value: string): Promise<void>;
|
|
22
|
+
sessionUpdate(params: SessionNotification): Promise<void>;
|
|
23
|
+
logError(...args: unknown[]): void;
|
|
24
|
+
};
|
|
25
|
+
type ModeConfigSession = SessionMode & {
|
|
26
|
+
configOptions: SessionConfigOption[];
|
|
27
|
+
};
|
|
28
|
+
type InitializeSessionModeParams = {
|
|
29
|
+
query: Pick<Query, "setPermissionMode">;
|
|
30
|
+
requestedMode: PermissionMode;
|
|
31
|
+
currentModelInfo?: ModelInfo;
|
|
32
|
+
currentModelId: string;
|
|
33
|
+
};
|
|
34
|
+
/** Owns session-mode policy and the ACP/SDK synchronization it requires. */
|
|
35
|
+
export declare class SessionModeManager<S extends SessionMode> {
|
|
36
|
+
private readonly options;
|
|
37
|
+
constructor(options: SessionModeManagerOptions<S>);
|
|
38
|
+
initialize({ query, requestedMode, currentModelInfo, currentModelId, }: InitializeSessionModeParams): Promise<{
|
|
39
|
+
modes: SessionModeState;
|
|
40
|
+
autoModeFallbackWarningPending: boolean;
|
|
41
|
+
}>;
|
|
42
|
+
static configOption(modes: SessionModeState): SessionConfigOption;
|
|
43
|
+
syncConfig(session: ModeConfigSession, mode: string): void;
|
|
44
|
+
availableModeIds(modes: SessionModeState): string[];
|
|
45
|
+
effectiveMode(session: SessionMode, requestedMode: PermissionMode): PermissionMode;
|
|
46
|
+
applyPermissionFallback(session: SessionMode, permissionResult: PermissionResult): {
|
|
47
|
+
permissionResult: PermissionResult;
|
|
48
|
+
fallbackApplied: boolean;
|
|
49
|
+
};
|
|
50
|
+
/** Reconcile mode after a model switch. The caller rebuilds config options
|
|
51
|
+
* before publishing the returned state change. */
|
|
52
|
+
reconcileForModel(session: SessionMode, model: ModelInfo | undefined): Promise<boolean>;
|
|
53
|
+
selectMode(sessionId: string, modeId: string): Promise<PermissionMode>;
|
|
54
|
+
setSessionMode(params: SetSessionModeRequest): Promise<SetSessionModeResponse>;
|
|
55
|
+
publishCurrent(sessionId: string, mode: string): Promise<void>;
|
|
56
|
+
publishFallbackWarning(sessionId: string, session: SessionMode): Promise<void>;
|
|
57
|
+
publishFallbackState(sessionId: string, session: SessionMode): Promise<void>;
|
|
58
|
+
private requireOpenSession;
|
|
59
|
+
private isAutoUnavailable;
|
|
60
|
+
private isAvailable;
|
|
61
|
+
private parseMode;
|
|
62
|
+
private buildAvailableModes;
|
|
63
|
+
private trySyncMode;
|
|
64
|
+
}
|
|
65
|
+
export {};
|
|
66
|
+
//# sourceMappingURL=session-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-mode.d.ts","sourceRoot":"","sources":["../src/session-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,KAAK,EACN,MAAM,gCAAgC,CAAC;AAGxC,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,kBAAkB,EAAE,cAA8B,CAAC;AAKhE,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,8EAA8E;IAC9E,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,gFAAgF;IAChF,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,yBAAyB,CAAC,CAAC,SAAS,WAAW,IAAI;IAC7D,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAC7C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtF,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,QAAQ,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CACpC,CAAC;AAEF,KAAK,iBAAiB,GAAG,WAAW,GAAG;IACrC,aAAa,EAAE,mBAAmB,EAAE,CAAC;CACtC,CAAC;AAEF,KAAK,2BAA2B,GAAG;IACjC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;IACxC,aAAa,EAAE,cAAc,CAAC;IAC9B,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,4EAA4E;AAC5E,qBAAa,kBAAkB,CAAC,CAAC,SAAS,WAAW;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAE5D,UAAU,CAAC,EACf,KAAK,EACL,aAAa,EACb,gBAAgB,EAChB,cAAc,GACf,EAAE,2BAA2B,GAAG,OAAO,CAAC;QACvC,KAAK,EAAE,gBAAgB,CAAC;QACxB,8BAA8B,EAAE,OAAO,CAAC;KACzC,CAAC;IAgCF,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,mBAAmB;IAiBjE,UAAU,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAS1D,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,EAAE;IAInD,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,GAAG,cAAc;IAMlF,uBAAuB,CACrB,OAAO,EAAE,WAAW,EACpB,gBAAgB,EAAE,gBAAgB,GACjC;QAAE,gBAAgB,EAAE,gBAAgB,CAAC;QAAC,eAAe,EAAE,OAAO,CAAA;KAAE;IAwBnE;sDACkD;IAC5C,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,GAAG,SAAS;IAqBpE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAyBtE,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAS9E,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9D,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB9E,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlF,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,mBAAmB;YAsCb,WAAW;CAW1B"}
|