openfox 2.0.95 → 2.0.97

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 (54) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/CHANGELOG.md +23 -0
  3. package/dist/{chat-handler-5FV3TGQD.js → chat-handler-XXXMTO7W.js} +16 -16
  4. package/dist/{chunk-SJJVNSA6.js → chunk-2VJIQEZE.js} +41 -5
  5. package/dist/{chunk-OHBY2673.js → chunk-3LRYZ7R3.js} +46 -3
  6. package/dist/{chunk-W7P5P54O.js → chunk-3W6STALV.js} +2 -2
  7. package/dist/chunk-62QCBNPE.js +15 -0
  8. package/dist/{chunk-OZD247P4.js → chunk-C3XL7X4E.js} +8 -8
  9. package/dist/{chunk-D6T3X22W.js → chunk-CCEG3AFM.js} +14 -14
  10. package/dist/{chunk-YPBV47DH.js → chunk-CSKPPHD3.js} +2 -2
  11. package/dist/{chunk-62X2MPO6.js → chunk-D3SXT3BL.js} +4 -4
  12. package/dist/chunk-DRMYR6BF.js +7 -0
  13. package/dist/{chunk-ZMSHE564.js → chunk-G5JFKTSR.js} +2 -2
  14. package/dist/{chunk-KG2PJVOE.js → chunk-GPGJBDI6.js} +187 -80
  15. package/dist/{chunk-YCPUV7AR.js → chunk-HJEATCSM.js} +7 -7
  16. package/dist/{chunk-7P7OKBYQ.js → chunk-KNYPBXPW.js} +4 -4
  17. package/dist/{chunk-MC3MCMAF.js → chunk-KQPDU65K.js} +2 -2
  18. package/dist/{chunk-MB7STVMR.js → chunk-LZW5LSVH.js} +5 -5
  19. package/dist/{chunk-P637C6X3.js → chunk-O2PLNJIU.js} +2 -2
  20. package/dist/{chunk-6RHMIMID.js → chunk-O5YWFX7H.js} +21 -25
  21. package/dist/{chunk-5UFTFBNW.js → chunk-T3INQCET.js} +6 -6
  22. package/dist/{chunk-OQTLFO4R.js → chunk-URQQOUCS.js} +46 -3
  23. package/dist/{chunk-5N5JXT7R.js → chunk-XLI6PDJG.js} +2 -2
  24. package/dist/{chunk-TSHJW7OC.js → chunk-ZIMGU5ZH.js} +2 -2
  25. package/dist/cli/dev.js +1 -1
  26. package/dist/cli/index.js +1 -1
  27. package/dist/{client-RENSCJPZ.js → client-IK47PLPP.js} +2 -2
  28. package/dist/{compactor-3RXIAIPR.js → compactor-U7EUKEUE.js} +6 -6
  29. package/dist/{config-XIYAPMX3.js → config-M7RDIFC5.js} +4 -2
  30. package/dist/{dynamic-context-CJFDFUJF.js → dynamic-context-TDB4G5CH.js} +4 -4
  31. package/dist/{events-QHZDLHEB.js → events-4THEZWVL.js} +5 -5
  32. package/dist/{folding-O4OYOTPS.js → folding-OYBO2NTH.js} +3 -3
  33. package/dist/openFolder-Z27FEM5M.js +8 -0
  34. package/dist/{orchestrator-LDVMBC23.js → orchestrator-MTCF2EPU.js} +13 -13
  35. package/dist/package.json +1 -1
  36. package/dist/{path-security-72KGHGSV.js → path-security-6GYETPWN.js} +6 -6
  37. package/dist/{processor-32QUVPV6.js → processor-F3EZWNPO.js} +13 -13
  38. package/dist/{provider-A74GHQUO.js → provider-5KFIZM5T.js} +5 -5
  39. package/dist/{provider-manager-PBOF77RQ.js → provider-manager-23O5QVDJ.js} +3 -3
  40. package/dist/{registry-XBEHPY7C.js → registry-QEOTM3IG.js} +2 -2
  41. package/dist/{serve-GL5WUPRP.js → serve-JACH7OQW.js} +21 -20
  42. package/dist/server/index.js +20 -19
  43. package/dist/{server-OYVGQU7O.js → server-KIRPYPP6.js} +16 -16
  44. package/dist/{session-overrides-QWD4V5KW.js → session-overrides-BQSE3V3F.js} +4 -4
  45. package/dist/{sessions-BT4PION7.js → sessions-AUDWMF55.js} +3 -3
  46. package/dist/{tools-UTA3TV7P.js → tools-I3BAXRVD.js} +11 -11
  47. package/dist/{update-VUTN743C.js → update-NZZWLDK7.js} +2 -2
  48. package/dist/web/assets/{index-BlV1FebL.css → index-BG5sD2ez.css} +1 -1
  49. package/dist/web/assets/{index-BUiw9fSe.js → index-C1sXLxiM.js} +80 -73
  50. package/dist/web/index.html +2 -2
  51. package/dist/web/sw.js +1 -1
  52. package/dist/{workspace-IIRKILYL.js → workspace-2NDXTCVR.js} +2 -2
  53. package/package.json +1 -1
  54. package/dist/chunk-VKU7YBLH.js +0 -7
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.97 - 2026-07-27
4
+
5
+ ### Enhancements
6
+
7
+ - **"esc to interrupt" hint hidden on mobile** — the keyboard shortcut hint no longer clutters the UI on small screens where keyboard shortcuts don't apply.
8
+
9
+ ### Bug Fixes
10
+
11
+ - **Mistral structured content blocks now render correctly** — models with `reasoning_effort` (like `mistral-small-2603`) previously showed `[object Object]` for every streaming chunk. Text and thinking content are now properly extracted and displayed.
12
+
13
+ ## 2.0.96 - 2026-07-26
14
+
15
+ ### Features
16
+
17
+ - **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.
18
+ - **Open project folder in OS file explorer from header** — a new folder button opens the project directory in your system's file manager.
19
+ - **Pick a vision fallback model from your configured providers** — choose which model handles vision tasks when the primary model doesn't support images.
20
+
21
+ ### Bug Fixes
22
+
23
+ - **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.
24
+ - **Shell injection prevented when deleting workspaces** — workspace names are no longer interpolated into shell commands, fixing a potential injection vector.
25
+
3
26
  ## 2.0.95 - 2026-07-26
4
27
 
5
28
  ### Features
package/dist/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.97 - 2026-07-27
4
+
5
+ ### Enhancements
6
+
7
+ - **"esc to interrupt" hint hidden on mobile** — the keyboard shortcut hint no longer clutters the UI on small screens where keyboard shortcuts don't apply.
8
+
9
+ ### Bug Fixes
10
+
11
+ - **Mistral structured content blocks now render correctly** — models with `reasoning_effort` (like `mistral-small-2603`) previously showed `[object Object]` for every streaming chunk. Text and thinking content are now properly extracted and displayed.
12
+
13
+ ## 2.0.96 - 2026-07-26
14
+
15
+ ### Features
16
+
17
+ - **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.
18
+ - **Open project folder in OS file explorer from header** — a new folder button opens the project directory in your system's file manager.
19
+ - **Pick a vision fallback model from your configured providers** — choose which model handles vision tasks when the primary model doesn't support images.
20
+
21
+ ### Bug Fixes
22
+
23
+ - **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.
24
+ - **Shell injection prevented when deleting workspaces** — workspace names are no longer interpolated into shell commands, fixing a potential injection vector.
25
+
3
26
  ## 2.0.95 - 2026-07-26
4
27
 
5
28
  ### Features
@@ -1,23 +1,23 @@
1
- import {
2
- runChatTurn
3
- } from "./chunk-OZD247P4.js";
4
1
  import {
5
2
  buildRunChatTurnParams,
6
3
  finalizeTurnCompletion,
7
4
  generateSessionNameForSession
8
- } from "./chunk-5UFTFBNW.js";
9
- import "./chunk-6RHMIMID.js";
5
+ } from "./chunk-T3INQCET.js";
6
+ import {
7
+ runChatTurn
8
+ } from "./chunk-C3XL7X4E.js";
9
+ import "./chunk-O5YWFX7H.js";
10
10
  import "./chunk-ZASSAZ73.js";
11
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-MB7STVMR.js";
18
- import "./chunk-MC3MCMAF.js";
19
- import "./chunk-5N5JXT7R.js";
20
- import "./chunk-ZMSHE564.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-7P7OKBYQ.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-5FV3TGQD.js.map
168
+ //# sourceMappingURL=chat-handler-XXXMTO7W.js.map
@@ -23,6 +23,22 @@ import {
23
23
  } from "./chunk-K44MW7JJ.js";
24
24
 
25
25
  // src/server/llm/client.ts
26
+ function extractContentFromBlocks(blocks) {
27
+ let text = "";
28
+ let thinking = "";
29
+ for (const block of blocks) {
30
+ if (block.type === "text") {
31
+ text += block.text;
32
+ } else if (block.type === "thinking") {
33
+ for (const part of block.thinking) {
34
+ if (part.type === "text") {
35
+ thinking += part.text;
36
+ }
37
+ }
38
+ }
39
+ }
40
+ return { text, thinking };
41
+ }
26
42
  function createLLMClient(config, initialBackend = "unknown") {
27
43
  const baseURL = ensureVersionPrefix(config.llm.baseUrl);
28
44
  const httpClient = new OpenAIHttpClient({
@@ -91,8 +107,16 @@ function createLLMClient(config, initialBackend = "unknown") {
91
107
  throw new LLMError("No completion choice returned");
92
108
  }
93
109
  const message = choice.message;
94
- const content = message.content ?? "";
95
- const thinkingContent = getThinking(message, thinkingField) ?? "";
110
+ let content;
111
+ let thinkingContent;
112
+ if (Array.isArray(message.content)) {
113
+ const extracted = extractContentFromBlocks(message.content);
114
+ content = extracted.text;
115
+ thinkingContent = extracted.thinking;
116
+ } else {
117
+ content = message.content ?? "";
118
+ thinkingContent = getThinking(message, thinkingField) ?? "";
119
+ }
96
120
  const toolCalls = message.tool_calls?.map((tc) => {
97
121
  const { arguments: args, parseError } = parseToolArguments(tc.function.arguments, {
98
122
  id: tc.id,
@@ -190,8 +214,20 @@ function createLLMClient(config, initialBackend = "unknown") {
190
214
  yield { type: "thinking_delta", content: reasoning };
191
215
  }
192
216
  if (delta.content) {
193
- fullContent += delta.content;
194
- yield { type: "text_delta", content: delta.content };
217
+ if (Array.isArray(delta.content)) {
218
+ const extracted = extractContentFromBlocks(delta.content);
219
+ if (extracted.text) {
220
+ fullContent += extracted.text;
221
+ yield { type: "text_delta", content: extracted.text };
222
+ }
223
+ if (extracted.thinking) {
224
+ fullThinking += extracted.thinking;
225
+ yield { type: "thinking_delta", content: extracted.thinking };
226
+ }
227
+ } else {
228
+ fullContent += delta.content;
229
+ yield { type: "text_delta", content: delta.content };
230
+ }
195
231
  }
196
232
  if (delta.tool_calls) {
197
233
  for (const tc of delta.tool_calls) {
@@ -268,4 +304,4 @@ function createLLMClient(config, initialBackend = "unknown") {
268
304
  export {
269
305
  createLLMClient
270
306
  };
271
- //# sourceMappingURL=chunk-SJJVNSA6.js.map
307
+ //# sourceMappingURL=chunk-2VJIQEZE.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-7P7OKBYQ.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-W7P5P54O.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
@@ -4,19 +4,19 @@ import {
4
4
  getToolRegistryForAgent,
5
5
  processEventsForConversation,
6
6
  runTopLevelAgentLoop
7
- } from "./chunk-6RHMIMID.js";
7
+ } from "./chunk-O5YWFX7H.js";
8
8
  import {
9
9
  buildCachedPrompt,
10
10
  computeDynamicContextHash,
11
11
  getToolFingerprint
12
- } from "./chunk-MB7STVMR.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-ZMSHE564.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-7P7OKBYQ.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-OZD247P4.js.map
312
+ //# sourceMappingURL=chunk-C3XL7X4E.js.map
@@ -1,17 +1,17 @@
1
- import {
2
- runAgentTurn,
3
- runChatTurn
4
- } from "./chunk-OZD247P4.js";
5
1
  import {
6
2
  generateSessionNameForSession,
7
3
  getSessionMessageCount,
8
4
  needsNameGeneration
9
- } from "./chunk-5UFTFBNW.js";
5
+ } from "./chunk-T3INQCET.js";
6
+ import {
7
+ runAgentTurn,
8
+ runChatTurn
9
+ } from "./chunk-C3XL7X4E.js";
10
10
  import {
11
11
  devServerManager,
12
12
  executeSubAgent,
13
13
  getToolRegistryForAgent
14
- } from "./chunk-6RHMIMID.js";
14
+ } from "./chunk-O5YWFX7H.js";
15
15
  import {
16
16
  checkAborted,
17
17
  onProcessEvent,
@@ -28,7 +28,7 @@ import {
28
28
  applyDynamicContext,
29
29
  computeSessionHash,
30
30
  computeUnifiedDiff
31
- } from "./chunk-MB7STVMR.js";
31
+ } from "./chunk-LZW5LSVH.js";
32
32
  import {
33
33
  createChatErrorMessage,
34
34
  createChatMessageMessage,
@@ -50,7 +50,7 @@ import {
50
50
  } from "./chunk-EU3WWTFH.js";
51
51
  import {
52
52
  appendCompactionPrompt
53
- } from "./chunk-W7P5P54O.js";
53
+ } from "./chunk-3W6STALV.js";
54
54
  import {
55
55
  TurnMetrics,
56
56
  createMessageStartEvent
@@ -59,14 +59,14 @@ import {
59
59
  combineEventsWithSnapshot,
60
60
  getCurrentContextWindowId,
61
61
  getEventStore
62
- } from "./chunk-7P7OKBYQ.js";
62
+ } from "./chunk-KNYPBXPW.js";
63
63
  import {
64
64
  getPlatformShell
65
65
  } from "./chunk-NLN5LPQ4.js";
66
66
  import {
67
67
  buildMessagesFromStoredEvents,
68
68
  foldPendingConfirmations
69
- } from "./chunk-P637C6X3.js";
69
+ } from "./chunk-O2PLNJIU.js";
70
70
  import {
71
71
  deleteItemFromDir,
72
72
  findAgentById,
@@ -75,7 +75,7 @@ import {
75
75
  loadAllAgentsDefault,
76
76
  resolveDefaultAgentId,
77
77
  saveItemToDir
78
- } from "./chunk-OHBY2673.js";
78
+ } from "./chunk-3LRYZ7R3.js";
79
79
  import {
80
80
  getMaxVisibleItems
81
81
  } from "./chunk-UEOEA6BB.js";
@@ -2161,8 +2161,8 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
2161
2161
  const sessionId = client.activeSessionId;
2162
2162
  const session = sessionManager.requireSession(sessionId);
2163
2163
  try {
2164
- const { buildCachedPrompt } = await import("./dynamic-context-CJFDFUJF.js");
2165
- const allAgents = await import("./registry-XBEHPY7C.js");
2164
+ const { buildCachedPrompt } = await import("./dynamic-context-TDB4G5CH.js");
2165
+ const allAgents = await import("./registry-QEOTM3IG.js");
2166
2166
  const agentDef = allAgents.findAgentById(session.mode, await allAgents.loadAllAgentsDefault()) ?? allAgents.findAgentById("planner", await allAgents.loadAllAgentsDefault());
2167
2167
  const { systemPrompt: newPrompt, hash: newHash } = await buildCachedPrompt(sessionManager, sessionId, agentDef);
2168
2168
  const oldCached = sessionManager.getCachedPrompt(sessionId);
@@ -2477,4 +2477,4 @@ export {
2477
2477
  signalMcpReady,
2478
2478
  createWebSocketServer
2479
2479
  };
2480
- //# sourceMappingURL=chunk-D6T3X22W.js.map
2480
+ //# sourceMappingURL=chunk-CCEG3AFM.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createLLMClient
3
- } from "./chunk-SJJVNSA6.js";
3
+ } from "./chunk-2VJIQEZE.js";
4
4
  import {
5
5
  getModelProfile
6
6
  } from "./chunk-V4IE7HJY.js";
@@ -807,4 +807,4 @@ export {
807
807
  parseDefaultModelSelection,
808
808
  createProviderManager
809
809
  };
810
- //# sourceMappingURL=chunk-YPBV47DH.js.map
810
+ //# sourceMappingURL=chunk-CSKPPHD3.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
@@ -0,0 +1,7 @@
1
+ // src/constants.ts
2
+ var VERSION = "2.0.97";
3
+
4
+ export {
5
+ VERSION
6
+ };
7
+ //# sourceMappingURL=chunk-DRMYR6BF.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-27SDWNKL.js";
4
4
  import {
5
5
  getEventStore
6
- } from "./chunk-7P7OKBYQ.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-ZMSHE564.js.map
497
+ //# sourceMappingURL=chunk-G5JFKTSR.js.map