@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
@@ -0,0 +1,417 @@
1
+ import { UnifiedProcessManager, MemoryManager } from '../../domains/shared/modules.js';
2
+ import { MemoryAuditTrail } from '../../../modules/process/memory/AuditTrail.js';
3
+ import { logger } from '../../../utils/logger.js';
4
+ import { argNumber, argStringArray } from '../../domains/shared/parse-args.js';
5
+ import { validatePid, requireString, } from './handlers.base.types.js';
6
+ export class ProcessHandlersCore {
7
+ processManager;
8
+ memoryManager;
9
+ platform;
10
+ auditTrail = new MemoryAuditTrail();
11
+ constructor() {
12
+ this.processManager = new UnifiedProcessManager();
13
+ this.memoryManager = new MemoryManager();
14
+ this.platform = this.processManager.getPlatform();
15
+ logger.info(`ProcessToolHandlers initialized for platform: ${this.platform}`);
16
+ }
17
+ async buildMemoryDiagnostics(input) {
18
+ const recommendedActions = new Set();
19
+ const permission = await this.memoryManager.checkAvailability();
20
+ if (!permission.available) {
21
+ recommendedActions.add('Run as administrator');
22
+ }
23
+ let processInfo = null;
24
+ if (input.pid !== undefined && input.pid !== null) {
25
+ try {
26
+ const resolvedProcess = await this.processManager.getProcessByPid(input.pid);
27
+ processInfo = resolvedProcess
28
+ ? {
29
+ pid: resolvedProcess.pid,
30
+ name: resolvedProcess.name,
31
+ executablePath: resolvedProcess.executablePath,
32
+ windowTitle: resolvedProcess.windowTitle,
33
+ windowHandle: resolvedProcess.windowHandle,
34
+ memoryUsage: resolvedProcess.memoryUsage,
35
+ }
36
+ : null;
37
+ }
38
+ catch {
39
+ processInfo = null;
40
+ }
41
+ if (!processInfo) {
42
+ recommendedActions.add('Check if process is still running');
43
+ }
44
+ }
45
+ let protectionInfo = null;
46
+ let protectionQueryFailed = false;
47
+ if (input.pid !== undefined && input.pid !== null && input.address) {
48
+ try {
49
+ protectionInfo = await this.memoryManager.checkMemoryProtection(input.pid, input.address);
50
+ }
51
+ catch {
52
+ protectionQueryFailed = true;
53
+ }
54
+ if (protectionQueryFailed || protectionInfo?.success === false) {
55
+ recommendedActions.add('Verify address is within valid memory region');
56
+ }
57
+ }
58
+ if (input.size !== undefined &&
59
+ input.size !== null &&
60
+ protectionInfo?.regionSize !== undefined &&
61
+ protectionInfo.regionSize !== null &&
62
+ input.size > protectionInfo.regionSize) {
63
+ recommendedActions.add('Reduce the requested size to fit the target memory region');
64
+ }
65
+ if (input.operation === 'memory_read' &&
66
+ protectionInfo?.success &&
67
+ protectionInfo.isReadable === false) {
68
+ recommendedActions.add('Ensure target memory region is readable');
69
+ }
70
+ if (input.operation === 'memory_write' &&
71
+ protectionInfo?.success &&
72
+ protectionInfo.isWritable === false) {
73
+ recommendedActions.add('Ensure target memory region is writable');
74
+ }
75
+ let modulesEnumerated = false;
76
+ let moduleCount = null;
77
+ if (input.pid !== undefined && input.pid !== null) {
78
+ try {
79
+ const modulesResult = await this.memoryManager.enumerateModules(input.pid);
80
+ modulesEnumerated = modulesResult.success;
81
+ moduleCount = modulesResult.modules?.length ?? null;
82
+ }
83
+ catch {
84
+ modulesEnumerated = false;
85
+ }
86
+ }
87
+ if (input.pid !== undefined && input.pid !== null && input.address) {
88
+ recommendedActions.add('Re-resolve the address after the process restarts because ASLR can shift module addresses');
89
+ }
90
+ const normalizedError = input.error?.toLowerCase() ?? '';
91
+ if (normalizedError.includes('access denied') ||
92
+ normalizedError.includes('permission') ||
93
+ normalizedError.includes('privilege') ||
94
+ normalizedError.includes('administrator')) {
95
+ recommendedActions.add('Run as administrator');
96
+ }
97
+ const aslrNote = modulesEnumerated
98
+ ? moduleCount && moduleCount > 0
99
+ ? `Enumerated ${moduleCount} module(s). Treat absolute addresses as session-specific because ASLR can shift module bases between launches.`
100
+ : 'Module enumeration succeeded but returned no modules. Absolute addresses may still change across process launches because of ASLR.'
101
+ : 'Module enumeration was unavailable. Assume ASLR may shift absolute addresses between launches and re-resolve addresses after restarts.';
102
+ return {
103
+ permission: {
104
+ available: permission.available,
105
+ reason: permission.reason,
106
+ platform: this.platform,
107
+ },
108
+ process: {
109
+ exists: input.pid !== undefined && input.pid !== null ? Boolean(processInfo) : null,
110
+ pid: input.pid ?? null,
111
+ name: processInfo?.name ?? null,
112
+ },
113
+ address: {
114
+ queried: input.pid !== undefined && input.pid !== null && Boolean(input.address),
115
+ valid: input.pid !== undefined && input.pid !== null && input.address
116
+ ? (protectionInfo?.success ?? null)
117
+ : null,
118
+ protection: protectionInfo?.protection ?? null,
119
+ regionStart: protectionInfo?.regionStart ?? null,
120
+ regionSize: protectionInfo?.regionSize ?? null,
121
+ },
122
+ aslr: {
123
+ heuristic: true,
124
+ note: aslrNote,
125
+ },
126
+ recommendedActions: Array.from(recommendedActions),
127
+ };
128
+ }
129
+ async safeBuildMemoryDiagnostics(input) {
130
+ try {
131
+ return await this.buildMemoryDiagnostics(input);
132
+ }
133
+ catch (diagnosticError) {
134
+ logger.warn('Memory diagnostics generation failed:', diagnosticError);
135
+ return undefined;
136
+ }
137
+ }
138
+ recordMemoryAudit(entry) {
139
+ try {
140
+ this.auditTrail.record(entry);
141
+ }
142
+ catch (auditError) {
143
+ logger.warn('Memory audit trail recording failed:', auditError);
144
+ }
145
+ }
146
+ async handleProcessFind(args) {
147
+ try {
148
+ const pattern = requireString(args.pattern, 'pattern');
149
+ const processes = await this.processManager.findProcesses(pattern);
150
+ return {
151
+ content: [
152
+ {
153
+ type: 'text',
154
+ text: JSON.stringify({
155
+ success: true,
156
+ pattern,
157
+ count: processes.length,
158
+ processes: processes.map((p) => ({
159
+ pid: p.pid,
160
+ name: p.name,
161
+ path: p.executablePath,
162
+ windowTitle: p.windowTitle,
163
+ windowHandle: p.windowHandle,
164
+ memoryMB: p.memoryUsage ? Math.round(p.memoryUsage / 1024 / 1024) : undefined,
165
+ })),
166
+ }, null, 2),
167
+ },
168
+ ],
169
+ };
170
+ }
171
+ catch (error) {
172
+ logger.error('Process find failed:', error);
173
+ return {
174
+ content: [
175
+ {
176
+ type: 'text',
177
+ text: JSON.stringify({
178
+ success: false,
179
+ error: error instanceof Error ? error.message : String(error),
180
+ }, null, 2),
181
+ },
182
+ ],
183
+ };
184
+ }
185
+ }
186
+ async handleProcessGet(args) {
187
+ try {
188
+ const pid = validatePid(args.pid);
189
+ const process = await this.processManager.getProcessByPid(pid);
190
+ if (!process) {
191
+ return {
192
+ content: [
193
+ {
194
+ type: 'text',
195
+ text: JSON.stringify({
196
+ success: false,
197
+ message: `Process with PID ${pid} not found`,
198
+ }, null, 2),
199
+ },
200
+ ],
201
+ };
202
+ }
203
+ const cmdLine = await this.processManager.getProcessCommandLine(pid);
204
+ const debugPort = await this.processManager.checkDebugPort(pid, {
205
+ commandLine: cmdLine.commandLine,
206
+ });
207
+ return {
208
+ content: [
209
+ {
210
+ type: 'text',
211
+ text: JSON.stringify({
212
+ success: true,
213
+ process: {
214
+ ...process,
215
+ commandLine: cmdLine.commandLine,
216
+ parentPid: cmdLine.parentPid,
217
+ debugPort,
218
+ },
219
+ }, null, 2),
220
+ },
221
+ ],
222
+ };
223
+ }
224
+ catch (error) {
225
+ logger.error('Process get failed:', error);
226
+ return {
227
+ content: [
228
+ {
229
+ type: 'text',
230
+ text: JSON.stringify({
231
+ success: false,
232
+ error: error instanceof Error ? error.message : String(error),
233
+ }, null, 2),
234
+ },
235
+ ],
236
+ };
237
+ }
238
+ }
239
+ async handleProcessWindows(args) {
240
+ try {
241
+ const pid = validatePid(args.pid);
242
+ const windows = await this.processManager.getProcessWindows(pid);
243
+ return {
244
+ content: [
245
+ {
246
+ type: 'text',
247
+ text: JSON.stringify({
248
+ success: true,
249
+ pid,
250
+ windowCount: windows.length,
251
+ windows: windows.map((w) => ({
252
+ handle: w.handle,
253
+ title: w.title,
254
+ className: w.className,
255
+ processId: w.processId,
256
+ })),
257
+ }, null, 2),
258
+ },
259
+ ],
260
+ };
261
+ }
262
+ catch (error) {
263
+ logger.error('Process windows failed:', error);
264
+ return {
265
+ content: [
266
+ {
267
+ type: 'text',
268
+ text: JSON.stringify({
269
+ success: false,
270
+ error: error instanceof Error ? error.message : String(error),
271
+ }, null, 2),
272
+ },
273
+ ],
274
+ };
275
+ }
276
+ }
277
+ async handleProcessFindChromium(_args) {
278
+ return {
279
+ content: [
280
+ {
281
+ type: 'text',
282
+ text: JSON.stringify({
283
+ success: false,
284
+ disabled: true,
285
+ message: 'process_find_chromium is disabled to avoid scanning user-installed browser processes.',
286
+ guidance: [
287
+ 'Use browser_launch(driver="chrome"|"camoufox") to start a managed browser session.',
288
+ 'Use browser_attach/browser_launch(mode="connect") with an explicit browserURL/wsEndpoint.',
289
+ 'Use process_launch_debug for explicitly targeted Electron/Chromium executables.',
290
+ ],
291
+ platform: this.platform,
292
+ }, null, 2),
293
+ },
294
+ ],
295
+ };
296
+ }
297
+ async handleProcessCheckDebugPort(args) {
298
+ try {
299
+ const pid = validatePid(args.pid);
300
+ const debugPort = await this.processManager.checkDebugPort(pid);
301
+ return {
302
+ content: [
303
+ {
304
+ type: 'text',
305
+ text: JSON.stringify({
306
+ success: true,
307
+ pid,
308
+ debugPort,
309
+ canAttach: debugPort !== null,
310
+ attachUrl: debugPort ? `http://localhost:${debugPort}` : null,
311
+ }, null, 2),
312
+ },
313
+ ],
314
+ };
315
+ }
316
+ catch (error) {
317
+ logger.error('Check debug port failed:', error);
318
+ return {
319
+ content: [
320
+ {
321
+ type: 'text',
322
+ text: JSON.stringify({
323
+ success: false,
324
+ error: error instanceof Error ? error.message : String(error),
325
+ }, null, 2),
326
+ },
327
+ ],
328
+ };
329
+ }
330
+ }
331
+ async handleProcessLaunchDebug(args) {
332
+ try {
333
+ const executablePath = requireString(args.executablePath, 'executablePath');
334
+ const debugPort = argNumber(args, 'debugPort', 9222);
335
+ const argsList = argStringArray(args, 'args');
336
+ const process = await this.processManager.launchWithDebug(executablePath, debugPort, argsList);
337
+ if (!process) {
338
+ return {
339
+ content: [
340
+ {
341
+ type: 'text',
342
+ text: JSON.stringify({
343
+ success: false,
344
+ message: 'Failed to launch process',
345
+ }, null, 2),
346
+ },
347
+ ],
348
+ };
349
+ }
350
+ return {
351
+ content: [
352
+ {
353
+ type: 'text',
354
+ text: JSON.stringify({
355
+ success: true,
356
+ process: {
357
+ pid: process.pid,
358
+ name: process.name,
359
+ path: process.executablePath,
360
+ },
361
+ debugPort,
362
+ attachUrl: `http://localhost:${debugPort}`,
363
+ }, null, 2),
364
+ },
365
+ ],
366
+ };
367
+ }
368
+ catch (error) {
369
+ logger.error('Launch debug failed:', error);
370
+ return {
371
+ content: [
372
+ {
373
+ type: 'text',
374
+ text: JSON.stringify({
375
+ success: false,
376
+ error: error instanceof Error ? error.message : String(error),
377
+ }, null, 2),
378
+ },
379
+ ],
380
+ };
381
+ }
382
+ }
383
+ async handleProcessKill(args) {
384
+ try {
385
+ const pid = validatePid(args.pid);
386
+ const killed = await this.processManager.killProcess(pid);
387
+ return {
388
+ content: [
389
+ {
390
+ type: 'text',
391
+ text: JSON.stringify({
392
+ success: killed,
393
+ pid,
394
+ message: killed
395
+ ? `Process ${pid} killed successfully`
396
+ : `Failed to kill process ${pid}`,
397
+ }, null, 2),
398
+ },
399
+ ],
400
+ };
401
+ }
402
+ catch (error) {
403
+ logger.error('Process kill failed:', error);
404
+ return {
405
+ content: [
406
+ {
407
+ type: 'text',
408
+ text: JSON.stringify({
409
+ success: false,
410
+ error: error instanceof Error ? error.message : String(error),
411
+ }, null, 2),
412
+ },
413
+ ],
414
+ };
415
+ }
416
+ }
417
+ }
@@ -0,0 +1,57 @@
1
+ import type { AuditEntry } from '../../../modules/process/memory/AuditTrail.js';
2
+ export type { AuditEntry };
3
+ export interface ProcessSummarySource {
4
+ pid: number;
5
+ name: string;
6
+ executablePath?: string;
7
+ windowTitle?: string;
8
+ windowHandle?: string;
9
+ memoryUsage?: number;
10
+ }
11
+ export interface ProcessWindowSource {
12
+ handle: string;
13
+ title: string;
14
+ className: string;
15
+ processId: number;
16
+ }
17
+ export interface MemoryDiagnosticsInput {
18
+ pid?: number;
19
+ address?: string;
20
+ size?: number;
21
+ operation: string;
22
+ error?: string;
23
+ }
24
+ export interface MemoryDiagnostics {
25
+ permission: {
26
+ available: boolean;
27
+ reason?: string;
28
+ platform: string;
29
+ };
30
+ process: {
31
+ exists: boolean | null;
32
+ pid: number | null;
33
+ name: string | null;
34
+ };
35
+ address: {
36
+ queried: boolean;
37
+ valid: boolean | null;
38
+ protection: string | null;
39
+ regionStart: string | null;
40
+ regionSize: number | null;
41
+ };
42
+ aslr: {
43
+ heuristic: true;
44
+ note: string;
45
+ };
46
+ recommendedActions: string[];
47
+ }
48
+ export type MemoryPatternType = 'hex' | 'int32' | 'int64' | 'float' | 'double' | 'string';
49
+ export declare const MEMORY_PATTERN_TYPES: Set<MemoryPatternType>;
50
+ export declare function validatePid(value: unknown): number;
51
+ export declare function requireString(value: unknown, name: string): string;
52
+ export declare function requirePositiveNumber(value: unknown, name: string): number;
53
+ export declare function normalizePatternType(value: unknown): MemoryPatternType;
54
+ export declare function getOptionalPid(value: unknown): number | undefined;
55
+ export declare function getOptionalString(value: unknown): string | undefined;
56
+ export declare function getOptionalPositiveNumber(value: unknown): number | undefined;
57
+ export declare function getWriteSize(data: string, encoding: 'hex' | 'base64'): number;
@@ -0,0 +1,50 @@
1
+ export const MEMORY_PATTERN_TYPES = new Set([
2
+ 'hex',
3
+ 'int32',
4
+ 'int64',
5
+ 'float',
6
+ 'double',
7
+ 'string',
8
+ ]);
9
+ export function validatePid(value) {
10
+ const n = Number(value);
11
+ if (!Number.isInteger(n) || n <= 0)
12
+ throw new Error(`Invalid PID: ${JSON.stringify(value)}`);
13
+ return n;
14
+ }
15
+ export function requireString(value, name) {
16
+ if (typeof value !== 'string' || value.length === 0) {
17
+ throw new Error(`${name} must be a non-empty string`);
18
+ }
19
+ return value;
20
+ }
21
+ export function requirePositiveNumber(value, name) {
22
+ const n = Number(value);
23
+ if (!Number.isFinite(n) || n <= 0)
24
+ throw new Error(`${name} must be a positive number`);
25
+ return n;
26
+ }
27
+ export function normalizePatternType(value) {
28
+ if (typeof value === 'string' && MEMORY_PATTERN_TYPES.has(value)) {
29
+ return value;
30
+ }
31
+ return 'hex';
32
+ }
33
+ export function getOptionalPid(value) {
34
+ const pid = Number(value);
35
+ return Number.isInteger(pid) && pid > 0 ? pid : undefined;
36
+ }
37
+ export function getOptionalString(value) {
38
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
39
+ }
40
+ export function getOptionalPositiveNumber(value) {
41
+ const size = Number(value);
42
+ return Number.isFinite(size) && size > 0 ? size : undefined;
43
+ }
44
+ export function getWriteSize(data, encoding) {
45
+ if (encoding === 'hex') {
46
+ const normalized = data.replace(/\s+/g, '');
47
+ return Math.ceil(normalized.length / 2);
48
+ }
49
+ return Buffer.from(data, 'base64').length;
50
+ }
@@ -16,6 +16,20 @@ function getOptionalPid(value) {
16
16
  const pid = Number(value);
17
17
  return Number.isInteger(pid) && pid > 0 ? pid : null;
18
18
  }
19
+ function formatUnknownError(error) {
20
+ if (error instanceof Error) {
21
+ return error.message;
22
+ }
23
+ if (typeof error === 'object' && error !== null) {
24
+ try {
25
+ return JSON.stringify(error, null, 2);
26
+ }
27
+ catch {
28
+ return String(error);
29
+ }
30
+ }
31
+ return String(error);
32
+ }
19
33
  function getOptionalString(value) {
20
34
  return typeof value === 'string' && value.length > 0 ? value : null;
21
35
  }
@@ -232,20 +246,6 @@ export class ProcessToolHandlersRuntime extends ProcessHandlersBase {
232
246
  const wsEndpointArg = args.wsEndpoint ?? '';
233
247
  const evaluateExpr = args.evaluate ?? '';
234
248
  const pageUrl = args.pageUrl ?? '';
235
- const formatUnknownError = (error) => {
236
- if (error instanceof Error) {
237
- return error.message;
238
- }
239
- if (typeof error === 'object' && error !== null) {
240
- try {
241
- return JSON.stringify(error, null, 2);
242
- }
243
- catch {
244
- return String(error);
245
- }
246
- }
247
- return String(error);
248
- };
249
249
  try {
250
250
  const baseUrl = `http://127.0.0.1:${port}`;
251
251
  const listUrl = `${baseUrl}/json/list`;
@@ -261,7 +261,9 @@ export class ProcessToolHandlersRuntime extends ProcessHandlersBase {
261
261
  try {
262
262
  const resp = await fetch(`${baseUrl}/json`);
263
263
  if (!resp.ok) {
264
- throw new Error(`CDP fallback endpoint returned HTTP ${resp.status}`);
264
+ throw new Error(`CDP fallback endpoint returned HTTP ${resp.status}`, {
265
+ cause: listError,
266
+ });
265
267
  }
266
268
  targets = (await resp.json());
267
269
  }
@@ -269,7 +271,7 @@ export class ProcessToolHandlersRuntime extends ProcessHandlersBase {
269
271
  const original = formatUnknownError(fallbackError || listError);
270
272
  throw new Error(`Cannot connect to Electron CDP at ${baseUrl}. ` +
271
273
  `Ensure the target app is running with a remote debugging port (for example: process_launch_debug with debugPort=${port}), ` +
272
- `then retry electron_attach. Original error: ${original}`);
274
+ `then retry electron_attach. Original error: ${original}`, { cause: fallbackError });
273
275
  }
274
276
  }
275
277
  if (!Array.isArray(targets)) {
@@ -297,7 +299,7 @@ export class ProcessToolHandlersRuntime extends ProcessHandlersBase {
297
299
  };
298
300
  }
299
301
  const target = filtered[0];
300
- if (!target || !target.webSocketDebuggerUrl) {
302
+ if (!target?.webSocketDebuggerUrl) {
301
303
  return {
302
304
  content: [
303
305
  {
@@ -5,12 +5,17 @@ const DOMAIN = 'process';
5
5
  const DEP_KEY = 'processHandlers';
6
6
  const t = toolLookup(processToolDefinitions);
7
7
  const b = (invoke) => bindByDepKey(DEP_KEY, invoke);
8
+ const EFFECTIVE_PLATFORM = process.env.JSHOOK_REGISTRY_PLATFORM === 'win32' ||
9
+ process.env.JSHOOK_REGISTRY_PLATFORM === 'linux' ||
10
+ process.env.JSHOOK_REGISTRY_PLATFORM === 'darwin'
11
+ ? process.env.JSHOOK_REGISTRY_PLATFORM
12
+ : process.platform;
8
13
  function ensure(ctx) {
9
14
  if (!ctx.processHandlers)
10
15
  ctx.processHandlers = new ProcessToolHandlers();
11
16
  return ctx.processHandlers;
12
17
  }
13
- const IS_WIN32 = process.platform === 'win32';
18
+ const IS_WIN32 = EFFECTIVE_PLATFORM === 'win32';
14
19
  const WIN32_ONLY_TOOLS = new Set([
15
20
  'inject_dll',
16
21
  'module_inject_dll',
@@ -1,35 +1,13 @@
1
+ import { tool } from '../../registry/tool-builder.js';
1
2
  export const sandboxTools = [
2
- {
3
- name: 'execute_sandbox_script',
4
- description: 'Execute JavaScript code in a WASM-isolated QuickJS sandbox with optional MCP tool bridging, session persistence, and auto-correction.',
5
- inputSchema: {
6
- type: 'object',
7
- properties: {
8
- code: {
9
- type: 'string',
10
- description: 'JavaScript source code to execute inside the sandbox.',
11
- },
12
- sessionId: {
13
- type: 'string',
14
- description: 'Optional session ID for scratchpad persistence across executions. If omitted, no persistence.',
15
- },
16
- timeoutMs: {
17
- type: 'number',
18
- description: 'Execution timeout in ms (default: 1000).',
19
- },
20
- autoCorrect: {
21
- type: 'boolean',
22
- description: 'When true, failed scripts are retried up to 2 times with error context appended.',
23
- default: false,
24
- },
25
- },
26
- required: ['code'],
27
- },
28
- annotations: {
29
- readOnlyHint: false,
30
- destructiveHint: false,
31
- idempotentHint: false,
32
- openWorldHint: false,
33
- },
34
- },
3
+ tool('execute_sandbox_script')
4
+ .desc('Execute JavaScript in a WASM-isolated QuickJS sandbox with optional tool bridging and auto-correction')
5
+ .string('code', 'JavaScript source code to execute')
6
+ .string('sessionId', 'Session ID for scratchpad persistence across executions')
7
+ .number('timeoutMs', 'Execution timeout in ms', { default: 1000 })
8
+ .boolean('autoCorrect', 'Retry failed scripts up to 2 times with error context', {
9
+ default: false,
10
+ })
11
+ .required('code')
12
+ .build(),
35
13
  ];