feat: add multi-session desktop workspace

This commit is contained in:
2026-08-13 21:34:04 +02:00
parent 12b9b83d51
commit 475f95ba70
56 changed files with 8998 additions and 3805 deletions
+50
View File
@@ -42,6 +42,56 @@ function collectFrames(socket, count) {
});
}
test("workspace subscription exposes daemon identity, replay boundaries, and globally ordered live events", async () => {
const root = await mkdtemp(join(tmpdir(), "pi-status-workspace-subscribe-"));
const home = join(root, "home");
await mkdir(home);
const calls = [];
const service = await startBridgeService({
homeWorktree: home,
runtimeDir: join(root, "runtime"),
sessionRoot: join(root, "sessions"),
startAdapter: (options) => {
const adapter = {
send: async () => ({ type: "response", success: true, data: {} }),
respondToExtension: () => {},
stop: async () => {},
};
calls.push({ options, adapter });
return adapter;
},
});
const socket = await connect(service.socketPath);
try {
const frames = collectFrames(socket, 2);
socket.write(
`${JSON.stringify({ version: "v1", id: "workspace-1", op: "subscribe_workspace", payload: { cursor: 0 } })}\n`,
);
setTimeout(() => {
calls[0].options.onEvent({
type: "stream",
data: { event: { type: "message_update", delta: "live" } },
});
}, 10);
const [replay, live] = await frames;
assert.equal(replay.ok, true);
assert.equal(typeof replay.result.bridgeInstanceId, "string");
assert.equal(replay.result.truncated, false);
assert.equal(Number.isSafeInteger(replay.result.firstAvailableSeq), true);
assert.equal(Number.isSafeInteger(replay.result.latestSeq), true);
assert.ok(replay.result.events.length >= 1);
assert.equal(live.type, "event");
assert.equal(live.event.bridgeInstanceId, replay.result.bridgeInstanceId);
assert.equal(live.event.type, "runtime_event");
assert.equal(live.event.data.eventType, "stream");
assert.ok(live.event.seq > replay.result.events.at(-1).seq);
} finally {
socket.destroy();
await service.close();
}
});
test("replays then streams subscribed agent events on the same local socket", async () => {
const root = await mkdtemp(join(tmpdir(), "pi-status-bridge-subscribe-"));
const home = join(root, "home");