@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.
Files changed (46) hide show
  1. package/dist/acpAgentServer.d.ts.map +1 -1
  2. package/dist/acpAgentServer.js +56 -0
  3. package/dist/acpAgentServer.js.map +1 -1
  4. package/dist/cli.js +28 -1
  5. package/dist/cli.js.map +1 -1
  6. package/dist/fixtureProvider.d.ts +13 -0
  7. package/dist/fixtureProvider.d.ts.map +1 -0
  8. package/dist/fixtureProvider.js +86 -0
  9. package/dist/fixtureProvider.js.map +1 -0
  10. package/dist/hosted/xeno-agents-client.d.ts +306 -0
  11. package/dist/hosted/xeno-agents-client.d.ts.map +1 -0
  12. package/dist/hosted/xeno-agents-client.js +520 -0
  13. package/dist/hosted/xeno-agents-client.js.map +1 -0
  14. package/dist/index.d.ts +3 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +2 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/providers/fixtureProvider.d.ts.map +1 -1
  19. package/dist/providers/fixtureProvider.js +20 -0
  20. package/dist/providers/fixtureProvider.js.map +1 -1
  21. package/dist/providers/providerRegistry.d.ts.map +1 -1
  22. package/dist/providers/providerRegistry.js +2 -0
  23. package/dist/providers/providerRegistry.js.map +1 -1
  24. package/dist/providers/providerTypes.d.ts +25 -0
  25. package/dist/providers/providerTypes.d.ts.map +1 -1
  26. package/dist/providers/xenoAgentsApiEventMapper.d.ts +52 -0
  27. package/dist/providers/xenoAgentsApiEventMapper.d.ts.map +1 -0
  28. package/dist/providers/xenoAgentsApiEventMapper.js +152 -0
  29. package/dist/providers/xenoAgentsApiEventMapper.js.map +1 -0
  30. package/dist/providers/xenoAgentsApiProvider.d.ts +60 -0
  31. package/dist/providers/xenoAgentsApiProvider.d.ts.map +1 -0
  32. package/dist/providers/xenoAgentsApiProvider.js +302 -0
  33. package/dist/providers/xenoAgentsApiProvider.js.map +1 -0
  34. package/dist/providers/xenoSdkAdapterProcess.d.ts +50 -0
  35. package/dist/providers/xenoSdkAdapterProcess.d.ts.map +1 -0
  36. package/dist/providers/xenoSdkAdapterProcess.js +65 -0
  37. package/dist/providers/xenoSdkAdapterProcess.js.map +1 -0
  38. package/dist/providers/xenoSdkProvider.d.ts +85 -0
  39. package/dist/providers/xenoSdkProvider.d.ts.map +1 -0
  40. package/dist/providers/xenoSdkProvider.js +212 -0
  41. package/dist/providers/xenoSdkProvider.js.map +1 -0
  42. package/dist/version.d.ts +9 -1
  43. package/dist/version.d.ts.map +1 -1
  44. package/dist/version.js +9 -1
  45. package/dist/version.js.map +1 -1
  46. 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
- export declare const VERSION = "0.1.1";
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. */
@@ -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
- export const VERSION = "0.1.1";
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. */
@@ -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.1.1",
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",