@automatalabs/acp-agents 0.11.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/acp-client.d.ts +19 -2
- package/dist/acp-client.d.ts.map +1 -1
- package/dist/acp-client.js +55 -2
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/interactive.d.ts +17 -1
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +21 -0
- package/dist/permissions.d.ts +4 -0
- package/dist/permissions.d.ts.map +1 -1
- package/dist/permissions.js +3 -2
- package/dist/protocol-coverage.d.ts +12 -0
- package/dist/protocol-coverage.d.ts.map +1 -0
- package/dist/protocol-coverage.js +49 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +12 -1
- package/package.json +2 -2
package/dist/acp-client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ContentBlock, type PromptRequest, type PromptResponse, type RequestPermissionResponse, type SessionConfigOption, type SessionNotification, type SetSessionConfigOptionRequest, type SetSessionConfigOptionResponse } from "@agentclientprotocol/sdk";
|
|
1
|
+
import { type ContentBlock, type AgentNotificationMethod, type AgentNotificationParamsByMethod, type AgentRequestMethod, type AgentRequestParamsByMethod, type AgentRequestResponsesByMethod, type PromptRequest, type PromptResponse, type RequestPermissionResponse, type SendRequestOptions, type SessionConfigOption, type SessionModeState, type SessionNotification, type SetSessionConfigOptionRequest, type SetSessionConfigOptionResponse, type SetSessionModeRequest, type SetSessionModeResponse } from "@agentclientprotocol/sdk";
|
|
2
2
|
import type { TSchema } from "typebox";
|
|
3
3
|
import { type AgentHistoryEntry, type McpServerConfig } from "@automatalabs/shared-types";
|
|
4
4
|
import type { Backend, BackendId, StructuredSource } from "./backend.js";
|
|
@@ -26,10 +26,11 @@ declare class SessionState {
|
|
|
26
26
|
readonly usage: UsageAccumulator;
|
|
27
27
|
readonly pendingPermissions: Set<(outcome: RequestPermissionResponse) => void>;
|
|
28
28
|
rawResultSuccess: RawResultSuccess | undefined;
|
|
29
|
+
modes: SessionModeState | null | undefined;
|
|
29
30
|
private turnStartIndex;
|
|
30
31
|
/** `label`/`runId` are carried here ONLY so the MultiplexClient can stamp them onto emitted
|
|
31
32
|
* events as context — they never affect routing or the wire request. */
|
|
32
|
-
constructor(cwd: string, policy: ToolPolicy, permissionResolver?: PermissionResolver | undefined, label?: string | undefined, runId?: string | undefined, retainSessionLog?: boolean);
|
|
33
|
+
constructor(cwd: string, policy: ToolPolicy, permissionResolver?: PermissionResolver | undefined, label?: string | undefined, runId?: string | undefined, modes?: SessionModeState | null, retainSessionLog?: boolean);
|
|
33
34
|
/** Mark the start of a new turn so currentTurnText()/structured_output read only this turn.
|
|
34
35
|
* Long-lived interactive sessions can opt out of retaining old text/history because hosts
|
|
35
36
|
* stream live events and keep their own transcript; clearing here prevents dead logs from
|
|
@@ -143,6 +144,18 @@ export declare class PooledConnection {
|
|
|
143
144
|
prompt(request: PromptRequest): Promise<PromptResponse>;
|
|
144
145
|
/** session/set_config_option on this connection, raced against process death. */
|
|
145
146
|
setSessionConfigOption(request: SetSessionConfigOptionRequest): Promise<SetSessionConfigOptionResponse>;
|
|
147
|
+
/** session/set_mode on this connection, raced against process death. */
|
|
148
|
+
setSessionMode(request: SetSessionModeRequest): Promise<SetSessionModeResponse>;
|
|
149
|
+
/** RAW protocol escape hatch: this makes the full ACP spec reachable (for example
|
|
150
|
+
* session/set_mode, session/fork, authenticate). Prefer the named wrappers when they exist
|
|
151
|
+
* because they preserve engine semantics such as accumulation/drain and usage recording;
|
|
152
|
+
* calling session/prompt here bypasses those paths. */
|
|
153
|
+
request<Method extends AgentRequestMethod>(method: Method, params: AgentRequestParamsByMethod[Method], options?: SendRequestOptions): Promise<AgentRequestResponsesByMethod[Method]>;
|
|
154
|
+
request<Response = unknown, Params = unknown>(method: string, params?: Params, options?: SendRequestOptions): Promise<Response>;
|
|
155
|
+
/** RAW protocol notification escape hatch. Prefer named wrappers when they exist because
|
|
156
|
+
* wrapper paths carry engine-specific lifecycle semantics that raw protocol calls do not. */
|
|
157
|
+
notify<Method extends AgentNotificationMethod>(method: Method, params: AgentNotificationParamsByMethod[Method]): Promise<void>;
|
|
158
|
+
notify<Params = unknown>(method: string, params?: Params): Promise<void>;
|
|
146
159
|
/** Best-effort ACP cancel for one session (wired to opts.signal). The PROCESS stays pooled. */
|
|
147
160
|
cancelSession(sessionId: string): Promise<void>;
|
|
148
161
|
/**
|
|
@@ -174,6 +187,8 @@ export declare class SessionHandle implements StructuredSource {
|
|
|
174
187
|
get usage(): UsageAccumulator;
|
|
175
188
|
/** Diagnostic message/tool history accumulated across this session's run. */
|
|
176
189
|
get history(): AgentHistoryEntry[];
|
|
190
|
+
/** Agent-advertised session mode catalog plus the currently active mode, if supported. */
|
|
191
|
+
get modes(): SessionModeState | null | undefined;
|
|
177
192
|
/**
|
|
178
193
|
* Select the model for this session from the agent-advertised config options (§5.4).
|
|
179
194
|
* Returns `matched:false` (the caller fires onModelFallback) when the catalog has no value
|
|
@@ -210,6 +225,8 @@ export declare class SessionHandle implements StructuredSource {
|
|
|
210
225
|
* A boolean value drives a `type: "boolean"` option (the request must carry the type
|
|
211
226
|
* discriminator on the wire); a string value drives a select option. */
|
|
212
227
|
private applyConfigOption;
|
|
228
|
+
/** Switch the session's operating mode through ACP's strict confinement channel. */
|
|
229
|
+
setMode(modeId: string): Promise<void>;
|
|
213
230
|
/** Send a prompt turn and drain it; returns the final PromptResponse. */
|
|
214
231
|
prompt(content: string | ContentBlock[], promptMeta?: Record<string, unknown>): Promise<PromptResponse>;
|
|
215
232
|
/** StructuredSource — the latest turn's assistant text. */
|
package/dist/acp-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acp-client.d.ts","sourceRoot":"","sources":["../src/acp-client.ts"],"names":[],"mappings":"AAwBA,OAAO,EAUL,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"acp-client.d.ts","sourceRoot":"","sources":["../src/acp-client.ts"],"names":[],"mappings":"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"}
|
package/dist/acp-client.js
CHANGED
|
@@ -56,16 +56,18 @@ class SessionState {
|
|
|
56
56
|
usage = new UsageAccumulator();
|
|
57
57
|
pendingPermissions = new Set();
|
|
58
58
|
rawResultSuccess;
|
|
59
|
+
modes;
|
|
59
60
|
turnStartIndex = 0;
|
|
60
61
|
/** `label`/`runId` are carried here ONLY so the MultiplexClient can stamp them onto emitted
|
|
61
62
|
* events as context — they never affect routing or the wire request. */
|
|
62
|
-
constructor(cwd, policy, permissionResolver, label, runId, retainSessionLog = true) {
|
|
63
|
+
constructor(cwd, policy, permissionResolver, label, runId, modes, retainSessionLog = true) {
|
|
63
64
|
this.cwd = cwd;
|
|
64
65
|
this.policy = policy;
|
|
65
66
|
this.permissionResolver = permissionResolver;
|
|
66
67
|
this.label = label;
|
|
67
68
|
this.runId = runId;
|
|
68
69
|
this.retainSessionLog = retainSessionLog;
|
|
70
|
+
this.modes = modes;
|
|
69
71
|
}
|
|
70
72
|
/** Mark the start of a new turn so currentTurnText()/structured_output read only this turn.
|
|
71
73
|
* Long-lived interactive sessions can opt out of retaining old text/history because hosts
|
|
@@ -116,6 +118,13 @@ class SessionState {
|
|
|
116
118
|
this.usage.recordContextTokens(update.used, update.size);
|
|
117
119
|
break;
|
|
118
120
|
}
|
|
121
|
+
case "current_mode_update": {
|
|
122
|
+
this.modes = {
|
|
123
|
+
...(this.modes ?? { availableModes: [] }),
|
|
124
|
+
currentModeId: update.currentModeId,
|
|
125
|
+
};
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
119
128
|
default:
|
|
120
129
|
break;
|
|
121
130
|
}
|
|
@@ -309,6 +318,21 @@ function cancelledPermissionResponse() {
|
|
|
309
318
|
function methodNotAdvertised(method) {
|
|
310
319
|
return new RequestError(-32601, `${method} was not advertised by this client`, { method });
|
|
311
320
|
}
|
|
321
|
+
function modeIds(modes) {
|
|
322
|
+
return modes?.availableModes.map((mode) => mode.id) ?? [];
|
|
323
|
+
}
|
|
324
|
+
function modeSelectionError(backendId, requested, advertisedIds, label, cause) {
|
|
325
|
+
const advertised = advertisedIds.length > 0 ? advertisedIds.join(", ") : "none";
|
|
326
|
+
const suffix = cause ? `: ${thrownMessage(cause)}` : "";
|
|
327
|
+
return new WorkflowError(`ACP agent (${backendId}) cannot apply session mode "${requested}" (advertised modes: ${advertised})${suffix}`, WorkflowErrorCode.SCRIPT_VALIDATION_ERROR, { recoverable: false, agentLabel: label, details: cause });
|
|
328
|
+
}
|
|
329
|
+
function thrownMessage(error) {
|
|
330
|
+
if (error instanceof Error)
|
|
331
|
+
return error.message;
|
|
332
|
+
if (typeof error === "string")
|
|
333
|
+
return error;
|
|
334
|
+
return String(error);
|
|
335
|
+
}
|
|
312
336
|
const DEFAULT_INIT_TIMEOUT_MS = 60_000;
|
|
313
337
|
/** Deadline for the one-time ACP `initialize` handshake per pooled process. Overridable via
|
|
314
338
|
* AGENTPRISM_ACP_INIT_TIMEOUT_MS (e.g. for slow cold-start backends). Clamped to >= 1s. */
|
|
@@ -560,7 +584,6 @@ export class PooledConnection {
|
|
|
560
584
|
throw new WorkflowError(`MCP server "${unsupported.name}" uses the "${unsupported.transport}" transport, which the ` +
|
|
561
585
|
`${this.backendId} agent does not support`, WorkflowErrorCode.SCRIPT_VALIDATION_ERROR, { recoverable: false, agentLabel: opts.label });
|
|
562
586
|
}
|
|
563
|
-
const state = new SessionState(opts.cwd, opts.policy, opts.permissionResolver, opts.label, opts.runId, opts.retainSessionLog ?? true);
|
|
564
587
|
// session/new `_meta`, layered lowest-to-highest precedence: the backend's static
|
|
565
588
|
// defaults (a custom registry entry's `sessionMeta`), then the generic user passthrough
|
|
566
589
|
// (opts.meta), then the backend's protocol-critical `_meta` (Claude schema channel;
|
|
@@ -578,6 +601,7 @@ export class PooledConnection {
|
|
|
578
601
|
...(meta ? { _meta: meta } : {}),
|
|
579
602
|
};
|
|
580
603
|
const response = await this.race(this.connection.agent.request(AGENT_METHODS.session_new, request));
|
|
604
|
+
const state = new SessionState(opts.cwd, opts.policy, opts.permissionResolver, opts.label, opts.runId, response.modes, opts.retainSessionLog ?? true);
|
|
581
605
|
this.client.register(response.sessionId, state);
|
|
582
606
|
return new SessionHandle(this, response.sessionId, state, response.configOptions ?? [], opts);
|
|
583
607
|
}
|
|
@@ -594,6 +618,16 @@ export class PooledConnection {
|
|
|
594
618
|
setSessionConfigOption(request) {
|
|
595
619
|
return this.race(this.connection.agent.request(AGENT_METHODS.session_set_config_option, request));
|
|
596
620
|
}
|
|
621
|
+
/** session/set_mode on this connection, raced against process death. */
|
|
622
|
+
setSessionMode(request) {
|
|
623
|
+
return this.race(this.connection.agent.request(AGENT_METHODS.session_set_mode, request));
|
|
624
|
+
}
|
|
625
|
+
request(method, params, options) {
|
|
626
|
+
return this.race(this.connection.agent.request(method, params, options));
|
|
627
|
+
}
|
|
628
|
+
notify(method, params) {
|
|
629
|
+
return this.race(this.connection.agent.notify(method, params));
|
|
630
|
+
}
|
|
597
631
|
/** Best-effort ACP cancel for one session (wired to opts.signal). The PROCESS stays pooled. */
|
|
598
632
|
async cancelSession(sessionId) {
|
|
599
633
|
this.client.settlePendingPermissions(sessionId);
|
|
@@ -709,6 +743,10 @@ export class SessionHandle {
|
|
|
709
743
|
get history() {
|
|
710
744
|
return this.state.history;
|
|
711
745
|
}
|
|
746
|
+
/** Agent-advertised session mode catalog plus the currently active mode, if supported. */
|
|
747
|
+
get modes() {
|
|
748
|
+
return this.state.modes;
|
|
749
|
+
}
|
|
712
750
|
/**
|
|
713
751
|
* Select the model for this session from the agent-advertised config options (§5.4).
|
|
714
752
|
* Returns `matched:false` (the caller fires onModelFallback) when the catalog has no value
|
|
@@ -810,6 +848,21 @@ export class SessionHandle {
|
|
|
810
848
|
const response = await this.pooled.setSessionConfigOption(request);
|
|
811
849
|
this.configOptions = response.configOptions;
|
|
812
850
|
}
|
|
851
|
+
/** Switch the session's operating mode through ACP's strict confinement channel. */
|
|
852
|
+
async setMode(modeId) {
|
|
853
|
+
const modes = this.state.modes;
|
|
854
|
+
const ids = modeIds(modes);
|
|
855
|
+
if (!modes || !ids.includes(modeId)) {
|
|
856
|
+
throw modeSelectionError(this.pooled.backendId, modeId, ids, this.opts.label);
|
|
857
|
+
}
|
|
858
|
+
try {
|
|
859
|
+
await this.pooled.setSessionMode({ sessionId: this.sessionId, modeId });
|
|
860
|
+
}
|
|
861
|
+
catch (error) {
|
|
862
|
+
throw modeSelectionError(this.pooled.backendId, modeId, ids, this.opts.label, error);
|
|
863
|
+
}
|
|
864
|
+
this.state.modes = { ...modes, currentModeId: modeId };
|
|
865
|
+
}
|
|
813
866
|
/** Send a prompt turn and drain it; returns the final PromptResponse. */
|
|
814
867
|
async prompt(content, promptMeta) {
|
|
815
868
|
this.opts.signal?.throwIfAborted();
|
package/dist/index.d.ts
CHANGED
|
@@ -2,10 +2,14 @@ export { AcpAgentRunner, createAcpRunner, selectBackend } from "./runner.js";
|
|
|
2
2
|
export type { AcpRunnerOptions } from "./runner.js";
|
|
3
3
|
export { InteractiveSession } from "./interactive.js";
|
|
4
4
|
export type { InteractiveSessionOptions, InteractiveTurn } from "./interactive.js";
|
|
5
|
+
export { AGENT_METHODS, CLIENT_METHODS } from "@agentclientprotocol/sdk";
|
|
6
|
+
export type { AgentNotificationMethod, AgentNotificationParamsByMethod, AgentRequestMethod, AgentRequestParamsByMethod, AgentRequestResponsesByMethod, SessionMode, SessionModeState, SendRequestOptions, } from "@agentclientprotocol/sdk";
|
|
5
7
|
export { BACKENDS_ENV, registryWithRunBackends, resolveBackendRegistry } from "./registry.js";
|
|
6
8
|
export type { BackendRegistry, CustomBackendConfig, RegisteredBackend } from "./registry.js";
|
|
7
9
|
export { PooledConnection, SessionHandle } from "./acp-client.js";
|
|
8
10
|
export type { AcpSessionOptions, PooledConnectionDeps } from "./acp-client.js";
|
|
11
|
+
export { AGENT_METHOD_COVERAGE, CLIENT_METHOD_COVERAGE } from "./protocol-coverage.js";
|
|
12
|
+
export type { AgentMethodCoverage, ClientMethodCoverage } from "./protocol-coverage.js";
|
|
9
13
|
export { GATED_CUSTOM_META_KEYS, adaptPromptContent, gateCustomMeta, isSupportedProtocolVersion, negotiateCapabilities, unsupportedMcpServer, } from "./capabilities.js";
|
|
10
14
|
export type { NegotiatedCapabilities } from "./capabilities.js";
|
|
11
15
|
export { AcpAgentPool, resolvePoolSize } from "./pool.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC7E,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC7E,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AACzE,YAAY,EACV,uBAAuB,EACvB,+BAA+B,EAC/B,kBAAkB,EAClB,0BAA0B,EAC1B,6BAA6B,EAC7B,WAAW,EACX,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC9F,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE7F,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAClE,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE/E,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACvF,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAIxF,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC1D,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAI7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG5G,OAAO,EAAE,6BAA6B,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAClG,YAAY,EACV,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,yBAAyB,EACzB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,OAAO,EACP,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhF,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,9 +6,11 @@
|
|
|
6
6
|
// @automatalabs/workflows facade (which mcp-server builds on) via createAcpRunner().
|
|
7
7
|
export { AcpAgentRunner, createAcpRunner, selectBackend } from "./runner.js";
|
|
8
8
|
export { InteractiveSession } from "./interactive.js";
|
|
9
|
+
export { AGENT_METHODS, CLIENT_METHODS } from "@agentclientprotocol/sdk";
|
|
9
10
|
// The custom-backend registry: run ANY ACP agent as an agent() target.
|
|
10
11
|
export { BACKENDS_ENV, registryWithRunBackends, resolveBackendRegistry } from "./registry.js";
|
|
11
12
|
export { PooledConnection, SessionHandle } from "./acp-client.js";
|
|
13
|
+
export { AGENT_METHOD_COVERAGE, CLIENT_METHOD_COVERAGE } from "./protocol-coverage.js";
|
|
12
14
|
// ACP capability negotiation: parse/validate the initialize response and gate what the client
|
|
13
15
|
// sends (custom `_meta` keys, MCP transports) on what the connected agent advertised.
|
|
14
16
|
export { GATED_CUSTOM_META_KEYS, adaptPromptContent, gateCustomMeta, isSupportedProtocolVersion, negotiateCapabilities, unsupportedMcpServer, } from "./capabilities.js";
|
package/dist/interactive.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ContentBlock, StopReason } from "@agentclientprotocol/sdk";
|
|
1
|
+
import type { AgentNotificationMethod, AgentNotificationParamsByMethod, AgentRequestMethod, AgentRequestParamsByMethod, AgentRequestResponsesByMethod, ContentBlock, SendRequestOptions, SessionModeState, StopReason } from "@agentclientprotocol/sdk";
|
|
2
2
|
import type { McpServerConfig, PromptImage } from "@automatalabs/shared-types";
|
|
3
3
|
import type { RunOptions } from "@automatalabs/shared-types";
|
|
4
4
|
import type { Backend, BackendId } from "./backend.js";
|
|
@@ -14,6 +14,8 @@ import type { PermissionResolver } from "./permissions.js";
|
|
|
14
14
|
export interface InteractiveSessionOptions {
|
|
15
15
|
/** Model spec (`provider/modelId`, bare model id, or registered custom backend route). */
|
|
16
16
|
model?: string;
|
|
17
|
+
/** Agent-advertised session mode id. Strict: openSession fails rather than running unconfined. */
|
|
18
|
+
mode?: string;
|
|
17
19
|
/** Coarse tier consulted only when `model` is unset. */
|
|
18
20
|
tier?: string;
|
|
19
21
|
/** Absolute working directory for ACP session/new. Required for held-open sessions. */
|
|
@@ -89,6 +91,8 @@ export declare class InteractiveSession {
|
|
|
89
91
|
constructor(deps: InteractiveSessionDeps);
|
|
90
92
|
/** Negotiated initialize capabilities for this session's dedicated connection. */
|
|
91
93
|
get capabilities(): NegotiatedCapabilities | undefined;
|
|
94
|
+
/** Agent-advertised session mode catalog plus the currently active mode, if supported. */
|
|
95
|
+
get modes(): SessionModeState | null | undefined;
|
|
92
96
|
/** Send one prompt turn. A concurrent prompt on the same InteractiveSession is rejected with a
|
|
93
97
|
* clear host-side error; queueing is deliberately left to the host so turn boundaries remain
|
|
94
98
|
* explicit. Per-turn images are appended only to this prompt, and SessionHandle.prompt()
|
|
@@ -97,6 +101,18 @@ export declare class InteractiveSession {
|
|
|
97
101
|
images?: readonly PromptImage[];
|
|
98
102
|
promptMeta?: Record<string, unknown>;
|
|
99
103
|
}): Promise<InteractiveTurn>;
|
|
104
|
+
/** RAW protocol escape hatch for held-open sessions. Params carry `sessionId` explicitly;
|
|
105
|
+
* use `session.sessionId` so the wire call targets this session. Prefer named wrappers when
|
|
106
|
+
* they exist because they preserve engine semantics such as accumulation/drain and usage
|
|
107
|
+
* recording; calling session/prompt here bypasses those paths. */
|
|
108
|
+
request<Method extends AgentRequestMethod>(method: Method, params: AgentRequestParamsByMethod[Method], options?: SendRequestOptions): Promise<AgentRequestResponsesByMethod[Method]>;
|
|
109
|
+
request<Response = unknown, Params = unknown>(method: string, params?: Params, options?: SendRequestOptions): Promise<Response>;
|
|
110
|
+
/** Switch this session's ACP operating mode. Fails strictly when the agent did not advertise it. */
|
|
111
|
+
setMode(modeId: string): Promise<void>;
|
|
112
|
+
/** RAW protocol notification escape hatch for held-open sessions. Params carry `sessionId`
|
|
113
|
+
* explicitly; use `session.sessionId` so the wire call targets this session. */
|
|
114
|
+
notify<Method extends AgentNotificationMethod>(method: Method, params: AgentNotificationParamsByMethod[Method]): Promise<void>;
|
|
115
|
+
notify<Params = unknown>(method: string, params?: Params): Promise<void>;
|
|
100
116
|
/** Best-effort ACP session/cancel for the active turn. Pending permission resolvers are
|
|
101
117
|
* settled as cancelled by the SessionHandle/PooledConnection cancel path. */
|
|
102
118
|
cancel(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../src/interactive.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../src/interactive.ts"],"names":[],"mappings":"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"}
|
package/dist/interactive.js
CHANGED
|
@@ -49,6 +49,10 @@ export class InteractiveSession {
|
|
|
49
49
|
get capabilities() {
|
|
50
50
|
return this.connection.capabilities;
|
|
51
51
|
}
|
|
52
|
+
/** Agent-advertised session mode catalog plus the currently active mode, if supported. */
|
|
53
|
+
get modes() {
|
|
54
|
+
return this.session.modes;
|
|
55
|
+
}
|
|
52
56
|
/** Send one prompt turn. A concurrent prompt on the same InteractiveSession is rejected with a
|
|
53
57
|
* clear host-side error; queueing is deliberately left to the host so turn boundaries remain
|
|
54
58
|
* explicit. Per-turn images are appended only to this prompt, and SessionHandle.prompt()
|
|
@@ -75,6 +79,23 @@ export class InteractiveSession {
|
|
|
75
79
|
this.promptInFlight = false;
|
|
76
80
|
}
|
|
77
81
|
}
|
|
82
|
+
async request(method, params, options) {
|
|
83
|
+
if (this.releasePromise)
|
|
84
|
+
throw new Error("InteractiveSession has been released");
|
|
85
|
+
return this.connection.request(method, params, options);
|
|
86
|
+
}
|
|
87
|
+
/** Switch this session's ACP operating mode. Fails strictly when the agent did not advertise it. */
|
|
88
|
+
async setMode(modeId) {
|
|
89
|
+
if (this.releasePromise)
|
|
90
|
+
throw new Error("InteractiveSession has been released");
|
|
91
|
+
this.signal?.throwIfAborted();
|
|
92
|
+
await this.session.setMode(modeId);
|
|
93
|
+
}
|
|
94
|
+
async notify(method, params) {
|
|
95
|
+
if (this.releasePromise)
|
|
96
|
+
throw new Error("InteractiveSession has been released");
|
|
97
|
+
await this.connection.notify(method, params);
|
|
98
|
+
}
|
|
78
99
|
/** Best-effort ACP session/cancel for the active turn. Pending permission resolvers are
|
|
79
100
|
* settled as cancelled by the SessionHandle/PooledConnection cancel path. */
|
|
80
101
|
async cancel() {
|
package/dist/permissions.d.ts
CHANGED
|
@@ -13,6 +13,10 @@ export interface ToolPolicy {
|
|
|
13
13
|
allow?: string[];
|
|
14
14
|
/** Deny-list (agentType `disallowedTools`), applied after the allow-list. */
|
|
15
15
|
deny?: string[];
|
|
16
|
+
/** No-match fallback for the headless auto-responder. Default "allow" preserves historical
|
|
17
|
+
* behavior. Explicit ACP session modes set this to "deny" unless a permission resolver is
|
|
18
|
+
* present, otherwise read-only/plan confinement can be bypassed by auto-approved escalations. */
|
|
19
|
+
defaultOutcome?: "allow" | "deny";
|
|
16
20
|
}
|
|
17
21
|
/** Decide the auto-response for one permission request given the tool policy. */
|
|
18
22
|
export declare function decidePermission(request: RequestPermissionRequest, policy: ToolPolicy): RequestPermissionResponse;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAGV,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD;;;;;;wDAMwD;AACxD,MAAM,MAAM,kBAAkB,GAAG,CAC/B,MAAM,EAAE,wBAAwB,EAChC,GAAG,EAAE,eAAe,KACjB,OAAO,CAAC,yBAAyB,CAAC,GAAG,yBAAyB,CAAC;AAEpE,MAAM,WAAW,UAAU;IACzB,6FAA6F;IAC7F,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;sGAEkG;IAClG,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACnC;AAKD,iFAAiF;AACjF,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,wBAAwB,EACjC,MAAM,EAAE,UAAU,GACjB,yBAAyB,CAsC3B"}
|
package/dist/permissions.js
CHANGED
|
@@ -9,6 +9,7 @@ export function decidePermission(request, policy) {
|
|
|
9
9
|
const allPool = [...toolNames, ...decoration];
|
|
10
10
|
const denyList = policy.deny ?? [];
|
|
11
11
|
const allowList = policy.allow ?? [];
|
|
12
|
+
const defaultOutcome = policy.defaultOutcome ?? "allow";
|
|
12
13
|
const hasDeny = denyList.length > 0;
|
|
13
14
|
const hasAllowList = allowList.length > 0;
|
|
14
15
|
const denyExact = hasDeny && exactMatchesAny(exactPool, denyList);
|
|
@@ -20,12 +21,12 @@ export function decidePermission(request, policy) {
|
|
|
20
21
|
// (Suppresses loose substring matches: a deny `read` no longer catches an exactly
|
|
21
22
|
// allow-listed `thread-reader`.)
|
|
22
23
|
denied = denyExact;
|
|
23
|
-
allowedByList =
|
|
24
|
+
allowedByList = hasAllowList ? allowExact : defaultOutcome === "allow";
|
|
24
25
|
}
|
|
25
26
|
else {
|
|
26
27
|
// (b) No exact match in either list -> best-effort bidirectional substring fallback.
|
|
27
28
|
denied = hasDeny && substringMatchesAny(allPool, denyList);
|
|
28
|
-
allowedByList =
|
|
29
|
+
allowedByList = hasAllowList ? substringMatchesAny(allPool, allowList) : defaultOutcome === "allow";
|
|
29
30
|
}
|
|
30
31
|
const wantAllow = !denied && allowedByList;
|
|
31
32
|
const option = pickOption(request.options, wantAllow);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AGENT_METHODS, CLIENT_METHODS } from "@agentclientprotocol/sdk";
|
|
2
|
+
type ValueOf<T> = T[keyof T];
|
|
3
|
+
type ClientMethod = ValueOf<typeof CLIENT_METHODS>;
|
|
4
|
+
type AgentMethod = ValueOf<typeof AGENT_METHODS>;
|
|
5
|
+
export type ClientMethodCoverage = "served" | "pending";
|
|
6
|
+
export type AgentMethodCoverage = "driven" | "passthrough";
|
|
7
|
+
/** Enforceable definition of "full ACP spec support": every SDK method constant is classified
|
|
8
|
+
* here, and the tripwire test fails when an SDK bump silently widens or shrinks the protocol. */
|
|
9
|
+
export declare const CLIENT_METHOD_COVERAGE: Record<ClientMethod, ClientMethodCoverage>;
|
|
10
|
+
export declare const AGENT_METHOD_COVERAGE: Record<AgentMethod, AgentMethodCoverage>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=protocol-coverage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol-coverage.d.ts","sourceRoot":"","sources":["../src/protocol-coverage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAEzE,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7B,KAAK,YAAY,GAAG,OAAO,CAAC,OAAO,cAAc,CAAC,CAAC;AACnD,KAAK,WAAW,GAAG,OAAO,CAAC,OAAO,aAAa,CAAC,CAAC;AAEjD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,SAAS,CAAC;AACxD,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,aAAa,CAAC;AAE3D;kGACkG;AAClG,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,YAAY,EAAE,oBAAoB,CAe7E,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,WAAW,EAAE,mBAAmB,CA6B1E,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { AGENT_METHODS, CLIENT_METHODS } from "@agentclientprotocol/sdk";
|
|
2
|
+
/** Enforceable definition of "full ACP spec support": every SDK method constant is classified
|
|
3
|
+
* here, and the tripwire test fails when an SDK bump silently widens or shrinks the protocol. */
|
|
4
|
+
export const CLIENT_METHOD_COVERAGE = {
|
|
5
|
+
[CLIENT_METHODS.session_request_permission]: "served",
|
|
6
|
+
[CLIENT_METHODS.session_update]: "served",
|
|
7
|
+
[CLIENT_METHODS.fs_read_text_file]: "served",
|
|
8
|
+
[CLIENT_METHODS.fs_write_text_file]: "served",
|
|
9
|
+
[CLIENT_METHODS.terminal_create]: "served",
|
|
10
|
+
[CLIENT_METHODS.terminal_output]: "served",
|
|
11
|
+
[CLIENT_METHODS.terminal_release]: "served",
|
|
12
|
+
[CLIENT_METHODS.terminal_wait_for_exit]: "served",
|
|
13
|
+
[CLIENT_METHODS.terminal_kill]: "served",
|
|
14
|
+
[CLIENT_METHODS.mcp_connect]: "pending",
|
|
15
|
+
[CLIENT_METHODS.mcp_message]: "pending",
|
|
16
|
+
[CLIENT_METHODS.mcp_disconnect]: "pending",
|
|
17
|
+
[CLIENT_METHODS.elicitation_create]: "pending",
|
|
18
|
+
[CLIENT_METHODS.elicitation_complete]: "pending",
|
|
19
|
+
};
|
|
20
|
+
export const AGENT_METHOD_COVERAGE = {
|
|
21
|
+
[AGENT_METHODS.initialize]: "driven",
|
|
22
|
+
[AGENT_METHODS.authenticate]: "passthrough",
|
|
23
|
+
[AGENT_METHODS.providers_list]: "passthrough",
|
|
24
|
+
[AGENT_METHODS.providers_set]: "passthrough",
|
|
25
|
+
[AGENT_METHODS.providers_disable]: "passthrough",
|
|
26
|
+
[AGENT_METHODS.session_new]: "driven",
|
|
27
|
+
[AGENT_METHODS.session_load]: "passthrough",
|
|
28
|
+
[AGENT_METHODS.session_set_mode]: "driven",
|
|
29
|
+
[AGENT_METHODS.session_set_config_option]: "driven",
|
|
30
|
+
[AGENT_METHODS.session_prompt]: "driven",
|
|
31
|
+
[AGENT_METHODS.session_cancel]: "driven",
|
|
32
|
+
[AGENT_METHODS.mcp_message]: "passthrough",
|
|
33
|
+
[AGENT_METHODS.session_list]: "passthrough",
|
|
34
|
+
[AGENT_METHODS.session_delete]: "passthrough",
|
|
35
|
+
[AGENT_METHODS.session_fork]: "passthrough",
|
|
36
|
+
[AGENT_METHODS.session_resume]: "passthrough",
|
|
37
|
+
[AGENT_METHODS.session_close]: "driven",
|
|
38
|
+
[AGENT_METHODS.logout]: "passthrough",
|
|
39
|
+
[AGENT_METHODS.nes_start]: "passthrough",
|
|
40
|
+
[AGENT_METHODS.nes_suggest]: "passthrough",
|
|
41
|
+
[AGENT_METHODS.nes_accept]: "passthrough",
|
|
42
|
+
[AGENT_METHODS.nes_reject]: "passthrough",
|
|
43
|
+
[AGENT_METHODS.nes_close]: "passthrough",
|
|
44
|
+
[AGENT_METHODS.document_did_open]: "passthrough",
|
|
45
|
+
[AGENT_METHODS.document_did_change]: "passthrough",
|
|
46
|
+
[AGENT_METHODS.document_did_close]: "passthrough",
|
|
47
|
+
[AGENT_METHODS.document_did_save]: "passthrough",
|
|
48
|
+
[AGENT_METHODS.document_did_focus]: "passthrough",
|
|
49
|
+
};
|
package/dist/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAmBA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,EAChB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAGlB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,KAAK,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAItF,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACzB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,kBAAkB,EAAc,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
package/dist/runner.js
CHANGED
|
@@ -122,6 +122,9 @@ export class AcpAgentRunner {
|
|
|
122
122
|
opts.signal?.throwIfAborted();
|
|
123
123
|
await applyModelSelection(session, prepared.modelSpec, opts);
|
|
124
124
|
opts.signal?.throwIfAborted();
|
|
125
|
+
if (opts.mode)
|
|
126
|
+
await session.setMode(opts.mode);
|
|
127
|
+
opts.signal?.throwIfAborted();
|
|
125
128
|
if (this.disposed)
|
|
126
129
|
throw new Error("ACP agent runner is disposed");
|
|
127
130
|
interactive = new InteractiveSession({
|
|
@@ -183,6 +186,9 @@ export class AcpAgentRunner {
|
|
|
183
186
|
// model id: "browser" selects nothing; "browser/foo" selects "foo". Built-ins get the
|
|
184
187
|
// full spec unchanged (their catalogs match provider-prefixed and bare ids).
|
|
185
188
|
await applyModelSelection(session, prepared.modelSpec, opts);
|
|
189
|
+
opts.signal?.throwIfAborted();
|
|
190
|
+
if (opts.mode)
|
|
191
|
+
await session.setMode(opts.mode);
|
|
186
192
|
const text = buildRunPrompt(prompt, opts, schema, prepared.backend);
|
|
187
193
|
const initialPrompt = opts.images && opts.images.length > 0 ? promptWithImages(text, opts.images) : text;
|
|
188
194
|
// Generic turn-scoped _meta passthrough merged UNDER the backend-computed keys (e.g. the
|
|
@@ -264,7 +270,12 @@ export class AcpAgentRunner {
|
|
|
264
270
|
* place for run() and openSession() so new AcpSessionOptions fields cannot drift by path. */
|
|
265
271
|
prepareSession(opts, config) {
|
|
266
272
|
const backend = selectBackend(opts, config.registry);
|
|
267
|
-
const
|
|
273
|
+
const hasPermissionResolver = Boolean(config.permissionResolver ?? this.permissionResolver);
|
|
274
|
+
const policy = {
|
|
275
|
+
allow: opts.toolNames,
|
|
276
|
+
deny: opts.disallowedToolNames,
|
|
277
|
+
defaultOutcome: opts.mode && !hasPermissionResolver ? "deny" : undefined,
|
|
278
|
+
};
|
|
268
279
|
return {
|
|
269
280
|
backend,
|
|
270
281
|
modelSpec: innerModelSpec(opts.model ?? opts.tier, backend),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@automatalabs/acp-agents",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=22"
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"@agentclientprotocol/claude-agent-acp": "0.56.0",
|
|
32
32
|
"@automatalabs/codex-acp": "1.4.0",
|
|
33
33
|
"typebox": "1.3.2",
|
|
34
|
-
"@automatalabs/shared-types": "0.
|
|
34
|
+
"@automatalabs/shared-types": "0.9.0"
|
|
35
35
|
},
|
|
36
36
|
"scripts": {
|
|
37
37
|
"build": "tsc -b",
|