11import { SessionID } from "@/session/schema"
22import { SessionMessage } from "@/v2/session-message"
3+ import { Prompt } from "@/v2/session-prompt"
34import { SessionV2 } from "@/v2/session"
45import { Effect , Layer , Schema } from "effect"
5- import { HttpApi , HttpApiBuilder , HttpApiEndpoint , HttpApiGroup , OpenApi } from "effect/unstable/httpapi"
6+ import { HttpApi , HttpApiBuilder , HttpApiEndpoint , HttpApiGroup , HttpApiSchema , OpenApi } from "effect/unstable/httpapi"
67import { Authorization } from "./auth"
78
89export const V2Api = HttpApi . make ( "v2" )
@@ -20,6 +21,46 @@ export const V2Api = HttpApi.make("v2")
2021 } ) ,
2122 ) ,
2223 )
24+ . add (
25+ HttpApiEndpoint . post ( "prompt" , "/api/session/:sessionID/prompt" , {
26+ params : { sessionID : SessionID } ,
27+ payload : Schema . Struct ( {
28+ prompt : Prompt ,
29+ delivery : SessionV2 . Delivery . pipe ( Schema . optional ) ,
30+ } ) ,
31+ success : SessionMessage . Message ,
32+ } ) . annotateMerge (
33+ OpenApi . annotations ( {
34+ identifier : "v2.session.prompt" ,
35+ summary : "Send v2 message" ,
36+ description : "Create a v2 session message and queue it for the agent loop." ,
37+ } ) ,
38+ ) ,
39+ )
40+ . add (
41+ HttpApiEndpoint . post ( "compact" , "/api/session/:sessionID/compact" , {
42+ params : { sessionID : SessionID } ,
43+ success : HttpApiSchema . NoContent ,
44+ } ) . annotateMerge (
45+ OpenApi . annotations ( {
46+ identifier : "v2.session.compact" ,
47+ summary : "Compact v2 session" ,
48+ description : "Compact a v2 session conversation." ,
49+ } ) ,
50+ ) ,
51+ )
52+ . add (
53+ HttpApiEndpoint . post ( "wait" , "/api/session/:sessionID/wait" , {
54+ params : { sessionID : SessionID } ,
55+ success : HttpApiSchema . NoContent ,
56+ } ) . annotateMerge (
57+ OpenApi . annotations ( {
58+ identifier : "v2.session.wait" ,
59+ summary : "Wait for v2 session" ,
60+ description : "Wait for a v2 session agent loop to become idle." ,
61+ } ) ,
62+ ) ,
63+ )
2364 . annotateMerge (
2465 OpenApi . annotations ( {
2566 title : "v2" ,
@@ -39,12 +80,37 @@ export const V2Api = HttpApi.make("v2")
3980export const v2Handlers = HttpApiBuilder . group ( V2Api , "v2" , ( handlers ) =>
4081 Effect . gen ( function * ( ) {
4182 const session = yield * SessionV2 . Service
42- return handlers . handle (
43- "messages" ,
44- Effect . fn ( function * ( ctx ) {
45- return yield * session . messages ( ctx . params . sessionID )
46- } ) ,
47- )
83+ return handlers
84+ . handle (
85+ "messages" ,
86+ Effect . fn ( function * ( ctx ) {
87+ return yield * session . messages ( ctx . params . sessionID )
88+ } ) ,
89+ )
90+ . handle (
91+ "prompt" ,
92+ Effect . fn ( function * ( ctx ) {
93+ return yield * session . prompt ( {
94+ sessionID : ctx . params . sessionID ,
95+ prompt : ctx . payload . prompt ,
96+ delivery : ctx . payload . delivery ?? SessionV2 . DefaultDelivery ,
97+ } )
98+ } ) ,
99+ )
100+ . handle (
101+ "compact" ,
102+ Effect . fn ( function * ( ctx ) {
103+ yield * session . compact ( ctx . params . sessionID )
104+ return HttpApiSchema . NoContent . make ( )
105+ } ) ,
106+ )
107+ . handle (
108+ "wait" ,
109+ Effect . fn ( function * ( ctx ) {
110+ yield * session . wait ( ctx . params . sessionID )
111+ return HttpApiSchema . NoContent . make ( )
112+ } ) ,
113+ )
48114 } ) ,
49115) . pipe ( Layer . provide ( SessionV2 . defaultLayer ) )
50116
0 commit comments