@agentclientprotocol/claude-agent-acp 0.53.0 → 0.54.1

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.
@@ -1,5 +1,5 @@
1
1
  import { AuthenticateRequest, CancelNotification, ClientCapabilities, CompleteElicitationNotification, CreateElicitationRequest, CreateElicitationResponse, ForkSessionRequest, ForkSessionResponse, InitializeRequest, InitializeResponse, ListSessionsRequest, ListSessionsResponse, LoadSessionRequest, LoadSessionResponse, LogoutRequest, NewSessionRequest, NewSessionResponse, PromptRequest, PromptResponse, ReadTextFileRequest, ReadTextFileResponse, RequestPermissionRequest, RequestPermissionResponse, ResumeSessionRequest, ResumeSessionResponse, SessionConfigOption, SessionModeState, SessionNotification, SetSessionConfigOptionRequest, SetSessionConfigOptionResponse, SetSessionModeRequest, SetSessionModeResponse, CloseSessionRequest, CloseSessionResponse, DeleteSessionRequest, DeleteSessionResponse, WriteTextFileRequest, WriteTextFileResponse } from "@agentclientprotocol/sdk";
2
- import { AgentInfo, CanUseTool, ModelInfo, Options, PermissionMode, PermissionUpdate, Query, SDKMessageOrigin, SDKPartialAssistantMessage, SDKUserMessage } from "@anthropic-ai/claude-agent-sdk";
2
+ import { AgentInfo, CanUseTool, FastModeState, ModelInfo, Options, PermissionMode, PermissionUpdate, Query, SDKMessageOrigin, SDKPartialAssistantMessage, SDKUserMessage } from "@anthropic-ai/claude-agent-sdk";
3
3
  import { ContentBlockParam } from "@anthropic-ai/sdk/resources";
4
4
  import { BetaContentBlock, BetaRawContentBlockDelta } from "@anthropic-ai/sdk/resources/beta.mjs";
5
5
  import { SettingsManager } from "./settings.js";
@@ -97,6 +97,10 @@ type Session = {
97
97
  /** The currently selected main-thread agent name, or "default" for the
98
98
  * standard Claude Code agent (no `agent` flag applied). */
99
99
  currentAgent: string;
100
+ /** Whether Fast mode is currently enabled for this session. Tracked as the
101
+ * user's intent so it persists across model switches; the Fast mode config
102
+ * option is only surfaced while the selected model supports it. */
103
+ fastModeEnabled: boolean;
100
104
  abortController: AbortController;
101
105
  /** Signal the consumer races `query.next()` against. Aborted by cancel()
102
106
  * (after a grace period) to force the active turn to settle "cancelled" when
@@ -383,6 +387,33 @@ export declare class ClaudeAcpAgent {
383
387
  private sendAvailableCommandsUpdate;
384
388
  private updateConfigOption;
385
389
  private applyConfigOptionValue;
390
+ /** Replace the Fast mode option in `session.configOptions` so it reflects
391
+ * `enabled` (and the client's current boolean-capability). A no-op when the
392
+ * option isn't present, so callers must confirm the current model surfaces
393
+ * it first. */
394
+ private refreshFastModeOption;
395
+ /** Toggle Fast mode for a session: push the SDK flag, record the user's
396
+ * intent, and refresh the Fast mode config option in place. Only reached
397
+ * once the option exists (i.e. the current model supports fast mode), so the
398
+ * option is guaranteed to be present in `configOptions`. */
399
+ private applyFastMode;
400
+ /** Reconcile the session's Fast mode toggle with an SDK-reported
401
+ * `fast_mode_state` (delivered on `system`/init and on user-turn `result`s).
402
+ * The SDK can flip fast mode independently of the user — e.g. back to `on`
403
+ * once a rate-limit `cooldown` clears — so we mirror definitive on/off
404
+ * changes into the config option and notify the client.
405
+ *
406
+ * Guards, in order:
407
+ * - absent state: nothing to reconcile.
408
+ * - no Fast mode option: the current model doesn't support fast mode, so the
409
+ * reported state reflects capability, not the user's intent. Leave the
410
+ * retained setting untouched so it's correct when a supporting model is
411
+ * reselected (the source of the earlier intent-clobber bug was mutating it
412
+ * here).
413
+ * - `cooldown`: a transient suspension of an already-enabled fast mode.
414
+ * Leave the toggle as-is rather than flapping it — and never let a stray
415
+ * cooldown spuriously enable a toggle the user has off. */
416
+ private syncFastModeState;
386
417
  private getOrCreateSession;
387
418
  /**
388
419
  * Ensures the requested `cwd` is an absolute path that points at an existing
@@ -400,7 +431,65 @@ export declare const DEFAULT_AGENT_ID = "default";
400
431
  * list if discovery fails so a flaky control request never blocks session
401
432
  * creation. */
402
433
  export declare function discoverCustomAgents(q: Query): Promise<AgentInfo[]>;
403
- export declare function buildConfigOptions(modes: SessionModeState, models: SessionModelState, modelInfos: ModelInfo[], currentEffortLevel?: string, agents?: AgentInfo[], currentAgent?: string): SessionConfigOption[];
434
+ /** Stable ids for the session config options surfaced via `configOptions`.
435
+ * Centralized so the option declarations in `buildConfigOptions` and the
436
+ * handlers in `setSessionConfigOption`/`applyConfigOptionValue` reference the
437
+ * same identifiers and can't drift apart. */
438
+ export declare const MODE_CONFIG_ID = "mode";
439
+ export declare const MODEL_CONFIG_ID = "model";
440
+ export declare const EFFORT_CONFIG_ID = "effort";
441
+ export declare const AGENT_CONFIG_ID = "agent";
442
+ export declare const FAST_MODE_CONFIG_ID = "fast";
443
+ /** Select-fallback values used when the client has not opted into boolean
444
+ * config options (see {@link createFastModeConfigOption}). */
445
+ export declare const FAST_MODE_ON = "on";
446
+ export declare const FAST_MODE_OFF = "off";
447
+ /** Map the SDK's tri-state `fast_mode_state` onto the boolean config toggle.
448
+ * `cooldown` (fast mode temporarily suspended after a rate limit, per the SDK
449
+ * docs) keeps the toggle on so it reflects the user's intent — only an
450
+ * explicit `off` clears it. */
451
+ export declare function fastModeStateEnabled(state: FastModeState): boolean;
452
+ /** Whether the Client advertised support for boolean session config options
453
+ * (`session.configOptions.boolean`). Agents MUST only send `type: "boolean"`
454
+ * config options to Clients that opt in; otherwise we fall back to a `select`.
455
+ * See https://agentclientprotocol.com/rfds/boolean-config-option. */
456
+ export declare function clientSupportsBooleanConfigOptions(clientCapabilities?: ClientCapabilities | null): boolean;
457
+ /** Build the Fast mode config option. When the Client supports boolean config
458
+ * options we expose a native `type: "boolean"` toggle; otherwise we degrade to
459
+ * a two-value `select` ("on"/"off") so older Clients still get a usable
460
+ * control. */
461
+ export declare function createFastModeConfigOption(enabled: boolean, useBooleanOption: boolean): SessionConfigOption;
462
+ /** Resolve the requested Fast mode value from a `session/set_config_option`
463
+ * request. Accepts a native boolean (boolean-capable Clients) or the
464
+ * "on"/"off" select-fallback strings. */
465
+ export declare function resolveFastModeEnabled(params: SetSessionConfigOptionRequest): boolean;
466
+ /** Per-model Fast mode state threaded into {@link buildConfigOptions}. The
467
+ * option is only surfaced when the current model `supported`s fast mode. */
468
+ export type FastModeOptionState = {
469
+ supported: boolean;
470
+ enabled: boolean;
471
+ /** Whether the Client opted into boolean config options. */
472
+ useBooleanOption: boolean;
473
+ };
474
+ export declare function buildConfigOptions(modes: SessionModeState, models: SessionModelState, modelInfos: ModelInfo[], currentEffortLevel?: string, agents?: AgentInfo[], currentAgent?: string, fastMode?: FastModeOptionState): SessionConfigOption[];
475
+ export declare function resolveModelPreference(models: ModelInfo[], preference: string): ModelInfo | null;
476
+ /**
477
+ * Restrict the SDK's model list to the user's `availableModels` allowlist
478
+ * (already merged-and-deduped across settings sources by `SettingsManager`).
479
+ * The user's exact entries become the model IDs surfaced via configOptions
480
+ * and passed to `setModel`, which prevents Claude Code from silently
481
+ * substituting a date-pinned variant (e.g. `haiku` →
482
+ * `claude-haiku-4-5-20251001`) that the user may not have access to.
483
+ *
484
+ * Display info and capability flags are copied from the closest SDK match so
485
+ * the UI still renders sensible names and effort levels.
486
+ *
487
+ * Semantics from https://code.claude.com/docs/en/model-config#restrict-model-selection:
488
+ * - `undefined` is handled by the caller (no allowlist applied).
489
+ * - The Default option is unaffected by `availableModels` — it always remains
490
+ * available, even when the allowlist is `[]`.
491
+ */
492
+ export declare function applyAvailableModelsAllowlist(sdkModels: ModelInfo[], allowlist: string[], settingsModelOverrides?: Record<string, string>): ModelInfo[];
404
493
  export declare function promptToClaude(prompt: PromptRequest): SDKUserMessage;
405
494
  /**
406
495
  * Resolves the ACP `messageId` for a Claude SDK message (live) or a persisted
@@ -1 +1 @@
1
- {"version":3,"file":"acp-agent.d.ts","sourceRoot":"","sources":["../src/acp-agent.ts"],"names":[],"mappings":"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"}
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
@@ -852,6 +852,10 @@ export class ClaudeAcpAgent {
852
852
  case "system":
853
853
  switch (message.subtype) {
854
854
  case "init":
855
+ // A fresh `system`/init (e.g. after reinitialize) can carry an
856
+ // updated Fast mode state; reconcile it with what we seeded at
857
+ // session creation.
858
+ await this.syncFastModeState(message.session_id, session, message.fast_mode_state);
855
859
  break;
856
860
  case "status": {
857
861
  if (message.status === "compacting") {
@@ -1120,6 +1124,13 @@ export class ClaudeAcpAgent {
1120
1124
  // They should not influence the user-turn lifecycle (stop reason,
1121
1125
  // slash-command output forwarding) but their cost is real.
1122
1126
  const isTaskNotification = message.origin?.kind === "task-notification";
1127
+ // Reconcile the Fast mode toggle with the SDK's reported state.
1128
+ // Gated to user-driven turns like every other side effect below; a
1129
+ // background followup's state lands on the next user turn's result.
1130
+ // Runs even when the turn errors or was cancelled.
1131
+ if (!isTaskNotification) {
1132
+ await this.syncFastModeState(params.sessionId, session, message.fast_mode_state);
1133
+ }
1123
1134
  // A user-turn result needs an active turn so its stop reason is
1124
1135
  // attributed and the turn settles at idle. Local-only commands carry
1125
1136
  // no user-message echo to promote them, so do it here from the head.
@@ -1789,7 +1800,7 @@ export class ClaudeAcpAgent {
1789
1800
  throw RequestError.internalError(undefined, SESSION_ENDED_MESSAGE);
1790
1801
  }
1791
1802
  await this.applySessionMode(params.sessionId, params.modeId);
1792
- await this.updateConfigOption(params.sessionId, "mode", params.modeId);
1803
+ await this.updateConfigOption(params.sessionId, MODE_CONFIG_ID, params.modeId);
1793
1804
  return {};
1794
1805
  }
1795
1806
  async setSessionConfigOption(params) {
@@ -1804,13 +1815,20 @@ export class ClaudeAcpAgent {
1804
1815
  if (session.queryClosed) {
1805
1816
  throw RequestError.internalError(undefined, SESSION_ENDED_MESSAGE);
1806
1817
  }
1807
- if (typeof params.value !== "string") {
1808
- throw new Error(`Invalid value for config option ${params.configId}: ${params.value}`);
1809
- }
1810
1818
  const option = session.configOptions.find((o) => o.id === params.configId);
1811
1819
  if (!option) {
1812
1820
  throw new Error(`Unknown config option: ${params.configId}`);
1813
1821
  }
1822
+ // Fast mode carries a boolean value (for Clients that opted into boolean
1823
+ // config options) or the "on"/"off" select fallback, so it bypasses the
1824
+ // string-only validation the select-style options below rely on.
1825
+ if (params.configId === FAST_MODE_CONFIG_ID) {
1826
+ await this.applyFastMode(session, resolveFastModeEnabled(params));
1827
+ return { configOptions: session.configOptions };
1828
+ }
1829
+ if (typeof params.value !== "string") {
1830
+ throw new Error(`Invalid value for config option ${params.configId}: ${params.value}`);
1831
+ }
1814
1832
  const allValues = "options" in option && Array.isArray(option.options)
1815
1833
  ? option.options.flatMap((o) => ("options" in o ? o.options : [o]))
1816
1834
  : [];
@@ -1818,7 +1836,7 @@ export class ClaudeAcpAgent {
1818
1836
  // For model options, fall back to resolveModelPreference when the exact
1819
1837
  // value doesn't match. This lets callers use human-friendly aliases like
1820
1838
  // "opus" or "sonnet" instead of full model IDs like "claude-opus-4-6".
1821
- if (!validValue && params.configId === "model") {
1839
+ if (!validValue && params.configId === MODEL_CONFIG_ID) {
1822
1840
  const modelInfos = allValues.map((o) => ({
1823
1841
  value: o.value,
1824
1842
  displayName: o.name,
@@ -1835,7 +1853,7 @@ export class ClaudeAcpAgent {
1835
1853
  // Use the canonical option value so downstream code always receives the
1836
1854
  // model ID rather than the caller-supplied alias.
1837
1855
  const resolvedValue = validValue.value;
1838
- if (params.configId === "mode") {
1856
+ if (params.configId === MODE_CONFIG_ID) {
1839
1857
  await this.applySessionMode(params.sessionId, resolvedValue);
1840
1858
  await this.client.sessionUpdate({
1841
1859
  sessionId: params.sessionId,
@@ -1845,7 +1863,7 @@ export class ClaudeAcpAgent {
1845
1863
  },
1846
1864
  });
1847
1865
  }
1848
- else if (params.configId === "model") {
1866
+ else if (params.configId === MODEL_CONFIG_ID) {
1849
1867
  await this.sessions[params.sessionId].query.setModel(resolvedValue);
1850
1868
  }
1851
1869
  // Effort SDK sync is handled inside applyConfigOptionValue so that direct
@@ -2051,7 +2069,7 @@ export class ClaudeAcpAgent {
2051
2069
  currentModeId: selectedMode,
2052
2070
  },
2053
2071
  });
2054
- await this.updateConfigOption(sessionId, "mode", selectedMode);
2072
+ await this.updateConfigOption(sessionId, MODE_CONFIG_ID, selectedMode);
2055
2073
  return {
2056
2074
  behavior: "allow",
2057
2075
  updatedInput: toolInput,
@@ -2219,11 +2237,11 @@ export class ClaudeAcpAgent {
2219
2237
  });
2220
2238
  }
2221
2239
  async applyConfigOptionValue(sessionId, session, configId, value) {
2222
- if (configId === "mode") {
2240
+ if (configId === MODE_CONFIG_ID) {
2223
2241
  session.modes = { ...session.modes, currentModeId: value };
2224
2242
  session.configOptions = session.configOptions.map((o) => o.id === configId && typeof o.currentValue === "string" ? { ...o, currentValue: value } : o);
2225
2243
  }
2226
- else if (configId === "model") {
2244
+ else if (configId === MODEL_CONFIG_ID) {
2227
2245
  // `ModelInfo.supportsAutoMode` is the canonical SDK signal for clamping
2228
2246
  // modes below; its `displayName`/`description` also let us infer the
2229
2247
  // context window for semantic aliases (e.g. `default`) whose ID alone
@@ -2266,11 +2284,18 @@ export class ClaudeAcpAgent {
2266
2284
  session.modes = { ...session.modes, availableModes: newAvailableModes };
2267
2285
  }
2268
2286
  // Rebuild config options since effort levels depend on the selected model
2269
- const effortOpt = session.configOptions.find((o) => o.id === "effort");
2287
+ const effortOpt = session.configOptions.find((o) => o.id === EFFORT_CONFIG_ID);
2270
2288
  const currentEffort = typeof effortOpt?.currentValue === "string" ? effortOpt.currentValue : undefined;
2271
- session.configOptions = buildConfigOptions(session.modes, session.models, session.modelInfos, currentEffort, session.agents, session.currentAgent);
2289
+ session.configOptions = buildConfigOptions(session.modes, session.models, session.modelInfos, currentEffort, session.agents, session.currentAgent, {
2290
+ // The toggle follows the newly selected model: it disappears when the
2291
+ // model lacks fast support and reappears (with the retained user
2292
+ // intent) when a supporting model is selected again.
2293
+ supported: newModelInfo?.supportsFastMode ?? false,
2294
+ enabled: session.fastModeEnabled,
2295
+ useBooleanOption: clientSupportsBooleanConfigOptions(this.clientCapabilities),
2296
+ });
2272
2297
  // Sync effort with the SDK if it changed after the model switch
2273
- const newEffortOpt = session.configOptions.find((o) => o.id === "effort");
2298
+ const newEffortOpt = session.configOptions.find((o) => o.id === EFFORT_CONFIG_ID);
2274
2299
  const newEffort = typeof newEffortOpt?.currentValue === "string" ? newEffortOpt.currentValue : undefined;
2275
2300
  if (newEffort !== currentEffort) {
2276
2301
  await session.query.applyFlagSettings({
@@ -2293,7 +2318,7 @@ export class ClaudeAcpAgent {
2293
2318
  });
2294
2319
  }
2295
2320
  }
2296
- else if (configId === "agent") {
2321
+ else if (configId === AGENT_CONFIG_ID) {
2297
2322
  // Live agent switch — no subprocess restart needed. Apply the SDK flag
2298
2323
  // first so a rejected control request leaves both `currentAgent` and the
2299
2324
  // config option untouched (no UI/SDK desync). Passing `null` clears the
@@ -2307,13 +2332,72 @@ export class ClaudeAcpAgent {
2307
2332
  }
2308
2333
  else {
2309
2334
  session.configOptions = session.configOptions.map((o) => o.id === configId && typeof o.currentValue === "string" ? { ...o, currentValue: value } : o);
2310
- if (configId === "effort") {
2335
+ if (configId === EFFORT_CONFIG_ID) {
2311
2336
  await session.query.applyFlagSettings({
2312
2337
  effortLevel: toSdkEffortLevel(value),
2313
2338
  });
2314
2339
  }
2315
2340
  }
2316
2341
  }
2342
+ /** Replace the Fast mode option in `session.configOptions` so it reflects
2343
+ * `enabled` (and the client's current boolean-capability). A no-op when the
2344
+ * option isn't present, so callers must confirm the current model surfaces
2345
+ * it first. */
2346
+ refreshFastModeOption(session, enabled) {
2347
+ const refreshed = createFastModeConfigOption(enabled, clientSupportsBooleanConfigOptions(this.clientCapabilities));
2348
+ session.configOptions = session.configOptions.map((o) => o.id === FAST_MODE_CONFIG_ID ? refreshed : o);
2349
+ }
2350
+ /** Toggle Fast mode for a session: push the SDK flag, record the user's
2351
+ * intent, and refresh the Fast mode config option in place. Only reached
2352
+ * once the option exists (i.e. the current model supports fast mode), so the
2353
+ * option is guaranteed to be present in `configOptions`. */
2354
+ async applyFastMode(session, enabled) {
2355
+ // Apply the SDK flag first so a rejected control request leaves both the
2356
+ // session state and the config option untouched (no UI/SDK desync).
2357
+ await session.query.applyFlagSettings({ fastMode: enabled });
2358
+ session.fastModeEnabled = enabled;
2359
+ this.refreshFastModeOption(session, enabled);
2360
+ }
2361
+ /** Reconcile the session's Fast mode toggle with an SDK-reported
2362
+ * `fast_mode_state` (delivered on `system`/init and on user-turn `result`s).
2363
+ * The SDK can flip fast mode independently of the user — e.g. back to `on`
2364
+ * once a rate-limit `cooldown` clears — so we mirror definitive on/off
2365
+ * changes into the config option and notify the client.
2366
+ *
2367
+ * Guards, in order:
2368
+ * - absent state: nothing to reconcile.
2369
+ * - no Fast mode option: the current model doesn't support fast mode, so the
2370
+ * reported state reflects capability, not the user's intent. Leave the
2371
+ * retained setting untouched so it's correct when a supporting model is
2372
+ * reselected (the source of the earlier intent-clobber bug was mutating it
2373
+ * here).
2374
+ * - `cooldown`: a transient suspension of an already-enabled fast mode.
2375
+ * Leave the toggle as-is rather than flapping it — and never let a stray
2376
+ * cooldown spuriously enable a toggle the user has off. */
2377
+ async syncFastModeState(sessionId, session, state) {
2378
+ if (state === undefined) {
2379
+ return;
2380
+ }
2381
+ if (!session.configOptions.some((o) => o.id === FAST_MODE_CONFIG_ID)) {
2382
+ return;
2383
+ }
2384
+ if (state === "cooldown") {
2385
+ return;
2386
+ }
2387
+ const enabled = state === "on";
2388
+ if (enabled === session.fastModeEnabled) {
2389
+ return;
2390
+ }
2391
+ session.fastModeEnabled = enabled;
2392
+ this.refreshFastModeOption(session, enabled);
2393
+ await this.client.sessionUpdate({
2394
+ sessionId,
2395
+ update: {
2396
+ sessionUpdate: "config_option_update",
2397
+ configOptions: session.configOptions,
2398
+ },
2399
+ });
2400
+ }
2317
2401
  async getOrCreateSession(params) {
2318
2402
  const existingSession = this.sessions[params.sessionId];
2319
2403
  if (existingSession) {
@@ -2524,7 +2608,7 @@ export class ClaudeAcpAgent {
2524
2608
  currentModeId: "plan",
2525
2609
  },
2526
2610
  });
2527
- await this.updateConfigOption(sessionId, "mode", "plan");
2611
+ await this.updateConfigOption(sessionId, MODE_CONFIG_ID, "plan");
2528
2612
  },
2529
2613
  }),
2530
2614
  ],
@@ -2617,8 +2701,9 @@ export class ClaudeAcpAgent {
2617
2701
  // configOptions, the current-model resolver, and the stored modelInfos
2618
2702
  // consistent with what the user configured.
2619
2703
  const settingsAvailableModels = settingsManager.getSettings().availableModels;
2704
+ const settingsModelOverrides = settingsManager.getSettings().modelOverrides;
2620
2705
  const allowedModels = Array.isArray(settingsAvailableModels)
2621
- ? applyAvailableModelsAllowlist(initializationResult.models, settingsAvailableModels)
2706
+ ? applyAvailableModelsAllowlist(initializationResult.models, settingsAvailableModels, settingsModelOverrides)
2622
2707
  : initializationResult.models;
2623
2708
  const models = await getAvailableModels(q, allowedModels, initializationResult.models, settingsManager, this.logger);
2624
2709
  // Gate `auto` (and future model-specific modes) on the resolved model's
@@ -2666,9 +2751,20 @@ export class ClaudeAcpAgent {
2666
2751
  const currentAgent = requestedAgent && agents.some((a) => a.name === requestedAgent)
2667
2752
  ? requestedAgent
2668
2753
  : DEFAULT_AGENT_ID;
2669
- const configOptions = buildConfigOptions(modes, models, allowedModels, settingsManager.getSettings().effortLevel, agents, currentAgent);
2754
+ // Seed Fast mode from the SDK's reported state so the UI reflects reality
2755
+ // (the CLI may start a session with fast mode already on, or force it off
2756
+ // when `fastModePerSessionOptIn` is set). The toggle is only surfaced while
2757
+ // the resolved model advertises `supportsFastMode`.
2758
+ const fastModeEnabled = initializationResult.fast_mode_state !== undefined &&
2759
+ fastModeStateEnabled(initializationResult.fast_mode_state);
2760
+ const fastMode = {
2761
+ supported: currentModelInfo?.supportsFastMode ?? false,
2762
+ enabled: fastModeEnabled,
2763
+ useBooleanOption: clientSupportsBooleanConfigOptions(this.clientCapabilities),
2764
+ };
2765
+ const configOptions = buildConfigOptions(modes, models, allowedModels, settingsManager.getSettings().effortLevel, agents, currentAgent, fastMode);
2670
2766
  // Apply the initial effort level to the SDK so it matches the UI default
2671
- const initialEffort = configOptions.find((o) => o.id === "effort");
2767
+ const initialEffort = configOptions.find((o) => o.id === EFFORT_CONFIG_ID);
2672
2768
  if (initialEffort &&
2673
2769
  typeof initialEffort.currentValue === "string" &&
2674
2770
  initialEffort.currentValue !== "default") {
@@ -2695,6 +2791,7 @@ export class ClaudeAcpAgent {
2695
2791
  configOptions,
2696
2792
  agents,
2697
2793
  currentAgent,
2794
+ fastModeEnabled,
2698
2795
  abortController,
2699
2796
  emitRawSDKMessages: sessionMeta?.claudeCode?.emitRawSDKMessages ?? false,
2700
2797
  contextWindowSize: inferContextWindowFromModel(models.currentModelId, currentModelInfo?.displayName, currentModelInfo?.description) ?? DEFAULT_CONTEXT_WINDOW,
@@ -2874,10 +2971,78 @@ export async function discoverCustomAgents(q) {
2874
2971
  return [];
2875
2972
  }
2876
2973
  }
2877
- export function buildConfigOptions(modes, models, modelInfos, currentEffortLevel, agents = [], currentAgent = DEFAULT_AGENT_ID) {
2974
+ /** Stable ids for the session config options surfaced via `configOptions`.
2975
+ * Centralized so the option declarations in `buildConfigOptions` and the
2976
+ * handlers in `setSessionConfigOption`/`applyConfigOptionValue` reference the
2977
+ * same identifiers and can't drift apart. */
2978
+ export const MODE_CONFIG_ID = "mode";
2979
+ export const MODEL_CONFIG_ID = "model";
2980
+ export const EFFORT_CONFIG_ID = "effort";
2981
+ export const AGENT_CONFIG_ID = "agent";
2982
+ export const FAST_MODE_CONFIG_ID = "fast";
2983
+ /** Select-fallback values used when the client has not opted into boolean
2984
+ * config options (see {@link createFastModeConfigOption}). */
2985
+ export const FAST_MODE_ON = "on";
2986
+ export const FAST_MODE_OFF = "off";
2987
+ const FAST_MODE_DESCRIPTION = "Faster responses on supported models";
2988
+ /** Map the SDK's tri-state `fast_mode_state` onto the boolean config toggle.
2989
+ * `cooldown` (fast mode temporarily suspended after a rate limit, per the SDK
2990
+ * docs) keeps the toggle on so it reflects the user's intent — only an
2991
+ * explicit `off` clears it. */
2992
+ export function fastModeStateEnabled(state) {
2993
+ return state !== "off";
2994
+ }
2995
+ /** Whether the Client advertised support for boolean session config options
2996
+ * (`session.configOptions.boolean`). Agents MUST only send `type: "boolean"`
2997
+ * config options to Clients that opt in; otherwise we fall back to a `select`.
2998
+ * See https://agentclientprotocol.com/rfds/boolean-config-option. */
2999
+ export function clientSupportsBooleanConfigOptions(clientCapabilities) {
3000
+ return clientCapabilities?.session?.configOptions?.boolean != null;
3001
+ }
3002
+ /** Build the Fast mode config option. When the Client supports boolean config
3003
+ * options we expose a native `type: "boolean"` toggle; otherwise we degrade to
3004
+ * a two-value `select` ("on"/"off") so older Clients still get a usable
3005
+ * control. */
3006
+ export function createFastModeConfigOption(enabled, useBooleanOption) {
3007
+ const base = {
3008
+ id: FAST_MODE_CONFIG_ID,
3009
+ name: "Fast mode",
3010
+ description: FAST_MODE_DESCRIPTION,
3011
+ category: "model_config",
3012
+ };
3013
+ if (useBooleanOption) {
3014
+ return { ...base, type: "boolean", currentValue: enabled };
3015
+ }
3016
+ return {
3017
+ ...base,
3018
+ type: "select",
3019
+ currentValue: enabled ? FAST_MODE_ON : FAST_MODE_OFF,
3020
+ options: [
3021
+ { value: FAST_MODE_ON, name: "On" },
3022
+ { value: FAST_MODE_OFF, name: "Off" },
3023
+ ],
3024
+ };
3025
+ }
3026
+ /** Resolve the requested Fast mode value from a `session/set_config_option`
3027
+ * request. Accepts a native boolean (boolean-capable Clients) or the
3028
+ * "on"/"off" select-fallback strings. */
3029
+ export function resolveFastModeEnabled(params) {
3030
+ const value = params.value;
3031
+ if (typeof value === "boolean") {
3032
+ return value;
3033
+ }
3034
+ if (value === FAST_MODE_ON) {
3035
+ return true;
3036
+ }
3037
+ if (value === FAST_MODE_OFF) {
3038
+ return false;
3039
+ }
3040
+ throw new Error(`Invalid value for config option ${FAST_MODE_CONFIG_ID}: ${value}`);
3041
+ }
3042
+ export function buildConfigOptions(modes, models, modelInfos, currentEffortLevel, agents = [], currentAgent = DEFAULT_AGENT_ID, fastMode) {
2878
3043
  const options = [
2879
3044
  {
2880
- id: "mode",
3045
+ id: MODE_CONFIG_ID,
2881
3046
  name: "Mode",
2882
3047
  description: "Session permission mode",
2883
3048
  category: "mode",
@@ -2890,7 +3055,7 @@ export function buildConfigOptions(modes, models, modelInfos, currentEffortLevel
2890
3055
  })),
2891
3056
  },
2892
3057
  {
2893
- id: "model",
3058
+ id: MODEL_CONFIG_ID,
2894
3059
  name: "Model",
2895
3060
  description: "AI model to use",
2896
3061
  category: "model",
@@ -2922,7 +3087,7 @@ export function buildConfigOptions(modes, models, modelInfos, currentEffortLevel
2922
3087
  const includes = (l) => l === "default" || supportedLevels.includes(l);
2923
3088
  const validEffort = currentEffortLevel && includes(currentEffortLevel) ? currentEffortLevel : "default";
2924
3089
  options.push({
2925
- id: "effort",
3090
+ id: EFFORT_CONFIG_ID,
2926
3091
  name: "Effort",
2927
3092
  description: "Available effort levels for this model",
2928
3093
  category: "thought_level",
@@ -2931,13 +3096,19 @@ export function buildConfigOptions(modes, models, modelInfos, currentEffortLevel
2931
3096
  options: effortOptions,
2932
3097
  });
2933
3098
  }
3099
+ // Surface the Fast mode toggle only when the current model supports it. The
3100
+ // option renders as a native boolean toggle for Clients that opted in, and a
3101
+ // two-value select otherwise.
3102
+ if (fastMode?.supported) {
3103
+ options.push(createFastModeConfigOption(fastMode.enabled, fastMode.useBooleanOption));
3104
+ }
2934
3105
  // Only surface the Agent picker when there's a real choice — i.e. the user
2935
3106
  // has configured at least one custom agent (built-ins are filtered out in
2936
3107
  // discoverCustomAgents). With none configured, "Default" would be the only
2937
3108
  // entry, so we omit the option entirely.
2938
3109
  if (agents.length > 0) {
2939
3110
  options.push({
2940
- id: "agent",
3111
+ id: AGENT_CONFIG_ID,
2941
3112
  name: "Agent",
2942
3113
  description: "Main-thread agent persona",
2943
3114
  type: "select",
@@ -2957,13 +3128,17 @@ export function buildConfigOptions(modes, models, modelInfos, currentEffortLevel
2957
3128
  // Claude Code CLI persists display strings like "opus[1m]" in settings,
2958
3129
  // but the SDK model list uses IDs like "claude-opus-4-6-1m".
2959
3130
  const MODEL_CONTEXT_HINT_PATTERN = /\[(\d+m)\]$/i;
2960
- // Captures a model family version such as `4-6` or `4.7` so we can keep
2961
- // `claude-opus-4-6` from being copied onto the SDK's `opus` alias when that
2962
- // alias currently resolves to a different family version (e.g. Opus 4.7).
2963
- const MODEL_FAMILY_VERSION_PATTERN = /\b(\d+)[-.](\d+)\b/;
3131
+ // Captures a model family version: `4-6`/`4.7` for dated generations, or a
3132
+ // bare `5` for single-number ones like "Sonnet 5". Used to keep a pinned
3133
+ // `claude-opus-4-6` from matching the `opus` alias once it points at 4.7.
3134
+ const MODEL_FAMILY_VERSION_PATTERN = /\b(\d+)(?:[-.](\d+))?\b/;
2964
3135
  function extractModelFamilyVersion(s) {
2965
- const match = s.match(MODEL_FAMILY_VERSION_PATTERN);
2966
- return match ? `${match[1]}.${match[2]}` : null;
3136
+ // Strip "[1m]"-style context hints first — that digit is context window
3137
+ // size, not a model generation version.
3138
+ const match = s.replace(/\[\d+m\]/gi, "").match(MODEL_FAMILY_VERSION_PATTERN);
3139
+ if (!match)
3140
+ return null;
3141
+ return match[2] ? `${match[1]}.${match[2]}` : match[1];
2967
3142
  }
2968
3143
  function modelVersionsCompatible(preference, candidate) {
2969
3144
  const preferred = extractModelFamilyVersion(preference);
@@ -3008,7 +3183,7 @@ function scoreModelMatch(model, tokens, contextHint) {
3008
3183
  return 0;
3009
3184
  return score;
3010
3185
  }
3011
- function resolveModelPreference(models, preference) {
3186
+ export function resolveModelPreference(models, preference) {
3012
3187
  const trimmed = preference.trim();
3013
3188
  if (!trimmed)
3014
3189
  return null;
@@ -3019,6 +3194,15 @@ function resolveModelPreference(models, preference) {
3019
3194
  model.displayName.toLowerCase() === lower);
3020
3195
  if (directMatch)
3021
3196
  return directMatch;
3197
+ // Exact match on the alias's canonical resolved id (e.g. a pinned
3198
+ // "claude-sonnet-5" against the "sonnet" row's `resolvedModel`). SDK-
3199
+ // reported and unambiguous, so it's tried before the fuzzier tiers below.
3200
+ // "default" is skipped first since it shares a resolvedModel with
3201
+ // whichever alias the CLI currently recommends — a specific pin should
3202
+ // land on that named alias, not "default".
3203
+ const resolvedMatch = models.find((model) => model.value !== "default" && model.resolvedModel?.toLowerCase() === lower) ?? models.find((model) => model.resolvedModel?.toLowerCase() === lower);
3204
+ if (resolvedMatch)
3205
+ return resolvedMatch;
3022
3206
  // Substring match
3023
3207
  const includesMatch = models.find((model) => {
3024
3208
  if (!modelVersionsCompatible(trimmed, model))
@@ -3073,7 +3257,7 @@ function resolveSettingsModel(models, settingsModel, logger) {
3073
3257
  * - The Default option is unaffected by `availableModels` — it always remains
3074
3258
  * available, even when the allowlist is `[]`.
3075
3259
  */
3076
- function applyAvailableModelsAllowlist(sdkModels, allowlist) {
3260
+ export function applyAvailableModelsAllowlist(sdkModels, allowlist, settingsModelOverrides) {
3077
3261
  // Default is always preserved per the docs. Synthesize one if the SDK
3078
3262
  // didn't surface it so downstream code (e.g. `getAvailableModels` picking
3079
3263
  // `models[0]` as a fallback) still has something to work with.
@@ -3085,18 +3269,29 @@ function applyAvailableModelsAllowlist(sdkModels, allowlist) {
3085
3269
  const result = [defaultModel];
3086
3270
  const seen = new Set([defaultModel.value]);
3087
3271
  const sdkModelsWithoutDefault = sdkModels.filter((m) => m.value !== "default");
3272
+ // Bedrock/Vertex deployments enforce short aliases (e.g. "claude-opus-4-6")
3273
+ // in availableModels but require provider-specific IDs at the API. We still
3274
+ // resolve `sdkMatch` against the alias (`trimmed`) — that's what the
3275
+ // matching heuristics above are built for, and override targets (ARNs,
3276
+ // opaque provider IDs) often won't textually resemble anything in
3277
+ // `sdkModelsWithoutDefault`. Only the entry's surfaced `value` becomes the
3278
+ // override target, so it's what `setModel` ends up passing to the API.
3088
3279
  for (const entry of allowlist) {
3089
3280
  const trimmed = entry.trim();
3090
3281
  if (!trimmed || seen.has(trimmed))
3091
3282
  continue;
3283
+ const overridden = settingsModelOverrides?.[trimmed];
3284
+ const effective = overridden ?? trimmed;
3285
+ if (seen.has(effective))
3286
+ continue;
3092
3287
  const sdkMatch = resolveModelPreference(sdkModelsWithoutDefault, trimmed);
3093
3288
  if (sdkMatch) {
3094
- result.push({ ...sdkMatch, value: trimmed });
3289
+ result.push({ ...sdkMatch, value: effective });
3095
3290
  }
3096
3291
  else {
3097
- result.push({ value: trimmed, displayName: trimmed, description: "" });
3292
+ result.push({ value: effective, displayName: trimmed, description: "" });
3098
3293
  }
3099
- seen.add(trimmed);
3294
+ seen.add(effective);
3100
3295
  }
3101
3296
  // The custom model option (ANTHROPIC_CUSTOM_MODEL_OPTION) is exempt from the
3102
3297
  // allowlist, the same way Default is. Per the model-config docs it adds an
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/dist/tools.js CHANGED
@@ -234,6 +234,23 @@ export function toolInfoFromToolUse(toolUse, supportsTerminalOutput = false, cwd
234
234
  content: [],
235
235
  };
236
236
  }
237
+ case "ReportFindings": {
238
+ const input = toolUse.input;
239
+ const findings = input?.findings ?? [];
240
+ return {
241
+ title: findings.length === 0
242
+ ? "Report findings: none found"
243
+ : `Report ${findings.length} finding${findings.length === 1 ? "" : "s"}`,
244
+ kind: "think",
245
+ content: findings.map((finding) => ({
246
+ type: "content",
247
+ content: {
248
+ type: "text",
249
+ text: `**${finding.file}${finding.line ? `:${finding.line}` : ""}** — ${finding.summary}`,
250
+ },
251
+ })),
252
+ };
253
+ }
237
254
  case "TaskCreate": {
238
255
  const input = toolUse.input;
239
256
  return {
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.53.0",
6
+ "version": "0.54.1",
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",
@@ -63,21 +63,21 @@
63
63
  "node": ">=22"
64
64
  },
65
65
  "dependencies": {
66
- "@agentclientprotocol/sdk": "1.0.0",
67
- "@anthropic-ai/claude-agent-sdk": "0.3.195",
66
+ "@agentclientprotocol/sdk": "1.1.0",
67
+ "@anthropic-ai/claude-agent-sdk": "0.3.197",
68
68
  "zod": "^3.25.0 || ^4.0.0"
69
69
  },
70
70
  "devDependencies": {
71
- "@anthropic-ai/sdk": "0.106.0",
71
+ "@anthropic-ai/sdk": "0.108.0",
72
72
  "@eslint/js": "10.0.1",
73
73
  "@tsconfig/node22": "22.0.5",
74
74
  "@types/node": "26.0.1",
75
- "@typescript-eslint/eslint-plugin": "8.62.0",
76
- "@typescript-eslint/parser": "8.62.0",
75
+ "@typescript-eslint/eslint-plugin": "8.62.1",
76
+ "@typescript-eslint/parser": "8.62.1",
77
77
  "eslint": "10.6.0",
78
78
  "eslint-config-prettier": "10.1.8",
79
79
  "globals": "17.7.0",
80
- "prettier": "3.9.1",
80
+ "prettier": "3.9.4",
81
81
  "ts-node": "10.9.2",
82
82
  "typescript": "6.0.3",
83
83
  "vitest": "4.1.9"