@el4cteo/rbx-studio-mcp 0.5.0 → 0.5.3
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 +447 -42
- 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 +281 -14
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,8 +39,55 @@ function parse(line) {
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
/** A tool call written the way the console writes its own. */
|
|
42
|
-
|
|
43
|
-
|
|
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
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The MCP server this panel belongs to, as the agents spell it.
|
|
56
|
+
*
|
|
57
|
+
* Every harness renames MCP tools its own way: Claude and Codex write
|
|
58
|
+
* `mcp__rbx-studio__tree`, opencode writes `rbx-studio_tree`. Both are the same
|
|
59
|
+
* call, and neither is what a reader wants to see -- the tool is `tree`.
|
|
60
|
+
*/
|
|
61
|
+
const OWN_SERVER = "rbx-studio";
|
|
62
|
+
/** Strips whatever prefix a harness put in front of an MCP tool name. */
|
|
63
|
+
function shorten(name) {
|
|
64
|
+
return name
|
|
65
|
+
.replace(/^mcp__[^_]+__/, "")
|
|
66
|
+
.replace(/^mcp__/, "")
|
|
67
|
+
.replace(new RegExp("^" + OWN_SERVER + "[_-]+"), "");
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Rows for one tool call -- usually one, and none for our own tools.
|
|
71
|
+
*
|
|
72
|
+
* Studio logs every call that reaches it, with a friendly name and the time it
|
|
73
|
+
* took, for EVERY client. So an agent's own row for a `rbx-studio` call is the
|
|
74
|
+
* same event written twice, one line apart: "Check Studio 441ms" from the
|
|
75
|
+
* plugin, "rbx-studio_studio_status" from the agent. Two lines per call, and
|
|
76
|
+
* the panel's four-call test read as eight.
|
|
77
|
+
*
|
|
78
|
+
* The agent's copy is the one to drop. Studio's has the duration, has the
|
|
79
|
+
* readable name, and appears whichever client made the call -- including the
|
|
80
|
+
* user's own terminal session, which no adapter here ever sees. What is lost is
|
|
81
|
+
* the arguments; that is a fair price for a log that reads as one event per
|
|
82
|
+
* line, and `console` still has them.
|
|
83
|
+
*
|
|
84
|
+
* Everything else the agent does -- reading a file, running a shell command --
|
|
85
|
+
* Studio never sees, so those rows are all there is and they stay.
|
|
86
|
+
*/
|
|
87
|
+
function toolLines(name, input) {
|
|
88
|
+
const short = shorten(name);
|
|
89
|
+
if (short !== name)
|
|
90
|
+
return [];
|
|
44
91
|
let detail;
|
|
45
92
|
if (input !== null && typeof input === "object") {
|
|
46
93
|
const parts = Object.entries(input)
|
|
@@ -53,7 +100,7 @@ function toolLine(name, input) {
|
|
|
53
100
|
if (parts.length > 0)
|
|
54
101
|
detail = parts.join(" ");
|
|
55
102
|
}
|
|
56
|
-
return { level: "call", message: short, detail };
|
|
103
|
+
return [{ level: "call", message: short, detail }];
|
|
57
104
|
}
|
|
58
105
|
/** Collapses a paragraph into the one-line rows a console log can hold. */
|
|
59
106
|
function say(text) {
|
|
@@ -92,7 +139,7 @@ const claude = {
|
|
|
92
139
|
read: (line) => {
|
|
93
140
|
const event = parse(line);
|
|
94
141
|
if (event === null)
|
|
95
|
-
return
|
|
142
|
+
return unparsed(line);
|
|
96
143
|
if (event.type === "system" && event.subtype === "init") {
|
|
97
144
|
return { lines: [], session: event.session_id };
|
|
98
145
|
}
|
|
@@ -102,7 +149,7 @@ const claude = {
|
|
|
102
149
|
if (part.type === "text" && String(part.text).trim() !== "")
|
|
103
150
|
lines.push(...say(part.text));
|
|
104
151
|
if (part.type === "tool_use")
|
|
105
|
-
lines.push(
|
|
152
|
+
lines.push(...toolLines(part.name, part.input));
|
|
106
153
|
}
|
|
107
154
|
return { lines, session: event.session_id };
|
|
108
155
|
}
|
|
@@ -125,8 +172,26 @@ const claude = {
|
|
|
125
172
|
},
|
|
126
173
|
};
|
|
127
174
|
/**
|
|
128
|
-
* OpenAI Codex CLI. `exec` is its headless verb and `--json` its event stream
|
|
129
|
-
*
|
|
175
|
+
* OpenAI Codex CLI. `exec` is its headless verb and `--json` its event stream.
|
|
176
|
+
*
|
|
177
|
+
* Documented shape, one JSON object per line:
|
|
178
|
+
*
|
|
179
|
+
* {"type":"thread.started","thread_id":"019cec77-..."}
|
|
180
|
+
* {"type":"turn.started"}
|
|
181
|
+
* {"type":"item.completed","item":{"type":"agent_message","text":"..."}}
|
|
182
|
+
* {"type":"item.started", "item":{"type":"mcp_tool_call","server":"...","tool":"..."}}
|
|
183
|
+
* {"type":"turn.completed","usage":{...}}
|
|
184
|
+
* {"type":"turn.failed","error":{"message":"..."}}
|
|
185
|
+
*
|
|
186
|
+
* Two things here were wrong and are worth naming, because both fail quietly.
|
|
187
|
+
*
|
|
188
|
+
* The session id is `thread_id` on `thread.started`, not `session_id` on a
|
|
189
|
+
* `session.created` that codex never sends -- so every panel prompt started a
|
|
190
|
+
* new conversation and "continuing" was a lie.
|
|
191
|
+
*
|
|
192
|
+
* And global flags must precede the `resume` subcommand: codex rejects
|
|
193
|
+
* `--skip-git-repo-check` placed after it, so the old argv could only ever
|
|
194
|
+
* work on the FIRST turn and broke on every follow-up.
|
|
130
195
|
*/
|
|
131
196
|
const codex = {
|
|
132
197
|
id: "codex",
|
|
@@ -134,37 +199,69 @@ const codex = {
|
|
|
134
199
|
bin: "codex",
|
|
135
200
|
argv: (prompt, session) => [
|
|
136
201
|
"exec",
|
|
137
|
-
...(session === null ? [] : ["resume", session]),
|
|
138
202
|
"--json",
|
|
139
203
|
"--skip-git-repo-check",
|
|
204
|
+
...(session === null ? [] : ["resume", session]),
|
|
140
205
|
prompt,
|
|
141
206
|
],
|
|
142
207
|
read: (line) => {
|
|
143
208
|
const event = parse(line);
|
|
144
209
|
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 };
|
|
210
|
+
return unparsed(line);
|
|
211
|
+
if (event.type === "thread.started") {
|
|
212
|
+
return { lines: [], session: event.thread_id };
|
|
150
213
|
}
|
|
151
|
-
if (
|
|
152
|
-
return { lines:
|
|
214
|
+
if (event.type === "turn.completed") {
|
|
215
|
+
return { lines: [{ level: "ok", message: "agent done" }] };
|
|
153
216
|
}
|
|
154
|
-
if (
|
|
155
|
-
const
|
|
156
|
-
return { lines: [
|
|
217
|
+
if (event.type === "turn.failed" || event.type === "error") {
|
|
218
|
+
const message = event.error?.message ?? event.message ?? "agent failed";
|
|
219
|
+
return { lines: [{ level: "error", message: String(message) }] };
|
|
157
220
|
}
|
|
158
|
-
|
|
159
|
-
|
|
221
|
+
const item = event.item;
|
|
222
|
+
if (item === undefined)
|
|
223
|
+
return NOTHING;
|
|
224
|
+
// Tools report twice, `item.started` then `item.completed`. The started one
|
|
225
|
+
// is taken because it is the one that arrives while the work is happening,
|
|
226
|
+
// which is what a live log is for; taking both printed every call twice.
|
|
227
|
+
if (item.type === "agent_message" && event.type === "item.completed") {
|
|
228
|
+
return { lines: say(String(item.text ?? "")) };
|
|
160
229
|
}
|
|
161
|
-
if (
|
|
230
|
+
if (event.type === "item.started") {
|
|
231
|
+
if (item.type === "mcp_tool_call")
|
|
232
|
+
return { lines: toolLines(String(item.tool ?? "tool"), item.arguments) };
|
|
233
|
+
if (item.type === "command_execution")
|
|
234
|
+
return { lines: toolLines("shell", item.command) };
|
|
235
|
+
}
|
|
236
|
+
if (item.type === "error" && event.type === "item.completed") {
|
|
162
237
|
return { lines: [{ level: "error", message: String(item.message ?? "agent failed") }] };
|
|
163
238
|
}
|
|
164
239
|
return NOTHING;
|
|
165
240
|
},
|
|
166
241
|
};
|
|
167
|
-
/**
|
|
242
|
+
/**
|
|
243
|
+
* opencode. `run` is one-shot; `--format json` turns it into an event stream.
|
|
244
|
+
*
|
|
245
|
+
* The envelope here was WRONG until it was recorded from a live run, and wrong
|
|
246
|
+
* in the way that produces silence rather than an error: it expected
|
|
247
|
+
* `message.part.updated`, `session.created` and `session.idle`, none of which
|
|
248
|
+
* opencode emits. Every line fell through to NOTHING, so a prompt started the
|
|
249
|
+
* agent, the agent answered, and the panel printed a blank run and went idle.
|
|
250
|
+
*
|
|
251
|
+
* What it actually emits, one JSON object per line, verified on 1.18.30:
|
|
252
|
+
*
|
|
253
|
+
* {"type":"step_start", "sessionID":"ses_...", "part":{...}}
|
|
254
|
+
* {"type":"tool_use", "sessionID":"ses_...", "part":{"type":"tool","tool":"glob","state":{...}}}
|
|
255
|
+
* {"type":"text", "sessionID":"ses_...", "part":{"type":"text","text":"Hi there"}}
|
|
256
|
+
* {"type":"step_finish","sessionID":"ses_...", "part":{"tokens":{...},"cost":0.004}}
|
|
257
|
+
*
|
|
258
|
+
* `sessionID` rides on EVERY event rather than arriving in one of its own, so
|
|
259
|
+
* it is read from whatever comes first instead of being waited for.
|
|
260
|
+
*
|
|
261
|
+
* `step_finish` is per step, not per run -- a turn that calls a tool emits two
|
|
262
|
+
* of them -- so it is not "agent done". The run's end is the process exiting,
|
|
263
|
+
* which `run` already reports.
|
|
264
|
+
*/
|
|
168
265
|
const opencode = {
|
|
169
266
|
id: "opencode",
|
|
170
267
|
label: "opencode",
|
|
@@ -178,26 +275,25 @@ const opencode = {
|
|
|
178
275
|
],
|
|
179
276
|
read: (line) => {
|
|
180
277
|
const event = parse(line);
|
|
181
|
-
if (event === null)
|
|
182
|
-
return
|
|
278
|
+
if (event === null)
|
|
279
|
+
return unparsed(line);
|
|
280
|
+
const session = typeof event.sessionID === "string" ? event.sessionID : undefined;
|
|
281
|
+
const kind = event.type;
|
|
282
|
+
const part = event.part ?? {};
|
|
283
|
+
if (kind === "text" && typeof part.text === "string") {
|
|
284
|
+
return { lines: say(part.text), session };
|
|
183
285
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
return { lines: [], session: event.sessionID ?? event.id ?? event.properties?.info?.id };
|
|
286
|
+
if (kind === "tool_use" && typeof part.tool === "string") {
|
|
287
|
+
return { lines: toolLines(part.tool, part.state?.input), session };
|
|
187
288
|
}
|
|
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;
|
|
289
|
+
if (kind === "error") {
|
|
290
|
+
const message = event.error ?? part.error ?? "agent failed";
|
|
291
|
+
return { lines: [{ level: "error", message: String(message) }], session };
|
|
196
292
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
return
|
|
293
|
+
// step_start and step_finish are turn bookkeeping. They carry the token
|
|
294
|
+
// count and cost, which the panel already gets from the run's own summary,
|
|
295
|
+
// and printing a row per step would double the log for nothing.
|
|
296
|
+
return { lines: [], session };
|
|
201
297
|
},
|
|
202
298
|
};
|
|
203
299
|
/**
|
|
@@ -243,15 +339,324 @@ const dsh = {
|
|
|
243
339
|
argv: (prompt) => ["--profile", "headless", "--patch", dshOverlay(), prompt],
|
|
244
340
|
read: (line) => line.trim() === "" ? NOTHING : { lines: [{ level: "reply", message: line.trim() }] },
|
|
245
341
|
};
|
|
342
|
+
/**
|
|
343
|
+
* Gemini CLI. `-p` is its headless verb; `--output-format stream-json` turns it
|
|
344
|
+
* into an event stream of `init`, `message`, `tool_use`, `tool_result`, `error`
|
|
345
|
+
* and `result`.
|
|
346
|
+
*
|
|
347
|
+
* No documented way to resume a headless session, so every prompt is a fresh
|
|
348
|
+
* conversation. That is the CLI's limitation rather than this adapter's, and it
|
|
349
|
+
* is why `session` is ignored here instead of being passed to a flag that does
|
|
350
|
+
* not exist.
|
|
351
|
+
*/
|
|
352
|
+
const gemini = {
|
|
353
|
+
id: "gemini",
|
|
354
|
+
label: "Gemini CLI",
|
|
355
|
+
bin: "gemini",
|
|
356
|
+
argv: (prompt) => ["--output-format", "stream-json", "-p", prompt],
|
|
357
|
+
read: (line) => {
|
|
358
|
+
const event = parse(line);
|
|
359
|
+
if (event === null)
|
|
360
|
+
return unparsed(line);
|
|
361
|
+
if (event.type === "init") {
|
|
362
|
+
return { lines: [], session: event.session_id ?? event.sessionId };
|
|
363
|
+
}
|
|
364
|
+
if (event.type === "message") {
|
|
365
|
+
// Both sides of the conversation come through here; the user's half is
|
|
366
|
+
// the prompt that was just typed into the panel, and echoing it back
|
|
367
|
+
// reads as the agent repeating the question.
|
|
368
|
+
if (event.role === "user")
|
|
369
|
+
return NOTHING;
|
|
370
|
+
return { lines: say(String(event.content ?? event.text ?? "")) };
|
|
371
|
+
}
|
|
372
|
+
if (event.type === "tool_use") {
|
|
373
|
+
return { lines: toolLines(String(event.name ?? event.tool ?? "tool"), event.args ?? event.input) };
|
|
374
|
+
}
|
|
375
|
+
if (event.type === "error") {
|
|
376
|
+
return { lines: [{ level: "error", message: String(event.message ?? "agent failed") }] };
|
|
377
|
+
}
|
|
378
|
+
if (event.type === "result") {
|
|
379
|
+
return { lines: [{ level: "ok", message: "agent done" }] };
|
|
380
|
+
}
|
|
381
|
+
return NOTHING;
|
|
382
|
+
},
|
|
383
|
+
};
|
|
384
|
+
/**
|
|
385
|
+
* Cursor Agent. `-p` with `--output-format stream-json`, an envelope shaped
|
|
386
|
+
* closely after Claude's -- `system`/`assistant`/`result` with `session_id` on
|
|
387
|
+
* every event -- but with its own tool shape: `tool_call` carries a single key
|
|
388
|
+
* naming the kind of call, `readToolCall`, `writeToolCall` or `function`.
|
|
389
|
+
*/
|
|
390
|
+
const cursor = {
|
|
391
|
+
id: "cursor",
|
|
392
|
+
label: "Cursor Agent",
|
|
393
|
+
bin: "cursor-agent",
|
|
394
|
+
argv: (prompt, session) => [
|
|
395
|
+
...(session === null ? [] : ["--resume", session]),
|
|
396
|
+
"--output-format",
|
|
397
|
+
"stream-json",
|
|
398
|
+
"-p",
|
|
399
|
+
prompt,
|
|
400
|
+
],
|
|
401
|
+
read: (line) => {
|
|
402
|
+
const event = parse(line);
|
|
403
|
+
if (event === null)
|
|
404
|
+
return unparsed(line);
|
|
405
|
+
const session = typeof event.session_id === "string" ? event.session_id : undefined;
|
|
406
|
+
if (event.type === "assistant") {
|
|
407
|
+
const parts = event.message?.content;
|
|
408
|
+
const text = Array.isArray(parts)
|
|
409
|
+
? parts.filter((piece) => piece?.type === "text").map((piece) => piece.text).join("")
|
|
410
|
+
: "";
|
|
411
|
+
return { lines: say(String(text)), session };
|
|
412
|
+
}
|
|
413
|
+
if (event.type === "tool_call" && event.subtype === "started") {
|
|
414
|
+
const call = event.tool_call ?? {};
|
|
415
|
+
const named = Object.keys(call)[0] ?? "tool";
|
|
416
|
+
const inner = call[named] ?? {};
|
|
417
|
+
return { lines: toolLines(inner.name ?? named, inner.args), session };
|
|
418
|
+
}
|
|
419
|
+
if (event.type === "result") {
|
|
420
|
+
return {
|
|
421
|
+
lines: [
|
|
422
|
+
event.is_error === true
|
|
423
|
+
? { level: "error", message: "agent failed" }
|
|
424
|
+
: { level: "ok", message: "agent done" },
|
|
425
|
+
],
|
|
426
|
+
session,
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
if (event.type === "error") {
|
|
430
|
+
return { lines: [{ level: "error", message: String(event.message ?? "agent failed") }], session };
|
|
431
|
+
}
|
|
432
|
+
return { lines: [], session };
|
|
433
|
+
},
|
|
434
|
+
};
|
|
435
|
+
/**
|
|
436
|
+
* Crush. `run` takes the prompt and prints the answer as plain text -- there is
|
|
437
|
+
* no event stream and no resume, so this is `generic` with the right verb.
|
|
438
|
+
*
|
|
439
|
+
* The verb matters: the generic adapter guesses `-p`, which crush rejects as an
|
|
440
|
+
* unknown flag. A harness that is merely unstructured still works; one invoked
|
|
441
|
+
* wrongly does not run at all.
|
|
442
|
+
*/
|
|
443
|
+
const crush = {
|
|
444
|
+
id: "crush",
|
|
445
|
+
label: "Crush",
|
|
446
|
+
bin: "crush",
|
|
447
|
+
argv: (prompt) => ["run", prompt],
|
|
448
|
+
read: (line) => line.trim() === "" ? NOTHING : { lines: [{ level: "reply", message: line.trim() }] },
|
|
449
|
+
};
|
|
450
|
+
/**
|
|
451
|
+
* Reads Claude Code's `stream-json` envelope, which several other CLIs copy.
|
|
452
|
+
*
|
|
453
|
+
* Amp says so outright ("Claude Code-compatible protocol"), and the shape is
|
|
454
|
+
* the same three events with the same field names: `system`/`init` carrying
|
|
455
|
+
* `session_id`, `assistant` carrying `message.content[]` of `text` and
|
|
456
|
+
* `tool_use` parts, and `result` ending the run. Sharing the reader means a fix
|
|
457
|
+
* to one is a fix to all of them, and means a new CLI that adopts the envelope
|
|
458
|
+
* costs an argv and nothing else.
|
|
459
|
+
*
|
|
460
|
+
* `result` detail is left to the caller: Claude reports cost and duration in
|
|
461
|
+
* fields the others do not have.
|
|
462
|
+
*/
|
|
463
|
+
function readAnthropicStream(line) {
|
|
464
|
+
const event = parse(line);
|
|
465
|
+
if (event === null)
|
|
466
|
+
return unparsed(line);
|
|
467
|
+
if (event.type === "system" && event.subtype === "init") {
|
|
468
|
+
return { lines: [], session: event.session_id };
|
|
469
|
+
}
|
|
470
|
+
if (event.type === "assistant") {
|
|
471
|
+
const lines = [];
|
|
472
|
+
for (const part of event.message?.content ?? []) {
|
|
473
|
+
if (part.type === "text" && String(part.text).trim() !== "")
|
|
474
|
+
lines.push(...say(part.text));
|
|
475
|
+
if (part.type === "tool_use")
|
|
476
|
+
lines.push(...toolLines(part.name, part.input));
|
|
477
|
+
}
|
|
478
|
+
return { lines, session: event.session_id };
|
|
479
|
+
}
|
|
480
|
+
if (event.type === "result") {
|
|
481
|
+
return {
|
|
482
|
+
lines: [
|
|
483
|
+
event.is_error === true
|
|
484
|
+
? { level: "error", message: "agent failed" }
|
|
485
|
+
: { level: "ok", message: "agent done" },
|
|
486
|
+
],
|
|
487
|
+
session: event.session_id,
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
return NOTHING;
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Sourcegraph Amp. `-x` is its execute verb and `--stream-json` its event
|
|
494
|
+
* stream, in Claude Code's own envelope.
|
|
495
|
+
*
|
|
496
|
+
* Continuing is a different COMMAND rather than a flag -- `amp threads continue
|
|
497
|
+
* <id>` -- so the resumed argv is not the first-run argv with something added,
|
|
498
|
+
* which is why this builds both shapes rather than appending.
|
|
499
|
+
*/
|
|
500
|
+
const amp = {
|
|
501
|
+
id: "amp",
|
|
502
|
+
label: "Amp",
|
|
503
|
+
bin: "amp",
|
|
504
|
+
argv: (prompt, session) => session === null
|
|
505
|
+
? ["-x", "--stream-json", prompt]
|
|
506
|
+
: ["threads", "continue", session, "-x", "--stream-json", prompt],
|
|
507
|
+
read: readAnthropicStream,
|
|
508
|
+
};
|
|
509
|
+
/**
|
|
510
|
+
* Qwen Code. A Gemini CLI fork, and it kept the headless interface: `-p` with
|
|
511
|
+
* `--output-format stream-json`, and the same `init`/`message`/`tool_use`
|
|
512
|
+
* events.
|
|
513
|
+
*/
|
|
514
|
+
const qwen = {
|
|
515
|
+
id: "qwen",
|
|
516
|
+
label: "Qwen Code",
|
|
517
|
+
bin: "qwen",
|
|
518
|
+
argv: (prompt) => ["--output-format", "stream-json", "-p", prompt],
|
|
519
|
+
read: (line) => gemini.read(line),
|
|
520
|
+
};
|
|
521
|
+
/**
|
|
522
|
+
* Factory Droid. `exec` is headless; `--output-format json` answers with ONE
|
|
523
|
+
* object at the end rather than a stream.
|
|
524
|
+
*
|
|
525
|
+
* `stream-json` exists and is deprecated -- it prints a warning -- and its
|
|
526
|
+
* replacement, `stream-jsonrpc`, is a request/response protocol that expects a
|
|
527
|
+
* client writing to stdin, not a log to read. A single object at the end is the
|
|
528
|
+
* honest fit for a one-shot prompt, at the cost of the panel showing the work
|
|
529
|
+
* only when it is done.
|
|
530
|
+
*
|
|
531
|
+
* `--auto medium` because a headless agent cannot answer an approval prompt,
|
|
532
|
+
* and `low` refuses the file edits an agent asked to build something needs.
|
|
533
|
+
*/
|
|
534
|
+
const droid = {
|
|
535
|
+
id: "droid",
|
|
536
|
+
label: "Factory Droid",
|
|
537
|
+
bin: "droid",
|
|
538
|
+
argv: (prompt, session) => [
|
|
539
|
+
"exec",
|
|
540
|
+
"--output-format",
|
|
541
|
+
"json",
|
|
542
|
+
"--auto",
|
|
543
|
+
"medium",
|
|
544
|
+
...(session === null ? [] : ["--session-id", session]),
|
|
545
|
+
prompt,
|
|
546
|
+
],
|
|
547
|
+
read: (line) => {
|
|
548
|
+
const event = parse(line);
|
|
549
|
+
if (event === null)
|
|
550
|
+
return unparsed(line);
|
|
551
|
+
const text = event.result ?? event.output ?? event.message ?? event.text;
|
|
552
|
+
const session = event.session_id ?? event.sessionId;
|
|
553
|
+
if (typeof text === "string" && text.trim() !== "")
|
|
554
|
+
return { lines: say(text), session };
|
|
555
|
+
return { lines: [], session };
|
|
556
|
+
},
|
|
557
|
+
};
|
|
558
|
+
/**
|
|
559
|
+
* Block's goose. `run -t` is its headless verb, and it speaks `stream-json`.
|
|
560
|
+
*
|
|
561
|
+
* Sessions are named rather than identified: `--resume -n <name>` reopens one,
|
|
562
|
+
* so the name goose reports is stored where the other harnesses store an id.
|
|
563
|
+
*/
|
|
564
|
+
const goose = {
|
|
565
|
+
id: "goose",
|
|
566
|
+
label: "goose",
|
|
567
|
+
bin: "goose",
|
|
568
|
+
argv: (prompt, session) => [
|
|
569
|
+
"run",
|
|
570
|
+
...(session === null ? [] : ["--resume", "-n", session]),
|
|
571
|
+
"--output-format",
|
|
572
|
+
"stream-json",
|
|
573
|
+
"-t",
|
|
574
|
+
prompt,
|
|
575
|
+
],
|
|
576
|
+
read: (line) => {
|
|
577
|
+
const event = parse(line);
|
|
578
|
+
if (event === null)
|
|
579
|
+
return unparsed(line);
|
|
580
|
+
const session = event.session_id ?? event.session ?? event.name;
|
|
581
|
+
const kind = event.type;
|
|
582
|
+
if (kind === "text" || kind === "message" || kind === "assistant") {
|
|
583
|
+
const text = event.text ?? event.content ?? event.message?.content;
|
|
584
|
+
if (typeof text === "string")
|
|
585
|
+
return { lines: say(text), session };
|
|
586
|
+
}
|
|
587
|
+
if (kind === "tool_use" || kind === "tool_request") {
|
|
588
|
+
return { lines: toolLines(String(event.name ?? event.tool ?? "tool"), event.input), session };
|
|
589
|
+
}
|
|
590
|
+
if (kind === "error") {
|
|
591
|
+
return { lines: [{ level: "error", message: String(event.message ?? "agent failed") }], session };
|
|
592
|
+
}
|
|
593
|
+
return { lines: [], session };
|
|
594
|
+
},
|
|
595
|
+
};
|
|
596
|
+
/**
|
|
597
|
+
* GitHub Copilot CLI. `-p` runs one prompt; there is no structured output --
|
|
598
|
+
* the request for it is open and unimplemented -- so this reads plain text.
|
|
599
|
+
*
|
|
600
|
+
* `--no-ask-user` matters more here than the missing JSON: without it Copilot
|
|
601
|
+
* pauses for clarification, and a headless run with nothing to answer it sits
|
|
602
|
+
* there until it is killed. `--allow-tool` is scoped to this server's tools for
|
|
603
|
+
* the same reason Claude's is: a prompt typed in a Studio panel is not consent
|
|
604
|
+
* to touch the disk.
|
|
605
|
+
*/
|
|
606
|
+
const copilot = {
|
|
607
|
+
id: "copilot",
|
|
608
|
+
label: "GitHub Copilot CLI",
|
|
609
|
+
bin: "copilot",
|
|
610
|
+
argv: (prompt) => ["-p", prompt, "--no-ask-user", "--allow-tool", "mcp__rbx-studio"],
|
|
611
|
+
read: (line) => line.trim() === "" ? NOTHING : { lines: [{ level: "reply", message: line.trim() }] },
|
|
612
|
+
};
|
|
613
|
+
/**
|
|
614
|
+
* Aider. `--message` is one shot; `--yes` answers the confirmations it would
|
|
615
|
+
* otherwise block on. No event stream, so its prose arrives as prose.
|
|
616
|
+
*/
|
|
617
|
+
const aider = {
|
|
618
|
+
id: "aider",
|
|
619
|
+
label: "Aider",
|
|
620
|
+
bin: "aider",
|
|
621
|
+
argv: (prompt) => ["--message", prompt, "--yes", "--no-pretty"],
|
|
622
|
+
read: (line) => line.trim() === "" ? NOTHING : { lines: [{ level: "reply", message: line.trim() }] },
|
|
623
|
+
};
|
|
246
624
|
const REGISTRY = [
|
|
247
625
|
claude,
|
|
248
626
|
codex,
|
|
249
627
|
opencode,
|
|
250
628
|
dsh,
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
629
|
+
gemini,
|
|
630
|
+
cursor,
|
|
631
|
+
amp,
|
|
632
|
+
qwen,
|
|
633
|
+
droid,
|
|
634
|
+
goose,
|
|
635
|
+
copilot,
|
|
636
|
+
aider,
|
|
637
|
+
crush,
|
|
254
638
|
];
|
|
639
|
+
/**
|
|
640
|
+
* Whether an MCP client's self-reported name is this harness.
|
|
641
|
+
*
|
|
642
|
+
* The names nearly agree and not quite: the harness ids here are `claude`,
|
|
643
|
+
* `codex`, `opencode`, and the clients introduce themselves as `claude-code`,
|
|
644
|
+
* `codex`, `opencode`. Compared with the punctuation stripped and either one
|
|
645
|
+
* allowed to be the prefix, which covers `claude` against `claude-code`
|
|
646
|
+
* without needing a second table to keep in sync with the first.
|
|
647
|
+
*
|
|
648
|
+
* Deliberately not clever. A wrong match here picks the wrong agent, and the
|
|
649
|
+
* cost of no match is only that the first installed one is used instead --
|
|
650
|
+
* which is the behaviour this replaces, so a miss is never worse than before.
|
|
651
|
+
*/
|
|
652
|
+
export function matchesClient(harness, clientName) {
|
|
653
|
+
const flat = (value) => value.toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
654
|
+
const id = flat(harness.id);
|
|
655
|
+
const name = flat(clientName);
|
|
656
|
+
if (id.length === 0 || name.length === 0)
|
|
657
|
+
return false;
|
|
658
|
+
return name.startsWith(id) || id.startsWith(name);
|
|
659
|
+
}
|
|
255
660
|
/**
|
|
256
661
|
* Where a binary is on PATH, or null. Found by looking rather than by running.
|
|
257
662
|
*
|
|
@@ -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.3"
|
|
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,12 +60,51 @@ 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
|
+
// Three rows, and which three is the point. The junk line IS shown -- that
|
|
68
|
+
// assertion used to require it be dropped, the same instinct that made
|
|
69
|
+
// opencode print nothing. The rbx-studio tool call is NOT, because Studio
|
|
70
|
+
// logs every call that reaches it with a friendlier name and a duration, and
|
|
71
|
+
// the agent's copy of it made every call two lines in the panel.
|
|
72
|
+
ok(rows.length === 3, "claude: junk is surfaced, our own tool call is not doubled");
|
|
73
|
+
ok(
|
|
74
|
+
rows.some((row) => row.level === "dim" && row.message === "not json at all"),
|
|
75
|
+
"claude: an unparseable line is shown dim rather than swallowed",
|
|
76
|
+
);
|
|
77
|
+
ok(
|
|
78
|
+
!rows.some((row) => row.level === "call"),
|
|
79
|
+
"claude: an rbx-studio call is left to Studio's own log",
|
|
80
|
+
);
|
|
64
81
|
ok(rows[0].level === "reply" && rows[0].message === "Looking at the place.", "claude: prose");
|
|
65
|
-
ok(rows[1].level === "call" && rows[1].message === "create", "claude: server prefix is stripped");
|
|
66
82
|
ok(rows[2].level === "ok" && rows[2].message === "agent done", "claude: result row");
|
|
67
83
|
ok(rows[2].detail === "5.6s $0.1282", "claude: duration and cost ride the detail column");
|
|
68
84
|
|
|
85
|
+
// A tool that is NOT ours is all the panel will ever hear about, so it stays.
|
|
86
|
+
const outside = readAll("claude", [
|
|
87
|
+
JSON.stringify({
|
|
88
|
+
type: "assistant",
|
|
89
|
+
message: { content: [{ type: "tool_use", name: "Bash", input: { command: "ls -la" } }] },
|
|
90
|
+
}),
|
|
91
|
+
]);
|
|
92
|
+
ok(
|
|
93
|
+
outside.rows[0].level === "call" && outside.rows[0].message === "Bash",
|
|
94
|
+
"claude: a tool Studio never sees is still logged",
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
// opencode names MCP tools `<server>_<tool>`, not `mcp__<server>__<tool>`.
|
|
98
|
+
// Unstripped it printed "rbx-studio_studio_status" AND doubled Studio's row.
|
|
99
|
+
const named = readAll("opencode", [
|
|
100
|
+
JSON.stringify({
|
|
101
|
+
type: "tool_use",
|
|
102
|
+
sessionID: "s",
|
|
103
|
+
part: { type: "tool", tool: "rbx-studio_studio_status", state: { input: {} } },
|
|
104
|
+
}),
|
|
105
|
+
]);
|
|
106
|
+
ok(named.rows.length === 0, "opencode: its own naming of our tools is recognised too");
|
|
107
|
+
|
|
69
108
|
// A failure must not be reported as a completion. This is the one row a user
|
|
70
109
|
// reads to decide whether to trust what just happened to their place.
|
|
71
110
|
const failed = readAll("claude", [
|
|
@@ -86,7 +125,7 @@ const readAll = (id, lines) => {
|
|
|
86
125
|
content: [
|
|
87
126
|
{
|
|
88
127
|
type: "tool_use",
|
|
89
|
-
name: "
|
|
128
|
+
name: "Bash",
|
|
90
129
|
input: { source: "local m = workspace.SmallHouse\nm.Parent = nil\nprint(m)" },
|
|
91
130
|
},
|
|
92
131
|
],
|
|
@@ -94,25 +133,126 @@ const readAll = (id, lines) => {
|
|
|
94
133
|
}),
|
|
95
134
|
]);
|
|
96
135
|
ok(!rows[0].detail.includes("\n"), "tool detail never contains a newline");
|
|
97
|
-
ok(rows[0].message === "
|
|
136
|
+
ok(rows[0].message === "Bash", "an outside tool keeps its own name");
|
|
98
137
|
}
|
|
99
138
|
|
|
100
|
-
// ---
|
|
139
|
+
// --- every adapter, against its real envelope -------------------------------
|
|
140
|
+
//
|
|
141
|
+
// This block used to assert INVENTED event names -- `session.created` for
|
|
142
|
+
// codex, `message.part.updated` for opencode -- while the file's own header
|
|
143
|
+
// claimed the shapes were recorded from live runs. They were not, and the tests
|
|
144
|
+
// passed anyway, because a test written against the same wrong envelope as the
|
|
145
|
+
// code agrees with it perfectly.
|
|
146
|
+
//
|
|
147
|
+
// What that cost: a prompt sent to opencode printed NOTHING. Every line fell
|
|
148
|
+
// through to no rows, the panel logged a blank run and went idle, and the
|
|
149
|
+
// agent's answer was thrown away. The lines below are copied from real runs
|
|
150
|
+
// (opencode 1.18.30, claude 2.1.266) or from the vendors' own documented
|
|
151
|
+
// schemas for the CLIs not installed here.
|
|
101
152
|
{
|
|
153
|
+
// opencode 1.18.30, verbatim from `opencode run --format json`.
|
|
154
|
+
const oc = readAll("opencode", [
|
|
155
|
+
JSON.stringify({ type: "step_start", sessionID: "ses_abc", part: { type: "step-start" } }),
|
|
156
|
+
JSON.stringify({
|
|
157
|
+
type: "tool_use",
|
|
158
|
+
sessionID: "ses_abc",
|
|
159
|
+
part: { type: "tool", tool: "glob", state: { input: { pattern: "*.ts" } } },
|
|
160
|
+
}),
|
|
161
|
+
JSON.stringify({
|
|
162
|
+
type: "text",
|
|
163
|
+
sessionID: "ses_abc",
|
|
164
|
+
part: { type: "text", text: "Hi there, how's it going?" },
|
|
165
|
+
}),
|
|
166
|
+
JSON.stringify({ type: "step_finish", sessionID: "ses_abc", part: { type: "step-finish" } }),
|
|
167
|
+
]);
|
|
168
|
+
ok(oc.session === "ses_abc", "opencode: session id rides on every event");
|
|
169
|
+
ok(
|
|
170
|
+
oc.rows.some((row) => row.level === "reply" && row.message === "Hi there, how's it going?"),
|
|
171
|
+
"opencode: the answer is printed -- the bug was that it never was",
|
|
172
|
+
);
|
|
173
|
+
ok(oc.rows.some((row) => row.message === "glob"), "opencode: tool calls are printed");
|
|
174
|
+
ok(
|
|
175
|
+
!oc.rows.some((row) => row.message === "agent done"),
|
|
176
|
+
"opencode: step_finish is per step, not the end of the run",
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
// Codex, from the documented exec --json protocol.
|
|
102
180
|
const codex = readAll("codex", [
|
|
103
|
-
JSON.stringify({ type: "
|
|
104
|
-
JSON.stringify({ type: "
|
|
181
|
+
JSON.stringify({ type: "thread.started", thread_id: "019cec77-af02" }),
|
|
182
|
+
JSON.stringify({ type: "turn.started" }),
|
|
183
|
+
JSON.stringify({
|
|
184
|
+
type: "item.started",
|
|
185
|
+
item: { id: "i1", type: "mcp_tool_call", server: "rbx", tool: "create", arguments: {} },
|
|
186
|
+
}),
|
|
187
|
+
JSON.stringify({
|
|
188
|
+
type: "item.completed",
|
|
189
|
+
item: { id: "i1", type: "mcp_tool_call", server: "rbx", tool: "create" },
|
|
190
|
+
}),
|
|
191
|
+
JSON.stringify({ type: "item.completed", item: { id: "i2", type: "agent_message", text: "Done." } }),
|
|
192
|
+
JSON.stringify({ type: "turn.completed", usage: {} }),
|
|
193
|
+
]);
|
|
194
|
+
ok(codex.session === "019cec77-af02", "codex: session comes from thread.started/thread_id");
|
|
195
|
+
ok(
|
|
196
|
+
codex.rows.some((row) => row.level === "reply" && row.message === "Done."),
|
|
197
|
+
"codex: prose",
|
|
198
|
+
);
|
|
199
|
+
ok(
|
|
200
|
+
codex.rows.filter((row) => row.message === "create").length === 1,
|
|
201
|
+
"codex: a tool reported started AND completed is logged once",
|
|
202
|
+
);
|
|
203
|
+
ok(codex.rows.some((row) => row.message === "agent done"), "codex: turn.completed ends the run");
|
|
204
|
+
|
|
205
|
+
// Codex global flags must precede the `resume` subcommand or it refuses them.
|
|
206
|
+
const resumed = find("codex").argv("hello", "thread-1");
|
|
207
|
+
ok(
|
|
208
|
+
resumed.indexOf("--skip-git-repo-check") < resumed.indexOf("resume"),
|
|
209
|
+
"codex: global flags come before the resume subcommand",
|
|
210
|
+
);
|
|
211
|
+
ok(resumed[resumed.length - 1] === "hello", "codex: the prompt stays last");
|
|
212
|
+
|
|
213
|
+
// Gemini, from the documented headless stream-json events.
|
|
214
|
+
const gem = readAll("gemini", [
|
|
215
|
+
JSON.stringify({ type: "init", session_id: "gem-1", model: "gemini" }),
|
|
216
|
+
JSON.stringify({ type: "message", role: "user", content: "what did I ask" }),
|
|
217
|
+
JSON.stringify({ type: "message", role: "assistant", content: "Built it." }),
|
|
218
|
+
JSON.stringify({ type: "result" }),
|
|
105
219
|
]);
|
|
106
|
-
ok(
|
|
107
|
-
ok(
|
|
220
|
+
ok(gem.session === "gem-1", "gemini: session id");
|
|
221
|
+
ok(gem.rows.some((row) => row.message === "Built it."), "gemini: the assistant half is printed");
|
|
222
|
+
ok(
|
|
223
|
+
!gem.rows.some((row) => row.message === "what did I ask"),
|
|
224
|
+
"gemini: the user half is not echoed back at them",
|
|
225
|
+
);
|
|
108
226
|
|
|
109
|
-
|
|
227
|
+
// Cursor, from the documented stream-json envelope.
|
|
228
|
+
const cur = readAll("cursor", [
|
|
229
|
+
JSON.stringify({ type: "system", subtype: "init", session_id: "cur-1" }),
|
|
110
230
|
JSON.stringify({
|
|
111
|
-
type: "
|
|
112
|
-
|
|
231
|
+
type: "tool_call",
|
|
232
|
+
subtype: "started",
|
|
233
|
+
session_id: "cur-1",
|
|
234
|
+
tool_call: { readToolCall: { args: { path: "a.ts" } } },
|
|
113
235
|
}),
|
|
236
|
+
JSON.stringify({
|
|
237
|
+
type: "assistant",
|
|
238
|
+
session_id: "cur-1",
|
|
239
|
+
message: { role: "assistant", content: [{ type: "text", text: "Read it." }] },
|
|
240
|
+
}),
|
|
241
|
+
JSON.stringify({ type: "result", subtype: "success", is_error: false, session_id: "cur-1" }),
|
|
114
242
|
]);
|
|
115
|
-
ok(
|
|
243
|
+
ok(cur.session === "cur-1", "cursor: session id rides on every event");
|
|
244
|
+
ok(cur.rows.some((row) => row.message === "Read it."), "cursor: text is nested in message.content");
|
|
245
|
+
ok(cur.rows.some((row) => row.message === "readToolCall"), "cursor: the tool key names the call");
|
|
246
|
+
ok(cur.rows.some((row) => row.message === "agent done"), "cursor: result ends the run");
|
|
247
|
+
|
|
248
|
+
// Crush has no event stream, but it does have its own verb -- the generic
|
|
249
|
+
// adapter guessed `-p`, which crush rejects outright as an unknown flag.
|
|
250
|
+
const crush = find("crush").argv("hello", null);
|
|
251
|
+
ok(crush[0] === "run", "crush: uses its `run` verb, not a guessed -p flag");
|
|
252
|
+
ok(
|
|
253
|
+
readAll("crush", ["Placed the model."]).rows[0].message === "Placed the model.",
|
|
254
|
+
"crush: plain text still reaches the log",
|
|
255
|
+
);
|
|
116
256
|
}
|
|
117
257
|
|
|
118
258
|
// --- DeepSeek Harness ------------------------------------------------------
|
|
@@ -290,4 +430,131 @@ const readAll = (id, lines) => {
|
|
|
290
430
|
);
|
|
291
431
|
}
|
|
292
432
|
|
|
433
|
+
// Choosing which agent answers a prompt --------------------------------------
|
|
434
|
+
//
|
|
435
|
+
// The shipped bug: someone with opencode open typed a prompt into the panel and
|
|
436
|
+
// Claude Code answered, because the choice was "first one installed" and
|
|
437
|
+
// `claude` sorts first in the registry. The answer was fine and came from the
|
|
438
|
+
// wrong program.
|
|
439
|
+
{
|
|
440
|
+
const claude = find("claude");
|
|
441
|
+
const opencode = find("opencode");
|
|
442
|
+
|
|
443
|
+
ok(matchesClient(claude, "claude-code"), "claude matches the name its client reports");
|
|
444
|
+
ok(matchesClient(opencode, "opencode"), "opencode matches its own client name");
|
|
445
|
+
ok(!matchesClient(claude, "opencode"), "and does not match a different agent");
|
|
446
|
+
ok(!matchesClient(opencode, "claude-code"), "in either direction");
|
|
447
|
+
ok(!matchesClient(claude, ""), "a nameless client matches nothing");
|
|
448
|
+
|
|
449
|
+
// The registry marks `agent` rows and picks the prompt's target from the same
|
|
450
|
+
// function, so a listing can never say "in use" about an agent the prompt
|
|
451
|
+
// would not use. Exercised through the real bridge: what makes an agent a
|
|
452
|
+
// candidate is that it is CONNECTED, which only the bridge knows.
|
|
453
|
+
const bridge = new Bridge();
|
|
454
|
+
bridge.noteClient("one", { name: "opencode", version: "1", pid: 1 });
|
|
455
|
+
bridge.noteClient("two", { name: "claude-code", version: "2", pid: 2 });
|
|
456
|
+
|
|
457
|
+
const rows = await handleConsole(bridge, 44755, {
|
|
458
|
+
studioId: "studio-agents",
|
|
459
|
+
command: "agent",
|
|
460
|
+
args: [],
|
|
461
|
+
line: "agent",
|
|
462
|
+
});
|
|
463
|
+
const text = rows.map((row) => `${row.message} ${row.detail ?? ""}`).join(" | ");
|
|
464
|
+
|
|
465
|
+
// Only meaningful when both are actually installed on the machine running the
|
|
466
|
+
// suite; otherwise there is nothing to be ambiguous between.
|
|
467
|
+
const both = installed().filter((entry) => entry.id === "claude" || entry.id === "opencode");
|
|
468
|
+
if (both.length === 2) {
|
|
469
|
+
ok(
|
|
470
|
+
rows.some((row) => row.level === "warn" && /agent use <id>/.test(row.message)),
|
|
471
|
+
"two connected agents are not silently resolved to whichever sorts first",
|
|
472
|
+
);
|
|
473
|
+
ok(!/in use/.test(text), "and none is marked as the one in use");
|
|
474
|
+
ok(/connected/.test(text), "the ones that are attached are named as attached");
|
|
475
|
+
} else {
|
|
476
|
+
ok(true, "skipped: both agents are not installed here");
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
// --- the harnesses added after the opencode failure -------------------------
|
|
481
|
+
//
|
|
482
|
+
// Same rule as the block above: every shape here comes from the vendor's own
|
|
483
|
+
// documentation, not from a guess. The point of the rule is that a guessed
|
|
484
|
+
// envelope produces silence, and silence is the failure mode this whole file
|
|
485
|
+
// exists to catch.
|
|
486
|
+
{
|
|
487
|
+
// Amp says outright that it speaks Claude Code's protocol, so it is read by
|
|
488
|
+
// the same function -- and this asserts that, rather than trusting it.
|
|
489
|
+
const amp = readAll("amp", [
|
|
490
|
+
JSON.stringify({ type: "system", subtype: "init", session_id: "T-1", cwd: "/x" }),
|
|
491
|
+
JSON.stringify({
|
|
492
|
+
type: "assistant",
|
|
493
|
+
session_id: "T-1",
|
|
494
|
+
message: {
|
|
495
|
+
content: [
|
|
496
|
+
{ type: "text", text: "Built the wall." },
|
|
497
|
+
{ type: "tool_use", name: "create", input: { className: "Part" } },
|
|
498
|
+
],
|
|
499
|
+
},
|
|
500
|
+
}),
|
|
501
|
+
JSON.stringify({ type: "result", session_id: "T-1", is_error: false }),
|
|
502
|
+
]);
|
|
503
|
+
ok(amp.session === "T-1", "amp: session id");
|
|
504
|
+
ok(amp.rows.some((row) => row.message === "Built the wall."), "amp: prose");
|
|
505
|
+
ok(amp.rows.some((row) => row.message === "create"), "amp: tool calls");
|
|
506
|
+
ok(amp.rows.some((row) => row.message === "agent done"), "amp: result ends the run");
|
|
507
|
+
|
|
508
|
+
// Continuing is a different command, not a flag: `amp threads continue <id>`.
|
|
509
|
+
const ampResume = find("amp").argv("go on", "T-1");
|
|
510
|
+
ok(ampResume[0] === "threads" && ampResume[1] === "continue", "amp: resumes with its own verb");
|
|
511
|
+
ok(ampResume[2] === "T-1", "amp: the thread id follows the verb");
|
|
512
|
+
ok(find("amp").argv("hi", null)[0] === "-x", "amp: a fresh run uses the execute flag");
|
|
513
|
+
|
|
514
|
+
// Qwen Code is a Gemini CLI fork and kept its headless envelope.
|
|
515
|
+
const qwen = readAll("qwen", [
|
|
516
|
+
JSON.stringify({ type: "init", session_id: "q-1" }),
|
|
517
|
+
JSON.stringify({ type: "message", role: "assistant", content: "Done." }),
|
|
518
|
+
]);
|
|
519
|
+
ok(qwen.session === "q-1", "qwen: session id, read as gemini");
|
|
520
|
+
ok(qwen.rows.some((row) => row.message === "Done."), "qwen: prose");
|
|
521
|
+
|
|
522
|
+
// Droid answers with one object at the end rather than a stream.
|
|
523
|
+
const droid = readAll("droid", [JSON.stringify({ session_id: "d-1", result: "Placed it." })]);
|
|
524
|
+
ok(droid.session === "d-1", "droid: session id");
|
|
525
|
+
ok(droid.rows.some((row) => row.message === "Placed it."), "droid: the final answer");
|
|
526
|
+
const droidArgv = find("droid").argv("hi", null);
|
|
527
|
+
ok(droidArgv[0] === "exec", "droid: uses its exec verb");
|
|
528
|
+
ok(droidArgv.includes("--auto"), "droid: sets an autonomy level, or it blocks on approval");
|
|
529
|
+
|
|
530
|
+
// goose names sessions instead of numbering them.
|
|
531
|
+
const goose = readAll("goose", [
|
|
532
|
+
JSON.stringify({ type: "message", text: "Ready.", session_id: "g-1" }),
|
|
533
|
+
]);
|
|
534
|
+
ok(goose.rows.some((row) => row.message === "Ready."), "goose: prose");
|
|
535
|
+
const gooseResume = find("goose").argv("go on", "g-1");
|
|
536
|
+
ok(
|
|
537
|
+
gooseResume.includes("--resume") && gooseResume[gooseResume.indexOf("-n") + 1] === "g-1",
|
|
538
|
+
"goose: resumes a session by name",
|
|
539
|
+
);
|
|
540
|
+
|
|
541
|
+
// Copilot has no structured output, but it does block without --no-ask-user.
|
|
542
|
+
const copilotArgv = find("copilot").argv("hi", null);
|
|
543
|
+
ok(copilotArgv.includes("--no-ask-user"), "copilot: never waits for a human that is not there");
|
|
544
|
+
ok(
|
|
545
|
+
readAll("copilot", ["Explained it."]).rows[0].message === "Explained it.",
|
|
546
|
+
"copilot: plain text reaches the log",
|
|
547
|
+
);
|
|
548
|
+
|
|
549
|
+
// Aider blocks on confirmations unless told not to.
|
|
550
|
+
ok(find("aider").argv("hi", null).includes("--yes"), "aider: answers its own confirmations");
|
|
551
|
+
|
|
552
|
+
// Every harness must produce SOMETHING from a plain line. A reader that
|
|
553
|
+
// silently drops unknown input is exactly how opencode printed nothing.
|
|
554
|
+
for (const harness of ["amp", "qwen", "droid", "goose", "copilot", "aider", "crush"]) {
|
|
555
|
+
const rows = readAll(harness, ["some unstructured output"]).rows;
|
|
556
|
+
ok(rows.length > 0, harness + ": unrecognised output is shown, not swallowed");
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
|
|
293
560
|
process.stdout.write(`console: ${checks} checks pass\n`);
|