openfox 2.0.121 → 2.0.123

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 (83) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/CHANGELOG.md +23 -0
  3. package/dist/{auto-config-YXNCBYEY.js → auto-config-4BFGLPCP.js} +86 -19
  4. package/dist/{chat-handler-A5ORR5BB.js → chat-handler-UWZYFGRY.js} +29 -28
  5. package/dist/{chunk-DIALH34K.js → chunk-3B232XG4.js} +2 -2
  6. package/dist/{chunk-RMOKNQAS.js → chunk-3NMLSANH.js} +2 -2
  7. package/dist/{chunk-TR4DQZIG.js → chunk-4L7UMEHD.js} +70 -57
  8. package/dist/{chunk-EZ67GBEO.js → chunk-66MG44TF.js} +2 -2
  9. package/dist/{chunk-YBOU4ZFD.js → chunk-7YP4O4XE.js} +3 -3
  10. package/dist/{chunk-SLW3KKPP.js → chunk-AQBRI7TM.js} +21 -8
  11. package/dist/{chunk-OXANSWVZ.js → chunk-EHFIUXWZ.js} +2 -2
  12. package/dist/{chunk-KD7JTG42.js → chunk-FFEZJBQO.js} +278 -142
  13. package/dist/{chunk-Y7FGHKBW.js → chunk-GIJUWPRQ.js} +2 -2
  14. package/dist/{chunk-UJRWYZHM.js → chunk-H4JRR5KV.js} +59 -23
  15. package/dist/{chunk-5A4YN6I7.js → chunk-INOO465O.js} +5 -5
  16. package/dist/{chunk-6A2VIV36.js → chunk-JEZN37KV.js} +3 -3
  17. package/dist/{chunk-2N7KFNMY.js → chunk-KBESUA3W.js} +3 -3
  18. package/dist/chunk-LXCDR3H5.js +7 -0
  19. package/dist/{chunk-FGVMRFDW.js → chunk-N2Q3KYWM.js} +2 -2
  20. package/dist/{chunk-NYQKSKDB.js → chunk-OYBUJIC3.js} +9 -1
  21. package/dist/{chunk-5QTERLHH.js → chunk-PZUKG3OZ.js} +6 -6
  22. package/dist/{chunk-I22B6KWV.js → chunk-RV5G7QQU.js} +3 -3
  23. package/dist/{chunk-O63CDVNI.js → chunk-SS6KV6DI.js} +8 -7
  24. package/dist/{chunk-J77SLE3M.js → chunk-SYTEO5LA.js} +3 -2
  25. package/dist/chunk-TPDBUOPN.js +82 -0
  26. package/dist/{chunk-VUANU5A5.js → chunk-V2UJP5CX.js} +22 -18
  27. package/dist/{chunk-POTCPZJF.js → chunk-VPRB5FNR.js} +2 -2
  28. package/dist/{chunk-YDDBPKVP.js → chunk-W4SM4FFZ.js} +15 -15
  29. package/dist/{chunk-ZELEYSTY.js → chunk-YGOF4QDW.js} +50 -37
  30. package/dist/{chunk-J3IJJ55E.js → chunk-YJD5A375.js} +7 -7
  31. package/dist/{chunk-F2IM5J4I.js → chunk-YU5QPXSU.js} +4 -4
  32. package/dist/{chunk-LSEHJ2WI.js → chunk-ZIL6VKLU.js} +3 -3
  33. package/dist/{chunk-LWXLNE6M.js → chunk-ZIYETXOW.js} +2 -2
  34. package/dist/{chunk-W3WZ54KP.js → chunk-ZKMZI4ZG.js} +15 -15
  35. package/dist/cli/dev.js +1 -1
  36. package/dist/cli/index.js +1 -1
  37. package/dist/{client-JKPDMJ7S.js → client-XHJHOFMU.js} +5 -5
  38. package/dist/{compactor-MKD3CAFM.js → compactor-VTATJTPN.js} +12 -12
  39. package/dist/{dynamic-context-KPZECHZH.js → dynamic-context-5TPG2AJL.js} +9 -9
  40. package/dist/{events-6P4TDTSD.js → events-GMHRX4LF.js} +8 -8
  41. package/dist/{folding-3LA2WX2B.js → folding-7K2GRPF4.js} +6 -6
  42. package/dist/http-client-N4ASJEKJ.js +11 -0
  43. package/dist/{inspect-proxy-IDLUAQH5.js → inspect-proxy-UKPU3Z64.js} +4 -4
  44. package/dist/launch-5PJLLVXV.js +53 -0
  45. package/dist/{manager-NFKTUR64.js → manager-NOKJQTTF.js} +5 -5
  46. package/dist/model-catalog-T2GQFJI4.js +14 -0
  47. package/dist/{orchestrator-SM3IHZFP.js → orchestrator-2Q3R5KKR.js} +31 -30
  48. package/dist/package.json +1 -1
  49. package/dist/{path-security-JUF56IB6.js → path-security-NRO37OAP.js} +10 -10
  50. package/dist/{platform-FM57ZJHA.js → platform-EMKWQTZX.js} +4 -4
  51. package/dist/{processor-EUJRA5GW.js → processor-N2XW2KJV.js} +39 -35
  52. package/dist/{project-creator-J4ITWDZI.js → project-creator-JF3YVQAH.js} +3 -3
  53. package/dist/{projects-FHRTSV6N.js → projects-TPSLCJP2.js} +3 -3
  54. package/dist/{protocol-BLin669D.d.ts → protocol-DCMH9Ufp.d.ts} +1 -1
  55. package/dist/provider/index.d.ts +4 -4
  56. package/dist/{provider-TAFJCWVP.js → provider-EBL6Z7TV.js} +7 -6
  57. package/dist/{provider-manager-EDJN6ARI.js → provider-manager-MKF27CTA.js} +7 -6
  58. package/dist/{registry-37GL3DAP.js → registry-Z4GVYFTV.js} +5 -5
  59. package/dist/{serve-DEY45HQS.js → serve-TARX23JF.js} +34 -33
  60. package/dist/server/index.d.ts +27 -6
  61. package/dist/server/index.js +31 -30
  62. package/dist/server-FKVRW7RV.js +56 -0
  63. package/dist/{service-HX5NFX2D.js → service-SY6Y4BIM.js} +10 -9
  64. package/dist/{session-overrides-EOKSZO2X.js → session-overrides-4WAD3X5Q.js} +7 -7
  65. package/dist/{sessions-XFNU4DZ6.js → sessions-D7VRCHQY.js} +8 -6
  66. package/dist/{settings-SYYDPV43.js → settings-VOWWO4VG.js} +3 -3
  67. package/dist/shared/index.d.ts +3 -3
  68. package/dist/{tasks-A25JQ4TV.js → tasks-IDIKTBOR.js} +11 -10
  69. package/dist/{tools-YGJXEEBI.js → tools-YPVZ5QM2.js} +24 -23
  70. package/dist/{types-B5_9KtfJ.d.ts → types-Cr4EgGwK.d.ts} +1 -1
  71. package/dist/{types-DeQIEC1U.d.ts → types-PAKlAzp9.d.ts} +16 -0
  72. package/dist/{update-CE3XSZXE.js → update-VSSOHC47.js} +2 -2
  73. package/dist/web/assets/index-C10YdCOU.js +324 -0
  74. package/dist/web/assets/{index-D9sfxcRH.css → index-DFMllFkv.css} +1 -1
  75. package/dist/web/index.html +2 -2
  76. package/dist/web/sw.js +1 -1
  77. package/dist/{workspace-ZNZFEONU.js → workspace-J3JEGF6U.js} +4 -4
  78. package/package.json +1 -1
  79. package/dist/chunk-OBB3JYMK.js +0 -7
  80. package/dist/http-client-IKOARXI7.js +0 -11
  81. package/dist/launch-YWXQQWZN.js +0 -52
  82. package/dist/server-EIRLWSBZ.js +0 -55
  83. package/dist/web/assets/index-oiZlWLY7.js +0 -324
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.123 - 2026-08-18
4
+
5
+ ### Features
6
+
7
+ - **Reasoning effort is now a first-class citizen** — switch it per model from the model selector, with curated presets you can customize or override raw; pin it in agent overrides; see it as model:effort in message headers, turn stats and the selector; and have your picks stick as the model's default for future sessions
8
+ - **Switching reasoning effort mid-run may invalidate your cache!** — the model selector asks first, so you can keep the current effort or apply the new one
9
+
10
+ ### Enhancements
11
+
12
+ - **Task prompt auto-resizes** — save with Ctrl/Cmd+Enter, newlines via Enter/Shift+Enter, spellcheck off
13
+
14
+ ## 2.0.122 - 2026-08-16
15
+
16
+ ### Features
17
+
18
+ - **Live "time since your last prompt" counter** — the status bar ticks every second while the agent works
19
+ - **Right-click a message for its timestamp** — sent/received time in 24h format (2026/08/16 14:44)
20
+
21
+ ### Enhancements
22
+
23
+ - **Task moves and gate fills need your approval** — the agent no longer advances the board on its own
24
+ - **Status label is cleaner** — dropped the redundant phase suffix (it was always "Plan" outside workflows)
25
+
3
26
  ## 2.0.121 - 2026-08-16
4
27
 
5
28
  ### Features
package/dist/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.123 - 2026-08-18
4
+
5
+ ### Features
6
+
7
+ - **Reasoning effort is now a first-class citizen** — switch it per model from the model selector, with curated presets you can customize or override raw; pin it in agent overrides; see it as model:effort in message headers, turn stats and the selector; and have your picks stick as the model's default for future sessions
8
+ - **Switching reasoning effort mid-run may invalidate your cache!** — the model selector asks first, so you can keep the current effort or apply the new one
9
+
10
+ ### Enhancements
11
+
12
+ - **Task prompt auto-resizes** — save with Ctrl/Cmd+Enter, newlines via Enter/Shift+Enter, spellcheck off
13
+
14
+ ## 2.0.122 - 2026-08-16
15
+
16
+ ### Features
17
+
18
+ - **Live "time since your last prompt" counter** — the status bar ticks every second while the agent works
19
+ - **Right-click a message for its timestamp** — sent/received time in 24h format (2026/08/16 14:44)
20
+
21
+ ### Enhancements
22
+
23
+ - **Task moves and gate fills need your approval** — the agent no longer advances the board on its own
24
+ - **Status label is cleaner** — dropped the redundant phase suffix (it was always "Plan" outside workflows)
25
+
3
26
  ## 2.0.121 - 2026-08-16
4
27
 
5
28
  ### Features
@@ -4,12 +4,20 @@ import {
4
4
  import {
5
5
  ensureVersionPrefix
6
6
  } from "./chunk-HNCM3D7Y.js";
7
+ import {
8
+ getCatalogEntry
9
+ } from "./chunk-TPDBUOPN.js";
7
10
  import {
8
11
  logger
9
12
  } from "./chunk-K44MW7JJ.js";
10
13
  import "./chunk-YLJ4XMA6.js";
11
14
 
12
15
  // src/server/providers/auto-config.ts
16
+ function buildAuthHeaders(apiKey) {
17
+ const headers = { "Content-Type": "application/json" };
18
+ if (apiKey) headers["Authorization"] = `Bearer ${apiKey}`;
19
+ return headers;
20
+ }
13
21
  var NON_THINKING_COMBOS = [
14
22
  {},
15
23
  { reasoning_effort: "none" },
@@ -56,9 +64,10 @@ async function detectModelInfo(baseUrl, apiKey, backend, modelId) {
56
64
  }
57
65
  }
58
66
  async function detectVllmInfo(baseUrl, apiKey, modelId) {
59
- const headers = { "Content-Type": "application/json" };
60
- if (apiKey) headers["Authorization"] = `Bearer ${apiKey}`;
61
- const response = await fetch(`${ensureVersionPrefix(baseUrl)}/models`, { headers, signal: AbortSignal.timeout(5e3) });
67
+ const response = await fetch(`${ensureVersionPrefix(baseUrl)}/models`, {
68
+ headers: buildAuthHeaders(apiKey),
69
+ signal: AbortSignal.timeout(5e3)
70
+ });
62
71
  if (!response.ok) throw new Error(`HTTP ${response.status}`);
63
72
  const data = await response.json();
64
73
  const model = data.data?.find((m) => m.id === modelId);
@@ -109,8 +118,6 @@ async function detectLmstudioInfo(baseUrl, modelId) {
109
118
  throw new Error("No context_length in LM Studio response");
110
119
  }
111
120
  async function probeCombo(baseUrl, apiKey, model, combo, signal) {
112
- const headers = { "Content-Type": "application/json" };
113
- if (apiKey) headers["Authorization"] = `Bearer ${apiKey}`;
114
121
  const body = {
115
122
  model,
116
123
  messages: [{ role: "user", content: "say hi in one word" }],
@@ -121,7 +128,7 @@ async function probeCombo(baseUrl, apiKey, model, combo, signal) {
121
128
  try {
122
129
  const response = await fetch(`${ensureVersionPrefix(baseUrl)}/chat/completions`, {
123
130
  method: "POST",
124
- headers,
131
+ headers: buildAuthHeaders(apiKey),
125
132
  body: JSON.stringify(body),
126
133
  signal
127
134
  });
@@ -157,12 +164,10 @@ async function probeCombos(baseUrl, apiKey, model, combos) {
157
164
  return null;
158
165
  }
159
166
  async function probeReasoningInMessages(baseUrl, apiKey, model) {
160
- const headers = { "Content-Type": "application/json" };
161
- if (apiKey) headers["Authorization"] = `Bearer ${apiKey}`;
162
167
  try {
163
168
  const response = await fetch(`${ensureVersionPrefix(baseUrl)}/chat/completions`, {
164
169
  method: "POST",
165
- headers,
170
+ headers: buildAuthHeaders(apiKey),
166
171
  body: JSON.stringify({
167
172
  model,
168
173
  messages: [
@@ -179,6 +184,64 @@ async function probeReasoningInMessages(baseUrl, apiKey, model) {
179
184
  return void 0;
180
185
  }
181
186
  }
187
+ var REASONING_EFFORT_CANDIDATES = ["low", "medium", "high", "xhigh", "max"];
188
+ async function probeReasoningEffort(baseUrl, apiKey, model, effort, signal) {
189
+ const body = {
190
+ model,
191
+ messages: [{ role: "user", content: "say hi in one word" }],
192
+ max_tokens: 0,
193
+ ...effort ? { reasoning_effort: effort } : {}
194
+ };
195
+ try {
196
+ const response = await fetch(`${ensureVersionPrefix(baseUrl)}/chat/completions`, {
197
+ method: "POST",
198
+ headers: buildAuthHeaders(apiKey),
199
+ body: JSON.stringify(body),
200
+ signal
201
+ });
202
+ if (!response.ok) {
203
+ return { effort: effort ?? "baseline", ok: false, promptTokens: 0 };
204
+ }
205
+ const data = await response.json();
206
+ return {
207
+ effort: effort ?? "baseline",
208
+ ok: true,
209
+ promptTokens: data.usage?.prompt_tokens ?? 0
210
+ };
211
+ } catch {
212
+ return { effort: effort ?? "baseline", ok: false, promptTokens: 0 };
213
+ }
214
+ }
215
+ async function probeReasoningEfforts(baseUrl, apiKey, model) {
216
+ const timeout = AbortSignal.timeout(15e3);
217
+ const baseline = await probeReasoningEffort(baseUrl, apiKey, model, void 0, timeout);
218
+ if (!baseline.ok) {
219
+ return void 0;
220
+ }
221
+ const results = await Promise.all(
222
+ REASONING_EFFORT_CANDIDATES.map(
223
+ (effort) => probeReasoningEffort(baseUrl, apiKey, model, effort, timeout).then((r) => ({ ...r, effort }))
224
+ )
225
+ );
226
+ const accepted = results.filter((r) => r.ok);
227
+ if (accepted.length === 0) {
228
+ return void 0;
229
+ }
230
+ const impactful = accepted.filter((r) => r.promptTokens !== baseline.promptTokens);
231
+ const pool = impactful.length > 0 ? impactful : accepted;
232
+ const distinctTokens = new Set(pool.map((r) => r.promptTokens));
233
+ if (distinctTokens.size <= 1) {
234
+ return pool.map((r) => r.effort);
235
+ }
236
+ const seen = /* @__PURE__ */ new Set();
237
+ const distinct = [];
238
+ for (const r of pool) {
239
+ if (seen.has(r.promptTokens)) continue;
240
+ seen.add(r.promptTokens);
241
+ distinct.push(r.effort);
242
+ }
243
+ return distinct;
244
+ }
182
245
  var STANDARD_PARAMS = ["temperature", "top_p", "max_tokens", "top_k", "reasoning_effort"];
183
246
  var PARAM_VALUES = {
184
247
  temperature: 0.7,
@@ -206,7 +269,7 @@ var DUMMY_TOOL = {
206
269
  parameters: { type: "object", properties: {}, required: [] }
207
270
  }
208
271
  };
209
- async function probeChatCompletions(baseUrl, headers, model, samplingParams) {
272
+ async function probeChatCompletions(baseUrl, apiKey, model, samplingParams) {
210
273
  const body = {
211
274
  model,
212
275
  messages: [{ role: "user", content: "say hi in one word" }],
@@ -219,7 +282,7 @@ async function probeChatCompletions(baseUrl, headers, model, samplingParams) {
219
282
  try {
220
283
  const response = await fetch(`${ensureVersionPrefix(baseUrl)}/chat/completions`, {
221
284
  method: "POST",
222
- headers,
285
+ headers: buildAuthHeaders(apiKey),
223
286
  body: JSON.stringify(body),
224
287
  signal: AbortSignal.timeout(15e3)
225
288
  });
@@ -230,14 +293,12 @@ async function probeChatCompletions(baseUrl, headers, model, samplingParams) {
230
293
  }
231
294
  }
232
295
  async function probeRejectedParams(baseUrl, apiKey, model, backend) {
233
- const headers = { "Content-Type": "application/json" };
234
- if (apiKey) headers["Authorization"] = `Bearer ${apiKey}`;
235
296
  const candidates = [...STANDARD_PARAMS];
236
297
  if (["openai", "anthropic", "ollama"].includes(backend)) {
237
298
  const idx = candidates.indexOf("top_k");
238
299
  if (idx !== -1) candidates.splice(idx, 1);
239
300
  }
240
- const control = await probeChatCompletions(baseUrl, headers, model, []);
301
+ const control = await probeChatCompletions(baseUrl, apiKey, model, []);
241
302
  if (!control.ok) {
242
303
  logger.debug("Auto-config: rejection-probe control failed, skipping param detection", {
243
304
  model,
@@ -248,7 +309,7 @@ async function probeRejectedParams(baseUrl, apiKey, model, backend) {
248
309
  const rejected = [];
249
310
  const remaining = [...candidates];
250
311
  while (remaining.length > 0) {
251
- const probe = await probeChatCompletions(baseUrl, headers, model, remaining);
312
+ const probe = await probeChatCompletions(baseUrl, apiKey, model, remaining);
252
313
  if (probe.ok) break;
253
314
  if (probe.status === 400) {
254
315
  const rejectedParam = extractRejectedParam(probe.errorText);
@@ -278,12 +339,16 @@ async function autoConfig(input) {
278
339
  source: contextSource,
279
340
  supportsVision
280
341
  } = await detectModelInfo(baseUrl, apiKey, backend, model.id);
281
- const [thinkingConfig, nonThinkingConfig, rejectedParams] = await Promise.all([
342
+ const catalog = getCatalogEntry(model.id);
343
+ const shouldProbeEfforts = backend !== "unknown" || !catalog;
344
+ const [thinkingConfig, nonThinkingConfig, rejectedParams, reasoningEfforts] = await Promise.all([
282
345
  probeCombos(baseUrl, apiKey, model.id, THINKING_COMBOS),
283
346
  probeCombos(baseUrl, apiKey, model.id, NON_THINKING_COMBOS),
284
- probeRejectedParams(baseUrl, apiKey, model.id, backend)
347
+ probeRejectedParams(baseUrl, apiKey, model.id, backend),
348
+ shouldProbeEfforts ? probeReasoningEfforts(baseUrl, apiKey, model.id) : Promise.resolve(void 0)
285
349
  ]);
286
350
  const sendReasoningInMessages = thinkingConfig ? await probeReasoningInMessages(baseUrl, apiKey, model.id) : void 0;
351
+ const effectiveReasoningEfforts = reasoningEfforts ?? catalog?.reasoningEfforts;
287
352
  results.push({
288
353
  id: model.id,
289
354
  contextWindow,
@@ -292,7 +357,9 @@ async function autoConfig(input) {
292
357
  thinkingConfig,
293
358
  nonThinkingConfig,
294
359
  ...sendReasoningInMessages !== void 0 ? { sendReasoningInMessages } : {},
295
- ...rejectedParams.length > 0 ? { rejectedParams } : {}
360
+ ...rejectedParams.length > 0 ? { rejectedParams } : {},
361
+ ...effectiveReasoningEfforts ? { reasoningEfforts: effectiveReasoningEfforts } : {},
362
+ ...catalog?.defaultReasoningEffort ? { defaultReasoningEffort: catalog.defaultReasoningEffort } : {}
296
363
  });
297
364
  }
298
365
  return { models: results };
@@ -300,4 +367,4 @@ async function autoConfig(input) {
300
367
  export {
301
368
  autoConfig
302
369
  };
303
- //# sourceMappingURL=auto-config-YXNCBYEY.js.map
370
+ //# sourceMappingURL=auto-config-4BFGLPCP.js.map
@@ -2,52 +2,53 @@ import {
2
2
  buildRunChatTurnParams,
3
3
  finalizeTurnCompletion,
4
4
  generateSessionNameForSession
5
- } from "./chunk-YDDBPKVP.js";
5
+ } from "./chunk-W4SM4FFZ.js";
6
6
  import {
7
7
  runChatTurn
8
- } from "./chunk-VUANU5A5.js";
9
- import "./chunk-5QTERLHH.js";
10
- import "./chunk-TR4DQZIG.js";
11
- import "./chunk-LSEHJ2WI.js";
12
- import "./chunk-OXANSWVZ.js";
13
- import "./chunk-I22B6KWV.js";
8
+ } from "./chunk-V2UJP5CX.js";
9
+ import "./chunk-4L7UMEHD.js";
10
+ import "./chunk-PZUKG3OZ.js";
11
+ import "./chunk-ZIL6VKLU.js";
12
+ import "./chunk-62GUO2EG.js";
13
+ import "./chunk-GIJUWPRQ.js";
14
+ import "./chunk-EHFIUXWZ.js";
15
+ import "./chunk-RV5G7QQU.js";
14
16
  import "./chunk-I72ACQ6R.js";
15
17
  import "./chunk-JE7LW7Y6.js";
16
18
  import "./chunk-OAN4BXEW.js";
17
- import "./chunk-RMOKNQAS.js";
19
+ import "./chunk-3NMLSANH.js";
18
20
  import "./chunk-J7GAZGZT.js";
19
- import "./chunk-O63CDVNI.js";
20
- import "./chunk-YBOU4ZFD.js";
21
- import "./chunk-5A4YN6I7.js";
21
+ import "./chunk-SS6KV6DI.js";
22
+ import "./chunk-7YP4O4XE.js";
23
+ import "./chunk-INOO465O.js";
24
+ import {
25
+ getEventStore
26
+ } from "./chunk-YJD5A375.js";
27
+ import "./chunk-ZIYETXOW.js";
28
+ import "./chunk-AQBRI7TM.js";
22
29
  import {
23
30
  createChatMessageMessage,
24
31
  createPhaseChangedMessage,
25
32
  createSessionRunningMessage
26
33
  } from "./chunk-XAAEP5XM.js";
34
+ import "./chunk-66MG44TF.js";
27
35
  import "./chunk-JURM3RPZ.js";
28
- import "./chunk-62GUO2EG.js";
29
- import "./chunk-Y7FGHKBW.js";
30
- import {
31
- getEventStore
32
- } from "./chunk-J3IJJ55E.js";
33
- import "./chunk-SLW3KKPP.js";
34
- import "./chunk-EZ67GBEO.js";
35
- import "./chunk-LWXLNE6M.js";
36
36
  import "./chunk-LCLH6ZUL.js";
37
- import "./chunk-2N7KFNMY.js";
38
- import "./chunk-OSXPQSLW.js";
39
- import "./chunk-DIALH34K.js";
40
- import "./chunk-UJRWYZHM.js";
37
+ import "./chunk-H4JRR5KV.js";
41
38
  import "./chunk-K2QKX4ZJ.js";
42
39
  import "./chunk-J2GP3J3X.js";
43
- import "./chunk-J77SLE3M.js";
40
+ import "./chunk-KBESUA3W.js";
41
+ import "./chunk-OSXPQSLW.js";
42
+ import "./chunk-3B232XG4.js";
43
+ import "./chunk-SYTEO5LA.js";
44
44
  import "./chunk-GJL3QSMP.js";
45
45
  import "./chunk-AZHWLLPP.js";
46
46
  import "./chunk-HNCM3D7Y.js";
47
47
  import "./chunk-MIPQOHWS.js";
48
- import "./chunk-POTCPZJF.js";
49
- import "./chunk-FGVMRFDW.js";
50
- import "./chunk-NYQKSKDB.js";
48
+ import "./chunk-VPRB5FNR.js";
49
+ import "./chunk-N2Q3KYWM.js";
50
+ import "./chunk-OYBUJIC3.js";
51
+ import "./chunk-TPDBUOPN.js";
51
52
  import "./chunk-K44MW7JJ.js";
52
53
  import "./chunk-KSDWQ6IZ.js";
53
54
  import "./chunk-KSXCOHHW.js";
@@ -173,4 +174,4 @@ export {
173
174
  startChatSession,
174
175
  stopSessionExecution
175
176
  };
176
- //# sourceMappingURL=chat-handler-A5ORR5BB.js.map
177
+ //# sourceMappingURL=chat-handler-UWZYFGRY.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getDatabase
3
- } from "./chunk-NYQKSKDB.js";
3
+ } from "./chunk-OYBUJIC3.js";
4
4
 
5
5
  // src/server/db/projects.ts
6
6
  function createProject(name, workdir) {
@@ -144,4 +144,4 @@ export {
144
144
  toggleStar,
145
145
  getProjectDefaultAgent
146
146
  };
147
- //# sourceMappingURL=chunk-DIALH34K.js.map
147
+ //# sourceMappingURL=chunk-3B232XG4.js.map
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  getProjectByWorkdir,
6
6
  updateProject
7
- } from "./chunk-DIALH34K.js";
7
+ } from "./chunk-3B232XG4.js";
8
8
  import {
9
9
  logger
10
10
  } from "./chunk-K44MW7JJ.js";
@@ -333,4 +333,4 @@ export {
333
333
  deleteWorkspace,
334
334
  isGitRepository
335
335
  };
336
- //# sourceMappingURL=chunk-RMOKNQAS.js.map
336
+ //# sourceMappingURL=chunk-3NMLSANH.js.map
@@ -4,10 +4,29 @@ import {
4
4
  getEnabledSkillMetadata,
5
5
  isSkillEnabled,
6
6
  loadAllSkills
7
- } from "./chunk-LSEHJ2WI.js";
7
+ } from "./chunk-ZIL6VKLU.js";
8
+ import {
9
+ TurnMetrics,
10
+ clearLLMFailure,
11
+ consumeStreamGenerator,
12
+ createChatDoneEvent,
13
+ createMessageDoneEvent,
14
+ createMessageStartEvent,
15
+ createToolCallEvent,
16
+ createToolResultEvent,
17
+ evaluateLLMRetry,
18
+ recordLLMFailure,
19
+ sleepThroughRetryBackoff,
20
+ streamLLMPure
21
+ } from "./chunk-62GUO2EG.js";
22
+ import {
23
+ COMPACTION_PROMPT,
24
+ buildBasePrompt,
25
+ computeEffectiveTools
26
+ } from "./chunk-GIJUWPRQ.js";
8
27
  import {
9
28
  startInspectProxy
10
- } from "./chunk-OXANSWVZ.js";
29
+ } from "./chunk-EHFIUXWZ.js";
11
30
  import {
12
31
  checkAborted,
13
32
  createProcess,
@@ -21,7 +40,7 @@ import {
21
40
  spawnShellProcess,
22
41
  startProcessCommand,
23
42
  stopProcess
24
- } from "./chunk-I22B6KWV.js";
43
+ } from "./chunk-RV5G7QQU.js";
25
44
  import {
26
45
  getMaxPerSession,
27
46
  getSessionProcessCount,
@@ -37,59 +56,27 @@ import {
37
56
  getGitBranch,
38
57
  isGitRepository,
39
58
  listWorkspaces
40
- } from "./chunk-RMOKNQAS.js";
59
+ } from "./chunk-3NMLSANH.js";
41
60
  import {
42
61
  getGateConfig,
43
62
  isTaskConflictError,
44
63
  isTaskGateError
45
- } from "./chunk-O63CDVNI.js";
64
+ } from "./chunk-SS6KV6DI.js";
46
65
  import {
47
66
  getSessionDisabledServers
48
- } from "./chunk-YBOU4ZFD.js";
67
+ } from "./chunk-7YP4O4XE.js";
49
68
  import {
50
69
  PathAccessDeniedError,
51
70
  extractAbsolutePathsFromCommand,
52
71
  extractSensitivePathsFromCommand,
53
72
  registerPathConfirmation,
54
73
  requestPathAccess
55
- } from "./chunk-5A4YN6I7.js";
56
- import {
57
- createChatDoneMessage,
58
- createChatLLMRetryFailedMessage,
59
- createChatLLMRetryMessage,
60
- createChatMessageMessage,
61
- createChatMessageUpdatedMessage,
62
- createChatPathConfirmationMessage,
63
- createQueueStateMessage
64
- } from "./chunk-XAAEP5XM.js";
65
- import {
66
- AskUserInterrupt,
67
- askUserTool
68
- } from "./chunk-JURM3RPZ.js";
69
- import {
70
- TurnMetrics,
71
- clearLLMFailure,
72
- consumeStreamGenerator,
73
- createChatDoneEvent,
74
- createMessageDoneEvent,
75
- createMessageStartEvent,
76
- createToolCallEvent,
77
- createToolResultEvent,
78
- evaluateLLMRetry,
79
- recordLLMFailure,
80
- sleepThroughRetryBackoff,
81
- streamLLMPure
82
- } from "./chunk-62GUO2EG.js";
83
- import {
84
- COMPACTION_PROMPT,
85
- buildBasePrompt,
86
- computeEffectiveTools
87
- } from "./chunk-Y7FGHKBW.js";
74
+ } from "./chunk-INOO465O.js";
88
75
  import {
89
76
  getCurrentContextWindowId,
90
77
  getCurrentWindowMessageOptions,
91
78
  getEventStore
92
- } from "./chunk-J3IJJ55E.js";
79
+ } from "./chunk-YJD5A375.js";
93
80
  import {
94
81
  buildContextMessagesFromEventHistory,
95
82
  foldContextState,
@@ -99,13 +86,26 @@ import {
99
86
  handleToolResult,
100
87
  reorderToolMessages,
101
88
  stripOrphanedToolCalls
102
- } from "./chunk-LWXLNE6M.js";
89
+ } from "./chunk-ZIYETXOW.js";
90
+ import {
91
+ createChatDoneMessage,
92
+ createChatLLMRetryFailedMessage,
93
+ createChatLLMRetryMessage,
94
+ createChatMessageMessage,
95
+ createChatMessageUpdatedMessage,
96
+ createChatPathConfirmationMessage,
97
+ createQueueStateMessage
98
+ } from "./chunk-XAAEP5XM.js";
99
+ import {
100
+ AskUserInterrupt,
101
+ askUserTool
102
+ } from "./chunk-JURM3RPZ.js";
103
103
  import {
104
104
  findAgentById,
105
105
  getRuntimeConfig,
106
106
  getSubAgents,
107
107
  loadAllAgentsDefault
108
- } from "./chunk-2N7KFNMY.js";
108
+ } from "./chunk-KBESUA3W.js";
109
109
  import {
110
110
  modelSupportsVision
111
111
  } from "./chunk-GJL3QSMP.js";
@@ -124,7 +124,7 @@ import {
124
124
  SETTINGS_KEYS,
125
125
  getSetting,
126
126
  setSetting
127
- } from "./chunk-FGVMRFDW.js";
127
+ } from "./chunk-N2Q3KYWM.js";
128
128
  import {
129
129
  logger
130
130
  } from "./chunk-K44MW7JJ.js";
@@ -148,7 +148,7 @@ async function requestUserConfirmation(context, toolLabel, desc) {
148
148
  if (context.dangerLevel === "dangerous") return Promise.resolve(true);
149
149
  if (toolLabel === "workspace" || toolLabel === "command") {
150
150
  try {
151
- const { getSetting: getSetting2, SETTINGS_KEYS: SETTINGS_KEYS2 } = await import("./settings-SYYDPV43.js");
151
+ const { getSetting: getSetting2, SETTINGS_KEYS: SETTINGS_KEYS2 } = await import("./settings-VOWWO4VG.js");
152
152
  if (getSetting2(SETTINGS_KEYS2.CONFIRM_ON_WORKSPACE_ACTIONS) !== "true") {
153
153
  return Promise.resolve(true);
154
154
  }
@@ -1531,7 +1531,8 @@ import { z } from "zod";
1531
1531
  var AGENT_MODEL_OVERRIDES_KEY = SETTINGS_KEYS.AGENT_MODEL_OVERRIDES;
1532
1532
  var overrideSchema = z.object({
1533
1533
  providerId: z.string().min(1),
1534
- model: z.string().min(1)
1534
+ model: z.string().min(1),
1535
+ reasoningEffort: z.string().min(1).optional()
1535
1536
  });
1536
1537
  function parseAgentModelOverrides(raw) {
1537
1538
  if (!raw) return {};
@@ -1566,12 +1567,13 @@ function setAgentModelOverride(agentId, override) {
1566
1567
  }
1567
1568
  setSetting(AGENT_MODEL_OVERRIDES_KEY, JSON.stringify(overrides));
1568
1569
  }
1569
- function resolveLLMClientForAgent(agentId, fallbackClient, providerManager) {
1570
+ function resolveLLMClientForAgent(agentId, fallbackClient, providerManager, pinnedEffort) {
1570
1571
  const override = getAgentModelOverride(agentId);
1571
1572
  if (!override) {
1572
1573
  return { client: fallbackClient, usedOverride: false };
1573
1574
  }
1574
- const client = providerManager.createClient(override.providerId, override.model);
1575
+ const effectiveEffort = pinnedEffort ?? override.reasoningEffort;
1576
+ const client = providerManager.createClient(override.providerId, override.model, effectiveEffort);
1575
1577
  if (!client) {
1576
1578
  return {
1577
1579
  client: fallbackClient,
@@ -1580,7 +1582,11 @@ function resolveLLMClientForAgent(agentId, fallbackClient, providerManager) {
1580
1582
  warning: `Agent '${agentId}' is configured to use model '${override.model}' from provider '${override.providerId}', but it is no longer available. Falling back to the session model.`
1581
1583
  };
1582
1584
  }
1583
- return { client, usedOverride: true, override };
1585
+ return {
1586
+ client,
1587
+ usedOverride: true,
1588
+ override: effectiveEffort ? { ...override, reasoningEffort: effectiveEffort } : override
1589
+ };
1584
1590
  }
1585
1591
 
1586
1592
  // src/server/chat/tool-streaming.ts
@@ -2095,7 +2101,7 @@ ${CONTINUE_PROMPT}` : CONTINUE_PROMPT;
2095
2101
  );
2096
2102
  if (!compacting) {
2097
2103
  const contextState = sessionManager.getContextState(sessionId);
2098
- const { shouldCompact, appendCompactionPrompt } = await import("./compactor-MKD3CAFM.js");
2104
+ const { shouldCompact, appendCompactionPrompt } = await import("./compactor-VTATJTPN.js");
2099
2105
  if (shouldCompact(
2100
2106
  contextState.currentTokens,
2101
2107
  contextState.maxTokens,
@@ -2880,7 +2886,8 @@ async function executeSubAgent(options) {
2880
2886
  let hasOverride = false;
2881
2887
  let overrideModelSettings;
2882
2888
  if (providerManager) {
2883
- const resolved = resolveLLMClientForAgent(subAgentType, parentLlmClient, providerManager);
2889
+ const pinnedEffort = session.providerPinnedEffort ?? void 0;
2890
+ const resolved = resolveLLMClientForAgent(subAgentType, parentLlmClient, providerManager, pinnedEffort);
2884
2891
  if (resolved.usedOverride && resolved.override) {
2885
2892
  hasOverride = true;
2886
2893
  llmClient = resolved.client;
@@ -2889,7 +2896,8 @@ async function executeSubAgent(options) {
2889
2896
  providerId: resolved.override.providerId,
2890
2897
  providerName: provider?.name ?? resolved.override.providerId,
2891
2898
  backend: provider?.backend ?? resolved.client.getBackend(),
2892
- model: resolved.override.model
2899
+ model: resolved.override.model,
2900
+ ...resolved.override.reasoningEffort ? { reasoningEffort: resolved.override.reasoningEffort } : {}
2893
2901
  };
2894
2902
  overrideModelSettings = providerManager.getModelSettings(resolved.override.providerId, resolved.override.model);
2895
2903
  logger.info("Sub-agent using model override", { subAgentType, ...resolved.override });
@@ -2922,7 +2930,11 @@ async function executeSubAgent(options) {
2922
2930
  } else {
2923
2931
  const effective = sessionManager.resolveEffectiveProviderModel(sessionId, subAgentType);
2924
2932
  if (effective.providerId && effective.model) {
2925
- const effectiveClient = providerManager.createClient(effective.providerId, effective.model);
2933
+ const effectiveClient = providerManager.createClient(
2934
+ effective.providerId,
2935
+ effective.model,
2936
+ effective.reasoningEffort
2937
+ );
2926
2938
  if (effectiveClient) {
2927
2939
  llmClient = effectiveClient;
2928
2940
  const provider = providerManager.getProviders().find((p) => p.id === effective.providerId);
@@ -2930,7 +2942,8 @@ async function executeSubAgent(options) {
2930
2942
  providerId: effective.providerId,
2931
2943
  providerName: provider?.name ?? effective.providerId,
2932
2944
  backend: provider?.backend ?? effectiveClient.getBackend(),
2933
- model: effective.model
2945
+ model: effective.model,
2946
+ ...effective.reasoningEffort ? { reasoningEffort: effective.reasoningEffort } : {}
2934
2947
  };
2935
2948
  }
2936
2949
  }
@@ -3103,7 +3116,7 @@ var callSubAgentTool = {
3103
3116
  };
3104
3117
  }
3105
3118
  try {
3106
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-YGJXEEBI.js");
3119
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-YPVZ5QM2.js");
3107
3120
  const toolRegistry = getToolRegistryForAgent2(agentDef);
3108
3121
  const turnMetrics = new TurnMetrics();
3109
3122
  const result = await executeSubAgent({
@@ -4125,7 +4138,7 @@ var mcpConfigTool = createTool(
4125
4138
  mcpNotifyChanged?.(sessionId);
4126
4139
  }
4127
4140
  async function rebuildTools() {
4128
- const { setMcpTools: setMcpTools2 } = await import("./tools-YGJXEEBI.js");
4141
+ const { setMcpTools: setMcpTools2 } = await import("./tools-YPVZ5QM2.js");
4129
4142
  const mcpTools = createMcpTools(mcpManagerForTools);
4130
4143
  setMcpTools2(mcpTools);
4131
4144
  }
@@ -4558,7 +4571,7 @@ var projectTasksTool = createTool(
4558
4571
  type: "function",
4559
4572
  function: {
4560
4573
  name: "project_tasks",
4561
- description: "Kanban task board for this project. Core loop: list \u2192 move \u2192 set_gate_value.\n\nRules:\n- Moving to in_progress binds the task to YOUR current session.\n- Moving to done is blocked by unmet gates: the error names the missing fields \u2014 fill them via set_gate_value (that's part of the work), then retry the move.\n- Stale writes fail with CONFLICT \u2014 re-list and retry.\n\nActions:\n- list: tasks (status, gate values, queue position, bound session, audit trail); defaults to open tasks, filter via status (todo | in_progress | done | all)\n- create: add a task to To Do (prompt required)\n- edit: update prompt/attachments/agent/model (taskId + fields)\n- move: change column (to: todo | in_progress | done; optional reason)\n- set_gate_value: fill a gate field (taskId, gateId, value)\n- delete: remove a task (taskId)",
4574
+ description: "Kanban task board for this project. Core loop: list \u2192 move \u2192 set_gate_value.\n\nRules:\n- Moving to in_progress binds the task to YOUR current session.\n- Do not move tasks or fill gate values without explicit user approval or a system instruction \u2014 complete the work, then let the user review before the task advances.\n- Moving to done is blocked by unmet gates: the error names the missing fields \u2014 fill them only with user approval, then retry the move.\n- Stale writes fail with CONFLICT \u2014 re-list and retry.\n\nActions:\n- list: tasks (status, gate values, queue position, bound session, audit trail); defaults to open tasks, filter via status (todo | in_progress | done | all)\n- create: add a task to To Do (prompt required)\n- edit: update prompt/attachments/agent/model (taskId + fields)\n- move: change column (to: todo | in_progress | done; optional reason)\n- set_gate_value: fill a gate field (taskId, gateId, value)\n- delete: remove a task (taskId)",
4562
4575
  parameters: {
4563
4576
  type: "object",
4564
4577
  properties: {
@@ -5013,4 +5026,4 @@ export {
5013
5026
  getToolRegistryForAgent,
5014
5027
  createToolRegistry
5015
5028
  };
5016
- //# sourceMappingURL=chunk-TR4DQZIG.js.map
5029
+ //# sourceMappingURL=chunk-4L7UMEHD.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  SETTINGS_KEYS,
3
3
  getSetting
4
- } from "./chunk-FGVMRFDW.js";
4
+ } from "./chunk-N2Q3KYWM.js";
5
5
 
6
6
  // src/server/utils/platform.ts
7
7
  import os from "os";
@@ -63,4 +63,4 @@ export {
63
63
  isWindowsPath,
64
64
  isAbsolutePath
65
65
  };
66
- //# sourceMappingURL=chunk-EZ67GBEO.js.map
66
+ //# sourceMappingURL=chunk-66MG44TF.js.map