openfox 1.6.96 → 1.6.97

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.
@@ -2,8 +2,8 @@ import {
2
2
  maybeAutoCompactContext,
3
3
  performManualContextCompaction,
4
4
  resolveCompactionStatsIdentity
5
- } from "./chunk-BK7QEUQF.js";
6
- import "./chunk-QWGO6DE3.js";
5
+ } from "./chunk-47FAM55V.js";
6
+ import "./chunk-ROWFVGB6.js";
7
7
  import "./chunk-ZHBL5G5X.js";
8
8
  import "./chunk-DL6ZILAF.js";
9
9
  import "./chunk-PBGOZMVY.js";
@@ -24,4 +24,4 @@ export {
24
24
  performManualContextCompaction,
25
25
  resolveCompactionStatsIdentity
26
26
  };
27
- //# sourceMappingURL=auto-compaction-M2LTRUXL.js.map
27
+ //# sourceMappingURL=auto-compaction-2I3XUF5P.js.map
@@ -8,9 +8,9 @@ import {
8
8
  } from "./chunk-QAN42RJQ.js";
9
9
  import {
10
10
  runChatTurn
11
- } from "./chunk-OBJE2622.js";
12
- import "./chunk-BK7QEUQF.js";
13
- import "./chunk-QWGO6DE3.js";
11
+ } from "./chunk-K7IJKGYL.js";
12
+ import "./chunk-47FAM55V.js";
13
+ import "./chunk-ROWFVGB6.js";
14
14
  import "./chunk-ZHBL5G5X.js";
15
15
  import "./chunk-DL6ZILAF.js";
16
16
  import "./chunk-PBGOZMVY.js";
@@ -61,7 +61,7 @@ async function startChatSession(sessionId, content, deps, options) {
61
61
  sessionManager.setRunning(sessionId, true);
62
62
  broadcastForSession(sessionId, createSessionRunningMessage(true));
63
63
  try {
64
- const { maybeAutoCompactContext } = await import("./auto-compaction-M2LTRUXL.js");
64
+ const { maybeAutoCompactContext } = await import("./auto-compaction-2I3XUF5P.js");
65
65
  await maybeAutoCompactContext({
66
66
  sessionManager,
67
67
  sessionId,
@@ -175,4 +175,4 @@ export {
175
175
  startChatSession,
176
176
  stopSessionExecution
177
177
  };
178
- //# sourceMappingURL=chat-handler-WEG7W3OY.js.map
178
+ //# sourceMappingURL=chat-handler-42XM6GZI.js.map
@@ -2,7 +2,7 @@ import {
2
2
  SETTINGS_KEYS,
3
3
  deleteSetting,
4
4
  getSetting
5
- } from "./chunk-QWGO6DE3.js";
5
+ } from "./chunk-ROWFVGB6.js";
6
6
  import {
7
7
  getProject
8
8
  } from "./chunk-ZHBL5G5X.js";
@@ -3880,7 +3880,7 @@ var callSubAgentTool = {
3880
3880
  };
3881
3881
  }
3882
3882
  try {
3883
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-UFAPVX45.js");
3883
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-SIVCXYHR.js");
3884
3884
  const toolRegistry = getToolRegistryForAgent2(agentDef);
3885
3885
  const turnMetrics = new TurnMetrics();
3886
3886
  const result = await executeSubAgent({
@@ -5078,4 +5078,4 @@ export {
5078
5078
  getToolRegistryForAgent,
5079
5079
  createToolRegistry
5080
5080
  };
5081
- //# sourceMappingURL=chunk-BK7QEUQF.js.map
5081
+ //# sourceMappingURL=chunk-47FAM55V.js.map
@@ -2,7 +2,7 @@ import {
2
2
  createVerifierNudgeConfig,
3
3
  runBuilderTurn,
4
4
  runChatTurn
5
- } from "./chunk-OBJE2622.js";
5
+ } from "./chunk-K7IJKGYL.js";
6
6
  import {
7
7
  TurnMetrics,
8
8
  agentExists,
@@ -46,7 +46,7 @@ import {
46
46
  saveSkillToProject,
47
47
  skillExists,
48
48
  spawnShellProcess
49
- } from "./chunk-BK7QEUQF.js";
49
+ } from "./chunk-47FAM55V.js";
50
50
  import {
51
51
  getProject
52
52
  } from "./chunk-ZHBL5G5X.js";
@@ -146,7 +146,7 @@ import express from "express";
146
146
  import cors from "cors";
147
147
  import { createServer as createHttpServer } from "http";
148
148
  import { fileURLToPath as fileURLToPath4 } from "url";
149
- import { dirname as dirname5, resolve, join as join6 } from "path";
149
+ import { dirname as dirname6, resolve as resolve2, join as join7 } from "path";
150
150
  import { readFile as readFile3 } from "fs/promises";
151
151
  import { createServer as createViteServer } from "vite";
152
152
 
@@ -1670,7 +1670,7 @@ var TERMINAL_BLOCKED = "$blocked";
1670
1670
 
1671
1671
  // src/server/workflows/shell.ts
1672
1672
  function executeShellCommand(command, cwd, timeout, signal) {
1673
- return new Promise((resolve2, reject) => {
1673
+ return new Promise((resolve3, reject) => {
1674
1674
  if (checkAborted(signal)) {
1675
1675
  reject(new Error("Aborted"));
1676
1676
  return;
@@ -1682,7 +1682,7 @@ function executeShellCommand(command, cwd, timeout, signal) {
1682
1682
  const timer = setTimeout(() => {
1683
1683
  killed = true;
1684
1684
  proc.kill("SIGTERM");
1685
- resolve2({ exitCode: 1, stdout, stderr: stderr + "\nCommand timed out", success: false });
1685
+ resolve3({ exitCode: 1, stdout, stderr: stderr + "\nCommand timed out", success: false });
1686
1686
  }, timeout);
1687
1687
  const onAbort = () => {
1688
1688
  if (!killed) {
@@ -1704,13 +1704,13 @@ function executeShellCommand(command, cwd, timeout, signal) {
1704
1704
  signal?.removeEventListener("abort", onAbort);
1705
1705
  if (killed) return;
1706
1706
  const exitCode = code ?? 1;
1707
- resolve2({ exitCode, stdout, stderr, success: exitCode === 0 });
1707
+ resolve3({ exitCode, stdout, stderr, success: exitCode === 0 });
1708
1708
  });
1709
1709
  proc.on("error", (err) => {
1710
1710
  clearTimeout(timer);
1711
1711
  signal?.removeEventListener("abort", onAbort);
1712
1712
  if (killed) return;
1713
- resolve2({ exitCode: 1, stdout, stderr: err.message, success: false });
1713
+ resolve3({ exitCode: 1, stdout, stderr: err.message, success: false });
1714
1714
  });
1715
1715
  });
1716
1716
  }
@@ -2304,7 +2304,7 @@ async function isValidToken(token) {
2304
2304
 
2305
2305
  // src/server/ws/server.ts
2306
2306
  function moduleGitBranch(cwd) {
2307
- return new Promise((resolve2) => {
2307
+ return new Promise((resolve3) => {
2308
2308
  const proc = spawn2("git", ["rev-parse", "--abbrev-ref", "HEAD"], {
2309
2309
  cwd,
2310
2310
  stdio: ["ignore", "pipe", "ignore"]
@@ -2315,16 +2315,16 @@ function moduleGitBranch(cwd) {
2315
2315
  });
2316
2316
  proc.on("close", (code) => {
2317
2317
  if (code === 0 && stdout.trim()) {
2318
- resolve2(stdout.trim());
2318
+ resolve3(stdout.trim());
2319
2319
  } else {
2320
- resolve2(null);
2320
+ resolve3(null);
2321
2321
  }
2322
2322
  });
2323
- proc.on("error", () => resolve2(null));
2323
+ proc.on("error", () => resolve3(null));
2324
2324
  });
2325
2325
  }
2326
2326
  function moduleGitDiff(cwd) {
2327
- return new Promise((resolve2) => {
2327
+ return new Promise((resolve3) => {
2328
2328
  const proc = spawn2("git", ["diff", "--stat", "--numstat", "--format=", "HEAD"], {
2329
2329
  cwd,
2330
2330
  stdio: ["ignore", "pipe", "pipe"]
@@ -2347,7 +2347,7 @@ function moduleGitDiff(cwd) {
2347
2347
  let statusCode = null;
2348
2348
  const processResults = () => {
2349
2349
  if (diffCode !== 0 || statusCode !== 0) {
2350
- resolve2({ hash: "", files: [] });
2350
+ resolve3({ hash: "", files: [] });
2351
2351
  return;
2352
2352
  }
2353
2353
  const hashProc = spawn2("git", ["rev-parse", "HEAD"], { cwd, stdio: ["ignore", "pipe", "ignore"] });
@@ -2387,7 +2387,7 @@ function moduleGitDiff(cwd) {
2387
2387
  deletions: 0
2388
2388
  });
2389
2389
  }
2390
- resolve2({ hash: hash.trim(), files });
2390
+ resolve3({ hash: hash.trim(), files });
2391
2391
  };
2392
2392
  proc.on("close", (code) => {
2393
2393
  procExited = true;
@@ -2399,10 +2399,10 @@ function moduleGitDiff(cwd) {
2399
2399
  statusCode = code;
2400
2400
  if (procExited) processResults();
2401
2401
  });
2402
- proc.on("error", () => resolve2({ hash: "", files: [] }));
2402
+ proc.on("error", () => resolve3({ hash: "", files: [] }));
2403
2403
  statusProc.on("error", () => {
2404
2404
  if (!procExited) {
2405
- resolve2({ hash: "", files: [] });
2405
+ resolve3({ hash: "", files: [] });
2406
2406
  }
2407
2407
  });
2408
2408
  });
@@ -3360,19 +3360,19 @@ var LspServer = class {
3360
3360
  */
3361
3361
  async getDiagnosticsWithWait(path, timeoutMs = DIAGNOSTIC_WAIT_MS) {
3362
3362
  if (this.openDocuments.has(path)) {
3363
- return new Promise((resolve2) => {
3363
+ return new Promise((resolve3) => {
3364
3364
  const existing = this.diagnostics.get(path);
3365
3365
  if (existing !== void 0) {
3366
3366
  setTimeout(() => {
3367
- resolve2(this.diagnostics.get(path) ?? []);
3367
+ resolve3(this.diagnostics.get(path) ?? []);
3368
3368
  }, 100);
3369
3369
  return;
3370
3370
  }
3371
3371
  const timeout = setTimeout(() => {
3372
3372
  this.pendingDiagnostics.delete(path);
3373
- resolve2(this.diagnostics.get(path) ?? []);
3373
+ resolve3(this.diagnostics.get(path) ?? []);
3374
3374
  }, timeoutMs);
3375
- this.pendingDiagnostics.set(path, { resolve: resolve2, timeout });
3375
+ this.pendingDiagnostics.set(path, { resolve: resolve3, timeout });
3376
3376
  });
3377
3377
  }
3378
3378
  return this.diagnostics.get(path) ?? [];
@@ -5342,17 +5342,54 @@ function createTerminalRoutes() {
5342
5342
  return router;
5343
5343
  }
5344
5344
 
5345
- // src/server/routes/auto-update.ts
5345
+ // src/server/routes/directories.ts
5346
5346
  import { Router as Router5 } from "express";
5347
+ import { readdir as readdir2 } from "fs/promises";
5348
+ import { resolve, join as join6, dirname as dirname5, basename as basename2 } from "path";
5349
+ function createDirectoryRoutes() {
5350
+ const router = Router5();
5351
+ const DEFAULT_BASE_PATH = process.cwd();
5352
+ router.get("/", async (req, res) => {
5353
+ const path = req.query["path"] || DEFAULT_BASE_PATH;
5354
+ try {
5355
+ const resolvedPath = resolve(path);
5356
+ const entries = await readdir2(resolvedPath, { withFileTypes: true });
5357
+ const directories = entries.filter((entry) => entry.isDirectory()).map((entry) => ({
5358
+ name: entry.name,
5359
+ path: join6(resolvedPath, entry.name)
5360
+ })).sort((a, b) => a.name.localeCompare(b.name));
5361
+ const parent = dirname5(resolvedPath);
5362
+ const hasParent = parent !== resolvedPath;
5363
+ res.json({
5364
+ current: resolvedPath,
5365
+ parent: hasParent ? parent : null,
5366
+ directories,
5367
+ basename: basename2(resolvedPath)
5368
+ });
5369
+ } catch {
5370
+ res.status(400).json({
5371
+ error: "Cannot read directory",
5372
+ current: DEFAULT_BASE_PATH,
5373
+ parent: null,
5374
+ directories: [],
5375
+ basename: basename2(DEFAULT_BASE_PATH)
5376
+ });
5377
+ }
5378
+ });
5379
+ return router;
5380
+ }
5381
+
5382
+ // src/server/routes/auto-update.ts
5383
+ import { Router as Router6 } from "express";
5347
5384
  import { spawn as spawn4 } from "child_process";
5348
5385
 
5349
5386
  // src/constants.ts
5350
- var VERSION = "1.6.96";
5387
+ var VERSION = "1.6.97";
5351
5388
 
5352
5389
  // src/server/routes/auto-update.ts
5353
5390
  var updateInProgress = false;
5354
5391
  function createAutoUpdateRoutes(options = {}) {
5355
- const router = Router5();
5392
+ const router = Router6();
5356
5393
  router.get("/check", async (req, res) => {
5357
5394
  const isTest = req.query["test"] === "1";
5358
5395
  const current = VERSION;
@@ -5361,7 +5398,7 @@ function createAutoUpdateRoutes(options = {}) {
5361
5398
  return;
5362
5399
  }
5363
5400
  try {
5364
- const latest = await new Promise((resolve2, reject) => {
5401
+ const latest = await new Promise((resolve3, reject) => {
5365
5402
  const child = spawn4("npm", ["view", "openfox", "version"], {
5366
5403
  stdio: ["ignore", "pipe", "pipe"]
5367
5404
  });
@@ -5371,7 +5408,7 @@ function createAutoUpdateRoutes(options = {}) {
5371
5408
  });
5372
5409
  child.on("close", (code) => {
5373
5410
  if (code === 0) {
5374
- resolve2(stdout.trim());
5411
+ resolve3(stdout.trim());
5375
5412
  } else {
5376
5413
  reject(new Error(`npm view exited with code ${code}`));
5377
5414
  }
@@ -5432,7 +5469,7 @@ function createAutoUpdateRoutes(options = {}) {
5432
5469
  }
5433
5470
 
5434
5471
  // src/server/index.ts
5435
- var __dirname2 = dirname5(fileURLToPath4(import.meta.url));
5472
+ var __dirname2 = dirname6(fileURLToPath4(import.meta.url));
5436
5473
  async function createServerHandle(config4) {
5437
5474
  setRuntimeConfig(config4);
5438
5475
  setLogLevel(config4.logging?.level ?? void 0, config4.mode);
@@ -5803,7 +5840,7 @@ async function createServerHandle(config4) {
5803
5840
  if (!callId || approved === void 0) {
5804
5841
  return res.status(400).json({ error: "callId and approved are required" });
5805
5842
  }
5806
- const { providePathConfirmation } = await import("./tools-UFAPVX45.js");
5843
+ const { providePathConfirmation } = await import("./tools-SIVCXYHR.js");
5807
5844
  const result = providePathConfirmation(callId, approved, alwaysAllow);
5808
5845
  if (!result.found) {
5809
5846
  return res.status(404).json({ error: "No pending path confirmation with that ID" });
@@ -5827,7 +5864,7 @@ async function createServerHandle(config4) {
5827
5864
  if (!callId || !answer) {
5828
5865
  return res.status(400).json({ error: "callId and answer are required" });
5829
5866
  }
5830
- const { provideAnswer: provideAnswer2 } = await import("./tools-UFAPVX45.js");
5867
+ const { provideAnswer: provideAnswer2 } = await import("./tools-SIVCXYHR.js");
5831
5868
  const found = provideAnswer2(callId, answer);
5832
5869
  if (!found) {
5833
5870
  return res.status(404).json({ error: "No pending question with that ID" });
@@ -5863,8 +5900,8 @@ async function createServerHandle(config4) {
5863
5900
  if (!session) {
5864
5901
  return res.status(404).json({ error: "Session not found" });
5865
5902
  }
5866
- const { stopSessionExecution } = await import("./chat-handler-WEG7W3OY.js");
5867
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-UFAPVX45.js");
5903
+ const { stopSessionExecution } = await import("./chat-handler-42XM6GZI.js");
5904
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-SIVCXYHR.js");
5868
5905
  stopSessionExecution(sessionId, sessionManager);
5869
5906
  abortSession(sessionId);
5870
5907
  cancelQuestionsForSession(sessionId, "Session stopped by user");
@@ -5915,7 +5952,7 @@ async function createServerHandle(config4) {
5915
5952
  res.json({ accepted: true });
5916
5953
  });
5917
5954
  app.get("/api/settings", async (req, res) => {
5918
- const { getSetting, SETTINGS_DEFAULTS } = await import("./settings-RMRS6GEW.js");
5955
+ const { getSetting, SETTINGS_DEFAULTS } = await import("./settings-TTYCUHWU.js");
5919
5956
  const keysParam = req.query["keys"];
5920
5957
  if (!keysParam) {
5921
5958
  return res.status(400).json({ error: "keys query parameter is required" });
@@ -5928,19 +5965,19 @@ async function createServerHandle(config4) {
5928
5965
  res.json(result);
5929
5966
  });
5930
5967
  app.get("/api/settings/:key", async (req, res) => {
5931
- const { getSetting, SETTINGS_DEFAULTS } = await import("./settings-RMRS6GEW.js");
5968
+ const { getSetting, SETTINGS_DEFAULTS } = await import("./settings-TTYCUHWU.js");
5932
5969
  const key = req.params.key;
5933
5970
  const value = getSetting(key) ?? SETTINGS_DEFAULTS[key] ?? null;
5934
5971
  res.json({ key, value });
5935
5972
  });
5936
5973
  app.get("/api/settings/:key", async (req, res) => {
5937
- const { getSetting, SETTINGS_DEFAULTS } = await import("./settings-RMRS6GEW.js");
5974
+ const { getSetting, SETTINGS_DEFAULTS } = await import("./settings-TTYCUHWU.js");
5938
5975
  const key = req.params.key;
5939
5976
  const value = getSetting(key) ?? SETTINGS_DEFAULTS[key] ?? null;
5940
5977
  res.json({ key, value });
5941
5978
  });
5942
5979
  app.put("/api/settings/:key", async (req, res) => {
5943
- const { setSetting } = await import("./settings-RMRS6GEW.js");
5980
+ const { setSetting } = await import("./settings-TTYCUHWU.js");
5944
5981
  const key = req.params.key;
5945
5982
  const { value } = req.body;
5946
5983
  if (value === void 0) {
@@ -6236,42 +6273,15 @@ async function createServerHandle(config4) {
6236
6273
  app.get("/api/branch", async (req, res) => {
6237
6274
  await getCurrentBranch(req, res);
6238
6275
  });
6239
- const DEFAULT_BASE_PATH = process.cwd();
6240
- app.get("/api/directories", async (req, res) => {
6241
- const path = req.query["path"] || DEFAULT_BASE_PATH;
6242
- try {
6243
- const resolvedPath = resolve(path);
6244
- const entries = await import("fs/promises").then((m) => m.readdir(resolvedPath, { withFileTypes: true }));
6245
- const directories = entries.filter((entry) => entry.isDirectory() && !entry.name.startsWith(".")).map((entry) => ({
6246
- name: entry.name,
6247
- path: join6(resolvedPath, entry.name)
6248
- })).sort((a, b) => a.name.localeCompare(b.name));
6249
- const parent = dirname5(resolvedPath);
6250
- const hasParent = parent !== resolvedPath;
6251
- res.json({
6252
- current: resolvedPath,
6253
- parent: hasParent ? parent : null,
6254
- directories,
6255
- basename: basename2(resolvedPath)
6256
- });
6257
- } catch {
6258
- res.status(400).json({
6259
- error: "Cannot read directory",
6260
- current: DEFAULT_BASE_PATH,
6261
- parent: null,
6262
- directories: [],
6263
- basename: basename2(DEFAULT_BASE_PATH)
6264
- });
6265
- }
6266
- });
6267
- const webDir = resolve(__dirname2, "../../web");
6276
+ app.use("/api/directories", createDirectoryRoutes());
6277
+ const webDir = resolve2(__dirname2, "../../web");
6268
6278
  const isDev = config4.mode === "development";
6269
6279
  let viteServer;
6270
6280
  if (isDev) {
6271
6281
  logger.info("Dev mode: using Vite middleware");
6272
6282
  viteServer = await createViteServer({
6273
6283
  root: webDir,
6274
- configFile: resolve(__dirname2, "../../web/vite.config.ts"),
6284
+ configFile: resolve2(__dirname2, "../../web/vite.config.ts"),
6275
6285
  server: { middlewareMode: true },
6276
6286
  appType: "spa",
6277
6287
  logLevel: "warn"
@@ -6291,7 +6301,7 @@ async function createServerHandle(config4) {
6291
6301
  }
6292
6302
  });
6293
6303
  app.get("/fox.svg", (_req, res) => {
6294
- readFile3(join6(webDir, "fox.svg")).then((content) => {
6304
+ readFile3(join7(webDir, "fox.svg")).then((content) => {
6295
6305
  res.set("Content-Type", "image/svg+xml");
6296
6306
  res.send(content);
6297
6307
  }).catch(() => {
@@ -6300,7 +6310,7 @@ async function createServerHandle(config4) {
6300
6310
  });
6301
6311
  app.use(
6302
6312
  "/sounds",
6303
- express.static(join6(webDir, "public", "sounds"), {
6313
+ express.static(join7(webDir, "public", "sounds"), {
6304
6314
  setHeaders: (res) => {
6305
6315
  res.set("Content-Type", "audio/mpeg");
6306
6316
  }
@@ -6309,13 +6319,13 @@ async function createServerHandle(config4) {
6309
6319
  app.use("/__inspect__.js", (_req, res) => {
6310
6320
  res.set("Access-Control-Allow-Origin", "*");
6311
6321
  res.set("Content-Type", "application/javascript");
6312
- readFile3(join6(webDir, "public", "__inspect__.js")).then((content) => res.send(content)).catch(() => res.status(404).send("Not found"));
6322
+ readFile3(join7(webDir, "public", "__inspect__.js")).then((content) => res.send(content)).catch(() => res.status(404).send("Not found"));
6313
6323
  });
6314
6324
  app.get("/*path", (req, res) => {
6315
6325
  if (req.path.startsWith("/api/")) {
6316
6326
  return;
6317
6327
  }
6318
- readFile3(join6(webDir, "index.html"), "utf-8").then((indexHtml) => viteServer.transformIndexHtml(req.originalUrl, indexHtml)).then((transformed) => res.send(transformed)).catch((err) => {
6328
+ readFile3(join7(webDir, "index.html"), "utf-8").then((indexHtml) => viteServer.transformIndexHtml(req.originalUrl, indexHtml)).then((transformed) => res.send(transformed)).catch((err) => {
6319
6329
  logger.error("Error serving index.html", { error: err });
6320
6330
  res.status(500).send("Server error");
6321
6331
  });
@@ -6323,10 +6333,10 @@ async function createServerHandle(config4) {
6323
6333
  logger.info("Vite middleware ready", { port: config4.server.port });
6324
6334
  }
6325
6335
  if (!isDev) {
6326
- const distWebDir = resolve(__dirname2, "web");
6336
+ const distWebDir = resolve2(__dirname2, "web");
6327
6337
  app.use(
6328
6338
  "/assets",
6329
- express.static(join6(distWebDir, "assets"), {
6339
+ express.static(join7(distWebDir, "assets"), {
6330
6340
  setHeaders: (res, filepath) => {
6331
6341
  if (filepath.endsWith(".css")) {
6332
6342
  res.set("Content-Type", "text/css");
@@ -6334,11 +6344,11 @@ async function createServerHandle(config4) {
6334
6344
  }
6335
6345
  })
6336
6346
  );
6337
- app.use("/manifest.webmanifest", express.static(join6(distWebDir, "manifest.webmanifest")));
6338
- app.use("/registerSW.js", express.static(join6(distWebDir, "registerSW.js")));
6339
- app.use("/sw.js", express.static(join6(distWebDir, "sw.js")));
6347
+ app.use("/manifest.webmanifest", express.static(join7(distWebDir, "manifest.webmanifest")));
6348
+ app.use("/registerSW.js", express.static(join7(distWebDir, "registerSW.js")));
6349
+ app.use("/sw.js", express.static(join7(distWebDir, "sw.js")));
6340
6350
  app.get("/fox.svg", (_req, res) => {
6341
- readFile3(join6(distWebDir, "fox.svg")).then((content) => {
6351
+ readFile3(join7(distWebDir, "fox.svg")).then((content) => {
6342
6352
  res.set("Content-Type", "image/svg+xml");
6343
6353
  res.send(content);
6344
6354
  }).catch(() => {
@@ -6347,7 +6357,7 @@ async function createServerHandle(config4) {
6347
6357
  });
6348
6358
  app.use(
6349
6359
  "/sounds",
6350
- express.static(join6(distWebDir, "sounds"), {
6360
+ express.static(join7(distWebDir, "sounds"), {
6351
6361
  setHeaders: (res) => {
6352
6362
  res.set("Content-Type", "audio/mpeg");
6353
6363
  }
@@ -6356,15 +6366,15 @@ async function createServerHandle(config4) {
6356
6366
  app.use("/__inspect__.js", (_req, res) => {
6357
6367
  res.set("Access-Control-Allow-Origin", "*");
6358
6368
  res.set("Content-Type", "application/javascript");
6359
- readFile3(join6(distWebDir, "__inspect__.js")).then((content) => res.send(content)).catch(() => res.status(404).send("Not found"));
6369
+ readFile3(join7(distWebDir, "__inspect__.js")).then((content) => res.send(content)).catch(() => res.status(404).send("Not found"));
6360
6370
  });
6361
6371
  app.use("/__inspect__.js", (_req, res) => {
6362
6372
  res.set("Access-Control-Allow-Origin", "*");
6363
6373
  res.set("Content-Type", "application/javascript");
6364
- readFile3(join6(distWebDir, "__inspect__.js")).then((content) => res.send(content)).catch(() => res.status(404).send("Not found"));
6374
+ readFile3(join7(distWebDir, "__inspect__.js")).then((content) => res.send(content)).catch(() => res.status(404).send("Not found"));
6365
6375
  });
6366
6376
  app.get("/", (_req, res) => {
6367
- readFile3(join6(distWebDir, "index.html"), "utf-8").then((content) => res.send(content)).catch(() => {
6377
+ readFile3(join7(distWebDir, "index.html"), "utf-8").then((content) => res.send(content)).catch(() => {
6368
6378
  res.status(404).send("Web UI not built. Run `npm run build:web`");
6369
6379
  });
6370
6380
  });
@@ -6372,7 +6382,7 @@ async function createServerHandle(config4) {
6372
6382
  if (req.path.startsWith("/api/") || req.path.startsWith("/assets/") || req.path.startsWith("/sounds/") || req.path.startsWith("/manifest.webmanifest") || req.path.startsWith("/registerSW.js") || req.path.startsWith("/sw.js") || req.path === "/fox.svg") {
6373
6383
  return;
6374
6384
  }
6375
- readFile3(join6(distWebDir, "index.html"), "utf-8").then((content) => res.send(content)).catch(() => {
6385
+ readFile3(join7(distWebDir, "index.html"), "utf-8").then((content) => res.send(content)).catch(() => {
6376
6386
  res.status(404).send("Web UI not built");
6377
6387
  });
6378
6388
  });
@@ -6387,7 +6397,7 @@ async function createServerHandle(config4) {
6387
6397
  providerManager
6388
6398
  );
6389
6399
  const wss = wssExports.wss;
6390
- const { QueueProcessor } = await import("./processor-GISJIZH7.js");
6400
+ const { QueueProcessor } = await import("./processor-F3GKMYJT.js");
6391
6401
  const queueProcessor = new QueueProcessor({
6392
6402
  sessionManager,
6393
6403
  providerManager,
@@ -6407,7 +6417,7 @@ async function createServerHandle(config4) {
6407
6417
  return {
6408
6418
  httpServer,
6409
6419
  ctx: { config: config4, sessionManager, llmClient: getLLMClient(), toolRegistry, providerManager },
6410
- start: (port) => new Promise((resolve2, reject) => {
6420
+ start: (port) => new Promise((resolve3, reject) => {
6411
6421
  const listenPort = port ?? config4.server.port;
6412
6422
  const host = config4.server.host;
6413
6423
  httpServer.listen(listenPort, host, () => {
@@ -6417,11 +6427,11 @@ async function createServerHandle(config4) {
6417
6427
  logger.info(`OpenFox server running at http://${host}:${actualPort}`);
6418
6428
  logger.info(`WebSocket available at ws://${host}:${actualPort}/ws`);
6419
6429
  logger.info(`LLM backend: ${client.getBackend()}, model: ${client.getModel()}, url: ${config4.llm.baseUrl}`);
6420
- resolve2({ port: actualPort });
6430
+ resolve3({ port: actualPort });
6421
6431
  });
6422
6432
  httpServer.on("error", reject);
6423
6433
  }),
6424
- close: () => new Promise((resolve2) => {
6434
+ close: () => new Promise((resolve3) => {
6425
6435
  logger.info("Shutting down...");
6426
6436
  void (async () => {
6427
6437
  await devServerManager.stopAll();
@@ -6434,7 +6444,7 @@ async function createServerHandle(config4) {
6434
6444
  client.terminate();
6435
6445
  }
6436
6446
  wss.close();
6437
- httpServer.close(() => resolve2());
6447
+ httpServer.close(() => resolve3());
6438
6448
  })();
6439
6449
  })
6440
6450
  };
@@ -6453,13 +6463,10 @@ async function createServer(config4) {
6453
6463
  process.on("SIGINT", shutdown);
6454
6464
  process.on("SIGTERM", shutdown);
6455
6465
  }
6456
- function basename2(path) {
6457
- return path.split("/").pop() || path.split("\\").pop() || path;
6458
- }
6459
6466
 
6460
6467
  export {
6461
6468
  VERSION,
6462
6469
  createServerHandle,
6463
6470
  createServer
6464
6471
  };
6465
- //# sourceMappingURL=chunk-EXRMBJME.js.map
6472
+ //# sourceMappingURL=chunk-B7UUSHT7.js.map
@@ -191,7 +191,7 @@ async function runCli(options) {
191
191
  if (!configExists) {
192
192
  await runNetworkSetup(mode);
193
193
  }
194
- const { runServe } = await import("./serve-O5JK3PNM.js");
194
+ const { runServe } = await import("./serve-QRK2E7HR.js");
195
195
  const serveOptions = { mode };
196
196
  if (values.port) serveOptions.port = parseInt(values.port);
197
197
  if (values["no-browser"] === true) serveOptions.openBrowser = false;
@@ -203,4 +203,4 @@ async function runCli(options) {
203
203
  export {
204
204
  runCli
205
205
  };
206
- //# sourceMappingURL=chunk-2BEPXMWB.js.map
206
+ //# sourceMappingURL=chunk-FBKS6IPU.js.map
@@ -13,7 +13,7 @@ import {
13
13
  getToolRegistryForAgent,
14
14
  loadAllAgentsDefault,
15
15
  runTopLevelAgentLoop
16
- } from "./chunk-BK7QEUQF.js";
16
+ } from "./chunk-47FAM55V.js";
17
17
  import {
18
18
  getCurrentContextWindowId,
19
19
  getEventStore
@@ -327,4 +327,4 @@ export {
327
327
  runBuilderTurn,
328
328
  runVerifierTurn
329
329
  };
330
- //# sourceMappingURL=chunk-OBJE2622.js.map
330
+ //# sourceMappingURL=chunk-K7IJKGYL.js.map
@@ -13,6 +13,8 @@ var SETTINGS_KEYS = {
13
13
  DISPLAY_SHOW_SYNTAX_HIGHLIGHTING: "display.showSyntaxHighlighting",
14
14
  DISPLAY_THEME: "display.theme",
15
15
  DISPLAY_USER_PRESETS: "display.userPresets",
16
+ DISPLAY_FOLLOW_SYSTEM_THEME: "display.followSystemTheme",
17
+ DISPLAY_SHOW_OPEN_IN_EDITOR: "display.showOpenInEditorLinks",
16
18
  LLM_DISABLE_XML_PROTECTION: "llm.disableXmlProtection",
17
19
  KEYBINDINGS: "keybindings"
18
20
  };
@@ -24,6 +26,8 @@ var SETTINGS_DEFAULTS = {
24
26
  [SETTINGS_KEYS.DISPLAY_SHOW_WORKFLOW_BARS]: "true",
25
27
  [SETTINGS_KEYS.DISPLAY_SHOW_SYNTAX_HIGHLIGHTING]: "true",
26
28
  [SETTINGS_KEYS.DISPLAY_THEME]: JSON.stringify({ preset: "dark" }),
29
+ [SETTINGS_KEYS.DISPLAY_FOLLOW_SYSTEM_THEME]: "true",
30
+ [SETTINGS_KEYS.DISPLAY_SHOW_OPEN_IN_EDITOR]: "false",
27
31
  [SETTINGS_KEYS.LLM_DISABLE_XML_PROTECTION]: "false",
28
32
  [SETTINGS_KEYS.KEYBINDINGS]: JSON.stringify({
29
33
  terminalToggle: { type: "double-press", key: "Control", threshold: 300 },
@@ -82,4 +86,4 @@ export {
82
86
  deleteSetting,
83
87
  getAllSettings
84
88
  };
85
- //# sourceMappingURL=chunk-QWGO6DE3.js.map
89
+ //# sourceMappingURL=chunk-ROWFVGB6.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-2BEPXMWB.js";
4
+ } from "../chunk-FBKS6IPU.js";
5
5
  import {
6
6
  logger
7
7
  } from "../chunk-K44MW7JJ.js";
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-2BEPXMWB.js";
4
+ } from "../chunk-FBKS6IPU.js";
5
5
  import {
6
6
  logger
7
7
  } from "../chunk-K44MW7JJ.js";
@@ -3,7 +3,7 @@ import {
3
3
  runBuilderTurn,
4
4
  runChatTurn,
5
5
  runVerifierTurn
6
- } from "./chunk-OBJE2622.js";
6
+ } from "./chunk-K7IJKGYL.js";
7
7
  import {
8
8
  TurnMetrics,
9
9
  createChatDoneEvent,
@@ -11,8 +11,8 @@ import {
11
11
  createMessageStartEvent,
12
12
  createToolCallEvent,
13
13
  createToolResultEvent
14
- } from "./chunk-BK7QEUQF.js";
15
- import "./chunk-QWGO6DE3.js";
14
+ } from "./chunk-47FAM55V.js";
15
+ import "./chunk-ROWFVGB6.js";
16
16
  import "./chunk-ZHBL5G5X.js";
17
17
  import "./chunk-DL6ZILAF.js";
18
18
  import "./chunk-PBGOZMVY.js";
@@ -40,4 +40,4 @@ export {
40
40
  runChatTurn,
41
41
  runVerifierTurn
42
42
  };
43
- //# sourceMappingURL=orchestrator-JNDOPIVQ.js.map
43
+ //# sourceMappingURL=orchestrator-I3YQFBTP.js.map
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "1.6.96",
3
+ "version": "1.6.97",
4
4
  "description": "Local-LLM-first agentic coding assistant",
5
5
  "type": "module",
6
6
  "bin": {