openfox 1.6.75 → 1.6.76
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/dist/{ask-3RK5YJZE.js → ask-5SSOA6SZ.js} +2 -2
- package/dist/{auth-LZZX63KI.js → auth-56SIRACI.js} +3 -6
- package/dist/auto-compaction-V3PA77WG.js +27 -0
- package/dist/{branch.api-XADFZZAA.js → branch.api-PWFW26KC.js} +2 -2
- package/dist/{chat-handler-KYMMXPP6.js → chat-handler-7DKHGTVO.js} +31 -29
- package/dist/{chunk-5UTTLO4D.js → chunk-5ZD3GZTK.js} +89 -49
- package/dist/{chunk-AFATQ5LJ.js → chunk-B5AP3RSV.js} +1 -1
- package/dist/{chunk-22CTURMH.js → chunk-BJYPTN5S.js} +1 -1
- package/dist/{chunk-DLINTLB7.js → chunk-BSTVRSV6.js} +7 -5
- package/dist/{chunk-7JPKRM6M.js → chunk-CMQCO27Y.js} +22 -12
- package/dist/{chunk-R4HADRYO.js → chunk-CQGTEGKL.js} +1 -1
- package/dist/{chunk-J5DV33SS.js → chunk-CUDAT6SS.js} +46 -18
- package/dist/{chunk-ETIXH35K.js → chunk-H5EICXF3.js} +499 -277
- package/dist/{chunk-XIZ6B6IS.js → chunk-K2V7EW5F.js} +541 -299
- package/dist/{chunk-PNBH3RAX.js → chunk-K44MW7JJ.js} +1 -1
- package/dist/{chunk-BLNFJ22S.js → chunk-KIOUKC3Z.js} +6 -4
- package/dist/{chunk-4CQ7CUQ6.js → chunk-LCQ3MPXD.js} +5 -5
- package/dist/{chunk-CTAIXOZJ.js → chunk-NDJ6FKSP.js} +1 -1
- package/dist/{chunk-IA4O65CR.js → chunk-NHJ2GVCF.js} +100 -68
- package/dist/{chunk-GQZGIMJO.js → chunk-OXI26S7U.js} +12 -7
- package/dist/{chunk-NBU6KIOD.js → chunk-PBGOZMVY.js} +4 -4
- package/dist/{chunk-B7E3BICY.js → chunk-RGRBWDZP.js} +2 -4
- package/dist/{chunk-VIGOXEZG.js → chunk-RQ4XSKUR.js} +15 -16
- package/dist/{chunk-KFBIHS3S.js → chunk-STYHKCG7.js} +20 -14
- package/dist/{chunk-55Z3DJ7G.js → chunk-TGWEH2BC.js} +10 -11
- package/dist/{chunk-TYUNDOX2.js → chunk-UKMRZDWM.js} +90 -41
- package/dist/{chunk-PFRQO5Z3.js → chunk-VAMTEAYI.js} +49 -27
- package/dist/{chunk-574HZVLE.js → chunk-VRGRAQDG.js} +2 -2
- package/dist/{chunk-JQBTYHUR.js → chunk-WR6QCJJO.js} +53 -15
- package/dist/{chunk-RBPOAAIZ.js → chunk-XKIEDGQF.js} +22 -18
- package/dist/cli/dev.js +2 -2
- package/dist/cli/index.js +2 -2
- package/dist/{config-6T4EHAP2.js → config-5CONAOL7.js} +7 -7
- package/dist/{events-LKEZ3YCW.js → events-BDXQOC7F.js} +6 -6
- package/dist/{folding-JN2WT44N.js → folding-2HW7FIKL.js} +2 -2
- package/dist/{inspect-proxy-Y4MRAVB7.js → inspect-proxy-Y75AXMRX.js} +3 -3
- package/dist/{manager-HM2J5VMW.js → manager-W7N3XQ4Q.js} +3 -3
- package/dist/orchestrator-KCHEENHK.js +43 -0
- package/dist/package.json +19 -3
- package/dist/{paths-ZRI56O63.js → paths-X46PPOI2.js} +2 -2
- package/dist/{processor-23O4HPSS.js → processor-6TS37IYH.js} +15 -11
- package/dist/{project-creator-LASKNQPA.js → project-creator-VD7MLOWE.js} +8 -5
- package/dist/{projects-HEUOWNSR.js → projects-XLMSDFTQ.js} +4 -4
- package/dist/{protocol-5AWNGFLH.js → protocol-4CTV7OZC.js} +3 -3
- package/dist/{protocol-DRBnujwe.d.ts → protocol-4xbfAlGO.d.ts} +3 -0
- package/dist/{provider-AKN355YH.js → provider-ESEBV3LL.js} +15 -11
- package/dist/{pwa-GHQCMCIU.js → pwa-76XP2DY2.js} +2 -2
- package/dist/{runtime-config-ZCK74XKM.js → runtime-config-CBJJJGBD.js} +2 -2
- package/dist/{serve-TW63YCNQ.js → serve-OLDABBV3.js} +29 -27
- package/dist/server/index.d.ts +6 -1
- package/dist/server/index.js +22 -22
- package/dist/server/public/__inspect__.js +2 -1
- package/dist/{service-74Z7JK2J.js → service-D6LC3CAM.js} +3 -2
- package/dist/{settings-NI4ITGV6.js → settings-TQNQB56H.js} +4 -4
- package/dist/shared/index.d.ts +2 -2
- package/dist/shared/index.js +2 -2
- package/dist/{store-2IF3ZSLD.js → store-OQ45KONN.js} +2 -2
- package/dist/{tools-RUAY6EVI.js → tools-BHYHS3RY.js} +18 -18
- package/dist/{vision-fallback-AXH3BGJC.js → vision-fallback-ED27LH6C.js} +3 -3
- package/dist/web/assets/{index-CWdKiSP8.js → index-DAuZ02-Q.js} +57 -57
- package/dist/web/index.html +1 -1
- package/dist/web/sw.js +1 -1
- package/package.json +19 -3
- package/dist/auto-compaction-OW4P2QWQ.js +0 -27
- package/dist/orchestrator-QP4O7MUM.js +0 -43
|
@@ -1,23 +1,19 @@
|
|
|
1
1
|
import {
|
|
2
2
|
detectModel
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-TGWEH2BC.js";
|
|
4
4
|
import {
|
|
5
5
|
detectBackend
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-CUDAT6SS.js";
|
|
7
7
|
import {
|
|
8
8
|
getGlobalConfigPath
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-CQGTEGKL.js";
|
|
10
10
|
|
|
11
11
|
// src/cli/config.ts
|
|
12
12
|
import { z } from "zod";
|
|
13
13
|
import { randomUUID } from "crypto";
|
|
14
14
|
import { readFile, writeFile, mkdir, access } from "fs/promises";
|
|
15
15
|
import { dirname } from "path";
|
|
16
|
-
var SMART_DEFAULTS = [
|
|
17
|
-
"http://localhost:8000",
|
|
18
|
-
"http://localhost:11434",
|
|
19
|
-
"http://localhost:8080"
|
|
20
|
-
];
|
|
16
|
+
var SMART_DEFAULTS = ["http://localhost:8000", "http://localhost:11434", "http://localhost:8080"];
|
|
21
17
|
async function trySmartDefaults(_mode) {
|
|
22
18
|
const results = await Promise.all(
|
|
23
19
|
SMART_DEFAULTS.map(async (url) => {
|
|
@@ -46,7 +42,17 @@ async function configFileExists(mode) {
|
|
|
46
42
|
return false;
|
|
47
43
|
}
|
|
48
44
|
}
|
|
49
|
-
var backendSchema = z.enum([
|
|
45
|
+
var backendSchema = z.enum([
|
|
46
|
+
"auto",
|
|
47
|
+
"vllm",
|
|
48
|
+
"sglang",
|
|
49
|
+
"ollama",
|
|
50
|
+
"llamacpp",
|
|
51
|
+
"openai",
|
|
52
|
+
"anthropic",
|
|
53
|
+
"opencode-go",
|
|
54
|
+
"unknown"
|
|
55
|
+
]);
|
|
50
56
|
var modelConfigSchema = z.object({
|
|
51
57
|
id: z.string(),
|
|
52
58
|
contextWindow: z.number(),
|
|
@@ -138,11 +144,13 @@ function migrateConfig(raw) {
|
|
|
138
144
|
let models = existingModels ?? [];
|
|
139
145
|
if (maxContext !== void 0 && (existingModels === void 0 || existingModels.length === 0)) {
|
|
140
146
|
migrationOccurred = true;
|
|
141
|
-
models = [
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
147
|
+
models = [
|
|
148
|
+
{
|
|
149
|
+
id: model ?? "auto",
|
|
150
|
+
contextWindow: maxContext,
|
|
151
|
+
source: "user"
|
|
152
|
+
}
|
|
153
|
+
];
|
|
146
154
|
}
|
|
147
155
|
return {
|
|
148
156
|
...rest,
|
|
@@ -182,11 +190,13 @@ function migrateConfig(raw) {
|
|
|
182
190
|
if (typeof raw === "object" && raw !== null && "llm" in raw) {
|
|
183
191
|
const oldConfig = oldConfigSchema.parse(raw);
|
|
184
192
|
const providerId = randomUUID();
|
|
185
|
-
const models = [
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
193
|
+
const models = [
|
|
194
|
+
{
|
|
195
|
+
id: oldConfig.llm.model || "auto",
|
|
196
|
+
contextWindow: oldConfig.llm.maxContext,
|
|
197
|
+
source: "user"
|
|
198
|
+
}
|
|
199
|
+
];
|
|
190
200
|
const provider = {
|
|
191
201
|
id: providerId,
|
|
192
202
|
name: "Default",
|
|
@@ -243,7 +253,12 @@ async function saveGlobalConfig(mode, config) {
|
|
|
243
253
|
logging: config.logging ?? { level: "error" },
|
|
244
254
|
database: config.database ?? { path: "" },
|
|
245
255
|
workspace: config.workspace ?? { workdir: process.cwd() },
|
|
246
|
-
visionFallback: config.visionFallback ?? {
|
|
256
|
+
visionFallback: config.visionFallback ?? {
|
|
257
|
+
enabled: false,
|
|
258
|
+
url: "http://localhost:11434",
|
|
259
|
+
model: "qwen3-vl:2b",
|
|
260
|
+
timeout: 120
|
|
261
|
+
}
|
|
247
262
|
};
|
|
248
263
|
await mkdir(dirname(configPath), { recursive: true });
|
|
249
264
|
await writeFile(configPath, JSON.stringify(fullConfig, null, 2));
|
|
@@ -273,7 +288,12 @@ function setDefaultModelSelection(config, providerId, model) {
|
|
|
273
288
|
logging: config.logging ?? { level: "error" },
|
|
274
289
|
database: config.database ?? { path: "" },
|
|
275
290
|
workspace: config.workspace ?? { workdir: process.cwd() },
|
|
276
|
-
visionFallback: config.visionFallback ?? {
|
|
291
|
+
visionFallback: config.visionFallback ?? {
|
|
292
|
+
enabled: false,
|
|
293
|
+
url: "http://localhost:11434",
|
|
294
|
+
model: "qwen3-vl:2b",
|
|
295
|
+
timeout: 120
|
|
296
|
+
}
|
|
277
297
|
};
|
|
278
298
|
}
|
|
279
299
|
function addProvider(config, provider) {
|
|
@@ -295,7 +315,12 @@ function addProvider(config, provider) {
|
|
|
295
315
|
logging: config.logging ?? { level: "error" },
|
|
296
316
|
database: config.database ?? { path: "" },
|
|
297
317
|
workspace: config.workspace ?? { workdir: process.cwd() },
|
|
298
|
-
visionFallback: config.visionFallback ?? {
|
|
318
|
+
visionFallback: config.visionFallback ?? {
|
|
319
|
+
enabled: false,
|
|
320
|
+
url: "http://localhost:11434",
|
|
321
|
+
model: "qwen3-vl:2b",
|
|
322
|
+
timeout: 120
|
|
323
|
+
}
|
|
299
324
|
};
|
|
300
325
|
}
|
|
301
326
|
function removeProvider(config, providerId) {
|
|
@@ -320,7 +345,12 @@ function removeProvider(config, providerId) {
|
|
|
320
345
|
logging: config.logging ?? { level: "error" },
|
|
321
346
|
database: config.database ?? { path: "" },
|
|
322
347
|
workspace: config.workspace ?? { workdir: process.cwd() },
|
|
323
|
-
visionFallback: config.visionFallback ?? {
|
|
348
|
+
visionFallback: config.visionFallback ?? {
|
|
349
|
+
enabled: false,
|
|
350
|
+
url: "http://localhost:11434",
|
|
351
|
+
model: "qwen3-vl:2b",
|
|
352
|
+
timeout: 120
|
|
353
|
+
}
|
|
324
354
|
};
|
|
325
355
|
}
|
|
326
356
|
function activateProvider(config, providerId) {
|
|
@@ -335,7 +365,12 @@ function activateProvider(config, providerId) {
|
|
|
335
365
|
logging: config.logging ?? { level: "error" },
|
|
336
366
|
database: config.database ?? { path: "" },
|
|
337
367
|
workspace: config.workspace ?? { workdir: process.cwd() },
|
|
338
|
-
visionFallback: config.visionFallback ?? {
|
|
368
|
+
visionFallback: config.visionFallback ?? {
|
|
369
|
+
enabled: false,
|
|
370
|
+
url: "http://localhost:11434",
|
|
371
|
+
model: "qwen3-vl:2b",
|
|
372
|
+
timeout: 120
|
|
373
|
+
}
|
|
339
374
|
};
|
|
340
375
|
}
|
|
341
376
|
return {
|
|
@@ -347,26 +382,40 @@ function activateProvider(config, providerId) {
|
|
|
347
382
|
logging: config.logging ?? { level: "error" },
|
|
348
383
|
database: config.database ?? { path: "" },
|
|
349
384
|
workspace: config.workspace ?? { workdir: process.cwd() },
|
|
350
|
-
visionFallback: config.visionFallback ?? {
|
|
385
|
+
visionFallback: config.visionFallback ?? {
|
|
386
|
+
enabled: false,
|
|
387
|
+
url: "http://localhost:11434",
|
|
388
|
+
model: "qwen3-vl:2b",
|
|
389
|
+
timeout: 120
|
|
390
|
+
}
|
|
351
391
|
};
|
|
352
392
|
}
|
|
353
393
|
function mergeConfigs(...configs) {
|
|
354
|
-
const result = configs.reduce(
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
394
|
+
const result = configs.reduce(
|
|
395
|
+
(acc, curr) => {
|
|
396
|
+
if (curr.llm) {
|
|
397
|
+
acc.llm = { ...acc.llm, ...curr.llm };
|
|
398
|
+
}
|
|
399
|
+
if (curr.server) {
|
|
400
|
+
acc.server = { ...acc.server, ...curr.server };
|
|
401
|
+
}
|
|
402
|
+
if (curr.logging) {
|
|
403
|
+
acc.logging = { ...acc.logging, ...curr.logging };
|
|
404
|
+
}
|
|
405
|
+
return acc;
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
llm: {
|
|
409
|
+
url: "http://localhost:8000/v1",
|
|
410
|
+
model: "auto",
|
|
411
|
+
backend: "auto",
|
|
412
|
+
maxContext: 2e5,
|
|
413
|
+
disableThinking: false
|
|
414
|
+
},
|
|
415
|
+
server: { port: 10369, host: "127.0.0.1", openBrowser: true },
|
|
416
|
+
logging: { level: "error" }
|
|
363
417
|
}
|
|
364
|
-
|
|
365
|
-
}, {
|
|
366
|
-
llm: { url: "http://localhost:8000/v1", model: "auto", backend: "auto", maxContext: 2e5, disableThinking: false },
|
|
367
|
-
server: { port: 10369, host: "127.0.0.1", openBrowser: true },
|
|
368
|
-
logging: { level: "error" }
|
|
369
|
-
});
|
|
418
|
+
);
|
|
370
419
|
return oldConfigSchema.parse(result);
|
|
371
420
|
}
|
|
372
421
|
|
|
@@ -386,4 +435,4 @@ export {
|
|
|
386
435
|
activateProvider,
|
|
387
436
|
mergeConfigs
|
|
388
437
|
};
|
|
389
|
-
//# sourceMappingURL=chunk-
|
|
438
|
+
//# sourceMappingURL=chunk-UKMRZDWM.js.map
|
|
@@ -184,7 +184,10 @@ function deepCloneMessage(msg) {
|
|
|
184
184
|
const cloned = { ...msg };
|
|
185
185
|
const obj = cloned;
|
|
186
186
|
if (obj["toolCalls"]) {
|
|
187
|
-
obj["toolCalls"] = obj["toolCalls"].map((tc) => ({
|
|
187
|
+
obj["toolCalls"] = obj["toolCalls"].map((tc) => ({
|
|
188
|
+
...tc,
|
|
189
|
+
...tc.result ? { result: { ...tc.result } } : {}
|
|
190
|
+
}));
|
|
188
191
|
}
|
|
189
192
|
if (obj["segments"]) {
|
|
190
193
|
obj["segments"] = [...obj["segments"]];
|
|
@@ -274,6 +277,9 @@ function appendSnapshotMessageContext(result, message) {
|
|
|
274
277
|
role: message.role,
|
|
275
278
|
content: message.content
|
|
276
279
|
};
|
|
280
|
+
if (message.thinkingContent) {
|
|
281
|
+
contextMsg.thinkingContent = message.thinkingContent;
|
|
282
|
+
}
|
|
277
283
|
if (message.toolCalls && message.toolCalls.length > 0) {
|
|
278
284
|
contextMsg.toolCalls = message.toolCalls.map((toolCall) => ({
|
|
279
285
|
id: toolCall.id,
|
|
@@ -294,9 +300,11 @@ function appendSnapshotMessageContext(result, message) {
|
|
|
294
300
|
}
|
|
295
301
|
result.push({
|
|
296
302
|
role: "tool",
|
|
297
|
-
content: stripAnsi(
|
|
303
|
+
content: stripAnsi(
|
|
304
|
+
toolCall.result.success ? toolCall.result.output ?? "Success" : toolCall.result.output ? `${toolCall.result.output}
|
|
298
305
|
|
|
299
|
-
Error: ${toolCall.result.error}` : `Error: ${toolCall.result.error}`
|
|
306
|
+
Error: ${toolCall.result.error}` : `Error: ${toolCall.result.error}`
|
|
307
|
+
),
|
|
300
308
|
toolCallId: toolCall.id
|
|
301
309
|
});
|
|
302
310
|
}
|
|
@@ -308,7 +316,9 @@ function getTimestamp(event) {
|
|
|
308
316
|
return event.timestamp ?? Date.now();
|
|
309
317
|
}
|
|
310
318
|
function applyTurnEventsToSnapshotMessages(initialMessages, events) {
|
|
311
|
-
const messages = applyEvents(initialMessages, events, {
|
|
319
|
+
const messages = applyEvents(initialMessages, events, {
|
|
320
|
+
timestampAsNumber: true
|
|
321
|
+
});
|
|
312
322
|
return messages.map((msg) => ({ ...msg, isStreaming: msg.isStreaming ?? true }));
|
|
313
323
|
}
|
|
314
324
|
function buildMessagesFromStoredEvents(events) {
|
|
@@ -341,6 +351,14 @@ function buildContextMessagesFromStoredEvents(events, windowId, options) {
|
|
|
341
351
|
}
|
|
342
352
|
break;
|
|
343
353
|
}
|
|
354
|
+
case "message.thinking": {
|
|
355
|
+
const data = event.data;
|
|
356
|
+
const msg = messageMap.get(data.messageId);
|
|
357
|
+
if (msg) {
|
|
358
|
+
msg.thinkingContent = (msg.thinkingContent ?? "") + data.content;
|
|
359
|
+
}
|
|
360
|
+
break;
|
|
361
|
+
}
|
|
344
362
|
case "message.delta": {
|
|
345
363
|
const data = event.data;
|
|
346
364
|
const msg = messageMap.get(data.messageId);
|
|
@@ -365,19 +383,23 @@ function buildContextMessagesFromStoredEvents(events, windowId, options) {
|
|
|
365
383
|
const msg = {
|
|
366
384
|
id: `tool-${data.toolCallId}`,
|
|
367
385
|
role: "tool",
|
|
368
|
-
content: stripAnsi(
|
|
386
|
+
content: stripAnsi(
|
|
387
|
+
data.result.success ? data.result.output ?? "Success" : data.result.output ? `${data.result.output}
|
|
369
388
|
|
|
370
|
-
Error: ${data.result.error}` : `Error: ${data.result.error}`
|
|
389
|
+
Error: ${data.result.error}` : `Error: ${data.result.error}`
|
|
390
|
+
),
|
|
371
391
|
toolCallId: data.toolCallId
|
|
372
392
|
};
|
|
373
393
|
if (imageMeta?.dataUrl && imageMeta?.mimeType?.startsWith("image/")) {
|
|
374
|
-
msg.attachments = [
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
394
|
+
msg.attachments = [
|
|
395
|
+
{
|
|
396
|
+
id: crypto.randomUUID(),
|
|
397
|
+
filename: imageMeta.path ?? "image",
|
|
398
|
+
mimeType: imageMeta.mimeType,
|
|
399
|
+
size: imageMeta.size ?? 0,
|
|
400
|
+
data: imageMeta.dataUrl
|
|
401
|
+
}
|
|
402
|
+
];
|
|
381
403
|
}
|
|
382
404
|
messages.push(msg);
|
|
383
405
|
}
|
|
@@ -401,10 +423,7 @@ function buildContextMessagesFromEventHistory(events, windowId, options) {
|
|
|
401
423
|
return result;
|
|
402
424
|
}, []);
|
|
403
425
|
const laterEvents = events.filter((event) => event.seq > snapshotEvent.seq);
|
|
404
|
-
return [
|
|
405
|
-
...snapshotMessages,
|
|
406
|
-
...buildContextMessagesFromStoredEvents(laterEvents, windowId, options)
|
|
407
|
-
];
|
|
426
|
+
return [...snapshotMessages, ...buildContextMessagesFromStoredEvents(laterEvents, windowId, options)];
|
|
408
427
|
}
|
|
409
428
|
function foldTurnEventsToSnapshotMessages(events) {
|
|
410
429
|
return applyTurnEventsToSnapshotMessages([], events);
|
|
@@ -423,9 +442,7 @@ function foldCriteria(events) {
|
|
|
423
442
|
}
|
|
424
443
|
case "criterion.updated": {
|
|
425
444
|
const data = event.data;
|
|
426
|
-
criteria = criteria.map(
|
|
427
|
-
(c) => c.id === data.criterionId ? { ...c, status: data.status } : c
|
|
428
|
-
);
|
|
445
|
+
criteria = criteria.map((c) => c.id === data.criterionId ? { ...c, status: data.status } : c);
|
|
429
446
|
break;
|
|
430
447
|
}
|
|
431
448
|
}
|
|
@@ -590,7 +607,10 @@ function foldSessionState(events, initialWindowId, maxTokens, initialMessages) {
|
|
|
590
607
|
if (event.type === "turn.snapshot") {
|
|
591
608
|
const snapshotData = event.data;
|
|
592
609
|
if (snapshotData.lastModeWithReminder) {
|
|
593
|
-
snapshotReminderMode = {
|
|
610
|
+
snapshotReminderMode = {
|
|
611
|
+
seq: event.seq,
|
|
612
|
+
mode: snapshotData.lastModeWithReminder
|
|
613
|
+
};
|
|
594
614
|
}
|
|
595
615
|
}
|
|
596
616
|
}
|
|
@@ -604,12 +624,12 @@ function foldSessionState(events, initialWindowId, maxTokens, initialMessages) {
|
|
|
604
624
|
}
|
|
605
625
|
let sessionInit;
|
|
606
626
|
let sessionTitle;
|
|
607
|
-
|
|
608
|
-
|
|
627
|
+
const visionFallbacks = [];
|
|
628
|
+
const formatRetries = [];
|
|
609
629
|
let pendingUserInput;
|
|
610
630
|
let taskStats;
|
|
611
|
-
|
|
612
|
-
|
|
631
|
+
const messageStats = [];
|
|
632
|
+
const contextWindows = [];
|
|
613
633
|
for (const event of events) {
|
|
614
634
|
switch (event.type) {
|
|
615
635
|
case "session.initialized": {
|
|
@@ -639,7 +659,9 @@ function foldSessionState(events, initialWindowId, maxTokens, initialMessages) {
|
|
|
639
659
|
}
|
|
640
660
|
case "vision_fallback.done": {
|
|
641
661
|
const data = event.data;
|
|
642
|
-
const existing = visionFallbacks.find(
|
|
662
|
+
const existing = visionFallbacks.find(
|
|
663
|
+
(v) => v.messageId === data.messageId && v.attachmentId === data.attachmentId
|
|
664
|
+
);
|
|
643
665
|
if (existing) {
|
|
644
666
|
existing.description = data.description;
|
|
645
667
|
}
|
|
@@ -807,4 +829,4 @@ export {
|
|
|
807
829
|
getMessagesForWindow,
|
|
808
830
|
buildContextMessagesFromMessages
|
|
809
831
|
};
|
|
810
|
-
//# sourceMappingURL=chunk-
|
|
832
|
+
//# sourceMappingURL=chunk-VAMTEAYI.js.map
|
|
@@ -120,7 +120,7 @@ function cleanupAllProcesses() {
|
|
|
120
120
|
} catch {
|
|
121
121
|
try {
|
|
122
122
|
process.kill(proc.pid, "SIGTERM");
|
|
123
|
-
} catch
|
|
123
|
+
} catch {
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
}
|
|
@@ -146,4 +146,4 @@ export {
|
|
|
146
146
|
getProcessById,
|
|
147
147
|
cleanupAllProcesses
|
|
148
148
|
};
|
|
149
|
-
//# sourceMappingURL=chunk-
|
|
149
|
+
//# sourceMappingURL=chunk-VRGRAQDG.js.map
|
|
@@ -3,14 +3,14 @@ import {
|
|
|
3
3
|
createLLMClient,
|
|
4
4
|
detectModel,
|
|
5
5
|
setLlmStatus
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-TGWEH2BC.js";
|
|
7
7
|
import {
|
|
8
8
|
detectBackend,
|
|
9
9
|
getModelProfile
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-CUDAT6SS.js";
|
|
11
11
|
import {
|
|
12
12
|
logger
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-K44MW7JJ.js";
|
|
14
14
|
|
|
15
15
|
// src/server/provider-manager.ts
|
|
16
16
|
function normalizeModelId(s) {
|
|
@@ -143,7 +143,10 @@ async function fetchOllamaModelsWithContext(baseUrl, _apiKey) {
|
|
|
143
143
|
}
|
|
144
144
|
return modelsWithContext;
|
|
145
145
|
} catch (error) {
|
|
146
|
-
logger.info("Error fetching Ollama models", {
|
|
146
|
+
logger.info("Error fetching Ollama models", {
|
|
147
|
+
url: baseUrl,
|
|
148
|
+
error: error instanceof Error ? error.message : String(error)
|
|
149
|
+
});
|
|
147
150
|
return [];
|
|
148
151
|
}
|
|
149
152
|
}
|
|
@@ -161,7 +164,12 @@ function createProviderManager(config) {
|
|
|
161
164
|
let defaultModelSelection = config.defaultModelSelection;
|
|
162
165
|
let llmClient = createLLMClient(config);
|
|
163
166
|
const providerStatus = /* @__PURE__ */ new Map();
|
|
164
|
-
logger.debug("ProviderManager created", {
|
|
167
|
+
logger.debug("ProviderManager created", {
|
|
168
|
+
providers: providers.map((p) => ({
|
|
169
|
+
id: p.id,
|
|
170
|
+
models: p.models.map((m) => ({ id: m.id, contextWindow: m.contextWindow, source: m.source }))
|
|
171
|
+
}))
|
|
172
|
+
});
|
|
165
173
|
for (const p of providers) {
|
|
166
174
|
providerStatus.set(p.id, "unknown");
|
|
167
175
|
}
|
|
@@ -177,6 +185,13 @@ function createProviderManager(config) {
|
|
|
177
185
|
}
|
|
178
186
|
};
|
|
179
187
|
}
|
|
188
|
+
const { providerId: activeProviderId, model: activeModel } = parseDefaultModelSelection(defaultModelSelection);
|
|
189
|
+
if (activeProviderId && activeModel) {
|
|
190
|
+
const activeProvider = providers.find((p) => p.id === activeProviderId);
|
|
191
|
+
if (activeProvider && activeProvider.apiKey) {
|
|
192
|
+
llmClient = createLLMClient(createConfigForProvider(activeProvider, activeModel));
|
|
193
|
+
}
|
|
194
|
+
}
|
|
180
195
|
return {
|
|
181
196
|
getProviders() {
|
|
182
197
|
return [...providers];
|
|
@@ -224,12 +239,19 @@ function createProviderManager(config) {
|
|
|
224
239
|
logger.info("activateProvider fetching models", { providerId, providerName: provider.name, url, backend });
|
|
225
240
|
const modelsWithContext = await fetchModelsWithContext(url, provider.apiKey, backend);
|
|
226
241
|
const userModels = provider.models.filter((m) => m.source === "user");
|
|
227
|
-
logger.debug("activateProvider", {
|
|
242
|
+
logger.debug("activateProvider", {
|
|
243
|
+
providerId,
|
|
244
|
+
backendModelsCount: modelsWithContext.length,
|
|
245
|
+
userModelsCount: userModels.length
|
|
246
|
+
});
|
|
228
247
|
if (modelsWithContext.length > 0) {
|
|
229
248
|
const updatedModels = mergeModelsWithUserOverrides(modelsWithContext, userModels);
|
|
230
249
|
providers = providers.map((p) => p.id === providerId ? { ...p, models: updatedModels } : p);
|
|
231
250
|
} else if (userModels.length > 0) {
|
|
232
|
-
logger.debug("Backend unavailable during provider switch, preserving user models", {
|
|
251
|
+
logger.debug("Backend unavailable during provider switch, preserving user models", {
|
|
252
|
+
providerId,
|
|
253
|
+
userModelsCount: userModels.length
|
|
254
|
+
});
|
|
233
255
|
providers = providers.map((p) => p.id === providerId ? { ...p, models: userModels } : p);
|
|
234
256
|
}
|
|
235
257
|
if (provider.backend === "auto") {
|
|
@@ -370,7 +392,12 @@ function createProviderManager(config) {
|
|
|
370
392
|
);
|
|
371
393
|
} else {
|
|
372
394
|
providers = providers.map(
|
|
373
|
-
(p) => p.id === providerId ? {
|
|
395
|
+
(p) => p.id === providerId ? {
|
|
396
|
+
...p,
|
|
397
|
+
models: p.models.map(
|
|
398
|
+
(m, i) => i === modelIndex ? { ...m, contextWindow, source: "user" } : m
|
|
399
|
+
)
|
|
400
|
+
} : p
|
|
374
401
|
);
|
|
375
402
|
}
|
|
376
403
|
logger.info("Model context updated", { providerId, modelId, contextWindow });
|
|
@@ -392,7 +419,13 @@ function createProviderManager(config) {
|
|
|
392
419
|
modelId,
|
|
393
420
|
existing: existingModel,
|
|
394
421
|
incoming: settings,
|
|
395
|
-
final: {
|
|
422
|
+
final: {
|
|
423
|
+
temperature: finalTemp,
|
|
424
|
+
topP: finalTopP,
|
|
425
|
+
topK: finalTopK,
|
|
426
|
+
maxTokens: finalMaxTokens,
|
|
427
|
+
supportsVision: finalSupportsVision
|
|
428
|
+
}
|
|
396
429
|
});
|
|
397
430
|
const updatedModel = enrichWithProfileDefaults({
|
|
398
431
|
id: modelId,
|
|
@@ -409,9 +442,7 @@ function createProviderManager(config) {
|
|
|
409
442
|
(p) => p.id === providerId ? { ...p, models: p.models.map((m) => m.id === modelId ? updatedModel : m) } : p
|
|
410
443
|
);
|
|
411
444
|
} else {
|
|
412
|
-
providers = providers.map(
|
|
413
|
-
(p) => p.id === providerId ? { ...p, models: [...p.models, updatedModel] } : p
|
|
414
|
-
);
|
|
445
|
+
providers = providers.map((p) => p.id === providerId ? { ...p, models: [...p.models, updatedModel] } : p);
|
|
415
446
|
}
|
|
416
447
|
logger.info("Model settings updated", { providerId, modelId, final: updatedModel });
|
|
417
448
|
return { success: true, model: updatedModel };
|
|
@@ -438,11 +469,18 @@ function createProviderManager(config) {
|
|
|
438
469
|
logger.info("refreshProviderModels fetching models", { providerId, providerName: provider.name, url, backend });
|
|
439
470
|
const modelsWithContext = await fetchModelsWithContext(url, provider.apiKey, backend);
|
|
440
471
|
const userModels = provider.models.filter((m) => m.source === "user");
|
|
441
|
-
logger.info("refreshProviderModels", {
|
|
472
|
+
logger.info("refreshProviderModels", {
|
|
473
|
+
providerId,
|
|
474
|
+
userModelsCount: userModels.length,
|
|
475
|
+
backendModelsCount: modelsWithContext.length
|
|
476
|
+
});
|
|
442
477
|
if (modelsWithContext.length === 0) {
|
|
443
478
|
setLlmStatus("disconnected");
|
|
444
479
|
if (userModels.length > 0) {
|
|
445
|
-
logger.debug("Backend unavailable, preserving user models", {
|
|
480
|
+
logger.debug("Backend unavailable, preserving user models", {
|
|
481
|
+
providerId,
|
|
482
|
+
userModels: userModels.map((m) => ({ id: m.id, contextWindow: m.contextWindow }))
|
|
483
|
+
});
|
|
446
484
|
providers = providers.map((p) => p.id === providerId ? { ...p, models: userModels } : p);
|
|
447
485
|
return { success: true };
|
|
448
486
|
}
|
|
@@ -471,4 +509,4 @@ export {
|
|
|
471
509
|
parseDefaultModelSelection,
|
|
472
510
|
createProviderManager
|
|
473
511
|
};
|
|
474
|
-
//# sourceMappingURL=chunk-
|
|
512
|
+
//# sourceMappingURL=chunk-WR6QCJJO.js.map
|
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
import {
|
|
2
2
|
logger
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-K44MW7JJ.js";
|
|
4
4
|
|
|
5
5
|
// src/server/dev-server/inspect-proxy.ts
|
|
6
6
|
import net from "net";
|
|
7
7
|
import zlib from "zlib";
|
|
8
8
|
var OPENFOX_BASE_PORT = Number(process.env["OPENFOX_PORT"] ?? 10369);
|
|
9
9
|
var INJECT_SCRIPT = `<script src="http://127.0.0.1:${OPENFOX_BASE_PORT}/__inspect__.js"></script>`;
|
|
10
|
+
function buildHttpHeaders(resHeaders, status, contentLengthOverride, contentTypeOverride) {
|
|
11
|
+
const newH = { ...resHeaders };
|
|
12
|
+
delete newH["content-length"];
|
|
13
|
+
delete newH["transfer-encoding"];
|
|
14
|
+
newH["connection"] = "close";
|
|
15
|
+
if (contentLengthOverride !== void 0) newH["content-length"] = contentLengthOverride.toString();
|
|
16
|
+
if (contentTypeOverride !== void 0) newH["content-type"] = contentTypeOverride;
|
|
17
|
+
return `HTTP/1.1 ${status} OK\r
|
|
18
|
+
` + Object.entries(newH).map(([k, v]) => `${k}: ${v}`).join("\r\n") + "\r\n\r\n";
|
|
19
|
+
}
|
|
10
20
|
var proxyPool = /* @__PURE__ */ new Map();
|
|
11
21
|
var nextOffset = 0;
|
|
12
22
|
function getAvailablePort() {
|
|
@@ -118,7 +128,9 @@ ${annotation || "(none)"}`;
|
|
|
118
128
|
}
|
|
119
129
|
client.write(buildResponse(200, { "Content-Type": "application/json" }, Buffer.from('{"success":true}')));
|
|
120
130
|
} catch {
|
|
121
|
-
client.write(
|
|
131
|
+
client.write(
|
|
132
|
+
buildResponse(400, { "Content-Type": "application/json" }, Buffer.from('{"error":"Invalid request"}'))
|
|
133
|
+
);
|
|
122
134
|
}
|
|
123
135
|
client.end();
|
|
124
136
|
};
|
|
@@ -163,7 +175,7 @@ ${annotation || "(none)"}`;
|
|
|
163
175
|
let enc = null;
|
|
164
176
|
let status = 200;
|
|
165
177
|
let resHeaders = {};
|
|
166
|
-
|
|
178
|
+
const bodyBuf = [];
|
|
167
179
|
let headEnd = -1;
|
|
168
180
|
targetSocket.on("data", (sChunk) => {
|
|
169
181
|
if (!serverParsed) {
|
|
@@ -232,11 +244,7 @@ ${annotation || "(none)"}`;
|
|
|
232
244
|
if (enc === "gzip") compressed = zlib.gzipSync(Buffer.from(modified, "utf8"));
|
|
233
245
|
else if (enc === "deflate") compressed = zlib.deflateSync(Buffer.from(modified, "utf8"));
|
|
234
246
|
else compressed = Buffer.from(modified, "utf8");
|
|
235
|
-
const
|
|
236
|
-
delete newH["content-length"];
|
|
237
|
-
newH["connection"] = "close";
|
|
238
|
-
const headStr = `HTTP/1.1 ${status} OK\r
|
|
239
|
-
` + Object.entries(newH).map(([k, v]) => `${k}: ${v}`).join("\r\n") + "\r\n\r\n";
|
|
247
|
+
const headStr = buildHttpHeaders(resHeaders, status);
|
|
240
248
|
client.write(Buffer.from(headStr, "utf8"));
|
|
241
249
|
client.write(compressed);
|
|
242
250
|
} else if (isHtml && bodyBuf.length > 0) {
|
|
@@ -246,19 +254,15 @@ ${annotation || "(none)"}`;
|
|
|
246
254
|
const bi = dechunks.indexOf("</body>");
|
|
247
255
|
const hi = dechunks.indexOf("</head>");
|
|
248
256
|
let modified;
|
|
249
|
-
if (bi >= 0)
|
|
250
|
-
|
|
257
|
+
if (bi >= 0)
|
|
258
|
+
modified = Buffer.concat([dechunks.slice(0, bi), Buffer.from(INJECT_SCRIPT, "utf8"), dechunks.slice(bi)]);
|
|
259
|
+
else if (hi >= 0)
|
|
260
|
+
modified = Buffer.concat([dechunks.slice(0, hi), Buffer.from(INJECT_SCRIPT, "utf8"), dechunks.slice(hi)]);
|
|
251
261
|
else {
|
|
252
262
|
client.end();
|
|
253
263
|
return;
|
|
254
264
|
}
|
|
255
|
-
const
|
|
256
|
-
delete newH["content-length"];
|
|
257
|
-
delete newH["transfer-encoding"];
|
|
258
|
-
newH["connection"] = "close";
|
|
259
|
-
newH["content-length"] = Buffer.byteLength(modified).toString();
|
|
260
|
-
const headStr = `HTTP/1.1 ${status} OK\r
|
|
261
|
-
` + Object.entries(newH).map(([k, v]) => `${k}: ${v}`).join("\r\n") + "\r\n\r\n";
|
|
265
|
+
const headStr = buildHttpHeaders(resHeaders, status, Buffer.byteLength(modified), "text/html; charset=utf-8");
|
|
262
266
|
client.write(Buffer.from(headStr, "utf8"));
|
|
263
267
|
client.write(modified);
|
|
264
268
|
}
|
|
@@ -290,4 +294,4 @@ export {
|
|
|
290
294
|
startInspectProxy,
|
|
291
295
|
stopAllInspectProxies
|
|
292
296
|
};
|
|
293
|
-
//# sourceMappingURL=chunk-
|
|
297
|
+
//# sourceMappingURL=chunk-XKIEDGQF.js.map
|
package/dist/cli/dev.js
CHANGED
package/dist/cli/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
runCli
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-RQ4XSKUR.js";
|
|
5
5
|
import {
|
|
6
6
|
logger
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-K44MW7JJ.js";
|
|
8
8
|
|
|
9
9
|
// src/cli/index.ts
|
|
10
10
|
var mode = process.env["OPENFOX_MODE"] ?? "production";
|
|
@@ -13,12 +13,12 @@ import {
|
|
|
13
13
|
saveGlobalConfig,
|
|
14
14
|
setDefaultModelSelection,
|
|
15
15
|
trySmartDefaults
|
|
16
|
-
} from "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
16
|
+
} from "./chunk-UKMRZDWM.js";
|
|
17
|
+
import "./chunk-TGWEH2BC.js";
|
|
18
|
+
import "./chunk-CUDAT6SS.js";
|
|
19
|
+
import "./chunk-CQGTEGKL.js";
|
|
20
|
+
import "./chunk-BSTVRSV6.js";
|
|
21
|
+
import "./chunk-K44MW7JJ.js";
|
|
22
22
|
export {
|
|
23
23
|
activateProvider,
|
|
24
24
|
addProvider,
|
|
@@ -35,4 +35,4 @@ export {
|
|
|
35
35
|
setDefaultModelSelection,
|
|
36
36
|
trySmartDefaults
|
|
37
37
|
};
|
|
38
|
-
//# sourceMappingURL=config-
|
|
38
|
+
//# sourceMappingURL=config-5CONAOL7.js.map
|