openfox 1.6.14 → 1.6.16
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/{auto-compaction-C4PMBB24.js → auto-compaction-2RKC6DC2.js} +5 -5
- package/dist/{chat-handler-US3QOOE4.js → chat-handler-IY2XVOO6.js} +26 -56
- package/dist/{chunk-7HLRI6JM.js → chunk-2KP34IDL.js} +161 -204
- package/dist/{chunk-N25QUEPO.js → chunk-4OI4VPZ6.js} +434 -812
- package/dist/{chunk-XFXOSPYH.js → chunk-55N6FAAZ.js} +1 -1
- package/dist/{chunk-5GE3QJSZ.js → chunk-6L3X7T4K.js} +82 -160
- package/dist/{chunk-QDEKU5RL.js → chunk-F54ZJN4X.js} +38 -2
- package/dist/{chunk-UL4JYQKK.js → chunk-IN5EP4ZB.js} +2 -2
- package/dist/{chunk-OOIRCXAY.js → chunk-KOUMYBYM.js} +53 -112
- package/dist/{chunk-3JU6H6A4.js → chunk-NN65D5SI.js} +426 -448
- package/dist/{chunk-3XZ23PXM.js → chunk-OVLFEBRR.js} +76 -92
- package/dist/chunk-SN7OBEVL.js +44 -0
- package/dist/{chunk-PCOG5FQD.js → chunk-T5PBG2PE.js} +6 -6
- package/dist/{chunk-H22VHHQ4.js → chunk-U54QVKL2.js} +4 -4
- package/dist/{chunk-J2DHVXRX.js → chunk-ZDNXCVW4.js} +2 -2
- package/dist/cli/dev.js +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/{config-DEM6ASQM.js → config-67AX6CNS.js} +5 -5
- package/dist/{events-VDAC7E7K.js → events-2ETDOE5B.js} +3 -3
- package/dist/{folding-NDFQCISZ.js → folding-M7FMUBOL.js} +6 -4
- package/dist/{orchestrator-KZI7B5IS.js → orchestrator-U5VCLBYQ.js} +6 -6
- package/dist/package.json +13 -3
- package/dist/{processor-KBSF2HFD.js → processor-VUEJM73B.js} +24 -49
- package/dist/{provider-K3PHZO27.js → provider-DKGBQHUS.js} +7 -7
- package/dist/{serve-DERN4AB6.js → serve-GOLQMQFA.js} +12 -12
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.js +10 -10
- package/dist/{tools-PLVK22CF.js → tools-55YICCVH.js} +5 -5
- package/dist/{vision-fallback-NOC3YYIB.js → vision-fallback-ADYRFFD4.js} +2 -2
- package/dist/web/assets/index-CZBXRYpK.js +150 -0
- package/dist/web/assets/{index-MCWDS5UQ.css → index-D4V7Gtvt.css} +1 -1
- package/dist/web/index.html +2 -2
- package/dist/web/sw.js +1 -1
- package/package.json +13 -3
- package/dist/web/assets/index-Ccy2Csbl.js +0 -150
- /package/dist/{command-defaults → server/commands/defaults}/commit-push.command.md +0 -0
- /package/dist/{command-defaults → server/commands/defaults}/init.command.md +0 -0
- /package/dist/{command-defaults → server/commands/defaults}/test-ui.command.md +0 -0
- /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-
|
|
5
|
+
} from "./chunk-4OI4VPZ6.js";
|
|
6
6
|
import "./chunk-NBU6KIOD.js";
|
|
7
7
|
import "./chunk-574HZVLE.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
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-
|
|
25
|
+
//# sourceMappingURL=auto-compaction-2RKC6DC2.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
|
-
|
|
4
|
-
} from "./chunk-
|
|
9
|
+
needsNameGenerationCheck
|
|
10
|
+
} from "./chunk-F54ZJN4X.js";
|
|
5
11
|
import {
|
|
6
12
|
runChatTurn
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
13
|
+
} from "./chunk-U54QVKL2.js";
|
|
14
|
+
import "./chunk-4OI4VPZ6.js";
|
|
9
15
|
import "./chunk-NBU6KIOD.js";
|
|
10
16
|
import "./chunk-574HZVLE.js";
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import {
|
|
13
|
-
getEventStore,
|
|
14
|
-
updateSessionMetadata
|
|
15
|
-
} from "./chunk-5GE3QJSZ.js";
|
|
17
|
+
import "./chunk-55N6FAAZ.js";
|
|
16
18
|
import {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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-
|
|
64
|
+
const { maybeAutoCompactContext } = await import("./auto-compaction-2RKC6DC2.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
|
-
|
|
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
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
173
|
+
//# sourceMappingURL=chat-handler-IY2XVOO6.js.map
|
|
@@ -1,152 +1,91 @@
|
|
|
1
|
-
// src/server/events/
|
|
2
|
-
|
|
3
|
-
function cloneMessage(message) {
|
|
1
|
+
// src/server/events/apply-events.ts
|
|
2
|
+
function extractMessageOptionalFields(data) {
|
|
4
3
|
return {
|
|
5
|
-
...
|
|
6
|
-
...
|
|
7
|
-
...
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
|
79
|
-
|
|
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
|
|
90
|
-
tokenCount: data.tokenCount ?? 0,
|
|
54
|
+
timestamp,
|
|
91
55
|
isStreaming: !isUserOrSystem,
|
|
92
|
-
|
|
93
|
-
...data
|
|
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
|
|
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
|
|
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
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
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
|
-
|
|
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-
|
|
638
|
+
//# sourceMappingURL=chunk-2KP34IDL.js.map
|