@automatalabs/acp-agents 0.19.1 → 0.20.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.
- package/dist/acp-client.d.ts.map +1 -1
- package/dist/acp-client.js +34 -5
- package/dist/backend.d.ts +8 -4
- package/dist/backend.d.ts.map +1 -1
- package/dist/backends/custom.d.ts +1 -0
- package/dist/backends/custom.d.ts.map +1 -1
- package/dist/backends/custom.js +1 -0
- package/dist/backends/opencode.d.ts +13 -0
- package/dist/backends/opencode.d.ts.map +1 -0
- package/dist/backends/opencode.js +56 -0
- package/dist/events.d.ts +1 -1
- package/dist/events.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/prompt.js +1 -1
- package/dist/registry.js +4 -4
- package/dist/runner.d.ts +8 -2
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +83 -33
- package/package.json +1 -1
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":"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
|
|
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
|
@@ -541,6 +541,17 @@ function assertSafeRawRequest(method) {
|
|
|
541
541
|
function modeIds(modes) {
|
|
542
542
|
return modes?.availableModes.map((mode) => mode.id) ?? [];
|
|
543
543
|
}
|
|
544
|
+
function modeStateFromConfigOption(option, currentModeId) {
|
|
545
|
+
return {
|
|
546
|
+
currentModeId,
|
|
547
|
+
availableModes: flattenSelectOptions(option.options).map((value) => ({
|
|
548
|
+
id: value.value,
|
|
549
|
+
name: value.name,
|
|
550
|
+
...(value.description !== undefined ? { description: value.description } : {}),
|
|
551
|
+
...(value._meta !== undefined ? { _meta: value._meta } : {}),
|
|
552
|
+
})),
|
|
553
|
+
};
|
|
554
|
+
}
|
|
544
555
|
function modeSelectionError(backendId, requested, advertisedIds, label, cause) {
|
|
545
556
|
const advertised = advertisedIds.length > 0 ? advertisedIds.join(", ") : "none";
|
|
546
557
|
const suffix = cause ? `: ${thrownMessage(cause)}` : "";
|
|
@@ -1308,16 +1319,31 @@ export class SessionHandle {
|
|
|
1308
1319
|
async setMode(modeId) {
|
|
1309
1320
|
const modes = this.state.modes;
|
|
1310
1321
|
const ids = modeIds(modes);
|
|
1311
|
-
if (
|
|
1312
|
-
|
|
1322
|
+
if (modes) {
|
|
1323
|
+
if (!ids.includes(modeId)) {
|
|
1324
|
+
throw modeSelectionError(this.pooled.backendId, modeId, ids, this.opts.label);
|
|
1325
|
+
}
|
|
1326
|
+
try {
|
|
1327
|
+
await this.pooled.setSessionMode({ sessionId: this.sessionId, modeId });
|
|
1328
|
+
}
|
|
1329
|
+
catch (error) {
|
|
1330
|
+
throw modeSelectionError(this.pooled.backendId, modeId, ids, this.opts.label, error);
|
|
1331
|
+
}
|
|
1332
|
+
this.state.modes = { ...modes, currentModeId: modeId };
|
|
1333
|
+
return;
|
|
1334
|
+
}
|
|
1335
|
+
const modeOption = this.configOptions.find(isModeConfigOption);
|
|
1336
|
+
const configModeIds = modeOption ? flattenSelectOptions(modeOption.options).map((mode) => mode.value) : [];
|
|
1337
|
+
if (!modeOption || !configModeIds.includes(modeId)) {
|
|
1338
|
+
throw modeSelectionError(this.pooled.backendId, modeId, configModeIds, this.opts.label);
|
|
1313
1339
|
}
|
|
1314
1340
|
try {
|
|
1315
|
-
await this.
|
|
1341
|
+
await this.applyConfigOption(modeOption.id, modeId);
|
|
1316
1342
|
}
|
|
1317
1343
|
catch (error) {
|
|
1318
|
-
throw modeSelectionError(this.pooled.backendId, modeId,
|
|
1344
|
+
throw modeSelectionError(this.pooled.backendId, modeId, configModeIds, this.opts.label, error);
|
|
1319
1345
|
}
|
|
1320
|
-
this.state.modes =
|
|
1346
|
+
this.state.modes = modeStateFromConfigOption(modeOption, modeId);
|
|
1321
1347
|
}
|
|
1322
1348
|
/** Send a prompt turn and drain it; returns the final PromptResponse. */
|
|
1323
1349
|
async prompt(content, promptMeta) {
|
|
@@ -1380,6 +1406,9 @@ function isModelSelectOption(option) {
|
|
|
1380
1406
|
function isReasoningEffortOption(option) {
|
|
1381
1407
|
return option.type === "select" && (option.id === "reasoning_effort" || option.category === "thought_level");
|
|
1382
1408
|
}
|
|
1409
|
+
function isModeConfigOption(option) {
|
|
1410
|
+
return option.type === "select" && (option.id === "mode" || option.category === "mode");
|
|
1411
|
+
}
|
|
1383
1412
|
/** Fast mode is matched by its stable id (upstream codex-acp moved the category to
|
|
1384
1413
|
* "model_config"; the legacy category match is kept for older agents). Both the
|
|
1385
1414
|
* `type: "boolean"` and the legacy on/off select shapes qualify — the caller branches
|
package/dist/backend.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { TSchema } from "typebox";
|
|
2
|
-
/** The
|
|
3
|
-
export type BuiltinBackendId = "claude" | "codex";
|
|
2
|
+
/** The built-in backends. Custom registry backends extend the id space beyond these. */
|
|
3
|
+
export type BuiltinBackendId = "claude" | "codex" | "opencode";
|
|
4
4
|
/** A backend id: one of the built-ins, or the registered name of a custom ACP backend
|
|
5
5
|
* (see registry.ts). The pool keys connections by this id, so ids must be stable. */
|
|
6
6
|
export type BackendId = string;
|
|
@@ -31,9 +31,13 @@ export interface Backend {
|
|
|
31
31
|
* with DIFFERENT commands (script-declared `meta.backends`): keying the pool by name alone
|
|
32
32
|
* would hand run B a pooled process spawned from run A's command. */
|
|
33
33
|
readonly poolKey?: string;
|
|
34
|
+
/** When true, `model:"id/inner"` uses `id` only for backend routing and sends `inner` to
|
|
35
|
+
* the agent's model catalog. Custom backends and OpenCode need this; Claude/Codex provider
|
|
36
|
+
* specs pass through whole. */
|
|
37
|
+
readonly stripsRoutingPrefix?: boolean;
|
|
34
38
|
/** When true, the runner EMBEDS the JSON Schema in the prompt text on schema runs. For the
|
|
35
|
-
* built-ins the native constraint channel is authoritative and this stays unset; a
|
|
36
|
-
* backend sets it because its agent may ignore the `_meta.outputSchema` forward entirely —
|
|
39
|
+
* native built-ins the native constraint channel is authoritative and this stays unset; a
|
|
40
|
+
* generic backend sets it because its agent may ignore the `_meta.outputSchema` forward entirely —
|
|
37
41
|
* without the schema in the prompt, such an agent returns well-formed JSON with the WRONG
|
|
38
42
|
* KEYS and the repair ladder can never converge (it can fix prose, not unseen contracts). */
|
|
39
43
|
readonly embedSchemaInPrompt?: boolean;
|
package/dist/backend.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,wFAAwF;AACxF,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;AAC/D;sFACsF;AACtF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAED,8FAA8F;AAC9F,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,eAAe,IAAI,MAAM,CAAC;IAC1B,uGAAuG;IACvG,mBAAmB,IAAI,OAAO,CAAC;CAChC;AAED;+EAC+E;AAC/E,MAAM,WAAW,iBAAiB;IAChC,yFAAyF;IACzF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sFAAsF;IACtF,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACvB;;;0EAGsE;IACtE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;oCAEgC;IAChC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC;;;;kGAI8F;IAC9F,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC;;qFAEiF;IACjF,QAAQ,CAAC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAC9C;;sFAEkF;IAClF,QAAQ,CAAC,kBAAkB,CAAC,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC;IACpG,0DAA0D;IAC1D,WAAW,IAAI,WAAW,CAAC;IAC3B;;sEAEkE;IAClE,mBAAmB,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC5D;;;mGAG+F;IAC/F,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC1G,kGAAkG;IAClG,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC7E,oGAAoG;IACpG,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC;CACrD;AAED,6FAA6F;AAC7F,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAE7D"}
|
|
@@ -4,6 +4,7 @@ import type { RegisteredBackend } from "../registry.js";
|
|
|
4
4
|
export declare class CustomAcpBackend implements Backend {
|
|
5
5
|
private readonly config;
|
|
6
6
|
readonly id: string;
|
|
7
|
+
readonly stripsRoutingPrefix = true;
|
|
7
8
|
/** id + spawn-config hash: two registries (e.g. two scripts' `meta.backends`) may declare
|
|
8
9
|
* the SAME name with DIFFERENT commands — the pool must never share a process across them. */
|
|
9
10
|
readonly poolKey: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../src/backends/custom.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAIxD,qBAAa,gBAAiB,YAAW,OAAO;
|
|
1
|
+
{"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../src/backends/custom.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAIxD,qBAAa,gBAAiB,YAAW,OAAO;IAalC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAZnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,mBAAmB,QAAQ;IACpC;mGAC+F;IAC/F,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;oFAEgF;IAChF,QAAQ,CAAC,mBAAmB,QAAQ;IACpC,QAAQ,CAAC,0BAA0B,EAAE,OAAO,CAAC;IAC7C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBAE5C,MAAM,EAAE,iBAAiB;IAYtD,WAAW,IAAI,WAAW;IAS1B,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAQ1D,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAM9E,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAQ5E,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO;CAGpD"}
|
package/dist/backends/custom.js
CHANGED
|
@@ -20,6 +20,7 @@ import { parseFinalJson } from "../structured-output.js";
|
|
|
20
20
|
export class CustomAcpBackend {
|
|
21
21
|
config;
|
|
22
22
|
id;
|
|
23
|
+
stripsRoutingPrefix = true;
|
|
23
24
|
/** id + spawn-config hash: two registries (e.g. two scripts' `meta.backends`) may declare
|
|
24
25
|
* the SAME name with DIFFERENT commands — the pool must never share a process across them. */
|
|
25
26
|
poolKey;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { TSchema } from "typebox";
|
|
2
|
+
import type { Backend, SpawnConfig, StructuredSource } from "../backend.js";
|
|
3
|
+
export declare class OpenCodeBackend implements Backend {
|
|
4
|
+
readonly id: "opencode";
|
|
5
|
+
readonly stripsRoutingPrefix = true;
|
|
6
|
+
readonly embedSchemaInPrompt = true;
|
|
7
|
+
readonly injectStructuredOutputTool = true;
|
|
8
|
+
spawnConfig(): SpawnConfig;
|
|
9
|
+
sessionMeta(): Record<string, unknown> | undefined;
|
|
10
|
+
promptMeta(schema: TSchema | undefined): Record<string, unknown> | undefined;
|
|
11
|
+
nativeStructured(source: StructuredSource): unknown;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=opencode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../src/backends/opencode.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAO5E,qBAAa,eAAgB,YAAW,OAAO;IAC7C,QAAQ,CAAC,EAAE,EAAG,UAAU,CAAU;IAClC,QAAQ,CAAC,mBAAmB,QAAQ;IACpC,QAAQ,CAAC,mBAAmB,QAAQ;IACpC,QAAQ,CAAC,0BAA0B,QAAQ;IAE3C,WAAW,IAAI,WAAW;IAW1B,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAKlD,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAO5E,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO;CAGpD"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// OpenCodeBackend — drives the OpenCode ACP server (`opencode acp`). OpenCode does not expose
|
|
2
|
+
// a native structured-output result channel and ignores request._meta today, so the backend uses
|
|
3
|
+
// the repo's generic schema dialect plus prompt embedding. When OpenCode advertises HTTP MCP, the
|
|
4
|
+
// runner can also inject the client-hosted StructuredOutput MCP tool.
|
|
5
|
+
import { dirname, join } from "node:path";
|
|
6
|
+
import { createRequire } from "node:module";
|
|
7
|
+
import { META_KEYS } from "@automatalabs/shared-types";
|
|
8
|
+
import { splitArgs } from "../backend.js";
|
|
9
|
+
import { toJsonSchema } from "../schema-strict.js";
|
|
10
|
+
import { parseFinalJson } from "../structured-output.js";
|
|
11
|
+
const require = createRequire(import.meta.url);
|
|
12
|
+
export class OpenCodeBackend {
|
|
13
|
+
id = "opencode";
|
|
14
|
+
stripsRoutingPrefix = true;
|
|
15
|
+
embedSchemaInPrompt = true;
|
|
16
|
+
injectStructuredOutputTool = true;
|
|
17
|
+
spawnConfig() {
|
|
18
|
+
const env = process.env;
|
|
19
|
+
const override = env.AGENTPRISM_OPENCODE_ACP_CMD;
|
|
20
|
+
if (override) {
|
|
21
|
+
return { command: override, args: splitArgs(env.AGENTPRISM_OPENCODE_ACP_ARGS), env };
|
|
22
|
+
}
|
|
23
|
+
const bin = resolveOpenCodePackageBin();
|
|
24
|
+
return { command: bin ?? "opencode", args: ["acp"], env };
|
|
25
|
+
}
|
|
26
|
+
sessionMeta() {
|
|
27
|
+
// OpenCode ignores session _meta today; there is no protocol-critical session channel.
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
promptMeta(schema) {
|
|
31
|
+
if (!schema)
|
|
32
|
+
return undefined;
|
|
33
|
+
// Plain JSON Schema in the repo's generic dialect. OpenCode ignores it today, but forwarding
|
|
34
|
+
// is harmless and keeps the backend ready if it starts honoring this extension.
|
|
35
|
+
return { [META_KEYS.outputSchema]: toJsonSchema(schema) };
|
|
36
|
+
}
|
|
37
|
+
nativeStructured(source) {
|
|
38
|
+
return parseFinalJson(source.currentTurnText());
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function resolveOpenCodePackageBin() {
|
|
42
|
+
try {
|
|
43
|
+
return require.resolve("opencode-ai/bin/opencode");
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// The package may block direct bin subpath resolution through exports; fall back to the
|
|
47
|
+
// package root plus its documented bin entry.
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const packageJson = require.resolve("opencode-ai/package.json");
|
|
51
|
+
return join(dirname(packageJson), "bin", "opencode");
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
}
|
package/dist/events.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export type AcpUpdateKind = AcpSessionUpdate["sessionUpdate"];
|
|
|
9
9
|
export interface AcpEventContext {
|
|
10
10
|
/** ACP session id this event pertains to. */
|
|
11
11
|
sessionId: string;
|
|
12
|
-
/** Backend that produced it ("claude" | "codex"). */
|
|
12
|
+
/** Backend that produced it ("claude" | "codex" | "opencode" | custom name). */
|
|
13
13
|
backendId: BackendId;
|
|
14
14
|
/** `RunOptions.label` of the originating run(), if one was set. */
|
|
15
15
|
label?: string;
|
package/dist/events.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,+BAA+B,EAC/B,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,+FAA+F;AAC/F,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AAC7D,qGAAqG;AACrG,MAAM,MAAM,aAAa,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;AAE9D;oGACoG;AACpG,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ export type { AcpRunnerEventMap, AcpEventName, AcpEventListener, AcpEventContext
|
|
|
21
21
|
export type { Backend, BackendId, BuiltinBackendId, SessionMetaInputs, SpawnConfig, StructuredSource, } from "./backend.js";
|
|
22
22
|
export { ClaudeBackend } from "./backends/claude.js";
|
|
23
23
|
export { CodexBackend } from "./backends/codex.js";
|
|
24
|
+
export { OpenCodeBackend } from "./backends/opencode.js";
|
|
24
25
|
export { CustomAcpBackend } from "./backends/custom.js";
|
|
25
26
|
export { decidePermission } from "./permissions.js";
|
|
26
27
|
export type { ElicitationResolver, PermissionResolver, ToolPolicy } from "./permissions.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
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,EACV,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,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,qBAAqB,EACrB,kBAAkB,EAClB,0BAA0B,EAC1B,6BAA6B,EAC7B,gBAAgB,EAChB,UAAU,EACV,mBAAmB,EACnB,oBAAoB,EACpB,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,+BAA+B,EAC/B,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,EACnB,aAAa,EACb,yBAAyB,EACzB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,eAAe,EACf,YAAY,EACZ,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,UAAU,EACV,YAAY,EACZ,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACpB,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,EACV,iBAAiB,EACjB,uBAAuB,EACvB,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAG9B,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,2BAA2B,EAC3B,mBAAmB,EACnB,0BAA0B,EAC1B,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,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAEtF,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,4BAA4B,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC1F,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// @automatalabs/acp-agents — implements the AgentRunner seam from @automatalabs/shared-types over
|
|
2
2
|
// the Agent Client Protocol. It spawns claude-agent-acp / the installed npm dep @automatalabs/codex-acp
|
|
3
3
|
// (a published fork of @agentclientprotocol/codex-acp with the outputSchema forward baked into its
|
|
4
|
-
// dist) as child processes and drives one subagent run to completion. It NEVER imports
|
|
4
|
+
// dist) / OpenCode's `opencode acp` as child processes and drives one subagent run to completion. It NEVER imports
|
|
5
5
|
// @automatalabs/workflow-engine; the two siblings meet ONLY at AgentRunner, injected by the
|
|
6
6
|
// @automatalabs/workflows facade (which mcp-server builds on) via createAcpRunner().
|
|
7
7
|
export { AcpAgentRunner, createAcpRunner, selectBackend } from "./runner.js";
|
|
@@ -22,6 +22,7 @@ export { clientCapabilitiesFor } from "./client-handlers.js";
|
|
|
22
22
|
export { ACP_CROSS_CUTTING_EVENT_NAMES, TypedEventEmitter, emitSessionUpdate } from "./events.js";
|
|
23
23
|
export { ClaudeBackend } from "./backends/claude.js";
|
|
24
24
|
export { CodexBackend } from "./backends/codex.js";
|
|
25
|
+
export { OpenCodeBackend } from "./backends/opencode.js";
|
|
25
26
|
export { CustomAcpBackend } from "./backends/custom.js";
|
|
26
27
|
export { decidePermission } from "./permissions.js";
|
|
27
28
|
export { UsageAccumulator } from "./usage.js";
|
package/dist/prompt.js
CHANGED
|
@@ -13,7 +13,7 @@ export function buildRunPrompt(prompt, opts, schema, backend, structuredToolActi
|
|
|
13
13
|
if (structuredToolActive) {
|
|
14
14
|
parts.push([
|
|
15
15
|
"Final output contract:",
|
|
16
|
-
"- You have been provided an MCP tool named StructuredOutput (it may appear namespaced by its server, e.g.
|
|
16
|
+
"- You have been provided an MCP tool named StructuredOutput (it may appear namespaced by its MCP server name, e.g. structured_output_xxxx_StructuredOutput).",
|
|
17
17
|
"- You MUST call it exactly once with your final answer as its arguments; its parameter schema defines the required output shape.",
|
|
18
18
|
"- Complete all necessary research and tool calls BEFORE calling it.",
|
|
19
19
|
"- Do NOT emit your final answer as plain text.",
|
package/dist/registry.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// The custom-backend REGISTRY — lets any ACP agent plug in as an agent() target, not just the
|
|
2
|
-
// built-in
|
|
2
|
+
// built-in backends. A registered backend is (name -> how to spawn it + optional static
|
|
3
3
|
// session `_meta`), resolved once at runner construction from:
|
|
4
4
|
// 1. the programmatic option: createAcpRunner({ backends: { name: config } }) (wins per name)
|
|
5
5
|
// 2. the env var AGENTPRISM_BACKENDS: a JSON object of the same shape
|
|
6
6
|
// Routing then matches `model`/`tier` specs against registered names FIRST (exact name, or
|
|
7
|
-
// `name/<inner-model>` prefix), before the built-in
|
|
8
|
-
// Names are case-insensitive (stored lowercased);
|
|
7
|
+
// `name/<inner-model>` prefix), before the built-in heuristics — see runner.ts.
|
|
8
|
+
// Names are case-insensitive (stored lowercased); built-in ids are reserved because the
|
|
9
9
|
// built-ins own their ids (and their own AGENTPRISM_*_ACP_CMD override channel).
|
|
10
10
|
export const BACKENDS_ENV = "AGENTPRISM_BACKENDS";
|
|
11
|
-
const RESERVED_NAMES = new Set(["claude", "codex"]);
|
|
11
|
+
const RESERVED_NAMES = new Set(["claude", "codex", "opencode"]);
|
|
12
12
|
const NAME_PATTERN = /^[a-z][a-z0-9._-]*$/;
|
|
13
13
|
/**
|
|
14
14
|
* Resolve the custom-backend registry: env-declared backends first, programmatic `backends`
|
package/dist/runner.d.ts
CHANGED
|
@@ -77,7 +77,7 @@ export interface ReattachSessionOptions extends InteractiveSessionOptions {
|
|
|
77
77
|
* registry. `backends` merges over (and wins against) env-declared AGENTPRISM_BACKENDS entries. */
|
|
78
78
|
export interface AcpRunnerOptions extends AcpPoolOptions {
|
|
79
79
|
/** Custom ACP backends, keyed by registered name (see registry.ts for the config shape
|
|
80
|
-
* and the routing rules). Names are case-insensitive;
|
|
80
|
+
* and the routing rules). Names are case-insensitive; built-in ids are reserved. */
|
|
81
81
|
backends?: Record<string, CustomBackendConfig>;
|
|
82
82
|
/** Runner-wide human-in-the-loop permission resolver. When set, it replaces ToolPolicy
|
|
83
83
|
* auto-decisions for every session that does not provide its own resolver. */
|
|
@@ -106,6 +106,9 @@ export declare class AcpAgentRunner implements AgentRunner {
|
|
|
106
106
|
private readonly permissionResolver;
|
|
107
107
|
private readonly elicitationResolver;
|
|
108
108
|
private readonly structuredOutputTools;
|
|
109
|
+
/** FIFO turn queue per pooled connection for injected-tool schema runs (see the injection
|
|
110
|
+
* site for why concurrent injected sessions on one process cannot be isolated). */
|
|
111
|
+
private readonly structuredToolTurns;
|
|
109
112
|
/** Held-open interactive sessions own dedicated ACP processes outside the pool. The runner
|
|
110
113
|
* tracks their connections so dispose() can release them and the process-exit hook can
|
|
111
114
|
* synchronously kill any dedicated children if the host exits without release(). */
|
|
@@ -161,6 +164,9 @@ export declare class AcpAgentRunner implements AgentRunner {
|
|
|
161
164
|
run<S extends TSchema | undefined = undefined>(prompt: string, options?: RunOptions<S>): Promise<AgentResult<S>>;
|
|
162
165
|
/** Tear down the whole pool (close every long-lived process). Call when the run ends / the
|
|
163
166
|
* runner is disposed. Beyond the AgentRunner seam (additive) — never enters the resume hash. */
|
|
167
|
+
/** Await the connection's current injected-run chain and append this run's turn. The
|
|
168
|
+
* returned release MUST be called (run finally) or the connection's schema runs starve. */
|
|
169
|
+
private acquireStructuredToolTurn;
|
|
164
170
|
dispose(): Promise<void>;
|
|
165
171
|
[Symbol.asyncDispose](): Promise<void>;
|
|
166
172
|
private createInteractiveSession;
|
|
@@ -180,7 +186,7 @@ export declare class AcpAgentRunner implements AgentRunner {
|
|
|
180
186
|
export declare function createAcpRunner(options?: AcpRunnerOptions): AcpAgentRunner;
|
|
181
187
|
/** Pick the backend by model/tier. Cross-provider routing = which ACP server to spawn.
|
|
182
188
|
* Registered CUSTOM names resolve FIRST (exact name, or `name/<inner-model>` prefix) so a
|
|
183
|
-
* registry entry is never shadowed by the built-in heuristics; then the
|
|
189
|
+
* registry entry is never shadowed by the built-in heuristics; then the built-in
|
|
184
190
|
* heuristics; then the default backend (AGENTPRISM_DEFAULT_BACKEND — which may itself name
|
|
185
191
|
* a registered custom backend). */
|
|
186
192
|
export declare function selectBackend(opts: {
|
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;AACpC,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,UAAU,EAEV,sBAAsB,EACtB,uBAAuB,EAEvB,qBAAqB,EAErB,oBAAoB,EAEpB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,0BAA0B,CAAC;AAClC,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,
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
package/dist/runner.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// AcpAgentRunner — the AgentRunner seam implementation (the LEAF the engine injects against).
|
|
2
|
-
// One method,
|
|
2
|
+
// One method, backend strategies behind it. Per run():
|
|
3
3
|
// 1. pick the backend by model/tier (cross-provider routing = which ACP server to spawn)
|
|
4
4
|
// 2. ACQUIRE a pooled connection + session/new { cwd } (per-session cwd = worktree isolation;
|
|
5
5
|
// the PROCESS is pool-managed and REUSED across runs — never spawned/killed per run)
|
|
@@ -24,6 +24,7 @@ import { TypedEventEmitter, } from "./events.js";
|
|
|
24
24
|
import { InteractiveSession } from "./interactive.js";
|
|
25
25
|
import { ClaudeBackend } from "./backends/claude.js";
|
|
26
26
|
import { CodexBackend } from "./backends/codex.js";
|
|
27
|
+
import { OpenCodeBackend } from "./backends/opencode.js";
|
|
27
28
|
import { CustomAcpBackend } from "./backends/custom.js";
|
|
28
29
|
import { registryWithRunBackends, resolveBackendRegistry, } from "./registry.js";
|
|
29
30
|
import { mapThrownError } from "./errors-map.js";
|
|
@@ -51,6 +52,9 @@ export class AcpAgentRunner {
|
|
|
51
52
|
permissionResolver;
|
|
52
53
|
elicitationResolver;
|
|
53
54
|
structuredOutputTools = new StructuredOutputToolHost();
|
|
55
|
+
/** FIFO turn queue per pooled connection for injected-tool schema runs (see the injection
|
|
56
|
+
* site for why concurrent injected sessions on one process cannot be isolated). */
|
|
57
|
+
structuredToolTurns = new WeakMap();
|
|
54
58
|
/** Held-open interactive sessions own dedicated ACP processes outside the pool. The runner
|
|
55
59
|
* tracks their connections so dispose() can release them and the process-exit hook can
|
|
56
60
|
* synchronously kill any dedicated children if the host exits without release(). */
|
|
@@ -322,10 +326,21 @@ export class AcpAgentRunner {
|
|
|
322
326
|
let session;
|
|
323
327
|
let structuredTool;
|
|
324
328
|
let structuredToolActive = false;
|
|
329
|
+
let releaseStructuredToolTurn;
|
|
325
330
|
try {
|
|
326
331
|
session = await this.pool.acquirePrepared(prepared.backend, async (connection) => {
|
|
327
332
|
let sessionOptions = prepared.sessionOptions;
|
|
328
333
|
if (shouldInjectStructuredOutputTool(schema, prepared.backend, connection.capabilities)) {
|
|
334
|
+
// Injected runs are SERIALIZED per connection, and the server name stays CONSTANT.
|
|
335
|
+
// Agents with instance-global, name-keyed MCP registries (OpenCode) expose every
|
|
336
|
+
// registered tool to EVERY session on the process, so concurrent same-named
|
|
337
|
+
// registrations collide and concurrent unique-named ones are cross-visible — either
|
|
338
|
+
// way one session's model can call another session's tool and leak its capture.
|
|
339
|
+
// Same-name registration REPLACES the previous entry; holding this per-connection
|
|
340
|
+
// turn for the whole run guarantees the single live registration belongs to the
|
|
341
|
+
// active session. Scale schema-run parallelism with pool size (one registry per
|
|
342
|
+
// process), not sessions.
|
|
343
|
+
releaseStructuredToolTurn = await this.acquireStructuredToolTurn(connection);
|
|
329
344
|
structuredTool = await this.structuredOutputTools.register(schema);
|
|
330
345
|
structuredToolActive = true;
|
|
331
346
|
sessionOptions = {
|
|
@@ -334,7 +349,7 @@ export class AcpAgentRunner {
|
|
|
334
349
|
...(sessionOptions.mcpServers ?? []),
|
|
335
350
|
{
|
|
336
351
|
type: "http",
|
|
337
|
-
name:
|
|
352
|
+
name: availableMcpServerName(STRUCTURED_OUTPUT_SERVER_NAME, sessionOptions.mcpServers),
|
|
338
353
|
url: structuredTool.url,
|
|
339
354
|
headers: [],
|
|
340
355
|
},
|
|
@@ -403,33 +418,52 @@ export class AcpAgentRunner {
|
|
|
403
418
|
});
|
|
404
419
|
}
|
|
405
420
|
finally {
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
421
|
+
try {
|
|
422
|
+
structuredTool?.release();
|
|
423
|
+
if (session) {
|
|
424
|
+
// Read real usage on BOTH success and error so partial usage is never lost.
|
|
425
|
+
try {
|
|
426
|
+
opts.onUsage?.(session.usage.toAgentUsage());
|
|
427
|
+
}
|
|
428
|
+
catch {
|
|
429
|
+
// usage is best-effort; never let it mask the real result/error.
|
|
430
|
+
}
|
|
431
|
+
try {
|
|
432
|
+
opts.onHistory?.(session.history);
|
|
433
|
+
}
|
|
434
|
+
catch {
|
|
435
|
+
// history is diagnostic only.
|
|
436
|
+
}
|
|
437
|
+
// Release the SESSION (best-effort session/close) WITHOUT killing the pooled process.
|
|
438
|
+
try {
|
|
439
|
+
await session.release();
|
|
440
|
+
}
|
|
441
|
+
catch {
|
|
442
|
+
// release is best-effort (session already untracked); never mask the real result/error.
|
|
443
|
+
}
|
|
427
444
|
}
|
|
428
445
|
}
|
|
446
|
+
finally {
|
|
447
|
+
// The injected-tool turn spans the WHOLE run incl. session close, so the next queued
|
|
448
|
+
// schema run's session/new (same-name registry replacement) never overlaps this one.
|
|
449
|
+
releaseStructuredToolTurn?.();
|
|
450
|
+
}
|
|
429
451
|
}
|
|
430
452
|
}
|
|
431
453
|
/** Tear down the whole pool (close every long-lived process). Call when the run ends / the
|
|
432
454
|
* runner is disposed. Beyond the AgentRunner seam (additive) — never enters the resume hash. */
|
|
455
|
+
/** Await the connection's current injected-run chain and append this run's turn. The
|
|
456
|
+
* returned release MUST be called (run finally) or the connection's schema runs starve. */
|
|
457
|
+
async acquireStructuredToolTurn(connection) {
|
|
458
|
+
const previous = this.structuredToolTurns.get(connection) ?? Promise.resolve();
|
|
459
|
+
let release;
|
|
460
|
+
const turn = new Promise((resolve) => {
|
|
461
|
+
release = resolve;
|
|
462
|
+
});
|
|
463
|
+
this.structuredToolTurns.set(connection, previous.then(() => turn));
|
|
464
|
+
await previous;
|
|
465
|
+
return release;
|
|
466
|
+
}
|
|
433
467
|
async dispose() {
|
|
434
468
|
this.disposed = true;
|
|
435
469
|
this.removeExitHook();
|
|
@@ -615,12 +649,12 @@ function shouldInjectStructuredOutputTool(schema, backend, capabilities) {
|
|
|
615
649
|
function supportsStructuredOutputToolTransport(capabilities) {
|
|
616
650
|
return capabilities?.agent.mcpCapabilities?.http === true;
|
|
617
651
|
}
|
|
618
|
-
function
|
|
652
|
+
function availableMcpServerName(base, servers) {
|
|
619
653
|
const used = new Set((servers ?? []).map((server) => server.name));
|
|
620
|
-
let candidate =
|
|
654
|
+
let candidate = base;
|
|
621
655
|
let suffix = 2;
|
|
622
656
|
while (used.has(candidate)) {
|
|
623
|
-
candidate = `${
|
|
657
|
+
candidate = `${base}_${suffix}`;
|
|
624
658
|
suffix += 1;
|
|
625
659
|
}
|
|
626
660
|
return candidate;
|
|
@@ -643,7 +677,7 @@ async function applyModelSelection(session, spec, opts) {
|
|
|
643
677
|
}
|
|
644
678
|
/** Pick the backend by model/tier. Cross-provider routing = which ACP server to spawn.
|
|
645
679
|
* Registered CUSTOM names resolve FIRST (exact name, or `name/<inner-model>` prefix) so a
|
|
646
|
-
* registry entry is never shadowed by the built-in heuristics; then the
|
|
680
|
+
* registry entry is never shadowed by the built-in heuristics; then the built-in
|
|
647
681
|
* heuristics; then the default backend (AGENTPRISM_DEFAULT_BACKEND — which may itself name
|
|
648
682
|
* a registered custom backend). */
|
|
649
683
|
export function selectBackend(opts, registry) {
|
|
@@ -653,7 +687,17 @@ export function selectBackend(opts, registry) {
|
|
|
653
687
|
const id = backendIdForSpec(opts.model) ?? backendIdForSpec(opts.tier) ?? defaultBackendId(registry);
|
|
654
688
|
if (typeof id !== "string")
|
|
655
689
|
return id; // the default resolved to a registered custom backend
|
|
656
|
-
return id
|
|
690
|
+
return builtinBackend(id);
|
|
691
|
+
}
|
|
692
|
+
function builtinBackend(id) {
|
|
693
|
+
switch (id) {
|
|
694
|
+
case "claude":
|
|
695
|
+
return new ClaudeBackend();
|
|
696
|
+
case "codex":
|
|
697
|
+
return new CodexBackend();
|
|
698
|
+
case "opencode":
|
|
699
|
+
return new OpenCodeBackend();
|
|
700
|
+
}
|
|
657
701
|
}
|
|
658
702
|
/** Match a model/tier spec against the registry: the whole spec, or its `<name>/` prefix. */
|
|
659
703
|
function customBackendForSpec(spec, registry) {
|
|
@@ -665,12 +709,12 @@ function customBackendForSpec(spec, registry) {
|
|
|
665
709
|
const config = registry.get(name);
|
|
666
710
|
return config ? new CustomAcpBackend(config) : undefined;
|
|
667
711
|
}
|
|
668
|
-
/** Strip a
|
|
669
|
-
* inner model; `"name/foo"` selects `"foo"`.
|
|
670
|
-
*
|
|
671
|
-
*
|
|
712
|
+
/** Strip a routing backend's name off the model/tier spec: the spec `"name"` selects no
|
|
713
|
+
* inner model; `"name/foo"` selects `"foo"`. Claude/Codex receive the spec unchanged, and a
|
|
714
|
+
* spec that reached a custom DEFAULT backend without naming it also passes through (the agent's
|
|
715
|
+
* own catalog may know it). */
|
|
672
716
|
function innerModelSpec(spec, backend) {
|
|
673
|
-
if (!spec || !
|
|
717
|
+
if (!spec || !backend.stripsRoutingPrefix)
|
|
674
718
|
return spec;
|
|
675
719
|
const lower = spec.toLowerCase();
|
|
676
720
|
if (lower === backend.id)
|
|
@@ -713,11 +757,15 @@ function backendIdForSpec(spec) {
|
|
|
713
757
|
const lower = spec.toLowerCase();
|
|
714
758
|
const slash = lower.indexOf("/");
|
|
715
759
|
const provider = slash > 0 ? lower.slice(0, slash) : "";
|
|
760
|
+
if (provider === "opencode")
|
|
761
|
+
return "opencode";
|
|
716
762
|
if (provider === "openai" || provider === "codex")
|
|
717
763
|
return "codex";
|
|
718
764
|
if (provider === "anthropic" || provider === "claude")
|
|
719
765
|
return "claude";
|
|
720
766
|
const id = slash > 0 ? lower.slice(slash + 1) : lower;
|
|
767
|
+
if (id === "opencode")
|
|
768
|
+
return "opencode";
|
|
721
769
|
if (/codex|gpt|openai|\bo\d/.test(id))
|
|
722
770
|
return "codex";
|
|
723
771
|
if (/claude|opus|sonnet|haiku|anthropic/.test(id))
|
|
@@ -733,5 +781,7 @@ function defaultBackendId(registry) {
|
|
|
733
781
|
if (config)
|
|
734
782
|
return new CustomAcpBackend(config);
|
|
735
783
|
}
|
|
784
|
+
if (name === "opencode")
|
|
785
|
+
return "opencode";
|
|
736
786
|
return name === "codex" ? "codex" : "claude";
|
|
737
787
|
}
|