agent-rooms 0.1.6 → 0.1.8

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.
@@ -0,0 +1,438 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { createRequire } from "node:module";
3
+ import { existsSync } from "node:fs";
4
+ import { platform, release } from "node:os";
5
+ import { configFilePath, loadConfig } from "../config.js";
6
+ import { claudeAdapter, codexAdapter, getAdapter, isSkillInstalled } from "../hosts.js";
7
+ const HOST_PROFILES = [
8
+ {
9
+ adapter: claudeAdapter,
10
+ label: "Claude Code",
11
+ signIn: "claude auth login",
12
+ update: "claude update",
13
+ authMcp: "claude mcp login agent-rooms",
14
+ installDocs: "https://docs.anthropic.com/en/docs/claude-code"
15
+ },
16
+ {
17
+ adapter: codexAdapter,
18
+ label: "Codex",
19
+ signIn: "codex login",
20
+ update: "npm install -g @openai/codex@latest",
21
+ authMcp: "Set AGENT_ROOMS_TOKEN before starting Codex sessions.",
22
+ installDocs: "https://developers.openai.com/codex/cli"
23
+ }
24
+ ];
25
+ const MIN_VERSIONS = {
26
+ claude_code: "2.1.0",
27
+ codex: "0.141.0"
28
+ };
29
+ const requirePackage = createRequire(import.meta.url);
30
+ const packageJson = requirePackage("../../package.json");
31
+ export function buildReadiness(listener, apiBaseOverride) {
32
+ const config = loadConfig();
33
+ const apiBase = apiBaseOverride || config.apiBase;
34
+ const dashboard = detectDashboardVersion();
35
+ const hosts = Object.fromEntries(HOST_PROFILES.map((profile) => [profile.adapter.name, detectHost(profile, apiBase)]));
36
+ const bindings = config.bindings.map((binding) => ({
37
+ ...binding,
38
+ paused: config.pausedAgents.includes(binding.agent),
39
+ listenerServing: listener.running && !config.pausedAgents.includes(binding.agent),
40
+ workspaceExists: existsSync(binding.workspace),
41
+ health: config.pausedAgents.includes(binding.agent) ? "paused" : existsSync(binding.workspace) ? "ready" : "attention"
42
+ }));
43
+ const preferredHost = choosePreferredHost(config.bindings, hosts);
44
+ const steps = buildSteps({
45
+ apiBase,
46
+ nodeReady: nodeReady(),
47
+ paired: Boolean(config.device),
48
+ hosts,
49
+ preferredHost,
50
+ bindings,
51
+ listener,
52
+ dashboard
53
+ });
54
+ const nextAction = chooseNextAction(steps);
55
+ return {
56
+ generatedAt: Date.now(),
57
+ apiBase,
58
+ configPath: configFilePath(),
59
+ env: {
60
+ nodeVersion: process.versions.node,
61
+ nodeReady: nodeReady(),
62
+ dashboardSignedIn: Boolean(config.device),
63
+ platform: platform(),
64
+ release: release()
65
+ },
66
+ dashboard,
67
+ hosts,
68
+ preferredHost,
69
+ device: {
70
+ paired: Boolean(config.device),
71
+ id: config.device?.id ?? null
72
+ },
73
+ agents: bindings,
74
+ listener,
75
+ steps,
76
+ nextAction,
77
+ diagnostics: buildDiagnostics(steps, preferredHost),
78
+ advanced: {
79
+ commands: buildCommands(apiBase, preferredHost, hosts[preferredHost]),
80
+ rawConfig: {
81
+ apiBase: config.apiBase,
82
+ device: config.device ? { id: config.device.id, token: "***" } : null,
83
+ bindings: config.bindings,
84
+ pausedAgents: config.pausedAgents,
85
+ hostTokens: Object.fromEntries(Object.keys(config.hostTokens).map((key) => [key, "***"])),
86
+ sessions: Object.fromEntries(Object.keys(config.sessions).map((key) => [key, "***"]))
87
+ }
88
+ }
89
+ };
90
+ }
91
+ function detectHost(profile, apiBase) {
92
+ const config = loadConfig();
93
+ const adapter = profile.adapter;
94
+ const versionProbe = runProbe(adapter.bin, ["--version"]);
95
+ const detected = versionProbe.ok;
96
+ const version = detected ? firstLine(versionProbe.output) : null;
97
+ const versionOk = detected ? isVersionAtLeast(version, MIN_VERSIONS[adapter.name]) : false;
98
+ const mcpAdd = adapter.buildMcpAdd(apiBase);
99
+ const tokenEnvPresent = Boolean(process.env.AGENT_ROOMS_TOKEN);
100
+ const tokenStored = Boolean(config.hostTokens[adapter.name]);
101
+ let cliSignedIn = null;
102
+ let mcpInstalled = false;
103
+ let mcpAuthed = false;
104
+ let detail = detected ? "Detected on PATH." : "CLI not found on PATH.";
105
+ if (detected && adapter.name === "claude_code") {
106
+ const auth = runProbe(adapter.bin, ["auth", "status"], 6000);
107
+ cliSignedIn = auth.ok && parseClaudeAuth(auth.output);
108
+ const mcp = runProbe(adapter.bin, ["mcp", "list"], 8000);
109
+ const agentLine = mcp.output.split(/\r?\n/).find((line) => line.toLowerCase().includes("agent-rooms"));
110
+ mcpInstalled = Boolean(agentLine);
111
+ mcpAuthed = Boolean(agentLine && /connected|sqrt|√|\u221a/i.test(agentLine + "\n" + mcp.output));
112
+ detail = cliSignedIn ? "Signed in with Claude Code." : "Run Claude auth login before wake.";
113
+ }
114
+ if (detected && adapter.name === "codex") {
115
+ const auth = runProbe(adapter.bin, ["login", "status"], 6000);
116
+ cliSignedIn = auth.ok && /logged in/i.test(auth.output);
117
+ const mcp = runProbe(adapter.bin, ["mcp", "list", "--json"], 8000);
118
+ const server = parseCodexMcp(mcp.output);
119
+ mcpInstalled = Boolean(server?.enabled);
120
+ mcpAuthed = Boolean(server?.auth_status === "bearer_token" && (tokenEnvPresent || tokenStored));
121
+ detail = cliSignedIn ? "Signed in with Codex." : "Run codex login before wake.";
122
+ if (server?.auth_status === "bearer_token" && !tokenEnvPresent && !tokenStored) {
123
+ detail = "Codex MCP is configured but no Agent Rooms bearer token is available.";
124
+ }
125
+ }
126
+ return {
127
+ id: adapter.name,
128
+ label: profile.label,
129
+ detected,
130
+ version,
131
+ versionOk,
132
+ cliSignedIn,
133
+ mcpInstalled,
134
+ mcpAuthed,
135
+ skillInstalled: isSkillInstalled(adapter),
136
+ skillSupported: Boolean(adapter.skillDir),
137
+ tokenEnvPresent,
138
+ tokenStored,
139
+ commands: {
140
+ detect: `${adapter.bin} --version`,
141
+ signIn: profile.signIn,
142
+ installMcp: `${mcpAdd.command} ${mcpAdd.args.join(" ")}`,
143
+ authMcp: profile.authMcp,
144
+ installSkill: adapter.skillDir ? `copy bundled skill to ${adapter.skillDir}\\agent-rooms` : null,
145
+ update: profile.update,
146
+ installUrl: profile.installDocs
147
+ },
148
+ detail
149
+ };
150
+ }
151
+ function buildSteps(input) {
152
+ const host = input.hosts[input.preferredHost] ?? input.hosts.claude_code;
153
+ const anyHostDetected = Object.values(input.hosts).some((h) => h.detected);
154
+ const agentBound = input.bindings.length > 0;
155
+ const listenerBlocker = listenerBlockerFor(input.paired, agentBound, host);
156
+ const steps = [];
157
+ steps.push({
158
+ id: "node",
159
+ label: "Node ready",
160
+ status: input.nodeReady ? "ready" : "action_needed",
161
+ hint: input.nodeReady ? `Node ${process.versions.node}` : "Install Node 20 or newer.",
162
+ action: input.nodeReady ? undefined : { id: "open.url", label: "Install Node", payload: { url: "https://nodejs.org/" } }
163
+ });
164
+ steps.push({
165
+ id: "device",
166
+ label: "Pair this device",
167
+ dependsOn: ["node"],
168
+ status: input.paired ? "ready" : input.nodeReady ? "action_needed" : "blocked",
169
+ hint: input.paired ? "Device credential is stored locally." : input.nodeReady ? "Approve this computer in Agent Rooms." : "needs: Node ready",
170
+ blocker: input.nodeReady ? undefined : { id: "node", label: "Node ready" },
171
+ action: input.paired || !input.nodeReady ? undefined : { id: "pair.start", label: "Pair device" }
172
+ });
173
+ steps.push({
174
+ id: "host.detect",
175
+ label: "Host CLI detected",
176
+ dependsOn: ["device"],
177
+ status: anyHostDetected ? "ready" : "action_needed",
178
+ hint: anyHostDetected ? `${Object.values(input.hosts).filter((h) => h.detected).map((h) => h.label).join(", ")} found.` : "Install Claude Code or Codex to enable wake.",
179
+ action: anyHostDetected ? undefined : { id: "open.url", label: "Install host", payload: { url: host.commands.installUrl } }
180
+ });
181
+ steps.push({
182
+ id: "host.update",
183
+ label: `Update ${host.label}`,
184
+ dependsOn: ["host.detect"],
185
+ status: !host.detected ? "blocked" : host.versionOk ? "ready" : "action_needed",
186
+ hint: !host.detected
187
+ ? `needs: ${host.label} detected`
188
+ : host.versionOk
189
+ ? `${host.version ?? host.label} is current enough.`
190
+ : `${host.version ?? "Installed version"} is below the supported floor. Update before sign-in/wake.`,
191
+ blocker: host.detected ? undefined : { id: "host.detect", label: "Host CLI detected" },
192
+ action: !host.detected || host.versionOk ? undefined : { id: "host.update", label: `Update ${host.label}`, host: host.id }
193
+ });
194
+ steps.push({
195
+ id: "host.auth",
196
+ label: `Sign in to ${host.label}`,
197
+ dependsOn: ["host.update"],
198
+ status: !host.detected ? "blocked" : !host.versionOk ? "blocked" : host.cliSignedIn ? "ready" : "action_needed",
199
+ hint: !host.detected ? `needs: ${host.label} detected` : !host.versionOk ? `needs: Update ${host.label}` : host.cliSignedIn ? "Host CLI auth is ready for headless wake." : `Run ${host.commands.signIn}.`,
200
+ blocker: !host.detected ? { id: "host.detect", label: "Host CLI detected" } : !host.versionOk ? { id: "host.update", label: `Update ${host.label}` } : undefined,
201
+ action: !host.detected || !host.versionOk || host.cliSignedIn ? undefined : { id: "manual.command", label: "Show sign-in command", host: host.id, command: host.commands.signIn, manual: true }
202
+ });
203
+ steps.push({
204
+ id: "mcp.install",
205
+ label: `Install Agent Rooms in ${host.label}`,
206
+ dependsOn: ["host.detect"],
207
+ status: !host.detected ? "blocked" : host.mcpInstalled ? "ready" : "action_needed",
208
+ hint: !host.detected ? `needs: ${host.label} detected` : host.mcpInstalled ? "MCP connector is registered." : "Adds the shared Agent Rooms MCP server to this host.",
209
+ blocker: host.detected ? undefined : { id: "host.detect", label: "Host CLI detected" },
210
+ action: !host.detected || host.mcpInstalled ? undefined : { id: "host.installMcp", label: "Install MCP", host: host.id }
211
+ });
212
+ steps.push({
213
+ id: "mcp.auth",
214
+ label: `Authenticate ${host.label} connector`,
215
+ dependsOn: ["mcp.install"],
216
+ status: !host.mcpInstalled ? "blocked" : host.mcpAuthed ? "ready" : "action_needed",
217
+ hint: !host.mcpInstalled
218
+ ? "needs: Install Agent Rooms first"
219
+ : host.mcpAuthed
220
+ ? "Connector auth is ready."
221
+ : host.id === "codex"
222
+ ? "Codex uses bearer auth. Save a token here or start Codex with AGENT_ROOMS_TOKEN set."
223
+ : "Open the host MCP auth flow and pick the Agent Rooms passport.",
224
+ blocker: host.mcpInstalled ? undefined : { id: "mcp.install", label: "Install Agent Rooms" },
225
+ action: !host.mcpInstalled || host.mcpAuthed ? undefined : host.id === "codex" ? { id: "host.token.focus", label: "Save token", host: host.id } : { id: "manual.command", label: "Show auth command", host: host.id, command: host.commands.authMcp, manual: true }
226
+ });
227
+ steps.push({
228
+ id: "skill.install",
229
+ label: `Install Agent Rooms skill in ${host.label}`,
230
+ dependsOn: ["host.detect"],
231
+ status: !host.skillSupported ? "absent" : host.skillInstalled ? "ready" : "action_needed",
232
+ optional: true,
233
+ hint: !host.skillSupported ? "Skill path for this host is not wired yet." : host.skillInstalled ? "Skill is installed." : "Installs native room behavior so wake prompts can stay short.",
234
+ action: host.skillSupported && !host.skillInstalled ? { id: "host.installSkill", label: "Install skill", host: host.id } : undefined
235
+ });
236
+ steps.push({
237
+ id: "agent.binding",
238
+ label: "Bind agent to workspace",
239
+ dependsOn: ["device"],
240
+ status: !input.paired ? "blocked" : agentBound ? "ready" : "action_needed",
241
+ hint: !input.paired ? "needs: Pair this device" : agentBound ? `${input.bindings.length} binding(s) configured.` : "Add an agent plate, room id, host, and local folder.",
242
+ blocker: input.paired ? undefined : { id: "device", label: "Pair this device" },
243
+ action: !input.paired || agentBound ? undefined : { id: "config.binding.focus", label: "Add binding" }
244
+ });
245
+ steps.push({
246
+ id: "listener",
247
+ label: "Start listening",
248
+ dependsOn: ["device", "agent.binding", "host.auth"],
249
+ status: input.listener.running ? "working" : listenerBlocker ? "blocked" : "action_needed",
250
+ hint: input.listener.running
251
+ ? `Serving ${input.listener.servingCount} instance(s).`
252
+ : listenerBlocker
253
+ ? `needs: ${listenerBlocker.label}`
254
+ : "Connects to the cloud socket and wakes bound agents on @mentions.",
255
+ blocker: listenerBlocker,
256
+ action: input.listener.running
257
+ ? { id: "listener.stop", label: "Stop" }
258
+ : !listenerBlocker
259
+ ? { id: "listener.start", label: "Start listening" }
260
+ : undefined
261
+ });
262
+ steps.push({
263
+ id: "dashboard.update",
264
+ label: "Update dashboard",
265
+ dependsOn: ["node"],
266
+ status: input.dashboard.updateAvailable ? "attention" : "ready",
267
+ optional: true,
268
+ hint: input.dashboard.updateAvailable
269
+ ? `A newer package is available (${input.dashboard.latestVersion}). Restart with npx agent-rooms@latest dashboard.`
270
+ : `Dashboard package ${input.dashboard.currentVersion} is up to date.`,
271
+ action: input.dashboard.updateAvailable ? { id: "manual.command", label: "Show update command", command: "npx agent-rooms@latest dashboard", manual: true } : undefined
272
+ });
273
+ return steps;
274
+ }
275
+ function listenerBlockerFor(paired, agentBound, host) {
276
+ if (!paired)
277
+ return { id: "device", label: "Pair this device" };
278
+ if (!agentBound)
279
+ return { id: "agent.binding", label: "Bind agent to workspace" };
280
+ if (!host.detected)
281
+ return { id: "host.detect", label: "Host CLI detected" };
282
+ if (!host.versionOk)
283
+ return { id: "host.update", label: `Update ${host.label}` };
284
+ if (!host.cliSignedIn)
285
+ return { id: "host.auth", label: `Sign in to ${host.label}` };
286
+ return undefined;
287
+ }
288
+ function buildDiagnostics(steps, preferredHost) {
289
+ const mentionRoot = rootCause(steps, "listener");
290
+ const replyRoot = rootCause(steps, "mcp.auth");
291
+ const toolsRoot = rootCause(steps, "mcp.auth");
292
+ return [
293
+ {
294
+ id: "mention-no-wake",
295
+ symptom: "I @mentioned my agent and nothing happened.",
296
+ cause: mentionRoot ? `${mentionRoot.label}: ${mentionRoot.hint}` : "Listener path is ready. Check room membership and recent activity.",
297
+ action: mentionRoot?.action
298
+ },
299
+ {
300
+ id: "woke-no-reply",
301
+ symptom: "Agent woke but did not reply in the room.",
302
+ cause: replyRoot ? `${replyRoot.label}: ${replyRoot.hint}` : "Connector auth is ready. Check the Activity feed for spawn/tool errors.",
303
+ action: replyRoot?.action
304
+ },
305
+ {
306
+ id: "tools-missing",
307
+ symptom: "Agent Rooms tools do not show up in my host.",
308
+ cause: toolsRoot ? `${toolsRoot.label}: ${toolsRoot.hint}` : `MCP looks ready for ${preferredHost}. Restart the host if it was already open.`,
309
+ action: toolsRoot?.action
310
+ },
311
+ {
312
+ id: "self-loop",
313
+ symptom: "It keeps waking itself.",
314
+ cause: "Backend requires @plate for parsed mentions and has a self-wake guard. If this recurs, look for explicit self-mentions in the sender.",
315
+ action: { id: "manual.command", label: "Show logs", command: "agent-rooms dashboard", manual: true }
316
+ }
317
+ ];
318
+ }
319
+ function rootCause(steps, id, seen = new Set()) {
320
+ if (seen.has(id))
321
+ return null;
322
+ seen.add(id);
323
+ const byId = new Map(steps.map((step) => [step.id, step]));
324
+ const step = byId.get(id);
325
+ if (!step)
326
+ return null;
327
+ for (const dep of step.dependsOn ?? []) {
328
+ const root = rootCause(steps, dep, seen);
329
+ if (root)
330
+ return root;
331
+ }
332
+ return isFailing(step) ? step : null;
333
+ }
334
+ function isFailing(step) {
335
+ return step.status !== "ready" && step.status !== "working" && step.status !== "absent";
336
+ }
337
+ function chooseNextAction(steps) {
338
+ return steps.find((step) => step.status === "action_needed" && !step.optional)
339
+ ?? steps.find((step) => step.status === "action_needed")
340
+ ?? null;
341
+ }
342
+ function choosePreferredHost(bindings, hosts) {
343
+ const configured = bindings.find((binding) => getAdapter(binding.host))?.host;
344
+ if (configured && hosts[configured])
345
+ return configured;
346
+ const detected = Object.values(hosts).find((host) => host.detected);
347
+ return detected?.id ?? "claude_code";
348
+ }
349
+ function buildCommands(apiBase, preferredHost, host) {
350
+ const commands = [
351
+ "npx agent-rooms@latest dashboard",
352
+ "npx agent-rooms@latest watch",
353
+ "npx agent-rooms@latest watch --dry-run",
354
+ "Dashboard: Restart listener button soft-reloads bindings and paused agents.",
355
+ "npx agent-rooms@latest uninstall --yes"
356
+ ];
357
+ if (host) {
358
+ commands.push(host.commands.signIn);
359
+ commands.push(host.commands.installMcp);
360
+ if (preferredHost === "codex")
361
+ commands.push("$env:AGENT_ROOMS_TOKEN=\"<agent credential>\" # optional if saved in dashboard");
362
+ }
363
+ commands.push(`API base: ${apiBase}`);
364
+ return commands;
365
+ }
366
+ function nodeReady() {
367
+ return Number(process.versions.node.split(".")[0] ?? 0) >= 20;
368
+ }
369
+ function runProbe(command, args, timeout = 5000) {
370
+ try {
371
+ const result = spawnSync(command, args, {
372
+ encoding: "utf8",
373
+ timeout,
374
+ shell: process.platform === "win32",
375
+ stdio: "pipe"
376
+ });
377
+ const output = `${result.stdout ?? ""}${result.stderr ?? ""}`.trim();
378
+ return { ok: result.status === 0, output };
379
+ }
380
+ catch (error) {
381
+ return { ok: false, output: error.message };
382
+ }
383
+ }
384
+ function firstLine(value) {
385
+ return value.split(/\r?\n/)[0]?.trim() ?? "";
386
+ }
387
+ function parseClaudeAuth(output) {
388
+ try {
389
+ const parsed = JSON.parse(output);
390
+ return parsed.loggedIn === true;
391
+ }
392
+ catch {
393
+ return /logged\s*in|authenticated/i.test(output);
394
+ }
395
+ }
396
+ function parseCodexMcp(output) {
397
+ try {
398
+ const parsed = JSON.parse(output);
399
+ return parsed.find((server) => server.name === "agent-rooms") ?? null;
400
+ }
401
+ catch {
402
+ return null;
403
+ }
404
+ }
405
+ function detectDashboardVersion() {
406
+ const currentVersion = packageJson.version ?? "0.0.0";
407
+ const latest = runProbe("npm", ["view", "agent-rooms", "version"], 5000);
408
+ const latestVersion = latest.ok ? firstLine(latest.output) : null;
409
+ return {
410
+ currentVersion,
411
+ latestVersion,
412
+ updateAvailable: Boolean(latestVersion && isVersionAtLeast(latestVersion, currentVersion) && latestVersion !== currentVersion)
413
+ };
414
+ }
415
+ function isVersionAtLeast(value, minimum) {
416
+ if (!minimum)
417
+ return true;
418
+ const found = parseVersion(value);
419
+ const floor = parseVersion(minimum);
420
+ if (!found || !floor)
421
+ return true;
422
+ for (let i = 0; i < 3; i += 1) {
423
+ const a = found[i] ?? 0;
424
+ const b = floor[i] ?? 0;
425
+ if (a > b)
426
+ return true;
427
+ if (a < b)
428
+ return false;
429
+ }
430
+ return true;
431
+ }
432
+ function parseVersion(value) {
433
+ const match = value?.match(/(\d+)\.(\d+)\.(\d+)/);
434
+ if (!match)
435
+ return null;
436
+ return [Number(match[1]), Number(match[2]), Number(match[3])];
437
+ }
438
+ //# sourceMappingURL=readiness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readiness.js","sourceRoot":"","sources":["../../src/dashboard/readiness.ts"],"names":[],"mappings":"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"}