@xenosystem/acp-agent 0.1.1 → 0.2.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/acpAgentServer.d.ts.map +1 -1
- package/dist/acpAgentServer.js +56 -0
- package/dist/acpAgentServer.js.map +1 -1
- package/dist/cli.js +28 -1
- package/dist/cli.js.map +1 -1
- package/dist/fixtureProvider.d.ts +13 -0
- package/dist/fixtureProvider.d.ts.map +1 -0
- package/dist/fixtureProvider.js +86 -0
- package/dist/fixtureProvider.js.map +1 -0
- package/dist/hosted/xeno-agents-client.d.ts +306 -0
- package/dist/hosted/xeno-agents-client.d.ts.map +1 -0
- package/dist/hosted/xeno-agents-client.js +520 -0
- package/dist/hosted/xeno-agents-client.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/fixtureProvider.d.ts.map +1 -1
- package/dist/providers/fixtureProvider.js +20 -0
- package/dist/providers/fixtureProvider.js.map +1 -1
- package/dist/providers/providerRegistry.d.ts.map +1 -1
- package/dist/providers/providerRegistry.js +2 -0
- package/dist/providers/providerRegistry.js.map +1 -1
- package/dist/providers/providerTypes.d.ts +25 -0
- package/dist/providers/providerTypes.d.ts.map +1 -1
- package/dist/providers/xenoAgentsApiEventMapper.d.ts +52 -0
- package/dist/providers/xenoAgentsApiEventMapper.d.ts.map +1 -0
- package/dist/providers/xenoAgentsApiEventMapper.js +152 -0
- package/dist/providers/xenoAgentsApiEventMapper.js.map +1 -0
- package/dist/providers/xenoAgentsApiProvider.d.ts +60 -0
- package/dist/providers/xenoAgentsApiProvider.d.ts.map +1 -0
- package/dist/providers/xenoAgentsApiProvider.js +302 -0
- package/dist/providers/xenoAgentsApiProvider.js.map +1 -0
- package/dist/providers/xenoSdkAdapterProcess.d.ts +50 -0
- package/dist/providers/xenoSdkAdapterProcess.d.ts.map +1 -0
- package/dist/providers/xenoSdkAdapterProcess.js +65 -0
- package/dist/providers/xenoSdkAdapterProcess.js.map +1 -0
- package/dist/providers/xenoSdkProvider.d.ts +85 -0
- package/dist/providers/xenoSdkProvider.d.ts.map +1 -0
- package/dist/providers/xenoSdkProvider.js +212 -0
- package/dist/providers/xenoSdkProvider.js.map +1 -0
- package/dist/version.d.ts +9 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +9 -1
- package/dist/version.js.map +1 -1
- package/package.json +4 -1
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `xeno-sdk` — the XENO Agent SDK reachable over ACP.
|
|
3
|
+
*
|
|
4
|
+
* This is the keystone of the locked XENO Agent ADE architecture
|
|
5
|
+
* (`xeno-agent-interface/docs/specs/XENO_AGENT_ADE_SPEC.md` §2.6): **our own agent
|
|
6
|
+
* becomes an ACP provider like any other**, so `sdk-native` stops being a
|
|
7
|
+
* privileged in-process lane.
|
|
8
|
+
*
|
|
9
|
+
* The reason is not tidiness. §2.2 requires third-party agents to be first-class,
|
|
10
|
+
* and with two execution paths that is a gate somebody has to keep green forever
|
|
11
|
+
* — every new capability lands on the privileged path first, and the privileged
|
|
12
|
+
* path is the one that grows shortcuts. With one bus it is STRUCTURAL: our agent
|
|
13
|
+
* cannot outgrow the path foreign agents use, because it is the same path.
|
|
14
|
+
*
|
|
15
|
+
* ## Where the SDK actually runs
|
|
16
|
+
*
|
|
17
|
+
* In the supervised ADAPTER PROCESS, never in the ACP endpoint. `@xenosystem/acp-agent`
|
|
18
|
+
* keeps zero I/O authority: it spawns, it reads v1 protocol lines from stdout,
|
|
19
|
+
* and it maps them to `session/update`. The SDK's own tool authority, network
|
|
20
|
+
* access and credentials live inside the child, behind the process supervisor —
|
|
21
|
+
* exactly where a third-party CLI's do.
|
|
22
|
+
*
|
|
23
|
+
* ## Why the prompt goes over stdin
|
|
24
|
+
*
|
|
25
|
+
* `claude-local` passes its prompt as argv because the Claude CLI requires it.
|
|
26
|
+
* We own both ends here, so the prompt goes over **stdin**: argv is visible to
|
|
27
|
+
* every local user through the process table, and it has a length limit that a
|
|
28
|
+
* real agent prompt will eventually exceed. The harness supports `stdin`
|
|
29
|
+
* directly (`AdapterHarnessConfig.adapter.stdin`), so this costs nothing.
|
|
30
|
+
*
|
|
31
|
+
* ## Honest declarations
|
|
32
|
+
*
|
|
33
|
+
* The SDK agent talks to a model. So `requiresAuth` and `usesNetwork` are TRUE,
|
|
34
|
+
* which routes this provider through the auth/egress policy validators and the
|
|
35
|
+
* manual-approval gate. It is deliberately NOT declared as a no-auth local
|
|
36
|
+
* adapter: that would be the convenient lie that makes it runnable "just because
|
|
37
|
+
* it exists", and the security layer would be evaluating a fiction.
|
|
38
|
+
*/
|
|
39
|
+
import { fileURLToPath } from "node:url";
|
|
40
|
+
import { runAdapterPrompt } from "../adapters/adapterProcessHarness.js";
|
|
41
|
+
import { ProviderConfigurationError } from "./providerErrors.js";
|
|
42
|
+
import { staticModelDiscovery } from "./providerDiscovery.js";
|
|
43
|
+
export const XENO_SDK_ID = "xeno-sdk";
|
|
44
|
+
/** Default model surface. Overridable by config; never hardcoded downstream. */
|
|
45
|
+
export const XENO_SDK_DEFAULT_MODEL = "gpt-5.5";
|
|
46
|
+
export const XENO_SDK_CAPABILITIES = {
|
|
47
|
+
streamsText: true,
|
|
48
|
+
emitsPlan: false,
|
|
49
|
+
emitsToolCalls: true,
|
|
50
|
+
emitsUsage: true,
|
|
51
|
+
supportsCancel: true,
|
|
52
|
+
supportsMultipleSessions: true,
|
|
53
|
+
// TRUE, and load-bearing: the SDK agent calls a model. Declaring otherwise
|
|
54
|
+
// would let it past the safety gate on a false premise.
|
|
55
|
+
requiresAuth: true,
|
|
56
|
+
usesNetwork: true,
|
|
57
|
+
canReadFiles: true,
|
|
58
|
+
canWriteFiles: true,
|
|
59
|
+
canRunTerminal: true,
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* The AgentLoop callbacks, expressed as v1 protocol events.
|
|
63
|
+
*
|
|
64
|
+
* Deliberately PURE and separated from constructing an `AgentLoop`: this is the
|
|
65
|
+
* whole translation layer between our agent and ACP, and it must be testable
|
|
66
|
+
* without a model, a network or a key. The live runner below is a thin shell
|
|
67
|
+
* around it, so almost nothing that can be wrong lives outside a test's reach.
|
|
68
|
+
*/
|
|
69
|
+
export function createXenoSdkEventSink(emit) {
|
|
70
|
+
let toolSequence = 0;
|
|
71
|
+
const openToolCalls = new Map();
|
|
72
|
+
const toolCallIdFor = (name) => {
|
|
73
|
+
const existing = openToolCalls.get(name);
|
|
74
|
+
if (existing)
|
|
75
|
+
return existing;
|
|
76
|
+
toolSequence += 1;
|
|
77
|
+
const id = `xeno-sdk-tool-${toolSequence}`;
|
|
78
|
+
openToolCalls.set(name, id);
|
|
79
|
+
return id;
|
|
80
|
+
};
|
|
81
|
+
return {
|
|
82
|
+
toolCallIdFor,
|
|
83
|
+
onText: (text) => {
|
|
84
|
+
// Empty deltas are dropped rather than forwarded: an empty message_delta
|
|
85
|
+
// is indistinguishable downstream from a real one carrying nothing, and
|
|
86
|
+
// the ACP client would render a blank turn fragment.
|
|
87
|
+
if (text)
|
|
88
|
+
emit({ type: "message_delta", text });
|
|
89
|
+
},
|
|
90
|
+
onToolStart: (name) => {
|
|
91
|
+
emit({ type: "tool_started", toolCallId: toolCallIdFor(name), title: name });
|
|
92
|
+
},
|
|
93
|
+
onToolEnd: (name, result) => {
|
|
94
|
+
const toolCallId = toolCallIdFor(name);
|
|
95
|
+
openToolCalls.delete(name);
|
|
96
|
+
// A failed tool is reported as FAILED, not completed. The SDK reports
|
|
97
|
+
// failure in-band on the result; collapsing that to "completed" would
|
|
98
|
+
// hide a failing tool behind a successful-looking turn.
|
|
99
|
+
const failed = result?.success === false || result?.error !== undefined;
|
|
100
|
+
emit({ type: failed ? "tool_failed" : "tool_completed", toolCallId });
|
|
101
|
+
},
|
|
102
|
+
onError: (error, context) => {
|
|
103
|
+
emit({
|
|
104
|
+
type: "failed",
|
|
105
|
+
message: `${context}: ${error?.message ?? String(error)}`,
|
|
106
|
+
});
|
|
107
|
+
},
|
|
108
|
+
completed: (stopReason = "end_turn") => {
|
|
109
|
+
emit({ type: "completed", stopReason });
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/** Where the adapter process lives — this package's own CLI, never a third-party binary. */
|
|
114
|
+
export function xenoSdkAdapterEntrypoint() {
|
|
115
|
+
return fileURLToPath(new URL("../cli.js", import.meta.url));
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* The adapter argv. The prompt is NOT here — see the module header: argv is
|
|
119
|
+
* world-readable through the process table and length-limited, and the harness
|
|
120
|
+
* accepts stdin directly.
|
|
121
|
+
*/
|
|
122
|
+
export function xenoSdkAdapterCommand(model) {
|
|
123
|
+
return {
|
|
124
|
+
executable: process.execPath,
|
|
125
|
+
args: [xenoSdkAdapterEntrypoint(), "adapter", "--provider", XENO_SDK_ID, "--model", model],
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
class XenoSdkRuntime {
|
|
129
|
+
definition;
|
|
130
|
+
options;
|
|
131
|
+
sessionSeq = 0;
|
|
132
|
+
promptCount = 0;
|
|
133
|
+
constructor(definition, config) {
|
|
134
|
+
this.definition = definition;
|
|
135
|
+
this.options = (config?.options ?? {});
|
|
136
|
+
}
|
|
137
|
+
initialize() { }
|
|
138
|
+
createSession() {
|
|
139
|
+
this.sessionSeq += 1;
|
|
140
|
+
return { sessionId: `${XENO_SDK_ID}-session-${this.sessionSeq}`, createdAt: `s${this.sessionSeq}` };
|
|
141
|
+
}
|
|
142
|
+
cancel() {
|
|
143
|
+
/* cancellation flows via the prompt AbortSignal into the supervisor */
|
|
144
|
+
}
|
|
145
|
+
dispose() { }
|
|
146
|
+
diagnostics() {
|
|
147
|
+
return { provider: this.definition.id, sessionsCreated: this.sessionSeq, promptsRun: this.promptCount };
|
|
148
|
+
}
|
|
149
|
+
async prompt(request, ctx) {
|
|
150
|
+
this.promptCount += 1;
|
|
151
|
+
if (!this.options.runnability) {
|
|
152
|
+
// Fail closed. The harness must be able to re-verify policy + approval at
|
|
153
|
+
// run time; a provider that can reach a model and a filesystem must never
|
|
154
|
+
// run because nobody remembered to pass its gate inputs.
|
|
155
|
+
throw new ProviderConfigurationError({
|
|
156
|
+
safeMessage: "xeno-sdk requires runnability inputs (policy + approval) at runtime",
|
|
157
|
+
providerId: this.definition.id,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
const promptText = renderXenoSdkPrompt(request);
|
|
161
|
+
const harness = await runAdapterPrompt({
|
|
162
|
+
definition: this.definition,
|
|
163
|
+
runnability: this.options.runnability,
|
|
164
|
+
request,
|
|
165
|
+
adapter: {
|
|
166
|
+
...xenoSdkAdapterCommand(this.options.model ?? XENO_SDK_DEFAULT_MODEL),
|
|
167
|
+
stdin: promptText,
|
|
168
|
+
},
|
|
169
|
+
signal: ctx.signal,
|
|
170
|
+
emit: ctx.emit,
|
|
171
|
+
...(this.options.timeoutMs !== undefined ? { timeoutMs: this.options.timeoutMs } : {}),
|
|
172
|
+
});
|
|
173
|
+
return harness.result;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/** Flattens the prompt blocks into the text the SDK agent receives on stdin. */
|
|
177
|
+
export function renderXenoSdkPrompt(request) {
|
|
178
|
+
return request.prompt
|
|
179
|
+
.map((block) => (typeof block === "string" ? block : (block.text ?? "")))
|
|
180
|
+
.join(String.fromCharCode(10))
|
|
181
|
+
.trim();
|
|
182
|
+
}
|
|
183
|
+
export function createXenoSdkDefinition() {
|
|
184
|
+
const definition = {
|
|
185
|
+
id: XENO_SDK_ID,
|
|
186
|
+
displayName: "XENO Agent SDK",
|
|
187
|
+
description: "The XENO Agent SDK driven over ACP — our own agent reached through the same bus as any third-party agent.",
|
|
188
|
+
kind: "local-adapter",
|
|
189
|
+
trustClass: "xeno-owned",
|
|
190
|
+
authRequirement: "required",
|
|
191
|
+
networkRequirement: "required",
|
|
192
|
+
ioAuthority: { filesystem: "workspace-scoped", terminal: "workspace-scoped" },
|
|
193
|
+
capabilities: XENO_SDK_CAPABILITIES,
|
|
194
|
+
enabled: true,
|
|
195
|
+
metadata: {
|
|
196
|
+
acpEntrypoint: "adapter",
|
|
197
|
+
note: "Runs @xenosystem/agent-sdk inside the supervised adapter process; the ACP endpoint keeps zero I/O authority.",
|
|
198
|
+
},
|
|
199
|
+
modelDiscovery: staticModelDiscovery("xeno-sdk exposes the XENO Agent SDK's configured model.", [{ id: XENO_SDK_DEFAULT_MODEL, label: "XENO Agent SDK default", default: true, available: true, reason: null }]),
|
|
200
|
+
createRuntime(config) {
|
|
201
|
+
if (!definition.enabled) {
|
|
202
|
+
throw new ProviderConfigurationError({
|
|
203
|
+
safeMessage: "xeno-sdk is not enabled",
|
|
204
|
+
providerId: XENO_SDK_ID,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
return new XenoSdkRuntime(definition, config);
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
return definition;
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=xenoSdkProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xenoSdkProvider.js","sourceRoot":"","sources":["../../src/providers/xenoSdkProvider.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
/** Identity constants for the XENO ACP agent endpoint. */
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* MUST equal `packages/agent/package.json`.
|
|
4
|
+
*
|
|
5
|
+
* It did not: the 0.1.1 publish bumped package.json and left this at 0.1.0, so
|
|
6
|
+
* the published CLI reported a version it was not. `versionIdentity.test.ts`
|
|
7
|
+
* now asserts the two agree, because a constant sitting beside a manifest will
|
|
8
|
+
* drift again the next time only one of them is edited.
|
|
9
|
+
*/
|
|
10
|
+
export declare const VERSION = "0.2.1";
|
|
3
11
|
export declare const AGENT_NAME = "xeno-acp-agent";
|
|
4
12
|
export declare const AGENT_TITLE = "XENO ACP Agent";
|
|
5
13
|
/** The ACP protocol version this endpoint speaks. */
|
package/dist/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,UAAU,mBAAmB,CAAC;AAC3C,eAAO,MAAM,WAAW,mBAAmB,CAAC;AAE5C,qDAAqD;AACrD,eAAO,MAAM,oBAAoB,EAAG,CAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,UAAU,mBAAmB,CAAC;AAC3C,eAAO,MAAM,WAAW,mBAAmB,CAAC;AAE5C,qDAAqD;AACrD,eAAO,MAAM,oBAAoB,EAAG,CAAU,CAAC"}
|
package/dist/version.js
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
/** Identity constants for the XENO ACP agent endpoint. */
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* MUST equal `packages/agent/package.json`.
|
|
4
|
+
*
|
|
5
|
+
* It did not: the 0.1.1 publish bumped package.json and left this at 0.1.0, so
|
|
6
|
+
* the published CLI reported a version it was not. `versionIdentity.test.ts`
|
|
7
|
+
* now asserts the two agree, because a constant sitting beside a manifest will
|
|
8
|
+
* drift again the next time only one of them is edited.
|
|
9
|
+
*/
|
|
10
|
+
export const VERSION = "0.2.1";
|
|
3
11
|
export const AGENT_NAME = "xeno-acp-agent";
|
|
4
12
|
export const AGENT_TITLE = "XENO ACP Agent";
|
|
5
13
|
/** The ACP protocol version this endpoint speaks. */
|
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAC/B,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC;AAC3C,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAE5C,qDAAqD;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAC/B,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC;AAC3C,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAE5C,qDAAqD;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAU,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xenosystem/acp-agent",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "XENO-owned ACP agent-side stdio endpoint with fixture and approval-gated local provider adapters. NOT official Codex/Claude/Gemini/OpenCode ACP.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -47,6 +47,9 @@
|
|
|
47
47
|
"@types/node": "^22.9.0",
|
|
48
48
|
"typescript": "^5.6.3"
|
|
49
49
|
},
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"@xenosystem/agent-sdk": "^0.9.0"
|
|
52
|
+
},
|
|
50
53
|
"scripts": {
|
|
51
54
|
"build": "tsc -p tsconfig.json",
|
|
52
55
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|