xiaotime 0.6.1 → 0.8.0

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.
Files changed (47) hide show
  1. package/dist/background.d.ts +47 -0
  2. package/dist/background.d.ts.map +1 -0
  3. package/dist/background.js +110 -0
  4. package/dist/background.js.map +1 -0
  5. package/dist/index.d.ts +2 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +70 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/ink/App.d.ts +1 -0
  10. package/dist/ink/App.d.ts.map +1 -1
  11. package/dist/ink/App.js +11 -3
  12. package/dist/ink/App.js.map +1 -1
  13. package/dist/ink/runSessionInk.d.ts.map +1 -1
  14. package/dist/ink/runSessionInk.js +50 -2
  15. package/dist/ink/runSessionInk.js.map +1 -1
  16. package/dist/ink/store.d.ts +11 -0
  17. package/dist/ink/store.d.ts.map +1 -1
  18. package/dist/ink/store.js +12 -0
  19. package/dist/ink/store.js.map +1 -1
  20. package/dist/mcp.d.ts +94 -0
  21. package/dist/mcp.d.ts.map +1 -0
  22. package/dist/mcp.js +282 -0
  23. package/dist/mcp.js.map +1 -0
  24. package/dist/room_agent.d.ts +7 -0
  25. package/dist/room_agent.d.ts.map +1 -0
  26. package/dist/room_agent.js +395 -0
  27. package/dist/room_agent.js.map +1 -0
  28. package/dist/settings.d.ts +9 -1
  29. package/dist/settings.d.ts.map +1 -1
  30. package/dist/settings.js +46 -4
  31. package/dist/settings.js.map +1 -1
  32. package/dist/skills.d.ts +14 -0
  33. package/dist/skills.d.ts.map +1 -0
  34. package/dist/skills.js +112 -0
  35. package/dist/skills.js.map +1 -0
  36. package/dist/todos.d.ts +26 -0
  37. package/dist/todos.d.ts.map +1 -0
  38. package/dist/todos.js +55 -0
  39. package/dist/todos.js.map +1 -0
  40. package/dist/tools.d.ts +26 -0
  41. package/dist/tools.d.ts.map +1 -1
  42. package/dist/tools.js +496 -1
  43. package/dist/tools.js.map +1 -1
  44. package/dist/ws.d.ts.map +1 -1
  45. package/dist/ws.js +34 -2
  46. package/dist/ws.js.map +1 -1
  47. package/package.json +2 -1
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Background / long-running command registry —
3
+ * SPRINT-CLI-CAPABILITY-PARITY-1 (#14608).
4
+ *
5
+ * The built-in `shell_command` blocks for up to 60s and returns once.
6
+ * A coding agent needs to kick off a long job (a build, a dev server, a
7
+ * test watcher) WITHOUT blocking the turn, then poll its output and kill
8
+ * it — the Claude-Code `run_in_background` / `BashOutput` / `KillShell`
9
+ * shape. This registry owns those child processes for the session:
10
+ * spawn detached from the turn, buffer stdout+stderr with a cap, expose
11
+ * an incremental read cursor, and kill on demand or at session close.
12
+ */
13
+ import { type ChildProcess } from "child_process";
14
+ export type BgStatus = "running" | "exited" | "killed";
15
+ export interface BgProc {
16
+ id: string;
17
+ command: string;
18
+ child: ChildProcess;
19
+ output: string;
20
+ cursor: number;
21
+ status: BgStatus;
22
+ exitCode: number | null;
23
+ startedAt: number;
24
+ }
25
+ export declare class BackgroundRegistry {
26
+ private procs;
27
+ private seq;
28
+ start(command: string, cwd: string): BgProc;
29
+ get(id: string): BgProc | undefined;
30
+ /** Read output produced since the last read; advances the cursor. */
31
+ readNew(id: string): {
32
+ text: string;
33
+ status: BgStatus;
34
+ exitCode: number | null;
35
+ } | null;
36
+ kill(id: string): boolean;
37
+ list(): Array<{
38
+ id: string;
39
+ command: string;
40
+ status: BgStatus;
41
+ exitCode: number | null;
42
+ }>;
43
+ killAll(): void;
44
+ }
45
+ /** Session-global registry (one per CLI process). */
46
+ export declare const backgroundRegistry: BackgroundRegistry;
47
+ //# sourceMappingURL=background.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAEzD,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEvD,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAKD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,GAAG,CAAK;IAEhB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAyC3C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAInC,qEAAqE;IACrE,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,QAAQ,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI;IAQvF,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAczB,IAAI,IAAI,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,QAAQ,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IASzF,OAAO,IAAI,IAAI;CAUhB;AAED,qDAAqD;AACrD,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Background / long-running command registry —
3
+ * SPRINT-CLI-CAPABILITY-PARITY-1 (#14608).
4
+ *
5
+ * The built-in `shell_command` blocks for up to 60s and returns once.
6
+ * A coding agent needs to kick off a long job (a build, a dev server, a
7
+ * test watcher) WITHOUT blocking the turn, then poll its output and kill
8
+ * it — the Claude-Code `run_in_background` / `BashOutput` / `KillShell`
9
+ * shape. This registry owns those child processes for the session:
10
+ * spawn detached from the turn, buffer stdout+stderr with a cap, expose
11
+ * an incremental read cursor, and kill on demand or at session close.
12
+ */
13
+ import { spawn } from "child_process";
14
+ /** Per-process output cap — keep the tail so a chatty job can't grow unbounded. */
15
+ const MAX_OUTPUT = 200_000;
16
+ export class BackgroundRegistry {
17
+ procs = new Map();
18
+ seq = 0;
19
+ start(command, cwd) {
20
+ const id = `bg_${++this.seq}`;
21
+ const child = spawn(command, {
22
+ shell: true,
23
+ cwd,
24
+ stdio: ["ignore", "pipe", "pipe"],
25
+ });
26
+ const proc = {
27
+ id,
28
+ command,
29
+ child,
30
+ output: "",
31
+ cursor: 0,
32
+ status: "running",
33
+ exitCode: null,
34
+ startedAt: Date.now(),
35
+ };
36
+ const append = (d) => {
37
+ proc.output += d.toString();
38
+ if (proc.output.length > MAX_OUTPUT) {
39
+ // Keep the tail; move the read cursor with the drop so
40
+ // background_output never reports negative-length slices.
41
+ const dropped = proc.output.length - MAX_OUTPUT;
42
+ proc.output = proc.output.slice(dropped);
43
+ proc.cursor = Math.max(0, proc.cursor - dropped);
44
+ }
45
+ };
46
+ child.stdout?.on("data", append);
47
+ child.stderr?.on("data", append);
48
+ child.on("exit", (code) => {
49
+ if (proc.status !== "killed")
50
+ proc.status = "exited";
51
+ proc.exitCode = code;
52
+ });
53
+ child.on("error", (e) => {
54
+ append(Buffer.from(`\n[spawn error] ${e.message}\n`));
55
+ if (proc.status !== "killed")
56
+ proc.status = "exited";
57
+ });
58
+ this.procs.set(id, proc);
59
+ return proc;
60
+ }
61
+ get(id) {
62
+ return this.procs.get(id);
63
+ }
64
+ /** Read output produced since the last read; advances the cursor. */
65
+ readNew(id) {
66
+ const p = this.procs.get(id);
67
+ if (!p)
68
+ return null;
69
+ const text = p.output.slice(p.cursor);
70
+ p.cursor = p.output.length;
71
+ return { text, status: p.status, exitCode: p.exitCode };
72
+ }
73
+ kill(id) {
74
+ const p = this.procs.get(id);
75
+ if (!p)
76
+ return false;
77
+ if (p.status === "running") {
78
+ p.status = "killed";
79
+ try {
80
+ p.child.kill("SIGTERM");
81
+ }
82
+ catch {
83
+ /* already gone */
84
+ }
85
+ }
86
+ return true;
87
+ }
88
+ list() {
89
+ return [...this.procs.values()].map((p) => ({
90
+ id: p.id,
91
+ command: p.command,
92
+ status: p.status,
93
+ exitCode: p.exitCode,
94
+ }));
95
+ }
96
+ killAll() {
97
+ for (const p of this.procs.values()) {
98
+ try {
99
+ p.child.kill("SIGTERM");
100
+ }
101
+ catch {
102
+ /* already gone */
103
+ }
104
+ }
105
+ this.procs.clear();
106
+ }
107
+ }
108
+ /** Session-global registry (one per CLI process). */
109
+ export const backgroundRegistry = new BackgroundRegistry();
110
+ //# sourceMappingURL=background.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background.js","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -5,6 +5,7 @@
5
5
  * Usage:
6
6
  * xiaotime login # authenticate via Discord OAuth
7
7
  * xiaotime dev # new session
8
+ * xiaotime dev --room # new session + the windowless Claude Code room-agent (#14605)
8
9
  * xiaotime dev --session <id> # resume existing session
9
10
  * xiaotime dev --name "my session" # new session with name
10
11
  * xiaotime dev --list # list sessions
@@ -12,6 +13,7 @@
12
13
  * xiaotime new "my session" # shorthand for dev --name "my session"
13
14
  * xiaotime sessions # list all sessions (pretty view)
14
15
  * xiaotime replay "session name" # replay a session in read-only mode
16
+ * xiaotime room-agent --session <id> # internal: the daemon `dev --room` spawns (#14605)
15
17
  */
16
18
  export {};
17
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG"}
package/dist/index.js CHANGED
@@ -5,6 +5,7 @@
5
5
  * Usage:
6
6
  * xiaotime login # authenticate via Discord OAuth
7
7
  * xiaotime dev # new session
8
+ * xiaotime dev --room # new session + the windowless Claude Code room-agent (#14605)
8
9
  * xiaotime dev --session <id> # resume existing session
9
10
  * xiaotime dev --name "my session" # new session with name
10
11
  * xiaotime dev --list # list sessions
@@ -12,14 +13,36 @@
12
13
  * xiaotime new "my session" # shorthand for dev --name "my session"
13
14
  * xiaotime sessions # list all sessions (pretty view)
14
15
  * xiaotime replay "session name" # replay a session in read-only mode
16
+ * xiaotime room-agent --session <id> # internal: the daemon `dev --room` spawns (#14605)
15
17
  */
16
18
  import { createSession, listSessions, getSession, archiveSession } from "./session.js";
17
19
  import { runSession, replaySession } from "./ws.js";
20
+ import { runRoomAgent } from "./room_agent.js";
18
21
  import { runSessionInk } from "./ink/runSessionInk.js";
19
22
  import { printSessionList, printError } from "./display.js";
20
23
  import { runLogin } from "./auth.js";
21
24
  import { matchSession } from "./session_match.js";
22
25
  import { CLI_VERSION } from "./config.js";
26
+ import { spawn } from "child_process";
27
+ // #14605 — spawn the windowless room-agent daemon as a CHILD of this CLI, bound
28
+ // to the dev session's lifecycle. The daemon is the same CLI binary invoked with
29
+ // `room-agent --session <id>`: it joins the SAME session as a distinct
30
+ // `claude-code` participant and answers @claude turns. stdio is ignored so the
31
+ // daemon stays windowless (its I/O is the room, not this terminal); it dies with
32
+ // the parent. Best-effort — a spawn failure never breaks the dev session.
33
+ function spawnRoomAgentDaemon(sessionId) {
34
+ try {
35
+ const entry = process.argv[1];
36
+ const child = spawn(process.execPath, [entry, "room-agent", "--session", sessionId], { stdio: "ignore", detached: false });
37
+ child.on("error", () => {
38
+ /* best-effort: the dev session continues without a room-agent */
39
+ });
40
+ return child;
41
+ }
42
+ catch {
43
+ return null;
44
+ }
45
+ }
23
46
  async function main() {
24
47
  const args = process.argv.slice(2);
25
48
  const cmd = args[0];
@@ -27,7 +50,32 @@ async function main() {
27
50
  // the legacy readline client. (`--ink` is still accepted as a no-op alias so
28
51
  // existing muscle memory / docs keep working.)
29
52
  const useClassic = args.includes("--classic");
30
- const startSession = (id) => (useClassic ? runSession(id) : runSessionInk(id));
53
+ // #14605 the room-agent daemon is OPT-IN (default OFF). `xiaotime dev --room`
54
+ // spawns the windowless Claude Code agent into this session (one terminal:
55
+ // same session, answers @claude, lifecycle bound to this client's); plain
56
+ // `xiaotime dev` is UNCHANGED — no daemon. So a published version never
57
+ // auto-spawns the agent on anyone's terminal; only a user who asks for the
58
+ // room with --room gets it.
59
+ const roomAgentEnabled = args.includes("--room");
60
+ const startSession = async (id) => {
61
+ const daemon = roomAgentEnabled ? spawnRoomAgentDaemon(id) : null;
62
+ const killDaemon = () => {
63
+ try {
64
+ daemon?.kill();
65
+ }
66
+ catch {
67
+ /* ignore */
68
+ }
69
+ };
70
+ if (daemon)
71
+ process.once("exit", killDaemon);
72
+ try {
73
+ await (useClassic ? runSession(id) : runSessionInk(id));
74
+ }
75
+ finally {
76
+ killDaemon();
77
+ }
78
+ };
31
79
  // xiaotime --version / -v / version — print the installed version and exit.
32
80
  // (CLI_VERSION is derived from package.json, so it never drifts.)
33
81
  if (cmd === "--version" || cmd === "-v" || cmd === "version") {
@@ -68,6 +116,27 @@ async function main() {
68
116
  await replaySession(match.id);
69
117
  return;
70
118
  }
119
+ // xiaotime room-agent --session <id> — join a room session as the windowless
120
+ // Claude Code agent participant (#14605, workstream B). Headless: no UI, no
121
+ // input. Slice 1 observes the shared thread; later slices respond when
122
+ // addressed. Meant to run supervised (systemd/pm2) so it auto-reconnects.
123
+ if (cmd === "room-agent") {
124
+ const roomSessionFlagIdx = args.indexOf("--session");
125
+ const roomSessionId = roomSessionFlagIdx !== -1 ? args[roomSessionFlagIdx + 1] : undefined;
126
+ if (!roomSessionId) {
127
+ console.error("Usage: xiaotime room-agent --session <session-id>");
128
+ process.exit(1);
129
+ }
130
+ try {
131
+ await getSession(roomSessionId);
132
+ }
133
+ catch {
134
+ printError(`Session ${roomSessionId} not found.`);
135
+ process.exit(1);
136
+ }
137
+ await runRoomAgent(roomSessionId);
138
+ return;
139
+ }
71
140
  // List / archive shortcuts (work with or without "dev" prefix)
72
141
  if (cmd === "--list" || cmd === "list") {
73
142
  const sessions = await listSessions();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/ink/App.d.ts CHANGED
@@ -5,5 +5,6 @@ import { render } from "ink";
5
5
  */
6
6
  export declare function startInkUI(handlers: {
7
7
  onSubmit: (text: string) => void;
8
+ onInterrupt?: () => void;
8
9
  }): ReturnType<typeof render>;
9
10
  //# sourceMappingURL=App.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/ink/App.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAE,MAAM,EAAuC,MAAM,KAAK,CAAC;AA4PlE;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE;IAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAEpG"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/ink/App.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAE,MAAM,EAAuC,MAAM,KAAK,CAAC;AA0QlE;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE;IACnC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAE5B"}
package/dist/ink/App.js CHANGED
@@ -125,13 +125,18 @@ function ApprovalMenu({ approval }) {
125
125
  }, { isActive: mode === "menu" });
126
126
  return (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "yellow", paddingX: 1, children: [_jsxs(Text, { children: [_jsx(Text, { color: "yellow", bold: true, children: "approve" }), " ", _jsx(Text, { bold: true, children: approval.tool }), approval.summary ? _jsxs(_Fragment, { children: [" ", _jsx(Text, { dimColor: true, children: approval.summary })] }) : null] }), approval.body.split("\n").map((l, i) => (_jsx(Text, { dimColor: true, children: l.length ? l : " " }, i))), approval.diff?.map((d, i) => (_jsxs(Text, { color: d.op === "+" ? "green" : "red", children: [d.op, " ", d.text] }, `d${i}`)))] }), mode === "menu" ? (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [APPROVAL_OPTIONS.map((opt, i) => (_jsxs(Text, { color: i === index ? "cyan" : undefined, children: [i === index ? "❯ " : " ", i + 1, ". ", opt] }, i))), _jsx(Text, { dimColor: true, children: " (1-3, \u2191\u2193 Enter \u00B7 Esc to reject)" })] })) : (_jsxs(Box, { marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "reason › " }), _jsx(TextInput, { value: reason, onChange: setReason, onSubmit: (r) => resolveApproval({ approved: false, rejectReason: r.trim() }), placeholder: "why are you rejecting?" })] }))] }));
127
127
  }
128
- function App({ onSubmit }) {
128
+ function App({ onSubmit, onInterrupt, }) {
129
129
  const { exit } = useApp();
130
130
  const s = useSession();
131
131
  const [value, setValue] = useState("");
132
132
  useInput((input, key) => {
133
133
  if (key.ctrl && input === "c")
134
134
  exit();
135
+ // #14605 — Esc halts an in-flight room-agent turn. Guarded by
136
+ // !pendingApproval so the approval menu keeps Esc = deny; otherwise Esc =
137
+ // interrupt (a harmless no-op if nothing is running).
138
+ else if (key.escape && !s.pendingApproval)
139
+ onInterrupt?.();
135
140
  });
136
141
  function handleSubmit(line) {
137
142
  const t = line.trim();
@@ -140,13 +145,16 @@ function App({ onSubmit }) {
140
145
  setValue("");
141
146
  onSubmit(t);
142
147
  }
143
- return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Static, { items: s.turns, children: (turn, i) => (_jsx(Box, { flexDirection: "column", marginBottom: turn.kind === "tool" ? 0 : 1, children: turn.kind === "user" ? (_jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: "› " }), turn.text] })) : turn.kind === "tool" ? (_jsx(ToolLine, { tool: turn.tool, status: turn.tool.status })) : (_jsxs(_Fragment, { children: [_jsx(BotHeader, { name: s.botName }), _jsx(Markdown, { text: turn.text })] })) }, i)) }), s.liveTool && (_jsx(Box, { marginBottom: 0, children: _jsx(ToolLine, { tool: s.liveTool, status: "running" }) })), s.streaming !== null && (_jsxs(Box, { flexDirection: "column", marginTop: 1, marginBottom: 1, children: [_jsx(BotHeader, { name: s.botName }), _jsx(Markdown, { text: s.streaming })] })), s.pendingApproval ? (_jsx(ApprovalMenu, { approval: s.pendingApproval })) : (_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "› " }), s.busy ? (_jsx(Text, { dimColor: true, children: value || "…" })) : (_jsx(TextInput, { value: value, onChange: setValue, onSubmit: handleSubmit, placeholder: "type a message\u2026" }))] })), _jsx(StatusLine, { connected: s.connected, session: s.sessionLabel, note: s.statusNote })] }));
148
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Static, { items: s.turns, children: (turn, i) => (_jsx(Box, { flexDirection: "column", marginBottom: turn.kind === "tool" ? 0 : 1, children: turn.kind === "user" ? (_jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: "› " }), turn.text] })) : turn.kind === "tool" ? (_jsx(ToolLine, { tool: turn.tool, status: turn.tool.status })) : turn.kind === "peer" ? (
149
+ // #14605 — a room peer (DoctorWhiskers / claude-code / another
150
+ // human). Attributed to the SENDER, not this client's bot name.
151
+ _jsxs(_Fragment, { children: [_jsx(BotHeader, { name: turn.from }), _jsx(Markdown, { text: turn.text })] })) : (_jsxs(_Fragment, { children: [_jsx(BotHeader, { name: s.botName }), _jsx(Markdown, { text: turn.text })] })) }, i)) }), s.liveTool && (_jsx(Box, { marginBottom: 0, children: _jsx(ToolLine, { tool: s.liveTool, status: "running" }) })), s.streaming !== null && (_jsxs(Box, { flexDirection: "column", marginTop: 1, marginBottom: 1, children: [_jsx(BotHeader, { name: s.botName }), _jsx(Markdown, { text: s.streaming })] })), s.pendingApproval ? (_jsx(ApprovalMenu, { approval: s.pendingApproval })) : (_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "› " }), s.busy ? (_jsx(Text, { dimColor: true, children: value || "…" })) : (_jsx(TextInput, { value: value, onChange: setValue, onSubmit: handleSubmit, placeholder: "type a message\u2026" }))] })), _jsx(StatusLine, { connected: s.connected, session: s.sessionLabel, note: s.statusNote })] }));
144
152
  }
145
153
  /**
146
154
  * Mount the Ink UI. Keeps the render() call + JSX in this file so the runner
147
155
  * (plain .ts) stays free of TSX. Returns Ink's instance for lifecycle control.
148
156
  */
149
157
  export function startInkUI(handlers) {
150
- return render(_jsx(App, { onSubmit: handlers.onSubmit }));
158
+ return render(_jsx(App, { onSubmit: handlers.onSubmit, onInterrupt: handlers.onInterrupt }));
151
159
  }
152
160
  //# sourceMappingURL=App.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/ink/App.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/ink/App.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"runSessionInk.d.ts","sourceRoot":"","sources":["../../src/ink/runSessionInk.ts"],"names":[],"mappings":"AAuBA,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyKpE"}
1
+ {"version":3,"file":"runSessionInk.d.ts","sourceRoot":"","sources":["../../src/ink/runSessionInk.ts"],"names":[],"mappings":"AAyBA,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4NpE"}
@@ -20,8 +20,15 @@ import { execToolInk } from "./execToolInk.js";
20
20
  import { connectProjectContextField } from "../projectContext.js";
21
21
  import { startInkUI } from "./App.js";
22
22
  import * as store from "./store.js";
23
+ import { McpManager, isMcpTool } from "../mcp.js";
24
+ import { backgroundRegistry } from "../background.js";
23
25
  export async function runSessionInk(sessionId) {
24
26
  const wsUrl = `${WS_URL}/terminal/sessions/${sessionId}/stream`;
27
+ // Start MCP servers (if configured) before connecting so their tools
28
+ // ride the connect manifest — identical to ws.ts::runSession (#14608).
29
+ const mcp = new McpManager();
30
+ const { tools: mcpTools, errors: mcpErrors } = await mcp.startAll();
31
+ const allTools = [...TOOL_MANIFEST, ...mcpTools];
25
32
  return new Promise((resolve, reject) => {
26
33
  const ws = new WebSocket(wsUrl);
27
34
  let connected = false;
@@ -39,6 +46,13 @@ export async function runSessionInk(sessionId) {
39
46
  firstTokenThisTurn = true;
40
47
  ws.send(JSON.stringify({ type: "message", content: text }));
41
48
  },
49
+ // #14605 gate — halt an in-flight room-agent turn. Relayed to the agent(s),
50
+ // which abort the SDK query; a no-op if nothing is running.
51
+ onInterrupt: () => {
52
+ if (ws.readyState === WebSocket.OPEN) {
53
+ ws.send(JSON.stringify({ type: "interrupt" }));
54
+ }
55
+ },
42
56
  });
43
57
  function finish(err) {
44
58
  if (settled)
@@ -46,6 +60,8 @@ export async function runSessionInk(sessionId) {
46
60
  settled = true;
47
61
  if (pingInterval)
48
62
  clearInterval(pingInterval);
63
+ mcp.stopAll();
64
+ backgroundRegistry.killAll();
49
65
  try {
50
66
  ink.unmount();
51
67
  }
@@ -75,7 +91,9 @@ export async function runSessionInk(sessionId) {
75
91
  while (toolQueue.length > 0) {
76
92
  const tc = toolQueue.shift();
77
93
  store.flushStreaming();
78
- const result = await execToolInk(tc);
94
+ const result = isMcpTool(tc.name)
95
+ ? await mcp.call(tc.name, tc.input, tc.tool_use_id)
96
+ : await execToolInk(tc);
79
97
  try {
80
98
  await postToolResults(sessionId, [
81
99
  { tool_use_id: result.tool_use_id, content: result.content, is_error: result.is_error },
@@ -97,7 +115,7 @@ export async function runSessionInk(sessionId) {
97
115
  ws.send(JSON.stringify({
98
116
  type: "connect",
99
117
  cwd: process.cwd(),
100
- tools: TOOL_MANIFEST,
118
+ tools: allTools,
101
119
  ...connectProjectContextField(process.cwd()),
102
120
  }));
103
121
  });
@@ -113,6 +131,9 @@ export async function runSessionInk(sessionId) {
113
131
  store.setBotName(name);
114
132
  const shortId = String(msg.session_id ?? sessionId).slice(0, 4);
115
133
  store.setSessionLabel(`${(name ?? "session").toLowerCase()} · ${shortId}`);
134
+ for (const err of mcpErrors) {
135
+ store.pushError(`MCP server skipped — ${err}`);
136
+ }
116
137
  break;
117
138
  }
118
139
  case "text_delta":
@@ -141,6 +162,33 @@ export async function runSessionInk(sessionId) {
141
162
  });
142
163
  pendingServerTool = true;
143
164
  break;
165
+ case "message":
166
+ // #14605 — a peer's message fanned in by the broker (another room
167
+ // participant: DoctorWhiskers, claude-code, or another human). Render
168
+ // it attributed to the sender. `addressed_agents` is the broker's
169
+ // routing hint for agents; a human client just displays the turn.
170
+ store.addPeerTurn(String(msg.from ?? "?"), String(msg.content ?? ""));
171
+ break;
172
+ case "approval_request": {
173
+ // #14605 gate — a room-agent wants to run a mutating tool. Surface it
174
+ // in the SAME approval UI the human uses for their own tool calls, then
175
+ // relay the decision back so the agent's canUseTool proceeds/denies.
176
+ const requestId = String(msg.request_id ?? "");
177
+ const decision = await store.requestApproval({
178
+ tool: `${String(msg.from ?? "agent")}: ${String(msg.tool ?? "tool")}`,
179
+ summary: String(msg.summary ?? ""),
180
+ body: String(msg.body ?? ""),
181
+ });
182
+ if (ws.readyState === WebSocket.OPEN) {
183
+ ws.send(JSON.stringify({
184
+ type: "approval_response",
185
+ request_id: requestId,
186
+ approved: decision.approved,
187
+ reason: decision.approved ? "" : decision.rejectReason,
188
+ }));
189
+ }
190
+ break;
191
+ }
144
192
  case "message_stop":
145
193
  flushPendingServerTool();
146
194
  store.endTurn();
@@ -1 +1 @@
1
- {"version":3,"file":"runSessionInk.js","sourceRoot":"","sources":["../../src/ink/runSessionInk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runSessionInk.js","sourceRoot":"","sources":["../../src/ink/runSessionInk.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,10 @@ export type Turn = {
20
20
  } | {
21
21
  kind: "tool";
22
22
  tool: ToolCall;
23
+ } | {
24
+ kind: "peer";
25
+ from: string;
26
+ text: string;
23
27
  };
24
28
  /** The user's decision on a tool approval — mirrors ui_state.ApprovalMenuResult. */
25
29
  export type ApprovalDecision = {
@@ -66,6 +70,13 @@ export declare function setBotName(name: string | undefined | null): void;
66
70
  export declare function setSessionLabel(label: string): void;
67
71
  /** User submitted a message: commit it to history and mark the agent busy. */
68
72
  export declare function addUserTurn(text: string): void;
73
+ /**
74
+ * #14605 — a message from another ROOM participant (a peer human, or an agent
75
+ * like DoctorWhiskers / claude-code), fanned in by the broker. Commit it to
76
+ * history attributed to `from`. Does NOT touch `busy`: a peer turn isn't this
77
+ * client's own turn, and the local input stays free while the room converses.
78
+ */
79
+ export declare function addPeerTurn(from: string, text: string): void;
69
80
  /** A text_delta arrived — append to the streaming reply. */
70
81
  export declare function appendStreaming(delta: string): void;
71
82
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/ink/store.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,2EAA2E;IAC3E,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACrC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,MAAM,MAAM,IAAI,GACZ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAErC,oFAAoF;AACpF,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,kBAAkB,EAAE,OAAO,CAAA;CAAE,GAC/C;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9C,yDAAyD;AACzD,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,uDAAuD;IACvD,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,kEAAkE;IAClE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,kEAAkE;IAClE,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;CACzC;AAkCD,wBAAgB,WAAW,IAAI,YAAY,CAE1C;AAED,wBAAgB,UAAU,IAAI,YAAY,CAEzC;AAGD,wBAAgB,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAErD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAEhE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEnD;AAED,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,4DAA4D;AAC5D,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGnD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAIrC;AAED,2EAA2E;AAC3E,wBAAgB,OAAO,IAAI,IAAI,CAG9B;AAED,8DAA8D;AAC9D,wBAAgB,SAAS,CAAC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAEnF;AAED,iFAAiF;AACjF,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAShF;AAED,4EAA4E;AAC5E,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAM/C;AAKD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAK7E;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAKhE;AAED,uDAAuD;AACvD,wBAAgB,aAAa,IAAI,IAAI,CAcpC"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/ink/store.ts"],"names":[],"mappings":"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"}
package/dist/ink/store.js CHANGED
@@ -60,6 +60,18 @@ export function setSessionLabel(label) {
60
60
  export function addUserTurn(text) {
61
61
  set({ turns: [...state.turns, { kind: "user", text }], busy: true });
62
62
  }
63
+ /**
64
+ * #14605 — a message from another ROOM participant (a peer human, or an agent
65
+ * like DoctorWhiskers / claude-code), fanned in by the broker. Commit it to
66
+ * history attributed to `from`. Does NOT touch `busy`: a peer turn isn't this
67
+ * client's own turn, and the local input stays free while the room converses.
68
+ */
69
+ export function addPeerTurn(from, text) {
70
+ if (!text)
71
+ return;
72
+ // Normalize a falsy sender so the header never renders blank.
73
+ set({ turns: [...state.turns, { kind: "peer", from: from || "?", text }] });
74
+ }
63
75
  /** A text_delta arrived — append to the streaming reply. */
64
76
  export function appendStreaming(delta) {
65
77
  if (!delta)