@jshookmcp/jshook 0.2.3 → 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 (385) 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 +156 -0
  7. package/dist/packages/extension-sdk/src/workflow.js +236 -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/TabRegistry.js +2 -2
  24. package/dist/src/modules/browser/UnifiedBrowserManager.d.ts +1 -0
  25. package/dist/src/modules/browser/UnifiedBrowserManager.js +18 -3
  26. package/dist/src/modules/captcha/AICaptchaDetector.d.ts +1 -10
  27. package/dist/src/modules/captcha/AICaptchaDetector.js +7 -201
  28. package/dist/src/modules/collector/CodeCollector.js +4 -5
  29. package/dist/src/modules/collector/DOMInspector.js +48 -58
  30. package/dist/src/modules/collector/PageController.d.ts +17 -4
  31. package/dist/src/modules/collector/PageController.js +2 -5
  32. package/dist/src/modules/collector/PageScriptCollectors.js +3 -3
  33. package/dist/src/modules/crypto/CryptoDetector.d.ts +1 -4
  34. package/dist/src/modules/crypto/CryptoDetector.js +2 -42
  35. package/dist/src/modules/crypto/CryptoRules.js +1 -1
  36. package/dist/src/modules/debugger/BlackboxManager.js +1 -1
  37. package/dist/src/modules/debugger/DebuggerManager.impl.core.scope.js +1 -1
  38. package/dist/src/modules/debugger/ScriptManager.impl.extract-function-tree.js +4 -2
  39. package/dist/src/modules/debugger/WatchExpressionManager.js +1 -1
  40. package/dist/src/modules/deobfuscator/Deobfuscator.d.ts +1 -4
  41. package/dist/src/modules/deobfuscator/Deobfuscator.js +4 -39
  42. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.d.ts +0 -3
  43. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.js +2 -8
  44. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.d.ts +1 -2
  45. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.js +3 -55
  46. package/dist/src/modules/deobfuscator/JScramblerDeobfuscator.js +3 -4
  47. package/dist/src/modules/deobfuscator/VMDeobfuscator.d.ts +2 -10
  48. package/dist/src/modules/deobfuscator/VMDeobfuscator.js +3 -128
  49. package/dist/src/modules/deobfuscator/webcrack.js +15 -2
  50. package/dist/src/modules/emulator/AIEnvironmentAnalyzer.d.ts +5 -8
  51. package/dist/src/modules/emulator/AIEnvironmentAnalyzer.js +10 -102
  52. package/dist/src/modules/emulator/EnvironmentEmulator.d.ts +1 -5
  53. package/dist/src/modules/emulator/EnvironmentEmulator.js +7 -91
  54. package/dist/src/modules/emulator/EnvironmentEmulatorFetch.js +58 -61
  55. package/dist/src/modules/emulator/templates/chrome-env.d.ts +17 -7
  56. package/dist/src/modules/emulator/templates/chrome-env.js +14 -7
  57. package/dist/src/modules/external/ExternalToolRunner.js +25 -22
  58. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.compose.js +5 -5
  59. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.network.js +311 -311
  60. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.runtime.js +410 -410
  61. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.storage.js +122 -122
  62. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.d.ts +13 -0
  63. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.js +42 -0
  64. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.dynamic.js +194 -194
  65. package/dist/src/modules/monitor/FetchInterceptor.d.ts +46 -0
  66. package/dist/src/modules/monitor/FetchInterceptor.js +191 -0
  67. package/dist/src/modules/monitor/PerformanceMonitor.js +8 -7
  68. package/dist/src/modules/monitor/PlaywrightNetworkMonitor.js +62 -62
  69. package/dist/src/modules/process/BaseMemoryManager.d.ts +1 -1
  70. package/dist/src/modules/process/LinuxProcessManager.js +2 -0
  71. package/dist/src/modules/process/MacProcessManager.js +25 -25
  72. package/dist/src/modules/process/MemoryManager.d.ts +1 -1
  73. package/dist/src/modules/process/MemoryManager.js +2 -2
  74. package/dist/src/modules/process/memory/AuditTrail.js +1 -1
  75. package/dist/src/modules/process/memory/availability.js +49 -49
  76. package/dist/src/modules/process/memory/injector.js +185 -185
  77. package/dist/src/modules/process/memory/reader.js +85 -53
  78. package/dist/src/modules/process/memory/regions.dump.js +51 -51
  79. package/dist/src/modules/process/memory/regions.enumerate.js +108 -108
  80. package/dist/src/modules/process/memory/regions.modules.js +80 -80
  81. package/dist/src/modules/process/memory/regions.protection.js +148 -115
  82. package/dist/src/modules/process/memory/scanner.d.ts +5 -1
  83. package/dist/src/modules/process/memory/scanner.darwin.js +98 -41
  84. package/dist/src/modules/process/memory/scanner.js +88 -4
  85. package/dist/src/modules/process/memory/scanner.windows.js +124 -124
  86. package/dist/src/modules/process/memory/writer.js +98 -58
  87. package/dist/src/modules/security/ExecutionSandbox.js +51 -52
  88. package/dist/src/modules/stealth/FingerprintManager.js +1 -1
  89. package/dist/src/modules/stealth/StealthScripts.d.ts +1 -0
  90. package/dist/src/modules/stealth/StealthScripts.js +18 -13
  91. package/dist/src/modules/stealth/StealthVerifier.js +1 -3
  92. package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.d.ts +14 -0
  93. package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.js +181 -2
  94. package/dist/src/modules/trace/TraceDB.js +75 -69
  95. package/dist/src/modules/trace/TraceRecorder.js +1 -5
  96. package/dist/src/native/AntiCheatDetector.js +67 -16
  97. package/dist/src/native/CodeInjector.js +3 -3
  98. package/dist/src/native/HardwareBreakpoint.js +24 -15
  99. package/dist/src/native/HeapAnalyzer.js +2 -2
  100. package/dist/src/native/MemoryController.js +1 -1
  101. package/dist/src/native/MemoryScanSession.js +2 -2
  102. package/dist/src/native/MemoryScanner.js +4 -8
  103. package/dist/src/native/NativeMemoryManager.impl.js +2 -2
  104. package/dist/src/native/PEAnalyzer.js +14 -15
  105. package/dist/src/native/PointerChainEngine.js +2 -4
  106. package/dist/src/native/ScriptLoader.js +4 -9
  107. package/dist/src/native/Speedhack.js +1 -1
  108. package/dist/src/native/StructureAnalyzer.js +52 -33
  109. package/dist/src/native/Win32API.d.ts +1 -0
  110. package/dist/src/native/Win32API.js +13 -0
  111. package/dist/src/native/Win32Debug.js +19 -19
  112. package/dist/src/native/platform/darwin/DarwinAPI.d.ts +2 -0
  113. package/dist/src/native/platform/darwin/DarwinAPI.js +8 -0
  114. package/dist/src/native/platform/darwin/DarwinMemoryProvider.js +6 -1
  115. package/dist/src/server/MCPServer.context.d.ts +2 -1
  116. package/dist/src/server/MCPServer.d.ts +2 -1
  117. package/dist/src/server/MCPServer.domain.d.ts +1 -1
  118. package/dist/src/server/MCPServer.domain.js +81 -16
  119. package/dist/src/server/MCPServer.js +41 -14
  120. package/dist/src/server/MCPServer.resources.d.ts +2 -0
  121. package/dist/src/server/MCPServer.resources.js +91 -0
  122. package/dist/src/server/MCPServer.search.handlers.call.js +2 -1
  123. package/dist/src/server/MCPServer.search.helpers.js +1 -1
  124. package/dist/src/server/MCPServer.transport.js +12 -0
  125. package/dist/src/server/ToolCallContextGuard.js +8 -0
  126. package/dist/src/server/ToolRouter.d.ts +25 -9
  127. package/dist/src/server/ToolRouter.intent.d.ts +26 -0
  128. package/dist/src/server/ToolRouter.intent.js +77 -0
  129. package/dist/src/server/ToolRouter.js +103 -284
  130. package/dist/src/server/ToolRouter.policy.d.ts +22 -0
  131. package/dist/src/server/ToolRouter.policy.js +163 -0
  132. package/dist/src/server/ToolRouter.probe.d.ts +17 -0
  133. package/dist/src/server/ToolRouter.probe.js +103 -0
  134. package/dist/src/server/ToolRouter.renderer.d.ts +9 -0
  135. package/dist/src/server/ToolRouter.renderer.js +52 -0
  136. package/dist/src/server/activation/ActivationController.js +15 -12
  137. package/dist/src/server/activation/CompoundConditionEngine.js +1 -1
  138. package/dist/src/server/activation/PredictiveBooster.js +1 -3
  139. package/dist/src/server/domains/analysis/definitions.js +155 -655
  140. package/dist/src/server/domains/analysis/handlers.impl.js +26 -20
  141. package/dist/src/server/domains/analysis/handlers.web-tools.js +2 -1
  142. package/dist/src/server/domains/analysis/manifest.js +6 -4
  143. package/dist/src/server/domains/antidebug/definitions.js +25 -111
  144. package/dist/src/server/domains/browser/definitions.tools.advanced.js +59 -88
  145. package/dist/src/server/domains/browser/definitions.tools.behavior.js +120 -227
  146. package/dist/src/server/domains/browser/definitions.tools.page-core.js +210 -439
  147. package/dist/src/server/domains/browser/definitions.tools.page-system.js +108 -250
  148. package/dist/src/server/domains/browser/definitions.tools.runtime.js +98 -211
  149. package/dist/src/server/domains/browser/definitions.tools.security.js +194 -339
  150. package/dist/src/server/domains/browser/handlers/camoufox-browser.js +3 -2
  151. package/dist/src/server/domains/browser/handlers/captcha-solver.js +3 -3
  152. package/dist/src/server/domains/browser/handlers/dom-query.js +2 -1
  153. package/dist/src/server/domains/browser/handlers/framework-state.js +27 -9
  154. package/dist/src/server/domains/browser/handlers/indexeddb-dump.js +21 -20
  155. package/dist/src/server/domains/browser/handlers/script-management.js +1 -1
  156. package/dist/src/server/domains/browser/handlers.impl.d.ts +1 -2
  157. package/dist/src/server/domains/browser/handlers.impl.js +2 -3
  158. package/dist/src/server/domains/browser/manifest.js +37 -13
  159. package/dist/src/server/domains/coordination/definitions.js +50 -216
  160. package/dist/src/server/domains/coordination/index.d.ts +2 -1
  161. package/dist/src/server/domains/coordination/index.js +1 -0
  162. package/dist/src/server/domains/debugger/definitions.tools.advanced.js +72 -189
  163. package/dist/src/server/domains/debugger/definitions.tools.core.js +114 -288
  164. package/dist/src/server/domains/debugger/manifest.js +9 -2
  165. package/dist/src/server/domains/encoding/definitions.js +43 -153
  166. package/dist/src/server/domains/encoding/handlers.base.js +2 -2
  167. package/dist/src/server/domains/evidence/definitions.d.ts +2 -0
  168. package/dist/src/server/domains/evidence/definitions.js +42 -0
  169. package/dist/src/server/domains/evidence/handlers.d.ts +582 -0
  170. package/dist/src/server/domains/evidence/handlers.js +60 -0
  171. package/dist/src/server/domains/evidence/index.d.ts +2 -0
  172. package/dist/src/server/domains/evidence/index.js +2 -0
  173. package/dist/src/server/domains/evidence/manifest.d.ts +63 -0
  174. package/dist/src/server/domains/evidence/manifest.js +78 -0
  175. package/dist/src/server/domains/graphql/definitions.js +53 -141
  176. package/dist/src/server/domains/graphql/handlers.impl.core.runtime.replay.js +92 -114
  177. package/dist/src/server/domains/graphql/handlers.impl.core.runtime.shared.js +77 -77
  178. package/dist/src/server/domains/hooks/ai-handlers.d.ts +0 -7
  179. package/dist/src/server/domains/hooks/ai-handlers.js +1 -67
  180. package/dist/src/server/domains/hooks/definitions.js +69 -335
  181. package/dist/src/server/domains/hooks/manifest.d.ts +1 -1
  182. package/dist/src/server/domains/hooks/manifest.js +1 -2
  183. package/dist/src/server/domains/instrumentation/definitions.d.ts +2 -0
  184. package/dist/src/server/domains/instrumentation/definitions.js +99 -0
  185. package/dist/src/server/domains/instrumentation/handlers.d.ts +78 -0
  186. package/dist/src/server/domains/instrumentation/handlers.js +206 -0
  187. package/dist/src/server/domains/instrumentation/index.d.ts +2 -0
  188. package/dist/src/server/domains/instrumentation/index.js +2 -0
  189. package/dist/src/server/domains/instrumentation/manifest.d.ts +63 -0
  190. package/dist/src/server/domains/instrumentation/manifest.js +114 -0
  191. package/dist/src/server/domains/macro/definitions.js +16 -43
  192. package/dist/src/server/domains/maintenance/definitions.js +60 -219
  193. package/dist/src/server/domains/maintenance/handlers.extensions.js +78 -20
  194. package/dist/src/server/domains/memory/definitions.js +387 -559
  195. package/dist/src/server/domains/memory/handlers/hooks.d.ts +55 -0
  196. package/dist/src/server/domains/memory/handlers/hooks.js +115 -0
  197. package/dist/src/server/domains/memory/handlers/integrity.d.ts +77 -0
  198. package/dist/src/server/domains/memory/handlers/integrity.js +180 -0
  199. package/dist/src/server/domains/memory/handlers/pointer-chain.d.ts +29 -0
  200. package/dist/src/server/domains/memory/handlers/pointer-chain.js +82 -0
  201. package/dist/src/server/domains/memory/handlers/readwrite.d.ts +41 -0
  202. package/dist/src/server/domains/memory/handlers/readwrite.js +78 -0
  203. package/dist/src/server/domains/memory/handlers/scan.d.ts +35 -0
  204. package/dist/src/server/domains/memory/handlers/scan.js +97 -0
  205. package/dist/src/server/domains/memory/handlers/session.d.ts +23 -0
  206. package/dist/src/server/domains/memory/handlers/session.js +49 -0
  207. package/dist/src/server/domains/memory/handlers/structure.d.ts +29 -0
  208. package/dist/src/server/domains/memory/handlers/structure.js +74 -0
  209. package/dist/src/server/domains/memory/handlers.impl.d.ts +49 -54
  210. package/dist/src/server/domains/memory/handlers.impl.js +63 -494
  211. package/dist/src/server/domains/memory/manifest.js +236 -64
  212. package/dist/src/server/domains/native-bridge/definitions.js +54 -192
  213. package/dist/src/server/domains/native-bridge/index.d.ts +1 -0
  214. package/dist/src/server/domains/native-bridge/index.js +2 -1
  215. package/dist/src/server/domains/network/auth-extractor.js +1 -1
  216. package/dist/src/server/domains/network/definitions.js +175 -578
  217. package/dist/src/server/domains/network/handlers.base.core.d.ts +64 -0
  218. package/dist/src/server/domains/network/handlers.base.core.js +623 -0
  219. package/dist/src/server/domains/network/handlers.base.d.ts +2 -124
  220. package/dist/src/server/domains/network/handlers.base.js +3 -878
  221. package/dist/src/server/domains/network/handlers.base.performance.d.ts +63 -0
  222. package/dist/src/server/domains/network/handlers.base.performance.js +193 -0
  223. package/dist/src/server/domains/network/handlers.base.types.d.ts +42 -0
  224. package/dist/src/server/domains/network/handlers.base.types.js +89 -0
  225. package/dist/src/server/domains/network/handlers.impl.core.runtime.d.ts +1 -1
  226. package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.d.ts +21 -0
  227. package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.js +186 -0
  228. package/dist/src/server/domains/network/handlers.impl.core.runtime.js +1 -1
  229. package/dist/src/server/domains/network/manifest.js +15 -0
  230. package/dist/src/server/domains/network/replay.js +1 -4
  231. package/dist/src/server/domains/platform/definitions.js +121 -112
  232. package/dist/src/server/domains/platform/handlers/bridge-handlers.d.ts +4 -0
  233. package/dist/src/server/domains/platform/handlers/bridge-handlers.js +193 -4
  234. package/dist/src/server/domains/platform/handlers/electron-asar-helpers.js +26 -6
  235. package/dist/src/server/domains/platform/handlers/electron-dual-cdp.d.ts +3 -0
  236. package/dist/src/server/domains/platform/handlers/electron-dual-cdp.js +170 -0
  237. package/dist/src/server/domains/platform/handlers/electron-fuse-handler.d.ts +3 -0
  238. package/dist/src/server/domains/platform/handlers/electron-fuse-handler.js +193 -0
  239. package/dist/src/server/domains/platform/handlers/electron-handlers.d.ts +6 -0
  240. package/dist/src/server/domains/platform/handlers/electron-handlers.js +95 -2
  241. package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.d.ts +2 -0
  242. package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.js +370 -0
  243. package/dist/src/server/domains/platform/handlers/electron-userdata-handler.d.ts +2 -0
  244. package/dist/src/server/domains/platform/handlers/electron-userdata-handler.js +78 -0
  245. package/dist/src/server/domains/platform/handlers/miniapp-handlers.js +3 -3
  246. package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.d.ts +2 -0
  247. package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.js +207 -0
  248. package/dist/src/server/domains/platform/handlers.d.ts +48 -0
  249. package/dist/src/server/domains/platform/handlers.js +29 -0
  250. package/dist/src/server/domains/platform/manifest.js +38 -0
  251. package/dist/src/server/domains/process/definitions.js +163 -647
  252. package/dist/src/server/domains/process/handlers.base.d.ts +3 -95
  253. package/dist/src/server/domains/process/handlers.base.js +7 -462
  254. package/dist/src/server/domains/process/handlers.base.process.d.ts +61 -0
  255. package/dist/src/server/domains/process/handlers.base.process.js +417 -0
  256. package/dist/src/server/domains/process/handlers.base.types.d.ts +57 -0
  257. package/dist/src/server/domains/process/handlers.base.types.js +50 -0
  258. package/dist/src/server/domains/process/handlers.impl.core.runtime.inject.js +18 -16
  259. package/dist/src/server/domains/process/manifest.js +6 -1
  260. package/dist/src/server/domains/sandbox/definitions.js +11 -33
  261. package/dist/src/server/domains/sandbox/handlers.js +8 -3
  262. package/dist/src/server/domains/shared/ResponseBuilder.d.ts +209 -0
  263. package/dist/src/server/domains/shared/ResponseBuilder.js +48 -0
  264. package/dist/src/server/domains/shared/modules.d.ts +0 -2
  265. package/dist/src/server/domains/shared/modules.js +0 -1
  266. package/dist/src/server/domains/sourcemap/definitions.js +27 -111
  267. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-common.js +7 -2
  268. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-main.js +1 -1
  269. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-parse-base.js +1 -1
  270. package/dist/src/server/domains/sourcemap/manifest.d.ts +1 -1
  271. package/dist/src/server/domains/sourcemap/manifest.js +1 -1
  272. package/dist/src/server/domains/streaming/definitions.js +36 -148
  273. package/dist/src/server/domains/streaming/handlers.impl.streaming-sse.js +163 -164
  274. package/dist/src/server/domains/streaming/handlers.impl.streaming-ws.js +1 -1
  275. package/dist/src/server/domains/trace/TraceSummarizer.js +8 -5
  276. package/dist/src/server/domains/trace/definitions.tools.js +51 -206
  277. package/dist/src/server/domains/trace/handlers.js +10 -12
  278. package/dist/src/server/domains/trace/index.d.ts +2 -1
  279. package/dist/src/server/domains/trace/index.js +2 -1
  280. package/dist/src/server/domains/trace/manifest.js +15 -3
  281. package/dist/src/server/domains/transform/definitions.js +50 -210
  282. package/dist/src/server/domains/transform/handlers.impl.transform-base.js +108 -108
  283. package/dist/src/server/domains/transform/handlers.impl.transform-crypto.js +18 -19
  284. package/dist/src/server/domains/transform/manifest.d.ts +1 -1
  285. package/dist/src/server/domains/transform/manifest.js +1 -1
  286. package/dist/src/server/domains/wasm/definitions.js +55 -232
  287. package/dist/src/server/domains/wasm/handlers.js +1 -1
  288. package/dist/src/server/domains/workflow/definitions.js +144 -414
  289. package/dist/src/server/domains/workflow/handlers.impl.workflow-account-bundle.js +1 -1
  290. package/dist/src/server/domains/workflow/handlers.impl.workflow-api.js +51 -51
  291. package/dist/src/server/domains/workflow/handlers.impl.workflow-base.d.ts +2 -0
  292. package/dist/src/server/domains/workflow/handlers.impl.workflow-base.js +126 -87
  293. package/dist/src/server/domains/workflow/handlers.impl.workflow-batch.js +5 -5
  294. package/dist/src/server/evidence/ReverseEvidenceGraph.d.ts +20 -0
  295. package/dist/src/server/evidence/ReverseEvidenceGraph.js +208 -0
  296. package/dist/src/server/evidence/index.d.ts +2 -0
  297. package/dist/src/server/evidence/index.js +1 -0
  298. package/dist/src/server/evidence/types.d.ts +22 -0
  299. package/dist/src/server/evidence/types.js +1 -0
  300. package/dist/src/server/extensions/ExtensionManager.d.ts +1 -0
  301. package/dist/src/server/extensions/ExtensionManager.discovery.js +72 -9
  302. package/dist/src/server/extensions/ExtensionManager.integrity.js +1 -1
  303. package/dist/src/server/extensions/ExtensionManager.js +193 -40
  304. package/dist/src/server/extensions/ExtensionManager.roots.d.ts +1 -1
  305. package/dist/src/server/extensions/ExtensionManager.roots.js +4 -4
  306. package/dist/src/server/extensions/plugin-config.js +1 -1
  307. package/dist/src/server/extensions/plugin-env.d.ts +1 -1
  308. package/dist/src/server/extensions/plugin-env.js +10 -4
  309. package/dist/src/server/extensions/types.d.ts +17 -0
  310. package/dist/src/server/extensions/types.js +1 -1
  311. package/dist/src/server/instrumentation/EvidenceGraphBridge.d.ts +13 -0
  312. package/dist/src/server/instrumentation/EvidenceGraphBridge.js +150 -0
  313. package/dist/src/server/instrumentation/InstrumentationSession.d.ts +60 -0
  314. package/dist/src/server/instrumentation/InstrumentationSession.js +269 -0
  315. package/dist/src/server/instrumentation/index.d.ts +2 -0
  316. package/dist/src/server/instrumentation/index.js +2 -0
  317. package/dist/src/server/instrumentation/types.d.ts +62 -0
  318. package/dist/src/server/instrumentation/types.js +7 -0
  319. package/dist/src/server/macros/MacroConfigLoader.d.ts +6 -5
  320. package/dist/src/server/macros/MacroConfigLoader.js +61 -59
  321. package/dist/src/server/macros/MacroRunner.js +6 -2
  322. package/dist/src/server/macros/builtins/index.d.ts +2 -3
  323. package/dist/src/server/macros/builtins/index.js +51 -7
  324. package/dist/src/server/plugins/PluginContract.d.ts +1 -1
  325. package/dist/src/server/registry/contracts.d.ts +1 -1
  326. package/dist/src/server/registry/discovery.js +5 -4
  327. package/dist/src/server/registry/ensure-browser-core.js +0 -3
  328. package/dist/src/server/registry/index.js +4 -4
  329. package/dist/src/server/registry/tool-builder.d.ts +46 -0
  330. package/dist/src/server/registry/tool-builder.js +105 -0
  331. package/dist/src/server/sandbox/QuickJSSandbox.js +16 -5
  332. package/dist/src/server/sandbox/SandboxHelpers.js +250 -250
  333. package/dist/src/server/search/EmbeddingWorker.js +5 -3
  334. package/dist/src/server/search/FeedbackTracker.d.ts +9 -0
  335. package/dist/src/server/search/FeedbackTracker.js +26 -0
  336. package/dist/src/server/search/QueryNormalizer.d.ts +6 -0
  337. package/dist/src/server/search/QueryNormalizer.js +94 -0
  338. package/dist/src/server/search/ToolSearchEngineImpl.d.ts +2 -3
  339. package/dist/src/server/search/ToolSearchEngineImpl.js +38 -88
  340. package/dist/src/server/workflows/WorkflowContract.d.ts +24 -0
  341. package/dist/src/server/workflows/WorkflowContract.js +12 -0
  342. package/dist/src/server/workflows/WorkflowEngine.d.ts +1 -0
  343. package/dist/src/server/workflows/WorkflowEngine.js +136 -3
  344. package/dist/src/types/config.d.ts +0 -14
  345. package/dist/src/types/deobfuscator.d.ts +0 -1
  346. package/dist/src/types/index.d.ts +1 -1
  347. package/dist/src/utils/DetailedDataManager.js +2 -0
  348. package/dist/src/utils/RingBuffer.js +5 -5
  349. package/dist/src/utils/TokenBudgetManager.js +1 -1
  350. package/dist/src/utils/UnifiedCacheManager.js +1 -1
  351. package/dist/src/utils/artifactRetention.js +2 -2
  352. package/dist/src/utils/betterSqlite3.d.ts +11 -0
  353. package/dist/src/utils/betterSqlite3.js +88 -0
  354. package/dist/src/utils/browserExecutable.js +2 -2
  355. package/dist/src/utils/cliFastPath.js +5 -8
  356. package/dist/src/utils/config.js +4 -26
  357. package/dist/src/utils/environmentDoctor.js +138 -11
  358. package/dist/src/utils/outputPaths.js +16 -9
  359. package/dist/src/utils/parallel.js +1 -3
  360. package/package.json +74 -72
  361. package/workflows/.gitkeep +0 -0
  362. package/dist/src/modules/analyzer/AISummarizer.d.ts +0 -39
  363. package/dist/src/modules/analyzer/AISummarizer.js +0 -122
  364. package/dist/src/modules/hook/AIHookGenerator.d.ts +0 -52
  365. package/dist/src/modules/hook/AIHookGenerator.js +0 -360
  366. package/dist/src/modules/hook/AIHookGeneratorTemplates.d.ts +0 -9
  367. package/dist/src/modules/hook/AIHookGeneratorTemplates.js +0 -157
  368. package/dist/src/server/macros/builtins/deobfuscate-ast-flow.d.ts +0 -2
  369. package/dist/src/server/macros/builtins/deobfuscate-ast-flow.js +0 -25
  370. package/dist/src/server/macros/builtins/unpacker-flow.d.ts +0 -2
  371. package/dist/src/server/macros/builtins/unpacker-flow.js +0 -25
  372. package/dist/src/services/LLMService.d.ts +0 -37
  373. package/dist/src/services/LLMService.js +0 -233
  374. package/dist/src/services/prompts/analysis.d.ts +0 -9
  375. package/dist/src/services/prompts/analysis.js +0 -158
  376. package/dist/src/services/prompts/crypto.d.ts +0 -2
  377. package/dist/src/services/prompts/crypto.js +0 -108
  378. package/dist/src/services/prompts/deobfuscation.d.ts +0 -6
  379. package/dist/src/services/prompts/deobfuscation.js +0 -300
  380. package/dist/src/services/prompts/environment.d.ts +0 -16
  381. package/dist/src/services/prompts/environment.js +0 -372
  382. package/dist/src/services/prompts/intelligence.d.ts +0 -4
  383. package/dist/src/services/prompts/intelligence.js +0 -250
  384. package/dist/src/services/prompts/taint.d.ts +0 -2
  385. 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)) {
@@ -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
  ];
@@ -16,7 +16,10 @@ export class SandboxToolHandlers {
16
16
  if (!code || typeof code !== 'string') {
17
17
  return {
18
18
  content: [
19
- { type: 'text', text: JSON.stringify({ ok: false, error: 'code parameter is required' }) },
19
+ {
20
+ type: 'text',
21
+ text: JSON.stringify({ ok: false, error: 'code parameter is required' }),
22
+ },
20
23
  ],
21
24
  };
22
25
  }
@@ -30,7 +33,7 @@ export class SandboxToolHandlers {
30
33
  options.sessionId = sessionId;
31
34
  const scratchpadState = this.scratchpad.getAll(sessionId);
32
35
  options.globals = {
33
- ...(options.globals ?? {}),
36
+ ...options.globals,
34
37
  __scratchpad: scratchpadState,
35
38
  };
36
39
  }
@@ -53,7 +56,9 @@ export class SandboxToolHandlers {
53
56
  `**Status:** ${result.ok ? '✓ Success' : '✗ Failed'}`,
54
57
  result.timedOut ? '**Timed out:** yes' : '',
55
58
  `**Duration:** ${result.durationMs}ms`,
56
- result.logs.length > 0 ? `**Console output:**\n\`\`\`\n${result.logs.join('\n')}\n\`\`\`` : '',
59
+ result.logs.length > 0
60
+ ? `**Console output:**\n\`\`\`\n${result.logs.join('\n')}\n\`\`\``
61
+ : '',
57
62
  result.output !== undefined ? `**Result:** ${JSON.stringify(result.output)}` : '',
58
63
  result.error ? `**Error:** ${result.error}` : '',
59
64
  ]