@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
@@ -1,9 +1,10 @@
1
- import { f as getAllManifests, r as getToolDomain, t as allTools } from "./ToolCatalog-C0JGZoOm.mjs";
1
+ import { f as getAllManifests, r as getToolDomain, t as allTools } from "./ToolCatalog-5OJdMiF0.mjs";
2
2
  //#region src/server/ToolRouter.intent.ts
3
3
  const BROWSER_OR_NETWORK_TASK_PATTERN = /(browser|page|navigate|click|type|screenshot|scrape|network|request|response|api|traffic|hook|capture|intercept|monitor|浏览器|页面|导航|点击|输入|截图|爬取|网络|请求|响应|接口|流量|抓包|拦截|监控)/i;
4
4
  const MAINTENANCE_TASK_PATTERN = /(token budget|cache|artifact|extension|plugin|reload|doctor|cleanup|memory|profile|tool list|令牌预算|缓存|工件|扩展|插件|重载|环境诊断|清理|内存|配置)/i;
5
- let _cachedWorkflowRules = null;
6
- const _intentCache = /* @__PURE__ */ new Map();
5
+ const STATELESS_COMPUTE_TASK_PATTERN = /(stateless|deterministic|pure compute|offline|decode|encode|hex|base64|protobuf|msgpack|checksum|hash|payload|frame|packet|bytes?|bytecode|pcap|protocol|state machine|field inference|ast transform|crypto harness|无状态|确定性|纯算|离线|解码|编码|十六进制|校验和|载荷|字节|协议|报文|帧|字段推断|状态机|构包)/i;
6
+ let cachedWorkflowRules = null;
7
+ const intentCache = /* @__PURE__ */ new Map();
7
8
  const INTENT_CACHE_MAX = 64;
8
9
  /**
9
10
  * Aggregate workflow rules declared by domain manifests.
@@ -13,7 +14,7 @@ const INTENT_CACHE_MAX = 64;
13
14
  * Cached lazily — manifests are immutable at runtime.
14
15
  */
15
16
  function getEffectiveWorkflowRules() {
16
- if (_cachedWorkflowRules) return _cachedWorkflowRules;
17
+ if (cachedWorkflowRules) return cachedWorkflowRules;
17
18
  const rules = [];
18
19
  for (const m of getAllManifests()) if (m.workflowRule) rules.push({
19
20
  patterns: [...m.workflowRule.patterns],
@@ -22,12 +23,12 @@ function getEffectiveWorkflowRules() {
22
23
  tools: [...m.workflowRule.tools],
23
24
  hint: m.workflowRule.hint
24
25
  });
25
- _cachedWorkflowRules = [...rules].toSorted((a, b) => b.priority - a.priority);
26
- _intentCache.clear();
27
- return _cachedWorkflowRules;
26
+ cachedWorkflowRules = [...rules].toSorted((a, b) => b.priority - a.priority);
27
+ intentCache.clear();
28
+ return cachedWorkflowRules;
28
29
  }
29
30
  function detectWorkflowIntent(query) {
30
- const cached = _intentCache.get(query);
31
+ const cached = intentCache.get(query);
31
32
  if (cached !== void 0) return cached;
32
33
  const matches = [];
33
34
  for (const rule of getEffectiveWorkflowRules()) for (const pattern of rule.patterns) if (pattern.test(query)) {
@@ -35,11 +36,11 @@ function detectWorkflowIntent(query) {
35
36
  break;
36
37
  }
37
38
  const result = matches.length === 0 ? null : matches.toSorted((a, b) => b.priority - a.priority)[0];
38
- if (_intentCache.size >= INTENT_CACHE_MAX) {
39
- const firstKey = _intentCache.keys().next().value;
40
- if (firstKey !== void 0) _intentCache.delete(firstKey);
39
+ if (intentCache.size >= INTENT_CACHE_MAX) {
40
+ const firstKey = intentCache.keys().next().value;
41
+ if (firstKey !== void 0) intentCache.delete(firstKey);
41
42
  }
42
- _intentCache.set(query, result);
43
+ intentCache.set(query, result);
43
44
  return result;
44
45
  }
45
46
  function matchWorkflowRoute(query, ctx) {
@@ -69,11 +70,15 @@ function matchWorkflowRoute(query, ctx) {
69
70
  return bestMatch;
70
71
  }
71
72
  function isBrowserOrNetworkTask(task, workflow) {
73
+ if (workflow?.domain !== "browser" && workflow?.domain !== "network" && isStatelessComputeTask(task)) return false;
72
74
  return workflow?.domain === "browser" || workflow?.domain === "network" || BROWSER_OR_NETWORK_TASK_PATTERN.test(task);
73
75
  }
74
76
  function isMaintenanceTask(task) {
75
77
  return MAINTENANCE_TASK_PATTERN.test(task);
76
78
  }
79
+ function isStatelessComputeTask(task) {
80
+ return STATELESS_COMPUTE_TASK_PATTERN.test(task);
81
+ }
77
82
  //#endregion
78
83
  //#region src/server/MCPServer.search.validation.ts
79
84
  /**
@@ -104,10 +109,10 @@ function validateToolNameArray(args) {
104
109
  }
105
110
  //#endregion
106
111
  //#region src/server/ToolRouter.probe.ts
107
- let _allToolsByName = null;
112
+ let allToolsByNameCache = null;
108
113
  function getAllToolsByName() {
109
- if (!_allToolsByName) _allToolsByName = new Map(allTools.map((t) => [t.name, t]));
110
- return _allToolsByName;
114
+ if (!allToolsByNameCache) allToolsByNameCache = new Map(allTools.map((t) => [t.name, t]));
115
+ return allToolsByNameCache;
111
116
  }
112
117
  function getToolInputSchema(toolName, ctx) {
113
118
  const canonicalName = normalizeToolName(toolName);
@@ -177,6 +182,25 @@ async function getRoutingState(ctx) {
177
182
  }
178
183
  //#endregion
179
184
  //#region src/server/ToolRouter.policy.ts
185
+ function buildStatelessComputeSequence(task, availableToolNames) {
186
+ if (!isStatelessComputeTask(task)) return [];
187
+ const candidates = [];
188
+ const pushIfAvailable = (name, description) => {
189
+ if (availableToolNames.has(name) && !candidates.some((item) => item.name === name)) candidates.push({
190
+ name,
191
+ description
192
+ });
193
+ };
194
+ pushIfAvailable("binary_detect_format", "Detect the payload encoding or container before decoding");
195
+ pushIfAvailable("binary_decode", "Decode the payload into deterministic offline bytes or structured output");
196
+ pushIfAvailable("proto_auto_detect", "Infer a likely protocol layout from repeated payload samples");
197
+ pushIfAvailable("proto_infer_fields", "Derive stable field boundaries and candidate semantics");
198
+ pushIfAvailable("proto_infer_state_machine", "Infer request/response state transitions from repeated samples");
199
+ pushIfAvailable("crypto_test_harness", "Validate extracted signing or crypto logic with deterministic test vectors");
200
+ pushIfAvailable("crypto_compare", "Compare competing crypto implementations against the same vectors");
201
+ pushIfAvailable("network_get_requests", "Collect request or response samples only if payload bytes still need to be extracted");
202
+ return candidates;
203
+ }
180
204
  /**
181
205
  * Build a real runtime check function from the prerequisite condition string.
182
206
  * Returns true when the prerequisite IS satisfied, false when it is not.
@@ -190,21 +214,21 @@ function buildPrerequisiteCheck(condition) {
190
214
  if (condition.includes("WebSocket monitoring")) return (state) => state.hasActivePage;
191
215
  return () => false;
192
216
  }
193
- let _cachedPrerequisites = null;
217
+ let cachedPrerequisites = null;
194
218
  /**
195
219
  * Aggregate prerequisite declarations from domain manifests.
196
220
  * Cached lazily — manifests are immutable at runtime.
197
221
  */
198
222
  function getEffectivePrerequisites() {
199
- if (_cachedPrerequisites) return _cachedPrerequisites;
223
+ if (cachedPrerequisites) return cachedPrerequisites;
200
224
  const merged = {};
201
225
  for (const m of getAllManifests()) if (m.prerequisites) for (const [toolName, entries] of Object.entries(m.prerequisites)) merged[toolName] = entries.map((e) => ({
202
226
  condition: e.condition,
203
227
  check: buildPrerequisiteCheck(e.condition),
204
228
  fix: e.fix
205
229
  }));
206
- _cachedPrerequisites = merged;
207
- return _cachedPrerequisites;
230
+ cachedPrerequisites = merged;
231
+ return cachedPrerequisites;
208
232
  }
209
233
  function buildWorkflowToolSequence(workflow, state, availableToolNames) {
210
234
  const sequence = [];
@@ -251,6 +275,15 @@ function buildPresetRecommendations(match, state, ctx, availableToolNames) {
251
275
  isActive: isToolActive(plannedTool.name, ctx)
252
276
  }));
253
277
  }
278
+ function buildStatelessComputeRecommendations(task, ctx, availableToolNames) {
279
+ return buildStatelessComputeSequence(task, availableToolNames).map((plannedTool, index) => ({
280
+ name: plannedTool.name,
281
+ domain: getToolDomainFromContext(plannedTool.name, ctx),
282
+ shortDescription: plannedTool.description,
283
+ score: 90 - index * .01,
284
+ isActive: isToolActive(plannedTool.name, ctx)
285
+ }));
286
+ }
254
287
  function buildWorkflowRouteRecommendation(match, ctx) {
255
288
  return {
256
289
  name: "run_extension_workflow",
@@ -283,9 +316,16 @@ function buildRouteMatchMetadata(match, ctx) {
283
316
  function rerankResultsForContext(results, task, workflow, state) {
284
317
  const browserOrNetworkTask = isBrowserOrNetworkTask(task, workflow);
285
318
  const maintenanceTask = isMaintenanceTask(task);
319
+ const statelessComputeTask = isStatelessComputeTask(task);
286
320
  const reranked = results.map((result) => {
287
321
  let score = result.score;
288
322
  if (browserOrNetworkTask && !maintenanceTask && result.domain === "maintenance") score *= .1;
323
+ if (statelessComputeTask) {
324
+ if (result.domain === "browser" || result.domain === "network" || result.domain === "debugger" || result.domain === "hooks" || result.domain === "maintenance") score *= .35;
325
+ if (result.domain === "core" || result.domain === "streaming" || result.domain === "workflow") score *= .2;
326
+ if (result.domain === "encoding" || result.domain === "transform" || result.domain === "protocol-analysis" || result.domain === "sourcemap" || result.domain === "core") score *= 1.6;
327
+ if (result.name === "binary_detect_format" || result.name === "binary_decode" || result.name === "crypto_test_harness" || result.name === "ast_transform_apply" || result.name === "proto_auto_detect" || result.name === "proto_infer_fields" || result.name === "proto_infer_state_machine" || result.name === "proto_fingerprint") score *= 1.25;
328
+ }
289
329
  if (browserOrNetworkTask) {
290
330
  if (!state.hasActivePage && result.name === "browser_launch") score *= 1.4;
291
331
  if (!state.hasActivePage && result.name === "browser_attach") score *= 1.2;
@@ -301,4 +341,4 @@ function rerankResultsForContext(results, task, workflow, state) {
301
341
  return reranked;
302
342
  }
303
343
  //#endregion
304
- export { isMaintenanceTask as _, getEffectivePrerequisites as a, getRoutingState as c, getToolInputSchema as d, isToolActive as f, isBrowserOrNetworkTask as g, detectWorkflowIntent as h, buildWorkflowToolSequence as i, getToolDescription as l, validateToolNameArray as m, buildRouteMatchMetadata as n, rerankResultsForContext as o, normalizeToolName as p, buildWorkflowRouteRecommendation as r, getAvailableToolNames as s, buildPresetRecommendations as t, getToolDomainFromContext as u, matchWorkflowRoute as v };
344
+ export { isBrowserOrNetworkTask as _, buildWorkflowToolSequence as a, matchWorkflowRoute as b, getAvailableToolNames as c, getToolDomainFromContext as d, getToolInputSchema as f, detectWorkflowIntent as g, validateToolNameArray as h, buildWorkflowRouteRecommendation as i, getRoutingState as l, normalizeToolName as m, buildRouteMatchMetadata as n, getEffectivePrerequisites as o, isToolActive as p, buildStatelessComputeRecommendations as r, rerankResultsForContext as s, buildPresetRecommendations as t, getToolDescription as u, isMaintenanceTask as v, isStatelessComputeTask as y };