openfox 2.0.14 → 2.0.16

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 (30) hide show
  1. package/dist/{chat-handler-ITXCBFJK.js → chat-handler-PC6OVDUR.js} +8 -6
  2. package/dist/{chunk-7GJ6XYAF.js → chunk-63UEI4AF.js} +20 -16
  3. package/dist/{chunk-4U45A7B3.js → chunk-DQ6SV26Y.js} +111 -45
  4. package/dist/{chunk-3QB2RMX2.js → chunk-F4PMNP7S.js} +2 -2
  5. package/dist/{chunk-TIKQWNYK.js → chunk-J7KOV4ST.js} +2 -2
  6. package/dist/{chunk-4ZTQO5JP.js → chunk-JO6RF2U2.js} +463 -15
  7. package/dist/{chunk-LNEBVOH6.js → chunk-OUK5IW26.js} +6 -6
  8. package/dist/{chunk-PP6VQXQW.js → chunk-SNQT7LNU.js} +2 -1
  9. package/dist/{chunk-4W2Z4B5U.js → chunk-WOTBK3QQ.js} +36 -41
  10. package/dist/{chunk-5BDVM6YI.js → chunk-YD6NDTKF.js} +1 -1
  11. package/dist/cli/dev.js +1 -1
  12. package/dist/cli/index.js +1 -1
  13. package/dist/{config-YFHA5MWV.js → config-Z66BQTNX.js} +2 -2
  14. package/dist/{orchestrator-VP74KOXI.js → orchestrator-3SB2BMQ7.js} +7 -5
  15. package/dist/package.json +3 -2
  16. package/dist/{processor-CCXZYLX6.js → processor-KWPYXPL7.js} +8 -6
  17. package/dist/{protocol-BE5dRtYw.d.ts → protocol-BC1QSQ-Y.d.ts} +7 -1
  18. package/dist/{protocol-YYWMFR35.js → protocol-BKNLAEPJ.js} +3 -3
  19. package/dist/{provider-QUJQLVOM.js → provider-YBTRC77Y.js} +3 -3
  20. package/dist/{serve-GA2UIHHB.js → serve-HZXJXK6T.js} +9 -9
  21. package/dist/server/index.d.ts +19 -1
  22. package/dist/server/index.js +8 -7
  23. package/dist/{server-EA6W7YIC.js → server-RYKKAOFF.js} +10 -8
  24. package/dist/shared/index.d.ts +2 -2
  25. package/dist/shared/index.js +1 -1
  26. package/dist/{tools-DUC54GEH.js → tools-Y7ZGLK7A.js} +6 -4
  27. package/dist/web/assets/{index-D0qVcBva.js → index-BMz5-yAf.js} +31 -31
  28. package/dist/web/index.html +1 -1
  29. package/dist/web/sw.js +1 -1
  30. package/package.json +3 -2
@@ -2,29 +2,29 @@ import {
2
2
  appendCompactionPrompt
3
3
  } from "./chunk-FWJ6YXGA.js";
4
4
  import {
5
- computeDynamicContextHash,
6
5
  injectWorkflowKickoffIfNeeded,
7
6
  runAgentTurn,
8
7
  runChatTurn
9
- } from "./chunk-7GJ6XYAF.js";
8
+ } from "./chunk-63UEI4AF.js";
10
9
  import {
10
+ applyDynamicContext,
11
11
  checkAborted,
12
+ computeDynamicContextHash,
12
13
  deleteItemFromDir,
13
14
  devServerManager,
14
15
  executeSubAgent,
15
16
  findAgentById,
16
17
  getAllInstructions,
17
18
  getEnabledSkillMetadata,
18
- getSubAgents,
19
+ getToolFingerprint,
19
20
  getToolRegistryForAgent,
20
21
  jsonSerializer,
21
22
  loadAllAgentsDefault,
22
23
  saveItemToDir,
23
24
  spawnShellProcess
24
- } from "./chunk-4ZTQO5JP.js";
25
+ } from "./chunk-JO6RF2U2.js";
25
26
  import {
26
27
  TurnMetrics,
27
- buildTopLevelSystemPrompt,
28
28
  createMessageStartEvent
29
29
  } from "./chunk-L7TDUIQY.js";
30
30
  import {
@@ -49,7 +49,7 @@ import {
49
49
  parseClientMessage,
50
50
  serializeServerMessage,
51
51
  storedEventToServerMessage
52
- } from "./chunk-3QB2RMX2.js";
52
+ } from "./chunk-F4PMNP7S.js";
53
53
  import {
54
54
  provideAnswer
55
55
  } from "./chunk-EU3WWTFH.js";
@@ -58,7 +58,7 @@ import {
58
58
  } from "./chunk-VUQCQXXJ.js";
59
59
  import {
60
60
  createServerMessage
61
- } from "./chunk-5BDVM6YI.js";
61
+ } from "./chunk-YD6NDTKF.js";
62
62
  import {
63
63
  getGlobalConfigDir
64
64
  } from "./chunk-CQGTEGKL.js";
@@ -1173,9 +1173,12 @@ async function isValidToken(token) {
1173
1173
  }
1174
1174
 
1175
1175
  // src/server/ws/server.ts
1176
- var _mcpManager;
1177
- function setMcpManagerForWs(mgr) {
1178
- _mcpManager = mgr;
1176
+ var resolveMcpReady = null;
1177
+ var mcpReadyPromise = new Promise((resolve) => {
1178
+ resolveMcpReady = resolve;
1179
+ });
1180
+ function signalMcpReady() {
1181
+ resolveMcpReady?.();
1179
1182
  }
1180
1183
  function moduleGitBranch(cwd) {
1181
1184
  return new Promise((resolve) => {
@@ -1687,7 +1690,8 @@ function createWebSocketServer(httpServer, config, getLLMClient, getActiveProvid
1687
1690
  return false;
1688
1691
  },
1689
1692
  close: (cb) => wss.close(cb),
1690
- broadcastForSession
1693
+ broadcastForSession,
1694
+ broadcastAll
1691
1695
  };
1692
1696
  }
1693
1697
  async function handleClientMessage(ws, client, message, _getLLMClient, _getActiveProvider, sessionManager, _broadcastForSession, _providerManager, _getSessionLLMClient, _getSessionStatsIdentity, llmForSession, statsForSession, _startTurnWithCompletionChain, cleanupAfterTurn, enqueueSendFn) {
@@ -1766,18 +1770,21 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
1766
1770
  ;
1767
1771
  (async () => {
1768
1772
  try {
1773
+ await mcpReadyPromise;
1769
1774
  const { content: instructionContent } = await getAllInstructions(session.workdir, session.projectId);
1770
1775
  const runtimeConfig = getRuntimeConfig();
1771
1776
  const configDir = getGlobalConfigDir(runtimeConfig.mode ?? "production");
1772
1777
  const skills = await getEnabledSkillMetadata(configDir, runtimeConfig.workdir);
1773
- const dynamicInputs = JSON.stringify({
1774
- instructions: instructionContent,
1775
- skills: skills.map((s) => s.id).sort()
1776
- });
1777
- const currentHash = createHash2("sha256").update(dynamicInputs).digest("hex");
1778
+ const { createToolRegistry } = await import("./tools-Y7ZGLK7A.js");
1779
+ const allTools = createToolRegistry().definitions;
1780
+ const toolFingerprint = getToolFingerprint(allTools);
1781
+ const currentHash = computeDynamicContextHash(instructionContent, skills, toolFingerprint);
1778
1782
  if (currentHash !== cachedHash) {
1779
1783
  sessionManager.setDynamicContextChanged(session.id, true);
1780
1784
  sendContextState();
1785
+ } else if (sessionManager.getDynamicContextChanged(session.id)) {
1786
+ sessionManager.setDynamicContextChanged(session.id, false);
1787
+ sendContextState();
1781
1788
  }
1782
1789
  } catch {
1783
1790
  }
@@ -1836,18 +1843,24 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
1836
1843
  const session = sessionManager.requireSession(sessionId);
1837
1844
  (async () => {
1838
1845
  try {
1846
+ await mcpReadyPromise;
1839
1847
  const { content: instructionContent } = await getAllInstructions(session.workdir, session.projectId);
1840
1848
  const runtimeConfig = getRuntimeConfig();
1841
1849
  const configDir = getGlobalConfigDir(runtimeConfig.mode ?? "production");
1842
1850
  const skills = await getEnabledSkillMetadata(configDir, runtimeConfig.workdir);
1843
- const mcpTools = _mcpManager ? _mcpManager.getToolDefinitions() : [];
1844
- const toolFingerprint = mcpTools.map(
1845
- (t) => `${t.function.name}:${JSON.stringify(t.function.parameters)}`
1846
- ).sort().join("|");
1851
+ const { createToolRegistry } = await import("./tools-Y7ZGLK7A.js");
1852
+ const allTools = createToolRegistry().definitions;
1853
+ const toolFingerprint = getToolFingerprint(allTools);
1847
1854
  const currentHash = computeDynamicContextHash(instructionContent, skills, toolFingerprint);
1848
1855
  const cachedHash = sessionManager.getCachedPrompt(sessionId)?.hash;
1849
1856
  if (cachedHash) {
1850
1857
  if (currentHash !== cachedHash) {
1858
+ logger.debug("checkDynamic: hash mismatch", {
1859
+ sessionId,
1860
+ cachedHash,
1861
+ currentHash,
1862
+ toolCount: allTools.length
1863
+ });
1851
1864
  if (!sessionManager.getDynamicContextChanged(sessionId)) {
1852
1865
  sessionManager.setDynamicContextChanged(sessionId, true);
1853
1866
  const newContextState = sessionManager.getContextState(sessionId);
@@ -1881,25 +1894,7 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
1881
1894
  ;
1882
1895
  (async () => {
1883
1896
  try {
1884
- const { content: instructionContent } = await getAllInstructions(session.workdir, session.projectId);
1885
- const runtimeConfig = getRuntimeConfig();
1886
- const configDir = getGlobalConfigDir(runtimeConfig.mode ?? "production");
1887
- const skills = await getEnabledSkillMetadata(configDir, runtimeConfig.workdir);
1888
- const mcpTools = _mcpManager ? _mcpManager.getToolDefinitions() : [];
1889
- const toolFingerprint = mcpTools.map(
1890
- (t) => `${t.function.name}:${JSON.stringify(t.function.parameters)}`
1891
- ).sort().join("|");
1892
- const dynamicHash = computeDynamicContextHash(instructionContent, skills, toolFingerprint);
1893
- const allAgents = await loadAllAgentsDefault();
1894
- const subAgentDefs = getSubAgents(allAgents);
1895
- const systemPrompt = buildTopLevelSystemPrompt(
1896
- session.workdir,
1897
- instructionContent || void 0,
1898
- skills,
1899
- subAgentDefs
1900
- );
1901
- sessionManager.setCachedPrompt(sessionId, systemPrompt, mcpTools, dynamicHash);
1902
- sessionManager.setDynamicContextChanged(sessionId, false);
1897
+ await applyDynamicContext(sessionManager, sessionId);
1903
1898
  const newContextState = sessionManager.getContextState(sessionId);
1904
1899
  sendForSession(sessionId, createContextStateMessage(newContextState));
1905
1900
  send({ type: "ack", payload: {}, id: message.id });
@@ -2071,7 +2066,7 @@ export {
2071
2066
  verifyPassword,
2072
2067
  tokenFromPassword,
2073
2068
  isValidToken,
2074
- setMcpManagerForWs,
2069
+ signalMcpReady,
2075
2070
  createWebSocketServer
2076
2071
  };
2077
- //# sourceMappingURL=chunk-4W2Z4B5U.js.map
2072
+ //# sourceMappingURL=chunk-WOTBK3QQ.js.map
@@ -26,4 +26,4 @@ export {
26
26
  isClientMessage,
27
27
  isServerMessage
28
28
  };
29
- //# sourceMappingURL=chunk-5BDVM6YI.js.map
29
+ //# sourceMappingURL=chunk-YD6NDTKF.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-LNEBVOH6.js";
4
+ } from "../chunk-OUK5IW26.js";
5
5
  import {
6
6
  logger
7
7
  } from "../chunk-K44MW7JJ.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-LNEBVOH6.js";
4
+ } from "../chunk-OUK5IW26.js";
5
5
  import {
6
6
  logger
7
7
  } from "../chunk-K44MW7JJ.js";
@@ -13,7 +13,7 @@ import {
13
13
  saveGlobalConfig,
14
14
  setDefaultModelSelection,
15
15
  updateProvider
16
- } from "./chunk-PP6VQXQW.js";
16
+ } from "./chunk-SNQT7LNU.js";
17
17
  import "./chunk-CQGTEGKL.js";
18
18
  export {
19
19
  activateProvider,
@@ -31,4 +31,4 @@ export {
31
31
  setDefaultModelSelection,
32
32
  updateProvider
33
33
  };
34
- //# sourceMappingURL=config-YFHA5MWV.js.map
34
+ //# sourceMappingURL=config-Z66BQTNX.js.map
@@ -2,8 +2,8 @@ import {
2
2
  injectWorkflowKickoffIfNeeded,
3
3
  runAgentTurn,
4
4
  runChatTurn
5
- } from "./chunk-7GJ6XYAF.js";
6
- import "./chunk-4ZTQO5JP.js";
5
+ } from "./chunk-63UEI4AF.js";
6
+ import "./chunk-JO6RF2U2.js";
7
7
  import "./chunk-XAMAYRDA.js";
8
8
  import {
9
9
  TurnMetrics,
@@ -16,13 +16,15 @@ import {
16
16
  import "./chunk-DL6ZILAF.js";
17
17
  import "./chunk-PBGOZMVY.js";
18
18
  import "./chunk-VRGRAQDG.js";
19
+ import "./chunk-NWO6GRYE.js";
19
20
  import "./chunk-SYG2ENUQ.js";
20
21
  import "./chunk-LX66KJPL.js";
21
- import "./chunk-3QB2RMX2.js";
22
+ import "./chunk-F4PMNP7S.js";
22
23
  import "./chunk-EU3WWTFH.js";
23
24
  import "./chunk-RFNEDBVO.js";
24
25
  import "./chunk-FBGWG4N6.js";
25
- import "./chunk-5BDVM6YI.js";
26
+ import "./chunk-YD6NDTKF.js";
27
+ import "./chunk-SNQT7LNU.js";
26
28
  import "./chunk-CQGTEGKL.js";
27
29
  import "./chunk-Z4SWOUWC.js";
28
30
  import "./chunk-K44MW7JJ.js";
@@ -37,4 +39,4 @@ export {
37
39
  runAgentTurn,
38
40
  runChatTurn
39
41
  };
40
- //# sourceMappingURL=orchestrator-VP74KOXI.js.map
42
+ //# sourceMappingURL=orchestrator-3SB2BMQ7.js.map
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "2.0.14",
3
+ "version": "2.0.16",
4
4
  "description": "Local-LLM-first agentic coding assistant",
5
5
  "type": "module",
6
6
  "bin": {
@@ -71,7 +71,9 @@
71
71
  "gray-matter": "^4.0.3",
72
72
  "html2canvas": "^1.4.1",
73
73
  "http-proxy": "^1.18.1",
74
+ "iconv-lite": "^0.7.2",
74
75
  "ignore": "^7.0.5",
76
+ "jschardet": "^3.1.4",
75
77
  "node-pty": "^1.2.0-beta.12",
76
78
  "open": "^11.0.0",
77
79
  "openai": "^6.33.0",
@@ -80,7 +82,6 @@
80
82
  "react-syntax-highlighter": "^16.1.1",
81
83
  "remark-gfm": "^4.0.1",
82
84
  "shiki": "^4.2.0",
83
- "sql-language-server": "^1.7.1",
84
85
  "strip-ansi": "^7.2.0",
85
86
  "turndown": "^7.2.2",
86
87
  "typescript": "^5.8.2",
@@ -5,13 +5,14 @@ import {
5
5
  generateSessionName,
6
6
  getSessionMessageCount,
7
7
  needsNameGenerationCheck
8
- } from "./chunk-TIKQWNYK.js";
9
- import "./chunk-4ZTQO5JP.js";
8
+ } from "./chunk-J7KOV4ST.js";
9
+ import "./chunk-JO6RF2U2.js";
10
10
  import "./chunk-XAMAYRDA.js";
11
11
  import "./chunk-L7TDUIQY.js";
12
12
  import "./chunk-DL6ZILAF.js";
13
13
  import "./chunk-PBGOZMVY.js";
14
14
  import "./chunk-VRGRAQDG.js";
15
+ import "./chunk-NWO6GRYE.js";
15
16
  import {
16
17
  getEventStore
17
18
  } from "./chunk-SYG2ENUQ.js";
@@ -19,11 +20,12 @@ import "./chunk-LX66KJPL.js";
19
20
  import {
20
21
  createChatMessageMessage,
21
22
  createSessionRunningMessage
22
- } from "./chunk-3QB2RMX2.js";
23
+ } from "./chunk-F4PMNP7S.js";
23
24
  import "./chunk-EU3WWTFH.js";
24
25
  import "./chunk-RFNEDBVO.js";
25
26
  import "./chunk-FBGWG4N6.js";
26
- import "./chunk-5BDVM6YI.js";
27
+ import "./chunk-YD6NDTKF.js";
28
+ import "./chunk-SNQT7LNU.js";
27
29
  import "./chunk-CQGTEGKL.js";
28
30
  import "./chunk-Z4SWOUWC.js";
29
31
  import {
@@ -191,7 +193,7 @@ var QueueProcessor = class {
191
193
  backend: provider?.backend ?? llmClient.getBackend(),
192
194
  model: llmClient.getModel()
193
195
  };
194
- const { runChatTurn } = await import("./orchestrator-VP74KOXI.js");
196
+ const { runChatTurn } = await import("./orchestrator-3SB2BMQ7.js");
195
197
  const runChatTurnParams = buildRunChatTurnParams({
196
198
  sessionManager,
197
199
  sessionId,
@@ -239,4 +241,4 @@ var QueueProcessor = class {
239
241
  export {
240
242
  QueueProcessor
241
243
  };
242
- //# sourceMappingURL=processor-CCXZYLX6.js.map
244
+ //# sourceMappingURL=processor-KWPYXPL7.js.map
@@ -359,6 +359,11 @@ interface ContextState {
359
359
  dangerZone: boolean;
360
360
  canCompact: boolean;
361
361
  dynamicContextChanged: boolean;
362
+ debugDump?: {
363
+ cachedPrompt: string;
364
+ cachedTools: string[];
365
+ liveTools: string[];
366
+ };
362
367
  }
363
368
  interface ValidationResult {
364
369
  allPassed: boolean;
@@ -490,6 +495,7 @@ interface Config {
490
495
  args?: string[];
491
496
  env?: Record<string, string>;
492
497
  url?: string;
498
+ headers?: Record<string, string>;
493
499
  disabledTools?: string[];
494
500
  }> | undefined;
495
501
  }
@@ -532,7 +538,7 @@ interface QueuedMessage {
532
538
  queuedAt: string;
533
539
  messageKind?: string;
534
540
  }
535
- type ServerMessageType = 'project.state' | 'project.list' | 'project.deleted' | 'session.state' | 'session.list' | 'session.deleted' | 'session.deletedAll' | 'session.running' | 'session.name_generated' | 'chat.delta' | 'chat.thinking' | 'chat.tool_preparing' | 'chat.tool_call' | 'chat.tool_output' | 'chat.tool_result' | 'chat.todo' | 'chat.progress' | 'chat.format_retry' | 'chat.message' | 'chat.message_updated' | 'chat.done' | 'chat.vision_fallback' | 'chat.error' | 'chat.path_confirmation' | 'chat.ask_user' | 'mode.changed' | 'phase.changed' | 'task.completed' | 'criteria.updated' | 'metadata.updated' | 'context.state' | 'settings.value' | 'provider.changed' | 'queue.state' | 'devServer.output' | 'devServer.state' | 'backgroundProcess.started' | 'backgroundProcess.output' | 'backgroundProcess.exited' | 'backgroundProcess.removed' | 'git.status' | 'lsp.diagnostics' | 'error' | 'ack';
541
+ type ServerMessageType = 'project.state' | 'project.list' | 'project.deleted' | 'session.state' | 'session.list' | 'session.deleted' | 'session.deletedAll' | 'session.running' | 'session.name_generated' | 'chat.delta' | 'chat.thinking' | 'chat.tool_preparing' | 'chat.tool_call' | 'chat.tool_output' | 'chat.tool_result' | 'chat.todo' | 'chat.progress' | 'chat.format_retry' | 'chat.message' | 'chat.message_updated' | 'chat.done' | 'chat.vision_fallback' | 'chat.error' | 'chat.path_confirmation' | 'chat.ask_user' | 'mode.changed' | 'phase.changed' | 'task.completed' | 'criteria.updated' | 'metadata.updated' | 'context.state' | 'settings.value' | 'provider.changed' | 'queue.state' | 'devServer.output' | 'devServer.state' | 'backgroundProcess.started' | 'backgroundProcess.output' | 'backgroundProcess.exited' | 'backgroundProcess.removed' | 'git.status' | 'mcp.servers.changed' | 'lsp.diagnostics' | 'error' | 'ack';
536
542
  interface ServerMessage<T = unknown> {
537
543
  id?: string;
538
544
  type: ServerMessageType;
@@ -35,8 +35,8 @@ import {
35
35
  parseClientMessage,
36
36
  serializeServerMessage,
37
37
  storedEventToServerMessage
38
- } from "./chunk-3QB2RMX2.js";
39
- import "./chunk-5BDVM6YI.js";
38
+ } from "./chunk-F4PMNP7S.js";
39
+ import "./chunk-YD6NDTKF.js";
40
40
  export {
41
41
  createChatAskUserMessage,
42
42
  createChatDeltaMessage,
@@ -75,4 +75,4 @@ export {
75
75
  serializeServerMessage,
76
76
  storedEventToServerMessage
77
77
  };
78
- //# sourceMappingURL=protocol-YYWMFR35.js.map
78
+ //# sourceMappingURL=protocol-BKNLAEPJ.js.map
@@ -5,7 +5,7 @@ import {
5
5
  loadGlobalConfig,
6
6
  removeProvider,
7
7
  saveGlobalConfig
8
- } from "./chunk-PP6VQXQW.js";
8
+ } from "./chunk-SNQT7LNU.js";
9
9
  import "./chunk-CQGTEGKL.js";
10
10
  import {
11
11
  fetchAvailableModelsFromBackend
@@ -254,7 +254,7 @@ async function runProviderAdd(mode) {
254
254
  isActive: makeActive
255
255
  });
256
256
  if (makeActive) {
257
- const { setDefaultModelSelection } = await import("./config-YFHA5MWV.js");
257
+ const { setDefaultModelSelection } = await import("./config-Z66BQTNX.js");
258
258
  newConfig = setDefaultModelSelection(
259
259
  newConfig,
260
260
  newConfig.providers[newConfig.providers.length - 1].id,
@@ -382,4 +382,4 @@ export {
382
382
  runProviderRemove,
383
383
  runProviderUse
384
384
  };
385
- //# sourceMappingURL=provider-QUJQLVOM.js.map
385
+ //# sourceMappingURL=provider-YBTRC77Y.js.map
@@ -1,32 +1,32 @@
1
1
  import {
2
2
  VERSION,
3
3
  createServer
4
- } from "./chunk-4U45A7B3.js";
5
- import "./chunk-4W2Z4B5U.js";
4
+ } from "./chunk-DQ6SV26Y.js";
5
+ import "./chunk-WOTBK3QQ.js";
6
6
  import "./chunk-FWJ6YXGA.js";
7
- import "./chunk-NWO6GRYE.js";
8
- import "./chunk-7GJ6XYAF.js";
9
- import "./chunk-4ZTQO5JP.js";
7
+ import "./chunk-63UEI4AF.js";
8
+ import "./chunk-JO6RF2U2.js";
10
9
  import "./chunk-XAMAYRDA.js";
11
10
  import "./chunk-L7TDUIQY.js";
12
11
  import "./chunk-DL6ZILAF.js";
13
12
  import "./chunk-PBGOZMVY.js";
14
13
  import "./chunk-VRGRAQDG.js";
14
+ import "./chunk-NWO6GRYE.js";
15
15
  import {
16
16
  loadConfig
17
17
  } from "./chunk-SYG2ENUQ.js";
18
18
  import "./chunk-LX66KJPL.js";
19
- import "./chunk-3QB2RMX2.js";
19
+ import "./chunk-F4PMNP7S.js";
20
20
  import "./chunk-EU3WWTFH.js";
21
21
  import "./chunk-RFNEDBVO.js";
22
22
  import "./chunk-FBGWG4N6.js";
23
23
  import "./chunk-VUQCQXXJ.js";
24
- import "./chunk-5BDVM6YI.js";
24
+ import "./chunk-YD6NDTKF.js";
25
25
  import {
26
26
  getActiveProvider,
27
27
  getDefaultModel,
28
28
  loadGlobalConfig
29
- } from "./chunk-PP6VQXQW.js";
29
+ } from "./chunk-SNQT7LNU.js";
30
30
  import {
31
31
  ensureDataDirExists,
32
32
  getDatabasePath,
@@ -193,4 +193,4 @@ async function runServe(options) {
193
193
  export {
194
194
  runServe
195
195
  };
196
- //# sourceMappingURL=serve-GA2UIHHB.js.map
196
+ //# sourceMappingURL=serve-HZXJXK6T.js.map
@@ -1,4 +1,4 @@
1
- import { aO as ToolCall, c as Attachment, R as Diagnostic, an as Provider, ab as ModelConfig, aA as Session, aJ as SessionSummary, aj as Project, aE as SessionMode, aG as SessionPhase, M as Message, J as Criterion, L as CriterionStatus, a8 as MetadataEntry, aw as QueuedMessage, F as ContextState, O as DangerLevel$1, ay as ServerMessage, aL as StatsIdentity, aR as ToolResult, D as Config } from '../protocol-BE5dRtYw.js';
1
+ import { aO as ToolCall, c as Attachment, R as Diagnostic, an as Provider, ab as ModelConfig, aA as Session, aJ as SessionSummary, aj as Project, aE as SessionMode, aG as SessionPhase, M as Message, J as Criterion, L as CriterionStatus, a8 as MetadataEntry, aw as QueuedMessage, F as ContextState, O as DangerLevel$1, ay as ServerMessage, aL as StatsIdentity, aR as ToolResult, D as Config } from '../protocol-BC1QSQ-Y.js';
2
2
  import { Server } from 'node:http';
3
3
 
4
4
  interface LLMMessage {
@@ -125,6 +125,10 @@ interface LspManagerInterface {
125
125
  * Check if LSP is available for a given file
126
126
  */
127
127
  isAvailableFor(path: string): boolean;
128
+ /**
129
+ * Get installation hint for a file's language server, if it's not installed
130
+ */
131
+ getInstallHint(path: string): string | null;
128
132
  /**
129
133
  * Shutdown all LSP servers
130
134
  */
@@ -212,6 +216,7 @@ declare class LspManager implements LspManagerInterface {
212
216
  private servers;
213
217
  private unavailableServers;
214
218
  private serverPromises;
219
+ private dismissedHints;
215
220
  constructor(workdir: string, sessionId: string);
216
221
  private getOrCreateServer;
217
222
  private startServer;
@@ -230,6 +235,12 @@ declare class LspManager implements LspManagerInterface {
230
235
  * Returns true if we have or can start a server for this file type.
231
236
  */
232
237
  isAvailableFor(path: string): boolean;
238
+ /**
239
+ * Get installation hint for a file's language server, if it's not installed.
240
+ * Returns the hint once per session; subsequent calls return null
241
+ * to avoid spamming the user on every edit.
242
+ */
243
+ getInstallHint(path: string): string | null;
233
244
  /**
234
245
  * Shutdown all LSP servers.
235
246
  */
@@ -299,6 +310,7 @@ declare class SessionManager {
299
310
  private providerManager;
300
311
  private cachedPromptStore;
301
312
  private dynamicContextChangedStore;
313
+ private debugDumpStore;
302
314
  constructor(providerManager: ProviderManager);
303
315
  getCurrentModelSettings(): {
304
316
  temperature?: number;
@@ -485,6 +497,12 @@ declare class SessionManager {
485
497
  hash: string;
486
498
  } | undefined;
487
499
  setDynamicContextChanged(sessionId: string, changed: boolean): void;
500
+ setDebugDump(sessionId: string, dump: {
501
+ cachedPrompt: string;
502
+ cachedTools: string[];
503
+ liveTools: string[];
504
+ }): void;
505
+ clearDebugDump(sessionId: string): void;
488
506
  getDynamicContextChanged(sessionId: string): boolean;
489
507
  /**
490
508
  * @deprecated Use addTokensUsed instead
@@ -1,25 +1,26 @@
1
1
  import {
2
2
  createServer,
3
3
  createServerHandle
4
- } from "../chunk-4U45A7B3.js";
5
- import "../chunk-4W2Z4B5U.js";
4
+ } from "../chunk-DQ6SV26Y.js";
5
+ import "../chunk-WOTBK3QQ.js";
6
6
  import "../chunk-FWJ6YXGA.js";
7
- import "../chunk-NWO6GRYE.js";
8
- import "../chunk-7GJ6XYAF.js";
9
- import "../chunk-4ZTQO5JP.js";
7
+ import "../chunk-63UEI4AF.js";
8
+ import "../chunk-JO6RF2U2.js";
10
9
  import "../chunk-XAMAYRDA.js";
11
10
  import "../chunk-L7TDUIQY.js";
12
11
  import "../chunk-DL6ZILAF.js";
13
12
  import "../chunk-PBGOZMVY.js";
14
13
  import "../chunk-VRGRAQDG.js";
14
+ import "../chunk-NWO6GRYE.js";
15
15
  import "../chunk-SYG2ENUQ.js";
16
16
  import "../chunk-LX66KJPL.js";
17
- import "../chunk-3QB2RMX2.js";
17
+ import "../chunk-F4PMNP7S.js";
18
18
  import "../chunk-EU3WWTFH.js";
19
19
  import "../chunk-RFNEDBVO.js";
20
20
  import "../chunk-FBGWG4N6.js";
21
21
  import "../chunk-VUQCQXXJ.js";
22
- import "../chunk-5BDVM6YI.js";
22
+ import "../chunk-YD6NDTKF.js";
23
+ import "../chunk-SNQT7LNU.js";
23
24
  import "../chunk-CQGTEGKL.js";
24
25
  import "../chunk-3SGGOBCL.js";
25
26
  import "../chunk-PQ56PX7L.js";
@@ -1,29 +1,31 @@
1
1
  import {
2
2
  createWebSocketServer,
3
- setMcpManagerForWs
4
- } from "./chunk-4W2Z4B5U.js";
3
+ signalMcpReady
4
+ } from "./chunk-WOTBK3QQ.js";
5
5
  import "./chunk-FWJ6YXGA.js";
6
- import "./chunk-7GJ6XYAF.js";
7
- import "./chunk-4ZTQO5JP.js";
6
+ import "./chunk-63UEI4AF.js";
7
+ import "./chunk-JO6RF2U2.js";
8
8
  import "./chunk-XAMAYRDA.js";
9
9
  import "./chunk-L7TDUIQY.js";
10
10
  import "./chunk-DL6ZILAF.js";
11
11
  import "./chunk-PBGOZMVY.js";
12
12
  import "./chunk-VRGRAQDG.js";
13
+ import "./chunk-NWO6GRYE.js";
13
14
  import "./chunk-SYG2ENUQ.js";
14
15
  import "./chunk-LX66KJPL.js";
15
- import "./chunk-3QB2RMX2.js";
16
+ import "./chunk-F4PMNP7S.js";
16
17
  import "./chunk-EU3WWTFH.js";
17
18
  import "./chunk-RFNEDBVO.js";
18
19
  import "./chunk-FBGWG4N6.js";
19
20
  import "./chunk-VUQCQXXJ.js";
20
- import "./chunk-5BDVM6YI.js";
21
+ import "./chunk-YD6NDTKF.js";
22
+ import "./chunk-SNQT7LNU.js";
21
23
  import "./chunk-CQGTEGKL.js";
22
24
  import "./chunk-PQ56PX7L.js";
23
25
  import "./chunk-Z4SWOUWC.js";
24
26
  import "./chunk-K44MW7JJ.js";
25
27
  export {
26
28
  createWebSocketServer,
27
- setMcpManagerForWs
29
+ signalMcpReady
28
30
  };
29
- //# sourceMappingURL=server-EA6W7YIC.js.map
31
+ //# sourceMappingURL=server-RYKKAOFF.js.map
@@ -1,5 +1,5 @@
1
- import { M as Message, S as SessionStats } from '../protocol-BE5dRtYw.js';
2
- export { A as AgentEvent, a as AskAnswerPayload, b as AskUserEvent, c as Attachment, B as BackgroundProcess, d as BackgroundProcessExitedPayload, e as BackgroundProcessOutputPayload, f as BackgroundProcessRemovedPayload, g as BackgroundProcessStartedPayload, h as BackgroundProcessStatus, C as CallStatsDataPoint, i as ChatAskUserPayload, j as ChatDeltaPayload, k as ChatDonePayload, l as ChatErrorPayload, m as ChatFormatRetryPayload, n as ChatMessagePayload, o as ChatMessageUpdatedPayload, p as ChatPathConfirmationPayload, q as ChatProgressPayload, r as ChatThinkingPayload, s as ChatTodoPayload, t as ChatToolCallPayload, u as ChatToolOutputPayload, v as ChatToolPreparingPayload, w as ChatToolResultPayload, x as ChatVisionFallbackPayload, y as ClientMessage, z as ClientMessageType, D as Config, E as ContextCompactionEvent, F as ContextState, G as ContextStatePayload, H as ContextWindow, I as CriteriaUpdatedPayload, J as Criterion, K as CriterionAttempt, L as CriterionStatus, N as CriterionValidation, O as DangerLevel, P as DevServerOutputPayload, Q as DevServerStatePayload, R as Diagnostic, T as EditContextEdit, U as EditContextLine, V as EditContextRegion, W as ElementData, X as ErrorPayload, Y as ExecutionState, Z as FileReadEntry, _ as GitDiffFile, $ as GitStatusPayload, a0 as InjectedFile, a1 as LLMCallStats, a2 as LlmBackend, a3 as LogLine, a4 as LspDiagnosticsPayload, a5 as MessageRole, a6 as MessageSegment, a7 as MessageStats, a8 as MetadataEntry, a9 as MetadataUpdatedPayload, aa as ModeChangedPayload, ab as ModelConfig, ac as ModelSessionStats, ad as PathConfirmPayload, ae as PathConfirmationReason, af as PendingPathConfirmationPayload, ag as PendingQuestionPayload, ah as PhaseChangedPayload, ai as PreparingToolCall, aj as Project, ak as ProjectDeletedPayload, al as ProjectListPayload, am as ProjectStatePayload, an as Provider, ao as ProviderBackend, ap as ProviderChangedPayload, aq as QueueAddedEvent, ar as QueueCancelledEvent, as as QueueDrainedEvent, at as QueueEvent, au as QueueEventType, av as QueueStatePayload, aw as QueuedMessage, ax as RecentUserPrompt, ay as ServerMessage, az as ServerMessageType, aA as Session, aB as SessionListPayload, aC as SessionLoadPayload, aD as SessionMetadata, aE as SessionMode, aF as SessionNameGeneratedPayload, aG as SessionPhase, aH as SessionRunningPayload, aI as SessionStatePayload, aJ as SessionSummary, aK as StatsDataPoint, aL as StatsIdentity, aM as TaskCompletedPayload, aN as Todo, aO as ToolCall, aP as ToolMode, aQ as ToolName, aR as ToolResult, aS as ValidationResult, aT as createClientMessage, aU as createServerMessage, aV as isClientMessage, aW as isServerMessage } from '../protocol-BE5dRtYw.js';
1
+ import { M as Message, S as SessionStats } from '../protocol-BC1QSQ-Y.js';
2
+ export { A as AgentEvent, a as AskAnswerPayload, b as AskUserEvent, c as Attachment, B as BackgroundProcess, d as BackgroundProcessExitedPayload, e as BackgroundProcessOutputPayload, f as BackgroundProcessRemovedPayload, g as BackgroundProcessStartedPayload, h as BackgroundProcessStatus, C as CallStatsDataPoint, i as ChatAskUserPayload, j as ChatDeltaPayload, k as ChatDonePayload, l as ChatErrorPayload, m as ChatFormatRetryPayload, n as ChatMessagePayload, o as ChatMessageUpdatedPayload, p as ChatPathConfirmationPayload, q as ChatProgressPayload, r as ChatThinkingPayload, s as ChatTodoPayload, t as ChatToolCallPayload, u as ChatToolOutputPayload, v as ChatToolPreparingPayload, w as ChatToolResultPayload, x as ChatVisionFallbackPayload, y as ClientMessage, z as ClientMessageType, D as Config, E as ContextCompactionEvent, F as ContextState, G as ContextStatePayload, H as ContextWindow, I as CriteriaUpdatedPayload, J as Criterion, K as CriterionAttempt, L as CriterionStatus, N as CriterionValidation, O as DangerLevel, P as DevServerOutputPayload, Q as DevServerStatePayload, R as Diagnostic, T as EditContextEdit, U as EditContextLine, V as EditContextRegion, W as ElementData, X as ErrorPayload, Y as ExecutionState, Z as FileReadEntry, _ as GitDiffFile, $ as GitStatusPayload, a0 as InjectedFile, a1 as LLMCallStats, a2 as LlmBackend, a3 as LogLine, a4 as LspDiagnosticsPayload, a5 as MessageRole, a6 as MessageSegment, a7 as MessageStats, a8 as MetadataEntry, a9 as MetadataUpdatedPayload, aa as ModeChangedPayload, ab as ModelConfig, ac as ModelSessionStats, ad as PathConfirmPayload, ae as PathConfirmationReason, af as PendingPathConfirmationPayload, ag as PendingQuestionPayload, ah as PhaseChangedPayload, ai as PreparingToolCall, aj as Project, ak as ProjectDeletedPayload, al as ProjectListPayload, am as ProjectStatePayload, an as Provider, ao as ProviderBackend, ap as ProviderChangedPayload, aq as QueueAddedEvent, ar as QueueCancelledEvent, as as QueueDrainedEvent, at as QueueEvent, au as QueueEventType, av as QueueStatePayload, aw as QueuedMessage, ax as RecentUserPrompt, ay as ServerMessage, az as ServerMessageType, aA as Session, aB as SessionListPayload, aC as SessionLoadPayload, aD as SessionMetadata, aE as SessionMode, aF as SessionNameGeneratedPayload, aG as SessionPhase, aH as SessionRunningPayload, aI as SessionStatePayload, aJ as SessionSummary, aK as StatsDataPoint, aL as StatsIdentity, aM as TaskCompletedPayload, aN as Todo, aO as ToolCall, aP as ToolMode, aQ as ToolName, aR as ToolResult, aS as ValidationResult, aT as createClientMessage, aU as createServerMessage, aV as isClientMessage, aW as isServerMessage } from '../protocol-BC1QSQ-Y.js';
3
3
 
4
4
  /**
5
5
  * Session stats computation - aggregates response-level MessageStats from
@@ -6,7 +6,7 @@ import {
6
6
  createServerMessage,
7
7
  isClientMessage,
8
8
  isServerMessage
9
- } from "../chunk-5BDVM6YI.js";
9
+ } from "../chunk-YD6NDTKF.js";
10
10
  export {
11
11
  computeSessionStats,
12
12
  createClientMessage,
@@ -12,15 +12,16 @@ import {
12
12
  setMcpTools,
13
13
  stepDoneTool,
14
14
  validateToolAction
15
- } from "./chunk-4ZTQO5JP.js";
15
+ } from "./chunk-JO6RF2U2.js";
16
16
  import "./chunk-XAMAYRDA.js";
17
17
  import "./chunk-L7TDUIQY.js";
18
18
  import "./chunk-DL6ZILAF.js";
19
19
  import "./chunk-PBGOZMVY.js";
20
20
  import "./chunk-VRGRAQDG.js";
21
+ import "./chunk-NWO6GRYE.js";
21
22
  import "./chunk-SYG2ENUQ.js";
22
23
  import "./chunk-LX66KJPL.js";
23
- import "./chunk-3QB2RMX2.js";
24
+ import "./chunk-F4PMNP7S.js";
24
25
  import {
25
26
  AskUserInterrupt,
26
27
  cancelQuestionsForSession,
@@ -29,7 +30,8 @@ import {
29
30
  } from "./chunk-EU3WWTFH.js";
30
31
  import "./chunk-RFNEDBVO.js";
31
32
  import "./chunk-FBGWG4N6.js";
32
- import "./chunk-5BDVM6YI.js";
33
+ import "./chunk-YD6NDTKF.js";
34
+ import "./chunk-SNQT7LNU.js";
33
35
  import "./chunk-CQGTEGKL.js";
34
36
  import "./chunk-Z4SWOUWC.js";
35
37
  import "./chunk-K44MW7JJ.js";
@@ -52,4 +54,4 @@ export {
52
54
  stepDoneTool,
53
55
  validateToolAction
54
56
  };
55
- //# sourceMappingURL=tools-DUC54GEH.js.map
57
+ //# sourceMappingURL=tools-Y7ZGLK7A.js.map