@jshookmcp/jshook 0.2.3 → 0.2.6

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 (583) hide show
  1. package/README.md +14 -5
  2. package/README.zh.md +18 -3
  3. package/dist/packages/extension-sdk/src/bridges/shared.js +2 -2
  4. package/dist/packages/extension-sdk/src/plugin.d.ts +5 -0
  5. package/dist/packages/extension-sdk/src/plugin.js +119 -33
  6. package/dist/packages/extension-sdk/src/workflow.d.ts +171 -0
  7. package/dist/packages/extension-sdk/src/workflow.js +272 -0
  8. package/dist/src/config/search-defaults.js +161 -0
  9. package/dist/src/constants.d.ts +3 -0
  10. package/dist/src/constants.js +4 -1
  11. package/dist/src/index.d.ts +1 -1
  12. package/dist/src/index.js +13 -17
  13. package/dist/src/modules/analyzer/CodeAnalyzer.d.ts +1 -3
  14. package/dist/src/modules/analyzer/CodeAnalyzer.js +16 -28
  15. package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.d.ts +1 -2
  16. package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.js +1 -45
  17. package/dist/src/modules/analyzer/IntelligentAnalyzer.d.ts +1 -37
  18. package/dist/src/modules/analyzer/IntelligentAnalyzer.js +9 -142
  19. package/dist/src/modules/analyzer/PatternDetector.js +3 -3
  20. package/dist/src/modules/analyzer/PatternDetectorAuthPatterns.js +1 -1
  21. package/dist/src/modules/browser/BrowserDiscovery.js +2 -2
  22. package/dist/src/modules/browser/BrowserModeManager.js +11 -10
  23. package/dist/src/modules/browser/BrowserPool.d.ts +49 -0
  24. package/dist/src/modules/browser/BrowserPool.js +288 -0
  25. package/dist/src/modules/browser/TabRegistry.js +2 -2
  26. package/dist/src/modules/browser/UnifiedBrowserManager.d.ts +1 -0
  27. package/dist/src/modules/browser/UnifiedBrowserManager.js +18 -3
  28. package/dist/src/modules/captcha/AICaptchaDetector.d.ts +1 -10
  29. package/dist/src/modules/captcha/AICaptchaDetector.js +7 -201
  30. package/dist/src/modules/collector/CodeCollector.js +4 -5
  31. package/dist/src/modules/collector/DOMInspector.js +48 -58
  32. package/dist/src/modules/collector/PageController.d.ts +17 -4
  33. package/dist/src/modules/collector/PageController.js +2 -5
  34. package/dist/src/modules/collector/PageScriptCollectors.js +3 -3
  35. package/dist/src/modules/crypto/CryptoDetector.d.ts +1 -4
  36. package/dist/src/modules/crypto/CryptoDetector.js +2 -42
  37. package/dist/src/modules/crypto/CryptoRules.js +1 -1
  38. package/dist/src/modules/debugger/BlackboxManager.js +1 -1
  39. package/dist/src/modules/debugger/DebuggerManager.impl.core.scope.js +1 -1
  40. package/dist/src/modules/debugger/ScriptManager.impl.extract-function-tree.js +4 -2
  41. package/dist/src/modules/debugger/WatchExpressionManager.js +1 -1
  42. package/dist/src/modules/deobfuscator/AdvancedDeobfuscator.d.ts +5 -0
  43. package/dist/src/modules/deobfuscator/AdvancedDeobfuscator.js +43 -2
  44. package/dist/src/modules/deobfuscator/Deobfuscator.d.ts +1 -4
  45. package/dist/src/modules/deobfuscator/Deobfuscator.js +9 -39
  46. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.d.ts +0 -3
  47. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.js +2 -8
  48. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.d.ts +1 -2
  49. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.js +3 -55
  50. package/dist/src/modules/deobfuscator/JScramblerDeobfuscator.js +3 -4
  51. package/dist/src/modules/deobfuscator/VMDeobfuscator.d.ts +2 -10
  52. package/dist/src/modules/deobfuscator/VMDeobfuscator.js +3 -128
  53. package/dist/src/modules/deobfuscator/webcrack.js +15 -2
  54. package/dist/src/modules/emulator/AIEnvironmentAnalyzer.d.ts +5 -8
  55. package/dist/src/modules/emulator/AIEnvironmentAnalyzer.js +10 -102
  56. package/dist/src/modules/emulator/EnvironmentEmulator.d.ts +1 -5
  57. package/dist/src/modules/emulator/EnvironmentEmulator.js +7 -91
  58. package/dist/src/modules/emulator/EnvironmentEmulatorFetch.js +58 -61
  59. package/dist/src/modules/emulator/templates/chrome-env.d.ts +17 -7
  60. package/dist/src/modules/emulator/templates/chrome-env.js +14 -7
  61. package/dist/src/modules/external/ExternalToolRunner.js +25 -22
  62. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.compose.js +5 -5
  63. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.network.js +311 -311
  64. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.runtime.js +410 -410
  65. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.storage.js +122 -122
  66. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.d.ts +13 -0
  67. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.js +42 -0
  68. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.dynamic.js +194 -194
  69. package/dist/src/modules/monitor/FetchInterceptor.d.ts +46 -0
  70. package/dist/src/modules/monitor/FetchInterceptor.js +191 -0
  71. package/dist/src/modules/monitor/PerformanceMonitor.js +8 -7
  72. package/dist/src/modules/monitor/PlaywrightNetworkMonitor.js +62 -62
  73. package/dist/src/modules/process/BaseMemoryManager.d.ts +1 -1
  74. package/dist/src/modules/process/LinuxProcessManager.js +2 -0
  75. package/dist/src/modules/process/MacProcessManager.js +25 -25
  76. package/dist/src/modules/process/MemoryManager.d.ts +1 -1
  77. package/dist/src/modules/process/MemoryManager.js +2 -2
  78. package/dist/src/modules/process/memory/AuditTrail.js +1 -1
  79. package/dist/src/modules/process/memory/availability.js +49 -49
  80. package/dist/src/modules/process/memory/injector.js +185 -185
  81. package/dist/src/modules/process/memory/reader.js +85 -53
  82. package/dist/src/modules/process/memory/regions.dump.js +51 -51
  83. package/dist/src/modules/process/memory/regions.enumerate.js +108 -108
  84. package/dist/src/modules/process/memory/regions.modules.js +80 -80
  85. package/dist/src/modules/process/memory/regions.protection.js +148 -115
  86. package/dist/src/modules/process/memory/scanner.d.ts +5 -1
  87. package/dist/src/modules/process/memory/scanner.darwin.js +98 -41
  88. package/dist/src/modules/process/memory/scanner.js +88 -4
  89. package/dist/src/modules/process/memory/scanner.windows.js +124 -124
  90. package/dist/src/modules/process/memory/writer.js +98 -58
  91. package/dist/src/modules/security/ExecutionSandbox.js +51 -52
  92. package/dist/src/modules/stealth/FingerprintManager.js +1 -1
  93. package/dist/src/modules/stealth/StealthScripts.d.ts +1 -0
  94. package/dist/src/modules/stealth/StealthScripts.js +18 -13
  95. package/dist/src/modules/stealth/StealthVerifier.js +1 -3
  96. package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.d.ts +14 -0
  97. package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.js +181 -2
  98. package/dist/src/modules/trace/TraceDB.js +75 -69
  99. package/dist/src/modules/trace/TraceRecorder.js +1 -5
  100. package/dist/src/native/AntiCheatDetector.js +67 -16
  101. package/dist/src/native/CodeInjector.js +3 -3
  102. package/dist/src/native/HardwareBreakpoint.js +24 -15
  103. package/dist/src/native/HeapAnalyzer.js +2 -2
  104. package/dist/src/native/MemoryController.js +1 -1
  105. package/dist/src/native/MemoryScanSession.js +2 -2
  106. package/dist/src/native/MemoryScanner.js +4 -8
  107. package/dist/src/native/NativeMemoryManager.impl.js +2 -2
  108. package/dist/src/native/PEAnalyzer.js +14 -15
  109. package/dist/src/native/PointerChainEngine.js +2 -4
  110. package/dist/src/native/ScriptLoader.js +4 -9
  111. package/dist/src/native/Speedhack.js +1 -1
  112. package/dist/src/native/StructureAnalyzer.js +52 -33
  113. package/dist/src/native/Win32API.d.ts +1 -0
  114. package/dist/src/native/Win32API.js +13 -0
  115. package/dist/src/native/Win32Debug.js +19 -19
  116. package/dist/src/native/platform/darwin/DarwinAPI.d.ts +2 -0
  117. package/dist/src/native/platform/darwin/DarwinAPI.js +8 -0
  118. package/dist/src/native/platform/darwin/DarwinMemoryProvider.js +6 -1
  119. package/dist/src/server/MCPServer.context.d.ts +3 -1
  120. package/dist/src/server/MCPServer.d.ts +2 -1
  121. package/dist/src/server/MCPServer.domain.d.ts +1 -1
  122. package/dist/src/server/MCPServer.domain.js +81 -16
  123. package/dist/src/server/MCPServer.js +41 -14
  124. package/dist/src/server/MCPServer.resources.d.ts +2 -0
  125. package/dist/src/server/MCPServer.resources.js +91 -0
  126. package/dist/src/server/MCPServer.search.handlers.call.js +2 -1
  127. package/dist/src/server/MCPServer.search.helpers.js +1 -1
  128. package/dist/src/server/MCPServer.transport.js +12 -0
  129. package/dist/src/server/ToolCallContextGuard.js +8 -0
  130. package/dist/src/server/ToolRouter.d.ts +25 -9
  131. package/dist/src/server/ToolRouter.intent.d.ts +26 -0
  132. package/dist/src/server/ToolRouter.intent.js +77 -0
  133. package/dist/src/server/ToolRouter.js +103 -284
  134. package/dist/src/server/ToolRouter.policy.d.ts +22 -0
  135. package/dist/src/server/ToolRouter.policy.js +163 -0
  136. package/dist/src/server/ToolRouter.probe.d.ts +17 -0
  137. package/dist/src/server/ToolRouter.probe.js +103 -0
  138. package/dist/src/server/ToolRouter.renderer.d.ts +9 -0
  139. package/dist/src/server/ToolRouter.renderer.js +52 -0
  140. package/dist/src/server/activation/ActivationController.js +15 -12
  141. package/dist/src/server/activation/CompoundConditionEngine.js +1 -1
  142. package/dist/src/server/activation/PredictiveBooster.js +1 -3
  143. package/dist/src/server/domains/analysis/definitions.js +155 -655
  144. package/dist/src/server/domains/analysis/handlers.impl.js +26 -20
  145. package/dist/src/server/domains/analysis/handlers.web-tools.js +2 -1
  146. package/dist/src/server/domains/analysis/manifest.js +6 -4
  147. package/dist/src/server/domains/antidebug/definitions.js +25 -111
  148. package/dist/src/server/domains/browser/definitions.tools.advanced.js +59 -88
  149. package/dist/src/server/domains/browser/definitions.tools.behavior.js +120 -227
  150. package/dist/src/server/domains/browser/definitions.tools.page-core.js +210 -439
  151. package/dist/src/server/domains/browser/definitions.tools.page-system.js +108 -250
  152. package/dist/src/server/domains/browser/definitions.tools.runtime.js +98 -211
  153. package/dist/src/server/domains/browser/definitions.tools.security.js +194 -339
  154. package/dist/src/server/domains/browser/handlers/camoufox-browser.js +3 -2
  155. package/dist/src/server/domains/browser/handlers/captcha-solver.js +3 -3
  156. package/dist/src/server/domains/browser/handlers/dom-query.js +2 -1
  157. package/dist/src/server/domains/browser/handlers/framework-state.js +27 -9
  158. package/dist/src/server/domains/browser/handlers/indexeddb-dump.js +21 -20
  159. package/dist/src/server/domains/browser/handlers/script-management.js +1 -1
  160. package/dist/src/server/domains/browser/handlers/stealth-injection.d.ts +1 -0
  161. package/dist/src/server/domains/browser/handlers/stealth-injection.js +3 -0
  162. package/dist/src/server/domains/browser/handlers.impl.d.ts +1 -2
  163. package/dist/src/server/domains/browser/handlers.impl.js +2 -3
  164. package/dist/src/server/domains/browser/manifest.js +37 -13
  165. package/dist/src/server/domains/coordination/definitions.js +50 -216
  166. package/dist/src/server/domains/coordination/index.d.ts +2 -1
  167. package/dist/src/server/domains/coordination/index.js +1 -0
  168. package/dist/src/server/domains/debugger/definitions.tools.advanced.js +72 -189
  169. package/dist/src/server/domains/debugger/definitions.tools.core.js +114 -288
  170. package/dist/src/server/domains/debugger/manifest.js +9 -2
  171. package/dist/src/server/domains/encoding/definitions.js +43 -153
  172. package/dist/src/server/domains/encoding/handlers.base.js +2 -2
  173. package/dist/src/server/domains/evidence/definitions.d.ts +2 -0
  174. package/dist/src/server/domains/evidence/definitions.js +42 -0
  175. package/dist/src/server/domains/evidence/handlers.d.ts +582 -0
  176. package/dist/src/server/domains/evidence/handlers.js +60 -0
  177. package/dist/src/server/domains/evidence/index.d.ts +2 -0
  178. package/dist/src/server/domains/evidence/index.js +2 -0
  179. package/dist/src/server/domains/evidence/manifest.d.ts +63 -0
  180. package/dist/src/server/domains/evidence/manifest.js +78 -0
  181. package/dist/src/server/domains/graphql/definitions.js +53 -141
  182. package/dist/src/server/domains/graphql/handlers.impl.core.runtime.replay.js +92 -114
  183. package/dist/src/server/domains/graphql/handlers.impl.core.runtime.shared.js +77 -77
  184. package/dist/src/server/domains/hooks/ai-handlers.d.ts +0 -7
  185. package/dist/src/server/domains/hooks/ai-handlers.js +1 -67
  186. package/dist/src/server/domains/hooks/definitions.js +69 -335
  187. package/dist/src/server/domains/hooks/manifest.d.ts +1 -1
  188. package/dist/src/server/domains/hooks/manifest.js +1 -2
  189. package/dist/src/server/domains/instrumentation/definitions.d.ts +2 -0
  190. package/dist/src/server/domains/instrumentation/definitions.js +99 -0
  191. package/dist/src/server/domains/instrumentation/handlers.d.ts +78 -0
  192. package/dist/src/server/domains/instrumentation/handlers.js +206 -0
  193. package/dist/src/server/domains/instrumentation/index.d.ts +2 -0
  194. package/dist/src/server/domains/instrumentation/index.js +2 -0
  195. package/dist/src/server/domains/instrumentation/manifest.d.ts +63 -0
  196. package/dist/src/server/domains/instrumentation/manifest.js +114 -0
  197. package/dist/src/server/domains/macro/definitions.js +16 -43
  198. package/dist/src/server/domains/maintenance/definitions.js +60 -219
  199. package/dist/src/server/domains/maintenance/handlers.extensions.js +78 -20
  200. package/dist/src/server/domains/memory/definitions.js +387 -559
  201. package/dist/src/server/domains/memory/handlers/hooks.d.ts +55 -0
  202. package/dist/src/server/domains/memory/handlers/hooks.js +115 -0
  203. package/dist/src/server/domains/memory/handlers/integrity.d.ts +77 -0
  204. package/dist/src/server/domains/memory/handlers/integrity.js +180 -0
  205. package/dist/src/server/domains/memory/handlers/pointer-chain.d.ts +29 -0
  206. package/dist/src/server/domains/memory/handlers/pointer-chain.js +82 -0
  207. package/dist/src/server/domains/memory/handlers/readwrite.d.ts +41 -0
  208. package/dist/src/server/domains/memory/handlers/readwrite.js +78 -0
  209. package/dist/src/server/domains/memory/handlers/scan.d.ts +35 -0
  210. package/dist/src/server/domains/memory/handlers/scan.js +97 -0
  211. package/dist/src/server/domains/memory/handlers/session.d.ts +23 -0
  212. package/dist/src/server/domains/memory/handlers/session.js +49 -0
  213. package/dist/src/server/domains/memory/handlers/structure.d.ts +29 -0
  214. package/dist/src/server/domains/memory/handlers/structure.js +74 -0
  215. package/dist/src/server/domains/memory/handlers.impl.d.ts +49 -54
  216. package/dist/src/server/domains/memory/handlers.impl.js +63 -494
  217. package/dist/src/server/domains/memory/manifest.js +236 -64
  218. package/dist/src/server/domains/native-bridge/definitions.js +54 -192
  219. package/dist/src/server/domains/native-bridge/index.d.ts +1 -0
  220. package/dist/src/server/domains/native-bridge/index.js +2 -1
  221. package/dist/src/server/domains/network/auth-extractor.js +1 -1
  222. package/dist/src/server/domains/network/definitions.js +175 -578
  223. package/dist/src/server/domains/network/handlers.base.core.d.ts +64 -0
  224. package/dist/src/server/domains/network/handlers.base.core.js +623 -0
  225. package/dist/src/server/domains/network/handlers.base.d.ts +2 -124
  226. package/dist/src/server/domains/network/handlers.base.js +3 -878
  227. package/dist/src/server/domains/network/handlers.base.performance.d.ts +63 -0
  228. package/dist/src/server/domains/network/handlers.base.performance.js +193 -0
  229. package/dist/src/server/domains/network/handlers.base.types.d.ts +42 -0
  230. package/dist/src/server/domains/network/handlers.base.types.js +89 -0
  231. package/dist/src/server/domains/network/handlers.impl.core.runtime.d.ts +1 -1
  232. package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.d.ts +21 -0
  233. package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.js +186 -0
  234. package/dist/src/server/domains/network/handlers.impl.core.runtime.js +1 -1
  235. package/dist/src/server/domains/network/manifest.js +15 -0
  236. package/dist/src/server/domains/network/replay.js +1 -4
  237. package/dist/src/server/domains/platform/definitions.js +121 -112
  238. package/dist/src/server/domains/platform/handlers/bridge-handlers.d.ts +4 -0
  239. package/dist/src/server/domains/platform/handlers/bridge-handlers.js +193 -4
  240. package/dist/src/server/domains/platform/handlers/electron-asar-helpers.js +26 -6
  241. package/dist/src/server/domains/platform/handlers/electron-dual-cdp.d.ts +3 -0
  242. package/dist/src/server/domains/platform/handlers/electron-dual-cdp.js +170 -0
  243. package/dist/src/server/domains/platform/handlers/electron-fuse-handler.d.ts +3 -0
  244. package/dist/src/server/domains/platform/handlers/electron-fuse-handler.js +193 -0
  245. package/dist/src/server/domains/platform/handlers/electron-handlers.d.ts +6 -0
  246. package/dist/src/server/domains/platform/handlers/electron-handlers.js +95 -2
  247. package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.d.ts +2 -0
  248. package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.js +370 -0
  249. package/dist/src/server/domains/platform/handlers/electron-userdata-handler.d.ts +2 -0
  250. package/dist/src/server/domains/platform/handlers/electron-userdata-handler.js +78 -0
  251. package/dist/src/server/domains/platform/handlers/miniapp-handlers.js +3 -3
  252. package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.d.ts +2 -0
  253. package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.js +207 -0
  254. package/dist/src/server/domains/platform/handlers.d.ts +48 -0
  255. package/dist/src/server/domains/platform/handlers.js +29 -0
  256. package/dist/src/server/domains/platform/manifest.js +38 -0
  257. package/dist/src/server/domains/process/definitions.js +163 -647
  258. package/dist/src/server/domains/process/handlers.base.d.ts +3 -95
  259. package/dist/src/server/domains/process/handlers.base.js +7 -462
  260. package/dist/src/server/domains/process/handlers.base.process.d.ts +61 -0
  261. package/dist/src/server/domains/process/handlers.base.process.js +417 -0
  262. package/dist/src/server/domains/process/handlers.base.types.d.ts +57 -0
  263. package/dist/src/server/domains/process/handlers.base.types.js +50 -0
  264. package/dist/src/server/domains/process/handlers.impl.core.runtime.inject.js +18 -16
  265. package/dist/src/server/domains/process/manifest.js +6 -1
  266. package/dist/src/server/domains/sandbox/definitions.js +11 -33
  267. package/dist/src/server/domains/sandbox/handlers.js +8 -3
  268. package/dist/src/server/domains/shared/ResponseBuilder.d.ts +209 -0
  269. package/dist/src/server/domains/shared/ResponseBuilder.js +48 -0
  270. package/dist/src/server/domains/shared/modules.d.ts +0 -2
  271. package/dist/src/server/domains/shared/modules.js +0 -1
  272. package/dist/src/server/domains/shared-state-board/definitions.d.ts +2 -0
  273. package/dist/src/server/domains/shared-state-board/definitions.js +78 -0
  274. package/dist/src/server/domains/shared-state-board/handlers.impl.d.ts +58 -0
  275. package/dist/src/server/domains/shared-state-board/handlers.impl.js +419 -0
  276. package/dist/src/server/domains/shared-state-board/index.d.ts +2 -0
  277. package/dist/src/server/domains/shared-state-board/index.js +2 -0
  278. package/dist/src/server/domains/shared-state-board/manifest.d.ts +57 -0
  279. package/dist/src/server/domains/shared-state-board/manifest.js +74 -0
  280. package/dist/src/server/domains/sourcemap/definitions.js +27 -111
  281. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-common.js +7 -2
  282. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-main.js +1 -1
  283. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-parse-base.js +1 -1
  284. package/dist/src/server/domains/sourcemap/manifest.d.ts +1 -1
  285. package/dist/src/server/domains/sourcemap/manifest.js +1 -1
  286. package/dist/src/server/domains/streaming/definitions.js +36 -148
  287. package/dist/src/server/domains/streaming/handlers.impl.streaming-sse.js +163 -164
  288. package/dist/src/server/domains/streaming/handlers.impl.streaming-ws.js +1 -1
  289. package/dist/src/server/domains/trace/TraceSummarizer.js +8 -5
  290. package/dist/src/server/domains/trace/definitions.tools.js +51 -206
  291. package/dist/src/server/domains/trace/handlers.js +10 -12
  292. package/dist/src/server/domains/trace/index.d.ts +2 -1
  293. package/dist/src/server/domains/trace/index.js +2 -1
  294. package/dist/src/server/domains/trace/manifest.js +15 -3
  295. package/dist/src/server/domains/transform/definitions.js +50 -210
  296. package/dist/src/server/domains/transform/handlers.impl.transform-base.js +108 -108
  297. package/dist/src/server/domains/transform/handlers.impl.transform-crypto.js +18 -19
  298. package/dist/src/server/domains/transform/manifest.d.ts +1 -1
  299. package/dist/src/server/domains/transform/manifest.js +1 -1
  300. package/dist/src/server/domains/wasm/definitions.js +55 -232
  301. package/dist/src/server/domains/wasm/handlers.js +1 -1
  302. package/dist/src/server/domains/workflow/definitions.js +144 -414
  303. package/dist/src/server/domains/workflow/handlers.impl.workflow-account-bundle.js +1 -1
  304. package/dist/src/server/domains/workflow/handlers.impl.workflow-api.js +51 -51
  305. package/dist/src/server/domains/workflow/handlers.impl.workflow-base.d.ts +2 -0
  306. package/dist/src/server/domains/workflow/handlers.impl.workflow-base.js +126 -87
  307. package/dist/src/server/domains/workflow/handlers.impl.workflow-batch.js +5 -5
  308. package/dist/src/server/evidence/ReverseEvidenceGraph.d.ts +20 -0
  309. package/dist/src/server/evidence/ReverseEvidenceGraph.js +208 -0
  310. package/dist/src/server/evidence/index.d.ts +2 -0
  311. package/dist/src/server/evidence/index.js +1 -0
  312. package/dist/src/server/evidence/types.d.ts +22 -0
  313. package/dist/src/server/evidence/types.js +1 -0
  314. package/dist/src/server/extensions/ExtensionManager.d.ts +1 -0
  315. package/dist/src/server/extensions/ExtensionManager.discovery.js +72 -9
  316. package/dist/src/server/extensions/ExtensionManager.integrity.js +1 -1
  317. package/dist/src/server/extensions/ExtensionManager.js +193 -40
  318. package/dist/src/server/extensions/ExtensionManager.roots.d.ts +1 -1
  319. package/dist/src/server/extensions/ExtensionManager.roots.js +4 -4
  320. package/dist/src/server/extensions/plugin-config.js +1 -1
  321. package/dist/src/server/extensions/plugin-env.d.ts +1 -1
  322. package/dist/src/server/extensions/plugin-env.js +10 -4
  323. package/dist/src/server/extensions/types.d.ts +17 -0
  324. package/dist/src/server/extensions/types.js +1 -1
  325. package/dist/src/server/http/SseStream.d.ts +21 -0
  326. package/dist/src/server/http/SseStream.js +129 -0
  327. package/dist/src/server/instrumentation/EvidenceGraphBridge.d.ts +13 -0
  328. package/dist/src/server/instrumentation/EvidenceGraphBridge.js +150 -0
  329. package/dist/src/server/instrumentation/InstrumentationSession.d.ts +60 -0
  330. package/dist/src/server/instrumentation/InstrumentationSession.js +269 -0
  331. package/dist/src/server/instrumentation/index.d.ts +2 -0
  332. package/dist/src/server/instrumentation/index.js +2 -0
  333. package/dist/src/server/instrumentation/types.d.ts +62 -0
  334. package/dist/src/server/instrumentation/types.js +7 -0
  335. package/dist/src/server/macros/MacroConfigLoader.d.ts +6 -5
  336. package/dist/src/server/macros/MacroConfigLoader.js +61 -59
  337. package/dist/src/server/macros/MacroRunner.js +6 -2
  338. package/dist/src/server/macros/builtins/index.d.ts +2 -3
  339. package/dist/src/server/macros/builtins/index.js +51 -7
  340. package/dist/src/server/plugins/PluginContract.d.ts +1 -1
  341. package/dist/src/server/registry/contracts.d.ts +1 -1
  342. package/dist/src/server/registry/discovery.js +5 -4
  343. package/dist/src/server/registry/ensure-browser-core.js +0 -3
  344. package/dist/src/server/registry/index.js +4 -4
  345. package/dist/src/server/registry/tool-builder.d.ts +46 -0
  346. package/dist/src/server/registry/tool-builder.js +105 -0
  347. package/dist/src/server/sandbox/QuickJSSandbox.js +16 -5
  348. package/dist/src/server/sandbox/SandboxHelpers.js +250 -250
  349. package/dist/src/server/search/EmbeddingWorker.js +5 -3
  350. package/dist/src/server/search/FeedbackTracker.d.ts +9 -0
  351. package/dist/src/server/search/FeedbackTracker.js +26 -0
  352. package/dist/src/server/search/QueryNormalizer.d.ts +6 -0
  353. package/dist/src/server/search/QueryNormalizer.js +94 -0
  354. package/dist/src/server/search/ToolSearchEngineImpl.d.ts +2 -3
  355. package/dist/src/server/search/ToolSearchEngineImpl.js +38 -88
  356. package/dist/src/server/teams/TeamManager.d.ts +43 -0
  357. package/dist/src/server/teams/TeamManager.js +238 -0
  358. package/dist/src/server/teams/index.d.ts +1 -0
  359. package/dist/src/server/teams/index.js +1 -0
  360. package/dist/src/server/workflows/WorkflowContract.d.ts +44 -4
  361. package/dist/src/server/workflows/WorkflowContract.js +52 -0
  362. package/dist/src/server/workflows/WorkflowEngine.d.ts +1 -0
  363. package/dist/src/server/workflows/WorkflowEngine.js +314 -4
  364. package/dist/src/types/config.d.ts +0 -14
  365. package/dist/src/types/deobfuscator.d.ts +1 -1
  366. package/dist/src/types/index.d.ts +1 -1
  367. package/dist/src/utils/DetailedDataManager.js +2 -0
  368. package/dist/src/utils/RingBuffer.js +5 -5
  369. package/dist/src/utils/TokenBudgetManager.js +1 -1
  370. package/dist/src/utils/UnifiedCacheManager.js +1 -1
  371. package/dist/src/utils/artifactRetention.js +2 -2
  372. package/dist/src/utils/betterSqlite3.d.ts +11 -0
  373. package/dist/src/utils/betterSqlite3.js +88 -0
  374. package/dist/src/utils/browserExecutable.js +2 -2
  375. package/dist/src/utils/cache/CachedDecorator.d.ts +8 -0
  376. package/dist/src/utils/cache/CachedDecorator.js +55 -0
  377. package/dist/src/utils/cache/PersistentCache.d.ts +33 -0
  378. package/dist/src/utils/cache/PersistentCache.js +246 -0
  379. package/dist/src/utils/cache/index.d.ts +2 -0
  380. package/dist/src/utils/cache/index.js +2 -0
  381. package/dist/src/utils/cliFastPath.js +5 -8
  382. package/dist/src/utils/config.js +4 -26
  383. package/dist/src/utils/environmentDoctor.js +138 -11
  384. package/dist/src/utils/outputPaths.js +16 -9
  385. package/dist/src/utils/parallel.js +1 -3
  386. package/package.json +82 -81
  387. package/scripts/postinstall.cjs +54 -27
  388. package/workflows/.gitkeep +0 -0
  389. package/workflows/anti-bot-diagnoser/.jshook-install.json +14 -0
  390. package/workflows/anti-bot-diagnoser/LICENSE +21 -0
  391. package/workflows/anti-bot-diagnoser/README.md +105 -0
  392. package/workflows/anti-bot-diagnoser/docs/agent-recipes.md +44 -0
  393. package/workflows/anti-bot-diagnoser/meta.yaml +6 -0
  394. package/workflows/anti-bot-diagnoser/package.json +22 -0
  395. package/workflows/anti-bot-diagnoser/tsconfig.json +15 -0
  396. package/workflows/anti-bot-diagnoser/workflow.ts +224 -0
  397. package/workflows/api-openapi-probe/.jshook-install.json +14 -0
  398. package/workflows/api-openapi-probe/meta.yaml +6 -0
  399. package/workflows/api-openapi-probe/package.json +22 -0
  400. package/workflows/api-openapi-probe/pnpm-lock.yaml +819 -0
  401. package/workflows/api-openapi-probe/tsconfig.json +15 -0
  402. package/workflows/api-openapi-probe/workflow.ts +40 -0
  403. package/workflows/api-probe-batch/.jshook-install.json +14 -0
  404. package/workflows/api-probe-batch/LICENSE +21 -0
  405. package/workflows/api-probe-batch/README.md +45 -0
  406. package/workflows/api-probe-batch/meta.yaml +4 -0
  407. package/workflows/api-probe-batch/package.json +23 -0
  408. package/workflows/api-probe-batch/tsconfig.json +16 -0
  409. package/workflows/api-probe-batch/workflow.ts +111 -0
  410. package/workflows/auth-bootstrap/.jshook-install.json +14 -0
  411. package/workflows/auth-bootstrap/LICENSE +21 -0
  412. package/workflows/auth-bootstrap/README.md +74 -0
  413. package/workflows/auth-bootstrap/meta.yaml +4 -0
  414. package/workflows/auth-bootstrap/package.json +23 -0
  415. package/workflows/auth-bootstrap/tsconfig.json +16 -0
  416. package/workflows/auth-bootstrap/workflow.ts +141 -0
  417. package/workflows/auth-extract/.jshook-install.json +14 -0
  418. package/workflows/auth-extract/meta.yaml +6 -0
  419. package/workflows/auth-extract/package.json +22 -0
  420. package/workflows/auth-extract/pnpm-lock.yaml +819 -0
  421. package/workflows/auth-extract/tsconfig.json +15 -0
  422. package/workflows/auth-extract/workflow.ts +36 -0
  423. package/workflows/auth-surface-mapper/.jshook-install.json +14 -0
  424. package/workflows/auth-surface-mapper/meta.yaml +6 -0
  425. package/workflows/auth-surface-mapper/package.json +22 -0
  426. package/workflows/auth-surface-mapper/pnpm-lock.yaml +819 -0
  427. package/workflows/auth-surface-mapper/tsconfig.json +15 -0
  428. package/workflows/auth-surface-mapper/workflow.ts +104 -0
  429. package/workflows/batch-register/.jshook-install.json +14 -0
  430. package/workflows/batch-register/LICENSE +21 -0
  431. package/workflows/batch-register/README.md +39 -0
  432. package/workflows/batch-register/meta.yaml +4 -0
  433. package/workflows/batch-register/package.json +23 -0
  434. package/workflows/batch-register/tsconfig.json +16 -0
  435. package/workflows/batch-register/workflow.ts +67 -0
  436. package/workflows/bundle-recovery/.jshook-install.json +14 -0
  437. package/workflows/bundle-recovery/LICENSE +21 -0
  438. package/workflows/bundle-recovery/README.md +105 -0
  439. package/workflows/bundle-recovery/docs/agent-recipes.md +44 -0
  440. package/workflows/bundle-recovery/meta.yaml +6 -0
  441. package/workflows/bundle-recovery/package.json +22 -0
  442. package/workflows/bundle-recovery/tsconfig.json +15 -0
  443. package/workflows/bundle-recovery/workflow.ts +179 -0
  444. package/workflows/challenge-detector/.jshook-install.json +14 -0
  445. package/workflows/challenge-detector/meta.yaml +14 -0
  446. package/workflows/challenge-detector/package.json +22 -0
  447. package/workflows/challenge-detector/pnpm-lock.yaml +819 -0
  448. package/workflows/challenge-detector/tsconfig.json +15 -0
  449. package/workflows/challenge-detector/workflow.ts +298 -0
  450. package/workflows/deobfuscation-pipeline/.jshook-install.json +14 -0
  451. package/workflows/deobfuscation-pipeline/meta.yaml +6 -0
  452. package/workflows/deobfuscation-pipeline/package.json +22 -0
  453. package/workflows/deobfuscation-pipeline/pnpm-lock.yaml +819 -0
  454. package/workflows/deobfuscation-pipeline/tsconfig.json +15 -0
  455. package/workflows/deobfuscation-pipeline/workflow.ts +119 -0
  456. package/workflows/electron-bridge-mapper/.jshook-install.json +14 -0
  457. package/workflows/electron-bridge-mapper/meta.yaml +6 -0
  458. package/workflows/electron-bridge-mapper/package.json +22 -0
  459. package/workflows/electron-bridge-mapper/pnpm-lock.yaml +819 -0
  460. package/workflows/electron-bridge-mapper/tsconfig.json +15 -0
  461. package/workflows/electron-bridge-mapper/workflow.ts +125 -0
  462. package/workflows/evidence-pack/.jshook-install.json +14 -0
  463. package/workflows/evidence-pack/LICENSE +21 -0
  464. package/workflows/evidence-pack/README.md +105 -0
  465. package/workflows/evidence-pack/docs/agent-recipes.md +44 -0
  466. package/workflows/evidence-pack/meta.yaml +6 -0
  467. package/workflows/evidence-pack/package.json +22 -0
  468. package/workflows/evidence-pack/tsconfig.json +15 -0
  469. package/workflows/evidence-pack/workflow.ts +154 -0
  470. package/workflows/js-bundle-search/.jshook-install.json +14 -0
  471. package/workflows/js-bundle-search/LICENSE +21 -0
  472. package/workflows/js-bundle-search/README.md +46 -0
  473. package/workflows/js-bundle-search/meta.yaml +4 -0
  474. package/workflows/js-bundle-search/package.json +23 -0
  475. package/workflows/js-bundle-search/tsconfig.json +16 -0
  476. package/workflows/js-bundle-search/workflow.ts +118 -0
  477. package/workflows/protocol-registry/.jshook-install.json +14 -0
  478. package/workflows/protocol-registry/meta.yaml +6 -0
  479. package/workflows/protocol-registry/package.json +22 -0
  480. package/workflows/protocol-registry/pnpm-lock.yaml +819 -0
  481. package/workflows/protocol-registry/tsconfig.json +15 -0
  482. package/workflows/protocol-registry/workflow.ts +107 -0
  483. package/workflows/qwen-mail-open-latest/meta.yaml +7 -0
  484. package/workflows/qwen-mail-open-latest/package.json +22 -0
  485. package/workflows/qwen-mail-open-latest/pnpm-lock.yaml +819 -0
  486. package/workflows/qwen-mail-open-latest/tsconfig.json +15 -0
  487. package/workflows/qwen-mail-open-latest/workflow.ts +77 -0
  488. package/workflows/register-account-flow/.jshook-install.json +14 -0
  489. package/workflows/register-account-flow/LICENSE +21 -0
  490. package/workflows/register-account-flow/README.md +64 -0
  491. package/workflows/register-account-flow/meta.yaml +4 -0
  492. package/workflows/register-account-flow/package.json +23 -0
  493. package/workflows/register-account-flow/tsconfig.json +16 -0
  494. package/workflows/register-account-flow/workflow.ts +127 -0
  495. package/workflows/replay-lab/.jshook-install.json +14 -0
  496. package/workflows/replay-lab/meta.yaml +6 -0
  497. package/workflows/replay-lab/package.json +22 -0
  498. package/workflows/replay-lab/pnpm-lock.yaml +819 -0
  499. package/workflows/replay-lab/tsconfig.json +15 -0
  500. package/workflows/replay-lab/workflow.ts +106 -0
  501. package/workflows/script-evidence-scan/.jshook-install.json +14 -0
  502. package/workflows/script-evidence-scan/LICENSE +21 -0
  503. package/workflows/script-evidence-scan/README.md +61 -0
  504. package/workflows/script-evidence-scan/meta.yaml +4 -0
  505. package/workflows/script-evidence-scan/package.json +23 -0
  506. package/workflows/script-evidence-scan/tsconfig.json +16 -0
  507. package/workflows/script-evidence-scan/workflow.ts +89 -0
  508. package/workflows/signature-hunter/.jshook-install.json +14 -0
  509. package/workflows/signature-hunter/LICENSE +21 -0
  510. package/workflows/signature-hunter/README.md +105 -0
  511. package/workflows/signature-hunter/docs/agent-recipes.md +44 -0
  512. package/workflows/signature-hunter/meta.yaml +6 -0
  513. package/workflows/signature-hunter/package.json +22 -0
  514. package/workflows/signature-hunter/tsconfig.json +15 -0
  515. package/workflows/signature-hunter/workflow.ts +170 -0
  516. package/workflows/signing-lineage/.jshook-install.json +14 -0
  517. package/workflows/signing-lineage/meta.yaml +6 -0
  518. package/workflows/signing-lineage/package.json +22 -0
  519. package/workflows/signing-lineage/pnpm-lock.yaml +819 -0
  520. package/workflows/signing-lineage/tsconfig.json +15 -0
  521. package/workflows/signing-lineage/workflow.ts +120 -0
  522. package/workflows/temp-mail-extract-link/.jshook-install.json +14 -0
  523. package/workflows/temp-mail-extract-link/LICENSE +21 -0
  524. package/workflows/temp-mail-extract-link/README.md +71 -0
  525. package/workflows/temp-mail-extract-link/meta.yaml +4 -0
  526. package/workflows/temp-mail-extract-link/package.json +23 -0
  527. package/workflows/temp-mail-extract-link/tsconfig.json +16 -0
  528. package/workflows/temp-mail-extract-link/workflow.ts +221 -0
  529. package/workflows/temp-mail-open-latest/.jshook-install.json +14 -0
  530. package/workflows/temp-mail-open-latest/LICENSE +21 -0
  531. package/workflows/temp-mail-open-latest/README.md +61 -0
  532. package/workflows/temp-mail-open-latest/meta.yaml +4 -0
  533. package/workflows/temp-mail-open-latest/package.json +23 -0
  534. package/workflows/temp-mail-open-latest/tsconfig.json +16 -0
  535. package/workflows/temp-mail-open-latest/workflow.ts +136 -0
  536. package/workflows/template/.jshook-install.json +14 -0
  537. package/workflows/template/LICENSE +21 -0
  538. package/workflows/template/README.md +45 -0
  539. package/workflows/template/docs/SKILL.md +111 -0
  540. package/workflows/template/meta.yaml +6 -0
  541. package/workflows/template/package.json +22 -0
  542. package/workflows/template/pnpm-lock.yaml +819 -0
  543. package/workflows/template/tsconfig.json +15 -0
  544. package/workflows/template/workflow.ts +73 -0
  545. package/workflows/web-api-capture-session/.jshook-install.json +14 -0
  546. package/workflows/web-api-capture-session/LICENSE +21 -0
  547. package/workflows/web-api-capture-session/README.md +64 -0
  548. package/workflows/web-api-capture-session/meta.yaml +4 -0
  549. package/workflows/web-api-capture-session/package.json +23 -0
  550. package/workflows/web-api-capture-session/tsconfig.json +16 -0
  551. package/workflows/web-api-capture-session/workflow.ts +124 -0
  552. package/workflows/ws-protocol-lifter/.jshook-install.json +14 -0
  553. package/workflows/ws-protocol-lifter/LICENSE +21 -0
  554. package/workflows/ws-protocol-lifter/README.md +105 -0
  555. package/workflows/ws-protocol-lifter/docs/agent-recipes.md +44 -0
  556. package/workflows/ws-protocol-lifter/meta.yaml +6 -0
  557. package/workflows/ws-protocol-lifter/package.json +22 -0
  558. package/workflows/ws-protocol-lifter/tsconfig.json +15 -0
  559. package/workflows/ws-protocol-lifter/workflow.ts +163 -0
  560. package/dist/src/modules/analyzer/AISummarizer.d.ts +0 -39
  561. package/dist/src/modules/analyzer/AISummarizer.js +0 -122
  562. package/dist/src/modules/hook/AIHookGenerator.d.ts +0 -52
  563. package/dist/src/modules/hook/AIHookGenerator.js +0 -360
  564. package/dist/src/modules/hook/AIHookGeneratorTemplates.d.ts +0 -9
  565. package/dist/src/modules/hook/AIHookGeneratorTemplates.js +0 -157
  566. package/dist/src/server/macros/builtins/deobfuscate-ast-flow.d.ts +0 -2
  567. package/dist/src/server/macros/builtins/deobfuscate-ast-flow.js +0 -25
  568. package/dist/src/server/macros/builtins/unpacker-flow.d.ts +0 -2
  569. package/dist/src/server/macros/builtins/unpacker-flow.js +0 -25
  570. package/dist/src/services/LLMService.d.ts +0 -37
  571. package/dist/src/services/LLMService.js +0 -233
  572. package/dist/src/services/prompts/analysis.d.ts +0 -9
  573. package/dist/src/services/prompts/analysis.js +0 -158
  574. package/dist/src/services/prompts/crypto.d.ts +0 -2
  575. package/dist/src/services/prompts/crypto.js +0 -108
  576. package/dist/src/services/prompts/deobfuscation.d.ts +0 -6
  577. package/dist/src/services/prompts/deobfuscation.js +0 -300
  578. package/dist/src/services/prompts/environment.d.ts +0 -16
  579. package/dist/src/services/prompts/environment.js +0 -372
  580. package/dist/src/services/prompts/intelligence.d.ts +0 -4
  581. package/dist/src/services/prompts/intelligence.js +0 -250
  582. package/dist/src/services/prompts/taint.d.ts +0 -2
  583. package/dist/src/services/prompts/taint.js +0 -54
@@ -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
  };
@@ -70,6 +76,13 @@ export class SequenceNodeBuilder extends WorkflowNodeBuilder {
70
76
  this._steps.push(builder);
71
77
  return this;
72
78
  }
79
+ fallback(id, config) {
80
+ const builder = new FallbackNodeBuilder(id);
81
+ if (config)
82
+ config(builder);
83
+ this._steps.push(builder);
84
+ return this;
85
+ }
73
86
  build() {
74
87
  return {
75
88
  kind: 'sequence',
@@ -114,6 +127,13 @@ export class ParallelNodeBuilder extends WorkflowNodeBuilder {
114
127
  this._steps.push(builder);
115
128
  return this;
116
129
  }
130
+ fallback(id, config) {
131
+ const builder = new FallbackNodeBuilder(id);
132
+ if (config)
133
+ config(builder);
134
+ this._steps.push(builder);
135
+ return this;
136
+ }
117
137
  maxConcurrency(concurrency) {
118
138
  this._maxConcurrency = concurrency;
119
139
  return this;
@@ -167,6 +187,32 @@ export class BranchNodeBuilder extends WorkflowNodeBuilder {
167
187
  };
168
188
  }
169
189
  }
190
+ export class FallbackNodeBuilder extends WorkflowNodeBuilder {
191
+ _primary;
192
+ _fallback;
193
+ primary(nodeBuilder) {
194
+ this._primary = nodeBuilder;
195
+ return this;
196
+ }
197
+ fallback(nodeBuilder) {
198
+ this._fallback = nodeBuilder;
199
+ return this;
200
+ }
201
+ build() {
202
+ if (!this._primary) {
203
+ throw new Error(`FallbackNode '${this.id}' requires a primary step`);
204
+ }
205
+ if (!this._fallback) {
206
+ throw new Error(`FallbackNode '${this.id}' requires a fallback step`);
207
+ }
208
+ return {
209
+ kind: 'fallback',
210
+ id: this.id,
211
+ primary: this._primary.build(),
212
+ fallback: this._fallback.build(),
213
+ };
214
+ }
215
+ }
170
216
  export class WorkflowBuilder {
171
217
  _id;
172
218
  _displayName;
@@ -174,6 +220,7 @@ export class WorkflowBuilder {
174
220
  _tags;
175
221
  _timeoutMs;
176
222
  _defaultMaxConcurrency;
223
+ _route;
177
224
  _buildFn;
178
225
  _onStart;
179
226
  _onFinish;
@@ -198,6 +245,10 @@ export class WorkflowBuilder {
198
245
  this._defaultMaxConcurrency = max;
199
246
  return this;
200
247
  }
248
+ route(route) {
249
+ this._route = route;
250
+ return this;
251
+ }
201
252
  buildGraph(fn) {
202
253
  this._buildFn = (ctx) => fn(ctx).build();
203
254
  return this;
@@ -226,6 +277,7 @@ export class WorkflowBuilder {
226
277
  tags: this._tags,
227
278
  timeoutMs: this._timeoutMs,
228
279
  defaultMaxConcurrency: this._defaultMaxConcurrency,
280
+ route: this._route,
229
281
  build: this._buildFn,
230
282
  onStart: this._onStart,
231
283
  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,55 @@
1
1
  import { randomUUID } from 'node:crypto';
2
+ import { getEffectivePrerequisites } from '../ToolRouter.policy.js';
3
+ import { getRoutingState } from '../ToolRouter.probe.js';
4
+ class WorkflowDataBus {
5
+ store = new Map();
6
+ set(key, value) {
7
+ this.store.set(key, value);
8
+ }
9
+ get(key) {
10
+ return this.store.get(key);
11
+ }
12
+ getValueAtPath(key, path) {
13
+ const value = this.store.get(key);
14
+ if (!value || typeof value !== 'object') {
15
+ return value;
16
+ }
17
+ const payload = parseToolPayload(value);
18
+ const obj = payload || value;
19
+ return path.split('.').reduce((current, segment) => {
20
+ if (current && typeof current === 'object') {
21
+ const arrayMatch = segment.match(/^(\d+)$/);
22
+ if (arrayMatch && Array.isArray(current)) {
23
+ return current[Number(arrayMatch[1])];
24
+ }
25
+ return current[segment];
26
+ }
27
+ return undefined;
28
+ }, obj);
29
+ }
30
+ resolve(template) {
31
+ const match = template.match(/^\$\{(.+)\}$/);
32
+ if (!match || !match[1]) {
33
+ return template;
34
+ }
35
+ const ref = match[1];
36
+ const dotIndex = ref.indexOf('.');
37
+ if (dotIndex === -1) {
38
+ return this.store.get(ref);
39
+ }
40
+ const stepId = ref.slice(0, dotIndex);
41
+ const fieldPath = ref.slice(dotIndex + 1);
42
+ return this.getValueAtPath(stepId, fieldPath);
43
+ }
44
+ }
45
+ class PreflightError extends Error {
46
+ warnings;
47
+ constructor(warnings) {
48
+ super(`Workflow preflight failed with ${warnings.length} unsatisfied prerequisite(s)`);
49
+ this.warnings = warnings;
50
+ this.name = 'PreflightError';
51
+ }
52
+ }
2
53
  function extractConfigValue(config, path, fallback) {
3
54
  const segments = path.split('.').filter(Boolean);
4
55
  let current = config;
@@ -77,9 +128,49 @@ function collectSuccessStats(value) {
77
128
  }
78
129
  return { success: 0, failure: 0 };
79
130
  }
80
- async function runToolNode(ctx, node, overrides) {
131
+ function resolveInputFrom(mapping, dataBus) {
132
+ const resolved = {};
133
+ for (const [targetKey, sourceRef] of Object.entries(mapping)) {
134
+ const template = sourceRef.startsWith('${') ? sourceRef : `\${${sourceRef}}`;
135
+ resolved[targetKey] = dataBus.resolve(template);
136
+ }
137
+ return resolved;
138
+ }
139
+ function resolveInputValues(input, dataBus) {
140
+ if (!input)
141
+ return {};
142
+ const resolved = {};
143
+ for (const [key, value] of Object.entries(input)) {
144
+ resolved[key] = resolveValue(value, dataBus);
145
+ }
146
+ return resolved;
147
+ }
148
+ function resolveValue(value, dataBus) {
149
+ if (typeof value === 'string') {
150
+ return dataBus.resolve(value);
151
+ }
152
+ if (Array.isArray(value)) {
153
+ return value.map((item) => resolveValue(item, dataBus));
154
+ }
155
+ if (value && typeof value === 'object') {
156
+ const resolved = {};
157
+ for (const [k, v] of Object.entries(value)) {
158
+ resolved[k] = resolveValue(v, dataBus);
159
+ }
160
+ return resolved;
161
+ }
162
+ return value;
163
+ }
164
+ async function runToolNode(ctx, node, overrides, executionContext) {
165
+ const fromResolved = node.inputFrom
166
+ ? resolveInputFrom(node.inputFrom, executionContext.dataBus)
167
+ : {};
168
+ const fromInputValues = node.input
169
+ ? resolveInputValues(node.input, executionContext.dataBus)
170
+ : {};
81
171
  const mergedInput = {
82
- ...node.input,
172
+ ...fromInputValues,
173
+ ...fromResolved,
83
174
  ...overrides?.[node.id],
84
175
  };
85
176
  const runAttempt = async () => {
@@ -88,6 +179,7 @@ async function runToolNode(ctx, node, overrides) {
88
179
  if (failure) {
89
180
  throw new Error(failure);
90
181
  }
182
+ executionContext.dataBus.set(node.id, response);
91
183
  return response;
92
184
  };
93
185
  const retry = node.retry;
@@ -113,7 +205,7 @@ async function runToolNode(ctx, node, overrides) {
113
205
  }
114
206
  async function runParallelNode(ctx, node, executionContext, options) {
115
207
  const concurrency = Math.max(1, node.maxConcurrency ?? 4);
116
- const results = new Array(node.steps.length);
208
+ const results = Array.from({ length: node.steps.length });
117
209
  let nextIndex = 0;
118
210
  let stopped = false;
119
211
  const worker = async () => {
@@ -145,6 +237,38 @@ async function runParallelNode(ctx, node, executionContext, options) {
145
237
  await Promise.all(Array.from({ length: Math.min(concurrency, node.steps.length) }, () => worker()));
146
238
  return results;
147
239
  }
240
+ function getWorkflowVariable(stepResults, keyPath) {
241
+ if (stepResults.has(keyPath)) {
242
+ return stepResults.get(keyPath);
243
+ }
244
+ const segments = keyPath.split('.');
245
+ const stepId = segments[0];
246
+ const fieldSegments = segments.slice(1);
247
+ if (!stepId || !stepResults.has(stepId)) {
248
+ return undefined;
249
+ }
250
+ let current = stepResults.get(stepId);
251
+ if (current && typeof current === 'object') {
252
+ const payload = parseToolPayload(current);
253
+ if (payload) {
254
+ current = payload;
255
+ }
256
+ }
257
+ for (const segment of fieldSegments) {
258
+ if (current && typeof current === 'object') {
259
+ const arrayMatch = segment.match(/^(\d+)$/);
260
+ if (arrayMatch && Array.isArray(current)) {
261
+ current = current[Number(arrayMatch[1])];
262
+ continue;
263
+ }
264
+ current = current[segment];
265
+ }
266
+ else {
267
+ return undefined;
268
+ }
269
+ }
270
+ return current;
271
+ }
148
272
  async function evaluatePredicate(node, ctx) {
149
273
  if (node.predicateFn) {
150
274
  return await node.predicateFn(ctx);
@@ -170,14 +294,72 @@ async function evaluatePredicate(node, ctx) {
170
294
  return false;
171
295
  return aggregate.success / total >= threshold / 100;
172
296
  }
297
+ const equalsMatch = node.predicateId.match(/^variable_equals_(.+?)_(.+)$/);
298
+ if (equalsMatch && equalsMatch[1] && equalsMatch[2]) {
299
+ const keyPath = equalsMatch[1];
300
+ const expectedValue = equalsMatch[2];
301
+ const actualValue = getWorkflowVariable(ctx.stepResults, keyPath);
302
+ return deepEquals(actualValue, expectedValue);
303
+ }
304
+ const containsMatch = node.predicateId.match(/^variable_contains_(.+?)_(.+)$/);
305
+ if (containsMatch && containsMatch[1] && containsMatch[2]) {
306
+ const keyPath = containsMatch[1];
307
+ const substring = containsMatch[2];
308
+ const value = getWorkflowVariable(ctx.stepResults, keyPath);
309
+ if (typeof value !== 'string' && !Array.isArray(value)) {
310
+ return false;
311
+ }
312
+ return String(value).includes(substring);
313
+ }
314
+ const matchesMatch = node.predicateId.match(/^variable_matches_(.+?)_(.+)$/);
315
+ if (matchesMatch && matchesMatch[1] && matchesMatch[2]) {
316
+ const keyPath = matchesMatch[1];
317
+ const pattern = matchesMatch[2];
318
+ const value = getWorkflowVariable(ctx.stepResults, keyPath);
319
+ if (typeof value !== 'string') {
320
+ return false;
321
+ }
322
+ try {
323
+ const regex = new RegExp(pattern);
324
+ return regex.test(value);
325
+ }
326
+ catch {
327
+ return false;
328
+ }
329
+ }
173
330
  throw new Error(`Unknown workflow predicateId "${node.predicateId}"`);
174
331
  }
332
+ function deepEquals(a, b) {
333
+ if (a === b) {
334
+ return true;
335
+ }
336
+ if (typeof a !== typeof b) {
337
+ return false;
338
+ }
339
+ if (a && b && typeof a === 'object' && typeof b === 'object') {
340
+ if (Array.isArray(a) !== Array.isArray(b)) {
341
+ return false;
342
+ }
343
+ if (Array.isArray(a)) {
344
+ const arrA = a;
345
+ const arrB = b;
346
+ return arrA.length === arrB.length && arrA.every((v, i) => deepEquals(v, arrB[i]));
347
+ }
348
+ const keysA = Object.keys(a);
349
+ const keysB = Object.keys(b);
350
+ if (keysA.length !== keysB.length) {
351
+ return false;
352
+ }
353
+ return keysA.every((key) => deepEquals(a[key], b[key]));
354
+ }
355
+ return false;
356
+ }
175
357
  async function executeNode(ctx, node, executionContext, options) {
176
358
  executionContext.emitSpan('workflow.node.start', { nodeId: node.id, kind: node.kind });
177
359
  let result;
178
360
  switch (node.kind) {
179
361
  case 'tool':
180
- result = await runToolNode(ctx, node, options.nodeInputOverrides);
362
+ result = await runToolNode(ctx, node, options.nodeInputOverrides, executionContext);
181
363
  break;
182
364
  case 'sequence': {
183
365
  const sequenceNode = node;
@@ -203,6 +385,22 @@ async function executeNode(ctx, node, executionContext, options) {
203
385
  }
204
386
  break;
205
387
  }
388
+ case 'fallback': {
389
+ const fallbackNode = node;
390
+ try {
391
+ result = await executeNode(ctx, fallbackNode.primary, executionContext, options);
392
+ }
393
+ catch (error) {
394
+ executionContext.emitSpan('workflow.node.fallback', {
395
+ nodeId: fallbackNode.id,
396
+ primaryNodeId: fallbackNode.primary.id,
397
+ fallbackNodeId: fallbackNode.fallback.id,
398
+ error: error instanceof Error ? error.message : String(error),
399
+ });
400
+ result = await executeNode(ctx, fallbackNode.fallback, executionContext, options);
401
+ }
402
+ break;
403
+ }
206
404
  default:
207
405
  throw new Error(`Unsupported workflow node kind: ${node.kind}`);
208
406
  }
@@ -210,6 +408,59 @@ async function executeNode(ctx, node, executionContext, options) {
210
408
  executionContext.emitSpan('workflow.node.finish', { nodeId: node.id, kind: node.kind });
211
409
  return result;
212
410
  }
411
+ function collectToolNodes(node) {
412
+ switch (node.kind) {
413
+ case 'tool':
414
+ return [node];
415
+ case 'sequence':
416
+ case 'parallel':
417
+ return node.steps.flatMap((step) => collectToolNodes(step));
418
+ case 'branch':
419
+ return [
420
+ ...collectToolNodes(node.whenTrue),
421
+ ...(node.whenFalse ? collectToolNodes(node.whenFalse) : []),
422
+ ];
423
+ case 'fallback': {
424
+ const fallbackNode = node;
425
+ return [
426
+ ...collectToolNodes(fallbackNode.primary),
427
+ ...collectToolNodes(fallbackNode.fallback),
428
+ ];
429
+ }
430
+ default:
431
+ return [];
432
+ }
433
+ }
434
+ function getEvidenceState(ctx) {
435
+ try {
436
+ const evidenceGraph = ctx.getDomainInstance('evidenceGraph');
437
+ return evidenceGraph
438
+ ? { hasGraph: true, nodeCount: evidenceGraph.nodeCount, edgeCount: evidenceGraph.edgeCount }
439
+ : { hasGraph: false, nodeCount: 0, edgeCount: 0 };
440
+ }
441
+ catch {
442
+ return { hasGraph: false, nodeCount: 0, edgeCount: 0 };
443
+ }
444
+ }
445
+ function collectUnsatisfiedPrerequisites(graph, routingState) {
446
+ const prerequisites = getEffectivePrerequisites();
447
+ const warnings = [];
448
+ for (const toolNode of collectToolNodes(graph)) {
449
+ const toolPrerequisites = prerequisites[toolNode.toolName] ?? [];
450
+ for (const prerequisite of toolPrerequisites) {
451
+ if (prerequisite.check(routingState)) {
452
+ continue;
453
+ }
454
+ warnings.push({
455
+ nodeId: toolNode.id,
456
+ toolName: toolNode.toolName,
457
+ condition: prerequisite.condition,
458
+ fix: prerequisite.fix,
459
+ });
460
+ }
461
+ }
462
+ return warnings;
463
+ }
213
464
  export async function executeExtensionWorkflow(ctx, workflow, options = {}) {
214
465
  const runId = randomUUID();
215
466
  const profile = options.profile ?? String(ctx.baseTier ?? 'workflow');
@@ -218,6 +469,7 @@ export async function executeExtensionWorkflow(ctx, workflow, options = {}) {
218
469
  const metrics = [];
219
470
  const spans = [];
220
471
  const stepResults = new Map();
472
+ const dataBus = new WorkflowDataBus();
221
473
  const mergedConfig = options.config
222
474
  ? { ...ctx.config, ...options.config }
223
475
  : ctx.config;
@@ -225,6 +477,7 @@ export async function executeExtensionWorkflow(ctx, workflow, options = {}) {
225
477
  workflowRunId: runId,
226
478
  profile,
227
479
  stepResults,
480
+ dataBus,
228
481
  invokeTool(toolName, args) {
229
482
  return ctx.executeToolWithTracking(toolName, args);
230
483
  },
@@ -241,8 +494,65 @@ export async function executeExtensionWorkflow(ctx, workflow, options = {}) {
241
494
  try {
242
495
  await workflow.onStart?.(executionContext);
243
496
  const graph = workflow.build(executionContext);
497
+ const preflightMode = options.preflightMode ?? 'warn';
498
+ let preflightWarnings = [];
499
+ if (preflightMode === 'skip') {
500
+ executionContext.emitSpan('workflow.preflight', {
501
+ mode: preflightMode,
502
+ skipped: true,
503
+ evidenceState: getEvidenceState(ctx),
504
+ warningCount: 0,
505
+ });
506
+ }
507
+ else {
508
+ try {
509
+ const routingState = await getRoutingState(ctx);
510
+ const evidenceState = getEvidenceState(ctx);
511
+ preflightWarnings = collectUnsatisfiedPrerequisites(graph, routingState);
512
+ executionContext.emitSpan('workflow.preflight', {
513
+ mode: preflightMode,
514
+ routingState,
515
+ evidenceState,
516
+ warningCount: preflightWarnings.length,
517
+ warnings: preflightWarnings,
518
+ });
519
+ if (preflightMode === 'strict' && preflightWarnings.length > 0) {
520
+ throw new PreflightError(preflightWarnings);
521
+ }
522
+ }
523
+ catch (error) {
524
+ if (error instanceof PreflightError) {
525
+ throw error;
526
+ }
527
+ executionContext.emitSpan('workflow.preflight', {
528
+ mode: preflightMode,
529
+ warningCount: 0,
530
+ skipped: true,
531
+ error: error instanceof Error ? error.message : String(error),
532
+ evidenceState: getEvidenceState(ctx),
533
+ });
534
+ }
535
+ }
244
536
  const result = await withTimeout(executeNode(ctx, graph, executionContext, options), options.timeoutMs ?? workflow.timeoutMs ?? 0, `Workflow "${workflow.id}"`);
245
537
  await workflow.onFinish?.(executionContext, result);
538
+ try {
539
+ const evidenceGraph = typeof ctx.getDomainInstance === 'function'
540
+ ? ctx.getDomainInstance('evidenceGraph')
541
+ : undefined;
542
+ if (evidenceGraph && evidenceGraph.nodeCount > 0) {
543
+ stepResults.set('__evidenceSnapshot', evidenceGraph.exportJson());
544
+ executionContext.emitSpan('workflow.evidence.auto-export', {
545
+ nodeCount: evidenceGraph.nodeCount,
546
+ edgeCount: evidenceGraph.edgeCount,
547
+ });
548
+ }
549
+ }
550
+ catch (exportError) {
551
+ executionContext.emitSpan('workflow.evidence.auto-export', {
552
+ skipped: true,
553
+ error: exportError instanceof Error ? exportError.message : String(exportError),
554
+ });
555
+ }
246
556
  return {
247
557
  workflowId: workflow.id,
248
558
  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;
@@ -61,4 +60,5 @@ export interface DeobfuscateResult {
61
60
  warnings?: string[];
62
61
  engine?: 'legacy' | 'webcrack' | 'hybrid';
63
62
  webcrackApplied?: boolean;
63
+ cached?: boolean;
64
64
  }
@@ -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);
@@ -125,7 +125,7 @@ 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
131
  if (cache?.clear) {
@@ -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;