Skip to content

Commit af0aef3

Browse files
committed
feat(session): add messageCount endpoint for efficient message counting
resolve: merge conflicts in generated SDK files
1 parent d500a84 commit af0aef3

2 files changed

Lines changed: 47 additions & 1 deletion

File tree

packages/opencode/src/server/routes/session.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -632,6 +632,36 @@ export const SessionRoutes = lazy(() =>
632632
return c.json(page.items)
633633
},
634634
)
635+
.get(
636+
"/:sessionID/message/count",
637+
describeRoute({
638+
summary: "Get message count",
639+
description: "Get the total number of messages in a session.",
640+
operationId: "session.messageCount",
641+
responses: {
642+
200: {
643+
description: "Message count",
644+
content: {
645+
"application/json": {
646+
schema: resolver(z.object({ count: z.number() })),
647+
},
648+
},
649+
},
650+
...errors(400, 404),
651+
},
652+
}),
653+
validator(
654+
"param",
655+
z.object({
656+
sessionID: SessionID.zod,
657+
}),
658+
),
659+
async (c) => {
660+
const sessionID = c.req.valid("param").sessionID
661+
const count = await Session.messageCount({ sessionID })
662+
return c.json({ count })
663+
},
664+
)
635665
.get(
636666
"/:sessionID/message/:messageID",
637667
describeRoute({

packages/opencode/src/session/index.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { Config } from "../config/config"
99
import { Flag } from "../flag/flag"
1010
import { Installation } from "../installation"
1111

12-
import { Database, NotFoundError, eq, and, gte, isNull, desc, like, inArray, lt } from "../storage/db"
12+
import { Database, NotFoundError, eq, and, or, gte, isNull, desc, like, inArray, lt, sql } from "../storage/db"
1313
import { SyncEvent } from "../sync"
1414
import type { SQL } from "../storage/db"
1515
import { SessionTable } from "./session.sql"
@@ -483,6 +483,22 @@ export namespace Session {
483483
},
484484
)
485485

486+
export const messageCount = fn(
487+
z.object({
488+
sessionID: SessionID.zod,
489+
}),
490+
async (input) => {
491+
const result = Database.use((db) =>
492+
db
493+
.select({ count: sql<number>`COUNT(*)` })
494+
.from(MessageTable)
495+
.where(eq(MessageTable.session_id, input.sessionID))
496+
.get(),
497+
)
498+
return result?.count ?? 0
499+
},
500+
)
501+
486502
export function* list(input?: {
487503
directory?: string
488504
workspaceID?: WorkspaceID

0 commit comments

Comments
 (0)