Skip to content

Commit 6c8d9f8

Browse files
Apply PR #16953: Brand SessionID through Drizzle and Zod schemas
2 parents 978352d + 77feb08 commit 6c8d9f8

44 files changed

Lines changed: 226 additions & 158 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

packages/opencode/src/cli/cmd/export.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { Argv } from "yargs"
22
import { Session } from "../../session"
3+
import { SessionID } from "../../session/schema"
34
import { cmd } from "./cmd"
45
import { bootstrap } from "../bootstrap"
56
import { UI } from "../ui"
@@ -17,7 +18,7 @@ export const ExportCommand = cmd({
1718
},
1819
handler: async (args) => {
1920
await bootstrap(process.cwd(), async () => {
20-
let sessionID = args.sessionID
21+
let sessionID = args.sessionID ? SessionID.make(args.sessionID) : undefined
2122
process.stderr.write(`Exporting session: ${sessionID ?? "latest"}\n`)
2223

2324
if (!sessionID) {
@@ -58,7 +59,7 @@ export const ExportCommand = cmd({
5859
throw new UI.CancelledError()
5960
}
6061

61-
sessionID = selectedSession as string
62+
sessionID = selectedSession
6263

6364
prompts.outro("Exporting session...", {
6465
output: process.stderr,
@@ -67,7 +68,7 @@ export const ExportCommand = cmd({
6768

6869
try {
6970
const sessionInfo = await Session.get(sessionID!)
70-
const messages = await Session.messages({ sessionID: sessionID! })
71+
const messages = await Session.messages({ sessionID: sessionInfo.id })
7172

7273
const exportData = {
7374
info: sessionInfo,

packages/opencode/src/cli/cmd/github.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { ModelsDev } from "../../provider/models"
2222
import { Instance } from "@/project/instance"
2323
import { bootstrap } from "../bootstrap"
2424
import { Session } from "../../session"
25+
import type { SessionID } from "../../session/schema"
2526
import { Identifier } from "../../id/id"
2627
import { Provider } from "../../provider/provider"
2728
import { Bus } from "../../bus"
@@ -481,7 +482,7 @@ export const GithubRunCommand = cmd({
481482
let octoRest: Octokit
482483
let octoGraph: typeof graphql
483484
let gitConfig: string
484-
let session: { id: string; title: string; version: string }
485+
let session: { id: SessionID; title: string; version: string }
485486
let shareId: string | undefined
486487
let exitCode = 0
487488
type PromptFiles = Awaited<ReturnType<typeof getUserPrompt>>["promptFiles"]

packages/opencode/src/cli/cmd/import.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { Argv } from "yargs"
22
import type { Session as SDKSession, Message, Part } from "@opencode-ai/sdk/v2"
33
import { Session } from "../../session"
4+
import { SessionID } from "../../session/schema"
45
import { cmd } from "./cmd"
56
import { bootstrap } from "../bootstrap"
67
import { Database } from "../../storage/db"
@@ -152,7 +153,12 @@ export const ImportCommand = cmd({
152153
return
153154
}
154155

155-
const row = Session.toRow({ ...exportData.info, projectID: Instance.project.id })
156+
const row = Session.toRow({
157+
...exportData.info,
158+
id: SessionID.make(exportData.info.id),
159+
parentID: exportData.info.parentID ? SessionID.make(exportData.info.parentID) : undefined,
160+
projectID: Instance.project.id,
161+
})
156162
Database.use((db) =>
157163
db
158164
.insert(SessionTable)
@@ -167,7 +173,7 @@ export const ImportCommand = cmd({
167173
.insert(MessageTable)
168174
.values({
169175
id: msg.info.id,
170-
session_id: exportData.info.id,
176+
session_id: row.id,
171177
time_created: msg.info.time?.created ?? Date.now(),
172178
data: msg.info,
173179
})
@@ -182,7 +188,7 @@ export const ImportCommand = cmd({
182188
.values({
183189
id: part.id,
184190
message_id: msg.info.id,
185-
session_id: exportData.info.id,
191+
session_id: row.id,
186192
data: part,
187193
})
188194
.onConflictDoNothing()

packages/opencode/src/cli/cmd/session.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { Argv } from "yargs"
22
import { cmd } from "./cmd"
33
import { Session } from "../../session"
4+
import { SessionID } from "../../session/schema"
45
import { bootstrap } from "../bootstrap"
56
import { UI } from "../ui"
67
import { Locale } from "../../util/locale"
@@ -57,13 +58,14 @@ export const SessionDeleteCommand = cmd({
5758
},
5859
handler: async (args) => {
5960
await bootstrap(process.cwd(), async () => {
61+
const sessionID = SessionID.make(args.sessionID)
6062
try {
61-
await Session.get(args.sessionID)
63+
await Session.get(sessionID)
6264
} catch {
6365
UI.error(`Session not found: ${args.sessionID}`)
6466
process.exit(1)
6567
}
66-
await Session.remove(args.sessionID)
68+
await Session.remove(sessionID)
6769
UI.println(UI.Style.TEXT_SUCCESS_BOLD + `Session ${args.sessionID} deleted` + UI.Style.TEXT_NORMAL)
6870
})
6971
},

packages/opencode/src/cli/cmd/tui/event.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { BusEvent } from "@/bus/bus-event"
22
import { Bus } from "@/bus"
3+
import { SessionID } from "@/session/schema"
34
import z from "zod"
45

56
export const TuiEvent = {
@@ -42,7 +43,7 @@ export const TuiEvent = {
4243
SessionSelect: BusEvent.define(
4344
"tui.session.select",
4445
z.object({
45-
sessionID: z.string().regex(/^ses/).describe("Session ID to navigate to"),
46+
sessionID: SessionID.zod.describe("Session ID to navigate to"),
4647
}),
4748
),
4849
}

packages/opencode/src/command/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { BusEvent } from "@/bus/bus-event"
2+
import { SessionID } from "@/session/schema"
23
import z from "zod"
34
import { Config } from "../config/config"
45
import { Instance } from "../project/instance"
@@ -14,7 +15,7 @@ export namespace Command {
1415
"command.executed",
1516
z.object({
1617
name: z.string(),
17-
sessionID: Identifier.schema("session"),
18+
sessionID: SessionID.zod,
1819
arguments: z.string(),
1920
messageID: Identifier.schema("message"),
2021
}),

packages/opencode/src/permission/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { BusEvent } from "@/bus/bus-event"
22
import { Bus } from "@/bus"
3+
import { SessionID } from "@/session/schema"
34
import z from "zod"
45
import { Log } from "../util/log"
56
import { Identifier } from "../id/id"
@@ -24,7 +25,7 @@ export namespace Permission {
2425
id: z.string(),
2526
type: z.string(),
2627
pattern: z.union([z.string(), z.array(z.string())]).optional(),
27-
sessionID: z.string(),
28+
sessionID: SessionID.zod,
2829
messageID: z.string(),
2930
callID: z.string().optional(),
3031
message: z.string(),
@@ -43,7 +44,7 @@ export namespace Permission {
4344
Replied: BusEvent.define(
4445
"permission.replied",
4546
z.object({
46-
sessionID: z.string(),
47+
sessionID: SessionID.zod,
4748
permissionID: z.string(),
4849
response: z.string(),
4950
}),

packages/opencode/src/permission/next.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Bus } from "@/bus"
22
import { BusEvent } from "@/bus/bus-event"
33
import { Config } from "@/config/config"
44
import { Identifier } from "@/id/id"
5+
import { SessionID } from "@/session/schema"
56
import { Instance } from "@/project/instance"
67
import { Database, eq } from "@/storage/db"
78
import { PermissionTable } from "@/session/session.sql"
@@ -69,7 +70,7 @@ export namespace PermissionNext {
6970
export const Request = z
7071
.object({
7172
id: Identifier.schema("permission"),
72-
sessionID: Identifier.schema("session"),
73+
sessionID: SessionID.zod,
7374
permission: z.string(),
7475
patterns: z.string().array(),
7576
metadata: z.record(z.string(), z.any()),
@@ -100,7 +101,7 @@ export namespace PermissionNext {
100101
Replied: BusEvent.define(
101102
"permission.replied",
102103
z.object({
103-
sessionID: z.string(),
104+
sessionID: SessionID.zod,
104105
requestID: z.string(),
105106
reply: Reply,
106107
}),

packages/opencode/src/question/index.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Bus } from "@/bus"
22
import { BusEvent } from "@/bus/bus-event"
33
import { Identifier } from "@/id/id"
4+
import { SessionID } from "@/session/schema"
45
import { Instance } from "@/project/instance"
56
import { Log } from "@/util/log"
67
import z from "zod"
@@ -34,7 +35,7 @@ export namespace Question {
3435
export const Request = z
3536
.object({
3637
id: Identifier.schema("question"),
37-
sessionID: Identifier.schema("session"),
38+
sessionID: SessionID.zod,
3839
questions: z.array(Info).describe("Questions to ask"),
3940
tool: z
4041
.object({
@@ -65,15 +66,15 @@ export namespace Question {
6566
Replied: BusEvent.define(
6667
"question.replied",
6768
z.object({
68-
sessionID: z.string(),
69+
sessionID: SessionID.zod,
6970
requestID: z.string(),
7071
answers: z.array(Answer),
7172
}),
7273
),
7374
Rejected: BusEvent.define(
7475
"question.rejected",
7576
z.object({
76-
sessionID: z.string(),
77+
sessionID: SessionID.zod,
7778
requestID: z.string(),
7879
}),
7980
),
@@ -95,7 +96,7 @@ export namespace Question {
9596
})
9697

9798
export async function ask(input: {
98-
sessionID: string
99+
sessionID: SessionID
99100
questions: Info[]
100101
tool?: { messageID: string; callID: string }
101102
}): Promise<Answer[]> {

0 commit comments

Comments
 (0)