openfox 2.0.0-beta.5 → 2.0.0-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/{chat-handler-BM6EBFKS.js → chat-handler-27FY5TEH.js} +14 -27
  2. package/dist/{chunk-CLGRPDZT.js → chunk-3FFHHYWP.js} +174 -90
  3. package/dist/{chunk-HGAMIPFO.js → chunk-7FDY3EOH.js} +18 -176
  4. package/dist/{chunk-V6DYJV5R.js → chunk-7TTEGAO6.js} +12 -10
  5. package/dist/{chunk-T4HV6GS5.js → chunk-BVHFMAVN.js} +1 -1
  6. package/dist/{chunk-OBD6D5ZO.js → chunk-CDDMHSZF.js} +4 -4
  7. package/dist/{chunk-HHAJ3QF6.js → chunk-EMJGF3A7.js} +9 -24
  8. package/dist/{chunk-DFWGWULB.js → chunk-FRCLNAE2.js} +2935 -3127
  9. package/dist/{chunk-RF2JGDSS.js → chunk-IGSZUXQP.js} +3 -3
  10. package/dist/{chunk-UH27FDT7.js → chunk-NPHYEUYE.js} +124 -12
  11. package/dist/{chunk-NNEHZT3V.js → chunk-QUSUEN5R.js} +3 -3
  12. package/dist/{chunk-I67T2E5K.js → chunk-R3EK3ODJ.js} +6 -6
  13. package/dist/{chunk-X36JIWSF.js → chunk-RBJ25FIR.js} +135 -147
  14. package/dist/{chunk-PSJIT5LZ.js → chunk-RFNEDBVO.js} +4 -4
  15. package/dist/chunk-RI6GAMNP.js +13 -0
  16. package/dist/{chunk-XL7SW5B4.js → chunk-XJEOP6XU.js} +5 -4
  17. package/dist/cli/dev.js +1 -1
  18. package/dist/cli/index.js +1 -1
  19. package/dist/compactor-TDNRM3A7.js +9 -0
  20. package/dist/{config-YU7NYZYG.js → config-VBBMTXJZ.js} +5 -6
  21. package/dist/{events-T37KTNCX.js → events-PQ3KTI5H.js} +8 -7
  22. package/dist/{folding-IIKWAGG2.js → folding-CXORTBAU.js} +2 -2
  23. package/dist/{orchestrator-JTUHXF7C.js → orchestrator-QDCVUBCL.js} +18 -22
  24. package/dist/package.json +1 -1
  25. package/dist/{processor-66YBBQ6B.js → processor-K4B7QRO2.js} +8 -9
  26. package/dist/{protocol-ALBHLBBF.js → protocol-CN24IKQN.js} +3 -5
  27. package/dist/{protocol-CiYlonA5.d.ts → protocol-De-Pzgry.d.ts} +10 -0
  28. package/dist/{provider-HTJEB3ON.js → provider-NRWSSO55.js} +9 -10
  29. package/dist/{serve-EUEQ6ERI.js → serve-J6EM3G6N.js} +25 -26
  30. package/dist/server/index.d.ts +1 -6
  31. package/dist/server/index.js +15 -16
  32. package/dist/{settings-VRAOAPLA.js → settings-6XX56F3F.js} +2 -2
  33. package/dist/shared/index.d.ts +2 -2
  34. package/dist/shared/index.js +1 -1
  35. package/dist/{tools-56LACLKH.js → tools-GCANYSB7.js} +11 -13
  36. package/dist/web/assets/{index-C5gaXnFj.css → index-aa3jRAZ9.css} +2 -2
  37. package/dist/web/assets/index-ntDiC8b_.js +299 -0
  38. package/dist/web/index.html +2 -2
  39. package/dist/web/sw.js +1 -1
  40. package/dist/workflow-defaults/default.workflow.json +3 -3
  41. package/package.json +1 -1
  42. package/dist/auto-compaction-2ZAYDXGF.js +0 -27
  43. package/dist/chunk-CGZHLM3K.js +0 -70
  44. package/dist/chunk-SZKEGZIB.js +0 -140
  45. package/dist/runtime-config-NPSPMRDA.js +0 -9
  46. package/dist/vision-fallback-3MIZZ6NQ.js +0 -22
  47. package/dist/web/assets/index-DQ2Vv-Yl.js +0 -317
  48. /package/dist/web/{workbox-7fc22fbe.js → workbox-8c29f6e4.js} +0 -0
@@ -5,40 +5,38 @@ import {
5
5
  generateSessionName,
6
6
  getSessionMessageCount,
7
7
  needsNameGenerationCheck
8
- } from "./chunk-OBD6D5ZO.js";
8
+ } from "./chunk-CDDMHSZF.js";
9
9
  import {
10
10
  runChatTurn
11
- } from "./chunk-X36JIWSF.js";
12
- import "./chunk-DFWGWULB.js";
13
- import "./chunk-PSJIT5LZ.js";
14
- import "./chunk-XAMAYRDA.js";
11
+ } from "./chunk-RBJ25FIR.js";
12
+ import "./chunk-FRCLNAE2.js";
15
13
  import "./chunk-DL6ZILAF.js";
16
14
  import "./chunk-PBGOZMVY.js";
17
15
  import "./chunk-VRGRAQDG.js";
18
- import "./chunk-HGAMIPFO.js";
19
16
  import {
20
17
  getEventStore
21
- } from "./chunk-UH27FDT7.js";
22
- import "./chunk-FBGWG4N6.js";
23
- import "./chunk-XL7SW5B4.js";
18
+ } from "./chunk-NPHYEUYE.js";
19
+ import "./chunk-XJEOP6XU.js";
24
20
  import {
25
21
  createChatMessageMessage,
26
22
  createPhaseChangedMessage,
27
23
  createSessionRunningMessage
28
- } from "./chunk-V6DYJV5R.js";
24
+ } from "./chunk-7TTEGAO6.js";
29
25
  import "./chunk-BJYPTN5S.js";
30
- import "./chunk-T4HV6GS5.js";
31
- import "./chunk-CQGTEGKL.js";
32
- import "./chunk-CGZHLM3K.js";
33
- import "./chunk-SZKEGZIB.js";
26
+ import "./chunk-RFNEDBVO.js";
27
+ import "./chunk-XAMAYRDA.js";
28
+ import "./chunk-FBGWG4N6.js";
29
+ import "./chunk-BVHFMAVN.js";
30
+ import "./chunk-7FDY3EOH.js";
34
31
  import {
35
32
  logger
36
33
  } from "./chunk-K44MW7JJ.js";
34
+ import "./chunk-CQGTEGKL.js";
37
35
 
38
36
  // src/server/session/chat-handler.ts
39
37
  var activeAgents = /* @__PURE__ */ new Map();
40
38
  async function startChatSession(sessionId, content, deps, options) {
41
- const { sessionManager, llmClient, statsIdentity, broadcastForSession } = deps;
39
+ const { sessionManager, llmClient, broadcastForSession } = deps;
42
40
  const session = sessionManager.getSession(sessionId);
43
41
  if (!session) {
44
42
  throw new Error("Session not found");
@@ -60,17 +58,6 @@ async function startChatSession(sessionId, content, deps, options) {
60
58
  sessionManager.setRunning(sessionId, true);
61
59
  broadcastForSession(sessionId, createSessionRunningMessage(true));
62
60
  try {
63
- const { maybeAutoCompactContext } = await import("./auto-compaction-2ZAYDXGF.js");
64
- await maybeAutoCompactContext({
65
- sessionManager,
66
- sessionId,
67
- llmClient,
68
- statsIdentity,
69
- signal: controller.signal
70
- });
71
- if (controller.signal.aborted) {
72
- return;
73
- }
74
61
  const userMessage = sessionManager.addMessage(sessionId, {
75
62
  role: "user",
76
63
  content,
@@ -174,4 +161,4 @@ export {
174
161
  startChatSession,
175
162
  stopSessionExecution
176
163
  };
177
- //# sourceMappingURL=chat-handler-BM6EBFKS.js.map
164
+ //# sourceMappingURL=chat-handler-27FY5TEH.js.map
@@ -1,14 +1,19 @@
1
1
  import {
2
- createVerifierNudgeConfig,
3
- runBuilderTurn,
2
+ computeDynamicContextHash,
3
+ injectWorkflowKickoffIfNeeded,
4
+ runAgentTurn,
4
5
  runChatTurn
5
- } from "./chunk-X36JIWSF.js";
6
+ } from "./chunk-RBJ25FIR.js";
6
7
  import {
8
+ COMPACTION_PROMPT,
7
9
  TurnMetrics,
8
10
  agentExists,
11
+ buildBasePrompt,
9
12
  buildTopLevelSystemPrompt,
10
13
  checkAborted,
11
- computeDynamicContextHash,
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
- performManualContextCompaction,
53
+ processContextImages,
47
54
  saveAgent,
48
55
  saveAgentToProject,
49
56
  saveItemToDir,
50
57
  saveSkill,
51
58
  saveSkillToProject,
52
59
  skillExists,
53
- spawnShellProcess
54
- } from "./chunk-DFWGWULB.js";
55
- import {
56
- getProject
57
- } from "./chunk-XAMAYRDA.js";
60
+ spawnShellProcess,
61
+ streamLLMPure
62
+ } from "./chunk-FRCLNAE2.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-UH27FDT7.js";
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-XL7SW5B4.js";
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-V6DYJV5R.js";
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-T4HV6GS5.js";
132
+ } from "./chunk-BVHFMAVN.js";
137
133
  import {
138
- getGlobalConfigDir
139
- } from "./chunk-CQGTEGKL.js";
134
+ createProviderManager,
135
+ parseDefaultModelSelection
136
+ } from "./chunk-IGSZUXQP.js";
140
137
  import {
141
- getRuntimeConfig,
142
- setRuntimeConfig
143
- } from "./chunk-CGZHLM3K.js";
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 getCurrentWindowMessageOptions(sessionId) {
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 = getCurrentWindowMessageOptions(sessionId);
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 = getCurrentWindowMessageOptions(sessionId);
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 agentResult = await runBuilderTurn(
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 performManualContextCompaction({
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
- injectBuilderKickoff: !hasUserMessage,
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.5";
5833
+ var VERSION = "2.0.0-beta.6";
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-T37KTNCX.js");
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-T37KTNCX.js");
6086
- const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-IIKWAGG2.js");
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-T37KTNCX.js");
6117
- const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-IIKWAGG2.js");
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-YU7NYZYG.js");
6212
+ const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-VBBMTXJZ.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-T37KTNCX.js");
6160
- const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-IIKWAGG2.js");
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-56LACLKH.js");
6300
+ const { providePathConfirmation } = await import("./tools-GCANYSB7.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-T37KTNCX.js");
6222
- const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2, foldPendingConfirmations: foldPendingConfirmations2 } = await import("./folding-IIKWAGG2.js");
6223
- const { createSessionStateMessage: createSessionStateMessage2 } = await import("./protocol-ALBHLBBF.js");
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-56LACLKH.js");
6324
+ const { provideAnswer: provideAnswer2 } = await import("./tools-GCANYSB7.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-BM6EBFKS.js");
6277
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-56LACLKH.js");
6360
+ const { stopSessionExecution } = await import("./chat-handler-27FY5TEH.js");
6361
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-GCANYSB7.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-T37KTNCX.js")).getEventStore();
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-T37KTNCX.js");
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-T37KTNCX.js");
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-VRAOAPLA.js");
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-VRAOAPLA.js");
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-VRAOAPLA.js");
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-VRAOAPLA.js");
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-YU7NYZYG.js");
6471
+ const { loadGlobalConfig, getVisionFallback } = await import("./config-VBBMTXJZ.js");
6388
6472
  const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
6389
6473
  const fallback = getVisionFallback(globalConfig);
6390
6474
  if (fallback) {
@@ -6463,7 +6547,7 @@ async function createServerHandle(config4) {
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-YU7NYZYG.js");
6550
+ const { loadGlobalConfig, saveGlobalConfig, addProvider, setDefaultModelSelection } = await import("./config-VBBMTXJZ.js");
6467
6551
  const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
6468
6552
  const providerBackend = backend;
6469
6553
  const configWithProvider = addProvider(globalConfig, {
@@ -6496,7 +6580,7 @@ async function createServerHandle(config4) {
6496
6580
  app.post("/api/init/config", async (req, res) => {
6497
6581
  const { workdir, visionFallback } = req.body;
6498
6582
  try {
6499
- const { loadGlobalConfig, saveGlobalConfig } = await import("./config-YU7NYZYG.js");
6583
+ const { loadGlobalConfig, saveGlobalConfig } = await import("./config-VBBMTXJZ.js");
6500
6584
  const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
6501
6585
  const updatedConfig = {
6502
6586
  ...globalConfig,
@@ -6524,7 +6608,7 @@ async function createServerHandle(config4) {
6524
6608
  });
6525
6609
  app.delete("/api/providers/:id", async (req, res) => {
6526
6610
  const { id } = req.params;
6527
- const { loadGlobalConfig, saveGlobalConfig, removeProvider } = await import("./config-YU7NYZYG.js");
6611
+ const { loadGlobalConfig, saveGlobalConfig, removeProvider } = await import("./config-VBBMTXJZ.js");
6528
6612
  const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
6529
6613
  const updatedConfig = removeProvider(globalConfig, id);
6530
6614
  await saveGlobalConfig(config4.mode ?? "production", updatedConfig);
@@ -6544,7 +6628,7 @@ async function createServerHandle(config4) {
6544
6628
  return res.status(400).json({ error: result.error });
6545
6629
  }
6546
6630
  const llmClient = getLLMClient();
6547
- const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-YU7NYZYG.js");
6631
+ const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-VBBMTXJZ.js");
6548
6632
  const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
6549
6633
  const updatedConfig = setDefaultModelSelection(globalConfig, id, llmClient.getModel());
6550
6634
  await saveGlobalConfig(config4.mode ?? "production", updatedConfig);
@@ -6575,7 +6659,7 @@ async function createServerHandle(config4) {
6575
6659
  if (!result.success) {
6576
6660
  return res.status(400).json({ error: result.error });
6577
6661
  }
6578
- const { loadGlobalConfig, saveGlobalConfig } = await import("./config-YU7NYZYG.js");
6662
+ const { loadGlobalConfig, saveGlobalConfig } = await import("./config-VBBMTXJZ.js");
6579
6663
  const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
6580
6664
  const updatedProviders = providerManager.getProviders();
6581
6665
  const updatedConfig = {
@@ -6789,7 +6873,7 @@ async function createServerHandle(config4) {
6789
6873
  providerManager
6790
6874
  );
6791
6875
  const wss = wssExports.wss;
6792
- const { QueueProcessor } = await import("./processor-66YBBQ6B.js");
6876
+ const { QueueProcessor } = await import("./processor-K4B7QRO2.js");
6793
6877
  const queueProcessor = new QueueProcessor({
6794
6878
  sessionManager,
6795
6879
  providerManager,
@@ -6861,4 +6945,4 @@ export {
6861
6945
  createServerHandle,
6862
6946
  createServer
6863
6947
  };
6864
- //# sourceMappingURL=chunk-CLGRPDZT.js.map
6948
+ //# sourceMappingURL=chunk-3FFHHYWP.js.map