Skip to content

Commit 5571c78

Browse files
committed
refactor(gateway): reuse shared session change broadcaster
1 parent b9d254f commit 5571c78

1 file changed

Lines changed: 1 addition & 87 deletions

File tree

src/gateway/server-methods/agent.ts

Lines changed: 1 addition & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,6 @@ import {
149149
import { reactivateCompletedSubagentSession } from "../session-subagent-reactivation.js";
150150
import {
151151
canonicalizeSpawnedByForAgent,
152-
loadGatewaySessionRow,
153152
loadSessionEntry,
154153
migrateAndPruneGatewaySessionStoreKey,
155154
resolveGatewaySessionStoreTarget,
@@ -166,6 +165,7 @@ import {
166165
waitForTerminalGatewayDedupe,
167166
} from "./agent-wait-dedupe.js";
168167
import { normalizeRpcAttachmentsToChatAttachments } from "./attachment-normalize.js";
168+
import { emitSessionsChanged } from "./session-change-event.js";
169169
import 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-
660574
type GatewayAgentTaskTerminalStatus = Extract<
661575
TaskStatus,
662576
"succeeded" | "failed" | "timed_out" | "cancelled"

0 commit comments

Comments
 (0)