@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
@@ -9,6 +9,7 @@ export interface ToolNode {
9
9
  readonly id: string;
10
10
  readonly toolName: string;
11
11
  readonly input?: Record<string, unknown>;
12
+ readonly inputFrom?: Record<string, string>;
12
13
  readonly timeoutMs?: number;
13
14
  readonly retry?: RetryPolicy;
14
15
  }
@@ -36,11 +37,29 @@ export type WorkflowNode = ToolNode | SequenceNode | ParallelNode | BranchNode;
36
37
  export interface WorkflowExecutionContext {
37
38
  readonly workflowRunId: string;
38
39
  readonly profile: string;
40
+ readonly stepResults: ReadonlyMap<string, unknown>;
39
41
  invokeTool(toolName: string, args: Record<string, unknown>): Promise<unknown>;
40
42
  emitSpan(name: string, attrs?: Record<string, unknown>): void;
41
43
  emitMetric(name: string, value: number, type: 'counter' | 'gauge' | 'histogram', attrs?: Record<string, unknown>): void;
42
44
  getConfig<T = unknown>(path: string, fallback?: T): T;
43
45
  }
46
+ export interface WorkflowRouteStep {
47
+ readonly id: string;
48
+ readonly toolName: string;
49
+ readonly description: string;
50
+ readonly prerequisites: string[];
51
+ readonly parallel?: boolean;
52
+ readonly expectedInputs?: Record<string, string>;
53
+ readonly evidenceNodeType?: string;
54
+ }
55
+ export type WorkflowRouteKind = 'preset' | 'workflow';
56
+ export interface WorkflowRouteMetadata {
57
+ readonly kind: WorkflowRouteKind;
58
+ readonly triggerPatterns: RegExp[];
59
+ readonly steps: WorkflowRouteStep[];
60
+ readonly requiredDomains: string[];
61
+ readonly priority: number;
62
+ }
44
63
  export interface WorkflowContract {
45
64
  readonly kind: 'workflow-contract';
46
65
  readonly version: 1;
@@ -50,6 +69,7 @@ export interface WorkflowContract {
50
69
  readonly tags?: string[];
51
70
  readonly timeoutMs?: number;
52
71
  readonly defaultMaxConcurrency?: number;
72
+ readonly route?: WorkflowRouteMetadata;
53
73
  build(ctx: WorkflowExecutionContext): WorkflowNode;
54
74
  onStart?(ctx: WorkflowExecutionContext): Promise<void> | void;
55
75
  onFinish?(ctx: WorkflowExecutionContext, result: unknown): Promise<void> | void;
@@ -69,10 +89,12 @@ type AnyWorkflowNodeBuilder = WorkflowNodeBuilder<WorkflowNode>;
69
89
  export declare class ToolNodeBuilder extends WorkflowNodeBuilder<ToolNode> {
70
90
  private toolName;
71
91
  private _input?;
92
+ private _inputFrom?;
72
93
  private _retry?;
73
94
  private _timeoutMs?;
74
95
  constructor(id: string, toolName: string);
75
96
  input(input: Record<string, unknown>): this;
97
+ inputFrom(mapping: Record<string, string>): this;
76
98
  retry(policy: RetryPolicy): this;
77
99
  timeout(ms: number): this;
78
100
  build(): ToolNode;
@@ -117,6 +139,7 @@ export declare class WorkflowBuilder {
117
139
  private _tags?;
118
140
  private _timeoutMs?;
119
141
  private _defaultMaxConcurrency?;
142
+ private _route?;
120
143
  private _buildFn;
121
144
  private _onStart?;
122
145
  private _onFinish?;
@@ -126,6 +149,7 @@ export declare class WorkflowBuilder {
126
149
  tags(tags: string[]): this;
127
150
  timeoutMs(timeout: number): this;
128
151
  defaultMaxConcurrency(max: number): this;
152
+ route(route: WorkflowRouteMetadata): this;
129
153
  buildGraph(fn: (ctx: WorkflowExecutionContext) => AnyWorkflowNodeBuilder): this;
130
154
  onStart(fn: (ctx: WorkflowExecutionContext) => Promise<void> | void): this;
131
155
  onFinish(fn: (ctx: WorkflowExecutionContext, result: unknown) => Promise<void> | void): this;
@@ -7,6 +7,7 @@ export class WorkflowNodeBuilder {
7
7
  export class ToolNodeBuilder extends WorkflowNodeBuilder {
8
8
  toolName;
9
9
  _input;
10
+ _inputFrom;
10
11
  _retry;
11
12
  _timeoutMs;
12
13
  constructor(id, toolName) {
@@ -17,6 +18,10 @@ export class ToolNodeBuilder extends WorkflowNodeBuilder {
17
18
  this._input = input;
18
19
  return this;
19
20
  }
21
+ inputFrom(mapping) {
22
+ this._inputFrom = mapping;
23
+ return this;
24
+ }
20
25
  retry(policy) {
21
26
  this._retry = policy;
22
27
  return this;
@@ -31,6 +36,7 @@ export class ToolNodeBuilder extends WorkflowNodeBuilder {
31
36
  id: this.id,
32
37
  toolName: this.toolName,
33
38
  input: this._input,
39
+ inputFrom: this._inputFrom,
34
40
  retry: this._retry,
35
41
  timeoutMs: this._timeoutMs,
36
42
  };
@@ -174,6 +180,7 @@ export class WorkflowBuilder {
174
180
  _tags;
175
181
  _timeoutMs;
176
182
  _defaultMaxConcurrency;
183
+ _route;
177
184
  _buildFn;
178
185
  _onStart;
179
186
  _onFinish;
@@ -198,6 +205,10 @@ export class WorkflowBuilder {
198
205
  this._defaultMaxConcurrency = max;
199
206
  return this;
200
207
  }
208
+ route(route) {
209
+ this._route = route;
210
+ return this;
211
+ }
201
212
  buildGraph(fn) {
202
213
  this._buildFn = (ctx) => fn(ctx).build();
203
214
  return this;
@@ -226,6 +237,7 @@ export class WorkflowBuilder {
226
237
  tags: this._tags,
227
238
  timeoutMs: this._timeoutMs,
228
239
  defaultMaxConcurrency: this._defaultMaxConcurrency,
240
+ route: this._route,
229
241
  build: this._buildFn,
230
242
  onStart: this._onStart,
231
243
  onFinish: this._onFinish,
@@ -16,6 +16,7 @@ interface WorkflowSpan {
16
16
  export interface ExecuteWorkflowOptions {
17
17
  profile?: string;
18
18
  config?: JsonRecord;
19
+ preflightMode?: 'warn' | 'strict' | 'skip';
19
20
  nodeInputOverrides?: Record<string, Record<string, unknown>>;
20
21
  timeoutMs?: number;
21
22
  }
@@ -1,4 +1,14 @@
1
1
  import { randomUUID } from 'node:crypto';
2
+ import { getEffectivePrerequisites } from '../ToolRouter.policy.js';
3
+ import { getRoutingState } from '../ToolRouter.probe.js';
4
+ class PreflightError extends Error {
5
+ warnings;
6
+ constructor(warnings) {
7
+ super(`Workflow preflight failed with ${warnings.length} unsatisfied prerequisite(s)`);
8
+ this.warnings = warnings;
9
+ this.name = 'PreflightError';
10
+ }
11
+ }
2
12
  function extractConfigValue(config, path, fallback) {
3
13
  const segments = path.split('.').filter(Boolean);
4
14
  let current = config;
@@ -77,9 +87,29 @@ function collectSuccessStats(value) {
77
87
  }
78
88
  return { success: 0, failure: 0 };
79
89
  }
80
- async function runToolNode(ctx, node, overrides) {
90
+ function resolveInputFrom(mapping, stepResults) {
91
+ const resolved = {};
92
+ for (const [targetKey, sourceRef] of Object.entries(mapping)) {
93
+ const dotIndex = sourceRef.indexOf('.');
94
+ if (dotIndex === -1) {
95
+ resolved[targetKey] = stepResults.get(sourceRef);
96
+ continue;
97
+ }
98
+ const stepId = sourceRef.slice(0, dotIndex);
99
+ const fieldPath = sourceRef.slice(dotIndex + 1);
100
+ const stepResult = stepResults.get(stepId);
101
+ const payload = parseToolPayload(stepResult) ?? stepResult;
102
+ resolved[targetKey] = payload?.[fieldPath];
103
+ }
104
+ return resolved;
105
+ }
106
+ async function runToolNode(ctx, node, overrides, executionContext) {
107
+ const fromResolved = node.inputFrom
108
+ ? resolveInputFrom(node.inputFrom, executionContext.stepResults)
109
+ : {};
81
110
  const mergedInput = {
82
111
  ...node.input,
112
+ ...fromResolved,
83
113
  ...overrides?.[node.id],
84
114
  };
85
115
  const runAttempt = async () => {
@@ -113,7 +143,7 @@ async function runToolNode(ctx, node, overrides) {
113
143
  }
114
144
  async function runParallelNode(ctx, node, executionContext, options) {
115
145
  const concurrency = Math.max(1, node.maxConcurrency ?? 4);
116
- const results = new Array(node.steps.length);
146
+ const results = Array.from({ length: node.steps.length });
117
147
  let nextIndex = 0;
118
148
  let stopped = false;
119
149
  const worker = async () => {
@@ -177,7 +207,7 @@ async function executeNode(ctx, node, executionContext, options) {
177
207
  let result;
178
208
  switch (node.kind) {
179
209
  case 'tool':
180
- result = await runToolNode(ctx, node, options.nodeInputOverrides);
210
+ result = await runToolNode(ctx, node, options.nodeInputOverrides, executionContext);
181
211
  break;
182
212
  case 'sequence': {
183
213
  const sequenceNode = node;
@@ -210,6 +240,52 @@ async function executeNode(ctx, node, executionContext, options) {
210
240
  executionContext.emitSpan('workflow.node.finish', { nodeId: node.id, kind: node.kind });
211
241
  return result;
212
242
  }
243
+ function collectToolNodes(node) {
244
+ switch (node.kind) {
245
+ case 'tool':
246
+ return [node];
247
+ case 'sequence':
248
+ case 'parallel':
249
+ return node.steps.flatMap((step) => collectToolNodes(step));
250
+ case 'branch':
251
+ return [
252
+ ...collectToolNodes(node.whenTrue),
253
+ ...(node.whenFalse ? collectToolNodes(node.whenFalse) : []),
254
+ ];
255
+ default:
256
+ return [];
257
+ }
258
+ }
259
+ function getEvidenceState(ctx) {
260
+ try {
261
+ const evidenceGraph = ctx.getDomainInstance('evidenceGraph');
262
+ return evidenceGraph
263
+ ? { hasGraph: true, nodeCount: evidenceGraph.nodeCount, edgeCount: evidenceGraph.edgeCount }
264
+ : { hasGraph: false, nodeCount: 0, edgeCount: 0 };
265
+ }
266
+ catch {
267
+ return { hasGraph: false, nodeCount: 0, edgeCount: 0 };
268
+ }
269
+ }
270
+ function collectUnsatisfiedPrerequisites(graph, routingState) {
271
+ const prerequisites = getEffectivePrerequisites();
272
+ const warnings = [];
273
+ for (const toolNode of collectToolNodes(graph)) {
274
+ const toolPrerequisites = prerequisites[toolNode.toolName] ?? [];
275
+ for (const prerequisite of toolPrerequisites) {
276
+ if (prerequisite.check(routingState)) {
277
+ continue;
278
+ }
279
+ warnings.push({
280
+ nodeId: toolNode.id,
281
+ toolName: toolNode.toolName,
282
+ condition: prerequisite.condition,
283
+ fix: prerequisite.fix,
284
+ });
285
+ }
286
+ }
287
+ return warnings;
288
+ }
213
289
  export async function executeExtensionWorkflow(ctx, workflow, options = {}) {
214
290
  const runId = randomUUID();
215
291
  const profile = options.profile ?? String(ctx.baseTier ?? 'workflow');
@@ -241,8 +317,65 @@ export async function executeExtensionWorkflow(ctx, workflow, options = {}) {
241
317
  try {
242
318
  await workflow.onStart?.(executionContext);
243
319
  const graph = workflow.build(executionContext);
320
+ const preflightMode = options.preflightMode ?? 'warn';
321
+ let preflightWarnings = [];
322
+ if (preflightMode === 'skip') {
323
+ executionContext.emitSpan('workflow.preflight', {
324
+ mode: preflightMode,
325
+ skipped: true,
326
+ evidenceState: getEvidenceState(ctx),
327
+ warningCount: 0,
328
+ });
329
+ }
330
+ else {
331
+ try {
332
+ const routingState = await getRoutingState(ctx);
333
+ const evidenceState = getEvidenceState(ctx);
334
+ preflightWarnings = collectUnsatisfiedPrerequisites(graph, routingState);
335
+ executionContext.emitSpan('workflow.preflight', {
336
+ mode: preflightMode,
337
+ routingState,
338
+ evidenceState,
339
+ warningCount: preflightWarnings.length,
340
+ warnings: preflightWarnings,
341
+ });
342
+ if (preflightMode === 'strict' && preflightWarnings.length > 0) {
343
+ throw new PreflightError(preflightWarnings);
344
+ }
345
+ }
346
+ catch (error) {
347
+ if (error instanceof PreflightError) {
348
+ throw error;
349
+ }
350
+ executionContext.emitSpan('workflow.preflight', {
351
+ mode: preflightMode,
352
+ warningCount: 0,
353
+ skipped: true,
354
+ error: error instanceof Error ? error.message : String(error),
355
+ evidenceState: getEvidenceState(ctx),
356
+ });
357
+ }
358
+ }
244
359
  const result = await withTimeout(executeNode(ctx, graph, executionContext, options), options.timeoutMs ?? workflow.timeoutMs ?? 0, `Workflow "${workflow.id}"`);
245
360
  await workflow.onFinish?.(executionContext, result);
361
+ try {
362
+ const evidenceGraph = typeof ctx.getDomainInstance === 'function'
363
+ ? ctx.getDomainInstance('evidenceGraph')
364
+ : undefined;
365
+ if (evidenceGraph && evidenceGraph.nodeCount > 0) {
366
+ stepResults.set('__evidenceSnapshot', evidenceGraph.exportJson());
367
+ executionContext.emitSpan('workflow.evidence.auto-export', {
368
+ nodeCount: evidenceGraph.nodeCount,
369
+ edgeCount: evidenceGraph.edgeCount,
370
+ });
371
+ }
372
+ }
373
+ catch (exportError) {
374
+ executionContext.emitSpan('workflow.evidence.auto-export', {
375
+ skipped: true,
376
+ error: exportError instanceof Error ? exportError.message : String(exportError),
377
+ });
378
+ }
246
379
  return {
247
380
  workflowId: workflow.id,
248
381
  displayName: workflow.displayName,
@@ -1,24 +1,10 @@
1
1
  export interface Config {
2
- llm: LLMConfig;
3
2
  puppeteer: PuppeteerConfig;
4
3
  mcp: MCPConfig;
5
4
  cache: CacheConfig;
6
5
  performance: PerformanceConfig;
7
6
  search: SearchConfig;
8
7
  }
9
- export interface LLMConfig {
10
- provider: 'openai' | 'anthropic';
11
- openai?: {
12
- apiKey: string;
13
- model: string;
14
- baseURL?: string;
15
- };
16
- anthropic?: {
17
- apiKey: string;
18
- model: string;
19
- baseURL?: string;
20
- };
21
- }
22
8
  export interface PuppeteerConfig {
23
9
  headless: boolean;
24
10
  timeout: number;
@@ -6,7 +6,6 @@ export interface Transformation {
6
6
  }
7
7
  export interface DeobfuscateOptions {
8
8
  code: string;
9
- llm?: 'gpt-4' | 'claude';
10
9
  aggressive?: boolean;
11
10
  preserveLogic?: boolean;
12
11
  renameVariables?: boolean;
@@ -1,5 +1,5 @@
1
1
  export type { CodeLocation, Result } from './common.js';
2
- export type { Config, LLMConfig, PuppeteerConfig, MCPConfig, CacheConfig, PerformanceConfig, SearchConfig, SearchQueryCategoryProfileConfig, SearchCjkQueryAliasConfig, SearchIntentToolBoostRuleConfig, } from './config.js';
2
+ export type { Config, PuppeteerConfig, MCPConfig, CacheConfig, PerformanceConfig, SearchConfig, SearchQueryCategoryProfileConfig, SearchCjkQueryAliasConfig, SearchIntentToolBoostRuleConfig, } from './config.js';
3
3
  export type { BrowserContext } from './browser.js';
4
4
  export type { CollectCodeOptions, CodeFile, CollectCodeResult, DependencyGraph, DependencyNode, DependencyEdge, } from './collector.js';
5
5
  export type { ObfuscationType, Transformation, DeobfuscateOptions, DeobfuscateResult, DeobfuscateMappingRule, DeobfuscateSavedArtifact, DeobfuscateBundleModuleSummary, DeobfuscateBundleSummary, } from './deobfuscator.js';
@@ -51,6 +51,8 @@ export class DetailedDataManager {
51
51
  return Object(value)[key];
52
52
  }
53
53
  smartHandle(data, threshold = DETAILED_DATA_SMART_THRESHOLD_BYTES) {
54
+ if (data === null || data === undefined || typeof data !== 'object')
55
+ return data;
54
56
  const { json: jsonStr, size } = this.serializeWithMemo(data);
55
57
  if (size <= threshold) {
56
58
  return data;
@@ -6,7 +6,7 @@ export class RingBuffer {
6
6
  count = 0;
7
7
  constructor(capacity) {
8
8
  this.capacity = capacity;
9
- this.buf = new Array(capacity);
9
+ this.buf = Array.from({ length: capacity });
10
10
  }
11
11
  get length() {
12
12
  return this.count;
@@ -37,7 +37,7 @@ export class RingBuffer {
37
37
  return item;
38
38
  }
39
39
  clear() {
40
- this.buf = new Array(Math.min(64, this.capacity));
40
+ this.buf = Array.from({ length: Math.min(64, this.capacity) });
41
41
  this.head = 0;
42
42
  this.tail = 0;
43
43
  this.count = 0;
@@ -48,14 +48,14 @@ export class RingBuffer {
48
48
  }
49
49
  }
50
50
  toArray() {
51
- const result = new Array(this.count);
51
+ const result = Array.from({ length: this.count });
52
52
  for (let i = 0; i < this.count; i++) {
53
53
  result[i] = this.buf[(this.head + i) % this.buf.length];
54
54
  }
55
55
  return result;
56
56
  }
57
57
  map(fn) {
58
- const result = new Array(this.count);
58
+ const result = Array.from({ length: this.count });
59
59
  for (let i = 0; i < this.count; i++) {
60
60
  result[i] = fn(this.buf[(this.head + i) % this.buf.length], i);
61
61
  }
@@ -63,7 +63,7 @@ export class RingBuffer {
63
63
  }
64
64
  grow() {
65
65
  const newSize = Math.min(this.buf.length * 2, this.capacity);
66
- const newBuf = new Array(newSize);
66
+ const newBuf = Array.from({ length: newSize });
67
67
  for (let i = 0; i < this.count; i++) {
68
68
  newBuf[i] = this.buf[(this.head + i) % this.buf.length];
69
69
  }
@@ -257,7 +257,7 @@ export class TokenBudgetManager {
257
257
  tokens,
258
258
  percentage: Math.round((tokens / this.currentUsage) * 100),
259
259
  }))
260
- .sort((a, b) => b.tokens - a.tokens)
260
+ .toSorted((a, b) => b.tokens - a.tokens)
261
261
  .slice(0, 10);
262
262
  const suggestions = this.generateSuggestions(topTools);
263
263
  const recentCalls = this.toolCallHistory.slice(-20);
@@ -29,7 +29,7 @@ export interface GlobalCacheStats {
29
29
  recommendations: string[];
30
30
  }
31
31
  export declare class UnifiedCacheManager {
32
- private static instance;
32
+ protected static instance: UnifiedCacheManager;
33
33
  private readonly GLOBAL_MAX_SIZE;
34
34
  private readonly LOW_HIT_RATE_THRESHOLD;
35
35
  private caches;
@@ -110,7 +110,7 @@ export class UnifiedCacheManager {
110
110
  if (cacheStats.hitRate !== undefined &&
111
111
  cacheStats.hitRate < avgHitRate * this.LOW_HIT_RATE_THRESHOLD) {
112
112
  const cache = this.caches.get(cacheStats.name);
113
- if (cache && cache.clear) {
113
+ if (cache?.clear) {
114
114
  try {
115
115
  await cache.clear();
116
116
  logger.info(`Cleared low hit rate cache: ${cacheStats.name} (${(cacheStats.hitRate * 100).toFixed(1)}%)`);
@@ -125,10 +125,10 @@ export class UnifiedCacheManager {
125
125
  async cleanupLargeItems() {
126
126
  logger.info('Cleaning up large caches...');
127
127
  const stats = await this.getGlobalStats();
128
- const sortedCaches = stats.caches.sort((a, b) => b.size - a.size);
128
+ const sortedCaches = stats.caches.toSorted((a, b) => b.size - a.size);
129
129
  for (const cacheStats of sortedCaches.slice(0, 2)) {
130
130
  const cache = this.caches.get(cacheStats.name);
131
- if (cache && cache.clear) {
131
+ if (cache?.clear) {
132
132
  try {
133
133
  await cache.clear();
134
134
  logger.info(`Cleared large cache: ${cacheStats.name} (${cacheStats.sizeMB}MB)`);
@@ -38,7 +38,7 @@ export async function cleanupArtifacts(options) {
38
38
  if (cutoff > 0) {
39
39
  const agedOut = remaining
40
40
  .filter((entry) => entry.mtimeMs < cutoff)
41
- .sort((a, b) => a.mtimeMs - b.mtimeMs);
41
+ .toSorted((a, b) => a.mtimeMs - b.mtimeMs);
42
42
  if (agedOut.length > 0) {
43
43
  const agedOutPaths = new Set(agedOut.map((entry) => entry.path));
44
44
  remaining = remaining.filter((entry) => !agedOutPaths.has(entry.path));
@@ -54,7 +54,7 @@ export async function cleanupArtifacts(options) {
54
54
  if (config.maxTotalBytes > 0) {
55
55
  let totalBytes = remaining.reduce((sum, entry) => sum + entry.size, 0);
56
56
  if (totalBytes > config.maxTotalBytes) {
57
- const sizeCandidates = [...remaining].sort((a, b) => a.mtimeMs - b.mtimeMs);
57
+ const sizeCandidates = [...remaining].toSorted((a, b) => a.mtimeMs - b.mtimeMs);
58
58
  const removedPaths = new Set();
59
59
  for (const entry of sizeCandidates) {
60
60
  if (totalBytes <= config.maxTotalBytes)
@@ -0,0 +1,11 @@
1
+ export type BetterSqlite3Issue = 'missing' | 'abi-mismatch' | 'load-failed';
2
+ export interface BetterSqlite3ProbeResult {
3
+ status: 'ok' | 'missing' | 'warn';
4
+ detail: string;
5
+ version: string | null;
6
+ issue?: BetterSqlite3Issue;
7
+ }
8
+ export declare function isBetterSqlite3RelatedError(error: unknown): boolean;
9
+ export declare function classifyBetterSqlite3Issue(error: unknown): BetterSqlite3Issue;
10
+ export declare function formatBetterSqlite3Error(error: unknown): string;
11
+ export declare function probeBetterSqlite3(): BetterSqlite3ProbeResult;
@@ -0,0 +1,88 @@
1
+ import { createRequire } from 'node:module';
2
+ const require = createRequire(import.meta.url);
3
+ const BETTER_SQLITE3_VERSION = '12.6.2';
4
+ const INSTALL_HINT = `pnpm add -O better-sqlite3@${BETTER_SQLITE3_VERSION}`;
5
+ const REBUILD_HINT = 'npm rebuild better-sqlite3 --foreground-scripts';
6
+ function extractErrorMessage(error) {
7
+ if (error instanceof Error) {
8
+ return error.message;
9
+ }
10
+ return String(error);
11
+ }
12
+ export function isBetterSqlite3RelatedError(error) {
13
+ return /better-sqlite3|better_sqlite3\.node|NODE_MODULE_VERSION|compiled against a different Node\.js version/i.test(extractErrorMessage(error));
14
+ }
15
+ export function classifyBetterSqlite3Issue(error) {
16
+ const message = extractErrorMessage(error);
17
+ if (/Cannot find module 'better-sqlite3'|Cannot find package 'better-sqlite3'|better-sqlite3 is not installed/i.test(message)) {
18
+ return 'missing';
19
+ }
20
+ if (/better_sqlite3\.node|NODE_MODULE_VERSION|compiled against a different Node\.js version|module was compiled against/i.test(message)) {
21
+ return 'abi-mismatch';
22
+ }
23
+ return 'load-failed';
24
+ }
25
+ export function formatBetterSqlite3Error(error) {
26
+ const issue = classifyBetterSqlite3Issue(error);
27
+ const message = extractErrorMessage(error);
28
+ if (issue === 'missing') {
29
+ return `better-sqlite3 is not installed. Install the optional trace backend with \`${INSTALL_HINT}\`.`;
30
+ }
31
+ if (issue === 'abi-mismatch') {
32
+ return `better-sqlite3 is installed but its native binary is incompatible with the current Node.js runtime (${process.version}, ABI ${process.versions.modules}). Rebuild it with \`${REBUILD_HINT}\` or reinstall dependencies under the active Node version. Original error: ${message}`;
33
+ }
34
+ return `better-sqlite3 failed to initialize. Try \`${REBUILD_HINT}\` or reinstall dependencies under the active Node version. Original error: ${message}`;
35
+ }
36
+ function readBetterSqlite3Version() {
37
+ try {
38
+ const packageJsonPath = require.resolve('better-sqlite3/package.json');
39
+ const packageJson = require(packageJsonPath);
40
+ return packageJson.version ?? null;
41
+ }
42
+ catch {
43
+ return null;
44
+ }
45
+ }
46
+ export function probeBetterSqlite3() {
47
+ const version = readBetterSqlite3Version();
48
+ if (!version) {
49
+ return {
50
+ status: 'missing',
51
+ detail: `Optional SQLite backend for trace tools is not installed. Install it with: ${INSTALL_HINT}`,
52
+ version: null,
53
+ issue: 'missing',
54
+ };
55
+ }
56
+ try {
57
+ const Database = require('better-sqlite3');
58
+ const db = new Database(':memory:');
59
+ try {
60
+ db.prepare('SELECT 1 AS ok').get();
61
+ }
62
+ finally {
63
+ db.close();
64
+ }
65
+ return {
66
+ status: 'ok',
67
+ detail: `installed (${version}) — native trace backend healthy`,
68
+ version,
69
+ };
70
+ }
71
+ catch (error) {
72
+ const issue = classifyBetterSqlite3Issue(error);
73
+ if (issue === 'missing') {
74
+ return {
75
+ status: 'missing',
76
+ detail: `Optional SQLite backend for trace tools is not installed. Install it with: ${INSTALL_HINT}`,
77
+ version,
78
+ issue,
79
+ };
80
+ }
81
+ return {
82
+ status: 'warn',
83
+ detail: `installed (${version}) but ${formatBetterSqlite3Error(error)}`,
84
+ version,
85
+ issue,
86
+ };
87
+ }
88
+ }
@@ -1,5 +1,5 @@
1
1
  import { existsSync } from 'fs';
2
- import puppeteer from 'rebrowser-puppeteer-core';
2
+ import { executablePath } from 'rebrowser-puppeteer-core';
3
3
  const ENV_KEYS = ['CHROME_PATH', 'PUPPETEER_EXECUTABLE_PATH', 'BROWSER_EXECUTABLE_PATH'];
4
4
  let cachedBrowserPath = null;
5
5
  function resolveFromEnvironment() {
@@ -13,7 +13,7 @@ function resolveFromEnvironment() {
13
13
  }
14
14
  function resolveFromPuppeteer() {
15
15
  try {
16
- const candidate = puppeteer.executablePath('chrome');
16
+ const candidate = executablePath('chrome');
17
17
  if (candidate && existsSync(candidate)) {
18
18
  return candidate;
19
19
  }
@@ -1,13 +1,26 @@
1
1
  import { readFileSync } from 'node:fs';
2
+ import { fileURLToPath } from 'node:url';
2
3
  function getPackageVersion(moduleUrl) {
3
4
  try {
4
- const packageJsonUrl = new URL('../package.json', moduleUrl);
5
- const packageJson = JSON.parse(readFileSync(packageJsonUrl, 'utf8'));
6
- return packageJson.version ?? '0.0.0';
5
+ let dirUrl = new URL('.', moduleUrl);
6
+ for (let i = 0; i < 5; i++) {
7
+ try {
8
+ const candidate = fileURLToPath(new URL('package.json', dirUrl));
9
+ const pkg = JSON.parse(readFileSync(candidate, 'utf8'));
10
+ if (pkg.version)
11
+ return pkg.version;
12
+ }
13
+ catch {
14
+ }
15
+ const parentUrl = new URL('../', dirUrl);
16
+ if (parentUrl.href === dirUrl.href)
17
+ break;
18
+ dirUrl = parentUrl;
19
+ }
7
20
  }
8
21
  catch {
9
- return process.env.npm_package_version ?? '0.0.0';
10
22
  }
23
+ return process.env.npm_package_version ?? '0.0.0';
11
24
  }
12
25
  function buildHelpText(version) {
13
26
  return [
@@ -21,8 +34,6 @@ function buildHelpText(version) {
21
34
  ' Starts the MCP server by default.',
22
35
  '',
23
36
  'Common environment variables:',
24
- ' OPENAI_API_KEY',
25
- ' DEFAULT_LLM_PROVIDER=openai|anthropic',
26
37
  ' MCP_TRANSPORT=stdio|http',
27
38
  ' MCP_TOOL_PROFILE=search|workflow|full',
28
39
  '',