openfox 1.6.21 → 1.6.23

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 (28) hide show
  1. package/README.md +46 -13
  2. package/dist/{auto-compaction-U75EINMB.js → auto-compaction-7LK3QGPI.js} +4 -3
  3. package/dist/{chat-handler-JEMPI5UF.js → chat-handler-ZU74RXED.js} +6 -5
  4. package/dist/{chunk-HZP2V5Z6.js → chunk-4O3C2JMB.js} +5 -9
  5. package/dist/{chunk-AU33PQAB.js → chunk-BOEXJCOD.js} +2 -2
  6. package/dist/{chunk-6NPMZFMP.js → chunk-CJNQGEYG.js} +2 -2
  7. package/dist/{chunk-XYD5JXRM.js → chunk-D4ZLSV6P.js} +292 -1
  8. package/dist/{chunk-HWOYZ245.js → chunk-FTJPNCAV.js} +6 -6
  9. package/dist/{chunk-FX4SUY2S.js → chunk-KSASIV4B.js} +10 -287
  10. package/dist/{chunk-XRGMFOVG.js → chunk-P6GUT2QQ.js} +3 -3
  11. package/dist/{chunk-WINI5HX7.js → chunk-PYBB34ZK.js} +3 -3
  12. package/dist/{chunk-SJVEX2NR.js → chunk-YCQSAFAQ.js} +19 -19
  13. package/dist/cli/dev.js +1 -1
  14. package/dist/cli/index.js +1 -1
  15. package/dist/{config-SWDAJMQ3.js → config-ACVEHBKG.js} +5 -5
  16. package/dist/{orchestrator-T2IPRZ7B.js → orchestrator-OE7WFEW6.js} +5 -4
  17. package/dist/package.json +3 -3
  18. package/dist/{processor-VKFEOK46.js → processor-GAOK7TPI.js} +2 -2
  19. package/dist/{provider-CDM4LQAC.js → provider-RLQMVV2Z.js} +7 -7
  20. package/dist/{serve-X3PKC27B.js → serve-IBJ3SN3Q.js} +9 -9
  21. package/dist/server/index.js +7 -7
  22. package/dist/{tools-4ODVFMW7.js → tools-CSV7G554.js} +4 -3
  23. package/dist/{vision-fallback-VXGCQKLA.js → vision-fallback-QJ26DCEF.js} +2 -2
  24. package/dist/web/assets/{index-DHP3d5Cl.js → index-BrZqZwpA.js} +56 -54
  25. package/dist/web/assets/{index-B9-lT3Kc.css → index-DF26vcqg.css} +1 -1
  26. package/dist/web/index.html +2 -2
  27. package/dist/web/sw.js +1 -1
  28. package/package.json +3 -3
@@ -1,11 +1,14 @@
1
1
  import {
2
+ buildNonStreamingCreateParams,
3
+ buildStreamingCreateParams,
4
+ extractThinking,
2
5
  getBackendCapabilities,
3
- getModelProfile
4
- } from "./chunk-XYD5JXRM.js";
6
+ getModelProfile,
7
+ mapFinishReason
8
+ } from "./chunk-D4ZLSV6P.js";
5
9
  import {
6
- describeImageFromDataUrl,
7
10
  ensureVisionFallbackConfigLoaded
8
- } from "./chunk-6NPMZFMP.js";
11
+ } from "./chunk-CJNQGEYG.js";
9
12
  import {
10
13
  logger
11
14
  } from "./chunk-PNBH3RAX.js";
@@ -138,286 +141,6 @@ var LLMError = class extends OpenFoxError {
138
141
  }
139
142
  };
140
143
 
141
- // src/server/llm/client-pure.ts
142
- function buildAttachmentContent(msgContent, attachments, modelSupportsVision) {
143
- const content = [];
144
- if (msgContent?.trim()) {
145
- content.push({ type: "text", text: msgContent });
146
- }
147
- for (const attachment of attachments) {
148
- content.push(convertAttachmentSync(attachment, modelSupportsVision));
149
- }
150
- return content;
151
- }
152
- async function convertMessagesWithOptions(messages, profile, visionFallbackEnabled, signal, onVisionFallbackStart, onVisionFallbackDone) {
153
- const modelSupportsVision = profile.supportsVision ?? false;
154
- const options = {
155
- modelSupportsVision,
156
- visionFallbackEnabled,
157
- signal,
158
- onVisionFallbackStart,
159
- onVisionFallbackDone
160
- };
161
- return needsVisionFallback(messages, modelSupportsVision, visionFallbackEnabled) ? await convertMessagesWithFallback(messages, options) : convertMessages(messages, { modelSupportsVision, visionFallbackEnabled: false });
162
- }
163
- function convertToolCalls(toolCalls) {
164
- return toolCalls.map((toolCall) => ({
165
- id: toolCall.id,
166
- type: "function",
167
- function: {
168
- name: toolCall.name,
169
- arguments: JSON.stringify(toolCall.arguments)
170
- }
171
- }));
172
- }
173
- function convertAttachmentSync(attachment, modelSupportsVision) {
174
- if (modelSupportsVision) {
175
- return {
176
- type: "image_url",
177
- image_url: { url: attachment.data }
178
- };
179
- }
180
- return {
181
- type: "text",
182
- text: `[Image: ${attachment.filename || "image"}] (vision not supported, cannot describe)`
183
- };
184
- }
185
- function createAttachmentForConversion(data, filename, id) {
186
- return {
187
- data,
188
- ...filename !== void 0 && { filename },
189
- ...id !== void 0 && { id }
190
- };
191
- }
192
- async function convertAttachmentWithFallback(attachment, options) {
193
- logger.debug("[VisionFallback] convertAttachmentWithFallback called", { filename: attachment.filename, id: attachment.id, hasCallbacks: !!options.onVisionFallbackStart });
194
- if (options.modelSupportsVision) {
195
- logger.debug("[VisionFallback] Model supports vision - passing image directly");
196
- return {
197
- type: "image_url",
198
- image_url: { url: attachment.data }
199
- };
200
- }
201
- if (!options.visionFallbackEnabled) {
202
- logger.debug("[VisionFallback] Fallback disabled - returning placeholder");
203
- return {
204
- type: "text",
205
- text: `[Image: ${attachment.filename || "image"}] (vision not supported)`
206
- };
207
- }
208
- const attachmentId = attachment.id ?? crypto.randomUUID();
209
- const filename = attachment.filename;
210
- logger.debug("[VisionFallback] Starting delegation for:", { attachmentId, filename });
211
- options.onVisionFallbackStart?.(attachmentId, filename);
212
- const context = filename ? `File: ${filename}` : void 0;
213
- const description = await describeImageFromDataUrl(attachment.data, { context, signal: options.signal });
214
- logger.debug("[VisionFallback] Delegation complete:", { attachmentId, descriptionLength: description.length });
215
- options.onVisionFallbackDone?.(attachmentId, description);
216
- return {
217
- type: "text",
218
- text: `[Image: ${attachment.filename || "image"}] ${description}`
219
- };
220
- }
221
- async function buildAttachmentContentWithFallback(msgContent, attachments, options) {
222
- const content = [];
223
- if (msgContent?.trim()) {
224
- content.push({ type: "text", text: msgContent });
225
- }
226
- for (const attachment of attachments) {
227
- const convertedContent = await convertAttachmentWithFallback(
228
- createAttachmentForConversion(attachment.data, attachment.filename, attachment.id),
229
- options
230
- );
231
- content.push(convertedContent);
232
- }
233
- return content;
234
- }
235
- function convertMessages(messages, options) {
236
- const filtered = messages.filter((msg) => {
237
- return !(msg.role === "assistant" && !msg.content?.trim() && (!msg.toolCalls || msg.toolCalls.length === 0));
238
- });
239
- return filtered.map((msg) => {
240
- if (msg.role === "tool") {
241
- if (msg.attachments && msg.attachments.length > 0) {
242
- const content = buildAttachmentContent(msg.content, msg.attachments, options.modelSupportsVision);
243
- return {
244
- role: "tool",
245
- content,
246
- tool_call_id: msg.toolCallId
247
- };
248
- }
249
- return {
250
- role: "tool",
251
- content: msg.content,
252
- tool_call_id: msg.toolCallId
253
- };
254
- }
255
- if (msg.role === "assistant" && msg.toolCalls?.length) {
256
- return {
257
- role: "assistant",
258
- content: msg.content || null,
259
- tool_calls: convertToolCalls(msg.toolCalls)
260
- };
261
- }
262
- if (msg.role === "user" && msg.attachments && msg.attachments.length > 0) {
263
- const content = buildAttachmentContent(msg.content, msg.attachments, options.modelSupportsVision);
264
- return {
265
- role: "user",
266
- content
267
- };
268
- }
269
- return {
270
- role: msg.role,
271
- content: msg.content
272
- };
273
- });
274
- }
275
- async function convertMessagesWithFallback(messages, options) {
276
- logger.debug("[VisionFallback] convertMessagesWithFallback called", { messageCount: messages.length });
277
- const filtered = messages.filter((msg) => {
278
- return !(msg.role === "assistant" && !msg.content?.trim() && (!msg.toolCalls || msg.toolCalls.length === 0));
279
- });
280
- const converted = [];
281
- for (const msg of filtered) {
282
- if (msg.role === "tool") {
283
- if (msg.attachments && msg.attachments.length > 0) {
284
- const content = await buildAttachmentContentWithFallback(msg.content, msg.attachments, options);
285
- converted.push({
286
- role: "tool",
287
- content,
288
- tool_call_id: msg.toolCallId
289
- });
290
- } else {
291
- converted.push({
292
- role: "tool",
293
- content: msg.content,
294
- tool_call_id: msg.toolCallId
295
- });
296
- }
297
- continue;
298
- }
299
- if (msg.role === "assistant" && msg.toolCalls?.length) {
300
- converted.push({
301
- role: "assistant",
302
- content: msg.content || null,
303
- tool_calls: convertToolCalls(msg.toolCalls)
304
- });
305
- continue;
306
- }
307
- if (msg.role === "user" && msg.attachments && msg.attachments.length > 0) {
308
- const content = await buildAttachmentContentWithFallback(msg.content, msg.attachments, options);
309
- converted.push({
310
- role: "user",
311
- content
312
- });
313
- continue;
314
- }
315
- converted.push({
316
- role: msg.role,
317
- content: msg.content
318
- });
319
- }
320
- return converted;
321
- }
322
- function convertTools(tools) {
323
- return tools.map((tool) => ({
324
- type: "function",
325
- function: {
326
- name: tool.function.name,
327
- description: tool.function.description,
328
- parameters: tool.function.parameters
329
- }
330
- }));
331
- }
332
- function needsVisionFallback(messages, modelSupportsVision, visionFallbackEnabled) {
333
- const hasAttachments = messages.some(
334
- (msg) => msg.attachments && msg.attachments.length > 0 || msg.role === "tool" && msg.attachments && msg.attachments.length > 0
335
- );
336
- const result = hasAttachments && !modelSupportsVision && visionFallbackEnabled;
337
- logger.debug("[VisionFallback] needsVisionFallback check", {
338
- hasAttachments,
339
- modelSupportsVision,
340
- visionFallbackEnabled,
341
- result
342
- });
343
- return result;
344
- }
345
- async function buildChatCompletionCreateParams(model, request, profile, capabilities, disableThinking, visionFallbackEnabled, isStreaming, onVisionFallbackStart, onVisionFallbackDone) {
346
- const convertedMessages = await convertMessagesWithOptions(
347
- request.messages,
348
- profile,
349
- visionFallbackEnabled,
350
- request.signal,
351
- onVisionFallbackStart,
352
- onVisionFallbackDone
353
- );
354
- const temperature = request.temperature ?? profile.temperature;
355
- const maxTokens = request.maxTokens ?? profile.defaultMaxTokens;
356
- const topP = profile.topP;
357
- const topK = capabilities.supportsTopK ? profile.topK : void 0;
358
- const params = {
359
- model,
360
- messages: convertedMessages,
361
- ...request.tools ? { tools: convertTools(request.tools) } : {},
362
- ...request.toolChoice ? { tool_choice: request.toolChoice } : {},
363
- temperature,
364
- max_tokens: maxTokens,
365
- top_p: topP,
366
- stream: isStreaming,
367
- ...isStreaming ? { stream_options: { include_usage: true } } : {}
368
- };
369
- if (topK !== void 0) {
370
- ;
371
- params["top_k"] = topK;
372
- }
373
- const shouldDisableThinking = isStreaming ? disableThinking || request.disableThinking : disableThinking;
374
- if (capabilities.supportsChatTemplateKwargs && profile.supportsReasoning && shouldDisableThinking) {
375
- ;
376
- params["chat_template_kwargs"] = { enable_thinking: false };
377
- }
378
- const modelParams = {
379
- ...temperature !== void 0 && { temperature },
380
- ...topP !== void 0 && { topP },
381
- ...topK !== void 0 && { topK },
382
- ...maxTokens !== void 0 && { maxTokens }
383
- };
384
- return { params, modelParams };
385
- }
386
- async function buildCreateParamsFromInput(input, isStreaming) {
387
- const { model, request, profile, capabilities, disableThinking, visionFallbackEnabled = false, onVisionFallbackStart, onVisionFallbackDone } = input;
388
- return buildChatCompletionCreateParams(model, request, profile, capabilities, !!disableThinking, visionFallbackEnabled, isStreaming, onVisionFallbackStart, onVisionFallbackDone);
389
- }
390
- var buildNonStreamingCreateParams = (input) => buildCreateParamsFromInput(input, false);
391
- var buildStreamingCreateParams = (input) => buildCreateParamsFromInput(input, true);
392
- function mapFinishReason(reason) {
393
- switch (reason) {
394
- case "stop":
395
- return "stop";
396
- case "tool_calls":
397
- return "tool_calls";
398
- case "length":
399
- return "length";
400
- case "content_filter":
401
- return "content_filter";
402
- default:
403
- return "stop";
404
- }
405
- }
406
- function extractThinking(content) {
407
- const thinkRegex = /<think>([\s\S]*?)<\/think>/g;
408
- let thinkingContent = "";
409
- let cleanContent = content;
410
- let match;
411
- while ((match = thinkRegex.exec(content)) !== null) {
412
- thinkingContent += match[1];
413
- cleanContent = cleanContent.replace(match[0], "");
414
- }
415
- return {
416
- content: cleanContent.trim(),
417
- thinkingContent: thinkingContent.trim() || null
418
- };
419
- }
420
-
421
144
  // src/server/llm/client.ts
422
145
  function createLLMClient(config, initialBackend = "unknown") {
423
146
  const baseURL = config.llm.baseUrl.includes("/v1") ? config.llm.baseUrl : `${config.llm.baseUrl}/v1`;
@@ -468,7 +191,7 @@ function createLLMClient(config, initialBackend = "unknown") {
468
191
  try {
469
192
  const shouldDisableThinking = disableThinking || request.disableThinking === true;
470
193
  await ensureVisionFallbackConfigLoaded();
471
- const { isVisionFallbackEnabled } = await import("./vision-fallback-VXGCQKLA.js");
194
+ const { isVisionFallbackEnabled } = await import("./vision-fallback-QJ26DCEF.js");
472
195
  const paramsOptions = {
473
196
  model,
474
197
  request,
@@ -546,7 +269,7 @@ function createLLMClient(config, initialBackend = "unknown") {
546
269
  });
547
270
  try {
548
271
  await ensureVisionFallbackConfigLoaded();
549
- const { isVisionFallbackEnabled } = await import("./vision-fallback-VXGCQKLA.js");
272
+ const { isVisionFallbackEnabled } = await import("./vision-fallback-QJ26DCEF.js");
550
273
  const shouldDisableThinking = disableThinking || request.disableThinking === true;
551
274
  const createParams = await buildStreamingCreateParams({
552
275
  model,
@@ -760,4 +483,4 @@ export {
760
483
  setLlmStatus,
761
484
  clearModelCache
762
485
  };
763
- //# sourceMappingURL=chunk-FX4SUY2S.js.map
486
+ //# sourceMappingURL=chunk-KSASIV4B.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  detectModel
3
- } from "./chunk-FX4SUY2S.js";
3
+ } from "./chunk-KSASIV4B.js";
4
4
  import {
5
5
  detectBackend
6
- } from "./chunk-XYD5JXRM.js";
6
+ } from "./chunk-D4ZLSV6P.js";
7
7
  import {
8
8
  getGlobalConfigPath
9
9
  } from "./chunk-R4HADRYO.js";
@@ -386,4 +386,4 @@ export {
386
386
  activateProvider,
387
387
  mergeConfigs
388
388
  };
389
- //# sourceMappingURL=chunk-XRGMFOVG.js.map
389
+ //# sourceMappingURL=chunk-P6GUT2QQ.js.map
@@ -3,10 +3,10 @@ import {
3
3
  createLLMClient,
4
4
  detectModel,
5
5
  setLlmStatus
6
- } from "./chunk-FX4SUY2S.js";
6
+ } from "./chunk-KSASIV4B.js";
7
7
  import {
8
8
  detectBackend
9
- } from "./chunk-XYD5JXRM.js";
9
+ } from "./chunk-D4ZLSV6P.js";
10
10
  import {
11
11
  logger
12
12
  } from "./chunk-PNBH3RAX.js";
@@ -457,4 +457,4 @@ export {
457
457
  parseDefaultModelSelection,
458
458
  createProviderManager
459
459
  };
460
- //# sourceMappingURL=chunk-WINI5HX7.js.map
460
+ //# sourceMappingURL=chunk-PYBB34ZK.js.map
@@ -6,7 +6,7 @@ import {
6
6
  createVerifierNudgeConfig,
7
7
  runBuilderTurn,
8
8
  runChatTurn
9
- } from "./chunk-AU33PQAB.js";
9
+ } from "./chunk-BOEXJCOD.js";
10
10
  import {
11
11
  TurnMetrics,
12
12
  agentExists,
@@ -47,7 +47,7 @@ import {
47
47
  setSkillEnabled,
48
48
  skillExists,
49
49
  spawnShellProcess
50
- } from "./chunk-HZP2V5Z6.js";
50
+ } from "./chunk-4O3C2JMB.js";
51
51
  import {
52
52
  getPathSeparator,
53
53
  getPlatformShell,
@@ -57,18 +57,18 @@ import {
57
57
  import {
58
58
  createProviderManager,
59
59
  parseDefaultModelSelection
60
- } from "./chunk-WINI5HX7.js";
60
+ } from "./chunk-PYBB34ZK.js";
61
61
  import {
62
62
  SessionNotFoundError,
63
63
  createLLMClient,
64
64
  detectModel,
65
65
  getLlmStatus
66
- } from "./chunk-FX4SUY2S.js";
66
+ } from "./chunk-KSASIV4B.js";
67
67
  import {
68
68
  detectBackend,
69
69
  getBackendDisplayName,
70
70
  getModelProfile
71
- } from "./chunk-XYD5JXRM.js";
71
+ } from "./chunk-D4ZLSV6P.js";
72
72
  import {
73
73
  createSession,
74
74
  deleteSession,
@@ -5479,7 +5479,7 @@ function createTerminalRoutes() {
5479
5479
  }
5480
5480
 
5481
5481
  // src/constants.ts
5482
- var VERSION = "1.6.21";
5482
+ var VERSION = "1.6.23";
5483
5483
 
5484
5484
  // src/server/index.ts
5485
5485
  var __dirname2 = dirname5(fileURLToPath4(import.meta.url));
@@ -5716,7 +5716,7 @@ async function createServerHandle(config) {
5716
5716
  return res.status(400).json({ error: "providerId is required" });
5717
5717
  }
5718
5718
  sessionManager.setSessionProvider(sessionId, providerId, model ?? "auto");
5719
- const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-SWDAJMQ3.js");
5719
+ const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-ACVEHBKG.js");
5720
5720
  const globalConfig = await loadGlobalConfig(config.mode ?? "production");
5721
5721
  const updatedConfig = setDefaultModelSelection(globalConfig, providerId, model ?? "auto");
5722
5722
  await saveGlobalConfig(config.mode ?? "production", updatedConfig);
@@ -5781,7 +5781,7 @@ async function createServerHandle(config) {
5781
5781
  if (!callId || approved === void 0) {
5782
5782
  return res.status(400).json({ error: "callId and approved are required" });
5783
5783
  }
5784
- const { providePathConfirmation: providePathConfirmation2 } = await import("./tools-4ODVFMW7.js");
5784
+ const { providePathConfirmation: providePathConfirmation2 } = await import("./tools-CSV7G554.js");
5785
5785
  const result = providePathConfirmation2(callId, approved, alwaysAllow);
5786
5786
  if (!result.found) {
5787
5787
  return res.status(404).json({ error: "No pending path confirmation with that ID" });
@@ -5806,7 +5806,7 @@ async function createServerHandle(config) {
5806
5806
  if (!callId || !answer) {
5807
5807
  return res.status(400).json({ error: "callId and answer are required" });
5808
5808
  }
5809
- const { provideAnswer: provideAnswer2 } = await import("./tools-4ODVFMW7.js");
5809
+ const { provideAnswer: provideAnswer2 } = await import("./tools-CSV7G554.js");
5810
5810
  const found = provideAnswer2(callId, answer);
5811
5811
  if (!found) {
5812
5812
  return res.status(404).json({ error: "No pending question with that ID" });
@@ -5842,8 +5842,8 @@ async function createServerHandle(config) {
5842
5842
  if (!session) {
5843
5843
  return res.status(404).json({ error: "Session not found" });
5844
5844
  }
5845
- const { stopSessionExecution } = await import("./chat-handler-JEMPI5UF.js");
5846
- const { cancelQuestionsForSession: cancelQuestionsForSession2, cancelPathConfirmationsForSession: cancelPathConfirmationsForSession2 } = await import("./tools-4ODVFMW7.js");
5845
+ const { stopSessionExecution } = await import("./chat-handler-ZU74RXED.js");
5846
+ const { cancelQuestionsForSession: cancelQuestionsForSession2, cancelPathConfirmationsForSession: cancelPathConfirmationsForSession2 } = await import("./tools-CSV7G554.js");
5847
5847
  stopSessionExecution(sessionId, sessionManager);
5848
5848
  abortSession(sessionId);
5849
5849
  cancelQuestionsForSession2(sessionId, "Session stopped by user");
@@ -5901,7 +5901,7 @@ async function createServerHandle(config) {
5901
5901
  let visionFallback;
5902
5902
  let globalWorkdir;
5903
5903
  try {
5904
- const { loadGlobalConfig, getVisionFallback } = await import("./config-SWDAJMQ3.js");
5904
+ const { loadGlobalConfig, getVisionFallback } = await import("./config-ACVEHBKG.js");
5905
5905
  const globalConfig = await loadGlobalConfig(config.mode ?? "production");
5906
5906
  const fallback = getVisionFallback(globalConfig);
5907
5907
  if (fallback) {
@@ -5980,7 +5980,7 @@ async function createServerHandle(config) {
5980
5980
  return res.status(400).json({ error: "name, url, and backend are required" });
5981
5981
  }
5982
5982
  try {
5983
- const { loadGlobalConfig, saveGlobalConfig, addProvider, setDefaultModelSelection } = await import("./config-SWDAJMQ3.js");
5983
+ const { loadGlobalConfig, saveGlobalConfig, addProvider, setDefaultModelSelection } = await import("./config-ACVEHBKG.js");
5984
5984
  const globalConfig = await loadGlobalConfig(config.mode ?? "production");
5985
5985
  const providerBackend = backend;
5986
5986
  const configWithProvider = addProvider(globalConfig, {
@@ -6013,7 +6013,7 @@ async function createServerHandle(config) {
6013
6013
  app.post("/api/init/config", async (req, res) => {
6014
6014
  const { workdir, visionFallback } = req.body;
6015
6015
  try {
6016
- const { loadGlobalConfig, saveGlobalConfig } = await import("./config-SWDAJMQ3.js");
6016
+ const { loadGlobalConfig, saveGlobalConfig } = await import("./config-ACVEHBKG.js");
6017
6017
  const globalConfig = await loadGlobalConfig(config.mode ?? "production");
6018
6018
  const updatedConfig = {
6019
6019
  ...globalConfig,
@@ -6041,7 +6041,7 @@ async function createServerHandle(config) {
6041
6041
  });
6042
6042
  app.delete("/api/providers/:id", async (req, res) => {
6043
6043
  const { id } = req.params;
6044
- const { loadGlobalConfig, saveGlobalConfig, removeProvider } = await import("./config-SWDAJMQ3.js");
6044
+ const { loadGlobalConfig, saveGlobalConfig, removeProvider } = await import("./config-ACVEHBKG.js");
6045
6045
  const globalConfig = await loadGlobalConfig(config.mode ?? "production");
6046
6046
  const updatedConfig = removeProvider(globalConfig, id);
6047
6047
  await saveGlobalConfig(config.mode ?? "production", updatedConfig);
@@ -6061,7 +6061,7 @@ async function createServerHandle(config) {
6061
6061
  return res.status(400).json({ error: result.error });
6062
6062
  }
6063
6063
  const llmClient = getLLMClient();
6064
- const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-SWDAJMQ3.js");
6064
+ const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-ACVEHBKG.js");
6065
6065
  const globalConfig = await loadGlobalConfig(config.mode ?? "production");
6066
6066
  const updatedConfig = setDefaultModelSelection(globalConfig, id, llmClient.getModel());
6067
6067
  await saveGlobalConfig(config.mode ?? "production", updatedConfig);
@@ -6092,7 +6092,7 @@ async function createServerHandle(config) {
6092
6092
  if (!result.success) {
6093
6093
  return res.status(400).json({ error: result.error });
6094
6094
  }
6095
- const { loadGlobalConfig, saveGlobalConfig } = await import("./config-SWDAJMQ3.js");
6095
+ const { loadGlobalConfig, saveGlobalConfig } = await import("./config-ACVEHBKG.js");
6096
6096
  const globalConfig = await loadGlobalConfig(config.mode ?? "production");
6097
6097
  const updatedProviders = providerManager.getProviders();
6098
6098
  const updatedConfig = {
@@ -6302,7 +6302,7 @@ async function createServerHandle(config) {
6302
6302
  providerManager
6303
6303
  );
6304
6304
  const wss = wssExports.wss;
6305
- const { QueueProcessor } = await import("./processor-VKFEOK46.js");
6305
+ const { QueueProcessor } = await import("./processor-GAOK7TPI.js");
6306
6306
  const queueProcessor = new QueueProcessor({
6307
6307
  sessionManager,
6308
6308
  providerManager,
@@ -6375,4 +6375,4 @@ export {
6375
6375
  createServerHandle,
6376
6376
  createServer
6377
6377
  };
6378
- //# sourceMappingURL=chunk-SJVEX2NR.js.map
6378
+ //# sourceMappingURL=chunk-YCQSAFAQ.js.map
package/dist/cli/dev.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runCli
4
- } from "../chunk-HWOYZ245.js";
4
+ } from "../chunk-FTJPNCAV.js";
5
5
  import {
6
6
  logger
7
7
  } from "../chunk-PNBH3RAX.js";
package/dist/cli/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runCli
4
- } from "../chunk-HWOYZ245.js";
4
+ } from "../chunk-FTJPNCAV.js";
5
5
  import {
6
6
  logger
7
7
  } from "../chunk-PNBH3RAX.js";
@@ -13,11 +13,11 @@ import {
13
13
  saveGlobalConfig,
14
14
  setDefaultModelSelection,
15
15
  trySmartDefaults
16
- } from "./chunk-XRGMFOVG.js";
17
- import "./chunk-FX4SUY2S.js";
18
- import "./chunk-XYD5JXRM.js";
16
+ } from "./chunk-P6GUT2QQ.js";
17
+ import "./chunk-KSASIV4B.js";
18
+ import "./chunk-D4ZLSV6P.js";
19
19
  import "./chunk-R4HADRYO.js";
20
- import "./chunk-6NPMZFMP.js";
20
+ import "./chunk-CJNQGEYG.js";
21
21
  import "./chunk-PNBH3RAX.js";
22
22
  export {
23
23
  activateProvider,
@@ -35,4 +35,4 @@ export {
35
35
  setDefaultModelSelection,
36
36
  trySmartDefaults
37
37
  };
38
- //# sourceMappingURL=config-SWDAJMQ3.js.map
38
+ //# sourceMappingURL=config-ACVEHBKG.js.map
@@ -3,7 +3,7 @@ import {
3
3
  runBuilderTurn,
4
4
  runChatTurn,
5
5
  runVerifierTurn
6
- } from "./chunk-AU33PQAB.js";
6
+ } from "./chunk-BOEXJCOD.js";
7
7
  import {
8
8
  TurnMetrics,
9
9
  createChatDoneEvent,
@@ -11,10 +11,10 @@ import {
11
11
  createMessageStartEvent,
12
12
  createToolCallEvent,
13
13
  createToolResultEvent
14
- } from "./chunk-HZP2V5Z6.js";
14
+ } from "./chunk-4O3C2JMB.js";
15
15
  import "./chunk-NBU6KIOD.js";
16
16
  import "./chunk-574HZVLE.js";
17
- import "./chunk-XYD5JXRM.js";
17
+ import "./chunk-D4ZLSV6P.js";
18
18
  import "./chunk-PMDJEJYY.js";
19
19
  import "./chunk-EEPU4INU.js";
20
20
  import "./chunk-DZHZ3UUR.js";
@@ -25,6 +25,7 @@ import "./chunk-3EHGGBWE.js";
25
25
  import "./chunk-Y6HBEACI.js";
26
26
  import "./chunk-R4HADRYO.js";
27
27
  import "./chunk-TVQOONDR.js";
28
+ import "./chunk-CJNQGEYG.js";
28
29
  import "./chunk-PNBH3RAX.js";
29
30
  export {
30
31
  TurnMetrics,
@@ -38,4 +39,4 @@ export {
38
39
  runChatTurn,
39
40
  runVerifierTurn
40
41
  };
41
- //# sourceMappingURL=orchestrator-T2IPRZ7B.js.map
42
+ //# sourceMappingURL=orchestrator-OE7WFEW6.js.map
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "1.6.21",
3
+ "version": "1.6.23",
4
4
  "description": "Local-LLM-first agentic coding assistant",
5
5
  "type": "module",
6
6
  "bin": {
@@ -47,8 +47,8 @@
47
47
  "lint:fix": "eslint src/ --fix",
48
48
  "format": "prettier --check 'src/**/*.ts'",
49
49
  "format:fix": "prettier --write 'src/**/*.ts'",
50
- "duplicate:server": "jscpd src/server/ --ignore '**/*.test.ts'",
51
- "duplicate:web": "jscpd web/src/ --config .jscpd-web.json",
50
+ "duplicate:server": "jscpd src/server/ --ignore '**/*.test.ts' --threshold 0",
51
+ "duplicate:web": "jscpd web/src/ --config .jscpd-web.json --threshold 0",
52
52
  "duplicate": "npm run duplicate:server && npm run duplicate:web",
53
53
  "check": "npm run typecheck && npm run duplicate",
54
54
  "clean": "rm -rf dist",
@@ -175,7 +175,7 @@ var QueueProcessor = class {
175
175
  backend: provider?.backend ?? llmClient.getBackend(),
176
176
  model: llmClient.getModel()
177
177
  };
178
- const { runChatTurn } = await import("./orchestrator-T2IPRZ7B.js");
178
+ const { runChatTurn } = await import("./orchestrator-OE7WFEW6.js");
179
179
  const runChatTurnParams = buildRunChatTurnParams({
180
180
  sessionManager,
181
181
  sessionId,
@@ -208,4 +208,4 @@ var QueueProcessor = class {
208
208
  export {
209
209
  QueueProcessor
210
210
  };
211
- //# sourceMappingURL=processor-VKFEOK46.js.map
211
+ //# sourceMappingURL=processor-GAOK7TPI.js.map
@@ -5,18 +5,18 @@ import {
5
5
  loadGlobalConfig,
6
6
  removeProvider,
7
7
  saveGlobalConfig
8
- } from "./chunk-XRGMFOVG.js";
8
+ } from "./chunk-P6GUT2QQ.js";
9
9
  import {
10
10
  fetchAvailableModelsFromBackend
11
- } from "./chunk-WINI5HX7.js";
11
+ } from "./chunk-PYBB34ZK.js";
12
12
  import {
13
13
  detectModel
14
- } from "./chunk-FX4SUY2S.js";
14
+ } from "./chunk-KSASIV4B.js";
15
15
  import {
16
16
  detectBackend
17
- } from "./chunk-XYD5JXRM.js";
17
+ } from "./chunk-D4ZLSV6P.js";
18
18
  import "./chunk-R4HADRYO.js";
19
- import "./chunk-6NPMZFMP.js";
19
+ import "./chunk-CJNQGEYG.js";
20
20
  import "./chunk-PNBH3RAX.js";
21
21
 
22
22
  // src/cli/provider.ts
@@ -249,7 +249,7 @@ async function runProviderAdd(mode) {
249
249
  isActive: makeActive
250
250
  });
251
251
  if (makeActive) {
252
- const { setDefaultModelSelection } = await import("./config-SWDAJMQ3.js");
252
+ const { setDefaultModelSelection } = await import("./config-ACVEHBKG.js");
253
253
  newConfig = setDefaultModelSelection(newConfig, newConfig.providers[newConfig.providers.length - 1].id, selectedModel);
254
254
  }
255
255
  await saveGlobalConfig(mode, newConfig);
@@ -373,4 +373,4 @@ export {
373
373
  runProviderRemove,
374
374
  runProviderUse
375
375
  };
376
- //# sourceMappingURL=provider-CDM4LQAC.js.map
376
+ //# sourceMappingURL=provider-RLQMVV2Z.js.map