diff options
| author | Kit Langton <[email protected]> | 2026-05-01 07:57:03 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-05-01 11:57:03 +0000 |
| commit | 16ddf5f559d8c52b23c6db7a046c3fda6a1d71f6 (patch) | |
| tree | d2bdb749e79c12fd740dee60b6683b45449370dd | |
| parent | 8c79c58c4d6330016331b698717f50aa21523058 (diff) | |
| download | opencode-16ddf5f559d8c52b23c6db7a046c3fda6a1d71f6.tar.gz opencode-16ddf5f559d8c52b23c6db7a046c3fda6a1d71f6.zip | |
fix(session): use finite archived timestamp schema (#25275)
| -rw-r--r-- | packages/opencode/src/session/session.ts | 6 | ||||
| -rw-r--r-- | packages/opencode/test/server/httpapi-bridge.test.ts | 12 |
2 files changed, 15 insertions, 3 deletions
diff --git a/packages/opencode/src/session/session.ts b/packages/opencode/src/session/session.ts index 5593efc97..e1d0c527a 100644 --- a/packages/opencode/src/session/session.ts +++ b/packages/opencode/src/session/session.ts @@ -142,9 +142,9 @@ const Share = Schema.Struct({ url: Schema.String, }) -// Legacy HTTP accepted any number here, and persisted data may already contain -// negative values. Keep archive timestamps permissive while other clocks stay non-negative. -export const ArchivedTimestamp = Schema.Number +// Legacy HTTP accepted negative values here. Keep archive timestamps permissive +// while excluding non-finite values that cannot round-trip through JSON. +export const ArchivedTimestamp = Schema.Finite const Time = Schema.Struct({ created: NonNegativeInt, diff --git a/packages/opencode/test/server/httpapi-bridge.test.ts b/packages/opencode/test/server/httpapi-bridge.test.ts index 934332673..a01b7330e 100644 --- a/packages/opencode/test/server/httpapi-bridge.test.ts +++ b/packages/opencode/test/server/httpapi-bridge.test.ts @@ -258,6 +258,18 @@ describe("HttpApi server", () => { }) }) + test("matches SDK-affecting request schema details", () => { + const effect = effectOpenApi() + const sessionUpdate = effect.paths["/session/{sessionID}"]?.patch?.requestBody + const sessionUpdateSchema = + typeof sessionUpdate === "object" && sessionUpdate && "content" in sessionUpdate + ? sessionUpdate.content?.["application/json"]?.schema + : undefined + const sessionUpdateProperties = sessionUpdateSchema?.properties as Record<string, OpenApiSchema> | undefined + const time = sessionUpdateProperties?.time + expect(time?.properties?.archived).toEqual({ type: "number" }) + }) + test("documents event routes as server-sent events", () => { const effect = effectOpenApi() |
