@jshookmcp/jshook 0.2.2 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -661
- package/README.md +15 -6
- package/README.zh.md +19 -4
- package/dist/native/scripts/linux/enum-windows.sh +12 -12
- package/dist/native/scripts/macos/enum-windows.applescript +22 -22
- package/dist/native/scripts/windows/enum-windows-by-class.ps1 +51 -51
- package/dist/native/scripts/windows/enum-windows.ps1 +44 -44
- package/dist/native/scripts/windows/inject-dll.ps1 +21 -21
- package/dist/packages/extension-sdk/src/bridges/shared.js +2 -2
- package/dist/packages/extension-sdk/src/plugin.d.ts +5 -0
- package/dist/packages/extension-sdk/src/plugin.js +119 -33
- package/dist/packages/extension-sdk/src/workflow.d.ts +156 -0
- package/dist/packages/extension-sdk/src/workflow.js +236 -0
- package/dist/src/config/search-defaults.js +161 -0
- package/dist/src/constants.d.ts +3 -0
- package/dist/src/constants.js +4 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +13 -17
- package/dist/src/modules/analyzer/CodeAnalyzer.d.ts +1 -3
- package/dist/src/modules/analyzer/CodeAnalyzer.js +16 -28
- package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.d.ts +1 -2
- package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.js +1 -45
- package/dist/src/modules/analyzer/IntelligentAnalyzer.d.ts +1 -37
- package/dist/src/modules/analyzer/IntelligentAnalyzer.js +9 -142
- package/dist/src/modules/analyzer/PatternDetector.js +3 -3
- package/dist/src/modules/analyzer/PatternDetectorAuthPatterns.js +1 -1
- package/dist/src/modules/browser/BrowserDiscovery.d.ts +6 -5
- package/dist/src/modules/browser/BrowserDiscovery.js +3 -3
- package/dist/src/modules/browser/BrowserModeManager.d.ts +1 -1
- package/dist/src/modules/browser/BrowserModeManager.js +11 -10
- package/dist/src/modules/browser/TabRegistry.js +2 -2
- package/dist/src/modules/browser/UnifiedBrowserManager.d.ts +1 -0
- package/dist/src/modules/browser/UnifiedBrowserManager.js +19 -4
- package/dist/src/modules/captcha/AICaptchaDetector.d.ts +14 -23
- package/dist/src/modules/captcha/AICaptchaDetector.js +8 -202
- package/dist/src/modules/captcha/CaptchaDetector.d.ts +31 -17
- package/dist/src/modules/captcha/CaptchaDetector.js +1 -1
- package/dist/src/modules/collector/CodeCache.d.ts +2 -2
- package/dist/src/modules/collector/CodeCollector.d.ts +12 -9
- package/dist/src/modules/collector/CodeCollector.js +5 -6
- package/dist/src/modules/collector/DOMInspector.d.ts +3 -2
- package/dist/src/modules/collector/DOMInspector.js +49 -59
- package/dist/src/modules/collector/PageController.d.ts +17 -4
- package/dist/src/modules/collector/PageController.js +2 -5
- package/dist/src/modules/collector/PageScriptCollectors.js +3 -3
- package/dist/src/modules/crypto/CryptoDetector.d.ts +1 -4
- package/dist/src/modules/crypto/CryptoDetector.js +2 -42
- package/dist/src/modules/crypto/CryptoRules.js +1 -1
- package/dist/src/modules/debugger/BlackboxManager.js +1 -1
- package/dist/src/modules/debugger/DebuggerManager.impl.core.scope.js +1 -1
- package/dist/src/modules/debugger/ScriptManager.impl.extract-function-tree.js +5 -3
- package/dist/src/modules/debugger/WatchExpressionManager.js +1 -1
- package/dist/src/modules/deobfuscator/Deobfuscator.d.ts +1 -4
- package/dist/src/modules/deobfuscator/Deobfuscator.js +4 -39
- package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.d.ts +0 -3
- package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.js +2 -8
- package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.d.ts +2 -3
- package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.js +5 -57
- package/dist/src/modules/deobfuscator/JScramblerDeobfuscator.js +3 -4
- package/dist/src/modules/deobfuscator/PackerDeobfuscator.js +1 -1
- package/dist/src/modules/deobfuscator/VMDeobfuscator.d.ts +2 -10
- package/dist/src/modules/deobfuscator/VMDeobfuscator.js +3 -128
- package/dist/src/modules/deobfuscator/webcrack.js +15 -2
- package/dist/src/modules/emulator/AIEnvironmentAnalyzer.d.ts +5 -8
- package/dist/src/modules/emulator/AIEnvironmentAnalyzer.js +10 -102
- package/dist/src/modules/emulator/EnvironmentEmulator.d.ts +1 -5
- package/dist/src/modules/emulator/EnvironmentEmulator.js +7 -91
- package/dist/src/modules/emulator/EnvironmentEmulatorFetch.js +58 -61
- package/dist/src/modules/emulator/templates/chrome-env.d.ts +17 -7
- package/dist/src/modules/emulator/templates/chrome-env.js +14 -7
- package/dist/src/modules/external/ExternalToolRunner.d.ts +1 -1
- package/dist/src/modules/external/ExternalToolRunner.js +26 -23
- package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.d.ts +13 -0
- package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.js +42 -0
- package/dist/src/modules/monitor/FetchInterceptor.d.ts +46 -0
- package/dist/src/modules/monitor/FetchInterceptor.js +191 -0
- package/dist/src/modules/monitor/PerformanceMonitor.js +8 -7
- package/dist/src/modules/process/BaseMemoryManager.d.ts +1 -1
- package/dist/src/modules/process/LinuxProcessManager.js +4 -2
- package/dist/src/modules/process/MacProcessManager.js +1 -1
- package/dist/src/modules/process/MemoryManager.d.ts +1 -1
- package/dist/src/modules/process/MemoryManager.js +2 -2
- package/dist/src/modules/process/ProcessManager.impl.js +1 -1
- package/dist/src/modules/process/memory/AuditTrail.js +1 -1
- package/dist/src/modules/process/memory/reader.js +35 -3
- package/dist/src/modules/process/memory/regions.enumerate.js +1 -1
- package/dist/src/modules/process/memory/regions.protection.js +42 -9
- package/dist/src/modules/process/memory/scanner.d.ts +5 -1
- package/dist/src/modules/process/memory/scanner.darwin.js +57 -0
- package/dist/src/modules/process/memory/scanner.js +88 -4
- package/dist/src/modules/process/memory/writer.js +44 -4
- package/dist/src/modules/security/ExecutionSandbox.js +7 -8
- package/dist/src/modules/stealth/FingerprintManager.js +1 -1
- package/dist/src/modules/stealth/StealthScripts.d.ts +4 -2
- package/dist/src/modules/stealth/StealthScripts.js +53 -14
- package/dist/src/modules/stealth/StealthVerifier.d.ts +1 -1
- package/dist/src/modules/stealth/StealthVerifier.js +2 -4
- package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.d.ts +14 -0
- package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.js +181 -2
- package/dist/src/modules/trace/TraceDB.js +12 -6
- package/dist/src/modules/trace/TraceRecorder.js +1 -5
- package/dist/src/native/AntiCheatDetector.js +67 -16
- package/dist/src/native/CodeInjector.js +4 -4
- package/dist/src/native/HardwareBreakpoint.js +25 -16
- package/dist/src/native/HeapAnalyzer.js +2 -2
- package/dist/src/native/MemoryController.js +1 -1
- package/dist/src/native/MemoryScanSession.js +2 -2
- package/dist/src/native/MemoryScanner.js +4 -8
- package/dist/src/native/NativeMemoryManager.impl.js +2 -2
- package/dist/src/native/PEAnalyzer.js +14 -15
- package/dist/src/native/PointerChainEngine.js +2 -4
- package/dist/src/native/ScriptLoader.js +4 -9
- package/dist/src/native/Speedhack.js +1 -1
- package/dist/src/native/StructureAnalyzer.js +52 -33
- package/dist/src/native/Win32API.d.ts +1 -0
- package/dist/src/native/Win32API.js +13 -0
- package/dist/src/native/Win32Debug.js +19 -19
- package/dist/src/native/platform/darwin/DarwinAPI.d.ts +2 -0
- package/dist/src/native/platform/darwin/DarwinAPI.js +8 -0
- package/dist/src/native/platform/darwin/DarwinMemoryProvider.js +6 -1
- package/dist/src/server/MCPServer.context.d.ts +2 -1
- package/dist/src/server/MCPServer.d.ts +2 -1
- package/dist/src/server/MCPServer.domain.d.ts +1 -1
- package/dist/src/server/MCPServer.domain.js +81 -16
- package/dist/src/server/MCPServer.js +42 -14
- package/dist/src/server/MCPServer.resources.d.ts +2 -0
- package/dist/src/server/MCPServer.resources.js +91 -0
- package/dist/src/server/MCPServer.search.handlers.call.js +2 -1
- package/dist/src/server/MCPServer.search.helpers.js +2 -2
- package/dist/src/server/MCPServer.tools.js +1 -1
- package/dist/src/server/MCPServer.transport.js +12 -0
- package/dist/src/server/ToolCallContextGuard.d.ts +5 -0
- package/dist/src/server/ToolCallContextGuard.js +85 -0
- package/dist/src/server/ToolRouter.d.ts +26 -10
- package/dist/src/server/ToolRouter.intent.d.ts +26 -0
- package/dist/src/server/ToolRouter.intent.js +77 -0
- package/dist/src/server/ToolRouter.js +103 -284
- package/dist/src/server/ToolRouter.policy.d.ts +22 -0
- package/dist/src/server/ToolRouter.policy.js +163 -0
- package/dist/src/server/ToolRouter.probe.d.ts +17 -0
- package/dist/src/server/ToolRouter.probe.js +103 -0
- package/dist/src/server/ToolRouter.renderer.d.ts +9 -0
- package/dist/src/server/ToolRouter.renderer.js +52 -0
- package/dist/src/server/activation/ActivationController.js +15 -12
- package/dist/src/server/activation/CompoundConditionEngine.js +1 -1
- package/dist/src/server/activation/PredictiveBooster.js +1 -3
- package/dist/src/server/domains/analysis/definitions.js +155 -655
- package/dist/src/server/domains/analysis/handlers.impl.d.ts +8 -8
- package/dist/src/server/domains/analysis/handlers.impl.js +34 -28
- package/dist/src/server/domains/analysis/handlers.web-tools.js +4 -3
- package/dist/src/server/domains/analysis/manifest.js +6 -4
- package/dist/src/server/domains/antidebug/definitions.js +25 -111
- package/dist/src/server/domains/browser/definitions.tools.advanced.js +59 -88
- package/dist/src/server/domains/browser/definitions.tools.behavior.js +120 -227
- package/dist/src/server/domains/browser/definitions.tools.page-core.js +157 -386
- package/dist/src/server/domains/browser/definitions.tools.page-system.js +108 -250
- package/dist/src/server/domains/browser/definitions.tools.runtime.js +61 -174
- package/dist/src/server/domains/browser/definitions.tools.security.js +92 -237
- package/dist/src/server/domains/browser/handlers/camoufox-browser.js +3 -2
- package/dist/src/server/domains/browser/handlers/captcha-solver.js +3 -3
- package/dist/src/server/domains/browser/handlers/dom-query.js +2 -1
- package/dist/src/server/domains/browser/handlers/facade-initializer.d.ts +3 -3
- package/dist/src/server/domains/browser/handlers/facade-initializer.js +3 -3
- package/dist/src/server/domains/browser/handlers/framework-state.js +231 -3
- package/dist/src/server/domains/browser/handlers/indexeddb-dump.js +21 -20
- package/dist/src/server/domains/browser/handlers/script-management.js +1 -1
- package/dist/src/server/domains/browser/handlers/stealth-injection.js +8 -2
- package/dist/src/server/domains/browser/handlers.impl.d.ts +15 -12
- package/dist/src/server/domains/browser/handlers.impl.js +5 -6
- package/dist/src/server/domains/browser/manifest.js +37 -13
- package/dist/src/server/domains/coordination/definitions.js +50 -149
- package/dist/src/server/domains/coordination/index.d.ts +20 -1
- package/dist/src/server/domains/coordination/index.js +133 -0
- package/dist/src/server/domains/coordination/manifest.js +15 -0
- package/dist/src/server/domains/debugger/definitions.tools.advanced.js +72 -189
- package/dist/src/server/domains/debugger/definitions.tools.core.js +114 -288
- package/dist/src/server/domains/debugger/manifest.js +9 -2
- package/dist/src/server/domains/encoding/definitions.js +43 -153
- package/dist/src/server/domains/encoding/handlers.base.js +2 -2
- package/dist/src/server/domains/evidence/definitions.d.ts +2 -0
- package/dist/src/server/domains/evidence/definitions.js +42 -0
- package/dist/src/server/domains/evidence/handlers.d.ts +582 -0
- package/dist/src/server/domains/evidence/handlers.js +60 -0
- package/dist/src/server/domains/evidence/index.d.ts +2 -0
- package/dist/src/server/domains/evidence/index.js +2 -0
- package/dist/src/server/domains/evidence/manifest.d.ts +63 -0
- package/dist/src/server/domains/evidence/manifest.js +78 -0
- package/dist/src/server/domains/graphql/definitions.js +53 -141
- package/dist/src/server/domains/graphql/handlers.impl.core.runtime.replay.js +92 -114
- package/dist/src/server/domains/hooks/ai-handlers.d.ts +0 -7
- package/dist/src/server/domains/hooks/ai-handlers.js +4 -70
- package/dist/src/server/domains/hooks/definitions.js +69 -335
- package/dist/src/server/domains/hooks/manifest.d.ts +1 -1
- package/dist/src/server/domains/hooks/manifest.js +1 -2
- package/dist/src/server/domains/instrumentation/definitions.d.ts +2 -0
- package/dist/src/server/domains/instrumentation/definitions.js +99 -0
- package/dist/src/server/domains/instrumentation/handlers.d.ts +78 -0
- package/dist/src/server/domains/instrumentation/handlers.js +206 -0
- package/dist/src/server/domains/instrumentation/index.d.ts +2 -0
- package/dist/src/server/domains/instrumentation/index.js +2 -0
- package/dist/src/server/domains/instrumentation/manifest.d.ts +63 -0
- package/dist/src/server/domains/instrumentation/manifest.js +114 -0
- package/dist/src/server/domains/macro/definitions.js +16 -43
- package/dist/src/server/domains/maintenance/definitions.js +60 -219
- package/dist/src/server/domains/maintenance/handlers.d.ts +2 -2
- package/dist/src/server/domains/maintenance/handlers.extensions.js +78 -20
- package/dist/src/server/domains/maintenance/handlers.js +2 -2
- package/dist/src/server/domains/memory/definitions.js +387 -559
- package/dist/src/server/domains/memory/handlers/hooks.d.ts +55 -0
- package/dist/src/server/domains/memory/handlers/hooks.js +115 -0
- package/dist/src/server/domains/memory/handlers/integrity.d.ts +77 -0
- package/dist/src/server/domains/memory/handlers/integrity.js +180 -0
- package/dist/src/server/domains/memory/handlers/pointer-chain.d.ts +29 -0
- package/dist/src/server/domains/memory/handlers/pointer-chain.js +82 -0
- package/dist/src/server/domains/memory/handlers/readwrite.d.ts +41 -0
- package/dist/src/server/domains/memory/handlers/readwrite.js +78 -0
- package/dist/src/server/domains/memory/handlers/scan.d.ts +35 -0
- package/dist/src/server/domains/memory/handlers/scan.js +97 -0
- package/dist/src/server/domains/memory/handlers/session.d.ts +23 -0
- package/dist/src/server/domains/memory/handlers/session.js +49 -0
- package/dist/src/server/domains/memory/handlers/structure.d.ts +29 -0
- package/dist/src/server/domains/memory/handlers/structure.js +74 -0
- package/dist/src/server/domains/memory/handlers.impl.d.ts +49 -54
- package/dist/src/server/domains/memory/handlers.impl.js +63 -494
- package/dist/src/server/domains/memory/manifest.js +236 -64
- package/dist/src/server/domains/native-bridge/definitions.js +54 -192
- package/dist/src/server/domains/native-bridge/index.d.ts +1 -0
- package/dist/src/server/domains/native-bridge/index.js +2 -1
- package/dist/src/server/domains/network/auth-extractor.js +1 -1
- package/dist/src/server/domains/network/definitions.js +175 -578
- package/dist/src/server/domains/network/handlers.base.core.d.ts +64 -0
- package/dist/src/server/domains/network/handlers.base.core.js +623 -0
- package/dist/src/server/domains/network/handlers.base.d.ts +2 -124
- package/dist/src/server/domains/network/handlers.base.js +3 -878
- package/dist/src/server/domains/network/handlers.base.performance.d.ts +63 -0
- package/dist/src/server/domains/network/handlers.base.performance.js +193 -0
- package/dist/src/server/domains/network/handlers.base.types.d.ts +42 -0
- package/dist/src/server/domains/network/handlers.base.types.js +89 -0
- package/dist/src/server/domains/network/handlers.impl.core.runtime.d.ts +1 -1
- package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.d.ts +21 -0
- package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.js +186 -0
- package/dist/src/server/domains/network/handlers.impl.core.runtime.js +1 -1
- package/dist/src/server/domains/network/manifest.js +15 -0
- package/dist/src/server/domains/network/replay.js +1 -4
- package/dist/src/server/domains/platform/definitions.js +121 -112
- package/dist/src/server/domains/platform/handlers/bridge-handlers.d.ts +5 -1
- package/dist/src/server/domains/platform/handlers/bridge-handlers.js +194 -5
- package/dist/src/server/domains/platform/handlers/electron-asar-helpers.js +26 -6
- package/dist/src/server/domains/platform/handlers/electron-dual-cdp.d.ts +3 -0
- package/dist/src/server/domains/platform/handlers/electron-dual-cdp.js +170 -0
- package/dist/src/server/domains/platform/handlers/electron-fuse-handler.d.ts +3 -0
- package/dist/src/server/domains/platform/handlers/electron-fuse-handler.js +193 -0
- package/dist/src/server/domains/platform/handlers/electron-handlers.d.ts +6 -0
- package/dist/src/server/domains/platform/handlers/electron-handlers.js +95 -2
- package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.d.ts +2 -0
- package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.js +370 -0
- package/dist/src/server/domains/platform/handlers/electron-userdata-handler.d.ts +2 -0
- package/dist/src/server/domains/platform/handlers/electron-userdata-handler.js +78 -0
- package/dist/src/server/domains/platform/handlers/miniapp-handlers.d.ts +1 -1
- package/dist/src/server/domains/platform/handlers/miniapp-handlers.js +4 -4
- package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.d.ts +2 -0
- package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.js +207 -0
- package/dist/src/server/domains/platform/handlers.d.ts +48 -0
- package/dist/src/server/domains/platform/handlers.js +29 -0
- package/dist/src/server/domains/platform/manifest.js +38 -0
- package/dist/src/server/domains/process/definitions.js +163 -647
- package/dist/src/server/domains/process/handlers.base.d.ts +3 -95
- package/dist/src/server/domains/process/handlers.base.js +7 -462
- package/dist/src/server/domains/process/handlers.base.process.d.ts +61 -0
- package/dist/src/server/domains/process/handlers.base.process.js +417 -0
- package/dist/src/server/domains/process/handlers.base.types.d.ts +57 -0
- package/dist/src/server/domains/process/handlers.base.types.js +50 -0
- package/dist/src/server/domains/process/handlers.impl.core.runtime.inject.js +19 -17
- package/dist/src/server/domains/process/manifest.js +6 -1
- package/dist/src/server/domains/sandbox/definitions.js +11 -33
- package/dist/src/server/domains/sandbox/handlers.js +8 -3
- package/dist/src/server/domains/shared/ResponseBuilder.d.ts +209 -0
- package/dist/src/server/domains/shared/ResponseBuilder.js +48 -0
- package/dist/src/server/domains/shared/modules.d.ts +0 -2
- package/dist/src/server/domains/shared/modules.js +0 -1
- package/dist/src/server/domains/sourcemap/definitions.js +27 -111
- package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-common.js +7 -2
- package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-main.js +1 -1
- package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-parse-base.js +1 -1
- package/dist/src/server/domains/sourcemap/manifest.d.ts +1 -1
- package/dist/src/server/domains/sourcemap/manifest.js +1 -1
- package/dist/src/server/domains/streaming/definitions.js +36 -148
- package/dist/src/server/domains/streaming/handlers.impl.streaming-sse.js +163 -164
- package/dist/src/server/domains/streaming/handlers.impl.streaming-ws.js +1 -1
- package/dist/src/server/domains/trace/TraceSummarizer.d.ts +60 -0
- package/dist/src/server/domains/trace/TraceSummarizer.js +112 -0
- package/dist/src/server/domains/trace/definitions.tools.js +51 -176
- package/dist/src/server/domains/trace/handlers.d.ts +2 -1
- package/dist/src/server/domains/trace/handlers.js +62 -9
- package/dist/src/server/domains/trace/index.d.ts +2 -1
- package/dist/src/server/domains/trace/index.js +2 -1
- package/dist/src/server/domains/trace/manifest.js +18 -4
- package/dist/src/server/domains/transform/definitions.js +50 -210
- package/dist/src/server/domains/transform/handlers.impl.transform-base.js +6 -6
- package/dist/src/server/domains/transform/handlers.impl.transform-crypto.js +18 -19
- package/dist/src/server/domains/transform/manifest.d.ts +1 -1
- package/dist/src/server/domains/transform/manifest.js +1 -1
- package/dist/src/server/domains/wasm/definitions.js +55 -232
- package/dist/src/server/domains/wasm/handlers.js +3 -3
- package/dist/src/server/domains/workflow/definitions.js +144 -414
- package/dist/src/server/domains/workflow/handlers.impl.workflow-account-bundle.js +2 -2
- package/dist/src/server/domains/workflow/handlers.impl.workflow-base.d.ts +2 -0
- package/dist/src/server/domains/workflow/handlers.impl.workflow-base.js +126 -87
- package/dist/src/server/domains/workflow/handlers.impl.workflow-batch.js +5 -5
- package/dist/src/server/evidence/ReverseEvidenceGraph.d.ts +20 -0
- package/dist/src/server/evidence/ReverseEvidenceGraph.js +208 -0
- package/dist/src/server/evidence/index.d.ts +2 -0
- package/dist/src/server/evidence/index.js +1 -0
- package/dist/src/server/evidence/types.d.ts +22 -0
- package/dist/src/server/evidence/types.js +1 -0
- package/dist/src/server/extensions/ExtensionManager.d.ts +1 -0
- package/dist/src/server/extensions/ExtensionManager.discovery.js +72 -9
- package/dist/src/server/extensions/ExtensionManager.integrity.js +1 -1
- package/dist/src/server/extensions/ExtensionManager.js +193 -40
- package/dist/src/server/extensions/ExtensionManager.roots.d.ts +1 -1
- package/dist/src/server/extensions/ExtensionManager.roots.js +19 -9
- package/dist/src/server/extensions/plugin-config.js +1 -1
- package/dist/src/server/extensions/plugin-env.d.ts +1 -1
- package/dist/src/server/extensions/plugin-env.js +10 -4
- package/dist/src/server/extensions/types.d.ts +17 -0
- package/dist/src/server/extensions/types.js +1 -1
- package/dist/src/server/http/HttpMiddleware.js +1 -1
- package/dist/src/server/instrumentation/EvidenceGraphBridge.d.ts +13 -0
- package/dist/src/server/instrumentation/EvidenceGraphBridge.js +150 -0
- package/dist/src/server/instrumentation/InstrumentationSession.d.ts +60 -0
- package/dist/src/server/instrumentation/InstrumentationSession.js +269 -0
- package/dist/src/server/instrumentation/index.d.ts +2 -0
- package/dist/src/server/instrumentation/index.js +2 -0
- package/dist/src/server/instrumentation/types.d.ts +62 -0
- package/dist/src/server/instrumentation/types.js +7 -0
- package/dist/src/server/macros/MacroConfigLoader.d.ts +6 -5
- package/dist/src/server/macros/MacroConfigLoader.js +61 -59
- package/dist/src/server/macros/MacroRunner.js +6 -2
- package/dist/src/server/macros/builtins/index.d.ts +2 -3
- package/dist/src/server/macros/builtins/index.js +51 -7
- package/dist/src/server/plugins/PluginContract.d.ts +1 -1
- package/dist/src/server/registry/contracts.d.ts +7 -1
- package/dist/src/server/registry/discovery.js +5 -4
- package/dist/src/server/registry/ensure-browser-core.js +0 -3
- package/dist/src/server/registry/index.js +4 -4
- package/dist/src/server/registry/tool-builder.d.ts +46 -0
- package/dist/src/server/registry/tool-builder.js +105 -0
- package/dist/src/server/sandbox/MCPBridge.d.ts +9 -0
- package/dist/src/server/sandbox/MCPBridge.js +22 -0
- package/dist/src/server/sandbox/QuickJSSandbox.d.ts +4 -1
- package/dist/src/server/sandbox/QuickJSSandbox.js +162 -2
- package/dist/src/server/sandbox/types.d.ts +13 -0
- package/dist/src/server/search/AffinityGraph.d.ts +7 -1
- package/dist/src/server/search/AffinityGraph.js +24 -3
- package/dist/src/server/search/EmbeddingWorker.js +5 -3
- package/dist/src/server/search/FeedbackTracker.d.ts +9 -0
- package/dist/src/server/search/FeedbackTracker.js +26 -0
- package/dist/src/server/search/QueryNormalizer.d.ts +6 -0
- package/dist/src/server/search/QueryNormalizer.js +94 -0
- package/dist/src/server/search/ToolSearchEngineImpl.d.ts +2 -3
- package/dist/src/server/search/ToolSearchEngineImpl.js +38 -88
- package/dist/src/server/workflows/WorkflowContract.d.ts +24 -0
- package/dist/src/server/workflows/WorkflowContract.js +12 -0
- package/dist/src/server/workflows/WorkflowEngine.d.ts +1 -0
- package/dist/src/server/workflows/WorkflowEngine.js +136 -3
- package/dist/src/types/config.d.ts +0 -14
- package/dist/src/types/deobfuscator.d.ts +0 -1
- package/dist/src/types/index.d.ts +1 -1
- package/dist/src/utils/DetailedDataManager.js +2 -0
- package/dist/src/utils/RingBuffer.js +5 -5
- package/dist/src/utils/TokenBudgetManager.js +1 -1
- package/dist/src/utils/UnifiedCacheManager.d.ts +1 -1
- package/dist/src/utils/UnifiedCacheManager.js +3 -3
- package/dist/src/utils/artifactRetention.js +2 -2
- package/dist/src/utils/betterSqlite3.d.ts +11 -0
- package/dist/src/utils/betterSqlite3.js +88 -0
- package/dist/src/utils/browserExecutable.js +2 -2
- package/dist/src/utils/cliFastPath.js +17 -6
- package/dist/src/utils/config.js +4 -26
- package/dist/src/utils/environmentDoctor.js +138 -11
- package/dist/src/utils/outputPaths.js +16 -9
- package/dist/src/utils/parallel.js +1 -3
- package/package.json +76 -72
- package/scripts/postinstall.cjs +37 -37
- package/src/native/scripts/linux/enum-windows.sh +12 -12
- package/src/native/scripts/macos/enum-windows.applescript +22 -22
- package/src/native/scripts/windows/enum-windows-by-class.ps1 +51 -51
- package/src/native/scripts/windows/enum-windows.ps1 +44 -44
- package/src/native/scripts/windows/inject-dll.ps1 +21 -21
- package/workflows/.gitkeep +0 -0
- package/dist/src/modules/analyzer/AISummarizer.d.ts +0 -39
- package/dist/src/modules/analyzer/AISummarizer.js +0 -122
- package/dist/src/modules/hook/AIHookGenerator.d.ts +0 -52
- package/dist/src/modules/hook/AIHookGenerator.js +0 -360
- package/dist/src/modules/hook/AIHookGeneratorTemplates.d.ts +0 -9
- package/dist/src/modules/hook/AIHookGeneratorTemplates.js +0 -157
- package/dist/src/server/macros/builtins/deobfuscate-ast-flow.d.ts +0 -2
- package/dist/src/server/macros/builtins/deobfuscate-ast-flow.js +0 -25
- package/dist/src/server/macros/builtins/unpacker-flow.d.ts +0 -2
- package/dist/src/server/macros/builtins/unpacker-flow.js +0 -25
- package/dist/src/services/LLMService.d.ts +0 -37
- package/dist/src/services/LLMService.js +0 -233
- package/dist/src/services/prompts/analysis.d.ts +0 -9
- package/dist/src/services/prompts/analysis.js +0 -158
- package/dist/src/services/prompts/crypto.d.ts +0 -2
- package/dist/src/services/prompts/crypto.js +0 -108
- package/dist/src/services/prompts/deobfuscation.d.ts +0 -6
- package/dist/src/services/prompts/deobfuscation.js +0 -300
- package/dist/src/services/prompts/environment.d.ts +0 -16
- package/dist/src/services/prompts/environment.js +0 -372
- package/dist/src/services/prompts/intelligence.d.ts +0 -4
- package/dist/src/services/prompts/intelligence.js +0 -250
- package/dist/src/services/prompts/taint.d.ts +0 -2
- package/dist/src/services/prompts/taint.js +0 -54
package/dist/src/utils/config.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import { fileURLToPath } from 'url';
|
|
2
|
-
import {
|
|
1
|
+
import { fileURLToPath } from 'node:url';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
3
|
import { config as dotenvConfig } from 'dotenv';
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { DEFAULT_SEARCH_CONFIG } from '../config/search-defaults.js';
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
export const projectRoot = join(currentDirname, '..', '..');
|
|
9
|
-
const envPath = join(projectRoot, '.env');
|
|
6
|
+
export const projectRoot = fileURLToPath(new URL('../..', import.meta.url));
|
|
7
|
+
const envPath = fileURLToPath(new URL('../../.env', import.meta.url));
|
|
10
8
|
let envLoaded = false;
|
|
11
9
|
function loadEnvIfNeeded() {
|
|
12
10
|
if (envLoaded) {
|
|
@@ -34,13 +32,6 @@ const envBool = (fallback) => z
|
|
|
34
32
|
.optional()
|
|
35
33
|
.transform((v) => (v === undefined ? fallback : v === 'true'));
|
|
36
34
|
const ConfigSchema = z.object({
|
|
37
|
-
DEFAULT_LLM_PROVIDER: z.enum(['openai', 'anthropic']).optional().default('openai'),
|
|
38
|
-
OPENAI_API_KEY: z.string().optional().default(''),
|
|
39
|
-
OPENAI_MODEL: z.string().optional().default('gpt-4-turbo-preview'),
|
|
40
|
-
OPENAI_BASE_URL: z.string().optional(),
|
|
41
|
-
ANTHROPIC_API_KEY: z.string().optional().default(''),
|
|
42
|
-
ANTHROPIC_MODEL: z.string().optional().default('claude-3-5-sonnet-20241022'),
|
|
43
|
-
ANTHROPIC_BASE_URL: z.string().optional(),
|
|
44
35
|
PUPPETEER_HEADLESS: envBool(false),
|
|
45
36
|
PUPPETEER_TIMEOUT: envInt(30000).pipe(z.number().min(1000).max(300000)),
|
|
46
37
|
PUPPETEER_EXECUTABLE_PATH: z.string().optional(),
|
|
@@ -192,19 +183,6 @@ export function getConfig() {
|
|
|
192
183
|
: join(projectRoot, cacheDir);
|
|
193
184
|
const search = buildSearchConfig();
|
|
194
185
|
return {
|
|
195
|
-
llm: {
|
|
196
|
-
provider: (env.DEFAULT_LLM_PROVIDER || 'openai'),
|
|
197
|
-
openai: {
|
|
198
|
-
apiKey: env.OPENAI_API_KEY || '',
|
|
199
|
-
model: env.OPENAI_MODEL || 'gpt-4-turbo-preview',
|
|
200
|
-
baseURL: env.OPENAI_BASE_URL,
|
|
201
|
-
},
|
|
202
|
-
anthropic: {
|
|
203
|
-
apiKey: env.ANTHROPIC_API_KEY || '',
|
|
204
|
-
model: env.ANTHROPIC_MODEL || 'claude-3-5-sonnet-20241022',
|
|
205
|
-
baseURL: env.ANTHROPIC_BASE_URL,
|
|
206
|
-
},
|
|
207
|
-
},
|
|
208
186
|
puppeteer: {
|
|
209
187
|
headless: parsed.success
|
|
210
188
|
? env.PUPPETEER_HEADLESS
|
|
@@ -5,22 +5,30 @@ import { ToolRegistry } from '../modules/external/ToolRegistry.js';
|
|
|
5
5
|
import { GHIDRA_BRIDGE_ENDPOINT, IDA_BRIDGE_ENDPOINT } from '../constants.js';
|
|
6
6
|
import { getProjectRoot } from './outputPaths.js';
|
|
7
7
|
import { getArtifactRetentionConfig } from './artifactRetention.js';
|
|
8
|
+
import { probeBetterSqlite3 } from './betterSqlite3.js';
|
|
8
9
|
const execFileAsync = promisify(execFile);
|
|
9
10
|
const require = createRequire(import.meta.url);
|
|
10
11
|
export async function runEnvironmentDoctor(options) {
|
|
11
12
|
const includeBridgeHealth = options?.includeBridgeHealth ?? true;
|
|
12
13
|
const registry = new ToolRegistry();
|
|
13
14
|
const externalResults = await registry.probeAll(true);
|
|
15
|
+
const gitCommand = await checkCommand('git', ['--version']);
|
|
16
|
+
const pythonCommand = await checkCommand('python', ['--version']);
|
|
17
|
+
const pnpmCommand = await checkPnpmCommand();
|
|
18
|
+
const corepackCommand = normalizeCorepackCheck(await checkCommand('corepack', ['--version']), pnpmCommand);
|
|
14
19
|
const packages = [
|
|
15
20
|
checkPackage('@modelcontextprotocol/sdk'),
|
|
16
21
|
checkPackage('rebrowser-puppeteer-core'),
|
|
22
|
+
checkBetterSqlite3(),
|
|
17
23
|
checkPackage('camoufox-js', 'Optional Firefox anti-detect driver'),
|
|
18
24
|
checkPackage('playwright-core', 'Optional browser automation dependency'),
|
|
25
|
+
checkNativeMemory(),
|
|
19
26
|
];
|
|
20
27
|
const commands = [
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
28
|
+
gitCommand,
|
|
29
|
+
pythonCommand,
|
|
30
|
+
pnpmCommand,
|
|
31
|
+
corepackCommand,
|
|
24
32
|
...Object.entries(externalResults).map(([name, result]) => ({
|
|
25
33
|
name,
|
|
26
34
|
status: (result.available ? 'ok' : 'missing'),
|
|
@@ -127,17 +135,118 @@ function checkPackage(packageName, missingHint) {
|
|
|
127
135
|
};
|
|
128
136
|
}
|
|
129
137
|
}
|
|
130
|
-
|
|
138
|
+
function checkBetterSqlite3() {
|
|
139
|
+
const result = probeBetterSqlite3();
|
|
140
|
+
return {
|
|
141
|
+
name: 'better-sqlite3',
|
|
142
|
+
status: result.status,
|
|
143
|
+
detail: result.detail,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
function isPnpmOperational(pnpm) {
|
|
147
|
+
return pnpm.status === 'ok' || pnpm.detail.includes('npx fallback works');
|
|
148
|
+
}
|
|
149
|
+
async function checkPnpmCommand() {
|
|
150
|
+
const direct = await checkCommand('pnpm', ['--version']);
|
|
151
|
+
if (direct.status === 'ok') {
|
|
152
|
+
return direct;
|
|
153
|
+
}
|
|
154
|
+
const npxFallback = await checkCommand('npx', ['pnpm', '--version'], 10_000);
|
|
155
|
+
if (npxFallback.status === 'ok') {
|
|
156
|
+
return {
|
|
157
|
+
name: 'pnpm',
|
|
158
|
+
status: 'warn',
|
|
159
|
+
detail: `direct pnpm command unavailable; npx fallback works (${npxFallback.detail})`,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
return direct;
|
|
163
|
+
}
|
|
164
|
+
function normalizeCorepackCheck(corepack, pnpm) {
|
|
165
|
+
if (corepack.status !== 'missing' || !isPnpmOperational(pnpm)) {
|
|
166
|
+
return corepack;
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
name: corepack.name,
|
|
170
|
+
status: 'warn',
|
|
171
|
+
detail: process.platform === 'win32'
|
|
172
|
+
? pnpm.detail.includes('npx fallback works')
|
|
173
|
+
? 'corepack not found; use `npx pnpm` directly (common with nvm4w-managed Node on Windows)'
|
|
174
|
+
: 'corepack not found; standalone pnpm is available (common with nvm4w-managed Node on Windows)'
|
|
175
|
+
: pnpm.detail.includes('npx fallback works')
|
|
176
|
+
? 'corepack not found; use `npx pnpm` directly'
|
|
177
|
+
: 'corepack not found; standalone pnpm is available',
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
function checkNativeMemory() {
|
|
181
|
+
try {
|
|
182
|
+
const koffiPkg = require.resolve('koffi/package.json');
|
|
183
|
+
const koffiJson = require(koffiPkg);
|
|
184
|
+
const koffiVersion = koffiJson.version ?? 'unknown';
|
|
185
|
+
if (process.platform === 'win32') {
|
|
186
|
+
return {
|
|
187
|
+
name: 'native-memory',
|
|
188
|
+
status: 'ok',
|
|
189
|
+
detail: `koffi ${koffiVersion} — Win32 kernel32.dll available`,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
if (process.platform === 'darwin') {
|
|
193
|
+
try {
|
|
194
|
+
const koffi = require('koffi');
|
|
195
|
+
const lib = koffi.load('/usr/lib/libSystem.B.dylib');
|
|
196
|
+
lib.unload();
|
|
197
|
+
return {
|
|
198
|
+
name: 'native-memory',
|
|
199
|
+
status: 'ok',
|
|
200
|
+
detail: `koffi ${koffiVersion} — macOS libSystem.B.dylib available (Mach APIs need root + SIP config)`,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
return {
|
|
205
|
+
name: 'native-memory',
|
|
206
|
+
status: 'warn',
|
|
207
|
+
detail: `koffi ${koffiVersion} installed but cannot load libSystem.B.dylib`,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return {
|
|
212
|
+
name: 'native-memory',
|
|
213
|
+
status: 'warn',
|
|
214
|
+
detail: `koffi ${koffiVersion} — no native FFI memory provider for ${process.platform} (proc-based ops available on Linux)`,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
return {
|
|
219
|
+
name: 'native-memory',
|
|
220
|
+
status: 'missing',
|
|
221
|
+
detail: 'koffi not installed — native memory tools unavailable. Install with: pnpm add koffi',
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
async function checkCommand(command, args, timeout = 4000) {
|
|
131
226
|
try {
|
|
132
227
|
const { stdout, stderr } = await execFileAsync(command, args, {
|
|
133
|
-
timeout
|
|
228
|
+
timeout,
|
|
134
229
|
windowsHide: true,
|
|
135
230
|
});
|
|
136
231
|
const detail = `${stdout || stderr}`.trim().split(/\r?\n/)[0] || 'available';
|
|
137
232
|
return { name: command, status: 'ok', detail };
|
|
138
233
|
}
|
|
139
234
|
catch (error) {
|
|
140
|
-
|
|
235
|
+
let finalError = error;
|
|
236
|
+
if (process.platform === 'win32') {
|
|
237
|
+
try {
|
|
238
|
+
const { stdout, stderr } = await execFileAsync('cmd', ['/c', command, ...args], {
|
|
239
|
+
timeout,
|
|
240
|
+
windowsHide: true,
|
|
241
|
+
});
|
|
242
|
+
const detail = `${stdout || stderr}`.trim().split(/\r?\n/)[0] || 'available';
|
|
243
|
+
return { name: command, status: 'ok', detail: `${detail} (via cmd)` };
|
|
244
|
+
}
|
|
245
|
+
catch (cmdError) {
|
|
246
|
+
finalError = cmdError;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
const detail = finalError instanceof Error ? finalError.message : String(finalError);
|
|
141
250
|
const missing = /ENOENT|not recognized|not found/i.test(detail);
|
|
142
251
|
return {
|
|
143
252
|
name: command,
|
|
@@ -168,25 +277,43 @@ async function checkHttpEndpoint(name, url) {
|
|
|
168
277
|
}
|
|
169
278
|
function buildPlatformLimitations() {
|
|
170
279
|
const limitations = [];
|
|
171
|
-
if (process.platform
|
|
172
|
-
limitations.push('
|
|
280
|
+
if (process.platform === 'darwin') {
|
|
281
|
+
limitations.push('26 cross-platform memory tools available (scan, pointer-chain, structure-analysis, heap). ' +
|
|
282
|
+
'15 Windows-only tools unavailable (PE analysis, anti-cheat, code injection, speedhack, hardware breakpoints).');
|
|
283
|
+
limitations.push('Native memory operations (mach_vm_read/write) require root privileges and may require SIP configuration on ARM64.');
|
|
173
284
|
}
|
|
174
|
-
if (process.platform === 'linux') {
|
|
285
|
+
else if (process.platform === 'linux') {
|
|
286
|
+
limitations.push('Process management available via /proc. Native FFI memory provider not implemented — memory read/write uses /proc/pid/mem (requires root or CAP_SYS_PTRACE).');
|
|
175
287
|
limitations.push('Camoufox runs on Linux, but some Chrome/CDP-heavy workflows are better served by the Chrome driver.');
|
|
176
288
|
}
|
|
177
|
-
if (process.platform
|
|
178
|
-
limitations.push(
|
|
289
|
+
else if (process.platform !== 'win32') {
|
|
290
|
+
limitations.push(`Platform ${process.platform} is not supported for native memory operations. Use Windows or macOS.`);
|
|
179
291
|
}
|
|
180
292
|
return limitations;
|
|
181
293
|
}
|
|
182
294
|
function buildRecommendations(packages, commands, bridges, limitations) {
|
|
183
295
|
const recommendations = [];
|
|
296
|
+
const pnpmCommand = commands.find((item) => item.name === 'pnpm');
|
|
297
|
+
const corepackCommand = commands.find((item) => item.name === 'corepack');
|
|
298
|
+
if (packages.some((item) => item.name === 'better-sqlite3' && item.status !== 'ok')) {
|
|
299
|
+
recommendations.push('Install or rebuild the optional SQLite trace backend with `pnpm add -O better-sqlite3@12.6.2` or `npm rebuild better-sqlite3 --foreground-scripts` under the active Node version if you need trace tooling.');
|
|
300
|
+
}
|
|
184
301
|
if (packages.some((item) => item.name === 'camoufox-js' && item.status !== 'ok')) {
|
|
185
302
|
recommendations.push('Install optional browser dependencies with `pnpm run install:full` if you need Camoufox support.');
|
|
186
303
|
}
|
|
187
304
|
if (commands.some((item) => item.name.startsWith('wabt.') && item.status !== 'ok')) {
|
|
188
305
|
recommendations.push('Install wabt if you need full WASM disassembly/decompilation; otherwise the server will stay in basic mode.');
|
|
189
306
|
}
|
|
307
|
+
if (pnpmCommand && !isPnpmOperational(pnpmCommand)) {
|
|
308
|
+
recommendations.push('Install pnpm or enable Corepack (`corepack enable`) before running package-management workflows.');
|
|
309
|
+
}
|
|
310
|
+
else if (pnpmCommand?.detail.includes('npx fallback works')) {
|
|
311
|
+
recommendations.push('Use `npx pnpm` directly on this machine or repair the local pnpm/Corepack shim if scripts expect bare `pnpm`.');
|
|
312
|
+
}
|
|
313
|
+
else if (corepackCommand?.status === 'warn' &&
|
|
314
|
+
corepackCommand.detail.includes('standalone pnpm')) {
|
|
315
|
+
recommendations.push('Use `pnpm` or `npx pnpm` directly on this machine; `corepack` is optional and may be absent on nvm4w-managed Windows installs.');
|
|
316
|
+
}
|
|
190
317
|
if (bridges.some((item) => item.status !== 'ok')) {
|
|
191
318
|
recommendations.push('Check local bridge endpoints (Ghidra / IDA / Burp) before relying on native-bridge workflows.');
|
|
192
319
|
}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { mkdir } from 'node:fs/promises';
|
|
2
2
|
import { basename, dirname, extname, isAbsolute, normalize, relative, resolve, sep, } from 'node:path';
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
const
|
|
4
|
+
const defaultProjectRoot = fileURLToPath(new URL('../..', import.meta.url));
|
|
5
|
+
function resolveProjectRoot(env = process.env) {
|
|
6
|
+
const requestedRoot = env.MCP_PROJECT_ROOT?.trim();
|
|
7
|
+
if (!requestedRoot) {
|
|
8
|
+
return defaultProjectRoot;
|
|
9
|
+
}
|
|
10
|
+
return normalize(isAbsolute(requestedRoot) ? requestedRoot : resolve(defaultProjectRoot, requestedRoot));
|
|
11
|
+
}
|
|
7
12
|
function isInside(baseDir, targetPath) {
|
|
8
13
|
const rel = relative(baseDir, targetPath);
|
|
9
14
|
if (!rel || rel === '..' || rel.startsWith(`..${sep}`) || isAbsolute(rel)) {
|
|
@@ -11,11 +16,11 @@ function isInside(baseDir, targetPath) {
|
|
|
11
16
|
}
|
|
12
17
|
return true;
|
|
13
18
|
}
|
|
14
|
-
function resolveWithinProject(inputPath) {
|
|
15
|
-
const candidate = isAbsolute(inputPath) ? normalize(inputPath) : resolve(
|
|
16
|
-
return isInside(
|
|
19
|
+
function resolveWithinProject(inputPath, baseRoot = getProjectRoot()) {
|
|
20
|
+
const candidate = isAbsolute(inputPath) ? normalize(inputPath) : resolve(baseRoot, inputPath);
|
|
21
|
+
return isInside(baseRoot, candidate)
|
|
17
22
|
? candidate
|
|
18
|
-
: resolve(
|
|
23
|
+
: resolve(baseRoot, 'screenshots', 'external', normalize(inputPath).split(/[\\/]/).pop() || 'output.bin');
|
|
19
24
|
}
|
|
20
25
|
function withDefaultExtension(filePath, extension) {
|
|
21
26
|
if (extname(filePath)) {
|
|
@@ -24,20 +29,22 @@ function withDefaultExtension(filePath, extension) {
|
|
|
24
29
|
return `${filePath}.${extension.replace(/^\./, '')}`;
|
|
25
30
|
}
|
|
26
31
|
export function getProjectRoot() {
|
|
27
|
-
return
|
|
32
|
+
return resolveProjectRoot();
|
|
28
33
|
}
|
|
29
34
|
export function resolveOutputDirectory(inputDir, fallbackDir = 'screenshots') {
|
|
35
|
+
const projectRoot = getProjectRoot();
|
|
30
36
|
const requested = inputDir?.trim();
|
|
31
37
|
if (!requested) {
|
|
32
38
|
return resolve(projectRoot, fallbackDir);
|
|
33
39
|
}
|
|
34
|
-
const resolved = resolveWithinProject(requested);
|
|
40
|
+
const resolved = resolveWithinProject(requested, projectRoot);
|
|
35
41
|
if (isInside(projectRoot, resolved)) {
|
|
36
42
|
return resolved;
|
|
37
43
|
}
|
|
38
44
|
return resolve(projectRoot, fallbackDir);
|
|
39
45
|
}
|
|
40
46
|
export async function resolveScreenshotOutputPath(options) {
|
|
47
|
+
const projectRoot = getProjectRoot();
|
|
41
48
|
const extension = options.type === 'jpeg' ? 'jpg' : 'png';
|
|
42
49
|
const fallbackDir = options.fallbackDir || 'screenshots/manual';
|
|
43
50
|
const fallbackName = options.fallbackName || 'page';
|
|
@@ -44,9 +44,7 @@ export async function parallelExecute(items, executor, options = {}) {
|
|
|
44
44
|
duration: Date.now() - startTime,
|
|
45
45
|
};
|
|
46
46
|
})();
|
|
47
|
-
const wrappedTask = task.
|
|
48
|
-
executing.delete(wrappedTask);
|
|
49
|
-
}, () => {
|
|
47
|
+
const wrappedTask = task.finally(() => {
|
|
50
48
|
executing.delete(wrappedTask);
|
|
51
49
|
});
|
|
52
50
|
executing.add(wrappedTask);
|
package/package.json
CHANGED
|
@@ -1,8 +1,55 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jshookmcp/jshook",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "MCP server with
|
|
5
|
-
"
|
|
3
|
+
"version": "0.2.5",
|
|
4
|
+
"description": "MCP server with 327 built-in tools across 23 domains for AI-assisted JavaScript analysis and security analysis — browser automation, CDP debugging, network monitoring, JS hooks, code analysis, and workflow orchestration",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"ai",
|
|
7
|
+
"anti-detection",
|
|
8
|
+
"ast",
|
|
9
|
+
"browser-automation",
|
|
10
|
+
"captcha",
|
|
11
|
+
"chrome-devtools",
|
|
12
|
+
"claude",
|
|
13
|
+
"code-analysis",
|
|
14
|
+
"cryptography-detection",
|
|
15
|
+
"debugger",
|
|
16
|
+
"deobfuscation",
|
|
17
|
+
"hook",
|
|
18
|
+
"hooking",
|
|
19
|
+
"javascript",
|
|
20
|
+
"javascript-analysis",
|
|
21
|
+
"mcp",
|
|
22
|
+
"model-context-protocol",
|
|
23
|
+
"network-monitoring",
|
|
24
|
+
"obfuscation",
|
|
25
|
+
"puppeteer",
|
|
26
|
+
"security-analysis",
|
|
27
|
+
"web-scraping"
|
|
28
|
+
],
|
|
29
|
+
"homepage": "https://github.com/vmoranv/jshookmcp#readme",
|
|
30
|
+
"bugs": {
|
|
31
|
+
"url": "https://github.com/vmoranv/jshookmcp/issues"
|
|
32
|
+
},
|
|
33
|
+
"license": "AGPL-3.0-only",
|
|
34
|
+
"author": {
|
|
35
|
+
"name": "vmoranv",
|
|
36
|
+
"url": "https://github.com/vmoranv"
|
|
37
|
+
},
|
|
38
|
+
"repository": {
|
|
39
|
+
"type": "git",
|
|
40
|
+
"url": "https://github.com/vmoranv/jshookmcp.git"
|
|
41
|
+
},
|
|
42
|
+
"bin": {
|
|
43
|
+
"jshook": "dist/src/index.js",
|
|
44
|
+
"jshookmcp": "dist/src/index.js"
|
|
45
|
+
},
|
|
46
|
+
"files": [
|
|
47
|
+
"dist",
|
|
48
|
+
"workflows",
|
|
49
|
+
"src/native/scripts",
|
|
50
|
+
"scripts/postinstall.cjs"
|
|
51
|
+
],
|
|
52
|
+
"type": "module",
|
|
6
53
|
"main": "dist/src/index.js",
|
|
7
54
|
"types": "dist/src/index.d.ts",
|
|
8
55
|
"exports": {
|
|
@@ -15,63 +62,17 @@
|
|
|
15
62
|
"types": "./dist/src/server/plugin-api.d.ts"
|
|
16
63
|
}
|
|
17
64
|
},
|
|
18
|
-
"type": "module",
|
|
19
|
-
"files": [
|
|
20
|
-
"dist",
|
|
21
|
-
"src/native/scripts",
|
|
22
|
-
"scripts/postinstall.cjs"
|
|
23
|
-
],
|
|
24
|
-
"bin": {
|
|
25
|
-
"jshook": "dist/src/index.js",
|
|
26
|
-
"jshookmcp": "dist/src/index.js"
|
|
27
|
-
},
|
|
28
|
-
"repository": {
|
|
29
|
-
"type": "git",
|
|
30
|
-
"url": "https://github.com/vmoranv/jshookmcp.git"
|
|
31
|
-
},
|
|
32
|
-
"bugs": {
|
|
33
|
-
"url": "https://github.com/vmoranv/jshookmcp/issues"
|
|
34
|
-
},
|
|
35
|
-
"homepage": "https://github.com/vmoranv/jshookmcp#readme",
|
|
36
65
|
"publishConfig": {
|
|
37
|
-
"
|
|
38
|
-
"
|
|
66
|
+
"access": "public",
|
|
67
|
+
"registry": "https://registry.npmjs.org"
|
|
39
68
|
},
|
|
40
|
-
"keywords": [
|
|
41
|
-
"mcp",
|
|
42
|
-
"model-context-protocol",
|
|
43
|
-
"javascript",
|
|
44
|
-
"javascript-analysis",
|
|
45
|
-
"security-analysis",
|
|
46
|
-
"hook",
|
|
47
|
-
"hooking",
|
|
48
|
-
"deobfuscation",
|
|
49
|
-
"ai",
|
|
50
|
-
"claude",
|
|
51
|
-
"puppeteer",
|
|
52
|
-
"chrome-devtools",
|
|
53
|
-
"debugger",
|
|
54
|
-
"web-scraping",
|
|
55
|
-
"anti-detection",
|
|
56
|
-
"captcha",
|
|
57
|
-
"browser-automation",
|
|
58
|
-
"network-monitoring",
|
|
59
|
-
"ast",
|
|
60
|
-
"obfuscation",
|
|
61
|
-
"cryptography-detection",
|
|
62
|
-
"code-analysis"
|
|
63
|
-
],
|
|
64
|
-
"author": {
|
|
65
|
-
"name": "vmoranv",
|
|
66
|
-
"url": "https://github.com/vmoranv"
|
|
67
|
-
},
|
|
68
|
-
"license": "AGPL-3.0-only",
|
|
69
69
|
"dependencies": {
|
|
70
70
|
"@anthropic-ai/sdk": "^0.78.0",
|
|
71
71
|
"@babel/generator": "^7.29.1",
|
|
72
72
|
"@babel/parser": "^7.29.0",
|
|
73
73
|
"@babel/traverse": "^7.29.0",
|
|
74
74
|
"@babel/types": "^7.29.0",
|
|
75
|
+
"@huggingface/transformers": "^3.8.1",
|
|
75
76
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
76
77
|
"ajv": "^8.18.0",
|
|
77
78
|
"ajv-formats": "^3.0.1",
|
|
@@ -81,32 +82,24 @@
|
|
|
81
82
|
"koffi": "^2.15.1",
|
|
82
83
|
"openai": "^6.25.0",
|
|
83
84
|
"ora": "^9.3.0",
|
|
85
|
+
"quickjs-emscripten": "^0.32.0",
|
|
84
86
|
"rebrowser-puppeteer-core": "^24.8.1",
|
|
85
87
|
"tinyglobby": "^0.2.15",
|
|
86
88
|
"zod": "^4.3.6"
|
|
87
89
|
},
|
|
88
|
-
"optionalDependencies": {
|
|
89
|
-
"camoufox-js": "^0.9.1",
|
|
90
|
-
"playwright-core": "^1.58.2",
|
|
91
|
-
"webcrack": "^2.15.1"
|
|
92
|
-
},
|
|
93
90
|
"devDependencies": {
|
|
94
|
-
"@huggingface/transformers": "^3.8.1",
|
|
95
91
|
"@types/babel__generator": "^7.27.0",
|
|
96
92
|
"@types/babel__traverse": "^7.28.0",
|
|
97
93
|
"@types/better-sqlite3": "^7.6.13",
|
|
98
94
|
"@types/node": "^25.3.0",
|
|
99
|
-
"@typescript-eslint/eslint-plugin": "^8.56.1",
|
|
100
|
-
"@typescript-eslint/parser": "^8.56.1",
|
|
101
95
|
"@vitest/coverage-v8": "^4.0.18",
|
|
102
96
|
"cross-env": "^10.1.0",
|
|
103
|
-
"eslint": "^10.0.2",
|
|
104
97
|
"estree-walker": "^2.0.2",
|
|
105
98
|
"lefthook": "^2.1.3",
|
|
106
99
|
"medium-zoom": "^1.1.0",
|
|
107
100
|
"nodemon": "^3.1.14",
|
|
108
|
-
"
|
|
109
|
-
"
|
|
101
|
+
"oxfmt": "^0.41.0",
|
|
102
|
+
"oxlint": "^1.56.0",
|
|
110
103
|
"tsc-alias": "^1.8.16",
|
|
111
104
|
"tsx": "^4.21.0",
|
|
112
105
|
"typescript": "^5.9.3",
|
|
@@ -115,34 +108,45 @@
|
|
|
115
108
|
"vitest": "^4.0.18",
|
|
116
109
|
"vue": "^3.5.30"
|
|
117
110
|
},
|
|
111
|
+
"optionalDependencies": {
|
|
112
|
+
"better-sqlite3": "12.6.2",
|
|
113
|
+
"camoufox-js": "^0.9.1",
|
|
114
|
+
"playwright-core": "^1.58.2",
|
|
115
|
+
"webcrack": "^2.15.1"
|
|
116
|
+
},
|
|
118
117
|
"engines": {
|
|
119
118
|
"node": ">=20.0.0"
|
|
120
119
|
},
|
|
120
|
+
"mcpName": "io.github.vmoranv/jshookmcp",
|
|
121
121
|
"scripts": {
|
|
122
122
|
"build": "node scripts/clean-dist.mjs && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json --resolve-full-paths && pnpm -C packages/extension-sdk build && node scripts/copy-native-scripts.mjs && node scripts/generate-entry-reexport.mjs && node scripts/fix-bin-permissions.mjs",
|
|
123
|
-
"typecheck": "tsc --noEmit -p tsconfig.json && pnpm -C packages/extension-sdk typecheck",
|
|
123
|
+
"typecheck": "tsc --noEmit -p tsconfig.build.json && pnpm -C packages/extension-sdk typecheck",
|
|
124
124
|
"dev": "tsx --conditions=development watch src/index.ts",
|
|
125
125
|
"start": "node dist/src/index.js",
|
|
126
126
|
"doctor": "tsx src/cli/doctor.ts",
|
|
127
|
-
"docs:generate": "node scripts/generate-vitepress-reference.mjs
|
|
127
|
+
"docs:generate": "node scripts/generate-vitepress-reference.mjs",
|
|
128
128
|
"docs:dev": "vitepress dev docs --host 127.0.0.1 --port 5173",
|
|
129
129
|
"docs:build": "pnpm run docs:generate && vitepress build docs",
|
|
130
130
|
"docs:preview": "vitepress preview docs --host 127.0.0.1 --port 4173",
|
|
131
131
|
"lint:md": "pnpm dlx markdownlint-cli2",
|
|
132
|
-
"
|
|
133
|
-
"
|
|
134
|
-
"
|
|
135
|
-
"format": "
|
|
132
|
+
"lint": "oxlint src/ tests/",
|
|
133
|
+
"lint:fix": "oxlint --fix src/ tests/",
|
|
134
|
+
"format": "oxfmt \"src/**\" \"tests/**\" \"!tests/tmp/**\" --write --no-error-on-unmatched-pattern",
|
|
135
|
+
"format:check": "oxfmt \"src/**\" \"tests/**\" \"!tests/tmp/**\" --check --no-error-on-unmatched-pattern",
|
|
136
136
|
"test": "vitest run",
|
|
137
137
|
"test:e2e": "cross-env E2E_TARGET_URL=https://vmoranv.github.io/jshookmcp/ vitest run --config tests/e2e/vitest.e2e.config.ts",
|
|
138
138
|
"test:coverage": "cross-env ENABLE_INJECTION_TOOLS=true vitest run --coverage",
|
|
139
139
|
"package:verify-bin": "node scripts/verify-packed-bin.mjs",
|
|
140
140
|
"package:verify-install": "node scripts/verify-packed-install.mjs",
|
|
141
141
|
"package:verify-release": "node scripts/verify-release-artifact.mjs",
|
|
142
|
-
"audit:tools": "
|
|
143
|
-
"
|
|
142
|
+
"audit:tools": "tsx scripts/audit-tools.mjs",
|
|
143
|
+
"git:refresh-noise": "node scripts/refresh-git-noise.mjs",
|
|
144
|
+
"check": "pnpm run metadata:check && pnpm run lint && pnpm run format:check && pnpm run typecheck && pnpm run test",
|
|
144
145
|
"package": "pnpm pack",
|
|
145
146
|
"postinstall": "node scripts/postinstall.cjs",
|
|
146
|
-
"install:full": "pnpm install && pnpm exec camoufox-js fetch"
|
|
147
|
+
"install:full": "pnpm install && pnpm exec camoufox-js fetch",
|
|
148
|
+
"metadata:sync": "node scripts/generate-metadata.mjs --write",
|
|
149
|
+
"metadata:check": "node scripts/generate-metadata.mjs --check",
|
|
150
|
+
"check:docs-format": "pnpm run lint:md"
|
|
147
151
|
}
|
|
148
152
|
}
|
package/scripts/postinstall.cjs
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
const fs = require('node:fs');
|
|
2
|
-
const path = require('node:path');
|
|
3
|
-
const { spawnSync } = require('node:child_process');
|
|
4
|
-
|
|
5
|
-
const repoGitDir = path.join(process.cwd(), '.git');
|
|
6
|
-
const localBin = path.join(
|
|
7
|
-
process.cwd(),
|
|
8
|
-
'node_modules',
|
|
9
|
-
'.bin',
|
|
10
|
-
process.platform === 'win32' ? 'lefthook.cmd' : 'lefthook'
|
|
11
|
-
);
|
|
12
|
-
|
|
13
|
-
if (!fs.existsSync(repoGitDir)) {
|
|
14
|
-
process.exit(0);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
if (!fs.existsSync(localBin)) {
|
|
18
|
-
console.warn('[postinstall] lefthook not found locally; skipping git hook installation.');
|
|
19
|
-
process.exit(0);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const result = spawnSync(localBin, ['install'], {
|
|
23
|
-
stdio: 'inherit',
|
|
24
|
-
shell: process.platform === 'win32',
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
if (result.error) {
|
|
28
|
-
console.warn(
|
|
29
|
-
`[postinstall] lefthook install failed to spawn: ${result.error.message}; skipping git hook installation.`
|
|
30
|
-
);
|
|
31
|
-
} else if (result.status !== 0) {
|
|
32
|
-
console.warn(
|
|
33
|
-
`[postinstall] lefthook install exited with status ${result.status}; skipping git hook installation.`
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
process.exit(0);
|
|
1
|
+
const fs = require('node:fs');
|
|
2
|
+
const path = require('node:path');
|
|
3
|
+
const { spawnSync } = require('node:child_process');
|
|
4
|
+
|
|
5
|
+
const repoGitDir = path.join(process.cwd(), '.git');
|
|
6
|
+
const localBin = path.join(
|
|
7
|
+
process.cwd(),
|
|
8
|
+
'node_modules',
|
|
9
|
+
'.bin',
|
|
10
|
+
process.platform === 'win32' ? 'lefthook.cmd' : 'lefthook'
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
if (!fs.existsSync(repoGitDir)) {
|
|
14
|
+
process.exit(0);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
if (!fs.existsSync(localBin)) {
|
|
18
|
+
console.warn('[postinstall] lefthook not found locally; skipping git hook installation.');
|
|
19
|
+
process.exit(0);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const result = spawnSync(localBin, ['install'], {
|
|
23
|
+
stdio: 'inherit',
|
|
24
|
+
shell: process.platform === 'win32',
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
if (result.error) {
|
|
28
|
+
console.warn(
|
|
29
|
+
`[postinstall] lefthook install failed to spawn: ${result.error.message}; skipping git hook installation.`
|
|
30
|
+
);
|
|
31
|
+
} else if (result.status !== 0) {
|
|
32
|
+
console.warn(
|
|
33
|
+
`[postinstall] lefthook install exited with status ${result.status}; skipping git hook installation.`
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
process.exit(0);
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# enum-windows.sh
|
|
3
|
-
# Linux window enumeration script (placeholder)
|
|
4
|
-
|
|
5
|
-
TARGET_PID=$1
|
|
6
|
-
|
|
7
|
-
# Use xdotool or wmctrl for window enumeration
|
|
8
|
-
# This is a placeholder for future implementation
|
|
9
|
-
|
|
10
|
-
if command -v xdotool &> /dev/null; then
|
|
11
|
-
xdotool search --pid "$TARGET_PID" --name "" get-window-name
|
|
12
|
-
fi
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# enum-windows.sh
|
|
3
|
+
# Linux window enumeration script (placeholder)
|
|
4
|
+
|
|
5
|
+
TARGET_PID=$1
|
|
6
|
+
|
|
7
|
+
# Use xdotool or wmctrl for window enumeration
|
|
8
|
+
# This is a placeholder for future implementation
|
|
9
|
+
|
|
10
|
+
if command -v xdotool &> /dev/null; then
|
|
11
|
+
xdotool search --pid "$TARGET_PID" --name "" get-window-name
|
|
12
|
+
fi
|