openfox 2.0.104 → 2.0.105

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 (38) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/CHANGELOG.md +16 -0
  3. package/dist/{chat-handler-G2ZJNAVB.js → chat-handler-CQIDZUR7.js} +7 -7
  4. package/dist/{chunk-5ZJYEINJ.js → chunk-5M45NHQ2.js} +2 -2
  5. package/dist/{chunk-WHJ67MO2.js → chunk-6IXRISXA.js} +2 -2
  6. package/dist/{chunk-XWW7LOU4.js → chunk-6XDKVVYS.js} +19 -19
  7. package/dist/{chunk-PKLWSTDB.js → chunk-AKUTOOSV.js} +12 -12
  8. package/dist/{chunk-W2KZ7H55.js → chunk-EIJFYENT.js} +3 -3
  9. package/dist/{chunk-YXIDKMBJ.js → chunk-FGYOSQUR.js} +2 -2
  10. package/dist/{chunk-3NVISPE7.js → chunk-KDJZGHSZ.js} +4 -4
  11. package/dist/{chunk-EFIC3TUX.js → chunk-LG57PZYL.js} +4 -4
  12. package/dist/{chunk-F766OIDT.js → chunk-PP3WNUA6.js} +2 -2
  13. package/dist/{chunk-HZXWVD5A.js → chunk-SGGFVTMP.js} +8 -8
  14. package/dist/chunk-UBF62JJI.js +7 -0
  15. package/dist/{chunk-2COWPTSJ.js → chunk-UUMJ5PAW.js} +4 -8
  16. package/dist/{chunk-KCED2X4H.js → chunk-WDJOSRIB.js} +12 -5
  17. package/dist/cli/dev.js +1 -1
  18. package/dist/cli/index.js +1 -1
  19. package/dist/{client-2EAJAGPC.js → client-XT4VHS7E.js} +3 -3
  20. package/dist/{client-pure-ONSVWEG5.js → client-pure-USVHN4WG.js} +2 -2
  21. package/dist/{compactor-IEYTUHYX.js → compactor-JMO7FHYA.js} +4 -4
  22. package/dist/{dynamic-context-Z5BU2RVP.js → dynamic-context-UJE6F7XT.js} +2 -2
  23. package/dist/{orchestrator-SYAYO6NS.js → orchestrator-Y2MBWVOB.js} +6 -6
  24. package/dist/package.json +1 -1
  25. package/dist/{processor-CBGV2K4E.js → processor-3IURFW2N.js} +6 -6
  26. package/dist/{provider-XCVHKXPS.js → provider-ZXYITGFU.js} +4 -4
  27. package/dist/{provider-manager-AUYP3QAM.js → provider-manager-QH5IIGHB.js} +4 -4
  28. package/dist/{serve-NPS4GJWH.js → serve-OYLEY3HD.js} +13 -13
  29. package/dist/server/index.js +12 -12
  30. package/dist/{server-FKM4FQKD.js → server-L6YS6A6J.js} +9 -9
  31. package/dist/skill-defaults/browser/SKILL.md +36 -22
  32. package/dist/{tools-KKALZLKX.js → tools-BG44DIYU.js} +4 -4
  33. package/dist/{update-7BEZMI4R.js → update-SOCIS7KO.js} +2 -2
  34. package/dist/web/assets/{index-BoWCT9PC.js → index-BHIT-lGU.js} +72 -72
  35. package/dist/web/index.html +1 -1
  36. package/dist/web/sw.js +1 -1
  37. package/package.json +1 -1
  38. package/dist/chunk-MLOCSFIW.js +0 -7
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.105 - 2026-08-01
4
+
5
+ ### Features
6
+
7
+ - **Keyboard scroll control** — arrow and page keys now steer auto-scroll: scrolling up detaches instantly, scrolling down snaps back on near the bottom.
8
+
9
+ ### Enhancements
10
+
11
+ - **Magnetic scrollbar handle** — dragging the scrollbar disables auto-scroll instantly and snaps it back on when you release near the end of the track.
12
+ - **Sharper vision-fallback descriptions** — image descriptions now arrive in a clear delimited block, prompted to capture verbatim text and tables.
13
+
14
+ ### Bug Fixes
15
+
16
+ - **Auto-scroll no longer detaches mid-stream** — following now holds steady through slow or bursty output, with no more random let-go.
17
+ - **Provider/model switch now rebinds the LLM client** — switching no longer reuses the previous provider's connection.
18
+
3
19
  ## 2.0.104 - 2026-07-31
4
20
 
5
21
  ### Features
package/dist/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.105 - 2026-08-01
4
+
5
+ ### Features
6
+
7
+ - **Keyboard scroll control** — arrow and page keys now steer auto-scroll: scrolling up detaches instantly, scrolling down snaps back on near the bottom.
8
+
9
+ ### Enhancements
10
+
11
+ - **Magnetic scrollbar handle** — dragging the scrollbar disables auto-scroll instantly and snaps it back on when you release near the end of the track.
12
+ - **Sharper vision-fallback descriptions** — image descriptions now arrive in a clear delimited block, prompted to capture verbatim text and tables.
13
+
14
+ ### Bug Fixes
15
+
16
+ - **Auto-scroll no longer detaches mid-stream** — following now holds steady through slow or bursty output, with no more random let-go.
17
+ - **Provider/model switch now rebinds the LLM client** — switching no longer reuses the previous provider's connection.
18
+
3
19
  ## 2.0.104 - 2026-07-31
4
20
 
5
21
  ### Features
@@ -2,14 +2,14 @@ import {
2
2
  buildRunChatTurnParams,
3
3
  finalizeTurnCompletion,
4
4
  generateSessionNameForSession
5
- } from "./chunk-WHJ67MO2.js";
5
+ } from "./chunk-6IXRISXA.js";
6
6
  import {
7
7
  runChatTurn
8
- } from "./chunk-3NVISPE7.js";
9
- import "./chunk-W2KZ7H55.js";
10
- import "./chunk-PKLWSTDB.js";
8
+ } from "./chunk-KDJZGHSZ.js";
9
+ import "./chunk-EIJFYENT.js";
10
+ import "./chunk-AKUTOOSV.js";
11
11
  import "./chunk-B76OP3OE.js";
12
- import "./chunk-5ZJYEINJ.js";
12
+ import "./chunk-5M45NHQ2.js";
13
13
  import "./chunk-J27BLIPY.js";
14
14
  import "./chunk-ZASSAZ73.js";
15
15
  import "./chunk-TFQSCHVU.js";
@@ -38,7 +38,7 @@ import "./chunk-6SIX7P6O.js";
38
38
  import "./chunk-J2GP3J3X.js";
39
39
  import "./chunk-V4IE7HJY.js";
40
40
  import "./chunk-YHEQTVFV.js";
41
- import "./chunk-KCED2X4H.js";
41
+ import "./chunk-WDJOSRIB.js";
42
42
  import "./chunk-SPA7PQPJ.js";
43
43
  import "./chunk-GLF65XDS.js";
44
44
  import "./chunk-K44MW7JJ.js";
@@ -166,4 +166,4 @@ export {
166
166
  startChatSession,
167
167
  stopSessionExecution
168
168
  };
169
- //# sourceMappingURL=chat-handler-G2ZJNAVB.js.map
169
+ //# sourceMappingURL=chat-handler-CQIDZUR7.js.map
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-YHEQTVFV.js";
10
10
  import {
11
11
  buildModelParams
12
- } from "./chunk-KCED2X4H.js";
12
+ } from "./chunk-WDJOSRIB.js";
13
13
  import {
14
14
  logger
15
15
  } from "./chunk-K44MW7JJ.js";
@@ -438,4 +438,4 @@ export {
438
438
  createChatDoneEvent,
439
439
  consumeStreamGenerator
440
440
  };
441
- //# sourceMappingURL=chunk-5ZJYEINJ.js.map
441
+ //# sourceMappingURL=chunk-5M45NHQ2.js.map
@@ -153,7 +153,7 @@ async function generateSessionNameForSession(sessionId, userMessage, deps, signa
153
153
  client = deps.getLLMClient();
154
154
  client.setModel(providerConfig.model);
155
155
  } else if (providerConfig) {
156
- const { createLLMClient } = await import("./client-2EAJAGPC.js");
156
+ const { createLLMClient } = await import("./client-XT4VHS7E.js");
157
157
  client = createLLMClient({
158
158
  llm: {
159
159
  baseUrl: providerConfig.baseUrl,
@@ -204,4 +204,4 @@ export {
204
204
  needsNameGeneration,
205
205
  generateSessionNameForSession
206
206
  };
207
- //# sourceMappingURL=chunk-WHJ67MO2.js.map
207
+ //# sourceMappingURL=chunk-6IXRISXA.js.map
@@ -21,7 +21,7 @@ import {
21
21
  tokenFromPassword,
22
22
  verifyPassword,
23
23
  workflowExists
24
- } from "./chunk-HZXWVD5A.js";
24
+ } from "./chunk-SGGFVTMP.js";
25
25
  import {
26
26
  openFolder
27
27
  } from "./chunk-62QCBNPE.js";
@@ -34,7 +34,7 @@ import {
34
34
  setMcpManagerForTools,
35
35
  setMcpTools,
36
36
  setNotifyMcpServersChanged
37
- } from "./chunk-PKLWSTDB.js";
37
+ } from "./chunk-AKUTOOSV.js";
38
38
  import {
39
39
  deleteOwnedSkill,
40
40
  deleteProjectSkill,
@@ -121,7 +121,7 @@ import {
121
121
  } from "./chunk-WWFH5GAR.js";
122
122
  import {
123
123
  VERSION
124
- } from "./chunk-MLOCSFIW.js";
124
+ } from "./chunk-UBF62JJI.js";
125
125
  import {
126
126
  clearWorkflowExecution,
127
127
  createSession,
@@ -170,7 +170,7 @@ import {
170
170
  detectModel,
171
171
  getLlmStatus,
172
172
  parseDefaultModelSelection
173
- } from "./chunk-2COWPTSJ.js";
173
+ } from "./chunk-UUMJ5PAW.js";
174
174
  import {
175
175
  getModelProfile
176
176
  } from "./chunk-V4IE7HJY.js";
@@ -5854,7 +5854,7 @@ async function createServerHandle(config3) {
5854
5854
  toolRegistry = createToolRegistry();
5855
5855
  logger.info("MCP tools registered", { count: mcpTools.length });
5856
5856
  }
5857
- const { signalMcpReady } = await import("./server-FKM4FQKD.js");
5857
+ const { signalMcpReady } = await import("./server-L6YS6A6J.js");
5858
5858
  signalMcpReady();
5859
5859
  });
5860
5860
  const app = express();
@@ -6352,7 +6352,7 @@ All file and git operations should use this branch.
6352
6352
  app.get("/api/sessions/:id", async (req, res) => {
6353
6353
  const { getEventStore: getEventStore2, combineEventsWithSnapshot } = await import("./events-BGVLDGLK.js");
6354
6354
  const { buildMessagesFromStoredEvents, foldPendingConfirmations } = await import("./folding-AJMZBHNR.js");
6355
- const { getPendingQuestionsForSession } = await import("./tools-KKALZLKX.js");
6355
+ const { getPendingQuestionsForSession } = await import("./tools-BG44DIYU.js");
6356
6356
  const { getMaxVisibleItems } = await import("./settings-TGCITCVA.js");
6357
6357
  const { getAgentModelOverride: getAgentModelOverride2 } = await import("./model-overrides-BLEFI7FQ.js");
6358
6358
  const { updateSessionProvider: updateSessionProvider2 } = await import("./sessions-ZV2WRC6K.js");
@@ -6394,8 +6394,8 @@ All file and git operations should use this branch.
6394
6394
  if (!session) {
6395
6395
  return res.status(404).json({ error: "Session not found" });
6396
6396
  }
6397
- const { stopSessionExecution } = await import("./chat-handler-G2ZJNAVB.js");
6398
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-KKALZLKX.js");
6397
+ const { stopSessionExecution } = await import("./chat-handler-CQIDZUR7.js");
6398
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-BG44DIYU.js");
6399
6399
  sessionManager.clearMessageQueue(sessionId);
6400
6400
  stopSessionExecution(sessionId, sessionManager);
6401
6401
  abortSession(sessionId);
@@ -6645,7 +6645,7 @@ All file and git operations should use this branch.
6645
6645
  if (alwaysAllow !== void 0 && typeof alwaysAllow !== "boolean") {
6646
6646
  return res.status(400).json({ error: "alwaysAllow must be a boolean if provided" });
6647
6647
  }
6648
- const { providePathConfirmation, getConfirmationSessionId } = await import("./tools-KKALZLKX.js");
6648
+ const { providePathConfirmation, getConfirmationSessionId } = await import("./tools-BG44DIYU.js");
6649
6649
  const pendingSessionId = getConfirmationSessionId(callId);
6650
6650
  if (!pendingSessionId) {
6651
6651
  return res.status(404).json({ error: "No pending path confirmation with that ID" });
@@ -6660,7 +6660,7 @@ All file and git operations should use this branch.
6660
6660
  const { getEventStore: getEventStore2, combineEventsWithSnapshot: combineEvents } = await import("./events-BGVLDGLK.js");
6661
6661
  const { buildMessagesFromStoredEvents, foldPendingConfirmations } = await import("./folding-AJMZBHNR.js");
6662
6662
  const { createSessionStateMessage } = await import("./protocol-YDNGGADL.js");
6663
- const { getPendingQuestionsForSession } = await import("./tools-KKALZLKX.js");
6663
+ const { getPendingQuestionsForSession } = await import("./tools-BG44DIYU.js");
6664
6664
  const { getMaxVisibleItems } = await import("./settings-TGCITCVA.js");
6665
6665
  const eventStore = getEventStore2();
6666
6666
  const { snapshot, events: eventsSinceSnapshot } = eventStore.getEventsSinceSnapshot(sessionId);
@@ -6697,7 +6697,7 @@ All file and git operations should use this branch.
6697
6697
  if (!skip && typeof answer !== "string") {
6698
6698
  return res.status(400).json({ error: "answer is required when not skipping" });
6699
6699
  }
6700
- const { provideAnswer } = await import("./tools-KKALZLKX.js");
6700
+ const { provideAnswer } = await import("./tools-BG44DIYU.js");
6701
6701
  const found = provideAnswer(callId, answer ?? "", skip ?? false);
6702
6702
  if (!found) {
6703
6703
  return res.status(404).json({ error: "No pending question with that ID" });
@@ -6762,7 +6762,7 @@ All file and git operations should use this branch.
6762
6762
  backend: activeProvider?.backend ?? llmClient.getBackend(),
6763
6763
  model: llmClient.getModel()
6764
6764
  };
6765
- const { runAgentTurn, TurnMetrics } = await import("./orchestrator-SYAYO6NS.js");
6765
+ const { runAgentTurn, TurnMetrics } = await import("./orchestrator-Y2MBWVOB.js");
6766
6766
  runAgentTurn(
6767
6767
  {
6768
6768
  sessionManager,
@@ -6800,8 +6800,8 @@ All file and git operations should use this branch.
6800
6800
  if (!session) {
6801
6801
  return res.status(404).json({ error: "Session not found" });
6802
6802
  }
6803
- const { stopSessionExecution } = await import("./chat-handler-G2ZJNAVB.js");
6804
- const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-KKALZLKX.js");
6803
+ const { stopSessionExecution } = await import("./chat-handler-CQIDZUR7.js");
6804
+ const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-BG44DIYU.js");
6805
6805
  const queuedMessages = sessionManager.getQueueState(sessionId);
6806
6806
  sessionManager.clearMessageQueue(sessionId);
6807
6807
  stopSessionExecution(sessionId, sessionManager);
@@ -7169,7 +7169,7 @@ All file and git operations should use this branch.
7169
7169
  const backend = req.query["backend"];
7170
7170
  if (!url) return res.status(400).json({ error: "url is required" });
7171
7171
  try {
7172
- const { fetchModelsWithContext } = await import("./provider-manager-AUYP3QAM.js");
7172
+ const { fetchModelsWithContext } = await import("./provider-manager-QH5IIGHB.js");
7173
7173
  const { getModelProfile: getModelProfile2 } = await import("./profiles-5J7F4BML.js");
7174
7174
  const models = await fetchModelsWithContext(
7175
7175
  url,
@@ -7239,7 +7239,7 @@ All file and git operations should use this branch.
7239
7239
  }
7240
7240
  const { getModelProfile: getModelProfile2 } = await import("./profiles-5J7F4BML.js");
7241
7241
  const { getBackendCapabilities } = await import("./backend-P3GHHLHJ.js");
7242
- const { buildNonStreamingCreateParams } = await import("./client-pure-ONSVWEG5.js");
7242
+ const { buildNonStreamingCreateParams } = await import("./client-pure-USVHN4WG.js");
7243
7243
  const { OpenAIHttpClient } = await import("./http-client-A7A4XWNK.js");
7244
7244
  const { ensureVersionPrefix } = await import("./url-utils-SAJP7AEX.js");
7245
7245
  const profile = getModelProfile2(model);
@@ -7590,7 +7590,7 @@ All file and git operations should use this branch.
7590
7590
  });
7591
7591
  async function rebuildMcpTools() {
7592
7592
  const { createMcpTools: createMcpTools2 } = await import("./tool-adapter-FEAHWU5C.js");
7593
- const { setMcpTools: setMcpTools2 } = await import("./tools-KKALZLKX.js");
7593
+ const { setMcpTools: setMcpTools2 } = await import("./tools-BG44DIYU.js");
7594
7594
  const mcpTools = createMcpTools2(mcpManager);
7595
7595
  setMcpTools2(mcpTools);
7596
7596
  toolRegistry = createToolRegistry();
@@ -8002,7 +8002,7 @@ All file and git operations should use this branch.
8002
8002
  const state = sessionManager.getContextState(sessionId);
8003
8003
  wssExports.broadcastForSession(sessionId, createContextStateMessage(state));
8004
8004
  });
8005
- const { QueueProcessor } = await import("./processor-CBGV2K4E.js");
8005
+ const { QueueProcessor } = await import("./processor-3IURFW2N.js");
8006
8006
  const queueProcessor = new QueueProcessor({
8007
8007
  sessionManager,
8008
8008
  providerManager,
@@ -8086,4 +8086,4 @@ export {
8086
8086
  createServerHandle,
8087
8087
  createServer
8088
8088
  };
8089
- //# sourceMappingURL=chunk-XWW7LOU4.js.map
8089
+ //# sourceMappingURL=chunk-6XDKVVYS.js.map
@@ -14,7 +14,7 @@ import {
14
14
  createToolCallEvent,
15
15
  createToolResultEvent,
16
16
  streamLLMPure
17
- } from "./chunk-5ZJYEINJ.js";
17
+ } from "./chunk-5M45NHQ2.js";
18
18
  import {
19
19
  COMPACTION_PROMPT,
20
20
  buildBasePrompt,
@@ -108,7 +108,7 @@ import {
108
108
  formatPdfErrorMessage,
109
109
  isPdfBuffer,
110
110
  processPdfContent
111
- } from "./chunk-KCED2X4H.js";
111
+ } from "./chunk-WDJOSRIB.js";
112
112
  import {
113
113
  SETTINGS_KEYS,
114
114
  getSetting
@@ -1919,7 +1919,7 @@ ${CONTINUE_PROMPT}` : CONTINUE_PROMPT;
1919
1919
  sessionManager.setCurrentContextSize(sessionId, result.usage.promptTokens, config.subAgentMetadata?.subAgentId);
1920
1920
  if (!compacting) {
1921
1921
  const contextState2 = sessionManager.getContextState(sessionId);
1922
- const { shouldCompact, appendCompactionPrompt } = await import("./compactor-IEYTUHYX.js");
1922
+ const { shouldCompact, appendCompactionPrompt } = await import("./compactor-JMO7FHYA.js");
1923
1923
  if (shouldCompact(
1924
1924
  contextState2.currentTokens,
1925
1925
  contextState2.maxTokens,
@@ -2185,13 +2185,13 @@ function createAssemblyResult(input) {
2185
2185
  }
2186
2186
 
2187
2187
  // src/server/llm/vision-fallback.ts
2188
- var IMAGE_PROMPT = `Describe this image in detail. Focus on:
2189
- - What the image shows (UI, diagram, photo, etc.)
2190
- - Any text visible in the image
2191
- - Layout and visual structure
2192
- - Key elements and their relationships
2188
+ var IMAGE_PROMPT = `Describe this image thoroughly and accurately. Include:
2189
+ - What the image shows (UI, diagram, photo, illustration, etc.)
2190
+ - All visible text, transcribed verbatim \u2014 every label, heading, number, and value
2191
+ - Spatial layout: where elements are positioned and how they relate
2192
+ - Colors, visual hierarchy, and any distinctive visual features
2193
2193
 
2194
- Provide a concise but comprehensive description.`;
2194
+ Be exhaustive rather than concise. Prioritize precision \u2014 if there are numbers, lists, or structured data, capture them completely. If the image contains a table or grid, reproduce it as a markdown table with exact values.`;
2195
2195
  function buildPrompt(context) {
2196
2196
  return context ? `${IMAGE_PROMPT}
2197
2197
 
@@ -2907,7 +2907,7 @@ var callSubAgentTool = {
2907
2907
  };
2908
2908
  }
2909
2909
  try {
2910
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-KKALZLKX.js");
2910
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-BG44DIYU.js");
2911
2911
  const toolRegistry = getToolRegistryForAgent2(agentDef);
2912
2912
  const turnMetrics = new TurnMetrics();
2913
2913
  const result = await executeSubAgent({
@@ -3929,7 +3929,7 @@ var mcpConfigTool = createTool(
3929
3929
  mcpNotifyChanged?.(sessionId);
3930
3930
  }
3931
3931
  async function rebuildTools() {
3932
- const { setMcpTools: setMcpTools2 } = await import("./tools-KKALZLKX.js");
3932
+ const { setMcpTools: setMcpTools2 } = await import("./tools-BG44DIYU.js");
3933
3933
  const mcpTools = createMcpTools(mcpManagerForTools);
3934
3934
  setMcpTools2(mcpTools);
3935
3935
  }
@@ -4604,4 +4604,4 @@ export {
4604
4604
  getToolRegistryForAgent,
4605
4605
  createToolRegistry
4606
4606
  };
4607
- //# sourceMappingURL=chunk-PKLWSTDB.js.map
4607
+ //# sourceMappingURL=chunk-AKUTOOSV.js.map
@@ -105,7 +105,7 @@ function resolveAgentDef(sessionManager, sessionId) {
105
105
  }
106
106
  async function buildCachedPrompt(sessionManager, sessionId, agentDef, modelName) {
107
107
  const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
108
- const { getToolRegistryForAgent } = await import("./tools-KKALZLKX.js");
108
+ const { getToolRegistryForAgent } = await import("./tools-BG44DIYU.js");
109
109
  const tools = getToolRegistryForAgent(agentDef, sessionId).definitions;
110
110
  const toolFingerprint = getToolFingerprint(tools);
111
111
  const allAgents = await loadAllAgentsDefault();
@@ -124,7 +124,7 @@ async function buildCachedPrompt(sessionManager, sessionId, agentDef, modelName)
124
124
  async function computeSessionHash(sessionManager, sessionId, modelName) {
125
125
  const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
126
126
  const agentDef = await resolveAgentDef(sessionManager, sessionId);
127
- const { getToolRegistryForAgent } = await import("./tools-KKALZLKX.js");
127
+ const { getToolRegistryForAgent } = await import("./tools-BG44DIYU.js");
128
128
  const tools = getToolRegistryForAgent(agentDef, sessionId).definitions;
129
129
  const toolFingerprint = getToolFingerprint(tools);
130
130
  return computeDynamicContextHash(instructionContent, skills, toolFingerprint, modelName);
@@ -148,4 +148,4 @@ export {
148
148
  computeSessionHash,
149
149
  applyDynamicContext
150
150
  };
151
- //# sourceMappingURL=chunk-W2KZ7H55.js.map
151
+ //# sourceMappingURL=chunk-EIJFYENT.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createMessageStartEvent
3
- } from "./chunk-5ZJYEINJ.js";
3
+ } from "./chunk-5M45NHQ2.js";
4
4
  import {
5
5
  COMPACTION_PROMPT
6
6
  } from "./chunk-J27BLIPY.js";
@@ -36,4 +36,4 @@ export {
36
36
  COMPACTION_MAX_RATIO,
37
37
  shouldCompact
38
38
  };
39
- //# sourceMappingURL=chunk-YXIDKMBJ.js.map
39
+ //# sourceMappingURL=chunk-FGYOSQUR.js.map
@@ -2,14 +2,14 @@ import {
2
2
  buildCachedPrompt,
3
3
  computeDynamicContextHash,
4
4
  getToolFingerprint
5
- } from "./chunk-W2KZ7H55.js";
5
+ } from "./chunk-EIJFYENT.js";
6
6
  import {
7
7
  createAssemblyResult,
8
8
  getConversationMessages,
9
9
  getToolRegistryForAgent,
10
10
  processEventsForConversation,
11
11
  runTopLevelAgentLoop
12
- } from "./chunk-PKLWSTDB.js";
12
+ } from "./chunk-AKUTOOSV.js";
13
13
  import {
14
14
  getAllInstructions,
15
15
  getEnabledSkillMetadata
@@ -18,7 +18,7 @@ import {
18
18
  TurnMetrics,
19
19
  createChatDoneEvent,
20
20
  createMessageStartEvent
21
- } from "./chunk-5ZJYEINJ.js";
21
+ } from "./chunk-5M45NHQ2.js";
22
22
  import {
23
23
  buildAgentReminder,
24
24
  buildAgentSmallReminder
@@ -321,4 +321,4 @@ export {
321
321
  runChatTurn,
322
322
  runAgentTurn
323
323
  };
324
- //# sourceMappingURL=chunk-3NVISPE7.js.map
324
+ //# sourceMappingURL=chunk-KDJZGHSZ.js.map
@@ -163,7 +163,7 @@ async function runCli(options) {
163
163
  break;
164
164
  }
165
165
  case "provider": {
166
- const { runProviderCommand } = await import("./provider-XCVHKXPS.js");
166
+ const { runProviderCommand } = await import("./provider-ZXYITGFU.js");
167
167
  const [, subcommand] = positionals;
168
168
  await runProviderCommand(mode, subcommand);
169
169
  break;
@@ -200,7 +200,7 @@ async function runCli(options) {
200
200
  break;
201
201
  }
202
202
  case "update": {
203
- const { runUpdate } = await import("./update-7BEZMI4R.js");
203
+ const { runUpdate } = await import("./update-SOCIS7KO.js");
204
204
  const code = await runUpdate();
205
205
  if (code !== 0) {
206
206
  process.exit(code);
@@ -213,7 +213,7 @@ async function runCli(options) {
213
213
  if (!configExists) {
214
214
  await runNetworkSetup(mode);
215
215
  }
216
- const { runServe } = await import("./serve-NPS4GJWH.js");
216
+ const { runServe } = await import("./serve-OYLEY3HD.js");
217
217
  const serveOptions = { mode };
218
218
  if (values.port) serveOptions.port = parseInt(values.port);
219
219
  if (values["no-browser"] === true) serveOptions.openBrowser = false;
@@ -225,4 +225,4 @@ async function runCli(options) {
225
225
  export {
226
226
  runCli
227
227
  };
228
- //# sourceMappingURL=chunk-EFIC3TUX.js.map
228
+ //# sourceMappingURL=chunk-LG57PZYL.js.map
@@ -13,7 +13,7 @@ import {
13
13
  getThinking,
14
14
  mapFinishReason,
15
15
  parseToolArguments
16
- } from "./chunk-KCED2X4H.js";
16
+ } from "./chunk-WDJOSRIB.js";
17
17
  import {
18
18
  LLMError,
19
19
  OpenAIHttpClient
@@ -310,4 +310,4 @@ function createLLMClient(config, initialBackend = "unknown") {
310
310
  export {
311
311
  createLLMClient
312
312
  };
313
- //# sourceMappingURL=chunk-F766OIDT.js.map
313
+ //# sourceMappingURL=chunk-PP3WNUA6.js.map
@@ -2,28 +2,28 @@ import {
2
2
  generateSessionNameForSession,
3
3
  getSessionMessageCount,
4
4
  needsNameGeneration
5
- } from "./chunk-WHJ67MO2.js";
5
+ } from "./chunk-6IXRISXA.js";
6
6
  import {
7
7
  runAgentTurn,
8
8
  runChatTurn
9
- } from "./chunk-3NVISPE7.js";
9
+ } from "./chunk-KDJZGHSZ.js";
10
10
  import {
11
11
  applyDynamicContext,
12
12
  computeSessionHash,
13
13
  computeUnifiedDiff
14
- } from "./chunk-W2KZ7H55.js";
14
+ } from "./chunk-EIJFYENT.js";
15
15
  import {
16
16
  appendCompactionPrompt
17
- } from "./chunk-YXIDKMBJ.js";
17
+ } from "./chunk-FGYOSQUR.js";
18
18
  import {
19
19
  devServerManager,
20
20
  executeSubAgent,
21
21
  getToolRegistryForAgent
22
- } from "./chunk-PKLWSTDB.js";
22
+ } from "./chunk-AKUTOOSV.js";
23
23
  import {
24
24
  TurnMetrics,
25
25
  createMessageStartEvent
26
- } from "./chunk-5ZJYEINJ.js";
26
+ } from "./chunk-5M45NHQ2.js";
27
27
  import {
28
28
  checkAborted,
29
29
  onProcessEvent,
@@ -2166,7 +2166,7 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
2166
2166
  const sessionId = client.activeSessionId;
2167
2167
  const session = sessionManager.requireSession(sessionId);
2168
2168
  try {
2169
- const { buildCachedPrompt } = await import("./dynamic-context-Z5BU2RVP.js");
2169
+ const { buildCachedPrompt } = await import("./dynamic-context-UJE6F7XT.js");
2170
2170
  const allAgents = await import("./registry-M2QVGRNK.js");
2171
2171
  const agentDef = allAgents.findAgentById(session.mode, await allAgents.loadAllAgentsDefault()) ?? allAgents.findAgentById("planner", await allAgents.loadAllAgentsDefault());
2172
2172
  const modelName = session.providerModel ?? _providerManager?.getCurrentModel();
@@ -2489,4 +2489,4 @@ export {
2489
2489
  signalMcpReady,
2490
2490
  createWebSocketServer
2491
2491
  };
2492
- //# sourceMappingURL=chunk-HZXWVD5A.js.map
2492
+ //# sourceMappingURL=chunk-SGGFVTMP.js.map
@@ -0,0 +1,7 @@
1
+ // src/constants.ts
2
+ var VERSION = "2.0.105";
3
+
4
+ export {
5
+ VERSION
6
+ };
7
+ //# sourceMappingURL=chunk-UBF62JJI.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createLLMClient
3
- } from "./chunk-F766OIDT.js";
3
+ } from "./chunk-PP3WNUA6.js";
4
4
  import {
5
5
  getModelProfile
6
6
  } from "./chunk-V4IE7HJY.js";
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-HNCM3D7Y.js";
15
15
  import {
16
16
  resolveAttachmentsInMessages
17
- } from "./chunk-KCED2X4H.js";
17
+ } from "./chunk-WDJOSRIB.js";
18
18
  import {
19
19
  logger
20
20
  } from "./chunk-K44MW7JJ.js";
@@ -629,13 +629,9 @@ function createProviderManager(config, options = {}) {
629
629
  return { success: false, error: "Provider not found" };
630
630
  }
631
631
  logger.info("Setting default model selection", { providerId, model, providerName: provider.name });
632
+ llmClient = createClientForProvider(provider, model);
632
633
  defaultModelSelection = `${providerId}/${model}`;
633
634
  providers = providers.map((p) => ({ ...p, isActive: p.id === providerId }));
634
- const currentProviderId = parseDefaultModelSelection(defaultModelSelection).providerId;
635
- if (currentProviderId === providerId) {
636
- llmClient.setModel(model);
637
- logger.info("Model updated", { providerId, model });
638
- }
639
635
  return { success: true };
640
636
  },
641
637
  getCurrentModelContext() {
@@ -808,4 +804,4 @@ export {
808
804
  parseDefaultModelSelection,
809
805
  createProviderManager
810
806
  };
811
- //# sourceMappingURL=chunk-2COWPTSJ.js.map
807
+ //# sourceMappingURL=chunk-UUMJ5PAW.js.map
@@ -336,6 +336,15 @@ function decodeDataUrl(data) {
336
336
  }
337
337
 
338
338
  // src/server/llm/resolve-attachments.ts
339
+ function formatVisionFallbackDescription(filename, description) {
340
+ return [
341
+ `[Image: ${filename || "image"}]`,
342
+ `You cannot see this image directly \u2014 a separate vision model produced the description below:`,
343
+ `<image_description>`,
344
+ description,
345
+ `</image_description>`
346
+ ].join("\n");
347
+ }
339
348
  var pdfBlockCache = /* @__PURE__ */ new Map();
340
349
  async function extractPdfFromDataUrl(data, filename) {
341
350
  const base64Match = data.match(/^data:.*?;base64,(.+)$/);
@@ -401,7 +410,7 @@ ${text}`;
401
410
  return `[File: ${attachment.filename || "file"} (unsupported type: ${mimeType})]`;
402
411
  }
403
412
  if (attachment.description) {
404
- return `[Image: ${attachment.filename || "image"} - description: ${attachment.description}]`;
413
+ return formatVisionFallbackDescription(attachment.filename, attachment.description);
405
414
  }
406
415
  return `[Image: ${attachment.filename || "image"}] (vision not supported, cannot describe)`;
407
416
  }
@@ -522,9 +531,7 @@ ${attachment.data}` }];
522
531
  return [{ type: "image_url", image_url: { url: attachment.data } }];
523
532
  }
524
533
  if (attachment.description) {
525
- return [
526
- { type: "text", text: `[Image: ${attachment.filename || "image"} - description: ${attachment.description}]` }
527
- ];
534
+ return [{ type: "text", text: formatVisionFallbackDescription(attachment.filename, attachment.description) }];
528
535
  }
529
536
  return [{ type: "text", text: `[Image: ${attachment.filename || "image"}] (vision not supported, cannot describe)` }];
530
537
  }
@@ -687,4 +694,4 @@ export {
687
694
  buildStreamingCreateParams,
688
695
  mapFinishReason
689
696
  };
690
- //# sourceMappingURL=chunk-KCED2X4H.js.map
697
+ //# sourceMappingURL=chunk-WDJOSRIB.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-EFIC3TUX.js";
4
+ } from "../chunk-LG57PZYL.js";
5
5
  import "../chunk-4H427UBV.js";
6
6
  import {
7
7
  logger
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-EFIC3TUX.js";
4
+ } from "../chunk-LG57PZYL.js";
5
5
  import "../chunk-4H427UBV.js";
6
6
  import {
7
7
  logger
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  createLLMClient
3
- } from "./chunk-F766OIDT.js";
3
+ } from "./chunk-PP3WNUA6.js";
4
4
  import "./chunk-V4IE7HJY.js";
5
5
  import "./chunk-YHEQTVFV.js";
6
6
  import "./chunk-HNCM3D7Y.js";
7
- import "./chunk-KCED2X4H.js";
7
+ import "./chunk-WDJOSRIB.js";
8
8
  import "./chunk-ERKPMNC7.js";
9
9
  import "./chunk-SPA7PQPJ.js";
10
10
  import "./chunk-GLF65XDS.js";
@@ -13,4 +13,4 @@ import "./chunk-5WRI5ZAA.js";
13
13
  export {
14
14
  createLLMClient
15
15
  };
16
- //# sourceMappingURL=client-2EAJAGPC.js.map
16
+ //# sourceMappingURL=client-XT4VHS7E.js.map
@@ -8,7 +8,7 @@ import {
8
8
  mapFinishReason,
9
9
  parseToolArguments,
10
10
  resolveAttachmentsInMessages
11
- } from "./chunk-KCED2X4H.js";
11
+ } from "./chunk-WDJOSRIB.js";
12
12
  import "./chunk-5WRI5ZAA.js";
13
13
  export {
14
14
  buildModelParams,
@@ -21,4 +21,4 @@ export {
21
21
  parseToolArguments,
22
22
  resolveAttachmentsInMessages
23
23
  };
24
- //# sourceMappingURL=client-pure-ONSVWEG5.js.map
24
+ //# sourceMappingURL=client-pure-USVHN4WG.js.map