openfox 2.0.133 → 2.0.134

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 (82) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/CHANGELOG.md +12 -0
  3. package/dist/{chat-handler-T47GATL5.js → chat-handler-YCZE2XEJ.js} +23 -22
  4. package/dist/chunk-24YKXKCG.js +35 -0
  5. package/dist/chunk-2OMGR7LN.js +45 -0
  6. package/dist/{chunk-OUQZZEIQ.js → chunk-5IXCCMFU.js} +335 -187
  7. package/dist/{chunk-MQMPIXON.js → chunk-5UMXFLET.js} +3 -3
  8. package/dist/{chunk-5JWJEZJ3.js → chunk-5UQ4CKOA.js} +2 -2
  9. package/dist/{chunk-P5MSY7ZI.js → chunk-7HGBJFIJ.js} +22 -17
  10. package/dist/{chunk-7JVBDBXE.js → chunk-7QMWYNVF.js} +2 -2
  11. package/dist/{chunk-P57IBMK4.js → chunk-AATMPL7S.js} +4 -4
  12. package/dist/{chunk-ZL4IAFF3.js → chunk-BZND27IB.js} +3 -3
  13. package/dist/{chunk-FGNJMKDV.js → chunk-CSYOWFPU.js} +5 -5
  14. package/dist/{chunk-LQKXJPKP.js → chunk-CTWZPN7G.js} +5 -1
  15. package/dist/{chunk-BKMWZTNO.js → chunk-DWA4IE65.js} +14 -2
  16. package/dist/{chunk-RRUSYVQD.js → chunk-FAQDLL2X.js} +8 -8
  17. package/dist/{chunk-HCYSGLY2.js → chunk-HF3NDXB4.js} +1 -1
  18. package/dist/{chunk-6EZDW4JS.js → chunk-J3NMNYGM.js} +2 -2
  19. package/dist/{chunk-HXHPKGJE.js → chunk-J5HOUEPE.js} +614 -157
  20. package/dist/{chunk-A7CB4USC.js → chunk-M4J2L4VH.js} +132 -45
  21. package/dist/{chunk-M5T4RDPJ.js → chunk-MEEUXRFL.js} +2 -2
  22. package/dist/{chunk-OMMPTN6X.js → chunk-MRE4OYKI.js} +69 -27
  23. package/dist/{chunk-MGEYAYGU.js → chunk-O3RCSKUH.js} +2 -2
  24. package/dist/{chunk-ELYHHEYL.js → chunk-ORCQ3EXQ.js} +2 -2
  25. package/dist/{chunk-FEIRWXLX.js → chunk-OZWHRBDY.js} +64 -17
  26. package/dist/{chunk-TACWRDDC.js → chunk-QDARWVQ2.js} +2 -2
  27. package/dist/{chunk-VXG3AFFY.js → chunk-QICVOQNX.js} +8 -8
  28. package/dist/chunk-QTLYD2FF.js +7 -0
  29. package/dist/{chunk-Y6ZGHOKM.js → chunk-YLVOU7T7.js} +4 -4
  30. package/dist/{chunk-GFW2HWJ6.js → chunk-YOPXAI2W.js} +37 -16
  31. package/dist/{chunk-CLDCHOEA.js → chunk-ZMK4VX7V.js} +2 -2
  32. package/dist/{chunk-KWAHD2JA.js → chunk-ZTBKMVV6.js} +2 -2
  33. package/dist/cli/dev.js +4 -1
  34. package/dist/cli/index.js +4 -1
  35. package/dist/{client-2K6PPPJJ.js → client-VVYOWXRR.js} +4 -4
  36. package/dist/{compactor-OEJAA2YP.js → compactor-PD6DQ4NY.js} +9 -9
  37. package/dist/{dynamic-context-NJZKAZE3.js → dynamic-context-WKEXQCTK.js} +10 -10
  38. package/dist/{events-ZJPRGVL2.js → events-3WSNI7XC.js} +6 -6
  39. package/dist/{folding-QRZOHY2I.js → folding-H7JTX6KI.js} +4 -4
  40. package/dist/{http-client-P4XTKAZA.js → http-client-A445WYZU.js} +3 -3
  41. package/dist/{install-VA2F6X6Z.js → install-AVTFA344.js} +64 -15
  42. package/dist/{launch-UKXVO37B.js → launch-FJ65HRV4.js} +23 -22
  43. package/dist/{manager-TMBFBCQL.js → manager-ZACEUL5P.js} +4 -4
  44. package/dist/{mcp-YU7AM3UV.js → mcp-SQ4DOGPT.js} +22 -9
  45. package/dist/{orchestrator-GX22Y5EM.js → orchestrator-OT66EDXO.js} +22 -21
  46. package/dist/package.json +3 -1
  47. package/dist/{path-security-CBACXAMS.js → path-security-5CFMMULR.js} +10 -10
  48. package/dist/{platform-5LQXOZO3.js → platform-XPMZKAUB.js} +3 -3
  49. package/dist/{processor-V35OLKRV.js → processor-CHMHMMIE.js} +22 -21
  50. package/dist/{project-creator-6AGQTNXB.js → project-creator-T3A4H3YV.js} +42 -29
  51. package/dist/{protocol-BMUoqwYH.d.ts → protocol-Nr_H1_oC.d.ts} +3 -1
  52. package/dist/{protocol-Y7MRKRUO.js → protocol-XO4ZROAU.js} +3 -3
  53. package/dist/provider/index.d.ts +4 -4
  54. package/dist/provider-JWUNG2TD.js +507 -0
  55. package/dist/{provider-manager-BO5ZBG3T.js → provider-manager-2KKZ37XJ.js} +5 -5
  56. package/dist/pwa-V5PFB4OQ.js +502 -0
  57. package/dist/{registry-CMSSZHDC.js → registry-BEIR7Y5G.js} +3 -3
  58. package/dist/{serve-XRVT3D7Z.js → serve-HSDVY37K.js} +47 -36
  59. package/dist/server/index.d.ts +3 -3
  60. package/dist/server/index.js +27 -26
  61. package/dist/{server-GXMZMPXI.js → server-3UVLECD5.js} +26 -25
  62. package/dist/{service-WKABQHKL.js → service-M77VWL2M.js} +97 -32
  63. package/dist/{service-O3LCO3TQ.js → service-XIUNS5XV.js} +7 -6
  64. package/dist/{session-overrides-OECQYRDK.js → session-overrides-Y5B4XQPU.js} +5 -5
  65. package/dist/{sessions-NMPX5ICI.js → sessions-IGINPPBP.js} +4 -4
  66. package/dist/{settings-MDCRNQBY.js → settings-ZJPM6PQV.js} +2 -2
  67. package/dist/shared/index.d.ts +31 -4
  68. package/dist/shared/index.js +16 -2
  69. package/dist/{tasks-WOC3QUFA.js → tasks-3JJWJJ3X.js} +34 -18
  70. package/dist/{tools-CW6POKUL.js → tools-WWIWD3O7.js} +20 -19
  71. package/dist/{types-CoY8Ka1C.d.ts → types-BlQjLBui.d.ts} +1 -1
  72. package/dist/{types-BIkpxjaj.d.ts → types-G10ho8PT.d.ts} +1 -1
  73. package/dist/update-Q6SH7UP2.js +76 -0
  74. package/dist/web/assets/index-C48qmBAI.js +313 -0
  75. package/dist/web/index.html +1 -1
  76. package/dist/web/sw.js +1 -1
  77. package/package.json +3 -1
  78. package/dist/chunk-JKGHTBEV.js +0 -7
  79. package/dist/provider-NWRGNGS3.js +0 -403
  80. package/dist/pwa-2GRFSXD7.js +0 -363
  81. package/dist/update-VC3Y3EOP.js +0 -49
  82. package/dist/web/assets/index-ATAQvBwl.js +0 -312
@@ -1,3 +1,8 @@
1
+ import {
2
+ cliT
3
+ } from "./chunk-2OMGR7LN.js";
4
+ import "./chunk-24YKXKCG.js";
5
+ import "./chunk-CQGTEGKL.js";
1
6
  import "./chunk-YLJ4XMA6.js";
2
7
 
3
8
  // src/cli/install.ts
@@ -69,14 +74,38 @@ async function checkInstall(env = {}) {
69
74
  };
70
75
  }
71
76
  function printCheck(check) {
72
- console.log("OpenFox CLI installation:");
73
- console.log(` Current executable: ${check.currentExecutable}`);
74
- console.log(` Node executable: ${check.nodeExecutable}`);
75
- console.log(` npm global prefix: ${check.npmPrefix}`);
76
- console.log(` Persistent launcher: ${check.launcherPath}`);
77
- console.log(` Launcher exists: ${check.launcherExists ? "yes" : "no"}`);
78
- console.log(` Launcher is current: ${check.launcherPersistent ? "yes" : "no"}`);
79
- console.log(` Launcher directory in PATH: ${check.directoryInPath ? "yes" : "no"}`);
77
+ console.log(cliT({ en: "OpenFox CLI installation:", fr: "Installation de l\u2019interface OpenFox :" }));
78
+ console.log(
79
+ cliT({
80
+ en: ` Current executable: ${check.currentExecutable}`,
81
+ fr: ` Ex\xE9cutable actuel : ${check.currentExecutable}`
82
+ })
83
+ );
84
+ console.log(
85
+ cliT({ en: ` Node executable: ${check.nodeExecutable}`, fr: ` Ex\xE9cutable Node : ${check.nodeExecutable}` })
86
+ );
87
+ console.log(cliT({ en: ` npm global prefix: ${check.npmPrefix}`, fr: ` Pr\xE9fixe global npm : ${check.npmPrefix}` }));
88
+ console.log(
89
+ cliT({ en: ` Persistent launcher: ${check.launcherPath}`, fr: ` Lanceur persistant : ${check.launcherPath}` })
90
+ );
91
+ console.log(
92
+ cliT({
93
+ en: ` Launcher exists: ${check.launcherExists ? "yes" : "no"}`,
94
+ fr: ` Lanceur existant : ${check.launcherExists ? "oui" : "non"}`
95
+ })
96
+ );
97
+ console.log(
98
+ cliT({
99
+ en: ` Launcher is current: ${check.launcherPersistent ? "yes" : "no"}`,
100
+ fr: ` Lanceur \xE0 jour : ${check.launcherPersistent ? "oui" : "non"}`
101
+ })
102
+ );
103
+ console.log(
104
+ cliT({
105
+ en: ` Launcher directory in PATH: ${check.directoryInPath ? "yes" : "no"}`,
106
+ fr: ` R\xE9pertoire du lanceur dans le PATH : ${check.directoryInPath ? "oui" : "non"}`
107
+ })
108
+ );
80
109
  }
81
110
  async function runInstall(options = {}) {
82
111
  const env = options.env ?? {};
@@ -89,7 +118,12 @@ async function runInstall(options = {}) {
89
118
  const nodeExecutable = env.nodeExecutable ?? process.execPath;
90
119
  const cliExecutable = env.cliExecutable ?? process.argv[1];
91
120
  if (!cliExecutable) {
92
- console.error("Unable to determine the OpenFox CLI executable path.");
121
+ console.error(
122
+ cliT({
123
+ en: "Unable to determine the OpenFox CLI executable path.",
124
+ fr: "Impossible de d\xE9terminer le chemin de l\u2019ex\xE9cutable CLI d\u2019OpenFox."
125
+ })
126
+ );
93
127
  return 1;
94
128
  }
95
129
  await mkdir(dirname(launcherPath), { recursive: true });
@@ -98,15 +132,30 @@ async function runInstall(options = {}) {
98
132
  });
99
133
  const check = await checkInstall({ ...env, nodeExecutable, cliExecutable });
100
134
  if (!options.quiet) {
101
- console.log(`Persistent OpenFox launcher installed: ${launcherPath}`);
135
+ console.log(
136
+ cliT({
137
+ en: `Persistent OpenFox launcher installed: ${launcherPath}`,
138
+ fr: `Lanceur OpenFox persistant install\xE9 : ${launcherPath}`
139
+ })
140
+ );
102
141
  }
103
142
  if (!check.directoryInPath) {
104
143
  if (platform === "win32") {
105
- console.log(`Add this directory to your user PATH:
106
- ${check.launcherDirectory}`);
144
+ console.log(
145
+ cliT({
146
+ en: `Add this directory to your user PATH:
147
+ ${check.launcherDirectory}`,
148
+ fr: `Ajoutez ce r\xE9pertoire \xE0 votre PATH utilisateur :
149
+ ${check.launcherDirectory}`
150
+ })
151
+ );
107
152
  } else {
108
- console.log(`Add this line to your shell configuration:
109
- export PATH="$HOME/.local/bin:$PATH"`);
153
+ console.log(
154
+ cliT({
155
+ en: 'Add this line to your shell configuration:\nexport PATH="$HOME/.local/bin:$PATH"',
156
+ fr: 'Ajoutez cette ligne \xE0 votre configuration de shell :\nexport PATH="$HOME/.local/bin:$PATH"'
157
+ })
158
+ );
110
159
  }
111
160
  }
112
161
  return 0;
@@ -117,4 +166,4 @@ export {
117
166
  getLauncherPath,
118
167
  runInstall
119
168
  };
120
- //# sourceMappingURL=install-VA2F6X6Z.js.map
169
+ //# sourceMappingURL=install-AVTFA344.js.map
@@ -1,48 +1,49 @@
1
1
  import {
2
2
  abortRunnerRun,
3
3
  launchWorkflowRun
4
- } from "./chunk-P5MSY7ZI.js";
5
- import "./chunk-GFW2HWJ6.js";
6
- import "./chunk-HXHPKGJE.js";
4
+ } from "./chunk-7HGBJFIJ.js";
5
+ import "./chunk-YOPXAI2W.js";
6
+ import "./chunk-J5HOUEPE.js";
7
7
  import "./chunk-XE6UC5Z3.js";
8
8
  import "./chunk-J7GAZGZT.js";
9
- import "./chunk-FEIRWXLX.js";
10
- import "./chunk-TACWRDDC.js";
9
+ import "./chunk-OZWHRBDY.js";
10
+ import "./chunk-QDARWVQ2.js";
11
11
  import "./chunk-7ET46SNE.js";
12
12
  import "./chunk-LW6MMSTD.js";
13
- import "./chunk-MQMPIXON.js";
13
+ import "./chunk-5UMXFLET.js";
14
14
  import "./chunk-I72ACQ6R.js";
15
15
  import "./chunk-JE7LW7Y6.js";
16
16
  import "./chunk-OAN4BXEW.js";
17
- import "./chunk-VXG3AFFY.js";
18
- import "./chunk-BKMWZTNO.js";
19
- import "./chunk-7JVBDBXE.js";
17
+ import "./chunk-QICVOQNX.js";
18
+ import "./chunk-DWA4IE65.js";
19
+ import "./chunk-7QMWYNVF.js";
20
20
  import "./chunk-JURM3RPZ.js";
21
- import "./chunk-Y6ZGHOKM.js";
22
- import "./chunk-FGNJMKDV.js";
23
- import "./chunk-M5T4RDPJ.js";
24
- import "./chunk-KWAHD2JA.js";
25
- import "./chunk-ELYHHEYL.js";
21
+ import "./chunk-YLVOU7T7.js";
22
+ import "./chunk-CSYOWFPU.js";
23
+ import "./chunk-MEEUXRFL.js";
24
+ import "./chunk-ZTBKMVV6.js";
25
+ import "./chunk-ORCQ3EXQ.js";
26
26
  import "./chunk-OSXPQSLW.js";
27
- import "./chunk-P57IBMK4.js";
27
+ import "./chunk-AATMPL7S.js";
28
28
  import "./chunk-LCLH6ZUL.js";
29
- import "./chunk-MGEYAYGU.js";
30
- import "./chunk-5JWJEZJ3.js";
29
+ import "./chunk-O3RCSKUH.js";
30
+ import "./chunk-5UQ4CKOA.js";
31
31
  import "./chunk-OA2FURC3.js";
32
32
  import "./chunk-J2GP3J3X.js";
33
33
  import "./chunk-DPFET73G.js";
34
- import "./chunk-CLDCHOEA.js";
34
+ import "./chunk-ZMK4VX7V.js";
35
35
  import "./chunk-TS5WKTFB.js";
36
36
  import "./chunk-UV6IH6HK.js";
37
37
  import "./chunk-HNCM3D7Y.js";
38
38
  import "./chunk-EUOWCVU6.js";
39
- import "./chunk-6EZDW4JS.js";
40
- import "./chunk-LQKXJPKP.js";
39
+ import "./chunk-J3NMNYGM.js";
40
+ import "./chunk-CTWZPN7G.js";
41
41
  import "./chunk-JU757HVI.js";
42
42
  import "./chunk-2AI7VYPN.js";
43
43
  import "./chunk-K44MW7JJ.js";
44
44
  import "./chunk-7OHXF5GW.js";
45
- import "./chunk-HCYSGLY2.js";
45
+ import "./chunk-HF3NDXB4.js";
46
+ import "./chunk-24YKXKCG.js";
46
47
  import "./chunk-R5FAEKXQ.js";
47
48
  import "./chunk-CQGTEGKL.js";
48
49
  import "./chunk-YLJ4XMA6.js";
@@ -50,4 +51,4 @@ export {
50
51
  abortRunnerRun,
51
52
  launchWorkflowRun
52
53
  };
53
- //# sourceMappingURL=launch-UKXVO37B.js.map
54
+ //# sourceMappingURL=launch-FJ65HRV4.js.map
@@ -6,10 +6,10 @@ import {
6
6
  onProcessEvent,
7
7
  startProcessCommand,
8
8
  stopProcess
9
- } from "./chunk-MQMPIXON.js";
9
+ } from "./chunk-5UMXFLET.js";
10
10
  import "./chunk-I72ACQ6R.js";
11
- import "./chunk-MGEYAYGU.js";
12
- import "./chunk-LQKXJPKP.js";
11
+ import "./chunk-O3RCSKUH.js";
12
+ import "./chunk-CTWZPN7G.js";
13
13
  import "./chunk-JU757HVI.js";
14
14
  import "./chunk-K44MW7JJ.js";
15
15
  import "./chunk-YLJ4XMA6.js";
@@ -22,4 +22,4 @@ export {
22
22
  startProcessCommand,
23
23
  stopProcess
24
24
  };
25
- //# sourceMappingURL=manager-TMBFBCQL.js.map
25
+ //# sourceMappingURL=manager-ZACEUL5P.js.map
@@ -3,9 +3,13 @@ import {
3
3
  isCancel,
4
4
  password
5
5
  } from "./chunk-AGXJ5O63.js";
6
+ import {
7
+ cliT
8
+ } from "./chunk-2OMGR7LN.js";
6
9
  import {
7
10
  buildOpenFoxMcpBootstrap
8
11
  } from "./chunk-YNMP647F.js";
12
+ import "./chunk-24YKXKCG.js";
9
13
  import {
10
14
  loadAuthConfig
11
15
  } from "./chunk-CQGJ5RWB.js";
@@ -76,8 +80,12 @@ async function runMcpCommand(mode, options = {}) {
76
80
  const port = livePort ?? requestedPort;
77
81
  if (!livePort) {
78
82
  console.warn(
79
- `
80
- \u26A0 No running OpenFox server detected near port ${requestedPort} \u2014 the config below assumes it will start there.`
83
+ cliT({
84
+ en: `
85
+ \u26A0 No running OpenFox server detected near port ${requestedPort} \u2014 the config below assumes it will start there.`,
86
+ fr: `
87
+ \u26A0 Aucun serveur OpenFox en cours d\xE9tect\xE9 pr\xE8s du port ${requestedPort} \u2014 la configuration ci-dessous suppose qu\u2019il d\xE9marrera l\xE0.`
88
+ })
81
89
  );
82
90
  }
83
91
  const authRequired = auth?.strategy === "network" && auth.encryptedPassword != null && auth.encryptedPassword.length > 0;
@@ -86,7 +94,7 @@ async function runMcpCommand(mode, options = {}) {
86
94
  const privateKey = await readFile(getAuthKeyPath(mode), "utf-8");
87
95
  let entered = options.password;
88
96
  if (entered == null) {
89
- const pwd = await password({ message: "OpenFox password:" });
97
+ const pwd = await password({ message: cliT({ en: "OpenFox password:", fr: "Mot de passe OpenFox :" }) });
90
98
  if (isCancel(pwd)) {
91
99
  cancel();
92
100
  process.exit(1);
@@ -94,18 +102,23 @@ async function runMcpCommand(mode, options = {}) {
94
102
  entered = typeof pwd === "string" ? pwd : "";
95
103
  }
96
104
  if (!verifyPassword(auth.encryptedPassword, privateKey, entered)) {
97
- console.error("Invalid password");
105
+ console.error(cliT({ en: "Invalid password", fr: "Mot de passe invalide" }));
98
106
  process.exit(1);
99
107
  }
100
108
  sessionToken = signSessionToken(privateKey, entered);
101
109
  }
102
110
  const bootstrap = buildOpenFoxMcpBootstrap({ host, port, authRequired, sessionToken });
103
- console.log("OpenFox MCP client config");
104
- console.log("=========================");
111
+ console.log(cliT({ en: "OpenFox MCP client config", fr: "Configuration client MCP OpenFox" }));
112
+ console.log(cliT({ en: "=========================", fr: "=========================" }));
105
113
  console.log();
106
- console.log(`Endpoint: ${bootstrap.url}`);
114
+ console.log(cliT({ en: `Endpoint: ${bootstrap.url}`, fr: `Point de terminaison : ${bootstrap.url}` }));
107
115
  console.log();
108
- console.log("Paste into your MCP client (Claude Desktop, Cursor, ...):");
116
+ console.log(
117
+ cliT({
118
+ en: "Paste into your MCP client (Claude Desktop, Cursor, ...):",
119
+ fr: "Collez dans votre client MCP (Claude Desktop, Cursor, ...) :"
120
+ })
121
+ );
109
122
  console.log();
110
123
  console.log(renderMcpClientConfig(bootstrap));
111
124
  }
@@ -117,4 +130,4 @@ export {
117
130
  signSessionToken,
118
131
  verifyPassword
119
132
  };
120
- //# sourceMappingURL=mcp-YU7AM3UV.js.map
133
+ //# sourceMappingURL=mcp-SQ4DOGPT.js.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  runAgentTurn,
3
3
  runChatTurn
4
- } from "./chunk-GFW2HWJ6.js";
5
- import "./chunk-HXHPKGJE.js";
4
+ } from "./chunk-YOPXAI2W.js";
5
+ import "./chunk-J5HOUEPE.js";
6
6
  import "./chunk-XE6UC5Z3.js";
7
7
  import "./chunk-J7GAZGZT.js";
8
- import "./chunk-FEIRWXLX.js";
9
- import "./chunk-TACWRDDC.js";
8
+ import "./chunk-OZWHRBDY.js";
9
+ import "./chunk-QDARWVQ2.js";
10
10
  import {
11
11
  TurnMetrics,
12
12
  createChatDoneEvent,
@@ -16,38 +16,39 @@ import {
16
16
  createToolResultEvent
17
17
  } from "./chunk-7ET46SNE.js";
18
18
  import "./chunk-LW6MMSTD.js";
19
- import "./chunk-MQMPIXON.js";
19
+ import "./chunk-5UMXFLET.js";
20
20
  import "./chunk-I72ACQ6R.js";
21
21
  import "./chunk-JE7LW7Y6.js";
22
22
  import "./chunk-OAN4BXEW.js";
23
- import "./chunk-VXG3AFFY.js";
24
- import "./chunk-BKMWZTNO.js";
25
- import "./chunk-7JVBDBXE.js";
23
+ import "./chunk-QICVOQNX.js";
24
+ import "./chunk-DWA4IE65.js";
25
+ import "./chunk-7QMWYNVF.js";
26
26
  import "./chunk-JURM3RPZ.js";
27
- import "./chunk-Y6ZGHOKM.js";
28
- import "./chunk-FGNJMKDV.js";
29
- import "./chunk-M5T4RDPJ.js";
30
- import "./chunk-KWAHD2JA.js";
31
- import "./chunk-ELYHHEYL.js";
27
+ import "./chunk-YLVOU7T7.js";
28
+ import "./chunk-CSYOWFPU.js";
29
+ import "./chunk-MEEUXRFL.js";
30
+ import "./chunk-ZTBKMVV6.js";
31
+ import "./chunk-ORCQ3EXQ.js";
32
32
  import "./chunk-OSXPQSLW.js";
33
- import "./chunk-P57IBMK4.js";
33
+ import "./chunk-AATMPL7S.js";
34
34
  import "./chunk-LCLH6ZUL.js";
35
- import "./chunk-MGEYAYGU.js";
36
- import "./chunk-5JWJEZJ3.js";
35
+ import "./chunk-O3RCSKUH.js";
36
+ import "./chunk-5UQ4CKOA.js";
37
37
  import "./chunk-OA2FURC3.js";
38
38
  import "./chunk-J2GP3J3X.js";
39
39
  import "./chunk-DPFET73G.js";
40
- import "./chunk-CLDCHOEA.js";
40
+ import "./chunk-ZMK4VX7V.js";
41
41
  import "./chunk-TS5WKTFB.js";
42
42
  import "./chunk-UV6IH6HK.js";
43
43
  import "./chunk-HNCM3D7Y.js";
44
44
  import "./chunk-EUOWCVU6.js";
45
- import "./chunk-6EZDW4JS.js";
46
- import "./chunk-LQKXJPKP.js";
45
+ import "./chunk-J3NMNYGM.js";
46
+ import "./chunk-CTWZPN7G.js";
47
47
  import "./chunk-JU757HVI.js";
48
48
  import "./chunk-2AI7VYPN.js";
49
49
  import "./chunk-K44MW7JJ.js";
50
- import "./chunk-HCYSGLY2.js";
50
+ import "./chunk-HF3NDXB4.js";
51
+ import "./chunk-24YKXKCG.js";
51
52
  import "./chunk-R5FAEKXQ.js";
52
53
  import "./chunk-CQGTEGKL.js";
53
54
  import "./chunk-YLJ4XMA6.js";
@@ -61,4 +62,4 @@ export {
61
62
  runAgentTurn,
62
63
  runChatTurn
63
64
  };
64
- //# sourceMappingURL=orchestrator-GX22Y5EM.js.map
65
+ //# sourceMappingURL=orchestrator-OT66EDXO.js.map
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "2.0.133",
3
+ "version": "2.0.134",
4
4
  "description": "Local-LLM-first agentic coding assistant",
5
5
  "type": "module",
6
6
  "bin": {
@@ -116,6 +116,8 @@
116
116
  "zustand": "^5.0.12"
117
117
  },
118
118
  "devDependencies": {
119
+ "@eslint-react/eslint-plugin": "^5.18.6",
120
+ "@eslint-react/kit": "^5.18.6",
119
121
  "@eslint/js": "^10.0.1",
120
122
  "@playwright/test": "^1.58.2",
121
123
  "@testing-library/jest-dom": "^6.9.1",
@@ -20,20 +20,20 @@ import {
20
20
  registerPathConfirmation,
21
21
  requestPathAccess,
22
22
  resolveRelativeTraversals
23
- } from "./chunk-Y6ZGHOKM.js";
24
- import "./chunk-FGNJMKDV.js";
25
- import "./chunk-M5T4RDPJ.js";
26
- import "./chunk-KWAHD2JA.js";
27
- import "./chunk-ELYHHEYL.js";
23
+ } from "./chunk-YLVOU7T7.js";
24
+ import "./chunk-CSYOWFPU.js";
25
+ import "./chunk-MEEUXRFL.js";
26
+ import "./chunk-ZTBKMVV6.js";
27
+ import "./chunk-ORCQ3EXQ.js";
28
28
  import "./chunk-OSXPQSLW.js";
29
- import "./chunk-P57IBMK4.js";
29
+ import "./chunk-AATMPL7S.js";
30
30
  import "./chunk-LCLH6ZUL.js";
31
- import "./chunk-MGEYAYGU.js";
31
+ import "./chunk-O3RCSKUH.js";
32
32
  import "./chunk-DPFET73G.js";
33
- import "./chunk-LQKXJPKP.js";
33
+ import "./chunk-CTWZPN7G.js";
34
34
  import "./chunk-JU757HVI.js";
35
35
  import "./chunk-K44MW7JJ.js";
36
- import "./chunk-HCYSGLY2.js";
36
+ import "./chunk-HF3NDXB4.js";
37
37
  import "./chunk-CQGTEGKL.js";
38
38
  import "./chunk-YLJ4XMA6.js";
39
39
  export {
@@ -59,4 +59,4 @@ export {
59
59
  requestPathAccess,
60
60
  resolveRelativeTraversals
61
61
  };
62
- //# sourceMappingURL=path-security-CBACXAMS.js.map
62
+ //# sourceMappingURL=path-security-5CFMMULR.js.map
@@ -5,8 +5,8 @@ import {
5
5
  isAbsolutePath,
6
6
  isWindowsPath,
7
7
  listAvailableShells
8
- } from "./chunk-MGEYAYGU.js";
9
- import "./chunk-LQKXJPKP.js";
8
+ } from "./chunk-O3RCSKUH.js";
9
+ import "./chunk-CTWZPN7G.js";
10
10
  import "./chunk-JU757HVI.js";
11
11
  import "./chunk-K44MW7JJ.js";
12
12
  import "./chunk-YLJ4XMA6.js";
@@ -18,4 +18,4 @@ export {
18
18
  isWindowsPath,
19
19
  listAvailableShells
20
20
  };
21
- //# sourceMappingURL=platform-5LQXOZO3.js.map
21
+ //# sourceMappingURL=platform-XPMZKAUB.js.map
@@ -2,52 +2,53 @@ import {
2
2
  buildRunChatTurnParams,
3
3
  finalizeTurnCompletion,
4
4
  generateSessionNameForSession
5
- } from "./chunk-RRUSYVQD.js";
6
- import "./chunk-HXHPKGJE.js";
5
+ } from "./chunk-FAQDLL2X.js";
6
+ import "./chunk-J5HOUEPE.js";
7
7
  import "./chunk-XE6UC5Z3.js";
8
8
  import "./chunk-J7GAZGZT.js";
9
- import "./chunk-FEIRWXLX.js";
10
- import "./chunk-TACWRDDC.js";
9
+ import "./chunk-OZWHRBDY.js";
10
+ import "./chunk-QDARWVQ2.js";
11
11
  import "./chunk-7ET46SNE.js";
12
12
  import "./chunk-LW6MMSTD.js";
13
- import "./chunk-MQMPIXON.js";
13
+ import "./chunk-5UMXFLET.js";
14
14
  import "./chunk-I72ACQ6R.js";
15
15
  import "./chunk-JE7LW7Y6.js";
16
16
  import "./chunk-OAN4BXEW.js";
17
- import "./chunk-BKMWZTNO.js";
18
- import "./chunk-7JVBDBXE.js";
17
+ import "./chunk-DWA4IE65.js";
18
+ import "./chunk-7QMWYNVF.js";
19
19
  import "./chunk-JURM3RPZ.js";
20
- import "./chunk-Y6ZGHOKM.js";
20
+ import "./chunk-YLVOU7T7.js";
21
21
  import {
22
22
  getEventStore
23
- } from "./chunk-FGNJMKDV.js";
24
- import "./chunk-M5T4RDPJ.js";
25
- import "./chunk-KWAHD2JA.js";
26
- import "./chunk-ELYHHEYL.js";
23
+ } from "./chunk-CSYOWFPU.js";
24
+ import "./chunk-MEEUXRFL.js";
25
+ import "./chunk-ZTBKMVV6.js";
26
+ import "./chunk-ORCQ3EXQ.js";
27
27
  import "./chunk-OSXPQSLW.js";
28
28
  import {
29
29
  createChatMessageMessage,
30
30
  createSessionRunningMessage
31
- } from "./chunk-P57IBMK4.js";
31
+ } from "./chunk-AATMPL7S.js";
32
32
  import "./chunk-LCLH6ZUL.js";
33
- import "./chunk-MGEYAYGU.js";
34
- import "./chunk-5JWJEZJ3.js";
33
+ import "./chunk-O3RCSKUH.js";
34
+ import "./chunk-5UQ4CKOA.js";
35
35
  import "./chunk-OA2FURC3.js";
36
36
  import "./chunk-J2GP3J3X.js";
37
37
  import "./chunk-DPFET73G.js";
38
- import "./chunk-CLDCHOEA.js";
38
+ import "./chunk-ZMK4VX7V.js";
39
39
  import "./chunk-TS5WKTFB.js";
40
40
  import "./chunk-UV6IH6HK.js";
41
41
  import "./chunk-HNCM3D7Y.js";
42
42
  import "./chunk-EUOWCVU6.js";
43
- import "./chunk-6EZDW4JS.js";
44
- import "./chunk-LQKXJPKP.js";
43
+ import "./chunk-J3NMNYGM.js";
44
+ import "./chunk-CTWZPN7G.js";
45
45
  import "./chunk-JU757HVI.js";
46
46
  import "./chunk-2AI7VYPN.js";
47
47
  import {
48
48
  logger
49
49
  } from "./chunk-K44MW7JJ.js";
50
- import "./chunk-HCYSGLY2.js";
50
+ import "./chunk-HF3NDXB4.js";
51
+ import "./chunk-24YKXKCG.js";
51
52
  import "./chunk-R5FAEKXQ.js";
52
53
  import "./chunk-CQGTEGKL.js";
53
54
  import "./chunk-YLJ4XMA6.js";
@@ -222,7 +223,7 @@ var QueueProcessor = class {
222
223
  model: sessionClient.getModel(),
223
224
  ...sessionEffort ? { reasoningEffort: sessionEffort } : {}
224
225
  };
225
- const { runChatTurn } = await import("./orchestrator-GX22Y5EM.js");
226
+ const { runChatTurn } = await import("./orchestrator-OT66EDXO.js");
226
227
  const runChatTurnParams = buildRunChatTurnParams({
227
228
  sessionManager,
228
229
  sessionId,
@@ -271,4 +272,4 @@ var QueueProcessor = class {
271
272
  export {
272
273
  QueueProcessor
273
274
  };
274
- //# sourceMappingURL=processor-V35OLKRV.js.map
275
+ //# sourceMappingURL=processor-CHMHMMIE.js.map
@@ -2,7 +2,9 @@ import {
2
2
  createProject
3
3
  } from "./chunk-DPFET73G.js";
4
4
  import "./chunk-JU757HVI.js";
5
- import "./chunk-K44MW7JJ.js";
5
+ import {
6
+ logger
7
+ } from "./chunk-K44MW7JJ.js";
6
8
  import "./chunk-YLJ4XMA6.js";
7
9
 
8
10
  // src/server/utils/project-creator.ts
@@ -33,7 +35,14 @@ async function directoryExists(path) {
33
35
  return false;
34
36
  }
35
37
  }
36
- async function createDirectoryWithGit(projectName, workdir) {
38
+ function isGitMissing(err) {
39
+ if (!(err instanceof Error)) return false;
40
+ const e = err;
41
+ if (e.code === "ENOENT") return true;
42
+ if (e.status === 127 || e.status === 9009) return true;
43
+ return /is not recognized as an internal or external command/i.test(e.message);
44
+ }
45
+ async function createProjectDirectory(projectName, workdir) {
37
46
  const validation = validateProjectName(projectName);
38
47
  if (!validation.valid) {
39
48
  throw new Error(validation.error);
@@ -84,42 +93,46 @@ async function createDirectoryWithGit(projectName, workdir) {
84
93
  try {
85
94
  execSync("git init", { cwd: fullPath, stdio: "pipe", windowsHide: true, env: cleanExecEnv() });
86
95
  } catch (gitErr) {
87
- const errMsg = gitErr instanceof Error ? gitErr.message : "Unknown";
88
- const exitCode = gitErr.status ?? gitErr.exitCode;
89
- const isPermission = errMsg.includes("Permission denied") || exitCode === 128;
90
- let sudoSuccess = false;
91
- if (isPermission && process.platform !== "win32") {
92
- try {
93
- const currentUser = execSync("id -un", { encoding: "utf-8", windowsHide: true }).trim();
94
- execSync(`sudo -u ${currentUser} git init`, {
95
- cwd: fullPath,
96
- stdio: "pipe",
97
- windowsHide: true,
98
- env: cleanExecEnv()
99
- });
100
- sudoSuccess = true;
101
- } catch {
102
- }
103
- }
104
- if (!sudoSuccess) {
105
- const permError = new Error(`Failed to initialize git: ${errMsg}`);
106
- if (isPermission) {
107
- permError.code = "EACCES";
108
- }
109
- if (!dirAlreadyExisted) {
96
+ if (isGitMissing(gitErr)) {
97
+ logger.warn(`git is not installed, skipping git init for project "${projectName}"`);
98
+ } else {
99
+ const errMsg = gitErr instanceof Error ? gitErr.message : "Unknown";
100
+ const exitCode = gitErr.status ?? gitErr.exitCode;
101
+ const isPermission = errMsg.includes("Permission denied") || exitCode === 128;
102
+ let sudoSuccess = false;
103
+ if (isPermission && process.platform !== "win32") {
110
104
  try {
111
- await rm(fullPath, { recursive: true, force: true });
105
+ const currentUser = execSync("id -un", { encoding: "utf-8", windowsHide: true }).trim();
106
+ execSync(`sudo -u ${currentUser} git init`, {
107
+ cwd: fullPath,
108
+ stdio: "pipe",
109
+ windowsHide: true,
110
+ env: cleanExecEnv()
111
+ });
112
+ sudoSuccess = true;
112
113
  } catch {
113
114
  }
114
115
  }
115
- throw permError;
116
+ if (!sudoSuccess) {
117
+ const permError = new Error(`Failed to initialize git: ${errMsg}`);
118
+ if (isPermission) {
119
+ permError.code = "EACCES";
120
+ }
121
+ if (!dirAlreadyExisted) {
122
+ try {
123
+ await rm(fullPath, { recursive: true, force: true });
124
+ } catch {
125
+ }
126
+ }
127
+ throw permError;
128
+ }
116
129
  }
117
130
  }
118
131
  }
119
132
  return createProject(projectName, fullPath);
120
133
  }
121
134
  export {
122
- createDirectoryWithGit,
135
+ createProjectDirectory,
123
136
  validateProjectName
124
137
  };
125
- //# sourceMappingURL=project-creator-6AGQTNXB.js.map
138
+ //# sourceMappingURL=project-creator-T3A4H3YV.js.map
@@ -1,4 +1,4 @@
1
- import { A as Attachment, Z as ToolMode, $ as ToolResult, a as Message, q as MessageStats, Y as Todo, c as ContextState, e as Criterion, i as Diagnostic, r as MetadataEntry, G as SessionMode, H as SessionPhase, t as Project, J as SessionSummary, z as Session, a2 as WorkflowExecution, u as ProjectTask, w as ProjectTaskSettings, v as ProjectTaskCounts, U as TaskGateConfig } from './types-BIkpxjaj.js';
1
+ import { A as Attachment, a as ToolMode, b as ToolResult, c as Message, d as MessageStats, e as Todo, C as ContextState, f as Criterion, D as Diagnostic, g as MetadataEntry, S as SessionMode, h as SessionPhase, P as Project, i as SessionSummary, j as Session, W as WorkflowExecution, k as ProjectTask, l as ProjectTaskSettings, m as ProjectTaskCounts, n as TaskGateConfig } from './types-G10ho8PT.js';
2
2
 
3
3
  type ClientMessageType = 'session.load' | 'context.compact' | 'context.checkDynamic' | 'context.applyDynamic' | 'context.applyDynamic.preview' | 'runner.launch' | 'workflow.exit' | 'chat.retry' | 'chat.llm_retry_now' | 'path.confirm' | 'ask.answer';
4
4
  interface ClientMessage<T = unknown> {
@@ -175,6 +175,8 @@ interface ChatLLMRetryPayload {
175
175
  attempt: number;
176
176
  /** Delay in ms until the next retry attempt (drives the UI countdown). */
177
177
  retryInMs: number;
178
+ /** The error that triggered this retry. */
179
+ error: string;
178
180
  }
179
181
  interface ChatLLMRetryFailedPayload {
180
182
  error: string;
@@ -38,9 +38,9 @@ import {
38
38
  parseClientMessage,
39
39
  serializeServerMessage,
40
40
  storedEventToServerMessage
41
- } from "./chunk-P57IBMK4.js";
41
+ } from "./chunk-AATMPL7S.js";
42
42
  import "./chunk-LCLH6ZUL.js";
43
- import "./chunk-HCYSGLY2.js";
43
+ import "./chunk-HF3NDXB4.js";
44
44
  import "./chunk-YLJ4XMA6.js";
45
45
  export {
46
46
  createChatAskUserMessage,
@@ -83,4 +83,4 @@ export {
83
83
  serializeServerMessage,
84
84
  storedEventToServerMessage
85
85
  };
86
- //# sourceMappingURL=protocol-Y7MRKRUO.js.map
86
+ //# sourceMappingURL=protocol-XO4ZROAU.js.map