openfox 2.0.64 → 2.0.65

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-QJ5FH5DP.js";
6
6
  import {
7
7
  runChatTurn
8
- } from "./chunk-73N5CJH3.js";
9
- import "./chunk-WD75RSGR.js";
8
+ } from "./chunk-VWPY2KWH.js";
9
+ import "./chunk-UEIQKG5P.js";
10
10
  import "./chunk-X5YCWKNS.js";
11
11
  import "./chunk-LBGHZLLH.js";
12
12
  import "./chunk-BGTEIA2S.js";
@@ -21,8 +21,8 @@ import {
21
21
  createPhaseChangedMessage,
22
22
  createSessionRunningMessage
23
23
  } from "./chunk-F4PMNP7S.js";
24
+ import "./chunk-PXJ4NOP4.js";
24
25
  import "./chunk-EU3WWTFH.js";
25
- import "./chunk-SVSKQYFH.js";
26
26
  import "./chunk-YQ3SOPBI.js";
27
27
  import "./chunk-ZPIZLTWU.js";
28
28
  import "./chunk-J2GP3J3X.js";
@@ -154,4 +154,4 @@ export {
154
154
  startChatSession,
155
155
  stopSessionExecution
156
156
  };
157
- //# sourceMappingURL=chat-handler-LI4R4Z2E.js.map
157
+ //# sourceMappingURL=chat-handler-MC3XZ3OV.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-54KALE6R.js");
211
+ const { runServe } = await import("./serve-ZRTWVOL2.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-O3G6X5CT.js.map
223
+ //# sourceMappingURL=chunk-4UYKN6JU.js.map
@@ -7,7 +7,7 @@ import {
7
7
  injectWorkflowKickoffIfNeeded,
8
8
  runAgentTurn,
9
9
  runChatTurn
10
- } from "./chunk-73N5CJH3.js";
10
+ } from "./chunk-VWPY2KWH.js";
11
11
  import {
12
12
  checkAborted,
13
13
  deleteItemFromDir,
@@ -19,7 +19,7 @@ import {
19
19
  loadAllAgentsDefault,
20
20
  saveItemToDir,
21
21
  spawnShellProcess
22
- } from "./chunk-WD75RSGR.js";
22
+ } from "./chunk-UEIQKG5P.js";
23
23
  import {
24
24
  TurnMetrics,
25
25
  createMessageStartEvent
@@ -2092,4 +2092,4 @@ export {
2092
2092
  signalMcpReady,
2093
2093
  createWebSocketServer
2094
2094
  };
2095
- //# sourceMappingURL=chunk-HZNY77HZ.js.map
2095
+ //# sourceMappingURL=chunk-N4K3PNOS.js.map
@@ -24,7 +24,8 @@ var SETTINGS_KEYS = {
24
24
  SEARCH_ENGINE: "search.engine",
25
25
  SEARCH_TAVILY_API_KEY: "search.tavilyApiKey",
26
26
  SEARCH_SEARXNG_URL: "search.searxngUrl",
27
- SEARCH_SEARXNG_API_KEY: "search.searxngApiKey"
27
+ SEARCH_SEARXNG_API_KEY: "search.searxngApiKey",
28
+ TOOLS_USE_RTK: "tools.useRtk"
28
29
  };
29
30
  var SETTINGS_DEFAULTS = {
30
31
  [SETTINGS_KEYS.DISPLAY_SHOW_THINKING]: "true",
@@ -49,7 +50,8 @@ var SETTINGS_DEFAULTS = {
49
50
  { type: "chord", key: "3", modifiers: ["ctrl"] },
50
51
  { type: "chord", key: "4", modifiers: ["ctrl"] }
51
52
  ]
52
- })
53
+ }),
54
+ [SETTINGS_KEYS.TOOLS_USE_RTK]: "false"
53
55
  };
54
56
  function getSetting(key) {
55
57
  try {
@@ -97,4 +99,4 @@ export {
97
99
  deleteSetting,
98
100
  getAllSettings
99
101
  };
100
- //# sourceMappingURL=chunk-SVSKQYFH.js.map
102
+ //# sourceMappingURL=chunk-PXJ4NOP4.js.map
@@ -54,16 +54,16 @@ import {
54
54
  createChatPathConfirmationMessage,
55
55
  createQueueStateMessage
56
56
  } from "./chunk-F4PMNP7S.js";
57
- import {
58
- AskUserInterrupt,
59
- askUserTool
60
- } from "./chunk-EU3WWTFH.js";
61
57
  import {
62
58
  SETTINGS_KEYS,
63
59
  deleteSetting,
64
60
  getSetting,
65
61
  setSetting
66
- } from "./chunk-SVSKQYFH.js";
62
+ } from "./chunk-PXJ4NOP4.js";
63
+ import {
64
+ AskUserInterrupt,
65
+ askUserTool
66
+ } from "./chunk-EU3WWTFH.js";
67
67
  import {
68
68
  getProject
69
69
  } from "./chunk-YQ3SOPBI.js";
@@ -1448,7 +1448,9 @@ Make sure whitespace and indentation match exactly.`
1448
1448
  );
1449
1449
 
1450
1450
  // src/server/tools/shell.ts
1451
+ import { spawn as spawn2 } from "child_process";
1451
1452
  import { resolve as resolve4, isAbsolute as isAbsolute2 } from "path";
1453
+ import { access } from "fs/promises";
1452
1454
 
1453
1455
  // src/server/utils/shell.ts
1454
1456
  import { spawn } from "child_process";
@@ -1480,6 +1482,33 @@ function stripTailPipe(command) {
1480
1482
  }
1481
1483
 
1482
1484
  // src/server/tools/shell.ts
1485
+ var rtkAvailable;
1486
+ async function checkRtkAvailability() {
1487
+ if (rtkAvailable !== void 0) return rtkAvailable;
1488
+ try {
1489
+ await access("/usr/local/bin/rtk");
1490
+ rtkAvailable = true;
1491
+ } catch {
1492
+ try {
1493
+ const out = await new Promise((resolve6, reject) => {
1494
+ const proc = spawn2("rtk", ["--version"], { stdio: ["ignore", "pipe", "pipe"] });
1495
+ let output = "";
1496
+ proc.stdout?.on("data", (d) => {
1497
+ output += d.toString();
1498
+ });
1499
+ proc.on("error", reject);
1500
+ proc.on("close", (code) => {
1501
+ if (code === 0) resolve6(output.trim());
1502
+ else reject(new Error(`exit ${code}`));
1503
+ });
1504
+ });
1505
+ rtkAvailable = out.startsWith("rtk ");
1506
+ } catch {
1507
+ rtkAvailable = false;
1508
+ }
1509
+ }
1510
+ return rtkAvailable;
1511
+ }
1483
1512
  function hasBackgroundAmpersand(command) {
1484
1513
  const trimmed = command.replace(/[;\s]+$/, "");
1485
1514
  if (trimmed.endsWith("&")) {
@@ -1538,7 +1567,9 @@ var runCommandTool = createTool(
1538
1567
  await helpers.checkPathAccess(pathsToCheck, args.command);
1539
1568
  const tailInfo = stripTailPipe(args.command);
1540
1569
  const execCommand = tailInfo ? tailInfo.command : args.command;
1541
- const result = await executeCommand(execCommand, workingDir, timeout, context.signal, context.onProgress);
1570
+ const useRtk = getSetting(SETTINGS_KEYS.TOOLS_USE_RTK) === "true";
1571
+ const finalCommand = useRtk ? await tryRtkRewrite(execCommand) : execCommand;
1572
+ const result = await executeCommand(finalCommand, workingDir, timeout, context.signal, context.onProgress);
1542
1573
  let output = "";
1543
1574
  if (result.stdout) {
1544
1575
  output += result.stdout;
@@ -1576,6 +1607,29 @@ ${result.stderr}`;
1576
1607
  });
1577
1608
  }
1578
1609
  );
1610
+ async function tryRtkRewrite(command) {
1611
+ if (!await checkRtkAvailability()) return command;
1612
+ try {
1613
+ const result = await new Promise((resolve6, reject) => {
1614
+ const proc = spawn2("rtk", ["rewrite", command], {
1615
+ stdio: ["ignore", "pipe", "pipe"],
1616
+ timeout: 2e3
1617
+ });
1618
+ let stdout = "";
1619
+ proc.stdout?.on("data", (data) => {
1620
+ stdout += data.toString();
1621
+ });
1622
+ proc.on("error", reject);
1623
+ proc.on("close", (code) => {
1624
+ if (code === 0 || code === 3) resolve6(stdout.trim());
1625
+ else reject(new Error(`exit ${code}`));
1626
+ });
1627
+ });
1628
+ if (result && result !== command) return result;
1629
+ } catch {
1630
+ }
1631
+ return command;
1632
+ }
1579
1633
  function executeCommand(command, cwd, timeout, signal, onProgress) {
1580
1634
  return new Promise((resolve6, reject) => {
1581
1635
  if (checkAborted(signal)) {
@@ -1800,24 +1854,24 @@ ${Object.entries(schema.fields).map(([f, t]) => ` ${f}: ${t}`).join("\n")}`
1800
1854
  );
1801
1855
 
1802
1856
  // src/server/sub-agents/manager.ts
1803
- import { readFile as readFile8, access as access4 } from "fs/promises";
1857
+ import { readFile as readFile8, access as access5 } from "fs/promises";
1804
1858
  import { join as join7, dirname as dirname5, isAbsolute as isAbsolute3 } from "path";
1805
1859
 
1806
1860
  // src/server/agents/registry.ts
1807
- import { readdir as readdir3, readFile as readFile5, writeFile as writeFile4, mkdir as mkdir3, access as access2, unlink as unlink2 } from "fs/promises";
1861
+ import { readdir as readdir3, readFile as readFile5, writeFile as writeFile4, mkdir as mkdir3, access as access3, unlink as unlink2 } from "fs/promises";
1808
1862
  import { join as join4, dirname as dirname2 } from "path";
1809
1863
  import { constants as constants2 } from "fs";
1810
1864
  import { fileURLToPath } from "url";
1811
1865
  import matter2 from "gray-matter";
1812
1866
 
1813
1867
  // src/server/shared/item-loader.ts
1814
- import { readdir as readdir2, readFile as readFile4, access, writeFile as writeFile3, mkdir as mkdir2, unlink } from "fs/promises";
1868
+ import { readdir as readdir2, readFile as readFile4, access as access2, writeFile as writeFile3, mkdir as mkdir2, unlink } from "fs/promises";
1815
1869
  import { join as join3 } from "path";
1816
1870
  import { constants } from "fs";
1817
1871
  import matter from "gray-matter";
1818
1872
  async function pathExists(path) {
1819
1873
  try {
1820
- await access(path, constants.R_OK);
1874
+ await access2(path, constants.R_OK);
1821
1875
  return true;
1822
1876
  } catch {
1823
1877
  return false;
@@ -1895,7 +1949,7 @@ function getProjectAgentsDir(projectDir) {
1895
1949
  }
1896
1950
  async function pathExists2(path) {
1897
1951
  try {
1898
- await access2(path, constants2.R_OK);
1952
+ await access3(path, constants2.R_OK);
1899
1953
  return true;
1900
1954
  } catch {
1901
1955
  return false;
@@ -2074,7 +2128,7 @@ async function deleteAgent(configDir, agentId) {
2074
2128
  }
2075
2129
 
2076
2130
  // src/server/context/instructions.ts
2077
- import { readFile as readFile6, access as access3 } from "fs/promises";
2131
+ import { readFile as readFile6, access as access4 } from "fs/promises";
2078
2132
  import { join as join5, dirname as dirname3 } from "path";
2079
2133
  import { constants as constants3 } from "fs";
2080
2134
  var INSTRUCTION_FILENAMES = ["AGENTS.md", "CLAUDE.md"];
@@ -2157,7 +2211,7 @@ ${agentContent}`);
2157
2211
  }
2158
2212
  async function fileExists(path) {
2159
2213
  try {
2160
- await access3(path, constants3.R_OK);
2214
+ await access4(path, constants3.R_OK);
2161
2215
  return true;
2162
2216
  } catch {
2163
2217
  return false;
@@ -3585,7 +3639,7 @@ async function loadGitIgnoreRules(workdir) {
3585
3639
  while (true) {
3586
3640
  const gitignorePath = join7(currentDir, ".gitignore");
3587
3641
  try {
3588
- await access4(gitignorePath);
3642
+ await access5(gitignorePath);
3589
3643
  const content = await readFile8(gitignorePath, "utf-8");
3590
3644
  const trimmed = content.trim();
3591
3645
  if (!trimmed) return "";
@@ -3787,7 +3841,7 @@ var callSubAgentTool = {
3787
3841
  };
3788
3842
  }
3789
3843
  try {
3790
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-R6LPK6OS.js");
3844
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-ZZM36DAZ.js");
3791
3845
  const toolRegistry = getToolRegistryForAgent2(agentDef);
3792
3846
  const turnMetrics = new TurnMetrics();
3793
3847
  const result = await executeSubAgent({
@@ -4071,7 +4125,7 @@ var webFetchTool = createTool(
4071
4125
  );
4072
4126
 
4073
4127
  // src/server/dev-server/manager.ts
4074
- import { spawn as spawn2 } from "child_process";
4128
+ import { spawn as spawn3 } from "child_process";
4075
4129
  import { readFile as readFile9, writeFile as writeFile6, mkdir as mkdir5 } from "fs/promises";
4076
4130
  import { resolve as resolve5, join as join8 } from "path";
4077
4131
  var MAX_LOG_LINES = 2e3;
@@ -4185,7 +4239,7 @@ var DevServerManager = class {
4185
4239
  }
4186
4240
  const resolved = this.resolveWorkdir(workdir);
4187
4241
  const shell = getPlatformShell();
4188
- const proc = spawn2(shell.command, [...shell.args, config.command], {
4242
+ const proc = spawn3(shell.command, [...shell.args, config.command], {
4189
4243
  cwd: resolved,
4190
4244
  env: { ...process.env, FORCE_COLOR: "1" },
4191
4245
  stdio: ["ignore", "pipe", "pipe"],
@@ -4709,7 +4763,7 @@ var mcpConfigTool = createTool(
4709
4763
  mcpNotifyChanged?.(sessionId);
4710
4764
  }
4711
4765
  async function rebuildTools() {
4712
- const { setMcpTools: setMcpTools2 } = await import("./tools-R6LPK6OS.js");
4766
+ const { setMcpTools: setMcpTools2 } = await import("./tools-ZZM36DAZ.js");
4713
4767
  const mcpTools = createMcpTools(mcpManagerForTools);
4714
4768
  setMcpTools2(mcpTools);
4715
4769
  }
@@ -5524,4 +5578,4 @@ export {
5524
5578
  getToolRegistryForAgent,
5525
5579
  createToolRegistry
5526
5580
  };
5527
- //# sourceMappingURL=chunk-WD75RSGR.js.map
5581
+ //# sourceMappingURL=chunk-UEIQKG5P.js.map
@@ -10,7 +10,7 @@ import {
10
10
  loadAllAgentsDefault,
11
11
  processEventsForConversation,
12
12
  runTopLevelAgentLoop
13
- } from "./chunk-WD75RSGR.js";
13
+ } from "./chunk-UEIQKG5P.js";
14
14
  import {
15
15
  TurnMetrics,
16
16
  WORKFLOW_KICKOFF_PROMPT,
@@ -65,7 +65,7 @@ function resolveAgentDef(sessionManager, sessionId) {
65
65
  }
66
66
  async function buildCachedPrompt(sessionManager, sessionId, agentDef) {
67
67
  const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
68
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-R6LPK6OS.js");
68
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-ZZM36DAZ.js");
69
69
  const tools = getToolRegistryForAgent2(agentDef).definitions;
70
70
  const toolFingerprint = getToolFingerprint(tools);
71
71
  const allAgents = await loadAllAgentsDefault();
@@ -78,7 +78,7 @@ async function buildCachedPrompt(sessionManager, sessionId, agentDef) {
78
78
  async function computeSessionHash(sessionManager, sessionId) {
79
79
  const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
80
80
  const agentDef = await resolveAgentDef(sessionManager, sessionId);
81
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-R6LPK6OS.js");
81
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-ZZM36DAZ.js");
82
82
  const tools = getToolRegistryForAgent2(agentDef).definitions;
83
83
  const toolFingerprint = getToolFingerprint(tools);
84
84
  return computeDynamicContextHash(instructionContent, skills, toolFingerprint);
@@ -96,7 +96,7 @@ async function applyDynamicContext(sessionManager, sessionId) {
96
96
 
97
97
  // src/server/chat/orchestrator.ts
98
98
  async function buildRetryPatterns() {
99
- const { getSetting, SETTINGS_KEYS } = await import("./settings-ASLTSUE2.js");
99
+ const { getSetting, SETTINGS_KEYS } = await import("./settings-JA4XUR3W.js");
100
100
  const raw = getSetting(SETTINGS_KEYS.RETRY_PATTERNS);
101
101
  if (!raw) {
102
102
  const oldXmlProtection = getSetting("llm.disableXmlProtection");
@@ -383,4 +383,4 @@ export {
383
383
  runAgentTurn,
384
384
  injectWorkflowKickoffIfNeeded
385
385
  };
386
- //# sourceMappingURL=chunk-73N5CJH3.js.map
386
+ //# sourceMappingURL=chunk-VWPY2KWH.js.map
@@ -21,7 +21,7 @@ import {
21
21
  tokenFromPassword,
22
22
  verifyPassword,
23
23
  workflowExists
24
- } from "./chunk-HZNY77HZ.js";
24
+ } from "./chunk-N4K3PNOS.js";
25
25
  import {
26
26
  agentExists,
27
27
  createToolRegistry,
@@ -66,7 +66,7 @@ import {
66
66
  setSkillEnabled,
67
67
  skillExists,
68
68
  updateOwnedSkill
69
- } from "./chunk-WD75RSGR.js";
69
+ } from "./chunk-UEIQKG5P.js";
70
70
  import {
71
71
  ALWAYS_ALLOWED,
72
72
  ALWAYS_ALLOWED_FOR_SUBAGENTS,
@@ -109,14 +109,14 @@ import {
109
109
  import {
110
110
  createContextStateMessage
111
111
  } from "./chunk-F4PMNP7S.js";
112
- import {
113
- EventEmitter
114
- } from "./chunk-EU3WWTFH.js";
115
112
  import {
116
113
  deleteSetting,
117
114
  getSetting,
118
115
  setSetting
119
- } from "./chunk-SVSKQYFH.js";
116
+ } from "./chunk-PXJ4NOP4.js";
117
+ import {
118
+ EventEmitter
119
+ } from "./chunk-EU3WWTFH.js";
120
120
  import {
121
121
  getProject
122
122
  } from "./chunk-YQ3SOPBI.js";
@@ -4076,7 +4076,7 @@ import { Router as Router8 } from "express";
4076
4076
  import { spawn as spawn2 } from "child_process";
4077
4077
 
4078
4078
  // src/constants.ts
4079
- var VERSION = "2.0.64";
4079
+ var VERSION = "2.0.65";
4080
4080
 
4081
4081
  // src/server/routes/auto-update.ts
4082
4082
  var updateInProgress = false;
@@ -4516,7 +4516,7 @@ async function createServerHandle(config3) {
4516
4516
  setMcpTools(mcpTools);
4517
4517
  logger.info("MCP tools registered", { count: mcpTools.length });
4518
4518
  }
4519
- const { signalMcpReady } = await import("./server-Z2A5YZM6.js");
4519
+ const { signalMcpReady } = await import("./server-PXXGMFBT.js");
4520
4520
  signalMcpReady();
4521
4521
  });
4522
4522
  const app = express();
@@ -4709,7 +4709,7 @@ async function createServerHandle(config3) {
4709
4709
  app.get("/api/sessions/:id", async (req, res) => {
4710
4710
  const { getEventStore: getEventStore2 } = await import("./events-52XADT6Y.js");
4711
4711
  const { buildMessagesFromStoredEvents } = await import("./folding-2BGFLV5J.js");
4712
- const { getPendingQuestionsForSession } = await import("./tools-R6LPK6OS.js");
4712
+ const { getPendingQuestionsForSession } = await import("./tools-ZZM36DAZ.js");
4713
4713
  const session = sessionManager.getSession(req.params.id);
4714
4714
  if (!session) {
4715
4715
  return res.status(404).json({ error: "Session not found" });
@@ -4728,8 +4728,8 @@ async function createServerHandle(config3) {
4728
4728
  if (!session) {
4729
4729
  return res.status(404).json({ error: "Session not found" });
4730
4730
  }
4731
- const { stopSessionExecution } = await import("./chat-handler-LI4R4Z2E.js");
4732
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-R6LPK6OS.js");
4731
+ const { stopSessionExecution } = await import("./chat-handler-MC3XZ3OV.js");
4732
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-ZZM36DAZ.js");
4733
4733
  sessionManager.clearMessageQueue(sessionId);
4734
4734
  stopSessionExecution(sessionId, sessionManager);
4735
4735
  abortSession(sessionId);
@@ -4883,7 +4883,7 @@ async function createServerHandle(config3) {
4883
4883
  if (!callId || approved === void 0) {
4884
4884
  return res.status(400).json({ error: "callId and approved are required" });
4885
4885
  }
4886
- const { providePathConfirmation } = await import("./tools-R6LPK6OS.js");
4886
+ const { providePathConfirmation } = await import("./tools-ZZM36DAZ.js");
4887
4887
  const result = providePathConfirmation(callId, approved, alwaysAllow);
4888
4888
  if (!result.found) {
4889
4889
  return res.status(404).json({ error: "No pending path confirmation with that ID" });
@@ -4891,7 +4891,7 @@ async function createServerHandle(config3) {
4891
4891
  const { getEventStore: getEventStore2 } = await import("./events-52XADT6Y.js");
4892
4892
  const { buildMessagesFromStoredEvents, foldPendingConfirmations } = await import("./folding-2BGFLV5J.js");
4893
4893
  const { createSessionStateMessage } = await import("./protocol-CTNE3ANP.js");
4894
- const { getPendingQuestionsForSession } = await import("./tools-R6LPK6OS.js");
4894
+ const { getPendingQuestionsForSession } = await import("./tools-ZZM36DAZ.js");
4895
4895
  const eventStore = getEventStore2();
4896
4896
  const events = eventStore.getEvents(sessionId);
4897
4897
  const messages = buildMessagesFromStoredEvents(events);
@@ -4912,7 +4912,7 @@ async function createServerHandle(config3) {
4912
4912
  if (!skip && typeof answer !== "string") {
4913
4913
  return res.status(400).json({ error: "answer is required when not skipping" });
4914
4914
  }
4915
- const { provideAnswer } = await import("./tools-R6LPK6OS.js");
4915
+ const { provideAnswer } = await import("./tools-ZZM36DAZ.js");
4916
4916
  const found = provideAnswer(callId, answer ?? "", skip ?? false);
4917
4917
  if (!found) {
4918
4918
  return res.status(404).json({ error: "No pending question with that ID" });
@@ -4940,7 +4940,7 @@ async function createServerHandle(config3) {
4940
4940
  if (!session) {
4941
4941
  return res.status(404).json({ error: "Session not found" });
4942
4942
  }
4943
- const { getSetting: getSetting2, SETTINGS_KEYS } = await import("./settings-ASLTSUE2.js");
4943
+ const { getSetting: getSetting2, SETTINGS_KEYS } = await import("./settings-JA4XUR3W.js");
4944
4944
  if (getSetting2(SETTINGS_KEYS.CACHE_WARMING) !== "true") {
4945
4945
  return res.json({ success: false, reason: "disabled" });
4946
4946
  }
@@ -4972,7 +4972,7 @@ async function createServerHandle(config3) {
4972
4972
  backend: activeProvider?.backend ?? llmClient.getBackend(),
4973
4973
  model: llmClient.getModel()
4974
4974
  };
4975
- const { runAgentTurn, TurnMetrics } = await import("./orchestrator-PFN7C5JI.js");
4975
+ const { runAgentTurn, TurnMetrics } = await import("./orchestrator-IYJRQQKB.js");
4976
4976
  runAgentTurn(
4977
4977
  {
4978
4978
  sessionManager,
@@ -5010,8 +5010,8 @@ async function createServerHandle(config3) {
5010
5010
  if (!session) {
5011
5011
  return res.status(404).json({ error: "Session not found" });
5012
5012
  }
5013
- const { stopSessionExecution } = await import("./chat-handler-LI4R4Z2E.js");
5014
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-R6LPK6OS.js");
5013
+ const { stopSessionExecution } = await import("./chat-handler-MC3XZ3OV.js");
5014
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-ZZM36DAZ.js");
5015
5015
  const queuedMessages = sessionManager.getQueueState(sessionId);
5016
5016
  sessionManager.clearMessageQueue(sessionId);
5017
5017
  stopSessionExecution(sessionId, sessionManager);
@@ -5091,7 +5091,7 @@ async function createServerHandle(config3) {
5091
5091
  res.json({ accepted: true });
5092
5092
  });
5093
5093
  app.get("/api/settings", async (req, res) => {
5094
- const { getSetting: getSetting2, SETTINGS_DEFAULTS } = await import("./settings-ASLTSUE2.js");
5094
+ const { getSetting: getSetting2, SETTINGS_DEFAULTS } = await import("./settings-JA4XUR3W.js");
5095
5095
  const keysParam = req.query["keys"];
5096
5096
  if (!keysParam) {
5097
5097
  return res.status(400).json({ error: "keys query parameter is required" });
@@ -5104,19 +5104,19 @@ async function createServerHandle(config3) {
5104
5104
  res.json(result);
5105
5105
  });
5106
5106
  app.get("/api/settings/:key", async (req, res) => {
5107
- const { getSetting: getSetting2, SETTINGS_DEFAULTS } = await import("./settings-ASLTSUE2.js");
5107
+ const { getSetting: getSetting2, SETTINGS_DEFAULTS } = await import("./settings-JA4XUR3W.js");
5108
5108
  const key = req.params.key;
5109
5109
  const value = getSetting2(key) ?? SETTINGS_DEFAULTS[key] ?? null;
5110
5110
  res.json({ key, value });
5111
5111
  });
5112
5112
  app.get("/api/settings/:key", async (req, res) => {
5113
- const { getSetting: getSetting2, SETTINGS_DEFAULTS } = await import("./settings-ASLTSUE2.js");
5113
+ const { getSetting: getSetting2, SETTINGS_DEFAULTS } = await import("./settings-JA4XUR3W.js");
5114
5114
  const key = req.params.key;
5115
5115
  const value = getSetting2(key) ?? SETTINGS_DEFAULTS[key] ?? null;
5116
5116
  res.json({ key, value });
5117
5117
  });
5118
5118
  app.put("/api/settings/:key", async (req, res) => {
5119
- const { setSetting: setSetting2 } = await import("./settings-ASLTSUE2.js");
5119
+ const { setSetting: setSetting2 } = await import("./settings-JA4XUR3W.js");
5120
5120
  const key = req.params.key;
5121
5121
  const { value } = req.body;
5122
5122
  if (value === void 0) {
@@ -5125,6 +5125,23 @@ async function createServerHandle(config3) {
5125
5125
  setSetting2(key, value);
5126
5126
  res.json({ key, value });
5127
5127
  });
5128
+ app.get("/api/tools/rtk-check", async (_req, res) => {
5129
+ const { spawn: spawn3 } = await import("child_process");
5130
+ try {
5131
+ const available = await new Promise((resolve6) => {
5132
+ const proc = spawn3("rtk", ["--version"], { stdio: ["ignore", "pipe", "pipe"] });
5133
+ let out = "";
5134
+ proc.stdout?.on("data", (d) => {
5135
+ out += d.toString();
5136
+ });
5137
+ proc.on("error", () => resolve6(false));
5138
+ proc.on("close", (code) => resolve6(code === 0 && out.startsWith("rtk ")));
5139
+ });
5140
+ res.json({ available });
5141
+ } catch {
5142
+ res.json({ available: false });
5143
+ }
5144
+ });
5128
5145
  app.get("/api/config", async (_req, res) => {
5129
5146
  const llmClient = getLLMClient();
5130
5147
  const activeProvider = providerManager.getActiveProvider();
@@ -5612,7 +5629,7 @@ async function createServerHandle(config3) {
5612
5629
  });
5613
5630
  async function rebuildMcpTools() {
5614
5631
  const { createMcpTools: createMcpTools2 } = await import("./tool-adapter-MOGEI6TP.js");
5615
- const { setMcpTools: setMcpTools2 } = await import("./tools-R6LPK6OS.js");
5632
+ const { setMcpTools: setMcpTools2 } = await import("./tools-ZZM36DAZ.js");
5616
5633
  const mcpTools = createMcpTools2(mcpManager);
5617
5634
  setMcpTools2(mcpTools);
5618
5635
  }
@@ -5932,7 +5949,7 @@ async function createServerHandle(config3) {
5932
5949
  const state = sessionManager.getContextState(sessionId);
5933
5950
  wssExports.broadcastForSession(sessionId, createContextStateMessage(state));
5934
5951
  });
5935
- const { QueueProcessor } = await import("./processor-AYYXP5NS.js");
5952
+ const { QueueProcessor } = await import("./processor-LUXKVIED.js");
5936
5953
  const queueProcessor = new QueueProcessor({
5937
5954
  sessionManager,
5938
5955
  providerManager,
@@ -6013,4 +6030,4 @@ export {
6013
6030
  createServerHandle,
6014
6031
  createServer
6015
6032
  };
6016
- //# sourceMappingURL=chunk-JFQSQO2N.js.map
6033
+ //# sourceMappingURL=chunk-Z6H7SFQR.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-O3G6X5CT.js";
4
+ } from "../chunk-4UYKN6JU.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-O3G6X5CT.js";
4
+ } from "../chunk-4UYKN6JU.js";
5
5
  import "../chunk-XY3LESVZ.js";
6
6
  import {
7
7
  logger
@@ -2,8 +2,8 @@ import {
2
2
  injectWorkflowKickoffIfNeeded,
3
3
  runAgentTurn,
4
4
  runChatTurn
5
- } from "./chunk-73N5CJH3.js";
6
- import "./chunk-WD75RSGR.js";
5
+ } from "./chunk-VWPY2KWH.js";
6
+ import "./chunk-UEIQKG5P.js";
7
7
  import {
8
8
  TurnMetrics,
9
9
  createChatDoneEvent,
@@ -19,8 +19,8 @@ import "./chunk-NWO6GRYE.js";
19
19
  import "./chunk-AIJE3RYH.js";
20
20
  import "./chunk-TMUBLQFC.js";
21
21
  import "./chunk-F4PMNP7S.js";
22
+ import "./chunk-PXJ4NOP4.js";
22
23
  import "./chunk-EU3WWTFH.js";
23
- import "./chunk-SVSKQYFH.js";
24
24
  import "./chunk-YQ3SOPBI.js";
25
25
  import "./chunk-ZPIZLTWU.js";
26
26
  import "./chunk-J2GP3J3X.js";
@@ -43,4 +43,4 @@ export {
43
43
  runAgentTurn,
44
44
  runChatTurn
45
45
  };
46
- //# sourceMappingURL=orchestrator-PFN7C5JI.js.map
46
+ //# sourceMappingURL=orchestrator-IYJRQQKB.js.map
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "2.0.64",
3
+ "version": "2.0.65",
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-QJ5FH5DP.js";
6
- import "./chunk-WD75RSGR.js";
6
+ import "./chunk-UEIQKG5P.js";
7
7
  import "./chunk-X5YCWKNS.js";
8
8
  import "./chunk-LBGHZLLH.js";
9
9
  import "./chunk-BGTEIA2S.js";
@@ -17,8 +17,8 @@ import {
17
17
  createChatMessageMessage,
18
18
  createSessionRunningMessage
19
19
  } from "./chunk-F4PMNP7S.js";
20
+ import "./chunk-PXJ4NOP4.js";
20
21
  import "./chunk-EU3WWTFH.js";
21
- import "./chunk-SVSKQYFH.js";
22
22
  import "./chunk-YQ3SOPBI.js";
23
23
  import "./chunk-ZPIZLTWU.js";
24
24
  import "./chunk-J2GP3J3X.js";
@@ -175,7 +175,7 @@ var QueueProcessor = class {
175
175
  backend: provider?.backend ?? llmClient.getBackend(),
176
176
  model: llmClient.getModel()
177
177
  };
178
- const { runChatTurn } = await import("./orchestrator-PFN7C5JI.js");
178
+ const { runChatTurn } = await import("./orchestrator-IYJRQQKB.js");
179
179
  const runChatTurnParams = buildRunChatTurnParams({
180
180
  sessionManager,
181
181
  sessionId,
@@ -223,4 +223,4 @@ var QueueProcessor = class {
223
223
  export {
224
224
  QueueProcessor
225
225
  };
226
- //# sourceMappingURL=processor-AYYXP5NS.js.map
226
+ //# sourceMappingURL=processor-LUXKVIED.js.map
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  VERSION,
3
3
  createServer
4
- } from "./chunk-JFQSQO2N.js";
5
- import "./chunk-HZNY77HZ.js";
4
+ } from "./chunk-Z6H7SFQR.js";
5
+ import "./chunk-N4K3PNOS.js";
6
6
  import "./chunk-OESYKZCM.js";
7
- import "./chunk-73N5CJH3.js";
8
- import "./chunk-WD75RSGR.js";
7
+ import "./chunk-VWPY2KWH.js";
8
+ import "./chunk-UEIQKG5P.js";
9
9
  import "./chunk-X5YCWKNS.js";
10
10
  import "./chunk-LBGHZLLH.js";
11
11
  import "./chunk-BGTEIA2S.js";
@@ -16,8 +16,8 @@ import {
16
16
  } from "./chunk-AIJE3RYH.js";
17
17
  import "./chunk-TMUBLQFC.js";
18
18
  import "./chunk-F4PMNP7S.js";
19
+ import "./chunk-PXJ4NOP4.js";
19
20
  import "./chunk-EU3WWTFH.js";
20
- import "./chunk-SVSKQYFH.js";
21
21
  import "./chunk-YQ3SOPBI.js";
22
22
  import "./chunk-ZPIZLTWU.js";
23
23
  import "./chunk-RYIREJAW.js";
@@ -204,4 +204,4 @@ async function runServe(options) {
204
204
  export {
205
205
  runServe
206
206
  };
207
- //# sourceMappingURL=serve-54KALE6R.js.map
207
+ //# sourceMappingURL=serve-ZRTWVOL2.js.map