From 879993b9b1b08626c4daa8f3c86eeb899367babf Mon Sep 17 00:00:00 2001 From: Hare Date: Tue, 1 Sep 2026 01:41:16 +0900 Subject: [PATCH] fix: accept zero-length Companion transcripts --- crates/workspace-server/src/server.rs | 12 ++++++++++++ .../src/lib/workspace/companion/api.test.ts | 18 ++++++++++++++++++ .../src/lib/workspace/companion/api.ts | 2 +- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/crates/workspace-server/src/server.rs b/crates/workspace-server/src/server.rs index 56ffe1d9..fbdeebd6 100644 --- a/crates/workspace-server/src/server.rs +++ b/crates/workspace-server/src/server.rs @@ -24168,6 +24168,18 @@ mod tests { let companion_transcript = get_json(app.clone(), "/api/companion/transcript").await; assert_eq!(companion_transcript["total"], 0); + let empty_window = get_json(app.clone(), "/api/companion/transcript?start=0&limit=0").await; + assert_eq!( + empty_window, + json!({ + "state": "stopped", + "start": 0, + "limit": 0, + "total": 0, + "next": null, + "items": [], + }) + ); let host_workers = get_json(app.clone(), &format!("/api/hosts/{host_id}/workers")).await; assert!( diff --git a/web/workspace/src/lib/workspace/companion/api.test.ts b/web/workspace/src/lib/workspace/companion/api.test.ts index b6855a2d..f37f86f2 100644 --- a/web/workspace/src/lib/workspace/companion/api.test.ts +++ b/web/workspace/src/lib/workspace/companion/api.test.ts @@ -104,6 +104,24 @@ Deno.test("Companion transcript boundary accepts only bounded user-visible items ], }; assertEquals(parseCompanionTranscriptProjection(fixture), fixture); + assertEquals( + parseCompanionTranscriptProjection({ + state: "stopped", + start: 0, + limit: 0, + total: 0, + next: null, + items: [], + }), + { + state: "stopped", + start: 0, + limit: 0, + total: 0, + next: null, + items: [], + }, + ); assertThrows( () => diff --git a/web/workspace/src/lib/workspace/companion/api.ts b/web/workspace/src/lib/workspace/companion/api.ts index 132a1a9e..ba7584aa 100644 --- a/web/workspace/src/lib/workspace/companion/api.ts +++ b/web/workspace/src/lib/workspace/companion/api.ts @@ -63,7 +63,7 @@ export function parseCompanionTranscriptProjection( ]); const start = boundedInteger(record.start); const limit = boundedInteger(record.limit); - if (limit < 1 || limit > MAX_TRANSCRIPT_ITEMS) { + if (limit > MAX_TRANSCRIPT_ITEMS) { throw new TypeError("Companion transcript limit is out of range"); } const items = boundedArray(record.items, limit).map(parseTranscriptItem);