11import { Log } from "../util/log"
22import { Bus } from "../bus"
3- import { describeRoute , generateSpecs , validator , resolver , openAPIRouteHandler } from "hono-openapi"
3+ import {
4+ describeRoute ,
5+ generateSpecs ,
6+ validator ,
7+ resolver ,
8+ openAPIRouteHandler ,
9+ } from "hono-openapi"
410import { Hono } from "hono"
511import { cors } from "hono/cors"
612import { streamSSE } from "hono/streaming"
@@ -35,6 +41,7 @@ import { InstanceBootstrap } from "../project/bootstrap"
3541import { MCP } from "../mcp"
3642import { Storage } from "../storage/storage"
3743import type { ContentfulStatusCode } from "hono/utils/http-status"
44+ import { Snapshot } from "@/snapshot"
3845
3946const ERRORS = {
4047 400 : {
@@ -66,7 +73,9 @@ const ERRORS = {
6673} as const
6774
6875function errors ( ...codes : number [ ] ) {
69- return Object . fromEntries ( codes . map ( ( code ) => [ code , ERRORS [ code as keyof typeof ERRORS ] ] ) )
76+ return Object . fromEntries (
77+ codes . map ( ( code ) => [ code , ERRORS [ code as keyof typeof ERRORS ] ] ) ,
78+ )
7079}
7180
7281export namespace Server {
@@ -90,7 +99,8 @@ export namespace Server {
9099 else status = 500
91100 return c . json ( err . toObject ( ) , { status } )
92101 }
93- const message = err instanceof Error && err . stack ? err . stack : err . toString ( )
102+ const message =
103+ err instanceof Error && err . stack ? err . stack : err . toString ( )
94104 return c . json ( new NamedError . Unknown ( { message } ) . toObject ( ) , {
95105 status : 500 ,
96106 } )
@@ -184,14 +194,17 @@ export namespace Server {
184194 . get (
185195 "/experimental/tool/ids" ,
186196 describeRoute ( {
187- description : "List all tool IDs (including built-in and dynamically registered)" ,
197+ description :
198+ "List all tool IDs (including built-in and dynamically registered)" ,
188199 operationId : "tool.ids" ,
189200 responses : {
190201 200 : {
191202 description : "Tool IDs" ,
192203 content : {
193204 "application/json" : {
194- schema : resolver ( z . array ( z . string ( ) ) . meta ( { ref : "ToolIDs" } ) ) ,
205+ schema : resolver (
206+ z . array ( z . string ( ) ) . meta ( { ref : "ToolIDs" } ) ,
207+ ) ,
195208 } ,
196209 } ,
197210 } ,
@@ -205,7 +218,8 @@ export namespace Server {
205218 . get (
206219 "/experimental/tool" ,
207220 describeRoute ( {
208- description : "List tools with JSON schema parameters for a provider/model" ,
221+ description :
222+ "List tools with JSON schema parameters for a provider/model" ,
209223 operationId : "tool.list" ,
210224 responses : {
211225 200 : {
@@ -246,7 +260,9 @@ export namespace Server {
246260 id : t . id ,
247261 description : t . description ,
248262 // Handle both Zod schemas and plain JSON schemas
249- parameters : ( t . parameters as any ) ?. _def ? zodToJsonSchema ( t . parameters as any ) : t . parameters ,
263+ parameters : ( t . parameters as any ) ?. _def
264+ ? zodToJsonSchema ( t . parameters as any )
265+ : t . parameters ,
250266 } ) ) ,
251267 )
252268 } ,
@@ -608,6 +624,44 @@ export namespace Server {
608624 return c . json ( session )
609625 } ,
610626 )
627+ . get (
628+ "/session/:id/diff" ,
629+ describeRoute ( {
630+ description : "Get the diff that resulted from this user message" ,
631+ operationId : "session.diff" ,
632+ responses : {
633+ 200 : {
634+ description : "Successfully retrieved diff" ,
635+ content : {
636+ "application/json" : {
637+ schema : resolver ( Snapshot . FileDiff . array ( ) ) ,
638+ } ,
639+ } ,
640+ } ,
641+ } ,
642+ } ) ,
643+ validator (
644+ "param" ,
645+ z . object ( {
646+ id : Session . diff . schema . shape . sessionID ,
647+ } ) ,
648+ ) ,
649+ validator (
650+ "query" ,
651+ z . object ( {
652+ messageID : Session . diff . schema . shape . messageID ,
653+ } ) ,
654+ ) ,
655+ async ( c ) => {
656+ const query = c . req . valid ( "query" )
657+ const params = c . req . valid ( "param" )
658+ const result = await Session . diff ( {
659+ sessionID : params . id ,
660+ messageID : query . messageID ,
661+ } )
662+ return c . json ( result )
663+ } ,
664+ )
611665 . delete (
612666 "/session/:id/share" ,
613667 describeRoute ( {
@@ -734,7 +788,10 @@ export namespace Server {
734788 ) ,
735789 async ( c ) => {
736790 const params = c . req . valid ( "param" )
737- const message = await Session . getMessage ( { sessionID : params . id , messageID : params . messageID } )
791+ const message = await Session . getMessage ( {
792+ sessionID : params . id ,
793+ messageID : params . messageID ,
794+ } )
738795 return c . json ( message )
739796 } ,
740797 )
@@ -868,7 +925,10 @@ export namespace Server {
868925 async ( c ) => {
869926 const id = c . req . valid ( "param" ) . id
870927 log . info ( "revert" , c . req . valid ( "json" ) )
871- const session = await SessionRevert . revert ( { sessionID : id , ...c . req . valid ( "json" ) } )
928+ const session = await SessionRevert . revert ( {
929+ sessionID : id ,
930+ ...c . req . valid ( "json" ) ,
931+ } )
872932 return c . json ( session )
873933 } ,
874934 )
@@ -929,7 +989,11 @@ export namespace Server {
929989 const params = c . req . valid ( "param" )
930990 const id = params . id
931991 const permissionID = params . permissionID
932- Permission . respond ( { sessionID : id , permissionID, response : c . req . valid ( "json" ) . response } )
992+ Permission . respond ( {
993+ sessionID : id ,
994+ permissionID,
995+ response : c . req . valid ( "json" ) . response ,
996+ } )
933997 return c . json ( true )
934998 } ,
935999 )
@@ -976,10 +1040,15 @@ export namespace Server {
9761040 } ,
9771041 } ) ,
9781042 async ( c ) => {
979- const providers = await Provider . list ( ) . then ( ( x ) => mapValues ( x , ( item ) => item . info ) )
1043+ const providers = await Provider . list ( ) . then ( ( x ) =>
1044+ mapValues ( x , ( item ) => item . info ) ,
1045+ )
9801046 return c . json ( {
9811047 providers : Object . values ( providers ) ,
982- default : mapValues ( providers , ( item ) => Provider . sort ( Object . values ( item . models ) ) [ 0 ] . id ) ,
1048+ default : mapValues (
1049+ providers ,
1050+ ( item ) => Provider . sort ( Object . values ( item . models ) ) [ 0 ] . id ,
1051+ ) ,
9831052 } )
9841053 } ,
9851054 )
@@ -1174,8 +1243,12 @@ export namespace Server {
11741243 validator (
11751244 "json" ,
11761245 z . object ( {
1177- service : z . string ( ) . meta ( { description : "Service name for the log entry" } ) ,
1178- level : z . enum ( [ "debug" , "info" , "error" , "warn" ] ) . meta ( { description : "Log level" } ) ,
1246+ service : z
1247+ . string ( )
1248+ . meta ( { description : "Service name for the log entry" } ) ,
1249+ level : z
1250+ . enum ( [ "debug" , "info" , "error" , "warn" ] )
1251+ . meta ( { description : "Log level" } ) ,
11791252 message : z . string ( ) . meta ( { description : "Log message" } ) ,
11801253 extra : z
11811254 . record ( z . string ( ) , z . any ( ) )
0 commit comments