import assert from "node:assert/strict"; import { mkdir, mkdtemp } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import test from "node:test"; import { startBridgeDaemon } from "../src/bridge/daemon.js"; import { createNoctaliaStateRelay } from "../src/client/noctalia-relay.js"; test("starts a bridge daemon around the local bridge service", async () => { const root = await mkdtemp(join(tmpdir(), "pi-status-bridge-daemon-")); const home = join(root, "home"); await mkdir(home); const daemon = await startBridgeDaemon({ homeWorktree: home, runtimeDir: join(root, "runtime"), sessionRoot: join(root, "sessions"), startAdapter: () => ({ send: async () => ({ type: "response", success: true }), respondToExtension: () => {}, stop: async () => {}, }), }); try { assert.match(daemon.socketPath, /bridge\.sock$/); assert.equal(daemon.listAgents()[0].worktreePath, home); } finally { await daemon.close(); } }); test("relays only the selected agent's bridge state into a presentation update", async () => { let listener; const updates = []; const relay = createNoctaliaStateRelay({ client: { request: async () => ({ data: { isStreaming: false } }), subscribe: async (_agentId, _cursor, callback) => { listener = callback; return () => {}; }, }, agent: { id: "agent-1", worktreePath: "/worktrees/feature" }, onState: (state) => updates.push(state), }); await relay.start(); listener({ type: "agent_state", data: { state: "streaming" } }); listener({ type: "queue", data: { event: { steering: ["focus"], followUp: [] } }, }); assert.deepEqual(updates, [ { state: "idle", projectLabel: "feature", attentionCount: 0, detail: "Idle", }, { state: "streaming", projectLabel: "feature", attentionCount: 0, detail: "Streaming", }, { state: "streaming", projectLabel: "feature", attentionCount: 1, detail: "Streaming", }, ]); });