openfox 2.0.116 → 2.0.117

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 (30) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/CHANGELOG.md +24 -0
  3. package/dist/{chat-handler-Z6BEY66U.js → chat-handler-URSNELCE.js} +4 -4
  4. package/dist/{chunk-4HV3PDEK.js → chunk-2PQA3DHY.js} +7 -4
  5. package/dist/{chunk-SQLJRO3J.js → chunk-3PEYTWCS.js} +3 -3
  6. package/dist/{chunk-HYPXL7K5.js → chunk-7SDJXHJH.js} +3 -3
  7. package/dist/{chunk-4E52GUXJ.js → chunk-ECCSVMRT.js} +19 -19
  8. package/dist/{chunk-BH3BBUGB.js → chunk-EZD7WFBZ.js} +20 -18
  9. package/dist/{chunk-U4HMAYAD.js → chunk-I6MY65LO.js} +3 -3
  10. package/dist/chunk-NPTI5RCQ.js +7 -0
  11. package/dist/{chunk-QJWTBVJO.js → chunk-ZS6MW2WM.js} +3 -3
  12. package/dist/cli/dev.js +1 -1
  13. package/dist/cli/index.js +1 -1
  14. package/dist/{dynamic-context-YHWFFP53.js → dynamic-context-NNBVVFBT.js} +2 -2
  15. package/dist/{launch-PAVQAWGP.js → launch-HSSFGQ5A.js} +5 -5
  16. package/dist/{orchestrator-CS3KXLZE.js → orchestrator-FVXUJW3K.js} +4 -4
  17. package/dist/package.json +1 -1
  18. package/dist/{processor-RZD4JRDX.js → processor-JRVW5QBA.js} +3 -3
  19. package/dist/{serve-KR22J37W.js → serve-CW6PR3M2.js} +8 -8
  20. package/dist/server/index.js +7 -7
  21. package/dist/{server-ESKTIZL5.js → server-V46SOIGP.js} +6 -6
  22. package/dist/{tools-KBS6X3EN.js → tools-2Q3GRECI.js} +2 -2
  23. package/dist/{update-TDS6LP5N.js → update-YP7IRT6M.js} +2 -2
  24. package/dist/web/assets/index-C58KXxRi.js +324 -0
  25. package/dist/web/assets/{index-c43YT-4A.css → index-DTiVSJJu.css} +1 -1
  26. package/dist/web/index.html +2 -2
  27. package/dist/web/sw.js +1 -1
  28. package/package.json +1 -1
  29. package/dist/chunk-HNHSUQCN.js +0 -7
  30. package/dist/web/assets/index-ChtRS33s.js +0 -324
package/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.117 - 2026-08-12
4
+
5
+ ### Features
6
+
7
+ - **New-session picker in split view** — pick any project, create a session, and open it as a pane
8
+ - **Project dropdown in split panes** — open the folder, manage tasks, or edit settings straight from a pane header
9
+
10
+ ### Enhancements
11
+
12
+ - **Live session list in split view** — the control panel refreshes automatically and on tab focus
13
+ - **Breadcrumb modal titles** — Tasks and Project Settings now read "project › action"
14
+
15
+ ### Bug Fixes
16
+
17
+ - **Tail smartness off for chained commands** — `&&`/`||` chains are no longer misread as piped output
18
+ - **Queued messages survive sub-agent runs** — no longer drained into a sub-agent context mid-run
19
+ - **Composer stays compact on narrow layouts** — and re-sizes when the pane width changes
20
+ - **Split-view actions target the owning pane** — launch, resume, retry, compact, and exit stay in their pane
21
+ - **Path confirmations land in the right pane** — allow/deny prompts appear instantly where they were asked
22
+ - **Each split pane shows its own workspace** — branch, git diff, and context no longer bleed between panes
23
+ - **Adding a split pane mid-stream no longer crashes** — the "maximum update depth" blank-screen error is gone
24
+ - **Project-scoped agents in the default agent list** — grouped by Project, User, and Built-in
25
+ - **Saving a new agent no longer hangs** — the settings modal no longer sticks on "saving"
26
+
3
27
  ## 2.0.116 - 2026-08-11
4
28
 
5
29
  ### Features
package/dist/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.117 - 2026-08-12
4
+
5
+ ### Features
6
+
7
+ - **New-session picker in split view** — pick any project, create a session, and open it as a pane
8
+ - **Project dropdown in split panes** — open the folder, manage tasks, or edit settings straight from a pane header
9
+
10
+ ### Enhancements
11
+
12
+ - **Live session list in split view** — the control panel refreshes automatically and on tab focus
13
+ - **Breadcrumb modal titles** — Tasks and Project Settings now read "project › action"
14
+
15
+ ### Bug Fixes
16
+
17
+ - **Tail smartness off for chained commands** — `&&`/`||` chains are no longer misread as piped output
18
+ - **Queued messages survive sub-agent runs** — no longer drained into a sub-agent context mid-run
19
+ - **Composer stays compact on narrow layouts** — and re-sizes when the pane width changes
20
+ - **Split-view actions target the owning pane** — launch, resume, retry, compact, and exit stay in their pane
21
+ - **Path confirmations land in the right pane** — allow/deny prompts appear instantly where they were asked
22
+ - **Each split pane shows its own workspace** — branch, git diff, and context no longer bleed between panes
23
+ - **Adding a split pane mid-stream no longer crashes** — the "maximum update depth" blank-screen error is gone
24
+ - **Project-scoped agents in the default agent list** — grouped by Project, User, and Built-in
25
+ - **Saving a new agent no longer hangs** — the settings modal no longer sticks on "saving"
26
+
3
27
  ## 2.0.116 - 2026-08-11
4
28
 
5
29
  ### Features
@@ -5,9 +5,9 @@ import {
5
5
  } from "./chunk-6XHDNSA3.js";
6
6
  import {
7
7
  runChatTurn
8
- } from "./chunk-U4HMAYAD.js";
9
- import "./chunk-4HV3PDEK.js";
10
- import "./chunk-SQLJRO3J.js";
8
+ } from "./chunk-I6MY65LO.js";
9
+ import "./chunk-2PQA3DHY.js";
10
+ import "./chunk-3PEYTWCS.js";
11
11
  import "./chunk-2FCLCUVR.js";
12
12
  import "./chunk-EQ7DK2TG.js";
13
13
  import "./chunk-27NABDXB.js";
@@ -173,4 +173,4 @@ export {
173
173
  startChatSession,
174
174
  stopSessionExecution
175
175
  };
176
- //# sourceMappingURL=chat-handler-Z6BEY66U.js.map
176
+ //# sourceMappingURL=chat-handler-URSNELCE.js.map
@@ -1103,6 +1103,7 @@ function hasTopLevelStatementSeparator(command) {
1103
1103
  continue;
1104
1104
  }
1105
1105
  if (ch === ";" || ch === "\n") return true;
1106
+ if ((ch === "&" || ch === "|") && command[i + 1] === ch) return true;
1106
1107
  }
1107
1108
  return false;
1108
1109
  }
@@ -2129,7 +2130,9 @@ ${COMPACTION_PROMPT}`,
2129
2130
  emitPartialDoneEvents(sessionId, assistantMsgId, statsIdentity, mode, turnMetrics, append, agentType);
2130
2131
  throw new Error("Aborted");
2131
2132
  }
2132
- void drainQueue(sessionManager, sessionId, append, onMessage);
2133
+ if (!config.subAgentMetadata) {
2134
+ void drainQueue(sessionManager, sessionId, append, onMessage);
2135
+ }
2133
2136
  retryLimiter.reset();
2134
2137
  continue;
2135
2138
  }
@@ -2967,7 +2970,7 @@ var callSubAgentTool = {
2967
2970
  };
2968
2971
  }
2969
2972
  try {
2970
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-KBS6X3EN.js");
2973
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-2Q3GRECI.js");
2971
2974
  const toolRegistry = getToolRegistryForAgent2(agentDef);
2972
2975
  const turnMetrics = new TurnMetrics();
2973
2976
  const result = await executeSubAgent({
@@ -3989,7 +3992,7 @@ var mcpConfigTool = createTool(
3989
3992
  mcpNotifyChanged?.(sessionId);
3990
3993
  }
3991
3994
  async function rebuildTools() {
3992
- const { setMcpTools: setMcpTools2 } = await import("./tools-KBS6X3EN.js");
3995
+ const { setMcpTools: setMcpTools2 } = await import("./tools-2Q3GRECI.js");
3993
3996
  const mcpTools = createMcpTools(mcpManagerForTools);
3994
3997
  setMcpTools2(mcpTools);
3995
3998
  }
@@ -4873,4 +4876,4 @@ export {
4873
4876
  getToolRegistryForAgent,
4874
4877
  createToolRegistry
4875
4878
  };
4876
- //# sourceMappingURL=chunk-4HV3PDEK.js.map
4879
+ //# sourceMappingURL=chunk-2PQA3DHY.js.map
@@ -105,7 +105,7 @@ function resolveAgentDef(sessionManager, sessionId) {
105
105
  }
106
106
  async function buildCachedPrompt(sessionManager, sessionId, agentDef, modelName) {
107
107
  const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
108
- const { getToolRegistryForAgent } = await import("./tools-KBS6X3EN.js");
108
+ const { getToolRegistryForAgent } = await import("./tools-2Q3GRECI.js");
109
109
  const tools = getToolRegistryForAgent(agentDef, sessionId).definitions;
110
110
  const toolFingerprint = getToolFingerprint(tools);
111
111
  const allAgents = await loadAllAgentsDefault(sessionManager.getProjectWorkdir(sessionId));
@@ -124,7 +124,7 @@ async function buildCachedPrompt(sessionManager, sessionId, agentDef, modelName)
124
124
  async function computeSessionHash(sessionManager, sessionId, modelName) {
125
125
  const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
126
126
  const agentDef = await resolveAgentDef(sessionManager, sessionId);
127
- const { getToolRegistryForAgent } = await import("./tools-KBS6X3EN.js");
127
+ const { getToolRegistryForAgent } = await import("./tools-2Q3GRECI.js");
128
128
  const tools = getToolRegistryForAgent(agentDef, sessionId).definitions;
129
129
  const toolFingerprint = getToolFingerprint(tools);
130
130
  return computeDynamicContextHash(instructionContent, skills, toolFingerprint, modelName);
@@ -148,4 +148,4 @@ export {
148
148
  computeSessionHash,
149
149
  applyDynamicContext
150
150
  };
151
- //# sourceMappingURL=chunk-SQLJRO3J.js.map
151
+ //# sourceMappingURL=chunk-3PEYTWCS.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  runAgentTurn
3
- } from "./chunk-U4HMAYAD.js";
3
+ } from "./chunk-I6MY65LO.js";
4
4
  import {
5
5
  executeSubAgent,
6
6
  getToolRegistryForAgent
7
- } from "./chunk-4HV3PDEK.js";
7
+ } from "./chunk-2PQA3DHY.js";
8
8
  import {
9
9
  TurnMetrics,
10
10
  createMessageStartEvent
@@ -1099,4 +1099,4 @@ export {
1099
1099
  abortRunnerRun,
1100
1100
  launchWorkflowRun
1101
1101
  };
1102
- //# sourceMappingURL=chunk-HYPXL7K5.js.map
1102
+ //# sourceMappingURL=chunk-7SDJXHJH.js.map
@@ -16,10 +16,10 @@ import {
16
16
  terminalManager,
17
17
  tokenFromPassword,
18
18
  verifyPassword
19
- } from "./chunk-BH3BBUGB.js";
19
+ } from "./chunk-EZD7WFBZ.js";
20
20
  import {
21
21
  TEMPLATE_VARIABLES
22
- } from "./chunk-HYPXL7K5.js";
22
+ } from "./chunk-7SDJXHJH.js";
23
23
  import {
24
24
  createToolRegistry,
25
25
  devServerManager,
@@ -29,7 +29,7 @@ import {
29
29
  setMcpManagerForTools,
30
30
  setMcpTools,
31
31
  setNotifyMcpServersChanged
32
- } from "./chunk-4HV3PDEK.js";
32
+ } from "./chunk-2PQA3DHY.js";
33
33
  import {
34
34
  deleteOwnedSkill,
35
35
  deleteProjectSkill,
@@ -167,7 +167,7 @@ import {
167
167
  } from "./chunk-JLAR2CMV.js";
168
168
  import {
169
169
  VERSION
170
- } from "./chunk-HNHSUQCN.js";
170
+ } from "./chunk-NPTI5RCQ.js";
171
171
  import {
172
172
  agentExists,
173
173
  deleteAgent,
@@ -5947,7 +5947,7 @@ async function createServerHandle(config3) {
5947
5947
  toolRegistry = createToolRegistry();
5948
5948
  logger.info("MCP tools registered", { count: mcpTools.length });
5949
5949
  }
5950
- const { signalMcpReady } = await import("./server-ESKTIZL5.js");
5950
+ const { signalMcpReady } = await import("./server-V46SOIGP.js");
5951
5951
  signalMcpReady();
5952
5952
  });
5953
5953
  const app = express();
@@ -6145,7 +6145,7 @@ async function createServerHandle(config3) {
6145
6145
  app.use("/api", sessionFavoriteRouter);
6146
6146
  const { createTasksService } = await import("./service-M7XJHAK4.js");
6147
6147
  const { registerTaskRoutes } = await import("./tasks-X5H5HM4J.js");
6148
- const { setTasksService } = await import("./tools-KBS6X3EN.js");
6148
+ const { setTasksService } = await import("./tools-2Q3GRECI.js");
6149
6149
  const tasksService = createTasksService({
6150
6150
  sessionManager,
6151
6151
  config: config3,
@@ -6474,7 +6474,7 @@ All file and git operations should use this branch.
6474
6474
  app.get("/api/sessions/:id", async (req, res) => {
6475
6475
  const { getEventStore: getEventStore2, combineEventsWithSnapshot } = await import("./events-IVPAMMR5.js");
6476
6476
  const { buildMessagesFromStoredEvents, foldPendingConfirmations } = await import("./folding-RTGU63BW.js");
6477
- const { getPendingQuestionsForSession } = await import("./tools-KBS6X3EN.js");
6477
+ const { getPendingQuestionsForSession } = await import("./tools-2Q3GRECI.js");
6478
6478
  const { getMaxVisibleItems } = await import("./settings-FGXQHKUH.js");
6479
6479
  const { getAgentModelOverride: getAgentModelOverride2 } = await import("./model-overrides-7F2EOA4U.js");
6480
6480
  const { updateSessionProvider: updateSessionProvider2 } = await import("./sessions-I7ELDIIP.js");
@@ -6516,8 +6516,8 @@ All file and git operations should use this branch.
6516
6516
  if (!session) {
6517
6517
  return res.status(404).json({ error: "Session not found" });
6518
6518
  }
6519
- const { stopSessionExecution } = await import("./chat-handler-Z6BEY66U.js");
6520
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-KBS6X3EN.js");
6519
+ const { stopSessionExecution } = await import("./chat-handler-URSNELCE.js");
6520
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-2Q3GRECI.js");
6521
6521
  sessionManager.clearMessageQueue(sessionId);
6522
6522
  stopSessionExecution(sessionId, sessionManager);
6523
6523
  abortSession(sessionId);
@@ -6767,7 +6767,7 @@ All file and git operations should use this branch.
6767
6767
  if (alwaysAllow !== void 0 && typeof alwaysAllow !== "boolean") {
6768
6768
  return res.status(400).json({ error: "alwaysAllow must be a boolean if provided" });
6769
6769
  }
6770
- const { providePathConfirmation, getConfirmationSessionId } = await import("./tools-KBS6X3EN.js");
6770
+ const { providePathConfirmation, getConfirmationSessionId } = await import("./tools-2Q3GRECI.js");
6771
6771
  const pendingSessionId = getConfirmationSessionId(callId);
6772
6772
  if (!pendingSessionId) {
6773
6773
  return res.status(404).json({ error: "No pending path confirmation with that ID" });
@@ -6782,7 +6782,7 @@ All file and git operations should use this branch.
6782
6782
  const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEvents } = await import("./events-IVPAMMR5.js");
6783
6783
  const { buildMessagesFromStoredEvents, foldPendingConfirmations } = await import("./folding-RTGU63BW.js");
6784
6784
  const { createSessionStateMessage } = await import("./protocol-HYA5BYVN.js");
6785
- const { getPendingQuestionsForSession } = await import("./tools-KBS6X3EN.js");
6785
+ const { getPendingQuestionsForSession } = await import("./tools-2Q3GRECI.js");
6786
6786
  const { getMaxVisibleItems } = await import("./settings-FGXQHKUH.js");
6787
6787
  const eventStore = getEventStore2();
6788
6788
  const { snapshot, events: eventsSinceSnapshot } = eventStore.getEventsSinceSnapshot(sessionId);
@@ -6819,7 +6819,7 @@ All file and git operations should use this branch.
6819
6819
  if (!skip && typeof answer !== "string") {
6820
6820
  return res.status(400).json({ error: "answer is required when not skipping" });
6821
6821
  }
6822
- const { provideAnswer } = await import("./tools-KBS6X3EN.js");
6822
+ const { provideAnswer } = await import("./tools-2Q3GRECI.js");
6823
6823
  const found = provideAnswer(callId, answer ?? "", skip ?? false);
6824
6824
  if (!found) {
6825
6825
  return res.status(404).json({ error: "No pending question with that ID" });
@@ -6884,7 +6884,7 @@ All file and git operations should use this branch.
6884
6884
  backend: activeProvider?.backend ?? llmClient.getBackend(),
6885
6885
  model: llmClient.getModel()
6886
6886
  };
6887
- const { runAgentTurn, TurnMetrics } = await import("./orchestrator-CS3KXLZE.js");
6887
+ const { runAgentTurn, TurnMetrics } = await import("./orchestrator-FVXUJW3K.js");
6888
6888
  runAgentTurn(
6889
6889
  {
6890
6890
  sessionManager,
@@ -6922,8 +6922,8 @@ All file and git operations should use this branch.
6922
6922
  if (!session) {
6923
6923
  return res.status(404).json({ error: "Session not found" });
6924
6924
  }
6925
- const { stopSessionExecution } = await import("./chat-handler-Z6BEY66U.js");
6926
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-KBS6X3EN.js");
6925
+ const { stopSessionExecution } = await import("./chat-handler-URSNELCE.js");
6926
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-2Q3GRECI.js");
6927
6927
  const queuedMessages = sessionManager.getQueueState(sessionId);
6928
6928
  sessionManager.clearMessageQueue(sessionId);
6929
6929
  stopSessionExecution(sessionId, sessionManager);
@@ -7723,7 +7723,7 @@ All file and git operations should use this branch.
7723
7723
  });
7724
7724
  async function rebuildMcpTools() {
7725
7725
  const { createMcpTools: createMcpTools2 } = await import("./tool-adapter-FJAFLDZA.js");
7726
- const { setMcpTools: setMcpTools2 } = await import("./tools-KBS6X3EN.js");
7726
+ const { setMcpTools: setMcpTools2 } = await import("./tools-2Q3GRECI.js");
7727
7727
  const mcpTools = createMcpTools2(mcpManager);
7728
7728
  setMcpTools2(mcpTools);
7729
7729
  toolRegistry = createToolRegistry();
@@ -8277,7 +8277,7 @@ All file and git operations should use this branch.
8277
8277
  );
8278
8278
  const wss = wssExports.wss;
8279
8279
  deferTasksBroadcast = (projectId, payload) => wssExports.broadcastForProject(projectId, "", { type: "tasks.update", payload });
8280
- const { launchWorkflowRun, abortRunnerRun } = await import("./launch-PAVQAWGP.js");
8280
+ const { launchWorkflowRun, abortRunnerRun } = await import("./launch-HSSFGQ5A.js");
8281
8281
  deferTasksLaunchWorkflow = (sessionId, launch) => {
8282
8282
  const session = sessionManager.getSession(sessionId);
8283
8283
  let llmClient = getLLMClient();
@@ -8315,7 +8315,7 @@ All file and git operations should use this branch.
8315
8315
  const state = sessionManager.getContextState(sessionId);
8316
8316
  wssExports.broadcastForSession(sessionId, createContextStateMessage(state));
8317
8317
  });
8318
- const { QueueProcessor } = await import("./processor-RZD4JRDX.js");
8318
+ const { QueueProcessor } = await import("./processor-JRVW5QBA.js");
8319
8319
  const queueProcessor = new QueueProcessor({
8320
8320
  sessionManager,
8321
8321
  providerManager,
@@ -8401,4 +8401,4 @@ export {
8401
8401
  createServerHandle,
8402
8402
  createServer
8403
8403
  };
8404
- //# sourceMappingURL=chunk-4E52GUXJ.js.map
8404
+ //# sourceMappingURL=chunk-ECCSVMRT.js.map
@@ -5,18 +5,18 @@ import {
5
5
  } from "./chunk-6XHDNSA3.js";
6
6
  import {
7
7
  launchWorkflowRun
8
- } from "./chunk-HYPXL7K5.js";
8
+ } from "./chunk-7SDJXHJH.js";
9
9
  import {
10
10
  runChatTurn
11
- } from "./chunk-U4HMAYAD.js";
11
+ } from "./chunk-I6MY65LO.js";
12
12
  import {
13
13
  devServerManager
14
- } from "./chunk-4HV3PDEK.js";
14
+ } from "./chunk-2PQA3DHY.js";
15
15
  import {
16
16
  applyDynamicContext,
17
17
  computeSessionHash,
18
18
  computeUnifiedDiff
19
- } from "./chunk-SQLJRO3J.js";
19
+ } from "./chunk-3PEYTWCS.js";
20
20
  import {
21
21
  appendCompactionPrompt
22
22
  } from "./chunk-X3XKYGUN.js";
@@ -1168,12 +1168,13 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
1168
1168
  // Context Management
1169
1169
  // =========================================================================
1170
1170
  case "context.compact": {
1171
- if (!client.activeSessionId) {
1171
+ const payload = message.payload;
1172
+ const sessionId = payload?.sessionId ?? client.activeSessionId;
1173
+ if (!sessionId) {
1172
1174
  send(createErrorMessage("NO_SESSION", "No active session", message.id));
1173
1175
  return;
1174
1176
  }
1175
- const session = sessionManager.requireSession(client.activeSessionId);
1176
- const sessionId = client.activeSessionId;
1177
+ const session = sessionManager.requireSession(sessionId);
1177
1178
  if (session.isRunning) {
1178
1179
  send(createErrorMessage("SESSION_RUNNING", "Cannot compact while session is running", message.id));
1179
1180
  return;
@@ -1274,7 +1275,7 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
1274
1275
  }
1275
1276
  const session = sessionManager.requireSession(sessionId);
1276
1277
  try {
1277
- const { buildCachedPrompt } = await import("./dynamic-context-YHWFFP53.js");
1278
+ const { buildCachedPrompt } = await import("./dynamic-context-NNBVVFBT.js");
1278
1279
  const allAgents = await import("./registry-5QL3BOWN.js");
1279
1280
  const agentDef = allAgents.findAgentById(session.mode, await allAgents.loadAllAgentsDefault()) ?? allAgents.findAgentById("planner", await allAgents.loadAllAgentsDefault());
1280
1281
  const modelName = session.providerModel ?? _providerManager?.getCurrentModel();
@@ -1351,11 +1352,13 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
1351
1352
  // Runner (Auto-Loop)
1352
1353
  // =========================================================================
1353
1354
  case "runner.launch": {
1354
- if (!client.activeSessionId) {
1355
+ const launchPayloadEarly = message.payload;
1356
+ const sessionId = launchPayloadEarly?.sessionId ?? client.activeSessionId;
1357
+ if (!sessionId) {
1355
1358
  send(createErrorMessage("NO_SESSION", "No active session", message.id));
1356
1359
  return;
1357
1360
  }
1358
- const session = sessionManager.requireSession(client.activeSessionId);
1361
+ const session = sessionManager.requireSession(sessionId);
1359
1362
  if (session.isRunning) {
1360
1363
  const launchPayload2 = message.payload;
1361
1364
  const content = launchPayload2?.content ?? "";
@@ -1368,16 +1371,15 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
1368
1371
 
1369
1372
  ${content}` : workflowInfo;
1370
1373
  }
1371
- sessionManager.queueMessage(client.activeSessionId, "asap", fullContent, attachments, "workflow-launch");
1372
- const queueState = sessionManager.getQueueState(client.activeSessionId);
1373
- send({
1374
+ sessionManager.queueMessage(sessionId, "asap", fullContent, attachments, "workflow-launch");
1375
+ const queueState = sessionManager.getQueueState(sessionId);
1376
+ sendForSession(sessionId, {
1374
1377
  type: "queue.state",
1375
1378
  payload: { success: true, queueState },
1376
1379
  id: message.id
1377
1380
  });
1378
1381
  return;
1379
1382
  }
1380
- const launchPayloadEarly = message.payload;
1381
1383
  if (!launchPayloadEarly?.resumeFrom) {
1382
1384
  const pendingCriteria = session.criteria.filter((c) => c.status.type !== "passed");
1383
1385
  if (!launchPayloadEarly?.workflowId && pendingCriteria.length === 0) {
@@ -1385,7 +1387,6 @@ ${content}` : workflowInfo;
1385
1387
  return;
1386
1388
  }
1387
1389
  }
1388
- const sessionId = client.activeSessionId;
1389
1390
  if (session.phase === "blocked") {
1390
1391
  logger.info("User launched runner - resetting blocked state", { sessionId });
1391
1392
  sessionManager.setPhase(sessionId, "build");
@@ -1493,11 +1494,12 @@ ${content}` : workflowInfo;
1493
1494
  // Workflow
1494
1495
  // =========================================================================
1495
1496
  case "workflow.exit": {
1496
- if (!client.activeSessionId) {
1497
+ const payload = message.payload;
1498
+ const exitSessionId = payload?.sessionId ?? client.activeSessionId;
1499
+ if (!exitSessionId) {
1497
1500
  send(createErrorMessage("NO_SESSION", "No active session", message.id));
1498
1501
  return;
1499
1502
  }
1500
- const exitSessionId = client.activeSessionId;
1501
1503
  const exitSession = sessionManager.getSession(exitSessionId);
1502
1504
  if (!exitSession) {
1503
1505
  send(createErrorMessage("NOT_FOUND", "Session not found", message.id));
@@ -1544,4 +1546,4 @@ export {
1544
1546
  signalMcpReady,
1545
1547
  createWebSocketServer
1546
1548
  };
1547
- //# sourceMappingURL=chunk-BH3BBUGB.js.map
1549
+ //# sourceMappingURL=chunk-EZD7WFBZ.js.map
@@ -4,12 +4,12 @@ import {
4
4
  getToolRegistryForAgent,
5
5
  processEventsForConversation,
6
6
  runTopLevelAgentLoop
7
- } from "./chunk-4HV3PDEK.js";
7
+ } from "./chunk-2PQA3DHY.js";
8
8
  import {
9
9
  buildCachedPrompt,
10
10
  computeDynamicContextHash,
11
11
  getToolFingerprint
12
- } from "./chunk-SQLJRO3J.js";
12
+ } from "./chunk-3PEYTWCS.js";
13
13
  import {
14
14
  getAllInstructions,
15
15
  getEnabledSkillMetadata
@@ -320,4 +320,4 @@ export {
320
320
  runChatTurn,
321
321
  runAgentTurn
322
322
  };
323
- //# sourceMappingURL=chunk-U4HMAYAD.js.map
323
+ //# sourceMappingURL=chunk-I6MY65LO.js.map
@@ -0,0 +1,7 @@
1
+ // src/constants.ts
2
+ var VERSION = "2.0.117";
3
+
4
+ export {
5
+ VERSION
6
+ };
7
+ //# sourceMappingURL=chunk-NPTI5RCQ.js.map
@@ -200,7 +200,7 @@ async function runCli(options) {
200
200
  break;
201
201
  }
202
202
  case "update": {
203
- const { runUpdate } = await import("./update-TDS6LP5N.js");
203
+ const { runUpdate } = await import("./update-YP7IRT6M.js");
204
204
  const code = await runUpdate();
205
205
  if (code !== 0) {
206
206
  process.exit(code);
@@ -213,7 +213,7 @@ async function runCli(options) {
213
213
  if (!configExists) {
214
214
  await runNetworkSetup(mode);
215
215
  }
216
- const { runServe } = await import("./serve-KR22J37W.js");
216
+ const { runServe } = await import("./serve-CW6PR3M2.js");
217
217
  const serveOptions = { mode };
218
218
  if (values.port) serveOptions.port = parseInt(values.port);
219
219
  if (values["no-browser"] === true) serveOptions.openBrowser = false;
@@ -225,4 +225,4 @@ async function runCli(options) {
225
225
  export {
226
226
  runCli
227
227
  };
228
- //# sourceMappingURL=chunk-QJWTBVJO.js.map
228
+ //# sourceMappingURL=chunk-ZS6MW2WM.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-QJWTBVJO.js";
4
+ } from "../chunk-ZS6MW2WM.js";
5
5
  import "../chunk-AGXJ5O63.js";
6
6
  import {
7
7
  logger
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-QJWTBVJO.js";
4
+ } from "../chunk-ZS6MW2WM.js";
5
5
  import "../chunk-AGXJ5O63.js";
6
6
  import {
7
7
  logger
@@ -5,7 +5,7 @@ import {
5
5
  computeSessionHash,
6
6
  computeUnifiedDiff,
7
7
  getToolFingerprint
8
- } from "./chunk-SQLJRO3J.js";
8
+ } from "./chunk-3PEYTWCS.js";
9
9
  import "./chunk-2FCLCUVR.js";
10
10
  import "./chunk-27NABDXB.js";
11
11
  import "./chunk-AESOGRFK.js";
@@ -25,4 +25,4 @@ export {
25
25
  computeUnifiedDiff,
26
26
  getToolFingerprint
27
27
  };
28
- //# sourceMappingURL=dynamic-context-YHWFFP53.js.map
28
+ //# sourceMappingURL=dynamic-context-NNBVVFBT.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  abortRunnerRun,
3
3
  launchWorkflowRun
4
- } from "./chunk-HYPXL7K5.js";
5
- import "./chunk-U4HMAYAD.js";
6
- import "./chunk-4HV3PDEK.js";
7
- import "./chunk-SQLJRO3J.js";
4
+ } from "./chunk-7SDJXHJH.js";
5
+ import "./chunk-I6MY65LO.js";
6
+ import "./chunk-2PQA3DHY.js";
7
+ import "./chunk-3PEYTWCS.js";
8
8
  import "./chunk-2FCLCUVR.js";
9
9
  import "./chunk-EQ7DK2TG.js";
10
10
  import "./chunk-27NABDXB.js";
@@ -49,4 +49,4 @@ export {
49
49
  abortRunnerRun,
50
50
  launchWorkflowRun
51
51
  };
52
- //# sourceMappingURL=launch-PAVQAWGP.js.map
52
+ //# sourceMappingURL=launch-HSSFGQ5A.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  runAgentTurn,
3
3
  runChatTurn
4
- } from "./chunk-U4HMAYAD.js";
5
- import "./chunk-4HV3PDEK.js";
6
- import "./chunk-SQLJRO3J.js";
4
+ } from "./chunk-I6MY65LO.js";
5
+ import "./chunk-2PQA3DHY.js";
6
+ import "./chunk-3PEYTWCS.js";
7
7
  import "./chunk-2FCLCUVR.js";
8
8
  import {
9
9
  TurnMetrics,
@@ -60,4 +60,4 @@ export {
60
60
  runAgentTurn,
61
61
  runChatTurn
62
62
  };
63
- //# sourceMappingURL=orchestrator-CS3KXLZE.js.map
63
+ //# sourceMappingURL=orchestrator-FVXUJW3K.js.map
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "2.0.116",
3
+ "version": "2.0.117",
4
4
  "description": "Local-LLM-first agentic coding assistant",
5
5
  "type": "module",
6
6
  "bin": {
@@ -3,7 +3,7 @@ import {
3
3
  finalizeTurnCompletion,
4
4
  generateSessionNameForSession
5
5
  } from "./chunk-6XHDNSA3.js";
6
- import "./chunk-4HV3PDEK.js";
6
+ import "./chunk-2PQA3DHY.js";
7
7
  import "./chunk-2FCLCUVR.js";
8
8
  import "./chunk-EQ7DK2TG.js";
9
9
  import "./chunk-27NABDXB.js";
@@ -193,7 +193,7 @@ var QueueProcessor = class {
193
193
  backend: provider?.backend ?? llmClient.getBackend(),
194
194
  model: llmClient.getModel()
195
195
  };
196
- const { runChatTurn } = await import("./orchestrator-CS3KXLZE.js");
196
+ const { runChatTurn } = await import("./orchestrator-FVXUJW3K.js");
197
197
  const runChatTurnParams = buildRunChatTurnParams({
198
198
  sessionManager,
199
199
  sessionId,
@@ -241,4 +241,4 @@ var QueueProcessor = class {
241
241
  export {
242
242
  QueueProcessor
243
243
  };
244
- //# sourceMappingURL=processor-RZD4JRDX.js.map
244
+ //# sourceMappingURL=processor-JRVW5QBA.js.map
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  createServer
3
- } from "./chunk-4E52GUXJ.js";
3
+ } from "./chunk-ECCSVMRT.js";
4
4
  import "./chunk-RSB4AR2A.js";
5
5
  import "./chunk-IJ53Y77N.js";
6
- import "./chunk-BH3BBUGB.js";
6
+ import "./chunk-EZD7WFBZ.js";
7
7
  import "./chunk-6XHDNSA3.js";
8
- import "./chunk-HYPXL7K5.js";
9
- import "./chunk-U4HMAYAD.js";
10
- import "./chunk-4HV3PDEK.js";
11
- import "./chunk-SQLJRO3J.js";
8
+ import "./chunk-7SDJXHJH.js";
9
+ import "./chunk-I6MY65LO.js";
10
+ import "./chunk-2PQA3DHY.js";
11
+ import "./chunk-3PEYTWCS.js";
12
12
  import "./chunk-2FCLCUVR.js";
13
13
  import "./chunk-WLJJRX22.js";
14
14
  import "./chunk-X3XKYGUN.js";
@@ -32,7 +32,7 @@ import "./chunk-JURM3RPZ.js";
32
32
  import "./chunk-JLAR2CMV.js";
33
33
  import {
34
34
  VERSION
35
- } from "./chunk-HNHSUQCN.js";
35
+ } from "./chunk-NPTI5RCQ.js";
36
36
  import "./chunk-3KBRMBTP.js";
37
37
  import "./chunk-LCLH6ZUL.js";
38
38
  import {
@@ -226,4 +226,4 @@ async function runServe(options) {
226
226
  export {
227
227
  runServe
228
228
  };
229
- //# sourceMappingURL=serve-KR22J37W.js.map
229
+ //# sourceMappingURL=serve-CW6PR3M2.js.map
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  createServer,
3
3
  createServerHandle
4
- } from "../chunk-4E52GUXJ.js";
4
+ } from "../chunk-ECCSVMRT.js";
5
5
  import "../chunk-RSB4AR2A.js";
6
6
  import "../chunk-IJ53Y77N.js";
7
- import "../chunk-BH3BBUGB.js";
7
+ import "../chunk-EZD7WFBZ.js";
8
8
  import "../chunk-6XHDNSA3.js";
9
- import "../chunk-HYPXL7K5.js";
10
- import "../chunk-U4HMAYAD.js";
11
- import "../chunk-4HV3PDEK.js";
12
- import "../chunk-SQLJRO3J.js";
9
+ import "../chunk-7SDJXHJH.js";
10
+ import "../chunk-I6MY65LO.js";
11
+ import "../chunk-2PQA3DHY.js";
12
+ import "../chunk-3PEYTWCS.js";
13
13
  import "../chunk-2FCLCUVR.js";
14
14
  import "../chunk-WLJJRX22.js";
15
15
  import "../chunk-X3XKYGUN.js";
@@ -31,7 +31,7 @@ import "../chunk-4GHLULHB.js";
31
31
  import "../chunk-AESOGRFK.js";
32
32
  import "../chunk-JURM3RPZ.js";
33
33
  import "../chunk-JLAR2CMV.js";
34
- import "../chunk-HNHSUQCN.js";
34
+ import "../chunk-NPTI5RCQ.js";
35
35
  import "../chunk-3KBRMBTP.js";
36
36
  import "../chunk-LCLH6ZUL.js";
37
37
  import "../chunk-LNNBLB6G.js";