@jshookmcp/jshook 0.2.9 → 0.3.0

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 (187) hide show
  1. package/README.md +2 -2
  2. package/README.zh.md +2 -2
  3. package/dist/{AntiCheatDetector-BNk-EoBt.mjs → AntiCheatDetector-CqGDXmfc.mjs} +159 -53
  4. package/dist/{CodeInjector-Cq8q01kp.mjs → CodeInjector-BdjRfNx7.mjs} +5 -5
  5. package/dist/{ConsoleMonitor-CPVQW1Y-.mjs → ConsoleMonitor-DykL3IAw.mjs} +85 -17
  6. package/dist/{DetailedDataManager-BQQcxh64.mjs → DetailedDataManager-HT49OrvF.mjs} +1 -1
  7. package/dist/{ExtensionManager-CWYgw0YW.mjs → ExtensionManager-BDMsY2Dz.mjs} +15 -8
  8. package/dist/{HardwareBreakpoint-B9gZCdFP.mjs → HardwareBreakpoint-Cc2AFq1Y.mjs} +3 -3
  9. package/dist/{HeapAnalyzer-BLDH0dCv.mjs → HeapAnalyzer-DruMgsgj.mjs} +20 -20
  10. package/dist/{HookGeneratorBuilders.core.generators.storage-CtcdK78Q.mjs → HookGeneratorBuilders.core.generators.storage-CTbB4Lcx.mjs} +1 -74
  11. package/dist/{InstrumentationSession-CvPC7Jwy.mjs → InstrumentationSession-DLH0vd-z.mjs} +2 -2
  12. package/dist/{MemoryController-CbVdCIJF.mjs → MemoryController-CMtviNW_.mjs} +3 -3
  13. package/dist/{MemoryScanSession-BsDZbLYm.mjs → MemoryScanSession-ITgb_NMi.mjs} +2 -2
  14. package/dist/{MemoryScanner-Bcpml6II.mjs → MemoryScanner-CiL7Z3ey.mjs} +12 -9
  15. package/dist/{NativeMemoryManager.impl-dZtA1ZGn.mjs → NativeMemoryManager.impl-D9Lkovvn.mjs} +13 -10
  16. package/dist/{NativeMemoryManager.utils-B-FjA2mJ.mjs → NativeMemoryManager.utils-BBlAixF5.mjs} +1 -1
  17. package/dist/{PEAnalyzer-D1lzJ_VG.mjs → PEAnalyzer-DMQ44gen.mjs} +15 -15
  18. package/dist/{PageController-Bqm2kZ_X.mjs → PageController-BPJNqqBN.mjs} +18 -4
  19. package/dist/{PointerChainEngine-BOhyVsjx.mjs → PointerChainEngine-K7wN8Z-w.mjs} +10 -7
  20. package/dist/ProcessRegistry-zGg12QbE.mjs +74 -0
  21. package/dist/{ResponseBuilder-D3iFYx2N.mjs → ResponseBuilder-CJXWmWNw.mjs} +10 -10
  22. package/dist/{ScriptManager-aHHq0X7U.mjs → ScriptManager-ZuWD-0Jg.mjs} +195 -192
  23. package/dist/{Speedhack-CqdIFlQl.mjs → Speedhack-D-z0umeT.mjs} +2 -2
  24. package/dist/{StructureAnalyzer-DhFaPvRO.mjs → StructureAnalyzer-Cav5AVSL.mjs} +9 -6
  25. package/dist/{ToolCatalog-C0JGZoOm.mjs → ToolCatalog-5OJdMiF0.mjs} +81 -81
  26. package/dist/{ToolProbe-oC7aPrkv.mjs → ToolProbe-DbCFGyrg.mjs} +1 -1
  27. package/dist/{ToolRegistry-BjaF4oNz.mjs → ToolRegistry-B9krbTtI.mjs} +51 -2
  28. package/dist/{ToolRouter.policy-BWV67ZK-.mjs → ToolRouter.policy-BGDAGyeH.mjs} +60 -20
  29. package/dist/TraceRecorder-B41Z5XBj.mjs +1286 -0
  30. package/dist/{Win32API-CePkipZY.mjs → Win32API-C2kjj0ze.mjs} +18 -12
  31. package/dist/{Win32Debug-BvKs-gxc.mjs → Win32Debug-CKrGOTpo.mjs} +2 -2
  32. package/dist/{WorkflowEngine-CuvkZtWu.mjs → WorkflowEngine-DJ6M4opp.mjs} +226 -255
  33. package/dist/analysis-BHeJW2Nb.mjs +1234 -0
  34. package/dist/{antidebug-CqDTB_uk.mjs → antidebug-BRKeyt27.mjs} +3 -3
  35. package/dist/{artifactRetention-CFEprwPw.mjs → artifactRetention-CPXkUJXp.mjs} +13 -6
  36. package/dist/{artifacts-Bk2-_uPq.mjs → artifacts-DkfosXH3.mjs} +1 -1
  37. package/dist/authorization-schema-DRqyJMSk.mjs +31 -0
  38. package/dist/{binary-instrument-CXfpx6fT.mjs → binary-instrument--V3MAhJ4.mjs} +19 -27
  39. package/dist/bind-helpers-ClV34xdn.mjs +42 -0
  40. package/dist/{boringssl-inspector-BH2D3VKc.mjs → boringssl-inspector-Bo_LOLaS.mjs} +1 -1
  41. package/dist/{browser-BpOr5PEx.mjs → browser-Dx3_S2cG.mjs} +324 -37
  42. package/dist/capabilities-CcHlvWgK.mjs +33 -0
  43. package/dist/{constants-B0OANIBL.mjs → constants-CDZLOoVv.mjs} +18 -3
  44. package/dist/{coordination-qUbyF8KU.mjs → coordination-DgItD9DL.mjs} +2 -2
  45. package/dist/{debugger-gnKxRSN0.mjs → debugger-RS3RSAqs.mjs} +30 -13
  46. package/dist/definitions-BEoYofW5.mjs +47 -0
  47. package/dist/{definitions-bAhHQJq9.mjs → definitions-BRaefg3u.mjs} +11 -5
  48. package/dist/{definitions-DVGfrn7y.mjs → definitions-BbkvZkiv.mjs} +2 -2
  49. package/dist/definitions-BtWSHJ3o.mjs +17 -0
  50. package/dist/{definitions-BMfYXoNC.mjs → definitions-C1gCHO0i.mjs} +1 -1
  51. package/dist/{definitions-C1UvM5Iy.mjs → definitions-CDOg_b-l.mjs} +14 -2
  52. package/dist/definitions-CVPD9hzZ.mjs +54 -0
  53. package/dist/{definitions-Cke7zEb8.mjs → definitions-Cea8Lgl7.mjs} +1 -1
  54. package/dist/definitions-DAgIyjxM.mjs +10 -0
  55. package/dist/{definitions-B4rAvHNZ.mjs → definitions-DJA27nsL.mjs} +12 -9
  56. package/dist/{definitions-ClJLzsJQ.mjs → definitions-DKPFU3LW.mjs} +1 -1
  57. package/dist/{definitions-D3VsGcvz.mjs → definitions-DPRpZQ96.mjs} +7 -7
  58. package/dist/{definitions-B18eyf0B.mjs → definitions-DUE5gmdn.mjs} +1 -1
  59. package/dist/definitions-DYVjOtxa.mjs +26 -0
  60. package/dist/{definitions-BB_4jnmy.mjs → definitions-DcYLVLCo.mjs} +1 -1
  61. package/dist/{definitions-Beid2EB3.mjs → definitions-Pp5LI2H4.mjs} +1 -1
  62. package/dist/definitions-j9KdHVNR.mjs +14 -0
  63. package/dist/definitions-uzkjBwa7.mjs +258 -0
  64. package/dist/{definitions-Cq-zroAU.mjs → definitions-va-AnLuQ.mjs} +4 -4
  65. package/dist/{encoding-Bvz5jLRv.mjs → encoding-DJeqHmpd.mjs} +18 -4
  66. package/dist/{evidence-graph-bridge-C_fv9PuC.mjs → evidence-graph-bridge-DcYizFk2.mjs} +1 -0
  67. package/dist/{factory-DxlGh9Xf.mjs → factory-C90tBff6.mjs} +6 -6
  68. package/dist/flat-target-session-Dgax2Cy3.mjs +29 -0
  69. package/dist/{graphql-DYWzJ29s.mjs → graphql-CoHrhweh.mjs} +205 -34
  70. package/dist/{handlers-C67ktuRN.mjs → handlers-4jmR0nMs.mjs} +220 -32
  71. package/dist/{handlers-DlCJN4Td.mjs → handlers-BAHPxcch.mjs} +122 -90
  72. package/dist/{handlers-9sAbfIg-.mjs → handlers-BOs9b907.mjs} +849 -801
  73. package/dist/{handlers-DxGIq15_2.mjs → handlers-BWXEy6ef.mjs} +16 -16
  74. package/dist/{handlers-tB9Mp9ZK.mjs → handlers-Bndn6QvE.mjs} +31 -4
  75. package/dist/{handlers-CTsDAO6p.mjs → handlers-BqC4bD4s.mjs} +1 -1
  76. package/dist/{handlers-C87g8oCe.mjs → handlers-BtYq60bM2.mjs} +1 -1
  77. package/dist/{handlers-DeLOCd5m.mjs → handlers-BzgcB4iv.mjs} +17 -17
  78. package/dist/{handlers-Cgyg6c0U.mjs → handlers-CRyRWj2b.mjs} +237 -23
  79. package/dist/{handlers-U6L4xhuF.mjs → handlers-CVv2H1uq.mjs} +24 -17
  80. package/dist/{handlers-tiy7EIBp.mjs → handlers-Dl5a7JS4.mjs} +3 -3
  81. package/dist/{handlers-D6j6yka7.mjs → handlers-Dx2d7jt7.mjs} +1893 -1480
  82. package/dist/{handlers-Bl8zkwz1.mjs → handlers-Dz9PYsCa.mjs} +95 -6
  83. package/dist/handlers-HujRKC3b.mjs +661 -0
  84. package/dist/{handlers.impl-DS0d9fUw.mjs → handlers.impl-XWXkQfyi.mjs} +70 -24
  85. package/dist/{hooks-CzCWByww.mjs → hooks-B1B8NRHL.mjs} +3 -3
  86. package/dist/index.mjs +154 -144
  87. package/dist/{maintenance-P7ePRXQC.mjs → maintenance-PRMkLVRW.mjs} +35 -30
  88. package/dist/manifest-67Bok-Si.mjs +58 -0
  89. package/dist/{manifest-B3QVVeBS.mjs → manifest-6lNTMZAB2.mjs} +33 -28
  90. package/dist/manifest-B2duEHiH.mjs +90 -0
  91. package/dist/manifest-B6EY9Vm8.mjs +57 -0
  92. package/dist/{manifest-gZ4s_UtG.mjs → manifest-B6nKSbyY.mjs} +32 -33
  93. package/dist/{manifest-2ToTpjv8.mjs → manifest-BL8AQNPF.mjs} +31 -31
  94. package/dist/{manifest-DzwvxPJX.mjs → manifest-BSZvJJmV.mjs} +23 -14
  95. package/dist/{manifest-Sc_0JQ13.mjs → manifest-BU7qzUyX.mjs} +23 -23
  96. package/dist/{manifest-CT7zZBV1.mjs → manifest-Bl62e8WK.mjs} +24 -23
  97. package/dist/manifest-Bo5cXjdt.mjs +82 -0
  98. package/dist/manifest-BpS4gtUK.mjs +1347 -0
  99. package/dist/manifest-Bv65_e2W.mjs +101 -0
  100. package/dist/manifest-BytNIF4Z.mjs +117 -0
  101. package/dist/{manifest-BqrQ4Tpj.mjs → manifest-C-xtsjS3.mjs} +23 -23
  102. package/dist/{manifest-NXctwWQq.mjs → manifest-CDYl7OhA.mjs} +36 -38
  103. package/dist/manifest-CRZ3xmkD.mjs +61 -0
  104. package/dist/manifest-CoW6u4Tp.mjs +132 -0
  105. package/dist/manifest-Cq5zN_8A.mjs +50 -0
  106. package/dist/{manifest-CAhOuvSl.mjs → manifest-D7YZM_2e.mjs} +75 -85
  107. package/dist/{manifest-DCyjf4n2.mjs → manifest-DE_VrAeQ.mjs} +27 -7
  108. package/dist/manifest-DGsXSCpT.mjs +39 -0
  109. package/dist/{manifest-BB2J8IMJ.mjs → manifest-DJ2vfEuW.mjs} +48 -41
  110. package/dist/{manifest-3g71z6Bg.mjs → manifest-DPXDYhEu.mjs} +26 -25
  111. package/dist/manifest-Dd4fQb0a.mjs +322 -0
  112. package/dist/{manifest-CXsRWjjI.mjs → manifest-Deq6opGg.mjs} +95 -96
  113. package/dist/{manifest-C9RT5nk32.mjs → manifest-DfJTafJK.mjs} +14 -11
  114. package/dist/manifest-DgOdgN_j.mjs +50 -0
  115. package/dist/{manifest-BmtZzQiQ2.mjs → manifest-DlbMW4v4.mjs} +17 -15
  116. package/dist/{manifest-DrbmZcFl2.mjs → manifest-DmVfbH0w.mjs} +212 -91
  117. package/dist/manifest-Dog6Ddjr.mjs +109 -0
  118. package/dist/manifest-DvgU5FWb.mjs +58 -0
  119. package/dist/manifest-HsfDBs7j.mjs +50 -0
  120. package/dist/manifest-I8oQHvCG.mjs +186 -0
  121. package/dist/manifest-NvH_a-av.mjs +786 -0
  122. package/dist/{manifest-Dh8WBmEW.mjs → manifest-cEJU1v0Z.mjs} +24 -24
  123. package/dist/manifest-wOl5XLB12.mjs +112 -0
  124. package/dist/{modules-C184v-S9.mjs → modules-tZozf0LQ.mjs} +130 -860
  125. package/dist/{mojo-ipc-B_H61Afw.mjs → mojo-ipc-DXNEXEqb.mjs} +141 -26
  126. package/dist/{network-671Cw6hV.mjs → network-CPVvwvFg.mjs} +1329 -823
  127. package/dist/{outputPaths-B1uGmrWZ.mjs → outputPaths-um7lCRY3.mjs} +4 -8
  128. package/dist/{platform-WmNn8Sxb.mjs → platform-CYeFoTWp.mjs} +101 -10
  129. package/dist/{process-QcbIy5Zq.mjs → process-BTbgcVc6.mjs} +251 -346
  130. package/dist/{proxy-DqNs0bAd.mjs → proxy-r8YN6nP1.mjs} +30 -8
  131. package/dist/{registry-D-6e18lB.mjs → registry-Bl8ZQW61.mjs} +3 -3
  132. package/dist/{response-BQVP-xUn.mjs → response-CWhh2aLo.mjs} +7 -1
  133. package/dist/{shared-state-board-DV-dpHFJ.mjs → shared-state-board-BoZnSoj-.mjs} +2 -2
  134. package/dist/{sourcemap-Dq8ez8vS.mjs → sourcemap-BIDHUVXy.mjs} +350 -66
  135. package/dist/{streaming-BUQ0VJsg.mjs → streaming-Dal6utPp.mjs} +13 -13
  136. package/dist/{tool-builder-DCbIC5Eo.mjs → tool-builder-BHJp32mV.mjs} +1 -1
  137. package/dist/{transform-CiYJfNX0.mjs → transform-DRVgGG90.mjs} +18 -14
  138. package/dist/wasm-BYx5UOeG.mjs +1044 -0
  139. package/dist/webcrack-Be0_FccV.mjs +747 -0
  140. package/dist/{workflow-f3xJOcjx.mjs → workflow-BpuKEtvn.mjs} +8 -8
  141. package/package.json +76 -43
  142. package/dist/TraceRecorder-DgxyVbdQ.mjs +0 -519
  143. package/dist/analysis-CL9uACt9.mjs +0 -463
  144. package/dist/bind-helpers-xFfRF-qm.mjs +0 -22
  145. package/dist/definitions-6M-eejaT.mjs +0 -53
  146. package/dist/definitions-B3QdlrHv.mjs +0 -34
  147. package/dist/definitions-CXEI7QC72.mjs +0 -216
  148. package/dist/definitions-C_4r7Fo-2.mjs +0 -14
  149. package/dist/definitions-CkFDALoa.mjs +0 -26
  150. package/dist/definitions-Cy3Sl6gV.mjs +0 -34
  151. package/dist/definitions-LKpC3-nL.mjs +0 -9
  152. package/dist/handlers-DdFzXLvF.mjs +0 -446
  153. package/dist/manifest-82baTv4U.mjs +0 -45
  154. package/dist/manifest-BKbgbSiY.mjs +0 -60
  155. package/dist/manifest-Bcf-TJzH.mjs +0 -848
  156. package/dist/manifest-Bnd7kqEY.mjs +0 -55
  157. package/dist/manifest-BqQX6OQC2.mjs +0 -65
  158. package/dist/manifest-Br4RPFt5.mjs +0 -370
  159. package/dist/manifest-C5qDjysN.mjs +0 -107
  160. package/dist/manifest-CBYWCUBJ.mjs +0 -51
  161. package/dist/manifest-CFADCRa1.mjs +0 -37
  162. package/dist/manifest-CQVhavRF.mjs +0 -114
  163. package/dist/manifest-CV12bcrF.mjs +0 -121
  164. package/dist/manifest-CZLUCfG02.mjs +0 -95
  165. package/dist/manifest-D6phHKFd.mjs +0 -131
  166. package/dist/manifest-DHsnKgP6.mjs +0 -60
  167. package/dist/manifest-Df_dliIe.mjs +0 -55
  168. package/dist/manifest-DhKRAT8_.mjs +0 -92
  169. package/dist/manifest-DlpTj4ic2.mjs +0 -193
  170. package/dist/manifest-DuwHjUa5.mjs +0 -70
  171. package/dist/manifest-qSleDqdO.mjs +0 -1023
  172. package/dist/wasm-DQTnHDs4.mjs +0 -531
  173. /package/dist/{CacheAdapters-CDe5WPSV.mjs → CacheAdapters-jJFy20G-.mjs} +0 -0
  174. /package/dist/{DarwinAPI-BNPxu0RH.mjs → DarwinAPI-ETyy0xyo.mjs} +0 -0
  175. /package/dist/{EventBus-DgPmwpeu.mjs → EventBus-DFKvADm3.mjs} +0 -0
  176. /package/dist/{EvidenceGraphBridge-SFesNera.mjs → EvidenceGraphBridge-318Oi0Lf.mjs} +0 -0
  177. /package/dist/{FingerprintManager-gzWtkKuf.mjs → FingerprintManager-BN4UQWnX.mjs} +0 -0
  178. /package/dist/{PrerequisiteError-Dl33Svkz.mjs → PrerequisiteError-TuyZIs6n.mjs} +0 -0
  179. /package/dist/{ReverseEvidenceGraph-Dlsk94LC.mjs → ReverseEvidenceGraph-C02-gXOh.mjs} +0 -0
  180. /package/dist/{StealthVerifier-Bo4T3bz8.mjs → StealthVerifier-BWmPgQsv.mjs} +0 -0
  181. /package/dist/{VersionDetector-CwVLVdDM.mjs → VersionDetector-K3V4vGsw.mjs} +0 -0
  182. /package/dist/{betterSqlite3-0pqusHHH.mjs → betterSqlite3-DLSBZodi.mjs} +0 -0
  183. /package/dist/{concurrency-Bt0yv1kJ.mjs → concurrency-Drev_Vz9.mjs} +0 -0
  184. /package/dist/{formatAddress-DVkj9kpI.mjs → formatAddress-nnMvEohD.mjs} +0 -0
  185. /package/dist/{parse-args-BlRjqlkL.mjs → parse-args-B4cY5Vx5.mjs} +0 -0
  186. /package/dist/{ssrf-policy-ZaUfvhq7.mjs → ssrf-policy-Dsqd-DTX.mjs} +0 -0
  187. /package/dist/{types-CPhOReNX.mjs → types-DDBWs9UP.mjs} +0 -0
package/dist/index.mjs CHANGED
@@ -1,16 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import { t as logger } from "./logger-Dh_xb7_2.mjs";
3
- import { $n as SEARCH_WORKFLOW_DOMAIN_BOOST_MULTIPLIER, $t as PREDICTIVE_DECAY_FACTOR, A as COMPOUND_EVENT_WINDOW_MS, An as SEARCH_PREFIX_MATCH_MULTIPLIER, Bn as SEARCH_TIER_PENALTY_FULL, Cn as SEARCH_BM25_K1, Ct as MCP_HTTP_REQUEST_TIMEOUT_MS, Dn as SEARCH_DOMAIN_HUB_THRESHOLD, En as SEARCH_DOMAIN_HUB_BOOST_MULTIPLIER, Fn as SEARCH_RRF_BM25_BLEND, Gn as SEARCH_VECTOR_BM25_SKIP_THRESHOLD, Hn as SEARCH_TIER_PENALTY_WORKFLOW, In as SEARCH_RRF_K, Jn as SEARCH_VECTOR_ENABLED, Kn as SEARCH_VECTOR_COSINE_WEIGHT, Ln as SEARCH_RRF_RESCALE_FACTOR, Mn as SEARCH_RECENCY_MAX_BOOST, Nn as SEARCH_RECENCY_TRACKER_MAX, On as SEARCH_EXACT_NAME_MATCH_MULTIPLIER, Pn as SEARCH_RECENCY_WINDOW_MS, Qt as PREDICTIVE_CONFIDENCE_THRESHOLD, Rn as SEARCH_SYNONYM_EXPANSION_LIMIT, Sn as SEARCH_BM25_B, St as MCP_HTTP_KEEPALIVE_TIMEOUT_MS, Tn as SEARCH_COVERAGE_PRECISION_FACTOR, Un as SEARCH_TRIGRAM_THRESHOLD, Vn as SEARCH_TIER_PENALTY_SEARCH, Wn as SEARCH_TRIGRAM_WEIGHT, Xn as SEARCH_VECTOR_LEARN_TOP_N, Yn as SEARCH_VECTOR_LEARN_DOWN, Zn as SEARCH_VECTOR_LEARN_UP, a as ACTIVATION_TTL_MINUTES, an as RUNTIME_ERROR_WINDOW_MS, bn as SEARCH_AFFINITY_BOOST_FACTOR, bt as MCP_HTTP_FORCE_CLOSE_TIMEOUT_MS, en as PREDICTIVE_MAX_HISTORY, er as SHUTDOWN_TIMEOUT_MS, h as AUTOPRUNE_MANUAL_INACTIVITY_MS, i as ACTIVATION_EVENT_HISTORY_MAX, in as RUNTIME_ERROR_THRESHOLD, j as COMPOUND_LONG_WINDOW_MS, jn as SEARCH_QUERY_CACHE_CAPACITY, kn as SEARCH_PARAM_TOKEN_WEIGHT, lt as HTTP_CLEANUP_INTERVAL_MS, m as AUTOPRUNE_CHECK_INTERVAL_MS, n as ACTIVATION_COMPOUND_EVAL_EVERY, p as AUTOPRUNE_AUTO_INACTIVITY_MS, r as ACTIVATION_COOLDOWN_MS, t as ACTIVATION_BOOST_WINDOW_MS, tn as PREDICTIVE_MAX_SECOND_ORDER_KEYS, ut as HTTP_RATE_LIMIT_MAX_IPS, wn as SEARCH_CACHE_VECTOR_WEIGHT_TOLERANCE, xn as SEARCH_AFFINITY_TOP_N, xt as MCP_HTTP_HEADERS_TIMEOUT_MS, yn as SEARCH_AFFINITY_BASE_WEIGHT, yt as MCP_COMPACT_SCHEMA, zn as SEARCH_TIER_PENALTY } from "./constants-B0OANIBL.mjs";
4
- import { a as TokenBudgetManager, i as UnifiedCacheManager, n as getArtifactRetentionConfig, r as startArtifactRetentionScheduler, t as cleanupArtifacts } from "./artifactRetention-CFEprwPw.mjs";
5
- import { t as DetailedDataManager } from "./DetailedDataManager-BQQcxh64.mjs";
6
- import { r as asTextResponse, t as asErrorResponse } from "./response-BQVP-xUn.mjs";
7
- import { a as getToolsForProfile, c as ensureAllDomainsLoaded, d as getAllKnownDomains, f as getAllManifests, h as getLoaderMetadata, i as getToolsByDomains, l as ensureDomainLoaded, m as initRegistry, n as getProfileDomains, o as parseToolDomains, p as getAllRegistrations, r as getToolDomain, s as buildHandlerMapFromRegistry, t as allTools, u as getAllDomains } from "./ToolCatalog-C0JGZoOm.mjs";
3
+ import { $t as PREDICTIVE_CONFIDENCE_THRESHOLD, An as SEARCH_CACHE_VECTOR_WEIGHT_TOLERANCE, Bn as SEARCH_RECENCY_WINDOW_MS, Ct as MCP_HTTP_KEEPALIVE_TIMEOUT_MS, Dn as SEARCH_AFFINITY_TOP_N, En as SEARCH_AFFINITY_BOOST_FACTOR, Fn as SEARCH_PARAM_TOKEN_WEIGHT, Gn as SEARCH_TIER_PENALTY, Hn as SEARCH_RRF_K, In as SEARCH_PREFIX_MATCH_MULTIPLIER, Jn as SEARCH_TIER_PENALTY_WORKFLOW, Kn as SEARCH_TIER_PENALTY_FULL, Ln as SEARCH_QUERY_CACHE_CAPACITY, M as COMPOUND_LONG_WINDOW_MS, Mn as SEARCH_DOMAIN_HUB_BOOST_MULTIPLIER, Nn as SEARCH_DOMAIN_HUB_THRESHOLD, On as SEARCH_BM25_B, Pn as SEARCH_EXACT_NAME_MATCH_MULTIPLIER, Qn as SEARCH_VECTOR_COSINE_WEIGHT, Rn as SEARCH_RECENCY_MAX_BOOST, St as MCP_HTTP_HEADERS_TIMEOUT_MS, Tn as SEARCH_AFFINITY_BASE_WEIGHT, Un as SEARCH_RRF_RESCALE_FACTOR, Vn as SEARCH_RRF_BM25_BLEND, Wn as SEARCH_SYNONYM_EXPANSION_LIMIT, Xn as SEARCH_TRIGRAM_WEIGHT, Yn as SEARCH_TRIGRAM_THRESHOLD, Zn as SEARCH_VECTOR_BM25_SKIP_THRESHOLD, a as ACTIVATION_TTL_MINUTES, ar as SEARCH_WORKFLOW_DOMAIN_BOOST_MULTIPLIER, bt as MCP_COMPACT_SCHEMA, dn as RUNTIME_ERROR_WINDOW_MS, dt as HTTP_RATE_LIMIT_MAX_IPS, en as PREDICTIVE_DECAY_FACTOR, er as SEARCH_VECTOR_ENABLED, h as AUTOPRUNE_MANUAL_INACTIVITY_MS, i as ACTIVATION_EVENT_HISTORY_MAX, j as COMPOUND_EVENT_WINDOW_MS, jn as SEARCH_COVERAGE_PRECISION_FACTOR, kn as SEARCH_BM25_K1, m as AUTOPRUNE_CHECK_INTERVAL_MS, n as ACTIVATION_COMPOUND_EVAL_EVERY, nn as PREDICTIVE_MAX_SECOND_ORDER_KEYS, nr as SEARCH_VECTOR_LEARN_TOP_N, or as SHUTDOWN_TIMEOUT_MS, p as AUTOPRUNE_AUTO_INACTIVITY_MS, qn as SEARCH_TIER_PENALTY_SEARCH, r as ACTIVATION_COOLDOWN_MS, rr as SEARCH_VECTOR_LEARN_UP, t as ACTIVATION_BOOST_WINDOW_MS, tn as PREDICTIVE_MAX_HISTORY, tr as SEARCH_VECTOR_LEARN_DOWN, un as RUNTIME_ERROR_THRESHOLD, ut as HTTP_CLEANUP_INTERVAL_MS, wt as MCP_HTTP_REQUEST_TIMEOUT_MS, xt as MCP_HTTP_FORCE_CLOSE_TIMEOUT_MS, zn as SEARCH_RECENCY_TRACKER_MAX } from "./constants-CDZLOoVv.mjs";
4
+ import { a as TokenBudgetManager, i as UnifiedCacheManager, n as getArtifactRetentionConfig, r as startArtifactRetentionScheduler, t as cleanupArtifacts } from "./artifactRetention-CPXkUJXp.mjs";
5
+ import { t as DetailedDataManager } from "./DetailedDataManager-HT49OrvF.mjs";
6
+ import { r as asTextResponse, t as asErrorResponse } from "./response-CWhh2aLo.mjs";
7
+ import { a as getToolsForProfile, c as ensureAllDomainsLoaded, d as getAllKnownDomains, f as getAllManifests, h as getLoaderMetadata, i as getToolsByDomains, l as ensureDomainLoaded, m as initRegistry, n as getProfileDomains, o as parseToolDomains, p as getAllRegistrations, r as getToolDomain, s as buildHandlerMapFromRegistry, t as allTools, u as getAllDomains } from "./ToolCatalog-5OJdMiF0.mjs";
8
8
  import { t as ToolError } from "./ToolError-jh9whhMd.mjs";
9
- import { i as generateAntiDebugBypass, l as ProcessRegistry, r as getInjectionInstructions } from "./HookGeneratorBuilders.core.generators.storage-CtcdK78Q.mjs";
10
- import { c as getConfig, d as DEFAULT_SEARCH_CONFIG, u as validateConfig } from "./outputPaths-B1uGmrWZ.mjs";
11
- import { i as reloadExtensions, n as ensureWorkflowsLoaded, r as listExtensions } from "./ExtensionManager-CWYgw0YW.mjs";
12
- import { _ as isMaintenanceTask, a as getEffectivePrerequisites, c as getRoutingState, d as getToolInputSchema, f as isToolActive, g as isBrowserOrNetworkTask, h as detectWorkflowIntent, i as buildWorkflowToolSequence, l as getToolDescription, m as validateToolNameArray, n as buildRouteMatchMetadata, o as rerankResultsForContext, p as normalizeToolName, r as buildWorkflowRouteRecommendation, s as getAvailableToolNames, t as buildPresetRecommendations, u as getToolDomainFromContext, v as matchWorkflowRoute } from "./ToolRouter.policy-BWV67ZK-.mjs";
13
- import { n as createServerEventBus } from "./EventBus-DgPmwpeu.mjs";
9
+ import { t as ProcessRegistry } from "./ProcessRegistry-zGg12QbE.mjs";
10
+ import { c as getConfig, d as DEFAULT_SEARCH_CONFIG, u as validateConfig } from "./outputPaths-um7lCRY3.mjs";
11
+ import { i as reloadExtensions, n as ensureWorkflowsLoaded, r as listExtensions } from "./ExtensionManager-BDMsY2Dz.mjs";
12
+ import { _ as isBrowserOrNetworkTask, a as buildWorkflowToolSequence, b as matchWorkflowRoute, c as getAvailableToolNames, d as getToolDomainFromContext, f as getToolInputSchema, g as detectWorkflowIntent, h as validateToolNameArray, i as buildWorkflowRouteRecommendation, l as getRoutingState, m as normalizeToolName, n as buildRouteMatchMetadata, o as getEffectivePrerequisites, p as isToolActive, r as buildStatelessComputeRecommendations, s as rerankResultsForContext, t as buildPresetRecommendations, u as getToolDescription, v as isMaintenanceTask, y as isStatelessComputeTask } from "./ToolRouter.policy-BGDAGyeH.mjs";
13
+ import { i as generateAntiDebugBypass, r as getInjectionInstructions } from "./HookGeneratorBuilders.core.generators.storage-CTbB4Lcx.mjs";
14
+ import { n as createServerEventBus } from "./EventBus-DFKvADm3.mjs";
14
15
  import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
15
16
  import { CompleteRequestSchema, ErrorCode, McpError } from "@modelcontextprotocol/sdk/types.js";
16
17
  import { promises } from "fs";
@@ -307,7 +308,7 @@ var ToolExecutionRouter = class {
307
308
  * appends `_tabContext` metadata to responses so the LLM always knows which page
308
309
  * it is operating on, preventing silent context drift.
309
310
  *
310
- * Additionally, tracks consecutive identical tool calls and injects `_repeatWarning`
311
+ * Additionally, tracks consecutive identical tool calls and injects `repeatWarning`
311
312
  * when the same tool is called ≥ MAX_CONSECUTIVE_REPEATS times in a row, helping
312
313
  * break LLM degeneration loops (e.g. stealth_inject called 5× instead of page_navigate).
313
314
  */
@@ -345,15 +346,21 @@ const REPEAT_GUARD_EXCLUDES = new Set([
345
346
  const DOMAIN_ALTERNATIVES = new Map([
346
347
  ["stealth", [
347
348
  "page_navigate",
348
- "page_screenshot",
349
- "stealth_verify"
349
+ "page_evaluate",
350
+ "stealth_verify",
351
+ "page_screenshot"
350
352
  ]],
351
353
  ["page", [
352
- "dom_get_structure",
353
- "page_screenshot",
354
- "console_get_logs"
354
+ "browser_jsdom_parse",
355
+ "js_bundle_search",
356
+ "network_get_requests",
357
+ "page_screenshot"
358
+ ]],
359
+ ["console", [
360
+ "page_evaluate",
361
+ "console_get_logs",
362
+ "page_screenshot"
355
363
  ]],
356
- ["console", ["page_evaluate", "page_screenshot"]],
357
364
  ["network", ["network_get_requests", "page_navigate"]],
358
365
  ["captcha", ["captcha_wait", "page_screenshot"]],
359
366
  ["ai_hook", [
@@ -361,8 +368,8 @@ const DOMAIN_ALTERNATIVES = new Map([
361
368
  "page_evaluate",
362
369
  "ai_hook_inject"
363
370
  ]],
364
- ["instrumentation", ["instrumentation_session_list", "instrumentation_artifact_query"]],
365
- ["evidence", ["evidence_query_url", "evidence_chain"]]
371
+ ["instrumentation", ["instrumentation_session", "instrumentation_artifact"]],
372
+ ["evidence", ["evidence_query", "evidence_chain"]]
366
373
  ]);
367
374
  var ToolCallContextGuard = class {
368
375
  /** Memoize prefix-match results — tool names repeat heavily across calls. */
@@ -455,12 +462,17 @@ var ToolCallContextGuard = class {
455
462
  return raw.replace(/\}\s*$/, `,"_tabContext":${compactJson}}`);
456
463
  }
457
464
  /**
458
- * Inject a `_repeatWarning` into the response when a tool call loop is detected.
465
+ * Inject a `repeatWarning` into the response when a tool call loop is detected.
459
466
  * Splices into JSON text content if possible, or appends a new text entry.
460
467
  */
461
468
  injectRepeatWarning(toolName, response) {
462
469
  const prefix = toolName.split("_")[0] ?? "";
463
- const suggestions = (DOMAIN_ALTERNATIVES.get(prefix) ?? ["page_navigate", "page_screenshot"]).filter((t) => t !== toolName);
470
+ const suggestions = (toolName === "page_evaluate" ? [
471
+ "browser_jsdom_parse",
472
+ "js_bundle_search",
473
+ "network_get_requests",
474
+ "page_screenshot"
475
+ ] : DOMAIN_ALTERNATIVES.get(prefix) ?? ["page_navigate", "page_evaluate"]).filter((t) => t !== toolName);
464
476
  const warning = {
465
477
  detected: true,
466
478
  consecutiveCount: this.consecutiveCount,
@@ -476,7 +488,7 @@ var ToolCallContextGuard = class {
476
488
  try {
477
489
  const parsed = JSON.parse(raw);
478
490
  if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
479
- parsed._repeatWarning = warning;
491
+ parsed.repeatWarning = warning;
480
492
  firstText.text = JSON.stringify(parsed, null, 2);
481
493
  return;
482
494
  }
@@ -484,7 +496,7 @@ var ToolCallContextGuard = class {
484
496
  }
485
497
  content.push({
486
498
  type: "text",
487
- text: JSON.stringify({ _repeatWarning: warning }, null, 2)
499
+ text: JSON.stringify({ repeatWarning: warning }, null, 2)
488
500
  });
489
501
  }
490
502
  };
@@ -2113,20 +2125,7 @@ const QueryNormalizer = {
2113
2125
  }
2114
2126
  };
2115
2127
  //#endregion
2116
- //#region src/server/search/ToolSearchEngineImpl.ts
2117
- /**
2118
- * Hybrid BM25 + RRF multi-signal tool search engine for progressive tool discovery.
2119
- *
2120
- * Enhancements:
2121
- * - BM25 keyword scoring with synonym-expanded queries and field weights
2122
- * - Trigram fuzzy matching for typo tolerance
2123
- * - RRF (Reciprocal Rank Fusion) combining all signals
2124
- * - Dense vector similarity (384-dim embeddings) as semantic signal
2125
- * - Tool affinity graph with prefix-group expansion (§4.1.4 dependency hull)
2126
- * - Query category adaptive domain weights (§4.1.3 task-type encoding)
2127
- * - Parameter name indexing for schema-aware search
2128
- * - LRU query result cache (§4.3 CSAPC cross-session caching)
2129
- */
2128
+ //#region src/server/search/ToolSearchEngine.helpers.ts
2130
2129
  function findDelimitedIndex(haystack, needle, wordChar) {
2131
2130
  if (!needle) return -1;
2132
2131
  let idx = haystack.indexOf(needle);
@@ -2140,6 +2139,93 @@ function findDelimitedIndex(haystack, needle, wordChar) {
2140
2139
  }
2141
2140
  return -1;
2142
2141
  }
2142
+ function buildAffinityGraph(docs) {
2143
+ const graph = /* @__PURE__ */ new Map();
2144
+ const prefixGroups = /* @__PURE__ */ new Map();
2145
+ for (let i = 0; i < docs.length; i++) {
2146
+ const name = docs[i].name;
2147
+ const underscoreIdx = name.indexOf("_");
2148
+ if (underscoreIdx <= 0) continue;
2149
+ const prefix = name.slice(0, underscoreIdx);
2150
+ const group = prefixGroups.get(prefix) ?? [];
2151
+ group.push(i);
2152
+ prefixGroups.set(prefix, group);
2153
+ }
2154
+ for (const [, members] of prefixGroups) {
2155
+ if (members.length < 2 || members.length > 15) continue;
2156
+ const affinityWeight = SEARCH_AFFINITY_BASE_WEIGHT / Math.sqrt(members.length);
2157
+ for (const src of members) {
2158
+ const edges = graph.get(src) ?? [];
2159
+ for (const dst of members) if (dst !== src) edges.push({
2160
+ docIndex: dst,
2161
+ weight: affinityWeight
2162
+ });
2163
+ graph.set(src, edges);
2164
+ }
2165
+ }
2166
+ return graph;
2167
+ }
2168
+ function rankByScores(scores) {
2169
+ const entries = [];
2170
+ for (let i = 0; i < scores.length; i++) if (scores[i] > 0) entries.push({
2171
+ idx: i,
2172
+ score: scores[i]
2173
+ });
2174
+ entries.sort((a, b) => b.score - a.score);
2175
+ const ranked = /* @__PURE__ */ new Map();
2176
+ for (let rank = 0; rank < entries.length; rank++) ranked.set(entries[rank].idx, rank);
2177
+ return ranked;
2178
+ }
2179
+ function rankByMap(scoreMap) {
2180
+ const entries = [...scoreMap.entries()].toSorted((a, b) => b[1] - a[1]);
2181
+ const ranked = /* @__PURE__ */ new Map();
2182
+ for (let rank = 0; rank < entries.length; rank++) ranked.set(entries[rank][0], rank);
2183
+ return ranked;
2184
+ }
2185
+ function blendRrfIntoScores(scores, rrfScores) {
2186
+ for (let i = 0; i < scores.length; i++) {
2187
+ const rrfScore = rrfScores[i];
2188
+ if (rrfScore <= 0) continue;
2189
+ const bm25Original = scores[i];
2190
+ const rrfRescaled = rrfScore * SEARCH_RRF_RESCALE_FACTOR;
2191
+ const blend = SEARCH_RRF_BM25_BLEND;
2192
+ scores[i] = Math.max(bm25Original, rrfRescaled * blend) + rrfRescaled * blend;
2193
+ }
2194
+ }
2195
+ function applyGraphExpansionToScores(options) {
2196
+ const { scores, docs, affinityGraph } = options;
2197
+ const scored = [];
2198
+ for (let i = 0; i < scores.length; i++) if (scores[i] > 0) scored.push({
2199
+ idx: i,
2200
+ score: scores[i]
2201
+ });
2202
+ if (scored.length === 0) return;
2203
+ scored.sort((a, b) => b.score - a.score);
2204
+ if (affinityGraph.size > 0) {
2205
+ const limit = Math.min(SEARCH_AFFINITY_TOP_N, scored.length);
2206
+ for (let rank = 0; rank < limit; rank++) {
2207
+ const { idx, score } = scored[rank];
2208
+ const neighbors = affinityGraph.get(idx);
2209
+ if (!neighbors) continue;
2210
+ const rankDecay = 1 / (1 + rank);
2211
+ for (const { docIndex, weight } of neighbors) if (scores[docIndex] > 0) scores[docIndex] += score * weight * rankDecay * SEARCH_AFFINITY_BOOST_FACTOR;
2212
+ }
2213
+ }
2214
+ if (SEARCH_DOMAIN_HUB_THRESHOLD > 0 && scored.length >= SEARCH_DOMAIN_HUB_THRESHOLD) {
2215
+ const top10 = scored.slice(0, 10);
2216
+ const domainCounts = /* @__PURE__ */ new Map();
2217
+ for (const { idx } of top10) {
2218
+ const domain = docs[idx].domain;
2219
+ if (domain) domainCounts.set(domain, (domainCounts.get(domain) ?? 0) + 1);
2220
+ }
2221
+ for (const [domain, count] of domainCounts) {
2222
+ if (count < SEARCH_DOMAIN_HUB_THRESHOLD) continue;
2223
+ for (let i = 0; i < docs.length; i++) if (scores[i] > 0 && docs[i].domain === domain) scores[i] *= SEARCH_DOMAIN_HUB_BOOST_MULTIPLIER;
2224
+ }
2225
+ }
2226
+ }
2227
+ //#endregion
2228
+ //#region src/server/search/ToolSearchEngineImpl.ts
2143
2229
  function buildSearchCacheKey(query, topK, visibleDomains) {
2144
2230
  if (!visibleDomains || visibleDomains.size === 0) return `${query}\0${topK}`;
2145
2231
  return `${query}\0${topK}\0${[...visibleDomains].toSorted().join("|")}`;
@@ -2295,7 +2381,7 @@ var ToolSearchEngine = class {
2295
2381
  }
2296
2382
  this.avgDocLength = this.docCount > 0 ? totalLength / this.docCount : 1;
2297
2383
  this.sortedKeys = [...this.invertedIndex.keys()].toSorted();
2298
- this.affinityGraph = this.buildAffinityGraph();
2384
+ this.affinityGraph = buildAffinityGraph(this.docs);
2299
2385
  this.trigramIndex = new TrigramIndex(this.docs.map((d) => d.name));
2300
2386
  this.queryCache = new LRUCache(SEARCH_QUERY_CACHE_CAPACITY);
2301
2387
  }
@@ -2540,9 +2626,8 @@ var ToolSearchEngine = class {
2540
2626
  async applyRRFFusion(_queryTokens, query, scores) {
2541
2627
  const k = SEARCH_RRF_K;
2542
2628
  const trigramWeight = SEARCH_TRIGRAM_WEIGHT;
2543
- const bm25Ranked = this.rankByScores(scores);
2544
- const trigramScores = this.trigramIndex.search(query, SEARCH_TRIGRAM_THRESHOLD);
2545
- const trigramRanked = this.rankByMap(trigramScores);
2629
+ const bm25Ranked = rankByScores(scores);
2630
+ const trigramRanked = rankByMap(this.trigramIndex.search(query, SEARCH_TRIGRAM_THRESHOLD));
2546
2631
  let vectorScores;
2547
2632
  let vectorRanked;
2548
2633
  if (SEARCH_VECTOR_BM25_SKIP_THRESHOLD > 0 && bm25Ranked.size > 0) {
@@ -2552,15 +2637,16 @@ var ToolSearchEngine = class {
2552
2637
  vectorRanked = /* @__PURE__ */ new Map();
2553
2638
  } else {
2554
2639
  vectorScores = await this.computeVectorCosineScores(query);
2555
- vectorRanked = this.rankByMap(vectorScores);
2640
+ vectorRanked = rankByMap(vectorScores);
2556
2641
  }
2557
2642
  } else {
2558
2643
  vectorScores = await this.computeVectorCosineScores(query);
2559
- vectorRanked = this.rankByMap(vectorScores);
2644
+ vectorRanked = rankByMap(vectorScores);
2560
2645
  }
2561
2646
  const ranking = /* @__PURE__ */ new Map();
2562
2647
  for (const [docIdx, rank] of vectorRanked) ranking.set(this.docs[docIdx].name, rank);
2563
2648
  this.feedbackTracker.recordVectorRanking(ranking);
2649
+ const fusedRrfScores = new Float64Array(this.docCount);
2564
2650
  for (let i = 0; i < this.docCount; i++) {
2565
2651
  let rrfScore = 0;
2566
2652
  const bm25Rank = bm25Ranked.get(i);
@@ -2569,38 +2655,9 @@ var ToolSearchEngine = class {
2569
2655
  if (trigramRank !== void 0 && trigramWeight > 0) rrfScore += trigramWeight * (1 / (k + trigramRank));
2570
2656
  const vectorRank = vectorRanked.get(i);
2571
2657
  if (vectorRank !== void 0 && this.feedbackTracker.getVectorWeight() > 0) rrfScore += this.feedbackTracker.getVectorWeight() * (1 / (k + vectorRank));
2572
- if (rrfScore > 0) {
2573
- const bm25Original = scores[i];
2574
- const rrfRescaled = rrfScore * SEARCH_RRF_RESCALE_FACTOR;
2575
- const blend = SEARCH_RRF_BM25_BLEND;
2576
- scores[i] = Math.max(bm25Original, rrfRescaled * blend) + rrfRescaled * blend;
2577
- }
2658
+ fusedRrfScores[i] = rrfScore;
2578
2659
  }
2579
- }
2580
- /**
2581
- * Rank documents by Float64Array scores.
2582
- * Returns Map<docIndex, rank> (0-based, lower = better).
2583
- */
2584
- rankByScores(scores) {
2585
- const entries = [];
2586
- for (let i = 0; i < scores.length; i++) if (scores[i] > 0) entries.push({
2587
- idx: i,
2588
- score: scores[i]
2589
- });
2590
- entries.sort((a, b) => b.score - a.score);
2591
- const ranked = /* @__PURE__ */ new Map();
2592
- for (let rank = 0; rank < entries.length; rank++) ranked.set(entries[rank].idx, rank);
2593
- return ranked;
2594
- }
2595
- /**
2596
- * Rank documents by a score map.
2597
- * Returns Map<docIndex, rank> (0-based, lower = better).
2598
- */
2599
- rankByMap(scoreMap) {
2600
- const entries = [...scoreMap.entries()].toSorted((a, b) => b[1] - a[1]);
2601
- const ranked = /* @__PURE__ */ new Map();
2602
- for (let rank = 0; rank < entries.length; rank++) ranked.set(entries[rank][0], rank);
2603
- return ranked;
2660
+ blendRrfIntoScores(scores, fusedRrfScores);
2604
2661
  }
2605
2662
  /**
2606
2663
  * Lazy-compute and cache tool description embeddings.
@@ -2689,72 +2746,16 @@ var ToolSearchEngine = class {
2689
2746
  }
2690
2747
  /**
2691
2748
  * Build prefix-group affinity graph (§4.1.4 dependency hull).
2692
- * Tools sharing a name prefix (e.g. "breakpoint_set", "breakpoint_list")
2749
+ * Tools sharing a name prefix (e.g. legacy "breakpoint_set"/"breakpoint_list"
2750
+ * or unified families such as "memory_*")
2693
2751
  * form an affinity group with mutual edges.
2694
2752
  */
2695
- buildAffinityGraph() {
2696
- const graph = /* @__PURE__ */ new Map();
2697
- const prefixGroups = /* @__PURE__ */ new Map();
2698
- for (let i = 0; i < this.docCount; i++) {
2699
- const name = this.docs[i].name;
2700
- const underscoreIdx = name.indexOf("_");
2701
- if (underscoreIdx <= 0) continue;
2702
- const prefix = name.slice(0, underscoreIdx);
2703
- const group = prefixGroups.get(prefix) ?? [];
2704
- group.push(i);
2705
- prefixGroups.set(prefix, group);
2706
- }
2707
- for (const [, members] of prefixGroups) {
2708
- if (members.length < 2 || members.length > 15) continue;
2709
- const affinityWeight = SEARCH_AFFINITY_BASE_WEIGHT / Math.sqrt(members.length);
2710
- for (const src of members) {
2711
- const edges = graph.get(src) ?? [];
2712
- for (const dst of members) if (dst !== src) edges.push({
2713
- docIndex: dst,
2714
- weight: affinityWeight
2715
- });
2716
- graph.set(src, edges);
2717
- }
2718
- }
2719
- return graph;
2720
- }
2721
- /**
2722
- * Combined graph-based expansion: affinity (prefix-group co-retrieval) +
2723
- * domain hub (coherence boost for well-represented domains).
2724
- * Single sort of scored documents feeds both expansion strategies.
2725
- */
2726
2753
  applyGraphExpansion(scores) {
2727
- const scored = [];
2728
- for (let i = 0; i < this.docCount; i++) if (scores[i] > 0) scored.push({
2729
- idx: i,
2730
- score: scores[i]
2754
+ applyGraphExpansionToScores({
2755
+ scores,
2756
+ docs: this.docs,
2757
+ affinityGraph: this.affinityGraph
2731
2758
  });
2732
- if (scored.length === 0) return;
2733
- scored.sort((a, b) => b.score - a.score);
2734
- if (this.affinityGraph.size > 0) {
2735
- const topN = SEARCH_AFFINITY_TOP_N;
2736
- const boostFactor = SEARCH_AFFINITY_BOOST_FACTOR;
2737
- const limit = Math.min(topN, scored.length);
2738
- for (let rank = 0; rank < limit; rank++) {
2739
- const { idx, score } = scored[rank];
2740
- const neighbors = this.affinityGraph.get(idx);
2741
- if (!neighbors) continue;
2742
- const rankDecay = 1 / (1 + rank);
2743
- for (const { docIndex, weight } of neighbors) if (scores[docIndex] > 0) scores[docIndex] += score * weight * rankDecay * boostFactor;
2744
- }
2745
- }
2746
- const threshold = SEARCH_DOMAIN_HUB_THRESHOLD;
2747
- if (threshold > 0 && scored.length >= threshold) {
2748
- const top10 = scored.slice(0, 10);
2749
- const domainCounts = /* @__PURE__ */ new Map();
2750
- for (const { idx } of top10) {
2751
- const domain = this.docs[idx].domain;
2752
- if (domain) domainCounts.set(domain, (domainCounts.get(domain) ?? 0) + 1);
2753
- }
2754
- for (const [domain, count] of domainCounts) if (count >= threshold) {
2755
- for (let i = 0; i < this.docCount; i++) if (scores[i] > 0 && this.docs[i].domain === domain) scores[i] *= SEARCH_DOMAIN_HUB_BOOST_MULTIPLIER;
2756
- }
2757
- }
2758
2759
  }
2759
2760
  };
2760
2761
  //#endregion
@@ -3679,7 +3680,7 @@ function stripParamDescriptions(schema) {
3679
3680
  }
3680
3681
  function registerSingleTool(ctx, toolDef) {
3681
3682
  const builtTool = toolDef;
3682
- if (builtTool.__autocomplete) ctx.toolAutocompleteHandlers.set(toolDef.name, builtTool.__autocomplete);
3683
+ if (builtTool.autocompleteHandlers) ctx.toolAutocompleteHandlers.set(toolDef.name, builtTool.autocompleteHandlers);
3683
3684
  const rawSchema = MCP_COMPACT_SCHEMA && toolDef.inputSchema ? stripParamDescriptions(toolDef.inputSchema) : toolDef.inputSchema;
3684
3685
  const shape = rawSchema && typeof rawSchema === "object" ? buildZodShape(rawSchema) : {};
3685
3686
  const description = toolDef.description ?? toolDef.name;
@@ -3697,7 +3698,7 @@ function registerSingleTool(ctx, toolDef) {
3697
3698
  }
3698
3699
  });
3699
3700
  if (builtTool.execution) {
3700
- const sdkInternalMap = ctx.server._registeredTools;
3701
+ const sdkInternalMap = ctx.server.registeredTools;
3701
3702
  if (sdkInternalMap && sdkInternalMap[toolDef.name]) sdkInternalMap[toolDef.name].execution = builtTool.execution;
3702
3703
  }
3703
3704
  return registeredTool;
@@ -3712,7 +3713,7 @@ function registerSingleTool(ctx, toolDef) {
3712
3713
  }
3713
3714
  });
3714
3715
  if (builtTool.execution) {
3715
- const sdkInternalMap = ctx.server._registeredTools;
3716
+ const sdkInternalMap = ctx.server.registeredTools;
3716
3717
  if (sdkInternalMap && sdkInternalMap[toolDef.name]) sdkInternalMap[toolDef.name].execution = builtTool.execution;
3717
3718
  }
3718
3719
  return registeredTool;
@@ -3778,17 +3779,25 @@ async function routeToolRequest(request, ctx, searchEngine) {
3778
3779
  const workflowResult = buildWorkflowRouteRecommendation(routeMatch, ctx);
3779
3780
  finalResults = [workflowResult, ...searchResults.filter((result) => result.name !== workflowResult.name)];
3780
3781
  } else if (workflow) {
3782
+ const statelessWorkflow = isStatelessComputeTask(task);
3781
3783
  const workflowSequence = buildWorkflowToolSequence(workflow, routingState, availableToolNames);
3782
3784
  const workflowTools = workflowSequence.map((name, index) => ({
3783
3785
  name,
3784
3786
  domain: getToolDomainFromContext(name, ctx),
3785
3787
  shortDescription: searchResults.find((r) => r.name === name)?.shortDescription ?? ctx.extensionToolsByName.get(name)?.tool.description ?? "",
3786
- score: workflow.priority - index * .01,
3788
+ score: (statelessWorkflow ? 90 : workflow.priority) - index * .01,
3787
3789
  isActive: isToolActive(name, ctx)
3788
3790
  }));
3789
3791
  const workflowNames = new Set(workflowSequence);
3790
3792
  const otherResults = searchResults.filter((result) => !workflowNames.has(result.name));
3791
3793
  finalResults = [...workflowTools, ...otherResults];
3794
+ } else if (task && !isBrowserOrNetworkTask(task, workflow) && !isMaintenanceTask(task)) {
3795
+ const statelessRecommendations = buildStatelessComputeRecommendations(task, ctx, availableToolNames);
3796
+ if (statelessRecommendations.length > 0) {
3797
+ const statelessNames = new Set(statelessRecommendations.map((tool) => tool.name));
3798
+ const otherResults = searchResults.filter((result) => !statelessNames.has(result.name));
3799
+ finalResults = [...statelessRecommendations, ...otherResults];
3800
+ } else finalResults = [...searchResults];
3792
3801
  } else finalResults = [...searchResults];
3793
3802
  const dedupedResults = [];
3794
3803
  const seenNames = /* @__PURE__ */ new Set();
@@ -4174,6 +4183,7 @@ function buildCallToolMetadata(wasAutoActivated, activatedTools) {
4174
4183
  };
4175
4184
  }
4176
4185
  function attachCallToolMetadata(response, metadata) {
4186
+ if (!response?.content || !Array.isArray(response.content)) return response;
4177
4187
  return {
4178
4188
  ...response,
4179
4189
  content: response.content.map((item) => {
@@ -4269,7 +4279,7 @@ function buildMetaToolDefinitions(ctx) {
4269
4279
  },
4270
4280
  autoActivate: {
4271
4281
  type: "boolean",
4272
- description: "Whether to auto-activate recommended tools (default: true)"
4282
+ description: "Whether to auto-activate recommended tools (default: false)"
4273
4283
  },
4274
4284
  maxRecommendations: {
4275
4285
  type: "number",
@@ -4325,7 +4335,7 @@ function buildMetaToolDefinitions(ctx) {
4325
4335
  },
4326
4336
  {
4327
4337
  name: "activate_domain",
4328
- description: `Activate all tools in a domain at once. Domains: ${[...getAllDomains()].join(", ")}. Use extensions_reload first to include external plugin/workflow domains.`,
4338
+ description: `Activate all tools in a domain at once. Domains: ${[...getAllDomains()].join(", ")}. Use reload_extensions first to include external plugin/workflow domains.`,
4329
4339
  inputSchema: {
4330
4340
  type: "object",
4331
4341
  properties: {
@@ -4344,7 +4354,7 @@ function buildMetaToolDefinitions(ctx) {
4344
4354
  },
4345
4355
  {
4346
4356
  name: "call_tool",
4347
- description: "Execute any tool by name with auto-activation. Use this when activate_tools/activate_domain registered a tool but it does not appear in your tool list (common for clients that do not support tools/list_changed notifications). Accepts the tool name and its arguments object; returns the tool's native response.",
4357
+ description: "Execute an already-active tool by name. Use this when activate_tools/activate_domain registered a tool but your client did not refresh its tool list. Does not auto-activate inactive tools.",
4348
4358
  inputSchema: {
4349
4359
  type: "object",
4350
4360
  properties: {
@@ -4872,7 +4882,7 @@ var MCPServer = class {
4872
4882
  }
4873
4883
  this.cacheRegistrationPromise = (async () => {
4874
4884
  try {
4875
- const { createCacheAdapters } = await import("./CacheAdapters-CDe5WPSV.mjs");
4885
+ const { createCacheAdapters } = await import("./CacheAdapters-jJFy20G-.mjs");
4876
4886
  const codeCache = this.collector.getCache();
4877
4887
  const codeCompressor = this.collector.getCompressor();
4878
4888
  const adapters = createCacheAdapters(this.detailedData, codeCache, codeCompressor);
@@ -1,13 +1,13 @@
1
1
  import { t as logger } from "./logger-Dh_xb7_2.mjs";
2
- import { H as EXTENSION_GIT_CHECKOUT_TIMEOUT_MS, Q as GHIDRA_BRIDGE_ENDPOINT, U as EXTENSION_GIT_CLONE_TIMEOUT_MS, mt as IDA_BRIDGE_ENDPOINT } from "./constants-B0OANIBL.mjs";
3
- import { n as getArtifactRetentionConfig, t as cleanupArtifacts } from "./artifactRetention-CFEprwPw.mjs";
4
- import { i as serializeError, n as asJsonResponse } from "./response-BQVP-xUn.mjs";
5
- import { c as getConfig, i as getProjectRoot } from "./outputPaths-B1uGmrWZ.mjs";
2
+ import { $ as GHIDRA_BRIDGE_ENDPOINT, U as EXTENSION_GIT_CHECKOUT_TIMEOUT_MS, W as EXTENSION_GIT_CLONE_TIMEOUT_MS, ht as IDA_BRIDGE_ENDPOINT } from "./constants-CDZLOoVv.mjs";
3
+ import { n as getArtifactRetentionConfig, t as cleanupArtifacts } from "./artifactRetention-CPXkUJXp.mjs";
4
+ import { a as serializeError, n as asJsonResponse } from "./response-CWhh2aLo.mjs";
5
+ import { c as getConfig, i as getProjectRoot } from "./outputPaths-um7lCRY3.mjs";
6
6
  import { t as INSTALLED_EXTENSION_METADATA_FILENAME } from "./types-Bx92KJfT.mjs";
7
- import { r as probeBetterSqlite3 } from "./betterSqlite3-0pqusHHH.mjs";
8
- import { r as ioLimit } from "./concurrency-Bt0yv1kJ.mjs";
9
- import { t as ToolRegistry } from "./ToolRegistry-BjaF4oNz.mjs";
10
- import "./definitions-ClJLzsJQ.mjs";
7
+ import { r as probeBetterSqlite3 } from "./betterSqlite3-DLSBZodi.mjs";
8
+ import { r as ioLimit } from "./concurrency-Drev_Vz9.mjs";
9
+ import { t as ToolRegistry } from "./ToolRegistry-B9krbTtI.mjs";
10
+ import "./definitions-DKPFU3LW.mjs";
11
11
  import { createRequire } from "node:module";
12
12
  import { existsSync } from "node:fs";
13
13
  import { dirname, isAbsolute, relative, resolve } from "node:path";
@@ -395,7 +395,10 @@ var CoreMaintenanceHandlers = class {
395
395
  }
396
396
  };
397
397
  //#endregion
398
- //#region src/server/domains/maintenance/handlers.extensions.ts
398
+ //#region src/server/domains/maintenance/handlers/extension-registry-utils.ts
399
+ /**
400
+ * Extension registry utilities — fetch, cache, install helpers.
401
+ */
399
402
  const execFileAsync = promisify(execFile);
400
403
  function getJshookInstallRoot() {
401
404
  return fileURLToPath(new URL("../../../../", import.meta.url));
@@ -658,6 +661,8 @@ async function findRegistryEntryBySlug(registryBase, slug) {
658
661
  if (workflowFetchError) throw new Error(`Extension "${slug}" was not found in plugin registry, and workflow registry lookup failed: ${workflowFetchError.message}`);
659
662
  throw new Error(`Extension "${slug}" not found in workflow or plugin registry`);
660
663
  }
664
+ //#endregion
665
+ //#region src/server/domains/maintenance/handlers.extensions.ts
661
666
  var ExtensionManagementHandlers = class {
662
667
  ctx;
663
668
  constructor(ctx) {
@@ -692,20 +697,20 @@ var ExtensionManagementHandlers = class {
692
697
  const showWorkflows = kind === "all" || kind === "workflow";
693
698
  const result = { success: true };
694
699
  let stale = false;
695
- const pluginPromise = showPlugins ? fetchJson(`${registryBase}/plugins.index.json`, { cacheKey: "plugins" }) : void 0;
696
- const workflowPromise = showWorkflows ? fetchJson(`${registryBase}/workflows.index.json`, { cacheKey: "workflows" }) : void 0;
697
- const [pluginIndex, workflowIndex] = await Promise.all([pluginPromise ?? Promise.resolve(void 0), workflowPromise ?? Promise.resolve(void 0)]);
700
+ const pluginIndexPromise = showPlugins ? fetchJson(`${registryBase}/plugins.index.json`, { cacheKey: "plugins" }) : void 0;
701
+ const workflowIndexPromise = showWorkflows ? fetchJson(`${registryBase}/workflows.index.json`, { cacheKey: "workflows" }) : void 0;
702
+ const [pluginIndex, workflowIndex] = await Promise.all([pluginIndexPromise ?? Promise.resolve(void 0), workflowIndexPromise ?? Promise.resolve(void 0)]);
698
703
  if (pluginIndex) {
699
704
  const plugins = Array.isArray(pluginIndex.data.plugins) ? pluginIndex.data.plugins : [];
700
- result.plugins = plugins.map((p) => ({
701
- slug: p.slug,
702
- id: p.id,
703
- name: p.meta.name,
704
- description: p.meta.description,
705
- author: p.meta.author,
706
- repo: p.source.repo,
707
- commit: p.source.commit,
708
- entry: p.source.entry
705
+ result.plugins = plugins.map((plugin) => ({
706
+ slug: plugin.slug,
707
+ id: plugin.id,
708
+ name: plugin.meta.name,
709
+ description: plugin.meta.description,
710
+ author: plugin.meta.author,
711
+ repo: plugin.source.repo,
712
+ commit: plugin.source.commit,
713
+ entry: plugin.source.entry
709
714
  }));
710
715
  result.pluginCount = plugins.length;
711
716
  result.pluginSource = pluginIndex.source;
@@ -713,15 +718,15 @@ var ExtensionManagementHandlers = class {
713
718
  }
714
719
  if (workflowIndex) {
715
720
  const workflows = Array.isArray(workflowIndex.data.workflows) ? workflowIndex.data.workflows : [];
716
- result.workflows = workflows.map((w) => ({
717
- slug: w.slug,
718
- id: w.id,
719
- name: w.meta.name,
720
- description: w.meta.description,
721
- author: w.meta.author,
722
- repo: w.source.repo,
723
- commit: w.source.commit,
724
- entry: w.source.entry
721
+ result.workflows = workflows.map((workflow) => ({
722
+ slug: workflow.slug,
723
+ id: workflow.id,
724
+ name: workflow.meta.name,
725
+ description: workflow.meta.description,
726
+ author: workflow.meta.author,
727
+ repo: workflow.source.repo,
728
+ commit: workflow.source.commit,
729
+ entry: workflow.source.entry
725
730
  }));
726
731
  result.workflowCount = workflows.length;
727
732
  result.workflowSource = workflowIndex.source;
@@ -0,0 +1,58 @@
1
+ import { n as toolLookup } from "./registry-Bl8ZQW61.mjs";
2
+ import { n as defineMethodRegistrations } from "./bind-helpers-ClV34xdn.mjs";
3
+ import { t as transformTools } from "./definitions-va-AnLuQ.mjs";
4
+ //#region src/server/domains/transform/manifest.ts
5
+ const DOMAIN = "transform";
6
+ const DEP_KEY = "transformHandlers";
7
+ const registrations = defineMethodRegistrations({
8
+ domain: DOMAIN,
9
+ depKey: DEP_KEY,
10
+ lookup: toolLookup(transformTools),
11
+ entries: [
12
+ {
13
+ tool: "ast_transform_preview",
14
+ method: "handleAstTransformPreview"
15
+ },
16
+ {
17
+ tool: "ast_transform_chain",
18
+ method: "handleAstTransformChain"
19
+ },
20
+ {
21
+ tool: "ast_transform_apply",
22
+ method: "handleAstTransformApply"
23
+ },
24
+ {
25
+ tool: "crypto_extract_standalone",
26
+ method: "handleCryptoExtractStandalone"
27
+ },
28
+ {
29
+ tool: "crypto_test_harness",
30
+ method: "handleCryptoTestHarness"
31
+ },
32
+ {
33
+ tool: "crypto_compare",
34
+ method: "handleCryptoCompare"
35
+ }
36
+ ]
37
+ });
38
+ async function ensure(ctx) {
39
+ const { CodeCollector } = await import("./modules-tZozf0LQ.mjs").then((n) => n.t);
40
+ const { TransformToolHandlers } = await import("./transform-DRVgGG90.mjs");
41
+ if (!ctx.collector) {
42
+ ctx.collector = new CodeCollector(ctx.config.puppeteer);
43
+ ctx.registerCaches();
44
+ }
45
+ if (!ctx.transformHandlers) ctx.transformHandlers = new TransformToolHandlers(ctx.collector);
46
+ return ctx.transformHandlers;
47
+ }
48
+ const manifest = {
49
+ kind: "domain-manifest",
50
+ version: 1,
51
+ domain: DOMAIN,
52
+ depKey: DEP_KEY,
53
+ profiles: ["full"],
54
+ ensure,
55
+ registrations
56
+ };
57
+ //#endregion
58
+ export { manifest as default };