@@ -19,7 +19,7 @@ import { Todo } from "@/session/todo"
1919import { MessageID , PartID , SessionID } from "@/session/schema"
2020import { NotFoundError } from "@/storage/storage"
2121import { NamedError } from "@opencode-ai/core/util/error"
22- import { Cause , Effect , Schema } from "effect"
22+ import { Cause , Effect , Schema , Scope } from "effect"
2323import * as Stream from "effect/Stream"
2424import { HttpServerRequest , HttpServerResponse } from "effect/unstable/http"
2525import { HttpApiBuilder , HttpApiError , HttpApiSchema } from "effect/unstable/httpapi"
@@ -61,6 +61,7 @@ export const sessionHandlers = HttpApiBuilder.group(InstanceHttpApi, "session",
6161 const todoSvc = yield * Todo . Service
6262 const summary = yield * SessionSummary . Service
6363 const bus = yield * Bus . Service
64+ const scope = yield * Scope . Scope
6465
6566 const list = Effect . fn ( "SessionHttpApi.list" ) ( function * ( ctx : { query : typeof ListQuery . Type } ) {
6667 const instance = yield * InstanceState . context
@@ -281,24 +282,17 @@ export const sessionHandlers = HttpApiBuilder.group(InstanceHttpApi, "session",
281282 params : { sessionID : SessionID }
282283 payload : typeof PromptPayload . Type
283284 } ) {
284- const instance = yield * InstanceState . context
285- const workspace = yield * InstanceState . workspaceID
286- yield * Effect . sync ( ( ) =>
287- Effect . runFork (
288- promptSvc . prompt ( { ...ctx . payload , sessionID : ctx . params . sessionID } ) . pipe (
289- Effect . provideService ( InstanceRef , instance ) ,
290- Effect . provideService ( WorkspaceRef , workspace ) ,
291- Effect . catchCause ( ( cause ) =>
292- Effect . gen ( function * ( ) {
293- yield * Effect . logError ( "prompt_async failed" , { sessionID : ctx . params . sessionID , cause } )
294- yield * bus . publish ( Session . Event . Error , {
295- sessionID : ctx . params . sessionID ,
296- error : new NamedError . Unknown ( { message : Cause . pretty ( cause ) } ) . toObject ( ) ,
297- } )
298- } ) ,
299- ) ,
300- ) ,
285+ yield * promptSvc . prompt ( { ...ctx . payload , sessionID : ctx . params . sessionID } ) . pipe (
286+ Effect . catchCause ( ( cause ) =>
287+ Effect . gen ( function * ( ) {
288+ yield * Effect . logError ( "prompt_async failed" , { sessionID : ctx . params . sessionID , cause } )
289+ yield * bus . publish ( Session . Event . Error , {
290+ sessionID : ctx . params . sessionID ,
291+ error : new NamedError . Unknown ( { message : Cause . pretty ( cause ) } ) . toObject ( ) ,
292+ } )
293+ } ) ,
301294 ) ,
295+ Effect . forkIn ( scope , { startImmediately : true } ) ,
302296 )
303297 return HttpApiSchema . NoContent . make ( )
304298 } )
0 commit comments