@el4cteo/rbx-studio-mcp 0.5.0 → 0.5.2
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/README.md +1 -1
- package/dist/bridge/console.js +81 -12
- package/dist/bridge/console.js.map +1 -1
- package/dist/bridge/harness.js +408 -38
- package/dist/bridge/harness.js.map +1 -1
- package/package.json +1 -1
- package/plugin/src/Config.luau +1 -1
- package/scripts/test-console.mjs +249 -13
package/README.md
CHANGED
|
@@ -182,7 +182,7 @@ Under the header is a command line. Type a command, or type a sentence and it go
|
|
|
182
182
|
|
|
183
183
|
Up and down walk the history, Tab completes.
|
|
184
184
|
|
|
185
|
-
**Prompts start a real agent.** The bridge runs whichever tool you have on PATH — Claude Code, Codex, opencode, DeepSeek Harness, Gemini, Cursor — in headless mode. It connects back to this same bridge, drives the same Studio, and its work streams into the log line by line. It is a separate session from the terminal you may already have open, billed separately, and it is allowed the `rbx-studio` tools and nothing else. `stop` cancels it.
|
|
185
|
+
**Prompts start a real agent.** The bridge runs whichever tool you have on PATH — Claude Code, Codex, opencode, DeepSeek Harness, Gemini, Cursor, Amp, Qwen Code, Factory Droid, goose, GitHub Copilot CLI, Aider, Crush — in headless mode. It connects back to this same bridge, drives the same Studio, and its work streams into the log line by line. It is a separate session from the terminal you may already have open, billed separately, and it is allowed the `rbx-studio` tools and nothing else. `stop` cancels it.
|
|
186
186
|
|
|
187
187
|
Hover the tab on the right edge for eight themes — Lattice, Observatory, Orbit, Void, Nebula, Aurora, Phosphor, Blueprint. Each redraws the activity band, not just its colours. Your pick is remembered.
|
|
188
188
|
|
package/dist/bridge/console.js
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* foreign object pasted into the session.
|
|
14
14
|
*/
|
|
15
15
|
import { collectChecks } from "../doctor.js";
|
|
16
|
-
import { find, installed, run } from "./harness.js";
|
|
16
|
+
import { find, installed, matchesClient, run, } from "./harness.js";
|
|
17
17
|
const agents = new Map();
|
|
18
18
|
function agentFor(studioId) {
|
|
19
19
|
let state = agents.get(studioId);
|
|
@@ -105,7 +105,7 @@ function resolveStudio(bridge, token) {
|
|
|
105
105
|
return byId?.studioId ?? null;
|
|
106
106
|
}
|
|
107
107
|
/** Which harnesses are installed, and which one prompts will go to. */
|
|
108
|
-
function renderAgents(state) {
|
|
108
|
+
function renderAgents(state, bridge) {
|
|
109
109
|
const available = installed();
|
|
110
110
|
if (available.length === 0) {
|
|
111
111
|
return [
|
|
@@ -117,15 +117,82 @@ function renderAgents(state) {
|
|
|
117
117
|
},
|
|
118
118
|
];
|
|
119
119
|
}
|
|
120
|
-
|
|
120
|
+
//[[ Says what a prompt WOULD do, not what the registry contains.
|
|
121
|
+
//
|
|
122
|
+
// Listing an "(in use)" that the prompt then ignores is worse than not
|
|
123
|
+
// marking one at all -- that mismatch is what made the wrong agent answer
|
|
124
|
+
// look like a bug in the agent rather than in this choice. So the mark comes
|
|
125
|
+
// from the same function the prompt uses, and when that cannot decide,
|
|
126
|
+
// nothing is marked and the list says so.
|
|
127
|
+
//]]
|
|
128
|
+
const wanted = preferred(state, bridge, available);
|
|
129
|
+
const connected = (entry) => bridge.clientList().some((client) => matchesClient(entry, client.name));
|
|
121
130
|
return [
|
|
122
131
|
{ level: "info", message: `${available.length} agent${available.length === 1 ? "" : "s"} available` },
|
|
123
|
-
...available.map((entry) =>
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
132
|
+
...available.map((entry) => {
|
|
133
|
+
const marks = [];
|
|
134
|
+
if (connected(entry))
|
|
135
|
+
marks.push("connected");
|
|
136
|
+
if (entry.id === wanted?.id)
|
|
137
|
+
marks.push(state.harnessId === null ? "would answer" : "in use");
|
|
138
|
+
return {
|
|
139
|
+
level: entry.id === wanted?.id ? "ok" : "dim",
|
|
140
|
+
message: ` ${entry.id}`,
|
|
141
|
+
detail: marks.length > 0 ? `${entry.label} (${marks.join(", ")})` : entry.label,
|
|
142
|
+
};
|
|
143
|
+
}),
|
|
144
|
+
wanted === undefined
|
|
145
|
+
? { level: "warn", message: "several agents are connected -- `agent use <id>` to pick one" }
|
|
146
|
+
: { level: "dim", message: "type anything that is not a command to send it to the agent" },
|
|
147
|
+
];
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Which agent an unconfigured panel should use, or nothing when it cannot tell.
|
|
151
|
+
*
|
|
152
|
+
* The old rule was "the first one installed", which is alphabetical accident
|
|
153
|
+
* dressed up as a decision: someone with opencode open typed a prompt and
|
|
154
|
+
* Claude Code answered, because `claude` sits first in the registry. The answer
|
|
155
|
+
* was fine and came from the wrong program.
|
|
156
|
+
*
|
|
157
|
+
* The bridge knows more than the registry does. Every agent driving this Studio
|
|
158
|
+
* is connected to it and says its name, so the panel can answer with the one
|
|
159
|
+
* the user is actually working in. That settles the ordinary case, which is one
|
|
160
|
+
* agent attached to one Studio.
|
|
161
|
+
*
|
|
162
|
+
* When two are attached there is no signal that says which one the user meant.
|
|
163
|
+
* Recency does not: in the report that prompted this, opencode had been up a
|
|
164
|
+
* minute and Claude Code forty seconds, and the wanted answer was the older
|
|
165
|
+
* one. So this returns nothing and the caller asks -- the same shape as
|
|
166
|
+
* AMBIGUOUS_STUDIO, which refuses to guess between two open places for exactly
|
|
167
|
+
* this reason. The choice is remembered, so it is one question once.
|
|
168
|
+
*/
|
|
169
|
+
function preferred(state, bridge, available) {
|
|
170
|
+
if (state.harnessId !== null)
|
|
171
|
+
return find(state.harnessId);
|
|
172
|
+
if (available.length === 1)
|
|
173
|
+
return available[0];
|
|
174
|
+
const matched = available.filter((harness) => bridge.clientList().some((client) => matchesClient(harness, client.name)));
|
|
175
|
+
if (matched.length === 1)
|
|
176
|
+
return matched[0];
|
|
177
|
+
// Nothing connected that we recognise: the registry order is as good a guess
|
|
178
|
+
// as any, and refusing here would block a panel whose user has no agent
|
|
179
|
+
// attached at all -- which is a normal way to use this.
|
|
180
|
+
return matched.length === 0 ? available[0] : undefined;
|
|
181
|
+
}
|
|
182
|
+
/** Asks which of several attached agents should answer, and how to say so. */
|
|
183
|
+
function askWhichAgent(bridge, available) {
|
|
184
|
+
const attached = available.filter((harness) => bridge.clientList().some((client) => matchesClient(harness, client.name)));
|
|
185
|
+
return [
|
|
186
|
+
{
|
|
187
|
+
level: "warn",
|
|
188
|
+
message: `${attached.length} agents are connected to this Studio -- which should answer?`,
|
|
189
|
+
},
|
|
190
|
+
...attached.map((harness) => ({
|
|
191
|
+
level: "dim",
|
|
192
|
+
message: ` agent use ${harness.id}`,
|
|
193
|
+
detail: harness.label,
|
|
127
194
|
})),
|
|
128
|
-
{ level: "dim", message: "
|
|
195
|
+
{ level: "dim", message: "asked once; the choice is remembered until you change it" },
|
|
129
196
|
];
|
|
130
197
|
}
|
|
131
198
|
/**
|
|
@@ -170,10 +237,12 @@ function startAgent(bridge, state, studioId, prompt) {
|
|
|
170
237
|
}
|
|
171
238
|
const available = installed();
|
|
172
239
|
if (available.length === 0)
|
|
173
|
-
return renderAgents(state);
|
|
174
|
-
const wanted = state
|
|
240
|
+
return renderAgents(state, bridge);
|
|
241
|
+
const wanted = preferred(state, bridge, available);
|
|
175
242
|
if (wanted === undefined) {
|
|
176
|
-
return
|
|
243
|
+
return state.harnessId === null
|
|
244
|
+
? askWhichAgent(bridge, available)
|
|
245
|
+
: [{ level: "error", message: `unknown agent "${state.harnessId}"` }];
|
|
177
246
|
}
|
|
178
247
|
const emit = (line) => {
|
|
179
248
|
bridge.notify(studioId, { event: "console", ...line });
|
|
@@ -233,7 +302,7 @@ export async function handleConsole(bridge, port, request) {
|
|
|
233
302
|
case "agent": {
|
|
234
303
|
const verb = request.args[0];
|
|
235
304
|
if (verb === undefined || verb === "list")
|
|
236
|
-
return renderAgents(state);
|
|
305
|
+
return renderAgents(state, bridge);
|
|
237
306
|
if (verb === "use") {
|
|
238
307
|
const id = request.args[1];
|
|
239
308
|
if (id === undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/bridge/console.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/bridge/console.ts"],"names":[],"mappings":"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"}
|
package/dist/bridge/harness.js
CHANGED
|
@@ -39,6 +39,18 @@ function parse(line) {
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
/** A tool call written the way the console writes its own. */
|
|
42
|
+
/**
|
|
43
|
+
* What to do with a line that is not the JSON we expected.
|
|
44
|
+
*
|
|
45
|
+
* Never nothing. Dropping unrecognised input is precisely how the opencode
|
|
46
|
+
* adapter printed a blank run for months: it understood none of what it was
|
|
47
|
+
* sent and said so by staying quiet. A line nobody can parse is still evidence,
|
|
48
|
+
* and dim is the level for evidence.
|
|
49
|
+
*/
|
|
50
|
+
function unparsed(line) {
|
|
51
|
+
const text = line.trim();
|
|
52
|
+
return text === "" ? NOTHING : { lines: [{ level: "dim", message: text }] };
|
|
53
|
+
}
|
|
42
54
|
function toolLine(name, input) {
|
|
43
55
|
const short = name.replace(/^mcp__[^_]+__/, "").replace(/^mcp__/, "");
|
|
44
56
|
let detail;
|
|
@@ -92,7 +104,7 @@ const claude = {
|
|
|
92
104
|
read: (line) => {
|
|
93
105
|
const event = parse(line);
|
|
94
106
|
if (event === null)
|
|
95
|
-
return
|
|
107
|
+
return unparsed(line);
|
|
96
108
|
if (event.type === "system" && event.subtype === "init") {
|
|
97
109
|
return { lines: [], session: event.session_id };
|
|
98
110
|
}
|
|
@@ -125,8 +137,26 @@ const claude = {
|
|
|
125
137
|
},
|
|
126
138
|
};
|
|
127
139
|
/**
|
|
128
|
-
* OpenAI Codex CLI. `exec` is its headless verb and `--json` its event stream
|
|
129
|
-
*
|
|
140
|
+
* OpenAI Codex CLI. `exec` is its headless verb and `--json` its event stream.
|
|
141
|
+
*
|
|
142
|
+
* Documented shape, one JSON object per line:
|
|
143
|
+
*
|
|
144
|
+
* {"type":"thread.started","thread_id":"019cec77-..."}
|
|
145
|
+
* {"type":"turn.started"}
|
|
146
|
+
* {"type":"item.completed","item":{"type":"agent_message","text":"..."}}
|
|
147
|
+
* {"type":"item.started", "item":{"type":"mcp_tool_call","server":"...","tool":"..."}}
|
|
148
|
+
* {"type":"turn.completed","usage":{...}}
|
|
149
|
+
* {"type":"turn.failed","error":{"message":"..."}}
|
|
150
|
+
*
|
|
151
|
+
* Two things here were wrong and are worth naming, because both fail quietly.
|
|
152
|
+
*
|
|
153
|
+
* The session id is `thread_id` on `thread.started`, not `session_id` on a
|
|
154
|
+
* `session.created` that codex never sends -- so every panel prompt started a
|
|
155
|
+
* new conversation and "continuing" was a lie.
|
|
156
|
+
*
|
|
157
|
+
* And global flags must precede the `resume` subcommand: codex rejects
|
|
158
|
+
* `--skip-git-repo-check` placed after it, so the old argv could only ever
|
|
159
|
+
* work on the FIRST turn and broke on every follow-up.
|
|
130
160
|
*/
|
|
131
161
|
const codex = {
|
|
132
162
|
id: "codex",
|
|
@@ -134,37 +164,69 @@ const codex = {
|
|
|
134
164
|
bin: "codex",
|
|
135
165
|
argv: (prompt, session) => [
|
|
136
166
|
"exec",
|
|
137
|
-
...(session === null ? [] : ["resume", session]),
|
|
138
167
|
"--json",
|
|
139
168
|
"--skip-git-repo-check",
|
|
169
|
+
...(session === null ? [] : ["resume", session]),
|
|
140
170
|
prompt,
|
|
141
171
|
],
|
|
142
172
|
read: (line) => {
|
|
143
173
|
const event = parse(line);
|
|
144
174
|
if (event === null)
|
|
145
|
-
return
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
if (kind === "session.created" || kind === "session_configured") {
|
|
149
|
-
return { lines: [], session: item.session_id ?? event.session_id };
|
|
175
|
+
return unparsed(line);
|
|
176
|
+
if (event.type === "thread.started") {
|
|
177
|
+
return { lines: [], session: event.thread_id };
|
|
150
178
|
}
|
|
151
|
-
if (
|
|
152
|
-
return { lines:
|
|
179
|
+
if (event.type === "turn.completed") {
|
|
180
|
+
return { lines: [{ level: "ok", message: "agent done" }] };
|
|
153
181
|
}
|
|
154
|
-
if (
|
|
155
|
-
const
|
|
156
|
-
return { lines: [
|
|
182
|
+
if (event.type === "turn.failed" || event.type === "error") {
|
|
183
|
+
const message = event.error?.message ?? event.message ?? "agent failed";
|
|
184
|
+
return { lines: [{ level: "error", message: String(message) }] };
|
|
157
185
|
}
|
|
158
|
-
|
|
159
|
-
|
|
186
|
+
const item = event.item;
|
|
187
|
+
if (item === undefined)
|
|
188
|
+
return NOTHING;
|
|
189
|
+
// Tools report twice, `item.started` then `item.completed`. The started one
|
|
190
|
+
// is taken because it is the one that arrives while the work is happening,
|
|
191
|
+
// which is what a live log is for; taking both printed every call twice.
|
|
192
|
+
if (item.type === "agent_message" && event.type === "item.completed") {
|
|
193
|
+
return { lines: say(String(item.text ?? "")) };
|
|
194
|
+
}
|
|
195
|
+
if (event.type === "item.started") {
|
|
196
|
+
if (item.type === "mcp_tool_call")
|
|
197
|
+
return { lines: [toolLine(String(item.tool ?? "tool"), item.arguments)] };
|
|
198
|
+
if (item.type === "command_execution")
|
|
199
|
+
return { lines: [toolLine("shell", item.command)] };
|
|
160
200
|
}
|
|
161
|
-
if (
|
|
201
|
+
if (item.type === "error" && event.type === "item.completed") {
|
|
162
202
|
return { lines: [{ level: "error", message: String(item.message ?? "agent failed") }] };
|
|
163
203
|
}
|
|
164
204
|
return NOTHING;
|
|
165
205
|
},
|
|
166
206
|
};
|
|
167
|
-
/**
|
|
207
|
+
/**
|
|
208
|
+
* opencode. `run` is one-shot; `--format json` turns it into an event stream.
|
|
209
|
+
*
|
|
210
|
+
* The envelope here was WRONG until it was recorded from a live run, and wrong
|
|
211
|
+
* in the way that produces silence rather than an error: it expected
|
|
212
|
+
* `message.part.updated`, `session.created` and `session.idle`, none of which
|
|
213
|
+
* opencode emits. Every line fell through to NOTHING, so a prompt started the
|
|
214
|
+
* agent, the agent answered, and the panel printed a blank run and went idle.
|
|
215
|
+
*
|
|
216
|
+
* What it actually emits, one JSON object per line, verified on 1.18.30:
|
|
217
|
+
*
|
|
218
|
+
* {"type":"step_start", "sessionID":"ses_...", "part":{...}}
|
|
219
|
+
* {"type":"tool_use", "sessionID":"ses_...", "part":{"type":"tool","tool":"glob","state":{...}}}
|
|
220
|
+
* {"type":"text", "sessionID":"ses_...", "part":{"type":"text","text":"Hi there"}}
|
|
221
|
+
* {"type":"step_finish","sessionID":"ses_...", "part":{"tokens":{...},"cost":0.004}}
|
|
222
|
+
*
|
|
223
|
+
* `sessionID` rides on EVERY event rather than arriving in one of its own, so
|
|
224
|
+
* it is read from whatever comes first instead of being waited for.
|
|
225
|
+
*
|
|
226
|
+
* `step_finish` is per step, not per run -- a turn that calls a tool emits two
|
|
227
|
+
* of them -- so it is not "agent done". The run's end is the process exiting,
|
|
228
|
+
* which `run` already reports.
|
|
229
|
+
*/
|
|
168
230
|
const opencode = {
|
|
169
231
|
id: "opencode",
|
|
170
232
|
label: "opencode",
|
|
@@ -178,26 +240,25 @@ const opencode = {
|
|
|
178
240
|
],
|
|
179
241
|
read: (line) => {
|
|
180
242
|
const event = parse(line);
|
|
181
|
-
if (event === null)
|
|
182
|
-
return
|
|
243
|
+
if (event === null)
|
|
244
|
+
return unparsed(line);
|
|
245
|
+
const session = typeof event.sessionID === "string" ? event.sessionID : undefined;
|
|
246
|
+
const kind = event.type;
|
|
247
|
+
const part = event.part ?? {};
|
|
248
|
+
if (kind === "text" && typeof part.text === "string") {
|
|
249
|
+
return { lines: say(part.text), session };
|
|
183
250
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
return { lines: [], session: event.sessionID ?? event.id ?? event.properties?.info?.id };
|
|
251
|
+
if (kind === "tool_use" && typeof part.tool === "string") {
|
|
252
|
+
return { lines: [toolLine(part.tool, part.state?.input)], session };
|
|
187
253
|
}
|
|
188
|
-
if (kind === "
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
return { lines: say(part.text) };
|
|
192
|
-
if (part.type === "tool" && typeof part.tool === "string") {
|
|
193
|
-
return { lines: [toolLine(part.tool, part.state?.input)] };
|
|
194
|
-
}
|
|
195
|
-
return NOTHING;
|
|
196
|
-
}
|
|
197
|
-
if (kind === "session.idle" || kind === "done") {
|
|
198
|
-
return { lines: [{ level: "ok", message: "agent done" }] };
|
|
254
|
+
if (kind === "error") {
|
|
255
|
+
const message = event.error ?? part.error ?? "agent failed";
|
|
256
|
+
return { lines: [{ level: "error", message: String(message) }], session };
|
|
199
257
|
}
|
|
200
|
-
|
|
258
|
+
// step_start and step_finish are turn bookkeeping. They carry the token
|
|
259
|
+
// count and cost, which the panel already gets from the run's own summary,
|
|
260
|
+
// and printing a row per step would double the log for nothing.
|
|
261
|
+
return { lines: [], session };
|
|
201
262
|
},
|
|
202
263
|
};
|
|
203
264
|
/**
|
|
@@ -243,15 +304,324 @@ const dsh = {
|
|
|
243
304
|
argv: (prompt) => ["--profile", "headless", "--patch", dshOverlay(), prompt],
|
|
244
305
|
read: (line) => line.trim() === "" ? NOTHING : { lines: [{ level: "reply", message: line.trim() }] },
|
|
245
306
|
};
|
|
307
|
+
/**
|
|
308
|
+
* Gemini CLI. `-p` is its headless verb; `--output-format stream-json` turns it
|
|
309
|
+
* into an event stream of `init`, `message`, `tool_use`, `tool_result`, `error`
|
|
310
|
+
* and `result`.
|
|
311
|
+
*
|
|
312
|
+
* No documented way to resume a headless session, so every prompt is a fresh
|
|
313
|
+
* conversation. That is the CLI's limitation rather than this adapter's, and it
|
|
314
|
+
* is why `session` is ignored here instead of being passed to a flag that does
|
|
315
|
+
* not exist.
|
|
316
|
+
*/
|
|
317
|
+
const gemini = {
|
|
318
|
+
id: "gemini",
|
|
319
|
+
label: "Gemini CLI",
|
|
320
|
+
bin: "gemini",
|
|
321
|
+
argv: (prompt) => ["--output-format", "stream-json", "-p", prompt],
|
|
322
|
+
read: (line) => {
|
|
323
|
+
const event = parse(line);
|
|
324
|
+
if (event === null)
|
|
325
|
+
return unparsed(line);
|
|
326
|
+
if (event.type === "init") {
|
|
327
|
+
return { lines: [], session: event.session_id ?? event.sessionId };
|
|
328
|
+
}
|
|
329
|
+
if (event.type === "message") {
|
|
330
|
+
// Both sides of the conversation come through here; the user's half is
|
|
331
|
+
// the prompt that was just typed into the panel, and echoing it back
|
|
332
|
+
// reads as the agent repeating the question.
|
|
333
|
+
if (event.role === "user")
|
|
334
|
+
return NOTHING;
|
|
335
|
+
return { lines: say(String(event.content ?? event.text ?? "")) };
|
|
336
|
+
}
|
|
337
|
+
if (event.type === "tool_use") {
|
|
338
|
+
return { lines: [toolLine(String(event.name ?? event.tool ?? "tool"), event.args ?? event.input)] };
|
|
339
|
+
}
|
|
340
|
+
if (event.type === "error") {
|
|
341
|
+
return { lines: [{ level: "error", message: String(event.message ?? "agent failed") }] };
|
|
342
|
+
}
|
|
343
|
+
if (event.type === "result") {
|
|
344
|
+
return { lines: [{ level: "ok", message: "agent done" }] };
|
|
345
|
+
}
|
|
346
|
+
return NOTHING;
|
|
347
|
+
},
|
|
348
|
+
};
|
|
349
|
+
/**
|
|
350
|
+
* Cursor Agent. `-p` with `--output-format stream-json`, an envelope shaped
|
|
351
|
+
* closely after Claude's -- `system`/`assistant`/`result` with `session_id` on
|
|
352
|
+
* every event -- but with its own tool shape: `tool_call` carries a single key
|
|
353
|
+
* naming the kind of call, `readToolCall`, `writeToolCall` or `function`.
|
|
354
|
+
*/
|
|
355
|
+
const cursor = {
|
|
356
|
+
id: "cursor",
|
|
357
|
+
label: "Cursor Agent",
|
|
358
|
+
bin: "cursor-agent",
|
|
359
|
+
argv: (prompt, session) => [
|
|
360
|
+
...(session === null ? [] : ["--resume", session]),
|
|
361
|
+
"--output-format",
|
|
362
|
+
"stream-json",
|
|
363
|
+
"-p",
|
|
364
|
+
prompt,
|
|
365
|
+
],
|
|
366
|
+
read: (line) => {
|
|
367
|
+
const event = parse(line);
|
|
368
|
+
if (event === null)
|
|
369
|
+
return unparsed(line);
|
|
370
|
+
const session = typeof event.session_id === "string" ? event.session_id : undefined;
|
|
371
|
+
if (event.type === "assistant") {
|
|
372
|
+
const parts = event.message?.content;
|
|
373
|
+
const text = Array.isArray(parts)
|
|
374
|
+
? parts.filter((piece) => piece?.type === "text").map((piece) => piece.text).join("")
|
|
375
|
+
: "";
|
|
376
|
+
return { lines: say(String(text)), session };
|
|
377
|
+
}
|
|
378
|
+
if (event.type === "tool_call" && event.subtype === "started") {
|
|
379
|
+
const call = event.tool_call ?? {};
|
|
380
|
+
const named = Object.keys(call)[0] ?? "tool";
|
|
381
|
+
const inner = call[named] ?? {};
|
|
382
|
+
return { lines: [toolLine(inner.name ?? named, inner.args)], session };
|
|
383
|
+
}
|
|
384
|
+
if (event.type === "result") {
|
|
385
|
+
return {
|
|
386
|
+
lines: [
|
|
387
|
+
event.is_error === true
|
|
388
|
+
? { level: "error", message: "agent failed" }
|
|
389
|
+
: { level: "ok", message: "agent done" },
|
|
390
|
+
],
|
|
391
|
+
session,
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
if (event.type === "error") {
|
|
395
|
+
return { lines: [{ level: "error", message: String(event.message ?? "agent failed") }], session };
|
|
396
|
+
}
|
|
397
|
+
return { lines: [], session };
|
|
398
|
+
},
|
|
399
|
+
};
|
|
400
|
+
/**
|
|
401
|
+
* Crush. `run` takes the prompt and prints the answer as plain text -- there is
|
|
402
|
+
* no event stream and no resume, so this is `generic` with the right verb.
|
|
403
|
+
*
|
|
404
|
+
* The verb matters: the generic adapter guesses `-p`, which crush rejects as an
|
|
405
|
+
* unknown flag. A harness that is merely unstructured still works; one invoked
|
|
406
|
+
* wrongly does not run at all.
|
|
407
|
+
*/
|
|
408
|
+
const crush = {
|
|
409
|
+
id: "crush",
|
|
410
|
+
label: "Crush",
|
|
411
|
+
bin: "crush",
|
|
412
|
+
argv: (prompt) => ["run", prompt],
|
|
413
|
+
read: (line) => line.trim() === "" ? NOTHING : { lines: [{ level: "reply", message: line.trim() }] },
|
|
414
|
+
};
|
|
415
|
+
/**
|
|
416
|
+
* Reads Claude Code's `stream-json` envelope, which several other CLIs copy.
|
|
417
|
+
*
|
|
418
|
+
* Amp says so outright ("Claude Code-compatible protocol"), and the shape is
|
|
419
|
+
* the same three events with the same field names: `system`/`init` carrying
|
|
420
|
+
* `session_id`, `assistant` carrying `message.content[]` of `text` and
|
|
421
|
+
* `tool_use` parts, and `result` ending the run. Sharing the reader means a fix
|
|
422
|
+
* to one is a fix to all of them, and means a new CLI that adopts the envelope
|
|
423
|
+
* costs an argv and nothing else.
|
|
424
|
+
*
|
|
425
|
+
* `result` detail is left to the caller: Claude reports cost and duration in
|
|
426
|
+
* fields the others do not have.
|
|
427
|
+
*/
|
|
428
|
+
function readAnthropicStream(line) {
|
|
429
|
+
const event = parse(line);
|
|
430
|
+
if (event === null)
|
|
431
|
+
return unparsed(line);
|
|
432
|
+
if (event.type === "system" && event.subtype === "init") {
|
|
433
|
+
return { lines: [], session: event.session_id };
|
|
434
|
+
}
|
|
435
|
+
if (event.type === "assistant") {
|
|
436
|
+
const lines = [];
|
|
437
|
+
for (const part of event.message?.content ?? []) {
|
|
438
|
+
if (part.type === "text" && String(part.text).trim() !== "")
|
|
439
|
+
lines.push(...say(part.text));
|
|
440
|
+
if (part.type === "tool_use")
|
|
441
|
+
lines.push(toolLine(part.name, part.input));
|
|
442
|
+
}
|
|
443
|
+
return { lines, session: event.session_id };
|
|
444
|
+
}
|
|
445
|
+
if (event.type === "result") {
|
|
446
|
+
return {
|
|
447
|
+
lines: [
|
|
448
|
+
event.is_error === true
|
|
449
|
+
? { level: "error", message: "agent failed" }
|
|
450
|
+
: { level: "ok", message: "agent done" },
|
|
451
|
+
],
|
|
452
|
+
session: event.session_id,
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
return NOTHING;
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Sourcegraph Amp. `-x` is its execute verb and `--stream-json` its event
|
|
459
|
+
* stream, in Claude Code's own envelope.
|
|
460
|
+
*
|
|
461
|
+
* Continuing is a different COMMAND rather than a flag -- `amp threads continue
|
|
462
|
+
* <id>` -- so the resumed argv is not the first-run argv with something added,
|
|
463
|
+
* which is why this builds both shapes rather than appending.
|
|
464
|
+
*/
|
|
465
|
+
const amp = {
|
|
466
|
+
id: "amp",
|
|
467
|
+
label: "Amp",
|
|
468
|
+
bin: "amp",
|
|
469
|
+
argv: (prompt, session) => session === null
|
|
470
|
+
? ["-x", "--stream-json", prompt]
|
|
471
|
+
: ["threads", "continue", session, "-x", "--stream-json", prompt],
|
|
472
|
+
read: readAnthropicStream,
|
|
473
|
+
};
|
|
474
|
+
/**
|
|
475
|
+
* Qwen Code. A Gemini CLI fork, and it kept the headless interface: `-p` with
|
|
476
|
+
* `--output-format stream-json`, and the same `init`/`message`/`tool_use`
|
|
477
|
+
* events.
|
|
478
|
+
*/
|
|
479
|
+
const qwen = {
|
|
480
|
+
id: "qwen",
|
|
481
|
+
label: "Qwen Code",
|
|
482
|
+
bin: "qwen",
|
|
483
|
+
argv: (prompt) => ["--output-format", "stream-json", "-p", prompt],
|
|
484
|
+
read: (line) => gemini.read(line),
|
|
485
|
+
};
|
|
486
|
+
/**
|
|
487
|
+
* Factory Droid. `exec` is headless; `--output-format json` answers with ONE
|
|
488
|
+
* object at the end rather than a stream.
|
|
489
|
+
*
|
|
490
|
+
* `stream-json` exists and is deprecated -- it prints a warning -- and its
|
|
491
|
+
* replacement, `stream-jsonrpc`, is a request/response protocol that expects a
|
|
492
|
+
* client writing to stdin, not a log to read. A single object at the end is the
|
|
493
|
+
* honest fit for a one-shot prompt, at the cost of the panel showing the work
|
|
494
|
+
* only when it is done.
|
|
495
|
+
*
|
|
496
|
+
* `--auto medium` because a headless agent cannot answer an approval prompt,
|
|
497
|
+
* and `low` refuses the file edits an agent asked to build something needs.
|
|
498
|
+
*/
|
|
499
|
+
const droid = {
|
|
500
|
+
id: "droid",
|
|
501
|
+
label: "Factory Droid",
|
|
502
|
+
bin: "droid",
|
|
503
|
+
argv: (prompt, session) => [
|
|
504
|
+
"exec",
|
|
505
|
+
"--output-format",
|
|
506
|
+
"json",
|
|
507
|
+
"--auto",
|
|
508
|
+
"medium",
|
|
509
|
+
...(session === null ? [] : ["--session-id", session]),
|
|
510
|
+
prompt,
|
|
511
|
+
],
|
|
512
|
+
read: (line) => {
|
|
513
|
+
const event = parse(line);
|
|
514
|
+
if (event === null)
|
|
515
|
+
return unparsed(line);
|
|
516
|
+
const text = event.result ?? event.output ?? event.message ?? event.text;
|
|
517
|
+
const session = event.session_id ?? event.sessionId;
|
|
518
|
+
if (typeof text === "string" && text.trim() !== "")
|
|
519
|
+
return { lines: say(text), session };
|
|
520
|
+
return { lines: [], session };
|
|
521
|
+
},
|
|
522
|
+
};
|
|
523
|
+
/**
|
|
524
|
+
* Block's goose. `run -t` is its headless verb, and it speaks `stream-json`.
|
|
525
|
+
*
|
|
526
|
+
* Sessions are named rather than identified: `--resume -n <name>` reopens one,
|
|
527
|
+
* so the name goose reports is stored where the other harnesses store an id.
|
|
528
|
+
*/
|
|
529
|
+
const goose = {
|
|
530
|
+
id: "goose",
|
|
531
|
+
label: "goose",
|
|
532
|
+
bin: "goose",
|
|
533
|
+
argv: (prompt, session) => [
|
|
534
|
+
"run",
|
|
535
|
+
...(session === null ? [] : ["--resume", "-n", session]),
|
|
536
|
+
"--output-format",
|
|
537
|
+
"stream-json",
|
|
538
|
+
"-t",
|
|
539
|
+
prompt,
|
|
540
|
+
],
|
|
541
|
+
read: (line) => {
|
|
542
|
+
const event = parse(line);
|
|
543
|
+
if (event === null)
|
|
544
|
+
return unparsed(line);
|
|
545
|
+
const session = event.session_id ?? event.session ?? event.name;
|
|
546
|
+
const kind = event.type;
|
|
547
|
+
if (kind === "text" || kind === "message" || kind === "assistant") {
|
|
548
|
+
const text = event.text ?? event.content ?? event.message?.content;
|
|
549
|
+
if (typeof text === "string")
|
|
550
|
+
return { lines: say(text), session };
|
|
551
|
+
}
|
|
552
|
+
if (kind === "tool_use" || kind === "tool_request") {
|
|
553
|
+
return { lines: [toolLine(String(event.name ?? event.tool ?? "tool"), event.input)], session };
|
|
554
|
+
}
|
|
555
|
+
if (kind === "error") {
|
|
556
|
+
return { lines: [{ level: "error", message: String(event.message ?? "agent failed") }], session };
|
|
557
|
+
}
|
|
558
|
+
return { lines: [], session };
|
|
559
|
+
},
|
|
560
|
+
};
|
|
561
|
+
/**
|
|
562
|
+
* GitHub Copilot CLI. `-p` runs one prompt; there is no structured output --
|
|
563
|
+
* the request for it is open and unimplemented -- so this reads plain text.
|
|
564
|
+
*
|
|
565
|
+
* `--no-ask-user` matters more here than the missing JSON: without it Copilot
|
|
566
|
+
* pauses for clarification, and a headless run with nothing to answer it sits
|
|
567
|
+
* there until it is killed. `--allow-tool` is scoped to this server's tools for
|
|
568
|
+
* the same reason Claude's is: a prompt typed in a Studio panel is not consent
|
|
569
|
+
* to touch the disk.
|
|
570
|
+
*/
|
|
571
|
+
const copilot = {
|
|
572
|
+
id: "copilot",
|
|
573
|
+
label: "GitHub Copilot CLI",
|
|
574
|
+
bin: "copilot",
|
|
575
|
+
argv: (prompt) => ["-p", prompt, "--no-ask-user", "--allow-tool", "mcp__rbx-studio"],
|
|
576
|
+
read: (line) => line.trim() === "" ? NOTHING : { lines: [{ level: "reply", message: line.trim() }] },
|
|
577
|
+
};
|
|
578
|
+
/**
|
|
579
|
+
* Aider. `--message` is one shot; `--yes` answers the confirmations it would
|
|
580
|
+
* otherwise block on. No event stream, so its prose arrives as prose.
|
|
581
|
+
*/
|
|
582
|
+
const aider = {
|
|
583
|
+
id: "aider",
|
|
584
|
+
label: "Aider",
|
|
585
|
+
bin: "aider",
|
|
586
|
+
argv: (prompt) => ["--message", prompt, "--yes", "--no-pretty"],
|
|
587
|
+
read: (line) => line.trim() === "" ? NOTHING : { lines: [{ level: "reply", message: line.trim() }] },
|
|
588
|
+
};
|
|
246
589
|
const REGISTRY = [
|
|
247
590
|
claude,
|
|
248
591
|
codex,
|
|
249
592
|
opencode,
|
|
250
593
|
dsh,
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
594
|
+
gemini,
|
|
595
|
+
cursor,
|
|
596
|
+
amp,
|
|
597
|
+
qwen,
|
|
598
|
+
droid,
|
|
599
|
+
goose,
|
|
600
|
+
copilot,
|
|
601
|
+
aider,
|
|
602
|
+
crush,
|
|
254
603
|
];
|
|
604
|
+
/**
|
|
605
|
+
* Whether an MCP client's self-reported name is this harness.
|
|
606
|
+
*
|
|
607
|
+
* The names nearly agree and not quite: the harness ids here are `claude`,
|
|
608
|
+
* `codex`, `opencode`, and the clients introduce themselves as `claude-code`,
|
|
609
|
+
* `codex`, `opencode`. Compared with the punctuation stripped and either one
|
|
610
|
+
* allowed to be the prefix, which covers `claude` against `claude-code`
|
|
611
|
+
* without needing a second table to keep in sync with the first.
|
|
612
|
+
*
|
|
613
|
+
* Deliberately not clever. A wrong match here picks the wrong agent, and the
|
|
614
|
+
* cost of no match is only that the first installed one is used instead --
|
|
615
|
+
* which is the behaviour this replaces, so a miss is never worse than before.
|
|
616
|
+
*/
|
|
617
|
+
export function matchesClient(harness, clientName) {
|
|
618
|
+
const flat = (value) => value.toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
619
|
+
const id = flat(harness.id);
|
|
620
|
+
const name = flat(clientName);
|
|
621
|
+
if (id.length === 0 || name.length === 0)
|
|
622
|
+
return false;
|
|
623
|
+
return name.startsWith(id) || id.startsWith(name);
|
|
624
|
+
}
|
|
255
625
|
/**
|
|
256
626
|
* Where a binary is on PATH, or null. Found by looking rather than by running.
|
|
257
627
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness.js","sourceRoot":"","sources":["../../src/bridge/harness.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"harness.js","sourceRoot":"","sources":["../../src/bridge/harness.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/plugin/src/Config.luau
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
local Config = {}
|
|
11
11
|
|
|
12
|
-
Config.PLUGIN_VERSION = "0.5.
|
|
12
|
+
Config.PLUGIN_VERSION = "0.5.2"
|
|
13
13
|
|
|
14
14
|
-- Fingerprint of plugin/src, stamped in by scripts/build-plugin.mjs. The server
|
|
15
15
|
-- computes the same hash from its own copy of the sources and compares, so a
|
package/scripts/test-console.mjs
CHANGED
|
@@ -17,7 +17,7 @@ import { readFileSync } from "node:fs";
|
|
|
17
17
|
import { Bridge } from "../dist/bridge/rpc.js";
|
|
18
18
|
import { LocalBridge } from "../dist/bridge/api.js";
|
|
19
19
|
import { frame, handleConsole } from "../dist/bridge/console.js";
|
|
20
|
-
import { find, installed } from "../dist/bridge/harness.js";
|
|
20
|
+
import { find, installed, matchesClient } from "../dist/bridge/harness.js";
|
|
21
21
|
|
|
22
22
|
let checks = 0;
|
|
23
23
|
const ok = (condition, what) => {
|
|
@@ -60,11 +60,19 @@ const readAll = (id, lines) => {
|
|
|
60
60
|
]);
|
|
61
61
|
|
|
62
62
|
ok(session === "abc-123", "claude: session id is learned from the init event");
|
|
63
|
-
|
|
63
|
+
// Four rows, not three: the "not json at all" line is SHOWN. This assertion
|
|
64
|
+
// used to require it be dropped, which is the same instinct that made
|
|
65
|
+
// opencode print nothing -- a line we cannot parse is still evidence, and the
|
|
66
|
+
// panel is the only place the user can see it.
|
|
67
|
+
ok(rows.length === 4, "claude: init contributes no row, but junk is surfaced");
|
|
68
|
+
ok(
|
|
69
|
+
rows.some((row) => row.level === "dim" && row.message === "not json at all"),
|
|
70
|
+
"claude: an unparseable line is shown dim rather than swallowed",
|
|
71
|
+
);
|
|
64
72
|
ok(rows[0].level === "reply" && rows[0].message === "Looking at the place.", "claude: prose");
|
|
65
73
|
ok(rows[1].level === "call" && rows[1].message === "create", "claude: server prefix is stripped");
|
|
66
|
-
ok(rows[
|
|
67
|
-
ok(rows[
|
|
74
|
+
ok(rows[3].level === "ok" && rows[3].message === "agent done", "claude: result row");
|
|
75
|
+
ok(rows[3].detail === "5.6s $0.1282", "claude: duration and cost ride the detail column");
|
|
68
76
|
|
|
69
77
|
// A failure must not be reported as a completion. This is the one row a user
|
|
70
78
|
// reads to decide whether to trust what just happened to their place.
|
|
@@ -97,22 +105,123 @@ const readAll = (id, lines) => {
|
|
|
97
105
|
ok(rows[0].message === "execute_luau", "tool name keeps its own underscores");
|
|
98
106
|
}
|
|
99
107
|
|
|
100
|
-
// ---
|
|
108
|
+
// --- every adapter, against its real envelope -------------------------------
|
|
109
|
+
//
|
|
110
|
+
// This block used to assert INVENTED event names -- `session.created` for
|
|
111
|
+
// codex, `message.part.updated` for opencode -- while the file's own header
|
|
112
|
+
// claimed the shapes were recorded from live runs. They were not, and the tests
|
|
113
|
+
// passed anyway, because a test written against the same wrong envelope as the
|
|
114
|
+
// code agrees with it perfectly.
|
|
115
|
+
//
|
|
116
|
+
// What that cost: a prompt sent to opencode printed NOTHING. Every line fell
|
|
117
|
+
// through to no rows, the panel logged a blank run and went idle, and the
|
|
118
|
+
// agent's answer was thrown away. The lines below are copied from real runs
|
|
119
|
+
// (opencode 1.18.30, claude 2.1.266) or from the vendors' own documented
|
|
120
|
+
// schemas for the CLIs not installed here.
|
|
101
121
|
{
|
|
122
|
+
// opencode 1.18.30, verbatim from `opencode run --format json`.
|
|
123
|
+
const oc = readAll("opencode", [
|
|
124
|
+
JSON.stringify({ type: "step_start", sessionID: "ses_abc", part: { type: "step-start" } }),
|
|
125
|
+
JSON.stringify({
|
|
126
|
+
type: "tool_use",
|
|
127
|
+
sessionID: "ses_abc",
|
|
128
|
+
part: { type: "tool", tool: "glob", state: { input: { pattern: "*.ts" } } },
|
|
129
|
+
}),
|
|
130
|
+
JSON.stringify({
|
|
131
|
+
type: "text",
|
|
132
|
+
sessionID: "ses_abc",
|
|
133
|
+
part: { type: "text", text: "Hi there, how's it going?" },
|
|
134
|
+
}),
|
|
135
|
+
JSON.stringify({ type: "step_finish", sessionID: "ses_abc", part: { type: "step-finish" } }),
|
|
136
|
+
]);
|
|
137
|
+
ok(oc.session === "ses_abc", "opencode: session id rides on every event");
|
|
138
|
+
ok(
|
|
139
|
+
oc.rows.some((row) => row.level === "reply" && row.message === "Hi there, how's it going?"),
|
|
140
|
+
"opencode: the answer is printed -- the bug was that it never was",
|
|
141
|
+
);
|
|
142
|
+
ok(oc.rows.some((row) => row.message === "glob"), "opencode: tool calls are printed");
|
|
143
|
+
ok(
|
|
144
|
+
!oc.rows.some((row) => row.message === "agent done"),
|
|
145
|
+
"opencode: step_finish is per step, not the end of the run",
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
// Codex, from the documented exec --json protocol.
|
|
102
149
|
const codex = readAll("codex", [
|
|
103
|
-
JSON.stringify({ type: "
|
|
104
|
-
JSON.stringify({ type: "
|
|
150
|
+
JSON.stringify({ type: "thread.started", thread_id: "019cec77-af02" }),
|
|
151
|
+
JSON.stringify({ type: "turn.started" }),
|
|
152
|
+
JSON.stringify({
|
|
153
|
+
type: "item.started",
|
|
154
|
+
item: { id: "i1", type: "mcp_tool_call", server: "rbx", tool: "create", arguments: {} },
|
|
155
|
+
}),
|
|
156
|
+
JSON.stringify({
|
|
157
|
+
type: "item.completed",
|
|
158
|
+
item: { id: "i1", type: "mcp_tool_call", server: "rbx", tool: "create" },
|
|
159
|
+
}),
|
|
160
|
+
JSON.stringify({ type: "item.completed", item: { id: "i2", type: "agent_message", text: "Done." } }),
|
|
161
|
+
JSON.stringify({ type: "turn.completed", usage: {} }),
|
|
105
162
|
]);
|
|
106
|
-
ok(codex.session === "
|
|
107
|
-
ok(
|
|
163
|
+
ok(codex.session === "019cec77-af02", "codex: session comes from thread.started/thread_id");
|
|
164
|
+
ok(
|
|
165
|
+
codex.rows.some((row) => row.level === "reply" && row.message === "Done."),
|
|
166
|
+
"codex: prose",
|
|
167
|
+
);
|
|
168
|
+
ok(
|
|
169
|
+
codex.rows.filter((row) => row.message === "create").length === 1,
|
|
170
|
+
"codex: a tool reported started AND completed is logged once",
|
|
171
|
+
);
|
|
172
|
+
ok(codex.rows.some((row) => row.message === "agent done"), "codex: turn.completed ends the run");
|
|
108
173
|
|
|
109
|
-
|
|
174
|
+
// Codex global flags must precede the `resume` subcommand or it refuses them.
|
|
175
|
+
const resumed = find("codex").argv("hello", "thread-1");
|
|
176
|
+
ok(
|
|
177
|
+
resumed.indexOf("--skip-git-repo-check") < resumed.indexOf("resume"),
|
|
178
|
+
"codex: global flags come before the resume subcommand",
|
|
179
|
+
);
|
|
180
|
+
ok(resumed[resumed.length - 1] === "hello", "codex: the prompt stays last");
|
|
181
|
+
|
|
182
|
+
// Gemini, from the documented headless stream-json events.
|
|
183
|
+
const gem = readAll("gemini", [
|
|
184
|
+
JSON.stringify({ type: "init", session_id: "gem-1", model: "gemini" }),
|
|
185
|
+
JSON.stringify({ type: "message", role: "user", content: "what did I ask" }),
|
|
186
|
+
JSON.stringify({ type: "message", role: "assistant", content: "Built it." }),
|
|
187
|
+
JSON.stringify({ type: "result" }),
|
|
188
|
+
]);
|
|
189
|
+
ok(gem.session === "gem-1", "gemini: session id");
|
|
190
|
+
ok(gem.rows.some((row) => row.message === "Built it."), "gemini: the assistant half is printed");
|
|
191
|
+
ok(
|
|
192
|
+
!gem.rows.some((row) => row.message === "what did I ask"),
|
|
193
|
+
"gemini: the user half is not echoed back at them",
|
|
194
|
+
);
|
|
195
|
+
|
|
196
|
+
// Cursor, from the documented stream-json envelope.
|
|
197
|
+
const cur = readAll("cursor", [
|
|
198
|
+
JSON.stringify({ type: "system", subtype: "init", session_id: "cur-1" }),
|
|
110
199
|
JSON.stringify({
|
|
111
|
-
type: "
|
|
112
|
-
|
|
200
|
+
type: "tool_call",
|
|
201
|
+
subtype: "started",
|
|
202
|
+
session_id: "cur-1",
|
|
203
|
+
tool_call: { readToolCall: { args: { path: "a.ts" } } },
|
|
204
|
+
}),
|
|
205
|
+
JSON.stringify({
|
|
206
|
+
type: "assistant",
|
|
207
|
+
session_id: "cur-1",
|
|
208
|
+
message: { role: "assistant", content: [{ type: "text", text: "Read it." }] },
|
|
113
209
|
}),
|
|
210
|
+
JSON.stringify({ type: "result", subtype: "success", is_error: false, session_id: "cur-1" }),
|
|
114
211
|
]);
|
|
115
|
-
ok(
|
|
212
|
+
ok(cur.session === "cur-1", "cursor: session id rides on every event");
|
|
213
|
+
ok(cur.rows.some((row) => row.message === "Read it."), "cursor: text is nested in message.content");
|
|
214
|
+
ok(cur.rows.some((row) => row.message === "readToolCall"), "cursor: the tool key names the call");
|
|
215
|
+
ok(cur.rows.some((row) => row.message === "agent done"), "cursor: result ends the run");
|
|
216
|
+
|
|
217
|
+
// Crush has no event stream, but it does have its own verb -- the generic
|
|
218
|
+
// adapter guessed `-p`, which crush rejects outright as an unknown flag.
|
|
219
|
+
const crush = find("crush").argv("hello", null);
|
|
220
|
+
ok(crush[0] === "run", "crush: uses its `run` verb, not a guessed -p flag");
|
|
221
|
+
ok(
|
|
222
|
+
readAll("crush", ["Placed the model."]).rows[0].message === "Placed the model.",
|
|
223
|
+
"crush: plain text still reaches the log",
|
|
224
|
+
);
|
|
116
225
|
}
|
|
117
226
|
|
|
118
227
|
// --- DeepSeek Harness ------------------------------------------------------
|
|
@@ -290,4 +399,131 @@ const readAll = (id, lines) => {
|
|
|
290
399
|
);
|
|
291
400
|
}
|
|
292
401
|
|
|
402
|
+
// Choosing which agent answers a prompt --------------------------------------
|
|
403
|
+
//
|
|
404
|
+
// The shipped bug: someone with opencode open typed a prompt into the panel and
|
|
405
|
+
// Claude Code answered, because the choice was "first one installed" and
|
|
406
|
+
// `claude` sorts first in the registry. The answer was fine and came from the
|
|
407
|
+
// wrong program.
|
|
408
|
+
{
|
|
409
|
+
const claude = find("claude");
|
|
410
|
+
const opencode = find("opencode");
|
|
411
|
+
|
|
412
|
+
ok(matchesClient(claude, "claude-code"), "claude matches the name its client reports");
|
|
413
|
+
ok(matchesClient(opencode, "opencode"), "opencode matches its own client name");
|
|
414
|
+
ok(!matchesClient(claude, "opencode"), "and does not match a different agent");
|
|
415
|
+
ok(!matchesClient(opencode, "claude-code"), "in either direction");
|
|
416
|
+
ok(!matchesClient(claude, ""), "a nameless client matches nothing");
|
|
417
|
+
|
|
418
|
+
// The registry marks `agent` rows and picks the prompt's target from the same
|
|
419
|
+
// function, so a listing can never say "in use" about an agent the prompt
|
|
420
|
+
// would not use. Exercised through the real bridge: what makes an agent a
|
|
421
|
+
// candidate is that it is CONNECTED, which only the bridge knows.
|
|
422
|
+
const bridge = new Bridge();
|
|
423
|
+
bridge.noteClient("one", { name: "opencode", version: "1", pid: 1 });
|
|
424
|
+
bridge.noteClient("two", { name: "claude-code", version: "2", pid: 2 });
|
|
425
|
+
|
|
426
|
+
const rows = await handleConsole(bridge, 44755, {
|
|
427
|
+
studioId: "studio-agents",
|
|
428
|
+
command: "agent",
|
|
429
|
+
args: [],
|
|
430
|
+
line: "agent",
|
|
431
|
+
});
|
|
432
|
+
const text = rows.map((row) => `${row.message} ${row.detail ?? ""}`).join(" | ");
|
|
433
|
+
|
|
434
|
+
// Only meaningful when both are actually installed on the machine running the
|
|
435
|
+
// suite; otherwise there is nothing to be ambiguous between.
|
|
436
|
+
const both = installed().filter((entry) => entry.id === "claude" || entry.id === "opencode");
|
|
437
|
+
if (both.length === 2) {
|
|
438
|
+
ok(
|
|
439
|
+
rows.some((row) => row.level === "warn" && /agent use <id>/.test(row.message)),
|
|
440
|
+
"two connected agents are not silently resolved to whichever sorts first",
|
|
441
|
+
);
|
|
442
|
+
ok(!/in use/.test(text), "and none is marked as the one in use");
|
|
443
|
+
ok(/connected/.test(text), "the ones that are attached are named as attached");
|
|
444
|
+
} else {
|
|
445
|
+
ok(true, "skipped: both agents are not installed here");
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
// --- the harnesses added after the opencode failure -------------------------
|
|
450
|
+
//
|
|
451
|
+
// Same rule as the block above: every shape here comes from the vendor's own
|
|
452
|
+
// documentation, not from a guess. The point of the rule is that a guessed
|
|
453
|
+
// envelope produces silence, and silence is the failure mode this whole file
|
|
454
|
+
// exists to catch.
|
|
455
|
+
{
|
|
456
|
+
// Amp says outright that it speaks Claude Code's protocol, so it is read by
|
|
457
|
+
// the same function -- and this asserts that, rather than trusting it.
|
|
458
|
+
const amp = readAll("amp", [
|
|
459
|
+
JSON.stringify({ type: "system", subtype: "init", session_id: "T-1", cwd: "/x" }),
|
|
460
|
+
JSON.stringify({
|
|
461
|
+
type: "assistant",
|
|
462
|
+
session_id: "T-1",
|
|
463
|
+
message: {
|
|
464
|
+
content: [
|
|
465
|
+
{ type: "text", text: "Built the wall." },
|
|
466
|
+
{ type: "tool_use", name: "create", input: { className: "Part" } },
|
|
467
|
+
],
|
|
468
|
+
},
|
|
469
|
+
}),
|
|
470
|
+
JSON.stringify({ type: "result", session_id: "T-1", is_error: false }),
|
|
471
|
+
]);
|
|
472
|
+
ok(amp.session === "T-1", "amp: session id");
|
|
473
|
+
ok(amp.rows.some((row) => row.message === "Built the wall."), "amp: prose");
|
|
474
|
+
ok(amp.rows.some((row) => row.message === "create"), "amp: tool calls");
|
|
475
|
+
ok(amp.rows.some((row) => row.message === "agent done"), "amp: result ends the run");
|
|
476
|
+
|
|
477
|
+
// Continuing is a different command, not a flag: `amp threads continue <id>`.
|
|
478
|
+
const ampResume = find("amp").argv("go on", "T-1");
|
|
479
|
+
ok(ampResume[0] === "threads" && ampResume[1] === "continue", "amp: resumes with its own verb");
|
|
480
|
+
ok(ampResume[2] === "T-1", "amp: the thread id follows the verb");
|
|
481
|
+
ok(find("amp").argv("hi", null)[0] === "-x", "amp: a fresh run uses the execute flag");
|
|
482
|
+
|
|
483
|
+
// Qwen Code is a Gemini CLI fork and kept its headless envelope.
|
|
484
|
+
const qwen = readAll("qwen", [
|
|
485
|
+
JSON.stringify({ type: "init", session_id: "q-1" }),
|
|
486
|
+
JSON.stringify({ type: "message", role: "assistant", content: "Done." }),
|
|
487
|
+
]);
|
|
488
|
+
ok(qwen.session === "q-1", "qwen: session id, read as gemini");
|
|
489
|
+
ok(qwen.rows.some((row) => row.message === "Done."), "qwen: prose");
|
|
490
|
+
|
|
491
|
+
// Droid answers with one object at the end rather than a stream.
|
|
492
|
+
const droid = readAll("droid", [JSON.stringify({ session_id: "d-1", result: "Placed it." })]);
|
|
493
|
+
ok(droid.session === "d-1", "droid: session id");
|
|
494
|
+
ok(droid.rows.some((row) => row.message === "Placed it."), "droid: the final answer");
|
|
495
|
+
const droidArgv = find("droid").argv("hi", null);
|
|
496
|
+
ok(droidArgv[0] === "exec", "droid: uses its exec verb");
|
|
497
|
+
ok(droidArgv.includes("--auto"), "droid: sets an autonomy level, or it blocks on approval");
|
|
498
|
+
|
|
499
|
+
// goose names sessions instead of numbering them.
|
|
500
|
+
const goose = readAll("goose", [
|
|
501
|
+
JSON.stringify({ type: "message", text: "Ready.", session_id: "g-1" }),
|
|
502
|
+
]);
|
|
503
|
+
ok(goose.rows.some((row) => row.message === "Ready."), "goose: prose");
|
|
504
|
+
const gooseResume = find("goose").argv("go on", "g-1");
|
|
505
|
+
ok(
|
|
506
|
+
gooseResume.includes("--resume") && gooseResume[gooseResume.indexOf("-n") + 1] === "g-1",
|
|
507
|
+
"goose: resumes a session by name",
|
|
508
|
+
);
|
|
509
|
+
|
|
510
|
+
// Copilot has no structured output, but it does block without --no-ask-user.
|
|
511
|
+
const copilotArgv = find("copilot").argv("hi", null);
|
|
512
|
+
ok(copilotArgv.includes("--no-ask-user"), "copilot: never waits for a human that is not there");
|
|
513
|
+
ok(
|
|
514
|
+
readAll("copilot", ["Explained it."]).rows[0].message === "Explained it.",
|
|
515
|
+
"copilot: plain text reaches the log",
|
|
516
|
+
);
|
|
517
|
+
|
|
518
|
+
// Aider blocks on confirmations unless told not to.
|
|
519
|
+
ok(find("aider").argv("hi", null).includes("--yes"), "aider: answers its own confirmations");
|
|
520
|
+
|
|
521
|
+
// Every harness must produce SOMETHING from a plain line. A reader that
|
|
522
|
+
// silently drops unknown input is exactly how opencode printed nothing.
|
|
523
|
+
for (const harness of ["amp", "qwen", "droid", "goose", "copilot", "aider", "crush"]) {
|
|
524
|
+
const rows = readAll(harness, ["some unstructured output"]).rows;
|
|
525
|
+
ok(rows.length > 0, harness + ": unrecognised output is shown, not swallowed");
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
|
|
293
529
|
process.stdout.write(`console: ${checks} checks pass\n`);
|