@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
|
@@ -9,6 +9,7 @@ export interface ToolNode {
|
|
|
9
9
|
readonly id: string;
|
|
10
10
|
readonly toolName: string;
|
|
11
11
|
readonly input?: Record<string, unknown>;
|
|
12
|
+
readonly inputFrom?: Record<string, string>;
|
|
12
13
|
readonly timeoutMs?: number;
|
|
13
14
|
readonly retry?: RetryPolicy;
|
|
14
15
|
}
|
|
@@ -36,11 +37,29 @@ export type WorkflowNode = ToolNode | SequenceNode | ParallelNode | BranchNode;
|
|
|
36
37
|
export interface WorkflowExecutionContext {
|
|
37
38
|
readonly workflowRunId: string;
|
|
38
39
|
readonly profile: string;
|
|
40
|
+
readonly stepResults: ReadonlyMap<string, unknown>;
|
|
39
41
|
invokeTool(toolName: string, args: Record<string, unknown>): Promise<unknown>;
|
|
40
42
|
emitSpan(name: string, attrs?: Record<string, unknown>): void;
|
|
41
43
|
emitMetric(name: string, value: number, type: 'counter' | 'gauge' | 'histogram', attrs?: Record<string, unknown>): void;
|
|
42
44
|
getConfig<T = unknown>(path: string, fallback?: T): T;
|
|
43
45
|
}
|
|
46
|
+
export interface WorkflowRouteStep {
|
|
47
|
+
readonly id: string;
|
|
48
|
+
readonly toolName: string;
|
|
49
|
+
readonly description: string;
|
|
50
|
+
readonly prerequisites: string[];
|
|
51
|
+
readonly parallel?: boolean;
|
|
52
|
+
readonly expectedInputs?: Record<string, string>;
|
|
53
|
+
readonly evidenceNodeType?: string;
|
|
54
|
+
}
|
|
55
|
+
export type WorkflowRouteKind = 'preset' | 'workflow';
|
|
56
|
+
export interface WorkflowRouteMetadata {
|
|
57
|
+
readonly kind: WorkflowRouteKind;
|
|
58
|
+
readonly triggerPatterns: RegExp[];
|
|
59
|
+
readonly steps: WorkflowRouteStep[];
|
|
60
|
+
readonly requiredDomains: string[];
|
|
61
|
+
readonly priority: number;
|
|
62
|
+
}
|
|
44
63
|
export interface WorkflowContract {
|
|
45
64
|
readonly kind: 'workflow-contract';
|
|
46
65
|
readonly version: 1;
|
|
@@ -50,6 +69,7 @@ export interface WorkflowContract {
|
|
|
50
69
|
readonly tags?: string[];
|
|
51
70
|
readonly timeoutMs?: number;
|
|
52
71
|
readonly defaultMaxConcurrency?: number;
|
|
72
|
+
readonly route?: WorkflowRouteMetadata;
|
|
53
73
|
build(ctx: WorkflowExecutionContext): WorkflowNode;
|
|
54
74
|
onStart?(ctx: WorkflowExecutionContext): Promise<void> | void;
|
|
55
75
|
onFinish?(ctx: WorkflowExecutionContext, result: unknown): Promise<void> | void;
|
|
@@ -69,10 +89,12 @@ type AnyWorkflowNodeBuilder = WorkflowNodeBuilder<WorkflowNode>;
|
|
|
69
89
|
export declare class ToolNodeBuilder extends WorkflowNodeBuilder<ToolNode> {
|
|
70
90
|
private toolName;
|
|
71
91
|
private _input?;
|
|
92
|
+
private _inputFrom?;
|
|
72
93
|
private _retry?;
|
|
73
94
|
private _timeoutMs?;
|
|
74
95
|
constructor(id: string, toolName: string);
|
|
75
96
|
input(input: Record<string, unknown>): this;
|
|
97
|
+
inputFrom(mapping: Record<string, string>): this;
|
|
76
98
|
retry(policy: RetryPolicy): this;
|
|
77
99
|
timeout(ms: number): this;
|
|
78
100
|
build(): ToolNode;
|
|
@@ -117,6 +139,7 @@ export declare class WorkflowBuilder {
|
|
|
117
139
|
private _tags?;
|
|
118
140
|
private _timeoutMs?;
|
|
119
141
|
private _defaultMaxConcurrency?;
|
|
142
|
+
private _route?;
|
|
120
143
|
private _buildFn;
|
|
121
144
|
private _onStart?;
|
|
122
145
|
private _onFinish?;
|
|
@@ -126,6 +149,7 @@ export declare class WorkflowBuilder {
|
|
|
126
149
|
tags(tags: string[]): this;
|
|
127
150
|
timeoutMs(timeout: number): this;
|
|
128
151
|
defaultMaxConcurrency(max: number): this;
|
|
152
|
+
route(route: WorkflowRouteMetadata): this;
|
|
129
153
|
buildGraph(fn: (ctx: WorkflowExecutionContext) => AnyWorkflowNodeBuilder): this;
|
|
130
154
|
onStart(fn: (ctx: WorkflowExecutionContext) => Promise<void> | void): this;
|
|
131
155
|
onFinish(fn: (ctx: WorkflowExecutionContext, result: unknown) => Promise<void> | void): this;
|
|
@@ -7,6 +7,7 @@ export class WorkflowNodeBuilder {
|
|
|
7
7
|
export class ToolNodeBuilder extends WorkflowNodeBuilder {
|
|
8
8
|
toolName;
|
|
9
9
|
_input;
|
|
10
|
+
_inputFrom;
|
|
10
11
|
_retry;
|
|
11
12
|
_timeoutMs;
|
|
12
13
|
constructor(id, toolName) {
|
|
@@ -17,6 +18,10 @@ export class ToolNodeBuilder extends WorkflowNodeBuilder {
|
|
|
17
18
|
this._input = input;
|
|
18
19
|
return this;
|
|
19
20
|
}
|
|
21
|
+
inputFrom(mapping) {
|
|
22
|
+
this._inputFrom = mapping;
|
|
23
|
+
return this;
|
|
24
|
+
}
|
|
20
25
|
retry(policy) {
|
|
21
26
|
this._retry = policy;
|
|
22
27
|
return this;
|
|
@@ -31,6 +36,7 @@ export class ToolNodeBuilder extends WorkflowNodeBuilder {
|
|
|
31
36
|
id: this.id,
|
|
32
37
|
toolName: this.toolName,
|
|
33
38
|
input: this._input,
|
|
39
|
+
inputFrom: this._inputFrom,
|
|
34
40
|
retry: this._retry,
|
|
35
41
|
timeoutMs: this._timeoutMs,
|
|
36
42
|
};
|
|
@@ -174,6 +180,7 @@ export class WorkflowBuilder {
|
|
|
174
180
|
_tags;
|
|
175
181
|
_timeoutMs;
|
|
176
182
|
_defaultMaxConcurrency;
|
|
183
|
+
_route;
|
|
177
184
|
_buildFn;
|
|
178
185
|
_onStart;
|
|
179
186
|
_onFinish;
|
|
@@ -198,6 +205,10 @@ export class WorkflowBuilder {
|
|
|
198
205
|
this._defaultMaxConcurrency = max;
|
|
199
206
|
return this;
|
|
200
207
|
}
|
|
208
|
+
route(route) {
|
|
209
|
+
this._route = route;
|
|
210
|
+
return this;
|
|
211
|
+
}
|
|
201
212
|
buildGraph(fn) {
|
|
202
213
|
this._buildFn = (ctx) => fn(ctx).build();
|
|
203
214
|
return this;
|
|
@@ -226,6 +237,7 @@ export class WorkflowBuilder {
|
|
|
226
237
|
tags: this._tags,
|
|
227
238
|
timeoutMs: this._timeoutMs,
|
|
228
239
|
defaultMaxConcurrency: this._defaultMaxConcurrency,
|
|
240
|
+
route: this._route,
|
|
229
241
|
build: this._buildFn,
|
|
230
242
|
onStart: this._onStart,
|
|
231
243
|
onFinish: this._onFinish,
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { getEffectivePrerequisites } from '../ToolRouter.policy.js';
|
|
3
|
+
import { getRoutingState } from '../ToolRouter.probe.js';
|
|
4
|
+
class PreflightError extends Error {
|
|
5
|
+
warnings;
|
|
6
|
+
constructor(warnings) {
|
|
7
|
+
super(`Workflow preflight failed with ${warnings.length} unsatisfied prerequisite(s)`);
|
|
8
|
+
this.warnings = warnings;
|
|
9
|
+
this.name = 'PreflightError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
2
12
|
function extractConfigValue(config, path, fallback) {
|
|
3
13
|
const segments = path.split('.').filter(Boolean);
|
|
4
14
|
let current = config;
|
|
@@ -77,9 +87,29 @@ function collectSuccessStats(value) {
|
|
|
77
87
|
}
|
|
78
88
|
return { success: 0, failure: 0 };
|
|
79
89
|
}
|
|
80
|
-
|
|
90
|
+
function resolveInputFrom(mapping, stepResults) {
|
|
91
|
+
const resolved = {};
|
|
92
|
+
for (const [targetKey, sourceRef] of Object.entries(mapping)) {
|
|
93
|
+
const dotIndex = sourceRef.indexOf('.');
|
|
94
|
+
if (dotIndex === -1) {
|
|
95
|
+
resolved[targetKey] = stepResults.get(sourceRef);
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
const stepId = sourceRef.slice(0, dotIndex);
|
|
99
|
+
const fieldPath = sourceRef.slice(dotIndex + 1);
|
|
100
|
+
const stepResult = stepResults.get(stepId);
|
|
101
|
+
const payload = parseToolPayload(stepResult) ?? stepResult;
|
|
102
|
+
resolved[targetKey] = payload?.[fieldPath];
|
|
103
|
+
}
|
|
104
|
+
return resolved;
|
|
105
|
+
}
|
|
106
|
+
async function runToolNode(ctx, node, overrides, executionContext) {
|
|
107
|
+
const fromResolved = node.inputFrom
|
|
108
|
+
? resolveInputFrom(node.inputFrom, executionContext.stepResults)
|
|
109
|
+
: {};
|
|
81
110
|
const mergedInput = {
|
|
82
111
|
...node.input,
|
|
112
|
+
...fromResolved,
|
|
83
113
|
...overrides?.[node.id],
|
|
84
114
|
};
|
|
85
115
|
const runAttempt = async () => {
|
|
@@ -113,7 +143,7 @@ async function runToolNode(ctx, node, overrides) {
|
|
|
113
143
|
}
|
|
114
144
|
async function runParallelNode(ctx, node, executionContext, options) {
|
|
115
145
|
const concurrency = Math.max(1, node.maxConcurrency ?? 4);
|
|
116
|
-
const results =
|
|
146
|
+
const results = Array.from({ length: node.steps.length });
|
|
117
147
|
let nextIndex = 0;
|
|
118
148
|
let stopped = false;
|
|
119
149
|
const worker = async () => {
|
|
@@ -177,7 +207,7 @@ async function executeNode(ctx, node, executionContext, options) {
|
|
|
177
207
|
let result;
|
|
178
208
|
switch (node.kind) {
|
|
179
209
|
case 'tool':
|
|
180
|
-
result = await runToolNode(ctx, node, options.nodeInputOverrides);
|
|
210
|
+
result = await runToolNode(ctx, node, options.nodeInputOverrides, executionContext);
|
|
181
211
|
break;
|
|
182
212
|
case 'sequence': {
|
|
183
213
|
const sequenceNode = node;
|
|
@@ -210,6 +240,52 @@ async function executeNode(ctx, node, executionContext, options) {
|
|
|
210
240
|
executionContext.emitSpan('workflow.node.finish', { nodeId: node.id, kind: node.kind });
|
|
211
241
|
return result;
|
|
212
242
|
}
|
|
243
|
+
function collectToolNodes(node) {
|
|
244
|
+
switch (node.kind) {
|
|
245
|
+
case 'tool':
|
|
246
|
+
return [node];
|
|
247
|
+
case 'sequence':
|
|
248
|
+
case 'parallel':
|
|
249
|
+
return node.steps.flatMap((step) => collectToolNodes(step));
|
|
250
|
+
case 'branch':
|
|
251
|
+
return [
|
|
252
|
+
...collectToolNodes(node.whenTrue),
|
|
253
|
+
...(node.whenFalse ? collectToolNodes(node.whenFalse) : []),
|
|
254
|
+
];
|
|
255
|
+
default:
|
|
256
|
+
return [];
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
function getEvidenceState(ctx) {
|
|
260
|
+
try {
|
|
261
|
+
const evidenceGraph = ctx.getDomainInstance('evidenceGraph');
|
|
262
|
+
return evidenceGraph
|
|
263
|
+
? { hasGraph: true, nodeCount: evidenceGraph.nodeCount, edgeCount: evidenceGraph.edgeCount }
|
|
264
|
+
: { hasGraph: false, nodeCount: 0, edgeCount: 0 };
|
|
265
|
+
}
|
|
266
|
+
catch {
|
|
267
|
+
return { hasGraph: false, nodeCount: 0, edgeCount: 0 };
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
function collectUnsatisfiedPrerequisites(graph, routingState) {
|
|
271
|
+
const prerequisites = getEffectivePrerequisites();
|
|
272
|
+
const warnings = [];
|
|
273
|
+
for (const toolNode of collectToolNodes(graph)) {
|
|
274
|
+
const toolPrerequisites = prerequisites[toolNode.toolName] ?? [];
|
|
275
|
+
for (const prerequisite of toolPrerequisites) {
|
|
276
|
+
if (prerequisite.check(routingState)) {
|
|
277
|
+
continue;
|
|
278
|
+
}
|
|
279
|
+
warnings.push({
|
|
280
|
+
nodeId: toolNode.id,
|
|
281
|
+
toolName: toolNode.toolName,
|
|
282
|
+
condition: prerequisite.condition,
|
|
283
|
+
fix: prerequisite.fix,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return warnings;
|
|
288
|
+
}
|
|
213
289
|
export async function executeExtensionWorkflow(ctx, workflow, options = {}) {
|
|
214
290
|
const runId = randomUUID();
|
|
215
291
|
const profile = options.profile ?? String(ctx.baseTier ?? 'workflow');
|
|
@@ -241,8 +317,65 @@ export async function executeExtensionWorkflow(ctx, workflow, options = {}) {
|
|
|
241
317
|
try {
|
|
242
318
|
await workflow.onStart?.(executionContext);
|
|
243
319
|
const graph = workflow.build(executionContext);
|
|
320
|
+
const preflightMode = options.preflightMode ?? 'warn';
|
|
321
|
+
let preflightWarnings = [];
|
|
322
|
+
if (preflightMode === 'skip') {
|
|
323
|
+
executionContext.emitSpan('workflow.preflight', {
|
|
324
|
+
mode: preflightMode,
|
|
325
|
+
skipped: true,
|
|
326
|
+
evidenceState: getEvidenceState(ctx),
|
|
327
|
+
warningCount: 0,
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
try {
|
|
332
|
+
const routingState = await getRoutingState(ctx);
|
|
333
|
+
const evidenceState = getEvidenceState(ctx);
|
|
334
|
+
preflightWarnings = collectUnsatisfiedPrerequisites(graph, routingState);
|
|
335
|
+
executionContext.emitSpan('workflow.preflight', {
|
|
336
|
+
mode: preflightMode,
|
|
337
|
+
routingState,
|
|
338
|
+
evidenceState,
|
|
339
|
+
warningCount: preflightWarnings.length,
|
|
340
|
+
warnings: preflightWarnings,
|
|
341
|
+
});
|
|
342
|
+
if (preflightMode === 'strict' && preflightWarnings.length > 0) {
|
|
343
|
+
throw new PreflightError(preflightWarnings);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
catch (error) {
|
|
347
|
+
if (error instanceof PreflightError) {
|
|
348
|
+
throw error;
|
|
349
|
+
}
|
|
350
|
+
executionContext.emitSpan('workflow.preflight', {
|
|
351
|
+
mode: preflightMode,
|
|
352
|
+
warningCount: 0,
|
|
353
|
+
skipped: true,
|
|
354
|
+
error: error instanceof Error ? error.message : String(error),
|
|
355
|
+
evidenceState: getEvidenceState(ctx),
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
}
|
|
244
359
|
const result = await withTimeout(executeNode(ctx, graph, executionContext, options), options.timeoutMs ?? workflow.timeoutMs ?? 0, `Workflow "${workflow.id}"`);
|
|
245
360
|
await workflow.onFinish?.(executionContext, result);
|
|
361
|
+
try {
|
|
362
|
+
const evidenceGraph = typeof ctx.getDomainInstance === 'function'
|
|
363
|
+
? ctx.getDomainInstance('evidenceGraph')
|
|
364
|
+
: undefined;
|
|
365
|
+
if (evidenceGraph && evidenceGraph.nodeCount > 0) {
|
|
366
|
+
stepResults.set('__evidenceSnapshot', evidenceGraph.exportJson());
|
|
367
|
+
executionContext.emitSpan('workflow.evidence.auto-export', {
|
|
368
|
+
nodeCount: evidenceGraph.nodeCount,
|
|
369
|
+
edgeCount: evidenceGraph.edgeCount,
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
catch (exportError) {
|
|
374
|
+
executionContext.emitSpan('workflow.evidence.auto-export', {
|
|
375
|
+
skipped: true,
|
|
376
|
+
error: exportError instanceof Error ? exportError.message : String(exportError),
|
|
377
|
+
});
|
|
378
|
+
}
|
|
246
379
|
return {
|
|
247
380
|
workflowId: workflow.id,
|
|
248
381
|
displayName: workflow.displayName,
|
|
@@ -1,24 +1,10 @@
|
|
|
1
1
|
export interface Config {
|
|
2
|
-
llm: LLMConfig;
|
|
3
2
|
puppeteer: PuppeteerConfig;
|
|
4
3
|
mcp: MCPConfig;
|
|
5
4
|
cache: CacheConfig;
|
|
6
5
|
performance: PerformanceConfig;
|
|
7
6
|
search: SearchConfig;
|
|
8
7
|
}
|
|
9
|
-
export interface LLMConfig {
|
|
10
|
-
provider: 'openai' | 'anthropic';
|
|
11
|
-
openai?: {
|
|
12
|
-
apiKey: string;
|
|
13
|
-
model: string;
|
|
14
|
-
baseURL?: string;
|
|
15
|
-
};
|
|
16
|
-
anthropic?: {
|
|
17
|
-
apiKey: string;
|
|
18
|
-
model: string;
|
|
19
|
-
baseURL?: string;
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
8
|
export interface PuppeteerConfig {
|
|
23
9
|
headless: boolean;
|
|
24
10
|
timeout: number;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type { CodeLocation, Result } from './common.js';
|
|
2
|
-
export type { Config,
|
|
2
|
+
export type { Config, PuppeteerConfig, MCPConfig, CacheConfig, PerformanceConfig, SearchConfig, SearchQueryCategoryProfileConfig, SearchCjkQueryAliasConfig, SearchIntentToolBoostRuleConfig, } from './config.js';
|
|
3
3
|
export type { BrowserContext } from './browser.js';
|
|
4
4
|
export type { CollectCodeOptions, CodeFile, CollectCodeResult, DependencyGraph, DependencyNode, DependencyEdge, } from './collector.js';
|
|
5
5
|
export type { ObfuscationType, Transformation, DeobfuscateOptions, DeobfuscateResult, DeobfuscateMappingRule, DeobfuscateSavedArtifact, DeobfuscateBundleModuleSummary, DeobfuscateBundleSummary, } from './deobfuscator.js';
|
|
@@ -51,6 +51,8 @@ export class DetailedDataManager {
|
|
|
51
51
|
return Object(value)[key];
|
|
52
52
|
}
|
|
53
53
|
smartHandle(data, threshold = DETAILED_DATA_SMART_THRESHOLD_BYTES) {
|
|
54
|
+
if (data === null || data === undefined || typeof data !== 'object')
|
|
55
|
+
return data;
|
|
54
56
|
const { json: jsonStr, size } = this.serializeWithMemo(data);
|
|
55
57
|
if (size <= threshold) {
|
|
56
58
|
return data;
|
|
@@ -6,7 +6,7 @@ export class RingBuffer {
|
|
|
6
6
|
count = 0;
|
|
7
7
|
constructor(capacity) {
|
|
8
8
|
this.capacity = capacity;
|
|
9
|
-
this.buf =
|
|
9
|
+
this.buf = Array.from({ length: capacity });
|
|
10
10
|
}
|
|
11
11
|
get length() {
|
|
12
12
|
return this.count;
|
|
@@ -37,7 +37,7 @@ export class RingBuffer {
|
|
|
37
37
|
return item;
|
|
38
38
|
}
|
|
39
39
|
clear() {
|
|
40
|
-
this.buf =
|
|
40
|
+
this.buf = Array.from({ length: Math.min(64, this.capacity) });
|
|
41
41
|
this.head = 0;
|
|
42
42
|
this.tail = 0;
|
|
43
43
|
this.count = 0;
|
|
@@ -48,14 +48,14 @@ export class RingBuffer {
|
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
toArray() {
|
|
51
|
-
const result =
|
|
51
|
+
const result = Array.from({ length: this.count });
|
|
52
52
|
for (let i = 0; i < this.count; i++) {
|
|
53
53
|
result[i] = this.buf[(this.head + i) % this.buf.length];
|
|
54
54
|
}
|
|
55
55
|
return result;
|
|
56
56
|
}
|
|
57
57
|
map(fn) {
|
|
58
|
-
const result =
|
|
58
|
+
const result = Array.from({ length: this.count });
|
|
59
59
|
for (let i = 0; i < this.count; i++) {
|
|
60
60
|
result[i] = fn(this.buf[(this.head + i) % this.buf.length], i);
|
|
61
61
|
}
|
|
@@ -63,7 +63,7 @@ export class RingBuffer {
|
|
|
63
63
|
}
|
|
64
64
|
grow() {
|
|
65
65
|
const newSize = Math.min(this.buf.length * 2, this.capacity);
|
|
66
|
-
const newBuf =
|
|
66
|
+
const newBuf = Array.from({ length: newSize });
|
|
67
67
|
for (let i = 0; i < this.count; i++) {
|
|
68
68
|
newBuf[i] = this.buf[(this.head + i) % this.buf.length];
|
|
69
69
|
}
|
|
@@ -257,7 +257,7 @@ export class TokenBudgetManager {
|
|
|
257
257
|
tokens,
|
|
258
258
|
percentage: Math.round((tokens / this.currentUsage) * 100),
|
|
259
259
|
}))
|
|
260
|
-
.
|
|
260
|
+
.toSorted((a, b) => b.tokens - a.tokens)
|
|
261
261
|
.slice(0, 10);
|
|
262
262
|
const suggestions = this.generateSuggestions(topTools);
|
|
263
263
|
const recentCalls = this.toolCallHistory.slice(-20);
|
|
@@ -29,7 +29,7 @@ export interface GlobalCacheStats {
|
|
|
29
29
|
recommendations: string[];
|
|
30
30
|
}
|
|
31
31
|
export declare class UnifiedCacheManager {
|
|
32
|
-
|
|
32
|
+
protected static instance: UnifiedCacheManager;
|
|
33
33
|
private readonly GLOBAL_MAX_SIZE;
|
|
34
34
|
private readonly LOW_HIT_RATE_THRESHOLD;
|
|
35
35
|
private caches;
|
|
@@ -110,7 +110,7 @@ export class UnifiedCacheManager {
|
|
|
110
110
|
if (cacheStats.hitRate !== undefined &&
|
|
111
111
|
cacheStats.hitRate < avgHitRate * this.LOW_HIT_RATE_THRESHOLD) {
|
|
112
112
|
const cache = this.caches.get(cacheStats.name);
|
|
113
|
-
if (cache
|
|
113
|
+
if (cache?.clear) {
|
|
114
114
|
try {
|
|
115
115
|
await cache.clear();
|
|
116
116
|
logger.info(`Cleared low hit rate cache: ${cacheStats.name} (${(cacheStats.hitRate * 100).toFixed(1)}%)`);
|
|
@@ -125,10 +125,10 @@ export class UnifiedCacheManager {
|
|
|
125
125
|
async cleanupLargeItems() {
|
|
126
126
|
logger.info('Cleaning up large caches...');
|
|
127
127
|
const stats = await this.getGlobalStats();
|
|
128
|
-
const sortedCaches = stats.caches.
|
|
128
|
+
const sortedCaches = stats.caches.toSorted((a, b) => b.size - a.size);
|
|
129
129
|
for (const cacheStats of sortedCaches.slice(0, 2)) {
|
|
130
130
|
const cache = this.caches.get(cacheStats.name);
|
|
131
|
-
if (cache
|
|
131
|
+
if (cache?.clear) {
|
|
132
132
|
try {
|
|
133
133
|
await cache.clear();
|
|
134
134
|
logger.info(`Cleared large cache: ${cacheStats.name} (${cacheStats.sizeMB}MB)`);
|
|
@@ -38,7 +38,7 @@ export async function cleanupArtifacts(options) {
|
|
|
38
38
|
if (cutoff > 0) {
|
|
39
39
|
const agedOut = remaining
|
|
40
40
|
.filter((entry) => entry.mtimeMs < cutoff)
|
|
41
|
-
.
|
|
41
|
+
.toSorted((a, b) => a.mtimeMs - b.mtimeMs);
|
|
42
42
|
if (agedOut.length > 0) {
|
|
43
43
|
const agedOutPaths = new Set(agedOut.map((entry) => entry.path));
|
|
44
44
|
remaining = remaining.filter((entry) => !agedOutPaths.has(entry.path));
|
|
@@ -54,7 +54,7 @@ export async function cleanupArtifacts(options) {
|
|
|
54
54
|
if (config.maxTotalBytes > 0) {
|
|
55
55
|
let totalBytes = remaining.reduce((sum, entry) => sum + entry.size, 0);
|
|
56
56
|
if (totalBytes > config.maxTotalBytes) {
|
|
57
|
-
const sizeCandidates = [...remaining].
|
|
57
|
+
const sizeCandidates = [...remaining].toSorted((a, b) => a.mtimeMs - b.mtimeMs);
|
|
58
58
|
const removedPaths = new Set();
|
|
59
59
|
for (const entry of sizeCandidates) {
|
|
60
60
|
if (totalBytes <= config.maxTotalBytes)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type BetterSqlite3Issue = 'missing' | 'abi-mismatch' | 'load-failed';
|
|
2
|
+
export interface BetterSqlite3ProbeResult {
|
|
3
|
+
status: 'ok' | 'missing' | 'warn';
|
|
4
|
+
detail: string;
|
|
5
|
+
version: string | null;
|
|
6
|
+
issue?: BetterSqlite3Issue;
|
|
7
|
+
}
|
|
8
|
+
export declare function isBetterSqlite3RelatedError(error: unknown): boolean;
|
|
9
|
+
export declare function classifyBetterSqlite3Issue(error: unknown): BetterSqlite3Issue;
|
|
10
|
+
export declare function formatBetterSqlite3Error(error: unknown): string;
|
|
11
|
+
export declare function probeBetterSqlite3(): BetterSqlite3ProbeResult;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
const require = createRequire(import.meta.url);
|
|
3
|
+
const BETTER_SQLITE3_VERSION = '12.6.2';
|
|
4
|
+
const INSTALL_HINT = `pnpm add -O better-sqlite3@${BETTER_SQLITE3_VERSION}`;
|
|
5
|
+
const REBUILD_HINT = 'npm rebuild better-sqlite3 --foreground-scripts';
|
|
6
|
+
function extractErrorMessage(error) {
|
|
7
|
+
if (error instanceof Error) {
|
|
8
|
+
return error.message;
|
|
9
|
+
}
|
|
10
|
+
return String(error);
|
|
11
|
+
}
|
|
12
|
+
export function isBetterSqlite3RelatedError(error) {
|
|
13
|
+
return /better-sqlite3|better_sqlite3\.node|NODE_MODULE_VERSION|compiled against a different Node\.js version/i.test(extractErrorMessage(error));
|
|
14
|
+
}
|
|
15
|
+
export function classifyBetterSqlite3Issue(error) {
|
|
16
|
+
const message = extractErrorMessage(error);
|
|
17
|
+
if (/Cannot find module 'better-sqlite3'|Cannot find package 'better-sqlite3'|better-sqlite3 is not installed/i.test(message)) {
|
|
18
|
+
return 'missing';
|
|
19
|
+
}
|
|
20
|
+
if (/better_sqlite3\.node|NODE_MODULE_VERSION|compiled against a different Node\.js version|module was compiled against/i.test(message)) {
|
|
21
|
+
return 'abi-mismatch';
|
|
22
|
+
}
|
|
23
|
+
return 'load-failed';
|
|
24
|
+
}
|
|
25
|
+
export function formatBetterSqlite3Error(error) {
|
|
26
|
+
const issue = classifyBetterSqlite3Issue(error);
|
|
27
|
+
const message = extractErrorMessage(error);
|
|
28
|
+
if (issue === 'missing') {
|
|
29
|
+
return `better-sqlite3 is not installed. Install the optional trace backend with \`${INSTALL_HINT}\`.`;
|
|
30
|
+
}
|
|
31
|
+
if (issue === 'abi-mismatch') {
|
|
32
|
+
return `better-sqlite3 is installed but its native binary is incompatible with the current Node.js runtime (${process.version}, ABI ${process.versions.modules}). Rebuild it with \`${REBUILD_HINT}\` or reinstall dependencies under the active Node version. Original error: ${message}`;
|
|
33
|
+
}
|
|
34
|
+
return `better-sqlite3 failed to initialize. Try \`${REBUILD_HINT}\` or reinstall dependencies under the active Node version. Original error: ${message}`;
|
|
35
|
+
}
|
|
36
|
+
function readBetterSqlite3Version() {
|
|
37
|
+
try {
|
|
38
|
+
const packageJsonPath = require.resolve('better-sqlite3/package.json');
|
|
39
|
+
const packageJson = require(packageJsonPath);
|
|
40
|
+
return packageJson.version ?? null;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export function probeBetterSqlite3() {
|
|
47
|
+
const version = readBetterSqlite3Version();
|
|
48
|
+
if (!version) {
|
|
49
|
+
return {
|
|
50
|
+
status: 'missing',
|
|
51
|
+
detail: `Optional SQLite backend for trace tools is not installed. Install it with: ${INSTALL_HINT}`,
|
|
52
|
+
version: null,
|
|
53
|
+
issue: 'missing',
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
const Database = require('better-sqlite3');
|
|
58
|
+
const db = new Database(':memory:');
|
|
59
|
+
try {
|
|
60
|
+
db.prepare('SELECT 1 AS ok').get();
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
db.close();
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
status: 'ok',
|
|
67
|
+
detail: `installed (${version}) — native trace backend healthy`,
|
|
68
|
+
version,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
const issue = classifyBetterSqlite3Issue(error);
|
|
73
|
+
if (issue === 'missing') {
|
|
74
|
+
return {
|
|
75
|
+
status: 'missing',
|
|
76
|
+
detail: `Optional SQLite backend for trace tools is not installed. Install it with: ${INSTALL_HINT}`,
|
|
77
|
+
version,
|
|
78
|
+
issue,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
status: 'warn',
|
|
83
|
+
detail: `installed (${version}) but ${formatBetterSqlite3Error(error)}`,
|
|
84
|
+
version,
|
|
85
|
+
issue,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { existsSync } from 'fs';
|
|
2
|
-
import
|
|
2
|
+
import { executablePath } from 'rebrowser-puppeteer-core';
|
|
3
3
|
const ENV_KEYS = ['CHROME_PATH', 'PUPPETEER_EXECUTABLE_PATH', 'BROWSER_EXECUTABLE_PATH'];
|
|
4
4
|
let cachedBrowserPath = null;
|
|
5
5
|
function resolveFromEnvironment() {
|
|
@@ -13,7 +13,7 @@ function resolveFromEnvironment() {
|
|
|
13
13
|
}
|
|
14
14
|
function resolveFromPuppeteer() {
|
|
15
15
|
try {
|
|
16
|
-
const candidate =
|
|
16
|
+
const candidate = executablePath('chrome');
|
|
17
17
|
if (candidate && existsSync(candidate)) {
|
|
18
18
|
return candidate;
|
|
19
19
|
}
|
|
@@ -1,13 +1,26 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
2
3
|
function getPackageVersion(moduleUrl) {
|
|
3
4
|
try {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
let dirUrl = new URL('.', moduleUrl);
|
|
6
|
+
for (let i = 0; i < 5; i++) {
|
|
7
|
+
try {
|
|
8
|
+
const candidate = fileURLToPath(new URL('package.json', dirUrl));
|
|
9
|
+
const pkg = JSON.parse(readFileSync(candidate, 'utf8'));
|
|
10
|
+
if (pkg.version)
|
|
11
|
+
return pkg.version;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
}
|
|
15
|
+
const parentUrl = new URL('../', dirUrl);
|
|
16
|
+
if (parentUrl.href === dirUrl.href)
|
|
17
|
+
break;
|
|
18
|
+
dirUrl = parentUrl;
|
|
19
|
+
}
|
|
7
20
|
}
|
|
8
21
|
catch {
|
|
9
|
-
return process.env.npm_package_version ?? '0.0.0';
|
|
10
22
|
}
|
|
23
|
+
return process.env.npm_package_version ?? '0.0.0';
|
|
11
24
|
}
|
|
12
25
|
function buildHelpText(version) {
|
|
13
26
|
return [
|
|
@@ -21,8 +34,6 @@ function buildHelpText(version) {
|
|
|
21
34
|
' Starts the MCP server by default.',
|
|
22
35
|
'',
|
|
23
36
|
'Common environment variables:',
|
|
24
|
-
' OPENAI_API_KEY',
|
|
25
|
-
' DEFAULT_LLM_PROVIDER=openai|anthropic',
|
|
26
37
|
' MCP_TRANSPORT=stdio|http',
|
|
27
38
|
' MCP_TOOL_PROFILE=search|workflow|full',
|
|
28
39
|
'',
|