openfox 2.0.145 → 2.0.147

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 (58) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/CHANGELOG.md +22 -0
  3. package/dist/{auto-continue-ZAHNBHPA.js → auto-continue-FGQ63HHR.js} +9 -9
  4. package/dist/{chat-handler-5XMO5XBU.js → chat-handler-VCED3JYF.js} +12 -12
  5. package/dist/{chunk-OVAHNEFG.js → chunk-2PGRX4RH.js} +5 -4
  6. package/dist/{chunk-LG3LQLTZ.js → chunk-2V6QL6IW.js} +290 -120
  7. package/dist/{chunk-2DVAF6HY.js → chunk-5JGRKNMS.js} +3 -3
  8. package/dist/chunk-65KDNVRA.js +7 -0
  9. package/dist/{chunk-2BARKBWV.js → chunk-ABXERHIY.js} +8 -8
  10. package/dist/{chunk-QKPTMHA2.js → chunk-AJMBQMJH.js} +23 -19
  11. package/dist/{chunk-E4F32L4Q.js → chunk-CPRBMVI7.js} +43 -1
  12. package/dist/{chunk-STVJA7IX.js → chunk-CVQYCAMY.js} +3 -3
  13. package/dist/{chunk-HNJ32GRI.js → chunk-ESHP42KO.js} +5 -5
  14. package/dist/{chunk-FLTNKZNQ.js → chunk-KJEOKIH2.js} +4 -4
  15. package/dist/chunk-NHHC3AVI.js +231 -0
  16. package/dist/{chunk-YRSZJ7IZ.js → chunk-NZBO3A3W.js} +2 -2
  17. package/dist/{chunk-3IVJ65IG.js → chunk-ORIPUMOQ.js} +5 -5
  18. package/dist/{chunk-VFHGN3IS.js → chunk-P7KUU5VB.js} +2 -2
  19. package/dist/{chunk-PW5L4WBG.js → chunk-Q6MBLKL4.js} +1 -1
  20. package/dist/{chunk-6FKSGQYO.js → chunk-QHFJRUJV.js} +3 -3
  21. package/dist/{chunk-X2BJFVER.js → chunk-UOBJP4GN.js} +21 -15
  22. package/dist/{chunk-DBTDMK23.js → chunk-YQJ6HEFS.js} +63 -56
  23. package/dist/cli/dev.js +1 -1
  24. package/dist/cli/index.js +1 -1
  25. package/dist/{compactor-53WDNC2S.js → compactor-YY7PO2XE.js} +5 -5
  26. package/dist/{describe-image-IGLGVEOJ.js → describe-image-Z5WS6YU3.js} +8 -8
  27. package/dist/{dynamic-context-7AJC6AII.js → dynamic-context-YLRA34WJ.js} +5 -5
  28. package/dist/{events-ODZ4SSBW.js → events-FTS5W6FX.js} +6 -4
  29. package/dist/{export-import-AH5HBHO6.js → export-import-R4E5BUQS.js} +5 -5
  30. package/dist/{folding-V2R2MZ6Y.js → folding-VWRMYZ5T.js} +4 -2
  31. package/dist/{launch-2QA2EHCT.js → launch-QP2BI3PB.js} +13 -13
  32. package/dist/{orchestrator-L5VINV36.js → orchestrator-7T62RLDL.js} +11 -11
  33. package/dist/package.json +1 -1
  34. package/dist/{path-security-3YFS3GJQ.js → path-security-25P6TQ4R.js} +7 -7
  35. package/dist/{processor-UQ5ITWL6.js → processor-LDLRELLS.js} +11 -11
  36. package/dist/{protocol-Ch2s26bR.d.ts → protocol--oV4P3L_.d.ts} +2 -1
  37. package/dist/{protocol-MRMOB3P4.js → protocol-M4DFHA32.js} +3 -3
  38. package/dist/provider/index.d.ts +4 -4
  39. package/dist/{serve-CIBBSOLM.js → serve-A4AJAH2N.js} +18 -18
  40. package/dist/server/index.d.ts +3 -3
  41. package/dist/server/index.js +17 -17
  42. package/dist/{server-YW3DO4K5.js → server-A3EGJ6MD.js} +16 -16
  43. package/dist/session-stats-Y7WRB5MP.js +23 -0
  44. package/dist/shared/index.d.ts +25 -9
  45. package/dist/shared/index.js +7 -3
  46. package/dist/skill-defaults/workflows/SKILL.md +149 -16
  47. package/dist/stats-2QMXP6G4.js +12 -0
  48. package/dist/{store-AOZ46PBS.js → store-OWOLXB74.js} +3 -3
  49. package/dist/{tools-RG4HDV75.js → tools-MRC27SZG.js} +9 -9
  50. package/dist/{types-BajWwfkt.d.ts → types-NEE5osQN.d.ts} +48 -1
  51. package/dist/{types-BiHNYUUI.d.ts → types-usLcJB6N.d.ts} +1 -1
  52. package/dist/{update-5ENWM2XR.js → update-MLDVVG3D.js} +2 -2
  53. package/dist/web/assets/{index-DL26wmhi.js → index-CkVmYTBd.js} +85 -85
  54. package/dist/web/index.html +1 -1
  55. package/dist/web/sw.js +1 -1
  56. package/package.json +1 -1
  57. package/dist/chunk-7OHXF5GW.js +0 -132
  58. package/dist/chunk-QV4BKKIO.js +0 -7
@@ -2,21 +2,21 @@ import {
2
2
  generateSessionNameForSession,
3
3
  getSessionMessageCount,
4
4
  needsNameGeneration
5
- } from "./chunk-3IVJ65IG.js";
5
+ } from "./chunk-ORIPUMOQ.js";
6
6
  import {
7
7
  launchWorkflowRun
8
- } from "./chunk-LG3LQLTZ.js";
8
+ } from "./chunk-2V6QL6IW.js";
9
9
  import {
10
10
  runChatTurn
11
- } from "./chunk-2BARKBWV.js";
11
+ } from "./chunk-ABXERHIY.js";
12
12
  import {
13
13
  applyDynamicContext,
14
14
  computeSessionHash,
15
15
  computeUnifiedDiff
16
- } from "./chunk-HNJ32GRI.js";
16
+ } from "./chunk-ESHP42KO.js";
17
17
  import {
18
18
  devServerManager
19
- } from "./chunk-QKPTMHA2.js";
19
+ } from "./chunk-AJMBQMJH.js";
20
20
  import {
21
21
  gitSpawnEnv
22
22
  } from "./chunk-J7GAZGZT.js";
@@ -25,7 +25,7 @@ import {
25
25
  } from "./chunk-X7ZAP6YW.js";
26
26
  import {
27
27
  appendCompactionPrompt
28
- } from "./chunk-VFHGN3IS.js";
28
+ } from "./chunk-P7KUU5VB.js";
29
29
  import {
30
30
  hasRecentLLMFailure,
31
31
  interruptLLMRetryWait
@@ -38,14 +38,15 @@ import {
38
38
  } from "./chunk-I72ACQ6R.js";
39
39
  import {
40
40
  combineEventsWithSnapshot
41
- } from "./chunk-2DVAF6HY.js";
41
+ } from "./chunk-5JGRKNMS.js";
42
42
  import {
43
43
  getEventStore
44
- } from "./chunk-YRSZJ7IZ.js";
44
+ } from "./chunk-NZBO3A3W.js";
45
45
  import {
46
46
  buildMessagesFromStoredEvents,
47
+ buildSessionStatsMessages,
47
48
  foldPendingConfirmations
48
- } from "./chunk-E4F32L4Q.js";
49
+ } from "./chunk-CPRBMVI7.js";
49
50
  import {
50
51
  getRuntimeConfig
51
52
  } from "./chunk-YEW4YEJU.js";
@@ -68,7 +69,7 @@ import {
68
69
  parseClientMessage,
69
70
  serializeServerMessage,
70
71
  storedEventToServerMessage
71
- } from "./chunk-OVAHNEFG.js";
72
+ } from "./chunk-2PGRX4RH.js";
72
73
  import {
73
74
  getPlatformShell
74
75
  } from "./chunk-YEFZ5HBD.js";
@@ -78,9 +79,12 @@ import {
78
79
  import {
79
80
  logger
80
81
  } from "./chunk-K44MW7JJ.js";
82
+ import {
83
+ computeSessionStatsSummary
84
+ } from "./chunk-NHHC3AVI.js";
81
85
  import {
82
86
  createServerMessage
83
- } from "./chunk-PW5L4WBG.js";
87
+ } from "./chunk-Q6MBLKL4.js";
84
88
 
85
89
  // src/server/ws/server.ts
86
90
  import { WebSocketServer, WebSocket as WebSocket2 } from "ws";
@@ -938,6 +942,7 @@ function createWebSocketServer(httpServer, _config, getLLMClient, getActiveProvi
938
942
  const events = combineEventsWithSnapshot(updatedSession.id, snapshot, eventsSinceSnapshot);
939
943
  const maxVisible = getMaxVisibleItems();
940
944
  const { messages, hiddenCount } = buildMessagesFromStoredEvents(events, maxVisible || void 0);
945
+ const sessionStats = computeSessionStatsSummary(buildSessionStatsMessages(events));
941
946
  const pendingConfirmations = foldPendingConfirmations(events);
942
947
  const pendingQuestions = getPendingQuestionsForSession(updatedSession.id);
943
948
  const activeWorkflowExecution = sessionManager.getDisplayWorkflowExecution(updatedSession.id);
@@ -965,7 +970,8 @@ function createWebSocketServer(httpServer, _config, getLLMClient, getActiveProvi
965
970
  void 0,
966
971
  void 0,
967
972
  hiddenCount,
968
- activeWorkflowExecution ?? void 0
973
+ activeWorkflowExecution ?? void 0,
974
+ sessionStats
969
975
  )
970
976
  );
971
977
  if (effectiveWorkdir) {
@@ -1352,7 +1358,7 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
1352
1358
  }
1353
1359
  const session = sessionManager.requireSession(sessionId);
1354
1360
  try {
1355
- const { buildCachedPrompt, computePreviewToolDiff } = await import("./dynamic-context-7AJC6AII.js");
1361
+ const { buildCachedPrompt, computePreviewToolDiff } = await import("./dynamic-context-YLRA34WJ.js");
1356
1362
  const allAgents = await import("./registry-24U5BZAJ.js");
1357
1363
  const agentDef = allAgents.findAgentById(session.mode, await allAgents.loadAllAgentsDefault()) ?? allAgents.findAgentById("planner", await allAgents.loadAllAgentsDefault());
1358
1364
  const modelName = session.providerModel ?? _providerManager?.getCurrentModel();
@@ -1364,7 +1370,7 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
1364
1370
  const oldCached = sessionManager.getCachedPrompt(sessionId);
1365
1371
  const oldPrompt = oldCached?.systemPrompt;
1366
1372
  const diff = oldPrompt ? computeUnifiedDiff(oldPrompt, newPrompt) : [];
1367
- const { getToolRegistryForAgent } = await import("./tools-RG4HDV75.js");
1373
+ const { getToolRegistryForAgent } = await import("./tools-MRC27SZG.js");
1368
1374
  const unfilteredTools = getToolRegistryForAgent(agentDef).definitions;
1369
1375
  const toolDiff = computePreviewToolDiff(oldCached?.tools, unfilteredTools, newTools);
1370
1376
  send({
@@ -1737,4 +1743,4 @@ export {
1737
1743
  signalMcpReady,
1738
1744
  createWebSocketServer
1739
1745
  };
1740
- //# sourceMappingURL=chunk-X2BJFVER.js.map
1746
+ //# sourceMappingURL=chunk-UOBJP4GN.js.map
@@ -9,10 +9,10 @@ import {
9
9
  terminalManager,
10
10
  tokenFromPassword,
11
11
  verifyPassword
12
- } from "./chunk-X2BJFVER.js";
12
+ } from "./chunk-UOBJP4GN.js";
13
13
  import {
14
14
  TEMPLATE_VARIABLES
15
- } from "./chunk-LG3LQLTZ.js";
15
+ } from "./chunk-2V6QL6IW.js";
16
16
  import {
17
17
  projectSessionStatus
18
18
  } from "./chunk-T3S5MTMD.js";
@@ -42,7 +42,7 @@ import {
42
42
  setMcpManagerForTools,
43
43
  setMcpTools,
44
44
  setNotifyMcpServersChanged
45
- } from "./chunk-QKPTMHA2.js";
45
+ } from "./chunk-AJMBQMJH.js";
46
46
  import {
47
47
  deleteOwnedSkill,
48
48
  deleteProjectSkill,
@@ -120,7 +120,7 @@ import {
120
120
  import {
121
121
  getPendingConfirmationsBySession,
122
122
  providePathConfirmation
123
- } from "./chunk-STVJA7IX.js";
123
+ } from "./chunk-CVQYCAMY.js";
124
124
  import {
125
125
  ALWAYS_ALLOWED,
126
126
  ALWAYS_ALLOWED_FOR_SUBAGENTS,
@@ -144,14 +144,14 @@ import {
144
144
  emitWorkflowExecutionChanged,
145
145
  getCurrentContextWindowId,
146
146
  getSessionState
147
- } from "./chunk-2DVAF6HY.js";
147
+ } from "./chunk-5JGRKNMS.js";
148
148
  import {
149
149
  getEventStore,
150
150
  initEventStore
151
- } from "./chunk-YRSZJ7IZ.js";
151
+ } from "./chunk-NZBO3A3W.js";
152
152
  import {
153
153
  buildMessagesFromStoredEvents
154
- } from "./chunk-E4F32L4Q.js";
154
+ } from "./chunk-CPRBMVI7.js";
155
155
  import {
156
156
  clearWorkflowExecution,
157
157
  createSession,
@@ -208,7 +208,7 @@ import {
208
208
  import {
209
209
  createContextStateMessage,
210
210
  toClientSession
211
- } from "./chunk-OVAHNEFG.js";
211
+ } from "./chunk-2PGRX4RH.js";
212
212
  import {
213
213
  getPathSeparator,
214
214
  isAbsolutePath
@@ -224,7 +224,7 @@ import {
224
224
  } from "./chunk-YNMP647F.js";
225
225
  import {
226
226
  VERSION
227
- } from "./chunk-QV4BKKIO.js";
227
+ } from "./chunk-65KDNVRA.js";
228
228
  import {
229
229
  deleteProject,
230
230
  getProject,
@@ -266,7 +266,7 @@ import {
266
266
  } from "./chunk-K44MW7JJ.js";
267
267
  import {
268
268
  createServerMessage
269
- } from "./chunk-PW5L4WBG.js";
269
+ } from "./chunk-Q6MBLKL4.js";
270
270
  import {
271
271
  getGlobalConfigDir
272
272
  } from "./chunk-CQGTEGKL.js";
@@ -3147,8 +3147,8 @@ var SessionManager = class {
3147
3147
  * @throws Error for invalid payloads or unknown project
3148
3148
  */
3149
3149
  async importSession(projectId, rawPayload) {
3150
- const { parseSessionExport, IMPORTED_SESSION_REMINDER, SESSION_EXPORT_VERSION } = await import("./export-import-AH5HBHO6.js");
3151
- const { injectContextDriftReminders, getToolSetFingerprint } = await import("./dynamic-context-7AJC6AII.js");
3150
+ const { parseSessionExport, IMPORTED_SESSION_REMINDER, SESSION_EXPORT_VERSION } = await import("./export-import-R4E5BUQS.js");
3151
+ const { injectContextDriftReminders, getToolSetFingerprint } = await import("./dynamic-context-YLRA34WJ.js");
3152
3152
  const { loadAllAgentsDefault: loadAllAgentsDefault2, resolveDefaultAgentId } = await import("./registry-24U5BZAJ.js");
3153
3153
  const payload = parseSessionExport(rawPayload);
3154
3154
  if (payload.version !== SESSION_EXPORT_VERSION) {
@@ -7248,7 +7248,7 @@ function detectWsl() {
7248
7248
  // src/server/index.ts
7249
7249
  var __dirname3 = dirname7(fileURLToPath6(import.meta.url));
7250
7250
  async function announceContextDrift(sessionManager, sessionIds) {
7251
- const { injectContextDriftRemindersForSessions } = await import("./dynamic-context-7AJC6AII.js");
7251
+ const { injectContextDriftRemindersForSessions } = await import("./dynamic-context-YLRA34WJ.js");
7252
7252
  await injectContextDriftRemindersForSessions(sessionManager, sessionIds);
7253
7253
  }
7254
7254
  async function createServerHandle(config3) {
@@ -7364,7 +7364,7 @@ async function createServerHandle(config3) {
7364
7364
  toolRegistry = createToolRegistry();
7365
7365
  logger.info("MCP tools registered", { count: mcpTools.length });
7366
7366
  }
7367
- const { signalMcpReady } = await import("./server-YW3DO4K5.js");
7367
+ const { signalMcpReady } = await import("./server-A3EGJ6MD.js");
7368
7368
  signalMcpReady();
7369
7369
  }
7370
7370
  const app = express();
@@ -7581,7 +7581,7 @@ async function createServerHandle(config3) {
7581
7581
  app.use("/api", sessionFavoriteRouter);
7582
7582
  const { createTasksService } = await import("./service-KMOSB6SU.js");
7583
7583
  const { registerTaskRoutes } = await import("./tasks-X5DM553T.js");
7584
- const { setTasksService } = await import("./tools-RG4HDV75.js");
7584
+ const { setTasksService } = await import("./tools-MRC27SZG.js");
7585
7585
  const tasksService = createTasksService({
7586
7586
  sessionManager,
7587
7587
  config: config3,
@@ -7782,8 +7782,8 @@ All file and git operations should use this branch.
7782
7782
  res.json({ workspaces: workspacesList });
7783
7783
  });
7784
7784
  app.get("/api/sessions", async (req, res) => {
7785
- const { getRecentUserPromptsForSession } = await import("./events-ODZ4SSBW.js");
7786
- const { getPendingConfirmationsBySession: getPendingConfirmationsBySession2 } = await import("./path-security-3YFS3GJQ.js");
7785
+ const { getRecentUserPromptsForSession } = await import("./events-FTS5W6FX.js");
7786
+ const { getPendingConfirmationsBySession: getPendingConfirmationsBySession2 } = await import("./path-security-25P6TQ4R.js");
7787
7787
  const projectId = req.query["projectId"];
7788
7788
  const rawLimit = req.query["limit"];
7789
7789
  const offset = parseInt(req.query["offset"]) || 0;
@@ -7901,9 +7901,10 @@ All file and git operations should use this branch.
7901
7901
  }
7902
7902
  });
7903
7903
  app.get("/api/sessions/:id", async (req, res) => {
7904
- const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEventsWithSnapshot2 } = await import("./events-ODZ4SSBW.js");
7905
- const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2, foldPendingConfirmations } = await import("./folding-V2R2MZ6Y.js");
7906
- const { getPendingQuestionsForSession: getPendingQuestionsForSession2 } = await import("./tools-RG4HDV75.js");
7904
+ const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEventsWithSnapshot2 } = await import("./events-FTS5W6FX.js");
7905
+ const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2, buildSessionStatsMessages, foldPendingConfirmations } = await import("./folding-VWRMYZ5T.js");
7906
+ const { computeSessionStatsSummary } = await import("./stats-2QMXP6G4.js");
7907
+ const { getPendingQuestionsForSession: getPendingQuestionsForSession2 } = await import("./tools-MRC27SZG.js");
7907
7908
  const { getMaxVisibleItems } = await import("./settings-FQUDSGZF.js");
7908
7909
  const session = sessionManager.getSession(req.params.id);
7909
7910
  if (!session) {
@@ -7914,6 +7915,7 @@ All file and git operations should use this branch.
7914
7915
  const events = combineEventsWithSnapshot2(req.params.id, snapshot, eventsSinceSnapshot);
7915
7916
  const maxVisibleItems = req.query["full"] === "true" ? void 0 : getMaxVisibleItems() || void 0;
7916
7917
  const { messages, hiddenCount } = buildMessagesFromStoredEvents2(events, maxVisibleItems);
7918
+ const sessionStats = computeSessionStatsSummary(buildSessionStatsMessages(events));
7917
7919
  const contextState = sessionManager.getContextState(req.params.id);
7918
7920
  const queueState = sessionManager.getQueueState(req.params.id);
7919
7921
  const pendingQuestions = getPendingQuestionsForSession2(req.params.id);
@@ -7923,6 +7925,7 @@ All file and git operations should use this branch.
7923
7925
  session: toClientSession(session),
7924
7926
  messages,
7925
7927
  hiddenCount,
7928
+ sessionStats,
7926
7929
  contextState,
7927
7930
  queueState,
7928
7931
  pendingQuestions,
@@ -7932,9 +7935,9 @@ All file and git operations should use this branch.
7932
7935
  });
7933
7936
  app.get("/api/sessions/:id/status", async (req, res) => {
7934
7937
  const { projectSessionStatus: projectSessionStatus2 } = await import("./session-status-UFO5IFI7.js");
7935
- const { getPendingQuestionsForSession: getPendingQuestionsForSession2 } = await import("./tools-RG4HDV75.js");
7936
- const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEventsWithSnapshot2 } = await import("./events-ODZ4SSBW.js");
7937
- const { foldPendingConfirmations } = await import("./folding-V2R2MZ6Y.js");
7938
+ const { getPendingQuestionsForSession: getPendingQuestionsForSession2 } = await import("./tools-MRC27SZG.js");
7939
+ const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEventsWithSnapshot2 } = await import("./events-FTS5W6FX.js");
7940
+ const { foldPendingConfirmations } = await import("./folding-VWRMYZ5T.js");
7938
7941
  const sessionId = req.params["id"];
7939
7942
  if (!sessionId) {
7940
7943
  return res.status(400).json({ error: "Session id is required" });
@@ -7958,14 +7961,18 @@ All file and git operations should use this branch.
7958
7961
  });
7959
7962
  res.json(status);
7960
7963
  });
7964
+ app.get("/api/sessions/:id/stats", async (req, res) => {
7965
+ const { handleGetSessionStats } = await import("./session-stats-Y7WRB5MP.js");
7966
+ await handleGetSessionStats(sessionManager, req, res);
7967
+ });
7961
7968
  app.delete("/api/sessions/:id", async (req, res) => {
7962
7969
  const sessionId = req.params["id"];
7963
7970
  const session = sessionManager.getSession(sessionId);
7964
7971
  if (!session) {
7965
7972
  return res.status(404).json({ error: "Session not found" });
7966
7973
  }
7967
- const { stopSessionExecution } = await import("./chat-handler-5XMO5XBU.js");
7968
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-RG4HDV75.js");
7974
+ const { stopSessionExecution } = await import("./chat-handler-VCED3JYF.js");
7975
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-MRC27SZG.js");
7969
7976
  sessionManager.clearMessageQueue(sessionId);
7970
7977
  stopSessionExecution(sessionId, sessionManager);
7971
7978
  abortSession(sessionId);
@@ -7994,8 +8001,8 @@ All file and git operations should use this branch.
7994
8001
  res.json({ success: true });
7995
8002
  });
7996
8003
  app.post("/api/sessions/:id/provider", async (req, res) => {
7997
- const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEv } = await import("./events-ODZ4SSBW.js");
7998
- const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-V2R2MZ6Y.js");
8004
+ const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEv } = await import("./events-FTS5W6FX.js");
8005
+ const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-VWRMYZ5T.js");
7999
8006
  const { getMaxVisibleItems } = await import("./settings-FQUDSGZF.js");
8000
8007
  const sessionId = req.params.id;
8001
8008
  const session = sessionManager.getSession(sessionId);
@@ -8025,8 +8032,8 @@ All file and git operations should use this branch.
8025
8032
  res.json({ session: toClientSession(updatedSession), messages, hiddenCount, contextState });
8026
8033
  });
8027
8034
  app.delete("/api/sessions/:id/provider", async (req, res) => {
8028
- const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEv } = await import("./events-ODZ4SSBW.js");
8029
- const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-V2R2MZ6Y.js");
8035
+ const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEv } = await import("./events-FTS5W6FX.js");
8036
+ const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-VWRMYZ5T.js");
8030
8037
  const { getMaxVisibleItems } = await import("./settings-FQUDSGZF.js");
8031
8038
  const sessionId = req.params.id;
8032
8039
  const session = sessionManager.getSession(sessionId);
@@ -8159,8 +8166,8 @@ All file and git operations should use this branch.
8159
8166
  res.json({ success: true });
8160
8167
  });
8161
8168
  app.put("/api/sessions/:id/mode", async (req, res) => {
8162
- const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEv } = await import("./events-ODZ4SSBW.js");
8163
- const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-V2R2MZ6Y.js");
8169
+ const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEv } = await import("./events-FTS5W6FX.js");
8170
+ const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-VWRMYZ5T.js");
8164
8171
  const { getMaxVisibleItems } = await import("./settings-FQUDSGZF.js");
8165
8172
  const sessionId = req.params.id;
8166
8173
  const session = sessionManager.getSession(sessionId);
@@ -8197,7 +8204,7 @@ All file and git operations should use this branch.
8197
8204
  }
8198
8205
  sessionManager.setDangerLevel(sessionId, dangerLevel);
8199
8206
  if (dangerLevel === "dangerous") {
8200
- const { autoApprovePendingConfirmationsForSession } = await import("./tools-RG4HDV75.js");
8207
+ const { autoApprovePendingConfirmationsForSession } = await import("./tools-MRC27SZG.js");
8201
8208
  const approvedCallIds = autoApprovePendingConfirmationsForSession(sessionId);
8202
8209
  for (const callId of approvedCallIds) {
8203
8210
  wssExports.broadcastForSession(sessionId, {
@@ -8232,7 +8239,7 @@ All file and git operations should use this branch.
8232
8239
  setSessionDisabledServers(sessionId, disabledServers);
8233
8240
  const messages = session.messages ?? [];
8234
8241
  if (messages.length === 0) {
8235
- const { applyDynamicContext } = await import("./dynamic-context-7AJC6AII.js");
8242
+ const { applyDynamicContext } = await import("./dynamic-context-YLRA34WJ.js");
8236
8243
  const modelName = session.providerModel ?? providerManager.getCurrentModel();
8237
8244
  await applyDynamicContext(sessionManager, sessionId, modelName);
8238
8245
  } else {
@@ -8266,7 +8273,7 @@ All file and git operations should use this branch.
8266
8273
  if (alwaysAllow !== void 0 && typeof alwaysAllow !== "boolean") {
8267
8274
  return res.status(400).json({ error: "alwaysAllow must be a boolean if provided" });
8268
8275
  }
8269
- const { providePathConfirmation: providePathConfirmation2, getConfirmationSessionId } = await import("./tools-RG4HDV75.js");
8276
+ const { providePathConfirmation: providePathConfirmation2, getConfirmationSessionId } = await import("./tools-MRC27SZG.js");
8270
8277
  const pendingSessionId = getConfirmationSessionId(callId);
8271
8278
  if (!pendingSessionId) {
8272
8279
  return res.status(404).json({ error: "No pending path confirmation with that ID" });
@@ -8278,10 +8285,10 @@ All file and git operations should use this branch.
8278
8285
  if (!result.found) {
8279
8286
  return res.status(404).json({ error: "No pending path confirmation with that ID" });
8280
8287
  }
8281
- const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEvents } = await import("./events-ODZ4SSBW.js");
8282
- const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2, foldPendingConfirmations } = await import("./folding-V2R2MZ6Y.js");
8283
- const { createSessionStateMessage } = await import("./protocol-MRMOB3P4.js");
8284
- const { getPendingQuestionsForSession: getPendingQuestionsForSession2 } = await import("./tools-RG4HDV75.js");
8288
+ const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEvents } = await import("./events-FTS5W6FX.js");
8289
+ const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2, foldPendingConfirmations } = await import("./folding-VWRMYZ5T.js");
8290
+ const { createSessionStateMessage } = await import("./protocol-M4DFHA32.js");
8291
+ const { getPendingQuestionsForSession: getPendingQuestionsForSession2 } = await import("./tools-MRC27SZG.js");
8285
8292
  const { getMaxVisibleItems } = await import("./settings-FQUDSGZF.js");
8286
8293
  const eventStore = getEventStore2();
8287
8294
  const { snapshot, events: eventsSinceSnapshot } = eventStore.getEventsSinceSnapshot(sessionId);
@@ -8319,7 +8326,7 @@ All file and git operations should use this branch.
8319
8326
  if (!skip && typeof answer !== "string") {
8320
8327
  return res.status(400).json({ error: "answer is required when not skipping" });
8321
8328
  }
8322
- const { provideAnswer: provideAnswer2 } = await import("./tools-RG4HDV75.js");
8329
+ const { provideAnswer: provideAnswer2 } = await import("./tools-MRC27SZG.js");
8323
8330
  const found = provideAnswer2(callId, answer ?? "", skip ?? false);
8324
8331
  if (!found) {
8325
8332
  return res.status(404).json({ error: "No pending question with that ID" });
@@ -8385,7 +8392,7 @@ All file and git operations should use this branch.
8385
8392
  backend: activeProvider?.backend ?? llmClient.getBackend(),
8386
8393
  model: llmClient.getModel()
8387
8394
  };
8388
- const { runAgentTurn, TurnMetrics } = await import("./orchestrator-L5VINV36.js");
8395
+ const { runAgentTurn, TurnMetrics } = await import("./orchestrator-7T62RLDL.js");
8389
8396
  runAgentTurn(
8390
8397
  {
8391
8398
  sessionManager,
@@ -8423,15 +8430,15 @@ All file and git operations should use this branch.
8423
8430
  if (!session) {
8424
8431
  return res.status(404).json({ error: "Session not found" });
8425
8432
  }
8426
- const { stopSessionExecution } = await import("./chat-handler-5XMO5XBU.js");
8427
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-RG4HDV75.js");
8433
+ const { stopSessionExecution } = await import("./chat-handler-VCED3JYF.js");
8434
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-MRC27SZG.js");
8428
8435
  const queuedMessages = sessionManager.getQueueState(sessionId);
8429
8436
  sessionManager.clearMessageQueue(sessionId);
8430
8437
  stopSessionExecution(sessionId, sessionManager);
8431
8438
  abortSession(sessionId);
8432
8439
  cancelQuestionsForSession(sessionId, "Session stopped by user");
8433
8440
  cancelPathConfirmationsForSession(sessionId, "Session stopped by user");
8434
- const eventStore = (await import("./events-ODZ4SSBW.js")).getEventStore();
8441
+ const eventStore = (await import("./events-FTS5W6FX.js")).getEventStore();
8435
8442
  eventStore.append(sessionId, { type: "running.changed", data: { isRunning: false } });
8436
8443
  res.json({ success: true, queuedMessages });
8437
8444
  });
@@ -8472,7 +8479,7 @@ All file and git operations should use this branch.
8472
8479
  if (typeof messageIndex !== "number" || messageIndex < 0) {
8473
8480
  return res.status(400).json({ error: "messageIndex must be a non-negative number" });
8474
8481
  }
8475
- const { truncateSessionMessages } = await import("./events-ODZ4SSBW.js");
8482
+ const { truncateSessionMessages } = await import("./events-FTS5W6FX.js");
8476
8483
  truncateSessionMessages(sessionId, messageIndex);
8477
8484
  res.json({ success: true });
8478
8485
  });
@@ -8492,8 +8499,8 @@ All file and git operations should use this branch.
8492
8499
  if (attachments !== void 0 && !Array.isArray(attachments)) {
8493
8500
  return res.status(400).json({ error: "attachments must be an array if provided" });
8494
8501
  }
8495
- const { getEventStore: getEventStore2 } = await import("./events-ODZ4SSBW.js");
8496
- const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-V2R2MZ6Y.js");
8502
+ const { getEventStore: getEventStore2 } = await import("./events-FTS5W6FX.js");
8503
+ const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-VWRMYZ5T.js");
8497
8504
  const eventStore = getEventStore2();
8498
8505
  const events = eventStore.getEvents(sessionId);
8499
8506
  const { messages } = buildMessagesFromStoredEvents2(events);
@@ -8505,7 +8512,7 @@ All file and git operations should use this branch.
8505
8512
  if (msg.role !== "user" || msg.isSystemGenerated) {
8506
8513
  return res.status(400).json({ error: "Can only replay user messages" });
8507
8514
  }
8508
- const { truncateSessionMessages } = await import("./events-ODZ4SSBW.js");
8515
+ const { truncateSessionMessages } = await import("./events-FTS5W6FX.js");
8509
8516
  truncateSessionMessages(sessionId, msgIndex - 1);
8510
8517
  sessionManager.queueMessage(
8511
8518
  sessionId,
@@ -8547,7 +8554,7 @@ All file and git operations should use this branch.
8547
8554
  return res.status(404).json({ error: "Session not found" });
8548
8555
  }
8549
8556
  try {
8550
- const { buildSessionExport } = await import("./export-import-AH5HBHO6.js");
8557
+ const { buildSessionExport } = await import("./export-import-R4E5BUQS.js");
8551
8558
  const payload = buildSessionExport(sessionManager, sessionId);
8552
8559
  const filename = `${(payload.session.title ?? "session").replace(/[^a-zA-Z0-9-_]/g, "_")}.openfox-session.json`;
8553
8560
  res.setHeader("Content-Disposition", `attachment; filename="${filename}"`);
@@ -9370,7 +9377,7 @@ All file and git operations should use this branch.
9370
9377
  });
9371
9378
  async function rebuildMcpTools() {
9372
9379
  const { createMcpTools: createMcpTools2 } = await import("./tool-adapter-ZY4FC4C4.js");
9373
- const { setMcpTools: setMcpTools2 } = await import("./tools-RG4HDV75.js");
9380
+ const { setMcpTools: setMcpTools2 } = await import("./tools-MRC27SZG.js");
9374
9381
  const mcpTools = createMcpTools2(mcpManager);
9375
9382
  setMcpTools2(mcpTools);
9376
9383
  toolRegistry = createToolRegistry();
@@ -9946,7 +9953,7 @@ All file and git operations should use this branch.
9946
9953
  );
9947
9954
  const wss = wssExports.wss;
9948
9955
  deferTasksBroadcast = (_projectId, payload) => wssExports.broadcastAll({ type: "tasks.update", payload });
9949
- const { launchWorkflowRun, abortRunnerRun } = await import("./launch-2QA2EHCT.js");
9956
+ const { launchWorkflowRun, abortRunnerRun } = await import("./launch-QP2BI3PB.js");
9950
9957
  deferTasksLaunchWorkflow = (sessionId, launch) => {
9951
9958
  const effective = sessionManager.resolveEffectiveProviderModel(sessionId);
9952
9959
  let llmClient = getLLMClient();
@@ -9991,7 +9998,7 @@ All file and git operations should use this branch.
9991
9998
  const state = sessionManager.getContextState(sessionId);
9992
9999
  wssExports.broadcastForSession(sessionId, createContextStateMessage(state));
9993
10000
  });
9994
- const { QueueProcessor } = await import("./processor-UQ5ITWL6.js");
10001
+ const { QueueProcessor } = await import("./processor-LDLRELLS.js");
9995
10002
  const queueProcessor = new QueueProcessor({
9996
10003
  sessionManager,
9997
10004
  providerManager,
@@ -10003,8 +10010,8 @@ All file and git operations should use this branch.
10003
10010
  queueProcessor.start();
10004
10011
  const { getSetting: getSetting2, SETTINGS_KEYS } = await import("./settings-FQUDSGZF.js");
10005
10012
  if (getSetting2(SETTINGS_KEYS.AUTO_CONTINUE_ON_BOOT) === "true") {
10006
- const { getStaleRunningSessionIds } = await import("./store-AOZ46PBS.js");
10007
- const { runBootAutoContinuations } = await import("./auto-continue-ZAHNBHPA.js");
10013
+ const { getStaleRunningSessionIds } = await import("./store-OWOLXB74.js");
10014
+ const { runBootAutoContinuations } = await import("./auto-continue-FGQ63HHR.js");
10008
10015
  const staleIds = getStaleRunningSessionIds();
10009
10016
  if (staleIds.length > 0) {
10010
10017
  const continued = runBootAutoContinuations(staleIds, {
@@ -10048,8 +10055,8 @@ All file and git operations should use this branch.
10048
10055
  launchWorkflow: (sessionId, launch) => deferTasksLaunchWorkflow(sessionId, launch),
10049
10056
  stopSession: (sessionId) => {
10050
10057
  void (async () => {
10051
- const { stopSessionExecution } = await import("./chat-handler-5XMO5XBU.js");
10052
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-RG4HDV75.js");
10058
+ const { stopSessionExecution } = await import("./chat-handler-VCED3JYF.js");
10059
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-MRC27SZG.js");
10053
10060
  sessionManager.clearMessageQueue(sessionId);
10054
10061
  stopSessionExecution(sessionId, sessionManager);
10055
10062
  abortSession(sessionId);
@@ -10176,4 +10183,4 @@ export {
10176
10183
  createServerHandle,
10177
10184
  createServer
10178
10185
  };
10179
- //# sourceMappingURL=chunk-DBTDMK23.js.map
10186
+ //# sourceMappingURL=chunk-YQJ6HEFS.js.map
package/dist/cli/dev.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runCli
4
- } from "../chunk-6FKSGQYO.js";
4
+ } from "../chunk-QHFJRUJV.js";
5
5
  import "../chunk-AGXJ5O63.js";
6
6
  import "../chunk-2OMGR7LN.js";
7
7
  import {
package/dist/cli/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runCli
4
- } from "../chunk-6FKSGQYO.js";
4
+ } from "../chunk-QHFJRUJV.js";
5
5
  import "../chunk-AGXJ5O63.js";
6
6
  import "../chunk-2OMGR7LN.js";
7
7
  import {
@@ -3,12 +3,12 @@ import {
3
3
  COMPACTION_MAX_RATIO,
4
4
  appendCompactionPrompt,
5
5
  shouldCompact
6
- } from "./chunk-VFHGN3IS.js";
6
+ } from "./chunk-P7KUU5VB.js";
7
7
  import "./chunk-FAN4P45J.js";
8
8
  import "./chunk-ZONLEX2F.js";
9
- import "./chunk-2DVAF6HY.js";
10
- import "./chunk-YRSZJ7IZ.js";
11
- import "./chunk-E4F32L4Q.js";
9
+ import "./chunk-5JGRKNMS.js";
10
+ import "./chunk-NZBO3A3W.js";
11
+ import "./chunk-CPRBMVI7.js";
12
12
  import "./chunk-CCIG3YLG.js";
13
13
  import "./chunk-YEW4YEJU.js";
14
14
  import "./chunk-OSXPQSLW.js";
@@ -32,4 +32,4 @@ export {
32
32
  appendCompactionPrompt,
33
33
  shouldCompact
34
34
  };
35
- //# sourceMappingURL=compactor-53WDNC2S.js.map
35
+ //# sourceMappingURL=compactor-YY7PO2XE.js.map
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  describeImageTool,
3
3
  isDescribeImageEligible
4
- } from "./chunk-FLTNKZNQ.js";
4
+ } from "./chunk-KJEOKIH2.js";
5
5
  import "./chunk-X7ZAP6YW.js";
6
- import "./chunk-STVJA7IX.js";
7
- import "./chunk-2DVAF6HY.js";
8
- import "./chunk-YRSZJ7IZ.js";
9
- import "./chunk-E4F32L4Q.js";
6
+ import "./chunk-CVQYCAMY.js";
7
+ import "./chunk-5JGRKNMS.js";
8
+ import "./chunk-NZBO3A3W.js";
9
+ import "./chunk-CPRBMVI7.js";
10
10
  import "./chunk-CCIG3YLG.js";
11
11
  import "./chunk-YEW4YEJU.js";
12
12
  import "./chunk-OSXPQSLW.js";
13
13
  import "./chunk-V5AC2TV7.js";
14
- import "./chunk-OVAHNEFG.js";
14
+ import "./chunk-2PGRX4RH.js";
15
15
  import "./chunk-LCLH6ZUL.js";
16
16
  import "./chunk-YEFZ5HBD.js";
17
17
  import "./chunk-JYYBSODN.js";
@@ -20,7 +20,7 @@ import "./chunk-FSSUPWYO.js";
20
20
  import "./chunk-X6SWZEK7.js";
21
21
  import "./chunk-WOVWVB5J.js";
22
22
  import "./chunk-K44MW7JJ.js";
23
- import "./chunk-PW5L4WBG.js";
23
+ import "./chunk-Q6MBLKL4.js";
24
24
  import "./chunk-24YKXKCG.js";
25
25
  import "./chunk-CQGTEGKL.js";
26
26
  import "./chunk-YLJ4XMA6.js";
@@ -28,4 +28,4 @@ export {
28
28
  describeImageTool,
29
29
  isDescribeImageEligible
30
30
  };
31
- //# sourceMappingURL=describe-image-IGLGVEOJ.js.map
31
+ //# sourceMappingURL=describe-image-Z5WS6YU3.js.map
@@ -16,12 +16,12 @@ import {
16
16
  injectContextDriftRemindersForSessions,
17
17
  renderSystemPromptDiff,
18
18
  renderToolChangeReminder
19
- } from "./chunk-HNJ32GRI.js";
19
+ } from "./chunk-ESHP42KO.js";
20
20
  import "./chunk-DJH6LMBT.js";
21
21
  import "./chunk-ZONLEX2F.js";
22
- import "./chunk-2DVAF6HY.js";
23
- import "./chunk-YRSZJ7IZ.js";
24
- import "./chunk-E4F32L4Q.js";
22
+ import "./chunk-5JGRKNMS.js";
23
+ import "./chunk-NZBO3A3W.js";
24
+ import "./chunk-CPRBMVI7.js";
25
25
  import "./chunk-CCIG3YLG.js";
26
26
  import "./chunk-YEW4YEJU.js";
27
27
  import "./chunk-OSXPQSLW.js";
@@ -52,4 +52,4 @@ export {
52
52
  renderSystemPromptDiff,
53
53
  renderToolChangeReminder
54
54
  };
55
- //# sourceMappingURL=dynamic-context-7AJC6AII.js.map
55
+ //# sourceMappingURL=dynamic-context-YLRA34WJ.js.map
@@ -37,17 +37,18 @@ import {
37
37
  isStoredEvent,
38
38
  isTurnEvent,
39
39
  truncateSessionMessages
40
- } from "./chunk-2DVAF6HY.js";
40
+ } from "./chunk-5JGRKNMS.js";
41
41
  import {
42
42
  EventStore,
43
43
  getEventStore,
44
44
  initEventStore
45
- } from "./chunk-YRSZJ7IZ.js";
45
+ } from "./chunk-NZBO3A3W.js";
46
46
  import {
47
47
  buildContextMessagesFromEventHistory,
48
48
  buildContextMessagesFromMessages,
49
49
  buildContextMessagesFromStoredEvents,
50
50
  buildMessagesFromStoredEvents,
51
+ buildSessionStatsMessages,
51
52
  buildSnapshot,
52
53
  buildSnapshotFromSessionState,
53
54
  foldContextState,
@@ -58,7 +59,7 @@ import {
58
59
  foldSessionState,
59
60
  foldTodos,
60
61
  foldTurnEventsToSnapshotMessages
61
- } from "./chunk-E4F32L4Q.js";
62
+ } from "./chunk-CPRBMVI7.js";
62
63
  import "./chunk-CCIG3YLG.js";
63
64
  import "./chunk-YEW4YEJU.js";
64
65
  import "./chunk-OSXPQSLW.js";
@@ -75,6 +76,7 @@ export {
75
76
  buildContextMessagesFromMessages,
76
77
  buildContextMessagesFromStoredEvents,
77
78
  buildMessagesFromStoredEvents,
79
+ buildSessionStatsMessages,
78
80
  buildSnapshot,
79
81
  buildSnapshotFromSessionState,
80
82
  combineEventsWithSnapshot,
@@ -126,4 +128,4 @@ export {
126
128
  isTurnEvent,
127
129
  truncateSessionMessages
128
130
  };
129
- //# sourceMappingURL=events-ODZ4SSBW.js.map
131
+ //# sourceMappingURL=events-FTS5W6FX.js.map