openfox 2.0.91 → 2.0.93

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/CHANGELOG.md +28 -0
  2. package/dist/CHANGELOG.md +28 -0
  3. package/dist/{chat-handler-PC5BUJGA.js → chat-handler-MSQFJH7S.js} +13 -13
  4. package/dist/{chunk-AXFPEGJI.js → chunk-3QQKKZMF.js} +23 -3
  5. package/dist/{chunk-JJY5O2WH.js → chunk-AA4PXMSI.js} +63 -38
  6. package/dist/{chunk-WPACSSBS.js → chunk-AQ4KCGXL.js} +3 -3
  7. package/dist/{chunk-VJEVCZZA.js → chunk-ESJNJ5B6.js} +3 -3
  8. package/dist/{chunk-DVVRKNFS.js → chunk-FK6R2YTQ.js} +24 -9
  9. package/dist/{chunk-NO65CC2R.js → chunk-GAIAJDPH.js} +152 -44
  10. package/dist/{chunk-CND2YWIJ.js → chunk-IAAHDCJN.js} +9 -4
  11. package/dist/chunk-LVZ6VQ3K.js +7 -0
  12. package/dist/{chunk-4IBFA5IF.js → chunk-NV63HYNR.js} +6 -4
  13. package/dist/{chunk-FSLCOA4R.js → chunk-NW2KP7PE.js} +4 -4
  14. package/dist/{chunk-LT4MPTGU.js → chunk-PYJ2SRVC.js} +2 -2
  15. package/dist/{chunk-Q7CN4JOO.js → chunk-RJQDC2OO.js} +7 -7
  16. package/dist/{chunk-CFK34T26.js → chunk-TQATAKVV.js} +1 -1
  17. package/dist/{chunk-NLJXZZTB.js → chunk-U2RSFH6A.js} +3 -1
  18. package/dist/{chunk-JX6WL56A.js → chunk-YM267G4F.js} +3 -3
  19. package/dist/cli/dev.js +1 -1
  20. package/dist/cli/index.js +1 -1
  21. package/dist/{compactor-HW6GBRAG.js → compactor-R7GGPBPR.js} +5 -5
  22. package/dist/{dynamic-context-TDD3Q43F.js → dynamic-context-4UPNVL3N.js} +3 -3
  23. package/dist/{events-ICX5KVET.js → events-D5AFN2CW.js} +3 -3
  24. package/dist/{folding-L2L4OHX6.js → folding-BO6Z6HMP.js} +4 -2
  25. package/dist/{orchestrator-56LSHPPK.js → orchestrator-YQI2D4LW.js} +10 -10
  26. package/dist/package.json +1 -1
  27. package/dist/{path-security-XENIR7SX.js → path-security-DP75YZK5.js} +6 -6
  28. package/dist/{processor-H6NFFRI2.js → processor-LVQWRG6M.js} +10 -10
  29. package/dist/{protocol-3GNSIGP4.js → protocol-4ZDERZNC.js} +3 -3
  30. package/dist/{protocol-CaSHnORC.d.ts → protocol-8BzyapcK.d.ts} +11 -3
  31. package/dist/provider/index.d.ts +4 -4
  32. package/dist/{serve-KNVANLAK.js → serve-HEHWSYMX.js} +15 -14
  33. package/dist/server/index.d.ts +3 -3
  34. package/dist/server/index.js +14 -13
  35. package/dist/{server-H3525HD6.js → server-AAIYC4BH.js} +13 -12
  36. package/dist/shared/index.d.ts +3 -3
  37. package/dist/shared/index.js +1 -1
  38. package/dist/{tools-DXBIHSMY.js → tools-HDD7RHEG.js} +8 -8
  39. package/dist/{types-CHCZiJvw.d.ts → types-Ci7Tdpq3.d.ts} +9 -2
  40. package/dist/{types-Cw7L4Bze.d.ts → types-_OEK96iM.d.ts} +1 -1
  41. package/dist/{update-4BGMFSEG.js → update-JARYMNGH.js} +2 -2
  42. package/dist/web/assets/{index-mS37wyUs.css → index-B3lfsL1_.css} +1 -1
  43. package/dist/web/assets/index-DxTIqntH.js +317 -0
  44. package/dist/web/index.html +2 -2
  45. package/dist/web/sw.js +1 -1
  46. package/package.json +1 -1
  47. package/dist/chunk-GPODFKPQ.js +0 -7
  48. package/dist/web/assets/index-Chu9JX0M.js +0 -316
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.93 - 2026-07-26
4
+
5
+ ### Features
6
+
7
+ - **Multi-step workflows with user pause points** — new `user` step type lets workflow authors insert natural hand-off points where execution pauses and waits for manual action before continuing; state survives page refreshes.
8
+ - **Workflow parameterization with named params** — define parameters with labels, descriptions, and positions on any workflow; values are collected via a modal or slash command and resolved in step prompts via `{{param_name}}`.
9
+ - **Slash autocomplete with inline parameter hints** — type `/` to fuzzy-match workflows and commands; select with Tab/Enter and fill in `param=?` hints that advance as you type values.
10
+ - **Command template parameters** — commands support `{{param_name}}` placeholders in their prompt; launching from the UI shows a parameter collection modal.
11
+ - **Clear logs button and visual markers in LogViewer** — clear dev server output with one click and insert divider markers to annotate log sections.
12
+
13
+ ### Enhancements
14
+
15
+ - **Automatic session naming on first workflow launch** — session titles are now generated from the workflow name and parameter values, producing contextual names like "PR #157: Fix bug".
16
+ - **Runner errors surfaced as visible chat messages** — workflow launch failures now show as error messages in the feed instead of silent logs.
17
+ - **OpenFox repo URL included in system prompt** — the agent can self-reference the repository when working on OpenFox itself.
18
+
19
+ ### Bug Fixes
20
+
21
+ - **Changelog no longer shown on first install** — the "What's New" modal now only appears on version upgrades, not when running the app for the first time.
22
+ - **Saving workflows and agents to project `.openfox/` directory now works** — the "Project" destination option in creation modals correctly saves to the repository-scoped location.
23
+ - **Double-submit guard prevents duplicate sends** — rapid clicks on Send no longer trigger multiple message deliveries.
24
+
25
+ ## 2.0.92 - 2026-07-25
26
+
27
+ ### Bug Fixes
28
+
29
+ - **Changelog modal now appears after npm updates** — previously the "What's New" modal only showed after in-app auto-updates; now it also triggers when updating via npm by tracking the last seen version.
30
+
3
31
  ## 2.0.91 - 2026-07-25
4
32
 
5
33
  ### Features
package/dist/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.93 - 2026-07-26
4
+
5
+ ### Features
6
+
7
+ - **Multi-step workflows with user pause points** — new `user` step type lets workflow authors insert natural hand-off points where execution pauses and waits for manual action before continuing; state survives page refreshes.
8
+ - **Workflow parameterization with named params** — define parameters with labels, descriptions, and positions on any workflow; values are collected via a modal or slash command and resolved in step prompts via `{{param_name}}`.
9
+ - **Slash autocomplete with inline parameter hints** — type `/` to fuzzy-match workflows and commands; select with Tab/Enter and fill in `param=?` hints that advance as you type values.
10
+ - **Command template parameters** — commands support `{{param_name}}` placeholders in their prompt; launching from the UI shows a parameter collection modal.
11
+ - **Clear logs button and visual markers in LogViewer** — clear dev server output with one click and insert divider markers to annotate log sections.
12
+
13
+ ### Enhancements
14
+
15
+ - **Automatic session naming on first workflow launch** — session titles are now generated from the workflow name and parameter values, producing contextual names like "PR #157: Fix bug".
16
+ - **Runner errors surfaced as visible chat messages** — workflow launch failures now show as error messages in the feed instead of silent logs.
17
+ - **OpenFox repo URL included in system prompt** — the agent can self-reference the repository when working on OpenFox itself.
18
+
19
+ ### Bug Fixes
20
+
21
+ - **Changelog no longer shown on first install** — the "What's New" modal now only appears on version upgrades, not when running the app for the first time.
22
+ - **Saving workflows and agents to project `.openfox/` directory now works** — the "Project" destination option in creation modals correctly saves to the repository-scoped location.
23
+ - **Double-submit guard prevents duplicate sends** — rapid clicks on Send no longer trigger multiple message deliveries.
24
+
25
+ ## 2.0.92 - 2026-07-25
26
+
27
+ ### Bug Fixes
28
+
29
+ - **Changelog modal now appears after npm updates** — previously the "What's New" modal only showed after in-app auto-updates; now it also triggers when updating via npm by tracking the last seen version.
30
+
3
31
  ## 2.0.91 - 2026-07-25
4
32
 
5
33
  ### Features
@@ -1,12 +1,12 @@
1
+ import {
2
+ runChatTurn
3
+ } from "./chunk-RJQDC2OO.js";
1
4
  import {
2
5
  buildRunChatTurnParams,
3
6
  finalizeTurnCompletion,
4
7
  generateSessionNameForSession
5
- } from "./chunk-4IBFA5IF.js";
6
- import {
7
- runChatTurn
8
- } from "./chunk-Q7CN4JOO.js";
9
- import "./chunk-DVVRKNFS.js";
8
+ } from "./chunk-NV63HYNR.js";
9
+ import "./chunk-FK6R2YTQ.js";
10
10
  import "./chunk-DH32AHTL.js";
11
11
  import "./chunk-U7D72C4O.js";
12
12
  import "./chunk-I72ACQ6R.js";
@@ -14,24 +14,24 @@ import "./chunk-NWO6GRYE.js";
14
14
  import "./chunk-VKWVPQJ5.js";
15
15
  import "./chunk-BJHPUMRX.js";
16
16
  import "./chunk-J7GAZGZT.js";
17
- import "./chunk-FSLCOA4R.js";
17
+ import "./chunk-NW2KP7PE.js";
18
18
  import "./chunk-SXHGRPCI.js";
19
19
  import "./chunk-3NGD6IVM.js";
20
- import "./chunk-WPACSSBS.js";
20
+ import "./chunk-AQ4KCGXL.js";
21
21
  import {
22
22
  createChatMessageMessage,
23
23
  createPhaseChangedMessage,
24
24
  createSessionRunningMessage
25
- } from "./chunk-CND2YWIJ.js";
25
+ } from "./chunk-IAAHDCJN.js";
26
26
  import "./chunk-EU3WWTFH.js";
27
27
  import "./chunk-ST4NYXLH.js";
28
28
  import "./chunk-K2O7JTCX.js";
29
- import "./chunk-NLJXZZTB.js";
29
+ import "./chunk-U2RSFH6A.js";
30
30
  import {
31
31
  getEventStore
32
- } from "./chunk-LT4MPTGU.js";
32
+ } from "./chunk-PYJ2SRVC.js";
33
33
  import "./chunk-WWC3R3YL.js";
34
- import "./chunk-AXFPEGJI.js";
34
+ import "./chunk-3QQKKZMF.js";
35
35
  import "./chunk-6J5IZ2NL.js";
36
36
  import "./chunk-NGN3Q26A.js";
37
37
  import "./chunk-J2GP3J3X.js";
@@ -41,7 +41,7 @@ import "./chunk-RMXPVQP4.js";
41
41
  import "./chunk-54Q4TGG6.js";
42
42
  import "./chunk-6OAJNCRY.js";
43
43
  import "./chunk-K44MW7JJ.js";
44
- import "./chunk-CFK34T26.js";
44
+ import "./chunk-TQATAKVV.js";
45
45
  import "./chunk-OQTLFO4R.js";
46
46
  import "./chunk-CQGTEGKL.js";
47
47
  import "./chunk-5WRI5ZAA.js";
@@ -165,4 +165,4 @@ export {
165
165
  startChatSession,
166
166
  stopSessionExecution
167
167
  };
168
- //# sourceMappingURL=chat-handler-PC5BUJGA.js.map
168
+ //# sourceMappingURL=chat-handler-MSQFJH7S.js.map
@@ -807,10 +807,27 @@ function foldSessionState(events, initialWindowId, maxTokens, initialMessages, d
807
807
  ...formatRetries.length > 0 && { formatRetries },
808
808
  ...pendingUserInput !== void 0 && { pendingUserInput },
809
809
  ...taskStats !== void 0 && { taskStats },
810
+ ...computeWaitingWorkflow(events),
810
811
  ...messageStats.length > 0 && { messageStats },
811
812
  ...contextWindows.length > 0 && { contextWindows }
812
813
  };
813
814
  }
815
+ function computeWaitingWorkflow(events) {
816
+ const ww = foldWaitingWorkflow(events);
817
+ return ww !== void 0 ? { waitingWorkflow: ww } : {};
818
+ }
819
+ function foldWaitingWorkflow(events) {
820
+ let waitingWorkflow;
821
+ for (const event of events) {
822
+ if (event.type === "workflow.waiting") {
823
+ const data = event.data;
824
+ waitingWorkflow = data;
825
+ } else if (event.type === "task.completed") {
826
+ waitingWorkflow = void 0;
827
+ }
828
+ }
829
+ return waitingWorkflow;
830
+ }
814
831
  function buildSnapshot(foldedState, latestSeq, snapshotAt = Date.now()) {
815
832
  return {
816
833
  mode: foldedState.mode,
@@ -835,7 +852,8 @@ function buildSnapshot(foldedState, latestSeq, snapshotAt = Date.now()) {
835
852
  ...foldedState.taskStats !== void 0 && { taskStats: foldedState.taskStats },
836
853
  ...foldedState.messageStats !== void 0 && { messageStats: foldedState.messageStats },
837
854
  ...foldedState.pendingConfirmations !== void 0 && { pendingConfirmations: foldedState.pendingConfirmations },
838
- ...foldedState.contextWindows !== void 0 && { contextWindows: foldedState.contextWindows }
855
+ ...foldedState.contextWindows !== void 0 && { contextWindows: foldedState.contextWindows },
856
+ ...foldedState.waitingWorkflow !== void 0 && { waitingWorkflow: foldedState.waitingWorkflow }
839
857
  };
840
858
  }
841
859
  function buildSnapshotFromSessionState(input) {
@@ -878,7 +896,8 @@ function buildSnapshotFromSessionState(input) {
878
896
  snapshotAt,
879
897
  ...foldedState.sessionInit !== void 0 && { sessionInit: foldedState.sessionInit },
880
898
  ...input.cachedSystemPrompt !== void 0 ? { cachedSystemPrompt: input.cachedSystemPrompt } : foldedState.cachedSystemPrompt !== void 0 ? { cachedSystemPrompt: foldedState.cachedSystemPrompt } : {},
881
- ...input.dynamicContextHash !== void 0 ? { dynamicContextHash: input.dynamicContextHash } : foldedState.dynamicContextHash !== void 0 ? { dynamicContextHash: foldedState.dynamicContextHash } : {}
899
+ ...input.dynamicContextHash !== void 0 ? { dynamicContextHash: input.dynamicContextHash } : foldedState.dynamicContextHash !== void 0 ? { dynamicContextHash: foldedState.dynamicContextHash } : {},
900
+ ...foldedState.waitingWorkflow !== void 0 && { waitingWorkflow: foldedState.waitingWorkflow }
882
901
  };
883
902
  }
884
903
 
@@ -906,7 +925,8 @@ export {
906
925
  foldIsRunning,
907
926
  foldPendingConfirmations,
908
927
  foldSessionState,
928
+ foldWaitingWorkflow,
909
929
  buildSnapshot,
910
930
  buildSnapshotFromSessionState
911
931
  };
912
- //# sourceMappingURL=chunk-AXFPEGJI.js.map
932
+ //# sourceMappingURL=chunk-3QQKKZMF.js.map
@@ -21,7 +21,7 @@ import {
21
21
  tokenFromPassword,
22
22
  verifyPassword,
23
23
  workflowExists
24
- } from "./chunk-NO65CC2R.js";
24
+ } from "./chunk-GAIAJDPH.js";
25
25
  import {
26
26
  createToolRegistry,
27
27
  devServerManager,
@@ -30,7 +30,7 @@ import {
30
30
  setMcpManagerForTools,
31
31
  setMcpTools,
32
32
  setNotifyMcpServersChanged
33
- } from "./chunk-DVVRKNFS.js";
33
+ } from "./chunk-FK6R2YTQ.js";
34
34
  import {
35
35
  createMcpTools
36
36
  } from "./chunk-NWO6GRYE.js";
@@ -74,7 +74,7 @@ import {
74
74
  } from "./chunk-3NGD6IVM.js";
75
75
  import {
76
76
  createContextStateMessage
77
- } from "./chunk-CND2YWIJ.js";
77
+ } from "./chunk-IAAHDCJN.js";
78
78
  import {
79
79
  EventEmitter
80
80
  } from "./chunk-EU3WWTFH.js";
@@ -87,7 +87,7 @@ import {
87
87
  ALWAYS_ALLOWED,
88
88
  ALWAYS_ALLOWED_FOR_SUBAGENTS,
89
89
  TOP_LEVEL_ONLY_TOOLS
90
- } from "./chunk-NLJXZZTB.js";
90
+ } from "./chunk-U2RSFH6A.js";
91
91
  import {
92
92
  emitAssistantMessageStart,
93
93
  emitContextState,
@@ -103,14 +103,14 @@ import {
103
103
  getEventStore,
104
104
  getSessionState,
105
105
  initEventStore
106
- } from "./chunk-LT4MPTGU.js";
106
+ } from "./chunk-PYJ2SRVC.js";
107
107
  import {
108
108
  getPathSeparator,
109
109
  isAbsolutePath
110
110
  } from "./chunk-WWC3R3YL.js";
111
111
  import {
112
112
  VERSION
113
- } from "./chunk-GPODFKPQ.js";
113
+ } from "./chunk-LVZ6VQ3K.js";
114
114
  import {
115
115
  createSession,
116
116
  deleteSession,
@@ -183,7 +183,7 @@ import {
183
183
  } from "./chunk-K44MW7JJ.js";
184
184
  import {
185
185
  createServerMessage
186
- } from "./chunk-CFK34T26.js";
186
+ } from "./chunk-TQATAKVV.js";
187
187
  import {
188
188
  getGlobalConfigDir
189
189
  } from "./chunk-CQGTEGKL.js";
@@ -4208,7 +4208,10 @@ var config = {
4208
4208
  isDefault: isDefaultCommand,
4209
4209
  getDefaultIds: getDefaultCommandIds,
4210
4210
  validateCreate: validateNameIdPrompt,
4211
- mapToResponse: (c) => c.metadata
4211
+ mapToResponse: (c) => ({
4212
+ ...c.metadata,
4213
+ paramNames: [...new Set(Array.from(c.prompt.matchAll(/\{\{(\w+)\}\}/g), (m) => m[1]))]
4214
+ })
4212
4215
  };
4213
4216
  function createCommandRoutes(configDir, projectDir) {
4214
4217
  return createCrudRoutes(config, configDir, projectDir);
@@ -4348,6 +4351,26 @@ function createDevServerRoutes() {
4348
4351
  const result = devServerManager.getLogsSlice(workdir, offset, limit);
4349
4352
  res.json({ logs: result.logs, total: result.total, offset, limit });
4350
4353
  });
4354
+ router.post("/clear-logs", (req, res) => {
4355
+ const workdir = req.query["workdir"];
4356
+ if (!workdir) return res.status(400).json({ error: "workdir required" });
4357
+ try {
4358
+ devServerManager.clearLogs(workdir);
4359
+ res.json({ ok: true });
4360
+ } catch (err) {
4361
+ res.status(500).json({ error: err instanceof Error ? err.message : "Failed to clear logs" });
4362
+ }
4363
+ });
4364
+ router.post("/insert-marker", (req, res) => {
4365
+ const workdir = req.query["workdir"];
4366
+ if (!workdir) return res.status(400).json({ error: "workdir required" });
4367
+ try {
4368
+ devServerManager.insertMarker(workdir);
4369
+ res.json({ ok: true });
4370
+ } catch (err) {
4371
+ res.status(500).json({ error: err instanceof Error ? err.message : "Failed to insert marker" });
4372
+ }
4373
+ });
4351
4374
  router.get("/config", async (req, res) => {
4352
4375
  const workdir = req.query["workdir"];
4353
4376
  if (!workdir) return res.status(400).json({ error: "workdir required" });
@@ -5552,7 +5575,7 @@ async function createServerHandle(config3) {
5552
5575
  setMcpTools(mcpTools);
5553
5576
  logger.info("MCP tools registered", { count: mcpTools.length });
5554
5577
  }
5555
- const { signalMcpReady } = await import("./server-H3525HD6.js");
5578
+ const { signalMcpReady } = await import("./server-AAIYC4BH.js");
5556
5579
  signalMcpReady();
5557
5580
  });
5558
5581
  const app = express();
@@ -5911,8 +5934,8 @@ All file and git operations should use this branch.
5911
5934
  res.json({ workspaces: workspacesList });
5912
5935
  });
5913
5936
  app.get("/api/sessions", async (req, res) => {
5914
- const { getRecentUserPromptsForSession } = await import("./events-ICX5KVET.js");
5915
- const { getPendingConfirmationsBySession } = await import("./path-security-XENIR7SX.js");
5937
+ const { getRecentUserPromptsForSession } = await import("./events-D5AFN2CW.js");
5938
+ const { getPendingConfirmationsBySession } = await import("./path-security-DP75YZK5.js");
5916
5939
  const projectId = req.query["projectId"];
5917
5940
  const limit = Math.min(parseInt(req.query["limit"]) || 20, 100);
5918
5941
  const offset = parseInt(req.query["offset"]) || 0;
@@ -6031,9 +6054,9 @@ All file and git operations should use this branch.
6031
6054
  }
6032
6055
  });
6033
6056
  app.get("/api/sessions/:id", async (req, res) => {
6034
- const { getEventStore: getEventStore2, combineEventsWithSnapshot } = await import("./events-ICX5KVET.js");
6035
- const { buildMessagesFromStoredEvents, foldPendingConfirmations } = await import("./folding-L2L4OHX6.js");
6036
- const { getPendingQuestionsForSession } = await import("./tools-DXBIHSMY.js");
6057
+ const { getEventStore: getEventStore2, combineEventsWithSnapshot } = await import("./events-D5AFN2CW.js");
6058
+ const { buildMessagesFromStoredEvents, foldPendingConfirmations, foldWaitingWorkflow } = await import("./folding-BO6Z6HMP.js");
6059
+ const { getPendingQuestionsForSession } = await import("./tools-HDD7RHEG.js");
6037
6060
  const { getMaxVisibleItems } = await import("./settings-2OVKFWR5.js");
6038
6061
  const session = sessionManager.getSession(req.params.id);
6039
6062
  if (!session) {
@@ -6048,6 +6071,7 @@ All file and git operations should use this branch.
6048
6071
  const queueState = sessionManager.getQueueState(req.params.id);
6049
6072
  const pendingQuestions = getPendingQuestionsForSession(req.params.id);
6050
6073
  const pendingConfirmations = foldPendingConfirmations(events);
6074
+ const waitingWorkflow = foldWaitingWorkflow(events);
6051
6075
  res.json({
6052
6076
  session,
6053
6077
  messages,
@@ -6055,7 +6079,8 @@ All file and git operations should use this branch.
6055
6079
  contextState,
6056
6080
  queueState,
6057
6081
  pendingQuestions,
6058
- pendingConfirmations
6082
+ pendingConfirmations,
6083
+ waitingWorkflow
6059
6084
  });
6060
6085
  });
6061
6086
  app.delete("/api/sessions/:id", async (req, res) => {
@@ -6064,8 +6089,8 @@ All file and git operations should use this branch.
6064
6089
  if (!session) {
6065
6090
  return res.status(404).json({ error: "Session not found" });
6066
6091
  }
6067
- const { stopSessionExecution } = await import("./chat-handler-PC5BUJGA.js");
6068
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-DXBIHSMY.js");
6092
+ const { stopSessionExecution } = await import("./chat-handler-MSQFJH7S.js");
6093
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-HDD7RHEG.js");
6069
6094
  sessionManager.clearMessageQueue(sessionId);
6070
6095
  stopSessionExecution(sessionId, sessionManager);
6071
6096
  abortSession(sessionId);
@@ -6094,8 +6119,8 @@ All file and git operations should use this branch.
6094
6119
  res.json({ success: true });
6095
6120
  });
6096
6121
  app.post("/api/sessions/:id/provider", async (req, res) => {
6097
- const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEv } = await import("./events-ICX5KVET.js");
6098
- const { buildMessagesFromStoredEvents } = await import("./folding-L2L4OHX6.js");
6122
+ const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEv } = await import("./events-D5AFN2CW.js");
6123
+ const { buildMessagesFromStoredEvents } = await import("./folding-BO6Z6HMP.js");
6099
6124
  const { getMaxVisibleItems } = await import("./settings-2OVKFWR5.js");
6100
6125
  const sessionId = req.params.id;
6101
6126
  const session = sessionManager.getSession(sessionId);
@@ -6209,8 +6234,8 @@ All file and git operations should use this branch.
6209
6234
  res.json({ success: true });
6210
6235
  });
6211
6236
  app.put("/api/sessions/:id/mode", async (req, res) => {
6212
- const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEv } = await import("./events-ICX5KVET.js");
6213
- const { buildMessagesFromStoredEvents } = await import("./folding-L2L4OHX6.js");
6237
+ const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEv } = await import("./events-D5AFN2CW.js");
6238
+ const { buildMessagesFromStoredEvents } = await import("./folding-BO6Z6HMP.js");
6214
6239
  const { getMaxVisibleItems } = await import("./settings-2OVKFWR5.js");
6215
6240
  const sessionId = req.params.id;
6216
6241
  const session = sessionManager.getSession(sessionId);
@@ -6297,7 +6322,7 @@ All file and git operations should use this branch.
6297
6322
  if (alwaysAllow !== void 0 && typeof alwaysAllow !== "boolean") {
6298
6323
  return res.status(400).json({ error: "alwaysAllow must be a boolean if provided" });
6299
6324
  }
6300
- const { providePathConfirmation, getConfirmationSessionId } = await import("./tools-DXBIHSMY.js");
6325
+ const { providePathConfirmation, getConfirmationSessionId } = await import("./tools-HDD7RHEG.js");
6301
6326
  const pendingSessionId = getConfirmationSessionId(callId);
6302
6327
  if (!pendingSessionId) {
6303
6328
  return res.status(404).json({ error: "No pending path confirmation with that ID" });
@@ -6309,10 +6334,10 @@ All file and git operations should use this branch.
6309
6334
  if (!result.found) {
6310
6335
  return res.status(404).json({ error: "No pending path confirmation with that ID" });
6311
6336
  }
6312
- const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEvents } = await import("./events-ICX5KVET.js");
6313
- const { buildMessagesFromStoredEvents, foldPendingConfirmations } = await import("./folding-L2L4OHX6.js");
6314
- const { createSessionStateMessage } = await import("./protocol-3GNSIGP4.js");
6315
- const { getPendingQuestionsForSession } = await import("./tools-DXBIHSMY.js");
6337
+ const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEvents } = await import("./events-D5AFN2CW.js");
6338
+ const { buildMessagesFromStoredEvents, foldPendingConfirmations } = await import("./folding-BO6Z6HMP.js");
6339
+ const { createSessionStateMessage } = await import("./protocol-4ZDERZNC.js");
6340
+ const { getPendingQuestionsForSession } = await import("./tools-HDD7RHEG.js");
6316
6341
  const { getMaxVisibleItems } = await import("./settings-2OVKFWR5.js");
6317
6342
  const eventStore = getEventStore2();
6318
6343
  const { snapshot, events: eventsSinceSnapshot } = eventStore.getEventsSinceSnapshot(sessionId);
@@ -6349,7 +6374,7 @@ All file and git operations should use this branch.
6349
6374
  if (!skip && typeof answer !== "string") {
6350
6375
  return res.status(400).json({ error: "answer is required when not skipping" });
6351
6376
  }
6352
- const { provideAnswer } = await import("./tools-DXBIHSMY.js");
6377
+ const { provideAnswer } = await import("./tools-HDD7RHEG.js");
6353
6378
  const found = provideAnswer(callId, answer ?? "", skip ?? false);
6354
6379
  if (!found) {
6355
6380
  return res.status(404).json({ error: "No pending question with that ID" });
@@ -6414,7 +6439,7 @@ All file and git operations should use this branch.
6414
6439
  backend: activeProvider?.backend ?? llmClient.getBackend(),
6415
6440
  model: llmClient.getModel()
6416
6441
  };
6417
- const { runAgentTurn, TurnMetrics } = await import("./orchestrator-56LSHPPK.js");
6442
+ const { runAgentTurn, TurnMetrics } = await import("./orchestrator-YQI2D4LW.js");
6418
6443
  runAgentTurn(
6419
6444
  {
6420
6445
  sessionManager,
@@ -6452,15 +6477,15 @@ All file and git operations should use this branch.
6452
6477
  if (!session) {
6453
6478
  return res.status(404).json({ error: "Session not found" });
6454
6479
  }
6455
- const { stopSessionExecution } = await import("./chat-handler-PC5BUJGA.js");
6456
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-DXBIHSMY.js");
6480
+ const { stopSessionExecution } = await import("./chat-handler-MSQFJH7S.js");
6481
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-HDD7RHEG.js");
6457
6482
  const queuedMessages = sessionManager.getQueueState(sessionId);
6458
6483
  sessionManager.clearMessageQueue(sessionId);
6459
6484
  stopSessionExecution(sessionId, sessionManager);
6460
6485
  abortSession(sessionId);
6461
6486
  cancelQuestionsForSession(sessionId, "Session stopped by user");
6462
6487
  cancelPathConfirmationsForSession(sessionId, "Session stopped by user");
6463
- const eventStore = (await import("./events-ICX5KVET.js")).getEventStore();
6488
+ const eventStore = (await import("./events-D5AFN2CW.js")).getEventStore();
6464
6489
  eventStore.append(sessionId, { type: "running.changed", data: { isRunning: false } });
6465
6490
  res.json({ success: true, queuedMessages });
6466
6491
  });
@@ -6474,7 +6499,7 @@ All file and git operations should use this branch.
6474
6499
  if (typeof messageIndex !== "number" || messageIndex < 0) {
6475
6500
  return res.status(400).json({ error: "messageIndex must be a non-negative number" });
6476
6501
  }
6477
- const { truncateSessionMessages } = await import("./events-ICX5KVET.js");
6502
+ const { truncateSessionMessages } = await import("./events-D5AFN2CW.js");
6478
6503
  truncateSessionMessages(sessionId, messageIndex);
6479
6504
  res.json({ success: true });
6480
6505
  });
@@ -6491,8 +6516,8 @@ All file and git operations should use this branch.
6491
6516
  if (content !== void 0 && (typeof content !== "string" || !content.trim())) {
6492
6517
  return res.status(400).json({ error: "content must be a non-empty string if provided" });
6493
6518
  }
6494
- const { getEventStore: getEventStore2 } = await import("./events-ICX5KVET.js");
6495
- const { buildMessagesFromStoredEvents } = await import("./folding-L2L4OHX6.js");
6519
+ const { getEventStore: getEventStore2 } = await import("./events-D5AFN2CW.js");
6520
+ const { buildMessagesFromStoredEvents } = await import("./folding-BO6Z6HMP.js");
6496
6521
  const eventStore = getEventStore2();
6497
6522
  const events = eventStore.getEvents(sessionId);
6498
6523
  const { messages } = buildMessagesFromStoredEvents(events);
@@ -6504,7 +6529,7 @@ All file and git operations should use this branch.
6504
6529
  if (msg.role !== "user" || msg.isSystemGenerated) {
6505
6530
  return res.status(400).json({ error: "Can only replay user messages" });
6506
6531
  }
6507
- const { truncateSessionMessages } = await import("./events-ICX5KVET.js");
6532
+ const { truncateSessionMessages } = await import("./events-D5AFN2CW.js");
6508
6533
  truncateSessionMessages(sessionId, msgIndex - 1);
6509
6534
  sessionManager.queueMessage(sessionId, "asap", content ?? msg.content, msg.attachments, msg.messageKind);
6510
6535
  res.json({ success: true });
@@ -7127,7 +7152,7 @@ All file and git operations should use this branch.
7127
7152
  });
7128
7153
  async function rebuildMcpTools() {
7129
7154
  const { createMcpTools: createMcpTools2 } = await import("./tool-adapter-MOGEI6TP.js");
7130
- const { setMcpTools: setMcpTools2 } = await import("./tools-DXBIHSMY.js");
7155
+ const { setMcpTools: setMcpTools2 } = await import("./tools-HDD7RHEG.js");
7131
7156
  const mcpTools = createMcpTools2(mcpManager);
7132
7157
  setMcpTools2(mcpTools);
7133
7158
  }
@@ -7534,7 +7559,7 @@ All file and git operations should use this branch.
7534
7559
  const state = sessionManager.getContextState(sessionId);
7535
7560
  wssExports.broadcastForSession(sessionId, createContextStateMessage(state));
7536
7561
  });
7537
- const { QueueProcessor } = await import("./processor-H6NFFRI2.js");
7562
+ const { QueueProcessor } = await import("./processor-LVQWRG6M.js");
7538
7563
  const queueProcessor = new QueueProcessor({
7539
7564
  sessionManager,
7540
7565
  providerManager,
@@ -7618,4 +7643,4 @@ export {
7618
7643
  createServerHandle,
7619
7644
  createServer
7620
7645
  };
7621
- //# sourceMappingURL=chunk-JJY5O2WH.js.map
7646
+ //# sourceMappingURL=chunk-AA4PXMSI.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  createChatPathConfirmationMessage
3
- } from "./chunk-CND2YWIJ.js";
3
+ } from "./chunk-IAAHDCJN.js";
4
4
  import {
5
5
  getEventStore
6
- } from "./chunk-LT4MPTGU.js";
6
+ } from "./chunk-PYJ2SRVC.js";
7
7
 
8
8
  // src/server/tools/path-security.ts
9
9
  import { realpath } from "fs/promises";
@@ -494,4 +494,4 @@ export {
494
494
  getConfirmationSessionId,
495
495
  getPendingConfirmationsBySession
496
496
  };
497
- //# sourceMappingURL=chunk-WPACSSBS.js.map
497
+ //# sourceMappingURL=chunk-AQ4KCGXL.js.map
@@ -3,10 +3,10 @@ import {
3
3
  } from "./chunk-K2O7JTCX.js";
4
4
  import {
5
5
  COMPACTION_PROMPT
6
- } from "./chunk-NLJXZZTB.js";
6
+ } from "./chunk-U2RSFH6A.js";
7
7
  import {
8
8
  getCurrentWindowMessageOptions
9
- } from "./chunk-LT4MPTGU.js";
9
+ } from "./chunk-PYJ2SRVC.js";
10
10
 
11
11
  // src/server/context/compactor.ts
12
12
  function appendCompactionPrompt(sessionId, append) {
@@ -36,4 +36,4 @@ export {
36
36
  COMPACTION_MAX_RATIO,
37
37
  shouldCompact
38
38
  };
39
- //# sourceMappingURL=chunk-VJEVCZZA.js.map
39
+ //# sourceMappingURL=chunk-ESJNJ5B6.js.map
@@ -44,14 +44,14 @@ import {
44
44
  extractSensitivePathsFromCommand,
45
45
  registerPathConfirmation,
46
46
  requestPathAccess
47
- } from "./chunk-WPACSSBS.js";
47
+ } from "./chunk-AQ4KCGXL.js";
48
48
  import {
49
49
  createChatDoneMessage,
50
50
  createChatMessageMessage,
51
51
  createChatMessageUpdatedMessage,
52
52
  createChatPathConfirmationMessage,
53
53
  createQueueStateMessage
54
- } from "./chunk-CND2YWIJ.js";
54
+ } from "./chunk-IAAHDCJN.js";
55
55
  import {
56
56
  AskUserInterrupt,
57
57
  askUserTool
@@ -70,12 +70,12 @@ import {
70
70
  COMPACTION_PROMPT,
71
71
  buildBasePrompt,
72
72
  computeEffectiveTools
73
- } from "./chunk-NLJXZZTB.js";
73
+ } from "./chunk-U2RSFH6A.js";
74
74
  import {
75
75
  getCurrentContextWindowId,
76
76
  getCurrentWindowMessageOptions,
77
77
  getEventStore
78
- } from "./chunk-LT4MPTGU.js";
78
+ } from "./chunk-PYJ2SRVC.js";
79
79
  import {
80
80
  buildContextMessagesFromEventHistory,
81
81
  foldContextState,
@@ -85,7 +85,7 @@ import {
85
85
  handleToolResult,
86
86
  reorderToolMessages,
87
87
  stripOrphanedToolCalls
88
- } from "./chunk-AXFPEGJI.js";
88
+ } from "./chunk-3QQKKZMF.js";
89
89
  import {
90
90
  findAgentById,
91
91
  getRuntimeConfig,
@@ -1913,7 +1913,7 @@ ${CONTINUE_PROMPT}` : CONTINUE_PROMPT;
1913
1913
  sessionManager.setCurrentContextSize(sessionId, result.usage.promptTokens, config.subAgentMetadata?.subAgentId);
1914
1914
  if (!compacting) {
1915
1915
  const contextState2 = sessionManager.getContextState(sessionId);
1916
- const { shouldCompact, appendCompactionPrompt } = await import("./compactor-HW6GBRAG.js");
1916
+ const { shouldCompact, appendCompactionPrompt } = await import("./compactor-R7GGPBPR.js");
1917
1917
  if (shouldCompact(
1918
1918
  contextState2.currentTokens,
1919
1919
  contextState2.maxTokens,
@@ -2852,7 +2852,7 @@ var callSubAgentTool = {
2852
2852
  };
2853
2853
  }
2854
2854
  try {
2855
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-DXBIHSMY.js");
2855
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-HDD7RHEG.js");
2856
2856
  const toolRegistry = getToolRegistryForAgent2(agentDef);
2857
2857
  const turnMetrics = new TurnMetrics();
2858
2858
  const result = await executeSubAgent({
@@ -3413,6 +3413,21 @@ ${recentLogs}`.trim();
3413
3413
  await this.stop(workdir);
3414
3414
  return this.start(workdir);
3415
3415
  }
3416
+ clearLogs(workdir) {
3417
+ const instance = this.getInstance(workdir);
3418
+ instance.logs = [];
3419
+ instance.totalLogBytes = 0;
3420
+ }
3421
+ insertMarker(workdir) {
3422
+ const instance = this.getInstance(workdir);
3423
+ const entry = {
3424
+ stream: "stdout",
3425
+ content: "\u2500".repeat(56),
3426
+ type: "marker"
3427
+ };
3428
+ instance.logs.push(entry);
3429
+ instance.totalLogBytes += entry.content.length;
3430
+ }
3416
3431
  getStatus(workdir) {
3417
3432
  const instance = this.getInstance(workdir);
3418
3433
  return {
@@ -3858,7 +3873,7 @@ var mcpConfigTool = createTool(
3858
3873
  mcpNotifyChanged?.(sessionId);
3859
3874
  }
3860
3875
  async function rebuildTools() {
3861
- const { setMcpTools: setMcpTools2 } = await import("./tools-DXBIHSMY.js");
3876
+ const { setMcpTools: setMcpTools2 } = await import("./tools-HDD7RHEG.js");
3862
3877
  const mcpTools = createMcpTools(mcpManagerForTools);
3863
3878
  setMcpTools2(mcpTools);
3864
3879
  }
@@ -4504,4 +4519,4 @@ export {
4504
4519
  getToolRegistryForAgent,
4505
4520
  createToolRegistry
4506
4521
  };
4507
- //# sourceMappingURL=chunk-DVVRKNFS.js.map
4522
+ //# sourceMappingURL=chunk-FK6R2YTQ.js.map