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.
Files changed (65) hide show
  1. package/dist/{ask-3RK5YJZE.js → ask-5SSOA6SZ.js} +2 -2
  2. package/dist/{auth-LZZX63KI.js → auth-56SIRACI.js} +3 -6
  3. package/dist/auto-compaction-V3PA77WG.js +27 -0
  4. package/dist/{branch.api-XADFZZAA.js → branch.api-PWFW26KC.js} +2 -2
  5. package/dist/{chat-handler-KYMMXPP6.js → chat-handler-7DKHGTVO.js} +31 -29
  6. package/dist/{chunk-5UTTLO4D.js → chunk-5ZD3GZTK.js} +89 -49
  7. package/dist/{chunk-AFATQ5LJ.js → chunk-B5AP3RSV.js} +1 -1
  8. package/dist/{chunk-22CTURMH.js → chunk-BJYPTN5S.js} +1 -1
  9. package/dist/{chunk-DLINTLB7.js → chunk-BSTVRSV6.js} +7 -5
  10. package/dist/{chunk-7JPKRM6M.js → chunk-CMQCO27Y.js} +22 -12
  11. package/dist/{chunk-R4HADRYO.js → chunk-CQGTEGKL.js} +1 -1
  12. package/dist/{chunk-J5DV33SS.js → chunk-CUDAT6SS.js} +46 -18
  13. package/dist/{chunk-ETIXH35K.js → chunk-H5EICXF3.js} +499 -277
  14. package/dist/{chunk-XIZ6B6IS.js → chunk-K2V7EW5F.js} +541 -299
  15. package/dist/{chunk-PNBH3RAX.js → chunk-K44MW7JJ.js} +1 -1
  16. package/dist/{chunk-BLNFJ22S.js → chunk-KIOUKC3Z.js} +6 -4
  17. package/dist/{chunk-4CQ7CUQ6.js → chunk-LCQ3MPXD.js} +5 -5
  18. package/dist/{chunk-CTAIXOZJ.js → chunk-NDJ6FKSP.js} +1 -1
  19. package/dist/{chunk-IA4O65CR.js → chunk-NHJ2GVCF.js} +100 -68
  20. package/dist/{chunk-GQZGIMJO.js → chunk-OXI26S7U.js} +12 -7
  21. package/dist/{chunk-NBU6KIOD.js → chunk-PBGOZMVY.js} +4 -4
  22. package/dist/{chunk-B7E3BICY.js → chunk-RGRBWDZP.js} +2 -4
  23. package/dist/{chunk-VIGOXEZG.js → chunk-RQ4XSKUR.js} +15 -16
  24. package/dist/{chunk-KFBIHS3S.js → chunk-STYHKCG7.js} +20 -14
  25. package/dist/{chunk-55Z3DJ7G.js → chunk-TGWEH2BC.js} +10 -11
  26. package/dist/{chunk-TYUNDOX2.js → chunk-UKMRZDWM.js} +90 -41
  27. package/dist/{chunk-PFRQO5Z3.js → chunk-VAMTEAYI.js} +49 -27
  28. package/dist/{chunk-574HZVLE.js → chunk-VRGRAQDG.js} +2 -2
  29. package/dist/{chunk-JQBTYHUR.js → chunk-WR6QCJJO.js} +53 -15
  30. package/dist/{chunk-RBPOAAIZ.js → chunk-XKIEDGQF.js} +22 -18
  31. package/dist/cli/dev.js +2 -2
  32. package/dist/cli/index.js +2 -2
  33. package/dist/{config-6T4EHAP2.js → config-5CONAOL7.js} +7 -7
  34. package/dist/{events-LKEZ3YCW.js → events-BDXQOC7F.js} +6 -6
  35. package/dist/{folding-JN2WT44N.js → folding-2HW7FIKL.js} +2 -2
  36. package/dist/{inspect-proxy-Y4MRAVB7.js → inspect-proxy-Y75AXMRX.js} +3 -3
  37. package/dist/{manager-HM2J5VMW.js → manager-W7N3XQ4Q.js} +3 -3
  38. package/dist/orchestrator-KCHEENHK.js +43 -0
  39. package/dist/package.json +19 -3
  40. package/dist/{paths-ZRI56O63.js → paths-X46PPOI2.js} +2 -2
  41. package/dist/{processor-23O4HPSS.js → processor-6TS37IYH.js} +15 -11
  42. package/dist/{project-creator-LASKNQPA.js → project-creator-VD7MLOWE.js} +8 -5
  43. package/dist/{projects-HEUOWNSR.js → projects-XLMSDFTQ.js} +4 -4
  44. package/dist/{protocol-5AWNGFLH.js → protocol-4CTV7OZC.js} +3 -3
  45. package/dist/{protocol-DRBnujwe.d.ts → protocol-4xbfAlGO.d.ts} +3 -0
  46. package/dist/{provider-AKN355YH.js → provider-ESEBV3LL.js} +15 -11
  47. package/dist/{pwa-GHQCMCIU.js → pwa-76XP2DY2.js} +2 -2
  48. package/dist/{runtime-config-ZCK74XKM.js → runtime-config-CBJJJGBD.js} +2 -2
  49. package/dist/{serve-TW63YCNQ.js → serve-OLDABBV3.js} +29 -27
  50. package/dist/server/index.d.ts +6 -1
  51. package/dist/server/index.js +22 -22
  52. package/dist/server/public/__inspect__.js +2 -1
  53. package/dist/{service-74Z7JK2J.js → service-D6LC3CAM.js} +3 -2
  54. package/dist/{settings-NI4ITGV6.js → settings-TQNQB56H.js} +4 -4
  55. package/dist/shared/index.d.ts +2 -2
  56. package/dist/shared/index.js +2 -2
  57. package/dist/{store-2IF3ZSLD.js → store-OQ45KONN.js} +2 -2
  58. package/dist/{tools-RUAY6EVI.js → tools-BHYHS3RY.js} +18 -18
  59. package/dist/{vision-fallback-AXH3BGJC.js → vision-fallback-ED27LH6C.js} +3 -3
  60. package/dist/web/assets/{index-CWdKiSP8.js → index-DAuZ02-Q.js} +57 -57
  61. package/dist/web/index.html +1 -1
  62. package/dist/web/sw.js +1 -1
  63. package/package.json +19 -3
  64. package/dist/auto-compaction-OW4P2QWQ.js +0 -27
  65. package/dist/orchestrator-QP4O7MUM.js +0 -43
@@ -1,23 +1,19 @@
1
1
  import {
2
2
  detectModel
3
- } from "./chunk-55Z3DJ7G.js";
3
+ } from "./chunk-TGWEH2BC.js";
4
4
  import {
5
5
  detectBackend
6
- } from "./chunk-J5DV33SS.js";
6
+ } from "./chunk-CUDAT6SS.js";
7
7
  import {
8
8
  getGlobalConfigPath
9
- } from "./chunk-R4HADRYO.js";
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(["auto", "vllm", "sglang", "ollama", "llamacpp", "openai", "anthropic", "opencode-go", "unknown"]);
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
- id: model ?? "auto",
143
- contextWindow: maxContext,
144
- source: "user"
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
- id: oldConfig.llm.model || "auto",
187
- contextWindow: oldConfig.llm.maxContext,
188
- source: "user"
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 ?? { enabled: false, url: "http://localhost:11434", model: "qwen3-vl:2b", timeout: 120 }
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 ?? { enabled: false, url: "http://localhost:11434", model: "qwen3-vl:2b", timeout: 120 }
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 ?? { enabled: false, url: "http://localhost:11434", model: "qwen3-vl:2b", timeout: 120 }
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 ?? { enabled: false, url: "http://localhost:11434", model: "qwen3-vl:2b", timeout: 120 }
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 ?? { enabled: false, url: "http://localhost:11434", model: "qwen3-vl:2b", timeout: 120 }
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 ?? { enabled: false, url: "http://localhost:11434", model: "qwen3-vl:2b", timeout: 120 }
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((acc, curr) => {
355
- if (curr.llm) {
356
- acc.llm = { ...acc.llm, ...curr.llm };
357
- }
358
- if (curr.server) {
359
- acc.server = { ...acc.server, ...curr.server };
360
- }
361
- if (curr.logging) {
362
- acc.logging = { ...acc.logging, ...curr.logging };
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
- return acc;
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-TYUNDOX2.js.map
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) => ({ ...tc, ...tc.result ? { result: { ...tc.result } } : {} }));
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(toolCall.result.success ? toolCall.result.output ?? "Success" : toolCall.result.output ? `${toolCall.result.output}
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, { timestampAsNumber: true });
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(data.result.success ? data.result.output ?? "Success" : data.result.output ? `${data.result.output}
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
- id: crypto.randomUUID(),
376
- filename: imageMeta.path ?? "image",
377
- mimeType: imageMeta.mimeType,
378
- size: imageMeta.size ?? 0,
379
- data: imageMeta.dataUrl
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 = { seq: event.seq, mode: snapshotData.lastModeWithReminder };
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
- let visionFallbacks = [];
608
- let formatRetries = [];
627
+ const visionFallbacks = [];
628
+ const formatRetries = [];
609
629
  let pendingUserInput;
610
630
  let taskStats;
611
- let messageStats = [];
612
- let contextWindows = [];
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((v) => v.messageId === data.messageId && v.attachmentId === data.attachmentId);
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-PFRQO5Z3.js.map
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-574HZVLE.js.map
149
+ //# sourceMappingURL=chunk-VRGRAQDG.js.map
@@ -3,14 +3,14 @@ import {
3
3
  createLLMClient,
4
4
  detectModel,
5
5
  setLlmStatus
6
- } from "./chunk-55Z3DJ7G.js";
6
+ } from "./chunk-TGWEH2BC.js";
7
7
  import {
8
8
  detectBackend,
9
9
  getModelProfile
10
- } from "./chunk-J5DV33SS.js";
10
+ } from "./chunk-CUDAT6SS.js";
11
11
  import {
12
12
  logger
13
- } from "./chunk-PNBH3RAX.js";
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", { url: baseUrl, error: error instanceof Error ? error.message : String(error) });
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", { providers: providers.map((p) => ({ id: p.id, models: p.models.map((m) => ({ id: m.id, contextWindow: m.contextWindow, source: m.source })) })) });
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", { providerId, backendModelsCount: modelsWithContext.length, userModelsCount: userModels.length });
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", { providerId, userModelsCount: userModels.length });
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 ? { ...p, models: p.models.map((m, i) => i === modelIndex ? { ...m, contextWindow, source: "user" } : m) } : p
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: { temperature: finalTemp, topP: finalTopP, topK: finalTopK, maxTokens: finalMaxTokens, supportsVision: finalSupportsVision }
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", { providerId, userModelsCount: userModels.length, backendModelsCount: modelsWithContext.length });
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", { providerId, userModels: userModels.map((m) => ({ id: m.id, contextWindow: m.contextWindow })) });
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-JQBTYHUR.js.map
512
+ //# sourceMappingURL=chunk-WR6QCJJO.js.map
@@ -1,12 +1,22 @@
1
1
  import {
2
2
  logger
3
- } from "./chunk-PNBH3RAX.js";
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(buildResponse(400, { "Content-Type": "application/json" }, Buffer.from('{"error":"Invalid request"}')));
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
- let bodyBuf = [];
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 newH = { ...resHeaders };
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) modified = Buffer.concat([dechunks.slice(0, bi), Buffer.from(INJECT_SCRIPT, "utf8"), dechunks.slice(bi)]);
250
- else if (hi >= 0) modified = Buffer.concat([dechunks.slice(0, hi), Buffer.from(INJECT_SCRIPT, "utf8"), dechunks.slice(hi)]);
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 newH = { ...resHeaders, "content-type": "text/html; charset=utf-8" };
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-RBPOAAIZ.js.map
297
+ //# sourceMappingURL=chunk-XKIEDGQF.js.map
package/dist/cli/dev.js CHANGED
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runCli
4
- } from "../chunk-VIGOXEZG.js";
4
+ } from "../chunk-RQ4XSKUR.js";
5
5
  import {
6
6
  logger
7
- } from "../chunk-PNBH3RAX.js";
7
+ } from "../chunk-K44MW7JJ.js";
8
8
 
9
9
  // src/cli/dev.ts
10
10
  import { readFileSync } from "fs";
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-VIGOXEZG.js";
4
+ } from "../chunk-RQ4XSKUR.js";
5
5
  import {
6
6
  logger
7
- } from "../chunk-PNBH3RAX.js";
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-TYUNDOX2.js";
17
- import "./chunk-55Z3DJ7G.js";
18
- import "./chunk-J5DV33SS.js";
19
- import "./chunk-R4HADRYO.js";
20
- import "./chunk-DLINTLB7.js";
21
- import "./chunk-PNBH3RAX.js";
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-6T4EHAP2.js.map
38
+ //# sourceMappingURL=config-5CONAOL7.js.map