mirror of
https://github.com/Kilo-Org/kilocode.git
synced 2026-09-17 17:43:04 +08:00
32 lines
1.4 KiB
TypeScript
32 lines
1.4 KiB
TypeScript
import { Effect } from "effect"
|
|
import { HttpApiBuilder } from "effect/unstable/httpapi"
|
|
import * as SandboxPolicy from "@/kilocode/sandbox/policy"
|
|
import * as SandboxState from "@/kilocode/sandbox/state"
|
|
import { Session } from "@/session/session"
|
|
import type { SessionID } from "@/session/schema"
|
|
import { InstanceHttpApi } from "@/server/routes/instance/httpapi/api"
|
|
import * as SessionError from "@/server/routes/instance/httpapi/handlers/session-errors"
|
|
|
|
export const sandboxHandlers = HttpApiBuilder.group(InstanceHttpApi, "sandbox", (handlers) =>
|
|
Effect.gen(function* () {
|
|
const session = yield* Session.Service
|
|
const exists = (sessionID: SessionID) => SessionError.mapStorageNotFound(session.get(sessionID))
|
|
return handlers
|
|
.handle("support", () => SandboxPolicy.configuredSupport())
|
|
.handle("status", (ctx: { params: { sessionID: SessionID } }) =>
|
|
exists(ctx.params.sessionID).pipe(Effect.andThen(SandboxPolicy.status(ctx.params.sessionID))),
|
|
)
|
|
.handle("toggle", (ctx: { params: { sessionID: SessionID } }) =>
|
|
SandboxPolicy.toggleGuarded(ctx.params.sessionID, exists(ctx.params.sessionID), (value) =>
|
|
Effect.gen(function* () {
|
|
const info = yield* exists(ctx.params.sessionID)
|
|
yield* session.setMetadata({
|
|
sessionID: info.id,
|
|
metadata: SandboxState.merge(info.metadata, value),
|
|
})
|
|
}),
|
|
),
|
|
)
|
|
}),
|
|
)
|