openfox 2.0.135 → 2.0.137
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.
- package/CHANGELOG.md +33 -0
- package/dist/CHANGELOG.md +33 -0
- package/dist/agent-defaults/builder.agent.md +1 -0
- package/dist/agent-defaults/planner.agent.md +1 -0
- package/dist/{ask-UBIRH3SO.js → ask-46J5WYRL.js} +2 -2
- package/dist/{auto-config-5VSNLVNI.js → auto-config-2A7Y2WOK.js} +25 -6
- package/dist/{backend-NDBY3DAQ.js → backend-24FTDSHF.js} +4 -2
- package/dist/{chat-handler-WGDFMOOD.js → chat-handler-ZCPFNHTE.js} +30 -26
- package/dist/{chunk-QZOV4OVN.js → chunk-2OO46UAW.js} +5 -5
- package/dist/{chunk-7QMWYNVF.js → chunk-4LLGI372.js} +2 -2
- package/dist/chunk-4SBVW4UH.js +24 -0
- package/dist/{chunk-ZMK4VX7V.js → chunk-64YDOCQR.js} +53 -21
- package/dist/{chunk-VHLD6PCZ.js → chunk-6TQNTFJW.js} +17 -11
- package/dist/{chunk-UV6IH6HK.js → chunk-AKWJMMEJ.js} +15 -1
- package/dist/{chunk-ORCQ3EXQ.js → chunk-BHVR2YS5.js} +2 -2
- package/dist/{chunk-S67WIWUG.js → chunk-DG2YSWMC.js} +40 -6
- package/dist/chunk-FG4G4EWB.js +7 -0
- package/dist/{chunk-NFEZATSN.js → chunk-FIQPKLDY.js} +8 -8
- package/dist/chunk-FSSUPWYO.js +336 -0
- package/dist/{chunk-5UQ4CKOA.js → chunk-G5GUQKLS.js} +27 -6
- package/dist/{chunk-7ET46SNE.js → chunk-HEYU7FAY.js} +3 -3
- package/dist/{chunk-4R5GV7RW.js → chunk-JIS6C6PA.js} +21 -21
- package/dist/{chunk-5H5NRWHA.js → chunk-LQPAM55V.js} +12 -10
- package/dist/{chunk-MEEUXRFL.js → chunk-MMGHIPBU.js} +72 -54
- package/dist/{chunk-O3RCSKUH.js → chunk-MOYWDP73.js} +2 -2
- package/dist/{chunk-J3NMNYGM.js → chunk-N5JKVNLH.js} +2 -2
- package/dist/{chunk-DWA4IE65.js → chunk-Q33DL67W.js} +2 -2
- package/dist/{chunk-OZWHRBDY.js → chunk-QBWJCO5K.js} +12 -29
- package/dist/{chunk-EUOWCVU6.js → chunk-QMU3ZY2C.js} +37 -341
- package/dist/{chunk-CTWZPN7G.js → chunk-QUAEH3MP.js} +29 -1
- package/dist/{chunk-BIZFY3QP.js → chunk-RS7I4W5A.js} +212 -148
- package/dist/{chunk-5UMXFLET.js → chunk-SAGDTQXD.js} +3 -3
- package/dist/{chunk-UKIUQAQZ.js → chunk-U7XCK7WL.js} +4 -4
- package/dist/{chunk-JURM3RPZ.js → chunk-V5AC2TV7.js} +8 -13
- package/dist/{chunk-JE7LW7Y6.js → chunk-VIJVLLPT.js} +12 -3
- package/dist/{chunk-2AI7VYPN.js → chunk-VKMPR25F.js} +9 -3
- package/dist/{chunk-IAT2LBIX.js → chunk-WOIQO7ZC.js} +4 -4
- package/dist/chunk-WQUCCHOY.js +1155 -0
- package/dist/{chunk-F2MOHHXB.js → chunk-X4PVR6AW.js} +2 -2
- package/dist/chunk-XG3AUMPI.js +72 -0
- package/dist/{chunk-I5ODJKYM.js → chunk-XWWRZSK7.js} +162 -6
- package/dist/{chunk-GP3CLMPQ.js → chunk-ZJ2IHOVN.js} +23 -23
- package/dist/{chunk-ESZQTFQP.js → chunk-ZQENKB7X.js} +86 -1010
- package/dist/cli/dev.js +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/client-MVI3J7SN.js +18 -0
- package/dist/{client-pure-FLKP6PTI.js → client-pure-YZ4IGCU4.js} +4 -2
- package/dist/{compactor-454UEIEX.js → compactor-KDTY4ERE.js} +14 -12
- package/dist/describe-image-EFHMWGWI.js +30 -0
- package/dist/{dynamic-context-LKC6JYLQ.js → dynamic-context-HL4RGNHK.js} +12 -10
- package/dist/{events-335XAKFK.js → events-ADE2KEHI.js} +7 -9
- package/dist/{export-import-3WMRLO4A.js → export-import-6OUEANYH.js} +7 -7
- package/dist/{folding-H7JTX6KI.js → folding-CM63AVSB.js} +6 -6
- package/dist/{http-client-A445WYZU.js → http-client-C6UYWVWZ.js} +3 -3
- package/dist/launch-L5NSPAAX.js +58 -0
- package/dist/{manager-ZACEUL5P.js → manager-FSPRJCYT.js} +4 -4
- package/dist/{model-catalog-2PCKTYGW.js → model-catalog-Y5MA5OZP.js} +2 -2
- package/dist/{orchestrator-JGJWTRO5.js → orchestrator-FMWKMD54.js} +29 -25
- package/dist/package.json +1 -1
- package/dist/{path-security-4LROI7F4.js → path-security-DND2R3RP.js} +8 -8
- package/dist/{platform-XPMZKAUB.js → platform-KPKYBU54.js} +3 -3
- package/dist/{processor-MSQP63ML.js → processor-SB5X44PX.js} +29 -25
- package/dist/{provider-JWUNG2TD.js → provider-SOC6Z25R.js} +10 -8
- package/dist/{provider-manager-2KKZ37XJ.js → provider-manager-Y53SVVQ3.js} +10 -8
- package/dist/{registry-BEIR7Y5G.js → registry-FMDMGIUB.js} +3 -3
- package/dist/{serve-CW5C3CBZ.js → serve-VONTGJCK.js} +41 -32
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.js +34 -30
- package/dist/server-MI2LZK3W.js +61 -0
- package/dist/{service-XIUNS5XV.js → service-NKLQH647.js} +12 -9
- package/dist/{session-overrides-LYW5PJ3R.js → session-overrides-ANQBKV74.js} +11 -7
- package/dist/{sessions-AOK3AGHY.js → sessions-GLYACE5R.js} +4 -4
- package/dist/{settings-ZJPM6PQV.js → settings-WH6BVQCP.js} +4 -2
- package/dist/{tasks-3JJWJJ3X.js → tasks-GPM3JAE6.js} +14 -10
- package/dist/tool-adapter-ZY4FC4C4.js +9 -0
- package/dist/{tools-E63MOJBO.js → tools-WLJJ3ILO.js} +27 -23
- package/dist/{update-XVXNSSDK.js → update-6ZSQJQJB.js} +2 -2
- package/dist/web/assets/{index-wTFCxQAw.js → index-CfFwerN2.js} +84 -84
- package/dist/web/assets/{index-Bg_Z8i3F.css → index-ChJjYovg.css} +1 -1
- package/dist/web/index.html +2 -2
- package/dist/web/sw.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-WY3PWHWY.js +0 -7
- package/dist/client-VVYOWXRR.js +0 -16
- package/dist/launch-GJ7EHQRI.js +0 -54
- package/dist/server-ZHEB7XS2.js +0 -57
- package/dist/tool-adapter-FJAFLDZA.js +0 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2.0.137 - 2026-09-03
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
- **Image descriptions survive reloads** — vision details no longer drop from tool results after a page reload
|
|
8
|
+
|
|
9
|
+
## 2.0.136 - 2026-09-02
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
- **Model favorites** — heart-toggle any model and pin a Favorites section at the top of the model selector
|
|
14
|
+
- **Model selector display settings** — full-height sizing, and start with providers or favorites collapsed
|
|
15
|
+
- **Describe-image tool for non-vision models** — delegates image questions to a vision-capable fallback
|
|
16
|
+
- **Sync button in the provider editor** — refetch the model catalog without losing current selections
|
|
17
|
+
|
|
18
|
+
### Enhancements
|
|
19
|
+
|
|
20
|
+
- **Hover tooltips for truncated tool-call labels** — reveal the full path or command
|
|
21
|
+
- **Compact provider auth badge** — the Connected/Connect button is smaller and better aligned
|
|
22
|
+
|
|
23
|
+
### Bug Fixes
|
|
24
|
+
|
|
25
|
+
- **Localized modal footer buttons** — Cancel/Save now translate to French
|
|
26
|
+
- **Tool schemas work with strict providers** — Vertex AI, Antigravity, and Gemini no longer reject tool calls
|
|
27
|
+
- **New sessions inherit project MCP overrides** — forked sessions keep the parent's MCP state too
|
|
28
|
+
- **No more duplicate models after a sync** — merged model families and selections survive a catalog refresh
|
|
29
|
+
- **Deleting a provider cleans up its sessions** — no dead provider pins, wrong context windows, or auto-compaction
|
|
30
|
+
- **Ollama vision images work again** — content arrays are converted to Ollama's native format
|
|
31
|
+
- **grep patterns no longer trigger path confirmations** — only real file operands are checked
|
|
32
|
+
- **Quoted paths can't sneak past path security** — nested quotes are now detected
|
|
33
|
+
- **DeepSeek reasoning preserved** — chain-of-thought is echoed under reasoning_content instead of being dropped
|
|
34
|
+
- **Per-model reasoning efforts accepted** — validation now honors each model's modes and effort lists
|
|
35
|
+
|
|
3
36
|
## 2.0.135 - 2026-09-01
|
|
4
37
|
|
|
5
38
|
### Features
|
package/dist/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2.0.137 - 2026-09-03
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
- **Image descriptions survive reloads** — vision details no longer drop from tool results after a page reload
|
|
8
|
+
|
|
9
|
+
## 2.0.136 - 2026-09-02
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
- **Model favorites** — heart-toggle any model and pin a Favorites section at the top of the model selector
|
|
14
|
+
- **Model selector display settings** — full-height sizing, and start with providers or favorites collapsed
|
|
15
|
+
- **Describe-image tool for non-vision models** — delegates image questions to a vision-capable fallback
|
|
16
|
+
- **Sync button in the provider editor** — refetch the model catalog without losing current selections
|
|
17
|
+
|
|
18
|
+
### Enhancements
|
|
19
|
+
|
|
20
|
+
- **Hover tooltips for truncated tool-call labels** — reveal the full path or command
|
|
21
|
+
- **Compact provider auth badge** — the Connected/Connect button is smaller and better aligned
|
|
22
|
+
|
|
23
|
+
### Bug Fixes
|
|
24
|
+
|
|
25
|
+
- **Localized modal footer buttons** — Cancel/Save now translate to French
|
|
26
|
+
- **Tool schemas work with strict providers** — Vertex AI, Antigravity, and Gemini no longer reject tool calls
|
|
27
|
+
- **New sessions inherit project MCP overrides** — forked sessions keep the parent's MCP state too
|
|
28
|
+
- **No more duplicate models after a sync** — merged model families and selections survive a catalog refresh
|
|
29
|
+
- **Deleting a provider cleans up its sessions** — no dead provider pins, wrong context windows, or auto-compaction
|
|
30
|
+
- **Ollama vision images work again** — content arrays are converted to Ollama's native format
|
|
31
|
+
- **grep patterns no longer trigger path confirmations** — only real file operands are checked
|
|
32
|
+
- **Quoted paths can't sneak past path security** — nested quotes are now detected
|
|
33
|
+
- **DeepSeek reasoning preserved** — chain-of-thought is echoed under reasoning_content instead of being dropped
|
|
34
|
+
- **Per-model reasoning efforts accepted** — validation now honors each model's modes and effort lists
|
|
35
|
+
|
|
3
36
|
## 2.0.135 - 2026-09-01
|
|
4
37
|
|
|
5
38
|
### Features
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
getPendingQuestionsForSession,
|
|
8
8
|
hasPendingQuestion,
|
|
9
9
|
provideAnswer
|
|
10
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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
|
|
143
|
-
|
|
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 [
|
|
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-
|
|
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-
|
|
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-
|
|
14
|
+
//# sourceMappingURL=backend-24FTDSHF.js.map
|
|
@@ -2,32 +2,34 @@ import {
|
|
|
2
2
|
buildRunChatTurnParams,
|
|
3
3
|
finalizeTurnCompletion,
|
|
4
4
|
generateSessionNameForSession
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-FIQPKLDY.js";
|
|
6
6
|
import {
|
|
7
7
|
runChatTurn
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-JIS6C6PA.js";
|
|
9
|
+
import "./chunk-6TQNTFJW.js";
|
|
10
|
+
import "./chunk-ZQENKB7X.js";
|
|
11
|
+
import "./chunk-Q33DL67W.js";
|
|
10
12
|
import "./chunk-XE6UC5Z3.js";
|
|
11
13
|
import "./chunk-J7GAZGZT.js";
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-QBWJCO5K.js";
|
|
15
|
+
import "./chunk-DG2YSWMC.js";
|
|
16
|
+
import "./chunk-WQUCCHOY.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-
|
|
21
|
+
import "./chunk-SAGDTQXD.js";
|
|
17
22
|
import "./chunk-I72ACQ6R.js";
|
|
18
|
-
import "./chunk-
|
|
23
|
+
import "./chunk-VIJVLLPT.js";
|
|
19
24
|
import "./chunk-OAN4BXEW.js";
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-7QMWYNVF.js";
|
|
23
|
-
import "./chunk-JURM3RPZ.js";
|
|
24
|
-
import "./chunk-I5ODJKYM.js";
|
|
25
|
+
import "./chunk-V5AC2TV7.js";
|
|
26
|
+
import "./chunk-XWWRZSK7.js";
|
|
25
27
|
import {
|
|
26
28
|
getEventStore
|
|
27
|
-
} from "./chunk-
|
|
28
|
-
import "./chunk-
|
|
29
|
-
import "./chunk-
|
|
30
|
-
import "./chunk-
|
|
29
|
+
} from "./chunk-2OO46UAW.js";
|
|
30
|
+
import "./chunk-MMGHIPBU.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-
|
|
39
|
-
import "./chunk-
|
|
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-
|
|
45
|
+
import "./chunk-64YDOCQR.js";
|
|
44
46
|
import "./chunk-TS5WKTFB.js";
|
|
45
|
-
import "./chunk-
|
|
47
|
+
import "./chunk-AKWJMMEJ.js";
|
|
46
48
|
import "./chunk-HNCM3D7Y.js";
|
|
47
|
-
import "./chunk-
|
|
48
|
-
import "./chunk-
|
|
49
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
182
|
+
//# sourceMappingURL=chat-handler-ZCPFNHTE.js.map
|
|
@@ -6,16 +6,16 @@ import {
|
|
|
6
6
|
foldSessionState,
|
|
7
7
|
spreadOptionalMessageFields,
|
|
8
8
|
trimSnapshotStreamingOutput
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-MMGHIPBU.js";
|
|
10
10
|
import {
|
|
11
11
|
updateSessionMessageCount
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-X4PVR6AW.js";
|
|
13
13
|
import {
|
|
14
14
|
getRuntimeConfig
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-BHVR2YS5.js";
|
|
16
16
|
import {
|
|
17
17
|
SETTINGS_KEYS
|
|
18
|
-
} from "./chunk-
|
|
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-
|
|
1492
|
+
//# sourceMappingURL=chunk-2OO46UAW.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getPlatformShell
|
|
3
|
-
} from "./chunk-
|
|
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-
|
|
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
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-TS5WKTFB.js";
|
|
4
4
|
import {
|
|
5
5
|
getBackendCapabilities
|
|
6
|
-
} from "./chunk-
|
|
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-
|
|
17
|
+
} from "./chunk-QMU3ZY2C.js";
|
|
18
18
|
import {
|
|
19
19
|
ChatHttpClient,
|
|
20
20
|
DONE,
|
|
21
21
|
LLMError,
|
|
22
22
|
OpenAIHttpClient
|
|
23
|
-
} from "./chunk-
|
|
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
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
if (
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
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-
|
|
803
|
+
//# sourceMappingURL=chunk-64YDOCQR.js.map
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getAllInstructions,
|
|
3
3
|
getEnabledSkillMetadata
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-Q33DL67W.js";
|
|
5
5
|
import {
|
|
6
6
|
buildTopLevelSystemPrompt
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-4LLGI372.js";
|
|
8
8
|
import {
|
|
9
9
|
getCurrentContextWindowId,
|
|
10
10
|
getEventStore
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-2OO46UAW.js";
|
|
12
12
|
import {
|
|
13
13
|
findAgentById,
|
|
14
14
|
getRuntimeConfig,
|
|
15
15
|
getSubAgents,
|
|
16
16
|
loadAllAgentsDefault,
|
|
17
17
|
resolveDefaultAgentId
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-BHVR2YS5.js";
|
|
19
19
|
import {
|
|
20
20
|
logger
|
|
21
21
|
} from "./chunk-K44MW7JJ.js";
|
|
@@ -223,8 +223,7 @@ async function injectDriftReminders(sessionManager, sessionId, agentDef, options
|
|
|
223
223
|
if (!cached) {
|
|
224
224
|
return { injectedToolReminder: false, injectedPromptReminder: false };
|
|
225
225
|
}
|
|
226
|
-
const
|
|
227
|
-
const liveTools = getToolRegistryForAgent(agentDef, sessionId).definitions;
|
|
226
|
+
const liveTools = await getEffectiveToolDefinitions(agentDef, sessionId, options.modelName);
|
|
228
227
|
let injectedToolReminder = false;
|
|
229
228
|
let injectedPromptReminder = false;
|
|
230
229
|
const liveToolFingerprint = getToolSetFingerprint(liveTools);
|
|
@@ -327,10 +326,17 @@ function resolveAgentDef(sessionManager, sessionId) {
|
|
|
327
326
|
return findAgentById(session.mode, allAgents) ?? findAgentById(resolveDefaultAgentId(), allAgents);
|
|
328
327
|
});
|
|
329
328
|
}
|
|
329
|
+
async function getEffectiveToolDefinitions(agentDef, sessionId, modelName) {
|
|
330
|
+
const { getToolRegistryForAgent } = await import("./tools-WLJJ3ILO.js");
|
|
331
|
+
const { isDescribeImageEligible } = await import("./describe-image-EFHMWGWI.js");
|
|
332
|
+
const all = getToolRegistryForAgent(agentDef, sessionId).definitions;
|
|
333
|
+
const eligible = await isDescribeImageEligible(modelName);
|
|
334
|
+
if (eligible) return all;
|
|
335
|
+
return all.filter((d) => d.function.name !== "describe_image");
|
|
336
|
+
}
|
|
330
337
|
async function buildCachedPrompt(sessionManager, sessionId, agentDef, modelName) {
|
|
331
338
|
const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
|
|
332
|
-
const
|
|
333
|
-
const tools = getToolRegistryForAgent(agentDef, sessionId).definitions;
|
|
339
|
+
const tools = await getEffectiveToolDefinitions(agentDef, sessionId, modelName);
|
|
334
340
|
const toolFingerprint = getToolFingerprint(tools);
|
|
335
341
|
const allAgents = await loadAllAgentsDefault(sessionManager.getProjectWorkdir(sessionId));
|
|
336
342
|
const subAgentDefs = getSubAgents(allAgents);
|
|
@@ -349,8 +355,7 @@ async function buildCachedPrompt(sessionManager, sessionId, agentDef, modelName)
|
|
|
349
355
|
async function computeSessionHash(sessionManager, sessionId, modelName) {
|
|
350
356
|
const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
|
|
351
357
|
const agentDef = await resolveAgentDef(sessionManager, sessionId);
|
|
352
|
-
const
|
|
353
|
-
const tools = getToolRegistryForAgent(agentDef, sessionId).definitions;
|
|
358
|
+
const tools = await getEffectiveToolDefinitions(agentDef, sessionId, modelName);
|
|
354
359
|
const toolFingerprint = getToolFingerprint(tools);
|
|
355
360
|
return computeDynamicContextHash(instructionContent, skills, toolFingerprint, modelName);
|
|
356
361
|
}
|
|
@@ -386,8 +391,9 @@ export {
|
|
|
386
391
|
checkToolChangesAndInject,
|
|
387
392
|
injectContextDriftReminders,
|
|
388
393
|
injectContextDriftRemindersForSessions,
|
|
394
|
+
getEffectiveToolDefinitions,
|
|
389
395
|
buildCachedPrompt,
|
|
390
396
|
computeSessionHash,
|
|
391
397
|
applyDynamicContext
|
|
392
398
|
};
|
|
393
|
-
//# sourceMappingURL=chunk-
|
|
399
|
+
//# sourceMappingURL=chunk-6TQNTFJW.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-
|
|
124
|
+
//# sourceMappingURL=chunk-AKWJMMEJ.js.map
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
SETTINGS_KEYS,
|
|
9
9
|
getSetting
|
|
10
|
-
} from "./chunk-
|
|
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-
|
|
355
|
+
//# sourceMappingURL=chunk-BHVR2YS5.js.map
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
updateSessionMcpDisabledServers
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-X4PVR6AW.js";
|
|
4
|
+
import {
|
|
5
|
+
getProject
|
|
6
|
+
} from "./chunk-DPFET73G.js";
|
|
4
7
|
import {
|
|
5
8
|
getDatabase
|
|
6
9
|
} from "./chunk-JU757HVI.js";
|
|
@@ -51,15 +54,46 @@ function clearSessionOverrides(sessionId) {
|
|
|
51
54
|
} catch {
|
|
52
55
|
}
|
|
53
56
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
var globalMcpServersProvider = null;
|
|
58
|
+
function setGlobalMcpServersProvider(provider) {
|
|
59
|
+
globalMcpServersProvider = provider;
|
|
60
|
+
}
|
|
61
|
+
function computeDisabledServersForProject(projectOverrides, globalServers) {
|
|
62
|
+
const servers = globalServers ?? globalMcpServersProvider?.() ?? [];
|
|
63
|
+
const disabledSet = /* @__PURE__ */ new Set();
|
|
64
|
+
for (const server of servers) {
|
|
65
|
+
const override = projectOverrides?.[server.name];
|
|
66
|
+
const isDisabled = override?.disabled !== void 0 ? override.disabled : !!server.disabled;
|
|
67
|
+
if (isDisabled) {
|
|
68
|
+
disabledSet.add(server.name);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (projectOverrides) {
|
|
72
|
+
for (const [name, override] of Object.entries(projectOverrides)) {
|
|
73
|
+
if (override.disabled) {
|
|
74
|
+
disabledSet.add(name);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return Array.from(disabledSet);
|
|
79
|
+
}
|
|
80
|
+
function initSessionMcpOverrides(sessionId, projectId, projectOverrides) {
|
|
81
|
+
try {
|
|
82
|
+
const project = projectOverrides !== void 0 ? { mcpOverrides: projectOverrides } : getProject(projectId);
|
|
83
|
+
const disabledServers = computeDisabledServersForProject(project?.mcpOverrides);
|
|
84
|
+
if (disabledServers.length > 0) {
|
|
85
|
+
setSessionDisabledServers(sessionId, disabledServers);
|
|
86
|
+
}
|
|
87
|
+
} catch {
|
|
88
|
+
}
|
|
57
89
|
}
|
|
58
90
|
|
|
59
91
|
export {
|
|
60
92
|
getSessionDisabledServers,
|
|
61
93
|
setSessionDisabledServers,
|
|
62
94
|
clearSessionOverrides,
|
|
63
|
-
|
|
95
|
+
setGlobalMcpServersProvider,
|
|
96
|
+
computeDisabledServersForProject,
|
|
97
|
+
initSessionMcpOverrides
|
|
64
98
|
};
|
|
65
|
-
//# sourceMappingURL=chunk-
|
|
99
|
+
//# sourceMappingURL=chunk-DG2YSWMC.js.map
|