@jshookmcp/jshook 0.3.2 → 0.3.3

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 (241) hide show
  1. package/README.md +3 -3
  2. package/README.zh.md +3 -3
  3. package/dist/{AntiCheatDetector-B6d4Qe9D.mjs → AntiCheatDetector-CUpZBh5O.mjs} +1 -1
  4. package/dist/{BrowserSessionCoordinator-BJ-HOxo0.mjs → BrowserSessionCoordinator-QIt3tetp.mjs} +1 -1
  5. package/dist/CodeInjector-Btj9upnf.mjs +1 -0
  6. package/dist/{ConsoleMonitor-CxDJV15E.mjs → ConsoleMonitor-DIjN5Afa.mjs} +5 -5
  7. package/dist/{DarwinAPI-ZfQdpLNI.mjs → DarwinAPI-BuMPGzHm.mjs} +1 -1
  8. package/dist/DetailedDataManager-Z77fDl9Z.mjs +5 -0
  9. package/dist/ExtensionManager.tools-CIGOWViz.mjs +1 -0
  10. package/dist/{FingerprintManager-DT0EAUEo.mjs → FingerprintManager-BkDSsjjP.mjs} +1 -1
  11. package/dist/{HardwareBreakpoint-BUfPdp0f.mjs → HardwareBreakpoint-DMAMcPyB.mjs} +1 -1
  12. package/dist/{HeapAnalyzer-B_aqY8oj.mjs → HeapAnalyzer-Yj348FYt.mjs} +1 -1
  13. package/dist/{ExtensionManager.tools-oVMJgPcN.mjs → MCPServer.activation.ttl-CEGNBycZ.mjs} +1 -1
  14. package/dist/MCPServer.search.helpers-Cs1JpKbu.mjs +1 -0
  15. package/dist/MCPServer.search.validation-DnifPCCv.mjs +1 -0
  16. package/dist/{MemoryController-X1XNSn1n.mjs → MemoryController-DjtgiING.mjs} +1 -1
  17. package/dist/{MemoryScanSession-DG_F-PjE.mjs → MemoryScanSession-zfoVZJB0.mjs} +1 -1
  18. package/dist/MemoryScanner-Dxd657li.mjs +1 -0
  19. package/dist/{NativeMemoryManager.utils-BHy1P_jM.mjs → NativeMemoryManager.utils-Bu8srMEF.mjs} +1 -1
  20. package/dist/{PEAnalyzer-yWQaGrcx.mjs → PEAnalyzer-CMu9Ua9T.mjs} +1 -1
  21. package/dist/PointerChainEngine-CaSC1Mry.mjs +1 -0
  22. package/dist/{ProcessRegistry-C-bN48oR.mjs → ProcessRegistry-D5y1yuP2.mjs} +1 -1
  23. package/dist/{ReverseEvidenceGraph-BhSYYdiI.mjs → ReverseEvidenceGraph-BksOpsPs.mjs} +1 -1
  24. package/dist/ServerRuntimeState-CgqBBwfd.mjs +1 -0
  25. package/dist/{Speedhack-yseDPSZ9.mjs → Speedhack-pwXTHxOY.mjs} +1 -1
  26. package/dist/{StructureAnalyzer-C5lpuZkg.mjs → StructureAnalyzer-BseGzsSl.mjs} +2 -2
  27. package/dist/ToolCatalog-DgmQXdsm.mjs +1 -0
  28. package/dist/ToolHandlerMap-7HWoIgQO.mjs +1 -0
  29. package/dist/{ToolProbe-C7ZU2x7M.mjs → ToolProbe-DQiREmNp.mjs} +1 -1
  30. package/dist/{ToolRegistry-C5oB8KP8.mjs → ToolRegistry-eMZEBiR1.mjs} +1 -1
  31. package/dist/ToolRouter.policy-UKBlFlbh.mjs +4 -0
  32. package/dist/{TraceRecorder-BiJWBXHX.mjs → TraceRecorder-B5ktv3nP.mjs} +2 -2
  33. package/dist/VersionDetector-CmPJmaJg.mjs +1 -0
  34. package/dist/{Win32API-eUCF57l_.mjs → Win32API-DoP3MMHS.mjs} +1 -1
  35. package/dist/{Win32Debug-CYrIQBvr.mjs → Win32Debug-DwF8mQGm.mjs} +1 -1
  36. package/dist/{WorkflowEngine-D876meOO.mjs → WorkflowEngine-CldHG5b4.mjs} +1 -1
  37. package/dist/{analysis-D4swdMvq.mjs → analysis-C-ln0Brh.mjs} +3 -3
  38. package/dist/antidebug-CsnpOR9z.mjs +1 -0
  39. package/dist/{artifactRetention-BCPQASm7.mjs → artifactRetention-DkYKLOvi.mjs} +1 -1
  40. package/dist/{artifacts-CkodUM4j.mjs → artifacts-D-4pSS_N.mjs} +1 -1
  41. package/dist/{betterSqlite3-Brtq-SIQ.mjs → betterSqlite3-Bdo_ifuJ.mjs} +1 -1
  42. package/dist/binary-instrument-BeZ224mZ.mjs +9 -0
  43. package/dist/{boringssl-inspector-BBaJwwkU.mjs → boringssl-inspector-ZOCkaipa.mjs} +2 -2
  44. package/dist/browser-BUaB25bk.mjs +11 -0
  45. package/dist/{handlers-yo_xYzT8.mjs → canvas-396ieNv5.mjs} +22 -22
  46. package/dist/collector-CB2syQEg.mjs +1 -0
  47. package/dist/constants-DMv3svps.mjs +2 -0
  48. package/dist/coordination-Dbohmj6D.mjs +1 -0
  49. package/dist/dart-inspector-LhEqRITQ.mjs +0 -0
  50. package/dist/debugger-CLzkObIO.mjs +1 -0
  51. package/dist/{definitions-OeLvmlQy.mjs → definitions-0hxnrDU72.mjs} +1 -1
  52. package/dist/definitions-B3a9QC2t.mjs +1 -0
  53. package/dist/{definitions-Ibci7e_L.mjs → definitions-BOvju5t2.mjs} +1 -1
  54. package/dist/{definitions-D4g-MS10.mjs → definitions-CXj_cEVt.mjs} +1 -1
  55. package/dist/{definitions-C3qNgSn1.mjs → definitions-Co6AvTjH.mjs} +1 -1
  56. package/dist/{definitions-DxFNRQNK2.mjs → definitions-Cv5r8xwq.mjs} +1 -1
  57. package/dist/definitions-DBYSxChX.mjs +1 -0
  58. package/dist/{definitions-CQd7yCQH.mjs → definitions-D_dTDX9B.mjs} +1 -1
  59. package/dist/{definitions-l7TjdE6V.mjs → definitions-Db9t2ddh.mjs} +1 -1
  60. package/dist/{definitions-BWxBke3r.mjs → definitions-DbN2CjI2.mjs} +1 -1
  61. package/dist/{definitions-DAQm1Xar.mjs → definitions-DlmmHmZc.mjs} +1 -1
  62. package/dist/{definitions-Bf3H1EwV.mjs → definitions-DnYpoGig.mjs} +1 -1
  63. package/dist/{definitions-BYwATKc-.mjs → definitions-DtZ6Ktx2.mjs} +1 -1
  64. package/dist/{definitions-D5wl_8HN.mjs → definitions-DuIPS8gq.mjs} +1 -1
  65. package/dist/{definitions-RZYGD_Ey.mjs → definitions-DywfwPMb.mjs} +1 -1
  66. package/dist/definitions-EGmqr85H.mjs +1 -0
  67. package/dist/{definitions-bybDvnG0.mjs → definitions-Fetw_Cge.mjs} +3 -3
  68. package/dist/{definitions-CB6vmOer.mjs → definitions-LdkeuOeA.mjs} +1 -1
  69. package/dist/{definitions-B_83XfNQ.mjs → definitions-Ym8niHDb.mjs} +1 -1
  70. package/dist/{definitions-Cenu6mxo.mjs → definitions-aeRd5DAR.mjs} +1 -1
  71. package/dist/{definitions-CT8ln6GQ.mjs → definitions-cnG6tj17.mjs} +1 -1
  72. package/dist/{encoding-ycOaz8Vr.mjs → encoding-B4xZWErf.mjs} +2 -2
  73. package/dist/ensure-browser-core-JHwDo5ql.mjs +285 -0
  74. package/dist/{factory-CKr4fAE1.mjs → factory-BxNdBiZa.mjs} +1 -1
  75. package/dist/{graphql-B2TiPEow.mjs → graphql-GBWsZ9xC.mjs} +4 -4
  76. package/dist/{handlers-D5E40ssn.mjs → handlers-5nzR8B0a.mjs} +2 -2
  77. package/dist/handlers-6iNsXOVT.mjs +7 -0
  78. package/dist/{handlers-BpDlVVVU.mjs → handlers-BZ8n6Hvf.mjs} +1 -1
  79. package/dist/{handlers-0yKLRIfo.mjs → handlers-BbLxNbbT.mjs} +1 -1
  80. package/dist/{handlers-DGbdQAgD.mjs → handlers-BbS4hssc.mjs} +2 -2
  81. package/dist/{handlers-l8QIKqBj.mjs → handlers-CIKOP4aI.mjs} +2 -2
  82. package/dist/handlers-CWKBBjai.mjs +1 -0
  83. package/dist/{handlers-B62K4FTc.mjs → handlers-Cmb6SoRC.mjs} +1 -1
  84. package/dist/handlers-CrJsKnEI.mjs +1 -0
  85. package/dist/{antidebug-7L3ygj_9.mjs → handlers-DB6xVVWq.mjs} +2 -2
  86. package/dist/{handlers-CMJK7m1c.mjs → handlers-DOOCWUNR.mjs} +3 -3
  87. package/dist/{handlers-D2ZOul9p.mjs → handlers-Z_B5aVaU.mjs} +2 -2
  88. package/dist/handlers-gVscChvl.mjs +1 -0
  89. package/dist/handlers-xFvI9P_y.mjs +1 -0
  90. package/dist/{handlers.impl-D9Hh8Bgl.mjs → handlers.impl-BsFTW6SD.mjs} +1 -1
  91. package/dist/{hooks-D4XLfgtV.mjs → hooks-DPouiS7I.mjs} +9 -9
  92. package/dist/index.mjs +11 -11
  93. package/dist/macro-p8kuJVcm.mjs +2 -0
  94. package/dist/maintenance-DAqADb6Z.mjs +302 -0
  95. package/dist/manifest-4lmM6MZR.mjs +1 -0
  96. package/dist/{manifest-DujQqEQR.mjs → manifest-AxaxRSt6.mjs} +2 -2
  97. package/dist/{manifest-DYpn8w_h.mjs → manifest-BIqRE1Qz.mjs} +1 -1
  98. package/dist/manifest-Box-jWfr.mjs +1 -0
  99. package/dist/manifest-Bp33di0Q.mjs +1 -0
  100. package/dist/{manifest-CQH9FhwI.mjs → manifest-BvRX4nRP.mjs} +1 -1
  101. package/dist/{manifest-0Jpt_AQa.mjs → manifest-C6KoB1XE.mjs} +1 -1
  102. package/dist/manifest-C7TdXCWY.mjs +1 -0
  103. package/dist/manifest-CM-n64K0.mjs +1 -0
  104. package/dist/{manifest-nXHmtMSp2.mjs → manifest-CUokxCUN.mjs} +1 -1
  105. package/dist/manifest-CWJS45iO.mjs +1 -0
  106. package/dist/{manifest-LLdI5m4T.mjs → manifest-Cdxdgo-D.mjs} +1 -1
  107. package/dist/{manifest-D_obs5F4.mjs → manifest-Cf6SmamD.mjs} +1 -1
  108. package/dist/manifest-Cgxu2qdv.mjs +1 -0
  109. package/dist/{manifest-ztWJoXy4.mjs → manifest-CowGSURa2.mjs} +1 -1
  110. package/dist/{manifest-DYzWI8Xs.mjs → manifest-CsGIrh34.mjs} +1 -1
  111. package/dist/manifest-CvDpVToN.mjs +1 -0
  112. package/dist/manifest-D8TL9RLE.mjs +1 -0
  113. package/dist/{manifest-DCx6w2XV.mjs → manifest-DIhtCBe6.mjs} +1 -1
  114. package/dist/{manifest-D9jUUJAu.mjs → manifest-DJbruNOg.mjs} +1 -1
  115. package/dist/manifest-DLGtZH-0.mjs +1 -0
  116. package/dist/manifest-DXHdPt2T.mjs +1 -0
  117. package/dist/{manifest-B3fZbSWR.mjs → manifest-Dg5ScOyW.mjs} +1 -1
  118. package/dist/{manifest-xWfu6iLo.mjs → manifest-DzGoTS0R.mjs} +1 -1
  119. package/dist/manifest-G2H52LKz.mjs +131 -0
  120. package/dist/{manifest-CctIumog.mjs → manifest-P0Futrgb.mjs} +1 -1
  121. package/dist/{manifest-YgVd8Sgz.mjs → manifest-Qw7xgvjv.mjs} +1 -1
  122. package/dist/{manifest-QYbQXJn0.mjs → manifest-W3qvVrP2.mjs} +1 -1
  123. package/dist/manifest-dG6MuR1U.mjs +1 -0
  124. package/dist/manifest-nWXtgq5Y2.mjs +1 -0
  125. package/dist/{manifest-LG42zPLY2.mjs → manifest-vp1upSSq.mjs} +1 -1
  126. package/dist/{modules-BPBcSaM-.mjs → modules-DO3jXCgj.mjs} +10 -10
  127. package/dist/{mojo-ipc-BhwsdVUW.mjs → mojo-ipc-Be-ccWrc.mjs} +1 -1
  128. package/dist/native-g095qhpK.mjs +961 -0
  129. package/dist/network-Dvxm7eEI.mjs +7 -0
  130. package/dist/outputPaths-D2ddHrOJ.mjs +2 -0
  131. package/dist/{parse-args-Bw413PlW.mjs → parse-args-ngRrvF9e.mjs} +1 -1
  132. package/dist/platform-DjWbuiF8.mjs +93 -0
  133. package/dist/process-Dq5I-KZW.mjs +2 -0
  134. package/dist/proxy-DPNgM7TE.mjs +2 -0
  135. package/dist/{registry-DH4sc1dt.mjs → registry-xB8Wgmyj.mjs} +1 -1
  136. package/dist/{renderer-pid-9tJnZ_9N.mjs → renderer-pid-7jbTR8f5.mjs} +1 -1
  137. package/dist/search-defaults-CJik67or.mjs +1 -0
  138. package/dist/server/plugin-api.mjs +1 -1
  139. package/dist/sourcemap-DqEW15Ao.mjs +1 -0
  140. package/dist/streaming-Dbk4eStJ.mjs +1 -0
  141. package/dist/{transform-DOxzeWPB.mjs → transform-D-peM3aO.mjs} +2 -2
  142. package/dist/{wasm-CZ_HTfKR.mjs → wasm-CZajRaad.mjs} +6 -6
  143. package/dist/{webcrack-C1iYG_EX.mjs → webcrack-phEfVt5y.mjs} +3 -3
  144. package/dist/{workflow-BdwQmARn.mjs → workflow-wkXb3x-U.mjs} +3 -3
  145. package/package.json +2 -2
  146. package/dist/CodeInjector-Cll_7bLJ.mjs +0 -1
  147. package/dist/DOMInspector-C19J4zeq.mjs +0 -95
  148. package/dist/DetailedDataManager-DmQ1LT-W.mjs +0 -1
  149. package/dist/ExtensionManager-BD724zkO.mjs +0 -1
  150. package/dist/MCPServer.search.handlers.domain-BbS-6LnX.mjs +0 -1
  151. package/dist/MemoryScanner-g1_L1ub5.mjs +0 -1
  152. package/dist/NativeMemoryManager.impl-DniBe2wf.mjs +0 -1
  153. package/dist/NetworkMonitor-B_-au6aV.mjs +0 -185
  154. package/dist/PageController-Dfsm1_o7.mjs +0 -1
  155. package/dist/PointerChainEngine-BhCUkmxY.mjs +0 -1
  156. package/dist/PrerequisiteError-BjCQA-gK.mjs +0 -1
  157. package/dist/ScriptManager-LWGPTdvD.mjs +0 -7
  158. package/dist/ServerRuntimeState-D2bWHqEE.mjs +0 -1
  159. package/dist/ToolCatalog-CYdD9F5f.mjs +0 -1
  160. package/dist/ToolRouter.policy-CfhJczkt.mjs +0 -4
  161. package/dist/VersionDetector-CHT36Az0.mjs +0 -9
  162. package/dist/apk-packer-BqXcInnX.mjs +0 -1
  163. package/dist/binary-instrument-DU7V6TUM.mjs +0 -7
  164. package/dist/binary-secrets-PdMVoyt0.mjs +0 -1
  165. package/dist/browser-Qqco2rOT.mjs +0 -11
  166. package/dist/collector-Bpl6qy2L.mjs +0 -1
  167. package/dist/constants-BYj8Xek8.mjs +0 -1
  168. package/dist/coordination-CWXW1o8K.mjs +0 -1
  169. package/dist/dart-inspector-7AkPeZ_Q.mjs +0 -0
  170. package/dist/debugger-DyALjYMk.mjs +0 -1
  171. package/dist/definitions-BftdXgXI.mjs +0 -1
  172. package/dist/definitions-Bio5XJYy.mjs +0 -1
  173. package/dist/definitions-CMZRSy3k.mjs +0 -1
  174. package/dist/definitions-DP1vgxEY.mjs +0 -1
  175. package/dist/definitions-Tls8c0A0.mjs +0 -1
  176. package/dist/ensure-browser-core-DxWC-NTp.mjs +0 -1
  177. package/dist/flat-target-session-DvcQX7J5.mjs +0 -1
  178. package/dist/handlers-8zN_vBIz.mjs +0 -1
  179. package/dist/handlers-DHO3rjsW.mjs +0 -1
  180. package/dist/handlers-FJ80VzUI.mjs +0 -2
  181. package/dist/handlers-VHWrxbM_.mjs +0 -1
  182. package/dist/handlers-mPFiNPe8.mjs +0 -302
  183. package/dist/jadx-search-B_Yse0Zh.mjs +0 -5
  184. package/dist/maintenance-BUpIukhg.mjs +0 -1
  185. package/dist/manifest-B7NB2rh2.mjs +0 -1
  186. package/dist/manifest-BDi4nbH1.mjs +0 -1
  187. package/dist/manifest-BLDfkE7n.mjs +0 -1
  188. package/dist/manifest-BcXbB4gf.mjs +0 -1
  189. package/dist/manifest-Bdnc_vrc.mjs +0 -1
  190. package/dist/manifest-BuYKgCnp.mjs +0 -1
  191. package/dist/manifest-CBfNnGPV.mjs +0 -1
  192. package/dist/manifest-CPS1Xv69.mjs +0 -1
  193. package/dist/manifest-CRryuZF4.mjs +0 -1
  194. package/dist/manifest-CvTe5ZGV2.mjs +0 -1
  195. package/dist/manifest-D-5GH0DV.mjs +0 -1
  196. package/dist/manifest-D3Ssf3IC.mjs +0 -1
  197. package/dist/manifest-D5ck3NvC.mjs +0 -1
  198. package/dist/manifest-DG19q-Ld.mjs +0 -1
  199. package/dist/manifest-DLMlD0Zc.mjs +0 -1
  200. package/dist/manifest-DwL2ik8P.mjs +0 -1
  201. package/dist/manifest-ItF5P8A12.mjs +0 -1
  202. package/dist/manifest-KZphqIyX.mjs +0 -1
  203. package/dist/manifest-RcpX_MyZ.mjs +0 -123
  204. package/dist/manifest-Zy7Odg5J.mjs +0 -1
  205. package/dist/manifest-ff1H7Pdp.mjs +0 -1
  206. package/dist/manifest-iuhF6pTL2.mjs +0 -1
  207. package/dist/manifest-yC16OhL2.mjs +0 -1
  208. package/dist/matchesWildcardPattern-BAG6LvX5.mjs +0 -1
  209. package/dist/native-j8l473zn.mjs +0 -961
  210. package/dist/network-T0VRwNPd.mjs +0 -7
  211. package/dist/outputPaths-B4Ic4RZh.mjs +0 -2
  212. package/dist/platform-CzaQtISh.mjs +0 -93
  213. package/dist/playwright-cdp-fallback-DqFdx9-s.mjs +0 -1
  214. package/dist/process-CWhsCWrf.mjs +0 -2
  215. package/dist/proxy-DZFlDsG3.mjs +0 -2
  216. package/dist/search-defaults-lYBVn_3L.mjs +0 -1
  217. package/dist/shared-state-board-BSjXLUV1.mjs +0 -1
  218. package/dist/sourcemap-Dh3Ai_ur.mjs +0 -1
  219. package/dist/streaming-BcJ0B6ao.mjs +0 -1
  220. package/dist/types-D9EiE5o9.mjs +0 -1
  221. /package/dist/{CacheAdapters-CsNtQIR8.mjs → CacheAdapters-BlDrQg8f.mjs} +0 -0
  222. /package/dist/{EventBus-DL8iLA09.mjs → EventBus-Cm-t-B65.mjs} +0 -0
  223. /package/dist/{EvidenceGraphBridge-BtbwXsLC.mjs → EvidenceGraphBridge-DBDc0wUA.mjs} +0 -0
  224. /package/dist/{HookGeneratorBuilders.core.generators.storage-DzD6dIJd.mjs → HookGeneratorBuilders.core.generators.storage-CWaWpOHa.mjs} +0 -0
  225. /package/dist/{InstrumentationSession-D_G1ZPyd.mjs → InstrumentationSession-c5qZyp7d.mjs} +0 -0
  226. /package/dist/{ResponseBuilder-BfWP-uaT.mjs → ResponseBuilder-nPXl_khE.mjs} +0 -0
  227. /package/dist/{RingBuffer-Dm54ELKT.mjs → RingBuffer-B6RTHmij.mjs} +0 -0
  228. /package/dist/{StealthVerifier-BmcxfwSF.mjs → StealthVerifier-DMBrtkhN.mjs} +0 -0
  229. /package/dist/{ToolError-DWU_z7gp.mjs → ToolError-g3rjWzhx.mjs} +0 -0
  230. /package/dist/{authorization-schema-BOFwSXUN.mjs → authorization-schema-Jtikc5Yt.mjs} +0 -0
  231. /package/dist/{bind-helpers-m2U8glkF.mjs → bind-helpers-D0mGAOof.mjs} +0 -0
  232. /package/dist/{capabilities-CyXuKUl1.mjs → capabilities-L1ax5EHS.mjs} +0 -0
  233. /package/dist/{chunk-C_pMuVsO.mjs → chunk-88NL7fhV.mjs} +0 -0
  234. /package/dist/{concurrency-DCr8WQ2M.mjs → concurrency-Dehnw4JC.mjs} +0 -0
  235. /package/dist/{evidence-graph-bridge-CV_UdYqj.mjs → evidence-graph-bridge-eT9icP6a.mjs} +0 -0
  236. /package/dist/{formatAddress-vLA_hOJt.mjs → formatAddress-DAcw4Ckg.mjs} +0 -0
  237. /package/dist/{logger-sBC6IdRT.mjs → logger-CCikqqvj.mjs} +0 -0
  238. /package/dist/{response-C7rKQst4.mjs → response-B1RuVVfD.mjs} +0 -0
  239. /package/dist/{ssrf-policy-CsIJGkpd.mjs → ssrf-policy-B72vdy23.mjs} +0 -0
  240. /package/dist/{tool-builder-qif8M9-K.mjs → tool-builder-CpLh-UQd.mjs} +0 -0
  241. /package/dist/{types-Fz69RzbZ.mjs → types-BzPBzmVB.mjs} +0 -0
@@ -0,0 +1 @@
1
+ import{ot as e}from"./constants-DMv3svps.mjs";import{t}from"./response-B1RuVVfD.mjs";import{t as n}from"./ToolError-g3rjWzhx.mjs";import{a as r,c as i,o as a,r as o,t as s}from"./parse-args-ngRrvF9e.mjs";import"./definitions-DlmmHmZc.mjs";import{randomUUID as c}from"node:crypto";function l(e){return e.replace(/[.+?^${}()|[\]\\]/g,`\\$&`)}function u(e,t){return t?RegExp(`^${t.split(`*`).map(e=>l(e)).join(`.*`)}$`).test(e):!0}var d=class{state=new Map;history=new Map;watches=new Map;maxHistoryPerKey=100;maxWatches=200;watchIdleTtlMs=30*6e4;mutationSeq=0;lastPersistedSeq=0;persistNotifier;pruneExpiredWatches(){let e=Date.now(),t=0;for(let[n,r]of this.watches)r.expiresAt<e&&(this.watches.delete(n),t++);if(this.watches.size>this.maxWatches){let e=[...this.watches.entries()].toSorted((e,t)=>e[1].lastChecked-t[1].lastChecked),n=this.watches.size-this.maxWatches;for(let r=0;r<n;r++){let n=e[r];n&&(this.watches.delete(n[0]),t++)}}return t}setPersistNotifier(e){this.persistNotifier=e}markDirty(){this.mutationSeq++,this.persistNotifier?.()}recordChange(e,t){this.markDirty();let n=this.history.get(e);n||(n=[],this.history.set(e,n)),n.push(t),n.length>this.maxHistoryPerKey&&n.splice(0,n.length-this.maxHistoryPerKey)}deleteEntry(e){let t=this.state.get(e);t&&(this.state.delete(e),this.recordChange(e,{id:c().slice(0,8),key:t.key,namespace:t.namespace,action:`delete`,oldValue:t.value,timestamp:Date.now()}))}isExpired(e){return!!(e.expiresAt&&Date.now()>e.expiresAt)}cleanupExpired(){let e=Date.now(),t=0;for(let[n,r]of this.state.entries())r.expiresAt&&e>r.expiresAt&&(this.state.delete(n),this.recordChange(n,{id:c().slice(0,8),key:r.key,namespace:r.namespace,action:`expire`,oldValue:r.value,timestamp:e}),t++);return t}getSnapshotSeq(){return this.mutationSeq}getLastPersistedSeq(){return this.lastPersistedSeq}markPersisted(){this.lastPersistedSeq=this.mutationSeq}isPersistDirty(){return this.mutationSeq!==this.lastPersistedSeq}exportSnapshot(){return{schemaVersion:1,savedAt:new Date().toISOString(),entries:[...this.state.entries()],history:[...this.history.entries()]}}restoreSnapshot(e){if(!e||typeof e!=`object`)return;let t=e;if(t.schemaVersion!==1)return;let n=Date.now();if(this.state.clear(),this.history.clear(),t.entries)for(let[e,r]of t.entries)r.expiresAt&&n>r.expiresAt||this.state.set(e,r);if(t.history)for(let[e,n]of t.history)this.history.set(e,n);this.mutationSeq=this.state.size,this.lastPersistedSeq=this.mutationSeq}},f=class{store;constructor(e){this.store=e}async handleSet(e){let t=i(e,`key`);if(!t)throw Error(`key must be a non-empty string`);let n=e.value,r=a(e,`namespace`,`default`),s=o(e,`ttlSeconds`),l=`${r}:${t}`,u=Date.now(),d=this.store.state.get(l),f=d?.version??0,p=d?.value,m={key:t,value:n,namespace:r,createdAt:d?.createdAt??u,updatedAt:u,ttlSeconds:s,expiresAt:s?u+s*1e3:void 0,version:f+1};return this.store.state.set(l,m),this.store.recordChange(l,{id:c().slice(0,8),key:t,namespace:r,action:`set`,oldValue:p,newValue:n,timestamp:u}),{success:!0,key:t,namespace:r,version:m.version,expiresAt:m.expiresAt?new Date(m.expiresAt).toISOString():void 0}}async handleGet(e){let t=i(e,`key`);if(!t)throw Error(`key must be a non-empty string`);let n=a(e,`namespace`,`default`),r=`${n}:${t}`,o=this.store.state.get(r);return o?this.store.isExpired(o)?(this.store.deleteEntry(r),{found:!1,key:t,namespace:n,expired:!0}):{found:!0,key:t,namespace:n,value:o.value,version:o.version,createdAt:new Date(o.createdAt).toISOString(),updatedAt:new Date(o.updatedAt).toISOString(),ttlSeconds:o.ttlSeconds,expiresAt:o.expiresAt?new Date(o.expiresAt).toISOString():void 0}:{found:!1,key:t,namespace:n}}async handleDelete(e){let t=i(e,`key`);if(!t)throw Error(`key must be a non-empty string`);let n=a(e,`namespace`,`default`),r=`${n}:${t}`;return this.store.state.get(r)?(this.store.deleteEntry(r),{deleted:!0,key:t,namespace:n}):{deleted:!1,key:t,namespace:n,reason:`not_found`}}async handleList(e){let t=a(e,`namespace`),n=s(e,`includeValues`,!1),r=[],i=[];for(let e of this.store.state.values())if(!(t&&e.namespace!==t)){if(this.store.isExpired(e)){i.push(`${e.namespace}:${e.key}`);continue}r.push({key:e.key,namespace:e.namespace,version:e.version,updatedAt:new Date(e.updatedAt).toISOString(),...n?{value:e.value}:{}})}for(let e of i)this.store.deleteEntry(e);return r.sort((e,t)=>e.namespace===t.namespace?e.key.localeCompare(t.key):e.namespace.localeCompare(t.namespace)),{entries:r,total:r.length,namespaces:[...new Set(r.map(e=>e.namespace))]}}async handleClear(e){let t=a(e,`namespace`),n=a(e,`keyPattern`),r=[];for(let[e,i]of this.store.state.entries())t&&i.namespace!==t||u(i.key,n)&&r.push(e);for(let e of r)this.store.deleteEntry(e);return{cleared:r.length,namespace:t??`all`,pattern:n}}async handleStats(){let e=Date.now(),t={},n=0;for(let[,r]of this.store.state.entries()){if(r.expiresAt&&e>r.expiresAt){n++;continue}t[r.namespace]=(t[r.namespace]??0)+1}let r=0;for(let e of this.store.history.values())r+=e.length;return{totalEntries:Object.values(t).reduce((e,t)=>e+t,0),entriesByNamespace:t,expiredEntries:n,totalWatches:this.store.watches.size,historySize:r}}},p=class{store;constructor(e){this.store=e}async handleWatch(e){let t=i(e,`key`);if(!t)throw Error(`key must be a non-empty string`);let n=a(e,`namespace`,`default`),r=o(e,`pollIntervalMs`,1e3);this.store.pruneExpiredWatches();let s=`watch_${c().slice(0,8)}`,l=t.includes(`*`),d=Date.now(),f={id:s,key:t,namespace:n,pattern:l,pollIntervalMs:r,lastChecked:d,lastVersion:{},createdAt:d,expiresAt:d+this.store.watchIdleTtlMs},p=`${n}:`;for(let[e,n]of this.store.state.entries())e.startsWith(p)&&(l?u(n.key,t)&&(f.lastVersion[n.key]=n.version):n.key===t&&(f.lastVersion[n.key]=n.version));return this.store.watches.set(s,f),{watchId:s,key:t,namespace:n,pattern:l,pollIntervalMs:r,initialKeys:Object.keys(f.lastVersion)}}async handleUnwatch(e){let t=i(e,`watchId`),n=this.store.watches.get(t);return n?(this.store.watches.delete(t),{removed:!0,watchId:t,wasWatching:n.key}):{removed:!1,watchId:t,reason:`not_found`}}async handlePoll(e){let t=i(e,`watchId`),n=this.store.watches.get(t);if(!n)throw Error(`Watch "${t}" not found`);let r=Date.now(),a=[],o=`${n.namespace}:`;if(n.pattern){for(let[e,t]of this.store.state.entries())if(e.startsWith(o)&&u(t.key,n.key)){let e=n.lastVersion[t.key];e===void 0?a.push({key:t.key,namespace:t.namespace,action:`created`}):t.version>e&&a.push({key:t.key,namespace:t.namespace,action:`changed`}),n.lastVersion[t.key]=t.version}for(let e of Object.keys(n.lastVersion))!this.store.state.has(`${n.namespace}:${e}`)&&u(e,n.key)&&(a.push({key:e,namespace:n.namespace,action:`deleted`}),delete n.lastVersion[e])}else{let e=`${n.namespace}:${n.key}`,t=this.store.state.get(e),r=n.lastVersion[n.key];!t&&r!==void 0?(a.push({key:n.key,namespace:n.namespace,action:`deleted`}),delete n.lastVersion[n.key]):t&&(r===void 0?a.push({key:t.key,namespace:t.namespace,action:`created`}):t.version>r&&a.push({key:t.key,namespace:t.namespace,action:`changed`}),n.lastVersion[n.key]=t.version)}return n.lastChecked=r,n.expiresAt=r+this.store.watchIdleTtlMs,{watchId:t,changes:a,hasChanges:a.length>0,checkedAt:new Date(r).toISOString()}}},m=class{store;constructor(e){this.store=e}async handleHistory(e){let t=i(e,`key`),n=a(e,`namespace`,`default`),r=o(e,`limit`,50),s=`${n}:${t}`,c=this.store.history.get(s)??[],l=[...c].toSorted((e,t)=>t.timestamp-e.timestamp).slice(0,r);return{key:t,namespace:n,history:l.map(e=>({...e,timestamp:new Date(e.timestamp).toISOString()})),total:c.length,returned:l.length}}async handleExport(e){let t=a(e,`namespace`),n=a(e,`keyPattern`),r=Date.now(),i={};for(let[e,a]of this.store.state.entries())t&&a.namespace!==t||u(a.key,n)&&(a.expiresAt&&r>a.expiresAt||(i[a.key]=a.value));return{data:i,count:Object.keys(i).length,namespace:t??`all`,exportedAt:new Date(r).toISOString()}}async handleImport(e){let t=r(e,`data`),n=a(e,`namespace`,`default`),i=s(e,`overwrite`,!1);if(!t)throw Error(`data must be an object`);let o=[],l=[],u=[];for(let[e,r]of Object.entries(t)){let t=`${n}:${e}`,a=this.store.state.get(t);if(a&&!i){l.push(e);continue}a&&i&&u.push(e);let s=Date.now(),d={key:e,value:r,namespace:n,createdAt:a?.createdAt??s,updatedAt:s,version:(a?.version??0)+1};this.store.state.set(t,d),this.store.recordChange(t,{id:c().slice(0,8),key:e,namespace:n,action:`set`,oldValue:a?.value,newValue:r,timestamp:s,source:`import`}),o.push(e)}return{imported:o.length,skipped:l.length,overwritten:u.length,total:Object.keys(t).length,keys:o}}},h=class{store;storeHandlers;watchHandlers;ioHandlers;constructor(){this.store=new d,this.storeHandlers=new f(this.store),this.watchHandlers=new p(this.store),this.ioHandlers=new m(this.store)}setPersistNotifier(e){this.store.setPersistNotifier(e)}handleSet(e){return this.storeHandlers.handleSet(e)}handleGet(e){return this.storeHandlers.handleGet(e)}handleDelete(e){return this.storeHandlers.handleDelete(e)}handleList(e){return this.storeHandlers.handleList(e)}handleWatchDispatch(e){let t=String(e.action??``);return t===`stop`?this.watchHandlers.handleUnwatch(e):t===`poll`?this.watchHandlers.handlePoll(e):this.watchHandlers.handleWatch(e)}handleIODispatch(e){return String(e.action??``)===`import`?this.ioHandlers.handleImport(e):this.ioHandlers.handleExport(e)}handleWatch(e){return this.watchHandlers.handleWatch(e)}handleUnwatch(e){return this.watchHandlers.handleUnwatch(e)}handlePoll(e){return this.watchHandlers.handlePoll(e)}handleHistory(e){return this.ioHandlers.handleHistory(e)}handleExport(e){return this.ioHandlers.handleExport(e)}handleImport(e){return this.ioHandlers.handleImport(e)}handleClear(e){return this.storeHandlers.handleClear(e)}handleDispatch(e){let r=String(e.action??``);switch(r){case`set`:return this.storeHandlers.handleSet(e);case`get`:return this.storeHandlers.handleGet(e);case`delete`:return this.storeHandlers.handleDelete(e);case`list`:return this.storeHandlers.handleList(e);case`history`:return this.ioHandlers.handleHistory(e);case`clear`:return this.storeHandlers.handleClear(e);default:return Promise.resolve(t(new n(`VALIDATION`,`Invalid action: "${r}". Expected one of: set, get, delete, list, history, clear`,{toolName:`state_board`})))}}handleStats(){return this.storeHandlers.handleStats()}cleanupExpired(){return this.store.cleanupExpired()}getStore(){return this.store}},g=class{handoffs=new Map;insights=[];ctx;constructor(e){this.ctx=e}async handleCreateTaskHandoff(e){let t=e.description,n=e.constraints,r=e.targetDomain,i=e.decision,a=e.risks,o=e.nextSteps,s;try{let e=this.ctx.pageController;if(e){let t=await e.getPage?.();t&&typeof t.url==`function`&&(s=t.url())}}catch{}let l={id:c().slice(0,8),status:`pending`,description:t,constraints:n,targetDomain:r,decision:i,risks:a,nextSteps:o,pageUrl:s,createdAt:Date.now()};return this.handoffs.set(l.id,l),{taskId:l.id,status:l.status,description:l.description,constraints:l.constraints,targetDomain:l.targetDomain,decision:l.decision,risks:l.risks,nextSteps:l.nextSteps,pageUrl:l.pageUrl,createdAt:new Date(l.createdAt).toISOString(),totalActiveHandoffs:this.handoffs.size}}async handleCompleteTaskHandoff(e){let t=e.taskId,n=e.summary,r=e.keyFindings,i=e.artifacts,a=this.handoffs.get(t);if(!a)throw Error(`Task handoff "${t}" not found. Active IDs: ${[...this.handoffs.keys()].join(`, `)||`(none)`}`);if(a.status===`completed`)throw Error(`Task handoff "${t}" is already completed`);return a.status=`completed`,a.completedAt=Date.now(),a.summary=n,a.keyFindings=r,a.artifacts=i,{taskId:a.id,status:`completed`,summary:a.summary,keyFindings:a.keyFindings,artifacts:a.artifacts,durationMs:a.completedAt-a.createdAt}}async handleGetTaskContext(e){let t=e.taskId;if(t){let e=this.handoffs.get(t);if(!e)throw Error(`Task handoff "${t}" not found`);return{handoff:this.serializeHandoff(e)}}let n=[...this.handoffs.values()].map(e=>this.serializeHandoff(e)),r=n.filter(e=>e.status!==`completed`),i=n.filter(e=>e.status===`completed`);return{active:r,completed:i,sessionInsights:this.insights.map(e=>({id:e.id,category:e.category,content:e.content,confidence:e.confidence,timestamp:new Date(e.timestamp).toISOString(),sourceTaskId:e.sourceTaskId})),summary:{totalActive:r.length,totalCompleted:i.length,totalInsights:this.insights.length}}}async handleAppendSessionInsight(e){let t=e.category,n=e.content,r=e.confidence??1,i=[...this.handoffs.values()].find(e=>e.status===`in_progress`||e.status===`pending`),a={id:c().slice(0,8),category:t,content:n,confidence:r,timestamp:Date.now(),sourceTaskId:i?.id};return this.insights.push(a),{insightId:a.id,category:a.category,totalInsights:this.insights.length,totalByCategory:this.getInsightCountByCategory()}}serializeHandoff(e){return{taskId:e.id,status:e.status,description:e.description,constraints:e.constraints,targetDomain:e.targetDomain,decision:e.decision,risks:e.risks,nextSteps:e.nextSteps,pageUrl:e.pageUrl,createdAt:new Date(e.createdAt).toISOString(),completedAt:e.completedAt?new Date(e.completedAt).toISOString():void 0,summary:e.summary,keyFindings:e.keyFindings,artifacts:e.artifacts}}getInsightCountByCategory(){let e={};for(let t of this.insights)e[t.category]=(e[t.category]??0)+1;return e}snapshots=new Map;async handleSavePageSnapshot(e){let t=e.label,n=this.ctx.pageController;if(!n)throw Error(`No page controller available`);let r=await n.getPage();if(!r)throw Error(`No active page to snapshot`);let i=r.url(),a=[];try{let e=await r.createCDPSession();a=(await e.send(`Network.getAllCookies`)).cookies.map(e=>({name:e.name,value:e.value,domain:e.domain,path:e.path})),await e.detach()}catch{}let o={},s={};try{o=await r.evaluate(()=>{let e={};for(let t=0;t<window.localStorage.length;t++){let n=window.localStorage.key(t);n&&(e[n]=window.localStorage.getItem(n)??``)}return e}),s=await r.evaluate(()=>{let e={};for(let t=0;t<window.sessionStorage.length;t++){let n=window.sessionStorage.key(t);n&&(e[n]=window.sessionStorage.getItem(n)??``)}return e})}catch{}let l={id:c().slice(0,8),url:i,cookies:a,localStorage:o,sessionStorage:s,timestamp:Date.now(),label:t};return this.snapshots.set(l.id,l),{snapshotId:l.id,url:l.url,cookieCount:l.cookies.length,localStorageKeys:Object.keys(l.localStorage).length,sessionStorageKeys:Object.keys(l.sessionStorage).length,label:l.label}}async handleRestorePageSnapshot(t){let n=t.snapshotId;if(!n)throw Error(`snapshotId is required`);let r=this.snapshots.get(n);if(!r)throw Error(`Snapshot "${n}" not found`);let i=this.ctx.pageController;if(!i)throw Error(`No page controller available`);let a=await i.getPage();if(!a)throw Error(`No active page for restoration`);if(await a.goto(r.url,{waitUntil:`domcontentloaded`,timeout:e}),r.cookies.length>0)try{let e=await a.createCDPSession();await e.send(`Network.setCookies`,{cookies:r.cookies.map(e=>({name:e.name,value:e.value,domain:e.domain,path:e.path}))}),await e.detach()}catch{}try{await a.evaluate((e,t)=>{window.localStorage.clear();for(let[t,n]of Object.entries(e))window.localStorage.setItem(t,n);window.sessionStorage.clear();for(let[e,n]of Object.entries(t))window.sessionStorage.setItem(e,n)},r.localStorage,r.sessionStorage)}catch{}return{restored:!0,snapshotId:r.id,url:r.url,cookiesRestored:r.cookies.length,localStorageKeysRestored:Object.keys(r.localStorage).length,sessionStorageKeysRestored:Object.keys(r.sessionStorage).length}}async handleListPageSnapshots(){let e=[...this.snapshots.values()].map(e=>({id:e.id,url:e.url,label:e.label,cookieCount:e.cookies.length,localStorageKeys:Object.keys(e.localStorage).length,sessionStorageKeys:Object.keys(e.sessionStorage).length,createdAt:new Date(e.timestamp).toISOString()}));return{snapshots:e,total:e.length}}};export{g as CoordinationHandlers,h as SharedStateBoardHandlers};
Binary file
@@ -0,0 +1 @@
1
+ import{t as e}from"./logger-CCikqqvj.mjs";import{t}from"./ToolError-g3rjWzhx.mjs";import{a as n,o as r,r as i,t as a}from"./parse-args-ngRrvF9e.mjs";import"./definitions-aeRd5DAR.mjs";import"./handlers-DB6xVVWq.mjs";import"./definitions-Fetw_Cge.mjs";var o=class{deps;constructor(e){this.deps=e}async handleDebuggerLifecycle(e){return e.action===`enable`?(await this.deps.debuggerManager.init(),await this.deps.runtimeInspector.init(),await this.deps.debuggerManager.initAdvancedFeatures(this.deps.runtimeInspector),{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Debugger enabled`,enabled:this.deps.debuggerManager.isEnabled()},null,2)}]}):(await this.deps.debuggerManager.disable(),await this.deps.runtimeInspector.disable(),{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Debugger disabled`},null,2)}]})}async handleDebuggerPause(e){await this.deps.debuggerManager.pause();try{let e=await this.deps.debuggerManager.waitForPaused(500);return{content:[{type:`text`,text:JSON.stringify({success:!0,paused:!0,message:`Execution paused`,reason:e.reason,location:e.callFrames[0]?.location},null,2)}]}}catch{return{content:[{type:`text`,text:JSON.stringify({success:!0,paused:!1,message:`Pause requested; no paused event observed yet`},null,2)}]}}}async handleDebuggerResume(e){let t=this.deps.debuggerManager.getPausedState()!==null;return await this.deps.debuggerManager.resume(),{content:[{type:`text`,text:JSON.stringify({success:!0,resumed:t,message:t?`Execution resumed`:`Resume requested; debugger was not paused`},null,2)}]}}},s=class{deps;constructor(e){this.deps=e}async handleDebuggerStepInto(t){let n=this.deps.debuggerManager;if(!n.isEnabled())return{content:[{type:`text`,text:JSON.stringify({success:!1,error:`Debugger not enabled`,hint:`Call debugger_lifecycle({ action: 'enable' })() first to enable the debugger`},null,2)}]};if(!n.isPaused())return{content:[{type:`text`,text:JSON.stringify({success:!1,error:`Cannot step while not paused`,hint:`The debugger must be paused at a breakpoint to perform step operations. Set one with breakpoint({ action: 'set', type: 'code', ... }) or pause with debugger_pause().`,currentState:`running`},null,2)}]};try{return await n.stepInto(),{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Stepped into`},null,2)}]}}catch(t){let n=t instanceof Error?t.message:String(t);return e.error(`Step into failed: ${n}`),{content:[{type:`text`,text:JSON.stringify({success:!1,error:n},null,2)}]}}}async handleDebuggerStepOver(t){let n=this.deps.debuggerManager;if(!n.isEnabled())return{content:[{type:`text`,text:JSON.stringify({success:!1,error:`Debugger not enabled`,hint:`Call debugger_lifecycle({ action: 'enable' })() first to enable the debugger`},null,2)}]};if(!n.isPaused())return{content:[{type:`text`,text:JSON.stringify({success:!1,error:`Cannot step while not paused`,hint:`The debugger must be paused at a breakpoint to perform step operations. Set one with breakpoint({ action: 'set', type: 'code', ... }) or pause with debugger_pause().`,currentState:`running`},null,2)}]};try{return await n.stepOver(),{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Stepped over`},null,2)}]}}catch(t){let n=t instanceof Error?t.message:String(t);return e.error(`Step over failed: ${n}`),{content:[{type:`text`,text:JSON.stringify({success:!1,error:n},null,2)}]}}}async handleDebuggerStepOut(t){let n=this.deps.debuggerManager;if(!n.isEnabled())return{content:[{type:`text`,text:JSON.stringify({success:!1,error:`Debugger not enabled`,hint:`Call debugger_lifecycle({ action: 'enable' })() first to enable the debugger`},null,2)}]};if(!n.isPaused())return{content:[{type:`text`,text:JSON.stringify({success:!1,error:`Cannot step out while not paused`,hint:`The debugger must be paused at a breakpoint to perform step out. Set one with breakpoint({ action: 'set', type: 'code', ... }) or pause with debugger_pause().`,currentState:`running`},null,2)}]};try{return await n.stepOut(),{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Stepped out`},null,2)}]}}catch(t){let n=t instanceof Error?t.message:String(t);return e.error(`Step out failed: ${n}`),{content:[{type:`text`,text:JSON.stringify({success:!1,error:n},null,2)}]}}}},c=class{deps;constructor(e){this.deps=e}async handleDebuggerEvaluate(e){let t=r(e,`expression`,``),n=r(e,`callFrameId`),i=await this.deps.runtimeInspector.evaluate(t,n);return{content:[{type:`text`,text:JSON.stringify({success:!0,expression:t,result:i},null,2)}]}}async handleDebuggerEvaluateGlobal(e){let t=r(e,`expression`,``),n=await this.deps.runtimeInspector.evaluateGlobal(t);return{content:[{type:`text`,text:JSON.stringify({success:!0,expression:t,result:n},null,2)}]}}},l=class{deps;constructor(e){this.deps=e}async handleDebuggerWaitForPaused(e){let n=i(e,`timeout`,3e4);try{let e=await this.deps.debuggerManager.waitForPaused(n);return{content:[{type:`text`,text:JSON.stringify({success:!0,paused:!0,reason:e.reason,location:e.callFrames[0]?.location,hitBreakpoints:e.hitBreakpoints},null,2)}]}}catch(e){if(e instanceof t)throw e;return{content:[{type:`text`,text:JSON.stringify({success:!1,paused:!1,message:e instanceof Error?e.message:`Timeout waiting for paused event`},null,2)}]}}}async handleDebuggerGetPausedState(e){let t=this.deps.debuggerManager.getPausedState();return t?{content:[{type:`text`,text:JSON.stringify({paused:!0,reason:t.reason,frameCount:t.callFrames.length,topFrame:{functionName:t.callFrames[0]?.functionName,location:t.callFrames[0]?.location},hitBreakpoints:t.hitBreakpoints,timestamp:t.timestamp},null,2)}]}:{content:[{type:`text`,text:JSON.stringify({paused:!1,message:`Debugger is not paused`},null,2)}]}}async handleGetCallStack(e){let t=await this.deps.runtimeInspector.getCallStack();return t?{content:[{type:`text`,text:JSON.stringify({success:!0,callStack:{frameCount:t.callFrames.length,reason:t.reason,frames:t.callFrames.map((e,t)=>({index:t,callFrameId:e.callFrameId,functionName:e.functionName,location:`${e.location.url}:${e.location.lineNumber}:${e.location.columnNumber}`,scopeCount:e.scopeChain.length}))}},null,2)}]}:{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Not in paused state. Set a breakpoint and trigger it first.`},null,2)}]}}};function u(e){if(typeof e==`object`&&e&&`message`in e){let t=e.message;if(typeof t==`string`&&t.length>0)return t}return String(e)}var d=class{deps;constructor(e){this.deps=e}async handleSaveSession(e){let t=r(e,`filePath`),i=n(e,`metadata`);try{let e=await this.deps.debuggerManager.saveSession(t,i);return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Session saved successfully`,filePath:e,breakpointCount:this.deps.debuggerManager.listBreakpoints().length},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to save session`,error:u(e)},null,2)}]}}}async handleLoadSession(e){let t=r(e,`filePath`),n=r(e,`sessionData`);try{if(t)await this.deps.debuggerManager.loadSessionFromFile(t);else if(n)await this.deps.debuggerManager.importSession(n);else throw Error(`Either filePath or sessionData must be provided`);return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Session loaded successfully`,breakpointCount:this.deps.debuggerManager.listBreakpoints().length,pauseOnExceptions:this.deps.debuggerManager.getPauseOnExceptionsState()},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to load session`,error:u(e)},null,2)}]}}}async handleExportSession(e){let t=n(e,`metadata`);try{let e=this.deps.debuggerManager.exportSession(t);return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Session exported successfully`,session:e},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to export session`,error:u(e)},null,2)}]}}}async handleListSessions(e){try{let e=await this.deps.debuggerManager.listSavedSessions();return{content:[{type:`text`,text:JSON.stringify({success:!0,count:e.length,sessions:e.map(e=>({path:e.path,timestamp:e.timestamp,date:new Date(e.timestamp).toISOString(),metadata:e.metadata}))},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to list sessions`,error:u(e)},null,2)}]}}}},f=class{deps;constructor(e){this.deps=e}async handleBreakpointSet(e){let t=r(e,`url`),n=r(e,`scriptId`),a=i(e,`lineNumber`,0),o=i(e,`columnNumber`),s=r(e,`condition`),c;if(t)c=await this.deps.debuggerManager.setBreakpointByUrl({url:t,lineNumber:a,columnNumber:o,condition:s});else if(n)c=await this.deps.debuggerManager.setBreakpoint({scriptId:n,lineNumber:a,columnNumber:o,condition:s});else throw Error(`Either url or scriptId must be provided`);return this.deps.eventBus?.emit(`debugger:breakpoint_hit`,{scriptId:c.location?.scriptId??n??``,lineNumber:c.location?.lineNumber??a,timestamp:new Date().toISOString()}),{content:[{type:`text`,text:JSON.stringify({success:!0,breakpoint:{breakpointId:c.breakpointId,location:c.location,condition:c.condition,enabled:c.enabled}},null,2)}]}}async handleBreakpointRemove(e){let t=r(e,`breakpointId`,``);return await this.deps.debuggerManager.removeBreakpoint(t),{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Breakpoint ${t} removed`},null,2)}]}}async handleBreakpointList(e){let t=this.deps.debuggerManager.listBreakpoints();return{content:[{type:`text`,text:JSON.stringify({count:t.length,breakpoints:t.map(e=>({breakpointId:e.breakpointId,location:e.location,condition:e.condition,enabled:e.enabled,hitCount:e.hitCount}))},null,2)}]}}},p=class{deps;constructor(e){this.deps=e}async handleBreakpointSetOnException(e){let t=r(e,`state`,`none`);return await this.deps.debuggerManager.setPauseOnExceptions(t),{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Pause on exceptions set to: ${t}`,state:t},null,2)}]}}};function m(e){return typeof e.ensureAdvancedFeatures==`function`}function h(e){if(typeof e==`object`&&e&&`message`in e){let t=e.message;if(typeof t==`string`&&t.length>0)return t}return String(e)}var g=class{deps;constructor(e){this.deps=e}async ensureAdvancedFeaturesIfSupported(){m(this.deps.debuggerManager)&&await this.deps.debuggerManager.ensureAdvancedFeatures()}async handleXHRBreakpointSet(e){try{let t=r(e,`urlPattern`,``);await this.ensureAdvancedFeaturesIfSupported();let n=await this.deps.debuggerManager.getXHRManager().setXHRBreakpoint(t);return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`XHR breakpoint set`,breakpointId:n,urlPattern:t},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to set XHR breakpoint`,error:h(e)},null,2)}]}}}async handleXHRBreakpointRemove(e){try{let t=r(e,`breakpointId`,``);await this.ensureAdvancedFeaturesIfSupported();let n=await this.deps.debuggerManager.getXHRManager().removeXHRBreakpoint(t);return{content:[{type:`text`,text:JSON.stringify({success:n,message:n?`XHR breakpoint removed`:`XHR breakpoint not found`,breakpointId:t},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to remove XHR breakpoint`,error:h(e)},null,2)}]}}}async handleXHRBreakpointList(e){try{await this.ensureAdvancedFeaturesIfSupported();let e=this.deps.debuggerManager.getXHRManager().getAllXHRBreakpoints();return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Found ${e.length} XHR breakpoint(s)`,breakpoints:e},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to list XHR breakpoints`,error:h(e)},null,2)}]}}}};function _(e){return typeof e.ensureAdvancedFeatures==`function`}function v(e){if(typeof e==`object`&&e&&`message`in e){let t=e.message;if(typeof t==`string`&&t.length>0)return t}return String(e)}var y=class{deps;constructor(e){this.deps=e}async ensureAdvancedFeaturesIfSupported(){_(this.deps.debuggerManager)&&await this.deps.debuggerManager.ensureAdvancedFeatures()}async handleEventBreakpointSet(e){try{let t=r(e,`eventName`,``),n=r(e,`targetName`);await this.ensureAdvancedFeaturesIfSupported();let i=await this.deps.debuggerManager.getEventManager().setEventListenerBreakpoint(t,n);return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Event breakpoint set`,breakpointId:i,eventName:t,targetName:n},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to set event breakpoint`,error:v(e)},null,2)}]}}}async handleEventBreakpointSetCategory(e){try{let t=r(e,`category`,``);await this.ensureAdvancedFeaturesIfSupported();let n=this.deps.debuggerManager.getEventManager(),i;switch(t){case`mouse`:i=await n.setMouseEventBreakpoints();break;case`keyboard`:i=await n.setKeyboardEventBreakpoints();break;case`timer`:i=await n.setTimerEventBreakpoints();break;case`websocket`:i=await n.setWebSocketEventBreakpoints();break;default:throw Error(`Unknown category: ${t}`)}return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Set ${i.length} ${t} event breakpoint(s)`,category:t,breakpointIds:i},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to set event breakpoints`,error:v(e)},null,2)}]}}}async handleEventBreakpointRemove(e){try{let t=r(e,`breakpointId`,``);await this.ensureAdvancedFeaturesIfSupported();let n=await this.deps.debuggerManager.getEventManager().removeEventListenerBreakpoint(t);return{content:[{type:`text`,text:JSON.stringify({success:n,message:n?`Event breakpoint removed`:`Event breakpoint not found`,breakpointId:t},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to remove event breakpoint`,error:v(e)},null,2)}]}}}async handleEventBreakpointList(e){try{await this.ensureAdvancedFeaturesIfSupported();let e=this.deps.debuggerManager.getEventManager().getAllEventBreakpoints();return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Found ${e.length} event breakpoint(s)`,breakpoints:e},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to list event breakpoints`,error:v(e)},null,2)}]}}}};function b(e){if(typeof e==`object`&&e&&`message`in e){let t=e.message;if(typeof t==`string`&&t.length>0)return t}return String(e)}var x=class{deps;constructor(e){this.deps=e}async handleWatchAdd(e){try{let t=r(e,`expression`,``),n=r(e,`name`),i=this.deps.debuggerManager.getWatchManager().addWatch(t,n);return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Watch expression added`,watchId:i,expression:t,name:n||t},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to add watch expression`,error:b(e)},null,2)}]}}}async handleWatchRemove(e){try{let t=r(e,`watchId`,``),n=this.deps.debuggerManager.getWatchManager().removeWatch(t);return{content:[{type:`text`,text:JSON.stringify({success:n,message:n?`Watch expression removed`:`Watch expression not found`,watchId:t},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to remove watch expression`,error:b(e)},null,2)}]}}}async handleWatchList(e){try{let e=this.deps.debuggerManager.getWatchManager().getAllWatches();return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Found ${e.length} watch expression(s)`,watches:e},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to list watch expressions`,error:b(e)},null,2)}]}}}async handleWatchEvaluateAll(e){try{let t=r(e,`callFrameId`),n=await this.deps.debuggerManager.getWatchManager().evaluateAll(t);return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Evaluated ${n.length} watch expression(s)`,results:n},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to evaluate watch expressions`,error:b(e)},null,2)}]}}}async handleWatchClearAll(e){try{return this.deps.debuggerManager.getWatchManager().clearAll(),{content:[{type:`text`,text:JSON.stringify({success:!0,message:`All watch expressions cleared`},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to clear watch expressions`,error:b(e)},null,2)}]}}}};const S=(e,t)=>{if(e instanceof Error)return e.message;if(typeof e==`object`&&e&&`message`in e){let t=e.message;if(typeof t==`string`)return t}return t};var C=class{deps;constructor(e){this.deps=e}async handleGetScopeVariablesEnhanced(e){let t=r(e,`callFrameId`),n=a(e,`includeObjectProperties`),o=i(e,`maxDepth`),s=a(e,`skipErrors`,!0);try{let e=await this.deps.debuggerManager.getScopeVariables({callFrameId:t,includeObjectProperties:n,maxDepth:o,skipErrors:s});return{content:[{type:`text`,text:JSON.stringify(e,null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:S(e,`Failed to get scope variables`),error:String(e)},null,2)}]}}}async handleGetObjectProperties(e){let t=r(e,`objectId`,``);if(!t)return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`objectId parameter is required`},null,2)}]};try{let e=await this.deps.debuggerManager.getObjectPropertiesById(t);return{content:[{type:`text`,text:JSON.stringify({success:!0,propertyCount:e.length,properties:e},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:S(e,`Failed to get object properties`),error:String(e)},null,2)}]}}}};function w(e){return typeof e.ensureAdvancedFeatures==`function`}function T(e){if(typeof e==`object`&&e&&`message`in e){let t=e.message;if(typeof t==`string`&&t.length>0)return t}return String(e)}var E=class{deps;constructor(e){this.deps=e}async ensureAdvancedFeaturesIfSupported(){w(this.deps.debuggerManager)&&await this.deps.debuggerManager.ensureAdvancedFeatures()}async getBlackboxManager(){return await this.ensureAdvancedFeaturesIfSupported(),this.deps.debuggerManager.getBlackboxManager()}async handleBlackboxAdd(e){try{let t=r(e,`urlPattern`,``);return await(await this.getBlackboxManager()).blackboxByPattern(t),{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Script pattern blackboxed`,urlPattern:t},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to add blackbox pattern`,error:T(e)},null,2)}]}}}async handleBlackboxAddCommon(e){try{return await(await this.getBlackboxManager()).blackboxCommonLibraries(),{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Blackboxed common library patterns`},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to add common blackbox patterns`,error:T(e)},null,2)}]}}}async handleBlackboxList(e){try{let e=(await this.getBlackboxManager()).getAllBlackboxedPatterns();return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Found ${e.length} blackboxed pattern(s)`,patterns:e},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to list blackbox patterns`,error:T(e)},null,2)}]}}}},D=class{debuggerManager;runtimeInspector;debuggerControl;debuggerStepping;debuggerEvaluate;debuggerState;sessionManagement;breakpointBasic;breakpointException;xhrBreakpoint;eventBreakpoint;watchExpressions;scopeInspection;blackbox;constructor(e,t,n){this.debuggerManager=e,this.runtimeInspector=t;let r={debuggerManager:this.debuggerManager,runtimeInspector:this.runtimeInspector};this.debuggerControl=new o(r),this.debuggerStepping=new s({debuggerManager:this.debuggerManager}),this.debuggerEvaluate=new c({runtimeInspector:this.runtimeInspector}),this.debuggerState=new l(r),this.sessionManagement=new d({debuggerManager:this.debuggerManager}),this.breakpointBasic=new f({debuggerManager:this.debuggerManager,eventBus:n}),this.breakpointException=new p({debuggerManager:this.debuggerManager}),this.xhrBreakpoint=new g({debuggerManager:this.debuggerManager}),this.eventBreakpoint=new y({debuggerManager:this.debuggerManager}),this.watchExpressions=new x({debuggerManager:this.debuggerManager}),this.scopeInspection=new C(r),this.blackbox=new E({debuggerManager:this.debuggerManager})}async handleDebuggerLifecycle(e){return this.debuggerControl.handleDebuggerLifecycle(e)}async handleDebuggerPause(e){return this.debuggerControl.handleDebuggerPause(e)}async handleDebuggerResume(e){return this.debuggerControl.handleDebuggerResume(e)}async handleDebuggerStepInto(e){return this.debuggerStepping.handleDebuggerStepInto(e)}async handleDebuggerStepOver(e){return this.debuggerStepping.handleDebuggerStepOver(e)}async handleDebuggerStepOut(e){return this.debuggerStepping.handleDebuggerStepOut(e)}async handleDebuggerEvaluate(e){return this.debuggerEvaluate.handleDebuggerEvaluate(e)}async handleDebuggerEvaluateGlobal(e){return this.debuggerEvaluate.handleDebuggerEvaluateGlobal(e)}async handleDebuggerWaitForPaused(e){return this.debuggerState.handleDebuggerWaitForPaused(e)}async handleDebuggerGetPausedState(e){return this.debuggerState.handleDebuggerGetPausedState(e)}async handleGetCallStack(e){return this.debuggerState.handleGetCallStack(e)}async handleSaveSession(e){return this.sessionManagement.handleSaveSession(e)}async handleLoadSession(e){return this.sessionManagement.handleLoadSession(e)}async handleExportSession(e){return this.sessionManagement.handleExportSession(e)}async handleListSessions(e){return this.sessionManagement.handleListSessions(e)}async handleBreakpointSet(e){return this.breakpointBasic.handleBreakpointSet(e)}async handleBreakpointRemove(e){return this.breakpointBasic.handleBreakpointRemove(e)}async handleBreakpointList(e){return this.breakpointBasic.handleBreakpointList(e)}async handleBreakpointSetOnException(e){return this.breakpointException.handleBreakpointSetOnException(e)}async handleXHRBreakpointSet(e){return this.xhrBreakpoint.handleXHRBreakpointSet(e)}async handleXHRBreakpointRemove(e){return this.xhrBreakpoint.handleXHRBreakpointRemove(e)}async handleXHRBreakpointList(e){return this.xhrBreakpoint.handleXHRBreakpointList(e)}async handleEventBreakpointSet(e){return this.eventBreakpoint.handleEventBreakpointSet(e)}async handleEventBreakpointSetCategory(e){return this.eventBreakpoint.handleEventBreakpointSetCategory(e)}async handleEventBreakpointRemove(e){return this.eventBreakpoint.handleEventBreakpointRemove(e)}async handleEventBreakpointList(e){return this.eventBreakpoint.handleEventBreakpointList(e)}async handleWatchAdd(e){return this.watchExpressions.handleWatchAdd(e)}async handleWatchRemove(e){return this.watchExpressions.handleWatchRemove(e)}async handleWatchList(e){return this.watchExpressions.handleWatchList(e)}async handleWatchEvaluateAll(e){return this.watchExpressions.handleWatchEvaluateAll(e)}async handleWatchClearAll(e){return this.watchExpressions.handleWatchClearAll(e)}async handleGetScopeVariablesEnhanced(e){return this.scopeInspection.handleGetScopeVariablesEnhanced(e)}async handleGetObjectProperties(e){return this.scopeInspection.handleGetObjectProperties(e)}async handleBlackboxAdd(e){return this.blackbox.handleBlackboxAdd(e)}async handleBlackboxAddCommon(e){return this.blackbox.handleBlackboxAddCommon(e)}async handleBlackboxList(e){return this.blackbox.handleBlackboxList(e)}async handleBreakpoint(e){let t=String(e.action??``),n=String(e.type??`code`);switch(n){case`code`:switch(t){case`set`:return this.breakpointBasic.handleBreakpointSet(e);case`remove`:return this.breakpointBasic.handleBreakpointRemove(e);case`list`:return this.breakpointBasic.handleBreakpointList(e)}break;case`xhr`:switch(t){case`set`:return this.xhrBreakpoint.handleXHRBreakpointSet(e);case`remove`:return this.xhrBreakpoint.handleXHRBreakpointRemove(e);case`list`:return this.xhrBreakpoint.handleXHRBreakpointList(e)}break;case`event`:switch(t){case`set`:return this.eventBreakpoint.handleEventBreakpointSet(e);case`remove`:return this.eventBreakpoint.handleEventBreakpointRemove(e);case`list`:return this.eventBreakpoint.handleEventBreakpointList(e)}break;case`event_category`:if(t===`set`)return this.eventBreakpoint.handleEventBreakpointSetCategory(e);break;case`exception`:if(t===`set`)return this.breakpointException.handleBreakpointSetOnException(e);break}return{content:[{type:`text`,text:JSON.stringify({success:!1,error:`Invalid breakpoint action/type: ${t}/${n}. Valid types: code, xhr, event, event_category, exception. Valid actions: set, remove, list.`})}]}}async handleWatch(e){let t=String(e.action??``);switch(t){case`add`:return this.watchExpressions.handleWatchAdd(e);case`remove`:return this.watchExpressions.handleWatchRemove(e);case`list`:return this.watchExpressions.handleWatchList(e);case`evaluate_all`:return this.watchExpressions.handleWatchEvaluateAll(e);case`clear_all`:return this.watchExpressions.handleWatchClearAll(e);default:return{content:[{type:`text`,text:JSON.stringify({success:!1,error:`Unknown watch action: ${t}. Valid: add, remove, list, evaluate_all, clear_all`})}]}}}async handleDebuggerStep(e){let t=String(e.direction??`over`);switch(t){case`into`:return this.debuggerStepping.handleDebuggerStepInto(e);case`over`:return this.debuggerStepping.handleDebuggerStepOver(e);case`out`:return this.debuggerStepping.handleDebuggerStepOut(e);default:return{content:[{type:`text`,text:JSON.stringify({success:!1,error:`Unknown direction: ${t}. Valid: into, over, out`})}]}}}async handleDebuggerEvaluateDispatch(e){return String(e.context??`frame`)===`global`?this.debuggerEvaluate.handleDebuggerEvaluateGlobal(e):this.debuggerEvaluate.handleDebuggerEvaluate(e)}async handleDebuggerSession(e){let t=String(e.action??``);switch(t){case`save`:return this.sessionManagement.handleSaveSession(e);case`load`:return this.sessionManagement.handleLoadSession(e);case`export`:return this.sessionManagement.handleExportSession(e);case`list`:return this.sessionManagement.handleListSessions(e);default:return{content:[{type:`text`,text:JSON.stringify({success:!1,error:`Unknown action: ${t}. Valid actions: save, load, export, list`})}]}}}};export{D as DebuggerToolHandlers};
@@ -1 +1 @@
1
- import{t as e}from"./tool-builder-qif8M9-K.mjs";const t=[e(`ai_hook`,e=>e.desc(`Manage AI hooks. Actions: inject (inject code into page), get_data (retrieve captured hook data), list (all active hooks), clear (remove hook data by id or all), toggle (enable/disable a hook), export (export data as JSON/CSV).`).enum(`action`,[`inject`,`get_data`,`list`,`clear`,`toggle`,`export`],`Operation to perform`).string(`hookId`,`Hook identifier (required for inject/get_data/toggle; optional for clear/export)`).string(`code`,`Hook code to inject (required for action=inject)`).enum(`method`,[`evaluateOnNewDocument`,`evaluate`],`Injection method (for action=inject)`,{default:`evaluate`}).boolean(`enabled`,`Enable or disable hook (required for action=toggle)`).enum(`format`,[`json`,`csv`],`Export format (for action=export)`,{default:`json`}).required(`action`))],n=[e(`hook_preset`,e=>e.desc(`Install a pre-built JavaScript hook from 20+ built-in presets (eval, atob/btoa, Proxy, Reflect, Object.defineProperty, etc.), or provide customTemplate/customTemplates to install your own reusable hook bodies. Use listPresets=true to see all available preset descriptions.`).string(`preset`,`Single preset name to install. Accepts built-in preset ids or ids provided by customTemplate/customTemplates.`).array(`presets`,{type:`string`},`List of preset names to install simultaneously. Accepts built-in ids and custom template ids.`).prop(`customTemplate`,{type:`object`,properties:{id:{type:`string`,description:`Stable preset id, for example deobfuscation-sinks`},description:{type:`string`,description:`Human-readable description for listPresets output.`},body:{type:`string`,description:`Hook body snippet inserted into the preset wrapper.`}},required:[`id`,`body`],description:`Inline custom template. body should contain the hook body inserted into the standard buildHookCode wrapper. Use {{STACK_CODE}} and {{LOG_FN}} placeholders when needed.`}).prop(`customTemplates`,{type:`array`,items:{type:`object`,properties:{id:{type:`string`},description:{type:`string`},body:{type:`string`}},required:[`id`,`body`]},description:`List of inline custom templates to register for this invocation.`}).boolean(`captureStack`,`Include call stack in captured data (has performance impact)`,{default:!1}).boolean(`logToConsole`,`Log hook events to browser console`,{default:!0}).enum(`method`,[`evaluate`,`evaluateOnNewDocument`],`Injection method: evaluate=current page, evaluateOnNewDocument=before page scripts`,{default:`evaluate`}).boolean(`listPresets`,`Set to true to list all available presets with descriptions instead of installing.`,{default:!1}))];export{n,t};
1
+ import{t as e}from"./tool-builder-CpLh-UQd.mjs";const t=[e(`ai_hook`,e=>e.desc(`Manage AI hooks. Actions: inject (inject code into page), get_data (retrieve captured hook data), list (all active hooks), clear (remove hook data by id or all), toggle (enable/disable a hook), export (export data as JSON/CSV).`).enum(`action`,[`inject`,`get_data`,`list`,`clear`,`toggle`,`export`],`Operation to perform`).string(`hookId`,`Hook identifier (required for inject/get_data/toggle; optional for clear/export)`).string(`code`,`Hook code to inject (required for action=inject)`).enum(`method`,[`evaluateOnNewDocument`,`evaluate`],`Injection method (for action=inject)`,{default:`evaluate`}).boolean(`enabled`,`Enable or disable hook (required for action=toggle)`).enum(`format`,[`json`,`csv`],`Export format (for action=export)`,{default:`json`}).required(`action`))],n=[e(`hook_preset`,e=>e.desc(`Install a pre-built JavaScript hook from 20+ built-in presets (eval, atob/btoa, Proxy, Reflect, Object.defineProperty, etc.), or provide customTemplate/customTemplates to install your own reusable hook bodies. Use listPresets=true to see all available preset descriptions.`).string(`preset`,`Single preset name to install. Accepts built-in preset ids or ids provided by customTemplate/customTemplates.`).array(`presets`,{type:`string`},`List of preset names to install simultaneously. Accepts built-in ids and custom template ids.`).prop(`customTemplate`,{type:`object`,properties:{id:{type:`string`,description:`Stable preset id, for example deobfuscation-sinks`},description:{type:`string`,description:`Human-readable description for listPresets output.`},body:{type:`string`,description:`Hook body snippet inserted into the preset wrapper.`}},required:[`id`,`body`],description:`Inline custom template. body should contain the hook body inserted into the standard buildHookCode wrapper. Use {{STACK_CODE}} and {{LOG_FN}} placeholders when needed.`}).prop(`customTemplates`,{type:`array`,items:{type:`object`,properties:{id:{type:`string`},description:{type:`string`},body:{type:`string`}},required:[`id`,`body`]},description:`List of inline custom templates to register for this invocation.`}).boolean(`captureStack`,`Include call stack in captured data (has performance impact)`,{default:!1}).boolean(`logToConsole`,`Log hook events to browser console`,{default:!0}).enum(`method`,[`evaluate`,`evaluateOnNewDocument`],`Injection method: evaluate=current page, evaluateOnNewDocument=before page scripts`,{default:`evaluate`}).boolean(`listPresets`,`Set to true to list all available presets with descriptions instead of installing.`,{default:!1}))];export{n,t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./tool-builder-CpLh-UQd.mjs";const t=[e(`canvas_engine_fingerprint`,e=>e.desc(`Detect Canvas/WebGL game engines in the page.`).query()),e(`canvas_scene_dump`,e=>e.desc(`Extract the full scene tree / display list from a detected canvas engine.`).string(`canvasId`,`Canvas element ID or index to target`).number(`maxDepth`,`Maximum tree traversal depth`,{default:20}).boolean(`onlyInteractive`,`Only include interactive (mouseEnabled) nodes`,{default:!1}).boolean(`onlyVisible`,`Only include visible nodes`,{default:!1}).query()),e(`canvas_pick_object_at_point`,e=>e.desc(`Pick / hit-test the topmost object at a given screen coordinate using the engine's hit-test system`).number(`x`,`Screen X coordinate`).number(`y`,`Screen Y coordinate`).string(`canvasId`,`Canvas element ID or index to target`).boolean(`highlight`,`Draw a highlight rectangle on the picked object`,{default:!1}).required(`x`,`y`).readOnly()),e(`canvas_trace_click_handler`,e=>e.desc(`Trace a click event from DOM to JS call stack.`).number(`x`,`Screen X coordinate to click`).number(`y`,`Screen Y coordinate to click`).string(`canvasId`,`Canvas element ID or index to target`).enum(`breakpointType`,[`click`,`mousedown`,`pointerdown`],`Event breakpoint type`,{default:`click`}).number(`maxFrames`,`Maximum call stack frames to capture`,{default:50}).requiredOpenWorld(`x`,`y`))],n=[{name:`skia_detect_renderer`,description:`Detect the active Skia renderer backend from the current page context.`,inputSchema:{type:`object`,properties:{},required:[]}},{name:`skia_extract_scene`,description:`Extract a lightweight Skia scene tree from the selected canvas.`,inputSchema:{type:`object`,properties:{canvasId:{type:`string`}},required:[]}},{name:`skia_correlate_objects`,description:`Correlate requested Skia node identifiers with the extracted scene tree.`,inputSchema:{type:`object`,properties:{canvasId:{type:`string`,description:`Optional canvas element ID to target for correlation.`},skiaNodeIds:{type:`array`,items:{type:`string`},description:`Optional list of Skia node identifiers to correlate.`}},required:[]}}];export{t as n,n as t};
@@ -1 +1 @@
1
- import{t as e}from"./tool-builder-qif8M9-K.mjs";const t={type:`object`,additionalProperties:!1,properties:{allowPrivateNetwork:{type:`boolean`,description:`Allow access to private/reserved targets only when the request also matches allowedHosts or allowedCidrs.`},allowInsecureHttp:{type:`boolean`,description:`Allow non-loopback HTTP targets only when the request also matches allowedHosts or allowedCidrs.`},allowedHosts:{type:`array`,items:{type:`string`},description:`Exact hostname or host:port allowlist for the primary target (for example ["labs.example.com", "localhost:8080"]).`},allowedCidrs:{type:`array`,items:{type:`string`},description:`CIDR allowlist applied after DNS resolution (for example ["10.10.0.0/16", "192.168.1.10/32"]).`},allowedRedirectHosts:{type:`array`,items:{type:`string`},description:`Optional hostname or host:port allowlist for redirect hops. When omitted, redirects inherit allowedHosts/allowedCidrs.`}},description:`Request-level network authorization policy. Use this instead of process-wide bypasses when you need to reach a real lab target, private address, or plain HTTP service.`},n=[e(`js_bundle_search`,e=>e.desc(`Fetch a remote JS bundle and search it with named regex patterns, with caching and noise filtering.`).string(`url`,`Remote URL of the JavaScript bundle to analyze`).array(`patterns`,{type:`object`,properties:{name:{type:`string`,description:`Human-readable label for this pattern`},regex:{type:`string`,description:`JavaScript regex string`},contextBefore:{type:`number`,description:`Characters of context before match (default: 80)`},contextAfter:{type:`number`,description:`Characters of context after match (default: 80)`}},required:[`name`,`regex`]},`Named regex patterns to search for`).boolean(`cacheBundle`,`Cache the bundle for 5 minutes to avoid re-downloads`,{default:!0}).boolean(`stripNoise`,`Skip matches inside SVG path data or base64 blobs`,{default:!0}).number(`maxMatches`,`Maximum matches to return per pattern`,{default:10,minimum:1,maximum:1e3}).prop(`networkPolicy`,t).requiredOpenWorld(`url`,`patterns`)),e(`page_script_register`,e=>e.desc(`Register a named reusable JS snippet in the Script Library. Execute with page_script_run.`).string(`name`,`Unique script name (e.g. "my_extractor")`).string(`code`,'JavaScript expression/IIFE to register. Use `typeof __params__ !== "undefined" ? __params__ : {}` to safely access runtime parameters.').string(`description`,`Optional human-readable description of the script`).required(`name`,`code`)),e(`page_script_run`,e=>e.desc(`Execute a named script from the Script Library with optional runtime params (__params__).`).string(`name`,`Script name to run (built-in or registered)`).prop(`params`,{type:`object`,additionalProperties:!0,description:`Optional parameters injected as __params__ (must be JSON-serializable)`}).requiredOpenWorld(`name`)),e(`api_probe_batch`,e=>e.desc(`Batch-probe API endpoints in browser context with auto token injection and HTML skip.`).string(`baseUrl`,`Base URL prefix (e.g. "https://chat.qwen.ai") — trailing slash will be stripped`).array(`paths`,{type:`string`},`Paths to probe (e.g. ["/api/v1/users", "/api/v1/chats"])`).enum(`method`,[`GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`HEAD`,`OPTIONS`],`HTTP method for all probes`,{default:`GET`}).object(`headers`,{additionalProperties:{type:`string`}},`Additional HTTP headers to include in all requests`).string(`bodyTemplate`,`JSON body string to send for POST/PUT/PATCH requests (optional)`).array(`includeBodyStatuses`,{type:`number`},`Status codes for which to include response body snippet (default: [200, 201, 204])`).number(`maxBodySnippetLength`,`Max characters per response body snippet`,{default:500,minimum:0,maximum:1e4}).boolean(`autoInjectAuth`,`Auto-inject Bearer token from localStorage (token / active_token / access_token).`,{default:!0}).prop(`networkPolicy`,t).requiredOpenWorld(`baseUrl`,`paths`)),e(`list_extension_workflows`,e=>e.desc(`List runtime-loaded extension workflows from plugins/ or workflows/ directories.`).query()),e(`run_extension_workflow`,e=>e.desc(`Execute an extension workflow by workflowId with optional config and timeout overrides.`).string(`workflowId`,`Registered extension workflow id to execute`).string(`profile`,`Optional profile label exposed to the workflow execution context`).prop(`config`,{type:`object`,additionalProperties:!0,description:`Optional config overrides read through ctx.getConfig(path, fallback)`}).prop(`nodeInputOverrides`,{type:`object`,additionalProperties:{type:`object`,additionalProperties:!0},description:`Optional shallow input overrides keyed by workflow node id`}).number(`timeoutMs`,`Optional override for total workflow timeout in milliseconds`).requiredOpenWorld(`workflowId`))];export{n as t};
1
+ import{t as e}from"./tool-builder-CpLh-UQd.mjs";const t={type:`object`,additionalProperties:!1,properties:{allowPrivateNetwork:{type:`boolean`,description:`Allow access to private/reserved targets only when the request also matches allowedHosts or allowedCidrs.`},allowInsecureHttp:{type:`boolean`,description:`Allow non-loopback HTTP targets only when the request also matches allowedHosts or allowedCidrs.`},allowedHosts:{type:`array`,items:{type:`string`},description:`Exact hostname or host:port allowlist for the primary target (for example ["labs.example.com", "localhost:8080"]).`},allowedCidrs:{type:`array`,items:{type:`string`},description:`CIDR allowlist applied after DNS resolution (for example ["10.10.0.0/16", "192.168.1.10/32"]).`},allowedRedirectHosts:{type:`array`,items:{type:`string`},description:`Optional hostname or host:port allowlist for redirect hops. When omitted, redirects inherit allowedHosts/allowedCidrs.`}},description:`Request-level network authorization policy. Use this instead of process-wide bypasses when you need to reach a real lab target, private address, or plain HTTP service.`},n=[e(`js_bundle_search`,e=>e.desc(`Fetch a remote JS bundle and search it with named regex patterns, with caching and noise filtering.`).string(`url`,`Remote URL of the JavaScript bundle to analyze`).array(`patterns`,{type:`object`,properties:{name:{type:`string`,description:`Human-readable label for this pattern`},regex:{type:`string`,description:`JavaScript regex string`},contextBefore:{type:`number`,description:`Characters of context before match (default: 80)`},contextAfter:{type:`number`,description:`Characters of context after match (default: 80)`}},required:[`name`,`regex`]},`Named regex patterns to search for`).boolean(`cacheBundle`,`Cache the bundle for 5 minutes to avoid re-downloads`,{default:!0}).boolean(`stripNoise`,`Skip matches inside SVG path data or base64 blobs`,{default:!0}).number(`maxMatches`,`Maximum matches to return per pattern`,{default:10,minimum:1,maximum:1e3}).prop(`networkPolicy`,t).requiredOpenWorld(`url`,`patterns`)),e(`page_script_register`,e=>e.desc(`Register a named reusable JS snippet in the Script Library. Execute with page_script_run.`).string(`name`,`Unique script name (e.g. "my_extractor")`).string(`code`,'JavaScript expression/IIFE to register. Use `typeof __params__ !== "undefined" ? __params__ : {}` to safely access runtime parameters.').string(`description`,`Optional human-readable description of the script`).required(`name`,`code`)),e(`page_script_run`,e=>e.desc(`Execute a named script from the Script Library with optional runtime params (__params__).`).string(`name`,`Script name to run (built-in or registered)`).prop(`params`,{type:`object`,additionalProperties:!0,description:`Optional parameters injected as __params__ (must be JSON-serializable)`}).requiredOpenWorld(`name`)),e(`api_probe_batch`,e=>e.desc(`Batch-probe API endpoints in browser context with auto token injection and HTML skip.`).string(`baseUrl`,`Base URL prefix (e.g. "https://chat.qwen.ai") — trailing slash will be stripped`).array(`paths`,{type:`string`},`Paths to probe (e.g. ["/api/v1/users", "/api/v1/chats"])`).enum(`method`,[`GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`HEAD`,`OPTIONS`],`HTTP method for all probes`,{default:`GET`}).object(`headers`,{additionalProperties:{type:`string`}},`Additional HTTP headers to include in all requests`).string(`bodyTemplate`,`JSON body string to send for POST/PUT/PATCH requests (optional)`).array(`includeBodyStatuses`,{type:`number`},`Status codes for which to include response body snippet (default: [200, 201, 204])`).number(`maxBodySnippetLength`,`Max characters per response body snippet`,{default:500,minimum:0,maximum:1e4}).boolean(`autoInjectAuth`,`Auto-inject Bearer token from localStorage (token / active_token / access_token).`,{default:!0}).prop(`networkPolicy`,t).requiredOpenWorld(`baseUrl`,`paths`)),e(`list_extension_workflows`,e=>e.desc(`List runtime-loaded extension workflows from plugins/ or workflows/ directories.`).query()),e(`run_extension_workflow`,e=>e.desc(`Execute an extension workflow by workflowId with optional config and timeout overrides.`).string(`workflowId`,`Registered extension workflow id to execute`).string(`profile`,`Optional profile label exposed to the workflow execution context`).prop(`config`,{type:`object`,additionalProperties:!0,description:`Optional config overrides read through ctx.getConfig(path, fallback)`}).prop(`nodeInputOverrides`,{type:`object`,additionalProperties:{type:`object`,additionalProperties:!0},description:`Optional shallow input overrides keyed by workflow node id`}).number(`timeoutMs`,`Optional override for total workflow timeout in milliseconds`).requiredOpenWorld(`workflowId`))];export{n as t};
@@ -1 +1 @@
1
- import{t as e}from"./tool-builder-qif8M9-K.mjs";const t=[e(`process_windows`,e=>e.desc(`Get all window handles for a process.`).number(`pid`,`Process ID to get windows for`).required(`pid`)),e(`process_check_debug_port`,e=>e.desc(`Check if a process has a debug port enabled for CDP attachment.`).number(`pid`,`Process ID to check`).required(`pid`)),e(`process_launch_debug`,e=>e.desc(`Launch an executable with remote debugging port enabled.`).string(`executablePath`,`Full path to the executable to launch`).number(`debugPort`,`Debug port to use`,{default:9222,minimum:1,maximum:65535}).array(`args`,{type:`string`},`Additional command line arguments`).required(`executablePath`)),e(`memory_read`,e=>e.desc(`Read memory from a process at a specific address. Requires elevated privileges. If pid is omitted, the active browser renderer PID is auto-discovered from the current browser session.`).number(`pid`,`Target process ID (optional when a browser session is attached)`).string(`address`,`Memory address to read (hex string like "0x12345678")`).number(`size`,`Number of bytes to read`).required(`address`,`size`)),e(`memory_write`,e=>e.desc(`Write data to process memory at a given address. If pid is omitted, the active browser renderer PID is auto-discovered from the current browser session.`).number(`pid`,`Target process ID (optional when a browser session is attached)`).string(`address`,`Memory address to write to (hex string like "0x12345678")`).string(`data`,`Data to write (hex string or base64)`).enum(`encoding`,[`hex`,`base64`],`Encoding of the data parameter`,{default:`hex`}).required(`address`,`data`)),e(`memory_scan`,e=>e.desc(`Scan process memory for a pattern or value. Requires elevated privileges. If pid is omitted, the active browser renderer PID is auto-discovered from the current browser session.`).number(`pid`,`Target process ID (optional when a browser session is attached)`).string(`pattern`,`Pattern to search for (hex bytes like "48 8B 05" or value)`).enum(`patternType`,[`hex`,`int32`,`int64`,`float`,`double`,`string`],`Type of pattern to search`,{default:`hex`}).boolean(`suspendTarget`,`Suspend the target process during scan for a consistent memory snapshot (default: false)`,{default:!1}).required(`pattern`)),e(`memory_check_protection`,e=>e.desc(`Check memory protection flags at a specific address. If pid is omitted, the active browser renderer PID is auto-discovered from the current browser session.`).number(`pid`,`Target process ID (optional when a browser session is attached)`).string(`address`,`Memory address to check (hex string like "0x12345678")`).required(`address`)),e(`memory_scan_filtered`,e=>e.desc(`Refine a previous memory scan with filtered addresses. If pid is omitted, the active browser renderer PID is auto-discovered from the current browser session.`).number(`pid`,`Target process ID (optional when a browser session is attached)`).string(`pattern`,`Pattern to search for`).array(`addresses`,{type:`string`},`List of addresses to scan within (from previous scan)`).enum(`patternType`,[`hex`,`int32`,`int64`,`float`,`double`,`string`],`Type of pattern to search`,{default:`hex`}).required(`pattern`,`addresses`)),e(`memory_batch_write`,e=>e.desc(`Write multiple memory patches at once. If pid is omitted, the active browser renderer PID is auto-discovered from the current browser session.`).number(`pid`,`Target process ID (optional when a browser session is attached)`).array(`patches`,{type:`object`,properties:{address:{type:`string`,description:`Memory address (hex)`},data:{type:`string`,description:`Data to write`},encoding:{type:`string`,enum:[`hex`,`base64`],default:`hex`}},required:[`address`,`data`]},`Array of patches to apply`).required(`patches`)),e(`memory_dump_region`,e=>e.desc(`Dump a process memory region to a binary file for offline analysis. If pid is omitted, the active browser renderer PID is auto-discovered from the current browser session.`).number(`pid`,`Target process ID (optional when a browser session is attached)`).string(`address`,`Start address (hex)`).number(`size`,`Number of bytes to dump`).string(`outputPath`,`Output file path`).required(`address`,`size`,`outputPath`)),e(`memory_list_regions`,e=>e.desc(`List all memory regions in a process with protection flags. If pid is omitted, the active browser renderer PID is auto-discovered from the current browser session.`).number(`pid`,`Target process ID (optional when a browser session is attached)`)),e(`memory_audit_export`,e=>e.desc(`Export the in-memory audit trail for memory operations as JSON.`)),e(`inject_dll`,e=>e.desc(`Inject a DLL into a target process.`).number(`pid`,`Target process ID`).string(`dllPath`,`Full path to the DLL file to inject`).required(`pid`,`dllPath`)),e(`inject_shellcode`,e=>e.desc(`Allocate and execute raw shellcode in a target process.`).number(`pid`,`Target process ID`).string(`shellcode`,`Shellcode bytes (hex string or base64)`).enum(`encoding`,[`hex`,`base64`],`Encoding of shellcode`,{default:`hex`}).required(`pid`,`shellcode`)),e(`check_debug_port`,e=>e.desc(`Check if a process is being debugged using NtQueryInformationProcess (ProcessDebugPort).`).number(`pid`,`Target process ID`).required(`pid`)),e(`enumerate_modules`,e=>e.desc(`List all loaded modules (DLLs) in a process with their base addresses.`).number(`pid`,`Target process ID`).required(`pid`)),e(`electron_attach`,e=>e.desc(`Attach to an Electron CDP port and optionally evaluate in a matching page.`).number(`port`,`CDP port to connect to`,{minimum:1,maximum:65535}).string(`pageUrl`,`Optional URL substring used to pick the target page`).string(`evaluate`,`Optional JavaScript expression to evaluate in the selected page`).string(`wsEndpoint`,`Optional browser WebSocket endpoint override`))];export{t};
1
+ import{t as e}from"./tool-builder-CpLh-UQd.mjs";const t=[e(`process_windows`,e=>e.desc(`Get all window handles for a process.`).number(`pid`,`Process ID to get windows for`).required(`pid`)),e(`process_check_debug_port`,e=>e.desc(`Check if a process has a debug port enabled for CDP attachment.`).number(`pid`,`Process ID to check`).required(`pid`)),e(`process_launch_debug`,e=>e.desc(`Launch an executable with remote debugging port enabled.`).string(`executablePath`,`Full path to the executable to launch`).number(`debugPort`,`Debug port to use`,{default:9222,minimum:1,maximum:65535}).array(`args`,{type:`string`},`Additional command line arguments`).required(`executablePath`)),e(`memory_read`,e=>e.desc(`Read memory from a process at a specific address. Requires elevated privileges. If pid is omitted, the active browser renderer PID is auto-discovered from the current browser session.`).number(`pid`,`Target process ID (optional when a browser session is attached)`).string(`address`,`Memory address to read (hex string like "0x12345678")`).number(`size`,`Number of bytes to read`).required(`address`,`size`)),e(`memory_write`,e=>e.desc(`Write data to process memory at a given address. If pid is omitted, the active browser renderer PID is auto-discovered from the current browser session.`).number(`pid`,`Target process ID (optional when a browser session is attached)`).string(`address`,`Memory address to write to (hex string like "0x12345678")`).string(`data`,`Data to write (hex string or base64)`).enum(`encoding`,[`hex`,`base64`],`Encoding of the data parameter`,{default:`hex`}).required(`address`,`data`)),e(`memory_scan`,e=>e.desc(`Scan process memory for a pattern or value. Requires elevated privileges. If pid is omitted, the active browser renderer PID is auto-discovered from the current browser session.`).number(`pid`,`Target process ID (optional when a browser session is attached)`).string(`pattern`,`Pattern to search for (hex bytes like "48 8B 05" or value)`).enum(`patternType`,[`hex`,`int32`,`int64`,`float`,`double`,`string`],`Type of pattern to search`,{default:`hex`}).boolean(`suspendTarget`,`Suspend the target process during scan for a consistent memory snapshot (default: false)`,{default:!1}).required(`pattern`)),e(`memory_check_protection`,e=>e.desc(`Check memory protection flags at a specific address. If pid is omitted, the active browser renderer PID is auto-discovered from the current browser session.`).number(`pid`,`Target process ID (optional when a browser session is attached)`).string(`address`,`Memory address to check (hex string like "0x12345678")`).required(`address`)),e(`memory_scan_filtered`,e=>e.desc(`Refine a previous memory scan with filtered addresses. If pid is omitted, the active browser renderer PID is auto-discovered from the current browser session.`).number(`pid`,`Target process ID (optional when a browser session is attached)`).string(`pattern`,`Pattern to search for`).array(`addresses`,{type:`string`},`List of addresses to scan within (from previous scan)`).enum(`patternType`,[`hex`,`int32`,`int64`,`float`,`double`,`string`],`Type of pattern to search`,{default:`hex`}).required(`pattern`,`addresses`)),e(`memory_batch_write`,e=>e.desc(`Write multiple memory patches at once. If pid is omitted, the active browser renderer PID is auto-discovered from the current browser session.`).number(`pid`,`Target process ID (optional when a browser session is attached)`).array(`patches`,{type:`object`,properties:{address:{type:`string`,description:`Memory address (hex)`},data:{type:`string`,description:`Data to write`},encoding:{type:`string`,enum:[`hex`,`base64`],default:`hex`}},required:[`address`,`data`]},`Array of patches to apply`).required(`patches`)),e(`memory_dump_region`,e=>e.desc(`Dump a process memory region to a binary file for offline analysis. If pid is omitted, the active browser renderer PID is auto-discovered from the current browser session.`).number(`pid`,`Target process ID (optional when a browser session is attached)`).string(`address`,`Start address (hex)`).number(`size`,`Number of bytes to dump`).string(`outputPath`,`Output file path`).required(`address`,`size`,`outputPath`)),e(`memory_list_regions`,e=>e.desc(`List all memory regions in a process with protection flags. If pid is omitted, the active browser renderer PID is auto-discovered from the current browser session.`).number(`pid`,`Target process ID (optional when a browser session is attached)`)),e(`memory_audit_export`,e=>e.desc(`Export the in-memory audit trail for memory operations as JSON.`)),e(`inject_dll`,e=>e.desc(`Inject a DLL into a target process.`).number(`pid`,`Target process ID`).string(`dllPath`,`Full path to the DLL file to inject`).required(`pid`,`dllPath`)),e(`inject_shellcode`,e=>e.desc(`Allocate and execute raw shellcode in a target process.`).number(`pid`,`Target process ID`).string(`shellcode`,`Shellcode bytes (hex string or base64)`).enum(`encoding`,[`hex`,`base64`],`Encoding of shellcode`,{default:`hex`}).required(`pid`,`shellcode`)),e(`check_debug_port`,e=>e.desc(`Check if a process is being debugged using NtQueryInformationProcess (ProcessDebugPort).`).number(`pid`,`Target process ID`).required(`pid`)),e(`enumerate_modules`,e=>e.desc(`List all loaded modules (DLLs) in a process with their base addresses.`).number(`pid`,`Target process ID`).required(`pid`)),e(`electron_attach`,e=>e.desc(`Attach to an Electron CDP port and optionally evaluate in a matching page.`).number(`port`,`CDP port to connect to`,{minimum:1,maximum:65535}).string(`pageUrl`,`Optional URL substring used to pick the target page`).string(`evaluate`,`Optional JavaScript expression to evaluate in the selected page`).string(`wsEndpoint`,`Optional browser WebSocket endpoint override`))];export{t};
@@ -1 +1 @@
1
- import{t as e}from"./tool-builder-qif8M9-K.mjs";const t=[e(`dart_strings_extract`,e=>e.desc(`Stream-extract ASCII/UTF-16LE strings from a Dart AOT libapp.so and classify them (urls, paths, classNames, packageRefs, cryptoKeywords, plus customRules). ReDoS-guarded.`).string(`filePath`,`Absolute path to the libapp.so (or arbitrary binary) to extract from`).number(`minLength`,`Minimum string length to emit`,{default:4,minimum:2,maximum:64}).boolean(`includeRaw`,"Include unclassified strings under the `raw` bucket",{default:!1}).boolean(`includeOffsets`,`Include byte offsets[] for each extracted string`,{default:!0}).enum(`encoding`,[`ascii`,`utf16le`,`both`],`Which encodings to scan`,{default:`both`}).number(`maxChunkBytes`,`Streaming chunk size in bytes`).number(`maxOffsetsPerString`,`Cap on offsets recorded per string (excess sets truncated)`,{default:1e3}).enum(`ruleMode`,[`append`,`prepend`,`replace`],`How customRules interact with DEFAULT_RULES`,{default:`append`}).number(`regexTimeoutMs`,`Per-rule .test() wall-clock budget for the ReDoS guard`).number(`scanStride`,`Only emit hits whose offset is divisible by stride (e.g. 4 for pointer-aligned scans)`).object(`scanWindow`,{start:{type:`number`,description:`Inclusive start byte offset`},end:{type:`number`,description:`Exclusive end byte offset`}},`Restrict scanning to a byte range (skip ELF headers, focus on a section, etc.)`).array(`customRules`,{type:`object`,properties:{category:{type:`string`,description:`Category bucket name for matched strings`},pattern:{type:`string`,description:`Regex source (anchored as needed)`},flags:{type:`string`,description:`Regex flags (must be in DART_ALLOWED_REGEX_FLAGS)`},exclude:{type:`string`,description:`Optional exclude regex applied before category match`},excludeFlags:{type:`string`,description:`Flags for the exclude regex`},confidence:{type:`number`,description:`Confidence weight in [0,1] carried onto each matching hit`},enableWhenFileNameMatches:{type:`string`,description:`Rule only fires when source basename matches this regex`},enableWhenFileNameFlags:{type:`string`,description:`Flags for enableWhenFileNameMatches`}},required:[`category`,`pattern`]},`Custom classification rules with safe regex compilation (ReDoS-guarded)`).required(`filePath`).query()),e(`dart_smi_scan`,e=>e.desc(`Recover Dart Small Integer (Smi) constants from a libapp.so by reading aligned little-endian words and stripping the heap-pointer tag bit.`).string(`filePath`,`Absolute path to the libapp.so (or arbitrary binary) to scan`).enum(`width`,[`4`,`8`],`Word width in bytes (4 for ARM32, 8 for ARM64)`,{default:`8`}).number(`stride`,"Bytes between consecutive scan positions; defaults to `width`").number(`minValue`,`Inclusive minimum decoded Smi value`,{default:1}).number(`maxValue`,`Inclusive maximum decoded Smi value`,{default:1e6}).boolean(`includeZero`,`Include decoded-to-zero hits`,{default:!1}).boolean(`includeNegative`,`Include decoded-to-negative hits`,{default:!1}).number(`maxResults`,`Cap on returned hits (truncates with truncated=true)`).number(`maxChunkBytes`,`Streaming chunk size in bytes`).object(`scanWindow`,{start:{type:`number`,description:`Inclusive start byte offset`},end:{type:`number`,description:`Exclusive end byte offset`}},`Restrict scanning to a byte range`).required(`filePath`).query()),e(`dart_symbolize`,e=>e.desc(`Resolve obfuscated Dart identifiers using a developer-supplied Flutter --save-obfuscation-map JSON (flat, pairs, or object shape).`).string(`obfuscationMapFile`,"Absolute path to the obfuscation-map.json emitted by `flutter build ... --extra-gen-snapshot-options=--save-obfuscation-map=FILE`").array(`obfuscatedNames`,{type:`string`,description:`An obfuscated (or original, in reverse mode) identifier`},`List of identifiers to resolve against the map`).enum(`format`,[`auto`,`flat`,`pairs`,`object`],`Force a specific parser; auto sniffs the JSON shape`,{default:`auto`}).enum(`mode`,[`forward`,`reverse`],`Lookup direction (forward: obfuscated→original, reverse: original→obfuscated)`,{default:`forward`}).number(`maxMapBytes`,`Cap on map file size in bytes`,{default:16*1024*1024}).number(`maxLookups`,`Cap on number of lookups attempted (extras go to unresolved)`).required(`obfuscationMapFile`,`obfuscatedNames`).query()),e(`flutter_packages_detect`,e=>e.desc("Detect third-party Dart `package:` refs in a Flutter libapp.so, aggregated and SDK-stdlib-filtered.").string(`filePath`,`Absolute path to the libapp.so (or arbitrary binary) to scan`).boolean(`includeFlutterStdlib`,`Keep Flutter SDK packages in the result`,{default:!1}).boolean(`includeFiles`,"Emit the list of `package:foo/...` files per package",{default:!0}).boolean(`includeOffsets`,`Emit aggregated byte offsets per package`,{default:!1}).integer(`maxFilesPerPackage`,`Per-package file cap (excess marks filesTruncated)`,{minimum:1}).integer(`maxPackages`,`Global package cap (excess marks truncated:true)`,{minimum:1}).array(`extraStdlibPackages`,{type:`string`,minLength:1,maxLength:128},`Additional package names to treat as stdlib (filtered when includeFlutterStdlib=false)`).required(`filePath`).query()),e(`dart_snapshot_header_parse`,e=>e.desc(`Parse the Dart isolate snapshot header in a libapp.so: magic, kind, 32-byte hash, features, target arch. Read-only.`).string(`filePath`,`Absolute path to the libapp.so to parse`).number(`maxScanBytes`,`Upper bound on the byte-scan fallback (defaults to env)`,{minimum:0}).required(`filePath`).query()),e(`dart_version_fingerprint`,e=>e.desc(`Identify Flutter/Dart SDK release from a libapp.so by combining header parse with a built-in (and optionally user-supplied) hash table.`).string(`filePath`,`Absolute path to the libapp.so to fingerprint`).boolean(`includeFeatures`,`Include the raw features array in the response`,{default:!0}).string(`customTablePath`,`Optional path to a JSON file extending the built-in hash table (user wins on collision)`).required(`filePath`).query()),e(`dart_object_pool_dump`,e=>e.desc(`Read-only static dump of the Dart isolate ObjectPool in a libapp.so: classify each slot as smi/mint/double/string/classRef/functionRef/pool/null/unknown.`).string(`filePath`,`Absolute path to the libapp.so to dump`).number(`maxSlots`,`Upper bound on emitted slots (defaults to env)`,{minimum:1}).number(`previewBytes`,`String slot preview byte cap (defaults to env)`,{minimum:0}).string(`grammar`,`Force a cluster grammar by sdkFamily (e.g. "2.10", "2.17", "3.0+"); overrides auto-pick`).object(`fingerprint`,{flutterVersion:{type:`string`},dartSdkRev:{type:`string`},targetArch:{type:`string`}},`Optional pre-supplied snapshot fingerprint to skip internal lookup`).required(`filePath`).query())];export{t};
1
+ import{t as e}from"./tool-builder-CpLh-UQd.mjs";const t=[e(`dart_strings_extract`,e=>e.desc(`Stream-extract ASCII/UTF-16LE strings from a Dart AOT libapp.so and classify them (urls, paths, classNames, packageRefs, cryptoKeywords, plus customRules). ReDoS-guarded.`).string(`filePath`,`Absolute path to the libapp.so (or arbitrary binary) to extract from`).number(`minLength`,`Minimum string length to emit`,{default:4,minimum:2,maximum:64}).boolean(`includeRaw`,"Include unclassified strings under the `raw` bucket",{default:!1}).boolean(`includeOffsets`,`Include byte offsets[] for each extracted string`,{default:!0}).enum(`encoding`,[`ascii`,`utf16le`,`both`],`Which encodings to scan`,{default:`both`}).number(`maxChunkBytes`,`Streaming chunk size in bytes`).number(`maxOffsetsPerString`,`Cap on offsets recorded per string (excess sets truncated)`,{default:1e3}).enum(`ruleMode`,[`append`,`prepend`,`replace`],`How customRules interact with DEFAULT_RULES`,{default:`append`}).number(`regexTimeoutMs`,`Per-rule .test() wall-clock budget for the ReDoS guard`).number(`scanStride`,`Only emit hits whose offset is divisible by stride (e.g. 4 for pointer-aligned scans)`).object(`scanWindow`,{start:{type:`number`,description:`Inclusive start byte offset`},end:{type:`number`,description:`Exclusive end byte offset`}},`Restrict scanning to a byte range (skip ELF headers, focus on a section, etc.)`).array(`customRules`,{type:`object`,properties:{category:{type:`string`,description:`Category bucket name for matched strings`},pattern:{type:`string`,description:`Regex source (anchored as needed)`},flags:{type:`string`,description:`Regex flags (must be in DART_ALLOWED_REGEX_FLAGS)`},exclude:{type:`string`,description:`Optional exclude regex applied before category match`},excludeFlags:{type:`string`,description:`Flags for the exclude regex`},confidence:{type:`number`,description:`Confidence weight in [0,1] carried onto each matching hit`},enableWhenFileNameMatches:{type:`string`,description:`Rule only fires when source basename matches this regex`},enableWhenFileNameFlags:{type:`string`,description:`Flags for enableWhenFileNameMatches`}},required:[`category`,`pattern`]},`Custom classification rules with safe regex compilation (ReDoS-guarded)`).required(`filePath`).query()),e(`dart_smi_scan`,e=>e.desc(`Recover Dart Small Integer (Smi) constants from a libapp.so by reading aligned little-endian words and stripping the heap-pointer tag bit.`).string(`filePath`,`Absolute path to the libapp.so (or arbitrary binary) to scan`).enum(`width`,[`4`,`8`],`Word width in bytes (4 for ARM32, 8 for ARM64)`,{default:`8`}).number(`stride`,"Bytes between consecutive scan positions; defaults to `width`").number(`minValue`,`Inclusive minimum decoded Smi value`,{default:1}).number(`maxValue`,`Inclusive maximum decoded Smi value`,{default:1e6}).boolean(`includeZero`,`Include decoded-to-zero hits`,{default:!1}).boolean(`includeNegative`,`Include decoded-to-negative hits`,{default:!1}).number(`maxResults`,`Cap on returned hits (truncates with truncated=true)`).number(`maxChunkBytes`,`Streaming chunk size in bytes`).object(`scanWindow`,{start:{type:`number`,description:`Inclusive start byte offset`},end:{type:`number`,description:`Exclusive end byte offset`}},`Restrict scanning to a byte range`).required(`filePath`).query()),e(`dart_symbolize`,e=>e.desc(`Resolve obfuscated Dart identifiers using a developer-supplied Flutter --save-obfuscation-map JSON (flat, pairs, or object shape).`).string(`obfuscationMapFile`,"Absolute path to the obfuscation-map.json emitted by `flutter build ... --extra-gen-snapshot-options=--save-obfuscation-map=FILE`").array(`obfuscatedNames`,{type:`string`,description:`An obfuscated (or original, in reverse mode) identifier`},`List of identifiers to resolve against the map`).enum(`format`,[`auto`,`flat`,`pairs`,`object`],`Force a specific parser; auto sniffs the JSON shape`,{default:`auto`}).enum(`mode`,[`forward`,`reverse`],`Lookup direction (forward: obfuscated→original, reverse: original→obfuscated)`,{default:`forward`}).number(`maxMapBytes`,`Cap on map file size in bytes`,{default:16*1024*1024}).number(`maxLookups`,`Cap on number of lookups attempted (extras go to unresolved)`).required(`obfuscationMapFile`,`obfuscatedNames`).query()),e(`flutter_packages_detect`,e=>e.desc("Detect third-party Dart `package:` refs in a Flutter libapp.so, aggregated and SDK-stdlib-filtered.").string(`filePath`,`Absolute path to the libapp.so (or arbitrary binary) to scan`).boolean(`includeFlutterStdlib`,`Keep Flutter SDK packages in the result`,{default:!1}).boolean(`includeFiles`,"Emit the list of `package:foo/...` files per package",{default:!0}).boolean(`includeOffsets`,`Emit aggregated byte offsets per package`,{default:!1}).integer(`maxFilesPerPackage`,`Per-package file cap (excess marks filesTruncated)`,{minimum:1}).integer(`maxPackages`,`Global package cap (excess marks truncated:true)`,{minimum:1}).array(`extraStdlibPackages`,{type:`string`,minLength:1,maxLength:128},`Additional package names to treat as stdlib (filtered when includeFlutterStdlib=false)`).required(`filePath`).query()),e(`dart_snapshot_header_parse`,e=>e.desc(`Parse the Dart isolate snapshot header in a libapp.so: magic, kind, 32-byte hash, features, target arch. Read-only.`).string(`filePath`,`Absolute path to the libapp.so to parse`).number(`maxScanBytes`,`Upper bound on the byte-scan fallback (defaults to env)`,{minimum:0}).required(`filePath`).query()),e(`dart_version_fingerprint`,e=>e.desc(`Identify Flutter/Dart SDK release from a libapp.so by combining header parse with a built-in (and optionally user-supplied) hash table.`).string(`filePath`,`Absolute path to the libapp.so to fingerprint`).boolean(`includeFeatures`,`Include the raw features array in the response`,{default:!0}).string(`customTablePath`,`Optional path to a JSON file extending the built-in hash table (user wins on collision)`).required(`filePath`).query()),e(`dart_object_pool_dump`,e=>e.desc(`Read-only static dump of the Dart isolate ObjectPool in a libapp.so: classify each slot as smi/mint/double/string/classRef/functionRef/pool/null/unknown.`).string(`filePath`,`Absolute path to the libapp.so to dump`).number(`maxSlots`,`Upper bound on emitted slots (defaults to env)`,{minimum:1}).number(`previewBytes`,`String slot preview byte cap (defaults to env)`,{minimum:0}).string(`grammar`,`Force a cluster grammar by sdkFamily (e.g. "2.10", "2.17", "3.0+"); overrides auto-pick`).object(`fingerprint`,{flutterVersion:{type:`string`},dartSdkRev:{type:`string`},targetArch:{type:`string`}},`Optional pre-supplied snapshot fingerprint to skip internal lookup`).required(`filePath`).query())];export{t};
@@ -1 +1 @@
1
- import{t as e}from"./tool-builder-qif8M9-K.mjs";const t=[`constant_fold`,`string_decrypt`,`dead_code_remove`,`control_flow_flatten`,`rename_vars`],n=[e(`ast_transform_preview`,e=>e.desc(`Preview lightweight AST-like transforms (string/regex based) and return before/after diff.`).string(`code`,`Source code to transform.`).array(`transforms`,{type:`string`,enum:t},`Ordered transform list.`).boolean(`preview`,`Whether to generate line diff output.`,{default:!0}).required(`code`,`transforms`).query()),e(`ast_transform_chain`,e=>e.desc(`Create and store an in-memory transform chain.`).string(`name`,`Chain name.`).array(`transforms`,{type:`string`,enum:t},`Ordered transform list.`).string(`description`,`Optional chain description.`).required(`name`,`transforms`)),e(`ast_transform_apply`,e=>e.desc(`Apply transforms to input code or a live page scriptId.`).string(`scriptId`,`Target script ID from page debugger context.`).string(`code`,`Direct source code input.`).string(`chainName`,`Use a saved transform chain by name.`).array(`transforms`,{type:`string`,enum:t},`Direct transform list (used when chainName is not provided).`)),e(`crypto_extract_standalone`,e=>e.desc(`Extract crypto/sign/encrypt function from current page and generate standalone runnable code.`).string(`targetFunction`,`Target function name/path, e.g. "window.sign".`).boolean(`includePolyfills`,`Include minimal runtime polyfills.`,{default:!0}).required(`targetFunction`)),e(`crypto_test_harness`,e=>e.desc(`Run extracted crypto code in worker_threads + vm sandbox and return deterministic test results.`).string(`code`,`Standalone function code.`).string(`functionName`,`Exported function name to execute.`).array(`testInputs`,{type:`string`},`Input list for test execution.`).required(`code`,`functionName`,`testInputs`).query()),e(`crypto_compare`,e=>e.desc(`Compare two crypto implementations against identical test vectors.`).string(`code1`,`Implementation A code.`).string(`code2`,`Implementation B code.`).string(`functionName`,`Function name shared by both implementations.`).array(`testInputs`,{type:`string`},`Input list for comparison.`).required(`code1`,`code2`,`functionName`,`testInputs`).query())];export{n as t};
1
+ import{t as e}from"./tool-builder-CpLh-UQd.mjs";const t=[`constant_fold`,`string_decrypt`,`dead_code_remove`,`control_flow_flatten`,`rename_vars`],n=[e(`ast_transform_preview`,e=>e.desc(`Preview lightweight AST-like transforms (string/regex based) and return before/after diff.`).string(`code`,`Source code to transform.`).array(`transforms`,{type:`string`,enum:t},`Ordered transform list.`).boolean(`preview`,`Whether to generate line diff output.`,{default:!0}).required(`code`,`transforms`).query()),e(`ast_transform_chain`,e=>e.desc(`Create and store an in-memory transform chain.`).string(`name`,`Chain name.`).array(`transforms`,{type:`string`,enum:t},`Ordered transform list.`).string(`description`,`Optional chain description.`).required(`name`,`transforms`)),e(`ast_transform_apply`,e=>e.desc(`Apply transforms to input code or a live page scriptId.`).string(`scriptId`,`Target script ID from page debugger context.`).string(`code`,`Direct source code input.`).string(`chainName`,`Use a saved transform chain by name.`).array(`transforms`,{type:`string`,enum:t},`Direct transform list (used when chainName is not provided).`)),e(`crypto_extract_standalone`,e=>e.desc(`Extract crypto/sign/encrypt function from current page and generate standalone runnable code.`).string(`targetFunction`,`Target function name/path, e.g. "window.sign".`).boolean(`includePolyfills`,`Include minimal runtime polyfills.`,{default:!0}).required(`targetFunction`)),e(`crypto_test_harness`,e=>e.desc(`Run extracted crypto code in worker_threads + vm sandbox and return deterministic test results.`).string(`code`,`Standalone function code.`).string(`functionName`,`Exported function name to execute.`).array(`testInputs`,{type:`string`},`Input list for test execution.`).required(`code`,`functionName`,`testInputs`).query()),e(`crypto_compare`,e=>e.desc(`Compare two crypto implementations against identical test vectors.`).string(`code1`,`Implementation A code.`).string(`code2`,`Implementation B code.`).string(`functionName`,`Function name shared by both implementations.`).array(`testInputs`,{type:`string`},`Input list for comparison.`).required(`code1`,`code2`,`functionName`,`testInputs`).query())];export{n as t};
@@ -0,0 +1 @@
1
+ import{g as e}from"./ensure-browser-core-JHwDo5ql.mjs";import{t}from"./tool-builder-CpLh-UQd.mjs";const n=[t(`js_heap_search`,e=>e.desc(`Search JS heap for strings matching a pattern.`).string(`pattern`,`Pattern to search`).number(`maxResults`,`Max matches`,{default:50}).boolean(`caseSensitive`,`Case sensitive`,{default:!1}).required(`pattern`).query()),t(`tab_workflow`,e=>e.desc(`Cross-tab coordination.`).enum(`action`,[`list`,`alias_bind`,`alias_open`,`navigate`,`wait_for`,`context_set`,`context_get`,`transfer`,`clear`],`Action`).string(`alias`,`Tab alias`).string(`fromAlias`,`Source tab alias`).number(`index`,`Tab index (0-based)`).string(`url`,`URL`).string(`selector`,`CSS selector to wait for`).string(`waitForText`,`Text to wait for`).string(`key`,`Context key`).string(`value`,`Context value`).string(`expression`,`JS expression for transfer`).number(`timeoutMs`,`Timeout ms`,{default:1e4}).requiredOpenWorld(`action`))],r=[t(`page_navigate`,t=>t.desc(`Navigate the page to a URL with wait and network options.`).string(`url`,`Target URL`).enum(`waitUntil`,e,`When to consider navigation succeeded`,{default:`networkidle`}).number(`timeout`,`Navigation timeout in ms`,{default:3e4,minimum:1e3,maximum:12e4}).boolean(`enableNetworkMonitoring`,`Enable network monitoring before navigation`,{default:!1}).required(`url`).idempotent().openWorld()),t(`page_reload`,e=>e.desc(`Reload the page with optional cache bypass.`).idempotent().openWorld()),t(`page_back`,e=>e.desc(`Navigate back in browser history.`).openWorld()),t(`page_forward`,e=>e.desc(`Navigate forward in browser history.`).openWorld()),t(`page_list_frames`,e=>e.desc(`List page frames for frame targeting.`).query()),t(`page_click`,e=>e.desc(`Click a page element by CSS selector.`).string(`selector`,`CSS selector`).enum(`button`,[`left`,`right`,`middle`],`Mouse button`,{default:`left`}).number(`clickCount`,`Number of clicks`,{default:1,minimum:1,maximum:10}).number(`delay`,`Delay between mousedown and mouseup in ms`,{minimum:0,maximum:1e4}).number(`timeout`,`Click timeout in ms`,{default:1e4,minimum:1e3,maximum:12e4}).string(`frameUrl`,`iframe URL substring`).string(`frameSelector`,`iframe CSS selector`).requiredOpenWorld(`selector`)),t(`page_type`,e=>e.desc(`Type text into an element.`).string(`selector`,`CSS selector`).string(`text`,`Text to type`).number(`delay`,`Delay between key presses in ms`,{minimum:0,maximum:1e3}).string(`frameUrl`,`iframe URL substring`).string(`frameSelector`,`iframe CSS selector`).requiredOpenWorld(`selector`,`text`)),t(`page_upload_files`,e=>e.desc(`Upload one or more local files into an <input type="file"> element.`).string(`selector`,`CSS selector for the file input`).array(`paths`,{type:`string`},`Project-relative file paths to upload`).string(`frameUrl`,`iframe URL substring`).string(`frameSelector`,`iframe CSS selector`).required(`selector`,`paths`).openWorld()),t(`page_select`,e=>e.desc(`Select option(s) in a <select> element.`).string(`selector`,`CSS selector`).array(`values`,{type:`string`},`Values to select`).string(`frameUrl`,`iframe URL substring`).string(`frameSelector`,`iframe CSS selector`).required(`selector`,`values`).idempotent().openWorld()),t(`page_hover`,e=>e.desc(`Hover over an element by CSS selector.`).string(`selector`,`CSS selector`).string(`frameUrl`,`iframe URL substring`).string(`frameSelector`,`iframe CSS selector`).required(`selector`).idempotent().openWorld()),t(`page_scroll`,e=>e.desc(`Scroll to absolute or relative coordinates.`).number(`x`,`Horizontal position`,{default:0}).number(`y`,`Vertical position`,{default:0}).idempotent()),t(`page_wait_for_selector`,e=>e.desc(`Wait for an element to appear.`).string(`selector`,`CSS selector`).number(`timeout`,`Timeout in ms`,{default:3e4,minimum:1e3,maximum:12e4}).required(`selector`).query()),t(`page_evaluate`,e=>e.desc(`Execute JavaScript in page context.`).string(`code`,`JavaScript code`).string(`script`,`Alias of code`).string(`expression`,`Alias of code`).boolean(`autoSummarize`,`Auto-summarize large results`,{default:!0}).number(`maxSize`,`Max result size in bytes before summarizing`,{default:51200,minimum:1024,maximum:10485760}).array(`fieldFilter`,{type:`string`},`Field names to strip from result (recursive)`).boolean(`stripBase64`,`Strip base64 strings from result`,{default:!1}).string(`frameUrl`,`iframe URL substring`).string(`frameSelector`,`iframe CSS selector`).openWorld()),t(`page_screenshot`,e=>e.desc(`Capture a page or element screenshot.`).prop(`selector`,{oneOf:[{type:`string`,description:`CSS selector`},{type:`array`,items:{type:`string`},description:`Multiple CSS selectors`}],description:`Element selector(s). Omit for full page viewport.`}).object(`clip`,{x:{type:`number`,description:`Left offset`},y:{type:`number`,description:`Top offset`},width:{type:`number`,description:`Width`},height:{type:`number`,description:`Height`}},`Pixel region to capture`,{required:[`x`,`y`,`width`,`height`]}).string(`path`,`File path to save screenshot`).enum(`type`,[`png`,`jpeg`],`Image format`,{default:`png`}).number(`quality`,`Image quality 0-100 (jpeg only)`,{minimum:1,maximum:100}).boolean(`fullPage`,`Capture full scrollable page`,{default:!1}).query()),t(`get_all_scripts`,e=>e.desc(`List all scripts loaded by the page with optional source.`).boolean(`includeSource`,`Include source code`,{default:!1}).query()),t(`get_script_source`,e=>e.desc(`Retrieve source code of a script by ID or URL pattern.`).string(`scriptId`,`Script ID`).string(`url`,`Script URL (supports wildcards)`).boolean(`preview`,`Preview only (first N lines + metadata)`,{default:!1}).number(`maxLines`,`Max lines in preview`,{default:100,minimum:1,maximum:1e4}).number(`startLine`,`Start line (1-based)`,{minimum:1}).number(`endLine`,`End line (1-based)`,{minimum:1}).query())],i=[t(`console_monitor`,e=>e.desc(`Toggle console log capture (log, warn, error, info, debug).`).enum(`action`,[`enable`,`disable`],`Action`).required(`action`).idempotent()),t(`console_get_logs`,e=>e.desc(`Retrieve captured console logs with type and time filters.`).enum(`type`,[`log`,`warn`,`error`,`info`,`debug`],`Log type filter`).number(`limit`,`Max logs`).number(`since`,`Timestamp filter`).query()),t(`console_execute`,e=>e.desc(`Evaluate a JS expression in the browser console context.`).string(`expression`,`JavaScript expression`).number(`maxSize`,`Max result size in bytes before offloading (default 50KB → detailId ref)`,{default:51200,minimum:1024,maximum:104857600}).boolean(`stripBase64`,`Strip base64 strings from result`,{default:!1}).requiredOpenWorld(`expression`)),t(`page_inject_script`,e=>e.desc(`Inject JavaScript to run on every page load.`).string(`script`,`JavaScript code`).requiredOpenWorld(`script`)),t(`page_cookies`,e=>e.desc(`Manage page cookies; clear requires matching expectedCount.`).enum(`action`,[`get`,`set`,`clear`],`Action`).number(`expectedCount`,`Required for clear: must match current count`).array(`cookies`,{type:`object`,properties:{name:{type:`string`},value:{type:`string`},domain:{type:`string`},path:{type:`string`},expires:{type:`number`},httpOnly:{type:`boolean`},secure:{type:`boolean`},sameSite:{type:`string`,enum:[`Strict`,`Lax`,`None`]}},required:[`name`,`value`]},`Cookies (action=set)`).destructive().required(`action`)),t(`page_set_viewport`,e=>e.desc(`Set the browser viewport dimensions.`).number(`width`,`Width`).number(`height`,`Height`).required(`width`,`height`).idempotent()),t(`page_emulate_device`,e=>e.desc(`Emulate a mobile device profile.`).string(`device`,`Device name`).required(`device`).idempotent()),t(`page_local_storage`,e=>e.desc(`Read or write localStorage entries for the current origin.`).enum(`action`,[`get`,`set`],`Action`).string(`key`,`Key`).string(`value`,`Value`).required(`action`)),t(`page_press_key`,e=>e.desc(`Simulate a key press by name.`).string(`key`,`Key name`).requiredOpenWorld(`key`))],a=[t(`get_detailed_data`,e=>e.desc(`Retrieve large data by detailId.`).string(`detailId`,`Detail ID from previous response`).string(`path`,`Path to specific nested data`).required(`detailId`).query()),t(`get_offloaded_data`,e=>e.desc('Retrieve the original bytes of a field that was offloaded to disk (see the `_offload.path` in a placeholder). Returns base64 by default for binary blobs (e.g. decoded data: URIs); use encoding="utf8" for text.').string(`path`,`Project-relative path from an _offload placeholder (under artifacts/offloaded/)`).enum(`encoding`,[`base64`,`utf8`],`Output encoding`,{default:`base64`}).required(`path`).query()),t(`browser_launch`,e=>e.desc(`Launch Chromium/Camoufox or connect to a running browser.`).enum(`driver`,[`chrome`,`camoufox`],`Browser driver`,{default:`chrome`}).boolean(`headless`,`Run headless`,{default:!1}).enum(`os`,[`windows`,`macos`,`linux`],`OS fingerprint (camoufox)`,{default:`windows`}).enum(`mode`,[`launch`,`connect`],`Launch or connect`,{default:`launch`}).string(`browserURL`,`Browser debug endpoint URL`).string(`wsEndpoint`,`WebSocket endpoint`).boolean(`autoConnect`,`Auto-detect local Chrome debug WebSocket`,{default:!1}).enum(`channel`,[`stable`,`beta`,`dev`,`canary`],`Chrome channel`,{default:`stable`}).string(`userDataDir`,`Chrome profile directory`).array(`args`,{type:`string`},`Extra Chrome launch args`).boolean(`enableV8NativesSyntax`,`Enable V8 native syntax for launched Chrome`,{default:!0}).boolean(`geoip`,`Auto-resolve GeoIP (camoufox)`,{default:!1}).boolean(`humanize`,`Humanize cursor (camoufox)`,{default:!1}).string(`proxy`,`Proxy URL (camoufox)`).boolean(`blockImages`,`Block images (camoufox)`,{default:!1}).boolean(`blockWebrtc`,`Block WebRTC (camoufox)`,{default:!1}).boolean(`blockWebgl`,`Block WebGL (camoufox)`,{default:!1}).string(`locale`,`Firefox locale (camoufox)`).array(`addons`,{type:`string`},`Firefox addons (camoufox)`).array(`fonts`,{type:`string`},`Custom fonts (camoufox)`).array(`excludeAddons`,{type:`string`},`Addons to exclude (camoufox)`).boolean(`customFontsOnly`,`Only use custom fonts (camoufox)`,{default:!1}).object(`screen`,{width:{type:`number`},height:{type:`number`}},`Screen resolution (camoufox)`).object(`window`,{width:{type:`number`},height:{type:`number`}},`Window size (camoufox)`).prop(`fingerprint`,{type:`object`,description:`Pre-generated fingerprint (camoufox)`,additionalProperties:!0}).prop(`webglConfig`,{type:`object`,description:`WebGL config (camoufox)`,additionalProperties:!0}).prop(`firefoxUserPrefs`,{type:`object`,description:`Firefox about:config overrides (camoufox)`,additionalProperties:!0}).boolean(`mainWorldEval`,`Main world eval (camoufox)`,{default:!0}).openWorld()),t(`camoufox_server`,e=>e.desc(`Start, close, or check status of a Camoufox anti-detect server.`).enum(`action`,[`launch`,`close`,`status`],`Action`).number(`port`,`Listen port (launch)`).string(`ws_path`,`WebSocket path (launch)`).enum(`os`,[`windows`,`macos`,`linux`],`OS fingerprint (launch)`,{default:`windows`}).boolean(`headless`,`Headless (launch)`,{default:!0}).boolean(`geoip`,`GeoIP (launch)`,{default:!1}).boolean(`humanize`,`Humanize cursor (launch)`,{default:!1}).string(`proxy`,`Proxy URL (launch)`).boolean(`blockImages`,`Block images (launch)`,{default:!1}).boolean(`blockWebrtc`,`Block WebRTC (launch)`,{default:!1}).boolean(`blockWebgl`,`Block WebGL (launch)`,{default:!1}).string(`locale`,`Firefox locale (launch)`).array(`addons`,{type:`string`},`Addons (launch)`).array(`fonts`,{type:`string`},`Fonts (launch)`).array(`excludeAddons`,{type:`string`},`Excluded addons (launch)`).boolean(`customFontsOnly`,`Only custom fonts (launch)`,{default:!1}).object(`screen`,{width:{type:`number`},height:{type:`number`}},`Screen resolution (launch)`).object(`window`,{width:{type:`number`},height:{type:`number`}},`Window size (launch)`).prop(`fingerprint`,{type:`object`,description:`Pre-generated fingerprint (launch)`,additionalProperties:!0}).prop(`webglConfig`,{type:`object`,description:`WebGL config (launch)`,additionalProperties:!0}).prop(`firefoxUserPrefs`,{type:`object`,description:`Firefox about:config overrides (launch)`,additionalProperties:!0}).boolean(`mainWorldEval`,`Main world eval (launch)`,{default:!0}).boolean(`enableCache`,`Enable cache (launch)`,{default:!1}).required(`action`).destructive()),t(`browser_attach`,e=>e.desc(`Connect to a running browser.`).string(`browserURL`,`Debug endpoint URL`).string(`wsEndpoint`,`WebSocket URL`).boolean(`autoConnect`,`Auto-detect local Chrome debug WebSocket`,{default:!1}).enum(`channel`,[`stable`,`beta`,`dev`,`canary`],`Chrome channel`,{default:`stable`}).string(`userDataDir`,`Chrome profile directory`).number(`pageIndex`,`Tab index to activate`,{default:0}).openWorld()),t(`browser_list_cdp_targets`,e=>e.desc(`List CDP targets with optional type/URL/title filters.`).string(`browserURL`,`Browser URL`).string(`wsEndpoint`,`WebSocket endpoint`).boolean(`autoConnect`,`Auto-detect local Chrome debug WebSocket`,{default:!1}).enum(`channel`,[`stable`,`beta`,`dev`,`canary`],`Chrome channel`,{default:`stable`}).string(`userDataDir`,`Chrome profile directory`).string(`type`,`Target type filter`).array(`types`,{type:`string`},`Target types to include`).string(`targetId`,`Exact targetId filter`).string(`urlPattern`,`URL substring filter`).string(`titlePattern`,`Title substring filter`).boolean(`attachedOnly`,`Only attached targets`,{default:!1}).boolean(`discoverOOPIF`,`Auto-discover cross-origin iframes`,{default:!0}).query().openWorld()),t(`browser_attach_cdp_target`,e=>e.desc(`Attach to a CDP target by targetId.`).string(`targetId`,`Target ID`).required(`targetId`)),t(`browser_detach_cdp_target`,e=>e.desc(`Detach the current CDP target session.`).destructive()),t(`browser_evaluate_cdp_target`,e=>e.desc(`Evaluate JS in the attached CDP target.`).string(`code`,`JavaScript code`).string(`script`,`Alias of code`).string(`expression`,`Alias of code`).boolean(`returnByValue`,`Return by value`,{default:!0}).boolean(`awaitPromise`,`Await promises`,{default:!0}).boolean(`autoSummarize`,`Summarize large results`,{default:!0}).number(`maxSize`,`Max size before summarizing`,{default:51200}).array(`fieldFilter`,{type:`string`},`Field names to strip`).boolean(`stripBase64`,`Strip base64 payloads`,{default:!1}).openWorld()),t(`browser_close`,e=>e.desc(`Close the browser and release all resources.`).destructive()),t(`browser_status`,e=>e.desc(`Report browser status: running, tab count, version.`).query())],o=[t(`captcha_detect`,e=>e.desc(`Detect CAPTCHAs on the current page.`).query()),t(`captcha_wait`,e=>e.desc(`Block until the user manually solves the CAPTCHA.`).number(`timeout`,`Timeout in ms`,{default:3e5}).query().openWorld()),t(`captcha_config`,e=>e.desc(`Configure CAPTCHA detection sensitivity and solver backend.`).boolean(`autoDetectCaptcha`,`Auto-detect after navigation`).boolean(`autoSwitchHeadless`,`Switch to headed on detection`).number(`captchaTimeout`,`Wait timeout in ms`).idempotent()),t(`stealth_inject`,e=>e.desc(`Inject anti-detection scripts to reduce bot fingerprint exposure.`).idempotent()),t(`stealth_set_user_agent`,e=>e.desc(`Set User-Agent and fingerprint.`).enum(`platform`,[`windows`,`mac`,`linux`],`Platform`,{default:`windows`}).idempotent()),t(`stealth_configure_jitter`,e=>e.desc(`Configure CDP timing jitter.`).boolean(`enabled`,`Enable`,{default:!0}).number(`minDelayMs`,`Min delay ms`,{default:20}).number(`maxDelayMs`,`Max delay ms`,{default:80}).boolean(`burstMode`,`Skip jitter for time-critical ops`,{default:!1}).idempotent()),t(`stealth_generate_fingerprint`,e=>e.desc(`Generate a browser fingerprint.`).enum(`os`,[`windows`,`macos`,`linux`],`Target OS`).enum(`browser`,[`chrome`,`firefox`],`Target browser`,{default:`chrome`}).string(`locale`,`Locale`,{default:`en-US`})),t(`stealth_verify`,e=>e.desc(`Run anti-detection checks.`).query()),t(`browser_list_tabs`,e=>e.desc(`List open browser tabs with URLs and titles.`).string(`browserURL`,`Browser URL`).string(`wsEndpoint`,`WebSocket endpoint`).boolean(`autoConnect`,`Auto-detect Chrome debug WebSocket`,{default:!1}).enum(`channel`,[`stable`,`beta`,`dev`,`canary`],`Chrome channel`,{default:`stable`}).string(`userDataDir`,`Chrome profile directory`).query().openWorld()),t(`browser_select_tab`,e=>e.desc(`Switch active tab by index, URL pattern, or title pattern.`).number(`index`,`Tab index`).string(`urlPattern`,`URL substring match`).string(`titlePattern`,`Title substring match`).idempotent()),t(`framework_state_extract`,e=>e.desc(`Extract React/Vue/Svelte/Solid component state and meta-framework info.`).enum(`framework`,[`auto`,`react`,`vue2`,`vue3`,`svelte`,`solid`,`preact`],`Framework`,{default:`auto`}).string(`selector`,`Root element CSS selector`).number(`maxDepth`,`Max traversal depth`,{default:5}).query().openWorld()),t(`indexeddb_dump`,e=>e.desc(`Export all IndexedDB databases and records for offline analysis.`).string(`database`,`Database name`).string(`store`,`Object store name`).number(`maxRecords`,`Max records per store`,{default:100}).query()),t(`camoufox_geolocation`,e=>e.desc(`Get geolocation for a locale.`).string(`locale`,`Locale string`).string(`proxy`,`Proxy URL for IP lookup`).required(`locale`).query())],s=[t(`browser_codegen_start`,e=>e.desc(`Start recording browser actions as replayable steps.`).idempotent()),t(`browser_codegen_stop`,e=>e.desc(`Stop recording browser actions and return cleaned replay steps.`).query()),t(`captcha_solver_capabilities`,e=>e.desc(`Report CAPTCHA solving mode availability.`).query()),t(`human_mouse`,e=>e.desc(`Move mouse along a Bezier curve with jitter.`).number(`fromX`,`Start X`).number(`fromY`,`Start Y`).number(`toX`,`Target X`).number(`toY`,`Target Y`).string(`selector`,`CSS selector (alternative to toX/toY)`).string(`frameUrl`,`iframe URL substring`).string(`frameSelector`,`iframe CSS selector`).number(`durationMs`,`Duration ms`,{default:600}).number(`steps`,`Intermediate points`,{default:24}).number(`jitterPx`,`Max jitter px`,{default:1.5}).enum(`curve`,[`ease`,`linear`,`ease-in`,`ease-out`],`Speed curve`,{default:`ease`}).boolean(`click`,`Click at destination`,{default:!1}).openWorld()),t(`human_scroll`,e=>e.desc(`Scroll with randomized speed and pauses to mimic human behavior.`).number(`distance`,`Distance px`,{default:500}).enum(`direction`,[`up`,`down`,`left`,`right`],`Direction`,{default:`down`}).number(`durationMs`,`Duration ms`,{default:1500}).number(`segments`,`Segments`,{default:8}).number(`pauseMs`,`Pause between segments ms`,{default:80}).number(`jitter`,`Variation factor 0-1`,{default:.3}).string(`selector`,`Scrollable container selector`).openWorld()),t(`human_typing`,e=>e.desc(`Type text with human-like speed and occasional typos.`).string(`selector`,`CSS selector`).string(`text`,`Text to type`).string(`frameUrl`,`iframe URL substring`).string(`frameSelector`,`iframe CSS selector`).number(`wpm`,`Words per minute`,{default:90}).number(`errorRate`,`Typo probability per char`,{default:.02}).number(`correctDelayMs`,`Delay before correcting typo ms`,{default:200}).boolean(`clearFirst`,`Clear existing value first`,{default:!1}).requiredOpenWorld(`selector`,`text`)),t(`captcha_vision_solve`,e=>e.desc(`Solve a CAPTCHA with manual flow or a configured external service.`).enum(`mode`,[`external_service`,`manual`],`Solver mode`).string(`provider`,`External solver provider`).string(`apiKey`,`API key`).enum(`challengeType`,[`image`,`widget`,`browser_check`],`Challenge type`,{default:`image`}).string(`typeHint`,`Legacy alias for challengeType`).enum(`taskKind`,[`image`,`recaptcha_v2`,`recaptcha_v3`,`hcaptcha`,`funcaptcha`,`turnstile`],`Explicit solver task kind`).string(`siteKey`,`Widget site key`).string(`pageUrl`,`Page URL`).string(`imageBase64`,`Explicit base64 image payload`).number(`timeoutMs`,`Timeout ms`,{default:18e4}).number(`maxRetries`,`Max retries`,{default:2}).openWorld()),t(`widget_challenge_solve`,e=>e.desc(`Solve a widget challenge with hook, manual, or configured external service.`).string(`siteKey`,`Widget site key`).string(`pageUrl`,`Page URL`).enum(`mode`,[`external_service`,`hook`,`manual`],`Solving mode`).string(`provider`,`External solver provider`).string(`apiKey`,`API key`).number(`timeoutMs`,`Timeout ms`,{default:12e4}).boolean(`injectToken`,`Auto-inject token`,{default:!0}).string(`responseSelector`,`Explicit selector to receive the solved token`).string(`callbackName`,`Explicit global callback name for hook or injection flows`).openWorld())],c=[t(`browser_jsdom_parse`,e=>e.desc(`Parse HTML into an in-memory JSDOM session. No browser needed.`).string(`html`,`HTML source`).string(`url`,`Document URL`).string(`contentType`,`Content-Type`).enum(`runScripts`,[`none`,`outside-only`,`dangerously`],`Script execution mode`,{default:`none`}).boolean(`includeNodeLocations`,`Track source offsets`,{default:!1}).boolean(`pretendToBeVisual`,`Expose rAF/matchMedia shims`,{default:!1}).string(`referrer`,`Referrer URL`).number(`storageQuotaBytes`,`Storage quota bytes`,{default:5e6}).required(`html`).query()),t(`browser_jsdom_query`,e=>e.desc(`Query a JSDOM session with a CSS selector.`).string(`sessionId`,`Session ID`).string(`selector`,`CSS selector`).number(`maxResults`,`Max matches`,{default:50}).array(`attributes`,{type:`string`},`Attribute whitelist`).boolean(`includeText`,`Include textContent`,{default:!0}).boolean(`includeHtml`,`Include outerHTML`,{default:!1}).boolean(`includeLocation`,`Include source offsets`,{default:!1}).required(`sessionId`,`selector`).query()),t(`browser_jsdom_execute`,e=>e.desc(`Evaluate JS inside a JSDOM session.`).string(`sessionId`,`Session ID`).string(`code`,`JavaScript code`).number(`timeoutMs`,`Timeout hint ms`,{default:5e3}).required(`sessionId`,`code`)),t(`browser_jsdom_serialize`,e=>e.desc(`Serialize a JSDOM session to HTML.`).string(`sessionId`,`Session ID`).string(`selector`,`CSS selector for a fragment`).boolean(`pretty`,`Pretty-print`,{default:!1}).required(`sessionId`).query()),t(`browser_jsdom_cookies`,e=>e.desc(`Manage cookies on a JSDOM session. Isolated from the attached browser.`).string(`sessionId`,`Session ID`).enum(`action`,[`get`,`set`,`clear`],`Action`,{default:`get`}).string(`url`,`URL scope`).object(`cookie`,{name:{type:`string`,description:`Name`},value:{type:`string`,description:`Value`},domain:{type:`string`,description:`Domain`},path:{type:`string`,description:`Path`},expires:{type:`string`,description:`Expiration`},httpOnly:{type:`boolean`,description:`HttpOnly`},secure:{type:`boolean`,description:`Secure`},sameSite:{type:`string`,description:`SameSite`},raw:{type:`string`,description:`Raw Set-Cookie string`}},`Cookie (action=set)`).destructive().requiredOpenWorld(`sessionId`))],l=[...a,...r,...i,...o,...s,...c];export{n,l as t};
@@ -1 +1 @@
1
- import{t as e}from"./tool-builder-qif8M9-K.mjs";const t=[e(`call_graph_analyze`,e=>e.desc(`Analyze runtime function call graph from in-page traces.`).number(`maxDepth`,`Maximum stack-derived edge depth`,{default:5}).string(`filterPattern`,`Regex filter for function names`).query()),e(`script_replace_persist`,e=>e.desc(`Persistently replace matching script responses.`).string(`url`,`Script URL match pattern`).string(`replacement`,`Replacement JavaScript source`).enum(`matchType`,[`exact`,`contains`,`regex`],`URL matching strategy`,{default:`contains`}).requiredOpenWorld(`url`,`replacement`)),e(`graphql_introspect`,e=>e.desc(`Run GraphQL introspection query against a target endpoint.`).string(`endpoint`,`GraphQL endpoint URL`).prop(`headers`,{type:`object`,description:`Custom request headers`,additionalProperties:{type:`string`}}).boolean(`useBrowser`,`Use the active browser session for fetch so cookies and CSRF/app-injected headers are preserved. Set false to force a Node-side fetch.`,{default:!0}).requiredOpenWorld(`endpoint`)),e(`graphql_extract_queries`,e=>e.desc(`Extract GraphQL queries/mutations from captured network traces.`).number(`limit`,`Maximum extracted operations`,{default:50}).query()),e(`graphql_replay`,e=>e.desc(`Replay a GraphQL operation with optional variables.`).string(`endpoint`,`GraphQL endpoint URL`).string(`query`,`GraphQL query/mutation string`).prop(`variables`,{type:`object`,description:`GraphQL variables`,additionalProperties:!0}).string(`operationName`,`GraphQL operationName`).prop(`headers`,{type:`object`,description:`Custom request headers`,additionalProperties:{type:`string`}}).boolean(`useBrowser`,`Use the active browser session for fetch so cookies and CSRF/app-injected headers are preserved. Set false to force a Node-side fetch.`,{default:!0}).requiredOpenWorld(`endpoint`,`query`)),e(`graphql_enum_schema`,e=>e.desc(`Enumerate GraphQL fields from server suggestion errors with introspection fallback.`).string(`endpoint`,`GraphQL endpoint URL`).string(`typeName`,`Root type name to report`,{default:`Query`}).string(`parentType`,`Type name to probe fields on`).number(`maxDepth`,`Maximum enumeration depth`,{default:1,minimum:1,maximum:6}).number(`concurrency`,`Reserved concurrency hint for future expansion`,{default:3,minimum:1,maximum:10}).prop(`headers`,{type:`object`,description:`Custom request headers`,additionalProperties:{type:`string`}}).requiredOpenWorld(`endpoint`))];export{t};
1
+ import{t as e}from"./tool-builder-CpLh-UQd.mjs";const t=[e(`call_graph_analyze`,e=>e.desc(`Analyze runtime function call graph from in-page traces.`).number(`maxDepth`,`Maximum stack-derived edge depth`,{default:5}).string(`filterPattern`,`Regex filter for function names`).query()),e(`script_replace_persist`,e=>e.desc(`Persistently replace matching script responses.`).string(`url`,`Script URL match pattern`).string(`replacement`,`Replacement JavaScript source`).enum(`matchType`,[`exact`,`contains`,`regex`],`URL matching strategy`,{default:`contains`}).requiredOpenWorld(`url`,`replacement`)),e(`graphql_introspect`,e=>e.desc(`Run GraphQL introspection query against a target endpoint.`).string(`endpoint`,`GraphQL endpoint URL`).prop(`headers`,{type:`object`,description:`Custom request headers`,additionalProperties:{type:`string`}}).boolean(`useBrowser`,`Use the active browser session for fetch so cookies and CSRF/app-injected headers are preserved. Set false to force a Node-side fetch.`,{default:!0}).requiredOpenWorld(`endpoint`)),e(`graphql_extract_queries`,e=>e.desc(`Extract GraphQL queries/mutations from captured network traces.`).number(`limit`,`Maximum extracted operations`,{default:50}).query()),e(`graphql_replay`,e=>e.desc(`Replay a GraphQL operation with optional variables.`).string(`endpoint`,`GraphQL endpoint URL`).string(`query`,`GraphQL query/mutation string`).prop(`variables`,{type:`object`,description:`GraphQL variables`,additionalProperties:!0}).string(`operationName`,`GraphQL operationName`).prop(`headers`,{type:`object`,description:`Custom request headers`,additionalProperties:{type:`string`}}).boolean(`useBrowser`,`Use the active browser session for fetch so cookies and CSRF/app-injected headers are preserved. Set false to force a Node-side fetch.`,{default:!0}).requiredOpenWorld(`endpoint`,`query`)),e(`graphql_enum_schema`,e=>e.desc(`Enumerate GraphQL fields from server suggestion errors with introspection fallback.`).string(`endpoint`,`GraphQL endpoint URL`).string(`typeName`,`Root type name to report`,{default:`Query`}).string(`parentType`,`Type name to probe fields on`).number(`maxDepth`,`Maximum enumeration depth`,{default:1,minimum:1,maximum:6}).number(`concurrency`,`Reserved concurrency hint for future expansion`,{default:3,minimum:1,maximum:10}).prop(`headers`,{type:`object`,description:`Custom request headers`,additionalProperties:{type:`string`}}).requiredOpenWorld(`endpoint`))];export{t};
@@ -1 +1 @@
1
- import{t as e}from"./tool-builder-qif8M9-K.mjs";import{t}from"./authorization-schema-BOFwSXUN.mjs";const n=[e(`network_extract_auth`,e=>e.desc(`Extract authentication data from captured network requests.`).number(`minConfidence`,`Minimum confidence threshold 0-1`,{default:.4,minimum:0,maximum:1})),e(`network_export_har`,e=>e.desc(`Export captured network traffic as HAR.`).string(`outputPath`,`File path to write the HAR file. If omitted, returns HAR as JSON.`).boolean(`includeBodies`,`Include response bodies in the HAR (may be slow for large captures). Default: false`,{default:!1}).openWorld()),e(`network_replay_request`,e=>e.desc(`Replay a captured network request with optional changes.`).string(`requestId`,`Request ID from network_get_requests to replay`).object(`headerPatch`,{additionalProperties:{type:`string`}},`Headers to add or override (key-value pairs)`).object(`sessionProfile`,{cookies:{type:`array`,items:{type:`object`,properties:{name:{type:`string`},value:{type:`string`},domain:{type:`string`},path:{type:`string`},expires:{type:`number`},httpOnly:{type:`boolean`},secure:{type:`boolean`},sameSite:{type:`string`,enum:[`Strict`,`Lax`,`None`]}},required:[`name`,`value`]}},userAgent:{type:`string`},acceptLanguage:{type:`string`},referer:{type:`string`},clientHints:{type:`object`,properties:{"sec-ch-ua":{type:`string`},"sec-ch-ua-mobile":{type:`string`},"sec-ch-ua-platform":{type:`string`},"sec-ch-ua-full-version-list":{type:`string`}}},platform:{type:`string`},origin:{type:`string`},collectedAt:{type:`number`},ttlSec:{type:`number`}},`Inject browser cookies, User-Agent and Accept-Language from a captured session into the replay.`).string(`bodyPatch`,`Replace the entire request body with this string`).string(`methodOverride`,`Override the HTTP method`).string(`urlOverride`,`Override the request URL`).object(`authorization`,t,`Request-scoped authorization policy for private-network or insecure-HTTP replay. Use exact hosts/CIDRs instead of process-wide bypasses.`).string(`authorizationCapability`,`Base64url-encoded JSON capability for request-scoped authorization. Payload fields mirror authorization and must include requestId.`).number(`timeoutMs`,`Request timeout in milliseconds`,{default:3e4,minimum:1e3,maximum:12e4}).boolean(`dryRun`,`Preview the request without sending it`,{default:!0}).requiredOpenWorld(`requestId`)),e(`network_intercept`,e=>e.desc(`Manage network interception rules.`).enum(`action`,[`add`,`list`,`disable`],`Intercept operation`).string(`urlPattern`,`URL pattern to match`).enum(`urlPatternType`,[`glob`,`regex`],`How to interpret urlPattern`,{default:`glob`}).enum(`interceptAction`,[`continue`,`abort`,`fulfill`],`Match action`,{default:`fulfill`}).enum(`stage`,[`Request`,`Response`],`Intercept stage. Response (default) intercepts after server responds.`,{default:`Response`}).number(`responseCode`,`HTTP status code to return`,{default:200,minimum:100,maximum:599}).object(`responseHeaders`,{additionalProperties:{type:`string`}},`Custom response headers as key-value pairs.`).string(`responseBody`,`Custom response body string.`).array(`rules`,{type:`object`,properties:{urlPattern:{type:`string`},urlPatternType:{type:`string`,enum:[`glob`,`regex`]},interceptAction:{type:`string`,enum:[`continue`,`abort`,`fulfill`]},stage:{type:`string`,enum:[`Request`,`Response`]},responseCode:{type:`number`},responseHeaders:{type:`object`,additionalProperties:{type:`string`}},responseBody:{type:`string`}},required:[`urlPattern`]},`Rule objects to add`).string(`ruleId`,`Rule ID to remove`).boolean(`all`,`Remove all rules`,{default:!1}).required(`action`)),e(`network_tls_fingerprint`,e=>e.desc(`Compute TLS/HTTP fingerprint hashes for bot detection.`).enum(`mode`,[`analyze_request`,`compute_tls`,`compute_http`],`Fingerprint mode`).string(`requestId`,`Request ID to analyze`).array(`tlsVersions`,{type:`string`},`TLS version codes in order`).array(`ciphers`,{type:`string`},`Cipher suite codes in order`).array(`extensions`,{type:`string`},`Extension type codes in order`).array(`signatureAlgorithms`,{type:`string`},`Signature algorithm codes in order`).enum(`protocol`,[`tls`,`quic`,`dtls`],`Transport protocol type`,{default:`tls`}).boolean(`sni`,`Whether SNI (Server Name Indication) extension is present`,{default:!0}).string(`alpn`,`ALPN value`).array(`httpHeaders`,{type:`string`},`HTTP header names in order`).string(`userAgent`,`User-Agent value`).string(`httpMethod`,`HTTP method`,{default:`GET`}).string(`httpVersion`,`HTTP version`,{default:`1.1`}).string(`cookieHeader`,`Cookie header value`).string(`acceptLanguage`,`Accept-Language header value`).boolean(`includeAnalysis`,`Include detailed fingerprint breakdown`,{default:!0}).required(`mode`)),e(`network_bot_detect_analyze`,e=>e.desc(`Analyze captured requests for bot-detection signals.`).number(`limit`,`Maximum requests to analyze`,{default:50,minimum:1,maximum:500}).boolean(`includeDetails`,`Include per-request analysis details`,{default:!1}).query())],r=[e(`network_enable`,e=>e.desc(`Enable network request monitoring.`).boolean(`enableExceptions`,`Also capture uncaught exceptions`,{default:!0})),e(`network_disable`,e=>e.desc(`Disable network request monitoring`).destructive()),e(`network_get_status`,e=>e.desc(`Get network monitoring status.`).query()),e(`network_monitor`,e=>e.desc(`Manage network request monitoring.`).enum(`action`,[`enable`,`disable`,`status`],`Action to perform`).boolean(`enableExceptions`,`Only for enable action: Also capture uncaught exceptions`,{default:!0}).required(`action`)),e(`network_get_requests`,e=>e.desc(`Get captured network requests.`).string(`url`,`Filter by URL substring`).string(`urlRegex`,`Filter by URL regex pattern`).string(`method`,`Filter by HTTP method (GET, POST, PUT, DELETE)`).number(`sinceTimestamp`,`Only return requests after this epoch timestamp (milliseconds). Useful for incremental polling.`).string(`sinceRequestId`,`Only return requests after this requestId (exclusive). Useful for incremental retrieval.`).number(`tail`,`Return the last N requests after filtering`).number(`limit`,`Maximum number of results per page`,{default:100,minimum:1,maximum:1e3}).number(`offset`,`Skip results for pagination`,{default:0,minimum:0}).boolean(`autoEnable`,`Auto-enable network monitoring when currently disabled`,{default:!0}).boolean(`enableExceptions`,`When autoEnable=true, also enable uncaught exception monitoring`,{default:!0}).array(`fields`,{type:`string`},`Only include these fields per request (e.g. ["url","method","status"]). Reduces response size drastically.`).boolean(`deduplicateUrls`,`Deduplicate URLs by stripping query params and normalizing path segments (UUIDs/IDs → {id}). Returns unique endpoint patterns with counts instead of individual requests.`,{default:!1})),e(`network_get_response_body`,e=>e.desc(`Get the response body for a captured request.`).string(`requestId`,`Request ID (from network_get_requests)`).number(`maxSize`,`Maximum response size in bytes`,{default:1e5,minimum:1024,maximum:2e7}).boolean(`returnSummary`,`Return only size and preview instead of full body`,{default:!1}).number(`retries`,`Retry count when response body is not yet available`,{default:3,minimum:0,maximum:10}).number(`retryIntervalMs`,`Retry interval in milliseconds`,{default:500,minimum:100,maximum:1e4}).boolean(`autoEnable`,`Auto-enable network monitoring when currently disabled`,{default:!1}).boolean(`enableExceptions`,`When autoEnable=true, also enable uncaught exception monitoring`,{default:!0}).required(`requestId`)),e(`network_get_stats`,e=>e.desc(`Get network statistics.`).query()),e(`performance_get_metrics`,e=>e.desc(`Get page performance metrics.`).boolean(`includeTimeline`,`Include detailed timeline events`,{default:!1}).query()),e(`performance_coverage`,e=>e.desc(`Start or stop code coverage recording.`).enum(`action`,[`start`,`stop`],`Coverage action`).required(`action`)),e(`performance_take_heap_snapshot`,e=>e.desc(`Take a V8 heap memory snapshot`)),e(`performance_trace`,e=>e.desc(`Start or stop a Chrome performance trace.`).enum(`action`,[`start`,`stop`],`Trace action`).array(`categories`,{type:`string`},`Trace categories to capture`).boolean(`screenshots`,`Capture screenshots during tracing`,{default:!1}).string(`artifactPath`,`Custom output path`).required(`action`)),e(`profiler_cpu`,e=>e.desc(`Start or stop CPU profiling.`).enum(`action`,[`start`,`stop`],`Profiler action`).string(`artifactPath`,`Custom output path`).required(`action`)),e(`profiler_heap_sampling`,e=>e.desc(`Start or stop heap allocation sampling.`).enum(`action`,[`start`,`stop`],`Sampling action`).number(`samplingInterval`,`Sampling interval in bytes`,{default:32768,minimum:256,maximum:1048576}).string(`artifactPath`,`Custom output path`).number(`topN`,`Number of top allocators to return`,{default:20,minimum:1,maximum:100}).required(`action`))],i=[e(`console_get_exceptions`,e=>e.desc(`Get captured uncaught exceptions from the page`).string(`url`,`Filter by URL substring`).number(`limit`,`Maximum number of exceptions to return`,{default:50,minimum:1,maximum:1e3}).readOnly()),e(`console_inject`,e=>e.desc(`Inject an in-page script, XHR, fetch, or function monitor.`).enum(`type`,[`script`,`xhr`,`fetch`,`function`],`Injection type`).string(`functionName`,`Global function path to trace`).boolean(`persistent`,`Keep the injection across page navigations`,{default:!1}).required(`type`).openWorld()),e(`console_inject_fetch_interceptor`,e=>e.desc(`Inject a fetch interceptor.`).boolean(`persistent`,`Keep the injection across page navigations`,{default:!1}).openWorld()),e(`console_inject_xhr_interceptor`,e=>e.desc(`Inject an XMLHttpRequest interceptor.`).boolean(`persistent`,`Keep the injection across page navigations`,{default:!1}).openWorld()),e(`console_buffers`,e=>e.desc(`Manage injected interceptor state.`).enum(`action`,[`clear`,`reset`],`Buffer action: clear buffers or reset interceptors`).required(`action`))],a=[e(`network_traceroute`,e=>e.desc(`Run an ICMP traceroute.`).string(`target`,`Target hostname or IP address to trace route to`).number(`maxHops`,`Maximum number of hops`,{default:30,minimum:1,maximum:64}).number(`timeout`,`Per-hop timeout in milliseconds`,{default:5e3,minimum:100,maximum:3e4}).number(`packetSize`,`ICMP echo request payload size in bytes`,{default:32,minimum:8,maximum:65500}).required(`target`).query()),e(`network_icmp_probe`,e=>e.desc(`Run an ICMP echo probe.`).string(`target`,`Target hostname or IP address to probe`).number(`ttl`,`Time-to-live value`,{default:128,minimum:1,maximum:255}).number(`packetSize`,`ICMP echo request payload size in bytes`,{default:32,minimum:8,maximum:65500}).number(`timeout`,`Timeout in milliseconds`,{default:5e3,minimum:100,maximum:3e4}).required(`target`).query())],o=[e(`http_request_build`,e=>e.desc(`Build a raw HTTP/1.x request payload.`).string(`method`,`HTTP method token`).string(`target`,`Request target, such as /path, *, or an absolute-form URL`).string(`host`,`Optional Host header value to inject when addHostHeader is enabled`).object(`headers`,{additionalProperties:{type:`string`}},`Optional HTTP headers to include in the request`).string(`body`,`Optional UTF-8 request body`).enum(`httpVersion`,[`1.0`,`1.1`],`HTTP protocol version to emit`,{default:`1.1`}).boolean(`addHostHeader`,`Auto-add the Host header when host is provided`,{default:!0}).boolean(`addContentLength`,`Auto-add Content-Length when a body is present and Transfer-Encoding is absent`,{default:!0}).boolean(`addConnectionClose`,`Auto-add Connection: close when absent`,{default:!0}).requiredOpenWorld(`method`,`target`)),e(`http_plain_request`,e=>e.desc(`Send a raw HTTP request over plain TCP.`).string(`host`,`Target hostname or IP literal`).number(`port`,`TCP port to connect to. Default: 80`,{default:80,minimum:1,maximum:65535}).string(`requestText`,`Raw HTTP request text to send as UTF-8 bytes`).object(`authorization`,t,`Request-scoped authorization policy for private-network or insecure-HTTP targets. Use exact hosts/CIDRs instead of process-wide bypasses.`).number(`timeoutMs`,`Socket timeout in milliseconds`,{default:3e4,minimum:1e3,maximum:12e4}).number(`maxResponseBytes`,`Maximum number of raw response bytes to capture before truncating the exchange`,{default:512e3,minimum:1024,maximum:10485760}).requiredOpenWorld(`host`,`requestText`)),e(`http2_probe`,e=>e.desc(`Probe an HTTP/2 endpoint.`).string(`url`,`Absolute http:// or https:// URL to probe`).string(`method`,`HTTP method token to send. Default: GET`).object(`headers`,{additionalProperties:{type:`string`}},`Optional request headers to include. Header names are normalized to lowercase for HTTP/2.`).string(`body`,`Optional UTF-8 request body to send with the probe`).array(`alpnProtocols`,{type:`string`},`ALPN protocols to offer`).object(`authorization`,t,`Request-scoped authorization policy for private-network or insecure-HTTP targets. Use exact hosts/CIDRs instead of process-wide bypasses.`).number(`timeoutMs`,`Probe timeout in milliseconds`,{default:3e4,minimum:1e3,maximum:12e4}).number(`maxBodyBytes`,`Maximum number of response body bytes to capture for the snippet before truncating`,{default:32768,minimum:1024,maximum:1048576}).requiredOpenWorld(`url`)),e(`http2_frame_build`,e=>e.desc(`Build a raw HTTP/2 frame.`).string(`frameType`,`HTTP/2 frame type: DATA, SETTINGS, PING, WINDOW_UPDATE, RST_STREAM, GOAWAY, or RAW`).number(`streamId`,`Stream identifier (0 for connection-level frames). Default: 0`,{default:0,minimum:0,maximum:2147483647}).number(`flags`,`Raw flags byte (0-255). Overrides type-specific defaults when set.`,{minimum:0,maximum:255}).number(`frameTypeCode`,`Explicit frame type code for RAW frames (0-255). Required when frameType is RAW.`,{minimum:0,maximum:255}).string(`payloadHex`,`Frame payload as a hex string. Mutually exclusive with payloadText.`).string(`payloadText`,`Frame payload as a text string. Mutually exclusive with payloadHex.`).string(`payloadEncoding`,`Encoding for payloadText: utf8 or ascii. Default: utf8`).array(`settings`,{type:`object`,properties:{id:{type:`number`},value:{type:`number`}},required:[`id`,`value`]},`Array of {id, value} entries for SETTINGS frames`).boolean(`ack`,`Set the ACK flag on SETTINGS or PING frames`).string(`pingOpaqueDataHex`,`Exactly 8 bytes of opaque data for PING frames (hex string)`).number(`windowSizeIncrement`,`Window size increment for WINDOW_UPDATE frames (1 to 2^31-1)`).number(`errorCode`,`Error code for RST_STREAM or GOAWAY frames (0 to 2^32-1)`).number(`lastStreamId`,`Last stream ID for GOAWAY frames (0 to 2^31-1)`).string(`debugDataText`,`Optional debug data for GOAWAY frames`).string(`debugDataEncoding`,`Encoding for debugDataText: utf8 or ascii. Default: utf8`).requiredOpenWorld(`frameType`)),e(`dns_resolve`,e=>e.desc(`Resolve a hostname to DNS records using the system resolver.`).string(`hostname`,`Hostname to resolve (e.g. google.com)`).string(`rrType`,`DNS record type: A, AAAA, MX, TXT, NS, CNAME, SOA, PTR, SRV, or ANY`,{default:`A`}).requiredOpenWorld(`hostname`)),e(`dns_reverse`,e=>e.desc(`Reverse DNS lookup — find hostnames for an IP address.`).string(`ip`,`IP address to reverse lookup (e.g. 8.8.8.8)`).requiredOpenWorld(`ip`)),e(`dns_probe`,e=>e.desc(`Run a DNS query and return structured status instead of throwing.`).string(`hostname`,`Hostname to query`).string(`rrType`,`DNS record type: A, AAAA, MX, TXT, NS, CNAME, SOA, PTR, SRV, or ANY`,{default:`A`}).requiredOpenWorld(`hostname`)),e(`dns_cname_chain`,e=>e.desc(`Trace the full CNAME chain for a hostname.`).string(`hostname`,`Hostname to trace CNAME chain for`).number(`maxDepth`,`Maximum chain depth to follow. Default: 10`,{default:10,minimum:1,maximum:30}).requiredOpenWorld(`hostname`)),e(`dns_bulk_resolve`,e=>e.desc(`Resolve many hostnames concurrently with per-host status.`).array(`hostnames`,{type:`string`},`List of hostnames to resolve (max 1000)`).string(`rrType`,`DNS record type: A, AAAA, MX, TXT, NS, CNAME, SOA, PTR, SRV, or ANY`,{default:`A`}).number(`concurrency`,`Maximum number of concurrent DNS queries. Default: 10`,{default:10,minimum:1,maximum:50}).requiredOpenWorld(`hostnames`)),e(`network_rtt_measure`,e=>e.desc(`Measure round-trip time to a target URL.`).string(`url`,`Target URL to measure RTT to`).string(`probeType`,`Probe type: tcp, tls, or http. Default: tcp`,{default:`tcp`}).number(`iterations`,`Number of probe iterations (1-50). Default: 5`,{default:5,minimum:1,maximum:50}).number(`timeoutMs`,`Per-probe timeout in milliseconds (100-30000). Default: 5000`,{default:5e3,minimum:100,maximum:3e4}).object(`authorization`,{additionalProperties:{type:`string`}},`Authorization policy for network access`).requiredOpenWorld(`url`)),e(`network_latency_stats`,e=>e.desc(`Measure repeated latency and compute percentile stats.`).string(`url`,`Target URL to measure`).enum(`probeType`,[`tcp`,`tls`,`http`],`Probe type`,{default:`http`}).number(`iterations`,`Number of probes`,{default:20,minimum:5,maximum:100}).number(`concurrency`,`Max concurrent probes`,{default:5,minimum:1,maximum:20}).number(`timeoutMs`,`Per-probe timeout ms`,{default:5e3,minimum:100,maximum:3e4}).object(`authorization`,{additionalProperties:{type:`string`}},`Authorization policy for network access`).requiredOpenWorld(`url`))],s=[...r,...i,...o,...n,...a];export{s as t};
1
+ import{t as e}from"./tool-builder-CpLh-UQd.mjs";import{t}from"./authorization-schema-Jtikc5Yt.mjs";const n=[e(`network_extract_auth`,e=>e.desc(`Extract authentication data from captured network requests.`).number(`minConfidence`,`Minimum confidence threshold 0-1`,{default:.4,minimum:0,maximum:1})),e(`network_export_har`,e=>e.desc(`Export captured network traffic as HAR.`).string(`outputPath`,`File path to write the HAR file. If omitted, returns HAR as JSON.`).boolean(`includeBodies`,`Include response bodies in the HAR (may be slow for large captures). Default: false`,{default:!1}).openWorld()),e(`network_replay_request`,e=>e.desc(`Replay a captured network request with optional changes.`).string(`requestId`,`Request ID from network_get_requests to replay`).object(`headerPatch`,{additionalProperties:{type:`string`}},`Headers to add or override (key-value pairs)`).object(`sessionProfile`,{cookies:{type:`array`,items:{type:`object`,properties:{name:{type:`string`},value:{type:`string`},domain:{type:`string`},path:{type:`string`},expires:{type:`number`},httpOnly:{type:`boolean`},secure:{type:`boolean`},sameSite:{type:`string`,enum:[`Strict`,`Lax`,`None`]}},required:[`name`,`value`]}},userAgent:{type:`string`},acceptLanguage:{type:`string`},referer:{type:`string`},clientHints:{type:`object`,properties:{"sec-ch-ua":{type:`string`},"sec-ch-ua-mobile":{type:`string`},"sec-ch-ua-platform":{type:`string`},"sec-ch-ua-full-version-list":{type:`string`}}},platform:{type:`string`},origin:{type:`string`},collectedAt:{type:`number`},ttlSec:{type:`number`}},`Inject browser cookies, User-Agent and Accept-Language from a captured session into the replay.`).string(`bodyPatch`,`Replace the entire request body with this string`).string(`methodOverride`,`Override the HTTP method`).string(`urlOverride`,`Override the request URL`).object(`authorization`,t,`Request-scoped authorization policy for private-network or insecure-HTTP replay. Use exact hosts/CIDRs instead of process-wide bypasses.`).string(`authorizationCapability`,`Base64url-encoded JSON capability for request-scoped authorization. Payload fields mirror authorization and must include requestId.`).number(`timeoutMs`,`Request timeout in milliseconds`,{default:3e4,minimum:1e3,maximum:12e4}).boolean(`dryRun`,`Preview the request without sending it`,{default:!0}).requiredOpenWorld(`requestId`)),e(`network_intercept`,e=>e.desc(`Manage network interception rules.`).enum(`action`,[`add`,`list`,`disable`],`Intercept operation`).string(`urlPattern`,`URL pattern to match`).enum(`urlPatternType`,[`glob`,`regex`],`How to interpret urlPattern`,{default:`glob`}).enum(`interceptAction`,[`continue`,`abort`,`fulfill`],`Match action`,{default:`fulfill`}).enum(`stage`,[`Request`,`Response`],`Intercept stage. Response (default) intercepts after server responds.`,{default:`Response`}).number(`responseCode`,`HTTP status code to return`,{default:200,minimum:100,maximum:599}).object(`responseHeaders`,{additionalProperties:{type:`string`}},`Custom response headers as key-value pairs.`).string(`responseBody`,`Custom response body string.`).array(`rules`,{type:`object`,properties:{urlPattern:{type:`string`},urlPatternType:{type:`string`,enum:[`glob`,`regex`]},interceptAction:{type:`string`,enum:[`continue`,`abort`,`fulfill`]},stage:{type:`string`,enum:[`Request`,`Response`]},responseCode:{type:`number`},responseHeaders:{type:`object`,additionalProperties:{type:`string`}},responseBody:{type:`string`}},required:[`urlPattern`]},`Rule objects to add`).string(`ruleId`,`Rule ID to remove`).boolean(`all`,`Remove all rules`,{default:!1}).required(`action`)),e(`network_tls_fingerprint`,e=>e.desc(`Compute TLS/HTTP fingerprint hashes for bot detection.`).enum(`mode`,[`analyze_request`,`compute_tls`,`compute_http`],`Fingerprint mode`).string(`requestId`,`Request ID to analyze`).array(`tlsVersions`,{type:`string`},`TLS version codes in order`).array(`ciphers`,{type:`string`},`Cipher suite codes in order`).array(`extensions`,{type:`string`},`Extension type codes in order`).array(`signatureAlgorithms`,{type:`string`},`Signature algorithm codes in order`).enum(`protocol`,[`tls`,`quic`,`dtls`],`Transport protocol type`,{default:`tls`}).boolean(`sni`,`Whether SNI (Server Name Indication) extension is present`,{default:!0}).string(`alpn`,`ALPN value`).array(`httpHeaders`,{type:`string`},`HTTP header names in order`).string(`userAgent`,`User-Agent value`).string(`httpMethod`,`HTTP method`,{default:`GET`}).string(`httpVersion`,`HTTP version`,{default:`1.1`}).string(`cookieHeader`,`Cookie header value`).string(`acceptLanguage`,`Accept-Language header value`).boolean(`includeAnalysis`,`Include detailed fingerprint breakdown`,{default:!0}).required(`mode`)),e(`network_bot_detect_analyze`,e=>e.desc(`Analyze captured requests for bot-detection signals.`).number(`limit`,`Maximum requests to analyze`,{default:50,minimum:1,maximum:500}).boolean(`includeDetails`,`Include per-request analysis details`,{default:!1}).query())],r=[e(`network_enable`,e=>e.desc(`Enable network request monitoring.`).boolean(`enableExceptions`,`Also capture uncaught exceptions`,{default:!0})),e(`network_disable`,e=>e.desc(`Disable network request monitoring`).destructive()),e(`network_get_status`,e=>e.desc(`Get network monitoring status.`).query()),e(`network_monitor`,e=>e.desc(`Manage network request monitoring.`).enum(`action`,[`enable`,`disable`,`status`],`Action to perform`).boolean(`enableExceptions`,`Only for enable action: Also capture uncaught exceptions`,{default:!0}).required(`action`)),e(`network_get_requests`,e=>e.desc(`Get captured network requests.`).string(`url`,`Filter by URL substring`).string(`urlRegex`,`Filter by URL regex pattern`).string(`method`,`Filter by HTTP method (GET, POST, PUT, DELETE)`).number(`sinceTimestamp`,`Only return requests after this epoch timestamp (milliseconds). Useful for incremental polling.`).string(`sinceRequestId`,`Only return requests after this requestId (exclusive). Useful for incremental retrieval.`).number(`tail`,`Return the last N requests after filtering`).number(`limit`,`Maximum number of results per page`,{default:100,minimum:1,maximum:1e3}).number(`offset`,`Skip results for pagination`,{default:0,minimum:0}).boolean(`autoEnable`,`Auto-enable network monitoring when currently disabled`,{default:!0}).boolean(`enableExceptions`,`When autoEnable=true, also enable uncaught exception monitoring`,{default:!0}).array(`fields`,{type:`string`},`Only include these fields per request (e.g. ["url","method","status"]). Reduces response size drastically.`).boolean(`deduplicateUrls`,`Deduplicate URLs by stripping query params and normalizing path segments (UUIDs/IDs → {id}). Returns unique endpoint patterns with counts instead of individual requests.`,{default:!1})),e(`network_get_response_body`,e=>e.desc(`Get the response body for a captured request.`).string(`requestId`,`Request ID (from network_get_requests)`).number(`maxSize`,`Maximum response size in bytes`,{default:1e5,minimum:1024,maximum:2e7}).boolean(`returnSummary`,`Return only size and preview instead of full body`,{default:!1}).number(`retries`,`Retry count when response body is not yet available`,{default:3,minimum:0,maximum:10}).number(`retryIntervalMs`,`Retry interval in milliseconds`,{default:500,minimum:100,maximum:1e4}).boolean(`autoEnable`,`Auto-enable network monitoring when currently disabled`,{default:!1}).boolean(`enableExceptions`,`When autoEnable=true, also enable uncaught exception monitoring`,{default:!0}).required(`requestId`)),e(`network_get_stats`,e=>e.desc(`Get network statistics.`).query()),e(`performance_get_metrics`,e=>e.desc(`Get page performance metrics.`).boolean(`includeTimeline`,`Include detailed timeline events`,{default:!1}).query()),e(`performance_coverage`,e=>e.desc(`Start or stop code coverage recording.`).enum(`action`,[`start`,`stop`],`Coverage action`).required(`action`)),e(`performance_take_heap_snapshot`,e=>e.desc(`Take a V8 heap memory snapshot`)),e(`performance_trace`,e=>e.desc(`Start or stop a Chrome performance trace.`).enum(`action`,[`start`,`stop`],`Trace action`).array(`categories`,{type:`string`},`Trace categories to capture`).boolean(`screenshots`,`Capture screenshots during tracing`,{default:!1}).string(`artifactPath`,`Custom output path`).required(`action`)),e(`profiler_cpu`,e=>e.desc(`Start or stop CPU profiling.`).enum(`action`,[`start`,`stop`],`Profiler action`).string(`artifactPath`,`Custom output path`).required(`action`)),e(`profiler_heap_sampling`,e=>e.desc(`Start or stop heap allocation sampling.`).enum(`action`,[`start`,`stop`],`Sampling action`).number(`samplingInterval`,`Sampling interval in bytes`,{default:32768,minimum:256,maximum:1048576}).string(`artifactPath`,`Custom output path`).number(`topN`,`Number of top allocators to return`,{default:20,minimum:1,maximum:100}).required(`action`))],i=[e(`console_get_exceptions`,e=>e.desc(`Get captured uncaught exceptions from the page`).string(`url`,`Filter by URL substring`).number(`limit`,`Maximum number of exceptions to return`,{default:50,minimum:1,maximum:1e3}).readOnly()),e(`console_inject`,e=>e.desc(`Inject an in-page script, XHR, fetch, or function monitor.`).enum(`type`,[`script`,`xhr`,`fetch`,`function`],`Injection type`).string(`functionName`,`Global function path to trace`).boolean(`persistent`,`Keep the injection across page navigations`,{default:!1}).required(`type`).openWorld()),e(`console_inject_fetch_interceptor`,e=>e.desc(`Inject a fetch interceptor.`).boolean(`persistent`,`Keep the injection across page navigations`,{default:!1}).openWorld()),e(`console_inject_xhr_interceptor`,e=>e.desc(`Inject an XMLHttpRequest interceptor.`).boolean(`persistent`,`Keep the injection across page navigations`,{default:!1}).openWorld()),e(`console_buffers`,e=>e.desc(`Manage injected interceptor state.`).enum(`action`,[`clear`,`reset`],`Buffer action: clear buffers or reset interceptors`).required(`action`))],a=[e(`network_traceroute`,e=>e.desc(`Run an ICMP traceroute.`).string(`target`,`Target hostname or IP address to trace route to`).number(`maxHops`,`Maximum number of hops`,{default:30,minimum:1,maximum:64}).number(`timeout`,`Per-hop timeout in milliseconds`,{default:5e3,minimum:100,maximum:3e4}).number(`packetSize`,`ICMP echo request payload size in bytes`,{default:32,minimum:8,maximum:65500}).required(`target`).query()),e(`network_icmp_probe`,e=>e.desc(`Run an ICMP echo probe.`).string(`target`,`Target hostname or IP address to probe`).number(`ttl`,`Time-to-live value`,{default:128,minimum:1,maximum:255}).number(`packetSize`,`ICMP echo request payload size in bytes`,{default:32,minimum:8,maximum:65500}).number(`timeout`,`Timeout in milliseconds`,{default:5e3,minimum:100,maximum:3e4}).required(`target`).query())],o=[e(`http_request_build`,e=>e.desc(`Build a raw HTTP/1.x request payload.`).string(`method`,`HTTP method token`).string(`target`,`Request target, such as /path, *, or an absolute-form URL`).string(`host`,`Optional Host header value to inject when addHostHeader is enabled`).object(`headers`,{additionalProperties:{type:`string`}},`Optional HTTP headers to include in the request`).string(`body`,`Optional UTF-8 request body`).enum(`httpVersion`,[`1.0`,`1.1`],`HTTP protocol version to emit`,{default:`1.1`}).boolean(`addHostHeader`,`Auto-add the Host header when host is provided`,{default:!0}).boolean(`addContentLength`,`Auto-add Content-Length when a body is present and Transfer-Encoding is absent`,{default:!0}).boolean(`addConnectionClose`,`Auto-add Connection: close when absent`,{default:!0}).requiredOpenWorld(`method`,`target`)),e(`http_plain_request`,e=>e.desc(`Send a raw HTTP request over plain TCP.`).string(`host`,`Target hostname or IP literal`).number(`port`,`TCP port to connect to. Default: 80`,{default:80,minimum:1,maximum:65535}).string(`requestText`,`Raw HTTP request text to send as UTF-8 bytes`).object(`authorization`,t,`Request-scoped authorization policy for private-network or insecure-HTTP targets. Use exact hosts/CIDRs instead of process-wide bypasses.`).number(`timeoutMs`,`Socket timeout in milliseconds`,{default:3e4,minimum:1e3,maximum:12e4}).number(`maxResponseBytes`,`Maximum number of raw response bytes to capture before truncating the exchange`,{default:512e3,minimum:1024,maximum:10485760}).requiredOpenWorld(`host`,`requestText`)),e(`http2_probe`,e=>e.desc(`Probe an HTTP/2 endpoint.`).string(`url`,`Absolute http:// or https:// URL to probe`).string(`method`,`HTTP method token to send. Default: GET`).object(`headers`,{additionalProperties:{type:`string`}},`Optional request headers to include. Header names are normalized to lowercase for HTTP/2.`).string(`body`,`Optional UTF-8 request body to send with the probe`).array(`alpnProtocols`,{type:`string`},`ALPN protocols to offer`).object(`authorization`,t,`Request-scoped authorization policy for private-network or insecure-HTTP targets. Use exact hosts/CIDRs instead of process-wide bypasses.`).number(`timeoutMs`,`Probe timeout in milliseconds`,{default:3e4,minimum:1e3,maximum:12e4}).number(`maxBodyBytes`,`Maximum number of response body bytes to capture for the snippet before truncating`,{default:32768,minimum:1024,maximum:1048576}).requiredOpenWorld(`url`)),e(`http2_frame_build`,e=>e.desc(`Build a raw HTTP/2 frame.`).string(`frameType`,`HTTP/2 frame type: DATA, SETTINGS, PING, WINDOW_UPDATE, RST_STREAM, GOAWAY, or RAW`).number(`streamId`,`Stream identifier (0 for connection-level frames). Default: 0`,{default:0,minimum:0,maximum:2147483647}).number(`flags`,`Raw flags byte (0-255). Overrides type-specific defaults when set.`,{minimum:0,maximum:255}).number(`frameTypeCode`,`Explicit frame type code for RAW frames (0-255). Required when frameType is RAW.`,{minimum:0,maximum:255}).string(`payloadHex`,`Frame payload as a hex string. Mutually exclusive with payloadText.`).string(`payloadText`,`Frame payload as a text string. Mutually exclusive with payloadHex.`).string(`payloadEncoding`,`Encoding for payloadText: utf8 or ascii. Default: utf8`).array(`settings`,{type:`object`,properties:{id:{type:`number`},value:{type:`number`}},required:[`id`,`value`]},`Array of {id, value} entries for SETTINGS frames`).boolean(`ack`,`Set the ACK flag on SETTINGS or PING frames`).string(`pingOpaqueDataHex`,`Exactly 8 bytes of opaque data for PING frames (hex string)`).number(`windowSizeIncrement`,`Window size increment for WINDOW_UPDATE frames (1 to 2^31-1)`).number(`errorCode`,`Error code for RST_STREAM or GOAWAY frames (0 to 2^32-1)`).number(`lastStreamId`,`Last stream ID for GOAWAY frames (0 to 2^31-1)`).string(`debugDataText`,`Optional debug data for GOAWAY frames`).string(`debugDataEncoding`,`Encoding for debugDataText: utf8 or ascii. Default: utf8`).requiredOpenWorld(`frameType`)),e(`dns_resolve`,e=>e.desc(`Resolve a hostname to DNS records using the system resolver.`).string(`hostname`,`Hostname to resolve (e.g. google.com)`).string(`rrType`,`DNS record type: A, AAAA, MX, TXT, NS, CNAME, SOA, PTR, SRV, or ANY`,{default:`A`}).requiredOpenWorld(`hostname`)),e(`dns_reverse`,e=>e.desc(`Reverse DNS lookup — find hostnames for an IP address.`).string(`ip`,`IP address to reverse lookup (e.g. 8.8.8.8)`).requiredOpenWorld(`ip`)),e(`dns_probe`,e=>e.desc(`Run a DNS query and return structured status instead of throwing.`).string(`hostname`,`Hostname to query`).string(`rrType`,`DNS record type: A, AAAA, MX, TXT, NS, CNAME, SOA, PTR, SRV, or ANY`,{default:`A`}).requiredOpenWorld(`hostname`)),e(`dns_cname_chain`,e=>e.desc(`Trace the full CNAME chain for a hostname.`).string(`hostname`,`Hostname to trace CNAME chain for`).number(`maxDepth`,`Maximum chain depth to follow. Default: 10`,{default:10,minimum:1,maximum:30}).requiredOpenWorld(`hostname`)),e(`dns_bulk_resolve`,e=>e.desc(`Resolve many hostnames concurrently with per-host status.`).array(`hostnames`,{type:`string`},`List of hostnames to resolve (max 1000)`).string(`rrType`,`DNS record type: A, AAAA, MX, TXT, NS, CNAME, SOA, PTR, SRV, or ANY`,{default:`A`}).number(`concurrency`,`Maximum number of concurrent DNS queries. Default: 10`,{default:10,minimum:1,maximum:50}).requiredOpenWorld(`hostnames`)),e(`network_rtt_measure`,e=>e.desc(`Measure round-trip time to a target URL.`).string(`url`,`Target URL to measure RTT to`).string(`probeType`,`Probe type: tcp, tls, or http. Default: tcp`,{default:`tcp`}).number(`iterations`,`Number of probe iterations (1-50). Default: 5`,{default:5,minimum:1,maximum:50}).number(`timeoutMs`,`Per-probe timeout in milliseconds (100-30000). Default: 5000`,{default:5e3,minimum:100,maximum:3e4}).object(`authorization`,{additionalProperties:{type:`string`}},`Authorization policy for network access`).requiredOpenWorld(`url`)),e(`network_latency_stats`,e=>e.desc(`Measure repeated latency and compute percentile stats.`).string(`url`,`Target URL to measure`).enum(`probeType`,[`tcp`,`tls`,`http`],`Probe type`,{default:`http`}).number(`iterations`,`Number of probes`,{default:20,minimum:5,maximum:100}).number(`concurrency`,`Max concurrent probes`,{default:5,minimum:1,maximum:20}).number(`timeoutMs`,`Per-probe timeout ms`,{default:5e3,minimum:100,maximum:3e4}).object(`authorization`,{additionalProperties:{type:`string`}},`Authorization policy for network access`).requiredOpenWorld(`url`))],s=[...r,...i,...o,...n,...a];export{s as t};
@@ -1 +1 @@
1
- import{t as e}from"./tool-builder-qif8M9-K.mjs";const t=[e(`proxy_start`,e=>e.desc(`Start the local HTTP/HTTPS interception proxy with optional TLS.`).number(`port`,`Listen port.`,{default:8080}).boolean(`useHttps`,`Enable HTTPS interception.`,{default:!0})),e(`proxy_stop`,e=>e.desc(`Stop the proxy and release all active rules.`).destructive()),e(`proxy_status`,e=>e.desc(`Report proxy status, listen port, and CA certificate path.`).query()),e(`proxy_export_ca`,e=>e.desc(`Read the proxy CA certificate.`).query()),e(`proxy_add_rule`,e=>e.desc(`Add an interception rule: forward, mock response, or block.`).string(`action`,`Rule action: forward, mock_response, or block.`).string(`method`,`HTTP method to match.`,{default:`GET`}).string(`urlPattern`,`URL matcher string or regex literal.`).number(`mockStatus`,`Response status for mock_response.`,{default:200}).string(`mockBody`,`Response body for mock_response.`).required(`action`)),e(`proxy_get_requests`,e=>e.desc(`Read captured proxy requests.`).string(`urlFilter`,`Optional URL filter.`).query()),e(`proxy_clear_logs`,e=>e.desc(`Clear all captured proxy request/response logs.`).resettable()),e(`proxy_setup_adb_device`,e=>e.desc(`Configure an Android device to use the proxy.`).string(`deviceSerial`,`ADB device serial.`))];export{t};
1
+ import{t as e}from"./tool-builder-CpLh-UQd.mjs";const t=[e(`proxy_start`,e=>e.desc(`Start the local HTTP/HTTPS interception proxy with optional TLS.`).number(`port`,`Listen port.`,{default:8080}).boolean(`useHttps`,`Enable HTTPS interception.`,{default:!0})),e(`proxy_stop`,e=>e.desc(`Stop the proxy and release all active rules.`).destructive()),e(`proxy_status`,e=>e.desc(`Report proxy status, listen port, and CA certificate path.`).query()),e(`proxy_export_ca`,e=>e.desc(`Read the proxy CA certificate.`).query()),e(`proxy_add_rule`,e=>e.desc(`Add an interception rule: forward, mock response, or block.`).string(`action`,`Rule action: forward, mock_response, or block.`).string(`method`,`HTTP method to match.`,{default:`GET`}).string(`urlPattern`,`URL matcher string or regex literal.`).number(`mockStatus`,`Response status for mock_response.`,{default:200}).string(`mockBody`,`Response body for mock_response.`).required(`action`)),e(`proxy_get_requests`,e=>e.desc(`Read captured proxy requests.`).string(`urlFilter`,`Optional URL filter.`).query()),e(`proxy_clear_logs`,e=>e.desc(`Clear all captured proxy request/response logs.`).resettable()),e(`proxy_setup_adb_device`,e=>e.desc(`Configure an Android device to use the proxy.`).string(`deviceSerial`,`ADB device serial.`))];export{t};
@@ -1 +1 @@
1
- import{t as e}from"./tool-builder-qif8M9-K.mjs";const t=[e(`create_task_handoff`,e=>e.desc(`Create an in-session task handoff.`).string(`description`,`Task description`).array(`constraints`,{type:`string`},`Constraints for the specialist`).string(`targetDomain`,`Suggested domain for the specialist`).string(`decision`,`Key design decision made in this phase`).array(`risks`,{type:`string`},`Identified risks for the specialist`).array(`nextSteps`,{type:`string`},`Concrete next actions for the specialist`).required(`description`)),e(`complete_task_handoff`,e=>e.desc(`Mark a task handoff as completed.`).string(`taskId`,`Task ID from create_task_handoff`).string(`summary`,`Concise summary of what was accomplished`).array(`keyFindings`,{type:`string`},`Key discoveries or results`).array(`artifacts`,{type:`string`},`Paths to generated artifact files`).required(`taskId`,`summary`)),e(`get_task_context`,e=>e.desc(`Read task handoff context.`).string(`taskId`,`Optional task ID to read a single handoff`).query()),e(`append_session_insight`,e=>e.desc(`Record an insight for the current session.`).string(`category`,`Insight category`).string(`content`,`The insight content`).number(`confidence`,`Confidence level 0.0-1.0`,{minimum:0,maximum:1,default:1}).required(`category`,`content`)),e(`save_page_snapshot`,e=>e.desc(`Save current page state.`).string(`label`,`Human-readable label for this snapshot`).readOnly()),e(`restore_page_snapshot`,e=>e.desc(`Restore a saved page snapshot.`).string(`snapshotId`,`Snapshot ID from save_page_snapshot`).required(`snapshotId`).idempotent()),e(`list_page_snapshots`,e=>e.desc(`List saved page snapshots.`).query())];export{t};
1
+ import{t as e}from"./tool-builder-CpLh-UQd.mjs";const t=[e(`create_task_handoff`,e=>e.desc(`Create an in-session task handoff.`).string(`description`,`Task description`).array(`constraints`,{type:`string`},`Constraints for the specialist`).string(`targetDomain`,`Suggested domain for the specialist`).string(`decision`,`Key design decision made in this phase`).array(`risks`,{type:`string`},`Identified risks for the specialist`).array(`nextSteps`,{type:`string`},`Concrete next actions for the specialist`).required(`description`)),e(`complete_task_handoff`,e=>e.desc(`Mark a task handoff as completed.`).string(`taskId`,`Task ID from create_task_handoff`).string(`summary`,`Concise summary of what was accomplished`).array(`keyFindings`,{type:`string`},`Key discoveries or results`).array(`artifacts`,{type:`string`},`Paths to generated artifact files`).required(`taskId`,`summary`)),e(`get_task_context`,e=>e.desc(`Read task handoff context.`).string(`taskId`,`Optional task ID to read a single handoff`).query()),e(`append_session_insight`,e=>e.desc(`Record an insight for the current session.`).string(`category`,`Insight category`).string(`content`,`The insight content`).number(`confidence`,`Confidence level 0.0-1.0`,{minimum:0,maximum:1,default:1}).required(`category`,`content`)),e(`save_page_snapshot`,e=>e.desc(`Save current page state.`).string(`label`,`Human-readable label for this snapshot`).readOnly()),e(`restore_page_snapshot`,e=>e.desc(`Restore a saved page snapshot.`).string(`snapshotId`,`Snapshot ID from save_page_snapshot`).required(`snapshotId`).idempotent()),e(`list_page_snapshots`,e=>e.desc(`List saved page snapshots.`).query())],n=[e(`state_board`,e=>e.desc(`CRUD operations on the cross-tool shared state board.`).enum(`action`,[`set`,`get`,`delete`,`list`,`history`,`clear`],`Operation to perform`).string(`key`,`Key name (required for set/get/delete/history)`).prop(`value`,{type:`object`,description:`Value to store`}).string(`namespace`,`Namespace for key isolation`).number(`ttlSeconds`,`TTL in seconds`).boolean(`includeValues`,`Include current values in list results`,{default:!1}).number(`limit`,`Maximum history entries to return`,{default:50}).string(`keyPattern`,`Key pattern filter`).required(`action`)),e(`state_board_watch`,e=>e.desc(`Watch state board keys for changes with configurable polling.`).enum(`action`,[`start`,`poll`,`stop`],`Watch operation: start watching, poll for changes, or stop watching`).string(`key`,`Key or pattern to watch`).string(`namespace`,`Namespace`).number(`pollIntervalMs`,`Polling interval in milliseconds`).string(`watchId`,`Watch ID`).required(`action`)),e(`state_board_io`,e=>e.desc(`Serialize state board to JSON or restore from a previous export.`).enum(`action`,[`export`,`import`],`IO operation`).string(`namespace`,`Namespace filter or target namespace`).string(`keyPattern`,`Key pattern filter`).prop(`data`,{type:`object`,description:`Entries to import`}).boolean(`overwrite`,`Overwrite existing keys on import`).required(`action`))];export{t as n,n as t};
@@ -1 +1 @@
1
- import{t as e}from"./tool-builder-qif8M9-K.mjs";const t=[e(`get_token_budget_stats`,e=>e.desc(`Get token budget usage stats, warnings, and optimization suggestions.`).query()),e(`manual_token_cleanup`,e=>e.desc(`Clear stale entries and reset counters to free 10-30% of token budget.`)),e(`reset_token_budget`,e=>e.desc(`Hard-reset all token budget counters. Destructive — prefer manual_token_cleanup.`).destructive())],n=[e(`list_extensions`,e=>e.desc(`List all loaded plugins, workflows, and extension tools.`).query()),e(`reload_extensions`,e=>e.desc(`Reload plugins and workflows from configured directories, and directly register extension tools visible in the current profile.`).openWorld()),e(`browse_extension_registry`,e=>e.desc(`Browse the online extension registry for installable plugins and workflows.`).enum(`kind`,[`plugin`,`workflow`,`all`],`Filter by extension kind`,{default:`all`}).query()),e(`install_extension`,e=>e.desc(`Install an extension from the remote registry.`).string(`slug`,`Extension slug from the registry`).string(`targetDir`,`Target directory override`).requiredOpenWorld(`slug`))],r=[e(`get_cache_stats`,e=>e.desc(`Get cache statistics: entries, sizes, hit rates, and cleanup recommendations.`).query()),e(`smart_cache_cleanup`,e=>e.desc(`Evict LRU and stale entries while preserving hot data.`).number(`targetSize`,`Target size in bytes`)),e(`clear_all_caches`,e=>e.desc(`Clear all internal caches. Destructive — prefer smart_cache_cleanup.`).destructive())],i=[e(`cleanup_artifacts`,e=>e.desc(`Clean generated artifacts by age and size.`).number(`retentionDays`,`Override retention window in days`).number(`maxTotalBytes`,`Override maximum retained bytes`).boolean(`dryRun`,`Preview removals without deleting`).destructive()),e(`doctor_environment`,e=>e.desc(`Run environment doctor: dependencies, bridges, platform limits.`).boolean(`includeBridgeHealth`,`Probe native-bridge / Burp endpoints`).readOnly())];export{t as i,r as n,n as r,i as t};
1
+ import{t as e}from"./tool-builder-CpLh-UQd.mjs";const t=[e(`get_token_budget_stats`,e=>e.desc(`Get token budget usage stats, warnings, and optimization suggestions.`).query()),e(`manual_token_cleanup`,e=>e.desc(`Clear stale entries and reset counters to free 10-30% of token budget.`)),e(`reset_token_budget`,e=>e.desc(`Hard-reset all token budget counters. Destructive — prefer manual_token_cleanup.`).destructive())],n=[e(`list_extensions`,e=>e.desc(`List all loaded plugins, workflows, and extension tools.`).query()),e(`reload_extensions`,e=>e.desc(`Reload plugins and workflows from configured directories, and directly register extension tools visible in the current profile.`).openWorld()),e(`browse_extension_registry`,e=>e.desc(`Browse the online extension registry for installable plugins and workflows.`).enum(`kind`,[`plugin`,`workflow`,`all`],`Filter by extension kind`,{default:`all`}).query()),e(`install_extension`,e=>e.desc(`Install an extension from the remote registry.`).string(`slug`,`Extension slug from the registry`).string(`targetDir`,`Target directory override`).requiredOpenWorld(`slug`))],r=[e(`get_cache_stats`,e=>e.desc(`Get cache statistics: entries, sizes, hit rates, and cleanup recommendations.`).query()),e(`smart_cache_cleanup`,e=>e.desc(`Evict LRU and stale entries while preserving hot data.`).number(`targetSize`,`Target size in bytes`)),e(`clear_all_caches`,e=>e.desc(`Clear all internal caches. Destructive — prefer smart_cache_cleanup.`).destructive())],i=[e(`execute_sandbox_script`,e=>e.desc(`Execute JavaScript in an isolated sandbox.`).string(`code`,`JavaScript source code to execute inside the sandbox`).string(`sessionId`,`Session ID for scratchpad persistence across executions`).number(`timeoutMs`,`Execution timeout in ms`,{default:1e3}).boolean(`autoCorrect`,`Retry failed scripts up to 2 times with error context`,{default:!1}).required(`code`))],a=[e(`cleanup_artifacts`,e=>e.desc(`Clean generated artifacts by age and size.`).number(`retentionDays`,`Override retention window in days`).number(`maxTotalBytes`,`Override maximum retained bytes`).boolean(`dryRun`,`Preview removals without deleting`).destructive()),e(`doctor_environment`,e=>e.desc(`Run environment doctor: dependencies, bridges, platform limits.`).boolean(`includeBridgeHealth`,`Probe native-bridge / Burp endpoints`).readOnly())];export{t as a,i,r as n,n as r,a as t};
@@ -1 +1 @@
1
- import{t as e}from"./tool-builder-qif8M9-K.mjs";const t=[e(`sourcemap_discover`,e=>e.desc(`Discover source maps on the current page.`).boolean(`includeInline`,`Include inline data: source maps.`,{default:!0})),e(`sourcemap_fetch_and_parse`,e=>e.desc(`Fetch a source map from URL and parse to original sources.`).string(`sourceMapUrl`,`Source map URL.`).string(`scriptUrl`,`Script URL for relative map resolution.`).required(`sourceMapUrl`)),e(`sourcemap_coverage`,e=>e.desc(`Summarize mapped and unmapped source coverage.`).string(`sourceMapUrl`,`Source map URL.`).string(`scriptUrl`,`Script URL for relative map resolution.`).required(`sourceMapUrl`)),e(`sourcemap_lookup`,e=>e.desc(`Resolve generated code position to original source.`).string(`sourceMapUrl`,`Source map URL.`).string(`scriptUrl`,`Script URL for relative map resolution.`).number(`line`,`Generated line number.`,{minimum:1}).number(`column`,`Generated column number.`,{minimum:0}).required(`sourceMapUrl`,`line`,`column`)),e(`sourcemap_reconstruct_tree`,e=>e.desc(`Reconstruct source files from a source map.`).string(`sourceMapUrl`,`Source map URL.`).string(`outputDir`,`Output directory under the project root.`).required(`sourceMapUrl`)),e(`sourcemap_parse_v4`,e=>e.desc(`Parse source map with ECMA-426 v4 scope/debug-id support; falls back to v3.`).string(`sourceMapUrl`,`Source map URL to parse.`).boolean(`extractScopes`,`Extract and decode scope information from v4 x_scopes field`,{default:!0}).boolean(`extractDebugIds`,`Extract debug-id mappings for source correlation`,{default:!0}).boolean(`compareV3`,`Compare v4 fields against v3 baseline and report differences`,{default:!1}).required(`sourceMapUrl`))];export{t};
1
+ import{t as e}from"./tool-builder-CpLh-UQd.mjs";const t=[e(`sourcemap_discover`,e=>e.desc(`Discover source maps on the current page.`).boolean(`includeInline`,`Include inline data: source maps.`,{default:!0})),e(`sourcemap_fetch_and_parse`,e=>e.desc(`Fetch a source map from URL and parse to original sources.`).string(`sourceMapUrl`,`Source map URL.`).string(`scriptUrl`,`Script URL for relative map resolution.`).required(`sourceMapUrl`)),e(`sourcemap_coverage`,e=>e.desc(`Summarize mapped and unmapped source coverage.`).string(`sourceMapUrl`,`Source map URL.`).string(`scriptUrl`,`Script URL for relative map resolution.`).required(`sourceMapUrl`)),e(`sourcemap_lookup`,e=>e.desc(`Resolve generated code position to original source.`).string(`sourceMapUrl`,`Source map URL.`).string(`scriptUrl`,`Script URL for relative map resolution.`).number(`line`,`Generated line number.`,{minimum:1}).number(`column`,`Generated column number.`,{minimum:0}).required(`sourceMapUrl`,`line`,`column`)),e(`sourcemap_reconstruct_tree`,e=>e.desc(`Reconstruct source files from a source map.`).string(`sourceMapUrl`,`Source map URL.`).string(`outputDir`,`Output directory under the project root.`).required(`sourceMapUrl`)),e(`sourcemap_parse_v4`,e=>e.desc(`Parse source map with ECMA-426 v4 scope/debug-id support; falls back to v3.`).string(`sourceMapUrl`,`Source map URL to parse.`).boolean(`extractScopes`,`Extract and decode scope information from v4 x_scopes field`,{default:!0}).boolean(`extractDebugIds`,`Extract debug-id mappings for source correlation`,{default:!0}).boolean(`compareV3`,`Compare v4 fields against v3 baseline and report differences`,{default:!1}).required(`sourceMapUrl`))];export{t};
@@ -1 +1 @@
1
- import{t as e}from"./tool-builder-qif8M9-K.mjs";const t={type:`array`,description:`Remapping rules for unpacked bundle module paths`,items:{type:`object`,properties:{path:{type:`string`,description:`New module path when matched`},pattern:{type:`string`,description:`Match text or regex`},matchType:{type:`string`,enum:[`includes`,`regex`,`exact`],description:`How to interpret pattern`,default:`includes`},target:{type:`string`,enum:[`code`,`path`],description:`Match against source code or module path`,default:`code`}},required:[`path`,`pattern`]}};function n(e){return e.boolean(`unpack`,`Unpack webpack/browserify bundles`,{default:!0}).boolean(`unminify`,`Reformat and unminify code`,{default:!0}).boolean(`jsx`,`Decompile React.createElement to JSX`,{default:!0}).boolean(`mangle`,`Rename obfuscated identifiers`,{default:!1}).string(`outputDir`,`Directory to save deobfuscated artifacts`).boolean(`forceOutput`,`Remove outputDir before saving`,{default:!1}).boolean(`includeModuleCode`,`Include module source in bundle output`,{default:!1}).number(`maxBundleModules`,`Maximum bundle modules to return`,{default:100,minimum:1,maximum:1e4}).prop(`mappings`,t)}const r=[e(`collect_code`,e=>e.desc(`Collect JavaScript from a target website with configurable strategy.`).boolean(`includeInline`,`Include inline scripts`,{default:!0}).boolean(`includeExternal`,`Include external scripts`,{default:!0}).boolean(`includeDynamic`,`Include dynamically loaded scripts`,{default:!1}).enum(`smartMode`,[`summary`,`priority`,`incremental`,`full`],`Collection mode`,{default:`full`}).boolean(`compress`,`Enable compression`,{default:!1}).number(`maxTotalSize`,`Maximum total size in bytes`,{default:2097152,minimum:1024,maximum:10485760}).number(`maxFileSize`,`Maximum single file size in KB`,{default:500,minimum:1,maximum:102400}).array(`priorities`,{type:`string`},`Preferred URL patterns for priority mode`).boolean(`returnSummaryOnly`,`Return summary only`,{default:!1}).string(`url`,`Target URL to collect scripts from`).requiredOpenWorld(`url`)),e(`search_in_scripts`,e=>e.desc(`Search collected scripts by keyword or regex pattern.`).string(`keyword`,`Search keyword or regex pattern`).boolean(`isRegex`,`Treat keyword as regex`,{default:!1}).boolean(`caseSensitive`,`Case-sensitive search`,{default:!1}).number(`contextLines`,`Context lines around each match`,{default:3,minimum:0,maximum:50}).number(`maxMatches`,`Maximum matches`,{default:100,minimum:1,maximum:1e4}).boolean(`returnSummary`,`Return summary instead of full payload`,{default:!1}).number(`maxContextSize`,`Max response size before summary fallback`,{default:5e4,minimum:1e3,maximum:1e6}).required(`keyword`).query()),e(`extract_function_tree`,e=>e.desc(`Extract a function and its dependency tree from collected scripts.`).string(`scriptId`,`Script identifier`).string(`functionName`,`Function name to extract`).number(`maxDepth`,`Maximum dependency traversal depth`,{default:3,minimum:1,maximum:20}).number(`maxSize`,`Maximum output size in KB`,{default:500,minimum:1,maximum:10240}).boolean(`includeComments`,`Include comments in extracted source`,{default:!0}).required(`scriptId`,`functionName`)),e(`deobfuscate`,e=>n(e.desc(`Run webcrack-powered JavaScript deobfuscation with bundle unpacking.`).string(`code`,`Obfuscated JavaScript source`).enum(`engine`,[`auto`,`webcrack`],`Deobfuscation engine`,{default:`auto`}).enum(`llm`,[`gpt-4`,`claude`],`Preferred LLM for analysis`,{default:`gpt-4`}).boolean(`detectOnly`,`Detect only without transformation (webcrack engine)`,{default:!1})).required(`code`)),e(`understand_code`,e=>e.desc(`Run semantic code analysis for structure, behavior, and risks.`).string(`code`,`Source code to analyze`).prop(`context`,{type:`object`,description:`Additional contextual data`}).enum(`focus`,[`structure`,`business`,`security`,`all`],`Analysis focus`,{default:`all`}).required(`code`)),e(`detect_crypto`,e=>e.desc(`Detect cryptographic algorithms and usage patterns in source code.`).string(`code`,`Source code for crypto analysis`).required(`code`).query()),e(`manage_hooks`,e=>e.desc(`Create, inspect, and clear JavaScript runtime hooks.`).enum(`action`,[`create`,`list`,`records`,`clear`],`Hook management operation`).string(`target`,`Hook target identifier`).enum(`type`,[`function`,`xhr`,`fetch`,`websocket`,`localstorage`,`cookie`],`Hook target type`).enum(`hookAction`,[`log`,`block`,`modify`],`Hook behavior`,{default:`log`}).string(`customCode`,`Custom JavaScript hook payload`).string(`hookId`,`Hook identifier`).requiredOpenWorld(`action`)),e(`detect_obfuscation`,e=>e.desc(`Detect obfuscation techniques in JavaScript source.`).string(`code`,`Source code to inspect`).boolean(`generateReport`,`Include human-readable report`,{default:!0}).required(`code`).query()),e(`webcrack_unpack`,e=>n(e.desc(`Run webcrack bundle unpacking and return extracted module graph.`).string(`code`,`Bundled or obfuscated JavaScript source`)).required(`code`)),e(`clear_collected_data`,e=>e.desc(`Clear collected script data, caches, and in-memory indexes.`).destructive()),e(`get_collection_stats`,e=>e.desc(`Get collection, cache, and compression statistics.`).query()),e(`webpack_enumerate`,e=>e.desc(`Enumerate webpack modules in current page and search for keywords.`).string(`searchKeyword`,`Keyword to search across module exports`).boolean(`forceRequireAll`,`Force-require every module`,{default:!1}).number(`maxResults`,`Maximum matching modules`,{default:20,minimum:1,maximum:1e4}).openWorld()),e(`llm_suggest_names`,e=>e.desc(`Use LLM to suggest meaningful names for obfuscated identifiers.`).array(`identifiers`,{type:`string`},`Array of obfuscated identifier names to rename`).required(`code`,`identifiers`).readOnly()),e(`js_deobfuscate_jsvmp`,e=>e.desc(`Deobfuscate JSVMP/VM-protected JavaScript: extract VM bytecode and restore original logic.`).string(`code`,`Obfuscated JavaScript source containing VM/JSVMP patterns`).boolean(`aggressive`,`Use aggressive deobfuscation strategy`,{default:!1}).boolean(`extractInstructions`,`Extract and list VM instructions`,{default:!0}).number(`timeout`,`Deobfuscation timeout in ms`,{default:3e4,minimum:5e3,maximum:12e4}).boolean(`detectOnly`,`Only detect JSVMP without deobfuscating`,{default:!1}).required(`code`)),e(`js_deobfuscate_pipeline`,e=>e.desc(`Three-stage deobfuscation pipeline: preprocess → deobfuscate → humanize.`).string(`code`,`Obfuscated JavaScript source`).boolean(`useWebcrack`,`Apply webcrack after preprocessor stage`,{default:!0}).boolean(`aggressive`,`Enable aggressive transforms in deobfuscator stage`,{default:!1}).boolean(`humanize`,`Run humanizer stage (variable renaming)`,{default:!0}).boolean(`returnStageDetails`,`Include per-stage results in output`,{default:!1}).required(`code`)),e(`js_analyze_vm`,e=>e.desc(`Analyze JSVMP/VM interpreter: dispatch type, handler table, opcode map.`).string(`code`,`JavaScript source containing VM interpreter`).boolean(`extractBytecode`,`Attempt to extract VM bytecode`,{default:!0}).boolean(`mapOpcodes`,`Map opcodes to inferred operations`,{default:!0}).required(`code`)),e(`js_solve_constraints`,e=>e.desc(`Solve opaque predicates and constant expressions in obfuscated code.`).string(`code`,`JavaScript source with opaque predicates or constant conditions`).boolean(`replaceInPlace`,`Replace solved conditions with their constant values`,{default:!0}).number(`maxIterations`,`Maximum solving iterations`,{default:100,minimum:1,maximum:1e4}).required(`code`)),e(`analysis_ast_match`,e=>e.desc(`Match AST nodes by type and optional property filter.`).string(`code`,`JavaScript source code to search`).string(`nodeType`,`AST node type to match (e.g. CallExpression, MemberExpression, FunctionDeclaration)`).string(`filter`,`Optional property filter as JSON path=value, e.g. {"callee.name":"eval"}`).number(`maxResults`,`Maximum matches to return`,{default:50,minimum:1,maximum:500}).required(`code`,`nodeType`)),e(`analysis_deflat_control_flow`,e=>e.desc(`Flatten switch-dispatch control flow back to straight-line code.`).string(`code`,`Obfuscated JavaScript source with CFF pattern`).boolean(`removeDispatcher`,`Remove the dispatcher variable after flattening`,{default:!0}).required(`code`)),e(`analysis_decode_string_array`,e=>e.desc(`Decode literal string-array access back to strings.`).string(`code`,`JavaScript source`).boolean(`removeRotation`,`Apply simple rotation cleanup first`,{default:!0}).number(`maxReplacements`,`Maximum replacements`,{default:200,minimum:1,maximum:1e4}).required(`code`)),e(`js_symbolic_execute`,e=>e.desc(`Symbolic execution of JavaScript: explore all feasible execution paths, collect path constraints, and solve them. Best for control-flow-flattened code with complex branching.`).string(`code`,`JavaScript source to symbolically execute`).number(`maxPaths`,`Maximum paths to explore`,{default:100,minimum:1,maximum:1e3}).number(`maxDepth`,`Maximum traversal depth`,{default:50,minimum:1,maximum:200}).number(`timeout`,`Execution timeout in ms`,{default:3e4,minimum:5e3,maximum:12e4}).boolean(`enableConstraintSolving`,`Run constraint solver on collected paths`,{default:!1}).required(`code`)),e(`js_symbolic_execute_jsvmp`,e=>e.desc(`Symbolic execution of JSVMP bytecode: step through instructions symbolically to infer original logic, constraints, and confidence score. Use after js_analyze_vm to get instructions.`).prop(`instructions`,{type:`array`,description:`JSVMP instructions from js_analyze_vm (array of {opcode, operands, location})`,items:{type:`object`,properties:{opcode:{type:`string`,description:`Instruction opcode`},operands:{type:`array`,description:`Operands`},location:{type:`number`,description:`Bytecode offset`}}}}).enum(`vmType`,[`custom`,`standard`],`VM type hint`,{default:`custom`}).number(`maxSteps`,`Maximum steps to execute`,{default:1e3,minimum:100,maximum:5e4}).number(`timeout`,`Execution timeout in ms`,{default:3e4,minimum:5e3,maximum:12e4}).required(`instructions`))];export{r as t};
1
+ import{t as e}from"./tool-builder-CpLh-UQd.mjs";const t={type:`array`,description:`Remapping rules for unpacked bundle module paths`,items:{type:`object`,properties:{path:{type:`string`,description:`New module path when matched`},pattern:{type:`string`,description:`Match text or regex`},matchType:{type:`string`,enum:[`includes`,`regex`,`exact`],description:`How to interpret pattern`,default:`includes`},target:{type:`string`,enum:[`code`,`path`],description:`Match against source code or module path`,default:`code`}},required:[`path`,`pattern`]}};function n(e){return e.boolean(`unpack`,`Unpack webpack/browserify bundles`,{default:!0}).boolean(`unminify`,`Reformat and unminify code`,{default:!0}).boolean(`jsx`,`Decompile React.createElement to JSX`,{default:!0}).boolean(`mangle`,`Rename obfuscated identifiers`,{default:!1}).string(`outputDir`,`Directory to save deobfuscated artifacts`).boolean(`forceOutput`,`Remove outputDir before saving`,{default:!1}).boolean(`includeModuleCode`,`Include module source in bundle output`,{default:!1}).number(`maxBundleModules`,`Maximum bundle modules to return`,{default:100,minimum:1,maximum:1e4}).prop(`mappings`,t)}const r=[e(`collect_code`,e=>e.desc(`Collect JavaScript from a target website with configurable strategy.`).boolean(`includeInline`,`Include inline scripts`,{default:!0}).boolean(`includeExternal`,`Include external scripts`,{default:!0}).boolean(`includeDynamic`,`Include dynamically loaded scripts`,{default:!1}).enum(`smartMode`,[`summary`,`priority`,`incremental`,`full`],`Collection mode`,{default:`full`}).boolean(`compress`,`Enable compression`,{default:!1}).number(`maxTotalSize`,`Maximum total size in bytes`,{default:2097152,minimum:1024,maximum:10485760}).number(`maxFileSize`,`Maximum single file size in KB`,{default:500,minimum:1,maximum:102400}).array(`priorities`,{type:`string`},`Preferred URL patterns for priority mode`).boolean(`returnSummaryOnly`,`Return summary only`,{default:!1}).string(`url`,`Target URL to collect scripts from`).requiredOpenWorld(`url`)),e(`search_in_scripts`,e=>e.desc(`Search collected scripts by keyword or regex pattern.`).string(`keyword`,`Search keyword or regex pattern`).boolean(`isRegex`,`Treat keyword as regex`,{default:!1}).boolean(`caseSensitive`,`Case-sensitive search`,{default:!1}).number(`contextLines`,`Context lines around each match`,{default:3,minimum:0,maximum:50}).number(`maxMatches`,`Maximum matches`,{default:100,minimum:1,maximum:1e4}).boolean(`returnSummary`,`Return summary instead of full payload`,{default:!1}).number(`maxContextSize`,`Max response size before summary fallback`,{default:5e4,minimum:1e3,maximum:1e6}).required(`keyword`).query()),e(`extract_function_tree`,e=>e.desc(`Extract a function and its dependency tree from collected scripts.`).string(`scriptId`,`Script identifier`).string(`functionName`,`Function name to extract`).number(`maxDepth`,`Maximum dependency traversal depth`,{default:3,minimum:1,maximum:20}).number(`maxSize`,`Maximum output size in KB`,{default:500,minimum:1,maximum:10240}).boolean(`includeComments`,`Include comments in extracted source`,{default:!0}).required(`scriptId`,`functionName`)),e(`deobfuscate`,e=>n(e.desc(`Run webcrack-powered JavaScript deobfuscation with bundle unpacking.`).string(`code`,`Obfuscated JavaScript source`).enum(`engine`,[`auto`,`webcrack`],`Deobfuscation engine`,{default:`auto`}).enum(`llm`,[`gpt-4`,`claude`],`Preferred LLM for analysis`,{default:`gpt-4`}).boolean(`detectOnly`,`Detect only without transformation (webcrack engine)`,{default:!1})).required(`code`)),e(`understand_code`,e=>e.desc(`Run semantic code analysis for structure, behavior, and risks.`).string(`code`,`Source code to analyze`).prop(`context`,{type:`object`,description:`Additional contextual data`}).enum(`focus`,[`structure`,`business`,`security`,`all`],`Analysis focus`,{default:`all`}).required(`code`)),e(`detect_crypto`,e=>e.desc(`Detect cryptographic algorithms and usage patterns in source code.`).string(`code`,`Source code for crypto analysis`).required(`code`).query()),e(`manage_hooks`,e=>e.desc(`Create, inspect, and clear JavaScript runtime hooks.`).enum(`action`,[`create`,`list`,`records`,`clear`],`Hook management operation`).string(`target`,`Hook target identifier`).enum(`type`,[`function`,`xhr`,`fetch`,`websocket`,`localstorage`,`cookie`],`Hook target type`).enum(`hookAction`,[`log`,`block`,`modify`],`Hook behavior`,{default:`log`}).string(`customCode`,`Custom JavaScript hook payload`).string(`hookId`,`Hook identifier`).requiredOpenWorld(`action`)),e(`detect_obfuscation`,e=>e.desc(`Detect obfuscation techniques in JavaScript source.`).string(`code`,`Source code to inspect`).boolean(`generateReport`,`Include human-readable report`,{default:!0}).required(`code`).query()),e(`webcrack_unpack`,e=>n(e.desc(`Run webcrack bundle unpacking and return extracted module graph.`).string(`code`,`Bundled or obfuscated JavaScript source`)).required(`code`)),e(`clear_collected_data`,e=>e.desc(`Clear collected script data, caches, and in-memory indexes.`).destructive()),e(`get_collection_stats`,e=>e.desc(`Get collection, cache, and compression statistics.`).query()),e(`webpack_enumerate`,e=>e.desc(`Enumerate webpack modules in current page and search for keywords.`).string(`searchKeyword`,`Keyword to search across module exports`).boolean(`forceRequireAll`,`Force-require every module`,{default:!1}).number(`maxResults`,`Maximum matching modules`,{default:20,minimum:1,maximum:1e4}).openWorld()),e(`llm_suggest_names`,e=>e.desc(`Use LLM to suggest meaningful names for obfuscated identifiers.`).array(`identifiers`,{type:`string`},`Array of obfuscated identifier names to rename`).required(`code`,`identifiers`).readOnly()),e(`js_deobfuscate_jsvmp`,e=>e.desc(`Deobfuscate JSVMP/VM-protected JavaScript: extract VM bytecode and restore original logic.`).string(`code`,`Obfuscated JavaScript source containing VM/JSVMP patterns`).boolean(`aggressive`,`Use aggressive deobfuscation strategy`,{default:!1}).boolean(`extractInstructions`,`Extract and list VM instructions`,{default:!0}).number(`timeout`,`Deobfuscation timeout in ms`,{default:3e4,minimum:5e3,maximum:12e4}).boolean(`detectOnly`,`Only detect JSVMP without deobfuscating`,{default:!1}).required(`code`)),e(`js_deobfuscate_pipeline`,e=>e.desc(`Three-stage deobfuscation pipeline: preprocess → deobfuscate → humanize.`).string(`code`,`Obfuscated JavaScript source`).boolean(`useWebcrack`,`Apply webcrack after preprocessor stage`,{default:!0}).boolean(`aggressive`,`Enable aggressive transforms in deobfuscator stage`,{default:!1}).boolean(`humanize`,`Run humanizer stage (variable renaming)`,{default:!0}).boolean(`returnStageDetails`,`Include per-stage results in output`,{default:!1}).required(`code`)),e(`js_analyze_vm`,e=>e.desc(`Analyze JSVMP/VM interpreter: dispatch type, handler table, opcode map.`).string(`code`,`JavaScript source containing VM interpreter`).boolean(`extractBytecode`,`Attempt to extract VM bytecode`,{default:!0}).boolean(`mapOpcodes`,`Map opcodes to inferred operations`,{default:!0}).required(`code`)),e(`js_solve_constraints`,e=>e.desc(`Solve opaque predicates and constant expressions in obfuscated code.`).string(`code`,`JavaScript source with opaque predicates or constant conditions`).boolean(`replaceInPlace`,`Replace solved conditions with their constant values`,{default:!0}).number(`maxIterations`,`Maximum solving iterations`,{default:100,minimum:1,maximum:1e4}).required(`code`)),e(`analysis_ast_match`,e=>e.desc(`Match AST nodes by type and optional property filter.`).string(`code`,`JavaScript source code to search`).string(`nodeType`,`AST node type to match (e.g. CallExpression, MemberExpression, FunctionDeclaration)`).string(`filter`,`Optional property filter as JSON path=value, e.g. {"callee.name":"eval"}`).number(`maxResults`,`Maximum matches to return`,{default:50,minimum:1,maximum:500}).required(`code`,`nodeType`)),e(`analysis_deflat_control_flow`,e=>e.desc(`Flatten switch-dispatch control flow back to straight-line code.`).string(`code`,`Obfuscated JavaScript source with CFF pattern`).boolean(`removeDispatcher`,`Remove the dispatcher variable after flattening`,{default:!0}).required(`code`)),e(`analysis_decode_string_array`,e=>e.desc(`Decode literal string-array access back to strings.`).string(`code`,`JavaScript source`).boolean(`removeRotation`,`Apply simple rotation cleanup first`,{default:!0}).number(`maxReplacements`,`Maximum replacements`,{default:200,minimum:1,maximum:1e4}).required(`code`)),e(`js_symbolic_execute`,e=>e.desc(`Symbolic execution of JavaScript: explore all feasible execution paths, collect path constraints, and solve them. Best for control-flow-flattened code with complex branching.`).string(`code`,`JavaScript source to symbolically execute`).number(`maxPaths`,`Maximum paths to explore`,{default:100,minimum:1,maximum:1e3}).number(`maxDepth`,`Maximum traversal depth`,{default:50,minimum:1,maximum:200}).number(`timeout`,`Execution timeout in ms`,{default:3e4,minimum:5e3,maximum:12e4}).boolean(`enableConstraintSolving`,`Run constraint solver on collected paths`,{default:!1}).required(`code`)),e(`js_symbolic_execute_jsvmp`,e=>e.desc(`Symbolic execution of JSVMP bytecode: step through instructions symbolically to infer original logic, constraints, and confidence score. Use after js_analyze_vm to get instructions.`).prop(`instructions`,{type:`array`,description:`JSVMP instructions from js_analyze_vm (array of {opcode, operands, location})`,items:{type:`object`,properties:{opcode:{type:`string`,description:`Instruction opcode`},operands:{type:`array`,description:`Operands`},location:{type:`number`,description:`Bytecode offset`}}}}).enum(`vmType`,[`custom`,`standard`],`VM type hint`,{default:`custom`}).number(`maxSteps`,`Maximum steps to execute`,{default:1e3,minimum:100,maximum:5e4}).number(`timeout`,`Execution timeout in ms`,{default:3e4,minimum:5e3,maximum:12e4}).required(`instructions`))];export{r as t};
@@ -1 +1 @@
1
- import{t as e}from"./tool-builder-qif8M9-K.mjs";const t=[e(`ws_monitor`,e=>e.desc(`Enable or disable WebSocket frame capture.`).enum(`action`,[`enable`,`disable`],`Monitor action`).string(`urlFilter`,`Regex filter for WebSocket URL (action=enable)`).number(`maxFrames`,`Maximum frames in memory (action=enable, default: 1000)`,{default:1e3,minimum:1,maximum:1e5}).required(`action`).destructive()),e(`ws_get_frames`,e=>e.desc(`Get captured WebSocket frames with pagination and payload filter.`).enum(`direction`,[`sent`,`received`,`all`],`Frame direction filter`,{default:`all`}).number(`limit`,`Maximum frames to return`,{default:100,minimum:1,maximum:1e4}).number(`offset`,`Pagination offset`,{default:0,minimum:0}).string(`payloadFilter`,`Regex filter on frame payload`).readOnly()),e(`ws_get_connections`,e=>e.desc(`Get tracked WebSocket connections and frame counts.`).readOnly()),e(`sse_monitor_enable`,e=>e.desc(`Enable SSE monitoring by injecting EventSource interceptor.`).string(`urlFilter`,`Regex filter for EventSource URL`).number(`maxEvents`,`Maximum SSE events in memory`,{default:2e3,minimum:1,maximum:1e5}).boolean(`persistent`,`Survive page navigations via evaluateOnNewDocument`)),e(`sse_get_events`,e=>e.desc(`Get captured SSE events with filters and pagination.`).string(`sourceUrl`,`Filter by EventSource URL`).string(`eventType`,`Filter by SSE event type`).number(`limit`,`Maximum events`,{default:100,minimum:1,maximum:1e4}).number(`offset`,`Pagination offset`,{default:0,minimum:0}).readOnly())];export{t};
1
+ import{t as e}from"./tool-builder-CpLh-UQd.mjs";const t=[e(`ws_monitor`,e=>e.desc(`Enable or disable WebSocket frame capture.`).enum(`action`,[`enable`,`disable`],`Monitor action`).string(`urlFilter`,`Regex filter for WebSocket URL (action=enable)`).number(`maxFrames`,`Maximum frames in memory (action=enable, default: 1000)`,{default:1e3,minimum:1,maximum:1e5}).required(`action`).destructive()),e(`ws_get_frames`,e=>e.desc(`Get captured WebSocket frames with pagination and payload filter.`).enum(`direction`,[`sent`,`received`,`all`],`Frame direction filter`,{default:`all`}).number(`limit`,`Maximum frames to return`,{default:100,minimum:1,maximum:1e4}).number(`offset`,`Pagination offset`,{default:0,minimum:0}).string(`payloadFilter`,`Regex filter on frame payload`).readOnly()),e(`ws_get_connections`,e=>e.desc(`Get tracked WebSocket connections and frame counts.`).readOnly()),e(`sse_monitor_enable`,e=>e.desc(`Enable SSE monitoring by injecting EventSource interceptor.`).string(`urlFilter`,`Regex filter for EventSource URL`).number(`maxEvents`,`Maximum SSE events in memory`,{default:2e3,minimum:1,maximum:1e5}).boolean(`persistent`,`Survive page navigations via evaluateOnNewDocument`)),e(`sse_get_events`,e=>e.desc(`Get captured SSE events with filters and pagination.`).string(`sourceUrl`,`Filter by EventSource URL`).string(`eventType`,`Filter by SSE event type`).number(`limit`,`Maximum events`,{default:100,minimum:1,maximum:1e4}).number(`offset`,`Pagination offset`,{default:0,minimum:0}).readOnly())];export{t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./tool-builder-CpLh-UQd.mjs";const t=[e(`run_macro`,e=>e.desc(`Execute a registered macro by ID with inline progress and atomic bailout.`).string(`macroId`,`Macro ID to execute`).prop(`inputOverrides`,{type:`object`,description:`Per-step input overrides keyed by step ID`,additionalProperties:{type:`object`,additionalProperties:!0}}).required(`macroId`)),e(`list_macros`,e=>e.desc(`List all available macros.`).query())];export{t};
@@ -1,4 +1,4 @@
1
- import{t as e}from"./tool-builder-qif8M9-K.mjs";const t=[e(`debugger_lifecycle`,e=>e.desc(`Enable or disable the CDP debugger session.`).enum(`action`,[`enable`,`disable`],`Action to perform`).required(`action`).idempotent()),e(`debugger_pause`,e=>e.desc(`Pause execution at the next statement.`)),e(`debugger_resume`,e=>e.desc(`Resume execution.`)),e(`debugger_step`,e=>e.desc(`Step execution: into (enter next call), over (skip next call), out (exit current function).`).enum(`direction`,[`into`,`over`,`out`],`Step direction`).required(`direction`)),e(`breakpoint`,e=>e.desc(`Manage breakpoints: code (line/script), XHR (URL pattern), event listener, event category, and exception breakpoints.
1
+ import{t as e}from"./tool-builder-CpLh-UQd.mjs";import{t}from"./definitions-aeRd5DAR.mjs";const n=[e(`debugger_lifecycle`,e=>e.desc(`Enable or disable the CDP debugger session.`).enum(`action`,[`enable`,`disable`],`Action to perform`).required(`action`).idempotent()),e(`debugger_pause`,e=>e.desc(`Pause execution at the next statement.`)),e(`debugger_resume`,e=>e.desc(`Resume execution.`)),e(`debugger_step`,e=>e.desc(`Step execution: into (enter next call), over (skip next call), out (exit current function).`).enum(`direction`,[`into`,`over`,`out`],`Step direction`).required(`direction`)),e(`breakpoint`,e=>e.desc(`Manage breakpoints: code (line/script), XHR (URL pattern), event listener, event category, and exception breakpoints.
2
2
 
3
3
  Actions:
4
4
  - set: Create a breakpoint. Type determines required params.
@@ -10,7 +10,7 @@ Types & params:
10
10
  - xhr: urlPattern (required for set)
11
11
  - event: eventName (required for set), targetName?
12
12
  - event_category: category (required for set)
13
- - exception: state (required for set)`).enum(`action`,[`set`,`remove`,`list`],`Breakpoint operation`).enum(`type`,[`code`,`xhr`,`event`,`event_category`,`exception`],`Breakpoint type (default: code)`,{default:`code`}).string(`url`,`Script URL (type=code, alternative to scriptId)`).string(`scriptId`,`Script ID (type=code)`).number(`lineNumber`,`Line number 0-based (type=code, action=set)`).number(`columnNumber`,`Column number 0-based (type=code)`).string(`condition`,`Conditional expression (type=code)`).string(`urlPattern`,`URL pattern with wildcards (type=xhr, action=set)`).string(`eventName`,`Event name e.g. "click" (type=event, action=set)`).string(`targetName`,`Target name e.g. "WebSocket" (type=event)`).enum(`category`,[`mouse`,`keyboard`,`timer`,`websocket`],`Event category (type=event_category)`).enum(`state`,[`none`,`uncaught`,`all`],`Exception pause state (type=exception)`).string(`breakpointId`,`Breakpoint ID (action=remove)`).required(`action`).idempotent()),e(`get_call_stack`,e=>e.desc(`Get the current call stack.`).query()),e(`debugger_evaluate`,e=>e.desc(`Evaluate a JavaScript expression. context="frame" evaluates in the current call frame (requires paused state); context="global" evaluates in the global context (no pause required).`).enum(`context`,[`frame`,`global`],`Evaluation context`,{default:`frame`}).string(`expression`,`JavaScript expression to evaluate`).string(`callFrameId`,`Call frame ID (for context=frame; from get_call_stack, defaults to current frame)`).requiredOpenWorld(`expression`)),e(`debugger_wait_for_paused`,e=>e.desc(`Wait for debugger pause after setting breakpoints.`).number(`timeout`,`Timeout in milliseconds (default: 30000)`,{default:3e4,minimum:1e3,maximum:12e4}).query()),e(`debugger_get_paused_state`,e=>e.desc(`Get current paused state and reason.`).query()),e(`get_object_properties`,e=>e.desc(`Get properties of an object by objectId.`).string(`objectId`,`Object ID (from get_scope_variables)`).required(`objectId`).query()),e(`get_scope_variables_enhanced`,e=>e.desc(`Enhanced scope variable inspection with deep object traversal.`).string(`callFrameId`,`Call frame ID (from get_call_stack, defaults to current frame)`).boolean(`includeObjectProperties`,`Expand object properties recursively (default: false)`,{default:!1}).number(`maxDepth`,`Maximum traversal depth for nested objects (default: 1)`,{default:1,minimum:1,maximum:10}).boolean(`skipErrors`,`Skip properties that throw errors during access (default: true)`,{default:!0}).query()),e(`debugger_session`,e=>e.desc(`Manage debugger sessions. Actions: save (persist current session to file), load (restore session from file/JSON), export (export session as JSON string), list (list saved sessions in ./debugger-sessions/).`).enum(`action`,[`save`,`load`,`export`,`list`],`Session operation`).string(`filePath`,`File path for save/load actions`).string(`sessionData`,`Session JSON string for load action (alternative to filePath)`).object(`metadata`,{},`Optional metadata for save/export actions`).required(`action`))],n=[e(`watch`,e=>e.desc(`Manage watch expressions for monitoring variable values during debugging.
13
+ - exception: state (required for set)`).enum(`action`,[`set`,`remove`,`list`],`Breakpoint operation`).enum(`type`,[`code`,`xhr`,`event`,`event_category`,`exception`],`Breakpoint type (default: code)`,{default:`code`}).string(`url`,`Script URL (type=code, alternative to scriptId)`).string(`scriptId`,`Script ID (type=code)`).number(`lineNumber`,`Line number 0-based (type=code, action=set)`).number(`columnNumber`,`Column number 0-based (type=code)`).string(`condition`,`Conditional expression (type=code)`).string(`urlPattern`,`URL pattern with wildcards (type=xhr, action=set)`).string(`eventName`,`Event name e.g. "click" (type=event, action=set)`).string(`targetName`,`Target name e.g. "WebSocket" (type=event)`).enum(`category`,[`mouse`,`keyboard`,`timer`,`websocket`],`Event category (type=event_category)`).enum(`state`,[`none`,`uncaught`,`all`],`Exception pause state (type=exception)`).string(`breakpointId`,`Breakpoint ID (action=remove)`).required(`action`).idempotent()),e(`get_call_stack`,e=>e.desc(`Get the current call stack.`).query()),e(`debugger_evaluate`,e=>e.desc(`Evaluate a JavaScript expression. context="frame" evaluates in the current call frame (requires paused state); context="global" evaluates in the global context (no pause required).`).enum(`context`,[`frame`,`global`],`Evaluation context`,{default:`frame`}).string(`expression`,`JavaScript expression to evaluate`).string(`callFrameId`,`Call frame ID (for context=frame; from get_call_stack, defaults to current frame)`).requiredOpenWorld(`expression`)),e(`debugger_wait_for_paused`,e=>e.desc(`Wait for debugger pause after setting breakpoints.`).number(`timeout`,`Timeout in milliseconds (default: 30000)`,{default:3e4,minimum:1e3,maximum:12e4}).query()),e(`debugger_get_paused_state`,e=>e.desc(`Get current paused state and reason.`).query()),e(`get_object_properties`,e=>e.desc(`Get properties of an object by objectId.`).string(`objectId`,`Object ID (from get_scope_variables)`).required(`objectId`).query()),e(`get_scope_variables_enhanced`,e=>e.desc(`Enhanced scope variable inspection with deep object traversal.`).string(`callFrameId`,`Call frame ID (from get_call_stack, defaults to current frame)`).boolean(`includeObjectProperties`,`Expand object properties recursively (default: false)`,{default:!1}).number(`maxDepth`,`Maximum traversal depth for nested objects (default: 1)`,{default:1,minimum:1,maximum:10}).boolean(`skipErrors`,`Skip properties that throw errors during access (default: true)`,{default:!0}).query()),e(`debugger_session`,e=>e.desc(`Manage debugger sessions. Actions: save (persist current session to file), load (restore session from file/JSON), export (export session as JSON string), list (list saved sessions in ./debugger-sessions/).`).enum(`action`,[`save`,`load`,`export`,`list`],`Session operation`).string(`filePath`,`File path for save/load actions`).string(`sessionData`,`Session JSON string for load action (alternative to filePath)`).object(`metadata`,{},`Optional metadata for save/export actions`).required(`action`))],r=[e(`watch`,e=>e.desc(`Manage watch expressions for monitoring variable values during debugging.
14
14
 
15
15
  Actions:
16
16
  - add: Add a watch expression (requires expression)
@@ -23,4 +23,4 @@ Usage:
23
23
  - Skip third-party library c...`).string(`urlPattern`,`URL pattern to blackbox (supports wildcards *)`).required(`urlPattern`).idempotent()),e(`blackbox_add_common`,e=>e.desc(`Blackbox all common libraries (one-click)
24
24
 
25
25
  Includes:
26
- - jquery, react, vue, an...`).idempotent()),e(`blackbox_list`,e=>e.desc(`List script blackbox patterns.`).query())],r=[...t,...n];export{r as t};
26
+ - jquery, react, vue, an...`).idempotent()),e(`blackbox_list`,e=>e.desc(`List script blackbox patterns.`).query())],i=[...n,...r,...t];export{i as t};
@@ -1 +1 @@
1
- import{t as e}from"./tool-builder-qif8M9-K.mjs";const t=[e(`binary_detect_format`,e=>e.desc(`Detect binary payload format and encoding signals.`).enum(`source`,[`base64`,`hex`,`file`,`raw`],`How to interpret input payload`).string(`data`,`Input payload for base64/hex/raw sources`).string(`filePath`,`File path when source=file`).string(`requestId`,`Captured requestId when a response body is available`).required(`source`).query()),e(`binary_decode`,e=>e.desc(`Decode binary payloads into hex, utf8, or json output.`).string(`data`,`Input encoded payload`).enum(`encoding`,[`base64`,`hex`,`url`,`protobuf`,`msgpack`],`Declared input encoding`).enum(`outputFormat`,[`hex`,`utf8`,`json`],`Target output format`,{default:`hex`}).required(`data`,`encoding`).query()),e(`binary_encode`,e=>e.desc(`Encode utf8/hex/json input into base64/hex/url output.`).string(`data`,`Input payload`).enum(`inputFormat`,[`utf8`,`hex`,`json`],`How to parse input`).enum(`outputEncoding`,[`base64`,`hex`,`url`],`Desired output encoding`).required(`data`,`inputFormat`,`outputEncoding`).query()),e(`binary_entropy_analysis`,e=>e.desc(`Compute entropy and byte frequency for a payload.`).enum(`source`,[`base64`,`hex`,`raw`,`file`],`How to interpret input payload`).string(`data`,`Input payload for base64/hex/raw sources`).string(`filePath`,`File path when source=file`).number(`blockSize`,`Block size for per-block entropy`,{default:256,minimum:16,maximum:8192}).required(`source`).query()),e(`protobuf_decode_raw`,e=>e.desc(`Decode protobuf bytes without a schema.`).string(`data`,`Base64-encoded protobuf payload`).number(`maxDepth`,`Maximum recursive decode depth`,{default:5,minimum:1,maximum:20}).required(`data`).query())];export{t};
1
+ import{t as e}from"./tool-builder-CpLh-UQd.mjs";const t=[e(`binary_detect_format`,e=>e.desc(`Detect binary payload format and encoding signals.`).enum(`source`,[`base64`,`hex`,`file`,`raw`],`How to interpret input payload`).string(`data`,`Input payload for base64/hex/raw sources`).string(`filePath`,`File path when source=file`).string(`requestId`,`Captured requestId when a response body is available`).required(`source`).query()),e(`binary_decode`,e=>e.desc(`Decode binary payloads into hex, utf8, or json output.`).string(`data`,`Input encoded payload`).enum(`encoding`,[`base64`,`hex`,`url`,`protobuf`,`msgpack`],`Declared input encoding`).enum(`outputFormat`,[`hex`,`utf8`,`json`],`Target output format`,{default:`hex`}).required(`data`,`encoding`).query()),e(`binary_encode`,e=>e.desc(`Encode utf8/hex/json input into base64/hex/url output.`).string(`data`,`Input payload`).enum(`inputFormat`,[`utf8`,`hex`,`json`],`How to parse input`).enum(`outputEncoding`,[`base64`,`hex`,`url`],`Desired output encoding`).required(`data`,`inputFormat`,`outputEncoding`).query()),e(`binary_entropy_analysis`,e=>e.desc(`Compute entropy and byte frequency for a payload.`).enum(`source`,[`base64`,`hex`,`raw`,`file`],`How to interpret input payload`).string(`data`,`Input payload for base64/hex/raw sources`).string(`filePath`,`File path when source=file`).number(`blockSize`,`Block size for per-block entropy`,{default:256,minimum:16,maximum:8192}).required(`source`).query()),e(`protobuf_decode_raw`,e=>e.desc(`Decode protobuf bytes without a schema.`).string(`data`,`Base64-encoded protobuf payload`).number(`maxDepth`,`Maximum recursive decode depth`,{default:5,minimum:1,maximum:20}).required(`data`).query())];export{t};
@@ -1 +1 @@
1
- import{t as e}from"./tool-builder-qif8M9-K.mjs";const t=[e(`platform_capabilities`,e=>e.desc(`Report platform tool backend availability.`).query()),e(`miniapp_pkg_scan`,e=>e.desc(`Scan local directories for miniapp package files.`).string(`searchPath`,`可选。指定扫描根目录;不提供时使用默认路径(MiniApp/Cache 与 MiniApp/Plugin)。`)),e(`miniapp_pkg_unpack`,e=>e.desc(`Unpack a miniapp package.`).string(`inputPath`,`必填。小程序包文件路径。`).string(`outputDir`,`可选。输出目录;不提供时自动生成 artifacts 临时目录。`).required(`inputPath`)),e(`miniapp_pkg_analyze`,e=>e.desc(`Analyze an unpacked miniapp package.`).string(`unpackedDir`,`必填。已解包目录路径。`).required(`unpackedDir`)),e(`asar_extract`,e=>e.desc(`Extract and list files from an Electron ASAR package.`).string(`inputPath`,`必填。asar 文件路径。`).string(`outputDir`,`可选。提取目录;不提供时自动生成 artifacts 临时目录。`).boolean(`listOnly`,`可选。默认 false;true 时仅列出文件清单,不执行提取。`,{default:!1}).required(`inputPath`)),e(`electron_inspect_app`,e=>e.desc(`Analyze Electron app structure: main/renderer entry, preload, IPC.`).string(`appPath`,`Path to Electron app (.exe or app directory)`).required(`appPath`)),e(`electron_scan_userdata`,e=>e.desc(`Scan a directory for Electron JSON userdata files.`).string(`dirPath`,`Directory path to scan for JSON files`).number(`maxFiles`,`可选。最多读取的 JSON 文件数量。默认 20。`,{default:20,minimum:1,maximum:1e4}).number(`maxFileSizeKB`,`可选。单个文件大小上限(KB)。超限文件跳过。默认 1024。`,{default:1024,minimum:1,maximum:102400}).required(`dirPath`).query()),e(`asar_search`,e=>e.desc(`Grep text patterns inside ASAR archive contents without extraction.`).string(`inputPath`,`必填。ASAR 文件路径。`).string(`pattern`,`必填。正则表达式字符串。`).string(`fileGlob`,`可选。文件扩展名过滤。默认 *.js。`,{default:`*.js`}).number(`maxResults`,`可选。最大返回匹配数。默认 100。`,{default:100,minimum:1,maximum:1e4}).required(`inputPath`,`pattern`).query()),e(`electron_check_fuses`,e=>e.desc(`Read Electron fuse states.`).string(`exePath`,`必填。Electron .exe 文件路径。`).required(`exePath`).query()),e(`electron_patch_fuses`,e=>e.desc(`Patch Electron fuse states.`).string(`exePath`,`Electron .exe file path`).enum(`profile`,[`debug`,`custom`],`Patch profile. "debug" enables debug-related fuses. "custom" requires a fuses object.`,{default:`debug`}).object(`fuses`,{},`For profile="custom". Map of fuse names to ENABLE/DISABLE. E.g. {"RunAsNode": "ENABLE"}.`).boolean(`createBackup`,`Create a .exe.bak backup before patching.`,{default:!0}).required(`exePath`).destructive()),e(`v8_bytecode_decompile`,e=>e.desc(`Decompile or extract strings from V8 bytecode files.`).string(`filePath`,`Path to .jsc bytecode file`).required(`filePath`).query()),e(`electron_launch_debug`,e=>e.desc(`Launch Electron with main and renderer CDP ports.`).string(`exePath`,`Electron .exe file path`).number(`mainPort`,`Main process inspect port.`,{default:9229,minimum:1,maximum:65535}).number(`rendererPort`,`Renderer remote debugging port.`,{default:9222,minimum:1,maximum:65535}).array(`args`,{type:`string`},`Extra command-line arguments.`).boolean(`skipFuseCheck`,`Skip fuse status check.`,{default:!1}).number(`waitMs`,`Milliseconds to wait for CDP ports.`,{default:8e3,minimum:1e3,maximum:12e4}).requiredOpenWorld(`exePath`)),e(`electron_debug_status`,e=>e.desc(`Check status of dual-CDP debug sessions launched by electron_launch_debug.`).string(`sessionId`,`Optional. Check specific session. Omit to list all.`).query()),e(`electron_ipc_sniff`,e=>e.desc(`Monitor Electron IPC messages.`).enum(`action`,[`start`,`dump`,`stop`,`list`,`guide`],`Action to perform.`,{default:`guide`}).number(`port`,`Renderer CDP port (--remote-debugging-port).`,{default:9222,minimum:1,maximum:65535}).string(`sessionId`,`Session ID for dump/stop.`).boolean(`clear`,`Clear captured messages after dump.`,{default:!0}).openWorld())];export{t};
1
+ import{t as e}from"./tool-builder-CpLh-UQd.mjs";const t=[e(`platform_capabilities`,e=>e.desc(`Report platform tool backend availability.`).query()),e(`miniapp_pkg_scan`,e=>e.desc(`Scan local directories for miniapp package files.`).string(`searchPath`,`可选。指定扫描根目录;不提供时使用默认路径(MiniApp/Cache 与 MiniApp/Plugin)。`)),e(`miniapp_pkg_unpack`,e=>e.desc(`Unpack a miniapp package.`).string(`inputPath`,`必填。小程序包文件路径。`).string(`outputDir`,`可选。输出目录;不提供时自动生成 artifacts 临时目录。`).required(`inputPath`)),e(`miniapp_pkg_analyze`,e=>e.desc(`Analyze an unpacked miniapp package.`).string(`unpackedDir`,`必填。已解包目录路径。`).required(`unpackedDir`)),e(`asar_extract`,e=>e.desc(`Extract and list files from an Electron ASAR package.`).string(`inputPath`,`必填。asar 文件路径。`).string(`outputDir`,`可选。提取目录;不提供时自动生成 artifacts 临时目录。`).boolean(`listOnly`,`可选。默认 false;true 时仅列出文件清单,不执行提取。`,{default:!1}).required(`inputPath`)),e(`electron_inspect_app`,e=>e.desc(`Analyze Electron app structure: main/renderer entry, preload, IPC.`).string(`appPath`,`Path to Electron app (.exe or app directory)`).required(`appPath`)),e(`electron_scan_userdata`,e=>e.desc(`Scan a directory for Electron JSON userdata files.`).string(`dirPath`,`Directory path to scan for JSON files`).number(`maxFiles`,`可选。最多读取的 JSON 文件数量。默认 20。`,{default:20,minimum:1,maximum:1e4}).number(`maxFileSizeKB`,`可选。单个文件大小上限(KB)。超限文件跳过。默认 1024。`,{default:1024,minimum:1,maximum:102400}).required(`dirPath`).query()),e(`asar_search`,e=>e.desc(`Grep text patterns inside ASAR archive contents without extraction.`).string(`inputPath`,`必填。ASAR 文件路径。`).string(`pattern`,`必填。正则表达式字符串。`).string(`fileGlob`,`可选。文件扩展名过滤。默认 *.js。`,{default:`*.js`}).number(`maxResults`,`可选。最大返回匹配数。默认 100。`,{default:100,minimum:1,maximum:1e4}).required(`inputPath`,`pattern`).query()),e(`electron_check_fuses`,e=>e.desc(`Read Electron fuse states.`).string(`exePath`,`必填。Electron .exe 文件路径。`).required(`exePath`).query()),e(`electron_patch_fuses`,e=>e.desc(`Patch Electron fuse states.`).string(`exePath`,`Electron .exe file path`).enum(`profile`,[`debug`,`custom`],`Patch profile. "debug" enables debug-related fuses. "custom" requires a fuses object.`,{default:`debug`}).object(`fuses`,{},`For profile="custom". Map of fuse names to ENABLE/DISABLE. E.g. {"RunAsNode": "ENABLE"}.`).boolean(`createBackup`,`Create a .exe.bak backup before patching.`,{default:!0}).required(`exePath`).destructive()),e(`v8_bytecode_decompile`,e=>e.desc(`Decompile or extract strings from V8 bytecode files.`).string(`filePath`,`Path to .jsc bytecode file`).required(`filePath`).query()),e(`electron_launch_debug`,e=>e.desc(`Launch Electron with main and renderer CDP ports.`).string(`exePath`,`Electron .exe file path`).number(`mainPort`,`Main process inspect port.`,{default:9229,minimum:1,maximum:65535}).number(`rendererPort`,`Renderer remote debugging port.`,{default:9222,minimum:1,maximum:65535}).array(`args`,{type:`string`},`Extra command-line arguments.`).boolean(`skipFuseCheck`,`Skip fuse status check.`,{default:!1}).boolean(`skipBinaryCheck`,`Skip Electron binary validation. Use when the target exe has been renamed (e.g. Code.exe, Discord.exe).`,{default:!1}).number(`waitMs`,`Milliseconds to wait for CDP ports.`,{default:8e3,minimum:1e3,maximum:12e4}).requiredOpenWorld(`exePath`)),e(`electron_debug_status`,e=>e.desc(`Check status of dual-CDP debug sessions launched by electron_launch_debug.`).string(`sessionId`,`Optional. Check specific session. Omit to list all.`).query()),e(`electron_ipc_sniff`,e=>e.desc(`Monitor Electron IPC messages.`).enum(`action`,[`start`,`dump`,`stop`,`list`,`guide`],`Action to perform.`,{default:`guide`}).number(`port`,`Renderer CDP port (--remote-debugging-port).`,{default:9222,minimum:1,maximum:65535}).string(`sessionId`,`Session ID for dump/stop.`).boolean(`clear`,`Clear captured messages after dump.`,{default:!0}).openWorld())];export{t};