openfox 2.0.47 → 2.0.49

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,7 +5,7 @@ import {
5
5
  } from "./chunk-U62IKLKM.js";
6
6
  import {
7
7
  runChatTurn
8
- } from "./chunk-CJDWHFC2.js";
8
+ } from "./chunk-PTIF5OEJ.js";
9
9
  import "./chunk-GTY27MWS.js";
10
10
  import "./chunk-LBGHZLLH.js";
11
11
  import "./chunk-PBGOZMVY.js";
@@ -154,4 +154,4 @@ export {
154
154
  startChatSession,
155
155
  stopSessionExecution
156
156
  };
157
- //# sourceMappingURL=chat-handler-RQMS6H7Y.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-CJDWHFC2.js";
5
+ } from "./chunk-PTIF5OEJ.js";
6
6
  import {
7
7
  applyDynamicContext,
8
8
  checkAborted,
@@ -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-7LRXWATH.js.map
2077
+ //# sourceMappingURL=chunk-CZPX6AVB.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-3SFSDC3X.js");
211
+ const { runServe } = await import("./serve-USAKHQQN.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-ENZPGAZV.js.map
223
+ //# sourceMappingURL=chunk-JMQJIU64.js.map
@@ -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-CJDWHFC2.js.map
327
+ //# sourceMappingURL=chunk-PTIF5OEJ.js.map
@@ -21,7 +21,7 @@ import {
21
21
  tokenFromPassword,
22
22
  verifyPassword,
23
23
  workflowExists
24
- } from "./chunk-7LRXWATH.js";
24
+ } from "./chunk-CZPX6AVB.js";
25
25
  import {
26
26
  agentExists,
27
27
  createToolRegistry,
@@ -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.47";
3852
+ var VERSION = "2.0.49";
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-PV5DANZ7.js");
4049
+ const { signalMcpReady } = await import("./server-7XS77JZD.js");
4050
4050
  signalMcpReady();
4051
4051
  });
4052
4052
  const app = express();
@@ -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) => {
@@ -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-B37KCY3N.js");
4466
+ const { runAgentTurn, TurnMetrics } = await import("./orchestrator-YOAWKIB2.js");
4459
4467
  runAgentTurn(
4460
4468
  {
4461
4469
  sessionManager,
@@ -4498,7 +4506,7 @@ 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-RQMS6H7Y.js");
4509
+ const { stopSessionExecution } = await import("./chat-handler-PLRNAAXW.js");
4502
4510
  const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-CSRQDWRI.js");
4503
4511
  const queuedMessages = sessionManager.getQueueState(sessionId);
4504
4512
  sessionManager.clearMessageQueue(sessionId);
@@ -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-FQEDZOWL.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-LCCED4OV.js.map
5389
+ //# sourceMappingURL=chunk-Z3TD43AO.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-ENZPGAZV.js";
4
+ } from "../chunk-JMQJIU64.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-ENZPGAZV.js";
4
+ } from "../chunk-JMQJIU64.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."
@@ -0,0 +1,7 @@
1
+ ---
2
+ id: add-criteria
3
+ name: Add criteria
4
+ agentMode: planner
5
+ ---
6
+
7
+ Add the acceptance criteria you proposed using the `session_metadata` tool with the `criteria` key
@@ -6,7 +6,6 @@ agentMode: builder
6
6
 
7
7
  Commit and push:
8
8
 
9
- 0. `npm test` -> make sure the project is green
10
9
  1. `git status` -> verify what files are modified
11
10
  2. `git add` -> never do `-A`, add your files and your files only
12
11
  3. `git commit -m` -> add a clear message
@@ -2,7 +2,7 @@ import {
2
2
  injectWorkflowKickoffIfNeeded,
3
3
  runAgentTurn,
4
4
  runChatTurn
5
- } from "./chunk-CJDWHFC2.js";
5
+ } from "./chunk-PTIF5OEJ.js";
6
6
  import "./chunk-GTY27MWS.js";
7
7
  import "./chunk-LBGHZLLH.js";
8
8
  import "./chunk-PBGOZMVY.js";
@@ -43,4 +43,4 @@ export {
43
43
  runAgentTurn,
44
44
  runChatTurn
45
45
  };
46
- //# sourceMappingURL=orchestrator-B37KCY3N.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.47",
3
+ "version": "2.0.49",
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",
@@ -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-B37KCY3N.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-FQEDZOWL.js.map
225
+ //# sourceMappingURL=processor-U35UWS3W.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  VERSION,
3
3
  createServer
4
- } from "./chunk-LCCED4OV.js";
5
- import "./chunk-7LRXWATH.js";
6
- import "./chunk-CJDWHFC2.js";
4
+ } from "./chunk-Z3TD43AO.js";
5
+ import "./chunk-CZPX6AVB.js";
6
+ import "./chunk-PTIF5OEJ.js";
7
7
  import "./chunk-GTY27MWS.js";
8
8
  import "./chunk-LBGHZLLH.js";
9
9
  import "./chunk-PBGOZMVY.js";
@@ -205,4 +205,4 @@ async function runServe(options) {
205
205
  export {
206
206
  runServe
207
207
  };
208
- //# sourceMappingURL=serve-3SFSDC3X.js.map
208
+ //# sourceMappingURL=serve-USAKHQQN.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  createServer,
3
3
  createServerHandle
4
- } from "../chunk-LCCED4OV.js";
5
- import "../chunk-7LRXWATH.js";
6
- import "../chunk-CJDWHFC2.js";
4
+ } from "../chunk-Z3TD43AO.js";
5
+ import "../chunk-CZPX6AVB.js";
6
+ import "../chunk-PTIF5OEJ.js";
7
7
  import "../chunk-GTY27MWS.js";
8
8
  import "../chunk-LBGHZLLH.js";
9
9
  import "../chunk-PBGOZMVY.js";
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  createWebSocketServer,
3
3
  signalMcpReady
4
- } from "./chunk-7LRXWATH.js";
5
- import "./chunk-CJDWHFC2.js";
4
+ } from "./chunk-CZPX6AVB.js";
5
+ import "./chunk-PTIF5OEJ.js";
6
6
  import "./chunk-GTY27MWS.js";
7
7
  import "./chunk-LBGHZLLH.js";
8
8
  import "./chunk-PBGOZMVY.js";
@@ -35,4 +35,4 @@ export {
35
35
  createWebSocketServer,
36
36
  signalMcpReady
37
37
  };
38
- //# sourceMappingURL=server-PV5DANZ7.js.map
38
+ //# sourceMappingURL=server-7XS77JZD.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "2.0.47",
3
+ "version": "2.0.49",
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",