openfox 2.0.125 → 2.0.127

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.
Files changed (33) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/CHANGELOG.md +20 -0
  3. package/dist/{chat-handler-HJ2RBGNV.js → chat-handler-63VGKLM5.js} +5 -5
  4. package/dist/{chunk-7DO4JMGT.js → chunk-7CBVJAN5.js} +3 -3
  5. package/dist/{chunk-NBOSTFTS.js → chunk-FGK6KPJ5.js} +3 -3
  6. package/dist/{chunk-KETVPTMI.js → chunk-GKDJW4VP.js} +3 -3
  7. package/dist/{chunk-WMAW37GV.js → chunk-IE2OMJIH.js} +6 -6
  8. package/dist/{chunk-O5A3XKE5.js → chunk-IQYI7TWF.js} +22 -15
  9. package/dist/chunk-QDO3BEGW.js +7 -0
  10. package/dist/{chunk-KSXCOHHW.js → chunk-R5FAEKXQ.js} +16 -1
  11. package/dist/{chunk-X2J6BAU7.js → chunk-TY3ONJE4.js} +7 -7
  12. package/dist/{chunk-T2RDFRNK.js → chunk-TZJU6F6Z.js} +75 -42
  13. package/dist/cli/dev.js +1 -1
  14. package/dist/cli/index.js +1 -1
  15. package/dist/{config-TUCHLIWD.js → config-LOK3LXFH.js} +4 -2
  16. package/dist/{dynamic-context-5MQWJTJC.js → dynamic-context-KXZ6VJDE.js} +2 -2
  17. package/dist/{launch-ZHAFPRCP.js → launch-DYWJD6L5.js} +6 -6
  18. package/dist/{orchestrator-KKUXIE3Q.js → orchestrator-LBQWRAXC.js} +5 -5
  19. package/dist/package.json +1 -1
  20. package/dist/{processor-HETUXJFH.js → processor-WP2LQOEV.js} +4 -4
  21. package/dist/{provider-6LUA73HF.js → provider-726LD2KU.js} +3 -3
  22. package/dist/{serve-UVHJHYF3.js → serve-OY3Y5PXK.js} +9 -9
  23. package/dist/server/index.js +8 -8
  24. package/dist/{server-E4DOH4OF.js → server-DMHNVEW4.js} +7 -7
  25. package/dist/{tools-AUHL5MPG.js → tools-CZHV2FAD.js} +3 -3
  26. package/dist/{update-45ZRDWUB.js → update-RCNZQCFG.js} +2 -2
  27. package/dist/web/assets/index-B63UkA7X.js +310 -0
  28. package/dist/web/assets/{index-DFMllFkv.css → index-CbX8veVW.css} +1 -1
  29. package/dist/web/index.html +2 -2
  30. package/dist/web/sw.js +1 -1
  31. package/package.json +1 -1
  32. package/dist/chunk-GZUD5E6E.js +0 -7
  33. package/dist/web/assets/index-DQ3Wg2OF.js +0 -324
@@ -16,10 +16,10 @@ import {
16
16
  terminalManager,
17
17
  tokenFromPassword,
18
18
  verifyPassword
19
- } from "./chunk-WMAW37GV.js";
19
+ } from "./chunk-IE2OMJIH.js";
20
20
  import {
21
21
  TEMPLATE_VARIABLES
22
- } from "./chunk-7DO4JMGT.js";
22
+ } from "./chunk-7CBVJAN5.js";
23
23
  import {
24
24
  createToolRegistry,
25
25
  devServerManager,
@@ -33,7 +33,7 @@ import {
33
33
  setMcpManagerForTools,
34
34
  setMcpTools,
35
35
  setNotifyMcpServersChanged
36
- } from "./chunk-O5A3XKE5.js";
36
+ } from "./chunk-IQYI7TWF.js";
37
37
  import {
38
38
  deleteOwnedSkill,
39
39
  deleteProjectSkill,
@@ -174,7 +174,7 @@ import {
174
174
  } from "./chunk-T3JVYO3Z.js";
175
175
  import {
176
176
  VERSION
177
- } from "./chunk-GZUD5E6E.js";
177
+ } from "./chunk-QDO3BEGW.js";
178
178
  import {
179
179
  agentExists,
180
180
  deleteAgent,
@@ -370,14 +370,14 @@ var RULES = [
370
370
  tools: [
371
371
  {
372
372
  name: "session_metadata",
373
- arguments: { action: "update", key: "criteria", id: "0", description: "Updated description" }
373
+ arguments: { action: "update", key: "criteria", id: "1", description: "Updated description" }
374
374
  }
375
375
  ],
376
376
  response: "Updated the criterion."
377
377
  },
378
378
  {
379
379
  match: /session_metadata.*action\s*["']remove["']/i,
380
- tools: [{ name: "session_metadata", arguments: { action: "remove", key: "criteria", id: "0" } }],
380
+ tools: [{ name: "session_metadata", arguments: { action: "remove", key: "criteria", id: "1" } }],
381
381
  response: "Removed the criterion."
382
382
  },
383
383
  {
@@ -2749,6 +2749,12 @@ function canCompact(currentTokens, maxTokens) {
2749
2749
  }
2750
2750
 
2751
2751
  // src/server/session/manager.ts
2752
+ var WORKSPACE_COMMIT_RECIPE = `
2753
+ To land changes from this workspace into the original repo (its origin is the local repo itself):
2754
+ 1. Commit your work.
2755
+ 2. If the original repo has this branch checked out, a direct push is refused \u2014 push to a temp branch, then in the original repo merge it back and clean up: \`git push origin HEAD:<feature-slug>\` then \`git merge --ff-only <feature-slug> && git branch -d <feature-slug>\`
2756
+ 3. If the original repo is on a different branch, push directly instead: \`git push origin <branch>\`
2757
+ 4. To reach the remote, push from the original repo: \`git push origin <branch>\``;
2752
2758
  var SessionManager = class {
2753
2759
  events = new EventEmitter();
2754
2760
  activeSessionId = null;
@@ -4014,9 +4020,10 @@ var SessionManager = class {
4014
4020
  }
4015
4021
  }
4016
4022
  const wsLabel = target === "original" ? "original" : target;
4023
+ const commitHint = target === "original" ? "" : WORKSPACE_COMMIT_RECIPE;
4017
4024
  const reminderContent = `<system-reminder>
4018
4025
  This session is now operating in workspace "${wsLabel}" on branch "${actualBranch ?? "unknown"}" at ${effectiveWorkdir}.${stalenessHint}
4019
- All file and git operations should use this directory.
4026
+ All file and git operations should use this directory.${commitHint}
4020
4027
  </system-reminder>`;
4021
4028
  this.addMessage(sessionId, {
4022
4029
  role: "user",
@@ -5494,7 +5501,7 @@ function createProviderAuthRoutes(config3, providerManager, registry) {
5494
5501
  try {
5495
5502
  const { challenge, completion } = await adapter.beginLogin({ providerId: provider.id });
5496
5503
  void completion.then(async ({ credentialRef }) => {
5497
- const { loadGlobalConfig, saveGlobalConfig, updateProvider } = await import("./config-TUCHLIWD.js");
5504
+ const { loadGlobalConfig, saveGlobalConfig, updateProvider } = await import("./config-LOK3LXFH.js");
5498
5505
  const globalConfig = await loadGlobalConfig(config3.mode ?? "production", config3.globalConfigPath);
5499
5506
  const updatedConfig = updateProvider(globalConfig, provider.id, { credentialRef, authAdapter: adapter.id });
5500
5507
  await saveGlobalConfig(config3.mode ?? "production", updatedConfig, config3.globalConfigPath);
@@ -5531,7 +5538,7 @@ function createProviderAuthRoutes(config3, providerManager, registry) {
5531
5538
  const ref = provider.credentialRef ?? provider.id;
5532
5539
  await adapter.logout(ref);
5533
5540
  }
5534
- const { loadGlobalConfig, saveGlobalConfig } = await import("./config-TUCHLIWD.js");
5541
+ const { loadGlobalConfig, saveGlobalConfig } = await import("./config-LOK3LXFH.js");
5535
5542
  const globalConfig = await loadGlobalConfig(config3.mode ?? "production", config3.globalConfigPath);
5536
5543
  const updatedConfig = {
5537
5544
  ...globalConfig,
@@ -6031,7 +6038,7 @@ async function createServerHandle(config3) {
6031
6038
  const mcpManager = new McpManager({
6032
6039
  onToolsDiscovered: async (name, tools) => {
6033
6040
  try {
6034
- const { loadGlobalConfig, saveGlobalConfig } = await import("./config-TUCHLIWD.js");
6041
+ const { loadGlobalConfig, saveGlobalConfig } = await import("./config-LOK3LXFH.js");
6035
6042
  const mode = config3.mode ?? "production";
6036
6043
  const globalConfig = await loadGlobalConfig(mode, config3.globalConfigPath);
6037
6044
  const mcpServers2 = {
@@ -6065,7 +6072,7 @@ async function createServerHandle(config3) {
6065
6072
  toolRegistry = createToolRegistry();
6066
6073
  logger.info("MCP tools registered", { count: mcpTools.length });
6067
6074
  }
6068
- const { signalMcpReady } = await import("./server-E4DOH4OF.js");
6075
+ const { signalMcpReady } = await import("./server-DMHNVEW4.js");
6069
6076
  signalMcpReady();
6070
6077
  });
6071
6078
  const app = express();
@@ -6263,7 +6270,7 @@ async function createServerHandle(config3) {
6263
6270
  app.use("/api", sessionFavoriteRouter);
6264
6271
  const { createTasksService } = await import("./service-BRKMLM4C.js");
6265
6272
  const { registerTaskRoutes } = await import("./tasks-DEUZ6BNS.js");
6266
- const { setTasksService } = await import("./tools-AUHL5MPG.js");
6273
+ const { setTasksService } = await import("./tools-CZHV2FAD.js");
6267
6274
  const tasksService = createTasksService({
6268
6275
  sessionManager,
6269
6276
  config: config3,
@@ -6592,7 +6599,7 @@ All file and git operations should use this branch.
6592
6599
  app.get("/api/sessions/:id", async (req, res) => {
6593
6600
  const { getEventStore: getEventStore2, combineEventsWithSnapshot } = await import("./events-GMHRX4LF.js");
6594
6601
  const { buildMessagesFromStoredEvents, foldPendingConfirmations } = await import("./folding-7K2GRPF4.js");
6595
- const { getPendingQuestionsForSession } = await import("./tools-AUHL5MPG.js");
6602
+ const { getPendingQuestionsForSession } = await import("./tools-CZHV2FAD.js");
6596
6603
  const { getMaxVisibleItems } = await import("./settings-VOWWO4VG.js");
6597
6604
  const session = sessionManager.getSession(req.params.id);
6598
6605
  if (!session) {
@@ -6621,7 +6628,7 @@ All file and git operations should use this branch.
6621
6628
  });
6622
6629
  app.get("/api/sessions/:id/status", async (req, res) => {
6623
6630
  const { projectSessionStatus } = await import("./session-status-6Q5B5PEN.js");
6624
- const { getPendingQuestionsForSession } = await import("./tools-AUHL5MPG.js");
6631
+ const { getPendingQuestionsForSession } = await import("./tools-CZHV2FAD.js");
6625
6632
  const { getEventStore: getEventStore2, combineEventsWithSnapshot } = await import("./events-GMHRX4LF.js");
6626
6633
  const { foldPendingConfirmations } = await import("./folding-7K2GRPF4.js");
6627
6634
  const sessionId = req.params["id"];
@@ -6653,8 +6660,8 @@ All file and git operations should use this branch.
6653
6660
  if (!session) {
6654
6661
  return res.status(404).json({ error: "Session not found" });
6655
6662
  }
6656
- const { stopSessionExecution } = await import("./chat-handler-HJ2RBGNV.js");
6657
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-AUHL5MPG.js");
6663
+ const { stopSessionExecution } = await import("./chat-handler-63VGKLM5.js");
6664
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-CZHV2FAD.js");
6658
6665
  sessionManager.clearMessageQueue(sessionId);
6659
6666
  stopSessionExecution(sessionId, sessionManager);
6660
6667
  abortSession(sessionId);
@@ -6765,7 +6772,7 @@ All file and git operations should use this branch.
6765
6772
  if (!result.success) {
6766
6773
  return res.status(500).json({ error: result.error ?? "Failed to set default model" });
6767
6774
  }
6768
- const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-TUCHLIWD.js");
6775
+ const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-LOK3LXFH.js");
6769
6776
  const globalConfig = await loadGlobalConfig(config3.mode ?? "production", config3.globalConfigPath);
6770
6777
  const updatedConfig = setDefaultModelSelection(globalConfig, providerId, model);
6771
6778
  await saveGlobalConfig(config3.mode ?? "production", updatedConfig, config3.globalConfigPath);
@@ -6931,7 +6938,7 @@ All file and git operations should use this branch.
6931
6938
  if (alwaysAllow !== void 0 && typeof alwaysAllow !== "boolean") {
6932
6939
  return res.status(400).json({ error: "alwaysAllow must be a boolean if provided" });
6933
6940
  }
6934
- const { providePathConfirmation, getConfirmationSessionId } = await import("./tools-AUHL5MPG.js");
6941
+ const { providePathConfirmation, getConfirmationSessionId } = await import("./tools-CZHV2FAD.js");
6935
6942
  const pendingSessionId = getConfirmationSessionId(callId);
6936
6943
  if (!pendingSessionId) {
6937
6944
  return res.status(404).json({ error: "No pending path confirmation with that ID" });
@@ -6946,7 +6953,7 @@ All file and git operations should use this branch.
6946
6953
  const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEvents } = await import("./events-GMHRX4LF.js");
6947
6954
  const { buildMessagesFromStoredEvents, foldPendingConfirmations } = await import("./folding-7K2GRPF4.js");
6948
6955
  const { createSessionStateMessage } = await import("./protocol-TLODRZSB.js");
6949
- const { getPendingQuestionsForSession } = await import("./tools-AUHL5MPG.js");
6956
+ const { getPendingQuestionsForSession } = await import("./tools-CZHV2FAD.js");
6950
6957
  const { getMaxVisibleItems } = await import("./settings-VOWWO4VG.js");
6951
6958
  const eventStore = getEventStore2();
6952
6959
  const { snapshot, events: eventsSinceSnapshot } = eventStore.getEventsSinceSnapshot(sessionId);
@@ -6984,7 +6991,7 @@ All file and git operations should use this branch.
6984
6991
  if (!skip && typeof answer !== "string") {
6985
6992
  return res.status(400).json({ error: "answer is required when not skipping" });
6986
6993
  }
6987
- const { provideAnswer } = await import("./tools-AUHL5MPG.js");
6994
+ const { provideAnswer } = await import("./tools-CZHV2FAD.js");
6988
6995
  const found = provideAnswer(callId, answer ?? "", skip ?? false);
6989
6996
  if (!found) {
6990
6997
  return res.status(404).json({ error: "No pending question with that ID" });
@@ -7050,7 +7057,7 @@ All file and git operations should use this branch.
7050
7057
  backend: activeProvider?.backend ?? llmClient.getBackend(),
7051
7058
  model: llmClient.getModel()
7052
7059
  };
7053
- const { runAgentTurn, TurnMetrics } = await import("./orchestrator-KKUXIE3Q.js");
7060
+ const { runAgentTurn, TurnMetrics } = await import("./orchestrator-LBQWRAXC.js");
7054
7061
  runAgentTurn(
7055
7062
  {
7056
7063
  sessionManager,
@@ -7088,8 +7095,8 @@ All file and git operations should use this branch.
7088
7095
  if (!session) {
7089
7096
  return res.status(404).json({ error: "Session not found" });
7090
7097
  }
7091
- const { stopSessionExecution } = await import("./chat-handler-HJ2RBGNV.js");
7092
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-AUHL5MPG.js");
7098
+ const { stopSessionExecution } = await import("./chat-handler-63VGKLM5.js");
7099
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-CZHV2FAD.js");
7093
7100
  const queuedMessages = sessionManager.getQueueState(sessionId);
7094
7101
  sessionManager.clearMessageQueue(sessionId);
7095
7102
  stopSessionExecution(sessionId, sessionManager);
@@ -7266,7 +7273,7 @@ All file and git operations should use this branch.
7266
7273
  let visionFallback;
7267
7274
  let globalWorkdir;
7268
7275
  try {
7269
- const { loadGlobalConfig, getVisionFallback } = await import("./config-TUCHLIWD.js");
7276
+ const { loadGlobalConfig, getVisionFallback } = await import("./config-LOK3LXFH.js");
7270
7277
  const globalConfig = await loadGlobalConfig(config3.mode ?? "production", config3.globalConfigPath);
7271
7278
  const fallback = getVisionFallback(globalConfig);
7272
7279
  if (fallback) {
@@ -7613,7 +7620,7 @@ All file and git operations should use this branch.
7613
7620
  return res.status(400).json({ error: "name, url, and backend are required" });
7614
7621
  }
7615
7622
  try {
7616
- const { loadGlobalConfig, saveGlobalConfig, addProvider, setDefaultModelSelection } = await import("./config-TUCHLIWD.js");
7623
+ const { loadGlobalConfig, saveGlobalConfig, addProvider, setDefaultModelSelection } = await import("./config-LOK3LXFH.js");
7617
7624
  const globalConfig = await loadGlobalConfig(config3.mode ?? "production", config3.globalConfigPath);
7618
7625
  const providerBackend = backend;
7619
7626
  const providerModels = modelConfigs?.length ? buildModelConfigs(modelConfigs) : model ? [{ id: model, contextWindow: 2e5, source: "user" }] : [];
@@ -7654,7 +7661,7 @@ All file and git operations should use this branch.
7654
7661
  app.post("/api/init/config", async (req, res) => {
7655
7662
  const { workdir, visionFallback } = req.body;
7656
7663
  try {
7657
- const { loadGlobalConfig, saveGlobalConfig } = await import("./config-TUCHLIWD.js");
7664
+ const { loadGlobalConfig, saveGlobalConfig } = await import("./config-LOK3LXFH.js");
7658
7665
  const globalConfig = await loadGlobalConfig(config3.mode ?? "production", config3.globalConfigPath);
7659
7666
  const updatedVf = visionFallback ? { ...globalConfig.visionFallback, ...visionFallback } : globalConfig.visionFallback;
7660
7667
  const updatedConfig = {
@@ -7689,7 +7696,7 @@ All file and git operations should use this branch.
7689
7696
  }
7690
7697
  const updates = parsed.data;
7691
7698
  try {
7692
- const { loadGlobalConfig, saveGlobalConfig } = await import("./config-TUCHLIWD.js");
7699
+ const { loadGlobalConfig, saveGlobalConfig } = await import("./config-LOK3LXFH.js");
7693
7700
  const globalConfig = await loadGlobalConfig(config3.mode ?? "production", config3.globalConfigPath);
7694
7701
  const filteredUpdates = Object.fromEntries(Object.entries(updates).filter(([, v]) => v !== void 0));
7695
7702
  const updatedConfig = {
@@ -7731,8 +7738,8 @@ All file and git operations should use this branch.
7731
7738
  }
7732
7739
  const testConfig = parsed.data;
7733
7740
  try {
7734
- const { resolveVisionFallback } = await import("./config-TUCHLIWD.js");
7735
- const { loadGlobalConfig } = await import("./config-TUCHLIWD.js");
7741
+ const { resolveVisionFallback } = await import("./config-LOK3LXFH.js");
7742
+ const { loadGlobalConfig } = await import("./config-LOK3LXFH.js");
7736
7743
  const globalConfig = await loadGlobalConfig(config3.mode ?? "production", config3.globalConfigPath);
7737
7744
  const filteredTestConfig = Object.fromEntries(Object.entries(testConfig).filter(([, v]) => v !== void 0));
7738
7745
  const testVisionFallback = {
@@ -7781,9 +7788,35 @@ All file and git operations should use this branch.
7781
7788
  activeProviderId: providerManager.getActiveProviderId()
7782
7789
  });
7783
7790
  });
7791
+ app.put("/api/providers/order", async (req, res) => {
7792
+ const { providerIds } = req.body;
7793
+ if (!Array.isArray(providerIds) || providerIds.length === 0) {
7794
+ return res.status(400).json({ error: "providerIds must be a non-empty array" });
7795
+ }
7796
+ try {
7797
+ const { loadGlobalConfig, saveGlobalConfig, reorderProviders } = await import("./config-LOK3LXFH.js");
7798
+ const globalConfig = await loadGlobalConfig(config3.mode ?? "production", config3.globalConfigPath);
7799
+ let updatedConfig;
7800
+ try {
7801
+ updatedConfig = reorderProviders(globalConfig, providerIds);
7802
+ } catch {
7803
+ return res.status(400).json({ error: "providerIds must be a permutation of the current provider ids" });
7804
+ }
7805
+ await saveGlobalConfig(config3.mode ?? "production", updatedConfig, config3.globalConfigPath);
7806
+ providerManager.setProviders(updatedConfig.providers, updatedConfig.defaultModelSelection ?? void 0);
7807
+ config3.defaultModelSelection = updatedConfig.defaultModelSelection;
7808
+ res.json({
7809
+ success: true,
7810
+ providers: updatedConfig.providers,
7811
+ activeProviderId: providerManager.getActiveProviderId()
7812
+ });
7813
+ } catch (error) {
7814
+ res.status(500).json({ error: error instanceof Error ? error.message : "Failed to reorder providers" });
7815
+ }
7816
+ });
7784
7817
  app.delete("/api/providers/:id", async (req, res) => {
7785
7818
  const { id } = req.params;
7786
- const { loadGlobalConfig, saveGlobalConfig, removeProvider } = await import("./config-TUCHLIWD.js");
7819
+ const { loadGlobalConfig, saveGlobalConfig, removeProvider } = await import("./config-LOK3LXFH.js");
7787
7820
  const globalConfig = await loadGlobalConfig(config3.mode ?? "production", config3.globalConfigPath);
7788
7821
  const updatedConfig = removeProvider(globalConfig, id);
7789
7822
  await saveGlobalConfig(config3.mode ?? "production", updatedConfig, config3.globalConfigPath);
@@ -7795,7 +7828,7 @@ All file and git operations should use this branch.
7795
7828
  const { id } = req.params;
7796
7829
  const { isLocal } = req.body;
7797
7830
  try {
7798
- const { loadGlobalConfig, saveGlobalConfig, updateProvider } = await import("./config-TUCHLIWD.js");
7831
+ const { loadGlobalConfig, saveGlobalConfig, updateProvider } = await import("./config-LOK3LXFH.js");
7799
7832
  const globalConfig = await loadGlobalConfig(config3.mode ?? "production", config3.globalConfigPath);
7800
7833
  const provider = globalConfig.providers.find((p) => p.id === id);
7801
7834
  if (!provider) {
@@ -7827,7 +7860,7 @@ All file and git operations should use this branch.
7827
7860
  transportAdapter
7828
7861
  } = req.body;
7829
7862
  try {
7830
- const { loadGlobalConfig, saveGlobalConfig, updateProvider } = await import("./config-TUCHLIWD.js");
7863
+ const { loadGlobalConfig, saveGlobalConfig, updateProvider } = await import("./config-LOK3LXFH.js");
7831
7864
  const globalConfig = await loadGlobalConfig(config3.mode ?? "production", config3.globalConfigPath);
7832
7865
  const provider = globalConfig.providers.find((p) => p.id === id);
7833
7866
  if (!provider) {
@@ -7870,7 +7903,7 @@ All file and git operations should use this branch.
7870
7903
  return res.status(400).json({ error: "thinkingEnabled must be a boolean" });
7871
7904
  }
7872
7905
  try {
7873
- const { loadGlobalConfig, saveGlobalConfig, updateProvider } = await import("./config-TUCHLIWD.js");
7906
+ const { loadGlobalConfig, saveGlobalConfig, updateProvider } = await import("./config-LOK3LXFH.js");
7874
7907
  const globalConfig = await loadGlobalConfig(config3.mode ?? "production", config3.globalConfigPath);
7875
7908
  const provider = globalConfig.providers.find((p) => p.id === id);
7876
7909
  if (!provider) {
@@ -7906,7 +7939,7 @@ All file and git operations should use this branch.
7906
7939
  return res.status(400).json({ error: result.error });
7907
7940
  }
7908
7941
  const llmClient = getLLMClient();
7909
- const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-TUCHLIWD.js");
7942
+ const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-LOK3LXFH.js");
7910
7943
  const globalConfig = await loadGlobalConfig(config3.mode ?? "production", config3.globalConfigPath);
7911
7944
  const updatedConfig = setDefaultModelSelection(globalConfig, id, llmClient.getModel());
7912
7945
  await saveGlobalConfig(config3.mode ?? "production", updatedConfig, config3.globalConfigPath);
@@ -7933,7 +7966,7 @@ All file and git operations should use this branch.
7933
7966
  });
7934
7967
  async function rebuildMcpTools() {
7935
7968
  const { createMcpTools: createMcpTools2 } = await import("./tool-adapter-FJAFLDZA.js");
7936
- const { setMcpTools: setMcpTools2 } = await import("./tools-AUHL5MPG.js");
7969
+ const { setMcpTools: setMcpTools2 } = await import("./tools-CZHV2FAD.js");
7937
7970
  const mcpTools = createMcpTools2(mcpManager);
7938
7971
  setMcpTools2(mcpTools);
7939
7972
  toolRegistry = createToolRegistry();
@@ -8008,7 +8041,7 @@ All file and git operations should use this branch.
8008
8041
  };
8009
8042
  await mcpManager.addServer(name, serverCfg);
8010
8043
  const server = mcpManager.getServer(name);
8011
- const { loadGlobalConfig, saveGlobalConfig } = await import("./config-TUCHLIWD.js");
8044
+ const { loadGlobalConfig, saveGlobalConfig } = await import("./config-LOK3LXFH.js");
8012
8045
  const globalConfig = await loadGlobalConfig(config3.mode ?? "production", config3.globalConfigPath);
8013
8046
  const updatedMcpServers = { ...globalConfig.mcpServers ?? {}, [name]: serverCfg };
8014
8047
  await saveGlobalConfig(
@@ -8069,7 +8102,7 @@ All file and git operations should use this branch.
8069
8102
  return res.status(400).json({ error: "oauth must be a boolean" });
8070
8103
  }
8071
8104
  try {
8072
- const { loadGlobalConfig, saveGlobalConfig } = await import("./config-TUCHLIWD.js");
8105
+ const { loadGlobalConfig, saveGlobalConfig } = await import("./config-LOK3LXFH.js");
8073
8106
  const { applyMcpServerUpdate } = await import("./update-server-SVPV6ZJZ.js");
8074
8107
  const globalConfig = await loadGlobalConfig(config3.mode ?? "production", config3.globalConfigPath);
8075
8108
  const mcpServers2 = { ...globalConfig.mcpServers ?? {} };
@@ -8118,7 +8151,7 @@ All file and git operations should use this branch.
8118
8151
  mcpManager.removeServer(name);
8119
8152
  const { clearMcpOAuthEntry } = await import("./oauth-store-KECHUT54.js");
8120
8153
  await clearMcpOAuthEntry(name);
8121
- const { loadGlobalConfig, saveGlobalConfig } = await import("./config-TUCHLIWD.js");
8154
+ const { loadGlobalConfig, saveGlobalConfig } = await import("./config-LOK3LXFH.js");
8122
8155
  const globalConfig = await loadGlobalConfig(config3.mode ?? "production", config3.globalConfigPath);
8123
8156
  const updatedMcpServers = { ...globalConfig.mcpServers ?? {} };
8124
8157
  delete updatedMcpServers[name];
@@ -8285,7 +8318,7 @@ All file and git operations should use this branch.
8285
8318
  await mcpManager.setToolEnabled(name, toolName, enabled);
8286
8319
  const server = mcpManager.getServer(name);
8287
8320
  if (server) {
8288
- const { loadGlobalConfig, saveGlobalConfig } = await import("./config-TUCHLIWD.js");
8321
+ const { loadGlobalConfig, saveGlobalConfig } = await import("./config-LOK3LXFH.js");
8289
8322
  const globalConfig = await loadGlobalConfig(config3.mode ?? "production", config3.globalConfigPath);
8290
8323
  const mcpServers2 = { ...globalConfig.mcpServers ?? {} };
8291
8324
  const serverCfg = mcpServers2[name];
@@ -8487,7 +8520,7 @@ All file and git operations should use this branch.
8487
8520
  );
8488
8521
  const wss = wssExports.wss;
8489
8522
  deferTasksBroadcast = (projectId, payload) => wssExports.broadcastForProject(projectId, "", { type: "tasks.update", payload });
8490
- const { launchWorkflowRun, abortRunnerRun } = await import("./launch-ZHAFPRCP.js");
8523
+ const { launchWorkflowRun, abortRunnerRun } = await import("./launch-DYWJD6L5.js");
8491
8524
  deferTasksLaunchWorkflow = (sessionId, launch) => {
8492
8525
  const effective = sessionManager.resolveEffectiveProviderModel(sessionId);
8493
8526
  let llmClient = getLLMClient();
@@ -8527,7 +8560,7 @@ All file and git operations should use this branch.
8527
8560
  const state = sessionManager.getContextState(sessionId);
8528
8561
  wssExports.broadcastForSession(sessionId, createContextStateMessage(state));
8529
8562
  });
8530
- const { QueueProcessor } = await import("./processor-HETUXJFH.js");
8563
+ const { QueueProcessor } = await import("./processor-WP2LQOEV.js");
8531
8564
  const queueProcessor = new QueueProcessor({
8532
8565
  sessionManager,
8533
8566
  providerManager,
@@ -8613,4 +8646,4 @@ export {
8613
8646
  createServerHandle,
8614
8647
  createServer
8615
8648
  };
8616
- //# sourceMappingURL=chunk-T2RDFRNK.js.map
8649
+ //# sourceMappingURL=chunk-TZJU6F6Z.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-X2J6BAU7.js";
4
+ } from "../chunk-TY3ONJE4.js";
5
5
  import "../chunk-AGXJ5O63.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-X2J6BAU7.js";
4
+ } from "../chunk-TY3ONJE4.js";
5
5
  import "../chunk-AGXJ5O63.js";
6
6
  import {
7
7
  logger
@@ -8,11 +8,12 @@ import {
8
8
  getVisionFallback,
9
9
  loadGlobalConfig,
10
10
  removeProvider,
11
+ reorderProviders,
11
12
  resolveVisionFallback,
12
13
  saveGlobalConfig,
13
14
  setDefaultModelSelection,
14
15
  updateProvider
15
- } from "./chunk-KSXCOHHW.js";
16
+ } from "./chunk-R5FAEKXQ.js";
16
17
  import "./chunk-CQGTEGKL.js";
17
18
  import "./chunk-YLJ4XMA6.js";
18
19
  export {
@@ -25,9 +26,10 @@ export {
25
26
  getVisionFallback,
26
27
  loadGlobalConfig,
27
28
  removeProvider,
29
+ reorderProviders,
28
30
  resolveVisionFallback,
29
31
  saveGlobalConfig,
30
32
  setDefaultModelSelection,
31
33
  updateProvider
32
34
  };
33
- //# sourceMappingURL=config-TUCHLIWD.js.map
35
+ //# sourceMappingURL=config-LOK3LXFH.js.map
@@ -5,7 +5,7 @@ import {
5
5
  computeSessionHash,
6
6
  computeUnifiedDiff,
7
7
  getToolFingerprint
8
- } from "./chunk-KETVPTMI.js";
8
+ } from "./chunk-GKDJW4VP.js";
9
9
  import "./chunk-ZIL6VKLU.js";
10
10
  import "./chunk-GIJUWPRQ.js";
11
11
  import "./chunk-66MG44TF.js";
@@ -25,4 +25,4 @@ export {
25
25
  computeUnifiedDiff,
26
26
  getToolFingerprint
27
27
  };
28
- //# sourceMappingURL=dynamic-context-5MQWJTJC.js.map
28
+ //# sourceMappingURL=dynamic-context-KXZ6VJDE.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  abortRunnerRun,
3
3
  launchWorkflowRun
4
- } from "./chunk-7DO4JMGT.js";
5
- import "./chunk-NBOSTFTS.js";
6
- import "./chunk-O5A3XKE5.js";
7
- import "./chunk-KETVPTMI.js";
4
+ } from "./chunk-7CBVJAN5.js";
5
+ import "./chunk-FGK6KPJ5.js";
6
+ import "./chunk-IQYI7TWF.js";
7
+ import "./chunk-GKDJW4VP.js";
8
8
  import "./chunk-ZIL6VKLU.js";
9
9
  import "./chunk-LJX7KXRU.js";
10
10
  import "./chunk-GIJUWPRQ.js";
@@ -43,11 +43,11 @@ import "./chunk-ISE55FOR.js";
43
43
  import "./chunk-K44MW7JJ.js";
44
44
  import "./chunk-7OHXF5GW.js";
45
45
  import "./chunk-KSDWQ6IZ.js";
46
- import "./chunk-KSXCOHHW.js";
46
+ import "./chunk-R5FAEKXQ.js";
47
47
  import "./chunk-CQGTEGKL.js";
48
48
  import "./chunk-YLJ4XMA6.js";
49
49
  export {
50
50
  abortRunnerRun,
51
51
  launchWorkflowRun
52
52
  };
53
- //# sourceMappingURL=launch-ZHAFPRCP.js.map
53
+ //# sourceMappingURL=launch-DYWJD6L5.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  runAgentTurn,
3
3
  runChatTurn
4
- } from "./chunk-NBOSTFTS.js";
5
- import "./chunk-O5A3XKE5.js";
6
- import "./chunk-KETVPTMI.js";
4
+ } from "./chunk-FGK6KPJ5.js";
5
+ import "./chunk-IQYI7TWF.js";
6
+ import "./chunk-GKDJW4VP.js";
7
7
  import "./chunk-ZIL6VKLU.js";
8
8
  import {
9
9
  TurnMetrics,
@@ -48,7 +48,7 @@ import "./chunk-OYBUJIC3.js";
48
48
  import "./chunk-ISE55FOR.js";
49
49
  import "./chunk-K44MW7JJ.js";
50
50
  import "./chunk-KSDWQ6IZ.js";
51
- import "./chunk-KSXCOHHW.js";
51
+ import "./chunk-R5FAEKXQ.js";
52
52
  import "./chunk-CQGTEGKL.js";
53
53
  import "./chunk-YLJ4XMA6.js";
54
54
  export {
@@ -61,4 +61,4 @@ export {
61
61
  runAgentTurn,
62
62
  runChatTurn
63
63
  };
64
- //# sourceMappingURL=orchestrator-KKUXIE3Q.js.map
64
+ //# sourceMappingURL=orchestrator-LBQWRAXC.js.map
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "2.0.125",
3
+ "version": "2.0.127",
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-HOSFRPPI.js";
6
- import "./chunk-O5A3XKE5.js";
6
+ import "./chunk-IQYI7TWF.js";
7
7
  import "./chunk-ZIL6VKLU.js";
8
8
  import "./chunk-LJX7KXRU.js";
9
9
  import "./chunk-GIJUWPRQ.js";
@@ -48,7 +48,7 @@ import {
48
48
  logger
49
49
  } from "./chunk-K44MW7JJ.js";
50
50
  import "./chunk-KSDWQ6IZ.js";
51
- import "./chunk-KSXCOHHW.js";
51
+ import "./chunk-R5FAEKXQ.js";
52
52
  import "./chunk-CQGTEGKL.js";
53
53
  import "./chunk-YLJ4XMA6.js";
54
54
 
@@ -207,7 +207,7 @@ var QueueProcessor = class {
207
207
  model: sessionClient.getModel(),
208
208
  ...sessionEffort ? { reasoningEffort: sessionEffort } : {}
209
209
  };
210
- const { runChatTurn } = await import("./orchestrator-KKUXIE3Q.js");
210
+ const { runChatTurn } = await import("./orchestrator-LBQWRAXC.js");
211
211
  const runChatTurnParams = buildRunChatTurnParams({
212
212
  sessionManager,
213
213
  sessionId,
@@ -256,4 +256,4 @@ var QueueProcessor = class {
256
256
  export {
257
257
  QueueProcessor
258
258
  };
259
- //# sourceMappingURL=processor-HETUXJFH.js.map
259
+ //# sourceMappingURL=processor-WP2LQOEV.js.map
@@ -31,7 +31,7 @@ import {
31
31
  loadGlobalConfig,
32
32
  removeProvider,
33
33
  saveGlobalConfig
34
- } from "./chunk-KSXCOHHW.js";
34
+ } from "./chunk-R5FAEKXQ.js";
35
35
  import "./chunk-CQGTEGKL.js";
36
36
  import "./chunk-YLJ4XMA6.js";
37
37
 
@@ -272,7 +272,7 @@ async function runProviderAdd(mode) {
272
272
  isActive: makeActive
273
273
  });
274
274
  if (makeActive) {
275
- const { setDefaultModelSelection } = await import("./config-TUCHLIWD.js");
275
+ const { setDefaultModelSelection } = await import("./config-LOK3LXFH.js");
276
276
  newConfig = setDefaultModelSelection(
277
277
  newConfig,
278
278
  newConfig.providers[newConfig.providers.length - 1].id,
@@ -400,4 +400,4 @@ export {
400
400
  runProviderRemove,
401
401
  runProviderUse
402
402
  };
403
- //# sourceMappingURL=provider-6LUA73HF.js.map
403
+ //# sourceMappingURL=provider-726LD2KU.js.map
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  createServer
3
- } from "./chunk-T2RDFRNK.js";
3
+ } from "./chunk-TZJU6F6Z.js";
4
4
  import "./chunk-RSB4AR2A.js";
5
5
  import "./chunk-IJ53Y77N.js";
6
- import "./chunk-WMAW37GV.js";
6
+ import "./chunk-IE2OMJIH.js";
7
7
  import "./chunk-HOSFRPPI.js";
8
- import "./chunk-7DO4JMGT.js";
9
- import "./chunk-NBOSTFTS.js";
10
- import "./chunk-O5A3XKE5.js";
11
- import "./chunk-KETVPTMI.js";
8
+ import "./chunk-7CBVJAN5.js";
9
+ import "./chunk-FGK6KPJ5.js";
10
+ import "./chunk-IQYI7TWF.js";
11
+ import "./chunk-GKDJW4VP.js";
12
12
  import "./chunk-ZIL6VKLU.js";
13
13
  import "./chunk-WLJJRX22.js";
14
14
  import "./chunk-UAAFZEIS.js";
@@ -36,7 +36,7 @@ import "./chunk-K2QKX4ZJ.js";
36
36
  import "./chunk-J2GP3J3X.js";
37
37
  import {
38
38
  VERSION
39
- } from "./chunk-GZUD5E6E.js";
39
+ } from "./chunk-QDO3BEGW.js";
40
40
  import {
41
41
  loadConfig
42
42
  } from "./chunk-KBESUA3W.js";
@@ -60,7 +60,7 @@ import {
60
60
  getActiveProvider,
61
61
  getDefaultModel,
62
62
  loadGlobalConfig
63
- } from "./chunk-KSXCOHHW.js";
63
+ } from "./chunk-R5FAEKXQ.js";
64
64
  import {
65
65
  ensureDataDirExists,
66
66
  getDatabasePath,
@@ -227,4 +227,4 @@ async function runServe(options) {
227
227
  export {
228
228
  runServe
229
229
  };
230
- //# sourceMappingURL=serve-UVHJHYF3.js.map
230
+ //# sourceMappingURL=serve-OY3Y5PXK.js.map
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  createServer,
3
3
  createServerHandle
4
- } from "../chunk-T2RDFRNK.js";
4
+ } from "../chunk-TZJU6F6Z.js";
5
5
  import "../chunk-RSB4AR2A.js";
6
6
  import "../chunk-IJ53Y77N.js";
7
- import "../chunk-WMAW37GV.js";
7
+ import "../chunk-IE2OMJIH.js";
8
8
  import "../chunk-HOSFRPPI.js";
9
- import "../chunk-7DO4JMGT.js";
10
- import "../chunk-NBOSTFTS.js";
11
- import "../chunk-O5A3XKE5.js";
12
- import "../chunk-KETVPTMI.js";
9
+ import "../chunk-7CBVJAN5.js";
10
+ import "../chunk-FGK6KPJ5.js";
11
+ import "../chunk-IQYI7TWF.js";
12
+ import "../chunk-GKDJW4VP.js";
13
13
  import "../chunk-ZIL6VKLU.js";
14
14
  import "../chunk-WLJJRX22.js";
15
15
  import "../chunk-UAAFZEIS.js";
@@ -35,7 +35,7 @@ import "../chunk-LCLH6ZUL.js";
35
35
  import "../chunk-T3JVYO3Z.js";
36
36
  import "../chunk-K2QKX4ZJ.js";
37
37
  import "../chunk-J2GP3J3X.js";
38
- import "../chunk-GZUD5E6E.js";
38
+ import "../chunk-QDO3BEGW.js";
39
39
  import "../chunk-KBESUA3W.js";
40
40
  import "../chunk-OSXPQSLW.js";
41
41
  import "../chunk-3B232XG4.js";
@@ -51,7 +51,7 @@ import "../chunk-ISE55FOR.js";
51
51
  import "../chunk-K44MW7JJ.js";
52
52
  import "../chunk-7OHXF5GW.js";
53
53
  import "../chunk-KSDWQ6IZ.js";
54
- import "../chunk-KSXCOHHW.js";
54
+ import "../chunk-R5FAEKXQ.js";
55
55
  import "../chunk-CQGTEGKL.js";
56
56
  import "../chunk-YLJ4XMA6.js";
57
57
  export {