openfox 2.0.0-beta.5 → 2.0.0-beta.7
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/{chat-handler-BM6EBFKS.js → chat-handler-XIAY7O5X.js} +14 -27
- package/dist/{chunk-NNEHZT3V.js → chunk-2ZS2B5HW.js} +11 -3
- package/dist/{chunk-HGAMIPFO.js → chunk-7FDY3EOH.js} +18 -176
- package/dist/{chunk-V6DYJV5R.js → chunk-7TTEGAO6.js} +12 -10
- package/dist/{chunk-T4HV6GS5.js → chunk-BVHFMAVN.js} +1 -1
- package/dist/{chunk-OBD6D5ZO.js → chunk-CDDMHSZF.js} +4 -4
- package/dist/{chunk-X36JIWSF.js → chunk-DFITQ75T.js} +135 -147
- package/dist/{chunk-HHAJ3QF6.js → chunk-EMJGF3A7.js} +9 -24
- package/dist/{chunk-RF2JGDSS.js → chunk-IGSZUXQP.js} +3 -3
- package/dist/{chunk-I67T2E5K.js → chunk-KAYUPVHQ.js} +6 -6
- package/dist/{chunk-CLGRPDZT.js → chunk-LN22TXNK.js} +196 -91
- package/dist/{chunk-UH27FDT7.js → chunk-NPHYEUYE.js} +124 -12
- package/dist/{chunk-DFWGWULB.js → chunk-QN5ST54E.js} +2935 -3127
- package/dist/{chunk-PSJIT5LZ.js → chunk-RFNEDBVO.js} +4 -4
- package/dist/chunk-RI6GAMNP.js +13 -0
- package/dist/{chunk-XL7SW5B4.js → chunk-XJEOP6XU.js} +5 -4
- package/dist/cli/dev.js +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/compactor-TDNRM3A7.js +9 -0
- package/dist/{config-YU7NYZYG.js → config-QUT7YZQ7.js} +9 -8
- package/dist/{events-T37KTNCX.js → events-PQ3KTI5H.js} +8 -7
- package/dist/{folding-IIKWAGG2.js → folding-CXORTBAU.js} +2 -2
- package/dist/{orchestrator-JTUHXF7C.js → orchestrator-GAOENX5Q.js} +18 -22
- package/dist/package.json +1 -1
- package/dist/{processor-66YBBQ6B.js → processor-6VIYGURD.js} +8 -9
- package/dist/{protocol-CiYlonA5.d.ts → protocol-CDOV1pyc.d.ts} +11 -0
- package/dist/{protocol-ALBHLBBF.js → protocol-CN24IKQN.js} +3 -5
- package/dist/{provider-HTJEB3ON.js → provider-4T6BVPMD.js} +25 -10
- package/dist/{serve-EUEQ6ERI.js → serve-W3ETJJP3.js} +25 -26
- package/dist/server/index.d.ts +1 -6
- package/dist/server/index.js +15 -16
- package/dist/{settings-VRAOAPLA.js → settings-6XX56F3F.js} +2 -2
- package/dist/shared/index.d.ts +2 -2
- package/dist/shared/index.js +1 -1
- package/dist/{tools-56LACLKH.js → tools-SDXWIYSA.js} +11 -13
- package/dist/web/assets/index-Dm6t3VVB.js +299 -0
- package/dist/web/assets/{index-C5gaXnFj.css → index-aa3jRAZ9.css} +2 -2
- package/dist/web/index.html +2 -2
- package/dist/web/sw.js +1 -1
- package/dist/workflow-defaults/default.workflow.json +3 -3
- package/package.json +1 -1
- package/dist/auto-compaction-2ZAYDXGF.js +0 -27
- package/dist/chunk-CGZHLM3K.js +0 -70
- package/dist/chunk-SZKEGZIB.js +0 -140
- package/dist/runtime-config-NPSPMRDA.js +0 -9
- package/dist/vision-fallback-3MIZZ6NQ.js +0 -22
- package/dist/web/assets/index-DQ2Vv-Yl.js +0 -317
- /package/dist/web/{workbox-7fc22fbe.js → workbox-8c29f6e4.js} +0 -0
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
computeDynamicContextHash,
|
|
3
|
+
injectWorkflowKickoffIfNeeded,
|
|
4
|
+
runAgentTurn,
|
|
4
5
|
runChatTurn
|
|
5
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-DFITQ75T.js";
|
|
6
7
|
import {
|
|
8
|
+
COMPACTION_PROMPT,
|
|
7
9
|
TurnMetrics,
|
|
8
10
|
agentExists,
|
|
11
|
+
buildBasePrompt,
|
|
9
12
|
buildTopLevelSystemPrompt,
|
|
10
13
|
checkAborted,
|
|
11
|
-
|
|
14
|
+
consumeStreamGenerator,
|
|
15
|
+
createChatDoneEvent,
|
|
16
|
+
createMessageDoneEvent,
|
|
12
17
|
createMessageStartEvent,
|
|
13
18
|
createToolRegistry,
|
|
14
19
|
deleteAgent,
|
|
@@ -21,6 +26,7 @@ import {
|
|
|
21
26
|
findAgentById,
|
|
22
27
|
findSkillById,
|
|
23
28
|
getAllInstructions,
|
|
29
|
+
getConversationMessages,
|
|
24
30
|
getDefaultAgentIds,
|
|
25
31
|
getDefaultIds,
|
|
26
32
|
getDefaultSkillIds,
|
|
@@ -42,40 +48,24 @@ import {
|
|
|
42
48
|
loadProjectSkills,
|
|
43
49
|
loadUserAgents,
|
|
44
50
|
loadUserSkills,
|
|
51
|
+
loadVisionModelFromGlobalConfig,
|
|
45
52
|
pathExists,
|
|
46
|
-
|
|
53
|
+
processContextImages,
|
|
47
54
|
saveAgent,
|
|
48
55
|
saveAgentToProject,
|
|
49
56
|
saveItemToDir,
|
|
50
57
|
saveSkill,
|
|
51
58
|
saveSkillToProject,
|
|
52
59
|
skillExists,
|
|
53
|
-
spawnShellProcess
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
getProject
|
|
57
|
-
} from "./chunk-XAMAYRDA.js";
|
|
60
|
+
spawnShellProcess,
|
|
61
|
+
streamLLMPure
|
|
62
|
+
} from "./chunk-QN5ST54E.js";
|
|
58
63
|
import {
|
|
59
64
|
getPathSeparator,
|
|
60
65
|
getPlatformShell,
|
|
61
66
|
isAbsolutePath,
|
|
62
67
|
onProcessEvent
|
|
63
68
|
} from "./chunk-PBGOZMVY.js";
|
|
64
|
-
import {
|
|
65
|
-
createProviderManager,
|
|
66
|
-
parseDefaultModelSelection
|
|
67
|
-
} from "./chunk-RF2JGDSS.js";
|
|
68
|
-
import {
|
|
69
|
-
SessionNotFoundError,
|
|
70
|
-
createLLMClient,
|
|
71
|
-
detectModel,
|
|
72
|
-
getLlmStatus
|
|
73
|
-
} from "./chunk-HHAJ3QF6.js";
|
|
74
|
-
import {
|
|
75
|
-
detectBackend,
|
|
76
|
-
getBackendDisplayName,
|
|
77
|
-
getModelProfile
|
|
78
|
-
} from "./chunk-HGAMIPFO.js";
|
|
79
69
|
import {
|
|
80
70
|
createSession,
|
|
81
71
|
deleteSession,
|
|
@@ -91,24 +81,24 @@ import {
|
|
|
91
81
|
emitSessionInitialized,
|
|
92
82
|
emitUserMessage,
|
|
93
83
|
getCurrentContextWindowId,
|
|
84
|
+
getCurrentWindowMessageOptions,
|
|
94
85
|
getEventStore,
|
|
86
|
+
getRuntimeConfig,
|
|
95
87
|
getSession,
|
|
96
88
|
getSessionState,
|
|
97
89
|
initEventStore,
|
|
98
90
|
listSessions,
|
|
99
91
|
listSessionsByProject,
|
|
92
|
+
setRuntimeConfig,
|
|
100
93
|
updateSessionDangerLevel,
|
|
101
94
|
updateSessionMetadata,
|
|
102
95
|
updateSessionProvider,
|
|
103
96
|
updateSessionRunning
|
|
104
|
-
} from "./chunk-
|
|
105
|
-
import {
|
|
106
|
-
initDatabase
|
|
107
|
-
} from "./chunk-FBGWG4N6.js";
|
|
97
|
+
} from "./chunk-NPHYEUYE.js";
|
|
108
98
|
import {
|
|
109
99
|
buildMessagesFromStoredEvents,
|
|
110
100
|
foldPendingConfirmations
|
|
111
|
-
} from "./chunk-
|
|
101
|
+
} from "./chunk-XJEOP6XU.js";
|
|
112
102
|
import {
|
|
113
103
|
createChatErrorMessage,
|
|
114
104
|
createChatMessageMessage,
|
|
@@ -123,28 +113,46 @@ import {
|
|
|
123
113
|
parseClientMessage,
|
|
124
114
|
serializeServerMessage,
|
|
125
115
|
storedEventToServerMessage
|
|
126
|
-
} from "./chunk-
|
|
116
|
+
} from "./chunk-7TTEGAO6.js";
|
|
127
117
|
import {
|
|
128
118
|
EventEmitter,
|
|
129
119
|
provideAnswer
|
|
130
120
|
} from "./chunk-BJYPTN5S.js";
|
|
121
|
+
import {
|
|
122
|
+
getProject
|
|
123
|
+
} from "./chunk-XAMAYRDA.js";
|
|
124
|
+
import {
|
|
125
|
+
initDatabase
|
|
126
|
+
} from "./chunk-FBGWG4N6.js";
|
|
131
127
|
import {
|
|
132
128
|
computeSessionStats
|
|
133
129
|
} from "./chunk-VUQCQXXJ.js";
|
|
134
130
|
import {
|
|
135
131
|
createServerMessage
|
|
136
|
-
} from "./chunk-
|
|
132
|
+
} from "./chunk-BVHFMAVN.js";
|
|
137
133
|
import {
|
|
138
|
-
|
|
139
|
-
|
|
134
|
+
createProviderManager,
|
|
135
|
+
parseDefaultModelSelection
|
|
136
|
+
} from "./chunk-IGSZUXQP.js";
|
|
140
137
|
import {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
138
|
+
SessionNotFoundError,
|
|
139
|
+
createLLMClient,
|
|
140
|
+
detectModel,
|
|
141
|
+
getLlmStatus
|
|
142
|
+
} from "./chunk-EMJGF3A7.js";
|
|
143
|
+
import {
|
|
144
|
+
detectBackend,
|
|
145
|
+
getBackendDisplayName,
|
|
146
|
+
getModelProfile,
|
|
147
|
+
modelSupportsVision
|
|
148
|
+
} from "./chunk-7FDY3EOH.js";
|
|
144
149
|
import {
|
|
145
150
|
logger,
|
|
146
151
|
setLogLevel
|
|
147
152
|
} from "./chunk-K44MW7JJ.js";
|
|
153
|
+
import {
|
|
154
|
+
getGlobalConfigDir
|
|
155
|
+
} from "./chunk-CQGTEGKL.js";
|
|
148
156
|
|
|
149
157
|
// src/server/index.ts
|
|
150
158
|
import express from "express";
|
|
@@ -2041,7 +2049,7 @@ function emitWorkflowMessage(eventStore, sessionId, content, windowOptions, onMe
|
|
|
2041
2049
|
}
|
|
2042
2050
|
return msgId;
|
|
2043
2051
|
}
|
|
2044
|
-
function
|
|
2052
|
+
function getCurrentWindowMessageOptions2(sessionId) {
|
|
2045
2053
|
const contextWindowId = getCurrentContextWindowId(sessionId);
|
|
2046
2054
|
return contextWindowId ? { contextWindowId } : void 0;
|
|
2047
2055
|
}
|
|
@@ -2087,7 +2095,7 @@ async function executeWorkflow(workflow, options, subGroup) {
|
|
|
2087
2095
|
}
|
|
2088
2096
|
}
|
|
2089
2097
|
const startMsgId = crypto.randomUUID();
|
|
2090
|
-
const startWindowOpts =
|
|
2098
|
+
const startWindowOpts = getCurrentWindowMessageOptions2(sessionId);
|
|
2091
2099
|
eventStore.append(
|
|
2092
2100
|
sessionId,
|
|
2093
2101
|
createMessageStartEvent(
|
|
@@ -2129,7 +2137,7 @@ async function executeWorkflow(workflow, options, subGroup) {
|
|
|
2129
2137
|
};
|
|
2130
2138
|
}
|
|
2131
2139
|
const session = sessionManager.requireSession(sessionId);
|
|
2132
|
-
const currentWindowMessageOptions =
|
|
2140
|
+
const currentWindowMessageOptions = getCurrentWindowMessageOptions2(sessionId);
|
|
2133
2141
|
const criteriaEntries = session.metadataEntries["criteria"] ?? [];
|
|
2134
2142
|
const templateCtx = {
|
|
2135
2143
|
workdir: session.workdir,
|
|
@@ -2191,22 +2199,36 @@ async function executeWorkflow(workflow, options, subGroup) {
|
|
|
2191
2199
|
emitWorkflowMessage(eventStore, sessionId, nudgeContent, currentWindowMessageOptions, onMessage);
|
|
2192
2200
|
}
|
|
2193
2201
|
const turnMetrics = new TurnMetrics();
|
|
2194
|
-
const
|
|
2202
|
+
const es = getEventStore();
|
|
2203
|
+
const append = (event) => es.append(sessionId, event);
|
|
2204
|
+
let stepDoneCalled = false;
|
|
2205
|
+
const agentResult = await runAgentTurn(
|
|
2195
2206
|
{
|
|
2196
2207
|
sessionManager,
|
|
2197
2208
|
sessionId,
|
|
2198
2209
|
llmClient,
|
|
2199
|
-
injectStepDone: true,
|
|
2200
2210
|
...options.statsIdentity ? { statsIdentity: options.statsIdentity } : {},
|
|
2201
|
-
...!firstEntryForStep.has(step.id) && !agentStep.prompt && options.injectBuilderKickoff === true ? { injectBuilderKickoff: true } : {},
|
|
2202
2211
|
...signal ? { signal } : {},
|
|
2203
2212
|
...onMessage ? { onMessage } : {}
|
|
2204
2213
|
},
|
|
2205
|
-
turnMetrics
|
|
2214
|
+
turnMetrics,
|
|
2215
|
+
agentStep.agentId ?? "planner",
|
|
2216
|
+
append,
|
|
2217
|
+
{
|
|
2218
|
+
...!firstEntryForStep.has(step.id) && !agentStep.prompt && options.injectWorkflowKickoff === true ? { injectKickoff: () => injectWorkflowKickoffIfNeeded(sessionManager, sessionId, es) } : {},
|
|
2219
|
+
onToolExecuted: (toolCall, toolResult) => {
|
|
2220
|
+
if (toolCall.name === "step_done" && toolResult.success) {
|
|
2221
|
+
stepDoneCalled = true;
|
|
2222
|
+
}
|
|
2223
|
+
if (toolResult.success && ["write_file", "edit_file"].includes(toolCall.name)) {
|
|
2224
|
+
const path = toolCall.arguments["path"];
|
|
2225
|
+
sessionManager.addModifiedFile(sessionId, path);
|
|
2226
|
+
}
|
|
2227
|
+
}
|
|
2228
|
+
}
|
|
2206
2229
|
);
|
|
2207
2230
|
firstEntryForStep.add(step.id);
|
|
2208
2231
|
const agentReturnValue = agentResult.returnValueResult ?? "completed";
|
|
2209
|
-
const stepDoneCalled = agentResult.stepDoneCalled ?? false;
|
|
2210
2232
|
lastStepOutput = {
|
|
2211
2233
|
...agentResult.returnValueContent ? { content: agentResult.returnValueContent } : {},
|
|
2212
2234
|
...agentResult.returnValueResult ? { result: agentResult.returnValueResult } : {},
|
|
@@ -2241,7 +2263,6 @@ async function executeWorkflow(workflow, options, subGroup) {
|
|
|
2241
2263
|
definitions: toolRegistry.definitions.filter((d) => d.type === "function" && d.function.name !== "step_done"),
|
|
2242
2264
|
execute: toolRegistry.execute
|
|
2243
2265
|
};
|
|
2244
|
-
const nudgeConfig = subStep.subAgentType === "verifier" && !subStep.nudgePrompt ? createVerifierNudgeConfig() : void 0;
|
|
2245
2266
|
const result = await executeSubAgent({
|
|
2246
2267
|
subAgentType: subStep.subAgentType,
|
|
2247
2268
|
prompt: resolvedPrompt,
|
|
@@ -2257,8 +2278,7 @@ async function executeWorkflow(workflow, options, subGroup) {
|
|
|
2257
2278
|
model: llmClient.getModel()
|
|
2258
2279
|
},
|
|
2259
2280
|
...signal ? { signal } : {},
|
|
2260
|
-
...onMessage ? { onMessage } : {}
|
|
2261
|
-
nudgeConfig
|
|
2281
|
+
...onMessage ? { onMessage } : {}
|
|
2262
2282
|
});
|
|
2263
2283
|
lastStepOutput = { content: result.content ?? "", ...result.result ? { result: result.result } : {} };
|
|
2264
2284
|
stepOutcome = { result: result.result ?? "success", output: lastStepOutput };
|
|
@@ -2414,6 +2434,76 @@ async function runOrchestrator(options) {
|
|
|
2414
2434
|
return executeWorkflow(workflow, options, options.subGroup);
|
|
2415
2435
|
}
|
|
2416
2436
|
|
|
2437
|
+
// src/server/context/auto-compaction.ts
|
|
2438
|
+
async function compactContext(options) {
|
|
2439
|
+
const { sessionManager, sessionId, llmClient, signal } = options;
|
|
2440
|
+
const eventStore = getEventStore();
|
|
2441
|
+
const session = sessionManager.requireSession(sessionId);
|
|
2442
|
+
const compactPromptMsgId = crypto.randomUUID();
|
|
2443
|
+
eventStore.append(
|
|
2444
|
+
sessionId,
|
|
2445
|
+
createMessageStartEvent(compactPromptMsgId, "user", COMPACTION_PROMPT, {
|
|
2446
|
+
...getCurrentWindowMessageOptions(sessionId) ?? {},
|
|
2447
|
+
isSystemGenerated: true,
|
|
2448
|
+
messageKind: "auto-prompt",
|
|
2449
|
+
metadata: { type: "compaction", name: "Compaction", color: "#64748b" }
|
|
2450
|
+
})
|
|
2451
|
+
);
|
|
2452
|
+
eventStore.append(sessionId, { type: "message.done", data: { messageId: compactPromptMsgId } });
|
|
2453
|
+
const rawEvents = eventStore.getEvents(sessionId);
|
|
2454
|
+
const modelVision = modelSupportsVision(llmClient.getModel());
|
|
2455
|
+
const runtimeConfig = getRuntimeConfig();
|
|
2456
|
+
const visionModel = runtimeConfig.llm.visionModel ? { baseUrl: runtimeConfig.llm.baseUrl, model: runtimeConfig.llm.visionModel, timeout: runtimeConfig.llm.timeout } : await loadVisionModelFromGlobalConfig();
|
|
2457
|
+
const { events: processedEvents } = await processContextImages(rawEvents, {
|
|
2458
|
+
modelSupportsVision: modelVision,
|
|
2459
|
+
...visionModel ? { visionModel } : {},
|
|
2460
|
+
onEvent: (event) => eventStore.append(sessionId, event)
|
|
2461
|
+
});
|
|
2462
|
+
const messages = getConversationMessages({ type: "toplevel", sessionId }, { events: processedEvents });
|
|
2463
|
+
const systemPrompt = buildBasePrompt(session.workdir);
|
|
2464
|
+
const assistantMsgId = crypto.randomUUID();
|
|
2465
|
+
const streamGen = streamLLMPure({
|
|
2466
|
+
messageId: assistantMsgId,
|
|
2467
|
+
systemPrompt,
|
|
2468
|
+
llmClient,
|
|
2469
|
+
messages,
|
|
2470
|
+
tools: [],
|
|
2471
|
+
toolChoice: "none",
|
|
2472
|
+
signal
|
|
2473
|
+
});
|
|
2474
|
+
const result = await consumeStreamGenerator(streamGen, (event) => {
|
|
2475
|
+
eventStore.append(sessionId, event);
|
|
2476
|
+
});
|
|
2477
|
+
const summary = result.content?.trim() || result.thinkingContent?.trim() || "";
|
|
2478
|
+
if (!summary) {
|
|
2479
|
+
eventStore.append(sessionId, {
|
|
2480
|
+
type: "chat.error",
|
|
2481
|
+
data: { error: "Compaction produced empty summary, continuing with full context", recoverable: true }
|
|
2482
|
+
});
|
|
2483
|
+
logger.warn("Compaction produced empty summary", { sessionId });
|
|
2484
|
+
return;
|
|
2485
|
+
}
|
|
2486
|
+
const closedWindowId = getCurrentContextWindowId(sessionId) ?? "";
|
|
2487
|
+
const newWindowId = crypto.randomUUID();
|
|
2488
|
+
eventStore.append(sessionId, {
|
|
2489
|
+
type: "context.compacted",
|
|
2490
|
+
data: { closedWindowId, newWindowId, beforeTokens: result.usage.promptTokens, afterTokens: 0, summary }
|
|
2491
|
+
});
|
|
2492
|
+
eventStore.append(sessionId, {
|
|
2493
|
+
type: "message.start",
|
|
2494
|
+
data: {
|
|
2495
|
+
messageId: assistantMsgId,
|
|
2496
|
+
role: "assistant",
|
|
2497
|
+
content: summary,
|
|
2498
|
+
contextWindowId: newWindowId,
|
|
2499
|
+
isCompactionSummary: true
|
|
2500
|
+
}
|
|
2501
|
+
});
|
|
2502
|
+
eventStore.append(sessionId, createMessageDoneEvent(assistantMsgId, {}));
|
|
2503
|
+
eventStore.append(sessionId, createChatDoneEvent(assistantMsgId, "complete"));
|
|
2504
|
+
logger.info("Manual compaction complete", { sessionId });
|
|
2505
|
+
}
|
|
2506
|
+
|
|
2417
2507
|
// src/server/auth.ts
|
|
2418
2508
|
import { readFile as readFile2, writeFile as writeFile2, mkdir as mkdir2 } from "fs/promises";
|
|
2419
2509
|
import { join as join2, dirname as dirname2 } from "path";
|
|
@@ -2862,7 +2952,6 @@ function createWebSocketServer(httpServer, config4, getLLMClient, getActiveProvi
|
|
|
2862
2952
|
return;
|
|
2863
2953
|
}
|
|
2864
2954
|
sessionManager.clearMessageQueue(sessionId);
|
|
2865
|
-
sessionManager.setRunning(sessionId, false);
|
|
2866
2955
|
const contextState = sessionManager.getContextState(sessionId);
|
|
2867
2956
|
sendFn(sessionId, createContextStateMessage(contextState));
|
|
2868
2957
|
}
|
|
@@ -3157,17 +3246,14 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
|
|
|
3157
3246
|
send(createErrorMessage("SESSION_RUNNING", "Cannot compact while session is running", message.id));
|
|
3158
3247
|
return;
|
|
3159
3248
|
}
|
|
3160
|
-
const contextState = sessionManager.getContextState(sessionId);
|
|
3161
|
-
const tokensBefore = contextState.currentTokens;
|
|
3162
3249
|
send({ type: "ack", payload: {}, id: message.id });
|
|
3163
3250
|
(async () => {
|
|
3164
3251
|
try {
|
|
3165
|
-
await
|
|
3252
|
+
await compactContext({
|
|
3166
3253
|
sessionManager,
|
|
3167
3254
|
sessionId,
|
|
3168
3255
|
llmClient: llmForSession(sessionId),
|
|
3169
|
-
statsIdentity: statsForSession(sessionId)
|
|
3170
|
-
tokenCountAtClose: tokensBefore
|
|
3256
|
+
statsIdentity: statsForSession(sessionId)
|
|
3171
3257
|
});
|
|
3172
3258
|
const newContextState = sessionManager.getContextState(sessionId);
|
|
3173
3259
|
sendForSession(sessionId, createContextStateMessage(newContextState));
|
|
@@ -3302,10 +3388,6 @@ ${content}` : workflowInfo;
|
|
|
3302
3388
|
});
|
|
3303
3389
|
return;
|
|
3304
3390
|
}
|
|
3305
|
-
if (session.mode !== "builder") {
|
|
3306
|
-
send(createErrorMessage("INVALID_MODE", "Runner can only be launched in builder mode", message.id));
|
|
3307
|
-
return;
|
|
3308
|
-
}
|
|
3309
3391
|
const launchPayloadEarly = message.payload;
|
|
3310
3392
|
const pendingCriteria = session.criteria.filter((c) => c.status.type !== "passed");
|
|
3311
3393
|
if (!launchPayloadEarly?.workflowId && pendingCriteria.length === 0) {
|
|
@@ -3339,7 +3421,7 @@ ${content}` : workflowInfo;
|
|
|
3339
3421
|
sessionId,
|
|
3340
3422
|
llmClient: llmForSession(sessionId),
|
|
3341
3423
|
statsIdentity: statsForSession(sessionId),
|
|
3342
|
-
|
|
3424
|
+
injectWorkflowKickoff: !hasUserMessage,
|
|
3343
3425
|
...launchPayload?.workflowId ? { workflowId: launchPayload.workflowId } : {},
|
|
3344
3426
|
...launchPayload?.subGroup ? { subGroup: launchPayload.subGroup } : {},
|
|
3345
3427
|
...hasUserMessage ? {
|
|
@@ -3357,6 +3439,8 @@ ${content}` : workflowInfo;
|
|
|
3357
3439
|
}
|
|
3358
3440
|
logger.error("Runner error", { error, sessionId });
|
|
3359
3441
|
}).finally(() => {
|
|
3442
|
+
sessionManager.setRunning(sessionId, false);
|
|
3443
|
+
sendForSession(sessionId, createSessionRunningMessage(false));
|
|
3360
3444
|
cleanupAfterTurn(sessionId, controller, sendForSession, true);
|
|
3361
3445
|
});
|
|
3362
3446
|
break;
|
|
@@ -5746,7 +5830,7 @@ import { Router as Router6 } from "express";
|
|
|
5746
5830
|
import { spawn as spawn5 } from "child_process";
|
|
5747
5831
|
|
|
5748
5832
|
// src/constants.ts
|
|
5749
|
-
var VERSION = "2.0.0-beta.
|
|
5833
|
+
var VERSION = "2.0.0-beta.7";
|
|
5750
5834
|
|
|
5751
5835
|
// src/server/routes/auto-update.ts
|
|
5752
5836
|
var updateInProgress = false;
|
|
@@ -6049,7 +6133,7 @@ async function createServerHandle(config4) {
|
|
|
6049
6133
|
res.json({ project });
|
|
6050
6134
|
});
|
|
6051
6135
|
app.get("/api/sessions", async (req, res) => {
|
|
6052
|
-
const { getRecentUserPromptsForSession } = await import("./events-
|
|
6136
|
+
const { getRecentUserPromptsForSession } = await import("./events-PQ3KTI5H.js");
|
|
6053
6137
|
const projectId = req.query["projectId"];
|
|
6054
6138
|
const limit = Math.min(parseInt(req.query["limit"]) || 20, 100);
|
|
6055
6139
|
const offset = parseInt(req.query["offset"]) || 0;
|
|
@@ -6082,8 +6166,8 @@ async function createServerHandle(config4) {
|
|
|
6082
6166
|
res.status(201).json({ session });
|
|
6083
6167
|
});
|
|
6084
6168
|
app.get("/api/sessions/:id", async (req, res) => {
|
|
6085
|
-
const { getEventStore: getEventStore2 } = await import("./events-
|
|
6086
|
-
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-
|
|
6169
|
+
const { getEventStore: getEventStore2 } = await import("./events-PQ3KTI5H.js");
|
|
6170
|
+
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-CXORTBAU.js");
|
|
6087
6171
|
const session = sessionManager.getSession(req.params.id);
|
|
6088
6172
|
if (!session) {
|
|
6089
6173
|
return res.status(404).json({ error: "Session not found" });
|
|
@@ -6113,8 +6197,8 @@ async function createServerHandle(config4) {
|
|
|
6113
6197
|
res.json({ success: true });
|
|
6114
6198
|
});
|
|
6115
6199
|
app.post("/api/sessions/:id/provider", async (req, res) => {
|
|
6116
|
-
const { getEventStore: getEventStore2 } = await import("./events-
|
|
6117
|
-
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-
|
|
6200
|
+
const { getEventStore: getEventStore2 } = await import("./events-PQ3KTI5H.js");
|
|
6201
|
+
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-CXORTBAU.js");
|
|
6118
6202
|
const sessionId = req.params.id;
|
|
6119
6203
|
const session = sessionManager.getSession(sessionId);
|
|
6120
6204
|
if (!session) {
|
|
@@ -6125,7 +6209,7 @@ async function createServerHandle(config4) {
|
|
|
6125
6209
|
return res.status(400).json({ error: "providerId is required" });
|
|
6126
6210
|
}
|
|
6127
6211
|
sessionManager.setSessionProvider(sessionId, providerId, model ?? "auto");
|
|
6128
|
-
const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-
|
|
6212
|
+
const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-QUT7YZQ7.js");
|
|
6129
6213
|
const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
|
|
6130
6214
|
const updatedConfig = setDefaultModelSelection(globalConfig, providerId, model ?? "auto");
|
|
6131
6215
|
await saveGlobalConfig(config4.mode ?? "production", updatedConfig);
|
|
@@ -6156,8 +6240,8 @@ async function createServerHandle(config4) {
|
|
|
6156
6240
|
res.json({ success: true });
|
|
6157
6241
|
});
|
|
6158
6242
|
app.put("/api/sessions/:id/mode", async (req, res) => {
|
|
6159
|
-
const { getEventStore: getEventStore2 } = await import("./events-
|
|
6160
|
-
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-
|
|
6243
|
+
const { getEventStore: getEventStore2 } = await import("./events-PQ3KTI5H.js");
|
|
6244
|
+
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-CXORTBAU.js");
|
|
6161
6245
|
const sessionId = req.params.id;
|
|
6162
6246
|
const session = sessionManager.getSession(sessionId);
|
|
6163
6247
|
if (!session) {
|
|
@@ -6213,14 +6297,14 @@ async function createServerHandle(config4) {
|
|
|
6213
6297
|
if (!callId || approved === void 0) {
|
|
6214
6298
|
return res.status(400).json({ error: "callId and approved are required" });
|
|
6215
6299
|
}
|
|
6216
|
-
const { providePathConfirmation } = await import("./tools-
|
|
6300
|
+
const { providePathConfirmation } = await import("./tools-SDXWIYSA.js");
|
|
6217
6301
|
const result = providePathConfirmation(callId, approved, alwaysAllow);
|
|
6218
6302
|
if (!result.found) {
|
|
6219
6303
|
return res.status(404).json({ error: "No pending path confirmation with that ID" });
|
|
6220
6304
|
}
|
|
6221
|
-
const { getEventStore: getEventStore2 } = await import("./events-
|
|
6222
|
-
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2, foldPendingConfirmations: foldPendingConfirmations2 } = await import("./folding-
|
|
6223
|
-
const { createSessionStateMessage: createSessionStateMessage2 } = await import("./protocol-
|
|
6305
|
+
const { getEventStore: getEventStore2 } = await import("./events-PQ3KTI5H.js");
|
|
6306
|
+
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2, foldPendingConfirmations: foldPendingConfirmations2 } = await import("./folding-CXORTBAU.js");
|
|
6307
|
+
const { createSessionStateMessage: createSessionStateMessage2 } = await import("./protocol-CN24IKQN.js");
|
|
6224
6308
|
const eventStore = getEventStore2();
|
|
6225
6309
|
const events = eventStore.getEvents(sessionId);
|
|
6226
6310
|
const messages = buildMessagesFromStoredEvents2(events);
|
|
@@ -6237,7 +6321,7 @@ async function createServerHandle(config4) {
|
|
|
6237
6321
|
if (!callId || !answer) {
|
|
6238
6322
|
return res.status(400).json({ error: "callId and answer are required" });
|
|
6239
6323
|
}
|
|
6240
|
-
const { provideAnswer: provideAnswer2 } = await import("./tools-
|
|
6324
|
+
const { provideAnswer: provideAnswer2 } = await import("./tools-SDXWIYSA.js");
|
|
6241
6325
|
const found = provideAnswer2(callId, answer);
|
|
6242
6326
|
if (!found) {
|
|
6243
6327
|
return res.status(404).json({ error: "No pending question with that ID" });
|
|
@@ -6273,14 +6357,14 @@ async function createServerHandle(config4) {
|
|
|
6273
6357
|
if (!session) {
|
|
6274
6358
|
return res.status(404).json({ error: "Session not found" });
|
|
6275
6359
|
}
|
|
6276
|
-
const { stopSessionExecution } = await import("./chat-handler-
|
|
6277
|
-
const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-
|
|
6360
|
+
const { stopSessionExecution } = await import("./chat-handler-XIAY7O5X.js");
|
|
6361
|
+
const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-SDXWIYSA.js");
|
|
6278
6362
|
stopSessionExecution(sessionId, sessionManager);
|
|
6279
6363
|
abortSession(sessionId);
|
|
6280
6364
|
cancelQuestionsForSession(sessionId, "Session stopped by user");
|
|
6281
6365
|
cancelPathConfirmationsForSession(sessionId, "Session stopped by user");
|
|
6282
6366
|
sessionManager.clearMessageQueue(sessionId);
|
|
6283
|
-
const eventStore = (await import("./events-
|
|
6367
|
+
const eventStore = (await import("./events-PQ3KTI5H.js")).getEventStore();
|
|
6284
6368
|
eventStore.append(sessionId, { type: "running.changed", data: { isRunning: false } });
|
|
6285
6369
|
res.json({ success: true });
|
|
6286
6370
|
});
|
|
@@ -6294,7 +6378,7 @@ async function createServerHandle(config4) {
|
|
|
6294
6378
|
if (typeof messageIndex !== "number" || messageIndex < 0) {
|
|
6295
6379
|
return res.status(400).json({ error: "messageIndex must be a non-negative number" });
|
|
6296
6380
|
}
|
|
6297
|
-
const { truncateSessionMessages } = await import("./events-
|
|
6381
|
+
const { truncateSessionMessages } = await import("./events-PQ3KTI5H.js");
|
|
6298
6382
|
truncateSessionMessages(sessionId, messageIndex);
|
|
6299
6383
|
res.json({ success: true });
|
|
6300
6384
|
});
|
|
@@ -6312,7 +6396,7 @@ async function createServerHandle(config4) {
|
|
|
6312
6396
|
if (!msg) {
|
|
6313
6397
|
return res.status(400).json({ error: "Message not found at this index" });
|
|
6314
6398
|
}
|
|
6315
|
-
const { truncateSessionMessages } = await import("./events-
|
|
6399
|
+
const { truncateSessionMessages } = await import("./events-PQ3KTI5H.js");
|
|
6316
6400
|
truncateSessionMessages(sessionId, messageIndex - 1);
|
|
6317
6401
|
sessionManager.queueMessage(sessionId, "asap", msg.content, msg.attachments, msg.messageKind);
|
|
6318
6402
|
res.json({ success: true });
|
|
@@ -6344,7 +6428,7 @@ async function createServerHandle(config4) {
|
|
|
6344
6428
|
res.json({ accepted: true });
|
|
6345
6429
|
});
|
|
6346
6430
|
app.get("/api/settings", async (req, res) => {
|
|
6347
|
-
const { getSetting, SETTINGS_DEFAULTS } = await import("./settings-
|
|
6431
|
+
const { getSetting, SETTINGS_DEFAULTS } = await import("./settings-6XX56F3F.js");
|
|
6348
6432
|
const keysParam = req.query["keys"];
|
|
6349
6433
|
if (!keysParam) {
|
|
6350
6434
|
return res.status(400).json({ error: "keys query parameter is required" });
|
|
@@ -6357,19 +6441,19 @@ async function createServerHandle(config4) {
|
|
|
6357
6441
|
res.json(result);
|
|
6358
6442
|
});
|
|
6359
6443
|
app.get("/api/settings/:key", async (req, res) => {
|
|
6360
|
-
const { getSetting, SETTINGS_DEFAULTS } = await import("./settings-
|
|
6444
|
+
const { getSetting, SETTINGS_DEFAULTS } = await import("./settings-6XX56F3F.js");
|
|
6361
6445
|
const key = req.params.key;
|
|
6362
6446
|
const value = getSetting(key) ?? SETTINGS_DEFAULTS[key] ?? null;
|
|
6363
6447
|
res.json({ key, value });
|
|
6364
6448
|
});
|
|
6365
6449
|
app.get("/api/settings/:key", async (req, res) => {
|
|
6366
|
-
const { getSetting, SETTINGS_DEFAULTS } = await import("./settings-
|
|
6450
|
+
const { getSetting, SETTINGS_DEFAULTS } = await import("./settings-6XX56F3F.js");
|
|
6367
6451
|
const key = req.params.key;
|
|
6368
6452
|
const value = getSetting(key) ?? SETTINGS_DEFAULTS[key] ?? null;
|
|
6369
6453
|
res.json({ key, value });
|
|
6370
6454
|
});
|
|
6371
6455
|
app.put("/api/settings/:key", async (req, res) => {
|
|
6372
|
-
const { setSetting } = await import("./settings-
|
|
6456
|
+
const { setSetting } = await import("./settings-6XX56F3F.js");
|
|
6373
6457
|
const key = req.params.key;
|
|
6374
6458
|
const { value } = req.body;
|
|
6375
6459
|
if (value === void 0) {
|
|
@@ -6384,7 +6468,7 @@ async function createServerHandle(config4) {
|
|
|
6384
6468
|
let visionFallback;
|
|
6385
6469
|
let globalWorkdir;
|
|
6386
6470
|
try {
|
|
6387
|
-
const { loadGlobalConfig, getVisionFallback } = await import("./config-
|
|
6471
|
+
const { loadGlobalConfig, getVisionFallback } = await import("./config-QUT7YZQ7.js");
|
|
6388
6472
|
const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
|
|
6389
6473
|
const fallback = getVisionFallback(globalConfig);
|
|
6390
6474
|
if (fallback) {
|
|
@@ -6458,12 +6542,12 @@ async function createServerHandle(config4) {
|
|
|
6458
6542
|
}
|
|
6459
6543
|
});
|
|
6460
6544
|
app.post("/api/providers", async (req, res) => {
|
|
6461
|
-
const { name, url, backend, apiKey, model } = req.body;
|
|
6545
|
+
const { name, url, backend, apiKey, model, isLocal } = req.body;
|
|
6462
6546
|
if (!name || !url || !backend) {
|
|
6463
6547
|
return res.status(400).json({ error: "name, url, and backend are required" });
|
|
6464
6548
|
}
|
|
6465
6549
|
try {
|
|
6466
|
-
const { loadGlobalConfig, saveGlobalConfig, addProvider, setDefaultModelSelection } = await import("./config-
|
|
6550
|
+
const { loadGlobalConfig, saveGlobalConfig, addProvider, setDefaultModelSelection } = await import("./config-QUT7YZQ7.js");
|
|
6467
6551
|
const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
|
|
6468
6552
|
const providerBackend = backend;
|
|
6469
6553
|
const configWithProvider = addProvider(globalConfig, {
|
|
@@ -6471,6 +6555,7 @@ async function createServerHandle(config4) {
|
|
|
6471
6555
|
url,
|
|
6472
6556
|
backend: providerBackend,
|
|
6473
6557
|
apiKey,
|
|
6558
|
+
...isLocal !== void 0 ? { isLocal } : {},
|
|
6474
6559
|
models: model ? [{ id: model, contextWindow: 2e5, source: "user" }] : [],
|
|
6475
6560
|
isActive: true
|
|
6476
6561
|
});
|
|
@@ -6496,7 +6581,7 @@ async function createServerHandle(config4) {
|
|
|
6496
6581
|
app.post("/api/init/config", async (req, res) => {
|
|
6497
6582
|
const { workdir, visionFallback } = req.body;
|
|
6498
6583
|
try {
|
|
6499
|
-
const { loadGlobalConfig, saveGlobalConfig } = await import("./config-
|
|
6584
|
+
const { loadGlobalConfig, saveGlobalConfig } = await import("./config-QUT7YZQ7.js");
|
|
6500
6585
|
const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
|
|
6501
6586
|
const updatedConfig = {
|
|
6502
6587
|
...globalConfig,
|
|
@@ -6524,13 +6609,33 @@ async function createServerHandle(config4) {
|
|
|
6524
6609
|
});
|
|
6525
6610
|
app.delete("/api/providers/:id", async (req, res) => {
|
|
6526
6611
|
const { id } = req.params;
|
|
6527
|
-
const { loadGlobalConfig, saveGlobalConfig, removeProvider } = await import("./config-
|
|
6612
|
+
const { loadGlobalConfig, saveGlobalConfig, removeProvider } = await import("./config-QUT7YZQ7.js");
|
|
6528
6613
|
const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
|
|
6529
6614
|
const updatedConfig = removeProvider(globalConfig, id);
|
|
6530
6615
|
await saveGlobalConfig(config4.mode ?? "production", updatedConfig);
|
|
6531
6616
|
providerManager.setProviders(updatedConfig.providers, updatedConfig.defaultModelSelection ?? void 0);
|
|
6532
6617
|
res.json({ success: true });
|
|
6533
6618
|
});
|
|
6619
|
+
app.patch("/api/providers/:id", async (req, res) => {
|
|
6620
|
+
const { id } = req.params;
|
|
6621
|
+
const { isLocal } = req.body;
|
|
6622
|
+
try {
|
|
6623
|
+
const { loadGlobalConfig, saveGlobalConfig, updateProvider } = await import("./config-QUT7YZQ7.js");
|
|
6624
|
+
const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
|
|
6625
|
+
const provider = globalConfig.providers.find((p) => p.id === id);
|
|
6626
|
+
if (!provider) {
|
|
6627
|
+
return res.status(404).json({ error: "Provider not found" });
|
|
6628
|
+
}
|
|
6629
|
+
const updates = {};
|
|
6630
|
+
if (isLocal !== void 0) updates["isLocal"] = isLocal;
|
|
6631
|
+
const updatedConfig = updateProvider(globalConfig, id, updates);
|
|
6632
|
+
await saveGlobalConfig(config4.mode ?? "production", updatedConfig);
|
|
6633
|
+
providerManager.setProviders(updatedConfig.providers, updatedConfig.defaultModelSelection ?? void 0);
|
|
6634
|
+
res.json({ success: true, provider: updatedConfig.providers.find((p) => p.id === id) });
|
|
6635
|
+
} catch (error) {
|
|
6636
|
+
res.status(500).json({ error: error instanceof Error ? error.message : "Failed to update provider" });
|
|
6637
|
+
}
|
|
6638
|
+
});
|
|
6534
6639
|
app.get("/api/providers/:id/models", async (req, res) => {
|
|
6535
6640
|
const { id } = req.params;
|
|
6536
6641
|
const models = await providerManager.getProviderModels(id);
|
|
@@ -6544,7 +6649,7 @@ async function createServerHandle(config4) {
|
|
|
6544
6649
|
return res.status(400).json({ error: result.error });
|
|
6545
6650
|
}
|
|
6546
6651
|
const llmClient = getLLMClient();
|
|
6547
|
-
const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-
|
|
6652
|
+
const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-QUT7YZQ7.js");
|
|
6548
6653
|
const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
|
|
6549
6654
|
const updatedConfig = setDefaultModelSelection(globalConfig, id, llmClient.getModel());
|
|
6550
6655
|
await saveGlobalConfig(config4.mode ?? "production", updatedConfig);
|
|
@@ -6575,7 +6680,7 @@ async function createServerHandle(config4) {
|
|
|
6575
6680
|
if (!result.success) {
|
|
6576
6681
|
return res.status(400).json({ error: result.error });
|
|
6577
6682
|
}
|
|
6578
|
-
const { loadGlobalConfig, saveGlobalConfig } = await import("./config-
|
|
6683
|
+
const { loadGlobalConfig, saveGlobalConfig } = await import("./config-QUT7YZQ7.js");
|
|
6579
6684
|
const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
|
|
6580
6685
|
const updatedProviders = providerManager.getProviders();
|
|
6581
6686
|
const updatedConfig = {
|
|
@@ -6789,7 +6894,7 @@ async function createServerHandle(config4) {
|
|
|
6789
6894
|
providerManager
|
|
6790
6895
|
);
|
|
6791
6896
|
const wss = wssExports.wss;
|
|
6792
|
-
const { QueueProcessor } = await import("./processor-
|
|
6897
|
+
const { QueueProcessor } = await import("./processor-6VIYGURD.js");
|
|
6793
6898
|
const queueProcessor = new QueueProcessor({
|
|
6794
6899
|
sessionManager,
|
|
6795
6900
|
providerManager,
|
|
@@ -6861,4 +6966,4 @@ export {
|
|
|
6861
6966
|
createServerHandle,
|
|
6862
6967
|
createServer
|
|
6863
6968
|
};
|
|
6864
|
-
//# sourceMappingURL=chunk-
|
|
6969
|
+
//# sourceMappingURL=chunk-LN22TXNK.js.map
|