@jshookmcp/jshook 0.2.3 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -5
- package/README.zh.md +18 -3
- 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.js +2 -2
- 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 +18 -3
- package/dist/src/modules/captcha/AICaptchaDetector.d.ts +1 -10
- package/dist/src/modules/captcha/AICaptchaDetector.js +7 -201
- package/dist/src/modules/collector/CodeCollector.js +4 -5
- package/dist/src/modules/collector/DOMInspector.js +48 -58
- 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 +4 -2
- 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 +1 -2
- package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.js +3 -55
- package/dist/src/modules/deobfuscator/JScramblerDeobfuscator.js +3 -4
- 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.js +25 -22
- package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.compose.js +5 -5
- package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.network.js +311 -311
- package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.runtime.js +410 -410
- package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.storage.js +122 -122
- 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/ConsoleMonitor.impl.core.dynamic.js +194 -194
- 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/monitor/PlaywrightNetworkMonitor.js +62 -62
- package/dist/src/modules/process/BaseMemoryManager.d.ts +1 -1
- package/dist/src/modules/process/LinuxProcessManager.js +2 -0
- package/dist/src/modules/process/MacProcessManager.js +25 -25
- package/dist/src/modules/process/MemoryManager.d.ts +1 -1
- package/dist/src/modules/process/MemoryManager.js +2 -2
- package/dist/src/modules/process/memory/AuditTrail.js +1 -1
- package/dist/src/modules/process/memory/availability.js +49 -49
- package/dist/src/modules/process/memory/injector.js +185 -185
- package/dist/src/modules/process/memory/reader.js +85 -53
- package/dist/src/modules/process/memory/regions.dump.js +51 -51
- package/dist/src/modules/process/memory/regions.enumerate.js +108 -108
- package/dist/src/modules/process/memory/regions.modules.js +80 -80
- package/dist/src/modules/process/memory/regions.protection.js +148 -115
- package/dist/src/modules/process/memory/scanner.d.ts +5 -1
- package/dist/src/modules/process/memory/scanner.darwin.js +98 -41
- package/dist/src/modules/process/memory/scanner.js +88 -4
- package/dist/src/modules/process/memory/scanner.windows.js +124 -124
- package/dist/src/modules/process/memory/writer.js +98 -58
- package/dist/src/modules/security/ExecutionSandbox.js +51 -52
- package/dist/src/modules/stealth/FingerprintManager.js +1 -1
- package/dist/src/modules/stealth/StealthScripts.d.ts +1 -0
- package/dist/src/modules/stealth/StealthScripts.js +18 -13
- package/dist/src/modules/stealth/StealthVerifier.js +1 -3
- 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 +75 -69
- package/dist/src/modules/trace/TraceRecorder.js +1 -5
- package/dist/src/native/AntiCheatDetector.js +67 -16
- package/dist/src/native/CodeInjector.js +3 -3
- package/dist/src/native/HardwareBreakpoint.js +24 -15
- 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 +41 -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 +1 -1
- package/dist/src/server/MCPServer.transport.js +12 -0
- package/dist/src/server/ToolCallContextGuard.js +8 -0
- package/dist/src/server/ToolRouter.d.ts +25 -9
- 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.js +26 -20
- package/dist/src/server/domains/analysis/handlers.web-tools.js +2 -1
- 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 +210 -439
- package/dist/src/server/domains/browser/definitions.tools.page-system.js +108 -250
- package/dist/src/server/domains/browser/definitions.tools.runtime.js +98 -211
- package/dist/src/server/domains/browser/definitions.tools.security.js +194 -339
- 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/framework-state.js +27 -9
- 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.impl.d.ts +1 -2
- package/dist/src/server/domains/browser/handlers.impl.js +2 -3
- package/dist/src/server/domains/browser/manifest.js +37 -13
- package/dist/src/server/domains/coordination/definitions.js +50 -216
- package/dist/src/server/domains/coordination/index.d.ts +2 -1
- package/dist/src/server/domains/coordination/index.js +1 -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/graphql/handlers.impl.core.runtime.shared.js +77 -77
- package/dist/src/server/domains/hooks/ai-handlers.d.ts +0 -7
- package/dist/src/server/domains/hooks/ai-handlers.js +1 -67
- 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.extensions.js +78 -20
- 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 +4 -0
- package/dist/src/server/domains/platform/handlers/bridge-handlers.js +193 -4
- 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.js +3 -3
- 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 +18 -16
- 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.js +8 -5
- package/dist/src/server/domains/trace/definitions.tools.js +51 -206
- package/dist/src/server/domains/trace/handlers.js +10 -12
- 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 +15 -3
- package/dist/src/server/domains/transform/definitions.js +50 -210
- package/dist/src/server/domains/transform/handlers.impl.transform-base.js +108 -108
- 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 +1 -1
- package/dist/src/server/domains/workflow/definitions.js +144 -414
- package/dist/src/server/domains/workflow/handlers.impl.workflow-account-bundle.js +1 -1
- package/dist/src/server/domains/workflow/handlers.impl.workflow-api.js +51 -51
- 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 +4 -4
- 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/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 +1 -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/QuickJSSandbox.js +16 -5
- package/dist/src/server/sandbox/SandboxHelpers.js +250 -250
- 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.js +1 -1
- 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 +5 -8
- 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 +74 -72
- 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
|
@@ -1,208 +1,53 @@
|
|
|
1
|
+
import { tool } from '../../registry/tool-builder.js';
|
|
1
2
|
export const TRACE_TOOLS = [
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
name: 'query_trace_sql',
|
|
53
|
-
description: `Execute a read-only SQL query against a trace database.
|
|
54
|
-
|
|
55
|
-
Available tables:
|
|
56
|
-
- events(id, timestamp, category, event_type, data, script_id, line_number)
|
|
57
|
-
- memory_deltas(id, timestamp, address, old_value, new_value, size, value_type)
|
|
58
|
-
- heap_snapshots(id, timestamp, snapshot_data, summary)
|
|
59
|
-
- metadata(key, value)
|
|
60
|
-
|
|
61
|
-
Returns columns, rows, and row count.
|
|
62
|
-
|
|
63
|
-
Examples:
|
|
64
|
-
query_trace_sql(sql="SELECT * FROM events WHERE category='debugger' ORDER BY timestamp")
|
|
65
|
-
query_trace_sql(sql="SELECT address, COUNT(*) as writes FROM memory_deltas GROUP BY address ORDER BY writes DESC LIMIT 10")
|
|
66
|
-
query_trace_sql(sql="SELECT * FROM events WHERE timestamp BETWEEN 1000 AND 2000", dbPath="artifacts/traces/my-trace.db")`,
|
|
67
|
-
inputSchema: {
|
|
68
|
-
type: 'object',
|
|
69
|
-
properties: {
|
|
70
|
-
sql: {
|
|
71
|
-
type: 'string',
|
|
72
|
-
description: 'SQL query to execute (SELECT only — write operations are rejected)',
|
|
73
|
-
},
|
|
74
|
-
dbPath: {
|
|
75
|
-
type: 'string',
|
|
76
|
-
description: 'Path to trace DB file. Uses the active recording if omitted.',
|
|
77
|
-
},
|
|
78
|
-
},
|
|
79
|
-
required: ['sql'],
|
|
80
|
-
},
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
name: 'seek_to_timestamp',
|
|
84
|
-
description: `Reconstruct application state at a specific timestamp from a recorded trace.
|
|
85
|
-
|
|
86
|
-
Returns a structured snapshot including:
|
|
87
|
-
- Events near the timestamp
|
|
88
|
-
- Debugger state (last pause, call stack)
|
|
89
|
-
- Memory state (latest values per address)
|
|
90
|
-
- Network state (completed requests)
|
|
91
|
-
- Nearest heap snapshot
|
|
92
|
-
|
|
93
|
-
Examples:
|
|
94
|
-
seek_to_timestamp(timestamp=1711000000000)
|
|
95
|
-
seek_to_timestamp(timestamp=1711000000000, windowMs=500)
|
|
96
|
-
seek_to_timestamp(timestamp=1711000000000, dbPath="artifacts/traces/my-trace.db")`,
|
|
97
|
-
inputSchema: {
|
|
98
|
-
type: 'object',
|
|
99
|
-
properties: {
|
|
100
|
-
timestamp: {
|
|
101
|
-
type: 'number',
|
|
102
|
-
description: 'Target timestamp in milliseconds since epoch',
|
|
103
|
-
},
|
|
104
|
-
dbPath: {
|
|
105
|
-
type: 'string',
|
|
106
|
-
description: 'Path to trace DB file. Uses the active recording if omitted.',
|
|
107
|
-
},
|
|
108
|
-
windowMs: {
|
|
109
|
-
type: 'number',
|
|
110
|
-
description: 'Time window around timestamp to include in ms (default: 100)',
|
|
111
|
-
},
|
|
112
|
-
},
|
|
113
|
-
required: ['timestamp'],
|
|
114
|
-
},
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
name: 'diff_heap_snapshots',
|
|
118
|
-
description: `Compare two heap snapshots from a trace and return the differences.
|
|
119
|
-
|
|
120
|
-
Shows:
|
|
121
|
-
- New object types (in snapshot 2 but not 1)
|
|
122
|
-
- Deleted object types (in snapshot 1 but not 2)
|
|
123
|
-
- Changed objects (count or size differs)
|
|
124
|
-
- Total size delta
|
|
125
|
-
|
|
126
|
-
Useful for identifying state changes in obfuscated code.
|
|
127
|
-
|
|
128
|
-
Examples:
|
|
129
|
-
diff_heap_snapshots(snapshotId1=1, snapshotId2=2)
|
|
130
|
-
diff_heap_snapshots(snapshotId1=1, snapshotId2=3, dbPath="artifacts/traces/my-trace.db")`,
|
|
131
|
-
inputSchema: {
|
|
132
|
-
type: 'object',
|
|
133
|
-
properties: {
|
|
134
|
-
snapshotId1: {
|
|
135
|
-
type: 'number',
|
|
136
|
-
description: 'First snapshot ID (earlier)',
|
|
137
|
-
},
|
|
138
|
-
snapshotId2: {
|
|
139
|
-
type: 'number',
|
|
140
|
-
description: 'Second snapshot ID (later)',
|
|
141
|
-
},
|
|
142
|
-
dbPath: {
|
|
143
|
-
type: 'string',
|
|
144
|
-
description: 'Path to trace DB file. Uses the active recording if omitted.',
|
|
145
|
-
},
|
|
146
|
-
},
|
|
147
|
-
required: ['snapshotId1', 'snapshotId2'],
|
|
148
|
-
},
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
name: 'export_trace',
|
|
152
|
-
description: `Export a trace database to Chrome Trace Event JSON format.
|
|
153
|
-
|
|
154
|
-
The resulting file can be loaded in:
|
|
155
|
-
- chrome://tracing
|
|
156
|
-
- Perfetto UI (ui.perfetto.dev)
|
|
157
|
-
|
|
158
|
-
Maps events to the standard trace event format with name, category, phase, timestamp.
|
|
159
|
-
|
|
160
|
-
Examples:
|
|
161
|
-
export_trace()
|
|
162
|
-
export_trace(dbPath="artifacts/traces/my-trace.db")
|
|
163
|
-
export_trace(outputPath="my-export.json")`,
|
|
164
|
-
inputSchema: {
|
|
165
|
-
type: 'object',
|
|
166
|
-
properties: {
|
|
167
|
-
dbPath: {
|
|
168
|
-
type: 'string',
|
|
169
|
-
description: 'Path to trace DB file. Uses the active recording if omitted.',
|
|
170
|
-
},
|
|
171
|
-
outputPath: {
|
|
172
|
-
type: 'string',
|
|
173
|
-
description: 'Output JSON file path. Auto-generated if omitted.',
|
|
174
|
-
},
|
|
175
|
-
},
|
|
176
|
-
},
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
name: 'summarize_trace',
|
|
180
|
-
description: `Generate a compact, LLM-friendly summary of a trace database.
|
|
181
|
-
|
|
182
|
-
Avoids sending raw trace data that may exceed context windows. Three detail levels:
|
|
183
|
-
- compact: category aggregation + timeline overview (~10% of raw size)
|
|
184
|
-
- balanced: compact + key moments (breakpoints, exceptions, network completions) [DEFAULT]
|
|
185
|
-
- full: passthrough — returns all events without compression
|
|
186
|
-
|
|
187
|
-
Also detects memory anomalies: addresses with significantly more writes than average.
|
|
188
|
-
|
|
189
|
-
Examples:
|
|
190
|
-
summarize_trace()
|
|
191
|
-
summarize_trace(detail="compact")
|
|
192
|
-
summarize_trace(detail="balanced", dbPath="artifacts/traces/my-trace.db")`,
|
|
193
|
-
inputSchema: {
|
|
194
|
-
type: 'object',
|
|
195
|
-
properties: {
|
|
196
|
-
detail: {
|
|
197
|
-
type: 'string',
|
|
198
|
-
enum: ['compact', 'balanced', 'full'],
|
|
199
|
-
description: 'Summary detail level (default: balanced)',
|
|
200
|
-
},
|
|
201
|
-
dbPath: {
|
|
202
|
-
type: 'string',
|
|
203
|
-
description: 'Path to trace DB file. Uses the active recording if omitted.',
|
|
204
|
-
},
|
|
205
|
-
},
|
|
206
|
-
},
|
|
207
|
-
},
|
|
3
|
+
tool('start_trace_recording')
|
|
4
|
+
.desc('Start recording CDP events, debugger state, and memory writes into a SQLite trace database.\n\nRecording captures events from:\n- Debugger: breakpoints, pauses, script parsing\n- Runtime: console calls, exceptions\n- Network: requests, responses\n- Page: navigation events\n- EventBus: tool calls, memory scans, browser events\n\nCall stop_trace_recording to end the recording session.\n\nExamples:\nstart_trace_recording()\nstart_trace_recording(cdpDomains=["Debugger", "Network"])')
|
|
5
|
+
.array('cdpDomains', { type: 'string' }, 'CDP domains to record (default: Debugger, Runtime, Network, Page)')
|
|
6
|
+
.boolean('recordMemoryDeltas', 'Record memory write deltas', { default: true })
|
|
7
|
+
.idempotent()
|
|
8
|
+
.build(),
|
|
9
|
+
tool('stop_trace_recording')
|
|
10
|
+
.desc('Stop the active trace recording and finalize the SQLite database.\n\nReturns session summary including:\n- Database file path\n- Total event count\n- Memory delta count\n- Heap snapshot count\n- Recording duration\n\nExamples:\nstop_trace_recording()')
|
|
11
|
+
.build(),
|
|
12
|
+
tool('query_trace_sql')
|
|
13
|
+
.desc('Execute a read-only SQL query against a trace database.\n\nAvailable tables:\n- events(id, timestamp, category, event_type, data, script_id, line_number)\n- memory_deltas(id, timestamp, address, old_value, new_value, size, value_type)\n- heap_snapshots(id, timestamp, snapshot_data, summary)\n- metadata(key, value)\n\nReturns columns, rows, and row count.\n\nExamples:\nquery_trace_sql(sql="SELECT * FROM events WHERE category=\'debugger\' ORDER BY timestamp")\nquery_trace_sql(sql="SELECT address, COUNT(*) as writes FROM memory_deltas GROUP BY address ORDER BY writes DESC LIMIT 10")\nquery_trace_sql(sql="SELECT * FROM events WHERE timestamp BETWEEN 1000 AND 2000", dbPath="artifacts/traces/my-trace.db")')
|
|
14
|
+
.string('sql', 'SQL query to execute (SELECT only — write operations are rejected)')
|
|
15
|
+
.string('dbPath', 'Path to trace DB file. Uses the active recording if omitted.')
|
|
16
|
+
.required('sql')
|
|
17
|
+
.readOnly()
|
|
18
|
+
.idempotent()
|
|
19
|
+
.build(),
|
|
20
|
+
tool('seek_to_timestamp')
|
|
21
|
+
.desc('Reconstruct application state at a specific timestamp from a recorded trace.\n\nReturns a structured snapshot including:\n- Events near the timestamp\n- Debugger state (last pause, call stack)\n- Memory state (latest values per address)\n- Network state (completed requests)\n- Nearest heap snapshot\n\nExamples:\nseek_to_timestamp(timestamp=1711000000000)\nseek_to_timestamp(timestamp=1711000000000, windowMs=500)\nseek_to_timestamp(timestamp=1711000000000, dbPath="artifacts/traces/my-trace.db")')
|
|
22
|
+
.number('timestamp', 'Target timestamp in milliseconds since epoch')
|
|
23
|
+
.string('dbPath', 'Path to trace DB file. Uses the active recording if omitted.')
|
|
24
|
+
.number('windowMs', 'Time window around timestamp to include in ms', { default: 100 })
|
|
25
|
+
.required('timestamp')
|
|
26
|
+
.readOnly()
|
|
27
|
+
.idempotent()
|
|
28
|
+
.build(),
|
|
29
|
+
tool('diff_heap_snapshots')
|
|
30
|
+
.desc('Compare two heap snapshots from a trace and return the differences.\n\nShows:\n- New object types (in snapshot 2 but not 1)\n- Deleted object types (in snapshot 1 but not 2)\n- Changed objects (count or size differs)\n- Total size delta\n\nUseful for identifying state changes in obfuscated code.\n\nExamples:\ndiff_heap_snapshots(snapshotId1=1, snapshotId2=2)\ndiff_heap_snapshots(snapshotId1=1, snapshotId2=3, dbPath="artifacts/traces/my-trace.db")')
|
|
31
|
+
.number('snapshotId1', 'First snapshot ID (earlier)')
|
|
32
|
+
.number('snapshotId2', 'Second snapshot ID (later)')
|
|
33
|
+
.string('dbPath', 'Path to trace DB file. Uses the active recording if omitted.')
|
|
34
|
+
.required('snapshotId1', 'snapshotId2')
|
|
35
|
+
.readOnly()
|
|
36
|
+
.idempotent()
|
|
37
|
+
.build(),
|
|
38
|
+
tool('export_trace')
|
|
39
|
+
.desc('Export a trace database to Chrome Trace Event JSON format.\n\nThe resulting file can be loaded in:\n- chrome://tracing\n- Perfetto UI (ui.perfetto.dev)\n\nMaps events to the standard trace event format with name, category, phase, timestamp.\n\nExamples:\nexport_trace()\nexport_trace(dbPath="artifacts/traces/my-trace.db")\nexport_trace(outputPath="my-export.json")')
|
|
40
|
+
.string('dbPath', 'Path to trace DB file. Uses the active recording if omitted.')
|
|
41
|
+
.string('outputPath', 'Output JSON file path. Auto-generated if omitted.')
|
|
42
|
+
.idempotent()
|
|
43
|
+
.build(),
|
|
44
|
+
tool('summarize_trace')
|
|
45
|
+
.desc('Generate a compact, LLM-friendly summary of a trace database.\n\nAvoids sending raw trace data that may exceed context windows. Three detail levels:\n- compact: category aggregation + timeline overview (~10% of raw size)\n- balanced: compact + key moments (breakpoints, exceptions, network completions) [DEFAULT]\n- full: passthrough — returns all events without compression\n\nAlso detects memory anomalies: addresses with significantly more writes than average.\n\nExamples:\nsummarize_trace()\nsummarize_trace(detail="compact")\nsummarize_trace(detail="balanced", dbPath="artifacts/traces/my-trace.db")')
|
|
46
|
+
.enum('detail', ['compact', 'balanced', 'full'], 'Summary detail level', {
|
|
47
|
+
default: 'balanced',
|
|
48
|
+
})
|
|
49
|
+
.string('dbPath', 'Path to trace DB file. Uses the active recording if omitted.')
|
|
50
|
+
.readOnly()
|
|
51
|
+
.idempotent()
|
|
52
|
+
.build(),
|
|
208
53
|
];
|
|
@@ -2,7 +2,7 @@ import { writeFile } from 'node:fs/promises';
|
|
|
2
2
|
import { TraceDB } from '../../../modules/trace/TraceDB.js';
|
|
3
3
|
import {} from '../../../modules/trace/TraceRecorder.js';
|
|
4
4
|
import { resolveArtifactPath } from '../../../utils/artifacts.js';
|
|
5
|
-
import { summarizeEvents, summarizeMemoryDeltas } from '../../domains/trace/TraceSummarizer.js';
|
|
5
|
+
import { summarizeEvents, summarizeMemoryDeltas, } from '../../domains/trace/TraceSummarizer.js';
|
|
6
6
|
export class TraceToolHandlers {
|
|
7
7
|
recorder;
|
|
8
8
|
ctx;
|
|
@@ -42,9 +42,7 @@ export class TraceToolHandlers {
|
|
|
42
42
|
}
|
|
43
43
|
async handleStopTraceRecording() {
|
|
44
44
|
const session = this.recorder.stop();
|
|
45
|
-
const duration = session.stoppedAt
|
|
46
|
-
? session.stoppedAt - session.startedAt
|
|
47
|
-
: 0;
|
|
45
|
+
const duration = session.stoppedAt ? session.stoppedAt - session.startedAt : 0;
|
|
48
46
|
return {
|
|
49
47
|
status: 'stopped',
|
|
50
48
|
sessionId: session.sessionId,
|
|
@@ -103,16 +101,16 @@ export class TraceToolHandlers {
|
|
|
103
101
|
tempDb = db;
|
|
104
102
|
const events = db.getEventsByTimeRange(timestamp - windowMs, timestamp + windowMs);
|
|
105
103
|
const debuggerEventsResult = db.query(`SELECT * FROM events WHERE category = 'debugger' AND timestamp <= ${timestamp} ORDER BY timestamp DESC LIMIT 5`);
|
|
106
|
-
const memoryStateResult = db.query(`SELECT m1.* FROM memory_deltas m1
|
|
107
|
-
INNER JOIN (SELECT address, MAX(timestamp) as max_ts FROM memory_deltas WHERE timestamp <= ${timestamp} GROUP BY address) m2
|
|
108
|
-
ON m1.address = m2.address AND m1.timestamp = m2.max_ts
|
|
104
|
+
const memoryStateResult = db.query(`SELECT m1.* FROM memory_deltas m1
|
|
105
|
+
INNER JOIN (SELECT address, MAX(timestamp) as max_ts FROM memory_deltas WHERE timestamp <= ${timestamp} GROUP BY address) m2
|
|
106
|
+
ON m1.address = m2.address AND m1.timestamp = m2.max_ts
|
|
109
107
|
ORDER BY m1.address`);
|
|
110
108
|
const networkResult = db.query(`SELECT * FROM events WHERE category = 'network' AND event_type = 'Network.loadingFinished' AND timestamp <= ${timestamp} ORDER BY timestamp DESC LIMIT 20`);
|
|
111
109
|
const snapshotResult = db.query(`SELECT id, timestamp, summary FROM heap_snapshots WHERE timestamp <= ${timestamp} ORDER BY timestamp DESC LIMIT 1`);
|
|
112
110
|
return {
|
|
113
111
|
seekTimestamp: timestamp,
|
|
114
112
|
windowMs,
|
|
115
|
-
events: events.map(e => ({
|
|
113
|
+
events: events.map((e) => ({
|
|
116
114
|
timestamp: e.timestamp,
|
|
117
115
|
category: e.category,
|
|
118
116
|
eventType: e.eventType,
|
|
@@ -121,13 +119,13 @@ export class TraceToolHandlers {
|
|
|
121
119
|
lineNumber: e.lineNumber,
|
|
122
120
|
})),
|
|
123
121
|
debuggerState: {
|
|
124
|
-
recentEvents: debuggerEventsResult.rows.map(row => this.rowToObject(debuggerEventsResult.columns, row)),
|
|
122
|
+
recentEvents: debuggerEventsResult.rows.map((row) => this.rowToObject(debuggerEventsResult.columns, row)),
|
|
125
123
|
},
|
|
126
124
|
memoryState: {
|
|
127
|
-
addressValues: memoryStateResult.rows.map(row => this.rowToObject(memoryStateResult.columns, row)),
|
|
125
|
+
addressValues: memoryStateResult.rows.map((row) => this.rowToObject(memoryStateResult.columns, row)),
|
|
128
126
|
},
|
|
129
127
|
networkState: {
|
|
130
|
-
completedRequests: networkResult.rows.map(row => this.rowToObject(networkResult.columns, row)),
|
|
128
|
+
completedRequests: networkResult.rows.map((row) => this.rowToObject(networkResult.columns, row)),
|
|
131
129
|
},
|
|
132
130
|
nearestHeapSnapshot: snapshotResult.rows.length > 0
|
|
133
131
|
? this.rowToObject(snapshotResult.columns, snapshotResult.rows[0])
|
|
@@ -225,7 +223,7 @@ export class TraceToolHandlers {
|
|
|
225
223
|
const allEvents = db.query('SELECT timestamp, category, event_type, data, script_id, line_number FROM events ORDER BY timestamp ASC');
|
|
226
224
|
const PAIRED_BEGIN = new Set(['Debugger.paused']);
|
|
227
225
|
const PAIRED_END = new Set(['Debugger.resumed']);
|
|
228
|
-
const traceEvents = allEvents.rows.map(row => {
|
|
226
|
+
const traceEvents = allEvents.rows.map((row) => {
|
|
229
227
|
const ts = row[0] * 1000;
|
|
230
228
|
const cat = row[1];
|
|
231
229
|
const name = row[2];
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export
|
|
1
|
+
export * from './definitions.tools.js';
|
|
2
|
+
export { TraceToolHandlers } from './handlers.js';
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export
|
|
1
|
+
export * from './definitions.tools.js';
|
|
2
|
+
export { TraceToolHandlers } from './handlers.js';
|
|
@@ -38,11 +38,23 @@ const manifest = {
|
|
|
38
38
|
hint: 'Start recording → perform actions → stop recording → summarize/query/seek/diff/export',
|
|
39
39
|
},
|
|
40
40
|
registrations: [
|
|
41
|
-
{
|
|
42
|
-
|
|
41
|
+
{
|
|
42
|
+
tool: t('start_trace_recording'),
|
|
43
|
+
domain: DOMAIN,
|
|
44
|
+
bind: b((h, a) => h.handleStartTraceRecording(a)),
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
tool: t('stop_trace_recording'),
|
|
48
|
+
domain: DOMAIN,
|
|
49
|
+
bind: b((h) => h.handleStopTraceRecording()),
|
|
50
|
+
},
|
|
43
51
|
{ tool: t('query_trace_sql'), domain: DOMAIN, bind: b((h, a) => h.handleQueryTraceSql(a)) },
|
|
44
52
|
{ tool: t('seek_to_timestamp'), domain: DOMAIN, bind: b((h, a) => h.handleSeekToTimestamp(a)) },
|
|
45
|
-
{
|
|
53
|
+
{
|
|
54
|
+
tool: t('diff_heap_snapshots'),
|
|
55
|
+
domain: DOMAIN,
|
|
56
|
+
bind: b((h, a) => h.handleDiffHeapSnapshots(a)),
|
|
57
|
+
},
|
|
46
58
|
{ tool: t('export_trace'), domain: DOMAIN, bind: b((h, a) => h.handleExportTrace(a)) },
|
|
47
59
|
{ tool: t('summarize_trace'), domain: DOMAIN, bind: b((h, a) => h.handleSummarizeTrace(a)) },
|
|
48
60
|
],
|
|
@@ -1,212 +1,52 @@
|
|
|
1
|
+
import { tool } from '../../registry/tool-builder.js';
|
|
2
|
+
const transformsEnum = [
|
|
3
|
+
'constant_fold',
|
|
4
|
+
'string_decrypt',
|
|
5
|
+
'dead_code_remove',
|
|
6
|
+
'control_flow_flatten',
|
|
7
|
+
'rename_vars',
|
|
8
|
+
];
|
|
1
9
|
export const transformTools = [
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
},
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
inputSchema: {
|
|
45
|
-
type: 'object',
|
|
46
|
-
properties: {
|
|
47
|
-
name: {
|
|
48
|
-
type: 'string',
|
|
49
|
-
description: 'Chain name.',
|
|
50
|
-
},
|
|
51
|
-
transforms: {
|
|
52
|
-
type: 'array',
|
|
53
|
-
description: 'Ordered transform list.',
|
|
54
|
-
items: {
|
|
55
|
-
type: 'string',
|
|
56
|
-
enum: [
|
|
57
|
-
'constant_fold',
|
|
58
|
-
'string_decrypt',
|
|
59
|
-
'dead_code_remove',
|
|
60
|
-
'control_flow_flatten',
|
|
61
|
-
'rename_vars',
|
|
62
|
-
],
|
|
63
|
-
},
|
|
64
|
-
},
|
|
65
|
-
description: {
|
|
66
|
-
type: 'string',
|
|
67
|
-
description: 'Optional chain description.',
|
|
68
|
-
},
|
|
69
|
-
},
|
|
70
|
-
required: ['name', 'transforms'],
|
|
71
|
-
},
|
|
72
|
-
annotations: {
|
|
73
|
-
readOnlyHint: false,
|
|
74
|
-
destructiveHint: false,
|
|
75
|
-
idempotentHint: false,
|
|
76
|
-
openWorldHint: false,
|
|
77
|
-
},
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
name: 'ast_transform_apply',
|
|
81
|
-
description: 'Apply transforms to input code or a live page scriptId.',
|
|
82
|
-
inputSchema: {
|
|
83
|
-
type: 'object',
|
|
84
|
-
properties: {
|
|
85
|
-
scriptId: {
|
|
86
|
-
type: 'string',
|
|
87
|
-
description: 'Target script ID from page debugger context.',
|
|
88
|
-
},
|
|
89
|
-
code: {
|
|
90
|
-
type: 'string',
|
|
91
|
-
description: 'Direct source code input.',
|
|
92
|
-
},
|
|
93
|
-
chainName: {
|
|
94
|
-
type: 'string',
|
|
95
|
-
description: 'Use a saved transform chain by name.',
|
|
96
|
-
},
|
|
97
|
-
transforms: {
|
|
98
|
-
type: 'array',
|
|
99
|
-
description: 'Direct transform list (used when chainName is not provided).',
|
|
100
|
-
items: {
|
|
101
|
-
type: 'string',
|
|
102
|
-
enum: [
|
|
103
|
-
'constant_fold',
|
|
104
|
-
'string_decrypt',
|
|
105
|
-
'dead_code_remove',
|
|
106
|
-
'control_flow_flatten',
|
|
107
|
-
'rename_vars',
|
|
108
|
-
],
|
|
109
|
-
},
|
|
110
|
-
},
|
|
111
|
-
},
|
|
112
|
-
required: [],
|
|
113
|
-
},
|
|
114
|
-
annotations: {
|
|
115
|
-
readOnlyHint: false,
|
|
116
|
-
destructiveHint: false,
|
|
117
|
-
idempotentHint: false,
|
|
118
|
-
openWorldHint: false,
|
|
119
|
-
},
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
name: 'crypto_extract_standalone',
|
|
123
|
-
description: 'Extract crypto/sign/encrypt function from current page and generate standalone runnable code.',
|
|
124
|
-
inputSchema: {
|
|
125
|
-
type: 'object',
|
|
126
|
-
properties: {
|
|
127
|
-
targetFunction: {
|
|
128
|
-
type: 'string',
|
|
129
|
-
description: 'Target function name/path, e.g. "window.sign".',
|
|
130
|
-
},
|
|
131
|
-
includePolyfills: {
|
|
132
|
-
type: 'boolean',
|
|
133
|
-
description: 'Include minimal runtime polyfills.',
|
|
134
|
-
default: true,
|
|
135
|
-
},
|
|
136
|
-
},
|
|
137
|
-
required: ['targetFunction'],
|
|
138
|
-
},
|
|
139
|
-
annotations: {
|
|
140
|
-
readOnlyHint: false,
|
|
141
|
-
destructiveHint: false,
|
|
142
|
-
idempotentHint: false,
|
|
143
|
-
openWorldHint: false,
|
|
144
|
-
},
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
name: 'crypto_test_harness',
|
|
148
|
-
description: 'Run extracted crypto code in worker_threads + vm sandbox and return deterministic test results.',
|
|
149
|
-
inputSchema: {
|
|
150
|
-
type: 'object',
|
|
151
|
-
properties: {
|
|
152
|
-
code: {
|
|
153
|
-
type: 'string',
|
|
154
|
-
description: 'Standalone function code.',
|
|
155
|
-
},
|
|
156
|
-
functionName: {
|
|
157
|
-
type: 'string',
|
|
158
|
-
description: 'Exported function name to execute.',
|
|
159
|
-
},
|
|
160
|
-
testInputs: {
|
|
161
|
-
type: 'array',
|
|
162
|
-
description: 'Input list for test execution.',
|
|
163
|
-
items: {
|
|
164
|
-
type: 'string',
|
|
165
|
-
},
|
|
166
|
-
},
|
|
167
|
-
},
|
|
168
|
-
required: ['code', 'functionName', 'testInputs'],
|
|
169
|
-
},
|
|
170
|
-
annotations: {
|
|
171
|
-
readOnlyHint: false,
|
|
172
|
-
destructiveHint: false,
|
|
173
|
-
idempotentHint: false,
|
|
174
|
-
openWorldHint: false,
|
|
175
|
-
},
|
|
176
|
-
},
|
|
177
|
-
{
|
|
178
|
-
name: 'crypto_compare',
|
|
179
|
-
description: 'Compare two crypto implementations against identical test vectors.',
|
|
180
|
-
inputSchema: {
|
|
181
|
-
type: 'object',
|
|
182
|
-
properties: {
|
|
183
|
-
code1: {
|
|
184
|
-
type: 'string',
|
|
185
|
-
description: 'Implementation A code.',
|
|
186
|
-
},
|
|
187
|
-
code2: {
|
|
188
|
-
type: 'string',
|
|
189
|
-
description: 'Implementation B code.',
|
|
190
|
-
},
|
|
191
|
-
functionName: {
|
|
192
|
-
type: 'string',
|
|
193
|
-
description: 'Function name shared by both implementations.',
|
|
194
|
-
},
|
|
195
|
-
testInputs: {
|
|
196
|
-
type: 'array',
|
|
197
|
-
description: 'Input list for comparison.',
|
|
198
|
-
items: {
|
|
199
|
-
type: 'string',
|
|
200
|
-
},
|
|
201
|
-
},
|
|
202
|
-
},
|
|
203
|
-
required: ['code1', 'code2', 'functionName', 'testInputs'],
|
|
204
|
-
},
|
|
205
|
-
annotations: {
|
|
206
|
-
readOnlyHint: false,
|
|
207
|
-
destructiveHint: false,
|
|
208
|
-
idempotentHint: false,
|
|
209
|
-
openWorldHint: false,
|
|
210
|
-
},
|
|
211
|
-
},
|
|
10
|
+
tool('ast_transform_preview')
|
|
11
|
+
.desc('Preview lightweight AST-like transforms (string/regex based) and return before/after diff.')
|
|
12
|
+
.string('code', 'Source code to transform.')
|
|
13
|
+
.array('transforms', { type: 'string', enum: transformsEnum }, 'Ordered transform list.')
|
|
14
|
+
.boolean('preview', 'Whether to generate line diff output.', { default: true })
|
|
15
|
+
.required('code', 'transforms')
|
|
16
|
+
.build(),
|
|
17
|
+
tool('ast_transform_chain')
|
|
18
|
+
.desc('Create and store an in-memory transform chain.')
|
|
19
|
+
.string('name', 'Chain name.')
|
|
20
|
+
.array('transforms', { type: 'string', enum: transformsEnum }, 'Ordered transform list.')
|
|
21
|
+
.string('description', 'Optional chain description.')
|
|
22
|
+
.required('name', 'transforms')
|
|
23
|
+
.build(),
|
|
24
|
+
tool('ast_transform_apply')
|
|
25
|
+
.desc('Apply transforms to input code or a live page scriptId.')
|
|
26
|
+
.string('scriptId', 'Target script ID from page debugger context.')
|
|
27
|
+
.string('code', 'Direct source code input.')
|
|
28
|
+
.string('chainName', 'Use a saved transform chain by name.')
|
|
29
|
+
.array('transforms', { type: 'string', enum: transformsEnum }, 'Direct transform list (used when chainName is not provided).')
|
|
30
|
+
.build(),
|
|
31
|
+
tool('crypto_extract_standalone')
|
|
32
|
+
.desc('Extract crypto/sign/encrypt function from current page and generate standalone runnable code.')
|
|
33
|
+
.string('targetFunction', 'Target function name/path, e.g. "window.sign".')
|
|
34
|
+
.boolean('includePolyfills', 'Include minimal runtime polyfills.', { default: true })
|
|
35
|
+
.required('targetFunction')
|
|
36
|
+
.build(),
|
|
37
|
+
tool('crypto_test_harness')
|
|
38
|
+
.desc('Run extracted crypto code in worker_threads + vm sandbox and return deterministic test results.')
|
|
39
|
+
.string('code', 'Standalone function code.')
|
|
40
|
+
.string('functionName', 'Exported function name to execute.')
|
|
41
|
+
.array('testInputs', { type: 'string' }, 'Input list for test execution.')
|
|
42
|
+
.required('code', 'functionName', 'testInputs')
|
|
43
|
+
.build(),
|
|
44
|
+
tool('crypto_compare')
|
|
45
|
+
.desc('Compare two crypto implementations against identical test vectors.')
|
|
46
|
+
.string('code1', 'Implementation A code.')
|
|
47
|
+
.string('code2', 'Implementation B code.')
|
|
48
|
+
.string('functionName', 'Function name shared by both implementations.')
|
|
49
|
+
.array('testInputs', { type: 'string' }, 'Input list for comparison.')
|
|
50
|
+
.required('code1', 'code2', 'functionName', 'testInputs')
|
|
51
|
+
.build(),
|
|
212
52
|
];
|