summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorKit Langton <[email protected]>2026-05-01 07:57:03 -0400
committerGitHub <[email protected]>2026-05-01 11:57:03 +0000
commit16ddf5f559d8c52b23c6db7a046c3fda6a1d71f6 (patch)
treed2bdb749e79c12fd740dee60b6683b45449370dd
parent8c79c58c4d6330016331b698717f50aa21523058 (diff)
downloadopencode-16ddf5f559d8c52b23c6db7a046c3fda6a1d71f6.tar.gz
opencode-16ddf5f559d8c52b23c6db7a046c3fda6a1d71f6.zip
fix(session): use finite archived timestamp schema (#25275)
-rw-r--r--packages/opencode/src/session/session.ts6
-rw-r--r--packages/opencode/test/server/httpapi-bridge.test.ts12
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()