@xenosystem/acp-agent 0.2.0 → 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.
@@ -0,0 +1,520 @@
1
+ /**
2
+ * @xeno/agents-client — the SHARED, portable client for the hosted agent-runs API
3
+ * (`xeno-agents-api`, live at https://api.xenostudio.ai/v1/agents).
4
+ *
5
+ * CANONICAL. Every XENO product (Hub, the desktop apps, the web console, agents,
6
+ * SDKs) vendors THIS single file to dispatch and stream cloud agent runs — nobody
7
+ * re-implements the wire contract. It is the generalized, framework-agnostic
8
+ * distillation of the contract the XENO Agent CLI already speaks in its
9
+ * `remote.ts` (capability negotiation + start/list/get/stop/events/attach with
10
+ * SSE + NDJSON parsing). See `XENO AGENTS API - SPEC.md` §4–6.
11
+ *
12
+ * Zero dependencies. Works in Node ≥18, Electron (main or renderer) and browsers:
13
+ * uses only global `fetch`, `ReadableStream`, `TextDecoder`, `AbortController`.
14
+ * NO node-only imports, NO npm deps.
15
+ *
16
+ * Auth reality (2026-07): the server today accepts a platform **OIDC JWT**;
17
+ * **API-key support is being added separately** (§13 caveat). This client is
18
+ * auth-agnostic — it just sends `Authorization: Bearer <token>` — so it works with
19
+ * either the moment the server accepts it.
20
+ *
21
+ * Usage:
22
+ * import { createAgentsClient } from './xeno-agents-client';
23
+ * const agents = createAgentsClient({ token: myPlatformJwt });
24
+ * const run = await agents.createRun({ prompt: 'Fix the failing tests', model: 'gpt-5.5' });
25
+ * for await (const ev of agents.attach(run.runId)) console.log(ev.type, ev.payload);
26
+ * await agents.stopRun(run.runId);
27
+ */
28
+ /* ------------------------------------------------------------------ *
29
+ * Wire types — LOCKED cross-repo contract (SPEC §5, server src/types.ts).
30
+ * Re-derived from the server projection; do NOT invent shapes here.
31
+ * ------------------------------------------------------------------ */
32
+ export const SCHEMA_VERSION = 1;
33
+ /** Terminal states — a run in one of these will never transition again. */
34
+ export const TERMINAL_STATUSES = new Set([
35
+ "completed",
36
+ "failed",
37
+ "skipped",
38
+ "cancelled",
39
+ "interrupted",
40
+ ]);
41
+ export function isTerminalStatus(status) {
42
+ return TERMINAL_STATUSES.has(status);
43
+ }
44
+ /** Terminal lifecycle event types — the attach stream ends after one of these. */
45
+ export const TERMINAL_LIFECYCLE_EVENTS = new Set([
46
+ "run.completed",
47
+ "run.failed",
48
+ "run.cancelled",
49
+ ]);
50
+ /** The v0.1 required capability set the CLI negotiates against (SPEC §4.1). */
51
+ export const REQUIRED_CAPABILITIES = [
52
+ "runs.start",
53
+ "runs.list",
54
+ "runs.get",
55
+ "runs.events",
56
+ "runs.attach",
57
+ "runs.stop",
58
+ ];
59
+ const STATUS_TO_CODE = {
60
+ 400: "invalid_request",
61
+ 401: "unauthorized",
62
+ 402: "insufficient_credits",
63
+ 403: "forbidden",
64
+ 404: "run_not_found",
65
+ 429: "rate_limited",
66
+ };
67
+ /** Typed API error carrying the server's error code + HTTP status. */
68
+ export class AgentsApiError extends Error {
69
+ code;
70
+ status;
71
+ /** True when caused by a fetch/abort/timeout rather than an HTTP response. */
72
+ isNetwork;
73
+ // `override` required by xeno-acp's stricter tsconfig (noImplicitOverride); Error declares `cause`.
74
+ cause;
75
+ constructor(code, message, status = 0, opts) {
76
+ super(message);
77
+ this.name = "AgentsApiError";
78
+ this.code = code;
79
+ this.status = status;
80
+ this.isNetwork = opts?.isNetwork ?? false;
81
+ this.cause = opts?.cause;
82
+ }
83
+ get isBudgetExceeded() {
84
+ return this.code === "budget_exceeded";
85
+ }
86
+ get isInsufficientCredits() {
87
+ return this.code === "insufficient_credits";
88
+ }
89
+ get isUnauthorized() {
90
+ return this.code === "unauthorized";
91
+ }
92
+ get isNotFound() {
93
+ return this.code === "run_not_found" || this.code === "not_found";
94
+ }
95
+ }
96
+ export function isAgentsApiError(err) {
97
+ return err instanceof AgentsApiError;
98
+ }
99
+ const DEFAULT_BASE_URL = "https://api.xenostudio.ai/v1/agents";
100
+ export function createAgentsClient(config) {
101
+ const rawBase = (config.baseUrl || DEFAULT_BASE_URL).replace(/\/+$/, "");
102
+ // `new URL(path, base)` needs a trailing slash on base to treat it as a dir.
103
+ const baseWithSlash = `${rawBase}/`;
104
+ const f = config.fetchImpl || globalThis.fetch;
105
+ const defaultTimeout = config.timeoutMs ?? 30_000;
106
+ if (typeof f !== "function") {
107
+ throw new AgentsApiError("network_error", "No fetch implementation available; pass { fetchImpl } (Node < 18).");
108
+ }
109
+ function url(path, query) {
110
+ const u = new URL(path.replace(/^\/+/, ""), baseWithSlash);
111
+ if (query) {
112
+ for (const [k, v] of Object.entries(query)) {
113
+ if (v !== undefined)
114
+ u.searchParams.set(k, String(v));
115
+ }
116
+ }
117
+ return u.toString();
118
+ }
119
+ async function authHeaders(json, extra) {
120
+ const t = typeof config.token === "function" ? await config.token() : config.token;
121
+ const h = { accept: "application/json" };
122
+ if (t)
123
+ h.authorization = `Bearer ${t}`;
124
+ if (json)
125
+ h["content-type"] = "application/json";
126
+ if (config.workspace)
127
+ h["x-xeno-workspace"] = config.workspace;
128
+ return { ...h, ...(extra || {}) };
129
+ }
130
+ /** Compose the caller's AbortSignal with a timeout (Node ≥18 safe). */
131
+ function withTimeout(signal, timeoutMs) {
132
+ const ctl = new AbortController();
133
+ const onAbort = () => ctl.abort(signal?.reason);
134
+ if (signal) {
135
+ if (signal.aborted)
136
+ ctl.abort(signal.reason);
137
+ else
138
+ signal.addEventListener("abort", onAbort, { once: true });
139
+ }
140
+ let timer;
141
+ if (timeoutMs > 0) {
142
+ timer = setTimeout(() => ctl.abort(new AgentsApiError("network_error", `Request timed out after ${timeoutMs}ms`)), timeoutMs);
143
+ if (typeof timer.unref === "function")
144
+ timer.unref();
145
+ }
146
+ return {
147
+ signal: ctl.signal,
148
+ cancel: () => {
149
+ if (timer)
150
+ clearTimeout(timer);
151
+ if (signal)
152
+ signal.removeEventListener("abort", onAbort);
153
+ },
154
+ };
155
+ }
156
+ function normalizeNetworkError(err) {
157
+ if (isAgentsApiError(err))
158
+ return err;
159
+ const anyErr = err;
160
+ if (anyErr?.name === "AbortError") {
161
+ return new AgentsApiError("network_error", anyErr.message || "Request aborted", 0, { isNetwork: true, cause: err });
162
+ }
163
+ return new AgentsApiError("network_error", anyErr?.message || String(err), 0, { isNetwork: true, cause: err });
164
+ }
165
+ /** Map a non-2xx response body `{ error: "<code>" }` to a typed AgentsApiError. */
166
+ async function toError(res) {
167
+ let code;
168
+ let bodyText = "";
169
+ try {
170
+ bodyText = await res.text();
171
+ const parsed = bodyText ? JSON.parse(bodyText) : undefined;
172
+ // Server shape: { "error": "<code>" }. Also tolerate { error: { code } }.
173
+ const raw = typeof parsed?.error === "string"
174
+ ? parsed.error
175
+ : typeof parsed?.error?.code === "string"
176
+ ? parsed.error.code
177
+ : undefined;
178
+ if (raw)
179
+ code = raw;
180
+ }
181
+ catch {
182
+ /* non-JSON body */
183
+ }
184
+ const resolved = code ?? STATUS_TO_CODE[res.status] ?? "http_error";
185
+ const message = code
186
+ ? `Agents API error: ${code} (HTTP ${res.status})`
187
+ : `Agents API request failed (HTTP ${res.status})${bodyText ? `: ${bodyText.slice(0, 200)}` : ""}`;
188
+ return new AgentsApiError(resolved, message, res.status);
189
+ }
190
+ async function requestJson(method, path, opts) {
191
+ const { signal, cancel } = withTimeout(opts?.signal, opts?.timeoutMs ?? defaultTimeout);
192
+ try {
193
+ const res = await f(url(path, opts?.query), {
194
+ method,
195
+ headers: await authHeaders(opts?.body !== undefined, opts?.headers),
196
+ body: opts?.body !== undefined ? JSON.stringify(opts.body) : undefined,
197
+ signal,
198
+ });
199
+ if (!res.ok)
200
+ throw await toError(res);
201
+ return (await res.json());
202
+ }
203
+ catch (err) {
204
+ throw normalizeNetworkError(err);
205
+ }
206
+ finally {
207
+ cancel();
208
+ }
209
+ }
210
+ /* ----------------------------- streaming ----------------------------- */
211
+ /** One connection's worth of the attach stream. Yields parsed RunEvents. */
212
+ async function* streamOnce(runId, opts) {
213
+ const sse = opts.transport === "sse";
214
+ const headers = await authHeaders(false, {
215
+ accept: sse ? "text/event-stream" : "application/x-ndjson",
216
+ // SSE resume: header wins over ?since server-side.
217
+ ...(sse && opts.since !== undefined ? { "last-event-id": String(opts.since) } : {}),
218
+ });
219
+ const res = await f(url(`runs/${encodeURIComponent(runId)}/attach`, {
220
+ follow: "true",
221
+ tail: opts.tail,
222
+ since: !sse ? opts.since : undefined,
223
+ }), { method: "GET", headers, signal: opts.signal });
224
+ if (!res.ok)
225
+ throw await toError(res);
226
+ if (!res.body)
227
+ return;
228
+ const reader = res.body.getReader();
229
+ const decoder = new TextDecoder();
230
+ let buffer = "";
231
+ const emit = function* (chunk) {
232
+ const evt = parseEventLine(chunk);
233
+ if (evt)
234
+ yield evt;
235
+ };
236
+ try {
237
+ for (;;) {
238
+ const { done, value } = await reader.read();
239
+ if (done)
240
+ break;
241
+ buffer += decoder.decode(value, { stream: true });
242
+ if (sse) {
243
+ // SSE frames are separated by a blank line.
244
+ let idx;
245
+ while ((idx = indexOfFrameBreak(buffer)) !== -1) {
246
+ const frame = buffer.slice(0, idx);
247
+ buffer = buffer.slice(idx).replace(/^(\r?\n){1,2}/, "");
248
+ const parsed = parseSseFrame(frame);
249
+ if (parsed === "DONE")
250
+ return;
251
+ if (parsed)
252
+ yield parsed;
253
+ }
254
+ }
255
+ else {
256
+ let nl;
257
+ while ((nl = buffer.indexOf("\n")) !== -1) {
258
+ const line = buffer.slice(0, nl);
259
+ buffer = buffer.slice(nl + 1);
260
+ yield* emit(line);
261
+ }
262
+ }
263
+ }
264
+ // flush tail
265
+ buffer += decoder.decode();
266
+ if (sse) {
267
+ const parsed = parseSseFrame(buffer);
268
+ if (parsed && parsed !== "DONE")
269
+ yield parsed;
270
+ }
271
+ else {
272
+ yield* emit(buffer);
273
+ }
274
+ }
275
+ finally {
276
+ try {
277
+ await reader.cancel();
278
+ }
279
+ catch {
280
+ /* ignore */
281
+ }
282
+ }
283
+ }
284
+ /**
285
+ * Attach to a run and stream its events as an async iterator (SPEC §4.6, §6.3).
286
+ * Default NDJSON; pass `{ transport: 'sse' }` for Server-Sent Events. With
287
+ * `{ reconnect: true }` a dropped stream auto-resumes from the last `sequence`.
288
+ */
289
+ async function* attach(runId, options = {}) {
290
+ const transport = options.transport ?? "ndjson";
291
+ const reconnectDelay = options.reconnectDelayMs ?? 1000;
292
+ const maxReconnects = options.maxReconnects ?? 5;
293
+ let since = options.since;
294
+ let tail = options.tail;
295
+ let attempts = 0;
296
+ let sawTerminal = false;
297
+ for (;;) {
298
+ try {
299
+ for await (const ev of streamOnce(runId, { tail, since, transport, signal: options.signal })) {
300
+ // advance the resume cursor
301
+ if (typeof ev.sequence === "number")
302
+ since = ev.sequence;
303
+ tail = undefined; // after first connect, resume by sequence, not tail
304
+ attempts = 0; // a clean event resets the backoff budget
305
+ yield ev;
306
+ if (TERMINAL_LIFECYCLE_EVENTS.has(ev.type)) {
307
+ sawTerminal = true;
308
+ }
309
+ }
310
+ }
311
+ catch (err) {
312
+ const e = normalizeNetworkError(err);
313
+ // Aborted by the caller, or a real HTTP error → do not reconnect.
314
+ if (options.signal?.aborted || !e.isNetwork || !options.reconnect)
315
+ throw e;
316
+ if (++attempts > maxReconnects)
317
+ throw e;
318
+ await delay(reconnectDelay * attempts, options.signal);
319
+ continue;
320
+ }
321
+ // Stream ended cleanly.
322
+ if (sawTerminal || !options.reconnect || options.signal?.aborted)
323
+ return;
324
+ if (++attempts > maxReconnects)
325
+ return;
326
+ // Non-terminal end (e.g. idle server close) — resume from cursor.
327
+ await delay(reconnectDelay * attempts, options.signal);
328
+ }
329
+ }
330
+ /**
331
+ * Convenience callback wrapper over `attach`. Returns a controller with a
332
+ * `close()` and a `done` promise that resolves when the stream ends.
333
+ */
334
+ function onEvent(runId, handler, options = {}) {
335
+ const ctl = new AbortController();
336
+ const signal = options.signal
337
+ ? anySignal([options.signal, ctl.signal])
338
+ : ctl.signal;
339
+ const done = (async () => {
340
+ for await (const ev of attach(runId, { ...options, signal })) {
341
+ await handler(ev);
342
+ }
343
+ })();
344
+ return { close: () => ctl.abort(), done };
345
+ }
346
+ /* ------------------------------- API -------------------------------- */
347
+ return {
348
+ /** Resolved base URL (with trailing path stripped). */
349
+ baseUrl: rawBase,
350
+ /** GET /status — capability negotiation (SPEC §4.1). */
351
+ status: (opts) => requestJson("GET", "status", { signal: opts?.signal }),
352
+ /** True iff the server advertises every required v0.1 capability. */
353
+ async supportsRequiredCapabilities(opts) {
354
+ const s = await this.status(opts);
355
+ return REQUIRED_CAPABILITIES.every((c) => s.capabilities.includes(c));
356
+ },
357
+ /** POST /runs — create a durable, asynchronous run (SPEC §4.2). */
358
+ async createRun(input, opts) {
359
+ if (!input.prompt || !input.prompt.trim()) {
360
+ throw new AgentsApiError("invalid_request", "createRun requires a non-empty prompt");
361
+ }
362
+ const { idempotencyKey, ...rest } = input;
363
+ const res = await requestJson("POST", "runs", {
364
+ body: { schemaVersion: SCHEMA_VERSION, ...rest },
365
+ signal: opts?.signal,
366
+ ...(idempotencyKey ? { headers: { "idempotency-key": idempotencyKey } } : {}),
367
+ });
368
+ return res.run;
369
+ },
370
+ /** GET /runs?limit=<n> — list the caller's runs (SPEC §4.3). */
371
+ async listRuns(options = {}) {
372
+ const res = await requestJson("GET", "runs", {
373
+ query: { limit: options.limit },
374
+ signal: options.signal,
375
+ });
376
+ return res.runs;
377
+ },
378
+ /** GET /runs/:id — fetch one run (SPEC §4.4). 404 → run_not_found. */
379
+ async getRun(runId, opts) {
380
+ const res = await requestJson("GET", `runs/${encodeURIComponent(runId)}`, { signal: opts?.signal });
381
+ return res.run;
382
+ },
383
+ /** GET /runs/:id/events — event history, no follow (SPEC §4.5). */
384
+ async getEvents(runId, options = {}) {
385
+ const res = await requestJson("GET", `runs/${encodeURIComponent(runId)}/events`, { query: { tail: options.tail, since: options.since }, signal: options.signal });
386
+ return (res.events || []).map((e) => (isRunEventLike(e) ? hoistRunEvent(e) : e));
387
+ },
388
+ /** POST /runs/:id/stop — graceful stop (SPEC §4.7). */
389
+ async stopRun(runId, opts) {
390
+ const res = await requestJson("POST", `runs/${encodeURIComponent(runId)}/stop`, { signal: opts?.signal });
391
+ return res.run;
392
+ },
393
+ attach,
394
+ onEvent,
395
+ };
396
+ }
397
+ /* ------------------------------------------------------------------ *
398
+ * Internal parsing / stream helpers (module-scoped, pure).
399
+ * ------------------------------------------------------------------ */
400
+ /** Parse a single NDJSON line into a RunEvent (skips blanks / [DONE]). */
401
+ function parseEventLine(line) {
402
+ const trimmed = line.trim();
403
+ if (!trimmed || trimmed === "[DONE]" || trimmed === "data: [DONE]")
404
+ return null;
405
+ const data = trimmed.startsWith("data:") ? trimmed.slice(5).trim() : trimmed;
406
+ if (!data || data === "[DONE]")
407
+ return null;
408
+ try {
409
+ const parsed = JSON.parse(data);
410
+ return isRunEventLike(parsed) ? hoistRunEvent(parsed) : null;
411
+ }
412
+ catch {
413
+ return null;
414
+ }
415
+ }
416
+ /**
417
+ * Parse one SSE frame (lines up to a blank line). Returns the RunEvent, the
418
+ * sentinel "DONE", or null (comment/heartbeat/unparseable). Honors `data:` and
419
+ * ignores `: ping` comments and bare `id:` lines.
420
+ */
421
+ function parseSseFrame(frame) {
422
+ const lines = frame.split(/\r?\n/);
423
+ const dataParts = [];
424
+ for (const line of lines) {
425
+ if (!line || line.startsWith(":"))
426
+ continue; // comment / heartbeat
427
+ if (line.startsWith("data:")) {
428
+ dataParts.push(line.slice(5).replace(/^ /, ""));
429
+ }
430
+ // `id:` / `event:` lines carry no payload for us — the cursor comes from the
431
+ // event's own `sequence`.
432
+ }
433
+ if (dataParts.length === 0)
434
+ return null;
435
+ const data = dataParts.join("\n").trim();
436
+ if (!data)
437
+ return null;
438
+ if (data === "[DONE]")
439
+ return "DONE";
440
+ try {
441
+ const parsed = JSON.parse(data);
442
+ return isRunEventLike(parsed) ? hoistRunEvent(parsed) : null;
443
+ }
444
+ catch {
445
+ return null;
446
+ }
447
+ }
448
+ /** Index of the SSE frame separator (`\n\n` or `\r\n\r\n`) in the buffer, or -1. */
449
+ function indexOfFrameBreak(buffer) {
450
+ const a = buffer.indexOf("\n\n");
451
+ const b = buffer.indexOf("\r\n\r\n");
452
+ if (a === -1)
453
+ return b;
454
+ if (b === -1)
455
+ return a;
456
+ return Math.min(a, b);
457
+ }
458
+ function isRunEventLike(v) {
459
+ return (typeof v === "object" &&
460
+ v !== null &&
461
+ typeof v.type === "string" &&
462
+ typeof v.sequence === "number");
463
+ }
464
+ // Common SDK event fields live under `payload` on the wire. Hoist them to the top
465
+ // of the RunEvent so consumers can read `ev.text` / `ev.toolName` / `ev.usage`
466
+ // directly. Additive + non-destructive: `payload` is preserved and an existing
467
+ // top-level field is never overwritten.
468
+ const HOISTED_PAYLOAD_FIELDS = [
469
+ "text", "toolName", "inputPreview", "resultPreview",
470
+ "tokenUsage", "usage", "creditsSettled", "outputPreview",
471
+ "error", "reason", "status", "statusReason",
472
+ ];
473
+ function hoistRunEvent(ev) {
474
+ const p = ev.payload;
475
+ if (p && typeof p === "object") {
476
+ const top = ev;
477
+ for (const k of HOISTED_PAYLOAD_FIELDS) {
478
+ if (p[k] !== undefined && top[k] === undefined)
479
+ top[k] = p[k];
480
+ }
481
+ // `model.text.delta` sometimes carries the chunk as `delta`; normalize to `text`.
482
+ if (top.text === undefined && typeof p.delta === "string")
483
+ top.text = p.delta;
484
+ }
485
+ return ev;
486
+ }
487
+ /** Abortable delay. Rejects nothing — resolves early if the signal aborts. */
488
+ function delay(ms, signal) {
489
+ return new Promise((resolve) => {
490
+ if (signal?.aborted)
491
+ return resolve();
492
+ const t = setTimeout(() => {
493
+ cleanup();
494
+ resolve();
495
+ }, ms);
496
+ const onAbort = () => {
497
+ cleanup();
498
+ resolve();
499
+ };
500
+ const cleanup = () => {
501
+ clearTimeout(t);
502
+ signal?.removeEventListener("abort", onAbort);
503
+ };
504
+ signal?.addEventListener("abort", onAbort, { once: true });
505
+ });
506
+ }
507
+ /** Combine multiple AbortSignals into one (Node ≥18 safe; no AbortSignal.any dep). */
508
+ function anySignal(signals) {
509
+ const ctl = new AbortController();
510
+ const onAbort = (s) => () => ctl.abort(s.reason);
511
+ for (const s of signals) {
512
+ if (s.aborted) {
513
+ ctl.abort(s.reason);
514
+ break;
515
+ }
516
+ s.addEventListener("abort", onAbort(s), { once: true });
517
+ }
518
+ return ctl.signal;
519
+ }
520
+ //# sourceMappingURL=xeno-agents-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xeno-agents-client.js","sourceRoot":"","sources":["../../src/hosted/xeno-agents-client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fixtureProvider.d.ts","sourceRoot":"","sources":["../../src/providers/fixtureProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EAOnB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,kBAAkB,4DAA4D,CAAC;AAE5F,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,EAAE,qBAYlC,CAAC;AAqHF,wBAAgB,+BAA+B,IAAI,kBAAkB,CA0BpE"}
1
+ {"version":3,"file":"fixtureProvider.d.ts","sourceRoot":"","sources":["../../src/providers/fixtureProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EAOnB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,kBAAkB,4DAA4D,CAAC;AAE5F,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,EAAE,qBAYlC,CAAC;AA2IF,wBAAgB,+BAA+B,IAAI,kBAAkB,CA0BpE"}
@@ -43,6 +43,7 @@ class FixtureRuntime {
43
43
  initialize() {
44
44
  /* nothing to set up */
45
45
  }
46
+ steered = [];
46
47
  createSession() {
47
48
  this.sessionSeq += 1;
48
49
  return { sessionId: `fixture-session-${this.sessionSeq}`, createdAt: this.now() };
@@ -50,6 +51,22 @@ class FixtureRuntime {
50
51
  cancel() {
51
52
  /* cancellation is delivered via the prompt's AbortSignal; nothing extra to do */
52
53
  }
54
+ /**
55
+ * Mid-turn correction (ADE §5.5, `session/steer`).
56
+ *
57
+ * ⚠️ A REAL implementation, not a stub that always accepts. A fixture that returns
58
+ * `{accepted:true}` unconditionally proves the wiring and nothing about the contract — and the
59
+ * contract's point is that `accepted:false` is a first-class result a client must be able to
60
+ * act on. So this records what it was told, which lets a test assert the instruction ARRIVED
61
+ * rather than that a call returned.
62
+ */
63
+ steer(sessionId, instruction) {
64
+ if (this.promptCount === 0) {
65
+ return { accepted: false, reason: 'The fixture has no prompt running.' };
66
+ }
67
+ this.steered.push({ sessionId, instruction });
68
+ return { accepted: true };
69
+ }
53
70
  dispose() {
54
71
  /* no resources */
55
72
  }
@@ -58,6 +75,9 @@ class FixtureRuntime {
58
75
  provider: this.definition.id,
59
76
  sessionsCreated: this.sessionSeq,
60
77
  promptsRun: this.promptCount,
78
+ // Visible in diagnostics so a test can prove the instruction REACHED the provider, rather
79
+ // than only that `session/steer` answered.
80
+ steered: this.steered.map((entry) => entry.instruction),
61
81
  options: this.options,
62
82
  };
63
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fixtureProvider.js","sourceRoot":"","sources":["../../src/providers/fixtureProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fixtureProvider.js","sourceRoot":"","sources":["../../src/providers/fixtureProvider.ts"],"names":[],"mappings":"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"}
@@ -125,6 +125,19 @@ export interface ProviderRuntimeContext {
125
125
  /** Optional client-mediated host helpers exposed by XENO ACP extensions. */
126
126
  host?: ProviderHostContext;
127
127
  }
128
+ /**
129
+ * The outcome of a mid-turn correction.
130
+ *
131
+ * 🔴 `accepted: false` is a RESULT, not an error. A provider that is between tool calls, or
132
+ * whose upstream will not take input mid-stream, must be able to say so — and the client must be
133
+ * able to tell that apart from "delivered". A correction the user believes landed and did not is
134
+ * the worst outcome available here.
135
+ */
136
+ export interface ProviderSteerResult {
137
+ accepted: boolean;
138
+ /** Why not. Shown to the operator, so it must name something they can act on. */
139
+ reason?: string;
140
+ }
128
141
  /** A live provider instance. One per agent process; sessions/prompts run against it. */
129
142
  export interface ProviderRuntime {
130
143
  readonly definition: ProviderDefinition;
@@ -132,6 +145,18 @@ export interface ProviderRuntime {
132
145
  createSession(): ProviderSession;
133
146
  prompt(request: ProviderPromptRequest, ctx: ProviderRuntimeContext): Promise<ProviderPromptResult>;
134
147
  cancel(sessionId: string): void;
148
+ /**
149
+ * Deliver a correction into a RUNNING prompt (ADE §5.5).
150
+ *
151
+ * ⚠️ OPTIONAL, and its presence IS the capability declaration — `acpAgentServer` derives what
152
+ * it advertises from `typeof runtime.steer === 'function'` rather than from a hand-written flag,
153
+ * so the advertisement cannot drift from the implementation.
154
+ *
155
+ * ⚠️ Deliberately NOT added to `ProviderCapabilitySet`: that is a required-field interface
156
+ * implemented by every provider definition, so a new field there would be a breaking change for
157
+ * a fact already derivable from this method.
158
+ */
159
+ steer?(sessionId: string, instruction: string): ProviderSteerResult | Promise<ProviderSteerResult>;
135
160
  dispose(): Promise<void> | void;
136
161
  diagnostics(): Record<string, unknown>;
137
162
  }