@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,170 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { toTextResponse, toErrorResponse, parseStringArg, pathExists, } from '../../../domains/platform/handlers/platform-utils.js';
4
+ const FUSE_SENTINEL = 'dL7pKGdnNz796PbbjQWNKmHXBZIA';
5
+ const FUSE_ENABLE = 0x31;
6
+ const launchedProcesses = new Map();
7
+ async function quickFuseCheck(exePath) {
8
+ try {
9
+ const buffer = await readFile(exePath);
10
+ const sentinelBuf = Buffer.from(FUSE_SENTINEL, 'ascii');
11
+ const idx = buffer.indexOf(sentinelBuf);
12
+ if (idx === -1)
13
+ return { fuseFound: false, runAsNode: false, inspectArgs: false, nodeOptions: false };
14
+ const base = idx + sentinelBuf.length;
15
+ return {
16
+ fuseFound: true,
17
+ runAsNode: buffer[base] === FUSE_ENABLE,
18
+ nodeOptions: buffer[base + 2] === FUSE_ENABLE,
19
+ inspectArgs: buffer[base + 3] === FUSE_ENABLE,
20
+ };
21
+ }
22
+ catch {
23
+ return { fuseFound: false, runAsNode: false, inspectArgs: false, nodeOptions: false };
24
+ }
25
+ }
26
+ async function waitForCDP(port, timeoutMs = 10_000) {
27
+ const start = Date.now();
28
+ while (Date.now() - start < timeoutMs) {
29
+ try {
30
+ const res = await fetch(`http://127.0.0.1:${port}/json/version`, {
31
+ signal: AbortSignal.timeout(2000),
32
+ });
33
+ if (res.ok) {
34
+ const info = await res.text();
35
+ return { ok: true, info };
36
+ }
37
+ }
38
+ catch {
39
+ }
40
+ await new Promise((r) => setTimeout(r, 500));
41
+ }
42
+ return { ok: false, error: `CDP port ${port} did not respond within ${timeoutMs}ms` };
43
+ }
44
+ export async function handleElectronLaunchDebug(args) {
45
+ try {
46
+ const exePath = parseStringArg(args, 'exePath', true);
47
+ if (!exePath) {
48
+ throw new Error('exePath is required — path to the Electron .exe');
49
+ }
50
+ if (!(await pathExists(exePath))) {
51
+ return toTextResponse({
52
+ success: false,
53
+ tool: 'electron_launch_debug',
54
+ error: `File does not exist: ${exePath}`,
55
+ });
56
+ }
57
+ const mainPort = args.mainPort ?? 9229;
58
+ const rendererPort = args.rendererPort ?? 9222;
59
+ const extraArgs = args.args ?? [];
60
+ const skipFuseCheck = args.skipFuseCheck === true;
61
+ const waitMs = args.waitMs ?? 8000;
62
+ const fuseWarnings = [];
63
+ if (!skipFuseCheck) {
64
+ const fuses = await quickFuseCheck(exePath);
65
+ if (fuses.fuseFound) {
66
+ if (!fuses.inspectArgs) {
67
+ fuseWarnings.push('EnableNodeCliInspectArguments is DISABLED — main process --inspect may be blocked. Use electron_patch_fuses first.');
68
+ }
69
+ if (!fuses.nodeOptions) {
70
+ fuseWarnings.push('EnableNodeOptionsEnvironmentVariable is DISABLED — NODE_OPTIONS injection blocked.');
71
+ }
72
+ if (!fuses.runAsNode) {
73
+ fuseWarnings.push('RunAsNode is DISABLED — ELECTRON_RUN_AS_NODE=1 will not work.');
74
+ }
75
+ }
76
+ }
77
+ const launchArgs = [
78
+ `--inspect=${mainPort}`,
79
+ `--remote-debugging-port=${rendererPort}`,
80
+ ...extraArgs,
81
+ ];
82
+ const child = spawn(exePath, launchArgs, {
83
+ stdio: 'ignore',
84
+ detached: true,
85
+ env: { ...process.env },
86
+ });
87
+ child.unref();
88
+ if (!child.pid) {
89
+ return toTextResponse({
90
+ success: false,
91
+ tool: 'electron_launch_debug',
92
+ error: 'Failed to spawn process — no PID returned.',
93
+ });
94
+ }
95
+ const sessionId = `electron-${child.pid}`;
96
+ launchedProcesses.set(sessionId, {
97
+ child,
98
+ pid: child.pid,
99
+ ports: { main: mainPort, renderer: rendererPort },
100
+ });
101
+ const [mainCDP, rendererCDP] = await Promise.all([
102
+ waitForCDP(mainPort, waitMs),
103
+ waitForCDP(rendererPort, waitMs),
104
+ ]);
105
+ return toTextResponse({
106
+ success: true,
107
+ tool: 'electron_launch_debug',
108
+ sessionId,
109
+ pid: child.pid,
110
+ ports: {
111
+ main: { port: mainPort, available: mainCDP.ok, info: mainCDP.ok ? 'Ready' : mainCDP.error },
112
+ renderer: {
113
+ port: rendererPort,
114
+ available: rendererCDP.ok,
115
+ info: rendererCDP.ok ? 'Ready' : rendererCDP.error,
116
+ },
117
+ },
118
+ fuseWarnings: fuseWarnings.length > 0 ? fuseWarnings : undefined,
119
+ usage: {
120
+ main: `Use electron_attach(port=${mainPort}) to debug the main process (Node.js)`,
121
+ renderer: `Use electron_attach(port=${rendererPort}) to debug the renderer (Chromium)`,
122
+ combined: 'Both sessions can be used simultaneously for cross-process analysis',
123
+ },
124
+ });
125
+ }
126
+ catch (error) {
127
+ return toErrorResponse('electron_launch_debug', error);
128
+ }
129
+ }
130
+ export async function handleElectronDebugStatus(args) {
131
+ try {
132
+ const sessionId = parseStringArg(args, 'sessionId');
133
+ if (sessionId) {
134
+ const session = launchedProcesses.get(sessionId);
135
+ if (!session) {
136
+ return toTextResponse({
137
+ success: false,
138
+ tool: 'electron_debug_status',
139
+ error: `No session found: ${sessionId}`,
140
+ activeSessions: Array.from(launchedProcesses.keys()),
141
+ });
142
+ }
143
+ const [mainCDP, rendererCDP] = await Promise.all([
144
+ waitForCDP(session.ports.main, 2000),
145
+ waitForCDP(session.ports.renderer, 2000),
146
+ ]);
147
+ return toTextResponse({
148
+ success: true,
149
+ tool: 'electron_debug_status',
150
+ sessionId,
151
+ pid: session.pid,
152
+ main: { port: session.ports.main, alive: mainCDP.ok },
153
+ renderer: { port: session.ports.renderer, alive: rendererCDP.ok },
154
+ });
155
+ }
156
+ const sessions = Array.from(launchedProcesses.entries()).map(([id, s]) => ({
157
+ sessionId: id,
158
+ pid: s.pid,
159
+ ports: s.ports,
160
+ }));
161
+ return toTextResponse({
162
+ success: true,
163
+ tool: 'electron_debug_status',
164
+ sessions,
165
+ });
166
+ }
167
+ catch (error) {
168
+ return toErrorResponse('electron_debug_status', error);
169
+ }
170
+ }
@@ -0,0 +1,3 @@
1
+ import { toTextResponse } from '../../../domains/platform/handlers/platform-utils.js';
2
+ export declare function handleElectronCheckFuses(args: Record<string, unknown>): Promise<ReturnType<typeof toTextResponse>>;
3
+ export declare function handleElectronPatchFuses(args: Record<string, unknown>): Promise<ReturnType<typeof toTextResponse>>;
@@ -0,0 +1,193 @@
1
+ import { readFile, writeFile, copyFile } from 'node:fs/promises';
2
+ import { toTextResponse, toErrorResponse, parseStringArg, pathExists, } from '../../../domains/platform/handlers/platform-utils.js';
3
+ const FUSE_SENTINEL = 'dL7pKGdnNz796PbbjQWNKmHXBZIA';
4
+ const FUSE_NAMES = [
5
+ 'RunAsNode',
6
+ 'EnableCookieEncryption',
7
+ 'EnableNodeOptionsEnvironmentVariable',
8
+ 'EnableNodeCliInspectArguments',
9
+ 'EnableEmbeddedAsarIntegrityValidation',
10
+ 'OnlyLoadAppFromAsar',
11
+ 'LoadBrowserProcessSpecificV8Snapshot',
12
+ 'GrantFileProtocolExtraPrivileges',
13
+ ];
14
+ const FUSE_DISABLE = 0x30;
15
+ const FUSE_ENABLE = 0x31;
16
+ const FUSE_REMOVED = 0x72;
17
+ const FUSE_LABEL = {
18
+ [FUSE_DISABLE]: 'DISABLE',
19
+ [FUSE_ENABLE]: 'ENABLE',
20
+ [FUSE_REMOVED]: 'REMOVED',
21
+ };
22
+ const DEBUG_PATCH_PROFILE = {
23
+ RunAsNode: 'ENABLE',
24
+ EnableNodeOptionsEnvironmentVariable: 'ENABLE',
25
+ EnableNodeCliInspectArguments: 'ENABLE',
26
+ OnlyLoadAppFromAsar: 'DISABLE',
27
+ };
28
+ function parseFuses(buffer, sentinelIndex) {
29
+ const fuseDataStart = sentinelIndex + Buffer.from(FUSE_SENTINEL, 'ascii').length;
30
+ const fuses = {};
31
+ for (let i = 0; i < FUSE_NAMES.length; i++) {
32
+ const fuseName = FUSE_NAMES[i];
33
+ if (!fuseName)
34
+ continue;
35
+ const byteIndex = fuseDataStart + i;
36
+ if (byteIndex >= buffer.length) {
37
+ fuses[fuseName] = 'UNKNOWN';
38
+ continue;
39
+ }
40
+ const byteValue = buffer[byteIndex];
41
+ if (byteValue === undefined) {
42
+ fuses[fuseName] = 'UNKNOWN';
43
+ continue;
44
+ }
45
+ fuses[fuseName] = FUSE_LABEL[byteValue] ?? 'UNKNOWN';
46
+ }
47
+ return fuses;
48
+ }
49
+ export async function handleElectronCheckFuses(args) {
50
+ try {
51
+ const exePath = parseStringArg(args, 'exePath', true);
52
+ if (!exePath) {
53
+ throw new Error('exePath is required');
54
+ }
55
+ if (!(await pathExists(exePath))) {
56
+ return toTextResponse({
57
+ success: false,
58
+ tool: 'electron_check_fuses',
59
+ error: `File does not exist: ${exePath}`,
60
+ });
61
+ }
62
+ const buffer = await readFile(exePath);
63
+ const sentinelBuffer = Buffer.from(FUSE_SENTINEL, 'ascii');
64
+ const sentinelIndex = buffer.indexOf(sentinelBuffer);
65
+ if (sentinelIndex === -1) {
66
+ return toTextResponse({
67
+ success: true,
68
+ tool: 'electron_check_fuses',
69
+ exePath,
70
+ fuseWireFound: false,
71
+ fuses: {},
72
+ note: 'No fuse sentinel found. This may not be an Electron binary, or fuses are not configured.',
73
+ });
74
+ }
75
+ const fuses = parseFuses(buffer, sentinelIndex);
76
+ return toTextResponse({
77
+ success: true,
78
+ tool: 'electron_check_fuses',
79
+ exePath,
80
+ fuseWireFound: true,
81
+ fuses,
82
+ });
83
+ }
84
+ catch (error) {
85
+ return toErrorResponse('electron_check_fuses', error);
86
+ }
87
+ }
88
+ export async function handleElectronPatchFuses(args) {
89
+ try {
90
+ const exePath = parseStringArg(args, 'exePath', true);
91
+ if (!exePath) {
92
+ throw new Error('exePath is required');
93
+ }
94
+ if (!(await pathExists(exePath))) {
95
+ return toTextResponse({
96
+ success: false,
97
+ tool: 'electron_patch_fuses',
98
+ error: `File does not exist: ${exePath}`,
99
+ });
100
+ }
101
+ const profile = parseStringArg(args, 'profile') ?? 'debug';
102
+ const createBackup = args.createBackup !== false;
103
+ let patchMap;
104
+ if (profile === 'debug') {
105
+ patchMap = { ...DEBUG_PATCH_PROFILE };
106
+ }
107
+ else if (profile === 'custom') {
108
+ const customFuses = args.fuses;
109
+ if (!customFuses || Object.keys(customFuses).length === 0) {
110
+ throw new Error('profile="custom" requires a `fuses` object mapping fuse names to ENABLE/DISABLE');
111
+ }
112
+ patchMap = {};
113
+ for (const [name, value] of Object.entries(customFuses)) {
114
+ if (!FUSE_NAMES.includes(name)) {
115
+ throw new Error(`Unknown fuse: ${name}. Valid: ${FUSE_NAMES.join(', ')}`);
116
+ }
117
+ if (value !== 'ENABLE' && value !== 'DISABLE') {
118
+ throw new Error(`Invalid fuse value for ${name}: ${value}. Must be ENABLE or DISABLE`);
119
+ }
120
+ patchMap[name] = value;
121
+ }
122
+ }
123
+ else {
124
+ throw new Error(`Unknown profile: ${profile}. Use "debug" or "custom"`);
125
+ }
126
+ const buffer = await readFile(exePath);
127
+ const sentinelBuffer = Buffer.from(FUSE_SENTINEL, 'ascii');
128
+ const sentinelIndex = buffer.indexOf(sentinelBuffer);
129
+ if (sentinelIndex === -1) {
130
+ return toTextResponse({
131
+ success: false,
132
+ tool: 'electron_patch_fuses',
133
+ error: 'No fuse sentinel found. This may not be an Electron binary.',
134
+ exePath,
135
+ });
136
+ }
137
+ const fusesBefore = parseFuses(buffer, sentinelIndex);
138
+ const fuseDataStart = sentinelIndex + sentinelBuffer.length;
139
+ const changes = [];
140
+ for (const [fuseName, targetState] of Object.entries(patchMap)) {
141
+ const fuseIndex = FUSE_NAMES.indexOf(fuseName);
142
+ if (fuseIndex === -1)
143
+ continue;
144
+ const byteIndex = fuseDataStart + fuseIndex;
145
+ if (byteIndex >= buffer.length)
146
+ continue;
147
+ const currentByte = buffer[byteIndex];
148
+ if (currentByte === FUSE_REMOVED) {
149
+ changes.push({ fuse: fuseName, before: 'REMOVED', after: 'REMOVED (cannot patch)' });
150
+ continue;
151
+ }
152
+ const targetByte = targetState === 'ENABLE' ? FUSE_ENABLE : FUSE_DISABLE;
153
+ const currentLabel = FUSE_LABEL[currentByte ?? 0] ?? 'UNKNOWN';
154
+ if (currentByte === targetByte) {
155
+ continue;
156
+ }
157
+ buffer[byteIndex] = targetByte;
158
+ changes.push({ fuse: fuseName, before: currentLabel, after: targetState });
159
+ }
160
+ if (changes.length === 0) {
161
+ return toTextResponse({
162
+ success: true,
163
+ tool: 'electron_patch_fuses',
164
+ exePath,
165
+ message: 'All target fuses are already in the desired state. No changes needed.',
166
+ fuses: fusesBefore,
167
+ });
168
+ }
169
+ let backupPath = null;
170
+ if (createBackup) {
171
+ backupPath = `${exePath}.bak`;
172
+ await copyFile(exePath, backupPath);
173
+ }
174
+ await writeFile(exePath, buffer);
175
+ const fusesAfter = parseFuses(buffer, sentinelIndex);
176
+ return toTextResponse({
177
+ success: true,
178
+ tool: 'electron_patch_fuses',
179
+ exePath,
180
+ backupPath,
181
+ profile,
182
+ changes,
183
+ fusesBefore,
184
+ fusesAfter,
185
+ note: backupPath
186
+ ? `Backup created at ${backupPath}. Restore with: copy "${backupPath}" "${exePath}"`
187
+ : 'No backup created (createBackup=false).',
188
+ });
189
+ }
190
+ catch (error) {
191
+ return toErrorResponse('electron_patch_fuses', error);
192
+ }
193
+ }
@@ -14,4 +14,10 @@ export declare class ElectronHandlers {
14
14
  text: string;
15
15
  }[];
16
16
  }>;
17
+ handleAsarSearch(args: Record<string, unknown>): Promise<{
18
+ content: {
19
+ type: "text";
20
+ text: string;
21
+ }[];
22
+ }>;
17
23
  }
@@ -200,7 +200,7 @@ export class ElectronHandlers {
200
200
  : 'index.js';
201
201
  const version = typeof packageJson.version === 'string' ? packageJson.version : null;
202
202
  const dependenciesRaw = packageJson.dependencies;
203
- const dependencies = isRecord(dependenciesRaw) ? Object.keys(dependenciesRaw).sort() : [];
203
+ const dependencies = isRecord(dependenciesRaw) ? Object.keys(dependenciesRaw).toSorted() : [];
204
204
  let mainScriptSource = '';
205
205
  let mainScriptPath = '';
206
206
  if (packageSource === 'asar' && parsedAsar && asarBuffer) {
@@ -273,7 +273,7 @@ export class ElectronHandlers {
273
273
  scanRoot: scanRoot.replace(/\\/g, '/'),
274
274
  mainEntry,
275
275
  version,
276
- preloadScripts: Array.from(preloadScripts).sort(),
276
+ preloadScripts: Array.from(preloadScripts).toSorted(),
277
277
  dependencies,
278
278
  devToolsEnabled,
279
279
  packageSource,
@@ -292,4 +292,97 @@ export class ElectronHandlers {
292
292
  return toErrorResponse('electron_inspect_app', error);
293
293
  }
294
294
  }
295
+ async handleAsarSearch(args) {
296
+ try {
297
+ const inputPath = parseStringArg(args, 'inputPath', true);
298
+ const searchPattern = parseStringArg(args, 'pattern', true);
299
+ if (!inputPath)
300
+ throw new Error('inputPath is required');
301
+ if (!searchPattern)
302
+ throw new Error('pattern is required');
303
+ const fileGlob = parseStringArg(args, 'fileGlob') || '*.js';
304
+ const maxResults = typeof args.maxResults === 'number' && args.maxResults > 0 ? args.maxResults : 100;
305
+ const searchAbsPath = resolve(inputPath);
306
+ if (!(await pathExists(searchAbsPath))) {
307
+ return toTextResponse({
308
+ success: false,
309
+ tool: 'asar_search',
310
+ error: `File does not exist: ${inputPath}`,
311
+ });
312
+ }
313
+ const searchAsarBuf = await readFile(searchAbsPath);
314
+ const searchParsed = parseAsarBuffer(searchAsarBuf);
315
+ const globExt = fileGlob.startsWith('*.') ? fileGlob.slice(1) : null;
316
+ const matchingFiles = searchParsed.files.filter((entry) => {
317
+ if (entry.unpacked || entry.size <= 0)
318
+ return false;
319
+ if (globExt) {
320
+ return extname(entry.path).toLowerCase() === globExt.toLowerCase();
321
+ }
322
+ return true;
323
+ });
324
+ let regex;
325
+ try {
326
+ regex = new RegExp(searchPattern, 'gi');
327
+ }
328
+ catch {
329
+ return toTextResponse({
330
+ success: false,
331
+ tool: 'asar_search',
332
+ error: `Invalid regex pattern: ${searchPattern}`,
333
+ });
334
+ }
335
+ const matches = [];
336
+ let totalMatches = 0;
337
+ let filesScanned = 0;
338
+ for (const entry of matchingFiles) {
339
+ if (totalMatches >= maxResults)
340
+ break;
341
+ const start = searchParsed.dataOffset + entry.offset;
342
+ const end = start + entry.size;
343
+ if (start < 0 || end > searchAsarBuf.length || end < start)
344
+ continue;
345
+ if (entry.size > 512_000)
346
+ continue;
347
+ const content = searchAsarBuf.subarray(start, end).toString('utf-8');
348
+ filesScanned++;
349
+ regex.lastIndex = 0;
350
+ const lines = content.split('\n');
351
+ const fileMatches = [];
352
+ for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {
353
+ if (totalMatches >= maxResults)
354
+ break;
355
+ const line = lines[lineIdx];
356
+ if (!line)
357
+ continue;
358
+ regex.lastIndex = 0;
359
+ if (regex.test(line)) {
360
+ fileMatches.push({
361
+ lineNumber: lineIdx + 1,
362
+ text: line.slice(0, 200),
363
+ });
364
+ totalMatches++;
365
+ }
366
+ }
367
+ if (fileMatches.length > 0) {
368
+ matches.push({
369
+ filePath: entry.path,
370
+ matchCount: fileMatches.length,
371
+ matchLines: fileMatches,
372
+ });
373
+ }
374
+ }
375
+ return toTextResponse({
376
+ success: true,
377
+ tool: 'asar_search',
378
+ matches,
379
+ totalMatches,
380
+ filesScanned,
381
+ pattern: searchPattern,
382
+ });
383
+ }
384
+ catch (error) {
385
+ return toErrorResponse('asar_search', error);
386
+ }
387
+ }
295
388
  }
@@ -0,0 +1,2 @@
1
+ import { toTextResponse } from '../../../domains/platform/handlers/platform-utils.js';
2
+ export declare function handleElectronIPCSniff(args: Record<string, unknown>): Promise<ReturnType<typeof toTextResponse>>;