Skip to content

Commit b2f621b

Browse files
authored
refactor(session): inline init route orchestration (#21754)
1 parent 7202b3a commit b2f621b

2 files changed

Lines changed: 18 additions & 35 deletions

File tree

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

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { SessionSummary } from "@/session/summary"
1414
import { Todo } from "../../session/todo"
1515
import { Agent } from "../../agent/agent"
1616
import { Snapshot } from "@/snapshot"
17+
import { Command } from "../../command"
1718
import { Log } from "../../util/log"
1819
import { Permission } from "@/permission"
1920
import { PermissionID } from "@/permission/schema"
@@ -292,6 +293,7 @@ export const SessionRoutes = lazy(() =>
292293
return c.json(session)
293294
},
294295
)
296+
// TODO(v2): remove this dedicated route and rely on the normal `/init` command flow.
295297
.post(
296298
"/:sessionID/init",
297299
describeRoute({
@@ -317,11 +319,24 @@ export const SessionRoutes = lazy(() =>
317319
sessionID: SessionID.zod,
318320
}),
319321
),
320-
validator("json", Session.initialize.schema.omit({ sessionID: true })),
322+
validator(
323+
"json",
324+
z.object({
325+
modelID: ModelID.zod,
326+
providerID: ProviderID.zod,
327+
messageID: MessageID.zod,
328+
}),
329+
),
321330
async (c) => {
322331
const sessionID = c.req.valid("param").sessionID
323332
const body = c.req.valid("json")
324-
await Session.initialize({ ...body, sessionID })
333+
await SessionPrompt.command({
334+
sessionID,
335+
messageID: body.messageID,
336+
model: body.providerID + "/" + body.modelID,
337+
command: Command.Default.INIT,
338+
arguments: "",
339+
})
325340
return c.json(true)
326341
},
327342
)

packages/opencode/src/session/index.ts

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,13 @@ import { updateSchema } from "../util/update-schema"
2020
import { MessageV2 } from "./message-v2"
2121
import { Instance } from "../project/instance"
2222
import { InstanceState } from "@/effect/instance-state"
23-
import { SessionPrompt } from "./prompt"
2423
import { fn } from "@/util/fn"
25-
import { Command } from "../command"
2624
import { Snapshot } from "@/snapshot"
2725
import { ProjectID } from "../project/schema"
2826
import { WorkspaceID } from "../control-plane/schema"
2927
import { SessionID, MessageID, PartID } from "./schema"
3028

3129
import type { Provider } from "@/provider/provider"
32-
import { ModelID, ProviderID } from "@/provider/schema"
3330
import { Permission } from "@/permission"
3431
import { Global } from "@/global"
3532
import type { LanguageModelV2Usage } from "@ai-sdk/provider"
@@ -358,12 +355,6 @@ export namespace Session {
358355
field: string
359356
delta: string
360357
}) => Effect.Effect<void>
361-
readonly initialize: (input: {
362-
sessionID: SessionID
363-
modelID: ModelID
364-
providerID: ProviderID
365-
messageID: MessageID
366-
}) => Effect.Effect<void>
367358
}
368359

369360
export class Service extends ServiceMap.Service<Service, Interface>()("@opencode/Session") {}
@@ -616,7 +607,7 @@ export namespace Session {
616607

617608
const diff = Effect.fn("Session.diff")(function* (sessionID: SessionID) {
618609
return yield* Effect.tryPromise(() => Storage.read<Snapshot.FileDiff[]>(["session_diff", sessionID])).pipe(
619-
Effect.orElseSucceed(() => [] as Snapshot.FileDiff[]),
610+
Effect.orElseSucceed((): Snapshot.FileDiff[] => []),
620611
)
621612
})
622613

@@ -665,23 +656,6 @@ export namespace Session {
665656
yield* bus.publish(MessageV2.Event.PartDelta, input)
666657
})
667658

668-
const initialize = Effect.fn("Session.initialize")(function* (input: {
669-
sessionID: SessionID
670-
modelID: ModelID
671-
providerID: ProviderID
672-
messageID: MessageID
673-
}) {
674-
yield* Effect.promise(() =>
675-
SessionPrompt.command({
676-
sessionID: input.sessionID,
677-
messageID: input.messageID,
678-
model: input.providerID + "/" + input.modelID,
679-
command: Command.Default.INIT,
680-
arguments: "",
681-
}),
682-
)
683-
})
684-
685659
return Service.of({
686660
create,
687661
fork,
@@ -705,7 +679,6 @@ export namespace Session {
705679
updatePart,
706680
getPart,
707681
updatePartDelta,
708-
initialize,
709682
})
710683
}),
711684
)
@@ -895,9 +868,4 @@ export namespace Session {
895868
}),
896869
(input) => runPromise((svc) => svc.updatePartDelta(input)),
897870
)
898-
899-
export const initialize = fn(
900-
z.object({ sessionID: SessionID.zod, modelID: ModelID.zod, providerID: ProviderID.zod, messageID: MessageID.zod }),
901-
(input) => runPromise((svc) => svc.initialize(input)),
902-
)
903871
}

0 commit comments

Comments
 (0)