openfox 2.0.134 → 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.
- package/CHANGELOG.md +45 -0
- package/dist/CHANGELOG.md +45 -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-YCZE2XEJ.js → chat-handler-SYU4HJMI.js} +30 -26
- package/dist/{chunk-CSYOWFPU.js → chunk-342BKOTE.js} +29 -5
- package/dist/{chunk-7QMWYNVF.js → chunk-4LLGI372.js} +2 -2
- package/dist/chunk-4SBVW4UH.js +24 -0
- package/dist/{chunk-FAQDLL2X.js → chunk-5YPHN5NC.js} +8 -8
- package/dist/{chunk-ZMK4VX7V.js → chunk-64YDOCQR.js} +53 -21
- package/dist/{chunk-UV6IH6HK.js → chunk-AKWJMMEJ.js} +15 -1
- package/dist/{chunk-ORCQ3EXQ.js → chunk-BHVR2YS5.js} +2 -2
- package/dist/{chunk-7HGBJFIJ.js → chunk-CPVEONNS.js} +12 -10
- package/dist/{chunk-QDARWVQ2.js → chunk-DG2YSWMC.js} +40 -6
- package/dist/{chunk-J5HOUEPE.js → chunk-EXLCFEML.js} +86 -1010
- package/dist/chunk-FSSUPWYO.js +336 -0
- package/dist/{chunk-5UQ4CKOA.js → chunk-G5GUQKLS.js} +27 -6
- package/dist/{chunk-M4J2L4VH.js → chunk-GP5BYQMF.js} +23 -23
- package/dist/{chunk-7ET46SNE.js → chunk-HEYU7FAY.js} +3 -3
- package/dist/{chunk-MRE4OYKI.js → chunk-MILEZY2J.js} +4 -4
- package/dist/{chunk-O3RCSKUH.js → chunk-MOYWDP73.js} +2 -2
- package/dist/{chunk-J3NMNYGM.js → chunk-N5JKVNLH.js} +2 -2
- package/dist/{chunk-YLVOU7T7.js → chunk-PQKLOLGC.js} +162 -6
- 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-5IXCCMFU.js → chunk-QQQBNL7A.js} +350 -157
- package/dist/{chunk-CTWZPN7G.js → chunk-QUAEH3MP.js} +29 -1
- package/dist/{chunk-5UMXFLET.js → chunk-SAGDTQXD.js} +3 -3
- package/dist/chunk-U6FHHT2B.js +1155 -0
- package/dist/{chunk-YOPXAI2W.js → chunk-UL7776XB.js} +21 -21
- package/dist/{chunk-JURM3RPZ.js → chunk-V5AC2TV7.js} +8 -13
- package/dist/{chunk-BZND27IB.js → chunk-VA2TYWQR.js} +4 -4
- package/dist/{chunk-JE7LW7Y6.js → chunk-VIJVLLPT.js} +12 -3
- package/dist/{chunk-2AI7VYPN.js → chunk-VKMPR25F.js} +9 -3
- package/dist/chunk-VWBPQZLO.js +7 -0
- package/dist/{chunk-ZTBKMVV6.js → chunk-X4PVR6AW.js} +15 -2
- package/dist/chunk-XG3AUMPI.js +72 -0
- package/dist/{chunk-MEEUXRFL.js → chunk-XGG4XCKP.js} +2 -2
- package/dist/{chunk-QICVOQNX.js → chunk-YDPC4FLR.js} +17 -11
- 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-PD6DQ4NY.js → compactor-LBK53WAK.js} +14 -12
- package/dist/describe-image-4XDLSKAB.js +30 -0
- package/dist/{dynamic-context-WKEXQCTK.js → dynamic-context-RDBNQPPA.js} +12 -10
- package/dist/{events-3WSNI7XC.js → events-YTYYT3PR.js} +6 -6
- package/dist/export-import-GHRCOQHF.js +137 -0
- package/dist/{folding-H7JTX6KI.js → folding-3MMOPS4W.js} +4 -4
- package/dist/{http-client-A445WYZU.js → http-client-C6UYWVWZ.js} +3 -3
- package/dist/launch-YZ46OEFP.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-OT66EDXO.js → orchestrator-6QGQ55NT.js} +29 -25
- package/dist/package.json +1 -1
- package/dist/{path-security-5CFMMULR.js → path-security-EC4Z2ZZG.js} +8 -8
- package/dist/{platform-XPMZKAUB.js → platform-KPKYBU54.js} +3 -3
- package/dist/{processor-CHMHMMIE.js → processor-B2RV7MVC.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-HSDVY37K.js → serve-EWA5HXC7.js} +41 -32
- package/dist/server/index.d.ts +16 -0
- package/dist/server/index.js +34 -30
- package/dist/server-ZAPAB3FS.js +61 -0
- package/dist/{service-XIUNS5XV.js → service-NKLQH647.js} +12 -9
- package/dist/{session-overrides-Y5B4XQPU.js → session-overrides-ANQBKV74.js} +11 -7
- package/dist/{sessions-IGINPPBP.js → sessions-GLYACE5R.js} +6 -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-WWIWD3O7.js → tools-EJOABHVO.js} +27 -23
- package/dist/{update-Q6SH7UP2.js → update-IPHJMRQZ.js} +2 -2
- package/dist/web/assets/index-CfFwerN2.js +313 -0
- package/dist/web/assets/{index-Y300llHY.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-QTLYD2FF.js +0 -7
- package/dist/client-VVYOWXRR.js +0 -16
- package/dist/launch-FJ65HRV4.js +0 -54
- package/dist/server-3UVLECD5.js +0 -57
- package/dist/tool-adapter-FJAFLDZA.js +0 -8
- package/dist/web/assets/index-C48qmBAI.js +0 -313
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,50 @@
|
|
|
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
|
+
|
|
30
|
+
## 2.0.135 - 2026-09-01
|
|
31
|
+
|
|
32
|
+
### Features
|
|
33
|
+
|
|
34
|
+
- **Export and import sessions** — save a session to a JSON file and restore it elsewhere, preserving its cached layout
|
|
35
|
+
|
|
36
|
+
### Enhancements
|
|
37
|
+
|
|
38
|
+
- **Fuller mobile header navigation** — the project and session dropdowns from desktop now appear on mobile, with a Home shortcut back to the project list
|
|
39
|
+
- **Shorter French UI labels** — history, stop, and related controls use more concise wording
|
|
40
|
+
|
|
41
|
+
### Bug Fixes
|
|
42
|
+
|
|
43
|
+
- **Live turn stats stay visible** — they no longer disappear while the assistant waits for your input
|
|
44
|
+
- **Header dropdown closes on middle-click** — navigating via a link's middle-click now dismisses the menu
|
|
45
|
+
- **Dev server status loads at startup** — the header no longer shows “Aucune config” until the popover is opened
|
|
46
|
+
- **Missing French labels translated** — “No matches” and “Task Completed” now render in French
|
|
47
|
+
|
|
3
48
|
## 2.0.134 - 2026-08-31
|
|
4
49
|
|
|
5
50
|
### Features
|
package/dist/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,50 @@
|
|
|
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
|
+
|
|
30
|
+
## 2.0.135 - 2026-09-01
|
|
31
|
+
|
|
32
|
+
### Features
|
|
33
|
+
|
|
34
|
+
- **Export and import sessions** — save a session to a JSON file and restore it elsewhere, preserving its cached layout
|
|
35
|
+
|
|
36
|
+
### Enhancements
|
|
37
|
+
|
|
38
|
+
- **Fuller mobile header navigation** — the project and session dropdowns from desktop now appear on mobile, with a Home shortcut back to the project list
|
|
39
|
+
- **Shorter French UI labels** — history, stop, and related controls use more concise wording
|
|
40
|
+
|
|
41
|
+
### Bug Fixes
|
|
42
|
+
|
|
43
|
+
- **Live turn stats stay visible** — they no longer disappear while the assistant waits for your input
|
|
44
|
+
- **Header dropdown closes on middle-click** — navigating via a link's middle-click now dismisses the menu
|
|
45
|
+
- **Dev server status loads at startup** — the header no longer shows “Aucune config” until the popover is opened
|
|
46
|
+
- **Missing French labels translated** — “No matches” and “Task Completed” now render in French
|
|
47
|
+
|
|
3
48
|
## 2.0.134 - 2026-08-31
|
|
4
49
|
|
|
5
50
|
### 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-5YPHN5NC.js";
|
|
6
6
|
import {
|
|
7
7
|
runChatTurn
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
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-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
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-
|
|
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-YLVOU7T7.js";
|
|
25
|
+
import "./chunk-V5AC2TV7.js";
|
|
26
|
+
import "./chunk-PQKLOLGC.js";
|
|
25
27
|
import {
|
|
26
28
|
getEventStore
|
|
27
|
-
} from "./chunk-
|
|
28
|
-
import "./chunk-
|
|
29
|
-
import "./chunk-
|
|
30
|
-
import "./chunk-
|
|
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-
|
|
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-SYU4HJMI.js.map
|
|
@@ -6,16 +6,16 @@ import {
|
|
|
6
6
|
foldSessionState,
|
|
7
7
|
spreadOptionalMessageFields,
|
|
8
8
|
trimSnapshotStreamingOutput
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-XGG4XCKP.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";
|
|
@@ -211,6 +211,30 @@ var EventStore = class _EventStore {
|
|
|
211
211
|
}
|
|
212
212
|
return results;
|
|
213
213
|
}
|
|
214
|
+
/**
|
|
215
|
+
* Import events verbatim (used by session import).
|
|
216
|
+
* Preserves original seq and timestamp; rewrites the sessionId.
|
|
217
|
+
* Intended for a fresh session (no existing events for the target id).
|
|
218
|
+
*/
|
|
219
|
+
importEvents(sessionId, events) {
|
|
220
|
+
if (events.length === 0) return [];
|
|
221
|
+
const insert = this.db.prepare(
|
|
222
|
+
`INSERT INTO events (session_id, seq, timestamp, event_type, payload)
|
|
223
|
+
VALUES (?, ?, ?, ?, ?)`
|
|
224
|
+
);
|
|
225
|
+
const transaction = this.db.transaction(() => {
|
|
226
|
+
for (const event of events) {
|
|
227
|
+
insert.run(sessionId, event.seq, event.timestamp, event.type, JSON.stringify(event.data));
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
transaction();
|
|
231
|
+
this.invalidateSessionCache(sessionId);
|
|
232
|
+
const stored = events.map((event) => ({ ...event, sessionId }));
|
|
233
|
+
for (const event of stored) {
|
|
234
|
+
this.notifySubscribers(sessionId, event);
|
|
235
|
+
}
|
|
236
|
+
return stored;
|
|
237
|
+
}
|
|
214
238
|
getNextSeq(sessionId) {
|
|
215
239
|
const row = this.db.prepare(`SELECT MAX(seq) as max_seq FROM events WHERE session_id = ?`).get(sessionId);
|
|
216
240
|
return (row?.max_seq ?? 0) + 1;
|
|
@@ -1465,4 +1489,4 @@ export {
|
|
|
1465
1489
|
truncateSessionMessages,
|
|
1466
1490
|
getRecentUserPromptsForSession
|
|
1467
1491
|
};
|
|
1468
|
-
//# sourceMappingURL=chunk-
|
|
1492
|
+
//# sourceMappingURL=chunk-342BKOTE.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
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getPendingQuestionsForSession
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-V5AC2TV7.js";
|
|
4
4
|
import {
|
|
5
5
|
combineEventsWithSnapshot,
|
|
6
6
|
getEventStore
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-342BKOTE.js";
|
|
8
8
|
import {
|
|
9
9
|
buildMessagesFromStoredEvents,
|
|
10
10
|
foldPendingConfirmations
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-XGG4XCKP.js";
|
|
12
12
|
import {
|
|
13
13
|
updateSessionMetadata
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-X4PVR6AW.js";
|
|
15
15
|
import {
|
|
16
16
|
getRuntimeConfig
|
|
17
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
@@ -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
|