openfox 2.0.57 → 2.0.59

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 (47) hide show
  1. package/dist/agent-defaults/explorer.agent.md +4 -0
  2. package/dist/{auto-config-F5Y6KAQ6.js → auto-config-T5GR2N6X.js} +20 -1
  3. package/dist/{backend-B23GIKKD.js → backend-P3GHHLHJ.js} +2 -2
  4. package/dist/{branch.api-5DMEAIBI.js → branch.api-LAN42BA5.js} +3 -2
  5. package/dist/{chat-handler-QO4XB66I.js → chat-handler-AS44EMQE.js} +9 -9
  6. package/dist/{chunk-QQ5XY6BH.js → chunk-43UFGATL.js} +16 -6
  7. package/dist/{chunk-DQCEXCDD.js → chunk-5MDIKIMG.js} +23 -12
  8. package/dist/{chunk-VZHN46NW.js → chunk-6VDCH5ML.js} +2 -2
  9. package/dist/{chunk-BIWVYBIE.js → chunk-BGTEIA2S.js} +4 -3
  10. package/dist/{chunk-WI6HGJ27.js → chunk-EKI5SZC7.js} +3 -3
  11. package/dist/{chunk-AGXBUC4M.js → chunk-FRU2X3IZ.js} +71 -31
  12. package/dist/{chunk-4566MTWM.js → chunk-GJU35MDV.js} +2 -2
  13. package/dist/{chunk-R2QCDYYR.js → chunk-H774GQJW.js} +53 -2
  14. package/dist/{chunk-ZZLCX7YT.js → chunk-JKLPWTUN.js} +2 -2
  15. package/dist/{chunk-5HOP4QF7.js → chunk-LQFCQ6PY.js} +107 -79
  16. package/dist/{chunk-UOKVBO67.js → chunk-NVPVDDQZ.js} +2 -2
  17. package/dist/{chunk-F7M2W46Q.js → chunk-P7C6KF2H.js} +9 -9
  18. package/dist/{chunk-ADOXTORQ.js → chunk-PK2RMVMB.js} +2 -2
  19. package/dist/{chunk-PSJON33Y.js → chunk-YHEQTVFV.js} +7 -1
  20. package/dist/cli/dev.js +2 -2
  21. package/dist/cli/index.js +2 -2
  22. package/dist/{client-Y3ESMMZA.js → client-KRFGMNGN.js} +3 -3
  23. package/dist/{compactor-ZKZYSNMD.js → compactor-Q33AJPCQ.js} +4 -4
  24. package/dist/{config-5ZHFKWOW.js → config-GMQUPNBY.js} +2 -2
  25. package/dist/{manager-CZOVNTSN.js → manager-344C5JLZ.js} +3 -3
  26. package/dist/{orchestrator-YMNKXVDF.js → orchestrator-MH7J2YVP.js} +8 -8
  27. package/dist/package.json +1 -1
  28. package/dist/{permissions-QLHZUEGW.js → permissions-CGEK3DGZ.js} +21 -17
  29. package/dist/{processor-2BB65JWR.js → processor-34MVJZTD.js} +9 -9
  30. package/dist/{project-creator-7RBHP6K6.js → project-creator-IDW7RACH.js} +4 -4
  31. package/dist/{protocol-DRe5K6Id.d.ts → protocol-J7khRG62.d.ts} +3 -1
  32. package/dist/{provider-V6Q6WJAF.js → provider-LBYBC5AG.js} +6 -6
  33. package/dist/{provider-manager-PR64DEN2.js → provider-manager-ABEUYU3K.js} +4 -4
  34. package/dist/{pwa-M6QZ52ZO.js → pwa-T6JRAYJB.js} +11 -10
  35. package/dist/{serve-WFQT6BP6.js → serve-NHF6B5RQ.js} +13 -13
  36. package/dist/server/index.d.ts +2 -2
  37. package/dist/server/index.js +12 -12
  38. package/dist/{server-V32ZOVU4.js → server-KDGQZNYQ.js} +11 -11
  39. package/dist/{service-YYJ5Y7CN.js → service-6DL3MJZD.js} +7 -5
  40. package/dist/shared/index.d.ts +2 -2
  41. package/dist/{store-NS2RMRA7.js → store-FXTCHBI4.js} +2 -2
  42. package/dist/{tools-L2SMYKJZ.js → tools-FQ54IAYG.js} +7 -7
  43. package/dist/web/assets/{index-CvIUuius.css → index-DjfRXOO7.css} +1 -1
  44. package/dist/web/assets/{index-CRW5qofP.js → index-Dqqp_j-f.js} +71 -71
  45. package/dist/web/index.html +2 -2
  46. package/dist/web/sw.js +1 -1
  47. package/package.json +1 -1
@@ -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-5ZHFKWOW.js");
42
+ const { saveGlobalConfig } = await import("./config-GMQUPNBY.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-5ZHFKWOW.js");
109
+ const { loadGlobalConfig, getActiveProvider, getDefaultModel } = await import("./config-GMQUPNBY.js");
110
110
  const { getGlobalConfigPath } = await import("./paths-F27V3S4I.js");
111
111
  const config = await loadGlobalConfig(mode);
112
112
  const configPath = getGlobalConfigPath(mode);
@@ -164,13 +164,13 @@ async function runCli(options) {
164
164
  break;
165
165
  }
166
166
  case "provider": {
167
- const { runProviderCommand } = await import("./provider-V6Q6WJAF.js");
167
+ const { runProviderCommand } = await import("./provider-LBYBC5AG.js");
168
168
  const [, subcommand] = positionals;
169
169
  await runProviderCommand(mode, subcommand);
170
170
  break;
171
171
  }
172
172
  case "service": {
173
- const { runServiceCommand } = await import("./service-YYJ5Y7CN.js");
173
+ const { runServiceCommand } = await import("./service-6DL3MJZD.js");
174
174
  const [, subcommand, ...serviceArgs] = positionals;
175
175
  if (values.follow) {
176
176
  serviceArgs.push("-f");
@@ -183,7 +183,7 @@ async function runCli(options) {
183
183
  break;
184
184
  }
185
185
  case "pwa": {
186
- const { runPwaCommand, printPwaHelp } = await import("./pwa-M6QZ52ZO.js");
186
+ const { runPwaCommand, printPwaHelp } = await import("./pwa-T6JRAYJB.js");
187
187
  const [, subcommand] = positionals;
188
188
  if (subcommand === "--help" || subcommand === "-h" || values.help) {
189
189
  printPwaHelp();
@@ -196,19 +196,19 @@ async function runCli(options) {
196
196
  const __filename = fileURLToPath(import.meta.url);
197
197
  const __dirname = dirname(__filename);
198
198
  const updateScriptPath = join(__dirname, "cli", "update.sh");
199
- const result = spawnSync(updateScriptPath, [], { shell: true, stdio: "inherit" });
199
+ const result = spawnSync(updateScriptPath, [], { shell: true, stdio: "inherit", windowsHide: true });
200
200
  if (result.status !== 0) {
201
201
  process.exit(result.status ?? 1);
202
202
  }
203
203
  break;
204
204
  }
205
205
  default: {
206
- const { configFileExists } = await import("./config-5ZHFKWOW.js");
206
+ const { configFileExists } = await import("./config-GMQUPNBY.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-WFQT6BP6.js");
211
+ const { runServe } = await import("./serve-NHF6B5RQ.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-F7M2W46Q.js.map
223
+ //# sourceMappingURL=chunk-P7C6KF2H.js.map
@@ -5,7 +5,7 @@ var SIGKILL_TIMEOUT_MS = 200;
5
5
  async function getDescendantPids(rootPid) {
6
6
  try {
7
7
  const { stdout } = await new Promise((resolve, reject) => {
8
- execFile("ps", ["-eo", "pid=,ppid="], { timeout: 5e3 }, (err, stdout2) => {
8
+ execFile("ps", ["-eo", "pid=,ppid="], { timeout: 5e3, windowsHide: true }, (err, stdout2) => {
9
9
  if (err) reject(err);
10
10
  else resolve({ stdout: stdout2 });
11
11
  });
@@ -224,4 +224,4 @@ export {
224
224
  getProcessById,
225
225
  cleanupAllProcesses
226
226
  };
227
- //# sourceMappingURL=chunk-ADOXTORQ.js.map
227
+ //# sourceMappingURL=chunk-PK2RMVMB.js.map
@@ -24,6 +24,10 @@ var BACKEND_CAPABILITIES = {
24
24
  supportsChatTemplateKwargs: false,
25
25
  supportsTopK: true
26
26
  },
27
+ lmstudio: {
28
+ supportsChatTemplateKwargs: false,
29
+ supportsTopK: true
30
+ },
27
31
  "opencode-go": {
28
32
  supportsChatTemplateKwargs: false,
29
33
  supportsTopK: true
@@ -46,6 +50,8 @@ function getBackendDisplayName(backend) {
46
50
  return "Ollama";
47
51
  case "llamacpp":
48
52
  return "llama.cpp";
53
+ case "lmstudio":
54
+ return "LM Studio";
49
55
  case "opencode-go":
50
56
  return "OpenCode Go";
51
57
  case "openai":
@@ -61,4 +67,4 @@ export {
61
67
  getBackendCapabilities,
62
68
  getBackendDisplayName
63
69
  };
64
- //# sourceMappingURL=chunk-PSJON33Y.js.map
70
+ //# sourceMappingURL=chunk-YHEQTVFV.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-F7M2W46Q.js";
4
+ } from "../chunk-P7C6KF2H.js";
5
5
  import "../chunk-XY3LESVZ.js";
6
6
  import {
7
7
  logger
@@ -30,7 +30,7 @@ if (currentHeap < MIN_HEAP_MB && !process.env["OPENFOX_HEAP_INCREASED"]) {
30
30
  const result = spawnSync(
31
31
  process.execPath,
32
32
  ["--max-old-space-size=" + heapMB, ...process.execArgv, scriptPath, ...process.argv.slice(2)],
33
- { stdio: "inherit", env }
33
+ { stdio: "inherit", env, windowsHide: true }
34
34
  );
35
35
  process.exit(result.status ?? 0);
36
36
  }
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-F7M2W46Q.js";
4
+ } from "../chunk-P7C6KF2H.js";
5
5
  import "../chunk-XY3LESVZ.js";
6
6
  import {
7
7
  logger
@@ -29,7 +29,7 @@ if (currentHeap < MIN_HEAP_MB && !process.env["OPENFOX_HEAP_INCREASED"]) {
29
29
  const result = spawnSync(
30
30
  process.execPath,
31
31
  ["--max-old-space-size=" + heapMB, ...process.execArgv, scriptPath, ...process.argv.slice(2)],
32
- { stdio: "inherit", env }
32
+ { stdio: "inherit", env, windowsHide: true }
33
33
  );
34
34
  process.exit(result.status ?? 0);
35
35
  }
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createLLMClient
3
- } from "./chunk-ZZLCX7YT.js";
4
- import "./chunk-PSJON33Y.js";
3
+ } from "./chunk-JKLPWTUN.js";
4
+ import "./chunk-YHEQTVFV.js";
5
5
  import "./chunk-HNCM3D7Y.js";
6
6
  import "./chunk-Z6W4YHJB.js";
7
7
  import "./chunk-ZO5EXQMG.js";
@@ -11,4 +11,4 @@ import "./chunk-5WRI5ZAA.js";
11
11
  export {
12
12
  createLLMClient
13
13
  };
14
- //# sourceMappingURL=client-Y3ESMMZA.js.map
14
+ //# sourceMappingURL=client-KRFGMNGN.js.map
@@ -2,13 +2,13 @@ import {
2
2
  appendCompactionPrompt,
3
3
  getCompactionTarget,
4
4
  shouldCompact
5
- } from "./chunk-4566MTWM.js";
6
- import "./chunk-VZHN46NW.js";
5
+ } from "./chunk-GJU35MDV.js";
6
+ import "./chunk-6VDCH5ML.js";
7
7
  import "./chunk-AIJE3RYH.js";
8
8
  import "./chunk-TMUBLQFC.js";
9
9
  import "./chunk-ZPIZLTWU.js";
10
10
  import "./chunk-J2GP3J3X.js";
11
- import "./chunk-PSJON33Y.js";
11
+ import "./chunk-YHEQTVFV.js";
12
12
  import "./chunk-Z6W4YHJB.js";
13
13
  import "./chunk-K44MW7JJ.js";
14
14
  import "./chunk-V4IE7HJY.js";
@@ -18,4 +18,4 @@ export {
18
18
  getCompactionTarget,
19
19
  shouldCompact
20
20
  };
21
- //# sourceMappingURL=compactor-ZKZYSNMD.js.map
21
+ //# sourceMappingURL=compactor-Q33AJPCQ.js.map
@@ -11,7 +11,7 @@ import {
11
11
  saveGlobalConfig,
12
12
  setDefaultModelSelection,
13
13
  updateProvider
14
- } from "./chunk-QQ5XY6BH.js";
14
+ } from "./chunk-43UFGATL.js";
15
15
  import "./chunk-CQGTEGKL.js";
16
16
  import "./chunk-5WRI5ZAA.js";
17
17
  export {
@@ -28,4 +28,4 @@ export {
28
28
  setDefaultModelSelection,
29
29
  updateProvider
30
30
  };
31
- //# sourceMappingURL=config-5ZHFKWOW.js.map
31
+ //# sourceMappingURL=config-GMQUPNBY.js.map
@@ -6,8 +6,8 @@ import {
6
6
  onProcessEvent,
7
7
  startProcessCommand,
8
8
  stopProcess
9
- } from "./chunk-BIWVYBIE.js";
10
- import "./chunk-ADOXTORQ.js";
9
+ } from "./chunk-BGTEIA2S.js";
10
+ import "./chunk-PK2RMVMB.js";
11
11
  import "./chunk-5WRI5ZAA.js";
12
12
  export {
13
13
  createProcess,
@@ -18,4 +18,4 @@ export {
18
18
  startProcessCommand,
19
19
  stopProcess
20
20
  };
21
- //# sourceMappingURL=manager-CZOVNTSN.js.map
21
+ //# sourceMappingURL=manager-344C5JLZ.js.map
@@ -2,11 +2,11 @@ import {
2
2
  injectWorkflowKickoffIfNeeded,
3
3
  runAgentTurn,
4
4
  runChatTurn
5
- } from "./chunk-WI6HGJ27.js";
6
- import "./chunk-AGXBUC4M.js";
5
+ } from "./chunk-EKI5SZC7.js";
6
+ import "./chunk-FRU2X3IZ.js";
7
7
  import "./chunk-LBGHZLLH.js";
8
- import "./chunk-BIWVYBIE.js";
9
- import "./chunk-ADOXTORQ.js";
8
+ import "./chunk-BGTEIA2S.js";
9
+ import "./chunk-PK2RMVMB.js";
10
10
  import "./chunk-NWO6GRYE.js";
11
11
  import "./chunk-F4PMNP7S.js";
12
12
  import "./chunk-EU3WWTFH.js";
@@ -19,16 +19,16 @@ import {
19
19
  createMessageStartEvent,
20
20
  createToolCallEvent,
21
21
  createToolResultEvent
22
- } from "./chunk-VZHN46NW.js";
22
+ } from "./chunk-6VDCH5ML.js";
23
23
  import "./chunk-AIJE3RYH.js";
24
24
  import "./chunk-TMUBLQFC.js";
25
25
  import "./chunk-ZPIZLTWU.js";
26
26
  import "./chunk-J2GP3J3X.js";
27
- import "./chunk-PSJON33Y.js";
27
+ import "./chunk-YHEQTVFV.js";
28
28
  import "./chunk-Z6W4YHJB.js";
29
29
  import "./chunk-K44MW7JJ.js";
30
30
  import "./chunk-YD6NDTKF.js";
31
- import "./chunk-QQ5XY6BH.js";
31
+ import "./chunk-43UFGATL.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-YMNKXVDF.js.map
46
+ //# sourceMappingURL=orchestrator-MH7J2YVP.js.map
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "2.0.57",
3
+ "version": "2.0.59",
4
4
  "description": "Local-LLM-first agentic coding assistant",
5
5
  "type": "module",
6
6
  "bin": {
@@ -11,6 +11,13 @@ function sanitizeShellArg(arg) {
11
11
  }
12
12
  return arg;
13
13
  }
14
+ function addUserToGroup(groupName) {
15
+ const currentUser = execSync("id -un", { encoding: "utf-8", windowsHide: true }).trim();
16
+ execSync(`sudo usermod -aG ${sanitizeShellArg(groupName)} ${sanitizeShellArg(currentUser)}`, {
17
+ stdio: "pipe",
18
+ windowsHide: true
19
+ });
20
+ }
14
21
  async function getDirInfo(targetPath) {
15
22
  const resolvedPath = resolve(targetPath);
16
23
  try {
@@ -20,19 +27,19 @@ async function getDirInfo(targetPath) {
20
27
  }
21
28
  let sudoAvailable;
22
29
  try {
23
- execSync("sudo -n true", { stdio: "pipe" });
30
+ execSync("sudo -n true", { stdio: "pipe", windowsHide: true });
24
31
  sudoAvailable = true;
25
32
  } catch {
26
33
  sudoAvailable = false;
27
34
  }
28
35
  const dirStat = await stat(resolvedPath);
29
36
  const groupGid = dirStat.gid;
30
- const currentUser = sanitizeShellArg(execSync("id -un", { encoding: "utf-8" }).trim());
31
- const groupsOutput = execSync(`id -Gn ${currentUser}`, { encoding: "utf-8" }).trim();
37
+ const currentUser = sanitizeShellArg(execSync("id -un", { encoding: "utf-8", windowsHide: true }).trim());
38
+ const groupsOutput = execSync(`id -Gn ${currentUser}`, { encoding: "utf-8", windowsHide: true }).trim();
32
39
  const userGroups = groupsOutput.split(/\s+/);
33
40
  let groupName = null;
34
41
  try {
35
- const rawGroupName = execSync(`getent group ${groupGid}`, { encoding: "utf-8" }).split(":")[0]?.trim();
42
+ const rawGroupName = execSync(`getent group ${groupGid}`, { encoding: "utf-8", windowsHide: true }).split(":")[0]?.trim();
36
43
  groupName = rawGroupName ? sanitizeShellArg(rawGroupName) : null;
37
44
  } catch {
38
45
  }
@@ -69,32 +76,29 @@ async function fixPermissions(targetPath, action) {
69
76
  error: 'You are not in the group that owns this directory. Use "Join group & extend group permissions" instead.'
70
77
  };
71
78
  }
72
- execSync(`sudo chmod g+w "${info.resolvedPath}"`, { stdio: "pipe" });
79
+ execSync(`sudo chmod g+w "${info.resolvedPath}"`, { stdio: "pipe", windowsHide: true });
73
80
  return { success: true, sudoAvailable: info.sudoAvailable, method: "group" };
74
81
  }
75
82
  if (action === "join_group") {
76
83
  if (!info.groupName) {
77
84
  return { success: false, sudoAvailable: info.sudoAvailable, error: "Could not determine group name" };
78
85
  }
79
- const currentUser = execSync("id -un", { encoding: "utf-8" }).trim();
80
- execSync(`sudo usermod -aG ${sanitizeShellArg(info.groupName)} ${sanitizeShellArg(currentUser)}`, {
81
- stdio: "pipe"
82
- });
86
+ addUserToGroup(info.groupName);
83
87
  return { success: true, sudoAvailable: info.sudoAvailable, method: "join_group" };
84
88
  }
85
89
  if (action === "join_group_and_group") {
86
90
  if (!info.groupName) {
87
91
  return { success: false, sudoAvailable: info.sudoAvailable, error: "Could not determine group name" };
88
92
  }
89
- execSync(`sudo chmod g+w "${info.resolvedPath}"`, { stdio: "pipe" });
90
- const currentUser = execSync("id -un", { encoding: "utf-8" }).trim();
91
- execSync(`sudo usermod -aG ${sanitizeShellArg(info.groupName)} ${sanitizeShellArg(currentUser)}`, {
92
- stdio: "pipe"
93
- });
93
+ execSync(`sudo chmod g+w "${info.resolvedPath}"`, { stdio: "pipe", windowsHide: true });
94
+ addUserToGroup(info.groupName);
94
95
  return { success: true, sudoAvailable: info.sudoAvailable, method: "join_group_and_group" };
95
96
  }
96
- const ownerUser = execSync("id -un", { encoding: "utf-8" }).trim();
97
- execSync(`sudo chown -R ${sanitizeShellArg(ownerUser)} "${info.resolvedPath}"`, { stdio: "pipe" });
97
+ const ownerUser = execSync("id -un", { encoding: "utf-8", windowsHide: true }).trim();
98
+ execSync(`sudo chown -R ${sanitizeShellArg(ownerUser)} "${info.resolvedPath}"`, {
99
+ stdio: "pipe",
100
+ windowsHide: true
101
+ });
98
102
  return { success: true, sudoAvailable: info.sudoAvailable, method: "ownership" };
99
103
  } catch (err) {
100
104
  const message = err instanceof Error ? err.message : "Unknown error";
@@ -108,4 +112,4 @@ export {
108
112
  checkPermissions,
109
113
  fixPermissions
110
114
  };
111
- //# sourceMappingURL=permissions-QLHZUEGW.js.map
115
+ //# sourceMappingURL=permissions-CGEK3DGZ.js.map
@@ -2,11 +2,11 @@ import {
2
2
  buildRunChatTurnParams,
3
3
  finalizeTurnCompletion,
4
4
  generateSessionNameForSession
5
- } from "./chunk-UOKVBO67.js";
6
- import "./chunk-AGXBUC4M.js";
5
+ } from "./chunk-NVPVDDQZ.js";
6
+ import "./chunk-FRU2X3IZ.js";
7
7
  import "./chunk-LBGHZLLH.js";
8
- import "./chunk-BIWVYBIE.js";
9
- import "./chunk-ADOXTORQ.js";
8
+ import "./chunk-BGTEIA2S.js";
9
+ import "./chunk-PK2RMVMB.js";
10
10
  import "./chunk-NWO6GRYE.js";
11
11
  import {
12
12
  createChatMessageMessage,
@@ -15,20 +15,20 @@ import {
15
15
  import "./chunk-EU3WWTFH.js";
16
16
  import "./chunk-CDRQJDSJ.js";
17
17
  import "./chunk-YQ3SOPBI.js";
18
- import "./chunk-VZHN46NW.js";
18
+ import "./chunk-6VDCH5ML.js";
19
19
  import {
20
20
  getEventStore
21
21
  } from "./chunk-AIJE3RYH.js";
22
22
  import "./chunk-TMUBLQFC.js";
23
23
  import "./chunk-ZPIZLTWU.js";
24
24
  import "./chunk-J2GP3J3X.js";
25
- import "./chunk-PSJON33Y.js";
25
+ import "./chunk-YHEQTVFV.js";
26
26
  import "./chunk-Z6W4YHJB.js";
27
27
  import {
28
28
  logger
29
29
  } from "./chunk-K44MW7JJ.js";
30
30
  import "./chunk-YD6NDTKF.js";
31
- import "./chunk-QQ5XY6BH.js";
31
+ import "./chunk-43UFGATL.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-YMNKXVDF.js");
177
+ const { runChatTurn } = await import("./orchestrator-MH7J2YVP.js");
178
178
  const runChatTurnParams = buildRunChatTurnParams({
179
179
  sessionManager,
180
180
  sessionId,
@@ -222,4 +222,4 @@ var QueueProcessor = class {
222
222
  export {
223
223
  QueueProcessor
224
224
  };
225
- //# sourceMappingURL=processor-2BB65JWR.js.map
225
+ //# sourceMappingURL=processor-34MVJZTD.js.map
@@ -74,7 +74,7 @@ async function createDirectoryWithGit(projectName, workdir) {
74
74
  }
75
75
  if (!await directoryExists(join(fullPath, ".git"))) {
76
76
  try {
77
- execSync("git init", { cwd: fullPath, stdio: "pipe" });
77
+ execSync("git init", { cwd: fullPath, stdio: "pipe", windowsHide: true });
78
78
  } catch (gitErr) {
79
79
  const errMsg = gitErr instanceof Error ? gitErr.message : "Unknown";
80
80
  const exitCode = gitErr.status ?? gitErr.exitCode;
@@ -82,8 +82,8 @@ async function createDirectoryWithGit(projectName, workdir) {
82
82
  let sudoSuccess = false;
83
83
  if (isPermission) {
84
84
  try {
85
- const currentUser = execSync("id -un", { encoding: "utf-8" }).trim();
86
- execSync(`sudo -u ${currentUser} git init`, { cwd: fullPath, stdio: "pipe" });
85
+ const currentUser = execSync("id -un", { encoding: "utf-8", windowsHide: true }).trim();
86
+ execSync(`sudo -u ${currentUser} git init`, { cwd: fullPath, stdio: "pipe", windowsHide: true });
87
87
  sudoSuccess = true;
88
88
  } catch {
89
89
  }
@@ -109,4 +109,4 @@ export {
109
109
  createDirectoryWithGit,
110
110
  validateProjectName
111
111
  };
112
- //# sourceMappingURL=project-creator-7RBHP6K6.js.map
112
+ //# sourceMappingURL=project-creator-IDW7RACH.js.map
@@ -394,7 +394,7 @@ interface Diagnostic {
394
394
  code?: string | number;
395
395
  }
396
396
  /** Supported LLM inference backends */
397
- type LlmBackend = 'vllm' | 'sglang' | 'ollama' | 'llamacpp' | 'opencode-go' | 'unknown';
397
+ type LlmBackend = 'vllm' | 'sglang' | 'ollama' | 'llamacpp' | 'lmstudio' | 'opencode-go' | 'unknown';
398
398
  /** Extended backend type including cloud providers */
399
399
  type ProviderBackend = LlmBackend | 'openai' | 'anthropic';
400
400
  /** Model configuration with context window */
@@ -492,6 +492,8 @@ interface Config {
492
492
  activeWorkflowId?: string | undefined;
493
493
  /** Disable automatic session title generation */
494
494
  disableAutoSessionTitle?: boolean;
495
+ /** Override path for the global config file (used for test isolation) */
496
+ globalConfigPath?: string;
495
497
  /** MCP server configurations */
496
498
  mcpServers?: Record<string, {
497
499
  transport: 'stdio' | 'http';
@@ -10,13 +10,13 @@ import {
10
10
  } from "./chunk-XY3LESVZ.js";
11
11
  import {
12
12
  fetchAvailableModelsFromBackend
13
- } from "./chunk-R2QCDYYR.js";
13
+ } from "./chunk-H774GQJW.js";
14
14
  import {
15
15
  detectModel
16
16
  } from "./chunk-M3RB4IF6.js";
17
17
  import "./chunk-J2GP3J3X.js";
18
- import "./chunk-ZZLCX7YT.js";
19
- import "./chunk-PSJON33Y.js";
18
+ import "./chunk-JKLPWTUN.js";
19
+ import "./chunk-YHEQTVFV.js";
20
20
  import "./chunk-HNCM3D7Y.js";
21
21
  import "./chunk-Z6W4YHJB.js";
22
22
  import "./chunk-ZO5EXQMG.js";
@@ -28,7 +28,7 @@ import {
28
28
  loadGlobalConfig,
29
29
  removeProvider,
30
30
  saveGlobalConfig
31
- } from "./chunk-QQ5XY6BH.js";
31
+ } from "./chunk-43UFGATL.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-5ZHFKWOW.js");
273
+ const { setDefaultModelSelection } = await import("./config-GMQUPNBY.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-V6Q6WJAF.js.map
401
+ //# sourceMappingURL=provider-LBYBC5AG.js.map
@@ -3,11 +3,11 @@ import {
3
3
  fetchAvailableModelsFromBackend,
4
4
  fetchModelsWithContext,
5
5
  parseDefaultModelSelection
6
- } from "./chunk-R2QCDYYR.js";
6
+ } from "./chunk-H774GQJW.js";
7
7
  import "./chunk-M3RB4IF6.js";
8
8
  import "./chunk-J2GP3J3X.js";
9
- import "./chunk-ZZLCX7YT.js";
10
- import "./chunk-PSJON33Y.js";
9
+ import "./chunk-JKLPWTUN.js";
10
+ import "./chunk-YHEQTVFV.js";
11
11
  import "./chunk-HNCM3D7Y.js";
12
12
  import "./chunk-Z6W4YHJB.js";
13
13
  import "./chunk-ZO5EXQMG.js";
@@ -20,4 +20,4 @@ export {
20
20
  fetchModelsWithContext,
21
21
  parseDefaultModelSelection
22
22
  };
23
- //# sourceMappingURL=provider-manager-PR64DEN2.js.map
23
+ //# sourceMappingURL=provider-manager-ABEUYU3K.js.map
@@ -17,14 +17,14 @@ import { platform } from "os";
17
17
  var PWA_CONFIG_FILE = "pwa.json";
18
18
  function execSyncSilent(cmd) {
19
19
  try {
20
- return execSync(cmd, { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
20
+ return execSync(cmd, { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"], windowsHide: true });
21
21
  } catch {
22
22
  return "";
23
23
  }
24
24
  }
25
25
  function execSyncOk(cmd) {
26
26
  try {
27
- execSync(cmd, { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
27
+ execSync(cmd, { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"], windowsHide: true });
28
28
  return true;
29
29
  } catch {
30
30
  return false;
@@ -86,7 +86,7 @@ function getFirefoxPwaInstallHint() {
86
86
  }
87
87
  function probeInstalledApp(manifestUrl) {
88
88
  try {
89
- const out = execSync("firefoxpwa profile list", { encoding: "utf-8" });
89
+ const out = execSync("firefoxpwa profile list", { encoding: "utf-8", windowsHide: true });
90
90
  const lines = out.split("\n");
91
91
  let currentProfile = "";
92
92
  for (const line of lines) {
@@ -110,7 +110,8 @@ function isServerReachable(port) {
110
110
  try {
111
111
  const result = execSync(`curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:${port}/manifest.webmanifest`, {
112
112
  encoding: "utf-8",
113
- timeout: 5e3
113
+ timeout: 5e3,
114
+ windowsHide: true
114
115
  });
115
116
  return result.trim() === "200";
116
117
  } catch {
@@ -179,7 +180,7 @@ See: https://pwasforfirefox.filips.si/installation/`);
179
180
  if (install) {
180
181
  R.info("Running: firefoxpwa runtime install");
181
182
  try {
182
- spawn("firefoxpwa", ["runtime", "install"], { stdio: "inherit" });
183
+ spawn("firefoxpwa", ["runtime", "install"], { stdio: "inherit", windowsHide: true });
183
184
  } catch {
184
185
  R.error("Failed to install runtime.");
185
186
  process.exit(1);
@@ -219,7 +220,7 @@ Use "openfox pwa launch" to start it, or "openfox pwa uninstall" to remove it.`)
219
220
  let appId = "";
220
221
  let profileId = "00000000000000000000000000";
221
222
  try {
222
- execSync(`firefoxpwa site install ${manifestUrl}`, { encoding: "utf-8" });
223
+ execSync(`firefoxpwa site install ${manifestUrl}`, { encoding: "utf-8", windowsHide: true });
223
224
  const detected = probeInstalledApp(manifestUrl);
224
225
  if (detected) {
225
226
  appId = detected.appId;
@@ -261,7 +262,7 @@ async function pwaUninstall(mode) {
261
262
  }
262
263
  R.info("Removing OpenFox PWA...");
263
264
  try {
264
- execSync(`firefoxpwa site uninstall ${appId} --quiet`, { encoding: "utf-8" });
265
+ execSync(`firefoxpwa site uninstall ${appId} --quiet`, { encoding: "utf-8", windowsHide: true });
265
266
  } catch {
266
267
  R.error(`Failed to uninstall PWA (ID: ${appId}).`);
267
268
  process.exit(1);
@@ -289,7 +290,7 @@ async function pwaLaunch(mode) {
289
290
  return;
290
291
  }
291
292
  R.info("Launching OpenFox PWA...");
292
- spawn("firefoxpwa", ["site", "launch", appId], { stdio: "inherit" });
293
+ spawn("firefoxpwa", ["site", "launch", appId], { stdio: "inherit", windowsHide: true });
293
294
  }
294
295
  async function pwaUpdate(mode) {
295
296
  if (!isFirefoxPwaAvailable()) {
@@ -309,7 +310,7 @@ async function pwaUpdate(mode) {
309
310
  return;
310
311
  }
311
312
  try {
312
- execSync(`firefoxpwa site update ${appId}`, { encoding: "utf-8" });
313
+ execSync(`firefoxpwa site update ${appId}`, { encoding: "utf-8", windowsHide: true });
313
314
  } catch {
314
315
  R.error("Failed to update PWA metadata.");
315
316
  process.exit(1);
@@ -360,4 +361,4 @@ export {
360
361
  runPwaCommand,
361
362
  savePwaConfig
362
363
  };
363
- //# sourceMappingURL=pwa-M6QZ52ZO.js.map
364
+ //# sourceMappingURL=pwa-T6JRAYJB.js.map