@claudexor/cli 1.0.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/LICENSE +21 -0
- package/README.md +22 -0
- package/dist/args.d.ts +12 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +88 -0
- package/dist/args.js.map +1 -0
- package/dist/attachment-resolver.d.ts +11 -0
- package/dist/attachment-resolver.d.ts.map +1 -0
- package/dist/attachment-resolver.js +61 -0
- package/dist/attachment-resolver.js.map +1 -0
- package/dist/capabilities.d.ts +13 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +90 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/claudexord.d.ts +3 -0
- package/dist/claudexord.d.ts.map +1 -0
- package/dist/claudexord.js +564 -0
- package/dist/claudexord.js.map +1 -0
- package/dist/cli-io.d.ts +28 -0
- package/dist/cli-io.d.ts.map +1 -0
- package/dist/cli-io.js +37 -0
- package/dist/cli-io.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1459 -0
- package/dist/cli.js.map +1 -0
- package/dist/command-registry.d.ts +105 -0
- package/dist/command-registry.d.ts.map +1 -0
- package/dist/command-registry.js +516 -0
- package/dist/command-registry.js.map +1 -0
- package/dist/daemon-lifecycle.d.ts +18 -0
- package/dist/daemon-lifecycle.d.ts.map +1 -0
- package/dist/daemon-lifecycle.js +62 -0
- package/dist/daemon-lifecycle.js.map +1 -0
- package/dist/daemon-run.d.ts +86 -0
- package/dist/daemon-run.d.ts.map +1 -0
- package/dist/daemon-run.js +269 -0
- package/dist/daemon-run.js.map +1 -0
- package/dist/decision.d.ts +18 -0
- package/dist/decision.d.ts.map +1 -0
- package/dist/decision.js +46 -0
- package/dist/decision.js.map +1 -0
- package/dist/live.d.ts +26 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/live.js +311 -0
- package/dist/live.js.map +1 -0
- package/dist/mcp-runner.d.ts +41 -0
- package/dist/mcp-runner.d.ts.map +1 -0
- package/dist/mcp-runner.js +306 -0
- package/dist/mcp-runner.js.map +1 -0
- package/dist/ops-commands.d.ts +11 -0
- package/dist/ops-commands.d.ts.map +1 -0
- package/dist/ops-commands.js +358 -0
- package/dist/ops-commands.js.map +1 -0
- package/dist/orchestrate-options.d.ts +9 -0
- package/dist/orchestrate-options.d.ts.map +1 -0
- package/dist/orchestrate-options.js +16 -0
- package/dist/orchestrate-options.js.map +1 -0
- package/dist/orphan-reaper.d.ts +9 -0
- package/dist/orphan-reaper.d.ts.map +1 -0
- package/dist/orphan-reaper.js +97 -0
- package/dist/orphan-reaper.js.map +1 -0
- package/dist/orphan-sweeper.d.ts +7 -0
- package/dist/orphan-sweeper.d.ts.map +1 -0
- package/dist/orphan-sweeper.js +289 -0
- package/dist/orphan-sweeper.js.map +1 -0
- package/dist/plugins.d.ts +44 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +1383 -0
- package/dist/plugins.js.map +1 -0
- package/dist/primary-output.d.ts +14 -0
- package/dist/primary-output.d.ts.map +1 -0
- package/dist/primary-output.js +34 -0
- package/dist/primary-output.js.map +1 -0
- package/dist/registry.d.ts +26 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +71 -0
- package/dist/registry.js.map +1 -0
- package/dist/release.d.ts +14 -0
- package/dist/release.d.ts.map +1 -0
- package/dist/release.js +49 -0
- package/dist/release.js.map +1 -0
- package/dist/repl.d.ts +26 -0
- package/dist/repl.d.ts.map +1 -0
- package/dist/repl.js +277 -0
- package/dist/repl.js.map +1 -0
- package/dist/review-command.d.ts +3 -0
- package/dist/review-command.d.ts.map +1 -0
- package/dist/review-command.js +83 -0
- package/dist/review-command.js.map +1 -0
- package/dist/reviewer-options.d.ts +18 -0
- package/dist/reviewer-options.d.ts.map +1 -0
- package/dist/reviewer-options.js +110 -0
- package/dist/reviewer-options.js.map +1 -0
- package/dist/run-options.d.ts +8 -0
- package/dist/run-options.d.ts.map +1 -0
- package/dist/run-options.js +50 -0
- package/dist/run-options.js.map +1 -0
- package/dist/run-secret-scan.d.ts +2 -0
- package/dist/run-secret-scan.d.ts.map +1 -0
- package/dist/run-secret-scan.js +5 -0
- package/dist/run-secret-scan.js.map +1 -0
- package/dist/settings-command.d.ts +3 -0
- package/dist/settings-command.d.ts.map +1 -0
- package/dist/settings-command.js +202 -0
- package/dist/settings-command.js.map +1 -0
- package/dist/settings-display.d.ts +3 -0
- package/dist/settings-display.d.ts.map +1 -0
- package/dist/settings-display.js +33 -0
- package/dist/settings-display.js.map +1 -0
- package/dist/settings-service.d.ts +15 -0
- package/dist/settings-service.d.ts.map +1 -0
- package/dist/settings-service.js +91 -0
- package/dist/settings-service.js.map +1 -0
- package/dist/setup-jobs.d.ts +28 -0
- package/dist/setup-jobs.d.ts.map +1 -0
- package/dist/setup-jobs.js +477 -0
- package/dist/setup-jobs.js.map +1 -0
- package/dist/spec.d.ts +84 -0
- package/dist/spec.d.ts.map +1 -0
- package/dist/spec.js +438 -0
- package/dist/spec.js.map +1 -0
- package/dist/trust-command.d.ts +3 -0
- package/dist/trust-command.d.ts.map +1 -0
- package/dist/trust-command.js +80 -0
- package/dist/trust-command.js.map +1 -0
- package/dist/trust-services.d.ts +7 -0
- package/dist/trust-services.d.ts.map +1 -0
- package/dist/trust-services.js +35 -0
- package/dist/trust-services.js.map +1 -0
- package/package.json +59 -0
package/dist/live.js
ADDED
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { createInterface } from "node:readline/promises";
|
|
4
|
+
import { daemonDir, readToken } from "@claudexor/daemon";
|
|
5
|
+
import { InteractionQuestion as InteractionQuestionSchema } from "@claudexor/schema";
|
|
6
|
+
const print = (s) => {
|
|
7
|
+
process.stdout.write(s + "\n");
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* One concise line per run event for live terminal progress. Returns null for
|
|
11
|
+
* noise (heartbeats, raw harness deltas we do not surface in a TTY).
|
|
12
|
+
*/
|
|
13
|
+
export function formatRunEventLine(ev) {
|
|
14
|
+
const type = String(ev["type"] ?? "");
|
|
15
|
+
const p = (ev["payload"] ?? {});
|
|
16
|
+
const who = [p["attempt_id"], p["harness_id"]].filter(Boolean).join("/");
|
|
17
|
+
switch (type) {
|
|
18
|
+
case "run.created":
|
|
19
|
+
return `run created (${String(p["mode"] ?? "?")})`;
|
|
20
|
+
case "project.git.initialized":
|
|
21
|
+
return `initialized git repository at ${String(p["repo_root"] ?? "?")} (baseline commit)`;
|
|
22
|
+
case "harness.started":
|
|
23
|
+
return `[${who}] started (web=${String(p["external_context_policy"] ?? "auto")})`;
|
|
24
|
+
case "harness.event": {
|
|
25
|
+
const sub = String(p["type"] ?? "");
|
|
26
|
+
if (sub === "message" && typeof p["title"] === "string")
|
|
27
|
+
return `[${who}] ${truncate(String(p["title"]), 160)}`;
|
|
28
|
+
if (sub === "tool_call" && p["tool"] && typeof p["tool"] === "object") {
|
|
29
|
+
const tool = p["tool"];
|
|
30
|
+
return `[${who}] tool ${String(tool["name"] ?? "?")}${tool["target"] ? ` — ${truncate(String(tool["target"]), 100)}` : ""}`;
|
|
31
|
+
}
|
|
32
|
+
if (sub === "interaction_requested")
|
|
33
|
+
return `[${who}] waiting on your answer…`;
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
case "interaction.requested":
|
|
37
|
+
return `[${who}] QUESTION pending (interaction ${String(p["interaction_id"] ?? "?")})`;
|
|
38
|
+
case "interaction.answered":
|
|
39
|
+
return `[${who}] answer delivered`;
|
|
40
|
+
case "interaction.timeout":
|
|
41
|
+
return `[${who}] no answer in time — continuing with assumptions`;
|
|
42
|
+
case "harness.completed":
|
|
43
|
+
return `[${who}] completed: ${String(p["status"] ?? "?")}${p["error"] ? ` — ${truncate(String(p["error"]), 160)}` : ""}`;
|
|
44
|
+
case "gate.completed":
|
|
45
|
+
return `[${String(p["attempt_id"] ?? "?")}] gates ${p["passed"] ? "passed" : "failed"}`;
|
|
46
|
+
case "review.started":
|
|
47
|
+
return `review started (${String(p["reviewers"] ?? 0)} reviewer(s))`;
|
|
48
|
+
case "reviewer.completed":
|
|
49
|
+
return `reviewer completed (${String(p["harness_id"] ?? "?")})`;
|
|
50
|
+
case "synthesis.started":
|
|
51
|
+
return p["synthesize"] ? "synthesis started" : null;
|
|
52
|
+
case "arbitration.completed":
|
|
53
|
+
return `arbitration: winner=${String(p["winner"] ?? "none")} status=${String(p["status"] ?? "?")}`;
|
|
54
|
+
case "output.ready":
|
|
55
|
+
return `output ready: ${String(p["path"] ?? "?")}${p["state"] ? ` (${String(p["state"])})` : ""}`;
|
|
56
|
+
case "budget.observation":
|
|
57
|
+
return typeof p["usd"] === "number" ? `spend +$${p["usd"].toFixed(4)}` : null;
|
|
58
|
+
case "run.completed":
|
|
59
|
+
return `run completed: ${String(p["status"] ?? "success")}`;
|
|
60
|
+
case "run.failed":
|
|
61
|
+
return `run failed: ${truncate(String(p["error"] ?? p["status"] ?? "failed"), 200)}`;
|
|
62
|
+
case "run.blocked":
|
|
63
|
+
return `run blocked: ${truncate(String(p["error"] ?? "needs human decision"), 200)}`;
|
|
64
|
+
default:
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function truncate(s, n) {
|
|
69
|
+
return s.length > n ? `${s.slice(0, n - 1)}…` : s;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Prompt the questions on the controlling TTY. Returns null on a non-TTY
|
|
73
|
+
* stdin or when the deadline passes (the engine then declines benignly).
|
|
74
|
+
*/
|
|
75
|
+
export async function promptQuestionsOnTty(interactionId, questions, timeoutAt) {
|
|
76
|
+
if (!process.stdin.isTTY) {
|
|
77
|
+
print("(question received, but stdin is not a TTY — the run continues with assumptions)");
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
const deadlineMs = timeoutAt ? Date.parse(timeoutAt) - Date.now() : null;
|
|
81
|
+
if (deadlineMs !== null && (!Number.isFinite(deadlineMs) || deadlineMs <= 0)) {
|
|
82
|
+
// An already-expired deadline must decline immediately — prompting with
|
|
83
|
+
// no signal would hang the TTY forever on a question the engine already
|
|
84
|
+
// timed out (e.g. a historical event replayed by `follow`).
|
|
85
|
+
print("(question already timed out — the run continues with assumptions)");
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
const signal = deadlineMs !== null ? AbortSignal.timeout(deadlineMs) : undefined;
|
|
89
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
90
|
+
try {
|
|
91
|
+
const answers = [];
|
|
92
|
+
for (const q of questions) {
|
|
93
|
+
print("");
|
|
94
|
+
print(`? ${q.header ? `[${q.header}] ` : ""}${q.question}`);
|
|
95
|
+
q.options.forEach((o, idx) => print(` ${idx + 1}) ${o.label}${o.description ? ` — ${o.description}` : ""}`));
|
|
96
|
+
const hint = q.options.length > 0
|
|
97
|
+
? q.multi_select
|
|
98
|
+
? "numbers separated by commas, or free text"
|
|
99
|
+
: "a number, or free text"
|
|
100
|
+
: "free text";
|
|
101
|
+
const raw = (signal
|
|
102
|
+
? await rl.question(` answer (${hint}): `, { signal })
|
|
103
|
+
: await rl.question(` answer (${hint}): `)).trim();
|
|
104
|
+
if (!raw)
|
|
105
|
+
continue;
|
|
106
|
+
const picks = raw
|
|
107
|
+
.split(",")
|
|
108
|
+
.map((part) => Number.parseInt(part.trim(), 10))
|
|
109
|
+
.filter((n) => Number.isInteger(n) && n >= 1 && n <= q.options.length);
|
|
110
|
+
if (picks.length > 0 && picks.length === raw.split(",").length) {
|
|
111
|
+
answers.push({
|
|
112
|
+
question_id: q.id,
|
|
113
|
+
selected_labels: picks.map((n) => q.options[n - 1]?.label ?? "").filter(Boolean),
|
|
114
|
+
free_text: null,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
answers.push({ question_id: q.id, selected_labels: [], free_text: raw });
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return answers.length > 0 ? { interaction_id: interactionId, answers } : null;
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
print("(answer window closed — the run continues with assumptions)");
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
rl.close();
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
export function controlApiAddress() {
|
|
132
|
+
const info = JSON.parse(readFileSync(join(daemonDir(), "control-api.json"), "utf8"));
|
|
133
|
+
const token = readToken();
|
|
134
|
+
if (!info.host || !info.port || !token)
|
|
135
|
+
throw new Error("daemon control API is not available (run: claudexor daemon start)");
|
|
136
|
+
return { baseUrl: `http://${info.host}:${info.port}`, token };
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* `claudexor follow <run_id>`: live SSE tail of a daemon-backed run with full
|
|
140
|
+
* replay (persisted seq), bounded reconnects via Last-Event-ID, and
|
|
141
|
+
* interactive TTY answering of harness questions. Exit honesty: a
|
|
142
|
+
* stream that ends WITHOUT a terminal event is a LOSS (exit 1, "stream
|
|
143
|
+
* lost"), never a silent success — success requires an observed terminal or
|
|
144
|
+
* an `end` frame the server sent after one.
|
|
145
|
+
*/
|
|
146
|
+
export async function followRun(runId, json) {
|
|
147
|
+
let addr;
|
|
148
|
+
try {
|
|
149
|
+
addr = controlApiAddress();
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
process.stderr.write(`claudexor follow: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
153
|
+
return 1;
|
|
154
|
+
}
|
|
155
|
+
let exitCode = 0;
|
|
156
|
+
let sawTerminal = false;
|
|
157
|
+
let lastSeq = 0;
|
|
158
|
+
const maxReconnects = 5;
|
|
159
|
+
const handleFrame = async (name, data) => {
|
|
160
|
+
if (name === "end")
|
|
161
|
+
return "end";
|
|
162
|
+
if (!data)
|
|
163
|
+
return "continue";
|
|
164
|
+
let ev;
|
|
165
|
+
try {
|
|
166
|
+
ev = JSON.parse(data);
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
return "continue";
|
|
170
|
+
}
|
|
171
|
+
if (typeof ev["seq"] === "number" && Number.isFinite(ev["seq"]))
|
|
172
|
+
lastSeq = ev["seq"];
|
|
173
|
+
if (json) {
|
|
174
|
+
print(JSON.stringify(ev));
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
const line = formatRunEventLine(ev);
|
|
178
|
+
if (line)
|
|
179
|
+
print(line);
|
|
180
|
+
}
|
|
181
|
+
const type = String(ev["type"] ?? "");
|
|
182
|
+
if (type === "run.completed" || type === "run.failed" || type === "run.blocked")
|
|
183
|
+
sawTerminal = true;
|
|
184
|
+
if (type === "run.failed" || type === "run.blocked")
|
|
185
|
+
exitCode = 1;
|
|
186
|
+
if (type === "interaction.requested" && !json) {
|
|
187
|
+
await answerInteractionFromTty(addr, runId, ev);
|
|
188
|
+
}
|
|
189
|
+
return "continue";
|
|
190
|
+
};
|
|
191
|
+
for (let attempt = 0; attempt <= maxReconnects; attempt += 1) {
|
|
192
|
+
if (attempt > 0) {
|
|
193
|
+
await new Promise((r) => setTimeout(r, Math.min(500 * attempt, 3_000)));
|
|
194
|
+
if (!json)
|
|
195
|
+
process.stderr.write(`claudexor follow: reconnecting (${attempt}/${maxReconnects}, resume from seq ${lastSeq})...\n`);
|
|
196
|
+
}
|
|
197
|
+
let res;
|
|
198
|
+
try {
|
|
199
|
+
res = await fetch(`${addr.baseUrl}/runs/${encodeURIComponent(runId)}/events`, {
|
|
200
|
+
headers: {
|
|
201
|
+
Authorization: `Bearer ${addr.token}`,
|
|
202
|
+
Accept: "text/event-stream",
|
|
203
|
+
...(lastSeq > 0 ? { "Last-Event-ID": String(lastSeq) } : {}),
|
|
204
|
+
},
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
continue; // transport refusal (daemon restarting) — retry with backoff
|
|
209
|
+
}
|
|
210
|
+
if (res.status === 404) {
|
|
211
|
+
process.stderr.write(`claudexor follow: no such run '${runId}'\n`);
|
|
212
|
+
return 1;
|
|
213
|
+
}
|
|
214
|
+
if (!res.ok || !res.body) {
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
const decoder = new TextDecoder();
|
|
218
|
+
let buffer = "";
|
|
219
|
+
let dataLines = [];
|
|
220
|
+
let eventName = "message";
|
|
221
|
+
try {
|
|
222
|
+
for await (const chunk of res.body) {
|
|
223
|
+
buffer += decoder.decode(chunk, { stream: true });
|
|
224
|
+
let nl;
|
|
225
|
+
while ((nl = buffer.indexOf("\n")) >= 0) {
|
|
226
|
+
const line = buffer.slice(0, nl).replace(/\r$/, "");
|
|
227
|
+
buffer = buffer.slice(nl + 1);
|
|
228
|
+
if (line === "") {
|
|
229
|
+
const outcome = await handleFrame(eventName, dataLines.join("\n"));
|
|
230
|
+
dataLines = [];
|
|
231
|
+
eventName = "message";
|
|
232
|
+
if (outcome === "end") {
|
|
233
|
+
if (sawTerminal)
|
|
234
|
+
return exitCode;
|
|
235
|
+
// Server-side end WITHOUT a terminal event (interrupted run,
|
|
236
|
+
// never-materialized job): the run did not finish cleanly.
|
|
237
|
+
process.stderr.write("claudexor follow: stream ended without a terminal event\n");
|
|
238
|
+
return 1;
|
|
239
|
+
}
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
if (line.startsWith(":"))
|
|
243
|
+
continue;
|
|
244
|
+
if (line.startsWith("event:"))
|
|
245
|
+
eventName = line.slice(6).trim();
|
|
246
|
+
else if (line.startsWith("data:"))
|
|
247
|
+
dataLines.push(line.slice(5).trimStart());
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
/* mid-stream transport drop — fall through to reconnect */
|
|
253
|
+
}
|
|
254
|
+
if (sawTerminal)
|
|
255
|
+
return exitCode;
|
|
256
|
+
}
|
|
257
|
+
process.stderr.write(`claudexor follow: stream lost after ${maxReconnects} reconnects (no terminal event observed)\n`);
|
|
258
|
+
return 1;
|
|
259
|
+
}
|
|
260
|
+
async function answerInteractionFromTty(addr, runId, ev) {
|
|
261
|
+
const p = (ev["payload"] ?? {});
|
|
262
|
+
const interactionId = typeof p["interaction_id"] === "string" ? p["interaction_id"] : null;
|
|
263
|
+
if (!interactionId)
|
|
264
|
+
return;
|
|
265
|
+
const questions = Array.isArray(p["questions"])
|
|
266
|
+
? p["questions"]
|
|
267
|
+
.map((q) => InteractionQuestionSchema.safeParse(q))
|
|
268
|
+
.filter((r) => r.success)
|
|
269
|
+
.map((r) => r.data)
|
|
270
|
+
: [];
|
|
271
|
+
if (questions.length === 0)
|
|
272
|
+
return;
|
|
273
|
+
// Replay safety: the events stream replays from seq 1, so historical
|
|
274
|
+
// interaction.requested events arrive for questions long answered or timed
|
|
275
|
+
// out. Only prompt when the daemon still reports this interaction pending
|
|
276
|
+
// (the registry is populated before the event reaches any subscriber, so a
|
|
277
|
+
// LIVE question is always visible here). On a detail fetch failure, fall
|
|
278
|
+
// through — the expired-deadline guard in promptQuestionsOnTty still holds.
|
|
279
|
+
try {
|
|
280
|
+
const detailRes = await fetch(`${addr.baseUrl}/runs/${encodeURIComponent(runId)}`, {
|
|
281
|
+
headers: { Authorization: `Bearer ${addr.token}` },
|
|
282
|
+
});
|
|
283
|
+
if (detailRes.ok) {
|
|
284
|
+
const detail = (await detailRes.json());
|
|
285
|
+
const state = detail.summary?.state ?? "";
|
|
286
|
+
const active = state === "running" || state === "queued";
|
|
287
|
+
const stillPending = (detail.pendingInteractions ?? []).some((pi) => pi.interactionId === interactionId);
|
|
288
|
+
if (!active || !stillPending)
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
/* fall through to the deadline guard */
|
|
294
|
+
}
|
|
295
|
+
const answers = await promptQuestionsOnTty(interactionId, questions, typeof p["timeout_at"] === "string" ? p["timeout_at"] : undefined);
|
|
296
|
+
if (!answers)
|
|
297
|
+
return;
|
|
298
|
+
const body = {
|
|
299
|
+
answers: answers.answers.map((a) => ({ questionId: a.question_id, selectedLabels: a.selected_labels, freeText: a.free_text })),
|
|
300
|
+
};
|
|
301
|
+
const res = await fetch(`${addr.baseUrl}/runs/${encodeURIComponent(runId)}/interactions/${encodeURIComponent(interactionId)}/answer`, {
|
|
302
|
+
method: "POST",
|
|
303
|
+
headers: { Authorization: `Bearer ${addr.token}`, "Content-Type": "application/json" },
|
|
304
|
+
body: JSON.stringify(body),
|
|
305
|
+
});
|
|
306
|
+
if (!res.ok) {
|
|
307
|
+
const detail = await res.text().catch(() => "");
|
|
308
|
+
print(`(answer not delivered: ${res.status}${detail ? ` ${truncate(detail, 120)}` : ""})`);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=live.js.map
|
package/dist/live.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live.js","sourceRoot":"","sources":["../src/live.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { ControlApiAddress } from "./live.js";
|
|
2
|
+
export interface SurfaceRunnerHooks {
|
|
3
|
+
onEvent?: (event: any) => void;
|
|
4
|
+
onInteraction?: (ctx: any) => Promise<any | null>;
|
|
5
|
+
signal?: AbortSignal;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* The IN-PROCESS runner for read-only surface calls (ask/plan/audit and a
|
|
9
|
+
* suggest-autonomy orchestrate — nothing to apply or unblock, per the CLI
|
|
10
|
+
* doctrine in cli.ts). Also answers `__status` from the doctor-backed gateway.
|
|
11
|
+
*/
|
|
12
|
+
export declare function orchestratorRunner(): (p: any, hooks?: SurfaceRunnerHooks) => Promise<unknown>;
|
|
13
|
+
/**
|
|
14
|
+
* The MCP surface runner: MUTATING verbs (mode=agent — agent/best-of/create)
|
|
15
|
+
* are DAEMON-TRACKED exactly like the CLI (`GET /runs` sees them, `claudexor
|
|
16
|
+
* decision` can unblock them, cancel works), read-only verbs stay in-process
|
|
17
|
+
* — the same doctrine split as cli.ts. Interactive questions on daemon runs
|
|
18
|
+
* bridge through pendingInteractions polling + the typed answer endpoint,
|
|
19
|
+
* driven by the caller's onInteraction hook (the MCP server maps that hook to
|
|
20
|
+
* host elicitation).
|
|
21
|
+
*/
|
|
22
|
+
export declare function mcpSurfaceRunner(): (p: any, hooks?: SurfaceRunnerHooks) => Promise<unknown>;
|
|
23
|
+
/**
|
|
24
|
+
* Cancel bridge: once the run is BOUND (we know its id), an aborted host
|
|
25
|
+
* signal posts the typed cancel control exactly once. Runs on the poll tick
|
|
26
|
+
* so an abort that races run-binding still lands.
|
|
27
|
+
*/
|
|
28
|
+
export declare function makeCancelBridge(addr: ControlApiAddress, signal: AbortSignal): (info: {
|
|
29
|
+
runId: string;
|
|
30
|
+
}) => void;
|
|
31
|
+
/**
|
|
32
|
+
* Poll-tick bridge: watch the run's pendingInteractions on the control API and
|
|
33
|
+
* forward each NEW interaction to the caller's hook exactly once; answers go
|
|
34
|
+
* back through the typed answer endpoint. A stale answer (engine already
|
|
35
|
+
* timed out and declined) is the endpoint's problem to refuse — the bridge
|
|
36
|
+
* never fakes delivery.
|
|
37
|
+
*/
|
|
38
|
+
export declare function makeInteractionBridge(addr: ControlApiAddress, onInteraction: (ctx: any) => Promise<any | null>): (info: {
|
|
39
|
+
runId: string;
|
|
40
|
+
}) => Promise<void>;
|
|
41
|
+
//# sourceMappingURL=mcp-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-runner.d.ts","sourceRoot":"","sources":["../src/mcp-runner.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAGnD,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IAClD,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,KAGlB,GAAG,GAAG,EAAE,QAAQ,kBAAkB,sBA4EjD;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,KAEhB,GAAG,GAAG,EAAE,QAAQ,kBAAkB,sBAwDjD;AAmED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAAW,GAAG,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,CAahH;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,iBAAiB,EACvB,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAC/C,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAkD5C"}
|