openfox 2.0.46 → 2.0.48

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.
@@ -5,8 +5,8 @@ import {
5
5
  } from "./chunk-U62IKLKM.js";
6
6
  import {
7
7
  runChatTurn
8
- } from "./chunk-VVBHUTJ5.js";
9
- import "./chunk-MH73ZSPY.js";
8
+ } from "./chunk-PTIF5OEJ.js";
9
+ import "./chunk-GTY27MWS.js";
10
10
  import "./chunk-LBGHZLLH.js";
11
11
  import "./chunk-PBGOZMVY.js";
12
12
  import "./chunk-VRGRAQDG.js";
@@ -154,4 +154,4 @@ export {
154
154
  startChatSession,
155
155
  stopSessionExecution
156
156
  };
157
- //# sourceMappingURL=chat-handler-QSIPCVYT.js.map
157
+ //# sourceMappingURL=chat-handler-PLRNAAXW.js.map
@@ -2,7 +2,7 @@ import {
2
2
  injectWorkflowKickoffIfNeeded,
3
3
  runAgentTurn,
4
4
  runChatTurn
5
- } from "./chunk-VVBHUTJ5.js";
5
+ } from "./chunk-PTIF5OEJ.js";
6
6
  import {
7
7
  applyDynamicContext,
8
8
  checkAborted,
@@ -16,7 +16,7 @@ import {
16
16
  loadAllAgentsDefault,
17
17
  saveItemToDir,
18
18
  spawnShellProcess
19
- } from "./chunk-MH73ZSPY.js";
19
+ } from "./chunk-GTY27MWS.js";
20
20
  import {
21
21
  getPlatformShell,
22
22
  onProcessEvent
@@ -1536,7 +1536,10 @@ function createWebSocketServer(httpServer, config, getLLMClient, getActiveProvid
1536
1536
  }
1537
1537
  logger.error("Chat turn error", { error });
1538
1538
  }).finally(() => {
1539
- cleanupAfterTurn(sessionId, controller, broadcastForSession, false);
1539
+ try {
1540
+ cleanupAfterTurn(sessionId, controller, broadcastForSession, false);
1541
+ } catch {
1542
+ }
1540
1543
  });
1541
1544
  }
1542
1545
  const broadcastAll = (msg) => {
@@ -1834,8 +1837,11 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
1834
1837
  )
1835
1838
  );
1836
1839
  }).finally(() => {
1837
- sessionManager.setRunning(sessionId, false);
1838
- sendForSession(sessionId, createSessionRunningMessage(false));
1840
+ try {
1841
+ sessionManager.setRunning(sessionId, false);
1842
+ sendForSession(sessionId, createSessionRunningMessage(false));
1843
+ } catch {
1844
+ }
1839
1845
  });
1840
1846
  break;
1841
1847
  }
@@ -1989,9 +1995,12 @@ ${content}` : workflowInfo;
1989
1995
  }
1990
1996
  logger.error("Runner error", { error, sessionId });
1991
1997
  }).finally(() => {
1992
- sessionManager.setRunning(sessionId, false);
1993
- sendForSession(sessionId, createSessionRunningMessage(false));
1994
- cleanupAfterTurn(sessionId, controller, sendForSession, true);
1998
+ try {
1999
+ sessionManager.setRunning(sessionId, false);
2000
+ sendForSession(sessionId, createSessionRunningMessage(false));
2001
+ cleanupAfterTurn(sessionId, controller, sendForSession, true);
2002
+ } catch {
2003
+ }
1995
2004
  });
1996
2005
  break;
1997
2006
  }
@@ -2065,4 +2074,4 @@ export {
2065
2074
  signalMcpReady,
2066
2075
  createWebSocketServer
2067
2076
  };
2068
- //# sourceMappingURL=chunk-EU6XT5ST.js.map
2077
+ //# sourceMappingURL=chunk-CZPX6AVB.js.map
@@ -882,7 +882,7 @@ var readFileTool = createTool(
882
882
  type: "function",
883
883
  function: {
884
884
  name: "read_file",
885
- description: "Read the contents of a file or list directory contents. For text files: returns line-numbered content. For images (PNG, JPEG, GIF, WebP, BMP, SVG): returns base64-encoded data with MIME type metadata. For directories: returns a tree-formatted listing of entries with file sizes.",
885
+ description: "Read the contents of a file or list directory contents. For text files: returns file content. For images (PNG, JPEG, GIF, WebP, BMP, SVG): returns base64-encoded data with MIME type metadata. For directories: returns a tree-formatted listing of entries with file sizes.",
886
886
  parameters: {
887
887
  type: "object",
888
888
  properties: {
@@ -948,7 +948,7 @@ var readFileTool = createTool(
948
948
  const startLine = Math.max(1, offset);
949
949
  const endLine = Math.min(startLine + limit - 1, totalLines);
950
950
  const selectedLines = lines.slice(startLine - 1, endLine);
951
- const formatted = selectedLines.map((line, i) => `${startLine + i}|${line}`).join("\n");
951
+ const formatted = selectedLines.join("\n");
952
952
  const truncated = endLine < totalLines;
953
953
  let output = formatted;
954
954
  if (truncated) {
@@ -969,6 +969,8 @@ var readFileTool = createTool(
969
969
  encoding,
970
970
  confidence: Math.round(confidence * 100) / 100,
971
971
  lineCount: totalLines,
972
+ startLine,
973
+ endLine,
972
974
  path: fullPath
973
975
  }
974
976
  });
@@ -3477,7 +3479,7 @@ var callSubAgentTool = {
3477
3479
  };
3478
3480
  }
3479
3481
  try {
3480
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-UMI2IMYI.js");
3482
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-CSRQDWRI.js");
3481
3483
  const toolRegistry = getToolRegistryForAgent2(agentDef);
3482
3484
  const turnMetrics = new TurnMetrics();
3483
3485
  const result = await executeSubAgent({
@@ -4293,7 +4295,7 @@ function resolveAgentDef2(sessionManager, sessionId) {
4293
4295
  }
4294
4296
  async function buildCachedPrompt(sessionManager, sessionId, agentDef) {
4295
4297
  const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
4296
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-UMI2IMYI.js");
4298
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-CSRQDWRI.js");
4297
4299
  const tools = getToolRegistryForAgent2(agentDef).definitions;
4298
4300
  const toolFingerprint = getToolFingerprint(tools);
4299
4301
  const allAgents = await loadAllAgentsDefault();
@@ -4306,7 +4308,7 @@ async function buildCachedPrompt(sessionManager, sessionId, agentDef) {
4306
4308
  async function computeSessionHash(sessionManager, sessionId) {
4307
4309
  const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
4308
4310
  const agentDef = await resolveAgentDef2(sessionManager, sessionId);
4309
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-UMI2IMYI.js");
4311
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-CSRQDWRI.js");
4310
4312
  const tools = getToolRegistryForAgent2(agentDef).definitions;
4311
4313
  const toolFingerprint = getToolFingerprint(tools);
4312
4314
  return computeDynamicContextHash(instructionContent, skills, toolFingerprint);
@@ -4413,7 +4415,7 @@ var mcpConfigTool = createTool(
4413
4415
  await saveGlobalConfig(mcpConfigMode, { ...globalConfig, mcpServers: updated });
4414
4416
  }
4415
4417
  async function rebuildTools() {
4416
- const { setMcpTools: setMcpTools2 } = await import("./tools-UMI2IMYI.js");
4418
+ const { setMcpTools: setMcpTools2 } = await import("./tools-CSRQDWRI.js");
4417
4419
  const mcpTools = createMcpTools(mcpManagerForTools);
4418
4420
  setMcpTools2(mcpTools);
4419
4421
  }
@@ -5083,4 +5085,4 @@ export {
5083
5085
  getToolRegistryForAgent,
5084
5086
  createToolRegistry
5085
5087
  };
5086
- //# sourceMappingURL=chunk-MH73ZSPY.js.map
5088
+ //# sourceMappingURL=chunk-GTY27MWS.js.map
@@ -12,7 +12,7 @@ import {
12
12
  loadAllAgentsDefault,
13
13
  processEventsForConversation,
14
14
  runTopLevelAgentLoop
15
- } from "./chunk-MH73ZSPY.js";
15
+ } from "./chunk-GTY27MWS.js";
16
16
  import {
17
17
  TurnMetrics,
18
18
  WORKFLOW_KICKOFF_PROMPT,
@@ -91,7 +91,12 @@ async function runChatTurn(options) {
91
91
  const mode = session.mode;
92
92
  logger.debug("Starting chat turn", { sessionId, mode });
93
93
  sessionManager.setRunning(sessionId, true);
94
- const append = (event) => eventStore.append(sessionId, event);
94
+ const append = (event) => {
95
+ try {
96
+ eventStore.append(sessionId, event);
97
+ } catch {
98
+ }
99
+ };
95
100
  const turnMetrics = new TurnMetrics();
96
101
  try {
97
102
  await runAgentTurn(options, turnMetrics, mode, append);
@@ -129,8 +134,11 @@ async function runChatTurn(options) {
129
134
  return;
130
135
  }
131
136
  if (error instanceof Error && error.message === "Aborted") {
132
- const snapshot = buildSnapshot(sessionManager, sessionId, turnMetrics.buildStats(statsIdentity, mode));
133
- eventStore.append(sessionId, { type: "turn.snapshot", data: snapshot });
137
+ try {
138
+ const snapshot = buildSnapshot(sessionManager, sessionId, turnMetrics.buildStats(statsIdentity, mode));
139
+ eventStore.append(sessionId, { type: "turn.snapshot", data: snapshot });
140
+ } catch {
141
+ }
134
142
  return;
135
143
  }
136
144
  logger.error("Chat turn error", { sessionId, mode, error });
@@ -157,7 +165,10 @@ async function runChatTurn(options) {
157
165
  );
158
166
  eventStore.append(sessionId, createChatDoneEvent(errorMsgId, "error"));
159
167
  } finally {
160
- eventStore.append(sessionId, { type: "running.changed", data: { isRunning: false } });
168
+ try {
169
+ eventStore.append(sessionId, { type: "running.changed", data: { isRunning: false } });
170
+ } catch {
171
+ }
161
172
  }
162
173
  }
163
174
  function injectAgentReminder(sessionId, agentDef) {
@@ -313,4 +324,4 @@ export {
313
324
  runAgentTurn,
314
325
  injectWorkflowKickoffIfNeeded
315
326
  };
316
- //# sourceMappingURL=chunk-VVBHUTJ5.js.map
327
+ //# sourceMappingURL=chunk-PTIF5OEJ.js.map
@@ -208,7 +208,7 @@ async function runCli(options) {
208
208
  if (!configExists) {
209
209
  await runNetworkSetup(mode);
210
210
  }
211
- const { runServe } = await import("./serve-TKOKRJTR.js");
211
+ const { runServe } = await import("./serve-H3AYWFSE.js");
212
212
  const serveOptions = { mode };
213
213
  if (values.port) serveOptions.port = parseInt(values.port);
214
214
  if (values["no-browser"] === true) serveOptions.openBrowser = false;
@@ -220,4 +220,4 @@ async function runCli(options) {
220
220
  export {
221
221
  runCli
222
222
  };
223
- //# sourceMappingURL=chunk-LNE4QPNW.js.map
223
+ //# sourceMappingURL=chunk-TQH447DP.js.map
@@ -21,7 +21,7 @@ import {
21
21
  tokenFromPassword,
22
22
  verifyPassword,
23
23
  workflowExists
24
- } from "./chunk-EU6XT5ST.js";
24
+ } from "./chunk-CZPX6AVB.js";
25
25
  import {
26
26
  agentExists,
27
27
  createToolRegistry,
@@ -61,7 +61,7 @@ import {
61
61
  setMcpTools,
62
62
  setNotifyMcpServersChanged,
63
63
  skillExists
64
- } from "./chunk-MH73ZSPY.js";
64
+ } from "./chunk-GTY27MWS.js";
65
65
  import {
66
66
  getPathSeparator,
67
67
  isAbsolutePath
@@ -3849,7 +3849,7 @@ import { Router as Router7 } from "express";
3849
3849
  import { spawn as spawn2 } from "child_process";
3850
3850
 
3851
3851
  // src/constants.ts
3852
- var VERSION = "2.0.46";
3852
+ var VERSION = "2.0.48";
3853
3853
 
3854
3854
  // src/server/routes/auto-update.ts
3855
3855
  var updateInProgress = false;
@@ -4046,7 +4046,7 @@ async function createServerHandle(config4) {
4046
4046
  setMcpTools(mcpTools);
4047
4047
  logger.info("MCP tools registered", { count: mcpTools.length });
4048
4048
  }
4049
- const { signalMcpReady } = await import("./server-KZ3UARRZ.js");
4049
+ const { signalMcpReady } = await import("./server-7XS77JZD.js");
4050
4050
  signalMcpReady();
4051
4051
  });
4052
4052
  const app = express();
@@ -4239,7 +4239,7 @@ async function createServerHandle(config4) {
4239
4239
  app.get("/api/sessions/:id", async (req, res) => {
4240
4240
  const { getEventStore: getEventStore2 } = await import("./events-S4EOKSYA.js");
4241
4241
  const { buildMessagesFromStoredEvents } = await import("./folding-H5C6HS7O.js");
4242
- const { getPendingQuestionsForSession } = await import("./tools-UMI2IMYI.js");
4242
+ const { getPendingQuestionsForSession } = await import("./tools-CSRQDWRI.js");
4243
4243
  const session = sessionManager.getSession(req.params.id);
4244
4244
  if (!session) {
4245
4245
  return res.status(404).json({ error: "Session not found" });
@@ -4252,12 +4252,20 @@ async function createServerHandle(config4) {
4252
4252
  const pendingQuestions = getPendingQuestionsForSession(req.params.id);
4253
4253
  res.json({ session, messages, contextState, queueState, pendingQuestions });
4254
4254
  });
4255
- app.delete("/api/sessions/:id", (req, res) => {
4256
- const session = sessionManager.getSession(req.params["id"]);
4255
+ app.delete("/api/sessions/:id", async (req, res) => {
4256
+ const sessionId = req.params["id"];
4257
+ const session = sessionManager.getSession(sessionId);
4257
4258
  if (!session) {
4258
4259
  return res.status(404).json({ error: "Session not found" });
4259
4260
  }
4260
- sessionManager.deleteSession(req.params["id"]);
4261
+ const { stopSessionExecution } = await import("./chat-handler-PLRNAAXW.js");
4262
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-CSRQDWRI.js");
4263
+ sessionManager.clearMessageQueue(sessionId);
4264
+ stopSessionExecution(sessionId, sessionManager);
4265
+ abortSession(sessionId);
4266
+ cancelQuestionsForSession(sessionId, "Session deleted");
4267
+ cancelPathConfirmationsForSession(sessionId, "Session deleted");
4268
+ sessionManager.deleteSession(sessionId);
4261
4269
  res.json({ success: true });
4262
4270
  });
4263
4271
  app.delete("/api/projects/:projectId/sessions", (req, res) => {
@@ -4390,7 +4398,7 @@ async function createServerHandle(config4) {
4390
4398
  if (!callId || approved === void 0) {
4391
4399
  return res.status(400).json({ error: "callId and approved are required" });
4392
4400
  }
4393
- const { providePathConfirmation } = await import("./tools-UMI2IMYI.js");
4401
+ const { providePathConfirmation } = await import("./tools-CSRQDWRI.js");
4394
4402
  const result = providePathConfirmation(callId, approved, alwaysAllow);
4395
4403
  if (!result.found) {
4396
4404
  return res.status(404).json({ error: "No pending path confirmation with that ID" });
@@ -4398,7 +4406,7 @@ async function createServerHandle(config4) {
4398
4406
  const { getEventStore: getEventStore2 } = await import("./events-S4EOKSYA.js");
4399
4407
  const { buildMessagesFromStoredEvents, foldPendingConfirmations } = await import("./folding-H5C6HS7O.js");
4400
4408
  const { createSessionStateMessage } = await import("./protocol-CTNE3ANP.js");
4401
- const { getPendingQuestionsForSession } = await import("./tools-UMI2IMYI.js");
4409
+ const { getPendingQuestionsForSession } = await import("./tools-CSRQDWRI.js");
4402
4410
  const eventStore = getEventStore2();
4403
4411
  const events = eventStore.getEvents(sessionId);
4404
4412
  const messages = buildMessagesFromStoredEvents(events);
@@ -4419,7 +4427,7 @@ async function createServerHandle(config4) {
4419
4427
  if (!skip && typeof answer !== "string") {
4420
4428
  return res.status(400).json({ error: "answer is required when not skipping" });
4421
4429
  }
4422
- const { provideAnswer } = await import("./tools-UMI2IMYI.js");
4430
+ const { provideAnswer } = await import("./tools-CSRQDWRI.js");
4423
4431
  const found = provideAnswer(callId, answer ?? "", skip ?? false);
4424
4432
  if (!found) {
4425
4433
  return res.status(404).json({ error: "No pending question with that ID" });
@@ -4455,7 +4463,7 @@ async function createServerHandle(config4) {
4455
4463
  if (sessionManager.isWarmedUp(sessionId)) {
4456
4464
  return res.json({ success: false, reason: "already_warmed" });
4457
4465
  }
4458
- const { runAgentTurn, TurnMetrics } = await import("./orchestrator-3PQ6KQAG.js");
4466
+ const { runAgentTurn, TurnMetrics } = await import("./orchestrator-YOAWKIB2.js");
4459
4467
  runAgentTurn(
4460
4468
  {
4461
4469
  sessionManager,
@@ -4498,8 +4506,8 @@ async function createServerHandle(config4) {
4498
4506
  if (!session) {
4499
4507
  return res.status(404).json({ error: "Session not found" });
4500
4508
  }
4501
- const { stopSessionExecution } = await import("./chat-handler-QSIPCVYT.js");
4502
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-UMI2IMYI.js");
4509
+ const { stopSessionExecution } = await import("./chat-handler-PLRNAAXW.js");
4510
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-CSRQDWRI.js");
4503
4511
  const queuedMessages = sessionManager.getQueueState(sessionId);
4504
4512
  sessionManager.clearMessageQueue(sessionId);
4505
4513
  stopSessionExecution(sessionId, sessionManager);
@@ -4995,7 +5003,7 @@ async function createServerHandle(config4) {
4995
5003
  });
4996
5004
  async function rebuildMcpTools() {
4997
5005
  const { createMcpTools: createMcpTools2 } = await import("./tool-adapter-MOGEI6TP.js");
4998
- const { setMcpTools: setMcpTools2 } = await import("./tools-UMI2IMYI.js");
5006
+ const { setMcpTools: setMcpTools2 } = await import("./tools-CSRQDWRI.js");
4999
5007
  const mcpTools = createMcpTools2(mcpManager);
5000
5008
  setMcpTools2(mcpTools);
5001
5009
  }
@@ -5303,7 +5311,7 @@ async function createServerHandle(config4) {
5303
5311
  const state = sessionManager.getContextState(sessionId);
5304
5312
  wssExports.broadcastForSession(sessionId, createContextStateMessage(state));
5305
5313
  });
5306
- const { QueueProcessor } = await import("./processor-MHNIP32O.js");
5314
+ const { QueueProcessor } = await import("./processor-U35UWS3W.js");
5307
5315
  const queueProcessor = new QueueProcessor({
5308
5316
  sessionManager,
5309
5317
  providerManager,
@@ -5378,4 +5386,4 @@ export {
5378
5386
  createServerHandle,
5379
5387
  createServer
5380
5388
  };
5381
- //# sourceMappingURL=chunk-HSXSRVW2.js.map
5389
+ //# sourceMappingURL=chunk-YBNLQ2WX.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-LNE4QPNW.js";
4
+ } from "../chunk-TQH447DP.js";
5
5
  import "../chunk-XY3LESVZ.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-LNE4QPNW.js";
4
+ } from "../chunk-TQH447DP.js";
5
5
  import "../chunk-XY3LESVZ.js";
6
6
  import {
7
7
  logger
@@ -10,8 +10,7 @@ if [ "$CURRENT_VERSION" = "$LATEST_VERSION" ]; then
10
10
  fi
11
11
 
12
12
  echo "Updating OpenFox: $CURRENT_VERSION -> $LATEST_VERSION"
13
- npm cache clean --force
14
- npm update -g openfox
13
+ npm install -g openfox@latest
15
14
  NEW_VERSION=$(openfox --version)
16
15
  echo "Updated: $NEW_VERSION"
17
16
  echo "Please restart OpenFox to use the new version."
@@ -2,8 +2,8 @@ import {
2
2
  injectWorkflowKickoffIfNeeded,
3
3
  runAgentTurn,
4
4
  runChatTurn
5
- } from "./chunk-VVBHUTJ5.js";
6
- import "./chunk-MH73ZSPY.js";
5
+ } from "./chunk-PTIF5OEJ.js";
6
+ import "./chunk-GTY27MWS.js";
7
7
  import "./chunk-LBGHZLLH.js";
8
8
  import "./chunk-PBGOZMVY.js";
9
9
  import "./chunk-VRGRAQDG.js";
@@ -43,4 +43,4 @@ export {
43
43
  runAgentTurn,
44
44
  runChatTurn
45
45
  };
46
- //# sourceMappingURL=orchestrator-3PQ6KQAG.js.map
46
+ //# sourceMappingURL=orchestrator-YOAWKIB2.js.map
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "2.0.46",
3
+ "version": "2.0.48",
4
4
  "description": "Local-LLM-first agentic coding assistant",
5
5
  "type": "module",
6
6
  "bin": {
@@ -26,9 +26,9 @@
26
26
  "scripts": {
27
27
  "dev": "OPENFOX_DEV=true tsx watch src/cli/dev.ts --no-browser",
28
28
  "dev:web": "vite --config web/vite.config.ts",
29
- "build": "FORCE_COLOR=1 npm run build:server && FORCE_COLOR=1 npm run build:web",
30
- "build:server": "FORCE_COLOR=1 tsup && mkdir -p dist/command-defaults dist/skill-defaults dist/agent-defaults dist/workflow-defaults && cp src/server/commands/defaults/*.md dist/command-defaults/ && cp src/server/skills/defaults/*.md dist/skill-defaults/ && cp src/server/agents/defaults/*.md dist/agent-defaults/ && cp src/server/workflows/defaults/*.json dist/workflow-defaults/ && cp src/server/lsp/languages.json dist/languages.json && cp src/cli/update.sh dist/cli/ && chmod +x dist/cli/update.sh && cp package.json dist/ && cp -r src/server/public dist/server/",
31
- "build:web": "cd web && FORCE_COLOR=1 vite build --outDir ../dist/web",
29
+ "build": "npm run build:server && npm run build:web",
30
+ "build:server": "tsup && mkdir -p dist/command-defaults dist/skill-defaults dist/agent-defaults dist/workflow-defaults && cp src/server/commands/defaults/*.md dist/command-defaults/ && cp src/server/skills/defaults/*.md dist/skill-defaults/ && cp src/server/agents/defaults/*.md dist/agent-defaults/ && cp src/server/workflows/defaults/*.json dist/workflow-defaults/ && cp src/server/lsp/languages.json dist/languages.json && cp src/cli/update.sh dist/cli/ && chmod +x dist/cli/update.sh && cp package.json dist/ && cp -r src/server/public dist/server/",
31
+ "build:web": "cd web && vite build --outDir ../dist/web",
32
32
  "start": "node dist/cli/index.js",
33
33
  "start:dev": "node dist/cli/dev.js",
34
34
  "test": "vitest run --reporter=dot --silent=passed-only && vitest run --reporter=dot --silent=passed-only --config e2e/vitest.config.ts",
@@ -3,7 +3,7 @@ import {
3
3
  finalizeTurnCompletion,
4
4
  generateSessionNameForSession
5
5
  } from "./chunk-U62IKLKM.js";
6
- import "./chunk-MH73ZSPY.js";
6
+ import "./chunk-GTY27MWS.js";
7
7
  import "./chunk-LBGHZLLH.js";
8
8
  import "./chunk-PBGOZMVY.js";
9
9
  import "./chunk-VRGRAQDG.js";
@@ -174,7 +174,7 @@ var QueueProcessor = class {
174
174
  backend: provider?.backend ?? llmClient.getBackend(),
175
175
  model: llmClient.getModel()
176
176
  };
177
- const { runChatTurn } = await import("./orchestrator-3PQ6KQAG.js");
177
+ const { runChatTurn } = await import("./orchestrator-YOAWKIB2.js");
178
178
  const runChatTurnParams = buildRunChatTurnParams({
179
179
  sessionManager,
180
180
  sessionId,
@@ -193,8 +193,6 @@ var QueueProcessor = class {
193
193
  try {
194
194
  const session2 = sessionManager.getSession(sessionId);
195
195
  if (!session2) {
196
- sessionManager.setRunning(sessionId, false);
197
- broadcastForSession(sessionId, createSessionRunningMessage(false));
198
196
  return;
199
197
  }
200
198
  if (this.abortedSessions.has(sessionId)) {
@@ -224,4 +222,4 @@ var QueueProcessor = class {
224
222
  export {
225
223
  QueueProcessor
226
224
  };
227
- //# sourceMappingURL=processor-MHNIP32O.js.map
225
+ //# sourceMappingURL=processor-U35UWS3W.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  VERSION,
3
3
  createServer
4
- } from "./chunk-HSXSRVW2.js";
5
- import "./chunk-EU6XT5ST.js";
6
- import "./chunk-VVBHUTJ5.js";
7
- import "./chunk-MH73ZSPY.js";
4
+ } from "./chunk-YBNLQ2WX.js";
5
+ import "./chunk-CZPX6AVB.js";
6
+ import "./chunk-PTIF5OEJ.js";
7
+ import "./chunk-GTY27MWS.js";
8
8
  import "./chunk-LBGHZLLH.js";
9
9
  import "./chunk-PBGOZMVY.js";
10
10
  import "./chunk-VRGRAQDG.js";
@@ -205,4 +205,4 @@ async function runServe(options) {
205
205
  export {
206
206
  runServe
207
207
  };
208
- //# sourceMappingURL=serve-TKOKRJTR.js.map
208
+ //# sourceMappingURL=serve-H3AYWFSE.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  createServer,
3
3
  createServerHandle
4
- } from "../chunk-HSXSRVW2.js";
5
- import "../chunk-EU6XT5ST.js";
6
- import "../chunk-VVBHUTJ5.js";
7
- import "../chunk-MH73ZSPY.js";
4
+ } from "../chunk-YBNLQ2WX.js";
5
+ import "../chunk-CZPX6AVB.js";
6
+ import "../chunk-PTIF5OEJ.js";
7
+ import "../chunk-GTY27MWS.js";
8
8
  import "../chunk-LBGHZLLH.js";
9
9
  import "../chunk-PBGOZMVY.js";
10
10
  import "../chunk-VRGRAQDG.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  createWebSocketServer,
3
3
  signalMcpReady
4
- } from "./chunk-EU6XT5ST.js";
5
- import "./chunk-VVBHUTJ5.js";
6
- import "./chunk-MH73ZSPY.js";
4
+ } from "./chunk-CZPX6AVB.js";
5
+ import "./chunk-PTIF5OEJ.js";
6
+ import "./chunk-GTY27MWS.js";
7
7
  import "./chunk-LBGHZLLH.js";
8
8
  import "./chunk-PBGOZMVY.js";
9
9
  import "./chunk-VRGRAQDG.js";
@@ -35,4 +35,4 @@ export {
35
35
  createWebSocketServer,
36
36
  signalMcpReady
37
37
  };
38
- //# sourceMappingURL=server-KZ3UARRZ.js.map
38
+ //# sourceMappingURL=server-7XS77JZD.js.map
@@ -12,7 +12,7 @@ import {
12
12
  setMcpTools,
13
13
  stepDoneTool,
14
14
  validateToolAction
15
- } from "./chunk-MH73ZSPY.js";
15
+ } from "./chunk-GTY27MWS.js";
16
16
  import "./chunk-LBGHZLLH.js";
17
17
  import "./chunk-PBGOZMVY.js";
18
18
  import "./chunk-VRGRAQDG.js";
@@ -58,4 +58,4 @@ export {
58
58
  stepDoneTool,
59
59
  validateToolAction
60
60
  };
61
- //# sourceMappingURL=tools-UMI2IMYI.js.map
61
+ //# sourceMappingURL=tools-CSRQDWRI.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "2.0.46",
3
+ "version": "2.0.48",
4
4
  "description": "Local-LLM-first agentic coding assistant",
5
5
  "type": "module",
6
6
  "bin": {
@@ -26,9 +26,9 @@
26
26
  "scripts": {
27
27
  "dev": "OPENFOX_DEV=true tsx watch src/cli/dev.ts --no-browser",
28
28
  "dev:web": "vite --config web/vite.config.ts",
29
- "build": "FORCE_COLOR=1 npm run build:server && FORCE_COLOR=1 npm run build:web",
30
- "build:server": "FORCE_COLOR=1 tsup && mkdir -p dist/command-defaults dist/skill-defaults dist/agent-defaults dist/workflow-defaults && cp src/server/commands/defaults/*.md dist/command-defaults/ && cp src/server/skills/defaults/*.md dist/skill-defaults/ && cp src/server/agents/defaults/*.md dist/agent-defaults/ && cp src/server/workflows/defaults/*.json dist/workflow-defaults/ && cp src/server/lsp/languages.json dist/languages.json && cp src/cli/update.sh dist/cli/ && chmod +x dist/cli/update.sh && cp package.json dist/ && cp -r src/server/public dist/server/",
31
- "build:web": "cd web && FORCE_COLOR=1 vite build --outDir ../dist/web",
29
+ "build": "npm run build:server && npm run build:web",
30
+ "build:server": "tsup && mkdir -p dist/command-defaults dist/skill-defaults dist/agent-defaults dist/workflow-defaults && cp src/server/commands/defaults/*.md dist/command-defaults/ && cp src/server/skills/defaults/*.md dist/skill-defaults/ && cp src/server/agents/defaults/*.md dist/agent-defaults/ && cp src/server/workflows/defaults/*.json dist/workflow-defaults/ && cp src/server/lsp/languages.json dist/languages.json && cp src/cli/update.sh dist/cli/ && chmod +x dist/cli/update.sh && cp package.json dist/ && cp -r src/server/public dist/server/",
31
+ "build:web": "cd web && vite build --outDir ../dist/web",
32
32
  "start": "node dist/cli/index.js",
33
33
  "start:dev": "node dist/cli/dev.js",
34
34
  "test": "vitest run --reporter=dot --silent=passed-only && vitest run --reporter=dot --silent=passed-only --config e2e/vitest.config.ts",