@band-ai/sdk 0.4.0 → 0.4.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.
@@ -7,7 +7,7 @@ import { m as ToolModelMessage, n as ToolModelSchema, M as MetadataMap } from '.
7
7
  import { u as GoogleADKMessages, s as GoogleADKHistoryConverter, e as A2ASessionState, A as A2AAuth, G as GatewaySessionState, a as A2AGatewayAdapterOptions, n as ParlantMessages, P as ParlantHistoryConverter, C as ChatTurn, v as OpencodeSessionState, O as OpencodeHistoryConverter, r as ACPClientSessionState } from './acp-client-DUXyczlF.js';
8
8
  import { c as createBandMcpBackend } from './backends-CgsPQa9B.js';
9
9
  import { M as McpToolRegistration } from './sdk-Cin80BTC.js';
10
- import { Client, ClientSideConnection, RequestPermissionRequest, McpServer, ClientCapabilities, SessionMode, SessionConfigSelectOption } from '@agentclientprotocol/sdk';
10
+ import { Client, ClientSideConnection, RequestPermissionRequest, McpServer, ClientCapabilities, SessionMode, SessionConfigOption, SessionConfigSelectOption } from '@agentclientprotocol/sdk';
11
11
 
12
12
  type GenericAdapterHandler = (args: {
13
13
  message: PlatformMessage;
@@ -1365,6 +1365,12 @@ interface ACPModelRequest {
1365
1365
  currentModelId: string;
1366
1366
  models: readonly SessionConfigSelectOption[];
1367
1367
  }
1368
+ interface ACPConfigRequest {
1369
+ roomId: string;
1370
+ sessionId: string;
1371
+ configOptions: readonly SessionConfigOption[];
1372
+ }
1373
+ type ACPConfigSelections = Readonly<Record<string, string | undefined>>;
1368
1374
  interface ACPClientAdapterBaseOptions {
1369
1375
  cwd?: string;
1370
1376
  env?: Record<string, string>;
@@ -1379,6 +1385,7 @@ interface ACPClientAdapterBaseOptions {
1379
1385
  permissionTimeoutMs?: number;
1380
1386
  turnTimeoutMs?: number;
1381
1387
  resolveSessionMode?: (request: ACPModeRequest, signal: AbortSignal) => Promise<string | undefined>;
1388
+ resolveSessionConfig?: (request: ACPConfigRequest, signal: AbortSignal) => Promise<ACPConfigSelections | undefined>;
1382
1389
  resolveSessionModel?: (request: ACPModelRequest, signal: AbortSignal) => Promise<string | undefined>;
1383
1390
  logger?: Logger;
1384
1391
  }
@@ -1419,6 +1426,7 @@ declare class ACPClientAdapter extends SimpleAdapter<ACPClientSessionState, Adap
1419
1426
  private readonly resolvePermission?;
1420
1427
  private readonly resolveSessionMode?;
1421
1428
  private readonly resolveSessionModel?;
1429
+ private readonly resolveSessionConfig?;
1422
1430
  private readonly permissionTimeoutMs;
1423
1431
  private readonly turnTimeoutMs;
1424
1432
  private readonly logger;
@@ -1457,6 +1465,7 @@ declare class ACPClientAdapter extends SimpleAdapter<ACPClientSessionState, Adap
1457
1465
  private spawnConnection;
1458
1466
  private getOrCreateSession;
1459
1467
  private establishSession;
1468
+ private configureSessionConfig;
1460
1469
  private linkOrAbandon;
1461
1470
  private configureSessionMode;
1462
1471
  private configureSessionModel;
@@ -1501,4 +1510,4 @@ declare class CopilotACPAdapter extends ACPClientAdapter {
1501
1510
  constructor(options?: CopilotACPAdapterOptions);
1502
1511
  }
1503
1512
 
1504
- export { type VercelAISDKAdapterOptions as $, A2AAdapter as A, type GeminiAdapterOptions as B, CODEX_REASONING_EFFORTS as C, DEFAULT_COPILOT_ACP_COMMAND as D, GenericAdapter as E, type GenericAdapterHandler as F, GeminiAdapter as G, GoogleADKAdapter as H, type GoogleADKAdapterOptions as I, type LangGraphAdapterOptions as J, type LangGraphGraph as K, LangGraphAdapter as L, LettaAdapter as M, type LettaAdapterOptions as N, OmpACPAdapter as O, type OmpACPAdapterOptions as P, OpenAIAdapter as Q, type OpenAIAdapterOptions as R, OpencodeAdapter as S, type OpencodeAdapterConfig as T, type OpencodeApprovalMode as U, type OpencodeApprovalReply as V, type OpencodeQuestionMode as W, ParlantAdapter as X, type ParlantAdapterOptions as Y, type ToolCallingModel as Z, VercelAISDKAdapter as _, type A2AAdapterOptions as a, type A2AClientFactory as a0, type A2AClientLike as a1, type ACPPermissionAbandonReason as a2, type ACPPermissionEndReason as a3, type ACPPermissionRequest as a4, type AnthropicClientFactory as a5, AnthropicToolCallingModel as a6, type AnthropicToolCallingModelOptions as a7, type ClaudeSDKQuery as a8, type ClaudeSDKQueryParams as a9, type ParlantClientFactory as aA, type ParlantClientLike as aB, type ToolCall as aC, ToolCallingAdapter as aD, type ToolCallingAdapterOptions as aE, type ToolCallingModelRequest as aF, type ToolCallingResponse as aG, type ToolResult as aH, type TurnStartParams as aI, VercelAISDKToolCallingModel as aJ, type VercelAISDKToolCallingModelOptions as aK, runSingleToolRound as aL, CodexAppServerStdioClient as aa, type CodexClientLike as ab, CodexJsonRpcError as ac, type DynamicToolCallParams as ad, type DynamicToolCallResponse as ae, type DynamicToolSpec as af, type GeminiClientFactory as ag, GeminiToolCallingModel as ah, type GeminiToolCallingModelOptions as ai, HttpOpencodeClient as aj, type HttpOpencodeClientOptions as ak, HttpStatusError as al, type LettaAgentCreateParams as am, type LettaClientFactory as an, type LettaClientLike as ao, LettaHistoryConverter as ap, type LettaMessage as aq, type LettaMessageCreateParams as ar, type LettaMessages as as, type LettaRequestOptions as at, type LettaResponse as au, type LettaResponseMessage as av, type OpenAIClientFactory as aw, OpenAIToolCallingModel as ax, type OpenAIToolCallingModelOptions as ay, type OpencodeClientLike as az, A2AGatewayAdapter as b, ACPClientAdapter as c, type ACPClientAdapterBaseOptions as d, type ACPClientAdapterOptions as e, type ACPClientStdioOptions as f, type ACPClientTcpOptions as g, AnthropicAdapter as h, type AnthropicAdapterOptions as i, CODEX_REASONING_SUMMARIES as j, CODEX_WEB_SEARCH_MODES as k, type ClaudePermissionMode as l, ClaudeSDKAdapter as m, type ClaudeSDKAdapterOptions as n, CodexAdapter as o, type CodexAdapterConfig as p, type CodexApprovalPolicy as q, type CodexReasoningEffort as r, type CodexReasoningSummary as s, type CodexSandboxMode as t, type CodexWebSearchMode as u, CopilotACPAdapter as v, type CopilotACPAdapterOptions as w, type CopilotACPStdioOptions as x, type CopilotACPTcpOptions as y, DEFAULT_OMP_ACP_COMMAND as z };
1513
+ export { type ToolCallingModel as $, A2AAdapter as A, type CopilotACPTcpOptions as B, CODEX_REASONING_EFFORTS as C, DEFAULT_COPILOT_ACP_COMMAND as D, DEFAULT_OMP_ACP_COMMAND as E, type GeminiAdapterOptions as F, GeminiAdapter as G, GenericAdapter as H, type GenericAdapterHandler as I, GoogleADKAdapter as J, type GoogleADKAdapterOptions as K, LangGraphAdapter as L, type LangGraphAdapterOptions as M, type LangGraphGraph as N, LettaAdapter as O, type LettaAdapterOptions as P, OmpACPAdapter as Q, type OmpACPAdapterOptions as R, OpenAIAdapter as S, type OpenAIAdapterOptions as T, OpencodeAdapter as U, type OpencodeAdapterConfig as V, type OpencodeApprovalMode as W, type OpencodeApprovalReply as X, type OpencodeQuestionMode as Y, ParlantAdapter as Z, type ParlantAdapterOptions as _, type A2AAdapterOptions as a, VercelAISDKAdapter as a0, type VercelAISDKAdapterOptions as a1, type A2AClientFactory as a2, type A2AClientLike as a3, type ACPPermissionAbandonReason as a4, type ACPPermissionEndReason as a5, type ACPPermissionRequest as a6, type AnthropicClientFactory as a7, AnthropicToolCallingModel as a8, type AnthropicToolCallingModelOptions as a9, type OpenAIToolCallingModelOptions as aA, type OpencodeClientLike as aB, type ParlantClientFactory as aC, type ParlantClientLike as aD, type ToolCall as aE, ToolCallingAdapter as aF, type ToolCallingAdapterOptions as aG, type ToolCallingModelRequest as aH, type ToolCallingResponse as aI, type ToolResult as aJ, type TurnStartParams as aK, VercelAISDKToolCallingModel as aL, type VercelAISDKToolCallingModelOptions as aM, runSingleToolRound as aN, type ClaudeSDKQuery as aa, type ClaudeSDKQueryParams as ab, CodexAppServerStdioClient as ac, type CodexClientLike as ad, CodexJsonRpcError as ae, type DynamicToolCallParams as af, type DynamicToolCallResponse as ag, type DynamicToolSpec as ah, type GeminiClientFactory as ai, GeminiToolCallingModel as aj, type GeminiToolCallingModelOptions as ak, HttpOpencodeClient as al, type HttpOpencodeClientOptions as am, HttpStatusError as an, type LettaAgentCreateParams as ao, type LettaClientFactory as ap, type LettaClientLike as aq, LettaHistoryConverter as ar, type LettaMessage as as, type LettaMessageCreateParams as at, type LettaMessages as au, type LettaRequestOptions as av, type LettaResponse as aw, type LettaResponseMessage as ax, type OpenAIClientFactory as ay, OpenAIToolCallingModel as az, A2AGatewayAdapter as b, ACPClientAdapter as c, type ACPClientAdapterBaseOptions as d, type ACPClientAdapterOptions as e, type ACPClientStdioOptions as f, type ACPClientTcpOptions as g, type ACPConfigRequest as h, type ACPConfigSelections as i, AnthropicAdapter as j, type AnthropicAdapterOptions as k, CODEX_REASONING_SUMMARIES as l, CODEX_WEB_SEARCH_MODES as m, type ClaudePermissionMode as n, ClaudeSDKAdapter as o, type ClaudeSDKAdapterOptions as p, CodexAdapter as q, type CodexAdapterConfig as r, type CodexApprovalPolicy as s, type CodexReasoningEffort as t, type CodexReasoningSummary as u, type CodexSandboxMode as v, type CodexWebSearchMode as w, CopilotACPAdapter as x, type CopilotACPAdapterOptions as y, type CopilotACPStdioOptions as z };
@@ -7,7 +7,7 @@ import { m as ToolModelMessage, n as ToolModelSchema, M as MetadataMap } from '.
7
7
  import { u as GoogleADKMessages, s as GoogleADKHistoryConverter, e as A2ASessionState, A as A2AAuth, G as GatewaySessionState, a as A2AGatewayAdapterOptions, n as ParlantMessages, P as ParlantHistoryConverter, C as ChatTurn, v as OpencodeSessionState, O as OpencodeHistoryConverter, r as ACPClientSessionState } from './acp-client-D-I_5lK-.cjs';
8
8
  import { c as createBandMcpBackend } from './backends-Dh2WXcHQ.cjs';
9
9
  import { M as McpToolRegistration } from './sdk-CXNqzoY1.cjs';
10
- import { Client, ClientSideConnection, RequestPermissionRequest, McpServer, ClientCapabilities, SessionMode, SessionConfigSelectOption } from '@agentclientprotocol/sdk';
10
+ import { Client, ClientSideConnection, RequestPermissionRequest, McpServer, ClientCapabilities, SessionMode, SessionConfigOption, SessionConfigSelectOption } from '@agentclientprotocol/sdk';
11
11
 
12
12
  type GenericAdapterHandler = (args: {
13
13
  message: PlatformMessage;
@@ -1365,6 +1365,12 @@ interface ACPModelRequest {
1365
1365
  currentModelId: string;
1366
1366
  models: readonly SessionConfigSelectOption[];
1367
1367
  }
1368
+ interface ACPConfigRequest {
1369
+ roomId: string;
1370
+ sessionId: string;
1371
+ configOptions: readonly SessionConfigOption[];
1372
+ }
1373
+ type ACPConfigSelections = Readonly<Record<string, string | undefined>>;
1368
1374
  interface ACPClientAdapterBaseOptions {
1369
1375
  cwd?: string;
1370
1376
  env?: Record<string, string>;
@@ -1379,6 +1385,7 @@ interface ACPClientAdapterBaseOptions {
1379
1385
  permissionTimeoutMs?: number;
1380
1386
  turnTimeoutMs?: number;
1381
1387
  resolveSessionMode?: (request: ACPModeRequest, signal: AbortSignal) => Promise<string | undefined>;
1388
+ resolveSessionConfig?: (request: ACPConfigRequest, signal: AbortSignal) => Promise<ACPConfigSelections | undefined>;
1382
1389
  resolveSessionModel?: (request: ACPModelRequest, signal: AbortSignal) => Promise<string | undefined>;
1383
1390
  logger?: Logger;
1384
1391
  }
@@ -1419,6 +1426,7 @@ declare class ACPClientAdapter extends SimpleAdapter<ACPClientSessionState, Adap
1419
1426
  private readonly resolvePermission?;
1420
1427
  private readonly resolveSessionMode?;
1421
1428
  private readonly resolveSessionModel?;
1429
+ private readonly resolveSessionConfig?;
1422
1430
  private readonly permissionTimeoutMs;
1423
1431
  private readonly turnTimeoutMs;
1424
1432
  private readonly logger;
@@ -1457,6 +1465,7 @@ declare class ACPClientAdapter extends SimpleAdapter<ACPClientSessionState, Adap
1457
1465
  private spawnConnection;
1458
1466
  private getOrCreateSession;
1459
1467
  private establishSession;
1468
+ private configureSessionConfig;
1460
1469
  private linkOrAbandon;
1461
1470
  private configureSessionMode;
1462
1471
  private configureSessionModel;
@@ -1501,4 +1510,4 @@ declare class CopilotACPAdapter extends ACPClientAdapter {
1501
1510
  constructor(options?: CopilotACPAdapterOptions);
1502
1511
  }
1503
1512
 
1504
- export { type VercelAISDKAdapterOptions as $, A2AAdapter as A, type GeminiAdapterOptions as B, CODEX_REASONING_EFFORTS as C, DEFAULT_COPILOT_ACP_COMMAND as D, GenericAdapter as E, type GenericAdapterHandler as F, GeminiAdapter as G, GoogleADKAdapter as H, type GoogleADKAdapterOptions as I, type LangGraphAdapterOptions as J, type LangGraphGraph as K, LangGraphAdapter as L, LettaAdapter as M, type LettaAdapterOptions as N, OmpACPAdapter as O, type OmpACPAdapterOptions as P, OpenAIAdapter as Q, type OpenAIAdapterOptions as R, OpencodeAdapter as S, type OpencodeAdapterConfig as T, type OpencodeApprovalMode as U, type OpencodeApprovalReply as V, type OpencodeQuestionMode as W, ParlantAdapter as X, type ParlantAdapterOptions as Y, type ToolCallingModel as Z, VercelAISDKAdapter as _, type A2AAdapterOptions as a, type A2AClientFactory as a0, type A2AClientLike as a1, type ACPPermissionAbandonReason as a2, type ACPPermissionEndReason as a3, type ACPPermissionRequest as a4, type AnthropicClientFactory as a5, AnthropicToolCallingModel as a6, type AnthropicToolCallingModelOptions as a7, type ClaudeSDKQuery as a8, type ClaudeSDKQueryParams as a9, type ParlantClientFactory as aA, type ParlantClientLike as aB, type ToolCall as aC, ToolCallingAdapter as aD, type ToolCallingAdapterOptions as aE, type ToolCallingModelRequest as aF, type ToolCallingResponse as aG, type ToolResult as aH, type TurnStartParams as aI, VercelAISDKToolCallingModel as aJ, type VercelAISDKToolCallingModelOptions as aK, runSingleToolRound as aL, CodexAppServerStdioClient as aa, type CodexClientLike as ab, CodexJsonRpcError as ac, type DynamicToolCallParams as ad, type DynamicToolCallResponse as ae, type DynamicToolSpec as af, type GeminiClientFactory as ag, GeminiToolCallingModel as ah, type GeminiToolCallingModelOptions as ai, HttpOpencodeClient as aj, type HttpOpencodeClientOptions as ak, HttpStatusError as al, type LettaAgentCreateParams as am, type LettaClientFactory as an, type LettaClientLike as ao, LettaHistoryConverter as ap, type LettaMessage as aq, type LettaMessageCreateParams as ar, type LettaMessages as as, type LettaRequestOptions as at, type LettaResponse as au, type LettaResponseMessage as av, type OpenAIClientFactory as aw, OpenAIToolCallingModel as ax, type OpenAIToolCallingModelOptions as ay, type OpencodeClientLike as az, A2AGatewayAdapter as b, ACPClientAdapter as c, type ACPClientAdapterBaseOptions as d, type ACPClientAdapterOptions as e, type ACPClientStdioOptions as f, type ACPClientTcpOptions as g, AnthropicAdapter as h, type AnthropicAdapterOptions as i, CODEX_REASONING_SUMMARIES as j, CODEX_WEB_SEARCH_MODES as k, type ClaudePermissionMode as l, ClaudeSDKAdapter as m, type ClaudeSDKAdapterOptions as n, CodexAdapter as o, type CodexAdapterConfig as p, type CodexApprovalPolicy as q, type CodexReasoningEffort as r, type CodexReasoningSummary as s, type CodexSandboxMode as t, type CodexWebSearchMode as u, CopilotACPAdapter as v, type CopilotACPAdapterOptions as w, type CopilotACPStdioOptions as x, type CopilotACPTcpOptions as y, DEFAULT_OMP_ACP_COMMAND as z };
1513
+ export { type ToolCallingModel as $, A2AAdapter as A, type CopilotACPTcpOptions as B, CODEX_REASONING_EFFORTS as C, DEFAULT_COPILOT_ACP_COMMAND as D, DEFAULT_OMP_ACP_COMMAND as E, type GeminiAdapterOptions as F, GeminiAdapter as G, GenericAdapter as H, type GenericAdapterHandler as I, GoogleADKAdapter as J, type GoogleADKAdapterOptions as K, LangGraphAdapter as L, type LangGraphAdapterOptions as M, type LangGraphGraph as N, LettaAdapter as O, type LettaAdapterOptions as P, OmpACPAdapter as Q, type OmpACPAdapterOptions as R, OpenAIAdapter as S, type OpenAIAdapterOptions as T, OpencodeAdapter as U, type OpencodeAdapterConfig as V, type OpencodeApprovalMode as W, type OpencodeApprovalReply as X, type OpencodeQuestionMode as Y, ParlantAdapter as Z, type ParlantAdapterOptions as _, type A2AAdapterOptions as a, VercelAISDKAdapter as a0, type VercelAISDKAdapterOptions as a1, type A2AClientFactory as a2, type A2AClientLike as a3, type ACPPermissionAbandonReason as a4, type ACPPermissionEndReason as a5, type ACPPermissionRequest as a6, type AnthropicClientFactory as a7, AnthropicToolCallingModel as a8, type AnthropicToolCallingModelOptions as a9, type OpenAIToolCallingModelOptions as aA, type OpencodeClientLike as aB, type ParlantClientFactory as aC, type ParlantClientLike as aD, type ToolCall as aE, ToolCallingAdapter as aF, type ToolCallingAdapterOptions as aG, type ToolCallingModelRequest as aH, type ToolCallingResponse as aI, type ToolResult as aJ, type TurnStartParams as aK, VercelAISDKToolCallingModel as aL, type VercelAISDKToolCallingModelOptions as aM, runSingleToolRound as aN, type ClaudeSDKQuery as aa, type ClaudeSDKQueryParams as ab, CodexAppServerStdioClient as ac, type CodexClientLike as ad, CodexJsonRpcError as ae, type DynamicToolCallParams as af, type DynamicToolCallResponse as ag, type DynamicToolSpec as ah, type GeminiClientFactory as ai, GeminiToolCallingModel as aj, type GeminiToolCallingModelOptions as ak, HttpOpencodeClient as al, type HttpOpencodeClientOptions as am, HttpStatusError as an, type LettaAgentCreateParams as ao, type LettaClientFactory as ap, type LettaClientLike as aq, LettaHistoryConverter as ar, type LettaMessage as as, type LettaMessageCreateParams as at, type LettaMessages as au, type LettaRequestOptions as av, type LettaResponse as aw, type LettaResponseMessage as ax, type OpenAIClientFactory as ay, OpenAIToolCallingModel as az, A2AGatewayAdapter as b, ACPClientAdapter as c, type ACPClientAdapterBaseOptions as d, type ACPClientAdapterOptions as e, type ACPClientStdioOptions as f, type ACPClientTcpOptions as g, type ACPConfigRequest as h, type ACPConfigSelections as i, AnthropicAdapter as j, type AnthropicAdapterOptions as k, CODEX_REASONING_SUMMARIES as l, CODEX_WEB_SEARCH_MODES as m, type ClaudePermissionMode as n, ClaudeSDKAdapter as o, type ClaudeSDKAdapterOptions as p, CodexAdapter as q, type CodexAdapterConfig as r, type CodexApprovalPolicy as s, type CodexReasoningEffort as t, type CodexReasoningSummary as u, type CodexSandboxMode as v, type CodexWebSearchMode as w, CopilotACPAdapter as x, type CopilotACPAdapterOptions as y, type CopilotACPStdioOptions as z };
package/dist/adapters.cjs CHANGED
@@ -2599,6 +2599,7 @@ var ACPClientAdapter = class extends SimpleAdapter {
2599
2599
  resolvePermission;
2600
2600
  resolveSessionMode;
2601
2601
  resolveSessionModel;
2602
+ resolveSessionConfig;
2602
2603
  permissionTimeoutMs;
2603
2604
  turnTimeoutMs;
2604
2605
  logger;
@@ -2636,12 +2637,13 @@ var ACPClientAdapter = class extends SimpleAdapter {
2636
2637
  this.resolvePermission = options.resolvePermission;
2637
2638
  this.resolveSessionMode = options.resolveSessionMode;
2638
2639
  this.resolveSessionModel = options.resolveSessionModel;
2640
+ this.resolveSessionConfig = options.resolveSessionConfig;
2639
2641
  this.logger = resolveLogger(options.logger);
2640
2642
  this.permissionTimeoutMs = options.permissionTimeoutMs ?? DEFAULT_PERMISSION_TIMEOUT_MS;
2641
- if ((this.resolvePermission || this.resolveSessionMode || this.resolveSessionModel) && (!Number.isFinite(this.permissionTimeoutMs) || this.permissionTimeoutMs <= 0)) {
2643
+ if ((this.resolvePermission || this.resolveSessionMode || this.resolveSessionModel || this.resolveSessionConfig) && (!Number.isFinite(this.permissionTimeoutMs) || this.permissionTimeoutMs <= 0)) {
2642
2644
  throw new ValidationError(`permissionTimeoutMs must be a positive finite number, got ${options.permissionTimeoutMs}`);
2643
2645
  }
2644
- if (this.resolvePermission || this.resolveSessionMode || this.resolveSessionModel) {
2646
+ if (this.resolvePermission || this.resolveSessionMode || this.resolveSessionModel || this.resolveSessionConfig) {
2645
2647
  assertWithinSetTimeoutBound(
2646
2648
  `permissionTimeoutMs must be at most ${MAX_SETTIMEOUT_DELAY_MS}, got ${options.permissionTimeoutMs}`,
2647
2649
  this.permissionTimeoutMs
@@ -3052,7 +3054,10 @@ ${messageWithContext}`;
3052
3054
  this.activeSessions.add(restoredKey);
3053
3055
  this.bootstrappedSessions.add(restoredKey);
3054
3056
  await this.configureSessionMode(roomId, existingSessionId, restored.modes, connection);
3055
- await this.configureSessionModel(roomId, existingSessionId, restored.configOptions, connection);
3057
+ await this.configureSessionConfig(roomId, existingSessionId, restored.configOptions, connection);
3058
+ if (!this.resolveSessionConfig) {
3059
+ await this.configureSessionModel(roomId, existingSessionId, restored.configOptions, connection);
3060
+ }
3056
3061
  return existingSessionId;
3057
3062
  }
3058
3063
  }
@@ -3063,9 +3068,56 @@ ${messageWithContext}`;
3063
3068
  this.linkOrAbandon(roomId, created.sessionId, generation, connectionGeneration, client);
3064
3069
  this.activeSessions.add(this.sessionKey(connectionGeneration, created.sessionId));
3065
3070
  await this.configureSessionMode(roomId, created.sessionId, created.modes, connection);
3066
- await this.configureSessionModel(roomId, created.sessionId, created.configOptions, connection);
3071
+ await this.configureSessionConfig(roomId, created.sessionId, created.configOptions, connection);
3072
+ if (!this.resolveSessionConfig) {
3073
+ await this.configureSessionModel(roomId, created.sessionId, created.configOptions, connection);
3074
+ }
3067
3075
  return created.sessionId;
3068
3076
  }
3077
+ async configureSessionConfig(roomId, sessionId, configOptions, connection) {
3078
+ if (!this.resolveSessionConfig || !Array.isArray(configOptions) || configOptions.length === 0) {
3079
+ return;
3080
+ }
3081
+ const advertisedOptions = configOptions;
3082
+ const selections = await this.resolveManualSelection(
3083
+ "resolveSessionConfig",
3084
+ (signal) => this.resolveSessionConfig({ roomId, sessionId, configOptions: advertisedOptions }, signal),
3085
+ connection.signal
3086
+ );
3087
+ if (!selections) {
3088
+ return;
3089
+ }
3090
+ for (const option of advertisedOptions) {
3091
+ const selectedValue = selections[option.id];
3092
+ if (selectedValue === void 0 || selectedValue === option.currentValue || !isSessionConfigSelect(option)) {
3093
+ continue;
3094
+ }
3095
+ const availableValues = flattenConfigSelectOptions(option.options).map((entry) => entry.value);
3096
+ if (!availableValues.includes(selectedValue)) {
3097
+ this.safeWarn("resolveSessionConfig selected a value this session does not advertise", {
3098
+ sessionId,
3099
+ configId: option.id,
3100
+ selectedValue,
3101
+ availableValues
3102
+ });
3103
+ continue;
3104
+ }
3105
+ try {
3106
+ await withTimeout(
3107
+ connection.setSessionConfigOption({ sessionId, configId: option.id, value: selectedValue }),
3108
+ SET_SESSION_CONFIG_TIMEOUT_MS,
3109
+ `setSessionConfigOption did not respond within ${SET_SESSION_CONFIG_TIMEOUT_MS}ms`
3110
+ );
3111
+ } catch (error) {
3112
+ this.safeWarn("failed to switch session config option", {
3113
+ sessionId,
3114
+ configId: option.id,
3115
+ selectedValue,
3116
+ error: String(error)
3117
+ });
3118
+ }
3119
+ }
3120
+ }
3069
3121
  // The single gate an establishment must pass before it's allowed to claim
3070
3122
  // the room: it must still be the room's current generation (not
3071
3123
  // superseded by a teardown or a fresher establishment while this one was
@@ -1,4 +1,4 @@
1
- export { A as A2AAdapter, a as A2AAdapterOptions, a0 as A2AClientFactory, a1 as A2AClientLike, b as A2AGatewayAdapter, c as ACPClientAdapter, d as ACPClientAdapterBaseOptions, e as ACPClientAdapterOptions, f as ACPClientStdioOptions, g as ACPClientTcpOptions, a2 as ACPPermissionAbandonReason, a3 as ACPPermissionEndReason, a4 as ACPPermissionRequest, h as AnthropicAdapter, i as AnthropicAdapterOptions, a5 as AnthropicClientFactory, a6 as AnthropicToolCallingModel, a7 as AnthropicToolCallingModelOptions, C as CODEX_REASONING_EFFORTS, j as CODEX_REASONING_SUMMARIES, k as CODEX_WEB_SEARCH_MODES, l as ClaudePermissionMode, m as ClaudeSDKAdapter, n as ClaudeSDKAdapterOptions, a8 as ClaudeSDKQuery, a9 as ClaudeSDKQueryParams, o as CodexAdapter, p as CodexAdapterConfig, aa as CodexAppServerStdioClient, q as CodexApprovalPolicy, ab as CodexClientLike, ac as CodexJsonRpcError, r as CodexReasoningEffort, s as CodexReasoningSummary, t as CodexSandboxMode, u as CodexWebSearchMode, v as CopilotACPAdapter, w as CopilotACPAdapterOptions, x as CopilotACPStdioOptions, y as CopilotACPTcpOptions, D as DEFAULT_COPILOT_ACP_COMMAND, z as DEFAULT_OMP_ACP_COMMAND, ad as DynamicToolCallParams, ae as DynamicToolCallResponse, af as DynamicToolSpec, G as GeminiAdapter, B as GeminiAdapterOptions, ag as GeminiClientFactory, ah as GeminiToolCallingModel, ai as GeminiToolCallingModelOptions, E as GenericAdapter, F as GenericAdapterHandler, H as GoogleADKAdapter, I as GoogleADKAdapterOptions, aj as HttpOpencodeClient, ak as HttpOpencodeClientOptions, al as HttpStatusError, L as LangGraphAdapter, J as LangGraphAdapterOptions, K as LangGraphGraph, M as LettaAdapter, N as LettaAdapterOptions, am as LettaAgentCreateParams, an as LettaClientFactory, ao as LettaClientLike, ap as LettaHistoryConverter, aq as LettaMessage, ar as LettaMessageCreateParams, as as LettaMessages, at as LettaRequestOptions, au as LettaResponse, av as LettaResponseMessage, O as OmpACPAdapter, P as OmpACPAdapterOptions, Q as OpenAIAdapter, R as OpenAIAdapterOptions, aw as OpenAIClientFactory, ax as OpenAIToolCallingModel, ay as OpenAIToolCallingModelOptions, S as OpencodeAdapter, T as OpencodeAdapterConfig, U as OpencodeApprovalMode, V as OpencodeApprovalReply, az as OpencodeClientLike, W as OpencodeQuestionMode, X as ParlantAdapter, Y as ParlantAdapterOptions, aA as ParlantClientFactory, aB as ParlantClientLike, aC as ToolCall, aD as ToolCallingAdapter, aE as ToolCallingAdapterOptions, Z as ToolCallingModel, aF as ToolCallingModelRequest, aG as ToolCallingResponse, aH as ToolResult, aI as TurnStartParams, _ as VercelAISDKAdapter, $ as VercelAISDKAdapterOptions, aJ as VercelAISDKToolCallingModel, aK as VercelAISDKToolCallingModelOptions, aL as runSingleToolRound } from './CopilotACPAdapter-D4VWg8lJ.cjs';
1
+ export { A as A2AAdapter, a as A2AAdapterOptions, a2 as A2AClientFactory, a3 as A2AClientLike, b as A2AGatewayAdapter, c as ACPClientAdapter, d as ACPClientAdapterBaseOptions, e as ACPClientAdapterOptions, f as ACPClientStdioOptions, g as ACPClientTcpOptions, h as ACPConfigRequest, i as ACPConfigSelections, a4 as ACPPermissionAbandonReason, a5 as ACPPermissionEndReason, a6 as ACPPermissionRequest, j as AnthropicAdapter, k as AnthropicAdapterOptions, a7 as AnthropicClientFactory, a8 as AnthropicToolCallingModel, a9 as AnthropicToolCallingModelOptions, C as CODEX_REASONING_EFFORTS, l as CODEX_REASONING_SUMMARIES, m as CODEX_WEB_SEARCH_MODES, n as ClaudePermissionMode, o as ClaudeSDKAdapter, p as ClaudeSDKAdapterOptions, aa as ClaudeSDKQuery, ab as ClaudeSDKQueryParams, q as CodexAdapter, r as CodexAdapterConfig, ac as CodexAppServerStdioClient, s as CodexApprovalPolicy, ad as CodexClientLike, ae as CodexJsonRpcError, t as CodexReasoningEffort, u as CodexReasoningSummary, v as CodexSandboxMode, w as CodexWebSearchMode, x as CopilotACPAdapter, y as CopilotACPAdapterOptions, z as CopilotACPStdioOptions, B as CopilotACPTcpOptions, D as DEFAULT_COPILOT_ACP_COMMAND, E as DEFAULT_OMP_ACP_COMMAND, af as DynamicToolCallParams, ag as DynamicToolCallResponse, ah as DynamicToolSpec, G as GeminiAdapter, F as GeminiAdapterOptions, ai as GeminiClientFactory, aj as GeminiToolCallingModel, ak as GeminiToolCallingModelOptions, H as GenericAdapter, I as GenericAdapterHandler, J as GoogleADKAdapter, K as GoogleADKAdapterOptions, al as HttpOpencodeClient, am as HttpOpencodeClientOptions, an as HttpStatusError, L as LangGraphAdapter, M as LangGraphAdapterOptions, N as LangGraphGraph, O as LettaAdapter, P as LettaAdapterOptions, ao as LettaAgentCreateParams, ap as LettaClientFactory, aq as LettaClientLike, ar as LettaHistoryConverter, as as LettaMessage, at as LettaMessageCreateParams, au as LettaMessages, av as LettaRequestOptions, aw as LettaResponse, ax as LettaResponseMessage, Q as OmpACPAdapter, R as OmpACPAdapterOptions, S as OpenAIAdapter, T as OpenAIAdapterOptions, ay as OpenAIClientFactory, az as OpenAIToolCallingModel, aA as OpenAIToolCallingModelOptions, U as OpencodeAdapter, V as OpencodeAdapterConfig, W as OpencodeApprovalMode, X as OpencodeApprovalReply, aB as OpencodeClientLike, Y as OpencodeQuestionMode, Z as ParlantAdapter, _ as ParlantAdapterOptions, aC as ParlantClientFactory, aD as ParlantClientLike, aE as ToolCall, aF as ToolCallingAdapter, aG as ToolCallingAdapterOptions, $ as ToolCallingModel, aH as ToolCallingModelRequest, aI as ToolCallingResponse, aJ as ToolResult, aK as TurnStartParams, a0 as VercelAISDKAdapter, a1 as VercelAISDKAdapterOptions, aL as VercelAISDKToolCallingModel, aM as VercelAISDKToolCallingModelOptions, aN as runSingleToolRound } from './CopilotACPAdapter-Clid9xGR.cjs';
2
2
  import * as _agentclientprotocol_sdk from '@agentclientprotocol/sdk';
3
3
  import { SessionMode, AgentSideConnection, SessionModeState, McpServer, Agent, InitializeResponse, Implementation, Stream, InitializeRequest, LoadSessionRequest, LoadSessionResponse, ListSessionsRequest, ListSessionsResponse, ForkSessionRequest, ForkSessionResponse, ResumeSessionRequest, ResumeSessionResponse, SetSessionModeRequest, SetSessionModeResponse, SetSessionConfigOptionRequest, SetSessionConfigOptionResponse, AuthenticateRequest, AuthenticateResponse, PromptRequest, PromptResponse } from '@agentclientprotocol/sdk';
4
4
  import { A as ACPServerSessionState } from './acp-server-CJhclo6P.cjs';
@@ -1,4 +1,4 @@
1
- export { A as A2AAdapter, a as A2AAdapterOptions, a0 as A2AClientFactory, a1 as A2AClientLike, b as A2AGatewayAdapter, c as ACPClientAdapter, d as ACPClientAdapterBaseOptions, e as ACPClientAdapterOptions, f as ACPClientStdioOptions, g as ACPClientTcpOptions, a2 as ACPPermissionAbandonReason, a3 as ACPPermissionEndReason, a4 as ACPPermissionRequest, h as AnthropicAdapter, i as AnthropicAdapterOptions, a5 as AnthropicClientFactory, a6 as AnthropicToolCallingModel, a7 as AnthropicToolCallingModelOptions, C as CODEX_REASONING_EFFORTS, j as CODEX_REASONING_SUMMARIES, k as CODEX_WEB_SEARCH_MODES, l as ClaudePermissionMode, m as ClaudeSDKAdapter, n as ClaudeSDKAdapterOptions, a8 as ClaudeSDKQuery, a9 as ClaudeSDKQueryParams, o as CodexAdapter, p as CodexAdapterConfig, aa as CodexAppServerStdioClient, q as CodexApprovalPolicy, ab as CodexClientLike, ac as CodexJsonRpcError, r as CodexReasoningEffort, s as CodexReasoningSummary, t as CodexSandboxMode, u as CodexWebSearchMode, v as CopilotACPAdapter, w as CopilotACPAdapterOptions, x as CopilotACPStdioOptions, y as CopilotACPTcpOptions, D as DEFAULT_COPILOT_ACP_COMMAND, z as DEFAULT_OMP_ACP_COMMAND, ad as DynamicToolCallParams, ae as DynamicToolCallResponse, af as DynamicToolSpec, G as GeminiAdapter, B as GeminiAdapterOptions, ag as GeminiClientFactory, ah as GeminiToolCallingModel, ai as GeminiToolCallingModelOptions, E as GenericAdapter, F as GenericAdapterHandler, H as GoogleADKAdapter, I as GoogleADKAdapterOptions, aj as HttpOpencodeClient, ak as HttpOpencodeClientOptions, al as HttpStatusError, L as LangGraphAdapter, J as LangGraphAdapterOptions, K as LangGraphGraph, M as LettaAdapter, N as LettaAdapterOptions, am as LettaAgentCreateParams, an as LettaClientFactory, ao as LettaClientLike, ap as LettaHistoryConverter, aq as LettaMessage, ar as LettaMessageCreateParams, as as LettaMessages, at as LettaRequestOptions, au as LettaResponse, av as LettaResponseMessage, O as OmpACPAdapter, P as OmpACPAdapterOptions, Q as OpenAIAdapter, R as OpenAIAdapterOptions, aw as OpenAIClientFactory, ax as OpenAIToolCallingModel, ay as OpenAIToolCallingModelOptions, S as OpencodeAdapter, T as OpencodeAdapterConfig, U as OpencodeApprovalMode, V as OpencodeApprovalReply, az as OpencodeClientLike, W as OpencodeQuestionMode, X as ParlantAdapter, Y as ParlantAdapterOptions, aA as ParlantClientFactory, aB as ParlantClientLike, aC as ToolCall, aD as ToolCallingAdapter, aE as ToolCallingAdapterOptions, Z as ToolCallingModel, aF as ToolCallingModelRequest, aG as ToolCallingResponse, aH as ToolResult, aI as TurnStartParams, _ as VercelAISDKAdapter, $ as VercelAISDKAdapterOptions, aJ as VercelAISDKToolCallingModel, aK as VercelAISDKToolCallingModelOptions, aL as runSingleToolRound } from './CopilotACPAdapter-BCpbHFB0.js';
1
+ export { A as A2AAdapter, a as A2AAdapterOptions, a2 as A2AClientFactory, a3 as A2AClientLike, b as A2AGatewayAdapter, c as ACPClientAdapter, d as ACPClientAdapterBaseOptions, e as ACPClientAdapterOptions, f as ACPClientStdioOptions, g as ACPClientTcpOptions, h as ACPConfigRequest, i as ACPConfigSelections, a4 as ACPPermissionAbandonReason, a5 as ACPPermissionEndReason, a6 as ACPPermissionRequest, j as AnthropicAdapter, k as AnthropicAdapterOptions, a7 as AnthropicClientFactory, a8 as AnthropicToolCallingModel, a9 as AnthropicToolCallingModelOptions, C as CODEX_REASONING_EFFORTS, l as CODEX_REASONING_SUMMARIES, m as CODEX_WEB_SEARCH_MODES, n as ClaudePermissionMode, o as ClaudeSDKAdapter, p as ClaudeSDKAdapterOptions, aa as ClaudeSDKQuery, ab as ClaudeSDKQueryParams, q as CodexAdapter, r as CodexAdapterConfig, ac as CodexAppServerStdioClient, s as CodexApprovalPolicy, ad as CodexClientLike, ae as CodexJsonRpcError, t as CodexReasoningEffort, u as CodexReasoningSummary, v as CodexSandboxMode, w as CodexWebSearchMode, x as CopilotACPAdapter, y as CopilotACPAdapterOptions, z as CopilotACPStdioOptions, B as CopilotACPTcpOptions, D as DEFAULT_COPILOT_ACP_COMMAND, E as DEFAULT_OMP_ACP_COMMAND, af as DynamicToolCallParams, ag as DynamicToolCallResponse, ah as DynamicToolSpec, G as GeminiAdapter, F as GeminiAdapterOptions, ai as GeminiClientFactory, aj as GeminiToolCallingModel, ak as GeminiToolCallingModelOptions, H as GenericAdapter, I as GenericAdapterHandler, J as GoogleADKAdapter, K as GoogleADKAdapterOptions, al as HttpOpencodeClient, am as HttpOpencodeClientOptions, an as HttpStatusError, L as LangGraphAdapter, M as LangGraphAdapterOptions, N as LangGraphGraph, O as LettaAdapter, P as LettaAdapterOptions, ao as LettaAgentCreateParams, ap as LettaClientFactory, aq as LettaClientLike, ar as LettaHistoryConverter, as as LettaMessage, at as LettaMessageCreateParams, au as LettaMessages, av as LettaRequestOptions, aw as LettaResponse, ax as LettaResponseMessage, Q as OmpACPAdapter, R as OmpACPAdapterOptions, S as OpenAIAdapter, T as OpenAIAdapterOptions, ay as OpenAIClientFactory, az as OpenAIToolCallingModel, aA as OpenAIToolCallingModelOptions, U as OpencodeAdapter, V as OpencodeAdapterConfig, W as OpencodeApprovalMode, X as OpencodeApprovalReply, aB as OpencodeClientLike, Y as OpencodeQuestionMode, Z as ParlantAdapter, _ as ParlantAdapterOptions, aC as ParlantClientFactory, aD as ParlantClientLike, aE as ToolCall, aF as ToolCallingAdapter, aG as ToolCallingAdapterOptions, $ as ToolCallingModel, aH as ToolCallingModelRequest, aI as ToolCallingResponse, aJ as ToolResult, aK as TurnStartParams, a0 as VercelAISDKAdapter, a1 as VercelAISDKAdapterOptions, aL as VercelAISDKToolCallingModel, aM as VercelAISDKToolCallingModelOptions, aN as runSingleToolRound } from './CopilotACPAdapter-B_AVyAl6.js';
2
2
  import * as _agentclientprotocol_sdk from '@agentclientprotocol/sdk';
3
3
  import { SessionMode, AgentSideConnection, SessionModeState, McpServer, Agent, InitializeResponse, Implementation, Stream, InitializeRequest, LoadSessionRequest, LoadSessionResponse, ListSessionsRequest, ListSessionsResponse, ForkSessionRequest, ForkSessionResponse, ResumeSessionRequest, ResumeSessionResponse, SetSessionModeRequest, SetSessionModeResponse, SetSessionConfigOptionRequest, SetSessionConfigOptionResponse, AuthenticateRequest, AuthenticateResponse, PromptRequest, PromptResponse } from '@agentclientprotocol/sdk';
4
4
  import { A as ACPServerSessionState } from './acp-server-BlcYMxKt.js';
package/dist/adapters.js CHANGED
@@ -31,7 +31,7 @@ import {
31
31
  VercelAISDKAdapter,
32
32
  VercelAISDKToolCallingModel,
33
33
  runSingleToolRound
34
- } from "./chunk-YF7K4UB3.js";
34
+ } from "./chunk-UFO6XMCV.js";
35
35
  import "./chunk-UL3Y5C4J.js";
36
36
  import "./chunk-JDW5WSGF.js";
37
37
  import {
@@ -6141,6 +6141,7 @@ var ACPClientAdapter = class extends SimpleAdapter {
6141
6141
  resolvePermission;
6142
6142
  resolveSessionMode;
6143
6143
  resolveSessionModel;
6144
+ resolveSessionConfig;
6144
6145
  permissionTimeoutMs;
6145
6146
  turnTimeoutMs;
6146
6147
  logger;
@@ -6178,12 +6179,13 @@ var ACPClientAdapter = class extends SimpleAdapter {
6178
6179
  this.resolvePermission = options.resolvePermission;
6179
6180
  this.resolveSessionMode = options.resolveSessionMode;
6180
6181
  this.resolveSessionModel = options.resolveSessionModel;
6182
+ this.resolveSessionConfig = options.resolveSessionConfig;
6181
6183
  this.logger = resolveLogger(options.logger);
6182
6184
  this.permissionTimeoutMs = options.permissionTimeoutMs ?? DEFAULT_PERMISSION_TIMEOUT_MS;
6183
- if ((this.resolvePermission || this.resolveSessionMode || this.resolveSessionModel) && (!Number.isFinite(this.permissionTimeoutMs) || this.permissionTimeoutMs <= 0)) {
6185
+ if ((this.resolvePermission || this.resolveSessionMode || this.resolveSessionModel || this.resolveSessionConfig) && (!Number.isFinite(this.permissionTimeoutMs) || this.permissionTimeoutMs <= 0)) {
6184
6186
  throw new ValidationError(`permissionTimeoutMs must be a positive finite number, got ${options.permissionTimeoutMs}`);
6185
6187
  }
6186
- if (this.resolvePermission || this.resolveSessionMode || this.resolveSessionModel) {
6188
+ if (this.resolvePermission || this.resolveSessionMode || this.resolveSessionModel || this.resolveSessionConfig) {
6187
6189
  assertWithinSetTimeoutBound(
6188
6190
  `permissionTimeoutMs must be at most ${MAX_SETTIMEOUT_DELAY_MS}, got ${options.permissionTimeoutMs}`,
6189
6191
  this.permissionTimeoutMs
@@ -6594,7 +6596,10 @@ ${messageWithContext}`;
6594
6596
  this.activeSessions.add(restoredKey);
6595
6597
  this.bootstrappedSessions.add(restoredKey);
6596
6598
  await this.configureSessionMode(roomId, existingSessionId, restored.modes, connection);
6597
- await this.configureSessionModel(roomId, existingSessionId, restored.configOptions, connection);
6599
+ await this.configureSessionConfig(roomId, existingSessionId, restored.configOptions, connection);
6600
+ if (!this.resolveSessionConfig) {
6601
+ await this.configureSessionModel(roomId, existingSessionId, restored.configOptions, connection);
6602
+ }
6598
6603
  return existingSessionId;
6599
6604
  }
6600
6605
  }
@@ -6605,9 +6610,56 @@ ${messageWithContext}`;
6605
6610
  this.linkOrAbandon(roomId, created.sessionId, generation, connectionGeneration, client);
6606
6611
  this.activeSessions.add(this.sessionKey(connectionGeneration, created.sessionId));
6607
6612
  await this.configureSessionMode(roomId, created.sessionId, created.modes, connection);
6608
- await this.configureSessionModel(roomId, created.sessionId, created.configOptions, connection);
6613
+ await this.configureSessionConfig(roomId, created.sessionId, created.configOptions, connection);
6614
+ if (!this.resolveSessionConfig) {
6615
+ await this.configureSessionModel(roomId, created.sessionId, created.configOptions, connection);
6616
+ }
6609
6617
  return created.sessionId;
6610
6618
  }
6619
+ async configureSessionConfig(roomId, sessionId, configOptions, connection) {
6620
+ if (!this.resolveSessionConfig || !Array.isArray(configOptions) || configOptions.length === 0) {
6621
+ return;
6622
+ }
6623
+ const advertisedOptions = configOptions;
6624
+ const selections = await this.resolveManualSelection(
6625
+ "resolveSessionConfig",
6626
+ (signal) => this.resolveSessionConfig({ roomId, sessionId, configOptions: advertisedOptions }, signal),
6627
+ connection.signal
6628
+ );
6629
+ if (!selections) {
6630
+ return;
6631
+ }
6632
+ for (const option of advertisedOptions) {
6633
+ const selectedValue = selections[option.id];
6634
+ if (selectedValue === void 0 || selectedValue === option.currentValue || !isSessionConfigSelect(option)) {
6635
+ continue;
6636
+ }
6637
+ const availableValues = flattenConfigSelectOptions(option.options).map((entry) => entry.value);
6638
+ if (!availableValues.includes(selectedValue)) {
6639
+ this.safeWarn("resolveSessionConfig selected a value this session does not advertise", {
6640
+ sessionId,
6641
+ configId: option.id,
6642
+ selectedValue,
6643
+ availableValues
6644
+ });
6645
+ continue;
6646
+ }
6647
+ try {
6648
+ await withTimeout(
6649
+ connection.setSessionConfigOption({ sessionId, configId: option.id, value: selectedValue }),
6650
+ SET_SESSION_CONFIG_TIMEOUT_MS,
6651
+ `setSessionConfigOption did not respond within ${SET_SESSION_CONFIG_TIMEOUT_MS}ms`
6652
+ );
6653
+ } catch (error) {
6654
+ this.safeWarn("failed to switch session config option", {
6655
+ sessionId,
6656
+ configId: option.id,
6657
+ selectedValue,
6658
+ error: String(error)
6659
+ });
6660
+ }
6661
+ }
6662
+ }
6611
6663
  // The single gate an establishment must pass before it's allowed to claim
6612
6664
  // the room: it must still be the room's current generation (not
6613
6665
  // superseded by a teardown or a fresher establishment while this one was
package/dist/index.cjs CHANGED
@@ -17414,6 +17414,7 @@ var ACPClientAdapter = class extends SimpleAdapter {
17414
17414
  resolvePermission;
17415
17415
  resolveSessionMode;
17416
17416
  resolveSessionModel;
17417
+ resolveSessionConfig;
17417
17418
  permissionTimeoutMs;
17418
17419
  turnTimeoutMs;
17419
17420
  logger;
@@ -17451,12 +17452,13 @@ var ACPClientAdapter = class extends SimpleAdapter {
17451
17452
  this.resolvePermission = options.resolvePermission;
17452
17453
  this.resolveSessionMode = options.resolveSessionMode;
17453
17454
  this.resolveSessionModel = options.resolveSessionModel;
17455
+ this.resolveSessionConfig = options.resolveSessionConfig;
17454
17456
  this.logger = resolveLogger(options.logger);
17455
17457
  this.permissionTimeoutMs = options.permissionTimeoutMs ?? DEFAULT_PERMISSION_TIMEOUT_MS;
17456
- if ((this.resolvePermission || this.resolveSessionMode || this.resolveSessionModel) && (!Number.isFinite(this.permissionTimeoutMs) || this.permissionTimeoutMs <= 0)) {
17458
+ if ((this.resolvePermission || this.resolveSessionMode || this.resolveSessionModel || this.resolveSessionConfig) && (!Number.isFinite(this.permissionTimeoutMs) || this.permissionTimeoutMs <= 0)) {
17457
17459
  throw new ValidationError(`permissionTimeoutMs must be a positive finite number, got ${options.permissionTimeoutMs}`);
17458
17460
  }
17459
- if (this.resolvePermission || this.resolveSessionMode || this.resolveSessionModel) {
17461
+ if (this.resolvePermission || this.resolveSessionMode || this.resolveSessionModel || this.resolveSessionConfig) {
17460
17462
  assertWithinSetTimeoutBound(
17461
17463
  `permissionTimeoutMs must be at most ${MAX_SETTIMEOUT_DELAY_MS}, got ${options.permissionTimeoutMs}`,
17462
17464
  this.permissionTimeoutMs
@@ -17867,7 +17869,10 @@ ${messageWithContext}`;
17867
17869
  this.activeSessions.add(restoredKey);
17868
17870
  this.bootstrappedSessions.add(restoredKey);
17869
17871
  await this.configureSessionMode(roomId, existingSessionId, restored.modes, connection);
17870
- await this.configureSessionModel(roomId, existingSessionId, restored.configOptions, connection);
17872
+ await this.configureSessionConfig(roomId, existingSessionId, restored.configOptions, connection);
17873
+ if (!this.resolveSessionConfig) {
17874
+ await this.configureSessionModel(roomId, existingSessionId, restored.configOptions, connection);
17875
+ }
17871
17876
  return existingSessionId;
17872
17877
  }
17873
17878
  }
@@ -17878,9 +17883,56 @@ ${messageWithContext}`;
17878
17883
  this.linkOrAbandon(roomId, created.sessionId, generation, connectionGeneration, client);
17879
17884
  this.activeSessions.add(this.sessionKey(connectionGeneration, created.sessionId));
17880
17885
  await this.configureSessionMode(roomId, created.sessionId, created.modes, connection);
17881
- await this.configureSessionModel(roomId, created.sessionId, created.configOptions, connection);
17886
+ await this.configureSessionConfig(roomId, created.sessionId, created.configOptions, connection);
17887
+ if (!this.resolveSessionConfig) {
17888
+ await this.configureSessionModel(roomId, created.sessionId, created.configOptions, connection);
17889
+ }
17882
17890
  return created.sessionId;
17883
17891
  }
17892
+ async configureSessionConfig(roomId, sessionId, configOptions, connection) {
17893
+ if (!this.resolveSessionConfig || !Array.isArray(configOptions) || configOptions.length === 0) {
17894
+ return;
17895
+ }
17896
+ const advertisedOptions = configOptions;
17897
+ const selections = await this.resolveManualSelection(
17898
+ "resolveSessionConfig",
17899
+ (signal) => this.resolveSessionConfig({ roomId, sessionId, configOptions: advertisedOptions }, signal),
17900
+ connection.signal
17901
+ );
17902
+ if (!selections) {
17903
+ return;
17904
+ }
17905
+ for (const option of advertisedOptions) {
17906
+ const selectedValue = selections[option.id];
17907
+ if (selectedValue === void 0 || selectedValue === option.currentValue || !isSessionConfigSelect(option)) {
17908
+ continue;
17909
+ }
17910
+ const availableValues = flattenConfigSelectOptions(option.options).map((entry) => entry.value);
17911
+ if (!availableValues.includes(selectedValue)) {
17912
+ this.safeWarn("resolveSessionConfig selected a value this session does not advertise", {
17913
+ sessionId,
17914
+ configId: option.id,
17915
+ selectedValue,
17916
+ availableValues
17917
+ });
17918
+ continue;
17919
+ }
17920
+ try {
17921
+ await withTimeout(
17922
+ connection.setSessionConfigOption({ sessionId, configId: option.id, value: selectedValue }),
17923
+ SET_SESSION_CONFIG_TIMEOUT_MS,
17924
+ `setSessionConfigOption did not respond within ${SET_SESSION_CONFIG_TIMEOUT_MS}ms`
17925
+ );
17926
+ } catch (error) {
17927
+ this.safeWarn("failed to switch session config option", {
17928
+ sessionId,
17929
+ configId: option.id,
17930
+ selectedValue,
17931
+ error: String(error)
17932
+ });
17933
+ }
17934
+ }
17935
+ }
17884
17936
  // The single gate an establishment must pass before it's allowed to claim
17885
17937
  // the room: it must still be the room's current generation (not
17886
17938
  // superseded by a teardown or a fresher establishment while this one was
package/dist/index.d.cts CHANGED
@@ -9,7 +9,7 @@ import { P as PlatformMessage } from './types-DtcOLALn.cjs';
9
9
  export { A as AgentConfig, a as AgentInput, C as ContactEvent, b as ContactEventCallback, c as ContactEventConfig, d as ContactEventStrategy, e as ConversationContext, H as HistoryProvider, M as MessageHandler, f as PlatformEvent, R as ReconnectedEvent, S as SessionConfig } from './types-DtcOLALn.cjs';
10
10
  export { W as WebSocketConflictPolicy, a as WebSocketDisconnectError, b as WebSocketDisconnectReason } from './disconnectReason-Cctmg1SN.cjs';
11
11
  export { C as CustomToolDef } from './customTools-Bfecd0mJ.cjs';
12
- export { A as A2AAdapter, a as A2AAdapterOptions, b as A2AGatewayAdapter, c as ACPClientAdapter, d as ACPClientAdapterBaseOptions, e as ACPClientAdapterOptions, f as ACPClientStdioOptions, g as ACPClientTcpOptions, h as AnthropicAdapter, i as AnthropicAdapterOptions, C as CODEX_REASONING_EFFORTS, j as CODEX_REASONING_SUMMARIES, k as CODEX_WEB_SEARCH_MODES, l as ClaudePermissionMode, m as ClaudeSDKAdapter, n as ClaudeSDKAdapterOptions, o as CodexAdapter, p as CodexAdapterConfig, q as CodexApprovalPolicy, r as CodexReasoningEffort, s as CodexReasoningSummary, t as CodexSandboxMode, u as CodexWebSearchMode, v as CopilotACPAdapter, w as CopilotACPAdapterOptions, x as CopilotACPStdioOptions, y as CopilotACPTcpOptions, D as DEFAULT_COPILOT_ACP_COMMAND, z as DEFAULT_OMP_ACP_COMMAND, G as GeminiAdapter, B as GeminiAdapterOptions, E as GenericAdapter, F as GenericAdapterHandler, H as GoogleADKAdapter, I as GoogleADKAdapterOptions, L as LangGraphAdapter, J as LangGraphAdapterOptions, K as LangGraphGraph, M as LettaAdapter, N as LettaAdapterOptions, O as OmpACPAdapter, P as OmpACPAdapterOptions, Q as OpenAIAdapter, R as OpenAIAdapterOptions, S as OpencodeAdapter, T as OpencodeAdapterConfig, U as OpencodeApprovalMode, V as OpencodeApprovalReply, W as OpencodeQuestionMode, X as ParlantAdapter, Y as ParlantAdapterOptions, Z as ToolCallingModel, _ as VercelAISDKAdapter, $ as VercelAISDKAdapterOptions } from './CopilotACPAdapter-D4VWg8lJ.cjs';
12
+ export { A as A2AAdapter, a as A2AAdapterOptions, b as A2AGatewayAdapter, c as ACPClientAdapter, d as ACPClientAdapterBaseOptions, e as ACPClientAdapterOptions, f as ACPClientStdioOptions, g as ACPClientTcpOptions, h as ACPConfigRequest, i as ACPConfigSelections, j as AnthropicAdapter, k as AnthropicAdapterOptions, C as CODEX_REASONING_EFFORTS, l as CODEX_REASONING_SUMMARIES, m as CODEX_WEB_SEARCH_MODES, n as ClaudePermissionMode, o as ClaudeSDKAdapter, p as ClaudeSDKAdapterOptions, q as CodexAdapter, r as CodexAdapterConfig, s as CodexApprovalPolicy, t as CodexReasoningEffort, u as CodexReasoningSummary, v as CodexSandboxMode, w as CodexWebSearchMode, x as CopilotACPAdapter, y as CopilotACPAdapterOptions, z as CopilotACPStdioOptions, B as CopilotACPTcpOptions, D as DEFAULT_COPILOT_ACP_COMMAND, E as DEFAULT_OMP_ACP_COMMAND, G as GeminiAdapter, F as GeminiAdapterOptions, H as GenericAdapter, I as GenericAdapterHandler, J as GoogleADKAdapter, K as GoogleADKAdapterOptions, L as LangGraphAdapter, M as LangGraphAdapterOptions, N as LangGraphGraph, O as LettaAdapter, P as LettaAdapterOptions, Q as OmpACPAdapter, R as OmpACPAdapterOptions, S as OpenAIAdapter, T as OpenAIAdapterOptions, U as OpencodeAdapter, V as OpencodeAdapterConfig, W as OpencodeApprovalMode, X as OpencodeApprovalReply, Y as OpencodeQuestionMode, Z as ParlantAdapter, _ as ParlantAdapterOptions, $ as ToolCallingModel, a0 as VercelAISDKAdapter, a1 as VercelAISDKAdapterOptions } from './CopilotACPAdapter-Clid9xGR.cjs';
13
13
  export { S as SimpleAdapter } from './simpleAdapter-D75rcz9n.cjs';
14
14
  export { A as A2AAuth, a as A2AGatewayAdapterOptions } from './acp-client-D-I_5lK-.cjs';
15
15
  export { AgentFailure } from '@band-ai/band-sdk-core';
package/dist/index.d.ts CHANGED
@@ -9,7 +9,7 @@ import { P as PlatformMessage } from './types-CKU1N0SK.js';
9
9
  export { A as AgentConfig, a as AgentInput, C as ContactEvent, b as ContactEventCallback, c as ContactEventConfig, d as ContactEventStrategy, e as ConversationContext, H as HistoryProvider, M as MessageHandler, f as PlatformEvent, R as ReconnectedEvent, S as SessionConfig } from './types-CKU1N0SK.js';
10
10
  export { W as WebSocketConflictPolicy, a as WebSocketDisconnectError, b as WebSocketDisconnectReason } from './disconnectReason-Cctmg1SN.js';
11
11
  export { C as CustomToolDef } from './customTools-Bfecd0mJ.js';
12
- export { A as A2AAdapter, a as A2AAdapterOptions, b as A2AGatewayAdapter, c as ACPClientAdapter, d as ACPClientAdapterBaseOptions, e as ACPClientAdapterOptions, f as ACPClientStdioOptions, g as ACPClientTcpOptions, h as AnthropicAdapter, i as AnthropicAdapterOptions, C as CODEX_REASONING_EFFORTS, j as CODEX_REASONING_SUMMARIES, k as CODEX_WEB_SEARCH_MODES, l as ClaudePermissionMode, m as ClaudeSDKAdapter, n as ClaudeSDKAdapterOptions, o as CodexAdapter, p as CodexAdapterConfig, q as CodexApprovalPolicy, r as CodexReasoningEffort, s as CodexReasoningSummary, t as CodexSandboxMode, u as CodexWebSearchMode, v as CopilotACPAdapter, w as CopilotACPAdapterOptions, x as CopilotACPStdioOptions, y as CopilotACPTcpOptions, D as DEFAULT_COPILOT_ACP_COMMAND, z as DEFAULT_OMP_ACP_COMMAND, G as GeminiAdapter, B as GeminiAdapterOptions, E as GenericAdapter, F as GenericAdapterHandler, H as GoogleADKAdapter, I as GoogleADKAdapterOptions, L as LangGraphAdapter, J as LangGraphAdapterOptions, K as LangGraphGraph, M as LettaAdapter, N as LettaAdapterOptions, O as OmpACPAdapter, P as OmpACPAdapterOptions, Q as OpenAIAdapter, R as OpenAIAdapterOptions, S as OpencodeAdapter, T as OpencodeAdapterConfig, U as OpencodeApprovalMode, V as OpencodeApprovalReply, W as OpencodeQuestionMode, X as ParlantAdapter, Y as ParlantAdapterOptions, Z as ToolCallingModel, _ as VercelAISDKAdapter, $ as VercelAISDKAdapterOptions } from './CopilotACPAdapter-BCpbHFB0.js';
12
+ export { A as A2AAdapter, a as A2AAdapterOptions, b as A2AGatewayAdapter, c as ACPClientAdapter, d as ACPClientAdapterBaseOptions, e as ACPClientAdapterOptions, f as ACPClientStdioOptions, g as ACPClientTcpOptions, h as ACPConfigRequest, i as ACPConfigSelections, j as AnthropicAdapter, k as AnthropicAdapterOptions, C as CODEX_REASONING_EFFORTS, l as CODEX_REASONING_SUMMARIES, m as CODEX_WEB_SEARCH_MODES, n as ClaudePermissionMode, o as ClaudeSDKAdapter, p as ClaudeSDKAdapterOptions, q as CodexAdapter, r as CodexAdapterConfig, s as CodexApprovalPolicy, t as CodexReasoningEffort, u as CodexReasoningSummary, v as CodexSandboxMode, w as CodexWebSearchMode, x as CopilotACPAdapter, y as CopilotACPAdapterOptions, z as CopilotACPStdioOptions, B as CopilotACPTcpOptions, D as DEFAULT_COPILOT_ACP_COMMAND, E as DEFAULT_OMP_ACP_COMMAND, G as GeminiAdapter, F as GeminiAdapterOptions, H as GenericAdapter, I as GenericAdapterHandler, J as GoogleADKAdapter, K as GoogleADKAdapterOptions, L as LangGraphAdapter, M as LangGraphAdapterOptions, N as LangGraphGraph, O as LettaAdapter, P as LettaAdapterOptions, Q as OmpACPAdapter, R as OmpACPAdapterOptions, S as OpenAIAdapter, T as OpenAIAdapterOptions, U as OpencodeAdapter, V as OpencodeAdapterConfig, W as OpencodeApprovalMode, X as OpencodeApprovalReply, Y as OpencodeQuestionMode, Z as ParlantAdapter, _ as ParlantAdapterOptions, $ as ToolCallingModel, a0 as VercelAISDKAdapter, a1 as VercelAISDKAdapterOptions } from './CopilotACPAdapter-B_AVyAl6.js';
13
13
  export { S as SimpleAdapter } from './simpleAdapter-eLvsAQNo.js';
14
14
  export { A as A2AAuth, a as A2AGatewayAdapterOptions } from './acp-client-DUXyczlF.js';
15
15
  export { AgentFailure } from '@band-ai/band-sdk-core';
package/dist/index.js CHANGED
@@ -18,7 +18,7 @@ import {
18
18
  OpenAIAdapter,
19
19
  OpencodeAdapter,
20
20
  VercelAISDKAdapter
21
- } from "./chunk-YF7K4UB3.js";
21
+ } from "./chunk-UFO6XMCV.js";
22
22
  import "./chunk-UL3Y5C4J.js";
23
23
  import "./chunk-JDW5WSGF.js";
24
24
  import {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@band-ai/sdk",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Band TypeScript SDK core runtime",
5
5
  "license": "MIT",
6
6
  "repository": {