@@ -149,7 +149,6 @@ import {
149149import { reactivateCompletedSubagentSession } from "../session-subagent-reactivation.js" ;
150150import {
151151 canonicalizeSpawnedByForAgent ,
152- loadGatewaySessionRow ,
153152 loadSessionEntry ,
154153 migrateAndPruneGatewaySessionStoreKey ,
155154 resolveGatewaySessionStoreTarget ,
@@ -166,6 +165,7 @@ import {
166165 waitForTerminalGatewayDedupe ,
167166} from "./agent-wait-dedupe.js" ;
168167import { normalizeRpcAttachmentsToChatAttachments } from "./attachment-normalize.js" ;
168+ import { emitSessionsChanged } from "./session-change-event.js" ;
169169import type {
170170 GatewayRequestContext ,
171171 GatewayRequestHandlerOptions ,
@@ -571,92 +571,6 @@ function requestGroupMatchesTrusted(params: {
571571 return Boolean ( params . trustedGroupId && requestGroupId === params . trustedGroupId ) ;
572572}
573573
574- function emitSessionsChanged (
575- context : Pick <
576- GatewayRequestHandlerOptions [ "context" ] ,
577- "broadcastToConnIds" | "getSessionEventSubscriberConnIds"
578- > ,
579- payload : { sessionKey ?: string ; agentId ?: string ; reason : string } ,
580- ) {
581- const connIds = context . getSessionEventSubscriberConnIds ( ) ;
582- if ( connIds . size === 0 ) {
583- return ;
584- }
585- const sessionRow = payload . sessionKey
586- ? loadGatewaySessionRow (
587- payload . sessionKey ,
588- payload . sessionKey === "global" && payload . agentId
589- ? { agentId : payload . agentId }
590- : undefined ,
591- )
592- : null ;
593- // Unscoped global updates must not leak one agent's goal into another agent's UI row.
594- const omitUnscopedGlobalGoal = payload . sessionKey === "global" && ! payload . agentId ;
595- context . broadcastToConnIds (
596- "sessions.changed" ,
597- {
598- ...payload ,
599- ts : Date . now ( ) ,
600- ...( sessionRow
601- ? {
602- updatedAt : sessionRow . updatedAt ?? undefined ,
603- sessionId : sessionRow . sessionId ,
604- kind : sessionRow . kind ,
605- channel : sessionRow . channel ,
606- subject : sessionRow . subject ,
607- groupChannel : sessionRow . groupChannel ,
608- space : sessionRow . space ,
609- chatType : sessionRow . chatType ,
610- origin : sessionRow . origin ,
611- spawnedBy : sessionRow . spawnedBy ,
612- spawnedWorkspaceDir : sessionRow . spawnedWorkspaceDir ,
613- spawnedCwd : sessionRow . spawnedCwd ,
614- forkedFromParent : sessionRow . forkedFromParent ,
615- spawnDepth : sessionRow . spawnDepth ,
616- subagentRole : sessionRow . subagentRole ,
617- subagentControlScope : sessionRow . subagentControlScope ,
618- label : sessionRow . label ,
619- displayName : sessionRow . displayName ,
620- deliveryContext : sessionRow . deliveryContext ,
621- parentSessionKey : sessionRow . parentSessionKey ,
622- childSessions : sessionRow . childSessions ,
623- thinkingLevel : sessionRow . thinkingLevel ,
624- fastMode : sessionRow . fastMode ,
625- verboseLevel : sessionRow . verboseLevel ,
626- traceLevel : sessionRow . traceLevel ,
627- reasoningLevel : sessionRow . reasoningLevel ,
628- elevatedLevel : sessionRow . elevatedLevel ,
629- sendPolicy : sessionRow . sendPolicy ,
630- systemSent : sessionRow . systemSent ,
631- abortedLastRun : sessionRow . abortedLastRun ,
632- inputTokens : sessionRow . inputTokens ,
633- outputTokens : sessionRow . outputTokens ,
634- lastChannel : sessionRow . lastChannel ,
635- lastTo : sessionRow . lastTo ,
636- lastAccountId : sessionRow . lastAccountId ,
637- lastThreadId : sessionRow . lastThreadId ,
638- totalTokens : sessionRow . totalTokens ,
639- totalTokensFresh : sessionRow . totalTokensFresh ,
640- ...( omitUnscopedGlobalGoal ? { } : { goal : sessionRow . goal ?? null } ) ,
641- contextTokens : sessionRow . contextTokens ,
642- estimatedCostUsd : sessionRow . estimatedCostUsd ,
643- responseUsage : sessionRow . responseUsage ,
644- modelProvider : sessionRow . modelProvider ,
645- model : sessionRow . model ,
646- status : sessionRow . status ,
647- startedAt : sessionRow . startedAt ,
648- endedAt : sessionRow . endedAt ,
649- runtimeMs : sessionRow . runtimeMs ,
650- compactionCheckpointCount : sessionRow . compactionCheckpointCount ,
651- latestCompactionCheckpoint : sessionRow . latestCompactionCheckpoint ,
652- }
653- : { } ) ,
654- } ,
655- connIds ,
656- { dropIfSlow : true } ,
657- ) ;
658- }
659-
660574type GatewayAgentTaskTerminalStatus = Extract <
661575 TaskStatus ,
662576 "succeeded" | "failed" | "timed_out" | "cancelled"
0 commit comments