@agen-ai/provider-acp 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.
Files changed (64) hide show
  1. package/README.md +355 -12
  2. package/dist/capabilities.d.ts +3 -1
  3. package/dist/capabilities.js +5 -4
  4. package/dist/configuration/catalog.js +0 -2
  5. package/dist/configuration/errors.js +0 -1
  6. package/dist/connection/contracts.d.ts +21 -0
  7. package/dist/connection/errors.js +0 -1
  8. package/dist/connection/initialize.d.ts +7 -3
  9. package/dist/connection/initialize.js +46 -17
  10. package/dist/connection/negotiation.d.ts +2 -1
  11. package/dist/connection/negotiation.js +15 -1
  12. package/dist/contracts.d.ts +3 -0
  13. package/dist/driver.d.ts +1 -1
  14. package/dist/driver.js +6 -39
  15. package/dist/driverFactory.d.ts +8 -0
  16. package/dist/driverFactory.js +48 -0
  17. package/dist/host/interactions.js +0 -1
  18. package/dist/host/leases.js +0 -1
  19. package/dist/host/router.js +0 -1
  20. package/dist/host/terminals.js +0 -2
  21. package/dist/index.d.ts +1 -0
  22. package/dist/instance.d.ts +7 -2
  23. package/dist/instance.js +102 -27
  24. package/dist/node/contracts.d.ts +6 -0
  25. package/dist/node/execution/errors.d.ts +11 -0
  26. package/dist/node/execution/errors.js +17 -0
  27. package/dist/node/execution/owner.d.ts +34 -0
  28. package/dist/node/execution/owner.js +162 -0
  29. package/dist/node/execution/types.d.ts +20 -0
  30. package/dist/node/execution/types.js +0 -0
  31. package/dist/node/index.d.ts +3 -1
  32. package/dist/node/index.js +16 -6
  33. package/dist/node/launch.d.ts +5 -8
  34. package/dist/node/launch.js +13 -1
  35. package/dist/permissions/contracts.d.ts +22 -0
  36. package/dist/permissions/contracts.js +0 -0
  37. package/dist/permissions/mapping.d.ts +13 -0
  38. package/dist/permissions/mapping.js +99 -0
  39. package/dist/permissions/selection.d.ts +5 -0
  40. package/dist/permissions/selection.js +96 -0
  41. package/dist/session/create.d.ts +7 -1
  42. package/dist/session/create.js +3 -1
  43. package/dist/session/errors.js +0 -1
  44. package/dist/session/mapping.d.ts +6 -0
  45. package/dist/session/mapping.js +5 -26
  46. package/dist/session/opening.d.ts +1 -0
  47. package/dist/session/opening.js +3 -1
  48. package/dist/session/queue.js +0 -1
  49. package/dist/session/requests/forms.js +0 -2
  50. package/dist/session/requests/pending.js +0 -1
  51. package/dist/session/resources.js +5 -3
  52. package/dist/session/session.d.ts +4 -1
  53. package/dist/session/session.js +67 -25
  54. package/dist/sessionInteractions/broker.d.ts +42 -0
  55. package/dist/sessionInteractions/broker.js +171 -0
  56. package/dist/sessionInteractions/contracts.d.ts +3 -0
  57. package/dist/sessionInteractions/contracts.js +0 -0
  58. package/dist/sessionInteractions/extensions.d.ts +3 -0
  59. package/dist/sessionInteractions/extensions.js +17 -0
  60. package/dist/sessionInteractions/grokFolderTrust.d.ts +43 -0
  61. package/dist/sessionInteractions/grokFolderTrust.js +107 -0
  62. package/dist/sessionInteractions/request.d.ts +38 -0
  63. package/dist/sessionInteractions/request.js +145 -0
  64. package/package.json +4 -4
@@ -8,6 +8,10 @@ import { AcpProviderConnectionError } from "./errors.js";
8
8
  import { acquireAcpLease, releaseOwnedLease } from "./acquire.js";
9
9
  import { readNegotiatedAgent } from "./negotiation.js";
10
10
  import { AcpHostRouter } from "../host/router.js";
11
+ import { SessionInteractionBroker } from "../sessionInteractions/broker.js";
12
+ import { createSessionInteractionExtensionRegistry } from "../sessionInteractions/extensions.js";
13
+ import { GROK_FOLDER_TRUST_CAPABILITY_META, GROK_FOLDER_TRUST_METHOD } from "../sessionInteractions/grokFolderTrust.js";
14
+ import { awaitHost } from "../host/lifecycle.js";
11
15
  async function initializeAcpConnection(input) {
12
16
  throwIfAgentOperationAborted(input.context.signal);
13
17
  const initialization = new AbortController();
@@ -18,11 +22,14 @@ async function initializeAcpConnection(input) {
18
22
  "ACP connection acquisition or initialization exceeded its deadline."
19
23
  )), input.limits.initializationTimeoutMs);
20
24
  let lease;
25
+ const execution = input.source.kind === "reserved" ? input.source.owner : void 0;
21
26
  try {
22
- lease = await acquireAcpLease(input.createConnection, { ...input.context, signal: initialization.signal });
27
+ const context = { ...input.context, signal: initialization.signal };
28
+ lease = input.source.kind === "factory" ? await acquireAcpLease(input.source.create, context) : await awaitHost(input.source.owner.start(context), initialization.signal);
23
29
  try {
24
30
  validateLease(lease, input.usedStreams);
25
31
  } catch (cause) {
32
+ if (execution) throw cause;
26
33
  try {
27
34
  await releaseOwnedLease(lease);
28
35
  } catch (cleanupError) {
@@ -33,6 +40,13 @@ async function initializeAcpConnection(input) {
33
40
  } catch (cause) {
34
41
  clearTimeout(timeout);
35
42
  input.context.signal?.removeEventListener("abort", onInitializationAbort);
43
+ if (execution) {
44
+ try {
45
+ await execution.cleanup();
46
+ } catch (cleanupError) {
47
+ throw execution.retainedError(cause, cleanupError);
48
+ }
49
+ }
36
50
  throw cause;
37
51
  }
38
52
  const stopped = new AbortController();
@@ -42,6 +56,7 @@ async function initializeAcpConnection(input) {
42
56
  let closePromise;
43
57
  let releasePromise;
44
58
  let released = false;
59
+ let sessionInteractions;
45
60
  const host = input.host ?? {};
46
61
  const router = new AcpHostRouter({
47
62
  instanceId: input.context.instanceId,
@@ -63,11 +78,12 @@ async function initializeAcpConnection(input) {
63
78
  const stop = (reason) => {
64
79
  if (!stopped.signal.aborted) stopped.abort(reason);
65
80
  };
66
- const close = () => {
81
+ const closeActual = () => {
67
82
  if (!closePromise) {
68
83
  closePromise = Promise.resolve().then(async () => {
69
84
  try {
70
- const cleanup = await Promise.allSettled([router.close(), ...client ? [client.dispose()] : [], release()]);
85
+ const stopping = [router.close(), ...client ? [client.dispose()] : [], release()];
86
+ const cleanup = await Promise.allSettled([...stopping, ...sessionInteractions ? [sessionInteractions.join()] : []]);
71
87
  const failures = cleanup.filter((result) => result.status === "rejected");
72
88
  if (failures.length) throw new AggregateError(failures.map((result) => result.reason), "ACP connection cleanup failed.");
73
89
  } finally {
@@ -82,21 +98,31 @@ async function initializeAcpConnection(input) {
82
98
  closePromise = void 0;
83
99
  throw error;
84
100
  });
101
+ sessionInteractions?.stop({ kind: "session_closed" });
85
102
  stop(new AcpProviderConnectionError("acp_provider_connection_closed", "The ACP connection was closed."));
86
103
  }
87
104
  return closePromise;
88
105
  };
89
- const onPeerEnd = () => {
90
- stop(new AcpProviderConnectionError("acp_provider_peer_closed", "The ACP peer closed its stream."));
106
+ execution?.retainCleanup(closeActual);
107
+ const close = () => execution ? execution.cleanup() : closeActual();
108
+ const fail = (error) => {
109
+ if (stopped.signal.aborted) return;
110
+ stop(error);
91
111
  void close().catch(() => void 0);
92
112
  };
113
+ if (input.sessionInteractions) sessionInteractions = new SessionInteractionBroker({
114
+ stopped: stopped.signal,
115
+ limits: input.limits,
116
+ onFailure: fail
117
+ });
118
+ const onPeerEnd = () => {
119
+ fail(new AcpProviderConnectionError("acp_provider_peer_closed", "The ACP peer closed its stream."));
120
+ };
93
121
  const onPeerError = (error) => {
94
- stop(error);
95
- void close().catch(() => void 0);
122
+ fail(error);
96
123
  };
97
124
  const onAbort = () => {
98
- stop(initialization.signal.reason instanceof Error ? initialization.signal.reason : new DOMException("ACP initialization was aborted.", "AbortError"));
99
- void close().catch(() => void 0);
125
+ fail(initialization.signal.reason instanceof Error ? initialization.signal.reason : new DOMException("ACP initialization was aborted.", "AbortError"));
100
126
  };
101
127
  lease.stdout.once("end", onPeerEnd);
102
128
  lease.stdout.once("close", onPeerEnd);
@@ -114,6 +140,7 @@ async function initializeAcpConnection(input) {
114
140
  schemaChannel: "stable",
115
141
  unknownExtensionPolicy: input.unknownExtensionPolicy,
116
142
  outboundRequestIdPrefix: "agenai-acp-",
143
+ ...sessionInteractions ? { extensions: createSessionInteractionExtensionRegistry() } : {},
117
144
  limits: {
118
145
  maxInboundFrameBytes: Math.min(input.limits.maxQueuedBytes, 1024 * 1024),
119
146
  maxOutboundFrameBytes: Math.min(input.limits.maxQueuedBytes, 8 * 1024 * 1024),
@@ -132,6 +159,7 @@ async function initializeAcpConnection(input) {
132
159
  "elicitation/complete": (notification) => router.complete(notification.params ?? null)
133
160
  },
134
161
  reverseRequestHandlers: {
162
+ ...sessionInteractions ? { [GROK_FOLDER_TRUST_METHOD]: sessionInteractions.handleRequest } : {},
135
163
  ...Object.fromEntries([
136
164
  "session/request_permission",
137
165
  "elicitation/create",
@@ -144,36 +172,35 @@ async function initializeAcpConnection(input) {
144
172
  "terminal/release"
145
173
  ].map((method) => [method, (request) => router.admit(request)]))
146
174
  },
147
- onFatalError: (error) => {
148
- stop(error);
149
- void close().catch(() => void 0);
150
- }
175
+ onFatalError: fail
151
176
  });
152
177
  void client.closed.then((result) => {
153
- stop(result.error ?? new AcpProviderConnectionError("acp_provider_connection_closed", "The ACP connection stopped."));
154
- void close().catch(() => void 0);
178
+ fail(result.error ?? new AcpProviderConnectionError("acp_provider_connection_closed", "The ACP connection stopped."));
155
179
  });
156
180
  const response = await createAcpStandardSessionOperations(client).initialize({
157
181
  protocolVersion: 1,
158
182
  clientCapabilities: {
183
+ ...sessionInteractions ? { _meta: GROK_FOLDER_TRUST_CAPABILITY_META } : {},
159
184
  fs: { readTextFile: !!host.readTextFile, writeTextFile: !!host.writeTextFile },
160
185
  terminal: !!host.createTerminal,
161
186
  auth: { terminal: !!host.authenticateInTerminal && !!input.authentication?.terminal },
162
187
  elicitation: { form: {}, ...host.url ? { url: {} } : {} },
163
188
  ...input.configuration === "selectable" ? { session: { configOptions: { boolean: {} } } } : {}
164
189
  },
165
- clientInfo: { name: "@agen-ai/provider-acp", version: "0.4.0" }
190
+ clientInfo: { name: "@agen-ai/provider-acp", version: "0.4.1" }
166
191
  }, {
167
192
  timeoutMs: input.limits.initializationTimeoutMs,
168
193
  signal: initialization.signal
169
194
  });
170
195
  if (stopped.signal.aborted) throw stopped.signal.reason;
171
- const negotiated = readNegotiatedAgent(response);
196
+ const negotiated = readNegotiatedAgent(response, input.permissionMapping);
172
197
  initialization.signal.removeEventListener("abort", onAbort);
173
198
  return Object.freeze({
174
199
  client,
175
200
  negotiated,
176
201
  stopped: stopped.signal,
202
+ ...execution ? { execution } : {},
203
+ ...sessionInteractions ? { sessionInteractions } : {},
177
204
  bindSession: (binding) => router.bindSession(binding),
178
205
  ...host.form || host.url ? { hostElicitation: (context) => router.sessionElicitation(context) } : {},
179
206
  async requestWithScope(method, params, scope, options = {}) {
@@ -199,9 +226,11 @@ async function initializeAcpConnection(input) {
199
226
  close
200
227
  });
201
228
  } catch (cause) {
229
+ if (execution?.cleanupFailure) throw execution.retainedError(cause, execution.cleanupFailure.error);
202
230
  try {
203
231
  await close();
204
232
  } catch (cleanupError) {
233
+ if (execution) throw execution.retainedError(cause, cleanupError);
205
234
  throw new AggregateError([cause, cleanupError], "ACP initialization and cleanup failed.");
206
235
  }
207
236
  throw cause;
@@ -1,6 +1,7 @@
1
1
  import type { AcpJsonValue } from '@agen-ai/acp-transport';
2
2
  import type { AcpNegotiatedAgent } from './contracts.js';
3
+ import type { AcpPermissionMappingSelection } from '../permissions/contracts.js';
3
4
  /** The transport has already validated the complete pinned initialize response. */
4
- export declare function readNegotiatedAgent(response: AcpJsonValue): AcpNegotiatedAgent;
5
+ export declare function readNegotiatedAgent(response: AcpJsonValue, permissionMapping?: AcpPermissionMappingSelection): AcpNegotiatedAgent;
5
6
  export declare function negotiatedEnvelope(negotiated: AcpNegotiatedAgent): string;
6
7
  //# sourceMappingURL=negotiation.d.ts.map
@@ -11,7 +11,7 @@ function immutableProtocolData(value) {
11
11
  }
12
12
  return value;
13
13
  }
14
- function readNegotiatedAgent(response) {
14
+ function readNegotiatedAgent(response, permissionMapping = { mapping: "once-only-v1" }) {
15
15
  const value = response;
16
16
  if (value.protocolVersion !== 1) {
17
17
  throw new AcpProviderConnectionError("acp_provider_version_unsupported", "ACP wire version 1 is required.");
@@ -27,9 +27,23 @@ function readNegotiatedAgent(response) {
27
27
  }
28
28
  agentInfo = Object.freeze({ name: info.name, version: info.version });
29
29
  }
30
+ let agentVersion;
31
+ if (permissionMapping.mapping === "declared-complete-consequences-v1") {
32
+ if (agentInfo?.name !== permissionMapping.agentInfo.name || agentInfo.version !== permissionMapping.agentInfo.version) {
33
+ throw new AcpProviderConnectionError("acp_permission_profile_mismatch", "The initialized ACP identity does not match the selected permission profile.");
34
+ }
35
+ } else if (permissionMapping.mapping === "grok-build-1.0.50-edit-remembrance-v1") {
36
+ const meta = value._meta;
37
+ const version = meta !== null && typeof meta === "object" && !Array.isArray(meta) ? meta.agentVersion : void 0;
38
+ if (typeof version !== "string" || version.length > 160 || version !== version.trim() || /[\p{Cc}\p{Cf}]/u.test(version) || version !== "1.0.50") {
39
+ throw new AcpProviderConnectionError("acp_permission_profile_mismatch", "The selected Grok permission profile requires the exact initialized agentVersion 1.0.50.");
40
+ }
41
+ agentVersion = version;
42
+ }
30
43
  return Object.freeze({
31
44
  protocolVersion: 1,
32
45
  ...agentInfo ? { agentInfo } : {},
46
+ ...agentVersion ? { agentVersion } : {},
33
47
  agentCapabilities: immutableProtocolData(value.agentCapabilities ?? {}),
34
48
  authMethods: immutableProtocolData(value.authMethods ?? [])
35
49
  });
@@ -4,6 +4,7 @@ import type { AgentSessionHostBinding, MaybePromise } from '@agen-ai/agent-runti
4
4
  import type { AcpProviderLimits } from './limits.js';
5
5
  import type { AcpStandardMcpServer, AcpUnknownExtensionPolicy } from '@agen-ai/acp-transport';
6
6
  import type { AcpAuthenticationMethods, AcpHostFacilities } from './host/contracts.js';
7
+ import type { AcpPermissionMappingSelection } from './permissions/contracts.js';
7
8
  export type { AcpProviderLimits } from './limits.js';
8
9
  export interface AcpConnectionStreams {
9
10
  readonly stdout: Readable;
@@ -51,6 +52,8 @@ export interface CreateAcpProviderDriverOptions {
51
52
  readonly createConnection: AcpConnectionFactory;
52
53
  /** Defaults to standard handling of unknown optional vendor extensions. */
53
54
  readonly unknownExtensionPolicy?: AcpUnknownExtensionPolicy;
55
+ /** Defaults to once-only choices; complete profiles require independently qualified native semantics. */
56
+ readonly permissionMapping?: AcpPermissionMappingSelection;
54
57
  readonly limits?: Partial<AcpProviderLimits>;
55
58
  readonly configuration?: 'managed' | 'selectable';
56
59
  readonly authentication?: AcpAuthenticationMethods;
package/dist/driver.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type AgentProviderDriver } from '@agen-ai/agent-runtime';
1
+ import type { AgentProviderDriver } from '@agen-ai/agent-runtime';
2
2
  import type { CreateAcpProviderDriverOptions } from './contracts.js';
3
3
  export declare function createAcpProviderDriver(options: CreateAcpProviderDriverOptions): AgentProviderDriver;
4
4
  //# sourceMappingURL=driver.d.ts.map
package/dist/driver.js CHANGED
@@ -1,43 +1,10 @@
1
- import { parseAgentProviderKey } from "@agen-ai/agent-protocol";
2
- import { defineAgentProviderDriver } from "@agen-ai/agent-runtime";
3
- import { parseAcpProviderConfiguration } from "./configuration.js";
4
- import { createAcpProviderInstance } from "./instance.js";
5
- import { resolveAcpProviderLimits } from "./limits.js";
6
- import { resolveAuthenticationMapping } from "./auth/methods.js";
7
- import { resolveHostFacilities } from "./host/validation.js";
8
- import { resolveAcpMcpServers, resolveAcpSessionMcpBinding } from "./mcp.js";
1
+ import { createAcpProviderDriverInternal } from "./driverFactory.js";
9
2
  function createAcpProviderDriver(options) {
10
- const providerKey = parseAgentProviderKey(options.providerKey);
11
- const createConnection = options.createConnection;
12
- if (typeof createConnection !== "function") throw new TypeError("An ACP connection factory is required.");
13
- const unknownExtensionPolicy = options.unknownExtensionPolicy === void 0 ? "standard" : options.unknownExtensionPolicy;
14
- if (unknownExtensionPolicy !== "reject" && unknownExtensionPolicy !== "standard") throw new TypeError("ACP unknown extension policy is invalid.");
15
- const limits = resolveAcpProviderLimits(options.limits);
16
- const configuration = options.configuration ?? "managed";
17
- if (configuration !== "managed" && configuration !== "selectable") throw new TypeError("ACP configuration mode is invalid.");
18
- const authentication = resolveAuthenticationMapping(options.authentication);
19
- const host = resolveHostFacilities(options.host);
20
- const mcpServers = resolveAcpMcpServers(options.mcpServers);
21
- const sessionMcpBinding = resolveAcpSessionMcpBinding(options.sessionMcpBinding);
22
- const usedStreams = /* @__PURE__ */ new WeakSet();
23
- return defineAgentProviderDriver({
24
- providerKey,
25
- supportsMultipleInstances: true,
26
- parseConfiguration: parseAcpProviderConfiguration,
27
- createInstance: ({ instanceId }) => createAcpProviderInstance({
28
- providerKey,
29
- instanceId,
30
- createConnection,
31
- unknownExtensionPolicy,
32
- limits,
33
- usedStreams,
34
- configuration,
35
- authentication,
36
- host,
37
- mcpServers,
38
- ...sessionMcpBinding ? { sessionMcpBinding } : {}
39
- })
40
- });
3
+ if (Object.hasOwn(options, "sessionInteractions")) {
4
+ throw new TypeError("ACP session interaction mappings require the Node provider constructor and its exclusive process ownership.");
5
+ }
6
+ if (Object.hasOwn(options, "executionBoundary")) throw new TypeError("Execution boundaries require the Node provider constructor.");
7
+ return createAcpProviderDriverInternal({ ...options, connectionSource: { kind: "factory", create: options.createConnection } });
41
8
  }
42
9
  export {
43
10
  createAcpProviderDriver
@@ -0,0 +1,8 @@
1
+ import { type AgentProviderDriver } from '@agen-ai/agent-runtime';
2
+ import type { CreateAcpProviderDriverOptions } from './contracts.js';
3
+ import type { AcpSessionInteractionSelection } from './sessionInteractions/contracts.js';
4
+ import type { AcpConnectionSource } from './connection/contracts.js';
5
+ export declare function createAcpProviderDriverInternal(options: Omit<CreateAcpProviderDriverOptions, 'createConnection'> & Readonly<{
6
+ connectionSource: AcpConnectionSource;
7
+ }>, sessionInteractions?: AcpSessionInteractionSelection): AgentProviderDriver;
8
+ //# sourceMappingURL=driverFactory.d.ts.map
@@ -0,0 +1,48 @@
1
+ import { parseAgentProviderKey } from "@agen-ai/agent-protocol";
2
+ import { defineAgentProviderDriver } from "@agen-ai/agent-runtime";
3
+ import { parseAcpProviderConfiguration } from "./configuration.js";
4
+ import { createAcpProviderInstance } from "./instance.js";
5
+ import { resolveAcpProviderLimits } from "./limits.js";
6
+ import { resolveAuthenticationMapping } from "./auth/methods.js";
7
+ import { resolveHostFacilities } from "./host/validation.js";
8
+ import { resolveAcpMcpServers, resolveAcpSessionMcpBinding } from "./mcp.js";
9
+ import { resolveAcpPermissionMapping } from "./permissions/selection.js";
10
+ function createAcpProviderDriverInternal(options, sessionInteractions) {
11
+ const providerKey = parseAgentProviderKey(options.providerKey);
12
+ const connectionSource = options.connectionSource;
13
+ if (connectionSource.kind === "factory" && typeof connectionSource.create !== "function") throw new TypeError("An ACP connection factory is required.");
14
+ const unknownExtensionPolicy = options.unknownExtensionPolicy === void 0 ? "standard" : options.unknownExtensionPolicy;
15
+ if (unknownExtensionPolicy !== "reject" && unknownExtensionPolicy !== "standard") throw new TypeError("ACP unknown extension policy is invalid.");
16
+ const limits = resolveAcpProviderLimits(options.limits);
17
+ const configuration = options.configuration ?? "managed";
18
+ if (configuration !== "managed" && configuration !== "selectable") throw new TypeError("ACP configuration mode is invalid.");
19
+ const authentication = resolveAuthenticationMapping(options.authentication);
20
+ const host = resolveHostFacilities(options.host);
21
+ const mcpServers = resolveAcpMcpServers(options.mcpServers);
22
+ const sessionMcpBinding = resolveAcpSessionMcpBinding(options.sessionMcpBinding);
23
+ const permissionMapping = resolveAcpPermissionMapping(options.permissionMapping);
24
+ const usedStreams = /* @__PURE__ */ new WeakSet();
25
+ return defineAgentProviderDriver({
26
+ providerKey,
27
+ supportsMultipleInstances: true,
28
+ parseConfiguration: parseAcpProviderConfiguration,
29
+ createInstance: ({ instanceId }) => createAcpProviderInstance({
30
+ providerKey,
31
+ instanceId,
32
+ connectionSource,
33
+ unknownExtensionPolicy,
34
+ limits,
35
+ usedStreams,
36
+ configuration,
37
+ authentication,
38
+ host,
39
+ mcpServers,
40
+ permissionMapping,
41
+ ...sessionMcpBinding ? { sessionMcpBinding } : {},
42
+ ...sessionInteractions ? { sessionInteractions } : {}
43
+ })
44
+ });
45
+ }
46
+ export {
47
+ createAcpProviderDriverInternal
48
+ };
@@ -7,7 +7,6 @@ class AcpHostInteractions {
7
7
  this.input = input;
8
8
  this.leases = new AcpHostLeases(input.limits.hostOperationTimeoutMs);
9
9
  }
10
- input;
11
10
  urls = /* @__PURE__ */ new Map();
12
11
  pendingUrls = /* @__PURE__ */ new Map();
13
12
  leases;
@@ -4,7 +4,6 @@ class AcpHostLeases {
4
4
  constructor(timeoutMs) {
5
5
  this.timeoutMs = timeoutMs;
6
6
  }
7
- timeoutMs;
8
7
  entries = /* @__PURE__ */ new Set();
9
8
  used = /* @__PURE__ */ new WeakSet();
10
9
  closed = false;
@@ -11,7 +11,6 @@ class AcpHostRouter {
11
11
  this.interactions = new AcpHostInteractions(input);
12
12
  this.terminals = new AcpHostTerminals(input.host, input.limits);
13
13
  }
14
- input;
15
14
  interactions;
16
15
  terminals;
17
16
  requests = /* @__PURE__ */ new Map();
@@ -8,8 +8,6 @@ class AcpHostTerminals {
8
8
  this.limits = limits;
9
9
  this.leases = new AcpHostLeases(limits.hostOperationTimeoutMs);
10
10
  }
11
- host;
12
- limits;
13
11
  terminals = /* @__PURE__ */ new Map();
14
12
  leases;
15
13
  async request(method, params, session) {
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@ export { createAcpProviderDriver } from './driver.js';
2
2
  export { DEFAULT_ACP_PROVIDER_LIMITS, type AcpProviderLimits } from './limits.js';
3
3
  export { AcpProviderConnectionError } from './connection/errors.js';
4
4
  export { AcpProviderSessionError } from './session/errors.js';
5
+ export type { AcpPermissionOptionSignature, AcpPermissionMenuSignature, AcpPermissionMappingSelection, } from './permissions/contracts.js';
5
6
  export type { AcpConnectionStreams, AcpConnectionLease, AcpConnectionFactoryContext, AcpConnectionFactory, AcpSessionMcpBindingContext, AcpSessionMcpBindingLease, AcpSessionMcpBindingFactory, AcpSessionMcpBindingOptions, CreateAcpProviderDriverOptions, } from './contracts.js';
6
7
  export type { AcpAuthenticationMethods, AcpHostFacilities, AcpHostInteractionScope, AcpHostInteractionInput, AcpHostFormInput, AcpHostFormResponse, AcpHostUrlInput, AcpHostUrlDecision, AcpHostUrlInteractionLease, AcpHostSessionInput, AcpHostFileReadInput, AcpHostFileWriteInput, AcpHostTerminalCreateInput, AcpHostTerminalLease, AcpHostTerminalOutput, AcpHostTerminalExitStatus, AcpHostAuthenticationTerminalInput, AcpHostAuthenticationTerminalLease, } from './host/contracts.js';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1,13 +1,16 @@
1
1
  import { type AgentInstanceId, type AgentProviderKey } from '@agen-ai/agent-protocol';
2
2
  import type { AcpStandardMcpServer, AcpUnknownExtensionPolicy } from '@agen-ai/acp-transport';
3
3
  import { type MaterializedAgentProviderInstance } from '@agen-ai/agent-runtime';
4
- import type { AcpConnectionFactory, AcpSessionMcpBindingOptions } from './contracts.js';
4
+ import type { AcpSessionMcpBindingOptions } from './contracts.js';
5
5
  import type { AcpAuthenticationMethods, AcpHostFacilities } from './host/contracts.js';
6
6
  import type { AcpProviderLimits } from './limits.js';
7
+ import type { AcpConnectionSource } from './connection/contracts.js';
8
+ import type { AcpSessionInteractionSelection } from './sessionInteractions/contracts.js';
9
+ import type { AcpPermissionMappingSelection } from './permissions/contracts.js';
7
10
  export declare function createAcpProviderInstance(input: {
8
11
  readonly providerKey: AgentProviderKey;
9
12
  readonly instanceId: AgentInstanceId;
10
- readonly createConnection: AcpConnectionFactory;
13
+ readonly connectionSource: AcpConnectionSource;
11
14
  readonly unknownExtensionPolicy: AcpUnknownExtensionPolicy;
12
15
  readonly limits: AcpProviderLimits;
13
16
  readonly usedStreams: WeakSet<object>;
@@ -15,6 +18,8 @@ export declare function createAcpProviderInstance(input: {
15
18
  readonly authentication: AcpAuthenticationMethods;
16
19
  readonly host: AcpHostFacilities;
17
20
  readonly mcpServers: readonly AcpStandardMcpServer[];
21
+ readonly permissionMapping: AcpPermissionMappingSelection;
18
22
  readonly sessionMcpBinding?: AcpSessionMcpBindingOptions;
23
+ readonly sessionInteractions?: AcpSessionInteractionSelection;
19
24
  }): Promise<MaterializedAgentProviderInstance>;
20
25
  //# sourceMappingURL=instance.d.ts.map