openfox 2.0.44 → 2.0.45

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-QOZ2DIWF.js";
6
6
  import {
7
7
  runChatTurn
8
- } from "./chunk-A45RDSCQ.js";
9
- import "./chunk-H72PI4S5.js";
8
+ } from "./chunk-JREYASTD.js";
9
+ import "./chunk-CTGMHRHD.js";
10
10
  import "./chunk-LBGHZLLH.js";
11
11
  import "./chunk-PBGOZMVY.js";
12
12
  import "./chunk-VRGRAQDG.js";
@@ -30,7 +30,7 @@ import "./chunk-Z4FMBCJO.js";
30
30
  import "./chunk-Z6W4YHJB.js";
31
31
  import "./chunk-K44MW7JJ.js";
32
32
  import "./chunk-YD6NDTKF.js";
33
- import "./chunk-EZ3BPIUV.js";
33
+ import "./chunk-K3NOKF5A.js";
34
34
  import "./chunk-CQGTEGKL.js";
35
35
  import "./chunk-V4IE7HJY.js";
36
36
  import "./chunk-5WRI5ZAA.js";
@@ -154,4 +154,4 @@ export {
154
154
  startChatSession,
155
155
  stopSessionExecution
156
156
  };
157
- //# sourceMappingURL=chat-handler-XAJ2MZRG.js.map
157
+ //# sourceMappingURL=chat-handler-N455RNSL.js.map
@@ -21,7 +21,7 @@ import {
21
21
  tokenFromPassword,
22
22
  verifyPassword,
23
23
  workflowExists
24
- } from "./chunk-AJDU5GID.js";
24
+ } from "./chunk-IPTJ3MYR.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-H72PI4S5.js";
64
+ } from "./chunk-CTGMHRHD.js";
65
65
  import {
66
66
  getPathSeparator,
67
67
  isAbsolutePath
@@ -3837,7 +3837,7 @@ import { Router as Router7 } from "express";
3837
3837
  import { spawn as spawn2 } from "child_process";
3838
3838
 
3839
3839
  // src/constants.ts
3840
- var VERSION = "2.0.44";
3840
+ var VERSION = "2.0.45";
3841
3841
 
3842
3842
  // src/server/routes/auto-update.ts
3843
3843
  var updateInProgress = false;
@@ -4004,7 +4004,7 @@ async function createServerHandle(config4) {
4004
4004
  const mcpManager = new McpManager({
4005
4005
  onToolsDiscovered: async (name, tools) => {
4006
4006
  try {
4007
- const { loadGlobalConfig, saveGlobalConfig } = await import("./config-S5CF4QU4.js");
4007
+ const { loadGlobalConfig, saveGlobalConfig } = await import("./config-G5MVFHLP.js");
4008
4008
  const mode = config4.mode ?? "production";
4009
4009
  const globalConfig = await loadGlobalConfig(mode);
4010
4010
  const mcpServers2 = {
@@ -4034,7 +4034,7 @@ async function createServerHandle(config4) {
4034
4034
  setMcpTools(mcpTools);
4035
4035
  logger.info("MCP tools registered", { count: mcpTools.length });
4036
4036
  }
4037
- const { signalMcpReady } = await import("./server-EJQIYEXN.js");
4037
+ const { signalMcpReady } = await import("./server-RRS5ZQ7I.js");
4038
4038
  signalMcpReady();
4039
4039
  });
4040
4040
  const app = express();
@@ -4227,7 +4227,7 @@ async function createServerHandle(config4) {
4227
4227
  app.get("/api/sessions/:id", async (req, res) => {
4228
4228
  const { getEventStore: getEventStore2 } = await import("./events-7RIPFG62.js");
4229
4229
  const { buildMessagesFromStoredEvents } = await import("./folding-H5C6HS7O.js");
4230
- const { getPendingQuestionsForSession } = await import("./tools-3LE2M25T.js");
4230
+ const { getPendingQuestionsForSession } = await import("./tools-ZPKIMLNI.js");
4231
4231
  const session = sessionManager.getSession(req.params.id);
4232
4232
  if (!session) {
4233
4233
  return res.status(404).json({ error: "Session not found" });
@@ -4272,7 +4272,7 @@ async function createServerHandle(config4) {
4272
4272
  const provider = providerManager.getProviders().find((p) => p.id === providerId);
4273
4273
  const resolvedModel = model ?? provider?.models?.[0]?.id ?? "auto";
4274
4274
  sessionManager.setSessionProvider(sessionId, providerId, resolvedModel);
4275
- const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-S5CF4QU4.js");
4275
+ const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-G5MVFHLP.js");
4276
4276
  const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
4277
4277
  const updatedConfig = setDefaultModelSelection(globalConfig, providerId, resolvedModel);
4278
4278
  await saveGlobalConfig(config4.mode ?? "production", updatedConfig);
@@ -4378,7 +4378,7 @@ async function createServerHandle(config4) {
4378
4378
  if (!callId || approved === void 0) {
4379
4379
  return res.status(400).json({ error: "callId and approved are required" });
4380
4380
  }
4381
- const { providePathConfirmation } = await import("./tools-3LE2M25T.js");
4381
+ const { providePathConfirmation } = await import("./tools-ZPKIMLNI.js");
4382
4382
  const result = providePathConfirmation(callId, approved, alwaysAllow);
4383
4383
  if (!result.found) {
4384
4384
  return res.status(404).json({ error: "No pending path confirmation with that ID" });
@@ -4386,7 +4386,7 @@ async function createServerHandle(config4) {
4386
4386
  const { getEventStore: getEventStore2 } = await import("./events-7RIPFG62.js");
4387
4387
  const { buildMessagesFromStoredEvents, foldPendingConfirmations } = await import("./folding-H5C6HS7O.js");
4388
4388
  const { createSessionStateMessage } = await import("./protocol-CTNE3ANP.js");
4389
- const { getPendingQuestionsForSession } = await import("./tools-3LE2M25T.js");
4389
+ const { getPendingQuestionsForSession } = await import("./tools-ZPKIMLNI.js");
4390
4390
  const eventStore = getEventStore2();
4391
4391
  const events = eventStore.getEvents(sessionId);
4392
4392
  const messages = buildMessagesFromStoredEvents(events);
@@ -4407,7 +4407,7 @@ async function createServerHandle(config4) {
4407
4407
  if (!skip && typeof answer !== "string") {
4408
4408
  return res.status(400).json({ error: "answer is required when not skipping" });
4409
4409
  }
4410
- const { provideAnswer } = await import("./tools-3LE2M25T.js");
4410
+ const { provideAnswer } = await import("./tools-ZPKIMLNI.js");
4411
4411
  const found = provideAnswer(callId, answer ?? "", skip ?? false);
4412
4412
  if (!found) {
4413
4413
  return res.status(404).json({ error: "No pending question with that ID" });
@@ -4443,8 +4443,8 @@ async function createServerHandle(config4) {
4443
4443
  if (!session) {
4444
4444
  return res.status(404).json({ error: "Session not found" });
4445
4445
  }
4446
- const { stopSessionExecution } = await import("./chat-handler-XAJ2MZRG.js");
4447
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-3LE2M25T.js");
4446
+ const { stopSessionExecution } = await import("./chat-handler-N455RNSL.js");
4447
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-ZPKIMLNI.js");
4448
4448
  const queuedMessages = sessionManager.getQueueState(sessionId);
4449
4449
  sessionManager.clearMessageQueue(sessionId);
4450
4450
  stopSessionExecution(sessionId, sessionManager);
@@ -4555,7 +4555,7 @@ async function createServerHandle(config4) {
4555
4555
  let visionFallback;
4556
4556
  let globalWorkdir;
4557
4557
  try {
4558
- const { loadGlobalConfig, getVisionFallback } = await import("./config-S5CF4QU4.js");
4558
+ const { loadGlobalConfig, getVisionFallback } = await import("./config-G5MVFHLP.js");
4559
4559
  const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
4560
4560
  const fallback = getVisionFallback(globalConfig);
4561
4561
  if (fallback) {
@@ -4768,7 +4768,7 @@ async function createServerHandle(config4) {
4768
4768
  return res.status(400).json({ error: "name, url, and backend are required" });
4769
4769
  }
4770
4770
  try {
4771
- const { loadGlobalConfig, saveGlobalConfig, addProvider, setDefaultModelSelection } = await import("./config-S5CF4QU4.js");
4771
+ const { loadGlobalConfig, saveGlobalConfig, addProvider, setDefaultModelSelection } = await import("./config-G5MVFHLP.js");
4772
4772
  const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
4773
4773
  const providerBackend = backend;
4774
4774
  const providerModels = modelConfigs?.length ? buildModelConfigs(modelConfigs) : model ? [{ id: model, contextWindow: 2e5, source: "user" }] : [];
@@ -4806,7 +4806,7 @@ async function createServerHandle(config4) {
4806
4806
  app.post("/api/init/config", async (req, res) => {
4807
4807
  const { workdir, visionFallback } = req.body;
4808
4808
  try {
4809
- const { loadGlobalConfig, saveGlobalConfig } = await import("./config-S5CF4QU4.js");
4809
+ const { loadGlobalConfig, saveGlobalConfig } = await import("./config-G5MVFHLP.js");
4810
4810
  const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
4811
4811
  const updatedConfig = {
4812
4812
  ...globalConfig,
@@ -4834,7 +4834,7 @@ async function createServerHandle(config4) {
4834
4834
  });
4835
4835
  app.delete("/api/providers/:id", async (req, res) => {
4836
4836
  const { id } = req.params;
4837
- const { loadGlobalConfig, saveGlobalConfig, removeProvider } = await import("./config-S5CF4QU4.js");
4837
+ const { loadGlobalConfig, saveGlobalConfig, removeProvider } = await import("./config-G5MVFHLP.js");
4838
4838
  const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
4839
4839
  const updatedConfig = removeProvider(globalConfig, id);
4840
4840
  await saveGlobalConfig(config4.mode ?? "production", updatedConfig);
@@ -4846,7 +4846,7 @@ async function createServerHandle(config4) {
4846
4846
  const { id } = req.params;
4847
4847
  const { isLocal } = req.body;
4848
4848
  try {
4849
- const { loadGlobalConfig, saveGlobalConfig, updateProvider } = await import("./config-S5CF4QU4.js");
4849
+ const { loadGlobalConfig, saveGlobalConfig, updateProvider } = await import("./config-G5MVFHLP.js");
4850
4850
  const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
4851
4851
  const provider = globalConfig.providers.find((p) => p.id === id);
4852
4852
  if (!provider) {
@@ -4875,7 +4875,7 @@ async function createServerHandle(config4) {
4875
4875
  models: modelConfigs
4876
4876
  } = req.body;
4877
4877
  try {
4878
- const { loadGlobalConfig, saveGlobalConfig, updateProvider } = await import("./config-S5CF4QU4.js");
4878
+ const { loadGlobalConfig, saveGlobalConfig, updateProvider } = await import("./config-G5MVFHLP.js");
4879
4879
  const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
4880
4880
  const provider = globalConfig.providers.find((p) => p.id === id);
4881
4881
  if (!provider) {
@@ -4913,7 +4913,7 @@ async function createServerHandle(config4) {
4913
4913
  return res.status(400).json({ error: result.error });
4914
4914
  }
4915
4915
  const llmClient = getLLMClient();
4916
- const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-S5CF4QU4.js");
4916
+ const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-G5MVFHLP.js");
4917
4917
  const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
4918
4918
  const updatedConfig = setDefaultModelSelection(globalConfig, id, llmClient.getModel());
4919
4919
  await saveGlobalConfig(config4.mode ?? "production", updatedConfig);
@@ -4940,7 +4940,7 @@ async function createServerHandle(config4) {
4940
4940
  });
4941
4941
  async function rebuildMcpTools() {
4942
4942
  const { createMcpTools: createMcpTools2 } = await import("./tool-adapter-MOGEI6TP.js");
4943
- const { setMcpTools: setMcpTools2 } = await import("./tools-3LE2M25T.js");
4943
+ const { setMcpTools: setMcpTools2 } = await import("./tools-ZPKIMLNI.js");
4944
4944
  const mcpTools = createMcpTools2(mcpManager);
4945
4945
  setMcpTools2(mcpTools);
4946
4946
  }
@@ -5002,7 +5002,7 @@ async function createServerHandle(config4) {
5002
5002
  };
5003
5003
  await mcpManager.addServer(name, serverCfg);
5004
5004
  const server = mcpManager.getServer(name);
5005
- const { loadGlobalConfig, saveGlobalConfig } = await import("./config-S5CF4QU4.js");
5005
+ const { loadGlobalConfig, saveGlobalConfig } = await import("./config-G5MVFHLP.js");
5006
5006
  const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
5007
5007
  const updatedMcpServers = { ...globalConfig.mcpServers ?? {}, [name]: serverCfg };
5008
5008
  await saveGlobalConfig(config4.mode ?? "production", {
@@ -5028,7 +5028,7 @@ async function createServerHandle(config4) {
5028
5028
  return res.status(404).json({ error: `MCP server '${name}' not found` });
5029
5029
  }
5030
5030
  mcpManager.removeServer(name);
5031
- const { loadGlobalConfig, saveGlobalConfig } = await import("./config-S5CF4QU4.js");
5031
+ const { loadGlobalConfig, saveGlobalConfig } = await import("./config-G5MVFHLP.js");
5032
5032
  const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
5033
5033
  const updatedMcpServers = { ...globalConfig.mcpServers ?? {} };
5034
5034
  delete updatedMcpServers[name];
@@ -5053,7 +5053,7 @@ async function createServerHandle(config4) {
5053
5053
  await mcpManager.setToolEnabled(name, toolName, enabled);
5054
5054
  const server = mcpManager.getServer(name);
5055
5055
  if (server) {
5056
- const { loadGlobalConfig, saveGlobalConfig } = await import("./config-S5CF4QU4.js");
5056
+ const { loadGlobalConfig, saveGlobalConfig } = await import("./config-G5MVFHLP.js");
5057
5057
  const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
5058
5058
  const mcpServers2 = { ...globalConfig.mcpServers ?? {} };
5059
5059
  const serverCfg = mcpServers2[name];
@@ -5248,7 +5248,7 @@ async function createServerHandle(config4) {
5248
5248
  const state = sessionManager.getContextState(sessionId);
5249
5249
  wssExports.broadcastForSession(sessionId, createContextStateMessage(state));
5250
5250
  });
5251
- const { QueueProcessor } = await import("./processor-QOV6XGBF.js");
5251
+ const { QueueProcessor } = await import("./processor-X53RROTI.js");
5252
5252
  const queueProcessor = new QueueProcessor({
5253
5253
  sessionManager,
5254
5254
  providerManager,
@@ -5323,4 +5323,4 @@ export {
5323
5323
  createServerHandle,
5324
5324
  createServer
5325
5325
  };
5326
- //# sourceMappingURL=chunk-33HVSYWA.js.map
5326
+ //# sourceMappingURL=chunk-4GBKQZ2U.js.map
@@ -71,7 +71,7 @@ import {
71
71
  import {
72
72
  loadGlobalConfig,
73
73
  saveGlobalConfig
74
- } from "./chunk-EZ3BPIUV.js";
74
+ } from "./chunk-K3NOKF5A.js";
75
75
  import {
76
76
  getGlobalConfigDir
77
77
  } from "./chunk-CQGTEGKL.js";
@@ -2938,7 +2938,7 @@ async function describeImageFromDataUrl(dataUrl, visionModel, options) {
2938
2938
  import { createHash as createHash2 } from "crypto";
2939
2939
  async function loadVisionModelFromGlobalConfig() {
2940
2940
  try {
2941
- const { loadGlobalConfig: loadGlobalConfig2, getVisionFallback } = await import("./config-S5CF4QU4.js");
2941
+ const { loadGlobalConfig: loadGlobalConfig2, getVisionFallback } = await import("./config-G5MVFHLP.js");
2942
2942
  const runtimeConfig = getRuntimeConfig();
2943
2943
  const mode = runtimeConfig.mode ?? "production";
2944
2944
  const globalConfig = await loadGlobalConfig2(mode);
@@ -3452,7 +3452,7 @@ var callSubAgentTool = {
3452
3452
  };
3453
3453
  }
3454
3454
  try {
3455
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-3LE2M25T.js");
3455
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-ZPKIMLNI.js");
3456
3456
  const toolRegistry = getToolRegistryForAgent2(agentDef);
3457
3457
  const turnMetrics = new TurnMetrics();
3458
3458
  const result = await executeSubAgent({
@@ -4268,7 +4268,7 @@ function resolveAgentDef2(sessionManager, sessionId) {
4268
4268
  }
4269
4269
  async function buildCachedPrompt(sessionManager, sessionId, agentDef) {
4270
4270
  const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
4271
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-3LE2M25T.js");
4271
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-ZPKIMLNI.js");
4272
4272
  const tools = getToolRegistryForAgent2(agentDef).definitions;
4273
4273
  const toolFingerprint = getToolFingerprint(tools);
4274
4274
  const allAgents = await loadAllAgentsDefault();
@@ -4281,7 +4281,7 @@ async function buildCachedPrompt(sessionManager, sessionId, agentDef) {
4281
4281
  async function computeSessionHash(sessionManager, sessionId) {
4282
4282
  const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
4283
4283
  const agentDef = await resolveAgentDef2(sessionManager, sessionId);
4284
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-3LE2M25T.js");
4284
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-ZPKIMLNI.js");
4285
4285
  const tools = getToolRegistryForAgent2(agentDef).definitions;
4286
4286
  const toolFingerprint = getToolFingerprint(tools);
4287
4287
  return computeDynamicContextHash(instructionContent, skills, toolFingerprint);
@@ -4388,7 +4388,7 @@ var mcpConfigTool = createTool(
4388
4388
  await saveGlobalConfig(mcpConfigMode, { ...globalConfig, mcpServers: updated });
4389
4389
  }
4390
4390
  async function rebuildTools() {
4391
- const { setMcpTools: setMcpTools2 } = await import("./tools-3LE2M25T.js");
4391
+ const { setMcpTools: setMcpTools2 } = await import("./tools-ZPKIMLNI.js");
4392
4392
  const mcpTools = createMcpTools(mcpManagerForTools);
4393
4393
  setMcpTools2(mcpTools);
4394
4394
  }
@@ -5058,4 +5058,4 @@ export {
5058
5058
  getToolRegistryForAgent,
5059
5059
  createToolRegistry
5060
5060
  };
5061
- //# sourceMappingURL=chunk-H72PI4S5.js.map
5061
+ //# sourceMappingURL=chunk-CTGMHRHD.js.map
@@ -2,7 +2,7 @@ import {
2
2
  injectWorkflowKickoffIfNeeded,
3
3
  runAgentTurn,
4
4
  runChatTurn
5
- } from "./chunk-A45RDSCQ.js";
5
+ } from "./chunk-JREYASTD.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-H72PI4S5.js";
19
+ } from "./chunk-CTGMHRHD.js";
20
20
  import {
21
21
  getPlatformShell,
22
22
  onProcessEvent
@@ -2065,4 +2065,4 @@ export {
2065
2065
  signalMcpReady,
2066
2066
  createWebSocketServer
2067
2067
  };
2068
- //# sourceMappingURL=chunk-AJDU5GID.js.map
2068
+ //# sourceMappingURL=chunk-IPTJ3MYR.js.map
@@ -12,7 +12,7 @@ import {
12
12
  loadAllAgentsDefault,
13
13
  processEventsForConversation,
14
14
  runTopLevelAgentLoop
15
- } from "./chunk-H72PI4S5.js";
15
+ } from "./chunk-CTGMHRHD.js";
16
16
  import {
17
17
  TurnMetrics,
18
18
  WORKFLOW_KICKOFF_PROMPT,
@@ -310,4 +310,4 @@ export {
310
310
  runAgentTurn,
311
311
  injectWorkflowKickoffIfNeeded
312
312
  };
313
- //# sourceMappingURL=chunk-A45RDSCQ.js.map
313
+ //# sourceMappingURL=chunk-JREYASTD.js.map
@@ -78,6 +78,10 @@ var mcpServerSchema = z.object({
78
78
  disabledTools: z.array(z.string()).optional(),
79
79
  cachedTools: z.array(cachedToolSchema).optional()
80
80
  });
81
+ var llmConfigSchema = z.object({
82
+ timeout: z.number().optional(),
83
+ idleTimeout: z.number().optional()
84
+ });
81
85
  var defaultVisionFallback = {
82
86
  enabled: false,
83
87
  url: "http://localhost:11434",
@@ -95,6 +99,7 @@ var configSchema = z.object({
95
99
  logging: loggingSchema.default({ level: "error" }),
96
100
  database: databaseSchema.default({ path: "" }),
97
101
  workspace: workspaceSchema.default(() => ({ workdir: process.cwd() })),
102
+ llm: llmConfigSchema.optional(),
98
103
  visionFallback: visionFallbackSchema.optional()
99
104
  }).transform((data) => ({
100
105
  providers: data.providers ?? [],
@@ -106,6 +111,7 @@ var configSchema = z.object({
106
111
  logging: data.logging ?? { level: "error" },
107
112
  database: data.database ?? { path: "" },
108
113
  workspace: data.workspace ?? { workdir: process.cwd() },
114
+ llm: data.llm,
109
115
  visionFallback: data.visionFallback ?? defaultVisionFallback
110
116
  }));
111
117
  var oldLlmSchema = z.object({
@@ -239,6 +245,7 @@ async function saveGlobalConfig(mode, config) {
239
245
  logging: config.logging ?? { level: "error" },
240
246
  database: config.database ?? { path: "" },
241
247
  workspace: config.workspace ?? { workdir: process.cwd() },
248
+ llm: config.llm,
242
249
  visionFallback: config.visionFallback ?? defaultVisionFallback
243
250
  };
244
251
  await mkdir(dirname(configPath), { recursive: true });
@@ -270,6 +277,7 @@ function setDefaultModelSelection(config, providerId, model) {
270
277
  logging: config.logging ?? { level: "error" },
271
278
  database: config.database ?? { path: "" },
272
279
  workspace: config.workspace ?? { workdir: process.cwd() },
280
+ llm: config.llm,
273
281
  visionFallback: config.visionFallback ?? defaultVisionFallback
274
282
  };
275
283
  }
@@ -293,6 +301,7 @@ function addProvider(config, provider) {
293
301
  logging: config.logging ?? { level: "error" },
294
302
  database: config.database ?? { path: "" },
295
303
  workspace: config.workspace ?? { workdir: process.cwd() },
304
+ llm: config.llm,
296
305
  visionFallback: config.visionFallback ?? defaultVisionFallback
297
306
  };
298
307
  }
@@ -326,6 +335,7 @@ function removeProvider(config, providerId) {
326
335
  logging: config.logging ?? { level: "error" },
327
336
  database: config.database ?? { path: "" },
328
337
  workspace: config.workspace ?? { workdir: process.cwd() },
338
+ llm: config.llm,
329
339
  visionFallback: config.visionFallback ?? defaultVisionFallback
330
340
  };
331
341
  }
@@ -342,6 +352,7 @@ function activateProvider(config, providerId) {
342
352
  logging: config.logging ?? { level: "error" },
343
353
  database: config.database ?? { path: "" },
344
354
  workspace: config.workspace ?? { workdir: process.cwd() },
355
+ llm: config.llm,
345
356
  visionFallback: config.visionFallback ?? defaultVisionFallback
346
357
  };
347
358
  }
@@ -355,6 +366,7 @@ function activateProvider(config, providerId) {
355
366
  logging: config.logging ?? { level: "error" },
356
367
  database: config.database ?? { path: "" },
357
368
  workspace: config.workspace ?? { workdir: process.cwd() },
369
+ llm: config.llm,
358
370
  visionFallback: config.visionFallback ?? defaultVisionFallback
359
371
  };
360
372
  }
@@ -402,4 +414,4 @@ export {
402
414
  activateProvider,
403
415
  mergeConfigs
404
416
  };
405
- //# sourceMappingURL=chunk-EZ3BPIUV.js.map
417
+ //# sourceMappingURL=chunk-K3NOKF5A.js.map
@@ -39,7 +39,7 @@ Options:
39
39
  }
40
40
  async function runNetworkSetup(mode) {
41
41
  const { loadAuthConfig, saveAuthConfig, encryptPassword } = await import("./auth-YY5PJYSC.js");
42
- const { saveGlobalConfig } = await import("./config-S5CF4QU4.js");
42
+ const { saveGlobalConfig } = await import("./config-G5MVFHLP.js");
43
43
  const { getAuthKeyPath } = await import("./paths-F27V3S4I.js");
44
44
  const existingAuth = await loadAuthConfig(mode);
45
45
  if (existingAuth) {
@@ -106,7 +106,7 @@ async function runNetworkSetup(mode) {
106
106
  console.log("\u2713 Configuration saved!\n");
107
107
  }
108
108
  async function runConfig(mode) {
109
- const { loadGlobalConfig, getActiveProvider, getDefaultModel } = await import("./config-S5CF4QU4.js");
109
+ const { loadGlobalConfig, getActiveProvider, getDefaultModel } = await import("./config-G5MVFHLP.js");
110
110
  const { getGlobalConfigPath } = await import("./paths-F27V3S4I.js");
111
111
  const config = await loadGlobalConfig(mode);
112
112
  const configPath = getGlobalConfigPath(mode);
@@ -164,7 +164,7 @@ async function runCli(options) {
164
164
  break;
165
165
  }
166
166
  case "provider": {
167
- const { runProviderCommand } = await import("./provider-JDI3LVYF.js");
167
+ const { runProviderCommand } = await import("./provider-DLH5GJH2.js");
168
168
  const [, subcommand] = positionals;
169
169
  await runProviderCommand(mode, subcommand);
170
170
  break;
@@ -203,12 +203,12 @@ async function runCli(options) {
203
203
  break;
204
204
  }
205
205
  default: {
206
- const { configFileExists } = await import("./config-S5CF4QU4.js");
206
+ const { configFileExists } = await import("./config-G5MVFHLP.js");
207
207
  const configExists = await configFileExists(mode);
208
208
  if (!configExists) {
209
209
  await runNetworkSetup(mode);
210
210
  }
211
- const { runServe } = await import("./serve-6XZEFLFP.js");
211
+ const { runServe } = await import("./serve-XY327IVV.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-YUIR2I64.js.map
223
+ //# sourceMappingURL=chunk-OBKCUYR5.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-YUIR2I64.js";
4
+ } from "../chunk-OBKCUYR5.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-YUIR2I64.js";
4
+ } from "../chunk-OBKCUYR5.js";
5
5
  import "../chunk-XY3LESVZ.js";
6
6
  import {
7
7
  logger
@@ -13,7 +13,7 @@ import {
13
13
  saveGlobalConfig,
14
14
  setDefaultModelSelection,
15
15
  updateProvider
16
- } from "./chunk-EZ3BPIUV.js";
16
+ } from "./chunk-K3NOKF5A.js";
17
17
  import "./chunk-CQGTEGKL.js";
18
18
  import "./chunk-5WRI5ZAA.js";
19
19
  export {
@@ -32,4 +32,4 @@ export {
32
32
  setDefaultModelSelection,
33
33
  updateProvider
34
34
  };
35
- //# sourceMappingURL=config-S5CF4QU4.js.map
35
+ //# sourceMappingURL=config-G5MVFHLP.js.map
@@ -2,8 +2,8 @@ import {
2
2
  injectWorkflowKickoffIfNeeded,
3
3
  runAgentTurn,
4
4
  runChatTurn
5
- } from "./chunk-A45RDSCQ.js";
6
- import "./chunk-H72PI4S5.js";
5
+ } from "./chunk-JREYASTD.js";
6
+ import "./chunk-CTGMHRHD.js";
7
7
  import "./chunk-LBGHZLLH.js";
8
8
  import "./chunk-PBGOZMVY.js";
9
9
  import "./chunk-VRGRAQDG.js";
@@ -28,7 +28,7 @@ import "./chunk-Z4FMBCJO.js";
28
28
  import "./chunk-Z6W4YHJB.js";
29
29
  import "./chunk-K44MW7JJ.js";
30
30
  import "./chunk-YD6NDTKF.js";
31
- import "./chunk-EZ3BPIUV.js";
31
+ import "./chunk-K3NOKF5A.js";
32
32
  import "./chunk-CQGTEGKL.js";
33
33
  import "./chunk-V4IE7HJY.js";
34
34
  import "./chunk-5WRI5ZAA.js";
@@ -43,4 +43,4 @@ export {
43
43
  runAgentTurn,
44
44
  runChatTurn
45
45
  };
46
- //# sourceMappingURL=orchestrator-YNVVDDPW.js.map
46
+ //# sourceMappingURL=orchestrator-5S2D5XWE.js.map
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "2.0.44",
3
+ "version": "2.0.45",
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-QOZ2DIWF.js";
6
- import "./chunk-H72PI4S5.js";
6
+ import "./chunk-CTGMHRHD.js";
7
7
  import "./chunk-LBGHZLLH.js";
8
8
  import "./chunk-PBGOZMVY.js";
9
9
  import "./chunk-VRGRAQDG.js";
@@ -28,7 +28,7 @@ import {
28
28
  logger
29
29
  } from "./chunk-K44MW7JJ.js";
30
30
  import "./chunk-YD6NDTKF.js";
31
- import "./chunk-EZ3BPIUV.js";
31
+ import "./chunk-K3NOKF5A.js";
32
32
  import "./chunk-CQGTEGKL.js";
33
33
  import "./chunk-V4IE7HJY.js";
34
34
  import "./chunk-5WRI5ZAA.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-YNVVDDPW.js");
177
+ const { runChatTurn } = await import("./orchestrator-5S2D5XWE.js");
178
178
  const runChatTurnParams = buildRunChatTurnParams({
179
179
  sessionManager,
180
180
  sessionId,
@@ -224,4 +224,4 @@ var QueueProcessor = class {
224
224
  export {
225
225
  QueueProcessor
226
226
  };
227
- //# sourceMappingURL=processor-QOV6XGBF.js.map
227
+ //# sourceMappingURL=processor-X53RROTI.js.map
@@ -28,7 +28,7 @@ import {
28
28
  loadGlobalConfig,
29
29
  removeProvider,
30
30
  saveGlobalConfig
31
- } from "./chunk-EZ3BPIUV.js";
31
+ } from "./chunk-K3NOKF5A.js";
32
32
  import "./chunk-CQGTEGKL.js";
33
33
  import "./chunk-V4IE7HJY.js";
34
34
  import "./chunk-5WRI5ZAA.js";
@@ -270,7 +270,7 @@ async function runProviderAdd(mode) {
270
270
  isActive: makeActive
271
271
  });
272
272
  if (makeActive) {
273
- const { setDefaultModelSelection } = await import("./config-S5CF4QU4.js");
273
+ const { setDefaultModelSelection } = await import("./config-G5MVFHLP.js");
274
274
  newConfig = setDefaultModelSelection(
275
275
  newConfig,
276
276
  newConfig.providers[newConfig.providers.length - 1].id,
@@ -398,4 +398,4 @@ export {
398
398
  runProviderRemove,
399
399
  runProviderUse
400
400
  };
401
- //# sourceMappingURL=provider-JDI3LVYF.js.map
401
+ //# sourceMappingURL=provider-DLH5GJH2.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  VERSION,
3
3
  createServer
4
- } from "./chunk-33HVSYWA.js";
5
- import "./chunk-AJDU5GID.js";
6
- import "./chunk-A45RDSCQ.js";
7
- import "./chunk-H72PI4S5.js";
4
+ } from "./chunk-4GBKQZ2U.js";
5
+ import "./chunk-IPTJ3MYR.js";
6
+ import "./chunk-JREYASTD.js";
7
+ import "./chunk-CTGMHRHD.js";
8
8
  import "./chunk-LBGHZLLH.js";
9
9
  import "./chunk-PBGOZMVY.js";
10
10
  import "./chunk-VRGRAQDG.js";
@@ -37,7 +37,7 @@ import {
37
37
  getActiveProvider,
38
38
  getDefaultModel,
39
39
  loadGlobalConfig
40
- } from "./chunk-EZ3BPIUV.js";
40
+ } from "./chunk-K3NOKF5A.js";
41
41
  import {
42
42
  ensureDataDirExists,
43
43
  getDatabasePath,
@@ -147,6 +147,8 @@ async function runServe(options) {
147
147
  const isEnvBackendExplicit = envBackend !== "unknown";
148
148
  const isEnvModelExplicit = !!envModel;
149
149
  const isEnvUrlExplicit = envUrl !== "http://localhost:8000/v1";
150
+ const isEnvTimeoutExplicit = env.llm.timeout !== 3e5;
151
+ const isEnvIdleTimeoutExplicit = env.llm.idleTimeout !== 3e5;
150
152
  const providerUrl = activeProvider?.url ?? envUrl;
151
153
  const defaultModel = getDefaultModel(globalConfig) ?? envModel;
152
154
  const providerBackend = activeProvider?.backend ?? envBackend;
@@ -156,7 +158,9 @@ async function runServe(options) {
156
158
  ...env.llm,
157
159
  baseUrl: isEnvUrlExplicit ? envUrl : providerUrl,
158
160
  model: isEnvModelExplicit ? envModel : defaultModel,
159
- backend: isEnvBackendExplicit ? envBackend : providerBackend
161
+ backend: isEnvBackendExplicit ? envBackend : providerBackend,
162
+ timeout: isEnvTimeoutExplicit ? env.llm.timeout : globalConfig.llm?.timeout ?? env.llm.timeout,
163
+ idleTimeout: isEnvIdleTimeoutExplicit ? env.llm.idleTimeout : globalConfig.llm?.idleTimeout ?? env.llm.idleTimeout
160
164
  },
161
165
  server: {
162
166
  ...env.server,
@@ -200,4 +204,4 @@ async function runServe(options) {
200
204
  export {
201
205
  runServe
202
206
  };
203
- //# sourceMappingURL=serve-6XZEFLFP.js.map
207
+ //# sourceMappingURL=serve-XY327IVV.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  createServer,
3
3
  createServerHandle
4
- } from "../chunk-33HVSYWA.js";
5
- import "../chunk-AJDU5GID.js";
6
- import "../chunk-A45RDSCQ.js";
7
- import "../chunk-H72PI4S5.js";
4
+ } from "../chunk-4GBKQZ2U.js";
5
+ import "../chunk-IPTJ3MYR.js";
6
+ import "../chunk-JREYASTD.js";
7
+ import "../chunk-CTGMHRHD.js";
8
8
  import "../chunk-LBGHZLLH.js";
9
9
  import "../chunk-PBGOZMVY.js";
10
10
  import "../chunk-VRGRAQDG.js";
@@ -29,7 +29,7 @@ import "../chunk-IEDE6VK4.js";
29
29
  import "../chunk-K44MW7JJ.js";
30
30
  import "../chunk-VUQCQXXJ.js";
31
31
  import "../chunk-YD6NDTKF.js";
32
- import "../chunk-EZ3BPIUV.js";
32
+ import "../chunk-K3NOKF5A.js";
33
33
  import "../chunk-CQGTEGKL.js";
34
34
  import "../chunk-V4IE7HJY.js";
35
35
  import "../chunk-5WRI5ZAA.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  createWebSocketServer,
3
3
  signalMcpReady
4
- } from "./chunk-AJDU5GID.js";
5
- import "./chunk-A45RDSCQ.js";
6
- import "./chunk-H72PI4S5.js";
4
+ } from "./chunk-IPTJ3MYR.js";
5
+ import "./chunk-JREYASTD.js";
6
+ import "./chunk-CTGMHRHD.js";
7
7
  import "./chunk-LBGHZLLH.js";
8
8
  import "./chunk-PBGOZMVY.js";
9
9
  import "./chunk-VRGRAQDG.js";
@@ -27,7 +27,7 @@ import "./chunk-IEDE6VK4.js";
27
27
  import "./chunk-K44MW7JJ.js";
28
28
  import "./chunk-VUQCQXXJ.js";
29
29
  import "./chunk-YD6NDTKF.js";
30
- import "./chunk-EZ3BPIUV.js";
30
+ import "./chunk-K3NOKF5A.js";
31
31
  import "./chunk-CQGTEGKL.js";
32
32
  import "./chunk-V4IE7HJY.js";
33
33
  import "./chunk-5WRI5ZAA.js";
@@ -35,4 +35,4 @@ export {
35
35
  createWebSocketServer,
36
36
  signalMcpReady
37
37
  };
38
- //# sourceMappingURL=server-EJQIYEXN.js.map
38
+ //# sourceMappingURL=server-RRS5ZQ7I.js.map
@@ -12,7 +12,7 @@ import {
12
12
  setMcpTools,
13
13
  stepDoneTool,
14
14
  validateToolAction
15
- } from "./chunk-H72PI4S5.js";
15
+ } from "./chunk-CTGMHRHD.js";
16
16
  import "./chunk-LBGHZLLH.js";
17
17
  import "./chunk-PBGOZMVY.js";
18
18
  import "./chunk-VRGRAQDG.js";
@@ -35,7 +35,7 @@ import "./chunk-Z4FMBCJO.js";
35
35
  import "./chunk-Z6W4YHJB.js";
36
36
  import "./chunk-K44MW7JJ.js";
37
37
  import "./chunk-YD6NDTKF.js";
38
- import "./chunk-EZ3BPIUV.js";
38
+ import "./chunk-K3NOKF5A.js";
39
39
  import "./chunk-CQGTEGKL.js";
40
40
  import "./chunk-V4IE7HJY.js";
41
41
  import "./chunk-5WRI5ZAA.js";
@@ -58,4 +58,4 @@ export {
58
58
  stepDoneTool,
59
59
  validateToolAction
60
60
  };
61
- //# sourceMappingURL=tools-3LE2M25T.js.map
61
+ //# sourceMappingURL=tools-ZPKIMLNI.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "2.0.44",
3
+ "version": "2.0.45",
4
4
  "description": "Local-LLM-first agentic coding assistant",
5
5
  "type": "module",
6
6
  "bin": {