@tutti-os/agent-activity-core 0.0.29 → 0.0.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +42 -2
- package/dist/index.js +82 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ interface AgentActivitySession {
|
|
|
10
10
|
cwd: string;
|
|
11
11
|
title: string;
|
|
12
12
|
status: AgentActivitySessionStatus | (string & {});
|
|
13
|
+
turnLifecycle?: AgentActivityTurnLifecycle | null;
|
|
14
|
+
submitAvailability?: AgentActivitySubmitAvailability | null;
|
|
13
15
|
visible?: boolean;
|
|
14
16
|
resumable?: boolean;
|
|
15
17
|
currentPhase?: string | null;
|
|
@@ -39,6 +41,7 @@ interface AgentActivityMessage {
|
|
|
39
41
|
role: string;
|
|
40
42
|
kind: string;
|
|
41
43
|
status?: string | null;
|
|
44
|
+
semantics?: AgentActivityMessageSemantics;
|
|
42
45
|
payload: Record<string, unknown>;
|
|
43
46
|
occurredAtUnixMs?: number;
|
|
44
47
|
startedAtUnixMs?: number;
|
|
@@ -165,13 +168,18 @@ interface AgentActivityStatePatch {
|
|
|
165
168
|
providerSessionId?: string;
|
|
166
169
|
runtimeContext?: Record<string, unknown>;
|
|
167
170
|
startedAtUnixMs?: number;
|
|
171
|
+
submitAvailability?: AgentActivitySubmitAvailability;
|
|
168
172
|
endedAtUnixMs?: number;
|
|
169
173
|
title?: string;
|
|
170
174
|
turn?: {
|
|
175
|
+
activeTurnId?: string | null;
|
|
176
|
+
completedCommand?: AgentActivityCompletedCommand | null;
|
|
171
177
|
completedAtUnixMs?: number;
|
|
172
178
|
fileChanges?: unknown;
|
|
173
179
|
outcome?: string;
|
|
174
180
|
phase?: string;
|
|
181
|
+
settling?: boolean;
|
|
182
|
+
submitAvailability?: AgentActivitySubmitAvailability;
|
|
175
183
|
startedAtUnixMs?: number;
|
|
176
184
|
turnId: string;
|
|
177
185
|
};
|
|
@@ -190,6 +198,7 @@ interface AgentActivityCreateSessionInput {
|
|
|
190
198
|
initialContent?: AgentPromptContentBlock[] | null;
|
|
191
199
|
/** 仅展示用的首轮文本(bundle 折叠成一个 chip);initialContent 仍带展开后的文件。 */
|
|
192
200
|
initialDisplayPrompt?: string | null;
|
|
201
|
+
metadata?: Record<string, unknown>;
|
|
193
202
|
model?: string | null;
|
|
194
203
|
planMode?: boolean | null;
|
|
195
204
|
permissionModeId?: string | null;
|
|
@@ -206,8 +215,38 @@ interface AgentActivitySendInput {
|
|
|
206
215
|
content: AgentPromptContentBlock[];
|
|
207
216
|
/** 仅展示用文本(bundle 折叠成一个 chip);content 仍带展开后的文件。 */
|
|
208
217
|
displayPrompt?: string | null;
|
|
218
|
+
metadata?: Record<string, unknown>;
|
|
209
219
|
signal?: AbortSignal;
|
|
210
220
|
}
|
|
221
|
+
type AgentActivityTurnPhase = "submitted" | "running" | "waiting" | "settled";
|
|
222
|
+
type AgentActivityTurnOutcome = "completed" | "failed" | "canceled" | (string & {});
|
|
223
|
+
interface AgentActivityCompletedCommand {
|
|
224
|
+
kind: "compact" | "review" | "undo" | "goal" | (string & {});
|
|
225
|
+
status: "completed" | "failed" | "canceled" | (string & {});
|
|
226
|
+
}
|
|
227
|
+
interface AgentActivityTurnLifecycle {
|
|
228
|
+
activeTurnId: string | null;
|
|
229
|
+
phase: AgentActivityTurnPhase | (string & {});
|
|
230
|
+
settling?: boolean;
|
|
231
|
+
outcome?: AgentActivityTurnOutcome | null;
|
|
232
|
+
completedCommand?: AgentActivityCompletedCommand | null;
|
|
233
|
+
}
|
|
234
|
+
interface AgentActivitySubmitAvailability {
|
|
235
|
+
state: "available" | "blocked" | "queueable" | (string & {});
|
|
236
|
+
reason?: string;
|
|
237
|
+
}
|
|
238
|
+
interface AgentActivityMessageSemantics {
|
|
239
|
+
userVisibleAssistantResponse?: boolean;
|
|
240
|
+
turnSettling?: boolean;
|
|
241
|
+
noticeCommand?: "compact" | "review" | "undo" | "goal" | (string & {});
|
|
242
|
+
noticeCommandStatus?: "running" | "completed" | "failed" | "canceled" | (string & {});
|
|
243
|
+
}
|
|
244
|
+
interface AgentActivitySendInputResult {
|
|
245
|
+
session: AgentActivitySession;
|
|
246
|
+
turnId: string;
|
|
247
|
+
turnLifecycle: AgentActivityTurnLifecycle;
|
|
248
|
+
submitAvailability: AgentActivitySubmitAvailability;
|
|
249
|
+
}
|
|
211
250
|
interface AgentPromptContentBlock {
|
|
212
251
|
type: "text" | "image" | "file" | "skill" | "mention";
|
|
213
252
|
text?: string;
|
|
@@ -283,7 +322,7 @@ interface AgentActivityAdapter {
|
|
|
283
322
|
onError?(error: unknown): void;
|
|
284
323
|
}): Promise<() => void>;
|
|
285
324
|
createSession(input: AgentActivityCreateSessionInput): Promise<AgentActivitySession>;
|
|
286
|
-
sendInput(input: AgentActivitySendInput): Promise<
|
|
325
|
+
sendInput(input: AgentActivitySendInput): Promise<AgentActivitySendInputResult>;
|
|
287
326
|
cancelSession(input: AgentActivityCancelSessionInput): Promise<AgentActivityCancelSessionResult>;
|
|
288
327
|
submitInteractive(input: AgentActivitySubmitInteractiveInput): Promise<unknown>;
|
|
289
328
|
deleteSession(input: AgentActivityDeleteSessionInput): Promise<AgentActivityDeleteSessionResult>;
|
|
@@ -343,6 +382,7 @@ declare function selectSessionDisplayStatuses(snapshot: AgentActivitySnapshot):
|
|
|
343
382
|
declare function normalizeAgentActivityDisplayStatus(status: string | null | undefined, options?: {
|
|
344
383
|
currentPhase?: string | null;
|
|
345
384
|
needsAttention?: boolean;
|
|
385
|
+
turnLifecyclePhase?: string | null;
|
|
346
386
|
}): AgentActivityDisplayStatus;
|
|
347
387
|
declare function selectNeedsAttentionItems(snapshot: AgentActivitySnapshot): AgentActivityNeedsAttentionItem[];
|
|
348
388
|
|
|
@@ -357,4 +397,4 @@ interface AgentActivityUsageInput {
|
|
|
357
397
|
}
|
|
358
398
|
declare function resolveAgentActivityUsage(input: AgentActivityUsageInput): AgentActivityUsage | null;
|
|
359
399
|
|
|
360
|
-
export { AGENT_CAPABILITY_KEYS, type AgentActivityAdapter, type AgentActivityCancelReason, type AgentActivityCancelSessionInput, type AgentActivityCancelSessionResult, type AgentActivityCapabilityInput, type AgentActivityComposerCapabilityOption, type AgentActivityComposerOptions, type AgentActivityComposerPermissionConfig, type AgentActivityComposerPermissionModeOption, type AgentActivityComposerSettingOption, type AgentActivityComposerSettings, type AgentActivityComposerSkillOption, type AgentActivityController, type AgentActivityCreateSessionInput, type AgentActivityDeleteSessionInput, type AgentActivityDeleteSessionResult, type AgentActivityDisplayStatus, type AgentActivityLoadComposerOptionsInput, type AgentActivityMessage, type AgentActivityMessageOrder, type AgentActivityMessagePage, type AgentActivityNeedsAttentionItem, type AgentActivityNeedsAttentionKind, type AgentActivityPresence, type AgentActivitySendInput, type AgentActivitySession, type AgentActivitySessionEventEnvelope, type AgentActivitySessionList, type AgentActivitySessionStatus, type AgentActivitySnapshot, type AgentActivitySnapshotListener, type AgentActivityStatePatch, type AgentActivitySubmitInteractiveInput, type AgentActivityUpdatedApplyResult, type AgentActivityUpdatedEvent, type AgentActivityUsage, type AgentActivityUsageInput, type AgentCapabilityKey, type AgentPromptContentBlock, type CreateAgentActivityControllerInput, cloneAgentActivityMessage, cloneAgentActivitySnapshot, compareAgentActivityMessages, createAgentActivityController, createEmptyAgentActivitySnapshot, latestAgentActivityMessageVersion, mergeAgentActivityMessages, normalizeAgentActivityDisplayStatus, resolveAgentActivityCapability, resolveAgentActivityUsage, selectNeedsAttentionCount, selectNeedsAttentionItems, selectSessionDisplayStatuses };
|
|
400
|
+
export { AGENT_CAPABILITY_KEYS, type AgentActivityAdapter, type AgentActivityCancelReason, type AgentActivityCancelSessionInput, type AgentActivityCancelSessionResult, type AgentActivityCapabilityInput, type AgentActivityCompletedCommand, type AgentActivityComposerCapabilityOption, type AgentActivityComposerOptions, type AgentActivityComposerPermissionConfig, type AgentActivityComposerPermissionModeOption, type AgentActivityComposerSettingOption, type AgentActivityComposerSettings, type AgentActivityComposerSkillOption, type AgentActivityController, type AgentActivityCreateSessionInput, type AgentActivityDeleteSessionInput, type AgentActivityDeleteSessionResult, type AgentActivityDisplayStatus, type AgentActivityLoadComposerOptionsInput, type AgentActivityMessage, type AgentActivityMessageOrder, type AgentActivityMessagePage, type AgentActivityMessageSemantics, type AgentActivityNeedsAttentionItem, type AgentActivityNeedsAttentionKind, type AgentActivityPresence, type AgentActivitySendInput, type AgentActivitySendInputResult, type AgentActivitySession, type AgentActivitySessionEventEnvelope, type AgentActivitySessionList, type AgentActivitySessionStatus, type AgentActivitySnapshot, type AgentActivitySnapshotListener, type AgentActivityStatePatch, type AgentActivitySubmitAvailability, type AgentActivitySubmitInteractiveInput, type AgentActivityTurnLifecycle, type AgentActivityUpdatedApplyResult, type AgentActivityUpdatedEvent, type AgentActivityUsage, type AgentActivityUsageInput, type AgentCapabilityKey, type AgentPromptContentBlock, type CreateAgentActivityControllerInput, cloneAgentActivityMessage, cloneAgentActivitySnapshot, compareAgentActivityMessages, createAgentActivityController, createEmptyAgentActivitySnapshot, latestAgentActivityMessageVersion, mergeAgentActivityMessages, normalizeAgentActivityDisplayStatus, resolveAgentActivityCapability, resolveAgentActivityUsage, selectNeedsAttentionCount, selectNeedsAttentionItems, selectSessionDisplayStatuses };
|
package/dist/index.js
CHANGED
|
@@ -62,11 +62,12 @@ function areAgentActivityMessageArraysEqual(left, right) {
|
|
|
62
62
|
return true;
|
|
63
63
|
}
|
|
64
64
|
function areAgentActivityMessagesEqual(left, right) {
|
|
65
|
-
return left.workspaceId === right.workspaceId && left.agentSessionId === right.agentSessionId && left.messageId === right.messageId && Object.is(left.id, right.id) && left.version === right.version && Object.is(left.turnId, right.turnId) && left.role === right.role && left.kind === right.kind && Object.is(left.status, right.status) && Object.is(left.occurredAtUnixMs, right.occurredAtUnixMs) && Object.is(left.startedAtUnixMs, right.startedAtUnixMs) && Object.is(left.completedAtUnixMs, right.completedAtUnixMs) && areJsonLikeValuesEqual(left.payload, right.payload);
|
|
65
|
+
return left.workspaceId === right.workspaceId && left.agentSessionId === right.agentSessionId && left.messageId === right.messageId && Object.is(left.id, right.id) && left.version === right.version && Object.is(left.turnId, right.turnId) && left.role === right.role && left.kind === right.kind && Object.is(left.status, right.status) && areJsonLikeValuesEqual(left.semantics, right.semantics) && Object.is(left.occurredAtUnixMs, right.occurredAtUnixMs) && Object.is(left.startedAtUnixMs, right.startedAtUnixMs) && Object.is(left.completedAtUnixMs, right.completedAtUnixMs) && areJsonLikeValuesEqual(left.payload, right.payload);
|
|
66
66
|
}
|
|
67
67
|
function cloneAgentActivityMessage(message) {
|
|
68
68
|
return {
|
|
69
69
|
...message,
|
|
70
|
+
semantics: message.semantics ? { ...message.semantics } : void 0,
|
|
70
71
|
payload: { ...message.payload }
|
|
71
72
|
};
|
|
72
73
|
}
|
|
@@ -74,6 +75,10 @@ function mergeAgentActivityMessage(existing, incoming) {
|
|
|
74
75
|
return {
|
|
75
76
|
...existing,
|
|
76
77
|
...incoming,
|
|
78
|
+
semantics: incoming.semantics ? {
|
|
79
|
+
...existing.semantics,
|
|
80
|
+
...incoming.semantics
|
|
81
|
+
} : existing.semantics,
|
|
77
82
|
payload: {
|
|
78
83
|
...existing.payload,
|
|
79
84
|
...incoming.payload
|
|
@@ -495,6 +500,10 @@ function cloneAgentActivityComposerOptions(options) {
|
|
|
495
500
|
function cloneAgentActivitySession(session) {
|
|
496
501
|
return {
|
|
497
502
|
...session,
|
|
503
|
+
turnLifecycle: session.turnLifecycle ? cloneJSONValue(
|
|
504
|
+
session.turnLifecycle
|
|
505
|
+
) : session.turnLifecycle,
|
|
506
|
+
submitAvailability: session.submitAvailability ? { ...session.submitAvailability } : session.submitAvailability,
|
|
498
507
|
runtimeContext: cloneJSONRecord(session.runtimeContext)
|
|
499
508
|
};
|
|
500
509
|
}
|
|
@@ -931,6 +940,7 @@ function messageFromEvent(event, data) {
|
|
|
931
940
|
role,
|
|
932
941
|
kind,
|
|
933
942
|
status: nullableStringValue(source.status),
|
|
943
|
+
semantics: recordValue2(source.semantics) ? cloneJSONValue(source.semantics) : void 0,
|
|
934
944
|
payload: recordValue2(source.payload) ?? {},
|
|
935
945
|
occurredAtUnixMs: numberValue(source.occurredAtUnixMs),
|
|
936
946
|
startedAtUnixMs: numberValue(source.startedAtUnixMs),
|
|
@@ -952,6 +962,12 @@ function sessionFromEvent(workspaceId, event, data) {
|
|
|
952
962
|
cwd: stringValue(source.cwd),
|
|
953
963
|
title: stringValue(source.title),
|
|
954
964
|
status: stringValue(source.status) || "unknown",
|
|
965
|
+
turnLifecycle: recordValue2(source.turnLifecycle) ? cloneJSONValue(
|
|
966
|
+
source.turnLifecycle
|
|
967
|
+
) : void 0,
|
|
968
|
+
submitAvailability: recordValue2(source.submitAvailability) ? cloneJSONValue(
|
|
969
|
+
source.submitAvailability
|
|
970
|
+
) : void 0,
|
|
955
971
|
resumable: booleanValue(source.resumable),
|
|
956
972
|
currentPhase: nullableStringValue(source.currentPhase),
|
|
957
973
|
lastError: nullableStringValue(source.lastError),
|
|
@@ -1002,6 +1018,9 @@ function agentActivityMessageFromInlineMessage(input) {
|
|
|
1002
1018
|
role: stringValue(input.message.role),
|
|
1003
1019
|
kind: stringValue(input.message.kind),
|
|
1004
1020
|
status: nullableStringValue(input.message.status),
|
|
1021
|
+
semantics: recordValue2(input.message.semantics) ? cloneJSONValue(
|
|
1022
|
+
input.message.semantics
|
|
1023
|
+
) : void 0,
|
|
1005
1024
|
payload: recordValue2(input.message.payload) ?? {},
|
|
1006
1025
|
occurredAtUnixMs: numberValue(input.message.occurredAtUnixMs),
|
|
1007
1026
|
startedAtUnixMs: numberValue(input.message.startedAtUnixMs),
|
|
@@ -1015,6 +1034,7 @@ function inlineStatePatchFromActivityUpdateData(data) {
|
|
|
1015
1034
|
return null;
|
|
1016
1035
|
}
|
|
1017
1036
|
const turn = recordValue2(source.turn);
|
|
1037
|
+
const submitAvailability = recordValue2(source.submitAvailability);
|
|
1018
1038
|
return {
|
|
1019
1039
|
agentSessionId,
|
|
1020
1040
|
currentPhase: stringValue(source.currentPhase) || void 0,
|
|
@@ -1033,13 +1053,28 @@ function inlineStatePatchFromActivityUpdateData(data) {
|
|
|
1033
1053
|
endedAtUnixMs: numberValue(source.endedAtUnixMs),
|
|
1034
1054
|
title: stringValue(source.title) || void 0,
|
|
1035
1055
|
turn: turn ? {
|
|
1056
|
+
...turn.activeTurnId !== void 0 ? { activeTurnId: nullableStringValue(turn.activeTurnId) } : {},
|
|
1057
|
+
...recordValue2(turn.completedCommand) ? {
|
|
1058
|
+
completedCommand: cloneJSONValue(
|
|
1059
|
+
turn.completedCommand
|
|
1060
|
+
)
|
|
1061
|
+
} : {},
|
|
1036
1062
|
completedAtUnixMs: numberValue(turn.completedAtUnixMs),
|
|
1037
1063
|
fileChanges: turn.fileChanges,
|
|
1038
1064
|
outcome: stringValue(turn.outcome) || void 0,
|
|
1039
1065
|
phase: stringValue(turn.phase) || void 0,
|
|
1066
|
+
...turn.settling !== void 0 ? { settling: booleanValue(turn.settling) } : {},
|
|
1067
|
+
...recordValue2(turn.submitAvailability) ? {
|
|
1068
|
+
submitAvailability: cloneJSONValue(
|
|
1069
|
+
turn.submitAvailability
|
|
1070
|
+
)
|
|
1071
|
+
} : {},
|
|
1040
1072
|
startedAtUnixMs: numberValue(turn.startedAtUnixMs),
|
|
1041
1073
|
turnId: stringValue(turn.turnId)
|
|
1042
1074
|
} : void 0,
|
|
1075
|
+
submitAvailability: submitAvailability ? cloneJSONValue(
|
|
1076
|
+
submitAvailability
|
|
1077
|
+
) : void 0,
|
|
1043
1078
|
workspaceId: stringValue(source.workspaceId) || void 0
|
|
1044
1079
|
};
|
|
1045
1080
|
}
|
|
@@ -1059,6 +1094,10 @@ function agentActivitySessionFromInlineStatePatch(input) {
|
|
|
1059
1094
|
cwd: input.patch.cwd ?? input.existingSession.cwd,
|
|
1060
1095
|
title: input.patch.title ?? input.existingSession.title,
|
|
1061
1096
|
status: input.patch.lifecycleStatus ?? input.existingSession.status,
|
|
1097
|
+
turnLifecycle: turnLifecycleFromStatePatch(input.patch) ?? cloneJSONValue(
|
|
1098
|
+
input.existingSession.turnLifecycle
|
|
1099
|
+
),
|
|
1100
|
+
submitAvailability: input.patch.submitAvailability ?? input.patch.turn?.submitAvailability ?? input.existingSession.submitAvailability,
|
|
1062
1101
|
currentPhase: input.patch.currentPhase ?? input.patch.turn?.phase ?? input.existingSession.currentPhase,
|
|
1063
1102
|
lastError: input.patch.lastError ?? input.existingSession.lastError,
|
|
1064
1103
|
runtimeContext: cloneJSONRecord(input.patch.runtimeContext) ?? cloneJSONRecord(input.existingSession.runtimeContext),
|
|
@@ -1072,7 +1111,35 @@ function cloneAgentActivityStatePatch(statePatch) {
|
|
|
1072
1111
|
return {
|
|
1073
1112
|
...statePatch,
|
|
1074
1113
|
runtimeContext: cloneJSONRecord(statePatch.runtimeContext),
|
|
1075
|
-
|
|
1114
|
+
...statePatch.submitAvailability ? { submitAvailability: { ...statePatch.submitAvailability } } : {},
|
|
1115
|
+
turn: statePatch.turn ? {
|
|
1116
|
+
...statePatch.turn,
|
|
1117
|
+
...statePatch.turn.completedCommand ? {
|
|
1118
|
+
completedCommand: {
|
|
1119
|
+
...statePatch.turn.completedCommand
|
|
1120
|
+
}
|
|
1121
|
+
} : {},
|
|
1122
|
+
...statePatch.turn.submitAvailability ? {
|
|
1123
|
+
submitAvailability: {
|
|
1124
|
+
...statePatch.turn.submitAvailability
|
|
1125
|
+
}
|
|
1126
|
+
} : {}
|
|
1127
|
+
} : void 0
|
|
1128
|
+
};
|
|
1129
|
+
}
|
|
1130
|
+
function turnLifecycleFromStatePatch(patch) {
|
|
1131
|
+
const turn = patch.turn;
|
|
1132
|
+
if (!turn?.phase) {
|
|
1133
|
+
return void 0;
|
|
1134
|
+
}
|
|
1135
|
+
const phase = turn.phase;
|
|
1136
|
+
const activeTurnId = turn.activeTurnId !== void 0 ? turn.activeTurnId : phase === "settled" ? null : turn.turnId || null;
|
|
1137
|
+
return {
|
|
1138
|
+
activeTurnId,
|
|
1139
|
+
phase,
|
|
1140
|
+
settling: turn.settling,
|
|
1141
|
+
outcome: turn.outcome ?? null,
|
|
1142
|
+
completedCommand: turn.completedCommand ?? null
|
|
1076
1143
|
};
|
|
1077
1144
|
}
|
|
1078
1145
|
function recordValue2(value) {
|
|
@@ -1112,7 +1179,8 @@ function selectSessionDisplayStatuses(snapshot) {
|
|
|
1112
1179
|
session.agentSessionId,
|
|
1113
1180
|
normalizeAgentActivityDisplayStatus(session.status, {
|
|
1114
1181
|
currentPhase: session.currentPhase,
|
|
1115
|
-
needsAttention: needsAttentionSessionIds.has(session.agentSessionId)
|
|
1182
|
+
needsAttention: needsAttentionSessionIds.has(session.agentSessionId),
|
|
1183
|
+
turnLifecyclePhase: session.turnLifecycle?.phase
|
|
1116
1184
|
})
|
|
1117
1185
|
])
|
|
1118
1186
|
);
|
|
@@ -1121,6 +1189,17 @@ function normalizeAgentActivityDisplayStatus(status, options = {}) {
|
|
|
1121
1189
|
if (options.needsAttention) {
|
|
1122
1190
|
return "waiting";
|
|
1123
1191
|
}
|
|
1192
|
+
switch (normalizeStatus(options.turnLifecyclePhase)) {
|
|
1193
|
+
case "settled":
|
|
1194
|
+
break;
|
|
1195
|
+
case "waiting":
|
|
1196
|
+
return "waiting";
|
|
1197
|
+
case "running":
|
|
1198
|
+
case "submitted":
|
|
1199
|
+
return "working";
|
|
1200
|
+
default:
|
|
1201
|
+
break;
|
|
1202
|
+
}
|
|
1124
1203
|
const normalizedStatus = normalizeStatus(status);
|
|
1125
1204
|
const normalizedCurrentPhase = normalizeStatus(options.currentPhase);
|
|
1126
1205
|
switch (normalizedStatus) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/capabilities.ts","../src/merge.ts","../src/controller.ts","../src/selectors.ts","../src/usage.ts"],"sourcesContent":["import type { AgentActivityComposerOptions } from \"./types.ts\";\n\n/** Mirror of packages/agent/daemon/runtime/capabilities.go. */\nexport const AGENT_CAPABILITY_KEYS = [\n \"imageInput\",\n \"skills\",\n \"compact\",\n \"tokenUsage\",\n \"rateLimits\",\n \"planMode\",\n \"interrupt\",\n \"browserUse\",\n \"computerUse\"\n] as const;\n\nexport type AgentCapabilityKey = (typeof AGENT_CAPABILITY_KEYS)[number];\n\nexport interface AgentActivityCapabilityInput {\n composerOptions?: AgentActivityComposerOptions | null;\n sessionRuntimeContext?: Record<string, unknown> | null;\n}\n\nexport function resolveAgentActivityCapability(\n key: AgentCapabilityKey,\n input: AgentActivityCapabilityInput\n): boolean | null {\n return (\n capabilityFromRuntimeContext(key, input.sessionRuntimeContext) ??\n capabilityFromRuntimeContext(key, input.composerOptions?.runtimeContext)\n );\n}\n\nfunction capabilityFromRuntimeContext(\n key: string,\n runtimeContext: Record<string, unknown> | null | undefined\n): boolean | null {\n const list = runtimeContext?.capabilities;\n if (!Array.isArray(list)) {\n return null;\n }\n return list.some((entry) => typeof entry === \"string\" && entry === key);\n}\n","import type { AgentActivityMessage } from \"./types.ts\";\n\nexport function mergeAgentActivityMessages<\n T extends AgentActivityMessage = AgentActivityMessage\n>(currentMessages: readonly T[], incomingMessages: readonly T[]): T[] {\n if (incomingMessages.length === 0) {\n return [...currentMessages];\n }\n\n const byMessageId = new Map<string, T>();\n for (const message of currentMessages) {\n byMessageId.set(message.messageId, cloneAgentActivityMessage(message));\n }\n\n for (const incoming of incomingMessages) {\n const existing = byMessageId.get(incoming.messageId);\n if (!existing || shouldReplaceAgentActivityMessage(existing, incoming)) {\n byMessageId.set(\n incoming.messageId,\n existing\n ? mergeAgentActivityMessage(existing, incoming)\n : cloneAgentActivityMessage(incoming)\n );\n }\n }\n\n return [...byMessageId.values()].sort(compareAgentActivityMessages);\n}\n\nexport function compareAgentActivityMessages(\n left: AgentActivityMessage,\n right: AgentActivityMessage\n): number {\n return (\n left.version - right.version ||\n (left.id ?? 0) - (right.id ?? 0) ||\n left.messageId.localeCompare(right.messageId)\n );\n}\n\nexport function latestAgentActivityMessageVersion(\n messages: readonly AgentActivityMessage[]\n): number {\n return messages.reduce(\n (latestVersion, message) => Math.max(latestVersion, message.version),\n 0\n );\n}\n\nexport function areAgentActivityMessageArraysEqual(\n left: readonly AgentActivityMessage[],\n right: readonly AgentActivityMessage[]\n): boolean {\n if (left.length !== right.length) {\n return false;\n }\n for (let index = 0; index < left.length; index += 1) {\n if (!areAgentActivityMessagesEqual(left[index]!, right[index]!)) {\n return false;\n }\n }\n return true;\n}\n\nexport function areAgentActivityMessagesEqual(\n left: AgentActivityMessage,\n right: AgentActivityMessage\n): boolean {\n return (\n left.workspaceId === right.workspaceId &&\n left.agentSessionId === right.agentSessionId &&\n left.messageId === right.messageId &&\n Object.is(left.id, right.id) &&\n left.version === right.version &&\n Object.is(left.turnId, right.turnId) &&\n left.role === right.role &&\n left.kind === right.kind &&\n Object.is(left.status, right.status) &&\n Object.is(left.occurredAtUnixMs, right.occurredAtUnixMs) &&\n Object.is(left.startedAtUnixMs, right.startedAtUnixMs) &&\n Object.is(left.completedAtUnixMs, right.completedAtUnixMs) &&\n areJsonLikeValuesEqual(left.payload, right.payload)\n );\n}\n\nexport function cloneAgentActivityMessage<\n T extends AgentActivityMessage = AgentActivityMessage\n>(message: T): T {\n return {\n ...message,\n payload: { ...message.payload }\n };\n}\n\nfunction mergeAgentActivityMessage<T extends AgentActivityMessage>(\n existing: T,\n incoming: T\n): T {\n return {\n ...existing,\n ...incoming,\n payload: {\n ...existing.payload,\n ...incoming.payload\n }\n };\n}\n\nfunction shouldReplaceAgentActivityMessage(\n existing: AgentActivityMessage,\n incoming: AgentActivityMessage\n): boolean {\n if (incoming.version !== existing.version) {\n return incoming.version > existing.version;\n }\n return (incoming.id ?? 0) >= (existing.id ?? 0);\n}\n\nfunction areJsonLikeValuesEqual(left: unknown, right: unknown): boolean {\n if (Object.is(left, right)) {\n return true;\n }\n if (Array.isArray(left) || Array.isArray(right)) {\n if (!Array.isArray(left) || !Array.isArray(right)) {\n return false;\n }\n if (left.length !== right.length) {\n return false;\n }\n for (let index = 0; index < left.length; index += 1) {\n if (!areJsonLikeValuesEqual(left[index], right[index])) {\n return false;\n }\n }\n return true;\n }\n const leftRecord = recordValue(left);\n const rightRecord = recordValue(right);\n if (!leftRecord || !rightRecord) {\n return false;\n }\n const keys = new Set([\n ...Object.keys(leftRecord),\n ...Object.keys(rightRecord)\n ]);\n for (const key of keys) {\n if (!areJsonLikeValuesEqual(leftRecord[key], rightRecord[key])) {\n return false;\n }\n }\n return true;\n}\n\nfunction recordValue(value: unknown): Record<string, unknown> | null {\n return typeof value === \"object\" && value !== null\n ? (value as Record<string, unknown>)\n : null;\n}\n","import type { AgentActivityAdapter } from \"./adapter.ts\";\nimport {\n areAgentActivityMessageArraysEqual,\n cloneAgentActivityMessage,\n latestAgentActivityMessageVersion,\n mergeAgentActivityMessages\n} from \"./merge.ts\";\nimport type {\n AgentActivityComposerOptions,\n AgentActivityLoadComposerOptionsInput,\n AgentActivityMessage,\n AgentActivityMessageOrder,\n AgentActivityMessagePage,\n AgentActivityStatePatch,\n AgentActivitySession,\n AgentActivitySessionEventEnvelope,\n AgentActivitySnapshot,\n AgentActivityUpdatedApplyResult,\n AgentActivityUpdatedEvent\n} from \"./types.ts\";\n\nexport interface CreateAgentActivityControllerInput {\n adapter: AgentActivityAdapter;\n autoRetainSessionEvents?: boolean;\n workspaceId: string;\n}\n\nexport interface AgentActivityController {\n getSnapshot(): AgentActivitySnapshot;\n subscribe(listener: AgentActivitySnapshotListener): () => void;\n load(signal?: AbortSignal): Promise<AgentActivitySnapshot>;\n loadComposerOptions(\n input: Omit<AgentActivityLoadComposerOptionsInput, \"workspaceId\"> & {\n force?: boolean;\n }\n ): Promise<AgentActivityComposerOptions>;\n listSessionMessages(input: {\n agentSessionId: string;\n afterVersion?: number;\n beforeVersion?: number;\n limit?: number;\n order?: AgentActivityMessageOrder;\n signal?: AbortSignal;\n }): Promise<AgentActivityMessagePage>;\n retainSessionEvents(input: {\n agentSessionId: string;\n afterVersion?: number;\n onError?: (error: unknown) => void;\n }): () => void;\n removeSession(agentSessionId: string): void;\n upsertSession(session: AgentActivitySession): void;\n applyActivityUpdatedEvent(\n event: AgentActivityUpdatedEvent\n ): AgentActivityUpdatedApplyResult;\n applySessionEvent(event: AgentActivitySessionEventEnvelope): void;\n}\n\nexport type AgentActivitySnapshotListener = (\n snapshot: AgentActivitySnapshot\n) => void;\n\ninterface RetainedSessionStream {\n abortController: AbortController;\n refCount: number;\n unsubscribe: (() => void) | null;\n}\n\nexport function createAgentActivityController({\n adapter,\n autoRetainSessionEvents = true,\n workspaceId\n}: CreateAgentActivityControllerInput): AgentActivityController {\n const listeners = new Set<AgentActivitySnapshotListener>();\n const activeMessageSyncs = new Map<string, Promise<void>>();\n const activeComposerOptionsLoads = new Map<\n string,\n Promise<AgentActivityComposerOptions>\n >();\n const composerOptionsLoadVersions = new Map<string, number>();\n const composerOptionsCwdByProvider = new Map<string, string>();\n const activeComposerOptionsLoadCwds = new Map<string, string>();\n const normalizeComposerCwd = (cwd: string | null | undefined): string =>\n (cwd ?? \"\").trim();\n const autoRetainedStreamReleases = new Map<string, () => void>();\n const retainedStreams = new Map<string, RetainedSessionStream>();\n let snapshot: AgentActivitySnapshot =\n createEmptyAgentActivitySnapshot(workspaceId);\n\n const emit = (): void => {\n for (const listener of listeners) {\n listener(snapshot);\n }\n };\n\n const updateSnapshot = (\n updater: (current: AgentActivitySnapshot) => AgentActivitySnapshot\n ): AgentActivitySnapshot => {\n const nextSnapshot = updater(snapshot);\n if (nextSnapshot === snapshot) {\n return snapshot;\n }\n snapshot = cloneAgentActivitySnapshot(nextSnapshot);\n emit();\n return snapshot;\n };\n\n return {\n getSnapshot: () => snapshot,\n subscribe(listener) {\n listeners.add(listener);\n listener(snapshot);\n return () => {\n listeners.delete(listener);\n };\n },\n async load(signal) {\n const response = await adapter.listSessions({ workspaceId, signal });\n const nextSessions = response.sessions;\n const nextPresences = response.presences ?? [];\n const nextSnapshot = updateSnapshot((current) => {\n const sessionDataUnchanged =\n areShallowObjectArraysEqual(current.sessions, nextSessions) &&\n areShallowObjectArraysEqual(current.presences, nextPresences);\n const source = sessionDataUnchanged\n ? current\n : {\n ...current,\n presences: nextPresences,\n sessions: nextSessions\n };\n const canonical = canonicalizeSnapshotMessageBuckets(source);\n if (canonical !== source) {\n return canonical;\n }\n return sessionDataUnchanged ? current : source;\n });\n if (autoRetainSessionEvents) {\n reconcileAutoRetainedSessionStreams(nextSnapshot.sessions, signal);\n }\n return nextSnapshot;\n },\n async loadComposerOptions(input) {\n const provider = input.provider.trim();\n if (!provider) {\n throw new Error(\"Agent composer options provider is required.\");\n }\n const requestedCwd = normalizeComposerCwd(input.cwd);\n if (!input.force) {\n const cached = snapshot.composerOptionsByProvider?.[provider];\n if (\n cached &&\n composerOptionsCwdByProvider.get(provider) === requestedCwd\n ) {\n return cloneAgentActivityComposerOptions(cached);\n }\n }\n const existingLoad = activeComposerOptionsLoads.get(provider);\n if (\n existingLoad &&\n !input.force &&\n activeComposerOptionsLoadCwds.get(provider) === requestedCwd\n ) {\n return existingLoad.then(cloneAgentActivityComposerOptions);\n }\n const loadVersion = (composerOptionsLoadVersions.get(provider) ?? 0) + 1;\n composerOptionsLoadVersions.set(provider, loadVersion);\n const load = adapter\n .loadComposerOptions({\n workspaceId,\n provider,\n cwd: input.cwd,\n settings: input.settings,\n signal: input.signal\n })\n .then((options) => {\n const normalizedOptions = cloneAgentActivityComposerOptions({\n ...options,\n provider,\n loadedAtUnixMs: options.loadedAtUnixMs || Date.now()\n });\n if (composerOptionsLoadVersions.get(provider) !== loadVersion) {\n return cloneAgentActivityComposerOptions(normalizedOptions);\n }\n composerOptionsCwdByProvider.set(provider, requestedCwd);\n updateSnapshot((current) => {\n const currentOptions =\n current.composerOptionsByProvider?.[provider];\n if (\n currentOptions &&\n areComposerOptionsEqual(currentOptions, normalizedOptions)\n ) {\n return current;\n }\n return {\n ...current,\n composerOptionsByProvider: {\n ...current.composerOptionsByProvider,\n [provider]: normalizedOptions\n }\n };\n });\n return cloneAgentActivityComposerOptions(normalizedOptions);\n })\n .finally(() => {\n if (activeComposerOptionsLoads.get(provider) === load) {\n activeComposerOptionsLoads.delete(provider);\n activeComposerOptionsLoadCwds.delete(provider);\n }\n });\n activeComposerOptionsLoads.set(provider, load);\n activeComposerOptionsLoadCwds.set(provider, requestedCwd);\n return load.then(cloneAgentActivityComposerOptions);\n },\n async listSessionMessages({\n agentSessionId,\n afterVersion,\n beforeVersion,\n limit,\n order,\n signal\n }) {\n const response = await adapter.listSessionMessages({\n workspaceId,\n agentSessionId,\n afterVersion,\n beforeVersion,\n limit,\n order,\n signal\n });\n updateSnapshot((current) =>\n mergeSnapshotMessages(current, agentSessionId, response.messages)\n );\n return {\n ...response,\n messages: response.messages.map((message) => ({\n ...message,\n payload: { ...message.payload }\n }))\n };\n },\n retainSessionEvents: retainSessionEventsImpl,\n removeSession(agentSessionId) {\n updateSnapshot((current) =>\n removeSnapshotSession(current, agentSessionId)\n );\n },\n upsertSession(session) {\n if (session.workspaceId && session.workspaceId !== snapshot.workspaceId) {\n return;\n }\n updateSnapshot((current) => upsertSnapshotSession(current, session));\n },\n applyActivityUpdatedEvent(event) {\n const result = applyActivityUpdatedEvent(snapshot, event);\n if (result.snapshot !== snapshot) {\n snapshot = result.snapshot;\n emit();\n }\n return {\n applied: result.applied,\n messages: result.messages.map(cloneAgentActivityMessage),\n session: result.session\n ? cloneAgentActivitySession(result.session)\n : null,\n statePatch: result.statePatch\n ? cloneAgentActivityStatePatch(result.statePatch)\n : null\n };\n },\n applySessionEvent(event) {\n updateSnapshot((current) => applySessionEvent(current, event));\n }\n };\n\n function retainSessionEventsImpl({\n agentSessionId,\n afterVersion,\n onRetainFailed,\n onError\n }: {\n agentSessionId: string;\n afterVersion?: number;\n onRetainFailed?: () => void;\n onError?: (error: unknown) => void;\n }): () => void {\n const normalizedAgentSessionId = agentSessionId.trim();\n if (!normalizedAgentSessionId) {\n return () => {};\n }\n\n const existing = retainedStreams.get(normalizedAgentSessionId);\n if (existing) {\n existing.refCount += 1;\n return createRetainedStreamRelease(normalizedAgentSessionId);\n }\n\n const abortController = new AbortController();\n const stream: RetainedSessionStream = {\n abortController,\n refCount: 1,\n unsubscribe: null\n };\n retainedStreams.set(normalizedAgentSessionId, stream);\n\n const cachedMessages =\n snapshot.sessionMessagesById[normalizedAgentSessionId] ?? [];\n const streamAfterVersion =\n afterVersion ?? latestAgentActivityMessageVersion(cachedMessages);\n\n void adapter\n .subscribeSessionEvents({\n workspaceId,\n agentSessionId: normalizedAgentSessionId,\n afterVersion: streamAfterVersion,\n signal: abortController.signal,\n onEvent(event) {\n if (!abortController.signal.aborted) {\n updateSnapshot((current) => applySessionEvent(current, event));\n }\n },\n onError\n })\n .then((unsubscribe) => {\n const retained = retainedStreams.get(normalizedAgentSessionId);\n if (!retained || retained.abortController.signal.aborted) {\n unsubscribe();\n return;\n }\n retained.unsubscribe = unsubscribe;\n })\n .catch((error: unknown) => {\n if (!abortController.signal.aborted) {\n onError?.(error);\n }\n if (retainedStreams.get(normalizedAgentSessionId) === stream) {\n retainedStreams.delete(normalizedAgentSessionId);\n }\n onRetainFailed?.();\n abortController.abort();\n stream.unsubscribe?.();\n });\n\n return createRetainedStreamRelease(normalizedAgentSessionId);\n }\n\n function reconcileAutoRetainedSessionStreams(\n sessions: readonly AgentActivitySession[],\n signal: AbortSignal | undefined\n ): void {\n const activeSessionIds = new Set(\n sessions\n .filter(shouldAutoRetainSessionEvents)\n .map((session) => session.agentSessionId.trim())\n .filter(Boolean)\n );\n\n for (const [agentSessionId, release] of autoRetainedStreamReleases) {\n if (!activeSessionIds.has(agentSessionId)) {\n release();\n autoRetainedStreamReleases.delete(agentSessionId);\n }\n }\n\n for (const agentSessionId of activeSessionIds) {\n if (!autoRetainedStreamReleases.has(agentSessionId)) {\n autoRetainedStreamReleases.set(\n agentSessionId,\n retainSessionEventsImpl({\n agentSessionId,\n onRetainFailed() {\n autoRetainedStreamReleases.delete(agentSessionId);\n }\n })\n );\n }\n syncSessionMessages(agentSessionId, signal);\n }\n }\n\n function syncSessionMessages(\n agentSessionId: string,\n signal: AbortSignal | undefined\n ): void {\n if (activeMessageSyncs.has(agentSessionId)) {\n return;\n }\n const cachedMessages = snapshot.sessionMessagesById[agentSessionId] ?? [];\n const afterVersion = latestAgentActivityMessageVersion(cachedMessages);\n const sync = adapter\n .listSessionMessages({\n workspaceId,\n agentSessionId,\n afterVersion,\n signal\n })\n .then((response) => {\n if (signal?.aborted) {\n return;\n }\n updateSnapshot((current) =>\n mergeSnapshotMessages(current, agentSessionId, response.messages)\n );\n })\n .catch(() => {})\n .finally(() => {\n if (activeMessageSyncs.get(agentSessionId) === sync) {\n activeMessageSyncs.delete(agentSessionId);\n }\n });\n activeMessageSyncs.set(agentSessionId, sync);\n }\n\n function createRetainedStreamRelease(agentSessionId: string): () => void {\n let released = false;\n return () => {\n if (released) {\n return;\n }\n released = true;\n releaseRetainedStream(agentSessionId);\n };\n }\n\n function releaseRetainedStream(agentSessionId: string): void {\n const stream = retainedStreams.get(agentSessionId);\n if (!stream) {\n return;\n }\n stream.refCount -= 1;\n if (stream.refCount > 0) {\n return;\n }\n retainedStreams.delete(agentSessionId);\n stream.abortController.abort();\n stream.unsubscribe?.();\n }\n}\n\nexport function createEmptyAgentActivitySnapshot(\n workspaceId: string\n): AgentActivitySnapshot {\n return {\n workspaceId,\n sessions: [],\n presences: [],\n sessionMessagesById: {},\n composerOptionsByProvider: {}\n };\n}\n\nexport function cloneAgentActivitySnapshot(\n snapshot: AgentActivitySnapshot\n): AgentActivitySnapshot {\n return {\n workspaceId: snapshot.workspaceId,\n sessions: snapshot.sessions.map(cloneAgentActivitySession),\n presences: snapshot.presences.map((presence) => ({ ...presence })),\n composerOptionsByProvider: Object.fromEntries(\n Object.entries(snapshot.composerOptionsByProvider ?? {}).map(\n ([provider, options]) => [\n provider,\n cloneAgentActivityComposerOptions(options)\n ]\n )\n ),\n sessionMessagesById: Object.fromEntries(\n Object.entries(snapshot.sessionMessagesById).map(\n ([agentSessionId, messages]) => [\n agentSessionId,\n messages.map((message) => ({\n ...message,\n payload: { ...message.payload }\n }))\n ]\n )\n )\n };\n}\n\nfunction cloneAgentActivityComposerOptions(\n options: AgentActivityComposerOptions\n): AgentActivityComposerOptions {\n return {\n provider: options.provider,\n models: options.models.map((option) => ({ ...option })),\n reasoningEfforts: options.reasoningEfforts.map((option) => ({\n ...option\n })),\n speeds: (options.speeds ?? []).map((option) => ({\n ...option\n })),\n modelConfigurable: options.modelConfigurable ?? false,\n reasoningConfigurable: options.reasoningConfigurable ?? false,\n speedConfigurable: options.speedConfigurable ?? false,\n permissionConfig: options.permissionConfig\n ? {\n configurable: options.permissionConfig.configurable,\n defaultValue: options.permissionConfig.defaultValue ?? null,\n modes: options.permissionConfig.modes.map((mode) => ({ ...mode }))\n }\n : (options.permissionConfig ?? null),\n runtimeContext: cloneJSONRecord(options.runtimeContext),\n skills: options.skills.map((skill) => ({ ...skill })),\n capabilityCatalog: (options.capabilityCatalog ?? []).map((capability) => ({\n ...capability\n })),\n loadedAtUnixMs: options.loadedAtUnixMs\n };\n}\n\nfunction cloneAgentActivitySession(\n session: AgentActivitySession\n): AgentActivitySession {\n return {\n ...session,\n runtimeContext: cloneJSONRecord(session.runtimeContext)\n };\n}\n\nfunction areComposerOptionsEqual(\n left: AgentActivityComposerOptions,\n right: AgentActivityComposerOptions\n): boolean {\n const { loadedAtUnixMs: _leftLoadedAtUnixMs, ...leftComparable } = left;\n const { loadedAtUnixMs: _rightLoadedAtUnixMs, ...rightComparable } = right;\n return JSON.stringify(leftComparable) === JSON.stringify(rightComparable);\n}\n\nfunction cloneJSONRecord<T extends Record<string, unknown> | undefined>(\n value: T\n): T {\n if (value === undefined) {\n return value;\n }\n return cloneJSONValue(value) as T;\n}\n\nfunction cloneJSONValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(cloneJSONValue);\n }\n if (value !== null && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([key, entry]) => [\n key,\n cloneJSONValue(entry)\n ])\n );\n }\n return value;\n}\n\nfunction areShallowObjectArraysEqual<T extends object>(\n left: readonly T[],\n right: readonly T[]\n): boolean {\n if (left.length !== right.length) {\n return false;\n }\n for (let index = 0; index < left.length; index += 1) {\n if (!areShallowObjectsEqual(left[index]!, right[index]!)) {\n return false;\n }\n }\n return true;\n}\n\nfunction areShallowObjectsEqual(left: object, right: object): boolean {\n const leftRecord = left as Record<string, unknown>;\n const rightRecord = right as Record<string, unknown>;\n const keys = new Set([\n ...Object.keys(leftRecord),\n ...Object.keys(rightRecord)\n ]);\n for (const key of keys) {\n if (!Object.is(leftRecord[key], rightRecord[key])) {\n return false;\n }\n }\n return true;\n}\n\nfunction applyActivityUpdatedEvent(\n snapshot: AgentActivitySnapshot,\n event: AgentActivityUpdatedEvent\n): AgentActivityUpdatedApplyResult & { snapshot: AgentActivitySnapshot } {\n if (event.workspaceId && event.workspaceId !== snapshot.workspaceId) {\n return emptyActivityUpdatedApplyResult(snapshot);\n }\n\n const workspaceId = event.workspaceId || snapshot.workspaceId;\n const agentSessionId = event.agentSessionId.trim();\n if (!agentSessionId) {\n return emptyActivityUpdatedApplyResult(snapshot);\n }\n\n if (event.eventType === \"message_update\") {\n return applyActivityUpdatedMessages(snapshot, {\n agentSessionId,\n data: event.data,\n workspaceId\n });\n }\n\n if (event.eventType === \"state_patch\") {\n return applyActivityUpdatedStatePatch(snapshot, {\n agentSessionId,\n data: event.data,\n workspaceId\n });\n }\n\n return emptyActivityUpdatedApplyResult(snapshot);\n}\n\nfunction applyActivityUpdatedMessages(\n snapshot: AgentActivitySnapshot,\n input: {\n agentSessionId: string;\n data: unknown;\n workspaceId: string;\n }\n): AgentActivityUpdatedApplyResult & { snapshot: AgentActivitySnapshot } {\n const inlineMessages = inlineMessagesFromActivityUpdateData(input.data);\n if (inlineMessages.length === 0) {\n return emptyActivityUpdatedApplyResult(snapshot);\n }\n const messagesBySessionId = new Map<string, AgentActivityMessage[]>();\n for (const message of inlineMessages) {\n const targetSessionId = inlineMessageTargetAgentSessionId(\n snapshot,\n input.agentSessionId,\n message\n );\n if (!targetSessionId) {\n continue;\n }\n const activityMessage = agentActivityMessageFromInlineMessage({\n agentSessionId: targetSessionId,\n message,\n workspaceId: input.workspaceId\n });\n messagesBySessionId.set(targetSessionId, [\n ...(messagesBySessionId.get(targetSessionId) ?? []),\n activityMessage\n ]);\n }\n if (messagesBySessionId.size === 0) {\n return emptyActivityUpdatedApplyResult(snapshot);\n }\n let nextSnapshot = snapshot;\n const messages: AgentActivityMessage[] = [];\n for (const [agentSessionId, sessionMessages] of messagesBySessionId) {\n nextSnapshot = mergeSnapshotMessages(\n nextSnapshot,\n agentSessionId,\n sessionMessages\n );\n messages.push(...sessionMessages);\n }\n if (nextSnapshot === snapshot) {\n return {\n applied: true,\n messages: [],\n session: null,\n snapshot,\n statePatch: null\n };\n }\n return {\n applied: true,\n messages,\n session: null,\n snapshot: nextSnapshot,\n statePatch: null\n };\n}\n\nfunction applyActivityUpdatedStatePatch(\n snapshot: AgentActivitySnapshot,\n input: {\n agentSessionId: string;\n data: unknown;\n workspaceId: string;\n }\n): AgentActivityUpdatedApplyResult & { snapshot: AgentActivitySnapshot } {\n const statePatch = inlineStatePatchFromActivityUpdateData(input.data);\n if (!statePatch) {\n return emptyActivityUpdatedApplyResult(snapshot);\n }\n const canonicalEventSessionId = resolveCanonicalAgentSessionId(\n snapshot,\n input.agentSessionId,\n statePatch.provider\n );\n const canonicalPatchSessionId = resolveCanonicalAgentSessionId(\n snapshot,\n statePatch.agentSessionId,\n statePatch.provider\n );\n if (canonicalPatchSessionId !== canonicalEventSessionId) {\n return emptyActivityUpdatedApplyResult(snapshot);\n }\n const canonicalStatePatch = {\n ...statePatch,\n agentSessionId: canonicalPatchSessionId\n };\n const existingSession =\n snapshot.sessions.find(\n (session) => session.agentSessionId === canonicalPatchSessionId\n ) ?? null;\n if (\n !existingSession ||\n isStaleStatePatch(existingSession, canonicalStatePatch)\n ) {\n return emptyActivityUpdatedApplyResult(snapshot);\n }\n const session = agentActivitySessionFromInlineStatePatch({\n existingSession,\n patch: canonicalStatePatch,\n workspaceId: input.workspaceId\n });\n return {\n applied: true,\n messages: [],\n session,\n snapshot: upsertSnapshotSession(snapshot, session),\n statePatch: canonicalStatePatch\n };\n}\n\nfunction emptyActivityUpdatedApplyResult(\n snapshot: AgentActivitySnapshot\n): AgentActivityUpdatedApplyResult & { snapshot: AgentActivitySnapshot } {\n return {\n applied: false,\n messages: [],\n session: null,\n snapshot,\n statePatch: null\n };\n}\n\nfunction applySessionEvent(\n snapshot: AgentActivitySnapshot,\n event: AgentActivitySessionEventEnvelope\n): AgentActivitySnapshot {\n if (event.workspaceId && event.workspaceId !== snapshot.workspaceId) {\n return snapshot;\n }\n\n const data = recordValue(event.data) ?? {};\n if (event.eventType === \"message_update\") {\n const message = messageFromEvent(event, data);\n return message\n ? mergeSnapshotMessages(snapshot, message.agentSessionId, [message])\n : snapshot;\n }\n\n if (event.eventType === \"session_update\") {\n const session = sessionFromEvent(snapshot.workspaceId, event, data);\n return session ? upsertSnapshotSession(snapshot, session) : snapshot;\n }\n\n return snapshot;\n}\n\nfunction mergeSnapshotMessages(\n snapshot: AgentActivitySnapshot,\n agentSessionId: string,\n messages: readonly AgentActivityMessage[]\n): AgentActivitySnapshot {\n const rawAgentSessionId = agentSessionId.trim();\n const canonicalAgentSessionId = resolveCanonicalAgentSessionId(\n snapshot,\n rawAgentSessionId\n );\n if (!canonicalAgentSessionId || messages.length === 0) {\n return snapshot;\n }\n const currentMessages =\n snapshot.sessionMessagesById[canonicalAgentSessionId] ?? [];\n const aliasMessages =\n rawAgentSessionId && rawAgentSessionId !== canonicalAgentSessionId\n ? (snapshot.sessionMessagesById[rawAgentSessionId] ?? [])\n : [];\n const currentCanonicalMessages =\n aliasMessages.length > 0\n ? mergeAgentActivityMessages(\n currentMessages,\n canonicalizeAgentActivityMessages(\n aliasMessages,\n canonicalAgentSessionId\n )\n )\n : currentMessages;\n const canonicalMessages = canonicalizeAgentActivityMessages(\n messages,\n canonicalAgentSessionId\n );\n const mergedMessages = mergeAgentActivityMessages(\n currentCanonicalMessages,\n canonicalMessages\n );\n const hasAliasBucket =\n rawAgentSessionId !== \"\" &&\n rawAgentSessionId !== canonicalAgentSessionId &&\n Object.prototype.hasOwnProperty.call(\n snapshot.sessionMessagesById,\n rawAgentSessionId\n );\n if (areAgentActivityMessageArraysEqual(currentMessages, mergedMessages)) {\n return hasAliasBucket\n ? {\n ...snapshot,\n sessionMessagesById: deleteSessionMessageBucket(\n snapshot.sessionMessagesById,\n rawAgentSessionId\n )\n }\n : snapshot;\n }\n const sessionMessagesById = {\n ...snapshot.sessionMessagesById,\n [canonicalAgentSessionId]: mergedMessages\n };\n if (hasAliasBucket) {\n delete sessionMessagesById[rawAgentSessionId];\n }\n return {\n ...snapshot,\n sessionMessagesById\n };\n}\n\nfunction upsertSnapshotSession(\n snapshot: AgentActivitySnapshot,\n session: AgentActivitySession\n): AgentActivitySnapshot {\n const index = snapshot.sessions.findIndex(\n (item) => item.agentSessionId === session.agentSessionId\n );\n if (index < 0) {\n return canonicalizeSnapshotMessageBuckets({\n ...snapshot,\n sessions: [...snapshot.sessions, session]\n });\n }\n const sessions = [...snapshot.sessions];\n sessions[index] = session;\n return canonicalizeSnapshotMessageBuckets({\n ...snapshot,\n sessions\n });\n}\n\nfunction removeSnapshotSession(\n snapshot: AgentActivitySnapshot,\n agentSessionId: string\n): AgentActivitySnapshot {\n const normalizedAgentSessionId = agentSessionId.trim();\n if (!normalizedAgentSessionId) {\n return snapshot;\n }\n const sessions = snapshot.sessions.filter(\n (session) => session.agentSessionId !== normalizedAgentSessionId\n );\n const removedSession =\n snapshot.sessions.find(\n (session) => session.agentSessionId === normalizedAgentSessionId\n ) ?? null;\n const removableMessageBuckets = new Set([normalizedAgentSessionId]);\n if (removedSession) {\n for (const alias of sessionMessageAliases(removedSession)) {\n if (\n alias === normalizedAgentSessionId ||\n resolveCanonicalAgentSessionId(\n snapshot,\n alias,\n removedSession.provider\n ) === normalizedAgentSessionId\n ) {\n removableMessageBuckets.add(alias);\n }\n }\n }\n if (\n sessions.length === snapshot.sessions.length &&\n [...removableMessageBuckets].every(\n (bucket) => !snapshot.sessionMessagesById[bucket]\n )\n ) {\n return snapshot;\n }\n const sessionMessagesById = { ...snapshot.sessionMessagesById };\n for (const bucket of removableMessageBuckets) {\n delete sessionMessagesById[bucket];\n }\n return {\n ...snapshot,\n sessions,\n sessionMessagesById\n };\n}\n\nfunction canonicalizeSnapshotMessageBuckets(\n snapshot: AgentActivitySnapshot\n): AgentActivitySnapshot {\n let sessionMessagesById = snapshot.sessionMessagesById;\n let changed = false;\n\n for (const session of snapshot.sessions) {\n const canonicalAgentSessionId = session.agentSessionId.trim();\n if (!canonicalAgentSessionId) {\n continue;\n }\n\n let mergedMessages = sessionMessagesById[canonicalAgentSessionId] ?? [];\n for (const alias of sessionMessageAliases(session)) {\n if (\n alias !== canonicalAgentSessionId &&\n resolveCanonicalAgentSessionId(snapshot, alias, session.provider) !==\n canonicalAgentSessionId\n ) {\n continue;\n }\n const aliasMessages = sessionMessagesById[alias];\n if (!aliasMessages) {\n continue;\n }\n const canonicalMessages = canonicalizeAgentActivityMessages(\n aliasMessages,\n canonicalAgentSessionId\n );\n if (alias === canonicalAgentSessionId) {\n if (\n !areAgentActivityMessageArraysEqual(aliasMessages, canonicalMessages)\n ) {\n sessionMessagesById = {\n ...sessionMessagesById,\n [canonicalAgentSessionId]: canonicalMessages\n };\n mergedMessages = canonicalMessages;\n changed = true;\n }\n continue;\n }\n mergedMessages = mergeAgentActivityMessages(\n mergedMessages,\n canonicalMessages\n );\n sessionMessagesById = deleteSessionMessageBucket(\n sessionMessagesById,\n alias\n );\n changed = true;\n }\n\n const currentMessages = sessionMessagesById[canonicalAgentSessionId] ?? [];\n if (!areAgentActivityMessageArraysEqual(currentMessages, mergedMessages)) {\n sessionMessagesById = {\n ...sessionMessagesById,\n [canonicalAgentSessionId]: mergedMessages\n };\n changed = true;\n }\n }\n\n return changed ? { ...snapshot, sessionMessagesById } : snapshot;\n}\n\nfunction resolveCanonicalAgentSessionId(\n snapshot: AgentActivitySnapshot,\n rawAgentSessionId: string | null | undefined,\n provider?: string | null\n): string {\n const normalizedAgentSessionId = rawAgentSessionId?.trim() ?? \"\";\n if (!normalizedAgentSessionId) {\n return \"\";\n }\n\n const exactSession = snapshot.sessions.find(\n (session) => session.agentSessionId.trim() === normalizedAgentSessionId\n );\n if (exactSession) {\n return exactSession.agentSessionId.trim();\n }\n\n const normalizedProvider = provider?.trim() ?? \"\";\n const candidates = snapshot.sessions.filter((session) => {\n if (session.providerSessionId?.trim() !== normalizedAgentSessionId) {\n return false;\n }\n return (\n !normalizedProvider || session.provider.trim() === normalizedProvider\n );\n });\n return candidates.length === 1\n ? candidates[0]!.agentSessionId.trim()\n : normalizedAgentSessionId;\n}\n\nfunction sessionMessageAliases(session: AgentActivitySession): string[] {\n const values = [session.agentSessionId, session.providerSessionId];\n const seen = new Set<string>();\n const aliases: string[] = [];\n for (const value of values) {\n const normalized = value?.trim() ?? \"\";\n if (!normalized || seen.has(normalized)) {\n continue;\n }\n seen.add(normalized);\n aliases.push(normalized);\n }\n return aliases;\n}\n\nfunction canonicalizeAgentActivityMessages(\n messages: readonly AgentActivityMessage[],\n agentSessionId: string\n): AgentActivityMessage[] {\n return messages.map((message) =>\n message.agentSessionId === agentSessionId\n ? message\n : { ...message, agentSessionId }\n );\n}\n\nfunction deleteSessionMessageBucket(\n sessionMessagesById: Record<string, AgentActivityMessage[]>,\n agentSessionId: string\n): Record<string, AgentActivityMessage[]> {\n if (\n !Object.prototype.hasOwnProperty.call(sessionMessagesById, agentSessionId)\n ) {\n return sessionMessagesById;\n }\n const next = { ...sessionMessagesById };\n delete next[agentSessionId];\n return next;\n}\n\nfunction shouldAutoRetainSessionEvents(session: AgentActivitySession): boolean {\n if (!session.agentSessionId.trim()) {\n return false;\n }\n switch (session.status.trim()) {\n case \"canceled\":\n case \"completed\":\n case \"failed\":\n return false;\n default:\n return true;\n }\n}\n\nfunction messageFromEvent(\n event: AgentActivitySessionEventEnvelope,\n data: Record<string, unknown>\n): AgentActivityMessage | null {\n const source = recordValue(data.message) ?? data;\n const agentSessionId =\n stringValue(source.agentSessionId) || event.agentSessionId;\n const messageId = stringValue(source.messageId);\n const role = stringValue(source.role);\n const kind = stringValue(source.kind);\n if (!agentSessionId || !messageId || !role || !kind) {\n return null;\n }\n return {\n workspaceId: stringValue(source.workspaceId) || event.workspaceId,\n agentSessionId,\n messageId,\n id: numberValue(source.id),\n version: numberValue(source.version) ?? 0,\n turnId: nullableStringValue(source.turnId),\n role,\n kind,\n status: nullableStringValue(source.status),\n payload: recordValue(source.payload) ?? {},\n occurredAtUnixMs: numberValue(source.occurredAtUnixMs),\n startedAtUnixMs: numberValue(source.startedAtUnixMs),\n completedAtUnixMs: numberValue(source.completedAtUnixMs)\n };\n}\n\nfunction sessionFromEvent(\n workspaceId: string,\n event: AgentActivitySessionEventEnvelope,\n data: Record<string, unknown>\n): AgentActivitySession | null {\n const source = recordValue(data.session) ?? data;\n const agentSessionId =\n stringValue(source.agentSessionId) || event.agentSessionId;\n if (!agentSessionId) {\n return null;\n }\n return {\n workspaceId: stringValue(source.workspaceId) || workspaceId,\n agentSessionId,\n provider: stringValue(source.provider),\n providerSessionId: nullableStringValue(source.providerSessionId),\n model: nullableStringValue(source.model),\n cwd: stringValue(source.cwd),\n title: stringValue(source.title),\n status: stringValue(source.status) || \"unknown\",\n resumable: booleanValue(source.resumable),\n currentPhase: nullableStringValue(source.currentPhase),\n lastError: nullableStringValue(source.lastError),\n runtimeContext: cloneJSONRecord(\n recordValue(source.runtimeContext) ?? undefined\n ),\n messageVersion: numberValue(source.messageVersion),\n lastEventUnixMs: numberValue(source.lastEventUnixMs),\n startedAtUnixMs: numberValue(source.startedAtUnixMs),\n endedAtUnixMs: numberValue(source.endedAtUnixMs),\n createdAtUnixMs: numberValue(source.createdAtUnixMs),\n updatedAtUnixMs: numberValue(source.updatedAtUnixMs)\n };\n}\n\nfunction inlineMessagesFromActivityUpdateData(\n data: unknown\n): Record<string, unknown>[] {\n const source = recordValue(data);\n const messages = Array.isArray(source?.messages) ? source.messages : [];\n return messages.flatMap((message) => {\n const record = recordValue(message);\n return record ? [record] : [];\n });\n}\n\nfunction inlineMessageTargetAgentSessionId(\n snapshot: AgentActivitySnapshot,\n eventAgentSessionId: string,\n message: Record<string, unknown>\n): string {\n const canonicalEventSessionId = resolveCanonicalAgentSessionId(\n snapshot,\n eventAgentSessionId\n );\n if (!canonicalEventSessionId) {\n return \"\";\n }\n const messageAgentSessionId = stringValue(message.agentSessionId);\n return messageAgentSessionId === \"\" ||\n resolveCanonicalAgentSessionId(snapshot, messageAgentSessionId) ===\n canonicalEventSessionId\n ? canonicalEventSessionId\n : knownSessionIdentity(snapshot, eventAgentSessionId)\n ? \"\"\n : resolveCanonicalAgentSessionId(snapshot, messageAgentSessionId);\n}\n\nfunction knownSessionIdentity(\n snapshot: AgentActivitySnapshot,\n agentSessionId: string\n): boolean {\n const normalizedAgentSessionId = agentSessionId.trim();\n return (\n normalizedAgentSessionId !== \"\" &&\n (snapshot.sessions.some(\n (session) => session.agentSessionId.trim() === normalizedAgentSessionId\n ) ||\n resolveCanonicalAgentSessionId(snapshot, normalizedAgentSessionId) !==\n normalizedAgentSessionId)\n );\n}\n\nfunction agentActivityMessageFromInlineMessage(input: {\n agentSessionId: string;\n message: Record<string, unknown>;\n workspaceId: string;\n}): AgentActivityMessage {\n return {\n workspaceId: stringValue(input.message.workspaceId) || input.workspaceId,\n agentSessionId: input.agentSessionId,\n messageId: stringValue(input.message.messageId),\n id: numberValue(input.message.id),\n version: numberValue(input.message.version) ?? 0,\n turnId: nullableStringValue(input.message.turnId),\n role: stringValue(input.message.role),\n kind: stringValue(input.message.kind),\n status: nullableStringValue(input.message.status),\n payload: recordValue(input.message.payload) ?? {},\n occurredAtUnixMs: numberValue(input.message.occurredAtUnixMs),\n startedAtUnixMs: numberValue(input.message.startedAtUnixMs),\n completedAtUnixMs: numberValue(input.message.completedAtUnixMs)\n };\n}\n\nfunction inlineStatePatchFromActivityUpdateData(\n data: unknown\n): AgentActivityStatePatch | null {\n const source = recordValue(data);\n const agentSessionId = stringValue(source?.agentSessionId);\n if (!source || !agentSessionId) {\n return null;\n }\n const turn = recordValue(source.turn);\n return {\n agentSessionId,\n currentPhase: stringValue(source.currentPhase) || undefined,\n cwd: stringValue(source.cwd) || undefined,\n lastError: stringValue(source.lastError) || undefined,\n lastEventUnixMs: numberValue(source.lastEventUnixMs),\n lifecycleStatus: stringValue(source.lifecycleStatus) || undefined,\n model: stringValue(source.model) || undefined,\n occurredAtUnixMs: numberValue(source.occurredAtUnixMs),\n provider: stringValue(source.provider) || undefined,\n providerSessionId: stringValue(source.providerSessionId) || undefined,\n runtimeContext: cloneJSONRecord(\n recordValue(source.runtimeContext) ?? undefined\n ),\n startedAtUnixMs: numberValue(source.startedAtUnixMs),\n endedAtUnixMs: numberValue(source.endedAtUnixMs),\n title: stringValue(source.title) || undefined,\n turn: turn\n ? {\n completedAtUnixMs: numberValue(turn.completedAtUnixMs),\n fileChanges: turn.fileChanges,\n outcome: stringValue(turn.outcome) || undefined,\n phase: stringValue(turn.phase) || undefined,\n startedAtUnixMs: numberValue(turn.startedAtUnixMs),\n turnId: stringValue(turn.turnId)\n }\n : undefined,\n workspaceId: stringValue(source.workspaceId) || undefined\n };\n}\n\nfunction isStaleStatePatch(\n session: AgentActivitySession,\n patch: AgentActivityStatePatch\n): boolean {\n const nextTime = patch.lastEventUnixMs ?? patch.occurredAtUnixMs;\n const currentTime = session.lastEventUnixMs ?? session.updatedAtUnixMs;\n return (\n typeof nextTime === \"number\" &&\n typeof currentTime === \"number\" &&\n nextTime < currentTime\n );\n}\n\nfunction agentActivitySessionFromInlineStatePatch(input: {\n existingSession: AgentActivitySession;\n patch: AgentActivityStatePatch;\n workspaceId: string;\n}): AgentActivitySession {\n return {\n ...input.existingSession,\n workspaceId: input.patch.workspaceId ?? input.workspaceId,\n agentSessionId: input.patch.agentSessionId,\n provider: input.patch.provider ?? input.existingSession.provider,\n providerSessionId:\n input.patch.providerSessionId ?? input.existingSession.providerSessionId,\n model: input.patch.model ?? input.existingSession.model,\n cwd: input.patch.cwd ?? input.existingSession.cwd,\n title: input.patch.title ?? input.existingSession.title,\n status: input.patch.lifecycleStatus ?? input.existingSession.status,\n currentPhase:\n input.patch.currentPhase ??\n input.patch.turn?.phase ??\n input.existingSession.currentPhase,\n lastError: input.patch.lastError ?? input.existingSession.lastError,\n runtimeContext:\n cloneJSONRecord(input.patch.runtimeContext) ??\n cloneJSONRecord(input.existingSession.runtimeContext),\n lastEventUnixMs:\n input.patch.lastEventUnixMs ??\n input.patch.occurredAtUnixMs ??\n input.existingSession.lastEventUnixMs,\n startedAtUnixMs:\n input.patch.startedAtUnixMs ?? input.existingSession.startedAtUnixMs,\n endedAtUnixMs:\n input.patch.endedAtUnixMs ?? input.existingSession.endedAtUnixMs,\n updatedAtUnixMs:\n input.patch.occurredAtUnixMs ??\n input.patch.lastEventUnixMs ??\n input.existingSession.updatedAtUnixMs\n };\n}\n\nfunction cloneAgentActivityStatePatch(\n statePatch: AgentActivityStatePatch\n): AgentActivityStatePatch {\n return {\n ...statePatch,\n runtimeContext: cloneJSONRecord(statePatch.runtimeContext),\n turn: statePatch.turn ? { ...statePatch.turn } : undefined\n };\n}\n\nfunction recordValue(value: unknown): Record<string, unknown> | null {\n return typeof value === \"object\" && value !== null\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction stringValue(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nfunction nullableStringValue(value: unknown): string | null | undefined {\n return typeof value === \"string\" ? value : value === null ? null : undefined;\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction booleanValue(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n","import type {\n AgentActivityDisplayStatus,\n AgentActivityMessage,\n AgentActivityNeedsAttentionItem,\n AgentActivityNeedsAttentionKind,\n AgentActivitySession,\n AgentActivitySnapshot\n} from \"./types.ts\";\n\nconst terminalMessageStatuses = new Set([\n \"completed\",\n \"canceled\",\n \"failed\",\n \"rejected\",\n \"answered\",\n \"resolved\"\n]);\n\nexport function selectNeedsAttentionCount(\n snapshot: AgentActivitySnapshot\n): number {\n return selectNeedsAttentionItems(snapshot).length;\n}\n\nexport function selectSessionDisplayStatuses(\n snapshot: AgentActivitySnapshot\n): Map<string, AgentActivityDisplayStatus> {\n const needsAttentionSessionIds = new Set(\n selectNeedsAttentionItems(snapshot).map((item) => item.agentSessionId)\n );\n return new Map(\n snapshot.sessions.map((session) => [\n session.agentSessionId,\n normalizeAgentActivityDisplayStatus(session.status, {\n currentPhase: session.currentPhase,\n needsAttention: needsAttentionSessionIds.has(session.agentSessionId)\n })\n ])\n );\n}\n\nexport function normalizeAgentActivityDisplayStatus(\n status: string | null | undefined,\n options: {\n currentPhase?: string | null;\n needsAttention?: boolean;\n } = {}\n): AgentActivityDisplayStatus {\n if (options.needsAttention) {\n return \"waiting\";\n }\n const normalizedStatus = normalizeStatus(status);\n const normalizedCurrentPhase = normalizeStatus(options.currentPhase);\n switch (normalizedStatus) {\n case \"completed\":\n case \"done\":\n case \"success\":\n case \"succeeded\":\n return \"completed\";\n case \"canceled\":\n case \"cancelled\":\n return \"canceled\";\n case \"error\":\n case \"failed\":\n return \"failed\";\n default:\n break;\n }\n switch (normalizedCurrentPhase) {\n case \"completed\":\n case \"done\":\n case \"success\":\n case \"succeeded\":\n return \"completed\";\n case \"canceled\":\n case \"cancelled\":\n return \"canceled\";\n case \"error\":\n case \"failed\":\n return \"failed\";\n case \"awaiting_approval\":\n case \"waiting\":\n case \"waiting_approval\":\n case \"waiting_input\":\n return \"waiting\";\n case \"running\":\n case \"streaming\":\n case \"working\":\n return \"working\";\n default:\n break;\n }\n switch (normalizedStatus) {\n case \"running\":\n case \"streaming\":\n case \"working\":\n return \"working\";\n case \"awaiting_approval\":\n case \"waiting\":\n case \"waiting_approval\":\n case \"waiting_input\":\n return \"waiting\";\n case \"idle\":\n case \"ready\":\n default:\n return \"idle\";\n }\n}\n\nexport function selectNeedsAttentionItems(\n snapshot: AgentActivitySnapshot\n): AgentActivityNeedsAttentionItem[] {\n const sessionsById = new Map(\n snapshot.sessions.map((session) => [session.agentSessionId, session])\n );\n const items: AgentActivityNeedsAttentionItem[] = [];\n\n for (const [agentSessionId, messages] of Object.entries(\n snapshot.sessionMessagesById\n )) {\n const session = sessionsById.get(agentSessionId);\n for (const message of messages) {\n const kind = needsAttentionKindForMessage(message);\n if (!kind) {\n continue;\n }\n items.push(\n needsAttentionItemFromMessage(snapshot, message, kind, session)\n );\n }\n }\n\n return items.sort(\n (left, right) =>\n right.occurredAtUnixMs - left.occurredAtUnixMs ||\n left.id.localeCompare(right.id)\n );\n}\n\nfunction needsAttentionKindForMessage(\n message: AgentActivityMessage\n): AgentActivityNeedsAttentionKind | null {\n if (isTerminalMessageStatus(message.status)) {\n return null;\n }\n\n const kind = normalizeKind(message.kind);\n const payloadType = normalizeMetadataValue(message.payload.type);\n const action = normalizeMetadataValue(message.payload.action);\n const requestType = normalizeMetadataValue(message.payload.requestType);\n const callType = normalizeMetadataValue(message.payload.callType);\n const toolName = normalizeMetadataValue(message.payload.toolName);\n const name = normalizeMetadataValue(message.payload.name);\n const status = normalizeStatus(message.status);\n const payloadStatus = normalizeMetadataValue(message.payload.status);\n\n if (\n includesAny(\n [\n kind,\n payloadType,\n requestType,\n callType,\n toolName,\n name,\n status,\n payloadStatus\n ].join(\" \"),\n [\"permission\", \"approval\"]\n )\n ) {\n return \"permission\";\n }\n\n if (\n includesAny(\n [\n kind,\n payloadType,\n action,\n callType,\n toolName,\n name,\n status,\n payloadStatus\n ].join(\" \"),\n [\"ask_user\", \"ask-user\", \"askuserquestion\", \"question\"]\n )\n ) {\n return \"question\";\n }\n\n if (\n includesAny([kind, payloadType, action, toolName, name].join(\" \"), [\n \"constraint\"\n ])\n ) {\n return \"constraint\";\n }\n\n if (\n isWaitingStatus(status, payloadStatus) &&\n (message.role === \"assistant\" || message.role === \"system\")\n ) {\n return \"other\";\n }\n\n return null;\n}\n\nfunction needsAttentionItemFromMessage(\n snapshot: AgentActivitySnapshot,\n message: AgentActivityMessage,\n kind: AgentActivityNeedsAttentionKind,\n session: AgentActivitySession | undefined\n): AgentActivityNeedsAttentionItem {\n return {\n id: `${message.agentSessionId}:${message.messageId}`,\n workspaceId: message.workspaceId || snapshot.workspaceId,\n agentSessionId: message.agentSessionId,\n provider: session?.provider ?? \"\",\n title: session?.title ?? \"\",\n cwd: session?.cwd ?? \"\",\n kind,\n summary: messageSummary(message),\n occurredAtUnixMs:\n message.occurredAtUnixMs ??\n message.startedAtUnixMs ??\n message.completedAtUnixMs ??\n session?.updatedAtUnixMs ??\n session?.lastEventUnixMs ??\n 0\n };\n}\n\nfunction messageSummary(message: AgentActivityMessage): string {\n return (\n stringValue(message.payload.displayPrompt) ||\n stringValue(message.payload.summary) ||\n stringValue(message.payload.title) ||\n stringValue(message.payload.text) ||\n stringValue(message.payload.content) ||\n message.kind\n );\n}\n\nfunction isTerminalMessageStatus(status: string | null | undefined): boolean {\n return terminalMessageStatuses.has(normalizeStatus(status));\n}\n\nfunction normalizeStatus(status: string | null | undefined): string {\n return status?.trim().toLowerCase() ?? \"\";\n}\n\nfunction isWaitingStatus(...values: readonly string[]): boolean {\n return values.some((value) => {\n const normalized = value.trim().toLowerCase();\n return normalized === \"waiting\" || normalized.startsWith(\"waiting_\");\n });\n}\n\nfunction normalizeKind(kind: string): string {\n return kind.trim().toLowerCase();\n}\n\nfunction normalizeMetadataValue(value: unknown): string {\n return stringValue(value).toLowerCase();\n}\n\nfunction includesAny(value: string, needles: readonly string[]): boolean {\n return needles.some((needle) => value.includes(needle));\n}\n\nfunction stringValue(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n","export interface AgentActivityUsage {\n usedTokens: number | null;\n totalTokens: number | null;\n percentUsed: number | null; // 0-100, rounded to integer; null when window unknown\n quotas: Array<Record<string, unknown>>;\n}\n\nexport interface AgentActivityUsageInput {\n sessionRuntimeContext?: Record<string, unknown> | null;\n}\n\nexport function resolveAgentActivityUsage(\n input: AgentActivityUsageInput\n): AgentActivityUsage | null {\n const usage = recordValue(input.sessionRuntimeContext?.usage);\n if (!usage) {\n return null;\n }\n const contextWindow = recordValue(usage.contextWindow);\n const usedTokens = finiteNumber(contextWindow?.usedTokens);\n const totalTokens = finiteNumber(contextWindow?.totalTokens);\n const quotas = Array.isArray(usage.quotas)\n ? usage.quotas.filter(\n (entry): entry is Record<string, unknown> =>\n typeof entry === \"object\" && entry !== null\n )\n : [];\n const hasWindow =\n usedTokens !== null && totalTokens !== null && totalTokens > 0;\n if (!hasWindow && quotas.length === 0) {\n return null;\n }\n return {\n usedTokens: hasWindow ? usedTokens : null,\n totalTokens: hasWindow ? totalTokens : null,\n percentUsed: hasWindow\n ? Math.min(100, Math.round((usedTokens / totalTokens) * 100))\n : null,\n quotas\n };\n}\n\nfunction recordValue(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction finiteNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n"],"mappings":"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","names":["session","recordValue","stringValue","recordValue"]}
|
|
1
|
+
{"version":3,"sources":["../src/capabilities.ts","../src/merge.ts","../src/controller.ts","../src/selectors.ts","../src/usage.ts"],"sourcesContent":["import type { AgentActivityComposerOptions } from \"./types.ts\";\n\n/** Mirror of packages/agent/daemon/runtime/capabilities.go. */\nexport const AGENT_CAPABILITY_KEYS = [\n \"imageInput\",\n \"skills\",\n \"compact\",\n \"tokenUsage\",\n \"rateLimits\",\n \"planMode\",\n \"interrupt\",\n \"browserUse\",\n \"computerUse\"\n] as const;\n\nexport type AgentCapabilityKey = (typeof AGENT_CAPABILITY_KEYS)[number];\n\nexport interface AgentActivityCapabilityInput {\n composerOptions?: AgentActivityComposerOptions | null;\n sessionRuntimeContext?: Record<string, unknown> | null;\n}\n\nexport function resolveAgentActivityCapability(\n key: AgentCapabilityKey,\n input: AgentActivityCapabilityInput\n): boolean | null {\n return (\n capabilityFromRuntimeContext(key, input.sessionRuntimeContext) ??\n capabilityFromRuntimeContext(key, input.composerOptions?.runtimeContext)\n );\n}\n\nfunction capabilityFromRuntimeContext(\n key: string,\n runtimeContext: Record<string, unknown> | null | undefined\n): boolean | null {\n const list = runtimeContext?.capabilities;\n if (!Array.isArray(list)) {\n return null;\n }\n return list.some((entry) => typeof entry === \"string\" && entry === key);\n}\n","import type { AgentActivityMessage } from \"./types.ts\";\n\nexport function mergeAgentActivityMessages<\n T extends AgentActivityMessage = AgentActivityMessage\n>(currentMessages: readonly T[], incomingMessages: readonly T[]): T[] {\n if (incomingMessages.length === 0) {\n return [...currentMessages];\n }\n\n const byMessageId = new Map<string, T>();\n for (const message of currentMessages) {\n byMessageId.set(message.messageId, cloneAgentActivityMessage(message));\n }\n\n for (const incoming of incomingMessages) {\n const existing = byMessageId.get(incoming.messageId);\n if (!existing || shouldReplaceAgentActivityMessage(existing, incoming)) {\n byMessageId.set(\n incoming.messageId,\n existing\n ? mergeAgentActivityMessage(existing, incoming)\n : cloneAgentActivityMessage(incoming)\n );\n }\n }\n\n return [...byMessageId.values()].sort(compareAgentActivityMessages);\n}\n\nexport function compareAgentActivityMessages(\n left: AgentActivityMessage,\n right: AgentActivityMessage\n): number {\n return (\n left.version - right.version ||\n (left.id ?? 0) - (right.id ?? 0) ||\n left.messageId.localeCompare(right.messageId)\n );\n}\n\nexport function latestAgentActivityMessageVersion(\n messages: readonly AgentActivityMessage[]\n): number {\n return messages.reduce(\n (latestVersion, message) => Math.max(latestVersion, message.version),\n 0\n );\n}\n\nexport function areAgentActivityMessageArraysEqual(\n left: readonly AgentActivityMessage[],\n right: readonly AgentActivityMessage[]\n): boolean {\n if (left.length !== right.length) {\n return false;\n }\n for (let index = 0; index < left.length; index += 1) {\n if (!areAgentActivityMessagesEqual(left[index]!, right[index]!)) {\n return false;\n }\n }\n return true;\n}\n\nexport function areAgentActivityMessagesEqual(\n left: AgentActivityMessage,\n right: AgentActivityMessage\n): boolean {\n return (\n left.workspaceId === right.workspaceId &&\n left.agentSessionId === right.agentSessionId &&\n left.messageId === right.messageId &&\n Object.is(left.id, right.id) &&\n left.version === right.version &&\n Object.is(left.turnId, right.turnId) &&\n left.role === right.role &&\n left.kind === right.kind &&\n Object.is(left.status, right.status) &&\n areJsonLikeValuesEqual(left.semantics, right.semantics) &&\n Object.is(left.occurredAtUnixMs, right.occurredAtUnixMs) &&\n Object.is(left.startedAtUnixMs, right.startedAtUnixMs) &&\n Object.is(left.completedAtUnixMs, right.completedAtUnixMs) &&\n areJsonLikeValuesEqual(left.payload, right.payload)\n );\n}\n\nexport function cloneAgentActivityMessage<\n T extends AgentActivityMessage = AgentActivityMessage\n>(message: T): T {\n return {\n ...message,\n semantics: message.semantics ? { ...message.semantics } : undefined,\n payload: { ...message.payload }\n };\n}\n\nfunction mergeAgentActivityMessage<T extends AgentActivityMessage>(\n existing: T,\n incoming: T\n): T {\n return {\n ...existing,\n ...incoming,\n semantics: incoming.semantics\n ? {\n ...existing.semantics,\n ...incoming.semantics\n }\n : existing.semantics,\n payload: {\n ...existing.payload,\n ...incoming.payload\n }\n };\n}\n\nfunction shouldReplaceAgentActivityMessage(\n existing: AgentActivityMessage,\n incoming: AgentActivityMessage\n): boolean {\n if (incoming.version !== existing.version) {\n return incoming.version > existing.version;\n }\n return (incoming.id ?? 0) >= (existing.id ?? 0);\n}\n\nfunction areJsonLikeValuesEqual(left: unknown, right: unknown): boolean {\n if (Object.is(left, right)) {\n return true;\n }\n if (Array.isArray(left) || Array.isArray(right)) {\n if (!Array.isArray(left) || !Array.isArray(right)) {\n return false;\n }\n if (left.length !== right.length) {\n return false;\n }\n for (let index = 0; index < left.length; index += 1) {\n if (!areJsonLikeValuesEqual(left[index], right[index])) {\n return false;\n }\n }\n return true;\n }\n const leftRecord = recordValue(left);\n const rightRecord = recordValue(right);\n if (!leftRecord || !rightRecord) {\n return false;\n }\n const keys = new Set([\n ...Object.keys(leftRecord),\n ...Object.keys(rightRecord)\n ]);\n for (const key of keys) {\n if (!areJsonLikeValuesEqual(leftRecord[key], rightRecord[key])) {\n return false;\n }\n }\n return true;\n}\n\nfunction recordValue(value: unknown): Record<string, unknown> | null {\n return typeof value === \"object\" && value !== null\n ? (value as Record<string, unknown>)\n : null;\n}\n","import type { AgentActivityAdapter } from \"./adapter.ts\";\nimport {\n areAgentActivityMessageArraysEqual,\n cloneAgentActivityMessage,\n latestAgentActivityMessageVersion,\n mergeAgentActivityMessages\n} from \"./merge.ts\";\nimport type {\n AgentActivityComposerOptions,\n AgentActivityLoadComposerOptionsInput,\n AgentActivityMessage,\n AgentActivityMessageOrder,\n AgentActivityMessagePage,\n AgentActivityStatePatch,\n AgentActivitySession,\n AgentActivitySessionEventEnvelope,\n AgentActivitySnapshot,\n AgentActivityUpdatedApplyResult,\n AgentActivityUpdatedEvent\n} from \"./types.ts\";\n\nexport interface CreateAgentActivityControllerInput {\n adapter: AgentActivityAdapter;\n autoRetainSessionEvents?: boolean;\n workspaceId: string;\n}\n\nexport interface AgentActivityController {\n getSnapshot(): AgentActivitySnapshot;\n subscribe(listener: AgentActivitySnapshotListener): () => void;\n load(signal?: AbortSignal): Promise<AgentActivitySnapshot>;\n loadComposerOptions(\n input: Omit<AgentActivityLoadComposerOptionsInput, \"workspaceId\"> & {\n force?: boolean;\n }\n ): Promise<AgentActivityComposerOptions>;\n listSessionMessages(input: {\n agentSessionId: string;\n afterVersion?: number;\n beforeVersion?: number;\n limit?: number;\n order?: AgentActivityMessageOrder;\n signal?: AbortSignal;\n }): Promise<AgentActivityMessagePage>;\n retainSessionEvents(input: {\n agentSessionId: string;\n afterVersion?: number;\n onError?: (error: unknown) => void;\n }): () => void;\n removeSession(agentSessionId: string): void;\n upsertSession(session: AgentActivitySession): void;\n applyActivityUpdatedEvent(\n event: AgentActivityUpdatedEvent\n ): AgentActivityUpdatedApplyResult;\n applySessionEvent(event: AgentActivitySessionEventEnvelope): void;\n}\n\nexport type AgentActivitySnapshotListener = (\n snapshot: AgentActivitySnapshot\n) => void;\n\ninterface RetainedSessionStream {\n abortController: AbortController;\n refCount: number;\n unsubscribe: (() => void) | null;\n}\n\nexport function createAgentActivityController({\n adapter,\n autoRetainSessionEvents = true,\n workspaceId\n}: CreateAgentActivityControllerInput): AgentActivityController {\n const listeners = new Set<AgentActivitySnapshotListener>();\n const activeMessageSyncs = new Map<string, Promise<void>>();\n const activeComposerOptionsLoads = new Map<\n string,\n Promise<AgentActivityComposerOptions>\n >();\n const composerOptionsLoadVersions = new Map<string, number>();\n const composerOptionsCwdByProvider = new Map<string, string>();\n const activeComposerOptionsLoadCwds = new Map<string, string>();\n const normalizeComposerCwd = (cwd: string | null | undefined): string =>\n (cwd ?? \"\").trim();\n const autoRetainedStreamReleases = new Map<string, () => void>();\n const retainedStreams = new Map<string, RetainedSessionStream>();\n let snapshot: AgentActivitySnapshot =\n createEmptyAgentActivitySnapshot(workspaceId);\n\n const emit = (): void => {\n for (const listener of listeners) {\n listener(snapshot);\n }\n };\n\n const updateSnapshot = (\n updater: (current: AgentActivitySnapshot) => AgentActivitySnapshot\n ): AgentActivitySnapshot => {\n const nextSnapshot = updater(snapshot);\n if (nextSnapshot === snapshot) {\n return snapshot;\n }\n snapshot = cloneAgentActivitySnapshot(nextSnapshot);\n emit();\n return snapshot;\n };\n\n return {\n getSnapshot: () => snapshot,\n subscribe(listener) {\n listeners.add(listener);\n listener(snapshot);\n return () => {\n listeners.delete(listener);\n };\n },\n async load(signal) {\n const response = await adapter.listSessions({ workspaceId, signal });\n const nextSessions = response.sessions;\n const nextPresences = response.presences ?? [];\n const nextSnapshot = updateSnapshot((current) => {\n const sessionDataUnchanged =\n areShallowObjectArraysEqual(current.sessions, nextSessions) &&\n areShallowObjectArraysEqual(current.presences, nextPresences);\n const source = sessionDataUnchanged\n ? current\n : {\n ...current,\n presences: nextPresences,\n sessions: nextSessions\n };\n const canonical = canonicalizeSnapshotMessageBuckets(source);\n if (canonical !== source) {\n return canonical;\n }\n return sessionDataUnchanged ? current : source;\n });\n if (autoRetainSessionEvents) {\n reconcileAutoRetainedSessionStreams(nextSnapshot.sessions, signal);\n }\n return nextSnapshot;\n },\n async loadComposerOptions(input) {\n const provider = input.provider.trim();\n if (!provider) {\n throw new Error(\"Agent composer options provider is required.\");\n }\n const requestedCwd = normalizeComposerCwd(input.cwd);\n if (!input.force) {\n const cached = snapshot.composerOptionsByProvider?.[provider];\n if (\n cached &&\n composerOptionsCwdByProvider.get(provider) === requestedCwd\n ) {\n return cloneAgentActivityComposerOptions(cached);\n }\n }\n const existingLoad = activeComposerOptionsLoads.get(provider);\n if (\n existingLoad &&\n !input.force &&\n activeComposerOptionsLoadCwds.get(provider) === requestedCwd\n ) {\n return existingLoad.then(cloneAgentActivityComposerOptions);\n }\n const loadVersion = (composerOptionsLoadVersions.get(provider) ?? 0) + 1;\n composerOptionsLoadVersions.set(provider, loadVersion);\n const load = adapter\n .loadComposerOptions({\n workspaceId,\n provider,\n cwd: input.cwd,\n settings: input.settings,\n signal: input.signal\n })\n .then((options) => {\n const normalizedOptions = cloneAgentActivityComposerOptions({\n ...options,\n provider,\n loadedAtUnixMs: options.loadedAtUnixMs || Date.now()\n });\n if (composerOptionsLoadVersions.get(provider) !== loadVersion) {\n return cloneAgentActivityComposerOptions(normalizedOptions);\n }\n composerOptionsCwdByProvider.set(provider, requestedCwd);\n updateSnapshot((current) => {\n const currentOptions =\n current.composerOptionsByProvider?.[provider];\n if (\n currentOptions &&\n areComposerOptionsEqual(currentOptions, normalizedOptions)\n ) {\n return current;\n }\n return {\n ...current,\n composerOptionsByProvider: {\n ...current.composerOptionsByProvider,\n [provider]: normalizedOptions\n }\n };\n });\n return cloneAgentActivityComposerOptions(normalizedOptions);\n })\n .finally(() => {\n if (activeComposerOptionsLoads.get(provider) === load) {\n activeComposerOptionsLoads.delete(provider);\n activeComposerOptionsLoadCwds.delete(provider);\n }\n });\n activeComposerOptionsLoads.set(provider, load);\n activeComposerOptionsLoadCwds.set(provider, requestedCwd);\n return load.then(cloneAgentActivityComposerOptions);\n },\n async listSessionMessages({\n agentSessionId,\n afterVersion,\n beforeVersion,\n limit,\n order,\n signal\n }) {\n const response = await adapter.listSessionMessages({\n workspaceId,\n agentSessionId,\n afterVersion,\n beforeVersion,\n limit,\n order,\n signal\n });\n updateSnapshot((current) =>\n mergeSnapshotMessages(current, agentSessionId, response.messages)\n );\n return {\n ...response,\n messages: response.messages.map((message) => ({\n ...message,\n payload: { ...message.payload }\n }))\n };\n },\n retainSessionEvents: retainSessionEventsImpl,\n removeSession(agentSessionId) {\n updateSnapshot((current) =>\n removeSnapshotSession(current, agentSessionId)\n );\n },\n upsertSession(session) {\n if (session.workspaceId && session.workspaceId !== snapshot.workspaceId) {\n return;\n }\n updateSnapshot((current) => upsertSnapshotSession(current, session));\n },\n applyActivityUpdatedEvent(event) {\n const result = applyActivityUpdatedEvent(snapshot, event);\n if (result.snapshot !== snapshot) {\n snapshot = result.snapshot;\n emit();\n }\n return {\n applied: result.applied,\n messages: result.messages.map(cloneAgentActivityMessage),\n session: result.session\n ? cloneAgentActivitySession(result.session)\n : null,\n statePatch: result.statePatch\n ? cloneAgentActivityStatePatch(result.statePatch)\n : null\n };\n },\n applySessionEvent(event) {\n updateSnapshot((current) => applySessionEvent(current, event));\n }\n };\n\n function retainSessionEventsImpl({\n agentSessionId,\n afterVersion,\n onRetainFailed,\n onError\n }: {\n agentSessionId: string;\n afterVersion?: number;\n onRetainFailed?: () => void;\n onError?: (error: unknown) => void;\n }): () => void {\n const normalizedAgentSessionId = agentSessionId.trim();\n if (!normalizedAgentSessionId) {\n return () => {};\n }\n\n const existing = retainedStreams.get(normalizedAgentSessionId);\n if (existing) {\n existing.refCount += 1;\n return createRetainedStreamRelease(normalizedAgentSessionId);\n }\n\n const abortController = new AbortController();\n const stream: RetainedSessionStream = {\n abortController,\n refCount: 1,\n unsubscribe: null\n };\n retainedStreams.set(normalizedAgentSessionId, stream);\n\n const cachedMessages =\n snapshot.sessionMessagesById[normalizedAgentSessionId] ?? [];\n const streamAfterVersion =\n afterVersion ?? latestAgentActivityMessageVersion(cachedMessages);\n\n void adapter\n .subscribeSessionEvents({\n workspaceId,\n agentSessionId: normalizedAgentSessionId,\n afterVersion: streamAfterVersion,\n signal: abortController.signal,\n onEvent(event) {\n if (!abortController.signal.aborted) {\n updateSnapshot((current) => applySessionEvent(current, event));\n }\n },\n onError\n })\n .then((unsubscribe) => {\n const retained = retainedStreams.get(normalizedAgentSessionId);\n if (!retained || retained.abortController.signal.aborted) {\n unsubscribe();\n return;\n }\n retained.unsubscribe = unsubscribe;\n })\n .catch((error: unknown) => {\n if (!abortController.signal.aborted) {\n onError?.(error);\n }\n if (retainedStreams.get(normalizedAgentSessionId) === stream) {\n retainedStreams.delete(normalizedAgentSessionId);\n }\n onRetainFailed?.();\n abortController.abort();\n stream.unsubscribe?.();\n });\n\n return createRetainedStreamRelease(normalizedAgentSessionId);\n }\n\n function reconcileAutoRetainedSessionStreams(\n sessions: readonly AgentActivitySession[],\n signal: AbortSignal | undefined\n ): void {\n const activeSessionIds = new Set(\n sessions\n .filter(shouldAutoRetainSessionEvents)\n .map((session) => session.agentSessionId.trim())\n .filter(Boolean)\n );\n\n for (const [agentSessionId, release] of autoRetainedStreamReleases) {\n if (!activeSessionIds.has(agentSessionId)) {\n release();\n autoRetainedStreamReleases.delete(agentSessionId);\n }\n }\n\n for (const agentSessionId of activeSessionIds) {\n if (!autoRetainedStreamReleases.has(agentSessionId)) {\n autoRetainedStreamReleases.set(\n agentSessionId,\n retainSessionEventsImpl({\n agentSessionId,\n onRetainFailed() {\n autoRetainedStreamReleases.delete(agentSessionId);\n }\n })\n );\n }\n syncSessionMessages(agentSessionId, signal);\n }\n }\n\n function syncSessionMessages(\n agentSessionId: string,\n signal: AbortSignal | undefined\n ): void {\n if (activeMessageSyncs.has(agentSessionId)) {\n return;\n }\n const cachedMessages = snapshot.sessionMessagesById[agentSessionId] ?? [];\n const afterVersion = latestAgentActivityMessageVersion(cachedMessages);\n const sync = adapter\n .listSessionMessages({\n workspaceId,\n agentSessionId,\n afterVersion,\n signal\n })\n .then((response) => {\n if (signal?.aborted) {\n return;\n }\n updateSnapshot((current) =>\n mergeSnapshotMessages(current, agentSessionId, response.messages)\n );\n })\n .catch(() => {})\n .finally(() => {\n if (activeMessageSyncs.get(agentSessionId) === sync) {\n activeMessageSyncs.delete(agentSessionId);\n }\n });\n activeMessageSyncs.set(agentSessionId, sync);\n }\n\n function createRetainedStreamRelease(agentSessionId: string): () => void {\n let released = false;\n return () => {\n if (released) {\n return;\n }\n released = true;\n releaseRetainedStream(agentSessionId);\n };\n }\n\n function releaseRetainedStream(agentSessionId: string): void {\n const stream = retainedStreams.get(agentSessionId);\n if (!stream) {\n return;\n }\n stream.refCount -= 1;\n if (stream.refCount > 0) {\n return;\n }\n retainedStreams.delete(agentSessionId);\n stream.abortController.abort();\n stream.unsubscribe?.();\n }\n}\n\nexport function createEmptyAgentActivitySnapshot(\n workspaceId: string\n): AgentActivitySnapshot {\n return {\n workspaceId,\n sessions: [],\n presences: [],\n sessionMessagesById: {},\n composerOptionsByProvider: {}\n };\n}\n\nexport function cloneAgentActivitySnapshot(\n snapshot: AgentActivitySnapshot\n): AgentActivitySnapshot {\n return {\n workspaceId: snapshot.workspaceId,\n sessions: snapshot.sessions.map(cloneAgentActivitySession),\n presences: snapshot.presences.map((presence) => ({ ...presence })),\n composerOptionsByProvider: Object.fromEntries(\n Object.entries(snapshot.composerOptionsByProvider ?? {}).map(\n ([provider, options]) => [\n provider,\n cloneAgentActivityComposerOptions(options)\n ]\n )\n ),\n sessionMessagesById: Object.fromEntries(\n Object.entries(snapshot.sessionMessagesById).map(\n ([agentSessionId, messages]) => [\n agentSessionId,\n messages.map((message) => ({\n ...message,\n payload: { ...message.payload }\n }))\n ]\n )\n )\n };\n}\n\nfunction cloneAgentActivityComposerOptions(\n options: AgentActivityComposerOptions\n): AgentActivityComposerOptions {\n return {\n provider: options.provider,\n models: options.models.map((option) => ({ ...option })),\n reasoningEfforts: options.reasoningEfforts.map((option) => ({\n ...option\n })),\n speeds: (options.speeds ?? []).map((option) => ({\n ...option\n })),\n modelConfigurable: options.modelConfigurable ?? false,\n reasoningConfigurable: options.reasoningConfigurable ?? false,\n speedConfigurable: options.speedConfigurable ?? false,\n permissionConfig: options.permissionConfig\n ? {\n configurable: options.permissionConfig.configurable,\n defaultValue: options.permissionConfig.defaultValue ?? null,\n modes: options.permissionConfig.modes.map((mode) => ({ ...mode }))\n }\n : (options.permissionConfig ?? null),\n runtimeContext: cloneJSONRecord(options.runtimeContext),\n skills: options.skills.map((skill) => ({ ...skill })),\n capabilityCatalog: (options.capabilityCatalog ?? []).map((capability) => ({\n ...capability\n })),\n loadedAtUnixMs: options.loadedAtUnixMs\n };\n}\n\nfunction cloneAgentActivitySession(\n session: AgentActivitySession\n): AgentActivitySession {\n return {\n ...session,\n turnLifecycle: session.turnLifecycle\n ? (cloneJSONValue(\n session.turnLifecycle\n ) as AgentActivitySession[\"turnLifecycle\"])\n : session.turnLifecycle,\n submitAvailability: session.submitAvailability\n ? { ...session.submitAvailability }\n : session.submitAvailability,\n runtimeContext: cloneJSONRecord(session.runtimeContext)\n };\n}\n\nfunction areComposerOptionsEqual(\n left: AgentActivityComposerOptions,\n right: AgentActivityComposerOptions\n): boolean {\n const { loadedAtUnixMs: _leftLoadedAtUnixMs, ...leftComparable } = left;\n const { loadedAtUnixMs: _rightLoadedAtUnixMs, ...rightComparable } = right;\n return JSON.stringify(leftComparable) === JSON.stringify(rightComparable);\n}\n\nfunction cloneJSONRecord<T extends Record<string, unknown> | undefined>(\n value: T\n): T {\n if (value === undefined) {\n return value;\n }\n return cloneJSONValue(value) as T;\n}\n\nfunction cloneJSONValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(cloneJSONValue);\n }\n if (value !== null && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([key, entry]) => [\n key,\n cloneJSONValue(entry)\n ])\n );\n }\n return value;\n}\n\nfunction areShallowObjectArraysEqual<T extends object>(\n left: readonly T[],\n right: readonly T[]\n): boolean {\n if (left.length !== right.length) {\n return false;\n }\n for (let index = 0; index < left.length; index += 1) {\n if (!areShallowObjectsEqual(left[index]!, right[index]!)) {\n return false;\n }\n }\n return true;\n}\n\nfunction areShallowObjectsEqual(left: object, right: object): boolean {\n const leftRecord = left as Record<string, unknown>;\n const rightRecord = right as Record<string, unknown>;\n const keys = new Set([\n ...Object.keys(leftRecord),\n ...Object.keys(rightRecord)\n ]);\n for (const key of keys) {\n if (!Object.is(leftRecord[key], rightRecord[key])) {\n return false;\n }\n }\n return true;\n}\n\nfunction applyActivityUpdatedEvent(\n snapshot: AgentActivitySnapshot,\n event: AgentActivityUpdatedEvent\n): AgentActivityUpdatedApplyResult & { snapshot: AgentActivitySnapshot } {\n if (event.workspaceId && event.workspaceId !== snapshot.workspaceId) {\n return emptyActivityUpdatedApplyResult(snapshot);\n }\n\n const workspaceId = event.workspaceId || snapshot.workspaceId;\n const agentSessionId = event.agentSessionId.trim();\n if (!agentSessionId) {\n return emptyActivityUpdatedApplyResult(snapshot);\n }\n\n if (event.eventType === \"message_update\") {\n return applyActivityUpdatedMessages(snapshot, {\n agentSessionId,\n data: event.data,\n workspaceId\n });\n }\n\n if (event.eventType === \"state_patch\") {\n return applyActivityUpdatedStatePatch(snapshot, {\n agentSessionId,\n data: event.data,\n workspaceId\n });\n }\n\n return emptyActivityUpdatedApplyResult(snapshot);\n}\n\nfunction applyActivityUpdatedMessages(\n snapshot: AgentActivitySnapshot,\n input: {\n agentSessionId: string;\n data: unknown;\n workspaceId: string;\n }\n): AgentActivityUpdatedApplyResult & { snapshot: AgentActivitySnapshot } {\n const inlineMessages = inlineMessagesFromActivityUpdateData(input.data);\n if (inlineMessages.length === 0) {\n return emptyActivityUpdatedApplyResult(snapshot);\n }\n const messagesBySessionId = new Map<string, AgentActivityMessage[]>();\n for (const message of inlineMessages) {\n const targetSessionId = inlineMessageTargetAgentSessionId(\n snapshot,\n input.agentSessionId,\n message\n );\n if (!targetSessionId) {\n continue;\n }\n const activityMessage = agentActivityMessageFromInlineMessage({\n agentSessionId: targetSessionId,\n message,\n workspaceId: input.workspaceId\n });\n messagesBySessionId.set(targetSessionId, [\n ...(messagesBySessionId.get(targetSessionId) ?? []),\n activityMessage\n ]);\n }\n if (messagesBySessionId.size === 0) {\n return emptyActivityUpdatedApplyResult(snapshot);\n }\n let nextSnapshot = snapshot;\n const messages: AgentActivityMessage[] = [];\n for (const [agentSessionId, sessionMessages] of messagesBySessionId) {\n nextSnapshot = mergeSnapshotMessages(\n nextSnapshot,\n agentSessionId,\n sessionMessages\n );\n messages.push(...sessionMessages);\n }\n if (nextSnapshot === snapshot) {\n return {\n applied: true,\n messages: [],\n session: null,\n snapshot,\n statePatch: null\n };\n }\n return {\n applied: true,\n messages,\n session: null,\n snapshot: nextSnapshot,\n statePatch: null\n };\n}\n\nfunction applyActivityUpdatedStatePatch(\n snapshot: AgentActivitySnapshot,\n input: {\n agentSessionId: string;\n data: unknown;\n workspaceId: string;\n }\n): AgentActivityUpdatedApplyResult & { snapshot: AgentActivitySnapshot } {\n const statePatch = inlineStatePatchFromActivityUpdateData(input.data);\n if (!statePatch) {\n return emptyActivityUpdatedApplyResult(snapshot);\n }\n const canonicalEventSessionId = resolveCanonicalAgentSessionId(\n snapshot,\n input.agentSessionId,\n statePatch.provider\n );\n const canonicalPatchSessionId = resolveCanonicalAgentSessionId(\n snapshot,\n statePatch.agentSessionId,\n statePatch.provider\n );\n if (canonicalPatchSessionId !== canonicalEventSessionId) {\n return emptyActivityUpdatedApplyResult(snapshot);\n }\n const canonicalStatePatch = {\n ...statePatch,\n agentSessionId: canonicalPatchSessionId\n };\n const existingSession =\n snapshot.sessions.find(\n (session) => session.agentSessionId === canonicalPatchSessionId\n ) ?? null;\n if (\n !existingSession ||\n isStaleStatePatch(existingSession, canonicalStatePatch)\n ) {\n return emptyActivityUpdatedApplyResult(snapshot);\n }\n const session = agentActivitySessionFromInlineStatePatch({\n existingSession,\n patch: canonicalStatePatch,\n workspaceId: input.workspaceId\n });\n return {\n applied: true,\n messages: [],\n session,\n snapshot: upsertSnapshotSession(snapshot, session),\n statePatch: canonicalStatePatch\n };\n}\n\nfunction emptyActivityUpdatedApplyResult(\n snapshot: AgentActivitySnapshot\n): AgentActivityUpdatedApplyResult & { snapshot: AgentActivitySnapshot } {\n return {\n applied: false,\n messages: [],\n session: null,\n snapshot,\n statePatch: null\n };\n}\n\nfunction applySessionEvent(\n snapshot: AgentActivitySnapshot,\n event: AgentActivitySessionEventEnvelope\n): AgentActivitySnapshot {\n if (event.workspaceId && event.workspaceId !== snapshot.workspaceId) {\n return snapshot;\n }\n\n const data = recordValue(event.data) ?? {};\n if (event.eventType === \"message_update\") {\n const message = messageFromEvent(event, data);\n return message\n ? mergeSnapshotMessages(snapshot, message.agentSessionId, [message])\n : snapshot;\n }\n\n if (event.eventType === \"session_update\") {\n const session = sessionFromEvent(snapshot.workspaceId, event, data);\n return session ? upsertSnapshotSession(snapshot, session) : snapshot;\n }\n\n return snapshot;\n}\n\nfunction mergeSnapshotMessages(\n snapshot: AgentActivitySnapshot,\n agentSessionId: string,\n messages: readonly AgentActivityMessage[]\n): AgentActivitySnapshot {\n const rawAgentSessionId = agentSessionId.trim();\n const canonicalAgentSessionId = resolveCanonicalAgentSessionId(\n snapshot,\n rawAgentSessionId\n );\n if (!canonicalAgentSessionId || messages.length === 0) {\n return snapshot;\n }\n const currentMessages =\n snapshot.sessionMessagesById[canonicalAgentSessionId] ?? [];\n const aliasMessages =\n rawAgentSessionId && rawAgentSessionId !== canonicalAgentSessionId\n ? (snapshot.sessionMessagesById[rawAgentSessionId] ?? [])\n : [];\n const currentCanonicalMessages =\n aliasMessages.length > 0\n ? mergeAgentActivityMessages(\n currentMessages,\n canonicalizeAgentActivityMessages(\n aliasMessages,\n canonicalAgentSessionId\n )\n )\n : currentMessages;\n const canonicalMessages = canonicalizeAgentActivityMessages(\n messages,\n canonicalAgentSessionId\n );\n const mergedMessages = mergeAgentActivityMessages(\n currentCanonicalMessages,\n canonicalMessages\n );\n const hasAliasBucket =\n rawAgentSessionId !== \"\" &&\n rawAgentSessionId !== canonicalAgentSessionId &&\n Object.prototype.hasOwnProperty.call(\n snapshot.sessionMessagesById,\n rawAgentSessionId\n );\n if (areAgentActivityMessageArraysEqual(currentMessages, mergedMessages)) {\n return hasAliasBucket\n ? {\n ...snapshot,\n sessionMessagesById: deleteSessionMessageBucket(\n snapshot.sessionMessagesById,\n rawAgentSessionId\n )\n }\n : snapshot;\n }\n const sessionMessagesById = {\n ...snapshot.sessionMessagesById,\n [canonicalAgentSessionId]: mergedMessages\n };\n if (hasAliasBucket) {\n delete sessionMessagesById[rawAgentSessionId];\n }\n return {\n ...snapshot,\n sessionMessagesById\n };\n}\n\nfunction upsertSnapshotSession(\n snapshot: AgentActivitySnapshot,\n session: AgentActivitySession\n): AgentActivitySnapshot {\n const index = snapshot.sessions.findIndex(\n (item) => item.agentSessionId === session.agentSessionId\n );\n if (index < 0) {\n return canonicalizeSnapshotMessageBuckets({\n ...snapshot,\n sessions: [...snapshot.sessions, session]\n });\n }\n const sessions = [...snapshot.sessions];\n sessions[index] = session;\n return canonicalizeSnapshotMessageBuckets({\n ...snapshot,\n sessions\n });\n}\n\nfunction removeSnapshotSession(\n snapshot: AgentActivitySnapshot,\n agentSessionId: string\n): AgentActivitySnapshot {\n const normalizedAgentSessionId = agentSessionId.trim();\n if (!normalizedAgentSessionId) {\n return snapshot;\n }\n const sessions = snapshot.sessions.filter(\n (session) => session.agentSessionId !== normalizedAgentSessionId\n );\n const removedSession =\n snapshot.sessions.find(\n (session) => session.agentSessionId === normalizedAgentSessionId\n ) ?? null;\n const removableMessageBuckets = new Set([normalizedAgentSessionId]);\n if (removedSession) {\n for (const alias of sessionMessageAliases(removedSession)) {\n if (\n alias === normalizedAgentSessionId ||\n resolveCanonicalAgentSessionId(\n snapshot,\n alias,\n removedSession.provider\n ) === normalizedAgentSessionId\n ) {\n removableMessageBuckets.add(alias);\n }\n }\n }\n if (\n sessions.length === snapshot.sessions.length &&\n [...removableMessageBuckets].every(\n (bucket) => !snapshot.sessionMessagesById[bucket]\n )\n ) {\n return snapshot;\n }\n const sessionMessagesById = { ...snapshot.sessionMessagesById };\n for (const bucket of removableMessageBuckets) {\n delete sessionMessagesById[bucket];\n }\n return {\n ...snapshot,\n sessions,\n sessionMessagesById\n };\n}\n\nfunction canonicalizeSnapshotMessageBuckets(\n snapshot: AgentActivitySnapshot\n): AgentActivitySnapshot {\n let sessionMessagesById = snapshot.sessionMessagesById;\n let changed = false;\n\n for (const session of snapshot.sessions) {\n const canonicalAgentSessionId = session.agentSessionId.trim();\n if (!canonicalAgentSessionId) {\n continue;\n }\n\n let mergedMessages = sessionMessagesById[canonicalAgentSessionId] ?? [];\n for (const alias of sessionMessageAliases(session)) {\n if (\n alias !== canonicalAgentSessionId &&\n resolveCanonicalAgentSessionId(snapshot, alias, session.provider) !==\n canonicalAgentSessionId\n ) {\n continue;\n }\n const aliasMessages = sessionMessagesById[alias];\n if (!aliasMessages) {\n continue;\n }\n const canonicalMessages = canonicalizeAgentActivityMessages(\n aliasMessages,\n canonicalAgentSessionId\n );\n if (alias === canonicalAgentSessionId) {\n if (\n !areAgentActivityMessageArraysEqual(aliasMessages, canonicalMessages)\n ) {\n sessionMessagesById = {\n ...sessionMessagesById,\n [canonicalAgentSessionId]: canonicalMessages\n };\n mergedMessages = canonicalMessages;\n changed = true;\n }\n continue;\n }\n mergedMessages = mergeAgentActivityMessages(\n mergedMessages,\n canonicalMessages\n );\n sessionMessagesById = deleteSessionMessageBucket(\n sessionMessagesById,\n alias\n );\n changed = true;\n }\n\n const currentMessages = sessionMessagesById[canonicalAgentSessionId] ?? [];\n if (!areAgentActivityMessageArraysEqual(currentMessages, mergedMessages)) {\n sessionMessagesById = {\n ...sessionMessagesById,\n [canonicalAgentSessionId]: mergedMessages\n };\n changed = true;\n }\n }\n\n return changed ? { ...snapshot, sessionMessagesById } : snapshot;\n}\n\nfunction resolveCanonicalAgentSessionId(\n snapshot: AgentActivitySnapshot,\n rawAgentSessionId: string | null | undefined,\n provider?: string | null\n): string {\n const normalizedAgentSessionId = rawAgentSessionId?.trim() ?? \"\";\n if (!normalizedAgentSessionId) {\n return \"\";\n }\n\n const exactSession = snapshot.sessions.find(\n (session) => session.agentSessionId.trim() === normalizedAgentSessionId\n );\n if (exactSession) {\n return exactSession.agentSessionId.trim();\n }\n\n const normalizedProvider = provider?.trim() ?? \"\";\n const candidates = snapshot.sessions.filter((session) => {\n if (session.providerSessionId?.trim() !== normalizedAgentSessionId) {\n return false;\n }\n return (\n !normalizedProvider || session.provider.trim() === normalizedProvider\n );\n });\n return candidates.length === 1\n ? candidates[0]!.agentSessionId.trim()\n : normalizedAgentSessionId;\n}\n\nfunction sessionMessageAliases(session: AgentActivitySession): string[] {\n const values = [session.agentSessionId, session.providerSessionId];\n const seen = new Set<string>();\n const aliases: string[] = [];\n for (const value of values) {\n const normalized = value?.trim() ?? \"\";\n if (!normalized || seen.has(normalized)) {\n continue;\n }\n seen.add(normalized);\n aliases.push(normalized);\n }\n return aliases;\n}\n\nfunction canonicalizeAgentActivityMessages(\n messages: readonly AgentActivityMessage[],\n agentSessionId: string\n): AgentActivityMessage[] {\n return messages.map((message) =>\n message.agentSessionId === agentSessionId\n ? message\n : { ...message, agentSessionId }\n );\n}\n\nfunction deleteSessionMessageBucket(\n sessionMessagesById: Record<string, AgentActivityMessage[]>,\n agentSessionId: string\n): Record<string, AgentActivityMessage[]> {\n if (\n !Object.prototype.hasOwnProperty.call(sessionMessagesById, agentSessionId)\n ) {\n return sessionMessagesById;\n }\n const next = { ...sessionMessagesById };\n delete next[agentSessionId];\n return next;\n}\n\nfunction shouldAutoRetainSessionEvents(session: AgentActivitySession): boolean {\n if (!session.agentSessionId.trim()) {\n return false;\n }\n switch (session.status.trim()) {\n case \"canceled\":\n case \"completed\":\n case \"failed\":\n return false;\n default:\n return true;\n }\n}\n\nfunction messageFromEvent(\n event: AgentActivitySessionEventEnvelope,\n data: Record<string, unknown>\n): AgentActivityMessage | null {\n const source = recordValue(data.message) ?? data;\n const agentSessionId =\n stringValue(source.agentSessionId) || event.agentSessionId;\n const messageId = stringValue(source.messageId);\n const role = stringValue(source.role);\n const kind = stringValue(source.kind);\n if (!agentSessionId || !messageId || !role || !kind) {\n return null;\n }\n return {\n workspaceId: stringValue(source.workspaceId) || event.workspaceId,\n agentSessionId,\n messageId,\n id: numberValue(source.id),\n version: numberValue(source.version) ?? 0,\n turnId: nullableStringValue(source.turnId),\n role,\n kind,\n status: nullableStringValue(source.status),\n semantics: recordValue(source.semantics)\n ? (cloneJSONValue(source.semantics) as AgentActivityMessage[\"semantics\"])\n : undefined,\n payload: recordValue(source.payload) ?? {},\n occurredAtUnixMs: numberValue(source.occurredAtUnixMs),\n startedAtUnixMs: numberValue(source.startedAtUnixMs),\n completedAtUnixMs: numberValue(source.completedAtUnixMs)\n };\n}\n\nfunction sessionFromEvent(\n workspaceId: string,\n event: AgentActivitySessionEventEnvelope,\n data: Record<string, unknown>\n): AgentActivitySession | null {\n const source = recordValue(data.session) ?? data;\n const agentSessionId =\n stringValue(source.agentSessionId) || event.agentSessionId;\n if (!agentSessionId) {\n return null;\n }\n return {\n workspaceId: stringValue(source.workspaceId) || workspaceId,\n agentSessionId,\n provider: stringValue(source.provider),\n providerSessionId: nullableStringValue(source.providerSessionId),\n model: nullableStringValue(source.model),\n cwd: stringValue(source.cwd),\n title: stringValue(source.title),\n status: stringValue(source.status) || \"unknown\",\n turnLifecycle: recordValue(source.turnLifecycle)\n ? (cloneJSONValue(\n source.turnLifecycle\n ) as AgentActivitySession[\"turnLifecycle\"])\n : undefined,\n submitAvailability: recordValue(source.submitAvailability)\n ? (cloneJSONValue(\n source.submitAvailability\n ) as AgentActivitySession[\"submitAvailability\"])\n : undefined,\n resumable: booleanValue(source.resumable),\n currentPhase: nullableStringValue(source.currentPhase),\n lastError: nullableStringValue(source.lastError),\n runtimeContext: cloneJSONRecord(\n recordValue(source.runtimeContext) ?? undefined\n ),\n messageVersion: numberValue(source.messageVersion),\n lastEventUnixMs: numberValue(source.lastEventUnixMs),\n startedAtUnixMs: numberValue(source.startedAtUnixMs),\n endedAtUnixMs: numberValue(source.endedAtUnixMs),\n createdAtUnixMs: numberValue(source.createdAtUnixMs),\n updatedAtUnixMs: numberValue(source.updatedAtUnixMs)\n };\n}\n\nfunction inlineMessagesFromActivityUpdateData(\n data: unknown\n): Record<string, unknown>[] {\n const source = recordValue(data);\n const messages = Array.isArray(source?.messages) ? source.messages : [];\n return messages.flatMap((message) => {\n const record = recordValue(message);\n return record ? [record] : [];\n });\n}\n\nfunction inlineMessageTargetAgentSessionId(\n snapshot: AgentActivitySnapshot,\n eventAgentSessionId: string,\n message: Record<string, unknown>\n): string {\n const canonicalEventSessionId = resolveCanonicalAgentSessionId(\n snapshot,\n eventAgentSessionId\n );\n if (!canonicalEventSessionId) {\n return \"\";\n }\n const messageAgentSessionId = stringValue(message.agentSessionId);\n return messageAgentSessionId === \"\" ||\n resolveCanonicalAgentSessionId(snapshot, messageAgentSessionId) ===\n canonicalEventSessionId\n ? canonicalEventSessionId\n : knownSessionIdentity(snapshot, eventAgentSessionId)\n ? \"\"\n : resolveCanonicalAgentSessionId(snapshot, messageAgentSessionId);\n}\n\nfunction knownSessionIdentity(\n snapshot: AgentActivitySnapshot,\n agentSessionId: string\n): boolean {\n const normalizedAgentSessionId = agentSessionId.trim();\n return (\n normalizedAgentSessionId !== \"\" &&\n (snapshot.sessions.some(\n (session) => session.agentSessionId.trim() === normalizedAgentSessionId\n ) ||\n resolveCanonicalAgentSessionId(snapshot, normalizedAgentSessionId) !==\n normalizedAgentSessionId)\n );\n}\n\nfunction agentActivityMessageFromInlineMessage(input: {\n agentSessionId: string;\n message: Record<string, unknown>;\n workspaceId: string;\n}): AgentActivityMessage {\n return {\n workspaceId: stringValue(input.message.workspaceId) || input.workspaceId,\n agentSessionId: input.agentSessionId,\n messageId: stringValue(input.message.messageId),\n id: numberValue(input.message.id),\n version: numberValue(input.message.version) ?? 0,\n turnId: nullableStringValue(input.message.turnId),\n role: stringValue(input.message.role),\n kind: stringValue(input.message.kind),\n status: nullableStringValue(input.message.status),\n semantics: recordValue(input.message.semantics)\n ? (cloneJSONValue(\n input.message.semantics\n ) as AgentActivityMessage[\"semantics\"])\n : undefined,\n payload: recordValue(input.message.payload) ?? {},\n occurredAtUnixMs: numberValue(input.message.occurredAtUnixMs),\n startedAtUnixMs: numberValue(input.message.startedAtUnixMs),\n completedAtUnixMs: numberValue(input.message.completedAtUnixMs)\n };\n}\n\nfunction inlineStatePatchFromActivityUpdateData(\n data: unknown\n): AgentActivityStatePatch | null {\n const source = recordValue(data);\n const agentSessionId = stringValue(source?.agentSessionId);\n if (!source || !agentSessionId) {\n return null;\n }\n const turn = recordValue(source.turn);\n const submitAvailability = recordValue(source.submitAvailability);\n return {\n agentSessionId,\n currentPhase: stringValue(source.currentPhase) || undefined,\n cwd: stringValue(source.cwd) || undefined,\n lastError: stringValue(source.lastError) || undefined,\n lastEventUnixMs: numberValue(source.lastEventUnixMs),\n lifecycleStatus: stringValue(source.lifecycleStatus) || undefined,\n model: stringValue(source.model) || undefined,\n occurredAtUnixMs: numberValue(source.occurredAtUnixMs),\n provider: stringValue(source.provider) || undefined,\n providerSessionId: stringValue(source.providerSessionId) || undefined,\n runtimeContext: cloneJSONRecord(\n recordValue(source.runtimeContext) ?? undefined\n ),\n startedAtUnixMs: numberValue(source.startedAtUnixMs),\n endedAtUnixMs: numberValue(source.endedAtUnixMs),\n title: stringValue(source.title) || undefined,\n turn: turn\n ? {\n ...(turn.activeTurnId !== undefined\n ? { activeTurnId: nullableStringValue(turn.activeTurnId) }\n : {}),\n ...(recordValue(turn.completedCommand)\n ? {\n completedCommand: cloneJSONValue(\n turn.completedCommand\n ) as NonNullable<\n NonNullable<\n AgentActivityStatePatch[\"turn\"]\n >[\"completedCommand\"]\n >\n }\n : {}),\n completedAtUnixMs: numberValue(turn.completedAtUnixMs),\n fileChanges: turn.fileChanges,\n outcome: stringValue(turn.outcome) || undefined,\n phase: stringValue(turn.phase) || undefined,\n ...(turn.settling !== undefined\n ? { settling: booleanValue(turn.settling) }\n : {}),\n ...(recordValue(turn.submitAvailability)\n ? {\n submitAvailability: cloneJSONValue(\n turn.submitAvailability\n ) as NonNullable<\n NonNullable<\n AgentActivityStatePatch[\"turn\"]\n >[\"submitAvailability\"]\n >\n }\n : {}),\n startedAtUnixMs: numberValue(turn.startedAtUnixMs),\n turnId: stringValue(turn.turnId)\n }\n : undefined,\n submitAvailability: submitAvailability\n ? (cloneJSONValue(\n submitAvailability\n ) as AgentActivityStatePatch[\"submitAvailability\"])\n : undefined,\n workspaceId: stringValue(source.workspaceId) || undefined\n };\n}\n\nfunction isStaleStatePatch(\n session: AgentActivitySession,\n patch: AgentActivityStatePatch\n): boolean {\n const nextTime = patch.lastEventUnixMs ?? patch.occurredAtUnixMs;\n const currentTime = session.lastEventUnixMs ?? session.updatedAtUnixMs;\n return (\n typeof nextTime === \"number\" &&\n typeof currentTime === \"number\" &&\n nextTime < currentTime\n );\n}\n\nfunction agentActivitySessionFromInlineStatePatch(input: {\n existingSession: AgentActivitySession;\n patch: AgentActivityStatePatch;\n workspaceId: string;\n}): AgentActivitySession {\n return {\n ...input.existingSession,\n workspaceId: input.patch.workspaceId ?? input.workspaceId,\n agentSessionId: input.patch.agentSessionId,\n provider: input.patch.provider ?? input.existingSession.provider,\n providerSessionId:\n input.patch.providerSessionId ?? input.existingSession.providerSessionId,\n model: input.patch.model ?? input.existingSession.model,\n cwd: input.patch.cwd ?? input.existingSession.cwd,\n title: input.patch.title ?? input.existingSession.title,\n status: input.patch.lifecycleStatus ?? input.existingSession.status,\n turnLifecycle:\n turnLifecycleFromStatePatch(input.patch) ??\n (cloneJSONValue(\n input.existingSession.turnLifecycle\n ) as AgentActivitySession[\"turnLifecycle\"]),\n submitAvailability:\n input.patch.submitAvailability ??\n input.patch.turn?.submitAvailability ??\n input.existingSession.submitAvailability,\n currentPhase:\n input.patch.currentPhase ??\n input.patch.turn?.phase ??\n input.existingSession.currentPhase,\n lastError: input.patch.lastError ?? input.existingSession.lastError,\n runtimeContext:\n cloneJSONRecord(input.patch.runtimeContext) ??\n cloneJSONRecord(input.existingSession.runtimeContext),\n lastEventUnixMs:\n input.patch.lastEventUnixMs ??\n input.patch.occurredAtUnixMs ??\n input.existingSession.lastEventUnixMs,\n startedAtUnixMs:\n input.patch.startedAtUnixMs ?? input.existingSession.startedAtUnixMs,\n endedAtUnixMs:\n input.patch.endedAtUnixMs ?? input.existingSession.endedAtUnixMs,\n updatedAtUnixMs:\n input.patch.occurredAtUnixMs ??\n input.patch.lastEventUnixMs ??\n input.existingSession.updatedAtUnixMs\n };\n}\n\nfunction cloneAgentActivityStatePatch(\n statePatch: AgentActivityStatePatch\n): AgentActivityStatePatch {\n return {\n ...statePatch,\n runtimeContext: cloneJSONRecord(statePatch.runtimeContext),\n ...(statePatch.submitAvailability\n ? { submitAvailability: { ...statePatch.submitAvailability } }\n : {}),\n turn: statePatch.turn\n ? {\n ...statePatch.turn,\n ...(statePatch.turn.completedCommand\n ? {\n completedCommand: {\n ...statePatch.turn.completedCommand\n }\n }\n : {}),\n ...(statePatch.turn.submitAvailability\n ? {\n submitAvailability: {\n ...statePatch.turn.submitAvailability\n }\n }\n : {})\n }\n : undefined\n };\n}\n\nfunction turnLifecycleFromStatePatch(\n patch: AgentActivityStatePatch\n): AgentActivitySession[\"turnLifecycle\"] | undefined {\n const turn = patch.turn;\n if (!turn?.phase) {\n return undefined;\n }\n const phase = turn.phase;\n const activeTurnId =\n turn.activeTurnId !== undefined\n ? turn.activeTurnId\n : phase === \"settled\"\n ? null\n : turn.turnId || null;\n return {\n activeTurnId,\n phase,\n settling: turn.settling,\n outcome: turn.outcome ?? null,\n completedCommand: turn.completedCommand ?? null\n };\n}\n\nfunction recordValue(value: unknown): Record<string, unknown> | null {\n return typeof value === \"object\" && value !== null\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction stringValue(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nfunction nullableStringValue(value: unknown): string | null | undefined {\n return typeof value === \"string\" ? value : value === null ? null : undefined;\n}\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction booleanValue(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n","import type {\n AgentActivityDisplayStatus,\n AgentActivityMessage,\n AgentActivityNeedsAttentionItem,\n AgentActivityNeedsAttentionKind,\n AgentActivitySession,\n AgentActivitySnapshot\n} from \"./types.ts\";\n\nconst terminalMessageStatuses = new Set([\n \"completed\",\n \"canceled\",\n \"failed\",\n \"rejected\",\n \"answered\",\n \"resolved\"\n]);\n\nexport function selectNeedsAttentionCount(\n snapshot: AgentActivitySnapshot\n): number {\n return selectNeedsAttentionItems(snapshot).length;\n}\n\nexport function selectSessionDisplayStatuses(\n snapshot: AgentActivitySnapshot\n): Map<string, AgentActivityDisplayStatus> {\n const needsAttentionSessionIds = new Set(\n selectNeedsAttentionItems(snapshot).map((item) => item.agentSessionId)\n );\n return new Map(\n snapshot.sessions.map((session) => [\n session.agentSessionId,\n normalizeAgentActivityDisplayStatus(session.status, {\n currentPhase: session.currentPhase,\n needsAttention: needsAttentionSessionIds.has(session.agentSessionId),\n turnLifecyclePhase: session.turnLifecycle?.phase\n })\n ])\n );\n}\n\nexport function normalizeAgentActivityDisplayStatus(\n status: string | null | undefined,\n options: {\n currentPhase?: string | null;\n needsAttention?: boolean;\n turnLifecyclePhase?: string | null;\n } = {}\n): AgentActivityDisplayStatus {\n if (options.needsAttention) {\n return \"waiting\";\n }\n switch (normalizeStatus(options.turnLifecyclePhase)) {\n case \"settled\":\n break;\n case \"waiting\":\n return \"waiting\";\n case \"running\":\n case \"submitted\":\n return \"working\";\n default:\n break;\n }\n const normalizedStatus = normalizeStatus(status);\n const normalizedCurrentPhase = normalizeStatus(options.currentPhase);\n switch (normalizedStatus) {\n case \"completed\":\n case \"done\":\n case \"success\":\n case \"succeeded\":\n return \"completed\";\n case \"canceled\":\n case \"cancelled\":\n return \"canceled\";\n case \"error\":\n case \"failed\":\n return \"failed\";\n default:\n break;\n }\n switch (normalizedCurrentPhase) {\n case \"completed\":\n case \"done\":\n case \"success\":\n case \"succeeded\":\n return \"completed\";\n case \"canceled\":\n case \"cancelled\":\n return \"canceled\";\n case \"error\":\n case \"failed\":\n return \"failed\";\n case \"awaiting_approval\":\n case \"waiting\":\n case \"waiting_approval\":\n case \"waiting_input\":\n return \"waiting\";\n case \"running\":\n case \"streaming\":\n case \"working\":\n return \"working\";\n default:\n break;\n }\n switch (normalizedStatus) {\n case \"running\":\n case \"streaming\":\n case \"working\":\n return \"working\";\n case \"awaiting_approval\":\n case \"waiting\":\n case \"waiting_approval\":\n case \"waiting_input\":\n return \"waiting\";\n case \"idle\":\n case \"ready\":\n default:\n return \"idle\";\n }\n}\n\nexport function selectNeedsAttentionItems(\n snapshot: AgentActivitySnapshot\n): AgentActivityNeedsAttentionItem[] {\n const sessionsById = new Map(\n snapshot.sessions.map((session) => [session.agentSessionId, session])\n );\n const items: AgentActivityNeedsAttentionItem[] = [];\n\n for (const [agentSessionId, messages] of Object.entries(\n snapshot.sessionMessagesById\n )) {\n const session = sessionsById.get(agentSessionId);\n for (const message of messages) {\n const kind = needsAttentionKindForMessage(message);\n if (!kind) {\n continue;\n }\n items.push(\n needsAttentionItemFromMessage(snapshot, message, kind, session)\n );\n }\n }\n\n return items.sort(\n (left, right) =>\n right.occurredAtUnixMs - left.occurredAtUnixMs ||\n left.id.localeCompare(right.id)\n );\n}\n\nfunction needsAttentionKindForMessage(\n message: AgentActivityMessage\n): AgentActivityNeedsAttentionKind | null {\n if (isTerminalMessageStatus(message.status)) {\n return null;\n }\n\n const kind = normalizeKind(message.kind);\n const payloadType = normalizeMetadataValue(message.payload.type);\n const action = normalizeMetadataValue(message.payload.action);\n const requestType = normalizeMetadataValue(message.payload.requestType);\n const callType = normalizeMetadataValue(message.payload.callType);\n const toolName = normalizeMetadataValue(message.payload.toolName);\n const name = normalizeMetadataValue(message.payload.name);\n const status = normalizeStatus(message.status);\n const payloadStatus = normalizeMetadataValue(message.payload.status);\n\n if (\n includesAny(\n [\n kind,\n payloadType,\n requestType,\n callType,\n toolName,\n name,\n status,\n payloadStatus\n ].join(\" \"),\n [\"permission\", \"approval\"]\n )\n ) {\n return \"permission\";\n }\n\n if (\n includesAny(\n [\n kind,\n payloadType,\n action,\n callType,\n toolName,\n name,\n status,\n payloadStatus\n ].join(\" \"),\n [\"ask_user\", \"ask-user\", \"askuserquestion\", \"question\"]\n )\n ) {\n return \"question\";\n }\n\n if (\n includesAny([kind, payloadType, action, toolName, name].join(\" \"), [\n \"constraint\"\n ])\n ) {\n return \"constraint\";\n }\n\n if (\n isWaitingStatus(status, payloadStatus) &&\n (message.role === \"assistant\" || message.role === \"system\")\n ) {\n return \"other\";\n }\n\n return null;\n}\n\nfunction needsAttentionItemFromMessage(\n snapshot: AgentActivitySnapshot,\n message: AgentActivityMessage,\n kind: AgentActivityNeedsAttentionKind,\n session: AgentActivitySession | undefined\n): AgentActivityNeedsAttentionItem {\n return {\n id: `${message.agentSessionId}:${message.messageId}`,\n workspaceId: message.workspaceId || snapshot.workspaceId,\n agentSessionId: message.agentSessionId,\n provider: session?.provider ?? \"\",\n title: session?.title ?? \"\",\n cwd: session?.cwd ?? \"\",\n kind,\n summary: messageSummary(message),\n occurredAtUnixMs:\n message.occurredAtUnixMs ??\n message.startedAtUnixMs ??\n message.completedAtUnixMs ??\n session?.updatedAtUnixMs ??\n session?.lastEventUnixMs ??\n 0\n };\n}\n\nfunction messageSummary(message: AgentActivityMessage): string {\n return (\n stringValue(message.payload.displayPrompt) ||\n stringValue(message.payload.summary) ||\n stringValue(message.payload.title) ||\n stringValue(message.payload.text) ||\n stringValue(message.payload.content) ||\n message.kind\n );\n}\n\nfunction isTerminalMessageStatus(status: string | null | undefined): boolean {\n return terminalMessageStatuses.has(normalizeStatus(status));\n}\n\nfunction normalizeStatus(status: string | null | undefined): string {\n return status?.trim().toLowerCase() ?? \"\";\n}\n\nfunction isWaitingStatus(...values: readonly string[]): boolean {\n return values.some((value) => {\n const normalized = value.trim().toLowerCase();\n return normalized === \"waiting\" || normalized.startsWith(\"waiting_\");\n });\n}\n\nfunction normalizeKind(kind: string): string {\n return kind.trim().toLowerCase();\n}\n\nfunction normalizeMetadataValue(value: unknown): string {\n return stringValue(value).toLowerCase();\n}\n\nfunction includesAny(value: string, needles: readonly string[]): boolean {\n return needles.some((needle) => value.includes(needle));\n}\n\nfunction stringValue(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n","export interface AgentActivityUsage {\n usedTokens: number | null;\n totalTokens: number | null;\n percentUsed: number | null; // 0-100, rounded to integer; null when window unknown\n quotas: Array<Record<string, unknown>>;\n}\n\nexport interface AgentActivityUsageInput {\n sessionRuntimeContext?: Record<string, unknown> | null;\n}\n\nexport function resolveAgentActivityUsage(\n input: AgentActivityUsageInput\n): AgentActivityUsage | null {\n const usage = recordValue(input.sessionRuntimeContext?.usage);\n if (!usage) {\n return null;\n }\n const contextWindow = recordValue(usage.contextWindow);\n const usedTokens = finiteNumber(contextWindow?.usedTokens);\n const totalTokens = finiteNumber(contextWindow?.totalTokens);\n const quotas = Array.isArray(usage.quotas)\n ? usage.quotas.filter(\n (entry): entry is Record<string, unknown> =>\n typeof entry === \"object\" && entry !== null\n )\n : [];\n const hasWindow =\n usedTokens !== null && totalTokens !== null && totalTokens > 0;\n if (!hasWindow && quotas.length === 0) {\n return null;\n }\n return {\n usedTokens: hasWindow ? usedTokens : null,\n totalTokens: hasWindow ? totalTokens : null,\n percentUsed: hasWindow\n ? Math.min(100, Math.round((usedTokens / totalTokens) * 100))\n : null,\n quotas\n };\n}\n\nfunction recordValue(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction finiteNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n"],"mappings":"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","names":["session","recordValue","stringValue","recordValue"]}
|