@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 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
 
@@ -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
- const chosen = state.harnessId ?? available[0]?.id;
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
- level: entry.id === chosen ? "ok" : "dim",
125
- message: ` ${entry.id}`,
126
- detail: entry.id === chosen ? `${entry.label} (in use)` : entry.label,
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: "type anything that is not a command to send it to the agent" },
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.harnessId === null ? available[0] : find(state.harnessId);
240
+ return renderAgents(state, bridge);
241
+ const wanted = preferred(state, bridge, available);
175
242
  if (wanted === undefined) {
176
- return [{ level: "error", message: `unknown agent "${state.harnessId}"` }];
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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"}
@@ -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 NOTHING;
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
- * the envelope differs from Claude's but carries the same three facts.
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 NOTHING;
146
- const item = event.item ?? event.msg ?? event;
147
- const kind = item.type ?? event.type;
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 (kind === "agent_message" || kind === "assistant_message") {
152
- return { lines: say(String(item.text ?? item.message ?? "")) };
179
+ if (event.type === "turn.completed") {
180
+ return { lines: [{ level: "ok", message: "agent done" }] };
153
181
  }
154
- if (kind === "command_execution" || kind === "mcp_tool_call" || kind === "function_call") {
155
- const name = String(item.tool ?? item.name ?? item.command ?? "tool");
156
- return { lines: [toolLine(name, item.arguments ?? item.input)] };
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
- if (kind === "turn.completed" || kind === "task_complete") {
159
- return { lines: [{ level: "ok", message: "agent done" }] };
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 (kind === "error" || kind === "turn.failed") {
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
- /** opencode. `run` is one-shot; `--format json` turns it into an event stream. */
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 line.trim() === "" ? NOTHING : { lines: [{ level: "dim", message: line.trim() }] };
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
- const kind = event.type ?? event.event;
185
- if (kind === "session.created" || kind === "session") {
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 === "message.part.updated" || kind === "part") {
189
- const part = event.properties?.part ?? event.part ?? {};
190
- if (part.type === "text" && typeof part.text === "string")
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
- return NOTHING;
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
- generic("gemini", "gemini", "Gemini CLI"),
252
- generic("cursor", "cursor-agent", "Cursor Agent"),
253
- generic("crush", "crush", "Crush"),
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@el4cteo/rbx-studio-mcp",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "MCP server for Roblox Studio. 31 tools, push-based SSE bridge, editor-safe script edits, one-step undo.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -9,7 +9,7 @@
9
9
 
10
10
  local Config = {}
11
11
 
12
- Config.PLUGIN_VERSION = "0.5.0"
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
@@ -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
- ok(rows.length === 3, "claude: init contributes no row, junk lines are ignored");
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[2].level === "ok" && rows[2].message === "agent done", "claude: result row");
67
- ok(rows[2].detail === "5.6s $0.1282", "claude: duration and cost ride the detail column");
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
- // --- Codex and opencode ----------------------------------------------------
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: "session.created", session_id: "cx-1" }),
104
- JSON.stringify({ type: "agent_message", text: "Done." }),
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 === "cx-1", "codex: session id");
107
- ok(codex.rows[0].level === "reply" && codex.rows[0].message === "Done.", "codex: prose");
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
- const oc = readAll("opencode", [
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: "message.part.updated",
112
- properties: { part: { type: "text", text: "Placed the model." } },
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(oc.rows[0].message === "Placed the model.", "opencode: prose");
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`);