


























@@ -149,7 +149,6 @@ import {
149149import { reactivateCompletedSubagentSession } from "../session-subagent-reactivation.js";
150150import {
151151canonicalizeSpawnedByForAgent,
152-loadGatewaySessionRow,
153152loadSessionEntry,
154153migrateAndPruneGatewaySessionStoreKey,
155154resolveGatewaySessionStoreTarget,
@@ -166,6 +165,7 @@ import {
166165waitForTerminalGatewayDedupe,
167166} from "./agent-wait-dedupe.js";
168167import { normalizeRpcAttachmentsToChatAttachments } from "./attachment-normalize.js";
168+import { emitSessionsChanged } from "./session-change-event.js";
169169import type {
170170GatewayRequestContext,
171171GatewayRequestHandlerOptions,
@@ -571,92 +571,6 @@ function requestGroupMatchesTrusted(params: {
571571return Boolean(params.trustedGroupId && requestGroupId === params.trustedGroupId);
572572}
573573574-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<
661575TaskStatus,
662576"succeeded" | "failed" | "timed_out" | "cancelled"
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。