openfox 1.6.77 → 1.6.78
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-GOHNI2R2.js → auto-compaction-AN3U2AD5.js} +5 -5
- package/dist/{chat-handler-K2RDXBO6.js → chat-handler-AIBOSHAQ.js} +8 -8
- package/dist/{chunk-I7JVS7V5.js → chunk-2IZMUXMP.js} +3 -3
- package/dist/{chunk-XSUQDB6R.js → chunk-DKKDNJT7.js} +36 -22
- package/dist/{chunk-XKIEDGQF.js → chunk-DL6ZILAF.js} +1 -2
- package/dist/{chunk-EBQYRNNU.js → chunk-GLVNO4DS.js} +167 -92
- package/dist/{chunk-6SYNGMU4.js → chunk-NWXLRRDD.js} +4 -4
- package/dist/{chunk-UVN6AKIO.js → chunk-RJRG2VER.js} +33 -2
- package/dist/{chunk-BBC46FN4.js → chunk-TS5XFQ2D.js} +88 -48
- package/dist/{chunk-OJBFC6ER.js → chunk-VSYJIPRI.js} +3 -3
- package/dist/cli/dev.js +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/{events-5RIXWI5Y.js → events-ND5GZBT2.js} +7 -5
- package/dist/{folding-JNOUTI5Z.js → folding-XIKR6AFM.js} +14 -4
- package/dist/{inspect-proxy-Y75AXMRX.js → inspect-proxy-42ZXL2R5.js} +2 -2
- package/dist/{orchestrator-TW5II347.js → orchestrator-5BY2MH72.js} +6 -6
- package/dist/package.json +1 -1
- package/dist/{processor-MZ3QIUED.js → processor-PV446N55.js} +5 -5
- package/dist/{serve-FTTLGRAO.js → serve-6ME66XOO.js} +7 -7
- package/dist/server/index.js +6 -6
- package/dist/{service-D6LC3CAM.js → service-TU4XSXYJ.js} +33 -2
- package/dist/{tools-QJ5K5IJP.js → tools-6DXPHBUV.js} +5 -5
- package/dist/web/assets/{index-FjLp1t6r.js → index-0igqGWob.js} +49 -49
- package/dist/web/index.html +1 -1
- package/dist/web/sw.js +1 -1
- package/package.json +1 -1
|
@@ -2,16 +2,16 @@ import {
|
|
|
2
2
|
maybeAutoCompactContext,
|
|
3
3
|
performManualContextCompaction,
|
|
4
4
|
resolveCompactionStatsIdentity
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-GLVNO4DS.js";
|
|
6
6
|
import "./chunk-OXI26S7U.js";
|
|
7
7
|
import "./chunk-CMQCO27Y.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-DL6ZILAF.js";
|
|
9
9
|
import "./chunk-PBGOZMVY.js";
|
|
10
10
|
import "./chunk-VRGRAQDG.js";
|
|
11
11
|
import "./chunk-CUDAT6SS.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-RJRG2VER.js";
|
|
13
13
|
import "./chunk-KIOUKC3Z.js";
|
|
14
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-TS5XFQ2D.js";
|
|
15
15
|
import "./chunk-STYHKCG7.js";
|
|
16
16
|
import "./chunk-BJYPTN5S.js";
|
|
17
17
|
import "./chunk-NDJ6FKSP.js";
|
|
@@ -24,4 +24,4 @@ export {
|
|
|
24
24
|
performManualContextCompaction,
|
|
25
25
|
resolveCompactionStatsIdentity
|
|
26
26
|
};
|
|
27
|
-
//# sourceMappingURL=auto-compaction-
|
|
27
|
+
//# sourceMappingURL=auto-compaction-AN3U2AD5.js.map
|
|
@@ -5,22 +5,22 @@ import {
|
|
|
5
5
|
generateSessionName,
|
|
6
6
|
getSessionMessageCount,
|
|
7
7
|
needsNameGenerationCheck
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-2IZMUXMP.js";
|
|
9
9
|
import {
|
|
10
10
|
runChatTurn
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-NWXLRRDD.js";
|
|
12
|
+
import "./chunk-GLVNO4DS.js";
|
|
13
13
|
import "./chunk-OXI26S7U.js";
|
|
14
14
|
import "./chunk-CMQCO27Y.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-DL6ZILAF.js";
|
|
16
16
|
import "./chunk-PBGOZMVY.js";
|
|
17
17
|
import "./chunk-VRGRAQDG.js";
|
|
18
18
|
import "./chunk-CUDAT6SS.js";
|
|
19
19
|
import {
|
|
20
20
|
getEventStore
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-RJRG2VER.js";
|
|
22
22
|
import "./chunk-KIOUKC3Z.js";
|
|
23
|
-
import "./chunk-
|
|
23
|
+
import "./chunk-TS5XFQ2D.js";
|
|
24
24
|
import {
|
|
25
25
|
createChatMessageMessage,
|
|
26
26
|
createPhaseChangedMessage,
|
|
@@ -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-AN3U2AD5.js");
|
|
65
65
|
await maybeAutoCompactContext({
|
|
66
66
|
sessionManager,
|
|
67
67
|
sessionId,
|
|
@@ -172,4 +172,4 @@ export {
|
|
|
172
172
|
startChatSession,
|
|
173
173
|
stopSessionExecution
|
|
174
174
|
};
|
|
175
|
-
//# sourceMappingURL=chat-handler-
|
|
175
|
+
//# sourceMappingURL=chat-handler-AIBOSHAQ.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getEventStore,
|
|
3
3
|
updateSessionMetadata
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-RJRG2VER.js";
|
|
5
5
|
import {
|
|
6
6
|
buildMessagesFromStoredEvents,
|
|
7
7
|
foldPendingConfirmations
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-TS5XFQ2D.js";
|
|
9
9
|
import {
|
|
10
10
|
createContextStateMessage,
|
|
11
11
|
createSessionStateMessage
|
|
@@ -143,4 +143,4 @@ export {
|
|
|
143
143
|
needsNameGenerationCheck,
|
|
144
144
|
applyGeneratedSessionName
|
|
145
145
|
};
|
|
146
|
-
//# sourceMappingURL=chunk-
|
|
146
|
+
//# sourceMappingURL=chunk-2IZMUXMP.js.map
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
createVerifierNudgeConfig,
|
|
3
3
|
runBuilderTurn,
|
|
4
4
|
runChatTurn
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-NWXLRRDD.js";
|
|
6
6
|
import {
|
|
7
7
|
TurnMetrics,
|
|
8
8
|
agentExists,
|
|
@@ -37,7 +37,7 @@ import {
|
|
|
37
37
|
setSkillEnabled,
|
|
38
38
|
skillExists,
|
|
39
39
|
spawnShellProcess
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-GLVNO4DS.js";
|
|
41
41
|
import {
|
|
42
42
|
getProject
|
|
43
43
|
} from "./chunk-CMQCO27Y.js";
|
|
@@ -87,14 +87,14 @@ import {
|
|
|
87
87
|
updateSessionProvider,
|
|
88
88
|
updateSessionRunning,
|
|
89
89
|
updateSessionSummary
|
|
90
|
-
} from "./chunk-
|
|
90
|
+
} from "./chunk-RJRG2VER.js";
|
|
91
91
|
import {
|
|
92
92
|
initDatabase
|
|
93
93
|
} from "./chunk-KIOUKC3Z.js";
|
|
94
94
|
import {
|
|
95
95
|
buildMessagesFromStoredEvents,
|
|
96
96
|
foldPendingConfirmations
|
|
97
|
-
} from "./chunk-
|
|
97
|
+
} from "./chunk-TS5XFQ2D.js";
|
|
98
98
|
import {
|
|
99
99
|
createChatErrorMessage,
|
|
100
100
|
createChatMessageMessage,
|
|
@@ -5242,7 +5242,7 @@ function createTerminalRoutes() {
|
|
|
5242
5242
|
}
|
|
5243
5243
|
|
|
5244
5244
|
// src/constants.ts
|
|
5245
|
-
var VERSION = "1.6.
|
|
5245
|
+
var VERSION = "1.6.78";
|
|
5246
5246
|
|
|
5247
5247
|
// src/server/index.ts
|
|
5248
5248
|
var __dirname2 = dirname5(fileURLToPath4(import.meta.url));
|
|
@@ -5404,7 +5404,7 @@ async function createServerHandle(config) {
|
|
|
5404
5404
|
res.json({ success: true });
|
|
5405
5405
|
});
|
|
5406
5406
|
app.get("/api/sessions", async (req, res) => {
|
|
5407
|
-
const { getRecentUserPromptsForSession } = await import("./events-
|
|
5407
|
+
const { getRecentUserPromptsForSession } = await import("./events-ND5GZBT2.js");
|
|
5408
5408
|
const projectId = req.query["projectId"];
|
|
5409
5409
|
const limit = Math.min(parseInt(req.query["limit"]) || 20, 100);
|
|
5410
5410
|
const offset = parseInt(req.query["offset"]) || 0;
|
|
@@ -5437,8 +5437,8 @@ async function createServerHandle(config) {
|
|
|
5437
5437
|
res.status(201).json({ session });
|
|
5438
5438
|
});
|
|
5439
5439
|
app.get("/api/sessions/:id", async (req, res) => {
|
|
5440
|
-
const { getEventStore: getEventStore2 } = await import("./events-
|
|
5441
|
-
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-
|
|
5440
|
+
const { getEventStore: getEventStore2 } = await import("./events-ND5GZBT2.js");
|
|
5441
|
+
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-XIKR6AFM.js");
|
|
5442
5442
|
const session = sessionManager.getSession(req.params.id);
|
|
5443
5443
|
if (!session) {
|
|
5444
5444
|
return res.status(404).json({ error: "Session not found" });
|
|
@@ -5468,8 +5468,8 @@ async function createServerHandle(config) {
|
|
|
5468
5468
|
res.json({ success: true });
|
|
5469
5469
|
});
|
|
5470
5470
|
app.post("/api/sessions/:id/provider", async (req, res) => {
|
|
5471
|
-
const { getEventStore: getEventStore2 } = await import("./events-
|
|
5472
|
-
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-
|
|
5471
|
+
const { getEventStore: getEventStore2 } = await import("./events-ND5GZBT2.js");
|
|
5472
|
+
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-XIKR6AFM.js");
|
|
5473
5473
|
const sessionId = req.params.id;
|
|
5474
5474
|
const session = sessionManager.getSession(sessionId);
|
|
5475
5475
|
if (!session) {
|
|
@@ -5506,8 +5506,8 @@ async function createServerHandle(config) {
|
|
|
5506
5506
|
res.json({ success: true });
|
|
5507
5507
|
});
|
|
5508
5508
|
app.put("/api/sessions/:id/mode", async (req, res) => {
|
|
5509
|
-
const { getEventStore: getEventStore2 } = await import("./events-
|
|
5510
|
-
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-
|
|
5509
|
+
const { getEventStore: getEventStore2 } = await import("./events-ND5GZBT2.js");
|
|
5510
|
+
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-XIKR6AFM.js");
|
|
5511
5511
|
const sessionId = req.params.id;
|
|
5512
5512
|
const session = sessionManager.getSession(sessionId);
|
|
5513
5513
|
if (!session) {
|
|
@@ -5559,13 +5559,13 @@ async function createServerHandle(config) {
|
|
|
5559
5559
|
if (!callId || approved === void 0) {
|
|
5560
5560
|
return res.status(400).json({ error: "callId and approved are required" });
|
|
5561
5561
|
}
|
|
5562
|
-
const { providePathConfirmation } = await import("./tools-
|
|
5562
|
+
const { providePathConfirmation } = await import("./tools-6DXPHBUV.js");
|
|
5563
5563
|
const result = providePathConfirmation(callId, approved, alwaysAllow);
|
|
5564
5564
|
if (!result.found) {
|
|
5565
5565
|
return res.status(404).json({ error: "No pending path confirmation with that ID" });
|
|
5566
5566
|
}
|
|
5567
|
-
const { getEventStore: getEventStore2 } = await import("./events-
|
|
5568
|
-
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2, foldPendingConfirmations: foldPendingConfirmations2 } = await import("./folding-
|
|
5567
|
+
const { getEventStore: getEventStore2 } = await import("./events-ND5GZBT2.js");
|
|
5568
|
+
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2, foldPendingConfirmations: foldPendingConfirmations2 } = await import("./folding-XIKR6AFM.js");
|
|
5569
5569
|
const { createSessionStateMessage: createSessionStateMessage2 } = await import("./protocol-4CTV7OZC.js");
|
|
5570
5570
|
const eventStore = getEventStore2();
|
|
5571
5571
|
const events = eventStore.getEvents(sessionId);
|
|
@@ -5583,7 +5583,7 @@ async function createServerHandle(config) {
|
|
|
5583
5583
|
if (!callId || !answer) {
|
|
5584
5584
|
return res.status(400).json({ error: "callId and answer are required" });
|
|
5585
5585
|
}
|
|
5586
|
-
const { provideAnswer: provideAnswer2 } = await import("./tools-
|
|
5586
|
+
const { provideAnswer: provideAnswer2 } = await import("./tools-6DXPHBUV.js");
|
|
5587
5587
|
const found = provideAnswer2(callId, answer);
|
|
5588
5588
|
if (!found) {
|
|
5589
5589
|
return res.status(404).json({ error: "No pending question with that ID" });
|
|
@@ -5619,17 +5619,31 @@ async function createServerHandle(config) {
|
|
|
5619
5619
|
if (!session) {
|
|
5620
5620
|
return res.status(404).json({ error: "Session not found" });
|
|
5621
5621
|
}
|
|
5622
|
-
const { stopSessionExecution } = await import("./chat-handler-
|
|
5623
|
-
const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-
|
|
5622
|
+
const { stopSessionExecution } = await import("./chat-handler-AIBOSHAQ.js");
|
|
5623
|
+
const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-6DXPHBUV.js");
|
|
5624
5624
|
stopSessionExecution(sessionId, sessionManager);
|
|
5625
5625
|
abortSession(sessionId);
|
|
5626
5626
|
cancelQuestionsForSession(sessionId, "Session stopped by user");
|
|
5627
5627
|
cancelPathConfirmationsForSession(sessionId, "Session stopped by user");
|
|
5628
5628
|
sessionManager.clearMessageQueue(sessionId);
|
|
5629
|
-
const eventStore = (await import("./events-
|
|
5629
|
+
const eventStore = (await import("./events-ND5GZBT2.js")).getEventStore();
|
|
5630
5630
|
eventStore.append(sessionId, { type: "running.changed", data: { isRunning: false } });
|
|
5631
5631
|
res.json({ success: true });
|
|
5632
5632
|
});
|
|
5633
|
+
app.post("/api/sessions/:id/truncate", async (req, res) => {
|
|
5634
|
+
const sessionId = req.params.id;
|
|
5635
|
+
const session = sessionManager.getSession(sessionId);
|
|
5636
|
+
if (!session) {
|
|
5637
|
+
return res.status(404).json({ error: "Session not found" });
|
|
5638
|
+
}
|
|
5639
|
+
const { messageIndex } = req.body;
|
|
5640
|
+
if (typeof messageIndex !== "number" || messageIndex < 0) {
|
|
5641
|
+
return res.status(400).json({ error: "messageIndex must be a non-negative number" });
|
|
5642
|
+
}
|
|
5643
|
+
const { truncateSessionMessages } = await import("./events-ND5GZBT2.js");
|
|
5644
|
+
truncateSessionMessages(sessionId, messageIndex);
|
|
5645
|
+
res.json({ success: true });
|
|
5646
|
+
});
|
|
5633
5647
|
app.post("/api/sessions/:id/chat", async (req, res) => {
|
|
5634
5648
|
const sessionId = req.params.id;
|
|
5635
5649
|
const session = sessionManager.getSession(sessionId);
|
|
@@ -6094,7 +6108,7 @@ async function createServerHandle(config) {
|
|
|
6094
6108
|
providerManager
|
|
6095
6109
|
);
|
|
6096
6110
|
const wss = wssExports.wss;
|
|
6097
|
-
const { QueueProcessor } = await import("./processor-
|
|
6111
|
+
const { QueueProcessor } = await import("./processor-PV446N55.js");
|
|
6098
6112
|
const queueProcessor = new QueueProcessor({
|
|
6099
6113
|
sessionManager,
|
|
6100
6114
|
providerManager,
|
|
@@ -6132,7 +6146,7 @@ async function createServerHandle(config) {
|
|
|
6132
6146
|
logger.info("Shutting down...");
|
|
6133
6147
|
void (async () => {
|
|
6134
6148
|
await devServerManager.stopAll();
|
|
6135
|
-
const { stopAllInspectProxies } = await import("./inspect-proxy-
|
|
6149
|
+
const { stopAllInspectProxies } = await import("./inspect-proxy-42ZXL2R5.js");
|
|
6136
6150
|
stopAllInspectProxies();
|
|
6137
6151
|
const { cleanupAllProcesses } = await import("./store-OQ45KONN.js");
|
|
6138
6152
|
cleanupAllProcesses();
|
|
@@ -6169,4 +6183,4 @@ export {
|
|
|
6169
6183
|
createServerHandle,
|
|
6170
6184
|
createServer
|
|
6171
6185
|
};
|
|
6172
|
-
//# sourceMappingURL=chunk-
|
|
6186
|
+
//# sourceMappingURL=chunk-DKKDNJT7.js.map
|
|
@@ -155,7 +155,6 @@ ${annotation || "(none)"}`;
|
|
|
155
155
|
client.on("error", () => targetSocket.destroy());
|
|
156
156
|
targetSocket.write(clientHead);
|
|
157
157
|
targetSocket.pipe(client);
|
|
158
|
-
client.pipe(targetSocket);
|
|
159
158
|
return;
|
|
160
159
|
}
|
|
161
160
|
targetSocket = net.connect(targetPort, targetHost);
|
|
@@ -294,4 +293,4 @@ export {
|
|
|
294
293
|
startInspectProxy,
|
|
295
294
|
stopAllInspectProxies
|
|
296
295
|
};
|
|
297
|
-
//# sourceMappingURL=chunk-
|
|
296
|
+
//# sourceMappingURL=chunk-DL6ZILAF.js.map
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
} from "./chunk-CMQCO27Y.js";
|
|
10
10
|
import {
|
|
11
11
|
startInspectProxy
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-DL6ZILAF.js";
|
|
13
13
|
import {
|
|
14
14
|
createProcess,
|
|
15
15
|
getPlatformShell,
|
|
@@ -30,10 +30,18 @@ import {
|
|
|
30
30
|
streamWithSegments
|
|
31
31
|
} from "./chunk-CUDAT6SS.js";
|
|
32
32
|
import {
|
|
33
|
-
getContextMessages,
|
|
34
33
|
getCurrentContextWindowId,
|
|
35
34
|
getEventStore
|
|
36
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-RJRG2VER.js";
|
|
36
|
+
import {
|
|
37
|
+
buildContextMessagesFromEventHistory,
|
|
38
|
+
foldContextState,
|
|
39
|
+
handleMessageDelta,
|
|
40
|
+
handleMessageThinking,
|
|
41
|
+
handleToolCall,
|
|
42
|
+
handleToolResult,
|
|
43
|
+
stripOrphanedToolCalls
|
|
44
|
+
} from "./chunk-TS5XFQ2D.js";
|
|
37
45
|
import {
|
|
38
46
|
createChatDoneMessage,
|
|
39
47
|
createChatMessageMessage,
|
|
@@ -553,25 +561,6 @@ function computeAggregatedStats(input) {
|
|
|
553
561
|
}
|
|
554
562
|
|
|
555
563
|
// src/server/chat/stream-pure.ts
|
|
556
|
-
function toStreamMessages(messages) {
|
|
557
|
-
return messages.map((m) => ({
|
|
558
|
-
role: m.role,
|
|
559
|
-
content: m.content,
|
|
560
|
-
...m.thinkingContent ? { thinkingContent: m.thinkingContent } : {},
|
|
561
|
-
...m.toolCalls?.length ? { toolCalls: m.toolCalls.map((tc) => ({ id: tc.id, name: tc.name, arguments: tc.arguments })) } : {},
|
|
562
|
-
...m.toolCallId ? { toolCallId: m.toolCallId } : {},
|
|
563
|
-
...m.attachments?.length ? { attachments: m.attachments } : {}
|
|
564
|
-
}));
|
|
565
|
-
}
|
|
566
|
-
function createAssistantMessage(content, thinkingContent, toolCalls) {
|
|
567
|
-
return {
|
|
568
|
-
role: "assistant",
|
|
569
|
-
content,
|
|
570
|
-
source: "history",
|
|
571
|
-
...thinkingContent ? { thinkingContent } : {},
|
|
572
|
-
...toolCalls.length > 0 ? { toolCalls } : {}
|
|
573
|
-
};
|
|
574
|
-
}
|
|
575
564
|
function createEmptyStreamResult(aborted, xmlFormatError, modelParams) {
|
|
576
565
|
return {
|
|
577
566
|
content: "",
|
|
@@ -2830,6 +2819,111 @@ async function deleteSkill(configDir, skillId) {
|
|
|
2830
2819
|
|
|
2831
2820
|
// src/server/chat/agent-loop.ts
|
|
2832
2821
|
import stripAnsi from "strip-ansi";
|
|
2822
|
+
|
|
2823
|
+
// src/server/chat/conversation-history.ts
|
|
2824
|
+
function buildContextMessages(events, scope) {
|
|
2825
|
+
if (scope.type === "toplevel") {
|
|
2826
|
+
return buildTopLevelContextMessages(events, scope);
|
|
2827
|
+
}
|
|
2828
|
+
return buildSubAgentContextMessages(events, scope);
|
|
2829
|
+
}
|
|
2830
|
+
function buildTopLevelContextMessages(events, scope) {
|
|
2831
|
+
const includeVerifier = scope.includeVerifier ?? true;
|
|
2832
|
+
const currentWindowId = foldContextState(events, "").currentContextWindowId;
|
|
2833
|
+
if (!currentWindowId) return [];
|
|
2834
|
+
return buildContextMessagesFromEventHistory(events, currentWindowId, { includeVerifier });
|
|
2835
|
+
}
|
|
2836
|
+
function buildSubAgentContextMessages(events, scope) {
|
|
2837
|
+
const { subAgentId } = scope;
|
|
2838
|
+
const messages = [];
|
|
2839
|
+
const messageMap = /* @__PURE__ */ new Map();
|
|
2840
|
+
const fulfilledToolCallIds = /* @__PURE__ */ new Set();
|
|
2841
|
+
let compactionSummaryIndex = -1;
|
|
2842
|
+
for (let i = events.length - 1; i >= 0; i--) {
|
|
2843
|
+
const event = events[i];
|
|
2844
|
+
if (event.type === "context.compacted") {
|
|
2845
|
+
const data = event.data;
|
|
2846
|
+
if (data.subAgentId === subAgentId) {
|
|
2847
|
+
compactionSummaryIndex = i;
|
|
2848
|
+
break;
|
|
2849
|
+
}
|
|
2850
|
+
}
|
|
2851
|
+
}
|
|
2852
|
+
const startIdx = compactionSummaryIndex >= 0 ? compactionSummaryIndex : 0;
|
|
2853
|
+
for (let i = startIdx; i < events.length; i++) {
|
|
2854
|
+
const event = events[i];
|
|
2855
|
+
switch (event.type) {
|
|
2856
|
+
case "message.start": {
|
|
2857
|
+
const data = event.data;
|
|
2858
|
+
if (data.subAgentId !== subAgentId) break;
|
|
2859
|
+
if (data.role === "system") break;
|
|
2860
|
+
if (data.messageKind === "context-reset") break;
|
|
2861
|
+
const message = {
|
|
2862
|
+
id: data.messageId,
|
|
2863
|
+
role: data.role,
|
|
2864
|
+
content: data.content ?? "",
|
|
2865
|
+
...data.subAgentId ? { subAgentId: data.subAgentId } : {},
|
|
2866
|
+
...data.subAgentType ? { subAgentType: data.subAgentType } : {},
|
|
2867
|
+
...data.contextWindowId ? { contextWindowId: data.contextWindowId } : {},
|
|
2868
|
+
...data.isCompactionSummary ? { isCompactionSummary: data.isCompactionSummary } : {},
|
|
2869
|
+
...data.attachments !== void 0 ? { attachments: data.attachments } : {}
|
|
2870
|
+
};
|
|
2871
|
+
messageMap.set(data.messageId, message);
|
|
2872
|
+
messages.push(message);
|
|
2873
|
+
break;
|
|
2874
|
+
}
|
|
2875
|
+
case "message.thinking": {
|
|
2876
|
+
const evt = event.data;
|
|
2877
|
+
handleMessageThinking(messageMap, evt);
|
|
2878
|
+
break;
|
|
2879
|
+
}
|
|
2880
|
+
case "message.delta": {
|
|
2881
|
+
const evt = event.data;
|
|
2882
|
+
handleMessageDelta(messageMap, evt);
|
|
2883
|
+
break;
|
|
2884
|
+
}
|
|
2885
|
+
case "tool.call": {
|
|
2886
|
+
const evt = event.data;
|
|
2887
|
+
handleToolCall(messageMap, evt);
|
|
2888
|
+
break;
|
|
2889
|
+
}
|
|
2890
|
+
case "tool.result": {
|
|
2891
|
+
const evt = event.data;
|
|
2892
|
+
handleToolResult(messages, messageMap, fulfilledToolCallIds, evt);
|
|
2893
|
+
break;
|
|
2894
|
+
}
|
|
2895
|
+
case "context.compacted": {
|
|
2896
|
+
const data = event.data;
|
|
2897
|
+
if (data.subAgentId === subAgentId && i === compactionSummaryIndex) {
|
|
2898
|
+
}
|
|
2899
|
+
break;
|
|
2900
|
+
}
|
|
2901
|
+
}
|
|
2902
|
+
}
|
|
2903
|
+
stripOrphanedToolCalls(messages, fulfilledToolCallIds);
|
|
2904
|
+
return messages.map(
|
|
2905
|
+
({ id: _id, subAgentId: _sa, subAgentType: _st, contextWindowId: _cw, isCompactionSummary: _ics, ...rest }) => {
|
|
2906
|
+
const ctx = {
|
|
2907
|
+
role: rest.role,
|
|
2908
|
+
content: rest.content,
|
|
2909
|
+
...rest.thinkingContent ? { thinkingContent: rest.thinkingContent } : {},
|
|
2910
|
+
...rest.toolCalls ? { toolCalls: rest.toolCalls } : {},
|
|
2911
|
+
...rest.toolCallId ? { toolCallId: rest.toolCallId } : {},
|
|
2912
|
+
...rest.attachments ? { attachments: rest.attachments } : {}
|
|
2913
|
+
};
|
|
2914
|
+
return ctx;
|
|
2915
|
+
}
|
|
2916
|
+
);
|
|
2917
|
+
}
|
|
2918
|
+
function getConversationMessages(scope) {
|
|
2919
|
+
const eventStore = getEventStore();
|
|
2920
|
+
const events = eventStore.getEvents(scope.sessionId);
|
|
2921
|
+
if (events.length === 0) return [];
|
|
2922
|
+
const contextMessages = buildContextMessages(events, scope);
|
|
2923
|
+
return minimalMessagesToRequestContextMessages(contextMessages, "history");
|
|
2924
|
+
}
|
|
2925
|
+
|
|
2926
|
+
// src/server/chat/agent-loop.ts
|
|
2833
2927
|
function emitPartialDoneEvents(sessionId, assistantMsgId, statsIdentity, mode, turnMetrics, promptContext, eventStore) {
|
|
2834
2928
|
const stats = turnMetrics.buildStats(statsIdentity, mode);
|
|
2835
2929
|
eventStore.append(
|
|
@@ -2950,24 +3044,7 @@ Error: ${toolResult.error}` : `Error: ${toolResult.error}`
|
|
|
2950
3044
|
return { toolMessages, criteriaChanged, returnValueContent, returnValueResult };
|
|
2951
3045
|
}
|
|
2952
3046
|
var MAX_FORMAT_RETRIES = 10;
|
|
2953
|
-
var FORMAT_CORRECTION_PROMPT2 = `IMPORTANT: You MUST use the JSON function calling API. Do NOT output XML tags like <
|
|
2954
|
-
function toRequestContextMessages(messages) {
|
|
2955
|
-
return messages.map((message) => ({
|
|
2956
|
-
role: message.role,
|
|
2957
|
-
content: message.content,
|
|
2958
|
-
source: "history",
|
|
2959
|
-
...message.thinkingContent ? { thinkingContent: message.thinkingContent } : {},
|
|
2960
|
-
...message.toolCalls ? {
|
|
2961
|
-
toolCalls: message.toolCalls.map((toolCall) => ({
|
|
2962
|
-
id: toolCall.id,
|
|
2963
|
-
name: toolCall.name,
|
|
2964
|
-
arguments: toolCall.arguments
|
|
2965
|
-
}))
|
|
2966
|
-
} : {},
|
|
2967
|
-
...message.toolCallId ? { toolCallId: message.toolCallId } : {},
|
|
2968
|
-
...message.attachments ? { attachments: message.attachments } : {}
|
|
2969
|
-
}));
|
|
2970
|
-
}
|
|
3047
|
+
var FORMAT_CORRECTION_PROMPT2 = `IMPORTANT: You MUST use the JSON function calling API. Do NOT output XML tags like <function=>, <parameter=>, or <invoke=>. Your previous attempt was stopped because you used the wrong format. Use the proper tool_calls format.`;
|
|
2971
3048
|
async function runTopLevelAgentLoop(config, turnMetrics) {
|
|
2972
3049
|
const { mode, sessionManager, sessionId, llmClient, signal, onMessage, statsIdentity } = config;
|
|
2973
3050
|
const eventStore = getEventStore();
|
|
@@ -2996,7 +3073,7 @@ async function runTopLevelAgentLoop(config, turnMetrics) {
|
|
|
2996
3073
|
}));
|
|
2997
3074
|
const toolRegistry = config.getToolRegistry();
|
|
2998
3075
|
const currentWindowMessageOptions = getCurrentWindowMessageOptions(sessionId);
|
|
2999
|
-
const requestMessages =
|
|
3076
|
+
const requestMessages = getConversationMessages({ type: "toplevel", sessionId });
|
|
3000
3077
|
if (formatRetryCount > 0) {
|
|
3001
3078
|
const correctionMsgId = crypto.randomUUID();
|
|
3002
3079
|
eventStore.append(
|
|
@@ -3008,7 +3085,7 @@ async function runTopLevelAgentLoop(config, turnMetrics) {
|
|
|
3008
3085
|
})
|
|
3009
3086
|
);
|
|
3010
3087
|
eventStore.append(sessionId, createFormatRetryEvent(formatRetryCount, MAX_FORMAT_RETRIES));
|
|
3011
|
-
requestMessages.push({ role: "user", content: FORMAT_CORRECTION_PROMPT2, source: "
|
|
3088
|
+
requestMessages.push({ role: "user", content: FORMAT_CORRECTION_PROMPT2, source: "history" });
|
|
3012
3089
|
}
|
|
3013
3090
|
const configDir = getGlobalConfigDir(getRuntimeConfig().mode ?? "production");
|
|
3014
3091
|
const skills = await getEnabledSkillMetadata(configDir);
|
|
@@ -3284,7 +3361,6 @@ async function executeSubAgent(options) {
|
|
|
3284
3361
|
const subAgentId = crypto.randomUUID();
|
|
3285
3362
|
let session = sessionManager.requireSession(sessionId);
|
|
3286
3363
|
const currentWindowMessageOptions = getCurrentWindowMessageOptions2(sessionId);
|
|
3287
|
-
const contextMessages = [{ role: "user", content: prompt, source: "runtime" }];
|
|
3288
3364
|
logger.debug("Sub-agent starting", { subAgentType, subAgentId, sessionId });
|
|
3289
3365
|
const resetMsgId = crypto.randomUUID();
|
|
3290
3366
|
eventStore.append(
|
|
@@ -3298,12 +3374,30 @@ async function executeSubAgent(options) {
|
|
|
3298
3374
|
})
|
|
3299
3375
|
);
|
|
3300
3376
|
eventStore.append(sessionId, { type: "message.done", data: { messageId: resetMsgId } });
|
|
3301
|
-
|
|
3302
|
-
|
|
3303
|
-
|
|
3304
|
-
|
|
3305
|
-
|
|
3306
|
-
|
|
3377
|
+
const promptMsgId = crypto.randomUUID();
|
|
3378
|
+
eventStore.append(
|
|
3379
|
+
sessionId,
|
|
3380
|
+
createMessageStartEvent(promptMsgId, "user", prompt, {
|
|
3381
|
+
...currentWindowMessageOptions ?? {},
|
|
3382
|
+
isSystemGenerated: true,
|
|
3383
|
+
messageKind: "auto-prompt",
|
|
3384
|
+
subAgentId,
|
|
3385
|
+
subAgentType,
|
|
3386
|
+
metadata: {
|
|
3387
|
+
type: "subagent",
|
|
3388
|
+
name: agentDef.metadata.name,
|
|
3389
|
+
color: agentDef.metadata.color ?? "#6b7280"
|
|
3390
|
+
}
|
|
3391
|
+
})
|
|
3392
|
+
);
|
|
3393
|
+
eventStore.append(sessionId, { type: "message.done", data: { messageId: promptMsgId } });
|
|
3394
|
+
if (onMessage) {
|
|
3395
|
+
onMessage(
|
|
3396
|
+
createChatMessageMessage({
|
|
3397
|
+
id: promptMsgId,
|
|
3398
|
+
role: "user",
|
|
3399
|
+
content: prompt,
|
|
3400
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
3307
3401
|
isSystemGenerated: true,
|
|
3308
3402
|
messageKind: "auto-prompt",
|
|
3309
3403
|
subAgentId,
|
|
@@ -3315,28 +3409,8 @@ async function executeSubAgent(options) {
|
|
|
3315
3409
|
}
|
|
3316
3410
|
})
|
|
3317
3411
|
);
|
|
3318
|
-
eventStore.append(sessionId, { type: "message.done", data: { messageId: msgId } });
|
|
3319
|
-
if (onMessage) {
|
|
3320
|
-
onMessage(
|
|
3321
|
-
createChatMessageMessage({
|
|
3322
|
-
id: msgId,
|
|
3323
|
-
role: "user",
|
|
3324
|
-
content: msg.content,
|
|
3325
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
3326
|
-
isSystemGenerated: true,
|
|
3327
|
-
messageKind: "auto-prompt",
|
|
3328
|
-
subAgentId,
|
|
3329
|
-
subAgentType,
|
|
3330
|
-
metadata: {
|
|
3331
|
-
type: "subagent",
|
|
3332
|
-
name: agentDef.metadata.name,
|
|
3333
|
-
color: agentDef.metadata.color ?? "#6b7280"
|
|
3334
|
-
}
|
|
3335
|
-
})
|
|
3336
|
-
);
|
|
3337
|
-
}
|
|
3338
3412
|
}
|
|
3339
|
-
const { files } = await getAllInstructions(session.workdir, session.projectId);
|
|
3413
|
+
const { content: instructionContent, files } = await getAllInstructions(session.workdir, session.projectId);
|
|
3340
3414
|
const injectedFiles = toInjectedFiles(files);
|
|
3341
3415
|
const configDir = getGlobalConfigDir(getRuntimeConfig().mode ?? "production");
|
|
3342
3416
|
const skills = await getEnabledSkillMetadata(configDir);
|
|
@@ -3346,7 +3420,7 @@ async function executeSubAgent(options) {
|
|
|
3346
3420
|
skills.length > 0 ? skills : void 0,
|
|
3347
3421
|
llmClient.getModel()
|
|
3348
3422
|
);
|
|
3349
|
-
|
|
3423
|
+
const subAgentScope = { type: "subagent", sessionId, subAgentId, subAgentType };
|
|
3350
3424
|
let consecutiveEmptyStops = 0;
|
|
3351
3425
|
let finalContent;
|
|
3352
3426
|
let returnValueContent = null;
|
|
@@ -3356,13 +3430,7 @@ async function executeSubAgent(options) {
|
|
|
3356
3430
|
if (signal?.aborted) {
|
|
3357
3431
|
throw new Error("Aborted");
|
|
3358
3432
|
}
|
|
3359
|
-
|
|
3360
|
-
sessionManager,
|
|
3361
|
-
sessionId,
|
|
3362
|
-
llmClient,
|
|
3363
|
-
statsIdentity: resolveCompactionStatsIdentity(llmClient),
|
|
3364
|
-
...signal ? { signal } : {}
|
|
3365
|
-
});
|
|
3433
|
+
const requestMessages = getConversationMessages(subAgentScope);
|
|
3366
3434
|
const assistantMsgId = crypto.randomUUID();
|
|
3367
3435
|
eventStore.append(
|
|
3368
3436
|
sessionId,
|
|
@@ -3376,14 +3444,29 @@ async function executeSubAgent(options) {
|
|
|
3376
3444
|
systemPrompt,
|
|
3377
3445
|
injectedFiles,
|
|
3378
3446
|
prompt,
|
|
3379
|
-
|
|
3447
|
+
requestMessages,
|
|
3380
3448
|
toolRegistry.definitions
|
|
3381
3449
|
);
|
|
3450
|
+
const assembledRequest = assembleAgentRequest({
|
|
3451
|
+
agentDef,
|
|
3452
|
+
subAgentDefs: [],
|
|
3453
|
+
workdir: session.workdir,
|
|
3454
|
+
messages: requestMessages,
|
|
3455
|
+
injectedFiles,
|
|
3456
|
+
promptTools: toolRegistry.definitions,
|
|
3457
|
+
requestTools: toolRegistry.definitions,
|
|
3458
|
+
toolChoice: "auto",
|
|
3459
|
+
disableThinking: true,
|
|
3460
|
+
...instructionContent ? { customInstructions: instructionContent } : {},
|
|
3461
|
+
...skills.length > 0 ? { skills } : {},
|
|
3462
|
+
modelName: llmClient.getModel()
|
|
3463
|
+
});
|
|
3464
|
+
const effectiveSystemPrompt = assembledRequest.systemPrompt + RETURN_VALUE_INSTRUCTION;
|
|
3382
3465
|
const streamGen = streamLLMPure({
|
|
3383
3466
|
messageId: assistantMsgId,
|
|
3384
|
-
systemPrompt:
|
|
3467
|
+
systemPrompt: effectiveSystemPrompt,
|
|
3385
3468
|
llmClient,
|
|
3386
|
-
messages:
|
|
3469
|
+
messages: assembledRequest.messages,
|
|
3387
3470
|
tools: toolRegistry.definitions,
|
|
3388
3471
|
toolChoice: "auto",
|
|
3389
3472
|
signal,
|
|
@@ -3406,9 +3489,7 @@ async function executeSubAgent(options) {
|
|
|
3406
3489
|
throw new Error("Aborted");
|
|
3407
3490
|
}
|
|
3408
3491
|
turnMetrics.addLLMCall(result.timing, result.usage.promptTokens, result.usage.completionTokens, result.modelParams);
|
|
3409
|
-
sessionManager.setCurrentContextSize(sessionId, result.usage.promptTokens, subAgentId);
|
|
3410
3492
|
finalContent = result.content;
|
|
3411
|
-
customMessages.push(createAssistantMessage(result.content, result.thinkingContent, result.toolCalls));
|
|
3412
3493
|
session = sessionManager.requireSession(sessionId);
|
|
3413
3494
|
if (result.toolCalls.length === 0) {
|
|
3414
3495
|
if (nudgeConfig) {
|
|
@@ -3428,7 +3509,6 @@ async function executeSubAgent(options) {
|
|
|
3428
3509
|
subAgentId,
|
|
3429
3510
|
subAgentType
|
|
3430
3511
|
});
|
|
3431
|
-
customMessages = [...customMessages, { role: "user", content: nudgeContent, source: "runtime" }];
|
|
3432
3512
|
continue;
|
|
3433
3513
|
}
|
|
3434
3514
|
const stalledMsgId = crypto.randomUUID();
|
|
@@ -3458,7 +3538,6 @@ async function executeSubAgent(options) {
|
|
|
3458
3538
|
subAgentId,
|
|
3459
3539
|
subAgentType
|
|
3460
3540
|
});
|
|
3461
|
-
customMessages = [...customMessages, { role: "user", content: RETURN_VALUE_NUDGE, source: "runtime" }];
|
|
3462
3541
|
continue;
|
|
3463
3542
|
}
|
|
3464
3543
|
const stats = turnMetrics.buildStats(statsIdentity, "verifier");
|
|
@@ -3510,7 +3589,6 @@ async function executeSubAgent(options) {
|
|
|
3510
3589
|
}
|
|
3511
3590
|
break;
|
|
3512
3591
|
}
|
|
3513
|
-
customMessages = [...customMessages, ...batchResult.toolMessages];
|
|
3514
3592
|
session = sessionManager.requireSession(sessionId);
|
|
3515
3593
|
if (nudgeConfig) {
|
|
3516
3594
|
consecutiveEmptyStops = 0;
|
|
@@ -3597,7 +3675,7 @@ var callSubAgentTool = {
|
|
|
3597
3675
|
};
|
|
3598
3676
|
}
|
|
3599
3677
|
try {
|
|
3600
|
-
const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-
|
|
3678
|
+
const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-6DXPHBUV.js");
|
|
3601
3679
|
const toolRegistry = getToolRegistryForAgent2(agentDef);
|
|
3602
3680
|
const turnMetrics = new TurnMetrics();
|
|
3603
3681
|
const result = await executeSubAgent({
|
|
@@ -4581,9 +4659,6 @@ function getCurrentWindowMessageOptions3(sessionId) {
|
|
|
4581
4659
|
const contextWindowId = getCurrentContextWindowId(sessionId);
|
|
4582
4660
|
return contextWindowId ? { contextWindowId } : void 0;
|
|
4583
4661
|
}
|
|
4584
|
-
function toRequestContextMessages2(messages) {
|
|
4585
|
-
return minimalMessagesToRequestContextMessages(messages, "history");
|
|
4586
|
-
}
|
|
4587
4662
|
async function maybeAutoCompactContext(options) {
|
|
4588
4663
|
const config = getRuntimeConfig();
|
|
4589
4664
|
const contextState = options.sessionManager.getContextState(options.sessionId);
|
|
@@ -4630,7 +4705,7 @@ async function performContextCompaction(options) {
|
|
|
4630
4705
|
const session = sessionManager.requireSession(sessionId);
|
|
4631
4706
|
const { content: instructions, files } = await getAllInstructions(session.workdir, session.projectId);
|
|
4632
4707
|
const injectedFiles = toInjectedFiles(files);
|
|
4633
|
-
const requestMessages =
|
|
4708
|
+
const requestMessages = getConversationMessages({ type: "toplevel", sessionId });
|
|
4634
4709
|
const config = getRuntimeConfig();
|
|
4635
4710
|
const allAgents = await loadAllAgentsDefault();
|
|
4636
4711
|
const plannerDef = findAgentById("planner", allAgents);
|
|
@@ -4789,4 +4864,4 @@ export {
|
|
|
4789
4864
|
getToolRegistryForAgent,
|
|
4790
4865
|
createToolRegistry
|
|
4791
4866
|
};
|
|
4792
|
-
//# sourceMappingURL=chunk-
|
|
4867
|
+
//# sourceMappingURL=chunk-GLVNO4DS.js.map
|