Skip to content

Commit be5126c

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

4 files changed

Lines changed: 120 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
@@ -581,6 +581,36 @@ export const SessionRoutes = lazy(() =>
581581
return c.json(messages)
582582
},
583583
)
584+
.get(
585+
"/:sessionID/message/count",
586+
describeRoute({
587+
summary: "Get message count",
588+
description: "Get the total number of messages in a session.",
589+
operationId: "session.messageCount",
590+
responses: {
591+
200: {
592+
description: "Message count",
593+
content: {
594+
"application/json": {
595+
schema: resolver(z.object({ count: z.number() })),
596+
},
597+
},
598+
},
599+
...errors(400, 404),
600+
},
601+
}),
602+
validator(
603+
"param",
604+
z.object({
605+
sessionID: z.string().meta({ description: "Session ID" }),
606+
}),
607+
),
608+
async (c) => {
609+
const sessionID = c.req.valid("param").sessionID
610+
const count = await Session.messageCount({ sessionID })
611+
return c.json({ count })
612+
},
613+
)
584614
.get(
585615
"/:sessionID/message/:messageID",
586616
describeRoute({

packages/opencode/src/session/index.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { Flag } from "../flag/flag"
1010
import { Identifier } from "../id/id"
1111
import { Installation } from "../installation"
1212

13-
import { Database, NotFoundError, eq, and, or, gte, isNull, desc, like, inArray, lt } from "../storage/db"
13+
import { Database, NotFoundError, eq, and, or, gte, isNull, desc, like, inArray, lt, sql } from "../storage/db"
1414
import type { SQL } from "../storage/db"
1515
import { SessionTable, MessageTable, PartTable } from "./session.sql"
1616
import { ProjectTable } from "../project/project.sql"
@@ -530,6 +530,22 @@ export namespace Session {
530530
},
531531
)
532532

533+
export const messageCount = fn(
534+
z.object({
535+
sessionID: Identifier.schema("session"),
536+
}),
537+
async (input) => {
538+
const result = Database.use((db) =>
539+
db
540+
.select({ count: sql<number>`COUNT(*)` })
541+
.from(MessageTable)
542+
.where(eq(MessageTable.session_id, input.sessionID))
543+
.get(),
544+
)
545+
return result?.count ?? 0
546+
},
547+
)
548+
533549
export function* list(input?: {
534550
directory?: string
535551
workspaceID?: string

packages/sdk/js/src/v2/gen/sdk.gen.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ import type {
122122
SessionInitErrors,
123123
SessionInitResponses,
124124
SessionListResponses,
125+
SessionMessageCountErrors,
126+
SessionMessageCountResponses,
125127
SessionMessageErrors,
126128
SessionMessageResponses,
127129
SessionMessagesErrors,
@@ -1844,6 +1846,38 @@ export class Session2 extends HeyApiClient {
18441846
})
18451847
}
18461848

1849+
/**
1850+
* Get message count
1851+
*
1852+
* Get the total number of messages in a session.
1853+
*/
1854+
public messageCount<ThrowOnError extends boolean = false>(
1855+
parameters: {
1856+
sessionID: string
1857+
directory?: string
1858+
workspace?: string
1859+
},
1860+
options?: Options<never, ThrowOnError>,
1861+
) {
1862+
const params = buildClientParams(
1863+
[parameters],
1864+
[
1865+
{
1866+
args: [
1867+
{ in: "path", key: "sessionID" },
1868+
{ in: "query", key: "directory" },
1869+
{ in: "query", key: "workspace" },
1870+
],
1871+
},
1872+
],
1873+
)
1874+
return (options?.client ?? this.client).get<SessionMessageCountResponses, SessionMessageCountErrors, ThrowOnError>({
1875+
url: "/session/{sessionID}/message/count",
1876+
...options,
1877+
...params,
1878+
})
1879+
}
1880+
18471881
/**
18481882
* Delete message
18491883
*

packages/sdk/js/src/v2/gen/types.gen.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3311,6 +3311,45 @@ export type SessionPromptResponses = {
33113311

33123312
export type SessionPromptResponse = SessionPromptResponses[keyof SessionPromptResponses]
33133313

3314+
export type SessionMessageCountData = {
3315+
body?: never
3316+
path: {
3317+
/**
3318+
* Session ID
3319+
*/
3320+
sessionID: string
3321+
}
3322+
query?: {
3323+
directory?: string
3324+
workspace?: string
3325+
}
3326+
url: "/session/{sessionID}/message/count"
3327+
}
3328+
3329+
export type SessionMessageCountErrors = {
3330+
/**
3331+
* Bad request
3332+
*/
3333+
400: BadRequestError
3334+
/**
3335+
* Not found
3336+
*/
3337+
404: NotFoundError
3338+
}
3339+
3340+
export type SessionMessageCountError = SessionMessageCountErrors[keyof SessionMessageCountErrors]
3341+
3342+
export type SessionMessageCountResponses = {
3343+
/**
3344+
* Message count
3345+
*/
3346+
200: {
3347+
count: number
3348+
}
3349+
}
3350+
3351+
export type SessionMessageCountResponse = SessionMessageCountResponses[keyof SessionMessageCountResponses]
3352+
33143353
export type SessionDeleteMessageData = {
33153354
body?: never
33163355
path: {

0 commit comments

Comments
 (0)