@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,48 +1,9 @@
|
|
|
1
|
-
import { logger } from '../../utils/logger.js';
|
|
2
|
-
import { generateBrowserEnvAnalysisMessages, generateAntiCrawlAnalysisMessages, generateAPIImplementationMessages, generateEnvironmentSuggestionsMessages, } from '../../services/prompts/environment.js';
|
|
3
1
|
export class AIEnvironmentAnalyzer {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
this.llm = llm;
|
|
2
|
+
constructor(legacyDependency) {
|
|
3
|
+
void legacyDependency;
|
|
7
4
|
}
|
|
8
|
-
async analyze(
|
|
9
|
-
|
|
10
|
-
logger.warn('LLM service unavailable, skipping AI environment analysis');
|
|
11
|
-
return this.getEmptyResult();
|
|
12
|
-
}
|
|
13
|
-
try {
|
|
14
|
-
logger.info(' AI...');
|
|
15
|
-
const response = await this.llm.chat(generateBrowserEnvAnalysisMessages(code, detected, missing, browserType));
|
|
16
|
-
const result = this.parseAIResponse(response.content);
|
|
17
|
-
logger.info(`AI environment analysis complete, confidence: ${(result.confidence * 100).toFixed(1)}%`);
|
|
18
|
-
return result;
|
|
19
|
-
}
|
|
20
|
-
catch (error) {
|
|
21
|
-
logger.error('AI', error);
|
|
22
|
-
return this.getEmptyResult();
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
parseAIResponse(response) {
|
|
26
|
-
try {
|
|
27
|
-
const jsonMatch = response.match(/```json\s*([\s\S]*?)\s*```/) || response.match(/\{[\s\S]*\}/);
|
|
28
|
-
if (!jsonMatch) {
|
|
29
|
-
logger.warn('AIJSON');
|
|
30
|
-
return this.getEmptyResult();
|
|
31
|
-
}
|
|
32
|
-
const jsonStr = jsonMatch[1] || jsonMatch[0];
|
|
33
|
-
const parsed = JSON.parse(jsonStr);
|
|
34
|
-
return {
|
|
35
|
-
recommendedVariables: parsed.recommendedVariables || {},
|
|
36
|
-
recommendedAPIs: parsed.recommendedAPIs || [],
|
|
37
|
-
antiCrawlFeatures: parsed.antiCrawlFeatures || [],
|
|
38
|
-
suggestions: parsed.suggestions || [],
|
|
39
|
-
confidence: parsed.confidence || 0.5,
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
logger.error('AI', error);
|
|
44
|
-
return this.getEmptyResult();
|
|
45
|
-
}
|
|
5
|
+
async analyze(_code, _detected, _missing, _browserType = 'chrome') {
|
|
6
|
+
return this.getEmptyResult();
|
|
46
7
|
}
|
|
47
8
|
getEmptyResult() {
|
|
48
9
|
return {
|
|
@@ -53,67 +14,14 @@ export class AIEnvironmentAnalyzer {
|
|
|
53
14
|
confidence: 0,
|
|
54
15
|
};
|
|
55
16
|
}
|
|
56
|
-
async analyzeAntiCrawl(
|
|
57
|
-
|
|
58
|
-
return [];
|
|
59
|
-
}
|
|
60
|
-
try {
|
|
61
|
-
const response = await this.llm.chat(generateAntiCrawlAnalysisMessages(code));
|
|
62
|
-
const jsonMatch = response.content.match(/```json\s*([\s\S]*?)\s*```/) ||
|
|
63
|
-
response.content.match(/\[[\s\S]*\]/);
|
|
64
|
-
if (jsonMatch) {
|
|
65
|
-
const jsonStr = jsonMatch[1] || jsonMatch[0];
|
|
66
|
-
return JSON.parse(jsonStr);
|
|
67
|
-
}
|
|
68
|
-
return [];
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
logger.error('', error);
|
|
72
|
-
return [];
|
|
73
|
-
}
|
|
17
|
+
async analyzeAntiCrawl(_code) {
|
|
18
|
+
return [];
|
|
74
19
|
}
|
|
75
|
-
async inferAPIImplementation(
|
|
76
|
-
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
try {
|
|
80
|
-
const response = await this.llm.chat(generateAPIImplementationMessages(apiPath, context));
|
|
81
|
-
const codeMatch = response.content.match(/```(?:javascript|js)?\s*([\s\S]*?)\s*```/);
|
|
82
|
-
if (codeMatch?.[1]) {
|
|
83
|
-
return codeMatch[1].trim();
|
|
84
|
-
}
|
|
85
|
-
const trimmed = response.content.trim();
|
|
86
|
-
if (trimmed.includes('function') || trimmed.includes('const') || trimmed.includes('var')) {
|
|
87
|
-
return trimmed;
|
|
88
|
-
}
|
|
89
|
-
return null;
|
|
90
|
-
}
|
|
91
|
-
catch (error) {
|
|
92
|
-
logger.error('API', error);
|
|
93
|
-
return null;
|
|
94
|
-
}
|
|
20
|
+
async inferAPIImplementation(_apiPath, _context) {
|
|
21
|
+
return null;
|
|
95
22
|
}
|
|
96
|
-
async generateSuggestions(detected, missing,
|
|
97
|
-
|
|
98
|
-
return this.getDefaultSuggestions(detected, missing);
|
|
99
|
-
}
|
|
100
|
-
try {
|
|
101
|
-
const response = await this.llm.chat(generateEnvironmentSuggestionsMessages(detected, missing, browserType));
|
|
102
|
-
const jsonMatch = response.content.match(/```json\s*([\s\S]*?)\s*```/) ||
|
|
103
|
-
response.content.match(/\[[\s\S]*\]/);
|
|
104
|
-
if (jsonMatch) {
|
|
105
|
-
const jsonStr = jsonMatch[1] || jsonMatch[0];
|
|
106
|
-
const suggestions = JSON.parse(jsonStr);
|
|
107
|
-
if (Array.isArray(suggestions) && suggestions.every((s) => typeof s === 'string')) {
|
|
108
|
-
return suggestions;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
return this.getDefaultSuggestions(detected, missing);
|
|
112
|
-
}
|
|
113
|
-
catch (error) {
|
|
114
|
-
logger.error('', error);
|
|
115
|
-
return this.getDefaultSuggestions(detected, missing);
|
|
116
|
-
}
|
|
23
|
+
async generateSuggestions(detected, missing, _browserType) {
|
|
24
|
+
return this.getDefaultSuggestions(detected, missing);
|
|
117
25
|
}
|
|
118
26
|
getDefaultSuggestions(detected, missing) {
|
|
119
27
|
const suggestions = [];
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import type { EnvironmentEmulatorOptions, EnvironmentEmulatorResult } from '../../types/index.js';
|
|
2
|
-
import type { LLMService } from '../../services/LLMService.js';
|
|
3
2
|
export declare class EnvironmentEmulator {
|
|
4
3
|
private browser?;
|
|
5
|
-
|
|
6
|
-
constructor(llm?: LLMService);
|
|
4
|
+
constructor(legacyDependency?: unknown);
|
|
7
5
|
analyze(options: EnvironmentEmulatorOptions): Promise<EnvironmentEmulatorResult>;
|
|
8
6
|
private detectEnvironmentVariables;
|
|
9
7
|
private getMemberExpressionPath;
|
|
@@ -14,8 +12,6 @@ export declare class EnvironmentEmulator {
|
|
|
14
12
|
private resolveExecutablePath;
|
|
15
13
|
private identifyMissingAPIs;
|
|
16
14
|
private getSuggestionForMissingAPI;
|
|
17
|
-
private generateMissingAPIImplementationsWithAI;
|
|
18
|
-
private inferMissingVariablesWithAI;
|
|
19
15
|
cleanup(): Promise<void>;
|
|
20
16
|
private isRecord;
|
|
21
17
|
private isIdentifierNode;
|
|
@@ -3,18 +3,13 @@ import traverse from '@babel/traverse';
|
|
|
3
3
|
import { existsSync } from 'fs';
|
|
4
4
|
import { logger } from '../../utils/logger.js';
|
|
5
5
|
import { chromeEnvironmentTemplate } from '../emulator/templates/chrome-env.js';
|
|
6
|
-
import { generateMissingAPIImplementationsMessages, generateMissingVariablesMessages, } from '../../services/prompts/environment.js';
|
|
7
6
|
import { generateEmulationCode, generateRecommendations } from '../emulator/EmulatorCodeGen.js';
|
|
8
7
|
import { findBrowserExecutable } from '../../utils/browserExecutable.js';
|
|
9
8
|
import { fetchRealEnvironmentData } from '../emulator/EnvironmentEmulatorFetch.js';
|
|
10
9
|
export class EnvironmentEmulator {
|
|
11
10
|
browser;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
this.llm = llm;
|
|
15
|
-
if (!llm) {
|
|
16
|
-
logger.debug('LLM service unavailable, skipping AI environment analysis');
|
|
17
|
-
}
|
|
11
|
+
constructor(legacyDependency) {
|
|
12
|
+
void legacyDependency;
|
|
18
13
|
}
|
|
19
14
|
async analyze(options) {
|
|
20
15
|
const startTime = Date.now();
|
|
@@ -31,16 +26,7 @@ export class EnvironmentEmulator {
|
|
|
31
26
|
else {
|
|
32
27
|
variableManifest = this.buildManifestFromTemplate(detectedVariables, browserType);
|
|
33
28
|
}
|
|
34
|
-
if (this.llm) {
|
|
35
|
-
logger.info(' AI...');
|
|
36
|
-
const aiInferredVars = await this.inferMissingVariablesWithAI(code, detectedVariables, variableManifest, browserType);
|
|
37
|
-
Object.assign(variableManifest, { ...aiInferredVars, ...variableManifest });
|
|
38
|
-
}
|
|
39
29
|
const missingAPIs = this.identifyMissingAPIs(detectedVariables, variableManifest);
|
|
40
|
-
if (this.llm && missingAPIs.length > 0) {
|
|
41
|
-
logger.info(` AI ${missingAPIs.length} API...`);
|
|
42
|
-
await this.generateMissingAPIImplementationsWithAI(missingAPIs, code, variableManifest);
|
|
43
|
-
}
|
|
44
30
|
logger.info(' ...');
|
|
45
31
|
const emulationCode = generateEmulationCode(variableManifest, targetRuntime, includeComments);
|
|
46
32
|
const recommendations = generateRecommendations(detectedVariables, missingAPIs);
|
|
@@ -84,15 +70,14 @@ export class EnvironmentEmulator {
|
|
|
84
70
|
sourceType: 'unambiguous',
|
|
85
71
|
plugins: ['jsx', 'typescript'],
|
|
86
72
|
});
|
|
87
|
-
const self = this;
|
|
88
73
|
traverse(ast, {
|
|
89
|
-
MemberExpression(path) {
|
|
90
|
-
const fullPath =
|
|
74
|
+
MemberExpression: (path) => {
|
|
75
|
+
const fullPath = this.getMemberExpressionPath(path.node);
|
|
91
76
|
if (fullPath) {
|
|
92
77
|
accessedPaths.add(fullPath);
|
|
93
78
|
}
|
|
94
79
|
},
|
|
95
|
-
Identifier(path) {
|
|
80
|
+
Identifier: (path) => {
|
|
96
81
|
const name = path.node.name;
|
|
97
82
|
if ([
|
|
98
83
|
'window',
|
|
@@ -132,7 +117,7 @@ export class EnvironmentEmulator {
|
|
|
132
117
|
}
|
|
133
118
|
}
|
|
134
119
|
for (const key of Object.keys(detected)) {
|
|
135
|
-
detected[key] = Array.from(new Set(detected[key])).
|
|
120
|
+
detected[key] = Array.from(new Set(detected[key])).toSorted();
|
|
136
121
|
}
|
|
137
122
|
}
|
|
138
123
|
catch (error) {
|
|
@@ -182,7 +167,7 @@ export class EnvironmentEmulator {
|
|
|
182
167
|
detected[category].push(...matches);
|
|
183
168
|
}
|
|
184
169
|
for (const key of Object.keys(detected)) {
|
|
185
|
-
detected[key] = Array.from(new Set(detected[key])).
|
|
170
|
+
detected[key] = Array.from(new Set(detected[key])).toSorted();
|
|
186
171
|
}
|
|
187
172
|
}
|
|
188
173
|
buildManifestFromTemplate(detected, _browserType) {
|
|
@@ -307,75 +292,6 @@ export class EnvironmentEmulator {
|
|
|
307
292
|
return `null: ${path} = null`;
|
|
308
293
|
}
|
|
309
294
|
}
|
|
310
|
-
async generateMissingAPIImplementationsWithAI(missingAPIs, code, manifest) {
|
|
311
|
-
if (!this.llm || missingAPIs.length === 0) {
|
|
312
|
-
return;
|
|
313
|
-
}
|
|
314
|
-
try {
|
|
315
|
-
const apisToGenerate = missingAPIs.slice(0, 10);
|
|
316
|
-
const response = await this.llm.chat(generateMissingAPIImplementationsMessages(apisToGenerate, code));
|
|
317
|
-
const jsonMatch = response.content.match(/```json\s*([\s\S]*?)\s*```/) ||
|
|
318
|
-
response.content.match(/\{[\s\S]*\}/);
|
|
319
|
-
if (jsonMatch) {
|
|
320
|
-
const jsonStr = jsonMatch[1] || jsonMatch[0];
|
|
321
|
-
const implementations = JSON.parse(jsonStr);
|
|
322
|
-
if (!this.isRecord(implementations)) {
|
|
323
|
-
return;
|
|
324
|
-
}
|
|
325
|
-
let addedCount = 0;
|
|
326
|
-
for (const [path, impl] of Object.entries(implementations)) {
|
|
327
|
-
if (typeof impl === 'string' && impl.trim()) {
|
|
328
|
-
manifest[path] = impl;
|
|
329
|
-
addedCount++;
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
logger.info(` AI ${addedCount} API`);
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
catch (error) {
|
|
336
|
-
logger.error('AIAPI', error);
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
async inferMissingVariablesWithAI(code, detected, existingManifest, browserType) {
|
|
340
|
-
if (!this.llm) {
|
|
341
|
-
return {};
|
|
342
|
-
}
|
|
343
|
-
try {
|
|
344
|
-
const allDetectedPaths = [
|
|
345
|
-
...detected.window,
|
|
346
|
-
...detected.document,
|
|
347
|
-
...detected.navigator,
|
|
348
|
-
...detected.location,
|
|
349
|
-
...detected.screen,
|
|
350
|
-
...detected.other,
|
|
351
|
-
];
|
|
352
|
-
const missingPaths = allDetectedPaths.filter((path) => !(path in existingManifest));
|
|
353
|
-
if (missingPaths.length === 0) {
|
|
354
|
-
logger.info('Environment analysis complete, AI suggestions applied');
|
|
355
|
-
return {};
|
|
356
|
-
}
|
|
357
|
-
logger.info(` AI ${missingPaths.length} ...`);
|
|
358
|
-
const response = await this.llm.chat(generateMissingVariablesMessages(browserType, missingPaths, code, existingManifest));
|
|
359
|
-
const jsonMatch = response.content.match(/```json\s*([\s\S]*?)\s*```/) ||
|
|
360
|
-
response.content.match(/\{[\s\S]*\}/);
|
|
361
|
-
if (jsonMatch) {
|
|
362
|
-
const jsonStr = jsonMatch[1] || jsonMatch[0];
|
|
363
|
-
const inferredVars = JSON.parse(jsonStr);
|
|
364
|
-
if (!this.isRecord(inferredVars)) {
|
|
365
|
-
logger.warn('AIJSON');
|
|
366
|
-
return {};
|
|
367
|
-
}
|
|
368
|
-
logger.info(` AI ${Object.keys(inferredVars).length} `);
|
|
369
|
-
return inferredVars;
|
|
370
|
-
}
|
|
371
|
-
logger.warn('AIJSON');
|
|
372
|
-
return {};
|
|
373
|
-
}
|
|
374
|
-
catch (error) {
|
|
375
|
-
logger.error('AI', error);
|
|
376
|
-
return {};
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
295
|
async cleanup() {
|
|
380
296
|
if (this.browser) {
|
|
381
297
|
await this.browser.close();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import puppeteer from 'rebrowser-puppeteer-core';
|
|
2
2
|
import { logger } from '../../utils/logger.js';
|
|
3
|
+
const launchBrowser = Reflect.get(puppeteer, 'launch');
|
|
3
4
|
export async function fetchRealEnvironmentData(params) {
|
|
4
5
|
const { url, detected, depth, resolveExecutablePath, buildManifestFromTemplate } = params;
|
|
5
6
|
const manifest = {};
|
|
@@ -26,67 +27,64 @@ export async function fetchRealEnvironmentData(params) {
|
|
|
26
27
|
if (executablePath) {
|
|
27
28
|
launchOptions.executablePath = executablePath;
|
|
28
29
|
}
|
|
29
|
-
browser = await
|
|
30
|
+
browser = await launchBrowser(launchOptions);
|
|
30
31
|
}
|
|
31
32
|
page = await browser.newPage();
|
|
32
33
|
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36');
|
|
33
34
|
await page.evaluateOnNewDocument(() => {
|
|
34
35
|
const typedWindow = window;
|
|
35
|
-
const setChromeObject = (target) => {
|
|
36
|
-
target.chrome = {
|
|
37
|
-
runtime: {
|
|
38
|
-
connect: () => { },
|
|
39
|
-
sendMessage: () => { },
|
|
40
|
-
onMessage: {
|
|
41
|
-
addListener: () => { },
|
|
42
|
-
removeListener: () => { },
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
loadTimes: function () {
|
|
46
|
-
return {
|
|
47
|
-
commitLoadTime: Date.now() / 1000 - Math.random() * 10,
|
|
48
|
-
connectionInfo: 'http/1.1',
|
|
49
|
-
finishDocumentLoadTime: Date.now() / 1000 - Math.random() * 5,
|
|
50
|
-
finishLoadTime: Date.now() / 1000 - Math.random() * 3,
|
|
51
|
-
firstPaintAfterLoadTime: 0,
|
|
52
|
-
firstPaintTime: Date.now() / 1000 - Math.random() * 8,
|
|
53
|
-
navigationType: 'Other',
|
|
54
|
-
npnNegotiatedProtocol: 'http/1.1',
|
|
55
|
-
requestTime: Date.now() / 1000 - Math.random() * 15,
|
|
56
|
-
startLoadTime: Date.now() / 1000 - Math.random() * 12,
|
|
57
|
-
wasAlternateProtocolAvailable: false,
|
|
58
|
-
wasFetchedViaSpdy: false,
|
|
59
|
-
wasNpnNegotiated: true,
|
|
60
|
-
};
|
|
61
|
-
},
|
|
62
|
-
csi: function () {
|
|
63
|
-
return {
|
|
64
|
-
onloadT: Date.now(),
|
|
65
|
-
pageT: Math.random() * 1000,
|
|
66
|
-
startE: Date.now() - Math.random() * 5000,
|
|
67
|
-
tran: 15,
|
|
68
|
-
};
|
|
69
|
-
},
|
|
70
|
-
app: {
|
|
71
|
-
isInstalled: false,
|
|
72
|
-
InstallState: {
|
|
73
|
-
DISABLED: 'disabled',
|
|
74
|
-
INSTALLED: 'installed',
|
|
75
|
-
NOT_INSTALLED: 'not_installed',
|
|
76
|
-
},
|
|
77
|
-
RunningState: {
|
|
78
|
-
CANNOT_RUN: 'cannot_run',
|
|
79
|
-
READY_TO_RUN: 'ready_to_run',
|
|
80
|
-
RUNNING: 'running',
|
|
81
|
-
},
|
|
82
|
-
},
|
|
83
|
-
};
|
|
84
|
-
};
|
|
85
36
|
Object.defineProperty(navigator, 'webdriver', {
|
|
86
37
|
get: () => undefined,
|
|
87
38
|
configurable: true,
|
|
88
39
|
});
|
|
89
|
-
|
|
40
|
+
typedWindow.chrome = {
|
|
41
|
+
runtime: {
|
|
42
|
+
connect: () => { },
|
|
43
|
+
sendMessage: () => { },
|
|
44
|
+
onMessage: {
|
|
45
|
+
addListener: () => { },
|
|
46
|
+
removeListener: () => { },
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
loadTimes: function () {
|
|
50
|
+
return {
|
|
51
|
+
commitLoadTime: Date.now() / 1000 - Math.random() * 10,
|
|
52
|
+
connectionInfo: 'http/1.1',
|
|
53
|
+
finishDocumentLoadTime: Date.now() / 1000 - Math.random() * 5,
|
|
54
|
+
finishLoadTime: Date.now() / 1000 - Math.random() * 3,
|
|
55
|
+
firstPaintAfterLoadTime: 0,
|
|
56
|
+
firstPaintTime: Date.now() / 1000 - Math.random() * 8,
|
|
57
|
+
navigationType: 'Other',
|
|
58
|
+
npnNegotiatedProtocol: 'http/1.1',
|
|
59
|
+
requestTime: Date.now() / 1000 - Math.random() * 15,
|
|
60
|
+
startLoadTime: Date.now() / 1000 - Math.random() * 12,
|
|
61
|
+
wasAlternateProtocolAvailable: false,
|
|
62
|
+
wasFetchedViaSpdy: false,
|
|
63
|
+
wasNpnNegotiated: true,
|
|
64
|
+
};
|
|
65
|
+
},
|
|
66
|
+
csi: function () {
|
|
67
|
+
return {
|
|
68
|
+
onloadT: Date.now(),
|
|
69
|
+
pageT: Math.random() * 1000,
|
|
70
|
+
startE: Date.now() - Math.random() * 5000,
|
|
71
|
+
tran: 15,
|
|
72
|
+
};
|
|
73
|
+
},
|
|
74
|
+
app: {
|
|
75
|
+
isInstalled: false,
|
|
76
|
+
InstallState: {
|
|
77
|
+
DISABLED: 'disabled',
|
|
78
|
+
INSTALLED: 'installed',
|
|
79
|
+
NOT_INSTALLED: 'not_installed',
|
|
80
|
+
},
|
|
81
|
+
RunningState: {
|
|
82
|
+
CANNOT_RUN: 'cannot_run',
|
|
83
|
+
READY_TO_RUN: 'ready_to_run',
|
|
84
|
+
RUNNING: 'running',
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
};
|
|
90
88
|
Object.defineProperty(navigator, 'plugins', {
|
|
91
89
|
get: () => {
|
|
92
90
|
const pluginArray = [
|
|
@@ -170,13 +168,12 @@ export async function fetchRealEnvironmentData(params) {
|
|
|
170
168
|
const extractedValues = await page.evaluate((paths, maxDepth) => {
|
|
171
169
|
const result = {};
|
|
172
170
|
const seen = new WeakSet();
|
|
173
|
-
const isObjectLike = (value) => typeof value === 'object' && value !== null;
|
|
174
171
|
function extractValue(path) {
|
|
175
172
|
try {
|
|
176
173
|
const parts = path.split('.');
|
|
177
174
|
let current = window;
|
|
178
175
|
for (const part of parts) {
|
|
179
|
-
if (
|
|
176
|
+
if (typeof current === 'object' && current !== null && part in current) {
|
|
180
177
|
current = current[part];
|
|
181
178
|
}
|
|
182
179
|
else {
|
|
@@ -189,8 +186,8 @@ export async function fetchRealEnvironmentData(params) {
|
|
|
189
186
|
return `[Error: ${error.message}]`;
|
|
190
187
|
}
|
|
191
188
|
}
|
|
192
|
-
function serializeValue(value,
|
|
193
|
-
if (
|
|
189
|
+
function serializeValue(value, recurseDepth, seenObjects) {
|
|
190
|
+
if (recurseDepth <= 0)
|
|
194
191
|
return '[Max Depth]';
|
|
195
192
|
if (value === null)
|
|
196
193
|
return null;
|
|
@@ -213,20 +210,20 @@ export async function fetchRealEnvironmentData(params) {
|
|
|
213
210
|
return '[Function]';
|
|
214
211
|
}
|
|
215
212
|
}
|
|
216
|
-
if (
|
|
213
|
+
if (typeof value === 'object' && value !== null && seenObjects.has(value)) {
|
|
217
214
|
return '[Circular Reference]';
|
|
218
215
|
}
|
|
219
216
|
if (Array.isArray(value)) {
|
|
220
217
|
seenObjects.add(value);
|
|
221
218
|
const arr = value
|
|
222
219
|
.slice(0, 20)
|
|
223
|
-
.map((item) => serializeValue(item,
|
|
220
|
+
.map((item) => serializeValue(item, recurseDepth - 1, seenObjects));
|
|
224
221
|
if (value.length > 20) {
|
|
225
222
|
arr.push(`[... ${value.length - 20} more items]`);
|
|
226
223
|
}
|
|
227
224
|
return arr;
|
|
228
225
|
}
|
|
229
|
-
if (
|
|
226
|
+
if (typeof value === 'object' && value !== null) {
|
|
230
227
|
seenObjects.add(value);
|
|
231
228
|
const serialized = {};
|
|
232
229
|
const allKeys = Object.getOwnPropertyNames(value);
|
|
@@ -237,14 +234,14 @@ export async function fetchRealEnvironmentData(params) {
|
|
|
237
234
|
if (descriptor) {
|
|
238
235
|
if (descriptor.get) {
|
|
239
236
|
try {
|
|
240
|
-
serialized[key] = serializeValue(value[key],
|
|
237
|
+
serialized[key] = serializeValue(value[key], recurseDepth - 1, seenObjects);
|
|
241
238
|
}
|
|
242
239
|
catch {
|
|
243
240
|
serialized[key] = '[Getter Error]';
|
|
244
241
|
}
|
|
245
242
|
}
|
|
246
243
|
else if (descriptor.value !== undefined) {
|
|
247
|
-
serialized[key] = serializeValue(descriptor.value,
|
|
244
|
+
serialized[key] = serializeValue(descriptor.value, recurseDepth - 1, seenObjects);
|
|
248
245
|
}
|
|
249
246
|
}
|
|
250
247
|
}
|
|
@@ -162,17 +162,21 @@ export declare const chromeEnvironmentTemplate: {
|
|
|
162
162
|
};
|
|
163
163
|
};
|
|
164
164
|
WebSocket: {
|
|
165
|
-
new (
|
|
165
|
+
new (): {
|
|
166
166
|
send(): void;
|
|
167
167
|
close(): void;
|
|
168
168
|
addEventListener(): void;
|
|
169
169
|
};
|
|
170
170
|
};
|
|
171
171
|
Blob: {
|
|
172
|
-
new (
|
|
172
|
+
new (): {
|
|
173
|
+
size: number;
|
|
174
|
+
type: string;
|
|
175
|
+
};
|
|
173
176
|
};
|
|
174
177
|
File: {
|
|
175
|
-
new (parts: BlobPart[],
|
|
178
|
+
new (parts: BlobPart[], name: string, options?: BlobPropertyBag): {
|
|
179
|
+
name: string;
|
|
176
180
|
readonly size: number;
|
|
177
181
|
readonly type: string;
|
|
178
182
|
arrayBuffer(): Promise<ArrayBuffer>;
|
|
@@ -202,16 +206,22 @@ export declare const chromeEnvironmentTemplate: {
|
|
|
202
206
|
};
|
|
203
207
|
};
|
|
204
208
|
Request: {
|
|
205
|
-
new (
|
|
209
|
+
new (): {
|
|
210
|
+
clone(): any;
|
|
211
|
+
};
|
|
206
212
|
};
|
|
207
213
|
Response: {
|
|
208
|
-
new (
|
|
214
|
+
new (): {
|
|
215
|
+
clone(): any;
|
|
216
|
+
};
|
|
209
217
|
};
|
|
210
218
|
URL: {
|
|
211
|
-
new (
|
|
219
|
+
new (): {
|
|
220
|
+
toString(): string;
|
|
221
|
+
};
|
|
212
222
|
};
|
|
213
223
|
URLSearchParams: {
|
|
214
|
-
new (
|
|
224
|
+
new (): {
|
|
215
225
|
append(): void;
|
|
216
226
|
delete(): void;
|
|
217
227
|
get(): void;
|
|
@@ -161,17 +161,19 @@ export const chromeEnvironmentTemplate = {
|
|
|
161
161
|
addEventListener() { }
|
|
162
162
|
},
|
|
163
163
|
WebSocket: class WebSocket {
|
|
164
|
-
constructor(_url) { }
|
|
165
164
|
send() { }
|
|
166
165
|
close() { }
|
|
167
166
|
addEventListener() { }
|
|
168
167
|
},
|
|
169
168
|
Blob: class Blob {
|
|
170
|
-
|
|
169
|
+
size = 0;
|
|
170
|
+
type = '';
|
|
171
171
|
},
|
|
172
172
|
File: class File extends Blob {
|
|
173
|
-
|
|
173
|
+
name = '';
|
|
174
|
+
constructor(parts, name, options) {
|
|
174
175
|
super(parts, options);
|
|
176
|
+
this.name = name;
|
|
175
177
|
}
|
|
176
178
|
},
|
|
177
179
|
FormData: class FormData {
|
|
@@ -190,16 +192,21 @@ export const chromeEnvironmentTemplate = {
|
|
|
190
192
|
set() { }
|
|
191
193
|
},
|
|
192
194
|
Request: class Request {
|
|
193
|
-
|
|
195
|
+
clone() {
|
|
196
|
+
return this;
|
|
197
|
+
}
|
|
194
198
|
},
|
|
195
199
|
Response: class Response {
|
|
196
|
-
|
|
200
|
+
clone() {
|
|
201
|
+
return this;
|
|
202
|
+
}
|
|
197
203
|
},
|
|
198
204
|
URL: class URL {
|
|
199
|
-
|
|
205
|
+
toString() {
|
|
206
|
+
return '';
|
|
207
|
+
}
|
|
200
208
|
},
|
|
201
209
|
URLSearchParams: class URLSearchParams {
|
|
202
|
-
constructor(_init) { }
|
|
203
210
|
append() { }
|
|
204
211
|
delete() { }
|
|
205
212
|
get() { }
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
|
-
import { resolve, relative, sep } from 'node:path';
|
|
2
|
+
import { resolve, relative, sep, isAbsolute } from 'node:path';
|
|
3
3
|
import { getProjectRoot } from '../../utils/outputPaths.js';
|
|
4
4
|
import { logger } from '../../utils/logger.js';
|
|
5
5
|
import { ioLimit } from '../../utils/concurrency.js';
|
|
@@ -37,9 +37,16 @@ export class ExternalToolRunner {
|
|
|
37
37
|
const args = [...(spec.defaultArgs || []), ...request.args];
|
|
38
38
|
const env = { PATH: process.env.PATH || '' };
|
|
39
39
|
if (process.platform === 'win32') {
|
|
40
|
-
env.SYSTEMROOT
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
const systemRoot = process.env.SYSTEMROOT || process.env.SystemRoot || process.env.WINDIR;
|
|
41
|
+
if (systemRoot) {
|
|
42
|
+
env.SYSTEMROOT = systemRoot;
|
|
43
|
+
}
|
|
44
|
+
if (process.env.TEMP) {
|
|
45
|
+
env.TEMP = process.env.TEMP;
|
|
46
|
+
}
|
|
47
|
+
if (process.env.TMP) {
|
|
48
|
+
env.TMP = process.env.TMP;
|
|
49
|
+
}
|
|
43
50
|
}
|
|
44
51
|
if (spec.envAllowlist) {
|
|
45
52
|
for (const key of spec.envAllowlist) {
|
|
@@ -66,13 +73,23 @@ export class ExternalToolRunner {
|
|
|
66
73
|
let stdoutTruncated = false;
|
|
67
74
|
let stderrTruncated = false;
|
|
68
75
|
let settled = false;
|
|
69
|
-
|
|
76
|
+
const timeoutHandle = setTimeout(() => {
|
|
77
|
+
if (!settled) {
|
|
78
|
+
child.kill('SIGTERM');
|
|
79
|
+
setTimeout(() => {
|
|
80
|
+
if (!settled) {
|
|
81
|
+
child.kill('SIGKILL');
|
|
82
|
+
finish(null, 'SIGKILL');
|
|
83
|
+
}
|
|
84
|
+
}, EXTERNAL_TOOL_FORCE_KILL_GRACE_MS);
|
|
85
|
+
request.onProgress?.({ phase: 'timeout', ts: Date.now() });
|
|
86
|
+
}
|
|
87
|
+
}, timeoutMs);
|
|
70
88
|
const finish = (exitCode, signal) => {
|
|
71
89
|
if (settled)
|
|
72
90
|
return;
|
|
73
91
|
settled = true;
|
|
74
|
-
|
|
75
|
-
clearTimeout(timeoutHandle);
|
|
92
|
+
clearTimeout(timeoutHandle);
|
|
76
93
|
const durationMs = Date.now() - startTime;
|
|
77
94
|
const result = {
|
|
78
95
|
ok: exitCode === 0,
|
|
@@ -91,18 +108,6 @@ export class ExternalToolRunner {
|
|
|
91
108
|
}
|
|
92
109
|
resolvePromise(result);
|
|
93
110
|
};
|
|
94
|
-
timeoutHandle = setTimeout(() => {
|
|
95
|
-
if (!settled) {
|
|
96
|
-
child.kill('SIGTERM');
|
|
97
|
-
setTimeout(() => {
|
|
98
|
-
if (!settled) {
|
|
99
|
-
child.kill('SIGKILL');
|
|
100
|
-
finish(null, 'SIGKILL');
|
|
101
|
-
}
|
|
102
|
-
}, EXTERNAL_TOOL_FORCE_KILL_GRACE_MS);
|
|
103
|
-
request.onProgress?.({ phase: 'timeout', ts: Date.now() });
|
|
104
|
-
}
|
|
105
|
-
}, timeoutMs);
|
|
106
111
|
if (request.stdin) {
|
|
107
112
|
child.stdin.write(request.stdin);
|
|
108
113
|
child.stdin.end();
|
|
@@ -153,13 +158,11 @@ export class ExternalToolRunner {
|
|
|
153
158
|
const resolved = resolve(requestedCwd);
|
|
154
159
|
const projectRoot = getProjectRoot();
|
|
155
160
|
const rel = relative(projectRoot, resolved);
|
|
156
|
-
if (rel && !rel.startsWith('..') && !resolve(rel).startsWith(sep)) {
|
|
161
|
+
if (rel && !rel.startsWith('..') && !isAbsolute(rel) && !resolve(rel).startsWith(sep)) {
|
|
157
162
|
return resolved;
|
|
158
163
|
}
|
|
159
164
|
const tmpDirs = [process.env.TEMP, process.env.TMP, '/tmp', '/var/tmp'].filter(Boolean);
|
|
160
165
|
for (const tmp of tmpDirs) {
|
|
161
|
-
if (!tmp)
|
|
162
|
-
continue;
|
|
163
166
|
const resolvedTmp = resolve(tmp);
|
|
164
167
|
if (resolved === resolvedTmp || resolved.startsWith(resolvedTmp + sep)) {
|
|
165
168
|
return resolved;
|