openfox 2.0.130 → 2.0.132

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 (73) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/CHANGELOG.md +23 -0
  3. package/dist/{chat-handler-4WCKNCQV.js → chat-handler-T47GATL5.js} +24 -24
  4. package/dist/chunk-55RHB5JB.js +7 -0
  5. package/dist/{chunk-CYQUM42E.js → chunk-5JWJEZJ3.js} +2 -2
  6. package/dist/{chunk-OXMOKQPW.js → chunk-6EZDW4JS.js} +2 -2
  7. package/dist/{chunk-CGCEAKG5.js → chunk-7JVBDBXE.js} +2 -2
  8. package/dist/{chunk-64N4CZFT.js → chunk-BKMWZTNO.js} +3 -3
  9. package/dist/{chunk-DHDIKVRT.js → chunk-CLDCHOEA.js} +3 -3
  10. package/dist/{chunk-3B232XG4.js → chunk-DPFET73G.js} +2 -2
  11. package/dist/{chunk-JHA2SPCU.js → chunk-ELYHHEYL.js} +3 -3
  12. package/dist/{chunk-KHKRHGA6.js → chunk-EOHEDEIH.js} +4 -4
  13. package/dist/{chunk-JSONBGSY.js → chunk-FEIRWXLX.js} +4 -4
  14. package/dist/{chunk-AYCB32NI.js → chunk-FGNJMKDV.js} +5 -5
  15. package/dist/{chunk-EVVWDRM5.js → chunk-GFW2HWJ6.js} +18 -12
  16. package/dist/{chunk-2OMXXCJJ.js → chunk-GVOOOV7M.js} +8 -8
  17. package/dist/{chunk-X24XN2M2.js → chunk-HXHPKGJE.js} +19 -19
  18. package/dist/{chunk-OYBUJIC3.js → chunk-JU757HVI.js} +5 -1
  19. package/dist/{chunk-X3FHIDLT.js → chunk-KWAHD2JA.js} +13 -8
  20. package/dist/{chunk-3DZSHRXE.js → chunk-LQKXJPKP.js} +2 -2
  21. package/dist/{chunk-EHFIUXWZ.js → chunk-LW6MMSTD.js} +2 -2
  22. package/dist/{chunk-JKRMMNUR.js → chunk-M5T4RDPJ.js} +2 -2
  23. package/dist/{chunk-6QZVAOSA.js → chunk-MGEYAYGU.js} +2 -2
  24. package/dist/{chunk-DQTXXHD2.js → chunk-MQMPIXON.js} +3 -3
  25. package/dist/{chunk-35GQEIH2.js → chunk-RRUSYVQD.js} +7 -7
  26. package/dist/{chunk-DYIDDGMN.js → chunk-RUFXKUOL.js} +16 -16
  27. package/dist/{chunk-ZRCRGPGT.js → chunk-TACWRDDC.js} +3 -3
  28. package/dist/{chunk-25DAVVTP.js → chunk-VXG3AFFY.js} +46 -48
  29. package/dist/{chunk-Y3BSBKHY.js → chunk-XE6UC5Z3.js} +2 -2
  30. package/dist/{chunk-VJNA5AOB.js → chunk-Y6ZGHOKM.js} +3 -3
  31. package/dist/{chunk-VUIXQ6X4.js → chunk-ZL4IAFF3.js} +3 -3
  32. package/dist/{chunk-DI5GTIAU.js → chunk-ZSBNXJZ5.js} +132 -115
  33. package/dist/cli/dev.js +1 -1
  34. package/dist/cli/index.js +1 -1
  35. package/dist/{client-26RSMUAX.js → client-2K6PPPJJ.js} +5 -5
  36. package/dist/{compactor-HYBSSFKP.js → compactor-OEJAA2YP.js} +11 -11
  37. package/dist/{dynamic-context-2VLACYK4.js → dynamic-context-NJZKAZE3.js} +14 -12
  38. package/dist/{events-D33QXGSX.js → events-ZJPRGVL2.js} +8 -8
  39. package/dist/{folding-QOKBKUU6.js → folding-QRZOHY2I.js} +6 -6
  40. package/dist/http-client-P4XTKAZA.js +11 -0
  41. package/dist/{inspect-proxy-UKPU3Z64.js → inspect-proxy-A3OROWPG.js} +4 -4
  42. package/dist/{launch-KFENN5GS.js → launch-6I5ADTVT.js} +24 -24
  43. package/dist/{manager-VRHX7BVI.js → manager-TMBFBCQL.js} +5 -5
  44. package/dist/{orchestrator-PLTAEOMR.js → orchestrator-GX22Y5EM.js} +23 -23
  45. package/dist/package.json +1 -1
  46. package/dist/{path-security-4WQJGU3Z.js → path-security-CBACXAMS.js} +10 -10
  47. package/dist/{platform-MWWJ6OKV.js → platform-5LQXOZO3.js} +4 -4
  48. package/dist/{processor-K4WHZKE6.js → processor-FMEULCNQ.js} +23 -23
  49. package/dist/{project-creator-JF3YVQAH.js → project-creator-6AGQTNXB.js} +3 -3
  50. package/dist/{projects-TPSLCJP2.js → projects-5U37RUTL.js} +3 -3
  51. package/dist/{provider-CVM33XHW.js → provider-NWRGNGS3.js} +6 -6
  52. package/dist/{provider-manager-7NL5EQLG.js → provider-manager-BO5ZBG3T.js} +6 -6
  53. package/dist/{registry-KFFZFIZT.js → registry-CMSSZHDC.js} +5 -5
  54. package/dist/{serve-KQAPXO5X.js → serve-BFGHUM4Y.js} +29 -29
  55. package/dist/server/index.d.ts +10 -1
  56. package/dist/server/index.js +28 -28
  57. package/dist/server-WPWUYB6I.js +56 -0
  58. package/dist/{service-7TLOSFAO.js → service-O3LCO3TQ.js} +8 -8
  59. package/dist/{session-overrides-U573CU2V.js → session-overrides-OECQYRDK.js} +7 -7
  60. package/dist/{sessions-LUVWWRFO.js → sessions-NMPX5ICI.js} +6 -6
  61. package/dist/{settings-LMAMF2X7.js → settings-MDCRNQBY.js} +3 -3
  62. package/dist/{tasks-FA6Z52H2.js → tasks-WOC3QUFA.js} +8 -8
  63. package/dist/{tools-SSPC3UQZ.js → tools-CW6POKUL.js} +21 -21
  64. package/dist/{update-QRGK67DB.js → update-VPCDKFLD.js} +2 -2
  65. package/dist/web/assets/{index-0PVQNOfW.js → index-Bx5r3aJx.js} +70 -70
  66. package/dist/web/assets/{index-Ds94aclE.css → index-Y300llHY.css} +1 -1
  67. package/dist/web/index.html +2 -2
  68. package/dist/web/sw.js +1 -1
  69. package/dist/{workspace-6CUE26YA.js → workspace-LM646OHC.js} +4 -4
  70. package/package.json +1 -1
  71. package/dist/chunk-3OBZ55SX.js +0 -7
  72. package/dist/http-client-MGAJTGPR.js +0 -11
  73. package/dist/server-RPKVKMDD.js +0 -56
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  resolveDefaultAgentId
3
- } from "./chunk-JHA2SPCU.js";
3
+ } from "./chunk-ELYHHEYL.js";
4
4
  import {
5
5
  getDatabase
6
- } from "./chunk-OYBUJIC3.js";
6
+ } from "./chunk-JU757HVI.js";
7
7
 
8
8
  // src/server/db/sessions.ts
9
9
  function getProjectDangerLevel(projectId) {
@@ -197,20 +197,20 @@ function updateSessionMcpDisabledServers(id, disabledServers) {
197
197
  const value = disabledServers.length > 0 ? JSON.stringify(disabledServers) : null;
198
198
  db.prepare(`UPDATE sessions SET mcp_disabled_servers = ? WHERE id = ?`).run(value, id);
199
199
  }
200
- function updateSessionCachedPrompt(id, systemPrompt, tools, hash) {
200
+ function updateSessionCachedPrompt(id, systemPrompt, tools, hash, promptHash) {
201
201
  const db = getDatabase();
202
202
  const now = (/* @__PURE__ */ new Date()).toISOString();
203
203
  db.prepare(
204
204
  `
205
- UPDATE sessions SET cached_system_prompt = ?, cached_tools = ?, cached_hash = ?, updated_at = ? WHERE id = ?
205
+ UPDATE sessions SET cached_system_prompt = ?, cached_tools = ?, cached_hash = ?, cached_prompt_hash = ?, updated_at = ? WHERE id = ?
206
206
  `
207
- ).run(systemPrompt, JSON.stringify(tools), hash, now, id);
207
+ ).run(systemPrompt, JSON.stringify(tools), hash, promptHash ?? null, now, id);
208
208
  }
209
209
  function getSessionCachedPrompt(id) {
210
210
  const db = getDatabase();
211
211
  const row = db.prepare(
212
212
  `
213
- SELECT cached_system_prompt, cached_tools, cached_hash FROM sessions WHERE id = ?
213
+ SELECT cached_system_prompt, cached_tools, cached_hash, cached_prompt_hash FROM sessions WHERE id = ?
214
214
  `
215
215
  ).get(id);
216
216
  if (!row || !row.cached_system_prompt || !row.cached_tools || !row.cached_hash) {
@@ -218,7 +218,12 @@ function getSessionCachedPrompt(id) {
218
218
  }
219
219
  try {
220
220
  const tools = JSON.parse(row.cached_tools);
221
- return { systemPrompt: row.cached_system_prompt, tools, hash: row.cached_hash };
221
+ return {
222
+ systemPrompt: row.cached_system_prompt,
223
+ tools,
224
+ hash: row.cached_hash,
225
+ ...row.cached_prompt_hash ? { promptHash: row.cached_prompt_hash } : {}
226
+ };
222
227
  } catch {
223
228
  return null;
224
229
  }
@@ -466,4 +471,4 @@ export {
466
471
  getLatestWorkflowExecution,
467
472
  clearWorkflowExecution
468
473
  };
469
- //# sourceMappingURL=chunk-X3FHIDLT.js.map
474
+ //# sourceMappingURL=chunk-KWAHD2JA.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getDatabase
3
- } from "./chunk-OYBUJIC3.js";
3
+ } from "./chunk-JU757HVI.js";
4
4
 
5
5
  // src/server/db/settings.ts
6
6
  var SETTINGS_KEYS = {
@@ -136,4 +136,4 @@ export {
136
136
  getAllSettings,
137
137
  getMaxVisibleItems
138
138
  };
139
- //# sourceMappingURL=chunk-3DZSHRXE.js.map
139
+ //# sourceMappingURL=chunk-LQKXJPKP.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getProjectByWorkdir
3
- } from "./chunk-3B232XG4.js";
3
+ } from "./chunk-DPFET73G.js";
4
4
  import {
5
5
  logger
6
6
  } from "./chunk-K44MW7JJ.js";
@@ -345,4 +345,4 @@ export {
345
345
  startInspectProxy,
346
346
  stopAllInspectProxies
347
347
  };
348
- //# sourceMappingURL=chunk-EHFIUXWZ.js.map
348
+ //# sourceMappingURL=chunk-LW6MMSTD.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveDefaultAgentId
3
- } from "./chunk-JHA2SPCU.js";
3
+ } from "./chunk-ELYHHEYL.js";
4
4
  import {
5
5
  normalizeAskOptions
6
6
  } from "./chunk-LCLH6ZUL.js";
@@ -965,4 +965,4 @@ export {
965
965
  buildSnapshot,
966
966
  buildSnapshotFromSessionState
967
967
  };
968
- //# sourceMappingURL=chunk-JKRMMNUR.js.map
968
+ //# sourceMappingURL=chunk-M5T4RDPJ.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  SETTINGS_KEYS,
3
3
  getSetting
4
- } from "./chunk-3DZSHRXE.js";
4
+ } from "./chunk-LQKXJPKP.js";
5
5
 
6
6
  // src/server/utils/platform.ts
7
7
  import os from "os";
@@ -63,4 +63,4 @@ export {
63
63
  isWindowsPath,
64
64
  isAbsolutePath
65
65
  };
66
- //# sourceMappingURL=chunk-6QZVAOSA.js.map
66
+ //# sourceMappingURL=chunk-MGEYAYGU.js.map
@@ -11,11 +11,11 @@ import {
11
11
  } from "./chunk-I72ACQ6R.js";
12
12
  import {
13
13
  getPlatformShell
14
- } from "./chunk-6QZVAOSA.js";
14
+ } from "./chunk-MGEYAYGU.js";
15
15
  import {
16
16
  SETTINGS_KEYS,
17
17
  getSetting
18
- } from "./chunk-3DZSHRXE.js";
18
+ } from "./chunk-LQKXJPKP.js";
19
19
 
20
20
  // src/server/utils/shell.ts
21
21
  import { spawn } from "child_process";
@@ -214,4 +214,4 @@ export {
214
214
  getSessionProcesses2 as getSessionProcesses,
215
215
  getProcessLogs
216
216
  };
217
- //# sourceMappingURL=chunk-DQTXXHD2.js.map
217
+ //# sourceMappingURL=chunk-MQMPIXON.js.map
@@ -4,24 +4,24 @@ import {
4
4
  import {
5
5
  combineEventsWithSnapshot,
6
6
  getEventStore
7
- } from "./chunk-AYCB32NI.js";
7
+ } from "./chunk-FGNJMKDV.js";
8
8
  import {
9
9
  buildMessagesFromStoredEvents,
10
10
  foldPendingConfirmations
11
- } from "./chunk-JKRMMNUR.js";
11
+ } from "./chunk-M5T4RDPJ.js";
12
12
  import {
13
13
  updateSessionMetadata
14
- } from "./chunk-X3FHIDLT.js";
14
+ } from "./chunk-KWAHD2JA.js";
15
15
  import {
16
16
  getRuntimeConfig
17
- } from "./chunk-JHA2SPCU.js";
17
+ } from "./chunk-ELYHHEYL.js";
18
18
  import {
19
19
  createContextStateMessage,
20
20
  createSessionStateMessage
21
21
  } from "./chunk-P57IBMK4.js";
22
22
  import {
23
23
  getMaxVisibleItems
24
- } from "./chunk-3DZSHRXE.js";
24
+ } from "./chunk-LQKXJPKP.js";
25
25
  import {
26
26
  logger
27
27
  } from "./chunk-K44MW7JJ.js";
@@ -162,7 +162,7 @@ async function generateSessionNameForSession(sessionId, userMessage, deps, signa
162
162
  client = deps.getLLMClient();
163
163
  client.setModel(providerConfig.model);
164
164
  } else if (providerConfig) {
165
- const { createLLMClient } = await import("./client-26RSMUAX.js");
165
+ const { createLLMClient } = await import("./client-2K6PPPJJ.js");
166
166
  client = createLLMClient(
167
167
  {
168
168
  llm: {
@@ -216,4 +216,4 @@ export {
216
216
  needsNameGeneration,
217
217
  generateSessionNameForSession
218
218
  };
219
- //# sourceMappingURL=chunk-35GQEIH2.js.map
219
+ //# sourceMappingURL=chunk-RRUSYVQD.js.map
@@ -2,29 +2,29 @@ import {
2
2
  generateSessionNameForSession,
3
3
  getSessionMessageCount,
4
4
  needsNameGeneration
5
- } from "./chunk-35GQEIH2.js";
5
+ } from "./chunk-RRUSYVQD.js";
6
6
  import {
7
7
  launchWorkflowRun
8
- } from "./chunk-2OMXXCJJ.js";
8
+ } from "./chunk-GVOOOV7M.js";
9
9
  import {
10
10
  runChatTurn
11
- } from "./chunk-EVVWDRM5.js";
11
+ } from "./chunk-GFW2HWJ6.js";
12
12
  import {
13
13
  devServerManager
14
- } from "./chunk-X24XN2M2.js";
14
+ } from "./chunk-HXHPKGJE.js";
15
15
  import {
16
16
  gitSpawnEnv
17
17
  } from "./chunk-J7GAZGZT.js";
18
18
  import {
19
19
  appendCompactionPrompt
20
- } from "./chunk-VUIXQ6X4.js";
20
+ } from "./chunk-ZL4IAFF3.js";
21
21
  import {
22
22
  hasRecentLLMFailure,
23
23
  interruptLLMRetryWait
24
24
  } from "./chunk-7ET46SNE.js";
25
25
  import {
26
26
  onProcessEvent
27
- } from "./chunk-DQTXXHD2.js";
27
+ } from "./chunk-MQMPIXON.js";
28
28
  import {
29
29
  killProcessTree
30
30
  } from "./chunk-I72ACQ6R.js";
@@ -32,7 +32,7 @@ import {
32
32
  applyDynamicContext,
33
33
  computeSessionHash,
34
34
  computeUnifiedDiff
35
- } from "./chunk-25DAVVTP.js";
35
+ } from "./chunk-VXG3AFFY.js";
36
36
  import {
37
37
  getPendingQuestionsForSession,
38
38
  provideAnswer
@@ -40,14 +40,14 @@ import {
40
40
  import {
41
41
  combineEventsWithSnapshot,
42
42
  getEventStore
43
- } from "./chunk-AYCB32NI.js";
43
+ } from "./chunk-FGNJMKDV.js";
44
44
  import {
45
45
  buildMessagesFromStoredEvents,
46
46
  foldPendingConfirmations
47
- } from "./chunk-JKRMMNUR.js";
47
+ } from "./chunk-M5T4RDPJ.js";
48
48
  import {
49
49
  getRuntimeConfig
50
- } from "./chunk-JHA2SPCU.js";
50
+ } from "./chunk-ELYHHEYL.js";
51
51
  import {
52
52
  createChatErrorMessage,
53
53
  createChatMessageMessage,
@@ -65,10 +65,10 @@ import {
65
65
  } from "./chunk-P57IBMK4.js";
66
66
  import {
67
67
  getPlatformShell
68
- } from "./chunk-6QZVAOSA.js";
68
+ } from "./chunk-MGEYAYGU.js";
69
69
  import {
70
70
  getMaxVisibleItems
71
- } from "./chunk-3DZSHRXE.js";
71
+ } from "./chunk-LQKXJPKP.js";
72
72
  import {
73
73
  logger
74
74
  } from "./chunk-K44MW7JJ.js";
@@ -1313,8 +1313,8 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
1313
1313
  }
1314
1314
  const session = sessionManager.requireSession(sessionId);
1315
1315
  try {
1316
- const { buildCachedPrompt, computePreviewToolDiff } = await import("./dynamic-context-2VLACYK4.js");
1317
- const allAgents = await import("./registry-KFFZFIZT.js");
1316
+ const { buildCachedPrompt, computePreviewToolDiff } = await import("./dynamic-context-NJZKAZE3.js");
1317
+ const allAgents = await import("./registry-CMSSZHDC.js");
1318
1318
  const agentDef = allAgents.findAgentById(session.mode, await allAgents.loadAllAgentsDefault()) ?? allAgents.findAgentById("planner", await allAgents.loadAllAgentsDefault());
1319
1319
  const modelName = session.providerModel ?? _providerManager?.getCurrentModel();
1320
1320
  const {
@@ -1325,7 +1325,7 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
1325
1325
  const oldCached = sessionManager.getCachedPrompt(sessionId);
1326
1326
  const oldPrompt = oldCached?.systemPrompt;
1327
1327
  const diff = oldPrompt ? computeUnifiedDiff(oldPrompt, newPrompt) : [];
1328
- const { getToolRegistryForAgent } = await import("./tools-SSPC3UQZ.js");
1328
+ const { getToolRegistryForAgent } = await import("./tools-CW6POKUL.js");
1329
1329
  const unfilteredTools = getToolRegistryForAgent(agentDef).definitions;
1330
1330
  const toolDiff = computePreviewToolDiff(oldCached?.tools, unfilteredTools, newTools);
1331
1331
  send({
@@ -1642,4 +1642,4 @@ export {
1642
1642
  signalMcpReady,
1643
1643
  createWebSocketServer
1644
1644
  };
1645
- //# sourceMappingURL=chunk-DYIDDGMN.js.map
1645
+ //# sourceMappingURL=chunk-RUFXKUOL.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  updateSessionMcpDisabledServers
3
- } from "./chunk-X3FHIDLT.js";
3
+ } from "./chunk-KWAHD2JA.js";
4
4
  import {
5
5
  getDatabase
6
- } from "./chunk-OYBUJIC3.js";
6
+ } from "./chunk-JU757HVI.js";
7
7
 
8
8
  // src/server/mcp/session-overrides.ts
9
9
  var sessionOverrides = /* @__PURE__ */ new Map();
@@ -62,4 +62,4 @@ export {
62
62
  clearSessionOverrides,
63
63
  getAllSessionOverrides
64
64
  };
65
- //# sourceMappingURL=chunk-ZRCRGPGT.js.map
65
+ //# sourceMappingURL=chunk-TACWRDDC.js.map
@@ -1,21 +1,21 @@
1
1
  import {
2
2
  getAllInstructions,
3
3
  getEnabledSkillMetadata
4
- } from "./chunk-64N4CZFT.js";
4
+ } from "./chunk-BKMWZTNO.js";
5
5
  import {
6
6
  buildTopLevelSystemPrompt
7
- } from "./chunk-CGCEAKG5.js";
7
+ } from "./chunk-7JVBDBXE.js";
8
8
  import {
9
9
  getCurrentContextWindowId,
10
10
  getEventStore
11
- } from "./chunk-AYCB32NI.js";
11
+ } from "./chunk-FGNJMKDV.js";
12
12
  import {
13
13
  findAgentById,
14
14
  getRuntimeConfig,
15
15
  getSubAgents,
16
16
  loadAllAgentsDefault,
17
17
  resolveDefaultAgentId
18
- } from "./chunk-JHA2SPCU.js";
18
+ } from "./chunk-ELYHHEYL.js";
19
19
  import {
20
20
  logger
21
21
  } from "./chunk-K44MW7JJ.js";
@@ -93,6 +93,9 @@ function computeDynamicContextHash(instructionContent, skills, toolFingerprint,
93
93
  function getToolFingerprint(tools) {
94
94
  return tools.map((t) => `${t.function.name}:${JSON.stringify(t.function.parameters)}`).sort().join("|");
95
95
  }
96
+ function getToolSetFingerprint(tools) {
97
+ return tools.map(getToolSignature).sort().join("|");
98
+ }
96
99
  function computeToolDiff(oldTools, newTools) {
97
100
  const oldNames = oldTools.map((t) => t.function.name).sort();
98
101
  const newNames = newTools.map((t) => t.function.name).sort();
@@ -111,7 +114,7 @@ function computePreviewToolDiff(oldCachedTools, unfilteredTools, newTools) {
111
114
  const baseline = oldCachedTools && oldCachedTools.length > 0 ? oldCachedTools : unfilteredTools;
112
115
  return computeToolDiff(baseline, newTools);
113
116
  }
114
- var MAX_DESCRIPTION_LENGTH = 80;
117
+ var MAX_TOOL_SCHEMA_LINES = 120;
115
118
  function getToolSignature(tool) {
116
119
  const fn = tool.function;
117
120
  return `${fn.name}:${fn.description ?? ""}:${JSON.stringify(fn.parameters)}`;
@@ -126,14 +129,9 @@ function detectToolChanges(liveTools, cachedTools) {
126
129
  const liveTool = liveByName.get(name);
127
130
  const cachedTool = cachedByName.get(name);
128
131
  if (!cachedTool) {
129
- const properties = liveTool.function.parameters?.["properties"];
130
- added.push({
131
- name,
132
- description: liveTool.function.description,
133
- params: Object.keys(properties ?? {})
134
- });
132
+ added.push({ name, tool: liveTool });
135
133
  } else if (getToolSignature(liveTool) !== getToolSignature(cachedTool)) {
136
- changed.push(name);
134
+ changed.push({ name, tool: liveTool });
137
135
  }
138
136
  }
139
137
  for (const name of cachedByName.keys()) {
@@ -141,29 +139,29 @@ function detectToolChanges(liveTools, cachedTools) {
141
139
  }
142
140
  added.sort((a, b) => a.name.localeCompare(b.name));
143
141
  removed.sort();
144
- changed.sort();
142
+ changed.sort((a, b) => a.name.localeCompare(b.name));
145
143
  return { added, removed, changed };
146
144
  }
147
145
  function hasToolChanges(changes) {
148
146
  return changes.added.length > 0 || changes.removed.length > 0 || changes.changed.length > 0;
149
147
  }
150
- function truncateDescription(description) {
151
- if (!description) return void 0;
152
- const trimmed = description.replace(/\s+/g, " ").trim();
153
- if (trimmed.length <= MAX_DESCRIPTION_LENGTH) return trimmed;
154
- return trimmed.slice(0, MAX_DESCRIPTION_LENGTH - 1) + "\u2026";
155
- }
156
- function formatAddedTool(tool) {
157
- const description = truncateDescription(tool.description);
158
- const params = tool.params.length > 0 ? ` (params: ${tool.params.join(", ")})` : "";
159
- return description ? `${tool.name} \u2014 ${description}${params}` : `${tool.name}${params}`;
148
+ function formatToolDefinition(entry) {
149
+ const json = JSON.stringify(entry.tool, null, 2);
150
+ const lines = json.split("\n");
151
+ if (lines.length <= MAX_TOOL_SCHEMA_LINES) return `### ${entry.name}
152
+ ${json}`;
153
+ const visible = lines.slice(0, MAX_TOOL_SCHEMA_LINES);
154
+ const omitted = lines.length - visible.length;
155
+ return `### ${entry.name}
156
+ ${visible.join("\n")}
157
+ \u2026 ${omitted} more lines omitted`;
160
158
  }
161
159
  function renderToolChangeReminder(changes) {
162
160
  if (!hasToolChanges(changes)) return null;
163
161
  const sections = [];
164
162
  if (changes.added.length > 0) {
165
163
  sections.push(`Added:
166
- ${changes.added.map(formatAddedTool).join("\n")}`);
164
+ ${changes.added.map(formatToolDefinition).join("\n")}`);
167
165
  }
168
166
  if (changes.removed.length > 0) {
169
167
  sections.push(`Removed:
@@ -171,13 +169,12 @@ ${changes.removed.join("\n")}`);
171
169
  }
172
170
  if (changes.changed.length > 0) {
173
171
  sections.push(`Changed:
174
- ${changes.changed.join("\n")}`);
172
+ ${changes.changed.map(formatToolDefinition).join("\n")}`);
175
173
  }
174
+ const intro = changes.added.length > 0 ? "You now have access to new tools \u2014 you can call them like any other tool. The definitions below are the exact tool schemas now available:" : "The available tools have changed since your last turn. The definitions below are the exact tool schemas now available:";
176
175
  return `<system-reminder>
177
- The available tools have changed since your last turn:
178
- ${sections.join(
179
- "\n"
180
- )}
176
+ ${intro}
177
+ ${sections.join("\n")}
181
178
  </system-reminder>`;
182
179
  }
183
180
  var MAX_PROMPT_DIFF_LINES = 40;
@@ -226,24 +223,23 @@ async function injectDriftReminders(sessionManager, sessionId, agentDef, options
226
223
  if (!cached) {
227
224
  return { injectedToolReminder: false, injectedPromptReminder: false };
228
225
  }
229
- const { getToolRegistryForAgent } = await import("./tools-SSPC3UQZ.js");
226
+ const { getToolRegistryForAgent } = await import("./tools-CW6POKUL.js");
230
227
  const liveTools = getToolRegistryForAgent(agentDef, sessionId).definitions;
231
228
  let injectedToolReminder = false;
232
229
  let injectedPromptReminder = false;
233
- const changes = detectToolChanges(liveTools, cached.tools);
234
- if (hasToolChanges(changes)) {
235
- const reminder = renderToolChangeReminder(changes);
236
- if (reminder) {
237
- injectSystemReminder(sessionId, append, reminder, "tools", "Tools");
238
- injectedToolReminder = true;
230
+ const liveToolFingerprint = getToolSetFingerprint(liveTools);
231
+ const announcedToolFingerprint = sessionManager.getAnnouncedToolFingerprint(sessionId) ?? getToolSetFingerprint(cached.tools);
232
+ if (announcedToolFingerprint !== liveToolFingerprint) {
233
+ const changes = detectToolChanges(liveTools, cached.tools);
234
+ if (hasToolChanges(changes)) {
235
+ const reminder = renderToolChangeReminder(changes);
236
+ if (reminder) {
237
+ injectSystemReminder(sessionId, append, reminder, "tools", "Tools");
238
+ injectedToolReminder = true;
239
+ }
240
+ sessionManager.setDynamicContextChanged(sessionId, true);
239
241
  }
240
- const newHash = computeDynamicContextHash(
241
- options.instructionContent,
242
- options.skills,
243
- getToolFingerprint(liveTools),
244
- options.modelName
245
- );
246
- sessionManager.setCachedPrompt(sessionId, cached.systemPrompt, liveTools, newHash);
242
+ sessionManager.setAnnouncedToolFingerprint(sessionId, liveToolFingerprint);
247
243
  }
248
244
  const livePromptHash = computeDynamicContextHash(
249
245
  options.instructionContent,
@@ -251,7 +247,7 @@ async function injectDriftReminders(sessionManager, sessionId, agentDef, options
251
247
  void 0,
252
248
  options.modelName
253
249
  );
254
- const announcedPromptHash = sessionManager.getAnnouncedPromptHash(sessionId) ?? cached.hash;
250
+ const announcedPromptHash = sessionManager.getAnnouncedPromptHash(sessionId) ?? cached.promptHash ?? cached.hash;
255
251
  if (announcedPromptHash !== livePromptHash) {
256
252
  const reminder = renderSystemPromptDiff(cached.systemPrompt, options.buildNewSystemPrompt());
257
253
  if (reminder) {
@@ -333,7 +329,7 @@ function resolveAgentDef(sessionManager, sessionId) {
333
329
  }
334
330
  async function buildCachedPrompt(sessionManager, sessionId, agentDef, modelName) {
335
331
  const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
336
- const { getToolRegistryForAgent } = await import("./tools-SSPC3UQZ.js");
332
+ const { getToolRegistryForAgent } = await import("./tools-CW6POKUL.js");
337
333
  const tools = getToolRegistryForAgent(agentDef, sessionId).definitions;
338
334
  const toolFingerprint = getToolFingerprint(tools);
339
335
  const allAgents = await loadAllAgentsDefault(sessionManager.getProjectWorkdir(sessionId));
@@ -353,7 +349,7 @@ async function buildCachedPrompt(sessionManager, sessionId, agentDef, modelName)
353
349
  async function computeSessionHash(sessionManager, sessionId, modelName) {
354
350
  const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
355
351
  const agentDef = await resolveAgentDef(sessionManager, sessionId);
356
- const { getToolRegistryForAgent } = await import("./tools-SSPC3UQZ.js");
352
+ const { getToolRegistryForAgent } = await import("./tools-CW6POKUL.js");
357
353
  const tools = getToolRegistryForAgent(agentDef, sessionId).definitions;
358
354
  const toolFingerprint = getToolFingerprint(tools);
359
355
  return computeDynamicContextHash(instructionContent, skills, toolFingerprint, modelName);
@@ -368,8 +364,9 @@ async function applyDynamicContext(sessionManager, sessionId, modelName) {
368
364
  agentDef,
369
365
  modelName
370
366
  );
371
- sessionManager.setCachedPrompt(sessionId, systemPrompt, tools, hash);
367
+ sessionManager.setCachedPrompt(sessionId, systemPrompt, tools, hash, promptHash);
372
368
  sessionManager.setAnnouncedPromptHash(sessionId, promptHash);
369
+ sessionManager.setAnnouncedToolFingerprint(sessionId, getToolSetFingerprint(tools));
373
370
  sessionManager.setDynamicContextChanged(sessionId, false);
374
371
  sessionManager.clearDebugDump(sessionId);
375
372
  logger.debug("applyDynamicContext done", { sessionId, hash, toolCount: tools.length });
@@ -379,6 +376,7 @@ export {
379
376
  computeUnifiedDiff,
380
377
  computeDynamicContextHash,
381
378
  getToolFingerprint,
379
+ getToolSetFingerprint,
382
380
  computeToolDiff,
383
381
  computePreviewToolDiff,
384
382
  getToolSignature,
@@ -392,4 +390,4 @@ export {
392
390
  computeSessionHash,
393
391
  applyDynamicContext
394
392
  };
395
- //# sourceMappingURL=chunk-25DAVVTP.js.map
393
+ //# sourceMappingURL=chunk-VXG3AFFY.js.map
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  getProjectByWorkdir,
6
6
  updateProject
7
- } from "./chunk-3B232XG4.js";
7
+ } from "./chunk-DPFET73G.js";
8
8
  import {
9
9
  logger
10
10
  } from "./chunk-K44MW7JJ.js";
@@ -347,4 +347,4 @@ export {
347
347
  deleteWorkspace,
348
348
  isGitRepository
349
349
  };
350
- //# sourceMappingURL=chunk-Y3BSBKHY.js.map
350
+ //# sourceMappingURL=chunk-XE6UC5Z3.js.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  getEventStore
3
- } from "./chunk-AYCB32NI.js";
3
+ } from "./chunk-FGNJMKDV.js";
4
4
  import {
5
5
  createChatPathConfirmationMessage
6
6
  } from "./chunk-P57IBMK4.js";
7
7
  import {
8
8
  getPlatformShell
9
- } from "./chunk-6QZVAOSA.js";
9
+ } from "./chunk-MGEYAYGU.js";
10
10
 
11
11
  // src/server/tools/path-security.ts
12
12
  import { realpath } from "fs/promises";
@@ -782,4 +782,4 @@ export {
782
782
  getConfirmationSessionId,
783
783
  getPendingConfirmationsBySession
784
784
  };
785
- //# sourceMappingURL=chunk-VJNA5AOB.js.map
785
+ //# sourceMappingURL=chunk-Y6ZGHOKM.js.map
@@ -3,10 +3,10 @@ import {
3
3
  } from "./chunk-7ET46SNE.js";
4
4
  import {
5
5
  COMPACTION_PROMPT
6
- } from "./chunk-CGCEAKG5.js";
6
+ } from "./chunk-7JVBDBXE.js";
7
7
  import {
8
8
  getCurrentWindowMessageOptions
9
- } from "./chunk-AYCB32NI.js";
9
+ } from "./chunk-FGNJMKDV.js";
10
10
 
11
11
  // src/server/context/compactor.ts
12
12
  function appendCompactionPrompt(sessionId, append) {
@@ -36,4 +36,4 @@ export {
36
36
  COMPACTION_MAX_RATIO,
37
37
  shouldCompact
38
38
  };
39
- //# sourceMappingURL=chunk-VUIXQ6X4.js.map
39
+ //# sourceMappingURL=chunk-ZL4IAFF3.js.map