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