refactor(session): inline init route orchestration (#21754)
This commit is contained in:
@@ -14,6 +14,7 @@ import { SessionSummary } from "@/session/summary"
|
|||||||
import { Todo } from "../../session/todo"
|
import { Todo } from "../../session/todo"
|
||||||
import { Agent } from "../../agent/agent"
|
import { Agent } from "../../agent/agent"
|
||||||
import { Snapshot } from "@/snapshot"
|
import { Snapshot } from "@/snapshot"
|
||||||
|
import { Command } from "../../command"
|
||||||
import { Log } from "../../util/log"
|
import { Log } from "../../util/log"
|
||||||
import { Permission } from "@/permission"
|
import { Permission } from "@/permission"
|
||||||
import { PermissionID } from "@/permission/schema"
|
import { PermissionID } from "@/permission/schema"
|
||||||
@@ -292,6 +293,7 @@ export const SessionRoutes = lazy(() =>
|
|||||||
return c.json(session)
|
return c.json(session)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
// TODO(v2): remove this dedicated route and rely on the normal `/init` command flow.
|
||||||
.post(
|
.post(
|
||||||
"/:sessionID/init",
|
"/:sessionID/init",
|
||||||
describeRoute({
|
describeRoute({
|
||||||
@@ -317,11 +319,24 @@ export const SessionRoutes = lazy(() =>
|
|||||||
sessionID: SessionID.zod,
|
sessionID: SessionID.zod,
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
validator("json", Session.initialize.schema.omit({ sessionID: true })),
|
validator(
|
||||||
|
"json",
|
||||||
|
z.object({
|
||||||
|
modelID: ModelID.zod,
|
||||||
|
providerID: ProviderID.zod,
|
||||||
|
messageID: MessageID.zod,
|
||||||
|
}),
|
||||||
|
),
|
||||||
async (c) => {
|
async (c) => {
|
||||||
const sessionID = c.req.valid("param").sessionID
|
const sessionID = c.req.valid("param").sessionID
|
||||||
const body = c.req.valid("json")
|
const body = c.req.valid("json")
|
||||||
await Session.initialize({ ...body, sessionID })
|
await SessionPrompt.command({
|
||||||
|
sessionID,
|
||||||
|
messageID: body.messageID,
|
||||||
|
model: body.providerID + "/" + body.modelID,
|
||||||
|
command: Command.Default.INIT,
|
||||||
|
arguments: "",
|
||||||
|
})
|
||||||
return c.json(true)
|
return c.json(true)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -20,16 +20,13 @@ import { updateSchema } from "../util/update-schema"
|
|||||||
import { MessageV2 } from "./message-v2"
|
import { MessageV2 } from "./message-v2"
|
||||||
import { Instance } from "../project/instance"
|
import { Instance } from "../project/instance"
|
||||||
import { InstanceState } from "@/effect/instance-state"
|
import { InstanceState } from "@/effect/instance-state"
|
||||||
import { SessionPrompt } from "./prompt"
|
|
||||||
import { fn } from "@/util/fn"
|
import { fn } from "@/util/fn"
|
||||||
import { Command } from "../command"
|
|
||||||
import { Snapshot } from "@/snapshot"
|
import { Snapshot } from "@/snapshot"
|
||||||
import { ProjectID } from "../project/schema"
|
import { ProjectID } from "../project/schema"
|
||||||
import { WorkspaceID } from "../control-plane/schema"
|
import { WorkspaceID } from "../control-plane/schema"
|
||||||
import { SessionID, MessageID, PartID } from "./schema"
|
import { SessionID, MessageID, PartID } from "./schema"
|
||||||
|
|
||||||
import type { Provider } from "@/provider/provider"
|
import type { Provider } from "@/provider/provider"
|
||||||
import { ModelID, ProviderID } from "@/provider/schema"
|
|
||||||
import { Permission } from "@/permission"
|
import { Permission } from "@/permission"
|
||||||
import { Global } from "@/global"
|
import { Global } from "@/global"
|
||||||
import type { LanguageModelV2Usage } from "@ai-sdk/provider"
|
import type { LanguageModelV2Usage } from "@ai-sdk/provider"
|
||||||
@@ -358,12 +355,6 @@ export namespace Session {
|
|||||||
field: string
|
field: string
|
||||||
delta: string
|
delta: string
|
||||||
}) => Effect.Effect<void>
|
}) => Effect.Effect<void>
|
||||||
readonly initialize: (input: {
|
|
||||||
sessionID: SessionID
|
|
||||||
modelID: ModelID
|
|
||||||
providerID: ProviderID
|
|
||||||
messageID: MessageID
|
|
||||||
}) => Effect.Effect<void>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Service extends ServiceMap.Service<Service, Interface>()("@opencode/Session") {}
|
export class Service extends ServiceMap.Service<Service, Interface>()("@opencode/Session") {}
|
||||||
@@ -616,7 +607,7 @@ export namespace Session {
|
|||||||
|
|
||||||
const diff = Effect.fn("Session.diff")(function* (sessionID: SessionID) {
|
const diff = Effect.fn("Session.diff")(function* (sessionID: SessionID) {
|
||||||
return yield* Effect.tryPromise(() => Storage.read<Snapshot.FileDiff[]>(["session_diff", sessionID])).pipe(
|
return yield* Effect.tryPromise(() => Storage.read<Snapshot.FileDiff[]>(["session_diff", sessionID])).pipe(
|
||||||
Effect.orElseSucceed(() => [] as Snapshot.FileDiff[]),
|
Effect.orElseSucceed((): Snapshot.FileDiff[] => []),
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -665,23 +656,6 @@ export namespace Session {
|
|||||||
yield* bus.publish(MessageV2.Event.PartDelta, input)
|
yield* bus.publish(MessageV2.Event.PartDelta, input)
|
||||||
})
|
})
|
||||||
|
|
||||||
const initialize = Effect.fn("Session.initialize")(function* (input: {
|
|
||||||
sessionID: SessionID
|
|
||||||
modelID: ModelID
|
|
||||||
providerID: ProviderID
|
|
||||||
messageID: MessageID
|
|
||||||
}) {
|
|
||||||
yield* Effect.promise(() =>
|
|
||||||
SessionPrompt.command({
|
|
||||||
sessionID: input.sessionID,
|
|
||||||
messageID: input.messageID,
|
|
||||||
model: input.providerID + "/" + input.modelID,
|
|
||||||
command: Command.Default.INIT,
|
|
||||||
arguments: "",
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
return Service.of({
|
return Service.of({
|
||||||
create,
|
create,
|
||||||
fork,
|
fork,
|
||||||
@@ -705,7 +679,6 @@ export namespace Session {
|
|||||||
updatePart,
|
updatePart,
|
||||||
getPart,
|
getPart,
|
||||||
updatePartDelta,
|
updatePartDelta,
|
||||||
initialize,
|
|
||||||
})
|
})
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
@@ -895,9 +868,4 @@ export namespace Session {
|
|||||||
}),
|
}),
|
||||||
(input) => runPromise((svc) => svc.updatePartDelta(input)),
|
(input) => runPromise((svc) => svc.updatePartDelta(input)),
|
||||||
)
|
)
|
||||||
|
|
||||||
export const initialize = fn(
|
|
||||||
z.object({ sessionID: SessionID.zod, modelID: ModelID.zod, providerID: ProviderID.zod, messageID: MessageID.zod }),
|
|
||||||
(input) => runPromise((svc) => svc.initialize(input)),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user