openfox 1.6.14 → 1.6.15

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.
Files changed (39) hide show
  1. package/dist/{auto-compaction-C4PMBB24.js → auto-compaction-JZIM73ZY.js} +5 -5
  2. package/dist/{chat-handler-US3QOOE4.js → chat-handler-F2A2IMQB.js} +26 -56
  3. package/dist/{chunk-7HLRI6JM.js → chunk-2KP34IDL.js} +161 -204
  4. package/dist/{chunk-N25QUEPO.js → chunk-3WHZ47PY.js} +506 -786
  5. package/dist/{chunk-XFXOSPYH.js → chunk-55N6FAAZ.js} +1 -1
  6. package/dist/{chunk-5GE3QJSZ.js → chunk-6L3X7T4K.js} +82 -160
  7. package/dist/{chunk-QDEKU5RL.js → chunk-F54ZJN4X.js} +38 -2
  8. package/dist/{chunk-3JU6H6A4.js → chunk-G4E72ST3.js} +116 -241
  9. package/dist/{chunk-UL4JYQKK.js → chunk-IN5EP4ZB.js} +2 -2
  10. package/dist/{chunk-PCOG5FQD.js → chunk-JFKYCGZ5.js} +6 -6
  11. package/dist/{chunk-OOIRCXAY.js → chunk-KOUMYBYM.js} +53 -112
  12. package/dist/{chunk-3XZ23PXM.js → chunk-OVLFEBRR.js} +76 -92
  13. package/dist/chunk-SN7OBEVL.js +44 -0
  14. package/dist/{chunk-H22VHHQ4.js → chunk-YM6VHAPM.js} +4 -4
  15. package/dist/{chunk-J2DHVXRX.js → chunk-ZDNXCVW4.js} +2 -2
  16. package/dist/cli/dev.js +1 -1
  17. package/dist/cli/index.js +1 -1
  18. package/dist/{config-DEM6ASQM.js → config-67AX6CNS.js} +5 -5
  19. package/dist/{events-VDAC7E7K.js → events-2ETDOE5B.js} +3 -3
  20. package/dist/{folding-NDFQCISZ.js → folding-M7FMUBOL.js} +6 -4
  21. package/dist/{orchestrator-KZI7B5IS.js → orchestrator-SRSG2SIZ.js} +6 -6
  22. package/dist/package.json +13 -3
  23. package/dist/{processor-KBSF2HFD.js → processor-H5BQ5HQM.js} +24 -49
  24. package/dist/{provider-K3PHZO27.js → provider-DKGBQHUS.js} +7 -7
  25. package/dist/{serve-DERN4AB6.js → serve-5AY7GMN7.js} +12 -12
  26. package/dist/server/index.d.ts +2 -0
  27. package/dist/server/index.js +10 -10
  28. package/dist/{tools-PLVK22CF.js → tools-VOWNOP6V.js} +5 -5
  29. package/dist/{vision-fallback-NOC3YYIB.js → vision-fallback-ADYRFFD4.js} +2 -2
  30. package/dist/web/assets/{index-MCWDS5UQ.css → index-CNeIjdxm.css} +1 -1
  31. package/dist/web/assets/index-mBLhctLW.js +150 -0
  32. package/dist/web/index.html +2 -2
  33. package/dist/web/sw.js +1 -1
  34. package/package.json +13 -3
  35. package/dist/web/assets/index-Ccy2Csbl.js +0 -150
  36. /package/dist/{command-defaults → server/commands/defaults}/commit-push.command.md +0 -0
  37. /package/dist/{command-defaults → server/commands/defaults}/init.command.md +0 -0
  38. /package/dist/{command-defaults → server/commands/defaults}/test-ui.command.md +0 -0
  39. /package/dist/{skill-defaults → server/skills/defaults}/browser.skill.md +0 -0
@@ -2,12 +2,12 @@ import {
2
2
  maybeAutoCompactContext,
3
3
  performManualContextCompaction,
4
4
  resolveCompactionStatsIdentity
5
- } from "./chunk-N25QUEPO.js";
5
+ } from "./chunk-3WHZ47PY.js";
6
6
  import "./chunk-NBU6KIOD.js";
7
7
  import "./chunk-574HZVLE.js";
8
- import "./chunk-XFXOSPYH.js";
9
- import "./chunk-5GE3QJSZ.js";
10
- import "./chunk-7HLRI6JM.js";
8
+ import "./chunk-55N6FAAZ.js";
9
+ import "./chunk-6L3X7T4K.js";
10
+ import "./chunk-2KP34IDL.js";
11
11
  import "./chunk-NJWPSSRW.js";
12
12
  import "./chunk-22CTURMH.js";
13
13
  import "./chunk-7IOZFJBW.js";
@@ -22,4 +22,4 @@ export {
22
22
  performManualContextCompaction,
23
23
  resolveCompactionStatsIdentity
24
24
  };
25
- //# sourceMappingURL=auto-compaction-C4PMBB24.js.map
25
+ //# sourceMappingURL=auto-compaction-JZIM73ZY.js.map
@@ -1,28 +1,28 @@
1
1
  import {
2
+ buildRunChatTurnParams,
3
+ finalizeTurnCompletion,
4
+ getSessionMessageCount
5
+ } from "./chunk-SN7OBEVL.js";
6
+ import {
7
+ applyGeneratedSessionName,
2
8
  generateSessionName,
3
- needsNameGeneration
4
- } from "./chunk-QDEKU5RL.js";
9
+ needsNameGenerationCheck
10
+ } from "./chunk-F54ZJN4X.js";
5
11
  import {
6
12
  runChatTurn
7
- } from "./chunk-H22VHHQ4.js";
8
- import "./chunk-N25QUEPO.js";
13
+ } from "./chunk-YM6VHAPM.js";
14
+ import "./chunk-3WHZ47PY.js";
9
15
  import "./chunk-NBU6KIOD.js";
10
16
  import "./chunk-574HZVLE.js";
11
- import "./chunk-XFXOSPYH.js";
12
- import {
13
- getEventStore,
14
- updateSessionMetadata
15
- } from "./chunk-5GE3QJSZ.js";
17
+ import "./chunk-55N6FAAZ.js";
16
18
  import {
17
- buildMessagesFromStoredEvents,
18
- foldPendingConfirmations
19
- } from "./chunk-7HLRI6JM.js";
19
+ getEventStore
20
+ } from "./chunk-6L3X7T4K.js";
21
+ import "./chunk-2KP34IDL.js";
20
22
  import {
21
23
  createChatMessageMessage,
22
- createContextStateMessage,
23
24
  createPhaseChangedMessage,
24
- createSessionRunningMessage,
25
- createSessionStateMessage
25
+ createSessionRunningMessage
26
26
  } from "./chunk-NJWPSSRW.js";
27
27
  import "./chunk-22CTURMH.js";
28
28
  import "./chunk-7IOZFJBW.js";
@@ -61,7 +61,7 @@ async function startChatSession(sessionId, content, deps, options) {
61
61
  sessionManager.setRunning(sessionId, true);
62
62
  broadcastForSession(sessionId, createSessionRunningMessage(true));
63
63
  try {
64
- const { maybeAutoCompactContext } = await import("./auto-compaction-C4PMBB24.js");
64
+ const { maybeAutoCompactContext } = await import("./auto-compaction-JZIM73ZY.js");
65
65
  await maybeAutoCompactContext({
66
66
  sessionManager,
67
67
  sessionId,
@@ -82,13 +82,7 @@ async function startChatSession(sessionId, content, deps, options) {
82
82
  broadcastForSession(sessionId, createChatMessageMessage(userMessage));
83
83
  const messageCount = getSessionMessageCount(sessionId);
84
84
  const currentSession = sessionManager.getSession(sessionId);
85
- logger.debug("Session name generation check", {
86
- sessionId,
87
- title: currentSession?.metadata.title,
88
- messageCount,
89
- needsGeneration: currentSession ? needsNameGeneration(currentSession.metadata.title, messageCount) : false
90
- });
91
- if (currentSession && needsNameGeneration(currentSession.metadata.title, messageCount)) {
85
+ if (currentSession && needsNameGenerationCheck(sessionId, currentSession.metadata.title, messageCount)) {
92
86
  generateSessionName({
93
87
  userMessage: content,
94
88
  llmClient,
@@ -101,18 +95,11 @@ async function startChatSession(sessionId, content, deps, options) {
101
95
  error: result.error
102
96
  });
103
97
  if (result.success && result.name) {
104
- updateSessionMetadata(sessionId, { title: result.name });
105
- eventStore.append(sessionId, {
106
- type: "session.name_generated",
107
- data: { name: result.name }
98
+ applyGeneratedSessionName(sessionId, result.name, {
99
+ sessionManager,
100
+ eventStore,
101
+ broadcastForSession
108
102
  });
109
- const updatedSession = sessionManager.getSession(sessionId);
110
- if (updatedSession) {
111
- const events = eventStore.getEvents(sessionId);
112
- const messages = buildMessagesFromStoredEvents(events);
113
- const pendingConfirmations = foldPendingConfirmations(events);
114
- broadcastForSession(sessionId, createSessionStateMessage(updatedSession, messages, pendingConfirmations));
115
- }
116
103
  }
117
104
  }).catch((error) => {
118
105
  logger.error("Session name generation failed", {
@@ -128,35 +115,20 @@ async function startChatSession(sessionId, content, deps, options) {
128
115
  }
129
116
  sessionManager.setRunning(sessionId, false);
130
117
  broadcastForSession(sessionId, createSessionRunningMessage(false));
131
- const contextState = sessionManager.getContextState(sessionId);
132
- broadcastForSession(sessionId, createContextStateMessage(contextState));
118
+ finalizeTurnCompletion(sessionId, sessionManager, broadcastForSession);
133
119
  throw error;
134
120
  }
135
121
  }
136
- function getSessionMessageCount(sessionId) {
137
- const eventStore = getEventStore();
138
- const events = eventStore.getEvents(sessionId);
139
- let count = 0;
140
- for (const event of events) {
141
- if (event.type === "message.start") {
142
- const data = event.data;
143
- if (data.role === "user") {
144
- count++;
145
- }
146
- }
147
- }
148
- return count;
149
- }
150
122
  function startTurnWithCompletionChain(sessionId, controller, deps) {
151
123
  const { sessionManager, llmClient, statsIdentity, broadcastForSession } = deps;
152
- runChatTurn({
124
+ runChatTurn(buildRunChatTurnParams({
153
125
  sessionManager,
154
126
  sessionId,
155
127
  llmClient,
156
128
  statsIdentity,
157
129
  signal: controller.signal,
158
130
  onMessage: (msg) => broadcastForSession(sessionId, msg)
159
- }).catch((error) => {
131
+ })).catch((error) => {
160
132
  if (error instanceof Error && error.message === "Aborted") {
161
133
  return;
162
134
  }
@@ -183,9 +155,7 @@ function startTurnWithCompletionChain(sessionId, controller, deps) {
183
155
  return;
184
156
  }
185
157
  sessionManager.clearMessageQueue(sessionId);
186
- sessionManager.setRunning(sessionId, false);
187
- const contextState = sessionManager.getContextState(sessionId);
188
- broadcastForSession(sessionId, createContextStateMessage(contextState));
158
+ finalizeTurnCompletion(sessionId, sessionManager, broadcastForSession);
189
159
  });
190
160
  }
191
161
  function stopSessionExecution(sessionId, sessionManager) {
@@ -200,4 +170,4 @@ export {
200
170
  startChatSession,
201
171
  stopSessionExecution
202
172
  };
203
- //# sourceMappingURL=chat-handler-US3QOOE4.js.map
173
+ //# sourceMappingURL=chat-handler-F2A2IMQB.js.map
@@ -1,152 +1,91 @@
1
- // src/server/events/folding.ts
2
- import stripAnsi from "strip-ansi";
3
- function cloneMessage(message) {
1
+ // src/server/events/apply-events.ts
2
+ function extractMessageOptionalFields(data) {
4
3
  return {
5
- ...message,
6
- ...message.attachments ? { attachments: [...message.attachments] } : {},
7
- ...message.toolCalls ? {
8
- toolCalls: message.toolCalls.map((toolCall) => ({
9
- ...toolCall,
10
- ...toolCall.streamingOutput ? { streamingOutput: [...toolCall.streamingOutput] } : {},
11
- ...toolCall.result ? { result: { ...toolCall.result } } : {}
12
- }))
13
- } : {},
14
- ...message.segments ? { segments: [...message.segments] } : {},
15
- ...message.preparingToolCalls ? { preparingToolCalls: [...message.preparingToolCalls] } : {}
4
+ ...data.tokenCount !== void 0 && { tokenCount: data.tokenCount },
5
+ ...data.contextWindowId !== void 0 && { contextWindowId: data.contextWindowId },
6
+ ...data.subAgentId !== void 0 && { subAgentId: data.subAgentId },
7
+ ...data.subAgentType !== void 0 && { subAgentType: data.subAgentType },
8
+ ...data.isSystemGenerated !== void 0 && { isSystemGenerated: data.isSystemGenerated },
9
+ ...data.messageKind !== void 0 && { messageKind: data.messageKind },
10
+ ...data.isCompactionSummary !== void 0 && { isCompactionSummary: data.isCompactionSummary },
11
+ ...data.attachments !== void 0 && { attachments: data.attachments },
12
+ ...data.metadata !== void 0 && { metadata: data.metadata }
16
13
  };
17
14
  }
18
- function snapshotMessageToMessage(message) {
19
- return cloneMessage({
20
- id: message.id,
21
- role: message.role,
22
- content: message.content,
23
- timestamp: new Date(message.timestamp).toISOString(),
24
- ...message.tokenCount !== void 0 && { tokenCount: message.tokenCount },
25
- ...message.isStreaming !== void 0 && { isStreaming: message.isStreaming },
26
- ...message.contextWindowId !== void 0 && { contextWindowId: message.contextWindowId },
27
- ...message.subAgentId !== void 0 && { subAgentId: message.subAgentId },
28
- ...message.subAgentType !== void 0 && { subAgentType: message.subAgentType },
29
- ...message.isSystemGenerated !== void 0 && { isSystemGenerated: message.isSystemGenerated },
30
- ...message.messageKind !== void 0 && { messageKind: message.messageKind },
31
- ...message.isCompactionSummary !== void 0 && { isCompactionSummary: message.isCompactionSummary },
32
- ...message.attachments !== void 0 && { attachments: message.attachments },
33
- ...message.thinkingContent !== void 0 && { thinkingContent: message.thinkingContent },
34
- ...message.toolCalls !== void 0 && { toolCalls: message.toolCalls },
35
- ...message.segments !== void 0 && { segments: message.segments },
36
- ...message.stats !== void 0 && { stats: message.stats },
37
- ...message.partial !== void 0 && { partial: message.partial },
38
- ...message.promptContext !== void 0 && { promptContext: message.promptContext },
39
- ...message.metadata !== void 0 && { metadata: message.metadata }
40
- });
15
+ function attachToolCallToMessage(msg, toolCall) {
16
+ const existing = msg.toolCalls ?? [];
17
+ const newTc = { ...toolCall };
18
+ msg.toolCalls = [...existing, newTc];
41
19
  }
42
- function shouldIncludeContextMessage(message, windowId, options) {
43
- const includeVerifier = options?.includeVerifier ?? true;
44
- return message.role !== "system" && (windowId === void 0 || message.contextWindowId === windowId) && (includeVerifier || message.subAgentType !== "verifier") && !message.subAgentId;
45
- }
46
- function appendSnapshotMessageContext(result, message) {
47
- const contextMsg = {
48
- role: message.role,
49
- content: message.content
50
- };
51
- if (message.toolCalls && message.toolCalls.length > 0) {
52
- contextMsg.toolCalls = message.toolCalls.map((toolCall) => ({
53
- id: toolCall.id,
54
- name: toolCall.name,
55
- arguments: toolCall.arguments
56
- }));
57
- }
58
- if (message.attachments !== void 0) {
59
- contextMsg.attachments = message.attachments;
60
- }
61
- result.push(contextMsg);
62
- if (!message.toolCalls) {
63
- return;
64
- }
65
- for (const toolCall of message.toolCalls) {
66
- if (!toolCall.result) {
67
- continue;
20
+ function attachToolResultToMessage(msg, toolCallId, result) {
21
+ if (msg.toolCalls) {
22
+ const toolCall = msg.toolCalls.find((tc) => tc.id === toolCallId);
23
+ if (toolCall) {
24
+ toolCall.result = result;
68
25
  }
69
- result.push({
70
- role: "tool",
71
- content: stripAnsi(toolCall.result.success ? toolCall.result.output ?? "Success" : toolCall.result.output ? `${toolCall.result.output}
72
-
73
- Error: ${toolCall.result.error}` : `Error: ${toolCall.result.error}`),
74
- toolCallId: toolCall.id
75
- });
76
26
  }
77
27
  }
78
- function applyStoredMessageEvents(initialMessages, events) {
79
- const messages = new Map(initialMessages.map((message) => [message.id, cloneMessage(message)]));
28
+ function updateMessageDelta(msg, content) {
29
+ msg.content += content;
30
+ }
31
+ function updateMessageThinking(msg, content) {
32
+ msg.thinkingContent = (msg.thinkingContent ?? "") + content;
33
+ }
34
+ function updateMessageDone(msg, data) {
35
+ msg.isStreaming = false;
36
+ if (data.stats) msg.stats = data.stats;
37
+ if (data.segments) msg.segments = data.segments;
38
+ if (data.partial) msg.partial = true;
39
+ if (data.promptContext) msg.promptContext = data.promptContext;
40
+ if (data.tokenCount !== void 0) msg.tokenCount = data.tokenCount;
41
+ }
42
+ function applyEvents(initialMessages, events, options) {
43
+ const messages = new Map(initialMessages.map((message) => [message.id, deepCloneMessage(message)]));
80
44
  for (const event of events) {
81
45
  switch (event.type) {
82
46
  case "message.start": {
83
47
  const data = event.data;
84
48
  const isUserOrSystem = data.role === "user" || data.role === "system";
49
+ const timestamp = options.timestampAsNumber ? typeof event.timestamp === "number" ? event.timestamp : Date.now() : new Date(event.timestamp).toISOString();
85
50
  messages.set(data.messageId, {
86
51
  id: data.messageId,
87
52
  role: data.role,
88
53
  content: data.content ?? "",
89
- timestamp: new Date(event.timestamp).toISOString(),
90
- tokenCount: data.tokenCount ?? 0,
54
+ timestamp,
91
55
  isStreaming: !isUserOrSystem,
92
- ...data.contextWindowId !== void 0 && { contextWindowId: data.contextWindowId },
93
- ...data.subAgentId !== void 0 && { subAgentId: data.subAgentId },
94
- ...data.subAgentType !== void 0 && { subAgentType: data.subAgentType },
95
- ...data.isSystemGenerated !== void 0 && { isSystemGenerated: data.isSystemGenerated },
96
- ...data.messageKind !== void 0 && { messageKind: data.messageKind },
97
- ...data.isCompactionSummary !== void 0 && { isCompactionSummary: data.isCompactionSummary },
98
- ...data.attachments !== void 0 && { attachments: data.attachments },
99
- ...data.metadata !== void 0 && { metadata: data.metadata }
56
+ tokenCount: data.tokenCount ?? 0,
57
+ ...extractMessageOptionalFields(data)
100
58
  });
101
59
  break;
102
60
  }
103
61
  case "message.delta": {
104
62
  const data = event.data;
105
63
  const msg = messages.get(data.messageId);
106
- if (msg) {
107
- msg.content += data.content;
108
- }
64
+ if (msg) updateMessageDelta(msg, data.content);
109
65
  break;
110
66
  }
111
67
  case "message.thinking": {
112
68
  const data = event.data;
113
69
  const msg = messages.get(data.messageId);
114
- if (msg) {
115
- msg.thinkingContent = (msg.thinkingContent ?? "") + data.content;
116
- }
70
+ if (msg) updateMessageThinking(msg, data.content);
117
71
  break;
118
72
  }
119
73
  case "message.done": {
120
74
  const data = event.data;
121
75
  const msg = messages.get(data.messageId);
122
- if (msg) {
123
- msg.isStreaming = false;
124
- if (data.stats) msg.stats = data.stats;
125
- if (data.segments) msg.segments = data.segments;
126
- if (data.partial) msg.partial = data.partial;
127
- if (data.promptContext) msg.promptContext = data.promptContext;
128
- if (data.tokenCount !== void 0) msg.tokenCount = data.tokenCount;
129
- }
76
+ if (msg) updateMessageDone(msg, data);
130
77
  break;
131
78
  }
132
79
  case "tool.call": {
133
80
  const data = event.data;
134
81
  const msg = messages.get(data.messageId);
135
- if (msg) {
136
- const existingToolCalls = msg.toolCalls ?? [];
137
- msg.toolCalls = [...existingToolCalls, data.toolCall];
138
- }
82
+ if (msg) attachToolCallToMessage(msg, data.toolCall);
139
83
  break;
140
84
  }
141
85
  case "tool.result": {
142
86
  const data = event.data;
143
87
  const msg = messages.get(data.messageId);
144
- if (msg?.toolCalls) {
145
- const toolCall = msg.toolCalls.find((tc) => tc.id === data.toolCallId);
146
- if (toolCall) {
147
- toolCall.result = data.result;
148
- }
149
- }
88
+ if (msg) attachToolResultToMessage(msg, data.toolCallId, data.result);
150
89
  break;
151
90
  }
152
91
  case "session.initialized":
@@ -170,7 +109,48 @@ function applyStoredMessageEvents(initialMessages, events) {
170
109
  }
171
110
  return Array.from(messages.values());
172
111
  }
173
- function cloneSnapshotMessage(message) {
112
+ function deepCloneMessage(msg) {
113
+ const cloned = { ...msg };
114
+ const obj = cloned;
115
+ if (obj["toolCalls"]) {
116
+ obj["toolCalls"] = obj["toolCalls"].map((tc) => ({ ...tc, ...tc.result ? { result: { ...tc.result } } : {} }));
117
+ }
118
+ if (obj["segments"]) {
119
+ obj["segments"] = [...obj["segments"]];
120
+ }
121
+ if (obj["attachments"]) {
122
+ obj["attachments"] = [...obj["attachments"]];
123
+ }
124
+ return cloned;
125
+ }
126
+
127
+ // src/server/events/optimize-storage.ts
128
+ function stripPromptContextMessages(messages) {
129
+ let lastAssistantIdx = -1;
130
+ for (let i = messages.length - 1; i >= 0; i--) {
131
+ const msg = messages[i];
132
+ if (!msg) continue;
133
+ if (msg.role === "assistant" && msg.promptContext) {
134
+ lastAssistantIdx = i;
135
+ break;
136
+ }
137
+ }
138
+ let changed = false;
139
+ for (let i = 0; i < messages.length; i++) {
140
+ const msg = messages[i];
141
+ if (!msg) continue;
142
+ const pc = msg.promptContext;
143
+ if (pc && pc.messages && pc.messages.length > 0 && i !== lastAssistantIdx) {
144
+ pc.messages = [];
145
+ changed = true;
146
+ }
147
+ }
148
+ return changed;
149
+ }
150
+
151
+ // src/server/events/folding.ts
152
+ import stripAnsi from "strip-ansi";
153
+ function cloneMessage(message) {
174
154
  return {
175
155
  ...message,
176
156
  ...message.attachments ? { attachments: [...message.attachments] } : {},
@@ -181,86 +161,81 @@ function cloneSnapshotMessage(message) {
181
161
  ...toolCall.result ? { result: { ...toolCall.result } } : {}
182
162
  }))
183
163
  } : {},
184
- ...message.segments ? { segments: [...message.segments] } : {}
164
+ ...message.segments ? { segments: [...message.segments] } : {},
165
+ ...message.preparingToolCalls ? { preparingToolCalls: [...message.preparingToolCalls] } : {}
185
166
  };
186
167
  }
187
- function applyTurnEventsToSnapshotMessages(initialMessages, events) {
188
- const messages = new Map(initialMessages.map((message) => [message.id, cloneSnapshotMessage(message)]));
189
- for (const event of events) {
190
- switch (event.type) {
191
- case "message.start": {
192
- const data = event.data;
193
- const msg = {
194
- id: data.messageId,
195
- role: data.role,
196
- content: data.content ?? "",
197
- timestamp: typeof event.timestamp === "number" ? event.timestamp : Date.now(),
198
- isStreaming: true
199
- };
200
- if (data.tokenCount !== void 0) msg.tokenCount = data.tokenCount;
201
- if (data.contextWindowId !== void 0) msg.contextWindowId = data.contextWindowId;
202
- if (data.subAgentId !== void 0) msg.subAgentId = data.subAgentId;
203
- if (data.subAgentType !== void 0) msg.subAgentType = data.subAgentType;
204
- if (data.isSystemGenerated !== void 0) msg.isSystemGenerated = data.isSystemGenerated;
205
- if (data.messageKind !== void 0) msg.messageKind = data.messageKind;
206
- if (data.isCompactionSummary !== void 0) msg.isCompactionSummary = data.isCompactionSummary;
207
- if (data.attachments !== void 0) msg.attachments = data.attachments;
208
- if (data.metadata !== void 0) msg.metadata = data.metadata;
209
- messages.set(data.messageId, msg);
210
- break;
211
- }
212
- case "message.delta": {
213
- const data = event.data;
214
- const msg = messages.get(data.messageId);
215
- if (msg) {
216
- msg.content += data.content;
217
- }
218
- break;
219
- }
220
- case "message.thinking": {
221
- const data = event.data;
222
- const msg = messages.get(data.messageId);
223
- if (msg) {
224
- msg.thinkingContent = (msg.thinkingContent ?? "") + data.content;
225
- }
226
- break;
227
- }
228
- case "message.done": {
229
- const data = event.data;
230
- const msg = messages.get(data.messageId);
231
- if (msg) {
232
- msg.isStreaming = false;
233
- if (data.stats) msg.stats = data.stats;
234
- if (data.segments) msg.segments = data.segments;
235
- if (data.partial) msg.partial = data.partial;
236
- if (data.promptContext) msg.promptContext = data.promptContext;
237
- if (data.tokenCount !== void 0) msg.tokenCount = data.tokenCount;
238
- }
239
- break;
240
- }
241
- case "tool.call": {
242
- const data = event.data;
243
- const msg = messages.get(data.messageId);
244
- if (msg) {
245
- const toolCalls = msg.toolCalls ?? [];
246
- msg.toolCalls = [...toolCalls, data.toolCall];
247
- }
248
- break;
249
- }
250
- case "tool.result": {
251
- const data = event.data;
252
- const msg = messages.get(data.messageId);
253
- if (msg?.toolCalls) {
254
- const toolCall = msg.toolCalls.find((tc) => tc.id === data.toolCallId);
255
- if (toolCall) {
256
- toolCall.result = data.result;
257
- }
258
- }
259
- break;
260
- }
168
+ function spreadOptionalMessageFields(message) {
169
+ return {
170
+ ...message.thinkingContent !== void 0 && { thinkingContent: message.thinkingContent },
171
+ ...message.toolCalls !== void 0 && { toolCalls: message.toolCalls },
172
+ ...message.segments !== void 0 && { segments: message.segments },
173
+ ...message.stats !== void 0 && { stats: message.stats },
174
+ ...message.tokenCount !== void 0 && { tokenCount: message.tokenCount },
175
+ ...message.isStreaming !== void 0 && { isStreaming: message.isStreaming },
176
+ ...message.partial !== void 0 && { partial: message.partial },
177
+ ...message.subAgentId !== void 0 && { subAgentId: message.subAgentId },
178
+ ...message.subAgentType !== void 0 && { subAgentType: message.subAgentType },
179
+ ...message.isSystemGenerated !== void 0 && { isSystemGenerated: message.isSystemGenerated },
180
+ ...message.messageKind !== void 0 && { messageKind: message.messageKind },
181
+ ...message.contextWindowId !== void 0 && { contextWindowId: message.contextWindowId },
182
+ ...message.isCompactionSummary !== void 0 && { isCompactionSummary: message.isCompactionSummary },
183
+ ...message.promptContext !== void 0 && { promptContext: message.promptContext },
184
+ ...message.attachments !== void 0 && { attachments: message.attachments },
185
+ ...message.metadata !== void 0 && { metadata: message.metadata }
186
+ };
187
+ }
188
+ function snapshotMessageToMessage(message) {
189
+ return cloneMessage({
190
+ id: message.id,
191
+ role: message.role,
192
+ content: message.content,
193
+ timestamp: new Date(message.timestamp).toISOString(),
194
+ ...spreadOptionalMessageFields(message)
195
+ });
196
+ }
197
+ function shouldIncludeContextMessage(message, windowId, options) {
198
+ const includeVerifier = options?.includeVerifier ?? true;
199
+ return message.role !== "system" && (windowId === void 0 || message.contextWindowId === windowId) && (includeVerifier || message.subAgentType !== "verifier") && !message.subAgentId;
200
+ }
201
+ function appendSnapshotMessageContext(result, message) {
202
+ const contextMsg = {
203
+ role: message.role,
204
+ content: message.content
205
+ };
206
+ if (message.toolCalls && message.toolCalls.length > 0) {
207
+ contextMsg.toolCalls = message.toolCalls.map((toolCall) => ({
208
+ id: toolCall.id,
209
+ name: toolCall.name,
210
+ arguments: toolCall.arguments
211
+ }));
212
+ }
213
+ if (message.attachments !== void 0) {
214
+ contextMsg.attachments = message.attachments;
215
+ }
216
+ result.push(contextMsg);
217
+ if (!message.toolCalls) {
218
+ return;
219
+ }
220
+ for (const toolCall of message.toolCalls) {
221
+ if (!toolCall.result) {
222
+ continue;
261
223
  }
224
+ result.push({
225
+ role: "tool",
226
+ content: stripAnsi(toolCall.result.success ? toolCall.result.output ?? "Success" : toolCall.result.output ? `${toolCall.result.output}
227
+
228
+ Error: ${toolCall.result.error}` : `Error: ${toolCall.result.error}`),
229
+ toolCallId: toolCall.id
230
+ });
262
231
  }
263
- return Array.from(messages.values());
232
+ }
233
+ function applyStoredMessageEvents(initialMessages, events) {
234
+ return applyEvents(initialMessages, events, { timestampAsNumber: false });
235
+ }
236
+ function applyTurnEventsToSnapshotMessages(initialMessages, events) {
237
+ const messages = applyEvents(initialMessages, events, { timestampAsNumber: true });
238
+ return messages.map((msg) => ({ ...msg, isStreaming: msg.isStreaming ?? true }));
264
239
  }
265
240
  function buildMessagesFromStoredEvents(events) {
266
241
  const snapshotEvent = [...events].reverse().find((event) => event.type === "turn.snapshot");
@@ -586,26 +561,6 @@ function buildSnapshot(foldedState, latestSeq, snapshotAt = Date.now()) {
586
561
  snapshotAt
587
562
  };
588
563
  }
589
- function stripPromptContextMessages(messages) {
590
- let lastAssistantIdx = -1;
591
- for (let i = messages.length - 1; i >= 0; i--) {
592
- const msg = messages[i];
593
- if (!msg) continue;
594
- if (msg.role === "assistant" && msg.promptContext) {
595
- lastAssistantIdx = i;
596
- break;
597
- }
598
- }
599
- for (let i = 0; i < messages.length; i++) {
600
- const msg = messages[i];
601
- if (!msg) continue;
602
- const pc = msg.promptContext;
603
- if (pc && i !== lastAssistantIdx) {
604
- const { messages: _msgs, ...rest } = pc;
605
- msg.promptContext = { ...rest, messages: [] };
606
- }
607
- }
608
- }
609
564
  function buildSnapshotFromSessionState(input) {
610
565
  const { session, events, latestSeq, snapshotAt = Date.now(), maxTokens = 2e5 } = input;
611
566
  let initialWindowId = "";
@@ -661,6 +616,8 @@ function buildContextMessagesFromMessages(messages, windowId) {
661
616
  }
662
617
 
663
618
  export {
619
+ stripPromptContextMessages,
620
+ spreadOptionalMessageFields,
664
621
  buildMessagesFromStoredEvents,
665
622
  buildContextMessagesFromStoredEvents,
666
623
  buildContextMessagesFromEventHistory,
@@ -678,4 +635,4 @@ export {
678
635
  getMessagesForWindow,
679
636
  buildContextMessagesFromMessages
680
637
  };
681
- //# sourceMappingURL=chunk-7HLRI6JM.js.map
638
+ //# sourceMappingURL=chunk-2KP34IDL.js.map