@jshookmcp/jshook 0.2.2 → 0.2.5

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 (414) hide show
  1. package/LICENSE +661 -661
  2. package/README.md +15 -6
  3. package/README.zh.md +19 -4
  4. package/dist/native/scripts/linux/enum-windows.sh +12 -12
  5. package/dist/native/scripts/macos/enum-windows.applescript +22 -22
  6. package/dist/native/scripts/windows/enum-windows-by-class.ps1 +51 -51
  7. package/dist/native/scripts/windows/enum-windows.ps1 +44 -44
  8. package/dist/native/scripts/windows/inject-dll.ps1 +21 -21
  9. package/dist/packages/extension-sdk/src/bridges/shared.js +2 -2
  10. package/dist/packages/extension-sdk/src/plugin.d.ts +5 -0
  11. package/dist/packages/extension-sdk/src/plugin.js +119 -33
  12. package/dist/packages/extension-sdk/src/workflow.d.ts +156 -0
  13. package/dist/packages/extension-sdk/src/workflow.js +236 -0
  14. package/dist/src/config/search-defaults.js +161 -0
  15. package/dist/src/constants.d.ts +3 -0
  16. package/dist/src/constants.js +4 -1
  17. package/dist/src/index.d.ts +1 -1
  18. package/dist/src/index.js +13 -17
  19. package/dist/src/modules/analyzer/CodeAnalyzer.d.ts +1 -3
  20. package/dist/src/modules/analyzer/CodeAnalyzer.js +16 -28
  21. package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.d.ts +1 -2
  22. package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.js +1 -45
  23. package/dist/src/modules/analyzer/IntelligentAnalyzer.d.ts +1 -37
  24. package/dist/src/modules/analyzer/IntelligentAnalyzer.js +9 -142
  25. package/dist/src/modules/analyzer/PatternDetector.js +3 -3
  26. package/dist/src/modules/analyzer/PatternDetectorAuthPatterns.js +1 -1
  27. package/dist/src/modules/browser/BrowserDiscovery.d.ts +6 -5
  28. package/dist/src/modules/browser/BrowserDiscovery.js +3 -3
  29. package/dist/src/modules/browser/BrowserModeManager.d.ts +1 -1
  30. package/dist/src/modules/browser/BrowserModeManager.js +11 -10
  31. package/dist/src/modules/browser/TabRegistry.js +2 -2
  32. package/dist/src/modules/browser/UnifiedBrowserManager.d.ts +1 -0
  33. package/dist/src/modules/browser/UnifiedBrowserManager.js +19 -4
  34. package/dist/src/modules/captcha/AICaptchaDetector.d.ts +14 -23
  35. package/dist/src/modules/captcha/AICaptchaDetector.js +8 -202
  36. package/dist/src/modules/captcha/CaptchaDetector.d.ts +31 -17
  37. package/dist/src/modules/captcha/CaptchaDetector.js +1 -1
  38. package/dist/src/modules/collector/CodeCache.d.ts +2 -2
  39. package/dist/src/modules/collector/CodeCollector.d.ts +12 -9
  40. package/dist/src/modules/collector/CodeCollector.js +5 -6
  41. package/dist/src/modules/collector/DOMInspector.d.ts +3 -2
  42. package/dist/src/modules/collector/DOMInspector.js +49 -59
  43. package/dist/src/modules/collector/PageController.d.ts +17 -4
  44. package/dist/src/modules/collector/PageController.js +2 -5
  45. package/dist/src/modules/collector/PageScriptCollectors.js +3 -3
  46. package/dist/src/modules/crypto/CryptoDetector.d.ts +1 -4
  47. package/dist/src/modules/crypto/CryptoDetector.js +2 -42
  48. package/dist/src/modules/crypto/CryptoRules.js +1 -1
  49. package/dist/src/modules/debugger/BlackboxManager.js +1 -1
  50. package/dist/src/modules/debugger/DebuggerManager.impl.core.scope.js +1 -1
  51. package/dist/src/modules/debugger/ScriptManager.impl.extract-function-tree.js +5 -3
  52. package/dist/src/modules/debugger/WatchExpressionManager.js +1 -1
  53. package/dist/src/modules/deobfuscator/Deobfuscator.d.ts +1 -4
  54. package/dist/src/modules/deobfuscator/Deobfuscator.js +4 -39
  55. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.d.ts +0 -3
  56. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.js +2 -8
  57. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.d.ts +2 -3
  58. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.js +5 -57
  59. package/dist/src/modules/deobfuscator/JScramblerDeobfuscator.js +3 -4
  60. package/dist/src/modules/deobfuscator/PackerDeobfuscator.js +1 -1
  61. package/dist/src/modules/deobfuscator/VMDeobfuscator.d.ts +2 -10
  62. package/dist/src/modules/deobfuscator/VMDeobfuscator.js +3 -128
  63. package/dist/src/modules/deobfuscator/webcrack.js +15 -2
  64. package/dist/src/modules/emulator/AIEnvironmentAnalyzer.d.ts +5 -8
  65. package/dist/src/modules/emulator/AIEnvironmentAnalyzer.js +10 -102
  66. package/dist/src/modules/emulator/EnvironmentEmulator.d.ts +1 -5
  67. package/dist/src/modules/emulator/EnvironmentEmulator.js +7 -91
  68. package/dist/src/modules/emulator/EnvironmentEmulatorFetch.js +58 -61
  69. package/dist/src/modules/emulator/templates/chrome-env.d.ts +17 -7
  70. package/dist/src/modules/emulator/templates/chrome-env.js +14 -7
  71. package/dist/src/modules/external/ExternalToolRunner.d.ts +1 -1
  72. package/dist/src/modules/external/ExternalToolRunner.js +26 -23
  73. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.d.ts +13 -0
  74. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.js +42 -0
  75. package/dist/src/modules/monitor/FetchInterceptor.d.ts +46 -0
  76. package/dist/src/modules/monitor/FetchInterceptor.js +191 -0
  77. package/dist/src/modules/monitor/PerformanceMonitor.js +8 -7
  78. package/dist/src/modules/process/BaseMemoryManager.d.ts +1 -1
  79. package/dist/src/modules/process/LinuxProcessManager.js +4 -2
  80. package/dist/src/modules/process/MacProcessManager.js +1 -1
  81. package/dist/src/modules/process/MemoryManager.d.ts +1 -1
  82. package/dist/src/modules/process/MemoryManager.js +2 -2
  83. package/dist/src/modules/process/ProcessManager.impl.js +1 -1
  84. package/dist/src/modules/process/memory/AuditTrail.js +1 -1
  85. package/dist/src/modules/process/memory/reader.js +35 -3
  86. package/dist/src/modules/process/memory/regions.enumerate.js +1 -1
  87. package/dist/src/modules/process/memory/regions.protection.js +42 -9
  88. package/dist/src/modules/process/memory/scanner.d.ts +5 -1
  89. package/dist/src/modules/process/memory/scanner.darwin.js +57 -0
  90. package/dist/src/modules/process/memory/scanner.js +88 -4
  91. package/dist/src/modules/process/memory/writer.js +44 -4
  92. package/dist/src/modules/security/ExecutionSandbox.js +7 -8
  93. package/dist/src/modules/stealth/FingerprintManager.js +1 -1
  94. package/dist/src/modules/stealth/StealthScripts.d.ts +4 -2
  95. package/dist/src/modules/stealth/StealthScripts.js +53 -14
  96. package/dist/src/modules/stealth/StealthVerifier.d.ts +1 -1
  97. package/dist/src/modules/stealth/StealthVerifier.js +2 -4
  98. package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.d.ts +14 -0
  99. package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.js +181 -2
  100. package/dist/src/modules/trace/TraceDB.js +12 -6
  101. package/dist/src/modules/trace/TraceRecorder.js +1 -5
  102. package/dist/src/native/AntiCheatDetector.js +67 -16
  103. package/dist/src/native/CodeInjector.js +4 -4
  104. package/dist/src/native/HardwareBreakpoint.js +25 -16
  105. package/dist/src/native/HeapAnalyzer.js +2 -2
  106. package/dist/src/native/MemoryController.js +1 -1
  107. package/dist/src/native/MemoryScanSession.js +2 -2
  108. package/dist/src/native/MemoryScanner.js +4 -8
  109. package/dist/src/native/NativeMemoryManager.impl.js +2 -2
  110. package/dist/src/native/PEAnalyzer.js +14 -15
  111. package/dist/src/native/PointerChainEngine.js +2 -4
  112. package/dist/src/native/ScriptLoader.js +4 -9
  113. package/dist/src/native/Speedhack.js +1 -1
  114. package/dist/src/native/StructureAnalyzer.js +52 -33
  115. package/dist/src/native/Win32API.d.ts +1 -0
  116. package/dist/src/native/Win32API.js +13 -0
  117. package/dist/src/native/Win32Debug.js +19 -19
  118. package/dist/src/native/platform/darwin/DarwinAPI.d.ts +2 -0
  119. package/dist/src/native/platform/darwin/DarwinAPI.js +8 -0
  120. package/dist/src/native/platform/darwin/DarwinMemoryProvider.js +6 -1
  121. package/dist/src/server/MCPServer.context.d.ts +2 -1
  122. package/dist/src/server/MCPServer.d.ts +2 -1
  123. package/dist/src/server/MCPServer.domain.d.ts +1 -1
  124. package/dist/src/server/MCPServer.domain.js +81 -16
  125. package/dist/src/server/MCPServer.js +42 -14
  126. package/dist/src/server/MCPServer.resources.d.ts +2 -0
  127. package/dist/src/server/MCPServer.resources.js +91 -0
  128. package/dist/src/server/MCPServer.search.handlers.call.js +2 -1
  129. package/dist/src/server/MCPServer.search.helpers.js +2 -2
  130. package/dist/src/server/MCPServer.tools.js +1 -1
  131. package/dist/src/server/MCPServer.transport.js +12 -0
  132. package/dist/src/server/ToolCallContextGuard.d.ts +5 -0
  133. package/dist/src/server/ToolCallContextGuard.js +85 -0
  134. package/dist/src/server/ToolRouter.d.ts +26 -10
  135. package/dist/src/server/ToolRouter.intent.d.ts +26 -0
  136. package/dist/src/server/ToolRouter.intent.js +77 -0
  137. package/dist/src/server/ToolRouter.js +103 -284
  138. package/dist/src/server/ToolRouter.policy.d.ts +22 -0
  139. package/dist/src/server/ToolRouter.policy.js +163 -0
  140. package/dist/src/server/ToolRouter.probe.d.ts +17 -0
  141. package/dist/src/server/ToolRouter.probe.js +103 -0
  142. package/dist/src/server/ToolRouter.renderer.d.ts +9 -0
  143. package/dist/src/server/ToolRouter.renderer.js +52 -0
  144. package/dist/src/server/activation/ActivationController.js +15 -12
  145. package/dist/src/server/activation/CompoundConditionEngine.js +1 -1
  146. package/dist/src/server/activation/PredictiveBooster.js +1 -3
  147. package/dist/src/server/domains/analysis/definitions.js +155 -655
  148. package/dist/src/server/domains/analysis/handlers.impl.d.ts +8 -8
  149. package/dist/src/server/domains/analysis/handlers.impl.js +34 -28
  150. package/dist/src/server/domains/analysis/handlers.web-tools.js +4 -3
  151. package/dist/src/server/domains/analysis/manifest.js +6 -4
  152. package/dist/src/server/domains/antidebug/definitions.js +25 -111
  153. package/dist/src/server/domains/browser/definitions.tools.advanced.js +59 -88
  154. package/dist/src/server/domains/browser/definitions.tools.behavior.js +120 -227
  155. package/dist/src/server/domains/browser/definitions.tools.page-core.js +157 -386
  156. package/dist/src/server/domains/browser/definitions.tools.page-system.js +108 -250
  157. package/dist/src/server/domains/browser/definitions.tools.runtime.js +61 -174
  158. package/dist/src/server/domains/browser/definitions.tools.security.js +92 -237
  159. package/dist/src/server/domains/browser/handlers/camoufox-browser.js +3 -2
  160. package/dist/src/server/domains/browser/handlers/captcha-solver.js +3 -3
  161. package/dist/src/server/domains/browser/handlers/dom-query.js +2 -1
  162. package/dist/src/server/domains/browser/handlers/facade-initializer.d.ts +3 -3
  163. package/dist/src/server/domains/browser/handlers/facade-initializer.js +3 -3
  164. package/dist/src/server/domains/browser/handlers/framework-state.js +231 -3
  165. package/dist/src/server/domains/browser/handlers/indexeddb-dump.js +21 -20
  166. package/dist/src/server/domains/browser/handlers/script-management.js +1 -1
  167. package/dist/src/server/domains/browser/handlers/stealth-injection.js +8 -2
  168. package/dist/src/server/domains/browser/handlers.impl.d.ts +15 -12
  169. package/dist/src/server/domains/browser/handlers.impl.js +5 -6
  170. package/dist/src/server/domains/browser/manifest.js +37 -13
  171. package/dist/src/server/domains/coordination/definitions.js +50 -149
  172. package/dist/src/server/domains/coordination/index.d.ts +20 -1
  173. package/dist/src/server/domains/coordination/index.js +133 -0
  174. package/dist/src/server/domains/coordination/manifest.js +15 -0
  175. package/dist/src/server/domains/debugger/definitions.tools.advanced.js +72 -189
  176. package/dist/src/server/domains/debugger/definitions.tools.core.js +114 -288
  177. package/dist/src/server/domains/debugger/manifest.js +9 -2
  178. package/dist/src/server/domains/encoding/definitions.js +43 -153
  179. package/dist/src/server/domains/encoding/handlers.base.js +2 -2
  180. package/dist/src/server/domains/evidence/definitions.d.ts +2 -0
  181. package/dist/src/server/domains/evidence/definitions.js +42 -0
  182. package/dist/src/server/domains/evidence/handlers.d.ts +582 -0
  183. package/dist/src/server/domains/evidence/handlers.js +60 -0
  184. package/dist/src/server/domains/evidence/index.d.ts +2 -0
  185. package/dist/src/server/domains/evidence/index.js +2 -0
  186. package/dist/src/server/domains/evidence/manifest.d.ts +63 -0
  187. package/dist/src/server/domains/evidence/manifest.js +78 -0
  188. package/dist/src/server/domains/graphql/definitions.js +53 -141
  189. package/dist/src/server/domains/graphql/handlers.impl.core.runtime.replay.js +92 -114
  190. package/dist/src/server/domains/hooks/ai-handlers.d.ts +0 -7
  191. package/dist/src/server/domains/hooks/ai-handlers.js +4 -70
  192. package/dist/src/server/domains/hooks/definitions.js +69 -335
  193. package/dist/src/server/domains/hooks/manifest.d.ts +1 -1
  194. package/dist/src/server/domains/hooks/manifest.js +1 -2
  195. package/dist/src/server/domains/instrumentation/definitions.d.ts +2 -0
  196. package/dist/src/server/domains/instrumentation/definitions.js +99 -0
  197. package/dist/src/server/domains/instrumentation/handlers.d.ts +78 -0
  198. package/dist/src/server/domains/instrumentation/handlers.js +206 -0
  199. package/dist/src/server/domains/instrumentation/index.d.ts +2 -0
  200. package/dist/src/server/domains/instrumentation/index.js +2 -0
  201. package/dist/src/server/domains/instrumentation/manifest.d.ts +63 -0
  202. package/dist/src/server/domains/instrumentation/manifest.js +114 -0
  203. package/dist/src/server/domains/macro/definitions.js +16 -43
  204. package/dist/src/server/domains/maintenance/definitions.js +60 -219
  205. package/dist/src/server/domains/maintenance/handlers.d.ts +2 -2
  206. package/dist/src/server/domains/maintenance/handlers.extensions.js +78 -20
  207. package/dist/src/server/domains/maintenance/handlers.js +2 -2
  208. package/dist/src/server/domains/memory/definitions.js +387 -559
  209. package/dist/src/server/domains/memory/handlers/hooks.d.ts +55 -0
  210. package/dist/src/server/domains/memory/handlers/hooks.js +115 -0
  211. package/dist/src/server/domains/memory/handlers/integrity.d.ts +77 -0
  212. package/dist/src/server/domains/memory/handlers/integrity.js +180 -0
  213. package/dist/src/server/domains/memory/handlers/pointer-chain.d.ts +29 -0
  214. package/dist/src/server/domains/memory/handlers/pointer-chain.js +82 -0
  215. package/dist/src/server/domains/memory/handlers/readwrite.d.ts +41 -0
  216. package/dist/src/server/domains/memory/handlers/readwrite.js +78 -0
  217. package/dist/src/server/domains/memory/handlers/scan.d.ts +35 -0
  218. package/dist/src/server/domains/memory/handlers/scan.js +97 -0
  219. package/dist/src/server/domains/memory/handlers/session.d.ts +23 -0
  220. package/dist/src/server/domains/memory/handlers/session.js +49 -0
  221. package/dist/src/server/domains/memory/handlers/structure.d.ts +29 -0
  222. package/dist/src/server/domains/memory/handlers/structure.js +74 -0
  223. package/dist/src/server/domains/memory/handlers.impl.d.ts +49 -54
  224. package/dist/src/server/domains/memory/handlers.impl.js +63 -494
  225. package/dist/src/server/domains/memory/manifest.js +236 -64
  226. package/dist/src/server/domains/native-bridge/definitions.js +54 -192
  227. package/dist/src/server/domains/native-bridge/index.d.ts +1 -0
  228. package/dist/src/server/domains/native-bridge/index.js +2 -1
  229. package/dist/src/server/domains/network/auth-extractor.js +1 -1
  230. package/dist/src/server/domains/network/definitions.js +175 -578
  231. package/dist/src/server/domains/network/handlers.base.core.d.ts +64 -0
  232. package/dist/src/server/domains/network/handlers.base.core.js +623 -0
  233. package/dist/src/server/domains/network/handlers.base.d.ts +2 -124
  234. package/dist/src/server/domains/network/handlers.base.js +3 -878
  235. package/dist/src/server/domains/network/handlers.base.performance.d.ts +63 -0
  236. package/dist/src/server/domains/network/handlers.base.performance.js +193 -0
  237. package/dist/src/server/domains/network/handlers.base.types.d.ts +42 -0
  238. package/dist/src/server/domains/network/handlers.base.types.js +89 -0
  239. package/dist/src/server/domains/network/handlers.impl.core.runtime.d.ts +1 -1
  240. package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.d.ts +21 -0
  241. package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.js +186 -0
  242. package/dist/src/server/domains/network/handlers.impl.core.runtime.js +1 -1
  243. package/dist/src/server/domains/network/manifest.js +15 -0
  244. package/dist/src/server/domains/network/replay.js +1 -4
  245. package/dist/src/server/domains/platform/definitions.js +121 -112
  246. package/dist/src/server/domains/platform/handlers/bridge-handlers.d.ts +5 -1
  247. package/dist/src/server/domains/platform/handlers/bridge-handlers.js +194 -5
  248. package/dist/src/server/domains/platform/handlers/electron-asar-helpers.js +26 -6
  249. package/dist/src/server/domains/platform/handlers/electron-dual-cdp.d.ts +3 -0
  250. package/dist/src/server/domains/platform/handlers/electron-dual-cdp.js +170 -0
  251. package/dist/src/server/domains/platform/handlers/electron-fuse-handler.d.ts +3 -0
  252. package/dist/src/server/domains/platform/handlers/electron-fuse-handler.js +193 -0
  253. package/dist/src/server/domains/platform/handlers/electron-handlers.d.ts +6 -0
  254. package/dist/src/server/domains/platform/handlers/electron-handlers.js +95 -2
  255. package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.d.ts +2 -0
  256. package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.js +370 -0
  257. package/dist/src/server/domains/platform/handlers/electron-userdata-handler.d.ts +2 -0
  258. package/dist/src/server/domains/platform/handlers/electron-userdata-handler.js +78 -0
  259. package/dist/src/server/domains/platform/handlers/miniapp-handlers.d.ts +1 -1
  260. package/dist/src/server/domains/platform/handlers/miniapp-handlers.js +4 -4
  261. package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.d.ts +2 -0
  262. package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.js +207 -0
  263. package/dist/src/server/domains/platform/handlers.d.ts +48 -0
  264. package/dist/src/server/domains/platform/handlers.js +29 -0
  265. package/dist/src/server/domains/platform/manifest.js +38 -0
  266. package/dist/src/server/domains/process/definitions.js +163 -647
  267. package/dist/src/server/domains/process/handlers.base.d.ts +3 -95
  268. package/dist/src/server/domains/process/handlers.base.js +7 -462
  269. package/dist/src/server/domains/process/handlers.base.process.d.ts +61 -0
  270. package/dist/src/server/domains/process/handlers.base.process.js +417 -0
  271. package/dist/src/server/domains/process/handlers.base.types.d.ts +57 -0
  272. package/dist/src/server/domains/process/handlers.base.types.js +50 -0
  273. package/dist/src/server/domains/process/handlers.impl.core.runtime.inject.js +19 -17
  274. package/dist/src/server/domains/process/manifest.js +6 -1
  275. package/dist/src/server/domains/sandbox/definitions.js +11 -33
  276. package/dist/src/server/domains/sandbox/handlers.js +8 -3
  277. package/dist/src/server/domains/shared/ResponseBuilder.d.ts +209 -0
  278. package/dist/src/server/domains/shared/ResponseBuilder.js +48 -0
  279. package/dist/src/server/domains/shared/modules.d.ts +0 -2
  280. package/dist/src/server/domains/shared/modules.js +0 -1
  281. package/dist/src/server/domains/sourcemap/definitions.js +27 -111
  282. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-common.js +7 -2
  283. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-main.js +1 -1
  284. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-parse-base.js +1 -1
  285. package/dist/src/server/domains/sourcemap/manifest.d.ts +1 -1
  286. package/dist/src/server/domains/sourcemap/manifest.js +1 -1
  287. package/dist/src/server/domains/streaming/definitions.js +36 -148
  288. package/dist/src/server/domains/streaming/handlers.impl.streaming-sse.js +163 -164
  289. package/dist/src/server/domains/streaming/handlers.impl.streaming-ws.js +1 -1
  290. package/dist/src/server/domains/trace/TraceSummarizer.d.ts +60 -0
  291. package/dist/src/server/domains/trace/TraceSummarizer.js +112 -0
  292. package/dist/src/server/domains/trace/definitions.tools.js +51 -176
  293. package/dist/src/server/domains/trace/handlers.d.ts +2 -1
  294. package/dist/src/server/domains/trace/handlers.js +62 -9
  295. package/dist/src/server/domains/trace/index.d.ts +2 -1
  296. package/dist/src/server/domains/trace/index.js +2 -1
  297. package/dist/src/server/domains/trace/manifest.js +18 -4
  298. package/dist/src/server/domains/transform/definitions.js +50 -210
  299. package/dist/src/server/domains/transform/handlers.impl.transform-base.js +6 -6
  300. package/dist/src/server/domains/transform/handlers.impl.transform-crypto.js +18 -19
  301. package/dist/src/server/domains/transform/manifest.d.ts +1 -1
  302. package/dist/src/server/domains/transform/manifest.js +1 -1
  303. package/dist/src/server/domains/wasm/definitions.js +55 -232
  304. package/dist/src/server/domains/wasm/handlers.js +3 -3
  305. package/dist/src/server/domains/workflow/definitions.js +144 -414
  306. package/dist/src/server/domains/workflow/handlers.impl.workflow-account-bundle.js +2 -2
  307. package/dist/src/server/domains/workflow/handlers.impl.workflow-base.d.ts +2 -0
  308. package/dist/src/server/domains/workflow/handlers.impl.workflow-base.js +126 -87
  309. package/dist/src/server/domains/workflow/handlers.impl.workflow-batch.js +5 -5
  310. package/dist/src/server/evidence/ReverseEvidenceGraph.d.ts +20 -0
  311. package/dist/src/server/evidence/ReverseEvidenceGraph.js +208 -0
  312. package/dist/src/server/evidence/index.d.ts +2 -0
  313. package/dist/src/server/evidence/index.js +1 -0
  314. package/dist/src/server/evidence/types.d.ts +22 -0
  315. package/dist/src/server/evidence/types.js +1 -0
  316. package/dist/src/server/extensions/ExtensionManager.d.ts +1 -0
  317. package/dist/src/server/extensions/ExtensionManager.discovery.js +72 -9
  318. package/dist/src/server/extensions/ExtensionManager.integrity.js +1 -1
  319. package/dist/src/server/extensions/ExtensionManager.js +193 -40
  320. package/dist/src/server/extensions/ExtensionManager.roots.d.ts +1 -1
  321. package/dist/src/server/extensions/ExtensionManager.roots.js +19 -9
  322. package/dist/src/server/extensions/plugin-config.js +1 -1
  323. package/dist/src/server/extensions/plugin-env.d.ts +1 -1
  324. package/dist/src/server/extensions/plugin-env.js +10 -4
  325. package/dist/src/server/extensions/types.d.ts +17 -0
  326. package/dist/src/server/extensions/types.js +1 -1
  327. package/dist/src/server/http/HttpMiddleware.js +1 -1
  328. package/dist/src/server/instrumentation/EvidenceGraphBridge.d.ts +13 -0
  329. package/dist/src/server/instrumentation/EvidenceGraphBridge.js +150 -0
  330. package/dist/src/server/instrumentation/InstrumentationSession.d.ts +60 -0
  331. package/dist/src/server/instrumentation/InstrumentationSession.js +269 -0
  332. package/dist/src/server/instrumentation/index.d.ts +2 -0
  333. package/dist/src/server/instrumentation/index.js +2 -0
  334. package/dist/src/server/instrumentation/types.d.ts +62 -0
  335. package/dist/src/server/instrumentation/types.js +7 -0
  336. package/dist/src/server/macros/MacroConfigLoader.d.ts +6 -5
  337. package/dist/src/server/macros/MacroConfigLoader.js +61 -59
  338. package/dist/src/server/macros/MacroRunner.js +6 -2
  339. package/dist/src/server/macros/builtins/index.d.ts +2 -3
  340. package/dist/src/server/macros/builtins/index.js +51 -7
  341. package/dist/src/server/plugins/PluginContract.d.ts +1 -1
  342. package/dist/src/server/registry/contracts.d.ts +7 -1
  343. package/dist/src/server/registry/discovery.js +5 -4
  344. package/dist/src/server/registry/ensure-browser-core.js +0 -3
  345. package/dist/src/server/registry/index.js +4 -4
  346. package/dist/src/server/registry/tool-builder.d.ts +46 -0
  347. package/dist/src/server/registry/tool-builder.js +105 -0
  348. package/dist/src/server/sandbox/MCPBridge.d.ts +9 -0
  349. package/dist/src/server/sandbox/MCPBridge.js +22 -0
  350. package/dist/src/server/sandbox/QuickJSSandbox.d.ts +4 -1
  351. package/dist/src/server/sandbox/QuickJSSandbox.js +162 -2
  352. package/dist/src/server/sandbox/types.d.ts +13 -0
  353. package/dist/src/server/search/AffinityGraph.d.ts +7 -1
  354. package/dist/src/server/search/AffinityGraph.js +24 -3
  355. package/dist/src/server/search/EmbeddingWorker.js +5 -3
  356. package/dist/src/server/search/FeedbackTracker.d.ts +9 -0
  357. package/dist/src/server/search/FeedbackTracker.js +26 -0
  358. package/dist/src/server/search/QueryNormalizer.d.ts +6 -0
  359. package/dist/src/server/search/QueryNormalizer.js +94 -0
  360. package/dist/src/server/search/ToolSearchEngineImpl.d.ts +2 -3
  361. package/dist/src/server/search/ToolSearchEngineImpl.js +38 -88
  362. package/dist/src/server/workflows/WorkflowContract.d.ts +24 -0
  363. package/dist/src/server/workflows/WorkflowContract.js +12 -0
  364. package/dist/src/server/workflows/WorkflowEngine.d.ts +1 -0
  365. package/dist/src/server/workflows/WorkflowEngine.js +136 -3
  366. package/dist/src/types/config.d.ts +0 -14
  367. package/dist/src/types/deobfuscator.d.ts +0 -1
  368. package/dist/src/types/index.d.ts +1 -1
  369. package/dist/src/utils/DetailedDataManager.js +2 -0
  370. package/dist/src/utils/RingBuffer.js +5 -5
  371. package/dist/src/utils/TokenBudgetManager.js +1 -1
  372. package/dist/src/utils/UnifiedCacheManager.d.ts +1 -1
  373. package/dist/src/utils/UnifiedCacheManager.js +3 -3
  374. package/dist/src/utils/artifactRetention.js +2 -2
  375. package/dist/src/utils/betterSqlite3.d.ts +11 -0
  376. package/dist/src/utils/betterSqlite3.js +88 -0
  377. package/dist/src/utils/browserExecutable.js +2 -2
  378. package/dist/src/utils/cliFastPath.js +17 -6
  379. package/dist/src/utils/config.js +4 -26
  380. package/dist/src/utils/environmentDoctor.js +138 -11
  381. package/dist/src/utils/outputPaths.js +16 -9
  382. package/dist/src/utils/parallel.js +1 -3
  383. package/package.json +76 -72
  384. package/scripts/postinstall.cjs +37 -37
  385. package/src/native/scripts/linux/enum-windows.sh +12 -12
  386. package/src/native/scripts/macos/enum-windows.applescript +22 -22
  387. package/src/native/scripts/windows/enum-windows-by-class.ps1 +51 -51
  388. package/src/native/scripts/windows/enum-windows.ps1 +44 -44
  389. package/src/native/scripts/windows/inject-dll.ps1 +21 -21
  390. package/workflows/.gitkeep +0 -0
  391. package/dist/src/modules/analyzer/AISummarizer.d.ts +0 -39
  392. package/dist/src/modules/analyzer/AISummarizer.js +0 -122
  393. package/dist/src/modules/hook/AIHookGenerator.d.ts +0 -52
  394. package/dist/src/modules/hook/AIHookGenerator.js +0 -360
  395. package/dist/src/modules/hook/AIHookGeneratorTemplates.d.ts +0 -9
  396. package/dist/src/modules/hook/AIHookGeneratorTemplates.js +0 -157
  397. package/dist/src/server/macros/builtins/deobfuscate-ast-flow.d.ts +0 -2
  398. package/dist/src/server/macros/builtins/deobfuscate-ast-flow.js +0 -25
  399. package/dist/src/server/macros/builtins/unpacker-flow.d.ts +0 -2
  400. package/dist/src/server/macros/builtins/unpacker-flow.js +0 -25
  401. package/dist/src/services/LLMService.d.ts +0 -37
  402. package/dist/src/services/LLMService.js +0 -233
  403. package/dist/src/services/prompts/analysis.d.ts +0 -9
  404. package/dist/src/services/prompts/analysis.js +0 -158
  405. package/dist/src/services/prompts/crypto.d.ts +0 -2
  406. package/dist/src/services/prompts/crypto.js +0 -108
  407. package/dist/src/services/prompts/deobfuscation.d.ts +0 -6
  408. package/dist/src/services/prompts/deobfuscation.js +0 -300
  409. package/dist/src/services/prompts/environment.d.ts +0 -16
  410. package/dist/src/services/prompts/environment.js +0 -372
  411. package/dist/src/services/prompts/intelligence.d.ts +0 -4
  412. package/dist/src/services/prompts/intelligence.js +0 -250
  413. package/dist/src/services/prompts/taint.d.ts +0 -2
  414. package/dist/src/services/prompts/taint.js +0 -54
@@ -1,419 +1,149 @@
1
+ import { tool } from '../../registry/tool-builder.js';
1
2
  export const workflowToolDefinitions = [
2
- {
3
- name: 'web_api_capture_session',
4
- description: 'Full-chain web API capture workflow: navigate → inject interceptors → perform actions → collect requests → extract auth → optionally export HAR + Markdown report.\n\nThis is a composite tool that replaces the following manual sequence:\n1. network_enable\n2. console_inject_fetch_interceptor + console_inject_xhr_interceptor\n3. page_navigate\n4. (perform actions)\n5. network_get_requests\n6. network_extract_auth\n7. network_export_har (optional)\n\n**Captured fetch requests are auto-persisted to localStorage.__capturedAPIs** — survives context compression.\n**Set exportHar/exportReport: true to persist artifacts to disk** before context is compressed.\n\nUSE THIS when you need to capture the complete API surface of a page in one step.',
5
- inputSchema: {
6
- type: 'object',
7
- properties: {
8
- url: {
9
- type: 'string',
10
- description: 'URL to navigate to',
11
- },
12
- waitUntil: {
13
- type: 'string',
14
- enum: ['load', 'domcontentloaded', 'networkidle', 'networkidle2'],
15
- description: 'Navigation wait condition (default: domcontentloaded)',
16
- default: 'domcontentloaded',
17
- },
18
- actions: {
19
- type: 'array',
20
- description: 'Optional sequence of actions to perform after navigation (click, type, wait)',
21
- items: {
22
- type: 'object',
23
- properties: {
24
- type: { type: 'string', enum: ['click', 'type', 'wait', 'evaluate'] },
25
- selector: { type: 'string' },
26
- text: { type: 'string' },
27
- expression: { type: 'string' },
28
- delayMs: { type: 'number' },
29
- },
30
- required: ['type'],
31
- },
32
- },
33
- exportHar: {
34
- type: 'boolean',
35
- description: 'Export captured traffic as HAR after collection (default: true — always persists to disk to survive context compression)',
36
- default: true,
37
- },
38
- harOutputPath: {
39
- type: 'string',
40
- description: 'File path for HAR export (default: auto-generated timestamped path artifacts/har/jshook-capture-<ts>.har)',
41
- },
42
- exportReport: {
43
- type: 'boolean',
44
- description: 'Export workflow summary as Markdown report (default: true)',
45
- default: true,
46
- },
47
- reportOutputPath: {
48
- type: 'string',
49
- description: 'File path for Markdown report export (default: auto-generated timestamped path artifacts/reports/web-api-capture-<ts>.md)',
50
- },
51
- waitAfterActionsMs: {
52
- type: 'number',
53
- description: 'Milliseconds to wait after all actions before collecting (default: 1500)',
54
- default: 1500,
55
- },
3
+ tool('web_api_capture_session')
4
+ .desc('Full-chain web API capture workflow: navigate → inject interceptors → perform actions → collect requests → extract auth → optionally export HAR + Markdown report.\n\nThis is a composite tool that replaces the following manual sequence:\n1. network_enable\n2. console_inject_fetch_interceptor + console_inject_xhr_interceptor\n3. page_navigate\n4. (perform actions)\n5. network_get_requests\n6. network_extract_auth\n7. network_export_har (optional)\n\n**Captured fetch requests are auto-persisted to localStorage.__capturedAPIs** — survives context compression.\n**Set exportHar/exportReport: true to persist artifacts to disk** before context is compressed.\n\nUSE THIS when you need to capture the complete API surface of a page in one step.')
5
+ .string('url', 'URL to navigate to')
6
+ .enum('waitUntil', ['load', 'domcontentloaded', 'networkidle', 'networkidle2'], 'Navigation wait condition', { default: 'domcontentloaded' })
7
+ .array('actions', {
8
+ type: 'object',
9
+ properties: {
10
+ type: { type: 'string', enum: ['click', 'type', 'wait', 'evaluate'] },
11
+ selector: { type: 'string' },
12
+ text: { type: 'string' },
13
+ expression: { type: 'string' },
14
+ delayMs: { type: 'number' },
15
+ },
16
+ required: ['type'],
17
+ }, 'Optional sequence of actions to perform after navigation (click, type, wait)')
18
+ .boolean('exportHar', 'Export captured traffic as HAR after collection (always persists to disk to survive context compression)', { default: true })
19
+ .string('harOutputPath', 'File path for HAR export (default: auto-generated timestamped random path)')
20
+ .boolean('exportReport', 'Export workflow summary as Markdown report', { default: true })
21
+ .string('reportOutputPath', 'File path for Markdown report export (default: auto-generated timestamped random path)')
22
+ .number('waitAfterActionsMs', 'Milliseconds to wait after all actions before collecting', {
23
+ default: 1500,
24
+ })
25
+ .required('url')
26
+ .openWorld()
27
+ .build(),
28
+ tool('js_bundle_search')
29
+ .desc('Fetch a remote JavaScript bundle and search it with multiple named regex patterns in a single call.\n\nFeatures over bundle_search script:\n- Server-side fetch (no browser CORS constraints)\n- Bundle caching (5-min TTL, keyed by URL) — avoids re-downloading 1MB+ files\n- SVG/base64 false-positive filtering (`stripNoise: true` by default)\n- Per-pattern independent context window (`contextBefore`/`contextAfter`)\n- Up to `maxMatches` hits per pattern\n\nExample:\n js_bundle_search({\n url: "https://assets.example.com/main.js",\n patterns: [\n { name: "tier_values", regex: "subscription.plus|user_tier" },\n { name: "payment_apis", regex: "/api/v1/payment/[a-z_]+" },\n { name: "setSubscription", regex: "setSubscriptionPlus\\\\([^)]{0,80}\\\\)" }\n ]\n })')
30
+ .string('url', 'Remote URL of the JavaScript bundle to analyze')
31
+ .array('patterns', {
32
+ type: 'object',
33
+ properties: {
34
+ name: { type: 'string', description: 'Human-readable label for this pattern' },
35
+ regex: { type: 'string', description: 'JavaScript regex string' },
36
+ contextBefore: {
37
+ type: 'number',
38
+ description: 'Characters of context before match (default: 80)',
56
39
  },
57
- required: ['url'],
58
- },
59
- annotations: {
60
- readOnlyHint: false,
61
- destructiveHint: false,
62
- idempotentHint: false,
63
- openWorldHint: true,
64
- },
65
- },
66
- {
67
- name: 'js_bundle_search',
68
- description: 'Fetch a remote JavaScript bundle and search it with multiple named regex patterns in a single call.\n\nFeatures over bundle_search script:\n- Server-side fetch (no browser CORS constraints)\n- Bundle caching (5-min TTL, keyed by URL) — avoids re-downloading 1MB+ files\n- SVG/base64 false-positive filtering (`stripNoise: true` by default)\n- Per-pattern independent context window (`contextBefore`/`contextAfter`)\n- Up to `maxMatches` hits per pattern\n\nExample:\n js_bundle_search({\n url: "https://assets.example.com/main.js",\n patterns: [\n { name: "tier_values", regex: "subscription.plus|user_tier" },\n { name: "payment_apis", regex: "/api/v1/payment/[a-z_]+" },\n { name: "setSubscription", regex: "setSubscriptionPlus\\\\([^)]{0,80}\\\\)" }\n ]\n })',
69
- inputSchema: {
70
- type: 'object',
71
- properties: {
72
- url: {
73
- type: 'string',
74
- description: 'Remote URL of the JavaScript bundle to analyze',
75
- },
76
- patterns: {
77
- type: 'array',
78
- description: 'Named regex patterns to search for',
79
- items: {
80
- type: 'object',
81
- properties: {
82
- name: { type: 'string', description: 'Human-readable label for this pattern' },
83
- regex: { type: 'string', description: 'JavaScript regex string' },
84
- contextBefore: {
85
- type: 'number',
86
- description: 'Characters of context before match (default: 80)',
87
- },
88
- contextAfter: {
89
- type: 'number',
90
- description: 'Characters of context after match (default: 80)',
91
- },
92
- },
93
- required: ['name', 'regex'],
94
- },
95
- },
96
- cacheBundle: {
97
- type: 'boolean',
98
- description: 'Cache the bundle for 5 minutes to avoid re-downloads (default: true)',
99
- default: true,
100
- },
101
- stripNoise: {
102
- type: 'boolean',
103
- description: 'Skip matches inside SVG path data or base64 blobs (default: true)',
104
- default: true,
105
- },
106
- maxMatches: {
107
- type: 'number',
108
- description: 'Maximum matches to return per pattern (default: 10)',
109
- default: 10,
110
- },
111
- },
112
- required: ['url', 'patterns'],
113
- },
114
- annotations: {
115
- readOnlyHint: false,
116
- destructiveHint: false,
117
- idempotentHint: false,
118
- openWorldHint: true,
119
- },
120
- },
121
- {
122
- name: 'page_script_register',
123
- description: 'Register a named reusable JavaScript snippet in the Script Library.\n\nBuilt-in snippets available without registration:\n- `auth_extract` — pull JWT/tokens from localStorage and cookies\n- `bundle_search` — fetch a CDN JS bundle and search it with regexes (params: { url, patterns })\n- `react_fill_form` — fill React controlled inputs (params: { fields: { selector: value } })\n- `dom_find_upgrade_buttons` — scan for upgrade/subscription UI elements\n\nRegistered scripts are executed with `page_script_run`. Scripts may reference `__params__` (set at call time via page_script_run params).',
124
- inputSchema: {
125
- type: 'object',
126
- properties: {
127
- name: {
128
- type: 'string',
129
- description: 'Unique script name (e.g. "my_extractor")',
130
- },
131
- code: {
132
- type: 'string',
133
- description: 'JavaScript expression/IIFE to register. Use `typeof __params__ !== "undefined" ? __params__ : {}` to safely access runtime parameters.',
134
- },
135
- description: {
136
- type: 'string',
137
- description: 'Optional human-readable description of the script',
138
- },
139
- },
140
- required: ['name', 'code'],
141
- },
142
- annotations: {
143
- readOnlyHint: false,
144
- destructiveHint: false,
145
- idempotentHint: false,
146
- openWorldHint: false,
147
- },
148
- },
149
- {
150
- name: 'page_script_run',
151
- description: 'Execute a named script from the Script Library in the current page context.\n\nOptionally inject runtime parameters accessible as `__params__` inside the script.\n\nExample:\n page_script_run({ name: "bundle_search", params: { url: "https://cdn.main.js", patterns: ["tier", "subscription"] } })\n page_script_run({ name: "auth_extract" })',
152
- inputSchema: {
153
- type: 'object',
154
- properties: {
155
- name: {
156
- type: 'string',
157
- description: 'Script name to run (built-in or registered)',
158
- },
159
- params: {
160
- type: 'object',
161
- description: 'Optional parameters injected as __params__ (must be JSON-serializable)',
162
- additionalProperties: true,
163
- },
164
- },
165
- required: ['name'],
166
- },
167
- annotations: {
168
- readOnlyHint: false,
169
- destructiveHint: false,
170
- idempotentHint: false,
171
- openWorldHint: true,
172
- },
173
- },
174
- {
175
- name: 'api_probe_batch',
176
- description: 'Probe multiple API endpoints in a single browser-context fetch burst.\n\nAuto-injects Bearer token from localStorage[token] / localStorage[active_token]. Returns status codes, content types, and response snippets for matching statuses. Skips HTML responses (login-redirect false-positives).\n\nReplaces 5–30 individual page_evaluate fetch calls with one tool call.\n\n**ALWAYS start with OpenAPI/Swagger discovery paths first** — a single 200 response gives you the full API schema:\n "/docs", "/openapi.json", "/api/docs", "/swagger.json", "/api/v1/openapi.json", "/api/openapi.json"\n\nExample:\n api_probe_batch({ baseUrl: "https://chat.qwen.ai", paths: ["/docs", "/openapi.json", "/api/v1/users/me", "/api/v1/chats/", "/api/admin/users"] })',
177
- inputSchema: {
178
- type: 'object',
179
- properties: {
180
- baseUrl: {
181
- type: 'string',
182
- description: 'Base URL prefix (e.g. "https://chat.qwen.ai") — trailing slash will be stripped',
183
- },
184
- paths: {
185
- type: 'array',
186
- items: { type: 'string' },
187
- description: 'Paths to probe (e.g. ["/api/v1/users", "/api/v1/chats"])',
188
- },
189
- method: {
190
- type: 'string',
191
- enum: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'],
192
- description: 'HTTP method for all probes (default: GET)',
193
- default: 'GET',
194
- },
195
- headers: {
196
- type: 'object',
197
- description: 'Additional HTTP headers to include in all requests',
198
- additionalProperties: { type: 'string' },
199
- },
200
- bodyTemplate: {
201
- type: 'string',
202
- description: 'JSON body string to send for POST/PUT/PATCH requests (optional)',
203
- },
204
- includeBodyStatuses: {
205
- type: 'array',
206
- items: { type: 'number' },
207
- description: 'Status codes for which to include response body snippet (default: [200, 201, 204])',
208
- },
209
- maxBodySnippetLength: {
210
- type: 'number',
211
- description: 'Max characters per response body snippet (default: 500)',
212
- default: 500,
213
- },
214
- autoInjectAuth: {
215
- type: 'boolean',
216
- description: 'Auto-inject Bearer token from localStorage (token / active_token / access_token). Default: true.',
217
- default: true,
218
- },
40
+ contextAfter: {
41
+ type: 'number',
42
+ description: 'Characters of context after match (default: 80)',
219
43
  },
220
- required: ['baseUrl', 'paths'],
221
- },
222
- annotations: {
223
- readOnlyHint: false,
224
- destructiveHint: false,
225
- idempotentHint: false,
226
- openWorldHint: true,
227
- },
228
- },
229
- {
230
- name: 'register_account_flow',
231
- description: 'Automated account registration flow with email verification.\n\nHandles the full flow:\n1. Navigate to registration page\n2. Fill in account fields (username, email, password, etc.)\n3. Submit registration form\n4. Open temporary email provider in a new tab\n5. Wait for and extract verification link/code\n6. Navigate to verification URL or fill in the code\n7. Return complete flow result\n\nUSE THIS instead of manually coordinating page_type + page_click + tab_workflow + dom_find_by_text for registration flows.',
232
- inputSchema: {
233
- type: 'object',
234
- properties: {
235
- registerUrl: {
236
- type: 'string',
237
- description: 'URL of the registration page',
238
- },
239
- fields: {
240
- type: 'object',
241
- description: 'Form field values keyed by input name attribute (e.g. {"email": "...", "password": "..."})',
242
- additionalProperties: { type: 'string' },
243
- },
244
- submitSelector: {
245
- type: 'string',
246
- description: 'CSS selector for the submit button (default: "button[type=\'submit\']")',
247
- default: "button[type='submit']",
248
- },
249
- emailProviderUrl: {
250
- type: 'string',
251
- description: 'URL of the temporary email provider page (e.g. https://www.linshiyouxiang.net)',
252
- },
253
- emailSelector: {
254
- type: 'string',
255
- description: 'CSS selector for the current email address element in the provider page',
256
- },
257
- verificationLinkPattern: {
258
- type: 'string',
259
- description: 'URL pattern to identify the verification link in emails (e.g. "/auth/activate", "/verify")',
260
- },
261
- checkboxSelectors: {
262
- type: 'array',
263
- items: { type: 'string' },
264
- description: 'CSS selectors for checkboxes to click before submitting (terms of service, etc.)',
265
- },
266
- timeoutMs: {
267
- type: 'number',
268
- description: 'Total timeout for the entire flow in milliseconds (default: 60000)',
269
- default: 60000,
270
- },
271
- },
272
- required: ['registerUrl', 'fields'],
273
- },
274
- annotations: {
275
- readOnlyHint: false,
276
- destructiveHint: false,
277
- idempotentHint: false,
278
- openWorldHint: true,
279
- },
280
- },
281
- {
282
- name: 'batch_register',
283
- description: 'Batch account registration with concurrency control, retry policies, and idempotency.\n\n' +
284
- 'Executes register_account_flow for multiple accounts in parallel, with:\n' +
285
- '- Configurable max concurrency\n' +
286
- '- Per-account retry with exponential backoff\n' +
287
- '- Idempotent key (email/username) to skip already-succeeded accounts\n' +
288
- '- Aggregated success/failure summary\n\n' +
289
- 'Example:\n' +
290
- ' batch_register({\n' +
291
- ' registerUrl: "https://example.com/register",\n' +
292
- ' accounts: [\n' +
293
- ' { fields: { email: "a@temp.mail", password: "Pass1!" } },\n' +
294
- ' { fields: { email: "b@temp.mail", password: "Pass2!" } }\n' +
295
- ' ],\n' +
296
- ' maxConcurrency: 2\n' +
297
- ' })',
298
- inputSchema: {
299
- type: 'object',
300
- properties: {
301
- registerUrl: {
302
- type: 'string',
303
- description: 'URL of the registration page (shared across all accounts)',
304
- },
305
- accounts: {
306
- type: 'array',
307
- description: 'Array of account configurations',
308
- items: {
309
- type: 'object',
310
- properties: {
311
- fields: {
312
- type: 'object',
313
- description: 'Form field values for this account',
314
- additionalProperties: { type: 'string' },
315
- },
316
- submitSelector: { type: 'string' },
317
- emailProviderUrl: { type: 'string' },
318
- emailSelector: { type: 'string' },
319
- verificationLinkPattern: { type: 'string' },
320
- checkboxSelectors: {
321
- type: 'array',
322
- items: { type: 'string' },
323
- },
324
- },
325
- required: ['fields'],
326
- },
327
- },
328
- maxConcurrency: {
329
- type: 'integer',
330
- description: 'Maximum parallel registrations (default: 2)',
331
- default: 2,
332
- },
333
- maxRetries: {
334
- type: 'integer',
335
- description: 'Max retries per account on failure (default: 1)',
336
- default: 1,
337
- },
338
- retryBackoffMs: {
339
- type: 'number',
340
- description: 'Initial retry backoff in ms (default: 2000)',
341
- default: 2000,
342
- },
343
- timeoutPerAccountMs: {
344
- type: 'number',
345
- description: 'Timeout per individual registration in ms (default: 90000)',
346
- default: 90000,
347
- },
348
- submitSelector: {
349
- type: 'string',
350
- description: 'Default submit button selector for all accounts',
351
- default: "button[type='submit']",
352
- },
353
- },
354
- required: ['registerUrl', 'accounts'],
355
- },
356
- annotations: {
357
- readOnlyHint: false,
358
- destructiveHint: false,
359
- idempotentHint: false,
360
- openWorldHint: true,
361
- },
362
- },
363
- {
364
- name: 'list_extension_workflows',
365
- description: 'List runtime-loaded extension workflows discovered from plugins/ or workflows/ directories, including metadata needed before execution.',
366
- inputSchema: {
367
- type: 'object',
368
- properties: {},
369
- additionalProperties: false,
370
- },
371
- annotations: {
372
- readOnlyHint: true,
373
- destructiveHint: false,
374
- idempotentHint: true,
375
- openWorldHint: false,
376
- },
377
- },
378
- {
379
- name: 'run_extension_workflow',
380
- description: 'Execute a runtime-loaded extension workflow contract by workflowId. Supports config overrides, per-node input overrides, and an optional timeout override.',
381
- inputSchema: {
382
- type: 'object',
383
- properties: {
384
- workflowId: {
385
- type: 'string',
386
- description: 'Registered extension workflow id to execute',
387
- },
388
- profile: {
389
- type: 'string',
390
- description: 'Optional profile label exposed to the workflow execution context',
391
- },
392
- config: {
393
- type: 'object',
394
- description: 'Optional config overrides read through ctx.getConfig(path, fallback)',
395
- additionalProperties: true,
396
- },
397
- nodeInputOverrides: {
398
- type: 'object',
399
- description: 'Optional shallow input overrides keyed by workflow node id',
400
- additionalProperties: {
401
- type: 'object',
402
- additionalProperties: true,
403
- },
404
- },
405
- timeoutMs: {
406
- type: 'number',
407
- description: 'Optional override for total workflow timeout in milliseconds',
408
- },
409
- },
410
- required: ['workflowId'],
411
- },
412
- annotations: {
413
- readOnlyHint: false,
414
- destructiveHint: false,
415
- idempotentHint: false,
416
- openWorldHint: true,
417
44
  },
418
- },
45
+ required: ['name', 'regex'],
46
+ }, 'Named regex patterns to search for')
47
+ .boolean('cacheBundle', 'Cache the bundle for 5 minutes to avoid re-downloads', {
48
+ default: true,
49
+ })
50
+ .boolean('stripNoise', 'Skip matches inside SVG path data or base64 blobs', { default: true })
51
+ .number('maxMatches', 'Maximum matches to return per pattern', { default: 10 })
52
+ .required('url', 'patterns')
53
+ .openWorld()
54
+ .build(),
55
+ tool('page_script_register')
56
+ .desc('Register a named reusable JavaScript snippet in the Script Library.\n\nCore ships built-in snippets such as `auth_extract`, `bundle_search`, `react_fill_form`, and `dom_find_upgrade_buttons`.\n\nRegistered scripts are executed with `page_script_run`. Scripts may reference `__params__` (set at call time via page_script_run params).')
57
+ .string('name', 'Unique script name (e.g. "my_extractor")')
58
+ .string('code', 'JavaScript expression/IIFE to register. Use `typeof __params__ !== "undefined" ? __params__ : {}` to safely access runtime parameters.')
59
+ .string('description', 'Optional human-readable description of the script')
60
+ .required('name', 'code')
61
+ .build(),
62
+ tool('page_script_run')
63
+ .desc('Execute a named script from the Script Library in the current page context.\n\nOptionally inject runtime parameters accessible as `__params__` inside the script.\n\nExample:\n page_script_run({ name: "bundle_search", params: { url: "https://cdn.main.js", patterns: ["tier", "subscription"] } })\n page_script_run({ name: "auth_extract" })')
64
+ .string('name', 'Script name to run (built-in or registered)')
65
+ .prop('params', {
66
+ type: 'object',
67
+ additionalProperties: true,
68
+ description: 'Optional parameters injected as __params__ (must be JSON-serializable)',
69
+ })
70
+ .required('name')
71
+ .openWorld()
72
+ .build(),
73
+ tool('api_probe_batch')
74
+ .desc('Probe multiple API endpoints in a single browser-context fetch burst.\n\nAuto-injects Bearer token from localStorage[token] / localStorage[active_token]. Returns status codes, content types, and response snippets for matching statuses. Skips HTML responses (login-redirect false-positives).\n\nReplaces 5–30 individual page_evaluate fetch calls with one tool call.\n\n**ALWAYS start with OpenAPI/Swagger discovery paths first** — a single 200 response gives you the full API schema:\n "/docs", "/openapi.json", "/api/docs", "/swagger.json", "/api/v1/openapi.json", "/api/openapi.json"\n\nExample:\n api_probe_batch({ baseUrl: "https://chat.qwen.ai", paths: ["/docs", "/openapi.json", "/api/v1/users/me", "/api/v1/chats/", "/api/admin/users"] })')
75
+ .string('baseUrl', 'Base URL prefix (e.g. "https://chat.qwen.ai") — trailing slash will be stripped')
76
+ .array('paths', { type: 'string' }, 'Paths to probe (e.g. ["/api/v1/users", "/api/v1/chats"])')
77
+ .enum('method', ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'], 'HTTP method for all probes', { default: 'GET' })
78
+ .object('headers', { additionalProperties: { type: 'string' } }, 'Additional HTTP headers to include in all requests')
79
+ .string('bodyTemplate', 'JSON body string to send for POST/PUT/PATCH requests (optional)')
80
+ .array('includeBodyStatuses', { type: 'number' }, 'Status codes for which to include response body snippet (default: [200, 201, 204])')
81
+ .number('maxBodySnippetLength', 'Max characters per response body snippet', { default: 500 })
82
+ .boolean('autoInjectAuth', 'Auto-inject Bearer token from localStorage (token / active_token / access_token).', { default: true })
83
+ .required('baseUrl', 'paths')
84
+ .openWorld()
85
+ .build(),
86
+ tool('register_account_flow')
87
+ .desc('Automated account registration flow with email verification.\n\nHandles the full flow:\n1. Navigate to registration page\n2. Fill in account fields (username, email, password, etc.)\n3. Submit registration form\n4. Open temporary email provider in a new tab\n5. Wait for and extract verification link/code\n6. Navigate to verification URL or fill in the code\n7. Return complete flow result\n\nUSE THIS instead of manually coordinating page_type + page_click + tab_workflow + dom_find_by_text for registration flows.')
88
+ .string('registerUrl', 'URL of the registration page')
89
+ .object('fields', { additionalProperties: { type: 'string' } }, 'Form field values keyed by input name attribute (e.g. {"email": "...", "password": "..."})')
90
+ .string('submitSelector', 'CSS selector for the submit button', {
91
+ default: "button[type='submit']",
92
+ })
93
+ .string('emailProviderUrl', 'URL of the temporary email provider page (e.g. https://www.linshiyouxiang.net)')
94
+ .string('emailSelector', 'CSS selector for the current email address element in the provider page')
95
+ .string('verificationLinkPattern', 'URL pattern to identify the verification link in emails (e.g. "/auth/activate", "/verify")')
96
+ .array('checkboxSelectors', { type: 'string' }, 'CSS selectors for checkboxes to click before submitting (terms of service, etc.)')
97
+ .number('timeoutMs', 'Total timeout for the entire flow in milliseconds', { default: 60000 })
98
+ .required('registerUrl', 'fields')
99
+ .openWorld()
100
+ .build(),
101
+ tool('batch_register')
102
+ .desc('Batch account registration with concurrency control, retry policies, and idempotency.\n\nExecutes register_account_flow for multiple accounts in parallel, with:\n- Configurable max concurrency\n- Per-account retry with exponential backoff\n- Idempotent key (email/username) to skip already-succeeded accounts\n- Aggregated success/failure summary\n\nExample:\n batch_register({\n registerUrl: "https://example.com/register",\n accounts: [\n { fields: { email: "a@temp.mail", password: "Pass1!" } },\n { fields: { email: "b@temp.mail", password: "Pass2!" } }\n ],\n maxConcurrency: 2\n })')
103
+ .string('registerUrl', 'URL of the registration page (shared across all accounts)')
104
+ .array('accounts', {
105
+ type: 'object',
106
+ properties: {
107
+ fields: { type: 'object', additionalProperties: { type: 'string' } },
108
+ submitSelector: { type: 'string' },
109
+ emailProviderUrl: { type: 'string' },
110
+ emailSelector: { type: 'string' },
111
+ verificationLinkPattern: { type: 'string' },
112
+ checkboxSelectors: { type: 'array', items: { type: 'string' } },
113
+ },
114
+ required: ['fields'],
115
+ }, 'Array of account configurations')
116
+ .number('maxConcurrency', 'Maximum parallel registrations', { default: 2 })
117
+ .number('maxRetries', 'Max retries per account on failure', { default: 1 })
118
+ .number('retryBackoffMs', 'Initial retry backoff in ms', { default: 2000 })
119
+ .number('timeoutPerAccountMs', 'Timeout per individual registration in ms', { default: 90000 })
120
+ .string('submitSelector', 'Default submit button selector for all accounts', {
121
+ default: "button[type='submit']",
122
+ })
123
+ .required('registerUrl', 'accounts')
124
+ .openWorld()
125
+ .build(),
126
+ tool('list_extension_workflows')
127
+ .desc('List runtime-loaded extension workflows discovered from plugins/ or workflows/ directories, including metadata needed before execution.')
128
+ .readOnly()
129
+ .idempotent()
130
+ .build(),
131
+ tool('run_extension_workflow')
132
+ .desc('Execute a runtime-loaded extension workflow contract by workflowId. Supports config overrides, per-node input overrides, and an optional timeout override.')
133
+ .string('workflowId', 'Registered extension workflow id to execute')
134
+ .string('profile', 'Optional profile label exposed to the workflow execution context')
135
+ .prop('config', {
136
+ type: 'object',
137
+ additionalProperties: true,
138
+ description: 'Optional config overrides read through ctx.getConfig(path, fallback)',
139
+ })
140
+ .prop('nodeInputOverrides', {
141
+ type: 'object',
142
+ additionalProperties: { type: 'object', additionalProperties: true },
143
+ description: 'Optional shallow input overrides keyed by workflow node id',
144
+ })
145
+ .number('timeoutMs', 'Optional override for total workflow timeout in milliseconds')
146
+ .required('workflowId')
147
+ .openWorld()
148
+ .build(),
419
149
  ];
@@ -117,7 +117,7 @@ export class WorkflowHandlersAccountBundle extends WorkflowHandlersApi {
117
117
  throw new Error('Failed to extract verification link result text');
118
118
  }
119
119
  const linkData = JSON.parse(linkText);
120
- if (linkData && linkData.success && typeof linkData.value === 'string') {
120
+ if (linkData?.success && typeof linkData.value === 'string') {
121
121
  verificationUrl = linkData.value;
122
122
  break;
123
123
  }
@@ -244,7 +244,7 @@ export class WorkflowHandlersAccountBundle extends WorkflowHandlersApi {
244
244
  catch (e) {
245
245
  if (e instanceof Error && e.message.startsWith('Blocked:'))
246
246
  throw e;
247
- throw new Error(`DNS resolution failed for "${currentUrl}"`);
247
+ throw new Error(`DNS resolution failed for "${currentUrl}"`, { cause: e });
248
248
  }
249
249
  }
250
250
  if (!fetchUrl.startsWith('https://') && !LOOPBACK_HTTP_URL_RE.test(fetchUrl)) {
@@ -40,6 +40,8 @@ export interface WorkflowHandlersDeps {
40
40
  interface ScriptEntry {
41
41
  code: string;
42
42
  description: string;
43
+ source: 'core' | 'user' | 'plugin';
44
+ protectedFromEviction: boolean;
43
45
  }
44
46
  interface BundleCacheEntry {
45
47
  text: string;