openfox 2.0.135 → 2.0.136

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 (87) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/CHANGELOG.md +27 -0
  3. package/dist/agent-defaults/builder.agent.md +1 -0
  4. package/dist/agent-defaults/planner.agent.md +1 -0
  5. package/dist/{ask-UBIRH3SO.js → ask-46J5WYRL.js} +2 -2
  6. package/dist/{auto-config-5VSNLVNI.js → auto-config-2A7Y2WOK.js} +25 -6
  7. package/dist/{backend-NDBY3DAQ.js → backend-24FTDSHF.js} +4 -2
  8. package/dist/{chat-handler-WGDFMOOD.js → chat-handler-SYU4HJMI.js} +30 -26
  9. package/dist/{chunk-QZOV4OVN.js → chunk-342BKOTE.js} +5 -5
  10. package/dist/{chunk-7QMWYNVF.js → chunk-4LLGI372.js} +2 -2
  11. package/dist/chunk-4SBVW4UH.js +24 -0
  12. package/dist/{chunk-NFEZATSN.js → chunk-5YPHN5NC.js} +8 -8
  13. package/dist/{chunk-ZMK4VX7V.js → chunk-64YDOCQR.js} +53 -21
  14. package/dist/{chunk-UV6IH6HK.js → chunk-AKWJMMEJ.js} +15 -1
  15. package/dist/{chunk-ORCQ3EXQ.js → chunk-BHVR2YS5.js} +2 -2
  16. package/dist/{chunk-5H5NRWHA.js → chunk-CPVEONNS.js} +12 -10
  17. package/dist/{chunk-S67WIWUG.js → chunk-DG2YSWMC.js} +40 -6
  18. package/dist/{chunk-ESZQTFQP.js → chunk-EXLCFEML.js} +86 -1010
  19. package/dist/chunk-FSSUPWYO.js +336 -0
  20. package/dist/{chunk-5UQ4CKOA.js → chunk-G5GUQKLS.js} +27 -6
  21. package/dist/{chunk-GP3CLMPQ.js → chunk-GP5BYQMF.js} +23 -23
  22. package/dist/{chunk-7ET46SNE.js → chunk-HEYU7FAY.js} +3 -3
  23. package/dist/{chunk-IAT2LBIX.js → chunk-MILEZY2J.js} +4 -4
  24. package/dist/{chunk-O3RCSKUH.js → chunk-MOYWDP73.js} +2 -2
  25. package/dist/{chunk-J3NMNYGM.js → chunk-N5JKVNLH.js} +2 -2
  26. package/dist/{chunk-I5ODJKYM.js → chunk-PQKLOLGC.js} +162 -6
  27. package/dist/{chunk-DWA4IE65.js → chunk-Q33DL67W.js} +2 -2
  28. package/dist/{chunk-OZWHRBDY.js → chunk-QBWJCO5K.js} +12 -29
  29. package/dist/{chunk-EUOWCVU6.js → chunk-QMU3ZY2C.js} +37 -341
  30. package/dist/{chunk-BIZFY3QP.js → chunk-QQQBNL7A.js} +212 -148
  31. package/dist/{chunk-CTWZPN7G.js → chunk-QUAEH3MP.js} +29 -1
  32. package/dist/{chunk-5UMXFLET.js → chunk-SAGDTQXD.js} +3 -3
  33. package/dist/chunk-U6FHHT2B.js +1155 -0
  34. package/dist/{chunk-4R5GV7RW.js → chunk-UL7776XB.js} +21 -21
  35. package/dist/{chunk-JURM3RPZ.js → chunk-V5AC2TV7.js} +8 -13
  36. package/dist/{chunk-UKIUQAQZ.js → chunk-VA2TYWQR.js} +4 -4
  37. package/dist/{chunk-JE7LW7Y6.js → chunk-VIJVLLPT.js} +12 -3
  38. package/dist/{chunk-2AI7VYPN.js → chunk-VKMPR25F.js} +9 -3
  39. package/dist/chunk-VWBPQZLO.js +7 -0
  40. package/dist/{chunk-F2MOHHXB.js → chunk-X4PVR6AW.js} +2 -2
  41. package/dist/chunk-XG3AUMPI.js +72 -0
  42. package/dist/{chunk-MEEUXRFL.js → chunk-XGG4XCKP.js} +2 -2
  43. package/dist/{chunk-VHLD6PCZ.js → chunk-YDPC4FLR.js} +17 -11
  44. package/dist/cli/dev.js +1 -1
  45. package/dist/cli/index.js +1 -1
  46. package/dist/client-MVI3J7SN.js +18 -0
  47. package/dist/{client-pure-FLKP6PTI.js → client-pure-YZ4IGCU4.js} +4 -2
  48. package/dist/{compactor-454UEIEX.js → compactor-LBK53WAK.js} +14 -12
  49. package/dist/describe-image-4XDLSKAB.js +30 -0
  50. package/dist/{dynamic-context-LKC6JYLQ.js → dynamic-context-RDBNQPPA.js} +12 -10
  51. package/dist/{events-335XAKFK.js → events-YTYYT3PR.js} +6 -6
  52. package/dist/{export-import-3WMRLO4A.js → export-import-GHRCOQHF.js} +7 -7
  53. package/dist/{folding-H7JTX6KI.js → folding-3MMOPS4W.js} +4 -4
  54. package/dist/{http-client-A445WYZU.js → http-client-C6UYWVWZ.js} +3 -3
  55. package/dist/launch-YZ46OEFP.js +58 -0
  56. package/dist/{manager-ZACEUL5P.js → manager-FSPRJCYT.js} +4 -4
  57. package/dist/{model-catalog-2PCKTYGW.js → model-catalog-Y5MA5OZP.js} +2 -2
  58. package/dist/{orchestrator-JGJWTRO5.js → orchestrator-6QGQ55NT.js} +29 -25
  59. package/dist/package.json +1 -1
  60. package/dist/{path-security-4LROI7F4.js → path-security-EC4Z2ZZG.js} +8 -8
  61. package/dist/{platform-XPMZKAUB.js → platform-KPKYBU54.js} +3 -3
  62. package/dist/{processor-MSQP63ML.js → processor-B2RV7MVC.js} +29 -25
  63. package/dist/{provider-JWUNG2TD.js → provider-SOC6Z25R.js} +10 -8
  64. package/dist/{provider-manager-2KKZ37XJ.js → provider-manager-Y53SVVQ3.js} +10 -8
  65. package/dist/{registry-BEIR7Y5G.js → registry-FMDMGIUB.js} +3 -3
  66. package/dist/{serve-CW5C3CBZ.js → serve-EWA5HXC7.js} +41 -32
  67. package/dist/server/index.d.ts +1 -0
  68. package/dist/server/index.js +34 -30
  69. package/dist/server-ZAPAB3FS.js +61 -0
  70. package/dist/{service-XIUNS5XV.js → service-NKLQH647.js} +12 -9
  71. package/dist/{session-overrides-LYW5PJ3R.js → session-overrides-ANQBKV74.js} +11 -7
  72. package/dist/{sessions-AOK3AGHY.js → sessions-GLYACE5R.js} +4 -4
  73. package/dist/{settings-ZJPM6PQV.js → settings-WH6BVQCP.js} +4 -2
  74. package/dist/{tasks-3JJWJJ3X.js → tasks-GPM3JAE6.js} +14 -10
  75. package/dist/tool-adapter-ZY4FC4C4.js +9 -0
  76. package/dist/{tools-E63MOJBO.js → tools-EJOABHVO.js} +27 -23
  77. package/dist/{update-XVXNSSDK.js → update-IPHJMRQZ.js} +2 -2
  78. package/dist/web/assets/{index-wTFCxQAw.js → index-CfFwerN2.js} +84 -84
  79. package/dist/web/assets/{index-Bg_Z8i3F.css → index-ChJjYovg.css} +1 -1
  80. package/dist/web/index.html +2 -2
  81. package/dist/web/sw.js +1 -1
  82. package/package.json +1 -1
  83. package/dist/chunk-WY3PWHWY.js +0 -7
  84. package/dist/client-VVYOWXRR.js +0 -16
  85. package/dist/launch-GJ7EHQRI.js +0 -54
  86. package/dist/server-ZHEB7XS2.js +0 -57
  87. package/dist/tool-adapter-FJAFLDZA.js +0 -8
package/CHANGELOG.md CHANGED
@@ -1,5 +1,32 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.136 - 2026-09-02
4
+
5
+ ### Features
6
+
7
+ - **Model favorites** — heart-toggle any model and pin a Favorites section at the top of the model selector
8
+ - **Model selector display settings** — full-height sizing, and start with providers or favorites collapsed
9
+ - **Describe-image tool for non-vision models** — delegates image questions to a vision-capable fallback
10
+ - **Sync button in the provider editor** — refetch the model catalog without losing current selections
11
+
12
+ ### Enhancements
13
+
14
+ - **Hover tooltips for truncated tool-call labels** — reveal the full path or command
15
+ - **Compact provider auth badge** — the Connected/Connect button is smaller and better aligned
16
+
17
+ ### Bug Fixes
18
+
19
+ - **Localized modal footer buttons** — Cancel/Save now translate to French
20
+ - **Tool schemas work with strict providers** — Vertex AI, Antigravity, and Gemini no longer reject tool calls
21
+ - **New sessions inherit project MCP overrides** — forked sessions keep the parent's MCP state too
22
+ - **No more duplicate models after a sync** — merged model families and selections survive a catalog refresh
23
+ - **Deleting a provider cleans up its sessions** — no dead provider pins, wrong context windows, or auto-compaction
24
+ - **Ollama vision images work again** — content arrays are converted to Ollama's native format
25
+ - **grep patterns no longer trigger path confirmations** — only real file operands are checked
26
+ - **Quoted paths can't sneak past path security** — nested quotes are now detected
27
+ - **DeepSeek reasoning preserved** — chain-of-thought is echoed under reasoning_content instead of being dropped
28
+ - **Per-model reasoning efforts accepted** — validation now honors each model's modes and effort lists
29
+
3
30
  ## 2.0.135 - 2026-09-01
4
31
 
5
32
  ### Features
package/dist/CHANGELOG.md CHANGED
@@ -1,5 +1,32 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.136 - 2026-09-02
4
+
5
+ ### Features
6
+
7
+ - **Model favorites** — heart-toggle any model and pin a Favorites section at the top of the model selector
8
+ - **Model selector display settings** — full-height sizing, and start with providers or favorites collapsed
9
+ - **Describe-image tool for non-vision models** — delegates image questions to a vision-capable fallback
10
+ - **Sync button in the provider editor** — refetch the model catalog without losing current selections
11
+
12
+ ### Enhancements
13
+
14
+ - **Hover tooltips for truncated tool-call labels** — reveal the full path or command
15
+ - **Compact provider auth badge** — the Connected/Connect button is smaller and better aligned
16
+
17
+ ### Bug Fixes
18
+
19
+ - **Localized modal footer buttons** — Cancel/Save now translate to French
20
+ - **Tool schemas work with strict providers** — Vertex AI, Antigravity, and Gemini no longer reject tool calls
21
+ - **New sessions inherit project MCP overrides** — forked sessions keep the parent's MCP state too
22
+ - **No more duplicate models after a sync** — merged model families and selections survive a catalog refresh
23
+ - **Deleting a provider cleans up its sessions** — no dead provider pins, wrong context windows, or auto-compaction
24
+ - **Ollama vision images work again** — content arrays are converted to Ollama's native format
25
+ - **grep patterns no longer trigger path confirmations** — only real file operands are checked
26
+ - **Quoted paths can't sneak past path security** — nested quotes are now detected
27
+ - **DeepSeek reasoning preserved** — chain-of-thought is echoed under reasoning_content instead of being dropped
28
+ - **Per-model reasoning efforts accepted** — validation now honors each model's modes and effort lists
29
+
3
30
  ## 2.0.135 - 2026-09-01
4
31
 
5
32
  ### Features
@@ -6,6 +6,7 @@ subagent: false
6
6
  color: '#3b82f6'
7
7
  allowedTools:
8
8
  - read_file
9
+ - describe_image
9
10
  - web_fetch
10
11
  - web_search
11
12
  - write_file
@@ -6,6 +6,7 @@ subagent: false
6
6
  color: '#a855f7'
7
7
  allowedTools:
8
8
  - read_file
9
+ - describe_image
9
10
  - web_fetch
10
11
  - web_search
11
12
  - run_command
@@ -7,7 +7,7 @@ import {
7
7
  getPendingQuestionsForSession,
8
8
  hasPendingQuestion,
9
9
  provideAnswer
10
- } from "./chunk-JURM3RPZ.js";
10
+ } from "./chunk-V5AC2TV7.js";
11
11
  import "./chunk-LCLH6ZUL.js";
12
12
  import "./chunk-YLJ4XMA6.js";
13
13
  export {
@@ -20,4 +20,4 @@ export {
20
20
  hasPendingQuestion,
21
21
  provideAnswer
22
22
  };
23
- //# sourceMappingURL=ask-UBIRH3SO.js.map
23
+ //# sourceMappingURL=ask-46J5WYRL.js.map
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-HNCM3D7Y.js";
8
8
  import {
9
9
  getCatalogEntry
10
- } from "./chunk-2AI7VYPN.js";
10
+ } from "./chunk-VKMPR25F.js";
11
11
  import {
12
12
  logger
13
13
  } from "./chunk-K44MW7JJ.js";
@@ -118,6 +118,14 @@ async function detectLmstudioInfo(baseUrl, modelId) {
118
118
  }
119
119
  throw new Error("No context_length in LM Studio response");
120
120
  }
121
+ var REASONING_FIELDS = ["reasoning", "reasoning_content", "thinking"];
122
+ function detectThinkingField(message) {
123
+ for (const field of REASONING_FIELDS) {
124
+ const value = message[field];
125
+ if (typeof value === "string" && value.length > 0) return field;
126
+ }
127
+ return void 0;
128
+ }
121
129
  async function probeCombo(baseUrl, apiKey, model, combo, signal) {
122
130
  const body = {
123
131
  model,
@@ -139,8 +147,15 @@ async function probeCombo(baseUrl, apiKey, model, combo, signal) {
139
147
  }
140
148
  const data = await response.json();
141
149
  const message = data.choices?.[0]?.message ?? {};
142
- const hasContent = !!(message["content"] || message["reasoning"] || message["reasoning_content"] || message["thinking"]);
143
- return { combo, httpCode: response.status, hasContent, durationMs };
150
+ const thinkingField = detectThinkingField(message);
151
+ const hasContent = !!(message["content"] || thinkingField);
152
+ return {
153
+ combo,
154
+ httpCode: response.status,
155
+ hasContent,
156
+ ...thinkingField ? { thinkingField } : {},
157
+ durationMs
158
+ };
144
159
  } catch {
145
160
  const durationMs = Date.now() - start;
146
161
  return { combo, httpCode: 0, hasContent: false, durationMs };
@@ -159,7 +174,7 @@ async function probeCombos(baseUrl, apiKey, model, combos) {
159
174
  combo: winner.combo,
160
175
  durationMs: winner.durationMs
161
176
  });
162
- return winner.combo;
177
+ return { combo: winner.combo, ...winner.thinkingField ? { thinkingField: winner.thinkingField } : {} };
163
178
  }
164
179
  logger.debug("Auto-config: no working combo found", { model });
165
180
  return null;
@@ -284,11 +299,14 @@ async function autoConfig(input) {
284
299
  } = await detectModelInfo(baseUrl, apiKey, backend, model.id);
285
300
  const catalog = getCatalogEntry(model.id);
286
301
  const reasoningEfforts = catalog?.reasoningEfforts;
287
- const [thinkingConfig, nonThinkingConfig, rejectedParams] = await Promise.all([
302
+ const [thinkingResult, nonThinkingResult, rejectedParams] = await Promise.all([
288
303
  probeCombos(baseUrl, apiKey, model.id, THINKING_COMBOS),
289
304
  probeCombos(baseUrl, apiKey, model.id, NON_THINKING_COMBOS),
290
305
  probeRejectedParams(baseUrl, apiKey, model.id, backend)
291
306
  ]);
307
+ const thinkingConfig = thinkingResult?.combo ?? null;
308
+ const nonThinkingConfig = nonThinkingResult?.combo ?? null;
309
+ const thinkingField = thinkingResult?.thinkingField;
292
310
  const sendReasoningInMessages = thinkingConfig ? await probeReasoningInMessages(baseUrl, apiKey, model.id) : void 0;
293
311
  results.push({
294
312
  id: model.id,
@@ -297,6 +315,7 @@ async function autoConfig(input) {
297
315
  supportsVision,
298
316
  thinkingConfig,
299
317
  nonThinkingConfig,
318
+ ...thinkingField ? { thinkingField } : {},
300
319
  ...sendReasoningInMessages !== void 0 ? { sendReasoningInMessages } : {},
301
320
  ...rejectedParams.length > 0 ? { rejectedParams } : {},
302
321
  ...reasoningEfforts ? { reasoningEfforts } : {},
@@ -308,4 +327,4 @@ async function autoConfig(input) {
308
327
  export {
309
328
  autoConfig
310
329
  };
311
- //# sourceMappingURL=auto-config-5VSNLVNI.js.map
330
+ //# sourceMappingURL=auto-config-2A7Y2WOK.js.map
@@ -1,12 +1,14 @@
1
1
  import {
2
2
  detectBackendFromUrl,
3
+ detectProviderDefaultsFromUrl,
3
4
  getBackendCapabilities,
4
5
  getBackendDisplayName
5
- } from "./chunk-UV6IH6HK.js";
6
+ } from "./chunk-AKWJMMEJ.js";
6
7
  import "./chunk-YLJ4XMA6.js";
7
8
  export {
8
9
  detectBackendFromUrl,
10
+ detectProviderDefaultsFromUrl,
9
11
  getBackendCapabilities,
10
12
  getBackendDisplayName
11
13
  };
12
- //# sourceMappingURL=backend-NDBY3DAQ.js.map
14
+ //# sourceMappingURL=backend-24FTDSHF.js.map
@@ -2,32 +2,34 @@ import {
2
2
  buildRunChatTurnParams,
3
3
  finalizeTurnCompletion,
4
4
  generateSessionNameForSession
5
- } from "./chunk-NFEZATSN.js";
5
+ } from "./chunk-5YPHN5NC.js";
6
6
  import {
7
7
  runChatTurn
8
- } from "./chunk-4R5GV7RW.js";
9
- import "./chunk-ESZQTFQP.js";
8
+ } from "./chunk-UL7776XB.js";
9
+ import "./chunk-YDPC4FLR.js";
10
+ import "./chunk-EXLCFEML.js";
11
+ import "./chunk-Q33DL67W.js";
10
12
  import "./chunk-XE6UC5Z3.js";
11
13
  import "./chunk-J7GAZGZT.js";
12
- import "./chunk-OZWHRBDY.js";
13
- import "./chunk-S67WIWUG.js";
14
- import "./chunk-7ET46SNE.js";
14
+ import "./chunk-QBWJCO5K.js";
15
+ import "./chunk-DG2YSWMC.js";
16
+ import "./chunk-U6FHHT2B.js";
17
+ import "./chunk-4SBVW4UH.js";
18
+ import "./chunk-HEYU7FAY.js";
19
+ import "./chunk-4LLGI372.js";
15
20
  import "./chunk-LW6MMSTD.js";
16
- import "./chunk-5UMXFLET.js";
21
+ import "./chunk-SAGDTQXD.js";
17
22
  import "./chunk-I72ACQ6R.js";
18
- import "./chunk-JE7LW7Y6.js";
23
+ import "./chunk-VIJVLLPT.js";
19
24
  import "./chunk-OAN4BXEW.js";
20
- import "./chunk-VHLD6PCZ.js";
21
- import "./chunk-DWA4IE65.js";
22
- import "./chunk-7QMWYNVF.js";
23
- import "./chunk-JURM3RPZ.js";
24
- import "./chunk-I5ODJKYM.js";
25
+ import "./chunk-V5AC2TV7.js";
26
+ import "./chunk-PQKLOLGC.js";
25
27
  import {
26
28
  getEventStore
27
- } from "./chunk-QZOV4OVN.js";
28
- import "./chunk-MEEUXRFL.js";
29
- import "./chunk-F2MOHHXB.js";
30
- import "./chunk-ORCQ3EXQ.js";
29
+ } from "./chunk-342BKOTE.js";
30
+ import "./chunk-XGG4XCKP.js";
31
+ import "./chunk-X4PVR6AW.js";
32
+ import "./chunk-BHVR2YS5.js";
31
33
  import "./chunk-OSXPQSLW.js";
32
34
  import {
33
35
  createChatMessageMessage,
@@ -35,20 +37,22 @@ import {
35
37
  createSessionRunningMessage
36
38
  } from "./chunk-AATMPL7S.js";
37
39
  import "./chunk-LCLH6ZUL.js";
38
- import "./chunk-O3RCSKUH.js";
39
- import "./chunk-5UQ4CKOA.js";
40
+ import "./chunk-MOYWDP73.js";
41
+ import "./chunk-G5GUQKLS.js";
40
42
  import "./chunk-OA2FURC3.js";
41
43
  import "./chunk-J2GP3J3X.js";
42
44
  import "./chunk-DPFET73G.js";
43
- import "./chunk-ZMK4VX7V.js";
45
+ import "./chunk-64YDOCQR.js";
44
46
  import "./chunk-TS5WKTFB.js";
45
- import "./chunk-UV6IH6HK.js";
47
+ import "./chunk-AKWJMMEJ.js";
46
48
  import "./chunk-HNCM3D7Y.js";
47
- import "./chunk-EUOWCVU6.js";
48
- import "./chunk-J3NMNYGM.js";
49
- import "./chunk-CTWZPN7G.js";
49
+ import "./chunk-QMU3ZY2C.js";
50
+ import "./chunk-FSSUPWYO.js";
51
+ import "./chunk-XG3AUMPI.js";
52
+ import "./chunk-N5JKVNLH.js";
53
+ import "./chunk-QUAEH3MP.js";
50
54
  import "./chunk-JU757HVI.js";
51
- import "./chunk-2AI7VYPN.js";
55
+ import "./chunk-VKMPR25F.js";
52
56
  import "./chunk-K44MW7JJ.js";
53
57
  import "./chunk-HF3NDXB4.js";
54
58
  import "./chunk-24YKXKCG.js";
@@ -175,4 +179,4 @@ export {
175
179
  startChatSession,
176
180
  stopSessionExecution
177
181
  };
178
- //# sourceMappingURL=chat-handler-WGDFMOOD.js.map
182
+ //# sourceMappingURL=chat-handler-SYU4HJMI.js.map
@@ -6,16 +6,16 @@ import {
6
6
  foldSessionState,
7
7
  spreadOptionalMessageFields,
8
8
  trimSnapshotStreamingOutput
9
- } from "./chunk-MEEUXRFL.js";
9
+ } from "./chunk-XGG4XCKP.js";
10
10
  import {
11
11
  updateSessionMessageCount
12
- } from "./chunk-F2MOHHXB.js";
12
+ } from "./chunk-X4PVR6AW.js";
13
13
  import {
14
14
  getRuntimeConfig
15
- } from "./chunk-ORCQ3EXQ.js";
15
+ } from "./chunk-BHVR2YS5.js";
16
16
  import {
17
17
  SETTINGS_KEYS
18
- } from "./chunk-CTWZPN7G.js";
18
+ } from "./chunk-QUAEH3MP.js";
19
19
  import {
20
20
  logger
21
21
  } from "./chunk-K44MW7JJ.js";
@@ -1489,4 +1489,4 @@ export {
1489
1489
  truncateSessionMessages,
1490
1490
  getRecentUserPromptsForSession
1491
1491
  };
1492
- //# sourceMappingURL=chunk-QZOV4OVN.js.map
1492
+ //# sourceMappingURL=chunk-342BKOTE.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getPlatformShell
3
- } from "./chunk-O3RCSKUH.js";
3
+ } from "./chunk-MOYWDP73.js";
4
4
 
5
5
  // src/server/tools/tool-policy.ts
6
6
  var ALWAYS_ALLOWED = /* @__PURE__ */ new Set(["step_done"]);
@@ -246,4 +246,4 @@ export {
246
246
  buildAgentSmallReminder,
247
247
  COMPACTION_PROMPT
248
248
  };
249
- //# sourceMappingURL=chunk-7QMWYNVF.js.map
249
+ //# sourceMappingURL=chunk-4LLGI372.js.map
@@ -0,0 +1,24 @@
1
+ import {
2
+ SETTINGS_KEYS,
3
+ getSetting
4
+ } from "./chunk-QUAEH3MP.js";
5
+ import {
6
+ getLocale,
7
+ setLocale,
8
+ t
9
+ } from "./chunk-24YKXKCG.js";
10
+
11
+ // src/server/i18n.ts
12
+ function resolveLocale() {
13
+ return getSetting(SETTINGS_KEYS.DISPLAY_LOCALE) === "fr" ? "fr" : "en";
14
+ }
15
+ function serverT(tx, vars) {
16
+ const locale = resolveLocale();
17
+ if (getLocale() !== locale) setLocale(locale);
18
+ return t(tx, vars);
19
+ }
20
+
21
+ export {
22
+ serverT
23
+ };
24
+ //# sourceMappingURL=chunk-4SBVW4UH.js.map
@@ -1,27 +1,27 @@
1
1
  import {
2
2
  getPendingQuestionsForSession
3
- } from "./chunk-JURM3RPZ.js";
3
+ } from "./chunk-V5AC2TV7.js";
4
4
  import {
5
5
  combineEventsWithSnapshot,
6
6
  getEventStore
7
- } from "./chunk-QZOV4OVN.js";
7
+ } from "./chunk-342BKOTE.js";
8
8
  import {
9
9
  buildMessagesFromStoredEvents,
10
10
  foldPendingConfirmations
11
- } from "./chunk-MEEUXRFL.js";
11
+ } from "./chunk-XGG4XCKP.js";
12
12
  import {
13
13
  updateSessionMetadata
14
- } from "./chunk-F2MOHHXB.js";
14
+ } from "./chunk-X4PVR6AW.js";
15
15
  import {
16
16
  getRuntimeConfig
17
- } from "./chunk-ORCQ3EXQ.js";
17
+ } from "./chunk-BHVR2YS5.js";
18
18
  import {
19
19
  createContextStateMessage,
20
20
  createSessionStateMessage
21
21
  } from "./chunk-AATMPL7S.js";
22
22
  import {
23
23
  getMaxVisibleItems
24
- } from "./chunk-CTWZPN7G.js";
24
+ } from "./chunk-QUAEH3MP.js";
25
25
  import {
26
26
  logger
27
27
  } from "./chunk-K44MW7JJ.js";
@@ -162,7 +162,7 @@ async function generateSessionNameForSession(sessionId, userMessage, deps, signa
162
162
  client = deps.getLLMClient();
163
163
  client.setModel(providerConfig.model);
164
164
  } else if (providerConfig) {
165
- const { createLLMClient } = await import("./client-VVYOWXRR.js");
165
+ const { createLLMClient } = await import("./client-MVI3J7SN.js");
166
166
  client = createLLMClient(
167
167
  {
168
168
  llm: {
@@ -216,4 +216,4 @@ export {
216
216
  needsNameGeneration,
217
217
  generateSessionNameForSession
218
218
  };
219
- //# sourceMappingURL=chunk-NFEZATSN.js.map
219
+ //# sourceMappingURL=chunk-5YPHN5NC.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-TS5WKTFB.js";
4
4
  import {
5
5
  getBackendCapabilities
6
- } from "./chunk-UV6IH6HK.js";
6
+ } from "./chunk-AKWJMMEJ.js";
7
7
  import {
8
8
  ensureVersionPrefix,
9
9
  stripVersionPrefix
@@ -14,13 +14,13 @@ import {
14
14
  getThinking,
15
15
  mapFinishReason,
16
16
  parseToolArguments
17
- } from "./chunk-EUOWCVU6.js";
17
+ } from "./chunk-QMU3ZY2C.js";
18
18
  import {
19
19
  ChatHttpClient,
20
20
  DONE,
21
21
  LLMError,
22
22
  OpenAIHttpClient
23
- } from "./chunk-J3NMNYGM.js";
23
+ } from "./chunk-N5JKVNLH.js";
24
24
  import {
25
25
  logger
26
26
  } from "./chunk-K44MW7JJ.js";
@@ -300,27 +300,59 @@ function toOllamaThink(effort) {
300
300
  if (OLLAMA_THINK_LEVELS.has(effort)) return effort;
301
301
  return true;
302
302
  }
303
+ function parseToolCalls(toolCalls) {
304
+ if (!Array.isArray(toolCalls) || toolCalls.length === 0) return void 0;
305
+ return toolCalls.map((toolCall) => {
306
+ const fn = toolCall.function;
307
+ if (!fn || typeof fn.arguments !== "string") return toolCall;
308
+ try {
309
+ return {
310
+ ...toolCall,
311
+ function: { ...fn, arguments: JSON.parse(fn.arguments) }
312
+ };
313
+ } catch {
314
+ return toolCall;
315
+ }
316
+ });
317
+ }
303
318
  function toNativeMessage(message) {
304
319
  const raw = message;
305
320
  const toolCalls = raw["tool_calls"];
306
- if (!Array.isArray(toolCalls) || toolCalls.length === 0) {
307
- return raw;
308
- }
309
- return {
310
- ...raw,
311
- tool_calls: toolCalls.map((toolCall) => {
312
- const fn = toolCall.function;
313
- if (!fn || typeof fn.arguments !== "string") return toolCall;
314
- try {
315
- return {
316
- ...toolCall,
317
- function: { ...fn, arguments: JSON.parse(fn.arguments) }
318
- };
319
- } catch {
320
- return toolCall;
321
+ const content = raw["content"];
322
+ if (Array.isArray(content)) {
323
+ const textParts = [];
324
+ const imageParts = [];
325
+ for (const part of content) {
326
+ if (part.type === "text") {
327
+ textParts.push(part.text);
328
+ } else if (part.type === "image_url") {
329
+ const match = part.image_url.url.match(/^data:image\/[^;]+;base64,(.+)$/);
330
+ if (match && match[1]) {
331
+ imageParts.push(match[1]);
332
+ }
321
333
  }
322
- })
323
- };
334
+ }
335
+ const result = {
336
+ ...raw,
337
+ content: textParts.join("\n")
338
+ };
339
+ if (imageParts.length > 0) {
340
+ result["images"] = imageParts;
341
+ }
342
+ const parsedToolCalls2 = parseToolCalls(toolCalls);
343
+ if (parsedToolCalls2 !== void 0) {
344
+ result["tool_calls"] = parsedToolCalls2;
345
+ }
346
+ return result;
347
+ }
348
+ const parsedToolCalls = parseToolCalls(toolCalls);
349
+ if (parsedToolCalls !== void 0) {
350
+ return {
351
+ ...raw,
352
+ tool_calls: parsedToolCalls
353
+ };
354
+ }
355
+ return raw;
324
356
  }
325
357
  function buildOllamaChatRequest(params) {
326
358
  const options = {};
@@ -768,4 +800,4 @@ function createLLMClient(config, initialBackend = config.llm.backend ?? "unknown
768
800
  export {
769
801
  createLLMClient
770
802
  };
771
- //# sourceMappingURL=chunk-ZMK4VX7V.js.map
803
+ //# sourceMappingURL=chunk-64YDOCQR.js.map
@@ -79,6 +79,19 @@ function detectBackendFromUrl(url) {
79
79
  return void 0;
80
80
  }
81
81
  }
82
+ var HOST_PROVIDER_DEFAULTS = {
83
+ // DeepSeek's official API requires reasoning echoed under `reasoning_content`
84
+ // (its own output field) — anything else is ignored or 400s on tool calls.
85
+ "api.deepseek.com": { thinkingField: "reasoning_content" }
86
+ };
87
+ function detectProviderDefaultsFromUrl(url) {
88
+ try {
89
+ const host = new URL(url).hostname.toLowerCase();
90
+ return HOST_PROVIDER_DEFAULTS[host];
91
+ } catch {
92
+ return void 0;
93
+ }
94
+ }
82
95
  function getBackendDisplayName(backend) {
83
96
  switch (backend) {
84
97
  case "vllm":
@@ -105,6 +118,7 @@ function getBackendDisplayName(backend) {
105
118
  export {
106
119
  getBackendCapabilities,
107
120
  detectBackendFromUrl,
121
+ detectProviderDefaultsFromUrl,
108
122
  getBackendDisplayName
109
123
  };
110
- //# sourceMappingURL=chunk-UV6IH6HK.js.map
124
+ //# sourceMappingURL=chunk-AKWJMMEJ.js.map
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  SETTINGS_KEYS,
9
9
  getSetting
10
- } from "./chunk-CTWZPN7G.js";
10
+ } from "./chunk-QUAEH3MP.js";
11
11
  import {
12
12
  logger
13
13
  } from "./chunk-K44MW7JJ.js";
@@ -352,4 +352,4 @@ export {
352
352
  getOverrideAgentIds,
353
353
  resolveDefaultAgentId
354
354
  };
355
- //# sourceMappingURL=chunk-ORCQ3EXQ.js.map
355
+ //# sourceMappingURL=chunk-BHVR2YS5.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  runAgentTurn
3
- } from "./chunk-4R5GV7RW.js";
3
+ } from "./chunk-UL7776XB.js";
4
4
  import {
5
5
  executeSubAgent,
6
6
  getToolRegistryForAgent
7
- } from "./chunk-ESZQTFQP.js";
7
+ } from "./chunk-EXLCFEML.js";
8
8
  import {
9
9
  gitSpawnEnv
10
10
  } from "./chunk-J7GAZGZT.js";
@@ -14,38 +14,40 @@ import {
14
14
  loadDefaultWorkflows,
15
15
  loadProjectWorkflows,
16
16
  loadUserWorkflows,
17
- normalizeWorkflowScope,
17
+ normalizeWorkflowScope
18
+ } from "./chunk-QBWJCO5K.js";
19
+ import {
18
20
  serverT
19
- } from "./chunk-OZWHRBDY.js";
21
+ } from "./chunk-4SBVW4UH.js";
20
22
  import {
21
23
  TurnMetrics,
22
24
  createMessageStartEvent
23
- } from "./chunk-7ET46SNE.js";
25
+ } from "./chunk-HEYU7FAY.js";
24
26
  import {
25
27
  checkAborted,
26
28
  decodeUtf8,
27
29
  spawnShellProcess
28
- } from "./chunk-5UMXFLET.js";
30
+ } from "./chunk-SAGDTQXD.js";
29
31
  import {
30
32
  terminateProcessTree
31
33
  } from "./chunk-I72ACQ6R.js";
32
34
  import {
33
35
  getCurrentContextWindowId,
34
36
  getEventStore
35
- } from "./chunk-QZOV4OVN.js";
37
+ } from "./chunk-342BKOTE.js";
36
38
  import {
37
39
  findAgentById,
38
40
  getRuntimeConfig,
39
41
  loadAllAgentsDefault,
40
42
  resolveDefaultAgentId
41
- } from "./chunk-ORCQ3EXQ.js";
43
+ } from "./chunk-BHVR2YS5.js";
42
44
  import {
43
45
  createChatMessageMessage,
44
46
  createSessionRunningMessage
45
47
  } from "./chunk-AATMPL7S.js";
46
48
  import {
47
49
  LLMError
48
- } from "./chunk-J3NMNYGM.js";
50
+ } from "./chunk-N5JKVNLH.js";
49
51
  import {
50
52
  logger
51
53
  } from "./chunk-K44MW7JJ.js";
@@ -1021,4 +1023,4 @@ export {
1021
1023
  abortRunnerRun,
1022
1024
  launchWorkflowRun
1023
1025
  };
1024
- //# sourceMappingURL=chunk-5H5NRWHA.js.map
1026
+ //# sourceMappingURL=chunk-CPVEONNS.js.map