@@ -71,6 +71,7 @@ const testLayer = Layer.effect(
7171 listSessions : Effect . die ( "not used by adapter tests" ) ,
7272 forkSession : ( ) => Effect . die ( "not used by adapter tests" ) ,
7373 deleteSession : ( ) => Effect . die ( "not used by adapter tests" ) ,
74+ updateSessionTitle : ( ) => Effect . die ( "not used by adapter tests" ) ,
7475 } ;
7576 const adapter = yield * makeHermesAdapter ( {
7677 instanceId : ProviderInstanceId . make ( "hermes-test" ) ,
@@ -268,6 +269,41 @@ it.layer(testLayer)("HermesAdapter", (it) => {
268269 } ) ,
269270 ) ;
270271
272+ it . effect ( "projects Hermes session title callbacks as thread metadata" , ( ) =>
273+ Effect . gen ( function * ( ) {
274+ const { adapter } = yield * HermesAdapterTestHarness ;
275+ const threadId = ThreadId . make ( "hermes-title-thread" ) ;
276+ const eventsFiber = yield * adapter . streamEvents . pipe (
277+ Stream . take ( 1 ) ,
278+ Stream . runCollect ,
279+ Effect . forkChild ,
280+ ) ;
281+ yield * Effect . yieldNow ;
282+
283+ yield * adapter . receiveCallback ( {
284+ protocolVersion : HERMES_BRIDGE_PROTOCOL_VERSION ,
285+ requestId : "title-callback-request" ,
286+ deliveryId : "title-callback-delivery" ,
287+ type : "session.title.updated" ,
288+ chatId : "t3agent" ,
289+ threadId,
290+ sessionId : "session-title-thread" ,
291+ title : "Renamed with /title" ,
292+ } ) ;
293+
294+ const events = Array . from ( yield * Fiber . join ( eventsFiber ) ) ;
295+ NodeAssert . deepEqual ( events [ 0 ] , {
296+ eventId : "hermes:title-callback-delivery:title" ,
297+ provider : "hermes" ,
298+ providerInstanceId : "hermes-test" ,
299+ threadId,
300+ createdAt : events [ 0 ] ?. createdAt ,
301+ type : "thread.metadata.updated" ,
302+ payload : { name : "Renamed with /title" } ,
303+ } ) ;
304+ } ) ,
305+ ) ;
306+
271307 it . effect ( "round-trips approval and clarification responses through the bridge" , ( ) =>
272308 Effect . gen ( function * ( ) {
273309 const { adapter, sent } = yield * HermesAdapterTestHarness ;
0 commit comments