openfox 2.0.94 → 2.0.96

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 (58) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/CHANGELOG.md +25 -0
  3. package/dist/{chat-handler-Z7OCNJWO.js → chat-handler-5OJMACXB.js} +17 -17
  4. package/dist/{chunk-LSDJCJWA.js → chunk-3DAZIZ7E.js} +7 -7
  5. package/dist/{chunk-OHBY2673.js → chunk-3LRYZ7R3.js} +46 -3
  6. package/dist/{chunk-3WKAKOU4.js → chunk-3W6STALV.js} +2 -2
  7. package/dist/chunk-62QCBNPE.js +15 -0
  8. package/dist/chunk-7B3XSBRL.js +7 -0
  9. package/dist/{chunk-ZYDPYFRH.js → chunk-BG4EVBLJ.js} +6 -6
  10. package/dist/{chunk-MUNVSHL5.js → chunk-C3XL7X4E.js} +8 -8
  11. package/dist/{chunk-62X2MPO6.js → chunk-D3SXT3BL.js} +4 -4
  12. package/dist/{chunk-VYN37NXW.js → chunk-G5JFKTSR.js} +2 -2
  13. package/dist/{chunk-YJ5P33SE.js → chunk-HAFRPV7I.js} +12 -2
  14. package/dist/{chunk-FVV7TZC2.js → chunk-KNYPBXPW.js} +6 -5
  15. package/dist/{chunk-MC3MCMAF.js → chunk-KQPDU65K.js} +2 -2
  16. package/dist/{chunk-V4QTGYXL.js → chunk-LZW5LSVH.js} +5 -5
  17. package/dist/{chunk-OQXG4MS4.js → chunk-ML5ZU6VS.js} +236 -89
  18. package/dist/{chunk-P637C6X3.js → chunk-O2PLNJIU.js} +2 -2
  19. package/dist/{chunk-DLCMSSG3.js → chunk-O5YWFX7H.js} +22 -26
  20. package/dist/{chunk-KU3YUGAN.js → chunk-SJJVNSA6.js} +2 -2
  21. package/dist/{chunk-XNB3JWAR.js → chunk-TDHDLDGQ.js} +9 -19
  22. package/dist/{chunk-OQTLFO4R.js → chunk-URQQOUCS.js} +46 -3
  23. package/dist/{chunk-KNRE3DG4.js → chunk-WS7EY4CU.js} +34 -48
  24. package/dist/{chunk-5N5JXT7R.js → chunk-XLI6PDJG.js} +2 -2
  25. package/dist/{chunk-2BCQDYNA.js → chunk-YPBV47DH.js} +6 -9
  26. package/dist/{chunk-TSHJW7OC.js → chunk-ZIMGU5ZH.js} +2 -2
  27. package/dist/cli/dev.js +1 -1
  28. package/dist/cli/index.js +1 -1
  29. package/dist/{client-OBMJSTFN.js → client-RENSCJPZ.js} +3 -3
  30. package/dist/{compactor-RSEV7VYH.js → compactor-U7EUKEUE.js} +6 -6
  31. package/dist/{config-XIYAPMX3.js → config-M7RDIFC5.js} +4 -2
  32. package/dist/{dynamic-context-C3BWQ5GK.js → dynamic-context-TDB4G5CH.js} +4 -4
  33. package/dist/{events-SY5B4VED.js → events-4THEZWVL.js} +5 -5
  34. package/dist/{folding-O4OYOTPS.js → folding-OYBO2NTH.js} +3 -3
  35. package/dist/{http-client-3MOFAPO6.js → http-client-U6DVFL7F.js} +2 -2
  36. package/dist/{manager-UP3XMLKX.js → manager-53J5P4EZ.js} +2 -2
  37. package/dist/openFolder-Z27FEM5M.js +8 -0
  38. package/dist/{orchestrator-VSUL2C7G.js → orchestrator-MTCF2EPU.js} +14 -14
  39. package/dist/package.json +1 -1
  40. package/dist/{path-security-E55IEQHD.js → path-security-6GYETPWN.js} +6 -6
  41. package/dist/{processor-WP34IB3C.js → processor-HX4FXDDT.js} +14 -14
  42. package/dist/{provider-E5IP7RF7.js → provider-LZ3XMDX6.js} +6 -6
  43. package/dist/{provider-manager-FVIFMUTO.js → provider-manager-PBOF77RQ.js} +4 -4
  44. package/dist/{registry-XBEHPY7C.js → registry-QEOTM3IG.js} +2 -2
  45. package/dist/{serve-NZZVFNMA.js → serve-VGATDJX5.js} +23 -22
  46. package/dist/server/index.js +22 -21
  47. package/dist/{server-DYJTLAZS.js → server-4BHDA6PA.js} +17 -17
  48. package/dist/{session-overrides-QWD4V5KW.js → session-overrides-BQSE3V3F.js} +4 -4
  49. package/dist/{sessions-BT4PION7.js → sessions-AUDWMF55.js} +3 -3
  50. package/dist/{tools-YXOCUUKE.js → tools-I3BAXRVD.js} +12 -12
  51. package/dist/{update-5HWU675H.js → update-2Z6TXHFH.js} +2 -2
  52. package/dist/web/assets/{index-BlV1FebL.css → index-BG5sD2ez.css} +1 -1
  53. package/dist/web/assets/{index-DxAR7yc9.js → index-CsC_DrIa.js} +80 -73
  54. package/dist/web/index.html +2 -2
  55. package/dist/web/sw.js +1 -1
  56. package/dist/{workspace-IIRKILYL.js → workspace-2NDXTCVR.js} +2 -2
  57. package/package.json +1 -1
  58. package/dist/chunk-O4NHL6IN.js +0 -7
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.96 - 2026-07-26
4
+
5
+ ### Features
6
+
7
+ - **Remote SSH/SCP/SFTP/MOSH commands are visually distinguished** — tool calls running remote commands show a purple frame and a "REMOTE · SSH" badge, making it easy to spot remote execution at a glance.
8
+ - **Open project folder in OS file explorer from header** — a new folder button opens the project directory in your system's file manager.
9
+ - **Pick a vision fallback model from your configured providers** — choose which model handles vision tasks when the primary model doesn't support images.
10
+
11
+ ### Bug Fixes
12
+
13
+ - **Project workflow saves no longer silently fall back to user config** — saving a workflow item now correctly updates the file on disk instead of appearing to succeed while leaving the old file intact.
14
+ - **Shell injection prevented when deleting workspaces** — workspace names are no longer interpolated into shell commands, fixing a potential injection vector.
15
+
16
+ ## 2.0.95 - 2026-07-26
17
+
18
+ ### Features
19
+
20
+ - **All network requests route through configured HTTP proxy** — OpenFox now respects proxy settings for all outbound connections, with `HTTP_PROXY`/`HTTPS_PROXY` inherited by shell processes and a connectivity test button in Advanced settings.
21
+
22
+ ### Bug Fixes
23
+
24
+ - **Aborting a workflow no longer cancels it** — hitting Escape during a workflow step stops the agent but preserves the execution; typing a message auto-resumes the workflow in the same step without re-injecting the prompt.
25
+ - **Workflows can resume from any step type** — the previous restriction limiting resume to `user` steps has been removed, enabling recovery from aborted agent and shell steps.
26
+ - **Proxy connections accept self-signed certificates** — the proxy agent now sets `rejectUnauthorized: false` for HTTPS targets behind TLS-intercepting proxies.
27
+
3
28
  ## 2.0.94 - 2026-07-26
4
29
 
5
30
  ### Features
package/dist/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.96 - 2026-07-26
4
+
5
+ ### Features
6
+
7
+ - **Remote SSH/SCP/SFTP/MOSH commands are visually distinguished** — tool calls running remote commands show a purple frame and a "REMOTE · SSH" badge, making it easy to spot remote execution at a glance.
8
+ - **Open project folder in OS file explorer from header** — a new folder button opens the project directory in your system's file manager.
9
+ - **Pick a vision fallback model from your configured providers** — choose which model handles vision tasks when the primary model doesn't support images.
10
+
11
+ ### Bug Fixes
12
+
13
+ - **Project workflow saves no longer silently fall back to user config** — saving a workflow item now correctly updates the file on disk instead of appearing to succeed while leaving the old file intact.
14
+ - **Shell injection prevented when deleting workspaces** — workspace names are no longer interpolated into shell commands, fixing a potential injection vector.
15
+
16
+ ## 2.0.95 - 2026-07-26
17
+
18
+ ### Features
19
+
20
+ - **All network requests route through configured HTTP proxy** — OpenFox now respects proxy settings for all outbound connections, with `HTTP_PROXY`/`HTTPS_PROXY` inherited by shell processes and a connectivity test button in Advanced settings.
21
+
22
+ ### Bug Fixes
23
+
24
+ - **Aborting a workflow no longer cancels it** — hitting Escape during a workflow step stops the agent but preserves the execution; typing a message auto-resumes the workflow in the same step without re-injecting the prompt.
25
+ - **Workflows can resume from any step type** — the previous restriction limiting resume to `user` steps has been removed, enabling recovery from aborted agent and shell steps.
26
+ - **Proxy connections accept self-signed certificates** — the proxy agent now sets `rejectUnauthorized: false` for HTTPS targets behind TLS-intercepting proxies.
27
+
3
28
  ## 2.0.94 - 2026-07-26
4
29
 
5
30
  ### Features
@@ -1,23 +1,23 @@
1
- import {
2
- runChatTurn
3
- } from "./chunk-MUNVSHL5.js";
4
1
  import {
5
2
  buildRunChatTurnParams,
6
3
  finalizeTurnCompletion,
7
4
  generateSessionNameForSession
8
- } from "./chunk-ZYDPYFRH.js";
9
- import "./chunk-DLCMSSG3.js";
5
+ } from "./chunk-BG4EVBLJ.js";
6
+ import {
7
+ runChatTurn
8
+ } from "./chunk-C3XL7X4E.js";
9
+ import "./chunk-O5YWFX7H.js";
10
10
  import "./chunk-ZASSAZ73.js";
11
- import "./chunk-YJ5P33SE.js";
11
+ import "./chunk-HAFRPV7I.js";
12
12
  import "./chunk-I72ACQ6R.js";
13
13
  import "./chunk-NWO6GRYE.js";
14
14
  import "./chunk-VKWVPQJ5.js";
15
- import "./chunk-62X2MPO6.js";
15
+ import "./chunk-D3SXT3BL.js";
16
16
  import "./chunk-J7GAZGZT.js";
17
- import "./chunk-V4QTGYXL.js";
18
- import "./chunk-MC3MCMAF.js";
19
- import "./chunk-5N5JXT7R.js";
20
- import "./chunk-VYN37NXW.js";
17
+ import "./chunk-LZW5LSVH.js";
18
+ import "./chunk-KQPDU65K.js";
19
+ import "./chunk-XLI6PDJG.js";
20
+ import "./chunk-G5JFKTSR.js";
21
21
  import {
22
22
  createChatMessageMessage,
23
23
  createPhaseChangedMessage,
@@ -29,11 +29,11 @@ import "./chunk-K2O7JTCX.js";
29
29
  import "./chunk-MRWR3SIT.js";
30
30
  import {
31
31
  getEventStore
32
- } from "./chunk-FVV7TZC2.js";
32
+ } from "./chunk-KNYPBXPW.js";
33
33
  import "./chunk-NLN5LPQ4.js";
34
- import "./chunk-P637C6X3.js";
35
- import "./chunk-TSHJW7OC.js";
36
- import "./chunk-OHBY2673.js";
34
+ import "./chunk-O2PLNJIU.js";
35
+ import "./chunk-ZIMGU5ZH.js";
36
+ import "./chunk-3LRYZ7R3.js";
37
37
  import "./chunk-J2GP3J3X.js";
38
38
  import "./chunk-V4IE7HJY.js";
39
39
  import "./chunk-YHEQTVFV.js";
@@ -42,7 +42,7 @@ import "./chunk-UEOEA6BB.js";
42
42
  import "./chunk-GLF65XDS.js";
43
43
  import "./chunk-K44MW7JJ.js";
44
44
  import "./chunk-4R7G5JB6.js";
45
- import "./chunk-OQTLFO4R.js";
45
+ import "./chunk-URQQOUCS.js";
46
46
  import "./chunk-CQGTEGKL.js";
47
47
  import "./chunk-5WRI5ZAA.js";
48
48
 
@@ -165,4 +165,4 @@ export {
165
165
  startChatSession,
166
166
  stopSessionExecution
167
167
  };
168
- //# sourceMappingURL=chat-handler-Z7OCNJWO.js.map
168
+ //# sourceMappingURL=chat-handler-5OJMACXB.js.map
@@ -37,7 +37,7 @@ Options:
37
37
  }
38
38
  async function runNetworkSetup(mode) {
39
39
  const { loadAuthConfig, saveAuthConfig, encryptPassword } = await import("./auth-YY5PJYSC.js");
40
- const { saveGlobalConfig } = await import("./config-XIYAPMX3.js");
40
+ const { saveGlobalConfig } = await import("./config-M7RDIFC5.js");
41
41
  const { getAuthKeyPath } = await import("./paths-F27V3S4I.js");
42
42
  const existingAuth = await loadAuthConfig(mode);
43
43
  if (existingAuth) {
@@ -104,7 +104,7 @@ async function runNetworkSetup(mode) {
104
104
  console.log("\u2713 Configuration saved!\n");
105
105
  }
106
106
  async function runConfig(mode) {
107
- const { loadGlobalConfig, getActiveProvider, getDefaultModel } = await import("./config-XIYAPMX3.js");
107
+ const { loadGlobalConfig, getActiveProvider, getDefaultModel } = await import("./config-M7RDIFC5.js");
108
108
  const { getGlobalConfigPath } = await import("./paths-F27V3S4I.js");
109
109
  const config = await loadGlobalConfig(mode);
110
110
  const configPath = getGlobalConfigPath(mode);
@@ -163,7 +163,7 @@ async function runCli(options) {
163
163
  break;
164
164
  }
165
165
  case "provider": {
166
- const { runProviderCommand } = await import("./provider-E5IP7RF7.js");
166
+ const { runProviderCommand } = await import("./provider-LZ3XMDX6.js");
167
167
  const [, subcommand] = positionals;
168
168
  await runProviderCommand(mode, subcommand);
169
169
  break;
@@ -200,7 +200,7 @@ async function runCli(options) {
200
200
  break;
201
201
  }
202
202
  case "update": {
203
- const { runUpdate } = await import("./update-5HWU675H.js");
203
+ const { runUpdate } = await import("./update-2Z6TXHFH.js");
204
204
  const code = await runUpdate();
205
205
  if (code !== 0) {
206
206
  process.exit(code);
@@ -208,12 +208,12 @@ async function runCli(options) {
208
208
  break;
209
209
  }
210
210
  default: {
211
- const { configFileExists } = await import("./config-XIYAPMX3.js");
211
+ const { configFileExists } = await import("./config-M7RDIFC5.js");
212
212
  const configExists = await configFileExists(mode);
213
213
  if (!configExists) {
214
214
  await runNetworkSetup(mode);
215
215
  }
216
- const { runServe } = await import("./serve-NZZVFNMA.js");
216
+ const { runServe } = await import("./serve-VGATDJX5.js");
217
217
  const serveOptions = { mode };
218
218
  if (values.port) serveOptions.port = parseInt(values.port);
219
219
  if (values["no-browser"] === true) serveOptions.openBrowser = false;
@@ -225,4 +225,4 @@ async function runCli(options) {
225
225
  export {
226
226
  runCli
227
227
  };
228
- //# sourceMappingURL=chunk-LSDJCJWA.js.map
228
+ //# sourceMappingURL=chunk-3DAZIZ7E.js.map
@@ -69,21 +69,63 @@ async function loadItemsFromDir(dir, options) {
69
69
  }
70
70
  return items;
71
71
  }
72
+ async function findFileByInternalId(dir, id, ext) {
73
+ if (!await pathExists(dir)) return null;
74
+ let files;
75
+ try {
76
+ files = await readdir(dir);
77
+ } catch {
78
+ return null;
79
+ }
80
+ for (const file of files) {
81
+ if (!file.endsWith(ext)) continue;
82
+ try {
83
+ const raw = await readFile(join(dir, file), "utf-8");
84
+ let parsedId;
85
+ if (ext === ".md" || ext === ".mdx") {
86
+ const { data } = matter(raw);
87
+ parsedId = data.id;
88
+ } else {
89
+ const parsed = JSON.parse(raw);
90
+ parsedId = parsed.metadata?.id ?? parsed.id;
91
+ }
92
+ if (parsedId === id) {
93
+ return join(dir, file);
94
+ }
95
+ } catch {
96
+ }
97
+ }
98
+ return null;
99
+ }
72
100
  async function saveItemToDir(dir, item, ext, serialize) {
73
101
  if (!await pathExists(dir)) {
74
102
  await mkdir(dir, { recursive: true });
75
103
  }
76
104
  const meta = item.metadata;
77
105
  const filePath = join(dir, `${meta.id}${ext}`);
106
+ const existing = await findFileByInternalId(dir, meta.id, ext);
107
+ if (existing && existing !== filePath) {
108
+ await unlink(existing).catch(() => {
109
+ });
110
+ }
78
111
  await writeFile(filePath, serialize(item), "utf-8");
79
112
  }
80
113
  var jsonSerializer = (item) => JSON.stringify(item, null, 2) + "\n";
81
114
  async function deleteItemFromDir(dir, id, ext) {
82
- const filePath = join(dir, `${id}${ext}`);
115
+ const fastPath = join(dir, `${id}${ext}`);
83
116
  try {
84
- await unlink(filePath);
117
+ await unlink(fastPath);
85
118
  return { success: true };
86
119
  } catch {
120
+ const found = await findFileByInternalId(dir, id, ext);
121
+ if (found) {
122
+ try {
123
+ await unlink(found);
124
+ return { success: true };
125
+ } catch {
126
+ return { success: false };
127
+ }
128
+ }
87
129
  return { success: false };
88
130
  }
89
131
  }
@@ -387,6 +429,7 @@ export {
387
429
  pathExists,
388
430
  getDefaultIds,
389
431
  loadItemsFromDir,
432
+ findFileByInternalId,
390
433
  saveItemToDir,
391
434
  jsonSerializer,
392
435
  deleteItemFromDir,
@@ -412,4 +455,4 @@ export {
412
455
  getOverrideAgentIds,
413
456
  resolveDefaultAgentId
414
457
  };
415
- //# sourceMappingURL=chunk-OHBY2673.js.map
458
+ //# sourceMappingURL=chunk-3LRYZ7R3.js.map
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-MRWR3SIT.js";
7
7
  import {
8
8
  getCurrentWindowMessageOptions
9
- } from "./chunk-FVV7TZC2.js";
9
+ } from "./chunk-KNYPBXPW.js";
10
10
 
11
11
  // src/server/context/compactor.ts
12
12
  function appendCompactionPrompt(sessionId, append) {
@@ -36,4 +36,4 @@ export {
36
36
  COMPACTION_MAX_RATIO,
37
37
  shouldCompact
38
38
  };
39
- //# sourceMappingURL=chunk-3WKAKOU4.js.map
39
+ //# sourceMappingURL=chunk-3W6STALV.js.map
@@ -0,0 +1,15 @@
1
+ // src/server/utils/openFolder.ts
2
+ import { platform } from "os";
3
+ import { execFile } from "child_process";
4
+ import { promisify } from "util";
5
+ var execFileP = promisify(execFile);
6
+ async function openFolder(dir) {
7
+ await execFileP("mkdir", ["-p", dir], { timeout: 5e3 });
8
+ const cmd = platform() === "darwin" ? "open" : platform() === "win32" ? "explorer" : "xdg-open";
9
+ await execFileP(cmd, [dir], { timeout: 5e3 });
10
+ }
11
+
12
+ export {
13
+ openFolder
14
+ };
15
+ //# sourceMappingURL=chunk-62QCBNPE.js.map
@@ -0,0 +1,7 @@
1
+ // src/constants.ts
2
+ var VERSION = "2.0.96";
3
+
4
+ export {
5
+ VERSION
6
+ };
7
+ //# sourceMappingURL=chunk-7B3XSBRL.js.map
@@ -8,17 +8,17 @@ import {
8
8
  import {
9
9
  combineEventsWithSnapshot,
10
10
  getEventStore
11
- } from "./chunk-FVV7TZC2.js";
11
+ } from "./chunk-KNYPBXPW.js";
12
12
  import {
13
13
  buildMessagesFromStoredEvents,
14
14
  foldPendingConfirmations
15
- } from "./chunk-P637C6X3.js";
15
+ } from "./chunk-O2PLNJIU.js";
16
16
  import {
17
17
  updateSessionMetadata
18
- } from "./chunk-TSHJW7OC.js";
18
+ } from "./chunk-ZIMGU5ZH.js";
19
19
  import {
20
20
  getRuntimeConfig
21
- } from "./chunk-OHBY2673.js";
21
+ } from "./chunk-3LRYZ7R3.js";
22
22
  import {
23
23
  getMaxVisibleItems
24
24
  } from "./chunk-UEOEA6BB.js";
@@ -153,7 +153,7 @@ async function generateSessionNameForSession(sessionId, userMessage, deps, signa
153
153
  client = deps.getLLMClient();
154
154
  client.setModel(providerConfig.model);
155
155
  } else if (providerConfig) {
156
- const { createLLMClient } = await import("./client-OBMJSTFN.js");
156
+ const { createLLMClient } = await import("./client-RENSCJPZ.js");
157
157
  client = createLLMClient({
158
158
  llm: {
159
159
  baseUrl: providerConfig.baseUrl,
@@ -204,4 +204,4 @@ export {
204
204
  needsNameGeneration,
205
205
  generateSessionNameForSession
206
206
  };
207
- //# sourceMappingURL=chunk-ZYDPYFRH.js.map
207
+ //# sourceMappingURL=chunk-BG4EVBLJ.js.map
@@ -4,19 +4,19 @@ import {
4
4
  getToolRegistryForAgent,
5
5
  processEventsForConversation,
6
6
  runTopLevelAgentLoop
7
- } from "./chunk-DLCMSSG3.js";
7
+ } from "./chunk-O5YWFX7H.js";
8
8
  import {
9
9
  buildCachedPrompt,
10
10
  computeDynamicContextHash,
11
11
  getToolFingerprint
12
- } from "./chunk-V4QTGYXL.js";
12
+ } from "./chunk-LZW5LSVH.js";
13
13
  import {
14
14
  getAllInstructions,
15
15
  getEnabledSkillMetadata
16
- } from "./chunk-MC3MCMAF.js";
16
+ } from "./chunk-KQPDU65K.js";
17
17
  import {
18
18
  PathAccessDeniedError
19
- } from "./chunk-VYN37NXW.js";
19
+ } from "./chunk-G5JFKTSR.js";
20
20
  import {
21
21
  TurnMetrics,
22
22
  createChatDoneEvent,
@@ -30,16 +30,16 @@ import {
30
30
  getCurrentContextWindowId,
31
31
  getCurrentWindowMessageOptions,
32
32
  getEventStore
33
- } from "./chunk-FVV7TZC2.js";
33
+ } from "./chunk-KNYPBXPW.js";
34
34
  import {
35
35
  buildSnapshotFromSessionState
36
- } from "./chunk-P637C6X3.js";
36
+ } from "./chunk-O2PLNJIU.js";
37
37
  import {
38
38
  findAgentById,
39
39
  getRuntimeConfig,
40
40
  loadAllAgentsDefault,
41
41
  resolveDefaultAgentId
42
- } from "./chunk-OHBY2673.js";
42
+ } from "./chunk-3LRYZ7R3.js";
43
43
  import {
44
44
  logger
45
45
  } from "./chunk-K44MW7JJ.js";
@@ -309,4 +309,4 @@ export {
309
309
  runChatTurn,
310
310
  runAgentTurn
311
311
  };
312
- //# sourceMappingURL=chunk-MUNVSHL5.js.map
312
+ //# sourceMappingURL=chunk-C3XL7X4E.js.map
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-K44MW7JJ.js";
11
11
 
12
12
  // src/server/git/workspace.ts
13
- import { spawn, execSync } from "child_process";
13
+ import { spawn, execSync, execFileSync } from "child_process";
14
14
  import { mkdir as mkdir2 } from "fs/promises";
15
15
  import { resolve as resolve2, join as join2, isAbsolute } from "path";
16
16
  import { homedir, platform } from "os";
@@ -273,10 +273,10 @@ async function deleteWorkspace(projectName, name, projectDir) {
273
273
  if (!st?.isDirectory()) {
274
274
  throw new Error(`Workspace "${name}" does not exist`);
275
275
  }
276
- const { rm } = await import("fs/promises");
277
276
  try {
278
- execSync(`rm -rf "${wsPath}"`, { stdio: "ignore", timeout: 1e4 });
277
+ execFileSync("rm", ["-rf", wsPath], { stdio: "ignore" });
279
278
  } catch {
279
+ const { rm } = await import("fs/promises");
280
280
  await rm(wsPath, { recursive: true, force: true });
281
281
  }
282
282
  logger.info("Deleted workspace", { projectName, name, path: wsPath });
@@ -324,4 +324,4 @@ export {
324
324
  deleteWorkspace,
325
325
  isGitRepository
326
326
  };
327
- //# sourceMappingURL=chunk-62X2MPO6.js.map
327
+ //# sourceMappingURL=chunk-D3SXT3BL.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-27SDWNKL.js";
4
4
  import {
5
5
  getEventStore
6
- } from "./chunk-FVV7TZC2.js";
6
+ } from "./chunk-KNYPBXPW.js";
7
7
 
8
8
  // src/server/tools/path-security.ts
9
9
  import { realpath } from "fs/promises";
@@ -494,4 +494,4 @@ export {
494
494
  getConfirmationSessionId,
495
495
  getPendingConfirmationsBySession
496
496
  };
497
- //# sourceMappingURL=chunk-VYN37NXW.js.map
497
+ //# sourceMappingURL=chunk-G5JFKTSR.js.map
@@ -12,6 +12,10 @@ import {
12
12
  import {
13
13
  getPlatformShell
14
14
  } from "./chunk-NLN5LPQ4.js";
15
+ import {
16
+ SETTINGS_KEYS,
17
+ getSetting
18
+ } from "./chunk-UEOEA6BB.js";
15
19
 
16
20
  // src/server/utils/shell.ts
17
21
  import { spawn } from "child_process";
@@ -22,10 +26,16 @@ function spawnShell(command, options) {
22
26
  const shell = getPlatformShell();
23
27
  const isCmd = shell.command === "cmd.exe";
24
28
  const args = isCmd ? ["/d", "/s", "/c", `"${command}"`] : [...shell.args, command];
29
+ const proxyUrl = getSetting(SETTINGS_KEYS.PROXY_URL);
30
+ const proxyEnv = {};
31
+ if (proxyUrl) {
32
+ proxyEnv["HTTP_PROXY"] = proxyUrl;
33
+ proxyEnv["HTTPS_PROXY"] = proxyUrl;
34
+ }
25
35
  return spawn(shell.command, args, {
26
36
  ...isCmd ? { windowsVerbatimArguments: true } : {},
27
37
  cwd: options.cwd,
28
- env: { ...process.env },
38
+ env: { ...process.env, ...proxyEnv },
29
39
  stdio: options.stdio ?? ["ignore", "pipe", "pipe"],
30
40
  windowsHide: true,
31
41
  // detached is only useful for Unix process-group semantics; on win32 it
@@ -153,4 +163,4 @@ export {
153
163
  getSessionProcesses2 as getSessionProcesses,
154
164
  getProcessLogs
155
165
  };
156
- //# sourceMappingURL=chunk-YJ5P33SE.js.map
166
+ //# sourceMappingURL=chunk-HAFRPV7I.js.map
@@ -5,13 +5,13 @@ import {
5
5
  foldContextState,
6
6
  foldSessionState,
7
7
  spreadOptionalMessageFields
8
- } from "./chunk-P637C6X3.js";
8
+ } from "./chunk-O2PLNJIU.js";
9
9
  import {
10
10
  updateSessionMessageCount
11
- } from "./chunk-TSHJW7OC.js";
11
+ } from "./chunk-ZIMGU5ZH.js";
12
12
  import {
13
13
  getRuntimeConfig
14
- } from "./chunk-OHBY2673.js";
14
+ } from "./chunk-3LRYZ7R3.js";
15
15
  import {
16
16
  logger
17
17
  } from "./chunk-K44MW7JJ.js";
@@ -948,7 +948,7 @@ function emitRunningChanged(sessionId, isRunning) {
948
948
  data: { isRunning }
949
949
  });
950
950
  }
951
- function emitWorkflowExecutionChanged(sessionId, executionId, workflowId, workflowName, workflowColor, status, currentStepName) {
951
+ function emitWorkflowExecutionChanged(sessionId, executionId, workflowId, workflowName, workflowColor, status, currentStepId, currentStepName) {
952
952
  const eventStore = getEventStore();
953
953
  eventStore.append(sessionId, {
954
954
  type: "workflow.execution_changed",
@@ -958,6 +958,7 @@ function emitWorkflowExecutionChanged(sessionId, executionId, workflowId, workfl
958
958
  workflowName,
959
959
  ...workflowColor ? { workflowColor } : {},
960
960
  status,
961
+ ...currentStepId ? { currentStepId } : {},
961
962
  ...currentStepName ? { currentStepName } : {}
962
963
  }
963
964
  });
@@ -1174,4 +1175,4 @@ export {
1174
1175
  truncateSessionMessages,
1175
1176
  getRecentUserPromptsForSession
1176
1177
  };
1177
- //# sourceMappingURL=chunk-FVV7TZC2.js.map
1178
+ //# sourceMappingURL=chunk-KNYPBXPW.js.map
@@ -5,7 +5,7 @@ import {
5
5
  deleteItemFromDir,
6
6
  loadItemsFromDir,
7
7
  pathExists
8
- } from "./chunk-OHBY2673.js";
8
+ } from "./chunk-3LRYZ7R3.js";
9
9
  import {
10
10
  SETTINGS_KEYS,
11
11
  deleteSetting,
@@ -440,4 +440,4 @@ export {
440
440
  deleteSkill,
441
441
  deleteProjectSkill
442
442
  };
443
- //# sourceMappingURL=chunk-MC3MCMAF.js.map
443
+ //# sourceMappingURL=chunk-KQPDU65K.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getAllInstructions,
3
3
  getEnabledSkillMetadata
4
- } from "./chunk-MC3MCMAF.js";
4
+ } from "./chunk-KQPDU65K.js";
5
5
  import {
6
6
  buildTopLevelSystemPrompt
7
7
  } from "./chunk-MRWR3SIT.js";
@@ -11,7 +11,7 @@ import {
11
11
  getSubAgents,
12
12
  loadAllAgentsDefault,
13
13
  resolveDefaultAgentId
14
- } from "./chunk-OHBY2673.js";
14
+ } from "./chunk-3LRYZ7R3.js";
15
15
  import {
16
16
  logger
17
17
  } from "./chunk-K44MW7JJ.js";
@@ -104,7 +104,7 @@ function resolveAgentDef(sessionManager, sessionId) {
104
104
  }
105
105
  async function buildCachedPrompt(sessionManager, sessionId, agentDef) {
106
106
  const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
107
- const { getToolRegistryForAgent } = await import("./tools-YXOCUUKE.js");
107
+ const { getToolRegistryForAgent } = await import("./tools-I3BAXRVD.js");
108
108
  const tools = getToolRegistryForAgent(agentDef, sessionId).definitions;
109
109
  const toolFingerprint = getToolFingerprint(tools);
110
110
  const allAgents = await loadAllAgentsDefault();
@@ -117,7 +117,7 @@ async function buildCachedPrompt(sessionManager, sessionId, agentDef) {
117
117
  async function computeSessionHash(sessionManager, sessionId) {
118
118
  const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
119
119
  const agentDef = await resolveAgentDef(sessionManager, sessionId);
120
- const { getToolRegistryForAgent } = await import("./tools-YXOCUUKE.js");
120
+ const { getToolRegistryForAgent } = await import("./tools-I3BAXRVD.js");
121
121
  const tools = getToolRegistryForAgent(agentDef, sessionId).definitions;
122
122
  const toolFingerprint = getToolFingerprint(tools);
123
123
  return computeDynamicContextHash(instructionContent, skills, toolFingerprint);
@@ -141,4 +141,4 @@ export {
141
141
  computeSessionHash,
142
142
  applyDynamicContext
143
143
  };
144
- //# sourceMappingURL=chunk-V4QTGYXL.js.map
144
+ //# sourceMappingURL=chunk-LZW5LSVH.js.map