@jshookmcp/jshook 0.3.3 → 0.3.4
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 +19 -4
- package/README.zh.md +19 -4
- package/dist/AntiCheatDetector-B-mz4DK_.mjs +1 -0
- package/dist/{BrowserSessionCoordinator-QIt3tetp.mjs → BrowserSessionCoordinator-Cdic8FsH.mjs} +1 -1
- package/dist/CodeAnalyzerDataFlow-a-NkwcaG.mjs +2 -0
- package/dist/CodeInjector-B099WO6x.mjs +1 -0
- package/dist/ConsoleMonitor-BZRqrBH-.mjs +306 -0
- package/dist/CpuEngine-BC8jayy9.mjs +1 -0
- package/dist/DartAotExecutor-B7WVTKsd.mjs +1 -0
- package/dist/DartAotLoader-BxdhW-K2.mjs +2 -0
- package/dist/DarwinAPI-DzojdfjF.mjs +1 -0
- package/dist/{DetailedDataManager-Z77fDl9Z.mjs → DetailedDataManager-Dgh402Gp.mjs} +2 -2
- package/dist/ExecutionSandbox-QbWQmzuC.mjs +45 -0
- package/dist/ExtensionManager.tools-D3h818Xs.mjs +1 -0
- package/dist/FingerprintManager-D9Zlr6be.mjs +1 -0
- package/dist/HardwareBreakpoint-C_lJ22bj.mjs +1 -0
- package/dist/HeapAnalyzer-bJbLvzp6.mjs +1 -0
- package/dist/HookPatternScanner-yx4vJ9sd.mjs +1 -0
- package/dist/InstrumentationSession-Cv1wikLA.mjs +1 -0
- package/dist/IntegrityScanner-BB7sw-SA.mjs +1 -0
- package/dist/JScramblerDeobfuscator-NVR5VatT.mjs +1 -0
- package/dist/MCPServer.activation.ttl-C2wOCMLV.mjs +1 -0
- package/dist/MCPServer.search.helpers-DlassAew.mjs +2 -0
- package/dist/MemoryController-CCsGuGJS.mjs +2 -0
- package/dist/{MemoryScanSession-zfoVZJB0.mjs → MemoryScanSession-BZ2A9Ph1.mjs} +1 -1
- package/dist/MemoryScanner-DAxsq7Sx.mjs +1 -0
- package/dist/NativeMemoryManager.impl-BIJzXMqH.mjs +1 -0
- package/dist/{NativeMemoryManager.utils-Bu8srMEF.mjs → NativeMemoryManager.utils-CMoul2an.mjs} +1 -1
- package/dist/PEAnalyzer-CB_kaTis.mjs +1 -0
- package/dist/PackerDeobfuscator-BpwGjxDL.mjs +7 -0
- package/dist/PointerChainEngine-B6SYv6ZM.mjs +1 -0
- package/dist/ProcessRegistry-C5W1Tkn9.mjs +1 -0
- package/dist/QuickJSSandbox-CIde-jzG.mjs +299 -0
- package/dist/{ResponseBuilder-nPXl_khE.mjs → ResponseBuilder-BLicSCjn.mjs} +1 -1
- package/dist/ReverseEvidenceGraph-DJzk0GQz.mjs +2 -0
- package/dist/ServerRuntimeState-DGXNv8Ji.mjs +1 -0
- package/dist/Speedhack-MGoeq1ZS.mjs +1 -0
- package/dist/StructureAnalyzer-CCTWAXR3.mjs +2 -0
- package/dist/ToolHandlerMap-C40EmuLT.mjs +1 -0
- package/dist/{ToolProbe-DQiREmNp.mjs → ToolProbe-B02GC3ZY.mjs} +1 -1
- package/dist/ToolRegistry-CzqQxFqf.mjs +1 -0
- package/dist/{ToolRouter.policy-UKBlFlbh.mjs → ToolRouter.policy-Bgb3S8jc.mjs} +2 -2
- package/dist/TraceRecorder-BfeCTQUj.mjs +407 -0
- package/dist/VMDeobfuscator-BHtkV850.mjs +1 -0
- package/dist/Win32API-G7QPyckq.mjs +1 -0
- package/dist/{Win32Debug-DwF8mQGm.mjs → Win32Debug-6yzmtv5b.mjs} +1 -1
- package/dist/allocation-track-CiI-CnaI.mjs +1 -0
- package/dist/analysis-CojUzwX-.mjs +27 -0
- package/dist/{antidebug-CsnpOR9z.mjs → antidebug-CgU84TE1.mjs} +1 -1
- package/dist/apk-DrPBsOq8.mjs +1 -0
- package/dist/artifactRetention-Bk6fW2uF.mjs +1 -0
- package/dist/artifacts-Bx9GLx4J.mjs +1 -0
- package/dist/ast-bridge-BlOrmVAv.mjs +1 -0
- package/dist/ast-utils-B9E5k_v1.mjs +1 -0
- package/dist/binary-instrument-DiE1BP0x.mjs +12 -0
- package/dist/boringssl-inspector-C6M3sOga.mjs +2 -0
- package/dist/browser-QDUu5ML9.mjs +29 -0
- package/dist/{canvas-396ieNv5.mjs → canvas-g5kmLdY-.mjs} +1098 -24
- package/dist/{capabilities-L1ax5EHS.mjs → capabilities-DwzyxL2w.mjs} +1 -1
- package/dist/cdp-session-Dy4OwMOP.mjs +1 -0
- package/dist/collector-Cld4i-E4.mjs +1 -0
- package/dist/config-5ODJ3Aj0.mjs +3 -0
- package/dist/constants-nvsLpSri.mjs +1 -0
- package/dist/coordination-C6y2gM9O.mjs +98 -0
- package/dist/coverage-and-block--cWjjEe5.mjs +1 -0
- package/dist/dart-inspector-D4IKxZ6u.mjs +0 -0
- package/dist/debugger-C2SpiXoO.mjs +1 -0
- package/dist/definitions-0mtilYzG.mjs +1 -0
- package/dist/definitions-9csunmeX.mjs +1 -0
- package/dist/definitions-B11MudW_.mjs +1 -0
- package/dist/definitions-BKpRDjcI.mjs +1 -0
- package/dist/definitions-BXE3H4re.mjs +1 -0
- package/dist/definitions-BlPHe5DX.mjs +1 -0
- package/dist/definitions-Bob4XMxI.mjs +27 -0
- package/dist/definitions-BpIQN2nm.mjs +1 -0
- package/dist/{definitions-Ym8niHDb.mjs → definitions-BvolWeSu.mjs} +1 -1
- package/dist/definitions-C-6j3Ejl.mjs +1 -0
- package/dist/definitions-C-AdFfFu.mjs +1 -0
- package/dist/definitions-CArdw_9T.mjs +1 -0
- package/dist/definitions-CCvIcRrT.mjs +1 -0
- package/dist/definitions-CJPE5PIl.mjs +1 -0
- package/dist/definitions-CbqeW06u.mjs +1 -0
- package/dist/definitions-Cexmkypg.mjs +1 -0
- package/dist/definitions-D1dxl8qt.mjs +1 -0
- package/dist/definitions-D3uT-ZbU.mjs +1 -0
- package/dist/definitions-DtOY5iUc.mjs +1 -0
- package/dist/{definitions-Cv5r8xwq.mjs → definitions-DvrYdDCJ2.mjs} +1 -1
- package/dist/definitions-ihxOqOC4.mjs +1 -0
- package/dist/deopt-trace-qnAcC931.mjs +17 -0
- package/dist/disasm-DoxSucGp.mjs +1 -0
- package/dist/dumpsys-parser-Du-5ruEe.mjs +2 -0
- package/dist/encoding-UMtwgy4M.mjs +2 -0
- package/dist/ensure-browser-core-BP70x0TB.mjs +285 -0
- package/dist/factory-BeND77hf.mjs +2 -0
- package/dist/graphql-CF7QKJME.mjs +68 -0
- package/dist/grpc-raw-Dp7ps2sv.mjs +1 -0
- package/dist/handlers--qCl9vNv.mjs +1 -0
- package/dist/handlers-BHIu1LqA.mjs +1 -0
- package/dist/{handlers-DB6xVVWq.mjs → handlers-BQ4K8Jbr.mjs} +1 -1
- package/dist/handlers-BxQv-wtf.mjs +8 -0
- package/dist/handlers-ByYG27-5.mjs +1 -0
- package/dist/handlers-C0I9-BtX.mjs +5 -0
- package/dist/{handlers-CWKBBjai.mjs → handlers-CL0Iokmw.mjs} +1 -1
- package/dist/handlers-CNbhIdSK.mjs +4 -0
- package/dist/handlers-CnTTSJFs.mjs +109 -0
- package/dist/handlers-CoDx6akJ2.mjs +49 -0
- package/dist/{handlers-BbLxNbbT.mjs → handlers-DASJI0Pn.mjs} +1 -1
- package/dist/handlers-DRKMaA-_.mjs +74 -0
- package/dist/handlers-Dalu0olz.mjs +2 -0
- package/dist/handlers-KY0g31ny.mjs +9 -0
- package/dist/handlers-oGo60aVv.mjs +1 -0
- package/dist/handlers.impl-BTXLw6Qc.mjs +1 -0
- package/dist/heap-sampling-BqdiU-5j.mjs +1 -0
- package/dist/{hooks-DPouiS7I.mjs → hooks-COK3t5rT.mjs} +51 -32
- package/dist/index.mjs +11 -11
- package/dist/logger-BGCcd-jJ.mjs +1 -0
- package/dist/macro-nUYUjKNZ.mjs +2 -0
- package/dist/maintenance-CfnE7ZKU.mjs +4 -0
- package/dist/manifest-7EOTUc0D.mjs +1 -0
- package/dist/manifest-B5ujuQmf.mjs +1 -0
- package/dist/manifest-BErXl3zn.mjs +1 -0
- package/dist/manifest-BKA-mD3J.mjs +1 -0
- package/dist/manifest-BUXj23bX.mjs +1 -0
- package/dist/manifest-BfXt9cau.mjs +1 -0
- package/dist/manifest-Bx-tpURK.mjs +1 -0
- package/dist/manifest-C0owVAdq.mjs +1 -0
- package/dist/manifest-C5XqYc9o.mjs +1 -0
- package/dist/manifest-CVKzLjsA.mjs +1 -0
- package/dist/manifest-CaeFjdhj.mjs +1 -0
- package/dist/manifest-CegBgip0.mjs +1 -0
- package/dist/manifest-CoJHqlgS.mjs +1 -0
- package/dist/manifest-D0dbtDqd.mjs +1 -0
- package/dist/manifest-D5Gr8ujd.mjs +12 -0
- package/dist/manifest-D82z-5og.mjs +1 -0
- package/dist/manifest-DA2afIwh.mjs +1 -0
- package/dist/manifest-DAbiFP5o.mjs +1 -0
- package/dist/manifest-DEY0s1O72.mjs +1 -0
- package/dist/manifest-DTOqNqiA.mjs +1 -0
- package/dist/manifest-DZ6ELNgX.mjs +1 -0
- package/dist/manifest-DjHkjddT.mjs +1 -0
- package/dist/manifest-DocA_itf2.mjs +1 -0
- package/dist/manifest-Dpnhvfq0.mjs +1 -0
- package/dist/manifest-DucPMG_a.mjs +1 -0
- package/dist/manifest-Dw5yYEac.mjs +1 -0
- package/dist/manifest-Ic_Cg66S.mjs +1 -0
- package/dist/manifest-JHaG6GMN.mjs +1 -0
- package/dist/manifest-QdkIzmYM.mjs +1 -0
- package/dist/manifest-YZqaCe25.mjs +1 -0
- package/dist/manifest-f0lUeXwq.mjs +1 -0
- package/dist/manifest-h-Ebisf8.mjs +1 -0
- package/dist/manifest-oOfTymBS.mjs +1 -0
- package/dist/manifest-qXqrO6KC.mjs +2 -0
- package/dist/mapsParser-DrJoeC0c.mjs +1 -0
- package/dist/modules-CC_ADmwi.mjs +333 -0
- package/dist/mojo-ipc-kVztXYw-.mjs +140 -0
- package/dist/native-D9ouskXO.mjs +961 -0
- package/dist/native-bridge-Dzd7hYoq.mjs +1 -0
- package/dist/network-C5Y-S87J.mjs +7 -0
- package/dist/one-gadget-CiWFE17F.mjs +1 -0
- package/dist/outputPaths-CHtELDyi.mjs +1 -0
- package/dist/parse-args-B6dwWc9k.mjs +1 -0
- package/dist/platform-BIXgJaM3.mjs +94 -0
- package/dist/process-aDIfLC0v.mjs +6 -0
- package/dist/proxy-DsHsQ1I4.mjs +2 -0
- package/dist/registry-7h8jJ9y9.mjs +1 -0
- package/dist/{registry-xB8Wgmyj.mjs → registry-DJDnkQW2.mjs} +1 -1
- package/dist/response-R8ghbZSb.mjs +1 -0
- package/dist/retry-policy-DtYv0kDi.mjs +1 -0
- package/dist/reverseEngineeringConfig-BhZLOa3C.mjs +1 -0
- package/dist/safeOutput-Dt4mfjXA.mjs +1 -0
- package/dist/{search-defaults-CJik67or.mjs → search-defaults-BBRJNAzC.mjs} +1 -1
- package/dist/server/search/EmbeddingWorker.d.mts +1 -0
- package/dist/server/search/EmbeddingWorker.mjs +1 -0
- package/dist/shared-BKtWZDGN.mjs +1 -0
- package/dist/sourcemap-2VIeVeKw.mjs +3 -0
- package/dist/streaming-DkpE3GGU.mjs +15 -0
- package/dist/syscall-DGZoYM_U.mjs +1 -0
- package/dist/transform-BJqsBC_-.mjs +105 -0
- package/dist/turbofan-graph-CbGHNVtl.mjs +1 -0
- package/dist/turbofan-inspect--NdCuYXi.mjs +23 -0
- package/dist/types-CWSvzmIh.mjs +1 -0
- package/dist/v8-inspector-CTJo08-K.mjs +297 -0
- package/dist/wasm-DX4Qm2Vs.mjs +235 -0
- package/dist/weakrefs-inspect-CnhaF-rN.mjs +57 -0
- package/dist/webgpu-D4-DxbxZ.mjs +6 -0
- package/dist/workflow-DHktRNF2.mjs +108 -0
- package/package.json +33 -27
- package/dist/AntiCheatDetector-CUpZBh5O.mjs +0 -1
- package/dist/CodeInjector-Btj9upnf.mjs +0 -1
- package/dist/ConsoleMonitor-DIjN5Afa.mjs +0 -306
- package/dist/DarwinAPI-BuMPGzHm.mjs +0 -1
- package/dist/ExtensionManager.tools-CIGOWViz.mjs +0 -1
- package/dist/FingerprintManager-BkDSsjjP.mjs +0 -1
- package/dist/HardwareBreakpoint-DMAMcPyB.mjs +0 -1
- package/dist/HeapAnalyzer-Yj348FYt.mjs +0 -1
- package/dist/InstrumentationSession-c5qZyp7d.mjs +0 -1
- package/dist/MCPServer.activation.ttl-CEGNBycZ.mjs +0 -1
- package/dist/MCPServer.search.helpers-Cs1JpKbu.mjs +0 -1
- package/dist/MemoryController-DjtgiING.mjs +0 -2
- package/dist/MemoryScanner-Dxd657li.mjs +0 -1
- package/dist/PEAnalyzer-CMu9Ua9T.mjs +0 -1
- package/dist/PointerChainEngine-CaSC1Mry.mjs +0 -1
- package/dist/ProcessRegistry-D5y1yuP2.mjs +0 -1
- package/dist/ReverseEvidenceGraph-BksOpsPs.mjs +0 -2
- package/dist/ServerRuntimeState-CgqBBwfd.mjs +0 -1
- package/dist/Speedhack-pwXTHxOY.mjs +0 -1
- package/dist/StructureAnalyzer-BseGzsSl.mjs +0 -2
- package/dist/ToolCatalog-DgmQXdsm.mjs +0 -1
- package/dist/ToolHandlerMap-7HWoIgQO.mjs +0 -1
- package/dist/ToolRegistry-eMZEBiR1.mjs +0 -1
- package/dist/TraceRecorder-B5ktv3nP.mjs +0 -272
- package/dist/VersionDetector-CmPJmaJg.mjs +0 -1
- package/dist/Win32API-DoP3MMHS.mjs +0 -1
- package/dist/WorkflowEngine-CldHG5b4.mjs +0 -1
- package/dist/analysis-C-ln0Brh.mjs +0 -6
- package/dist/artifactRetention-DkYKLOvi.mjs +0 -1
- package/dist/artifacts-D-4pSS_N.mjs +0 -1
- package/dist/binary-instrument-BeZ224mZ.mjs +0 -9
- package/dist/boringssl-inspector-ZOCkaipa.mjs +0 -2
- package/dist/browser-BUaB25bk.mjs +0 -11
- package/dist/collector-CB2syQEg.mjs +0 -1
- package/dist/constants-DMv3svps.mjs +0 -2
- package/dist/coordination-Dbohmj6D.mjs +0 -1
- package/dist/dart-inspector-LhEqRITQ.mjs +0 -0
- package/dist/debugger-CLzkObIO.mjs +0 -1
- package/dist/definitions-0hxnrDU72.mjs +0 -1
- package/dist/definitions-B3a9QC2t.mjs +0 -1
- package/dist/definitions-BOvju5t2.mjs +0 -1
- package/dist/definitions-CXj_cEVt.mjs +0 -1
- package/dist/definitions-Co6AvTjH.mjs +0 -1
- package/dist/definitions-DBYSxChX.mjs +0 -1
- package/dist/definitions-D_dTDX9B.mjs +0 -1
- package/dist/definitions-Db9t2ddh.mjs +0 -1
- package/dist/definitions-DbN2CjI2.mjs +0 -1
- package/dist/definitions-DlmmHmZc.mjs +0 -1
- package/dist/definitions-DnYpoGig.mjs +0 -1
- package/dist/definitions-DtZ6Ktx2.mjs +0 -1
- package/dist/definitions-DuIPS8gq.mjs +0 -1
- package/dist/definitions-DywfwPMb.mjs +0 -1
- package/dist/definitions-EGmqr85H.mjs +0 -1
- package/dist/definitions-Fetw_Cge.mjs +0 -26
- package/dist/definitions-LdkeuOeA.mjs +0 -1
- package/dist/definitions-cnG6tj17.mjs +0 -1
- package/dist/encoding-B4xZWErf.mjs +0 -2
- package/dist/ensure-browser-core-JHwDo5ql.mjs +0 -285
- package/dist/factory-BxNdBiZa.mjs +0 -1
- package/dist/graphql-GBWsZ9xC.mjs +0 -62
- package/dist/handlers-5nzR8B0a.mjs +0 -5
- package/dist/handlers-6iNsXOVT.mjs +0 -7
- package/dist/handlers-BZ8n6Hvf.mjs +0 -1
- package/dist/handlers-BbS4hssc.mjs +0 -4
- package/dist/handlers-CIKOP4aI.mjs +0 -2
- package/dist/handlers-Cmb6SoRC.mjs +0 -1
- package/dist/handlers-CrJsKnEI.mjs +0 -1
- package/dist/handlers-DOOCWUNR.mjs +0 -31
- package/dist/handlers-Z_B5aVaU.mjs +0 -54
- package/dist/handlers-gVscChvl.mjs +0 -1
- package/dist/handlers-xFvI9P_y.mjs +0 -1
- package/dist/handlers.impl-BsFTW6SD.mjs +0 -1
- package/dist/logger-CCikqqvj.mjs +0 -1
- package/dist/macro-p8kuJVcm.mjs +0 -2
- package/dist/maintenance-DAqADb6Z.mjs +0 -302
- package/dist/manifest-4lmM6MZR.mjs +0 -1
- package/dist/manifest-AxaxRSt6.mjs +0 -2
- package/dist/manifest-BIqRE1Qz.mjs +0 -1
- package/dist/manifest-Box-jWfr.mjs +0 -1
- package/dist/manifest-Bp33di0Q.mjs +0 -1
- package/dist/manifest-BvRX4nRP.mjs +0 -1
- package/dist/manifest-C6KoB1XE.mjs +0 -1
- package/dist/manifest-C7TdXCWY.mjs +0 -1
- package/dist/manifest-CM-n64K0.mjs +0 -1
- package/dist/manifest-CUokxCUN.mjs +0 -1
- package/dist/manifest-CWJS45iO.mjs +0 -1
- package/dist/manifest-Cdxdgo-D.mjs +0 -1
- package/dist/manifest-Cf6SmamD.mjs +0 -1
- package/dist/manifest-Cgxu2qdv.mjs +0 -1
- package/dist/manifest-CowGSURa2.mjs +0 -1
- package/dist/manifest-CsGIrh34.mjs +0 -1
- package/dist/manifest-CvDpVToN.mjs +0 -1
- package/dist/manifest-D8TL9RLE.mjs +0 -1
- package/dist/manifest-DIhtCBe6.mjs +0 -1
- package/dist/manifest-DJbruNOg.mjs +0 -1
- package/dist/manifest-DLGtZH-0.mjs +0 -1
- package/dist/manifest-DXHdPt2T.mjs +0 -1
- package/dist/manifest-Dg5ScOyW.mjs +0 -1
- package/dist/manifest-DzGoTS0R.mjs +0 -1
- package/dist/manifest-G2H52LKz.mjs +0 -131
- package/dist/manifest-P0Futrgb.mjs +0 -1
- package/dist/manifest-Qw7xgvjv.mjs +0 -1
- package/dist/manifest-W3qvVrP2.mjs +0 -1
- package/dist/manifest-dG6MuR1U.mjs +0 -1
- package/dist/manifest-nWXtgq5Y2.mjs +0 -1
- package/dist/manifest-vp1upSSq.mjs +0 -1
- package/dist/modules-DO3jXCgj.mjs +0 -333
- package/dist/mojo-ipc-Be-ccWrc.mjs +0 -9
- package/dist/native-g095qhpK.mjs +0 -961
- package/dist/network-Dvxm7eEI.mjs +0 -7
- package/dist/outputPaths-D2ddHrOJ.mjs +0 -2
- package/dist/parse-args-ngRrvF9e.mjs +0 -1
- package/dist/platform-DjWbuiF8.mjs +0 -93
- package/dist/process-Dq5I-KZW.mjs +0 -2
- package/dist/proxy-DPNgM7TE.mjs +0 -2
- package/dist/renderer-pid-7jbTR8f5.mjs +0 -1
- package/dist/response-B1RuVVfD.mjs +0 -1
- package/dist/sourcemap-DqEW15Ao.mjs +0 -1
- package/dist/streaming-Dbk4eStJ.mjs +0 -1
- package/dist/transform-D-peM3aO.mjs +0 -103
- package/dist/wasm-CZajRaad.mjs +0 -174
- package/dist/webcrack-phEfVt5y.mjs +0 -46
- package/dist/workflow-wkXb3x-U.mjs +0 -101
- /package/dist/{chunk-88NL7fhV.mjs → rolldown-runtime-88NL7fhV.mjs} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
function e(e){return{capability:e.capability,status:e.status,available:e.status===`available`,...e.reason?{reason:e.reason}:{},...e.fix?{fix:e.fix}:{},...e.details}}function t(t,n,r={}){return{success:!0,tool:t,capabilities:n.map(e),...r}}function n(e,t,n,r,i={}){return{success:!1,tool:e,capability:t,status:`unavailable`,available:!1,reason:n,...r?{fix:r}:{},...i}}export{t as n,n as t};
|
|
1
|
+
function e(e){return{capability:e.capability,status:e.status,available:e.status===`available`,...e.reason?{reason:e.reason}:{},...e.fix?{fix:e.fix}:{},...e.details}}function t(t,n,r={}){return{success:!0,tool:t,capabilities:n.map(e),...r}}function n(e,t,n,r,i={}){return{success:!1,tool:e,capability:t,status:`unavailable`,available:!1,reason:n,...r?{fix:r}:{},...i}}function r(e){let{tool:t,stubType:n,reason:r,fix:i,data:a,warning:o}=e;return{success:n!==`unavailable`,tool:t,_stub:n,stubType:n,reason:r,...i?{fix:i}:{},...o?{warning:o}:{},...a}}export{t as n,r,n as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e){return typeof e==`function`?{getPage:e}:e&&typeof e==`object`?e:{}}function t(e){return typeof e==`object`&&!!e}function n(e){return t(e)&&typeof e.createCDPSession==`function`}function r(e){return t(e)&&typeof e.send==`function`&&typeof e.detach==`function`}function i(e){if(!t(e))return null;let n=e.url;if(typeof n==`string`)return n;if(typeof n==`function`)try{let t=n.call(e);return typeof t==`string`?t:null}catch{return null}return null}const a={type:`page`,url:null,targetId:null};function o(){return{session:null,owned:!1,target:{...a}}}async function s(e){let t=e.getAttachedTargetSession?.()??null;if(t){let n=e.getAttachedTargetInfo?.()??null;return{session:t,owned:!1,target:{type:n?.type??null,url:n?.url??null,targetId:n?.targetId??null}}}if(!e.getPage)return o();let a;try{a=await e.getPage()}catch{return o()}if(!n(a))return o();try{let e=await a.createCDPSession();return r(e)?{session:e,owned:!0,target:{type:`page`,url:i(a),targetId:null}}:o()}catch{return o()}}function c(e,t){if(t)return e;let n={send:((t,n)=>e.send(t,n)),detach:async()=>void 0};return e.on&&(n.on=(t,n)=>e.on?.(t,n)),e.off&&(n.off=(t,n)=>e.off?.(t,n)),e.removeListener&&(n.removeListener=(t,n)=>e.removeListener?.(t,n)),n}function l(e){return{createCDPSession:async()=>c(e,!1)}}export{e as n,s as r,l as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{f as e}from"./ensure-browser-core-BP70x0TB.mjs";import{ConsoleMonitor as t}from"./ConsoleMonitor-BZRqrBH-.mjs";export{e as CodeCollector,t as ConsoleMonitor};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{t as e}from"./search-defaults-BBRJNAzC.mjs";import{homedir as t}from"node:os";import{existsSync as n,readFileSync as r}from"node:fs";import{isAbsolute as i,join as a,normalize as o,relative as s,resolve as c}from"node:path";import{fileURLToPath as l}from"node:url";import{config as u}from"dotenv";import{z as d}from"zod";function f(e){try{let t=new URL(`.`,e);for(let e=0;e<5;e++){try{let e=l(new URL(`package.json`,t)),n=JSON.parse(r(e,`utf8`));if(n.version)return n.version}catch{}let e=new URL(`../`,t);if(e.href===t.href)break;t=e}}catch{}return process.env.npm_package_version??`0.0.0`}const p=l(new URL(`../..`,import.meta.url));function m(){if(process.env.NPX_CACHE||process.env.npm_config_prefix)return!0;let e=o(s(process.cwd(),p));return e===``||e.startsWith(`..`)||i(e)}function h(){return m()?process.cwd():p}function g(){let e=[l(new URL(`../../.env`,import.meta.url)),l(new URL(`../.env`,import.meta.url)),l(new URL(`.env`,import.meta.url)),a(process.cwd(),`.env`)],t=new Set;for(let r of e){let e=o(r);if(!t.has(e)&&(t.add(e),n(e)))return e}return e[0]??l(new URL(`../../.env`,import.meta.url))}const _=g();let v=!1;const y={puppeteer:{headless:!1,timeout:3e4},mcp:{name:`jshookmcp`,version:f(import.meta.url)},cache:{enabled:!1,dir:`.cache`,ttl:3600},paths:{screenshotDir:`screenshots`,captchaScreenshotDir:`screenshots/captcha`,debuggerSessionsDir:`debugger-sessions`,extensionRegistryDir:`artifacts/extension-registry`,tlsKeyLogDir:`artifacts/tmp`,registryCacheDir:`.jshookmcp/cache`},performance:{maxConcurrentAnalysis:3,maxCodeSizeMB:10},reverseEngineering:{transformWorkbench:{defaultPreviewBytes:128,maxPreviewBytes:4096,textSampleBytes:4096,maxInputBytes:16*1024*1024,maxOutputBytes:32*1024*1024,maxSteps:32},reverseSession:{maxInlineTransformInputBytes:16*1024*1024,promotedTransformPreviewBytes:256,runMaxSteps:50,evidenceRefSegmentMaxChars:96},binaryMagic:{hintPrefixMaxBytes:64,dexMagicAscii:`dex
|
|
2
|
+
`,compactDexMagicAscii:`cdex`},nativeEmulator:{cstringDefaultLimitBytes:1<<20,cstringReadChunkBytes:4096,guestPageSizeBytes:4096,syscallCStringLimitBytes:4096,rawMemoryMaxBytes:16*1024*1024,rawMemoryPreviewBytes:4096},apk:{staticTriageMinEntries:100,staticTriageDefaultEntries:2e3,staticTriageMaxEntries:2e4,staticTriageAssetHintLimit:200,staticTriageNativeLibLimit:300,dexIntakeDefaultDexFiles:100,dexIntakeMaxDexFiles:500,dexIntakeManifestTextSampleBytes:1024,dexIntakeManifestControlByteRatio:.1,dexIntakeComponentLimit:500,dexIntakeFeatureLimit:200,dexIntakeUniqueLimitDefault:200},dex:{scanDefaultMaxHits:50,scanMaxHits:500,scanMaxExtractBytes:512*1024*1024,artifactDefaultLimit:500,artifactMaxLimit:5e3,artifactMinReadBytes:128,artifactDefaultMaxFileBytes:16*1024*1024,artifactDefaultMaxTotalBytes:64*1024*1024,artifactMaxReadBytes:256*1024*1024,stringScanMaxBytes:4096},frida:{dexDumpTimeoutMs:18e4,dexDumpMaxBufferBytes:16*1024*1024,dexDumpFileLimit:500},androidRuntime:{mapsMaxBytes:4*1024*1024,mapsModuleLimit:1e3}}};function b(){if(v)return;v=!0;let e=u({path:_,quiet:!0}),t=e.error?.code;e.error?t!==`ENOENT`&&(console.error(`[Config] Warning: Failed to load .env from "${_}"`),console.error(`[Config] Error: ${e.error.message}`),console.error(`[Config] Will use environment variables or defaults`)):process.env.DEBUG===`true`&&console.info(`[Config] .env file loaded from "${_}" (debug mode)`)}const x=e=>d.string().optional().transform(t=>t?parseInt(t,10):e).pipe(d.number().int().finite()),S=e=>d.string().optional().transform(t=>t===void 0?e:t===`true`),C=e=>d.string().optional().transform(t=>t?Number.parseFloat(t):e).pipe(d.number().finite());function w(e,t){return o(i(e)?e:c(t,e))}const T=d.object({PUPPETEER_HEADLESS:S(y.puppeteer.headless),PUPPETEER_TIMEOUT:x(y.puppeteer.timeout).pipe(d.number().min(1e3).max(3e5)),PUPPETEER_EXECUTABLE_PATH:d.string().optional(),CHROME_PATH:d.string().optional(),BROWSER_EXECUTABLE_PATH:d.string().optional(),MCP_SERVER_NAME:d.string().optional().default(y.mcp.name),MCP_SERVER_VERSION:d.string().optional().default(y.mcp.version),ENABLE_CACHE:S(y.cache.enabled),CACHE_DIR:d.string().optional().default(y.cache.dir),CACHE_TTL:x(y.cache.ttl).pipe(d.number().min(0)),MCP_SCREENSHOT_DIR:d.string().optional().default(y.paths.screenshotDir),CAPTCHA_SCREENSHOT_DIR:d.string().optional().default(y.paths.captchaScreenshotDir),MCP_DEBUGGER_SESSIONS_DIR:d.string().optional().default(y.paths.debuggerSessionsDir),MCP_EXTENSION_REGISTRY_DIR:d.string().optional().default(y.paths.extensionRegistryDir),MCP_TLS_KEYLOG_DIR:d.string().optional().default(y.paths.tlsKeyLogDir),MCP_REGISTRY_CACHE_DIR:d.string().optional().default(y.paths.registryCacheDir),MAX_CONCURRENT_ANALYSIS:x(y.performance.maxConcurrentAnalysis).pipe(d.number().min(1).max(32)),MAX_CODE_SIZE_MB:x(y.performance.maxCodeSizeMB).pipe(d.number().min(1).max(500)),TRANSFORM_WORKBENCH_DEFAULT_PREVIEW_BYTES:x(y.reverseEngineering.transformWorkbench.defaultPreviewBytes).pipe(d.number().min(1)),TRANSFORM_WORKBENCH_MAX_PREVIEW_BYTES:x(y.reverseEngineering.transformWorkbench.maxPreviewBytes).pipe(d.number().min(1)),TRANSFORM_WORKBENCH_TEXT_SAMPLE_BYTES:x(y.reverseEngineering.transformWorkbench.textSampleBytes).pipe(d.number().min(1)),TRANSFORM_WORKBENCH_MAX_INPUT_BYTES:x(y.reverseEngineering.transformWorkbench.maxInputBytes).pipe(d.number().min(1)),TRANSFORM_WORKBENCH_MAX_OUTPUT_BYTES:x(y.reverseEngineering.transformWorkbench.maxOutputBytes).pipe(d.number().min(1)),TRANSFORM_WORKBENCH_MAX_STEPS:x(y.reverseEngineering.transformWorkbench.maxSteps).pipe(d.number().min(1)),REVERSE_SESSION_MAX_INLINE_TRANSFORM_INPUT_BYTES:x(y.reverseEngineering.reverseSession.maxInlineTransformInputBytes).pipe(d.number().min(1)),REVERSE_SESSION_PROMOTED_TRANSFORM_PREVIEW_BYTES:x(y.reverseEngineering.reverseSession.promotedTransformPreviewBytes).pipe(d.number().min(1)),REVERSE_SESSION_RUN_MAX_STEPS:x(y.reverseEngineering.reverseSession.runMaxSteps).pipe(d.number().min(1)),REVERSE_SESSION_EVIDENCE_REF_SEGMENT_MAX_CHARS:x(y.reverseEngineering.reverseSession.evidenceRefSegmentMaxChars).pipe(d.number().min(1)),BINARY_MAGIC_HINT_PREFIX_MAX_BYTES:x(y.reverseEngineering.binaryMagic.hintPrefixMaxBytes).pipe(d.number().min(1)),DEX_MAGIC_ASCII:d.string().optional().default(y.reverseEngineering.binaryMagic.dexMagicAscii),CDEX_MAGIC_ASCII:d.string().optional().default(y.reverseEngineering.binaryMagic.compactDexMagicAscii),NEMU_CSTRING_DEFAULT_LIMIT_BYTES:x(y.reverseEngineering.nativeEmulator.cstringDefaultLimitBytes).pipe(d.number().min(1)),NEMU_CSTRING_READ_CHUNK_BYTES:x(y.reverseEngineering.nativeEmulator.cstringReadChunkBytes).pipe(d.number().min(1)),NEMU_GUEST_PAGE_SIZE_BYTES:x(y.reverseEngineering.nativeEmulator.guestPageSizeBytes).pipe(d.number().min(1)),NEMU_SYSCALL_CSTRING_LIMIT_BYTES:x(y.reverseEngineering.nativeEmulator.syscallCStringLimitBytes).pipe(d.number().min(1)),NEMU_RAW_MEMORY_MAX_BYTES:x(y.reverseEngineering.nativeEmulator.rawMemoryMaxBytes).pipe(d.number().min(1)),NEMU_RAW_MEMORY_PREVIEW_BYTES:x(y.reverseEngineering.nativeEmulator.rawMemoryPreviewBytes).pipe(d.number().min(1)),APK_STATIC_TRIAGE_MIN_ENTRIES:x(y.reverseEngineering.apk.staticTriageMinEntries).pipe(d.number().min(1)),APK_STATIC_TRIAGE_DEFAULT_ENTRIES:x(y.reverseEngineering.apk.staticTriageDefaultEntries).pipe(d.number().min(1)),APK_STATIC_TRIAGE_MAX_ENTRIES:x(y.reverseEngineering.apk.staticTriageMaxEntries).pipe(d.number().min(1)),APK_STATIC_TRIAGE_ASSET_HINT_LIMIT:x(y.reverseEngineering.apk.staticTriageAssetHintLimit).pipe(d.number().min(1)),APK_STATIC_TRIAGE_NATIVE_LIB_LIMIT:x(y.reverseEngineering.apk.staticTriageNativeLibLimit).pipe(d.number().min(1)),APK_DEX_INTAKE_DEFAULT_DEX_FILES:x(y.reverseEngineering.apk.dexIntakeDefaultDexFiles).pipe(d.number().min(1)),APK_DEX_INTAKE_MAX_DEX_FILES:x(y.reverseEngineering.apk.dexIntakeMaxDexFiles).pipe(d.number().min(1)),APK_DEX_INTAKE_MANIFEST_TEXT_SAMPLE_BYTES:x(y.reverseEngineering.apk.dexIntakeManifestTextSampleBytes).pipe(d.number().min(1)),APK_DEX_INTAKE_MANIFEST_CONTROL_BYTE_RATIO:C(y.reverseEngineering.apk.dexIntakeManifestControlByteRatio).pipe(d.number().min(0).max(1)),APK_DEX_INTAKE_COMPONENT_LIMIT:x(y.reverseEngineering.apk.dexIntakeComponentLimit).pipe(d.number().min(1)),APK_DEX_INTAKE_FEATURE_LIMIT:x(y.reverseEngineering.apk.dexIntakeFeatureLimit).pipe(d.number().min(1)),APK_DEX_INTAKE_UNIQUE_LIMIT_DEFAULT:x(y.reverseEngineering.apk.dexIntakeUniqueLimitDefault).pipe(d.number().min(1)),DEX_SCAN_DEFAULT_MAX_HITS:x(y.reverseEngineering.dex.scanDefaultMaxHits).pipe(d.number().min(1)),DEX_SCAN_MAX_HITS:x(y.reverseEngineering.dex.scanMaxHits).pipe(d.number().min(1)),DEX_SCAN_MAX_EXTRACT_BYTES:x(y.reverseEngineering.dex.scanMaxExtractBytes).pipe(d.number().min(1)),DEX_ARTIFACT_DEFAULT_LIMIT:x(y.reverseEngineering.dex.artifactDefaultLimit).pipe(d.number().min(1)),DEX_ARTIFACT_MAX_LIMIT:x(y.reverseEngineering.dex.artifactMaxLimit).pipe(d.number().min(1)),DEX_ARTIFACT_MIN_READ_BYTES:x(y.reverseEngineering.dex.artifactMinReadBytes).pipe(d.number().min(1)),DEX_ARTIFACT_DEFAULT_MAX_FILE_BYTES:x(y.reverseEngineering.dex.artifactDefaultMaxFileBytes).pipe(d.number().min(1)),DEX_ARTIFACT_DEFAULT_MAX_TOTAL_BYTES:x(y.reverseEngineering.dex.artifactDefaultMaxTotalBytes).pipe(d.number().min(1)),DEX_ARTIFACT_MAX_READ_BYTES:x(y.reverseEngineering.dex.artifactMaxReadBytes).pipe(d.number().min(1)),DEX_STRING_SCAN_MAX_BYTES:x(y.reverseEngineering.dex.stringScanMaxBytes).pipe(d.number().min(1)),FRIDA_DEX_DUMP_TIMEOUT_MS:x(y.reverseEngineering.frida.dexDumpTimeoutMs).pipe(d.number().min(1)),FRIDA_DEX_DUMP_MAX_BUFFER_BYTES:x(y.reverseEngineering.frida.dexDumpMaxBufferBytes).pipe(d.number().min(1)),FRIDA_DEX_DUMP_FILE_LIMIT:x(y.reverseEngineering.frida.dexDumpFileLimit).pipe(d.number().min(1)),ANDROID_RUNTIME_MAPS_MAX_BYTES:x(y.reverseEngineering.androidRuntime.mapsMaxBytes).pipe(d.number().min(1)),ANDROID_RUNTIME_MAPS_MODULE_LIMIT:x(y.reverseEngineering.androidRuntime.mapsModuleLimit).pipe(d.number().min(1))});function E(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function D(e){let t=process.env[e];if(t)try{let e=JSON.parse(t);return Array.isArray(e)?e:void 0}catch{return}}function O(){let e=D(`SEARCH_QUERY_CATEGORY_PROFILES_JSON`);if(e!==void 0)return e.flatMap(e=>{if(!E(e)||typeof e.pattern!=`string`||!Array.isArray(e.domainBoosts))return[];let t=e.domainBoosts.flatMap(e=>!E(e)||typeof e.domain!=`string`||typeof e.weight!=`number`?[]:[{domain:e.domain,weight:e.weight}]);return[{pattern:e.pattern,flags:typeof e.flags==`string`?e.flags:void 0,domainBoosts:t}]})}function k(){let e=D(`SEARCH_CJK_QUERY_ALIASES_JSON`);if(e!==void 0)return e.flatMap(e=>{if(!E(e)||typeof e.pattern!=`string`||!Array.isArray(e.tokens))return[];let t=e.tokens.filter(e=>typeof e==`string`);return[{pattern:e.pattern,flags:typeof e.flags==`string`?e.flags:void 0,tokens:t}]})}function A(){let e=D(`SEARCH_INTENT_TOOL_BOOST_RULES_JSON`);if(e!==void 0)return e.flatMap(e=>{if(!E(e)||typeof e.pattern!=`string`||!Array.isArray(e.boosts))return[];let t=e.boosts.flatMap(e=>!E(e)||typeof e.tool!=`string`||typeof e.bonus!=`number`?[]:[{tool:e.tool,bonus:e.bonus}]);return[{pattern:e.pattern,flags:typeof e.flags==`string`?e.flags:void 0,boosts:t}]})}function j(e){return{queryCategoryProfiles:e.queryCategoryProfiles.map(e=>({pattern:e.pattern,flags:e.flags,domainBoosts:e.domainBoosts.map(e=>({domain:e.domain,weight:e.weight}))})),cjkQueryAliases:e.cjkQueryAliases.map(e=>({pattern:e.pattern,flags:e.flags,tokens:[...e.tokens]})),intentToolBoostRules:e.intentToolBoostRules.map(e=>({pattern:e.pattern,flags:e.flags,boosts:e.boosts.map(e=>({tool:e.tool,bonus:e.bonus}))}))}}function M(){let t=j(e);return{queryCategoryProfiles:O()??t.queryCategoryProfiles,cjkQueryAliases:k()??t.cjkQueryAliases,intentToolBoostRules:A()??t.intentToolBoostRules}}function N(e,t){return Math.max(1,L(e,t))}function P(e,t){return Math.max(0,Math.min(R(e,t),1))}function F(e,t){return typeof e==`string`?e:t}function I(e,t){return typeof e==`boolean`?e:typeof e==`string`?e===`true`:t}function L(e,t){if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`string`){let t=Number.parseInt(e,10);if(Number.isFinite(t))return t}return t}function R(e,t){if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`string`){let t=Number.parseFloat(e);if(Number.isFinite(t))return t}return t}function z(e){let t=y.reverseEngineering;return{transformWorkbench:{defaultPreviewBytes:N(e.TRANSFORM_WORKBENCH_DEFAULT_PREVIEW_BYTES,t.transformWorkbench.defaultPreviewBytes),maxPreviewBytes:N(e.TRANSFORM_WORKBENCH_MAX_PREVIEW_BYTES,t.transformWorkbench.maxPreviewBytes),textSampleBytes:N(e.TRANSFORM_WORKBENCH_TEXT_SAMPLE_BYTES,t.transformWorkbench.textSampleBytes),maxInputBytes:N(e.TRANSFORM_WORKBENCH_MAX_INPUT_BYTES,t.transformWorkbench.maxInputBytes),maxOutputBytes:N(e.TRANSFORM_WORKBENCH_MAX_OUTPUT_BYTES,t.transformWorkbench.maxOutputBytes),maxSteps:N(e.TRANSFORM_WORKBENCH_MAX_STEPS,t.transformWorkbench.maxSteps)},reverseSession:{maxInlineTransformInputBytes:N(e.REVERSE_SESSION_MAX_INLINE_TRANSFORM_INPUT_BYTES,t.reverseSession.maxInlineTransformInputBytes),promotedTransformPreviewBytes:N(e.REVERSE_SESSION_PROMOTED_TRANSFORM_PREVIEW_BYTES,t.reverseSession.promotedTransformPreviewBytes),runMaxSteps:N(e.REVERSE_SESSION_RUN_MAX_STEPS,t.reverseSession.runMaxSteps),evidenceRefSegmentMaxChars:N(e.REVERSE_SESSION_EVIDENCE_REF_SEGMENT_MAX_CHARS,t.reverseSession.evidenceRefSegmentMaxChars)},binaryMagic:{hintPrefixMaxBytes:N(e.BINARY_MAGIC_HINT_PREFIX_MAX_BYTES,t.binaryMagic.hintPrefixMaxBytes),dexMagicAscii:F(e.DEX_MAGIC_ASCII,t.binaryMagic.dexMagicAscii),compactDexMagicAscii:F(e.CDEX_MAGIC_ASCII,t.binaryMagic.compactDexMagicAscii)},nativeEmulator:{cstringDefaultLimitBytes:N(e.NEMU_CSTRING_DEFAULT_LIMIT_BYTES,t.nativeEmulator.cstringDefaultLimitBytes),cstringReadChunkBytes:N(e.NEMU_CSTRING_READ_CHUNK_BYTES,t.nativeEmulator.cstringReadChunkBytes),guestPageSizeBytes:N(e.NEMU_GUEST_PAGE_SIZE_BYTES,t.nativeEmulator.guestPageSizeBytes),syscallCStringLimitBytes:N(e.NEMU_SYSCALL_CSTRING_LIMIT_BYTES,t.nativeEmulator.syscallCStringLimitBytes),rawMemoryMaxBytes:N(e.NEMU_RAW_MEMORY_MAX_BYTES,t.nativeEmulator.rawMemoryMaxBytes),rawMemoryPreviewBytes:N(e.NEMU_RAW_MEMORY_PREVIEW_BYTES,t.nativeEmulator.rawMemoryPreviewBytes)},apk:{staticTriageMinEntries:N(e.APK_STATIC_TRIAGE_MIN_ENTRIES,t.apk.staticTriageMinEntries),staticTriageDefaultEntries:N(e.APK_STATIC_TRIAGE_DEFAULT_ENTRIES,t.apk.staticTriageDefaultEntries),staticTriageMaxEntries:N(e.APK_STATIC_TRIAGE_MAX_ENTRIES,t.apk.staticTriageMaxEntries),staticTriageAssetHintLimit:N(e.APK_STATIC_TRIAGE_ASSET_HINT_LIMIT,t.apk.staticTriageAssetHintLimit),staticTriageNativeLibLimit:N(e.APK_STATIC_TRIAGE_NATIVE_LIB_LIMIT,t.apk.staticTriageNativeLibLimit),dexIntakeDefaultDexFiles:N(e.APK_DEX_INTAKE_DEFAULT_DEX_FILES,t.apk.dexIntakeDefaultDexFiles),dexIntakeMaxDexFiles:N(e.APK_DEX_INTAKE_MAX_DEX_FILES,t.apk.dexIntakeMaxDexFiles),dexIntakeManifestTextSampleBytes:N(e.APK_DEX_INTAKE_MANIFEST_TEXT_SAMPLE_BYTES,t.apk.dexIntakeManifestTextSampleBytes),dexIntakeManifestControlByteRatio:P(e.APK_DEX_INTAKE_MANIFEST_CONTROL_BYTE_RATIO,t.apk.dexIntakeManifestControlByteRatio),dexIntakeComponentLimit:N(e.APK_DEX_INTAKE_COMPONENT_LIMIT,t.apk.dexIntakeComponentLimit),dexIntakeFeatureLimit:N(e.APK_DEX_INTAKE_FEATURE_LIMIT,t.apk.dexIntakeFeatureLimit),dexIntakeUniqueLimitDefault:N(e.APK_DEX_INTAKE_UNIQUE_LIMIT_DEFAULT,t.apk.dexIntakeUniqueLimitDefault)},dex:{scanDefaultMaxHits:N(e.DEX_SCAN_DEFAULT_MAX_HITS,t.dex.scanDefaultMaxHits),scanMaxHits:N(e.DEX_SCAN_MAX_HITS,t.dex.scanMaxHits),scanMaxExtractBytes:N(e.DEX_SCAN_MAX_EXTRACT_BYTES,t.dex.scanMaxExtractBytes),artifactDefaultLimit:N(e.DEX_ARTIFACT_DEFAULT_LIMIT,t.dex.artifactDefaultLimit),artifactMaxLimit:N(e.DEX_ARTIFACT_MAX_LIMIT,t.dex.artifactMaxLimit),artifactMinReadBytes:N(e.DEX_ARTIFACT_MIN_READ_BYTES,t.dex.artifactMinReadBytes),artifactDefaultMaxFileBytes:N(e.DEX_ARTIFACT_DEFAULT_MAX_FILE_BYTES,t.dex.artifactDefaultMaxFileBytes),artifactDefaultMaxTotalBytes:N(e.DEX_ARTIFACT_DEFAULT_MAX_TOTAL_BYTES,t.dex.artifactDefaultMaxTotalBytes),artifactMaxReadBytes:N(e.DEX_ARTIFACT_MAX_READ_BYTES,t.dex.artifactMaxReadBytes),stringScanMaxBytes:N(e.DEX_STRING_SCAN_MAX_BYTES,t.dex.stringScanMaxBytes)},frida:{dexDumpTimeoutMs:N(e.FRIDA_DEX_DUMP_TIMEOUT_MS,t.frida.dexDumpTimeoutMs),dexDumpMaxBufferBytes:N(e.FRIDA_DEX_DUMP_MAX_BUFFER_BYTES,t.frida.dexDumpMaxBufferBytes),dexDumpFileLimit:N(e.FRIDA_DEX_DUMP_FILE_LIMIT,t.frida.dexDumpFileLimit)},androidRuntime:{mapsMaxBytes:N(e.ANDROID_RUNTIME_MAPS_MAX_BYTES,t.androidRuntime.mapsMaxBytes),mapsModuleLimit:N(e.ANDROID_RUNTIME_MAPS_MODULE_LIMIT,t.androidRuntime.mapsModuleLimit)}}}function B(){b();let e=T.safeParse(process.env);if(!e.success){let t=e.error.issues.map(e=>` ${e.path.join(`.`)}: ${e.message}`);console.error(`[Config] Validation errors:\n${t.join(`
|
|
3
|
+
`)}`),console.error(`[Config] Falling back to safe defaults for invalid fields`)}let n=e.success?e.data:process.env,r=n.CACHE_DIR||y.cache.dir,i=n.PUPPETEER_EXECUTABLE_PATH||n.CHROME_PATH||n.BROWSER_EXECUTABLE_PATH,o=r.startsWith(`/`)||r.match(/^[A-Za-z]:/)?r:a(p,r),s=M(),c=h(),l={screenshotDir:w(n.MCP_SCREENSHOT_DIR||y.paths.screenshotDir,c),captchaScreenshotDir:w(n.CAPTCHA_SCREENSHOT_DIR||y.paths.captchaScreenshotDir,c),debuggerSessionsDir:w(n.MCP_DEBUGGER_SESSIONS_DIR||y.paths.debuggerSessionsDir,process.cwd()),extensionRegistryDir:w(n.MCP_EXTENSION_REGISTRY_DIR||y.paths.extensionRegistryDir,c),tlsKeyLogDir:w(n.MCP_TLS_KEYLOG_DIR||y.paths.tlsKeyLogDir,c),registryCacheDir:w(n.MCP_REGISTRY_CACHE_DIR||y.paths.registryCacheDir,t())};return{puppeteer:{headless:I(n.PUPPETEER_HEADLESS,y.puppeteer.headless),timeout:L(n.PUPPETEER_TIMEOUT,y.puppeteer.timeout),executablePath:i?.trim()||void 0},mcp:{name:n.MCP_SERVER_NAME||y.mcp.name,version:n.MCP_SERVER_VERSION||y.mcp.version},cache:{enabled:I(n.ENABLE_CACHE,y.cache.enabled),dir:o,ttl:L(n.CACHE_TTL,y.cache.ttl)},paths:l,performance:{maxConcurrentAnalysis:L(n.MAX_CONCURRENT_ANALYSIS,y.performance.maxConcurrentAnalysis),maxCodeSizeMB:L(n.MAX_CODE_SIZE_MB,y.performance.maxCodeSizeMB)},reverseEngineering:z(n),search:s}}function V(e){let t=[];e.performance.maxConcurrentAnalysis<1&&t.push(`maxConcurrentAnalysis must be at least 1`),e.performance.maxCodeSizeMB<1&&t.push(`maxCodeSizeMB must be at least 1`),e.puppeteer.timeout<1e3&&t.push(`puppeteer.timeout must be at least 1000ms`),e.cache.ttl<0&&t.push(`cache.ttl must be non-negative`);for(let n of e.search.queryCategoryProfiles)try{new RegExp(n.pattern,n.flags)}catch{t.push(`search.queryCategoryProfiles contains invalid regex: ${n.pattern}`)}for(let n of e.search.cjkQueryAliases)try{new RegExp(n.pattern,n.flags)}catch{t.push(`search.cjkQueryAliases contains invalid regex: ${n.pattern}`)}for(let n of e.search.intentToolBoostRules)try{new RegExp(n.pattern,n.flags)}catch{t.push(`search.intentToolBoostRules contains invalid regex: ${n.pattern}`)}return{valid:t.length===0,errors:t}}export{f as a,V as i,m as n,p as r,B as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./rolldown-runtime-88NL7fhV.mjs";import{cpus as t}from"node:os";const n=(e,t)=>{let n=process.env[e];if(n===void 0||n===``)return t;let r=parseInt(n,10);return Number.isFinite(r)?r:t},r=(e,t)=>{let n=process.env[e];if(n===void 0||n===``)return t;let r=Number.parseFloat(n);return Number.isFinite(r)?r:t},i=(e,t)=>{let n=process.env[e];if(n===void 0||n===``)return t;let r=n.trim().toLowerCase();return r===`true`||r===`1`?!0:r===`false`||r===`0`?!1:t},a=(e,t)=>process.env[e]||t,ee=(e,t)=>{let n=process.env[e];return n?n.split(`,`).map(Number).filter(Number.isFinite):t},o=(e,t)=>{let n=process.env[e];if(!n)return t;let r=n.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean);return r.length>0?r:t},te=(e,t,r)=>{let i=process.env[e];if(i!==void 0&&i.trim().toLowerCase()===`auto`){let e=r();return Number.isFinite(e)&&e>0?Math.floor(e):t}return n(e,t)},s=()=>{try{return t().length}catch{return 4}},c=n(`SHUTDOWN_TIMEOUT_MS`,2e4),l=n(`RUNTIME_ERROR_WINDOW_MS`,6e4),u=n(`RUNTIME_ERROR_THRESHOLD`,8),d=ee(`DEBUG_PORT_CANDIDATES`,[9222,9229,9333,2039]),f=n(`DEFAULT_DEBUG_PORT`,9222),p=a(`GHIDRA_BRIDGE_URL`,`http://127.0.0.1:18080`),m=a(`IDA_BRIDGE_URL`,`http://127.0.0.1:18081`),h=process.env.CAPTCHA_SOLVER_BASE_URL?.trim()||process.env.CAPTCHA_2CAPTCHA_BASE_URL?.trim()||``;process.env.EXTENSION_REGISTRY_BASE_URL?.trim();const g=n(`MCP_HTTP_REQUEST_TIMEOUT_MS`,3e4),_=n(`MCP_HTTP_HEADERS_TIMEOUT_MS`,1e4),v=n(`MCP_HTTP_KEEPALIVE_TIMEOUT_MS`,864e5),y=n(`MCP_HTTP_FORCE_CLOSE_TIMEOUT_MS`,5e3),b=n(`TOKEN_BUDGET_MAX_TOKENS`,2e5),x=n(`ACTIVATION_TTL_MINUTES`,30),S=n(`AUTOPRUNE_AUTO_INACTIVITY_MS`,15*6e4),C=n(`AUTOPRUNE_MANUAL_INACTIVITY_MS`,30*6e4),w=n(`AUTOPRUNE_CHECK_INTERVAL_MS`,6e4),T=n(`ACTIVATION_COOLDOWN_MS`,3e4),E=n(`ACTIVATION_COMPOUND_EVAL_EVERY`,5),D=n(`ACTIVATION_EVENT_HISTORY_MAX`,200),O=n(`ACTIVATION_BOOST_WINDOW_MS`,6e4),k=n(`COMPOUND_EVENT_WINDOW_MS`,12e4),A=n(`COMPOUND_LONG_WINDOW_MS`,3e5),j=n(`EXTENSION_GIT_CLONE_TIMEOUT_MS`,6e4),M=n(`EXTENSION_GIT_CHECKOUT_TIMEOUT_MS`,3e4),N=i(`MCP_COMPACT_SCHEMA`,!0),P=n(`HTTP_RATE_LIMIT_MAX_IPS`,1e4),F=n(`HTTP_CLEANUP_INTERVAL_MS`,5*6e4);n(`SSE_HEARTBEAT_MS`,3e4);const I=i(`MCP_LOG_ENABLED`,!1),L=a(`MCP_LOG_LEVEL`,`info`),R=a(`MCP_LOG_FILE_DIR`,``),z=n(`WORKER_POOL_MIN_WORKERS`,2),B=n(`WORKER_POOL_IDLE_TIMEOUT_MS`,3e4),V=n(`WORKER_POOL_JOB_TIMEOUT_MS`,15e3);n(`PARALLEL_DEFAULT_CONCURRENCY`,3),n(`PARALLEL_DEFAULT_TIMEOUT_MS`,6e4),n(`PARALLEL_DEFAULT_MAX_RETRIES`,2),n(`PARALLEL_RETRY_BACKOFF_BASE_MS`,1e3);const H=n(`CACHE_GLOBAL_MAX_SIZE_BYTES`,500*1024*1024),U=r(`CACHE_LOW_HIT_RATE_THRESHOLD`,.3),W=n(`DETAILED_DATA_DEFAULT_TTL_MS`,1800*1e3),G=n(`DETAILED_DATA_MAX_TTL_MS`,3600*1e3),K=n(`DETAILED_DATA_SMART_THRESHOLD_BYTES`,50*1024),q=n(`OFFLOAD_FIELD_SANITIZE_THRESHOLD_BYTES`,64*1024),J=n(`PROCESS_LIST_MAX_BUFFER_BYTES`,1024*1024*10);new Set(o(`SEARCH_WORKFLOW_BOOST_TIERS`,[`workflow`,`full`]));const Y=r(`SEARCH_WORKFLOW_DOMAIN_BOOST_MULTIPLIER`,2.4),X=i(`SEARCH_AUTO_ACTIVATE_DOMAINS`,!0),Z=r(`SEARCH_AFFINITY_BOOST_FACTOR`,.38),Q=n(`SEARCH_AFFINITY_TOP_N`,9),ne=n(`SEARCH_DOMAIN_HUB_THRESHOLD`,5),re=n(`SEARCH_QUERY_CACHE_CAPACITY`,500),ie=r(`SEARCH_CACHE_VECTOR_WEIGHT_TOLERANCE`,.05),ae=r(`SEARCH_TRIGRAM_WEIGHT`,.02),oe=r(`SEARCH_TRIGRAM_THRESHOLD`,.47),se=n(`SEARCH_RRF_K`,18),ce=r(`SEARCH_RRF_RESCALE_FACTOR`,2100),le=r(`SEARCH_RRF_BM25_BLEND`,.39),ue=n(`SEARCH_SYNONYM_EXPANSION_LIMIT`,2),de=r(`SEARCH_PARAM_TOKEN_WEIGHT`,1.1),fe=r(`SEARCH_SCENE_KEYWORD_WEIGHT`,.8),pe=r(`SEARCH_BM25_K1`,1),me=r(`SEARCH_BM25_B`,.75),he=i(`SEARCH_VECTOR_ENABLED`,!0),ge=a(`SEARCH_VECTOR_MODEL_ID`,`Xenova/bge-micro-v2`),_e=r(`SEARCH_VECTOR_COSINE_WEIGHT`,.53),ve=i(`SEARCH_VECTOR_DYNAMIC_WEIGHT`,!0),ye=r(`SEARCH_VECTOR_LEARN_UP`,.13),be=r(`SEARCH_VECTOR_LEARN_DOWN`,.02),xe=n(`SEARCH_VECTOR_LEARN_TOP_N`,3),Se=r(`SEARCH_VECTOR_BM25_SKIP_THRESHOLD`,8),Ce=i(`SEARCH_VECTOR_PREWARM`,!1),we=n(`SEARCH_VECTOR_WORKER_IDLE_MS`,15e3),Te=n(`SEARCH_VECTOR_RETRY_COOLDOWN_MS`,6e4),Ee=i(`SEARCH_VECTOR_CACHE_ENABLED`,!0),De=r(`SEARCH_TIER_PENALTY`,.35),Oe=r(`SEARCH_TIER_PENALTY_SEARCH`,.4),ke=r(`SEARCH_TIER_PENALTY_WORKFLOW`,.6),Ae=r(`SEARCH_TIER_PENALTY_FULL`,.6),je=n(`SEARCH_RECENCY_WINDOW_MS`,30*6e4),Me=r(`SEARCH_RECENCY_MAX_BOOST`,.1),Ne=n(`SEARCH_RECENCY_TRACKER_MAX`,200),Pe=r(`SEARCH_EXACT_NAME_MATCH_MULTIPLIER`,3.2),Fe=r(`SEARCH_DOMAIN_HUB_BOOST_MULTIPLIER`,1.04),Ie=r(`SEARCH_AFFINITY_BASE_WEIGHT`,.5),Le=r(`SEARCH_COVERAGE_PRECISION_FACTOR`,.94),Re=r(`SEARCH_PREFIX_MATCH_MULTIPLIER`,.84),ze=i(`SEARCH_SELF_RAG_ENABLED`,!0),Be=n(`PREDICTIVE_MAX_HISTORY`,100),Ve=r(`PREDICTIVE_CONFIDENCE_THRESHOLD`,.25),He=r(`PREDICTIVE_DECAY_FACTOR`,.95),Ue=n(`PREDICTIVE_MAX_SECOND_ORDER_KEYS`,1e3),We=r(`RERANK_MAINTENANCE_PENALTY`,.43),Ge=r(`RERANK_STATELESS_INTERACTIVE_PENALTY`,.65),Ke=r(`RERANK_STATELESS_CORE_PENALTY`,.15),qe=r(`RERANK_STATELESS_COMPUTE_BOOST`,2.2),Je=r(`RERANK_STATELESS_SPECIFIC_TOOL_BOOST`,2.25),Ye=r(`RERANK_BROWSER_LAUNCH_BOOST`,1.35),Xe=r(`RERANK_BROWSER_ATTACH_BOOST`,1.55),Ze=r(`RERANK_NETWORK_MONITOR_BOOST`,1.6),Qe=r(`RERANK_NETWORK_GET_REQUESTS_BOOST`,1.55),$e=te(`WORKER_POOL_MAX_WORKERS`,4,()=>{let e=Math.floor(s()/2),t=n(`WORKER_POOL_MIN_WORKERS`,2);return Math.max(t,Math.min(8,e))}),et=i(`JSHOOK_MEMORY_SYSCALL_EVASION`,!1),tt=n(`MEMORY_READ_TIMEOUT_MS`,1e4),nt=n(`MEMORY_MAX_READ_BYTES`,16*1024*1024),rt=n(`MEMORY_WRITE_TIMEOUT_MS`,1e4),it=n(`MEMORY_MAX_WRITE_BYTES`,16*1024),at=n(`MEMORY_DUMP_TIMEOUT_MS`,6e4),ot=n(`MEMORY_SCAN_TIMEOUT_MS`,12e4),st=n(`MEMORY_SCAN_MAX_BUFFER_BYTES`,1024*1024*50),ct=n(`MEMORY_SCAN_MAX_RESULTS`,1e4),lt=n(`MEMORY_SCAN_MAX_REGIONS`,5e4),ut=n(`MEMORY_SCAN_REGION_MAX_BYTES`,16777216),dt=n(`MEMORY_ENUM_REGIONS_RETURN_LIMIT`,1e4),ft=n(`MEMORY_ENUM_REGIONS_MAX_BUFFER_BYTES`,10*1024*1024),pt=n(`MEMORY_VMMAP_MAX_BUFFER_BYTES`,5*1024*1024),mt=n(`MEMORY_INJECT_TIMEOUT_MS`,3e4);n(`MEMORY_MONITOR_INTERVAL_MS`,1e3);const ht=n(`MEMORY_VMMAP_TIMEOUT_MS`,15e3),gt=n(`MEMORY_PROTECTION_QUERY_TIMEOUT_MS`,15e3),_t=n(`MEMORY_PROTECTION_PWSH_TIMEOUT_MS`,3e4),vt=n(`NATIVE_ADMIN_CHECK_TIMEOUT_MS`,5e3);n(`NATIVE_SCAN_MAX_RESULTS`,1e4);const yt=n(`MEMORY_AVAILABILITY_CACHE_TTL_MS`,45e3),bt=n(`MEMORY_AUDIT_TRAIL_CAPACITY`,5e3),xt=n(`MEMORY_PROCESS_SIGNAL_TIMEOUT_MS`,2e3),St=n(`MEMORY_PROBE_CMD_TIMEOUT_MS`,5e3),Ct=n(`MEMORY_VMMAP_ENUM_TIMEOUT_MS`,15e3),wt=n(`MEMORY_MODULES_TIMEOUT_MS`,3e4),Tt=140737488289792n,Et=n(`SCAN_MAX_RESULTS_PER_SCAN`,1e5),Dt=n(`SCAN_DISPLAY_RESULTS_LIMIT`,200),Ot=n(`SCAN_UNKNOWN_INITIAL_MAX_ADDRESSES`,5e5),kt=n(`SCAN_POINTER_MAX_RESULTS`,5e3),At=n(`SCAN_GROUP_MAX_PATTERN_SIZE`,256);n(`MEMORY_PATTERN_MAX_DATA`,1048576);const jt=n(`SCAN_SESSION_MAX_COUNT`,20),Mt=n(`SCAN_SESSION_TTL_MS`,18e5),Nt=n(`POINTER_CHAIN_MAX_DEPTH`,6),Pt=n(`POINTER_CHAIN_MAX_OFFSET`,4096),Ft=n(`POINTER_CHAIN_MAX_RESULTS`,500),It=n(`POINTER_CHAIN_SCAN_CHUNK_SIZE`,16777216),Lt=n(`STRUCT_ANALYZE_DEFAULT_SIZE`,256),Rt=n(`STRUCT_VTABLE_MAX_FUNCTIONS`,64),zt=n(`STRUCT_RTTI_MAX_STRING_LEN`,256);n(`STRUCT_CSTRING_MAX_LEN`,256);const Bt=n(`HEAP_ENUMERATE_MAX_BLOCKS`,1e4),Vt=n(`HEAP_SPRAY_THRESHOLD`,50),Ht=n(`HEAP_SPRAY_SIZE_TOLERANCE`,64),Ut=n(`HEAP_SUSPICIOUS_BLOCK_SIZE`,10485760),Wt=n(`CODE_CAVE_MIN_SIZE`,16),Gt=n(`BREAKPOINT_HIT_TIMEOUT_MS`,1e4),Kt=n(`BREAKPOINT_TRACE_MAX_HITS`,100),qt=n(`FREEZE_DEFAULT_INTERVAL_MS`,100),Jt=n(`WRITE_HISTORY_MAX`,200),Yt=n(`ADB_DEFAULT_TIMEOUT_MS`,3e4),Xt=n(`ADB_SHELL_TIMEOUT_MS`,6e4),Zt=n(`ADB_MAX_BUFFER_BYTES`,16*1024*1024),Qt=n(`ADB_LARGE_OUTPUT_MAX_BUFFER_BYTES`,32*1024*1024),$t=n(`ADB_FILE_TRANSFER_TIMEOUT_MS`,18e4),en=n(`ADB_PACKAGE_COMPONENT_LIMIT`,500),tn=n(`ADB_GETPROP_MAX_PROPERTIES`,5e3),nn=o(`APK_ZIP_MAGIC_HEX_HEADERS`,[`504b0304`,`504b0506`,`504b0708`]),rn=n(`ADB_LOGCAT_TAIL_DEFAULT`,500),an=n(`ADB_LOGCAT_TAIL_MAX`,2e4),on=n(`ADB_LOGCAT_MAX_LINES_DEFAULT`,100),sn=n(`ADB_LOGCAT_MAX_LINES_MAX`,5e3),cn=n(`ADB_COLD_START_WAIT_MS_DEFAULT`,5e3),ln=n(`ADB_COLD_START_WAIT_MS_MAX`,3e4),un=n(`ADB_COLD_START_LOGCAT_TAIL_DEFAULT`,800),dn=n(`ADB_COLD_START_LOGCAT_TAIL_MIN`,100),fn=n(`ADB_COLD_START_LOGCAT_TAIL_MAX`,2e4),pn=n(`ADB_COLD_START_TIMELINE_LIMIT`,300);n(`ADB_WEBVIEW_HTTP_TIMEOUT_MS`,5e3),n(`ADB_WEBVIEW_WS_TIMEOUT_MS`,1e4);const mn=n(`ADB_WEBVIEW_HOST_PORT_DEFAULT`,9222);n(`ADB_VERSION_CHECK_TIMEOUT_MS`,5e3);const hn=n(`DART_MIN_LENGTH`,4);n(`DART_MIN_LENGTH_FLOOR`,2),n(`DART_MIN_LENGTH_CEILING`,64);const gn=n(`DART_MAX_CHUNK_BYTES`,16*1024*1024),_n=n(`DART_CHUNK_OVERLAP_BYTES`,128),vn=n(`DART_PRINTABLE_ASCII_MIN`,32),yn=n(`DART_PRINTABLE_ASCII_MAX`,126),$=a(`DART_DEFAULT_ENCODING`,`both`),bn=n(`DART_MAX_OFFSETS_PER_STRING`,1e3),xn=n(`DART_MAX_REGEX_PATTERN_LENGTH`,256),Sn=n(`DART_REGEX_TIMEOUT_MS`,50),Cn=a(`DART_ALLOWED_REGEX_FLAGS`,`iu`);n(`DART_MAX_EXTRACT_DURATION_MS`,3e4),n(`DART_MAX_RESULT_BYTES`,16*1024*1024);const wn=n(`DART_MAX_SMI_VALUE`,1e6),Tn=n(`DART_MAX_MAP_BYTES`,16*1024*1024),En=n(`DART_MAX_PACKAGES_PER_RESULT`,1e3),Dn=n(`DART_MAX_FILES_PER_PACKAGE`,50),On=n(`DART_SNAPSHOT_MAX_FILE_BYTES`,1024*1024*1024),kn=n(`DART_SNAPSHOT_HEADER_SCAN_MAX_BYTES`,32*1024*1024),An=a(`DART_SNAPSHOT_TABLE_PATH`,``),jn=n(`DART_PP_MAX_SLOTS`,4096),Mn=n(`DART_PP_PREVIEW_BYTES`,64),Nn=n(`DART_PP_MAX_DUMP_DURATION_MS`,1e4),Pn=n(`DART_SESSION_IDLE_TTL_MS`,3e5),Fn=n(`DART_SESSION_SWEEP_MS`,6e4),In=n(`DART_MAX_SESSIONS`,32);n(`WORKFLOW_BATCH_MAX_ACCOUNTS`,50),n(`WORKFLOW_BATCH_MAX_CONCURRENCY`,1),n(`WORKFLOW_REGISTER_ACCOUNT_TIMEOUT_MS`,6e4),n(`WORKFLOW_ACTION_DELAY_MS`,1e3),n(`WORKFLOW_SETTLE_DELAY_MS`,2e3),n(`WORKFLOW_INPUT_DELAY_MS`,1500),n(`WORKFLOW_BATCH_MAX_RETRIES`,3),n(`WORKFLOW_BATCH_MAX_BACKOFF_MS`,3e4),n(`WORKFLOW_BATCH_MAX_TIMEOUT_MS`,3e5),n(`WORKFLOW_BATCH_RETRY_BACKOFF_MS`,2e3),n(`WORKFLOW_BATCH_TIMEOUT_PER_ACCOUNT_MS`,9e4);const Ln=n(`WORKFLOW_JS_BUNDLE_MAX_SIZE_BYTES`,20*1024*1024),Rn=n(`WORKFLOW_JS_BUNDLE_MAX_REDIRECTS`,5),zn=n(`WORKFLOW_JS_BUNDLE_FETCH_TIMEOUT_MS`,3e4),Bn=n(`WORKFLOW_BUNDLE_CACHE_TTL_MS`,300*1e3),Vn=n(`WORKFLOW_BUNDLE_CACHE_MAX_BYTES`,100*1024*1024);n(`BROWSER_POOL_IDLE_TIMEOUT_MS`,3e5),n(`BROWSER_POOL_MAX_TABS`,10);const Hn=n(`PAGE_FRAME_SELECTOR_TIMEOUT_MS`,1e4),Un=n(`PAGE_NETWORK_IDLE_TIMEOUT_MS`,3e4),Wn=n(`DOM_QUERY_DEFAULT_LIMIT`,50),Gn=n(`DOM_WAIT_ELEMENT_TIMEOUT_MS`,3e4),Kn=n(`SCRIPTS_MAX_CAP`,500),qn=n(`WORKER_SCRIPT_MAX`,200),Jn=n(`WORKER_SCRIPT_SOURCE_MAX_BYTES`,262144),Yn=n(`WORKER_SCRIPT_COLLECT_WAIT_MS`,750),Xn=[`service_worker`,`shared_worker`,`worker`],Zn=[`Arial`,`Courier New`,`Georgia`,`Times New Roman`,`Verdana`,`Segoe UI`,`Roboto`,`Helvetica Neue`],Qn=n(`FONT_LOCAL_ENUMERATE_MAX`,2e3);n(`NETWORK_REPLAY_TIMEOUT_MS`,3e4),n(`NETWORK_REPLAY_MAX_BODY_BYTES`,512e3);const $n=n(`NETWORK_REPLAY_MAX_REDIRECTS`,5),er=n(`NETWORK_HAR_BODY_CONCURRENCY`,4),tr=n(`ICMP_PROBE_TIMEOUT_MS`,5e3),nr=n(`ICMP_TRACEROUTE_MAX_HOPS`,30),rr=n(`ICMP_DEFAULT_PACKET_SIZE`,32),ir=n(`PROTO_TLS_MIN_RECORD_LEN`,4),ar=r(`PROTO_TLS_CONFIDENCE`,.95),or=r(`PROTO_WS_CONFIDENCE`,.85),sr=r(`PROTO_HTTP_CONFIDENCE`,.95),cr=r(`PROTO_SSH_CONFIDENCE`,.95),lr=r(`PROTO_MQTT_CONFIDENCE`,.85),ur=r(`PROTO_STUN_CONFIDENCE`,.92),dr=r(`PROTO_QUIC_CONFIDENCE`,.88),fr=r(`PROTO_SOCKS5_CONFIDENCE`,.9),pr=r(`PROTO_H2_CONFIDENCE`,.9),mr=n(`BOT_DETECT_LIMIT_DEFAULT`,50);n(`BOT_DETECT_LIMIT_MIN`,1),n(`BOT_DETECT_LIMIT_MAX`,500),n(`FETCH_ABORT_TIMEOUT_MS`,1e4);const hr=n(`CAPTCHA_SUBMIT_TIMEOUT_MS`,15e3),gr=n(`CAPTCHA_POLL_INTERVAL_MS`,5e3),_r=n(`CAPTCHA_RESULT_TIMEOUT_MS`,1e4),vr=n(`CAPTCHA_DEFAULT_TIMEOUT_MS`,18e4),yr=n(`CAPTCHA_MIN_TIMEOUT_MS`,5e3),br=n(`CAPTCHA_MAX_TIMEOUT_MS`,6e5),xr=n(`CAPTCHA_MAX_RETRIES`,5),Sr=n(`CAPTCHA_DEFAULT_RETRIES`,2),Cr=n(`SANDBOX_EXEC_TIMEOUT_MS`,5e3),wr=n(`SANDBOX_MEMORY_LIMIT_MB`,128),Tr=n(`SANDBOX_STACK_SIZE_MB`,4),Er=n(`SANDBOX_TERMINATE_GRACE_MS`,2e3),Dr=n(`SANDBOX_MIN_MEMORY_LIMIT_BYTES`,256*1024),Or=n(`SANDBOX_MAX_MEMORY_LIMIT_MB`,512),kr=n(`SANDBOX_MAX_TIMEOUT_MS`,3e4),Ar=n(`SYMBOLIC_EXEC_MAX_PATHS`,100),jr=n(`SYMBOLIC_EXEC_MAX_DEPTH`,50),Mr=n(`SYMBOLIC_EXEC_TIMEOUT_MS`,3e4),Nr=n(`JSVMP_DEOBFUSCATE_TIMEOUT_MS`,3e4),Pr=n(`JSVMP_MAX_ITERATIONS`,100),Fr=n(`JSVMP_SYMBOLIC_MAX_STEPS`,1e3),Ir=n(`JSVMP_SYMBOLIC_TIMEOUT_MS`,3e4),Lr=i(`Z3_ENABLED`,!0),Rr=n(`Z3_INIT_TIMEOUT_MS`,5e3),zr=n(`Z3_SOLVE_TIMEOUT_MS`,1e4),Br=n(`Z3_BMC_MAX_GADGETS`,12),Vr=n(`PACKER_SANDBOX_TIMEOUT_MS`,3e3),Hr=n(`EXTERNAL_TOOL_TIMEOUT_MS`,3e4),Ur=n(`EXTERNAL_TOOL_PROBE_TIMEOUT_MS`,5e3),Wr=n(`EXTERNAL_TOOL_PROBE_CACHE_TTL_MS`,6e4),Gr=n(`EXTERNAL_TOOL_FORCE_KILL_GRACE_MS`,2e3),Kr=n(`EXTERNAL_TOOL_MAX_STDOUT_BYTES`,10*1024*1024),qr=n(`EXTERNAL_TOOL_MAX_STDERR_BYTES`,1*1024*1024),Jr=n(`FRIDA_TIMEOUT_MS`,15e3),Yr=n(`GHIDRA_TIMEOUT_MS`,12e4),Xr=n(`UNIDBG_TIMEOUT_MS`,6e4),Zr=n(`NATIVE_BRIDGE_TIMEOUT_MS`,15e3),Qr=n(`MOJO_MONITOR_TIMEOUT_MS`,1e4),$r=n(`V8_BYTECODE_SUBPROC_TIMEOUT_MS`,6e4),ei=n(`SYSCALL_TRACE_DURATION_DEFAULT_SEC`,10),ti=n(`SYSCALL_TRACE_DURATION_MIN_SEC`,1),ni=n(`SYSCALL_TRACE_DURATION_MAX_SEC`,300),ri=n(`NEMU_SESSION_IDLE_TTL_MS`,3e5),ii=n(`NEMU_SESSION_SWEEP_MS`,6e4),ai=n(`NEMU_MAX_SESSIONS`,64),oi=n(`BINARY_STRINGS_MIN_LENGTH_DEFAULT`,4),si=n(`BINARY_STRINGS_MIN_LENGTH_FLOOR`,2),ci=n(`BINARY_STRINGS_MIN_LENGTH_CEILING`,256),li=n(`BINARY_STRINGS_MAX_RESULTS_DEFAULT`,1e3),ui=n(`BINARY_STRINGS_MAX_RESULTS_LIMIT`,5e4),di=n(`BINARY_STRINGS_PRINTABLE_ASCII_MIN`,32),fi=n(`BINARY_STRINGS_PRINTABLE_ASCII_MAX`,126),pi=n(`TRANSFORM_WORKER_TIMEOUT_MS`,15e3);n(`TRANSFORM_VM_SCRIPT_TIMEOUT_MS`,5e3);const mi=n(`TRANSFORM_CRYPTO_POOL_MAX_WORKERS`,4),hi=n(`TRANSFORM_CRYPTO_POOL_IDLE_TIMEOUT_MS`,3e4),gi=n(`TRANSFORM_CRYPTO_POOL_MAX_OLD_GEN_MB`,64),_i=n(`TRANSFORM_CRYPTO_POOL_MAX_YOUNG_GEN_MB`,16);n(`EMULATOR_FETCH_GOTO_TIMEOUT_MS`,3e4),n(`ADV_DEOBF_LLM_MAX_TOKENS`,3e3),n(`VM_DEOBF_LLM_MAX_TOKENS`,4e3),n(`DEOBF_LLM_MAX_TOKENS`,2e3),n(`CRYPTO_DETECT_LLM_MAX_TOKENS`,2e3);const vi=n(`GRAPHQL_MAX_PREVIEW_CHARS`,4e3),yi=n(`GRAPHQL_MAX_SCHEMA_CHARS`,12e4),bi=n(`GRAPHQL_MAX_QUERY_CHARS`,12e3),xi=n(`GRAPHQL_MAX_GRAPH_NODES`,2e3),Si=n(`GRAPHQL_MAX_GRAPH_EDGES`,5e3),Ci=n(`WASM_TOOL_TIMEOUT_MS`,6e4);n(`WASM_OFFLINE_RUN_TIMEOUT_MS`,1e4);const wi=n(`WASM_OPTIMIZE_TIMEOUT_MS`,12e4),Ti=n(`WASM_DEAD_CODE_MIN_MATCHES`,10),Ei=n(`WASM_BITWISE_OPS_THRESHOLD`,20),Di=n(`WASM_VM_DISPATCH_MIN_LOOPS`,3),Oi=n(`ANALYSIS_MAX_SUMMARY_FILES`,40),ki=n(`ANALYSIS_MAX_SAFE_COLLECTED_BYTES`,256*1024),Ai=n(`ANALYSIS_MAX_SAFE_RESPONSE_BYTES`,220*1024);n(`MINIAPP_UNPACK_TIMEOUT_MS`,18e4);const ji=n(`DEBUGGER_WAIT_FOR_PAUSED_TIMEOUT_MS`,3e4),Mi=n(`WATCH_EVAL_TIMEOUT_MS`,5e3),Ni=n(`PROCESS_LAUNCH_WAIT_MS`,2e3),Pi=n(`WIN_DEBUG_PORT_POLL_ATTEMPTS`,20),Fi=n(`WIN_DEBUG_PORT_POLL_INTERVAL_MS`,500);n(`SOURCEMAP_EXT_TIMEOUT_MS`,15e3);const Ii=n(`SOURCEMAP_V4_RAW_FIELD_MAX_LEN`,200),Li=n(`SOURCEMAP_V4_RETRY_DELAY_MS`,250),Ri=n(`WS_PAYLOAD_PREVIEW_LIMIT`,200),zi=n(`WS_PAYLOAD_SAMPLE_LIMIT`,2e3),Bi=n(`PROXY_CAPTURE_BUFFER_MAX`,5e3),Vi=n(`PROXY_CAPTURE_RETURN_LIMIT`,100),Hi=n(`PROXY_CAPTURE_BODY_PREVIEW_BYTES`,16*1024),Ui=n(`PROXY_ADB_TIMEOUT_MS`,6e4),Wi=n(`PROXY_ADB_MAX_BUFFER_BYTES`,8*1024*1024),Gi=n(`WEBHOOK_PROCESS_TIMEOUT_MS`,1e4);n(`ORCHESTRATOR_STEP_TIMEOUT_MS`,1e4);const Ki=n(`MACRO_DEFAULT_TIMEOUT_MS`,12e4),qi=n(`MACRO_BUILTIN_TIMEOUT_MS`,6e4),Ji=n(`COORDINATION_GOTO_TIMEOUT_MS`,3e4),Yi=n(`JSHOOK_FRIDA_PROBE_TIMEOUT_MS`,1e4),Xi=a(`JSHOOK_TLS_KEYLOG_PATH`,`/tmp/sslkeylog.log`),Zi=n(`PROCESS_HOLLOWING_MAX_DUMP_SECTIONS`,3),Qi=n(`PROCESS_HOLLOWING_MAX_BYTES_PER_SECTION`,65536),$i=n(`JSHOOK_SYSCALL_TRACE_SPAWN_TIMEOUT_MS`,3e3);var ea=e({ACTIVATION_BOOST_WINDOW_MS:()=>O,ACTIVATION_COMPOUND_EVAL_EVERY:()=>E,ACTIVATION_COOLDOWN_MS:()=>T,ACTIVATION_EVENT_HISTORY_MAX:()=>D,ACTIVATION_TTL_MINUTES:()=>x,ADB_COLD_START_LOGCAT_TAIL_DEFAULT:()=>un,ADB_COLD_START_LOGCAT_TAIL_MAX:()=>fn,ADB_COLD_START_LOGCAT_TAIL_MIN:()=>dn,ADB_COLD_START_TIMELINE_LIMIT:()=>pn,ADB_COLD_START_WAIT_MS_DEFAULT:()=>cn,ADB_COLD_START_WAIT_MS_MAX:()=>ln,ADB_DEFAULT_TIMEOUT_MS:()=>Yt,ADB_FILE_TRANSFER_TIMEOUT_MS:()=>$t,ADB_GETPROP_MAX_PROPERTIES:()=>tn,ADB_LARGE_OUTPUT_MAX_BUFFER_BYTES:()=>Qt,ADB_LOGCAT_MAX_LINES_DEFAULT:()=>on,ADB_LOGCAT_MAX_LINES_MAX:()=>sn,ADB_LOGCAT_TAIL_DEFAULT:()=>rn,ADB_LOGCAT_TAIL_MAX:()=>an,ADB_MAX_BUFFER_BYTES:()=>Zt,ADB_PACKAGE_COMPONENT_LIMIT:()=>en,ADB_SHELL_TIMEOUT_MS:()=>Xt,ADB_WEBVIEW_HOST_PORT_DEFAULT:()=>mn,ANALYSIS_MAX_SAFE_COLLECTED_BYTES:()=>ki,ANALYSIS_MAX_SAFE_RESPONSE_BYTES:()=>Ai,ANALYSIS_MAX_SUMMARY_FILES:()=>Oi,APK_ZIP_MAGIC_HEX_HEADERS:()=>nn,AUTOPRUNE_AUTO_INACTIVITY_MS:()=>S,AUTOPRUNE_CHECK_INTERVAL_MS:()=>w,AUTOPRUNE_MANUAL_INACTIVITY_MS:()=>C,BINARY_STRINGS_MAX_RESULTS_DEFAULT:()=>li,BINARY_STRINGS_MAX_RESULTS_LIMIT:()=>ui,BINARY_STRINGS_MIN_LENGTH_CEILING:()=>ci,BINARY_STRINGS_MIN_LENGTH_DEFAULT:()=>oi,BINARY_STRINGS_MIN_LENGTH_FLOOR:()=>si,BINARY_STRINGS_PRINTABLE_ASCII_MAX:()=>fi,BINARY_STRINGS_PRINTABLE_ASCII_MIN:()=>di,BOT_DETECT_LIMIT_DEFAULT:()=>mr,BREAKPOINT_HIT_TIMEOUT_MS:()=>Gt,BREAKPOINT_TRACE_MAX_HITS:()=>Kt,CACHE_GLOBAL_MAX_SIZE_BYTES:()=>H,CACHE_LOW_HIT_RATE_THRESHOLD:()=>U,CAPTCHA_DEFAULT_RETRIES:()=>Sr,CAPTCHA_DEFAULT_TIMEOUT_MS:()=>vr,CAPTCHA_MAX_RETRIES:()=>xr,CAPTCHA_MAX_TIMEOUT_MS:()=>br,CAPTCHA_MIN_TIMEOUT_MS:()=>yr,CAPTCHA_POLL_INTERVAL_MS:()=>gr,CAPTCHA_RESULT_TIMEOUT_MS:()=>_r,CAPTCHA_SCREENSHOT_FALLBACK_DIR:()=>CAPTCHA_SCREENSHOT_FALLBACK_DIR,CAPTCHA_SOLVER_BASE_URL:()=>h,CAPTCHA_SUBMIT_TIMEOUT_MS:()=>hr,CDP_JSON_LIST_PATH:()=>CDP_JSON_LIST_PATH,CDP_JSON_VERSION_PATH:()=>CDP_JSON_VERSION_PATH,CDP_LOOPBACK_HOST:()=>CDP_LOOPBACK_HOST,CODE_CAVE_MIN_SIZE:()=>Wt,COMPOUND_EVENT_WINDOW_MS:()=>k,COMPOUND_LONG_WINDOW_MS:()=>A,COORDINATION_GOTO_TIMEOUT_MS:()=>Ji,DART_ALLOWED_REGEX_FLAGS:()=>Cn,DART_CHUNK_OVERLAP_BYTES:()=>_n,DART_DEFAULT_ENCODING:()=>$,DART_MAX_CHUNK_BYTES:()=>gn,DART_MAX_FILES_PER_PACKAGE:()=>Dn,DART_MAX_MAP_BYTES:()=>Tn,DART_MAX_OFFSETS_PER_STRING:()=>bn,DART_MAX_PACKAGES_PER_RESULT:()=>En,DART_MAX_REGEX_PATTERN_LENGTH:()=>xn,DART_MAX_SESSIONS:()=>In,DART_MAX_SMI_VALUE:()=>wn,DART_MIN_LENGTH:()=>hn,DART_PP_MAX_DUMP_DURATION_MS:()=>Nn,DART_PP_MAX_SLOTS:()=>jn,DART_PP_PREVIEW_BYTES:()=>Mn,DART_PRINTABLE_ASCII_MAX:()=>yn,DART_PRINTABLE_ASCII_MIN:()=>vn,DART_REGEX_TIMEOUT_MS:()=>Sn,DART_SESSION_IDLE_TTL_MS:()=>Pn,DART_SESSION_SWEEP_MS:()=>Fn,DART_SNAPSHOT_HEADER_SCAN_MAX_BYTES:()=>kn,DART_SNAPSHOT_MAX_FILE_BYTES:()=>On,DART_SNAPSHOT_TABLE_PATH:()=>An,DEBUGGER_WAIT_FOR_PAUSED_TIMEOUT_MS:()=>ji,DEBUG_PORT_CANDIDATES:()=>d,DEFAULT_DEBUG_PORT:()=>f,DETAILED_DATA_DEFAULT_TTL_MS:()=>W,DETAILED_DATA_MAX_TTL_MS:()=>G,DETAILED_DATA_SMART_THRESHOLD_BYTES:()=>K,DOM_QUERY_DEFAULT_LIMIT:()=>Wn,DOM_WAIT_ELEMENT_TIMEOUT_MS:()=>Gn,EXTENSION_GIT_CHECKOUT_TIMEOUT_MS:()=>M,EXTENSION_GIT_CLONE_TIMEOUT_MS:()=>j,EXTERNAL_TOOL_FORCE_KILL_GRACE_MS:()=>Gr,EXTERNAL_TOOL_MAX_STDERR_BYTES:()=>qr,EXTERNAL_TOOL_MAX_STDOUT_BYTES:()=>Kr,EXTERNAL_TOOL_PROBE_CACHE_TTL_MS:()=>Wr,EXTERNAL_TOOL_PROBE_TIMEOUT_MS:()=>Ur,EXTERNAL_TOOL_TIMEOUT_MS:()=>Hr,FONT_FALLBACK_PROBE_LIST:()=>Zn,FONT_LOCAL_ENUMERATE_MAX:()=>Qn,FREEZE_DEFAULT_INTERVAL_MS:()=>qt,FRIDA_TIMEOUT_MS:()=>Jr,GHIDRA_BRIDGE_ENDPOINT:()=>p,GHIDRA_TIMEOUT_MS:()=>Yr,GRAPHQL_MAX_GRAPH_EDGES:()=>Si,GRAPHQL_MAX_GRAPH_NODES:()=>xi,GRAPHQL_MAX_PREVIEW_CHARS:()=>vi,GRAPHQL_MAX_QUERY_CHARS:()=>bi,GRAPHQL_MAX_SCHEMA_CHARS:()=>yi,HEAP_ENUMERATE_MAX_BLOCKS:()=>Bt,HEAP_SPRAY_SIZE_TOLERANCE:()=>Ht,HEAP_SPRAY_THRESHOLD:()=>Vt,HEAP_SUSPICIOUS_BLOCK_SIZE:()=>Ut,HTTP_CLEANUP_INTERVAL_MS:()=>F,HTTP_RATE_LIMIT_MAX_IPS:()=>P,ICMP_DEFAULT_PACKET_SIZE:()=>rr,ICMP_PROBE_TIMEOUT_MS:()=>tr,ICMP_TRACEROUTE_MAX_HOPS:()=>nr,IDA_BRIDGE_ENDPOINT:()=>m,JSVMP_DEOBFUSCATE_TIMEOUT_MS:()=>Nr,JSVMP_MAX_ITERATIONS:()=>Pr,JSVMP_SYMBOLIC_MAX_STEPS:()=>Fr,JSVMP_SYMBOLIC_TIMEOUT_MS:()=>Ir,MACRO_BUILTIN_TIMEOUT_MS:()=>qi,MACRO_DEFAULT_TIMEOUT_MS:()=>Ki,MCP_ARTIFACTS_HAR_DIR:()=>MCP_ARTIFACTS_HAR_DIR,MCP_ARTIFACTS_REPORTS_DIR:()=>MCP_ARTIFACTS_REPORTS_DIR,MCP_COMPACT_SCHEMA:()=>N,MCP_HTTP_FORCE_CLOSE_TIMEOUT_MS:()=>y,MCP_HTTP_HEADERS_TIMEOUT_MS:()=>_,MCP_HTTP_KEEPALIVE_TIMEOUT_MS:()=>v,MCP_HTTP_REQUEST_TIMEOUT_MS:()=>g,MCP_LOG_ENABLED:()=>I,MCP_LOG_FILE_DIR:()=>R,MCP_LOG_LEVEL:()=>L,MEMORY_AUDIT_TRAIL_CAPACITY:()=>bt,MEMORY_AVAILABILITY_CACHE_TTL_MS:()=>yt,MEMORY_DUMP_TIMEOUT_MS:()=>at,MEMORY_ENUM_REGIONS_MAX_BUFFER_BYTES:()=>ft,MEMORY_ENUM_REGIONS_RETURN_LIMIT:()=>dt,MEMORY_INJECT_TIMEOUT_MS:()=>mt,MEMORY_MAX_READ_BYTES:()=>nt,MEMORY_MAX_WRITE_BYTES:()=>it,MEMORY_MODULES_TIMEOUT_MS:()=>wt,MEMORY_PROBE_CMD_TIMEOUT_MS:()=>St,MEMORY_PROCESS_SIGNAL_TIMEOUT_MS:()=>xt,MEMORY_PROTECTION_PWSH_TIMEOUT_MS:()=>_t,MEMORY_PROTECTION_QUERY_TIMEOUT_MS:()=>gt,MEMORY_READ_TIMEOUT_MS:()=>tt,MEMORY_SCAN_MAX_BUFFER_BYTES:()=>st,MEMORY_SCAN_MAX_REGIONS:()=>lt,MEMORY_SCAN_MAX_RESULTS:()=>ct,MEMORY_SCAN_REGION_MAX_BYTES:()=>ut,MEMORY_SCAN_TIMEOUT_MS:()=>ot,MEMORY_SYSCALL_EVASION:()=>et,MEMORY_VMMAP_ENUM_TIMEOUT_MS:()=>Ct,MEMORY_VMMAP_MAX_BUFFER_BYTES:()=>pt,MEMORY_VMMAP_TIMEOUT_MS:()=>ht,MEMORY_WRITE_TIMEOUT_MS:()=>rt,MOJO_FRIDA_PROBE_TIMEOUT_MS:()=>Yi,MOJO_MONITOR_TIMEOUT_MS:()=>Qr,NATIVE_ADMIN_CHECK_TIMEOUT_MS:()=>vt,NATIVE_BRIDGE_TIMEOUT_MS:()=>Zr,NEMU_MAX_SESSIONS:()=>ai,NEMU_SESSION_IDLE_TTL_MS:()=>ri,NEMU_SESSION_SWEEP_MS:()=>ii,NETWORK_HAR_BODY_CONCURRENCY:()=>er,NETWORK_REPLAY_MAX_REDIRECTS:()=>$n,OFFLOAD_FIELD_SANITIZE_THRESHOLD_BYTES:()=>q,PACKER_SANDBOX_TIMEOUT_MS:()=>Vr,PAGE_FRAME_SELECTOR_TIMEOUT_MS:()=>Hn,PAGE_NETWORK_IDLE_TIMEOUT_MS:()=>Un,POINTER_CHAIN_MAX_DEPTH:()=>Nt,POINTER_CHAIN_MAX_OFFSET:()=>Pt,POINTER_CHAIN_MAX_RESULTS:()=>Ft,POINTER_CHAIN_SCAN_CHUNK_SIZE:()=>It,PREDICTIVE_CONFIDENCE_THRESHOLD:()=>Ve,PREDICTIVE_DECAY_FACTOR:()=>He,PREDICTIVE_MAX_HISTORY:()=>Be,PREDICTIVE_MAX_SECOND_ORDER_KEYS:()=>Ue,PROCESS_HOLLOWING_MAX_BYTES_PER_SECTION:()=>Qi,PROCESS_HOLLOWING_MAX_DUMP_SECTIONS:()=>Zi,PROCESS_LAUNCH_WAIT_MS:()=>Ni,PROCESS_LIST_MAX_BUFFER_BYTES:()=>J,PROTO_H2_CONFIDENCE:()=>pr,PROTO_HTTP_CONFIDENCE:()=>sr,PROTO_MQTT_CONFIDENCE:()=>lr,PROTO_QUIC_CONFIDENCE:()=>dr,PROTO_SOCKS5_CONFIDENCE:()=>fr,PROTO_SSH_CONFIDENCE:()=>cr,PROTO_STUN_CONFIDENCE:()=>ur,PROTO_TLS_CONFIDENCE:()=>ar,PROTO_TLS_MIN_RECORD_LEN:()=>ir,PROTO_WS_CONFIDENCE:()=>or,PROXY_ADB_MAX_BUFFER_BYTES:()=>Wi,PROXY_ADB_TIMEOUT_MS:()=>Ui,PROXY_CAPTURE_BODY_PREVIEW_BYTES:()=>Hi,PROXY_CAPTURE_BUFFER_MAX:()=>Bi,PROXY_CAPTURE_RETURN_LIMIT:()=>Vi,RERANK_BROWSER_ATTACH_BOOST:()=>Xe,RERANK_BROWSER_LAUNCH_BOOST:()=>Ye,RERANK_MAINTENANCE_PENALTY:()=>We,RERANK_NETWORK_GET_REQUESTS_BOOST:()=>Qe,RERANK_NETWORK_MONITOR_BOOST:()=>Ze,RERANK_STATELESS_COMPUTE_BOOST:()=>qe,RERANK_STATELESS_CORE_PENALTY:()=>Ke,RERANK_STATELESS_INTERACTIVE_PENALTY:()=>Ge,RERANK_STATELESS_SPECIFIC_TOOL_BOOST:()=>Je,RUNTIME_ERROR_THRESHOLD:()=>u,RUNTIME_ERROR_WINDOW_MS:()=>l,SANDBOX_EXEC_TIMEOUT_MS:()=>Cr,SANDBOX_MAX_MEMORY_LIMIT_MB:()=>Or,SANDBOX_MAX_TIMEOUT_MS:()=>kr,SANDBOX_MEMORY_LIMIT_MB:()=>wr,SANDBOX_MIN_MEMORY_LIMIT_BYTES:()=>Dr,SANDBOX_STACK_SIZE_MB:()=>Tr,SANDBOX_TERMINATE_GRACE_MS:()=>Er,SCAN_DISPLAY_RESULTS_LIMIT:()=>Dt,SCAN_GROUP_MAX_PATTERN_SIZE:()=>At,SCAN_MAX_RESULTS_PER_SCAN:()=>Et,SCAN_POINTER_MAX_RESULTS:()=>kt,SCAN_SESSION_MAX_COUNT:()=>jt,SCAN_SESSION_TTL_MS:()=>Mt,SCAN_UNKNOWN_INITIAL_MAX_ADDRESSES:()=>Ot,SCRIPTS_MAX_CAP:()=>Kn,SEARCH_AFFINITY_BASE_WEIGHT:()=>Ie,SEARCH_AFFINITY_BOOST_FACTOR:()=>Z,SEARCH_AFFINITY_TOP_N:()=>Q,SEARCH_AUTO_ACTIVATE_DOMAINS:()=>X,SEARCH_BM25_B:()=>me,SEARCH_BM25_K1:()=>pe,SEARCH_CACHE_VECTOR_WEIGHT_TOLERANCE:()=>ie,SEARCH_COVERAGE_PRECISION_FACTOR:()=>Le,SEARCH_DOMAIN_HUB_BOOST_MULTIPLIER:()=>Fe,SEARCH_DOMAIN_HUB_THRESHOLD:()=>ne,SEARCH_EXACT_NAME_MATCH_MULTIPLIER:()=>Pe,SEARCH_PARAM_TOKEN_WEIGHT:()=>de,SEARCH_PREFIX_MATCH_MULTIPLIER:()=>Re,SEARCH_QUERY_CACHE_CAPACITY:()=>re,SEARCH_RECENCY_MAX_BOOST:()=>Me,SEARCH_RECENCY_TRACKER_MAX:()=>Ne,SEARCH_RECENCY_WINDOW_MS:()=>je,SEARCH_RRF_BM25_BLEND:()=>le,SEARCH_RRF_K:()=>se,SEARCH_RRF_RESCALE_FACTOR:()=>ce,SEARCH_SCENE_KEYWORD_WEIGHT:()=>fe,SEARCH_SELF_RAG_ENABLED:()=>ze,SEARCH_SYNONYM_EXPANSION_LIMIT:()=>ue,SEARCH_TIER_PENALTY:()=>De,SEARCH_TIER_PENALTY_FULL:()=>Ae,SEARCH_TIER_PENALTY_SEARCH:()=>Oe,SEARCH_TIER_PENALTY_WORKFLOW:()=>ke,SEARCH_TRIGRAM_THRESHOLD:()=>oe,SEARCH_TRIGRAM_WEIGHT:()=>ae,SEARCH_VECTOR_BM25_SKIP_THRESHOLD:()=>Se,SEARCH_VECTOR_CACHE_ENABLED:()=>Ee,SEARCH_VECTOR_COSINE_WEIGHT:()=>_e,SEARCH_VECTOR_DYNAMIC_WEIGHT:()=>ve,SEARCH_VECTOR_ENABLED:()=>he,SEARCH_VECTOR_LEARN_DOWN:()=>be,SEARCH_VECTOR_LEARN_TOP_N:()=>xe,SEARCH_VECTOR_LEARN_UP:()=>ye,SEARCH_VECTOR_MODEL_ID:()=>ge,SEARCH_VECTOR_PREWARM:()=>Ce,SEARCH_VECTOR_RETRY_COOLDOWN_MS:()=>Te,SEARCH_VECTOR_WORKER_IDLE_MS:()=>we,SEARCH_WORKFLOW_DOMAIN_BOOST_MULTIPLIER:()=>Y,SHUTDOWN_TIMEOUT_MS:()=>c,SOURCEMAP_V4_RAW_FIELD_MAX_LEN:()=>Ii,SOURCEMAP_V4_RETRY_DELAY_MS:()=>Li,STRUCT_ANALYZE_DEFAULT_SIZE:()=>Lt,STRUCT_RTTI_MAX_STRING_LEN:()=>zt,STRUCT_VTABLE_MAX_FUNCTIONS:()=>Rt,SYMBOLIC_EXEC_MAX_DEPTH:()=>jr,SYMBOLIC_EXEC_MAX_PATHS:()=>Ar,SYMBOLIC_EXEC_TIMEOUT_MS:()=>Mr,SYSCALL_TRACE_DURATION_DEFAULT_SEC:()=>ei,SYSCALL_TRACE_DURATION_MAX_SEC:()=>ni,SYSCALL_TRACE_DURATION_MIN_SEC:()=>ti,SYSCALL_TRACE_SPAWN_TIMEOUT_MS:()=>$i,TLS_KEYLOG_PATH:()=>Xi,TOKEN_BUDGET_MAX_TOKENS:()=>b,TRANSFORM_CRYPTO_POOL_IDLE_TIMEOUT_MS:()=>hi,TRANSFORM_CRYPTO_POOL_MAX_OLD_GEN_MB:()=>gi,TRANSFORM_CRYPTO_POOL_MAX_WORKERS:()=>mi,TRANSFORM_CRYPTO_POOL_MAX_YOUNG_GEN_MB:()=>_i,TRANSFORM_WORKER_TIMEOUT_MS:()=>pi,UNIDBG_TIMEOUT_MS:()=>Xr,USERSPACE_MAX_ADDRESS:()=>Tt,V8_BYTECODE_SUBPROC_TIMEOUT_MS:()=>$r,WASM_BITWISE_OPS_THRESHOLD:()=>Ei,WASM_DEAD_CODE_MIN_MATCHES:()=>Ti,WASM_OPTIMIZE_TIMEOUT_MS:()=>wi,WASM_TOOL_TIMEOUT_MS:()=>Ci,WASM_VM_DISPATCH_MIN_LOOPS:()=>Di,WATCH_EVAL_TIMEOUT_MS:()=>Mi,WEBHOOK_PROCESS_TIMEOUT_MS:()=>Gi,WIN_DEBUG_PORT_POLL_ATTEMPTS:()=>Pi,WIN_DEBUG_PORT_POLL_INTERVAL_MS:()=>Fi,WORKER_POOL_IDLE_TIMEOUT_MS:()=>B,WORKER_POOL_JOB_TIMEOUT_MS:()=>V,WORKER_POOL_MAX_WORKERS:()=>$e,WORKER_POOL_MIN_WORKERS:()=>z,WORKER_SCRIPT_COLLECT_WAIT_MS:()=>Yn,WORKER_SCRIPT_MAX:()=>qn,WORKER_SCRIPT_SOURCE_MAX_BYTES:()=>Jn,WORKER_TARGET_TYPES:()=>Xn,WORKFLOW_BUNDLE_CACHE_MAX_BYTES:()=>Vn,WORKFLOW_BUNDLE_CACHE_TTL_MS:()=>Bn,WORKFLOW_JS_BUNDLE_FETCH_TIMEOUT_MS:()=>zn,WORKFLOW_JS_BUNDLE_MAX_REDIRECTS:()=>Rn,WORKFLOW_JS_BUNDLE_MAX_SIZE_BYTES:()=>Ln,WRITE_HISTORY_MAX:()=>Jt,WS_PAYLOAD_PREVIEW_LIMIT:()=>Ri,WS_PAYLOAD_SAMPLE_LIMIT:()=>zi,Z3_BMC_MAX_GADGETS:()=>Br,Z3_ENABLED:()=>Lr,Z3_INIT_TIMEOUT_MS:()=>Rr,Z3_SOLVE_TIMEOUT_MS:()=>zr,autoInt:()=>te,bool:()=>i,cpuCount:()=>s,csv:()=>o,float:()=>r,int:()=>n,list:()=>ee,str:()=>a});export{Wr as $,Ce as $i,sn as $n,Rt as $r,ur as $t,Ei as A,_ as Aa,Ne as Ai,hn as An,lt as Ar,Lr as At,mi as B,c as Ba,Oe as Bi,On as Bn,Nt as Br,hr as Bt,xi as C,j as Ca,Fe as Ci,Dn as Cn,wt as Cr,Dr as Ct,Ni as D,m as Da,Re as Di,xn as Dn,gt as Dr,Ar as Dt,yi as E,P as Ea,de as Ei,En,_t as Er,jr as Et,Mi as F,L as Fa,fe as Fi,vn as Fn,Ct as Fr,xr as Ft,ci as G,Ee as Gi,pn as Gn,At as Gr,er as Gt,pi as H,B as Ha,oe as Hi,un as Hn,Ft as Hr,rr as Ht,Pi as I,q as Ia,ze as Ii,Sn as In,pt as Ir,br as It,fi as J,he as Ji,Yt as Jn,jt as Jr,sr as Jt,oi as K,_e as Ki,cn as Kn,Et as Kr,$n as Kt,Fi as L,J as La,ue as Li,Pn as Ln,ht as Lr,yr as Lt,wi as M,g as Ma,le as Mi,jn as Mn,ut as Mr,zr as Mt,Ci as N,I as Na,se as Ni,Mn as Nn,ot as Nr,Sr as Nt,Ii as O,N as Oa,re as Oi,In as On,tt as Or,Mr as Ot,Di as P,R as Pa,ce as Pi,yn as Pn,et as Pr,vr as Pt,Kr as Q,ge as Qi,on as Qn,zt as Qr,cr as Qt,hi as R,u as Ra,De as Ri,Fn as Rn,rt as Rr,gr as Rt,Si as S,M as Sa,Le as Si,gn as Sn,it as Sr,wr as St,bi as T,F as Ta,Pe as Ti,bn as Tn,xt as Tr,Er as Tt,li as U,V as Ua,ae as Ui,fn as Un,It as Ur,tr as Ut,_i as V,b as Va,ke as Vi,An as Vn,Pt as Vr,mr as Vt,ui as W,z as Wa,Se as Wi,dn as Wn,Dt as Wr,nr as Wt,Gr as X,xe as Xi,tn as Xn,Ot as Xr,dr as Xt,di as Y,be as Yi,$t as Yn,Mt as Yr,lr as Yt,qr as Z,ye as Zi,Qt as Zn,Lt as Zr,fr as Zt,zi as _,d as _a,Q as _i,Rn as _n,at as _r,Ir as _t,Xi as a,E as aa,Ue as ai,Zn as an,mn as ar,Zr as at,Oi as b,G as ba,pe as bi,_n as bn,mt as br,Or as bt,qi as c,x as ca,We as ci,Un as cn,Kt as cr,ii as ct,Wi as d,C as da,qe as di,qn as dn,Bt as dr,ti as dt,Te as ea,Tt as ei,ar as en,rn as er,Ur as et,Ui as f,H as fa,Ke as fi,Jn as fn,Ht as fr,Xr as ft,Ri as g,A as ga,Z as gi,zn as gn,yt as gr,Fr as gt,Vi as h,k as ha,Ie as hi,Bn as hn,bt as hr,Pr as ht,Zi as i,O as ia,Be as ii,Gn as in,Xt as ir,Qr as it,Ti as j,v as ja,je as ji,Nn as jn,ct as jr,Rr as jt,Li as k,y as ka,Me as ki,wn as kn,st as kr,Br as kt,Ki as l,S as la,Qe as li,Kn as ln,Wt as lr,ei as lt,Bi as m,h as ma,Je as mi,Vn as mn,Ut as mr,Nr as mt,$i as n,Y as na,Ve as ni,or as nn,Zt as nr,Jr as nt,Yi as o,T as oa,Xe as oi,Qn as on,nn as or,ai as ot,Hi as p,U as pa,Ge as pi,Xn as pn,Vt as pr,$r as pt,si as q,ve as qi,ln as qn,kt as qr,pr as qt,Qi as r,$e as ra,He as ri,Wn as rn,en as rr,Yr as rt,Ji as s,D as sa,Ye as si,Hn as sn,Gt as sr,ri as st,ea as t,we as ta,Jt as ti,ir as tn,an as tr,Hr as tt,Gi as u,w as ua,Ze as ui,Yn as un,qt as ur,ni as ut,ki as v,f as va,X as vi,Ln as vn,ft as vr,Vr as vt,vi as w,p as wa,ne as wi,Tn as wn,St as wr,Tr as wt,ji as x,K as xa,ie as xi,$ as xn,nt as xr,kr as xt,Ai as y,W as ya,me as yi,Cn as yn,dt as yr,Cr as yt,gi as z,l as za,Ae as zi,kn as zn,vt as zr,_r as zt};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import{s as e}from"./constants-nvsLpSri.mjs";import{t}from"./ToolError-g3rjWzhx.mjs";import{t as n}from"./response-R8ghbZSb.mjs";import{c as r,i,n as a,s as o,u as s}from"./parse-args-B6dwWc9k.mjs";import{r as c}from"./ResponseBuilder-BLicSCjn.mjs";import"./definitions-D1dxl8qt.mjs";import{randomUUID as l}from"node:crypto";function u(e){return e.replace(/[.+?^${}()|[\]\\]/g,`\\$&`)}function d(e,t){return t?RegExp(`^${t.split(`*`).map(e=>u(e)).join(`.*`)}$`).test(e):!0}var f=class{state=new Map;history=new Map;watches=new Map;maxHistoryPerKey=100;maxWatches=200;watchIdleTtlMs=30*6e4;mutationSeq=0;lastPersistedSeq=0;persistNotifier;pruneExpiredWatches(){let e=Date.now(),t=0;for(let[n,r]of this.watches)r.expiresAt<e&&(this.watches.delete(n),t++);if(this.watches.size>this.maxWatches){let e=[...this.watches.entries()].toSorted((e,t)=>e[1].lastChecked-t[1].lastChecked),n=this.watches.size-this.maxWatches;for(let r=0;r<n;r++){let n=e[r];n&&(this.watches.delete(n[0]),t++)}}return t}setPersistNotifier(e){this.persistNotifier=e}markDirty(){this.mutationSeq++,this.persistNotifier?.()}recordChange(e,t){this.markDirty();let n=this.history.get(e);n||(n=[],this.history.set(e,n)),n.push(t),n.length>this.maxHistoryPerKey&&n.splice(0,n.length-this.maxHistoryPerKey)}deleteEntry(e){let t=this.state.get(e);t&&(this.state.delete(e),this.recordChange(e,{id:l().slice(0,8),key:t.key,namespace:t.namespace,action:`delete`,oldValue:t.value,timestamp:Date.now()}))}isExpired(e){return!!(e.expiresAt&&Date.now()>e.expiresAt)}cleanupExpired(){let e=Date.now(),t=0;for(let[n,r]of this.state.entries())r.expiresAt&&e>r.expiresAt&&(this.state.delete(n),this.recordChange(n,{id:l().slice(0,8),key:r.key,namespace:r.namespace,action:`expire`,oldValue:r.value,timestamp:e}),t++);return t}getSnapshotSeq(){return this.mutationSeq}getLastPersistedSeq(){return this.lastPersistedSeq}markPersisted(){this.lastPersistedSeq=this.mutationSeq}isPersistDirty(){return this.mutationSeq!==this.lastPersistedSeq}exportSnapshot(){return{schemaVersion:1,savedAt:new Date().toISOString(),entries:[...this.state.entries()],history:[...this.history.entries()]}}restoreSnapshot(e){if(!e||typeof e!=`object`)return;let t=e;if(t.schemaVersion!==1)return;let n=Date.now();if(this.state.clear(),this.history.clear(),t.entries)for(let[e,r]of t.entries)r.expiresAt&&n>r.expiresAt||this.state.set(e,r);if(t.history)for(let[e,n]of t.history)this.history.set(e,n);this.mutationSeq=this.state.size,this.lastPersistedSeq=this.mutationSeq}},p=class{store;constructor(e){this.store=e}async handleSet(e){let t=s(e,`key`);if(!t)throw Error(`key must be a non-empty string`);let n=e.value,a=r(e,`namespace`,`default`),o=i(e,`ttlSeconds`),c=`${a}:${t}`,u=Date.now(),d=this.store.state.get(c),f=d?.version??0,p=d?.value,m={key:t,value:n,namespace:a,createdAt:d?.createdAt??u,updatedAt:u,ttlSeconds:o,expiresAt:o?u+o*1e3:void 0,version:f+1};return this.store.state.set(c,m),this.store.recordChange(c,{id:l().slice(0,8),key:t,namespace:a,action:`set`,oldValue:p,newValue:n,timestamp:u}),{success:!0,key:t,namespace:a,version:m.version,expiresAt:m.expiresAt?new Date(m.expiresAt).toISOString():void 0}}async handleGet(e){let t=s(e,`key`);if(!t)throw Error(`key must be a non-empty string`);let n=r(e,`namespace`,`default`),i=`${n}:${t}`,a=this.store.state.get(i);return a?this.store.isExpired(a)?(this.store.deleteEntry(i),{found:!1,key:t,namespace:n,expired:!0}):{found:!0,key:t,namespace:n,value:a.value,version:a.version,createdAt:new Date(a.createdAt).toISOString(),updatedAt:new Date(a.updatedAt).toISOString(),ttlSeconds:a.ttlSeconds,expiresAt:a.expiresAt?new Date(a.expiresAt).toISOString():void 0}:{found:!1,key:t,namespace:n}}async handleDelete(e){let t=s(e,`key`);if(!t)throw Error(`key must be a non-empty string`);let n=r(e,`namespace`,`default`),i=`${n}:${t}`;return this.store.state.get(i)?(this.store.deleteEntry(i),{deleted:!0,key:t,namespace:n}):{deleted:!1,key:t,namespace:n,reason:`not_found`}}async handleList(e){let t=r(e,`namespace`),n=a(e,`includeValues`,!1),i=[],o=[];for(let e of this.store.state.values())if(!(t&&e.namespace!==t)){if(this.store.isExpired(e)){o.push(`${e.namespace}:${e.key}`);continue}i.push({key:e.key,namespace:e.namespace,version:e.version,updatedAt:new Date(e.updatedAt).toISOString(),...n?{value:e.value}:{}})}for(let e of o)this.store.deleteEntry(e);return i.sort((e,t)=>e.namespace===t.namespace?e.key.localeCompare(t.key):e.namespace.localeCompare(t.namespace)),{entries:i,total:i.length,namespaces:[...new Set(i.map(e=>e.namespace))]}}async handleClear(e){let t=r(e,`namespace`),n=r(e,`keyPattern`),i=[];for(let[e,r]of this.store.state.entries())t&&r.namespace!==t||d(r.key,n)&&i.push(e);for(let e of i)this.store.deleteEntry(e);return{cleared:i.length,namespace:t??`all`,pattern:n}}async handleStats(){let e=Date.now(),t={},n=0;for(let[,r]of this.store.state.entries()){if(r.expiresAt&&e>r.expiresAt){n++;continue}t[r.namespace]=(t[r.namespace]??0)+1}let r=0;for(let e of this.store.history.values())r+=e.length;return{totalEntries:Object.values(t).reduce((e,t)=>e+t,0),entriesByNamespace:t,expiredEntries:n,totalWatches:this.store.watches.size,historySize:r}}},m=class{store;constructor(e){this.store=e}async handleWatch(e){let t=s(e,`key`);if(!t)throw Error(`key must be a non-empty string`);let n=r(e,`namespace`,`default`),a=i(e,`pollIntervalMs`,1e3);this.store.pruneExpiredWatches();let o=`watch_${l().slice(0,8)}`,c=t.includes(`*`),u=Date.now(),f={id:o,key:t,namespace:n,pattern:c,pollIntervalMs:a,lastChecked:u,lastVersion:{},createdAt:u,expiresAt:u+this.store.watchIdleTtlMs},p=`${n}:`;for(let[e,n]of this.store.state.entries())e.startsWith(p)&&(c?d(n.key,t)&&(f.lastVersion[n.key]=n.version):n.key===t&&(f.lastVersion[n.key]=n.version));return this.store.watches.set(o,f),{watchId:o,key:t,namespace:n,pattern:c,pollIntervalMs:a,initialKeys:Object.keys(f.lastVersion)}}async handleUnwatch(e){let t=s(e,`watchId`),n=this.store.watches.get(t);return n?(this.store.watches.delete(t),{removed:!0,watchId:t,wasWatching:n.key}):{removed:!1,watchId:t,reason:`not_found`}}async handlePoll(e){let t=s(e,`watchId`),n=this.store.watches.get(t);if(!n)throw Error(`Watch "${t}" not found`);let r=Date.now(),i=[],a=`${n.namespace}:`;if(n.pattern){for(let[e,t]of this.store.state.entries())if(e.startsWith(a)&&d(t.key,n.key)){let e=n.lastVersion[t.key];e===void 0?i.push({key:t.key,namespace:t.namespace,action:`created`}):t.version>e&&i.push({key:t.key,namespace:t.namespace,action:`changed`}),n.lastVersion[t.key]=t.version}for(let e of Object.keys(n.lastVersion))!this.store.state.has(`${n.namespace}:${e}`)&&d(e,n.key)&&(i.push({key:e,namespace:n.namespace,action:`deleted`}),delete n.lastVersion[e])}else{let e=`${n.namespace}:${n.key}`,t=this.store.state.get(e),r=n.lastVersion[n.key];!t&&r!==void 0?(i.push({key:n.key,namespace:n.namespace,action:`deleted`}),delete n.lastVersion[n.key]):t&&(r===void 0?i.push({key:t.key,namespace:t.namespace,action:`created`}):t.version>r&&i.push({key:t.key,namespace:t.namespace,action:`changed`}),n.lastVersion[n.key]=t.version)}return n.lastChecked=r,n.expiresAt=r+this.store.watchIdleTtlMs,{watchId:t,changes:i,hasChanges:i.length>0,checkedAt:new Date(r).toISOString()}}},h=class{store;constructor(e){this.store=e}async handleHistory(e){let t=s(e,`key`),n=r(e,`namespace`,`default`),a=i(e,`limit`,50),o=`${n}:${t}`,c=this.store.history.get(o)??[],l=[...c].toSorted((e,t)=>t.timestamp-e.timestamp).slice(0,a);return{key:t,namespace:n,history:l.map(e=>({...e,timestamp:new Date(e.timestamp).toISOString()})),total:c.length,returned:l.length}}async handleExport(e){let t=r(e,`namespace`),n=r(e,`keyPattern`),i=Date.now(),a={};for(let[e,r]of this.store.state.entries())t&&r.namespace!==t||d(r.key,n)&&(r.expiresAt&&i>r.expiresAt||(a[r.key]=r.value));return{data:a,count:Object.keys(a).length,namespace:t??`all`,exportedAt:new Date(i).toISOString()}}async handleImport(e){let t=o(e,`data`),n=r(e,`namespace`,`default`),i=a(e,`overwrite`,!1);if(!t)throw Error(`data must be an object`);let s=[],c=[],u=[];for(let[e,r]of Object.entries(t)){let t=`${n}:${e}`,a=this.store.state.get(t);if(a&&!i){c.push(e);continue}a&&i&&u.push(e);let o=Date.now(),d={key:e,value:r,namespace:n,createdAt:a?.createdAt??o,updatedAt:o,version:(a?.version??0)+1};this.store.state.set(t,d),this.store.recordChange(t,{id:l().slice(0,8),key:e,namespace:n,action:`set`,oldValue:a?.value,newValue:r,timestamp:o,source:`import`}),s.push(e)}return{imported:s.length,skipped:c.length,overwritten:u.length,total:Object.keys(t).length,keys:s}}},g=class{store;storeHandlers;watchHandlers;ioHandlers;constructor(){this.store=new f,this.storeHandlers=new p(this.store),this.watchHandlers=new m(this.store),this.ioHandlers=new h(this.store)}setPersistNotifier(e){this.store.setPersistNotifier(e)}handleSet(e){return this.storeHandlers.handleSet(e)}handleGet(e){return this.storeHandlers.handleGet(e)}handleDelete(e){return this.storeHandlers.handleDelete(e)}handleList(e){return this.storeHandlers.handleList(e)}handleWatchDispatch(e){let t=String(e.action??``);return t===`stop`?this.watchHandlers.handleUnwatch(e):t===`poll`?this.watchHandlers.handlePoll(e):this.watchHandlers.handleWatch(e)}handleIODispatch(e){return String(e.action??``)===`import`?this.ioHandlers.handleImport(e):this.ioHandlers.handleExport(e)}handleWatch(e){return this.watchHandlers.handleWatch(e)}handleUnwatch(e){return this.watchHandlers.handleUnwatch(e)}handlePoll(e){return this.watchHandlers.handlePoll(e)}handleHistory(e){return this.ioHandlers.handleHistory(e)}handleExport(e){return this.ioHandlers.handleExport(e)}handleImport(e){return this.ioHandlers.handleImport(e)}handleClear(e){return this.storeHandlers.handleClear(e)}handleDispatchTool(e){return c(async()=>await this.handleDispatch(e))}handleDispatch(e){let r=String(e.action??``);switch(r){case`set`:return this.storeHandlers.handleSet(e);case`get`:return this.storeHandlers.handleGet(e);case`delete`:return this.storeHandlers.handleDelete(e);case`list`:return this.storeHandlers.handleList(e);case`history`:return this.ioHandlers.handleHistory(e);case`clear`:return this.storeHandlers.handleClear(e);default:return Promise.resolve(n(new t(`VALIDATION`,`Invalid action: "${r}". Expected one of: set, get, delete, list, history, clear`,{toolName:`state_board`})))}}handleWatchDispatchTool(e){return c(async()=>await this.handleWatchDispatch(e))}handleIODispatchTool(e){return c(async()=>await this.handleIODispatch(e))}handleStats(){return this.storeHandlers.handleStats()}cleanupExpired(){return this.store.cleanupExpired()}getStore(){return this.store}},_=class{handoffs=new Map;insights=[];ctx;mutationSeq=0;lastPersistedSeq=0;persistNotifier;constructor(e){this.ctx=e}setPersistNotifier(e){this.persistNotifier=e}isPersistDirty(){return this.mutationSeq!==this.lastPersistedSeq}exportSnapshot(){return{schemaVersion:1,savedAt:new Date().toISOString(),handoffs:[...this.handoffs.entries()].map(([e,t])=>[e,b(t)]),insights:this.insights.map(e=>x(e))}}restoreSnapshot(e){if(!e||typeof e!=`object`)return;let t=e;if(t.schemaVersion!==1)return;let n=new Map;for(let e of t.handoffs??[]){if(!Array.isArray(e)||e.length!==2||typeof e[0]!=`string`)continue;let t=e[1];S(t)&&n.set(t.id,b(t))}let r=(t.insights??[]).filter(e=>C(e)).map(e=>x(e));this.handoffs.clear();for(let[e,t]of n)this.handoffs.set(e,t);this.insights.splice(0,this.insights.length,...r),this.mutationSeq=this.handoffs.size+this.insights.length,this.lastPersistedSeq=this.mutationSeq}markPersisted(){this.lastPersistedSeq=this.mutationSeq}markDirty(){this.mutationSeq++,this.persistNotifier?.()}async handleCreateTaskHandoffTool(e){return c(async()=>await this.handleCreateTaskHandoff(e))}async handleCreateTaskHandoff(e){let t=e.description,n=e.constraints,r=e.targetDomain,i=e.decision,a=e.risks,o=e.nextSteps,s=typeof e.parentId==`string`?e.parentId:void 0,c=Array.isArray(e.dependsOn)?e.dependsOn.filter(e=>typeof e==`string`):void 0,u;try{let e=this.ctx.pageController;if(e){let t=await e.getPage?.();t&&typeof t.url==`function`&&(u=t.url())}}catch{}let d=[];if(s&&!this.handoffs.has(s)&&d.push(`parentId "${s}" does not match a known task`),c)for(let e of c)this.handoffs.has(e)||d.push(`dependsOn "${e}" does not match a known task`);let f={id:l().slice(0,8),status:`pending`,description:t,constraints:n,targetDomain:r,decision:i,risks:a,nextSteps:o,pageUrl:u,createdAt:Date.now(),...s?{parentId:s}:{},...c&&c.length>0?{dependsOn:c}:{}};return this.handoffs.set(f.id,f),this.markDirty(),{taskId:f.id,status:f.status,description:f.description,constraints:f.constraints,targetDomain:f.targetDomain,decision:f.decision,risks:f.risks,nextSteps:f.nextSteps,pageUrl:f.pageUrl,createdAt:new Date(f.createdAt).toISOString(),parentId:f.parentId,dependsOn:f.dependsOn,dependencyWarnings:d.length>0?d:void 0,totalActiveHandoffs:this.handoffs.size}}async handleCompleteTaskHandoffTool(e){return c(async()=>await this.handleCompleteTaskHandoff(e))}async handleCompleteTaskHandoff(e){let t=e.taskId,n=e.summary,r=e.keyFindings,i=e.artifacts,a=this.handoffs.get(t);if(!a)throw Error(`Task handoff "${t}" not found. Active IDs: ${[...this.handoffs.keys()].join(`, `)||`(none)`}`);if(a.status===`completed`)throw Error(`Task handoff "${t}" is already completed`);return a.status=`completed`,a.completedAt=Date.now(),a.summary=n,a.keyFindings=r,a.artifacts=i,this.markDirty(),{taskId:a.id,status:`completed`,summary:a.summary,keyFindings:a.keyFindings,artifacts:a.artifacts,durationMs:a.completedAt-a.createdAt}}async handleUpdateTaskHandoffTool(e){return c(async()=>await this.handleUpdateTaskHandoff(e))}async handleUpdateTaskHandoff(e){let t=e.taskId;if(!t)throw Error(`taskId is required`);let n=this.handoffs.get(t);if(!n)throw Error(`Task handoff "${t}" not found. Active IDs: ${[...this.handoffs.keys()].join(`, `)||`(none)`}`);let r=n.status;if(T(e,`status`)){let r=E(e.status);if(!r)throw Error(`Invalid handoff status. Expected one of: pending, in_progress, failed`);if(n.status===`completed`)throw Error(`Task handoff "${t}" is already completed and cannot be reopened`);n.status=r,r===`failed`?n.completedAt=Date.now():n.completedAt=void 0}return typeof e.description==`string`&&(n.description=e.description),T(e,`constraints`)&&(n.constraints=O(e.constraints)),typeof e.targetDomain==`string`&&(n.targetDomain=e.targetDomain),typeof e.decision==`string`&&(n.decision=e.decision),T(e,`risks`)&&(n.risks=O(e.risks)),T(e,`nextSteps`)&&(n.nextSteps=O(e.nextSteps)),typeof e.summary==`string`&&(n.summary=e.summary),T(e,`keyFindings`)&&(n.keyFindings=O(e.keyFindings)),T(e,`artifacts`)&&(n.artifacts=O(e.artifacts)),this.markDirty(),{...this.serializeHandoff(n),previousStatus:r}}async handleGetTaskContextTool(e){return c(async()=>await this.handleGetTaskContext(e))}async handleGetTaskContext(e){let t=e.taskId;if(t){let e=this.handoffs.get(t);if(!e)throw Error(`Task handoff "${t}" not found`);return{handoff:this.serializeHandoff(e)}}let n=[...this.handoffs.values()].map(e=>this.serializeHandoff(e)),r=n.filter(e=>e.status===`pending`||e.status===`in_progress`),i=n.filter(e=>e.status===`completed`),a=n.filter(e=>e.status===`failed`),o=this.filterInsights(e).map(e=>this.serializeInsight(e));return{active:r,completed:i,failed:a,sessionInsights:o,dependencyGraph:this.buildDependencyGraph(),summary:{totalActive:r.length,totalCompleted:i.length,totalFailed:a.length,totalInsights:this.insights.length,returnedInsights:o.length}}}buildDependencyGraph(){let e=[...this.handoffs.values()].map(e=>({taskId:e.id,status:e.status,description:e.description})),t=[];for(let e of this.handoffs.values())if(e.parentId&&t.push({from:e.parentId,to:e.id,type:`parent`}),e.dependsOn)for(let n of e.dependsOn)t.push({from:n,to:e.id,type:`depends-on`});return{nodes:e,edges:t}}async handleAppendSessionInsightTool(e){return c(async()=>await this.handleAppendSessionInsight(e))}async handleAppendSessionInsight(e){let t=e.category,n=e.content,r=k(e.confidence),i=O(e.tags),a=T(e,`severity`)?A(e.severity):void 0,o=typeof e.toolSource==`string`?e.toolSource:void 0,s=[...this.handoffs.values()].find(e=>e.status===`in_progress`||e.status===`pending`),c={id:l().slice(0,8),category:t,content:n,confidence:r,tags:i,severity:a,toolSource:o,timestamp:Date.now(),sourceTaskId:s?.id};return this.insights.push(c),this.markDirty(),{insightId:c.id,category:c.category,confidence:c.confidence,tags:c.tags,severity:c.severity,toolSource:c.toolSource,totalInsights:this.insights.length,totalByCategory:this.getInsightCountByCategory()}}serializeHandoff(e){return{taskId:e.id,status:e.status,description:e.description,constraints:e.constraints,targetDomain:e.targetDomain,decision:e.decision,risks:e.risks,nextSteps:e.nextSteps,pageUrl:e.pageUrl,createdAt:new Date(e.createdAt).toISOString(),completedAt:e.completedAt?new Date(e.completedAt).toISOString():void 0,summary:e.summary,keyFindings:e.keyFindings,artifacts:e.artifacts,parentId:e.parentId,dependsOn:e.dependsOn}}serializeInsight(e){return{id:e.id,category:e.category,content:e.content,confidence:e.confidence,tags:e.tags,severity:e.severity,toolSource:e.toolSource,timestamp:new Date(e.timestamp).toISOString(),sourceTaskId:e.sourceTaskId}}filterInsights(e){let t=typeof e.category==`string`?e.category:void 0,n=typeof e.tag==`string`?e.tag:void 0,r=T(e,`severity`)?A(e.severity):void 0,i=typeof e.sourceTaskId==`string`?e.sourceTaskId:void 0,a=typeof e.minConfidence==`number`&&Number.isFinite(e.minConfidence)?k(e.minConfidence):void 0;return this.insights.filter(e=>!(t&&e.category!==t||n&&!e.tags?.includes(n)||r&&e.severity!==r||i&&e.sourceTaskId!==i||a!==void 0&&e.confidence<a))}getInsightCountByCategory(){let e={};for(let t of this.insights)e[t.category]=(e[t.category]??0)+1;return e}snapshots=new Map;async handleSavePageSnapshotTool(e){return c(async()=>await this.handleSavePageSnapshot(e))}async handleSavePageSnapshot(e){let t=e.label,n=this.ctx.pageController;if(!n)throw Error(`No page controller available`);let r=await n.getPage();if(!r)throw Error(`No active page to snapshot`);let i=r.url(),a=[];try{let e=await r.createCDPSession();a=(await e.send(`Network.getAllCookies`)).cookies.map(e=>({name:e.name,value:e.value,domain:e.domain,path:e.path})),await e.detach()}catch{}let o={},s={};try{o=await r.evaluate(()=>{let e={};for(let t=0;t<window.localStorage.length;t++){let n=window.localStorage.key(t);n&&(e[n]=window.localStorage.getItem(n)??``)}return e}),s=await r.evaluate(()=>{let e={};for(let t=0;t<window.sessionStorage.length;t++){let n=window.sessionStorage.key(t);n&&(e[n]=window.sessionStorage.getItem(n)??``)}return e})}catch{}let c,u;try{let e=await r.evaluate(v);Array.isArray(e)&&e.length>0&&(c=e);let t=await r.evaluate(y);Array.isArray(t)&&t.length>0&&(u=t)}catch{}let d={id:l().slice(0,8),url:i,cookies:a,localStorage:o,sessionStorage:s,...c?{indexedDB:c}:{},...u?{indexedDBData:u}:{},timestamp:Date.now(),label:t};return this.snapshots.set(d.id,d),{snapshotId:d.id,url:d.url,cookieCount:d.cookies.length,localStorageKeys:Object.keys(d.localStorage).length,sessionStorageKeys:Object.keys(d.sessionStorage).length,indexedDBDatabaseCount:d.indexedDB?.length??0,indexedDBRecordCount:d.indexedDBData?.reduce((e,t)=>e+(Array.isArray(t.records)?t.records.length:0),0)??0,label:d.label}}async handleRestorePageSnapshotTool(e){return c(async()=>await this.handleRestorePageSnapshot(e))}async handleRestorePageSnapshot(t){let n=t.snapshotId;if(!n)throw Error(`snapshotId is required`);let r=this.snapshots.get(n);if(!r)throw Error(`Snapshot "${n}" not found`);let i=this.ctx.pageController;if(!i)throw Error(`No page controller available`);let a=await i.getPage();if(!a)throw Error(`No active page for restoration`);if(await a.goto(r.url,{waitUntil:`domcontentloaded`,timeout:e}),r.cookies.length>0)try{let e=await a.createCDPSession();await e.send(`Network.setCookies`,{cookies:r.cookies.map(e=>({name:e.name,value:e.value,domain:e.domain,path:e.path}))}),await e.detach()}catch{}try{await a.evaluate((e,t)=>{window.localStorage.clear();for(let[t,n]of Object.entries(e))window.localStorage.setItem(t,n);window.sessionStorage.clear();for(let[e,n]of Object.entries(t))window.sessionStorage.setItem(e,n)},r.localStorage,r.sessionStorage)}catch{}return{restored:!0,snapshotId:r.id,url:r.url,cookiesRestored:r.cookies.length,localStorageKeysRestored:Object.keys(r.localStorage).length,sessionStorageKeysRestored:Object.keys(r.sessionStorage).length}}async handleListPageSnapshotsTool(){return c(async()=>await this.handleListPageSnapshots())}async handleListPageSnapshots(){let e=[...this.snapshots.values()].map(e=>({id:e.id,url:e.url,label:e.label,cookieCount:e.cookies.length,localStorageKeys:Object.keys(e.localStorage).length,sessionStorageKeys:Object.keys(e.sessionStorage).length,indexedDBDatabaseCount:e.indexedDB?.length??0,indexedDBRecordCount:e.indexedDBData?.reduce((e,t)=>e+(Array.isArray(t.records)?t.records.length:0),0)??0,createdAt:new Date(e.timestamp).toISOString()}));return{snapshots:e,total:e.length}}async handleCoordinationRestoreSnapshotTool(e){return c(async()=>await this.handleCoordinationRestoreSnapshot(e))}async handleCoordinationRestoreSnapshot(t){let n=t.snapshotId;if(!n)throw Error(`snapshotId is required`);let r=this.snapshots.get(n);if(!r)throw Error(`Snapshot "${n}" not found`);let i=this.ctx.pageController;if(!i)throw Error(`No page controller available`);let a=await i.getPage();if(!a)throw Error(`No active page for restoration`);await a.goto(r.url,{waitUntil:`domcontentloaded`,timeout:e});let o=0;if(r.cookies.length>0)try{let e=await a.createCDPSession();await e.send(`Network.setCookies`,{cookies:r.cookies.map(e=>({name:e.name,value:e.value,domain:e.domain,path:e.path}))}),await e.detach(),o=r.cookies.length}catch{}let s=!1;try{await a.evaluate((e,t)=>{window.localStorage.clear();for(let[t,n]of Object.entries(e))window.localStorage.setItem(t,n);window.sessionStorage.clear();for(let[e,n]of Object.entries(t))window.sessionStorage.setItem(e,n)},r.localStorage,r.sessionStorage),s=!0}catch{}let c=!1,l=0;if(r.indexedDBData&&r.indexedDBData.length>0)try{let e=JSON.stringify({records:r.indexedDBData,schemas:r.indexedDB??[]}),t=await a.evaluate(async e=>{let t=globalThis.indexedDB;if(!t)return{restored:!1,recordCount:0};let n=JSON.parse(e),r=n.records;if(!Array.isArray(r)||r.length===0)return{restored:!1,recordCount:0};let i=new Map;for(let e of r)!e.database||!e.store||!Array.isArray(e.records)||(i.has(e.database)||i.set(e.database,[]),i.get(e.database).push({store:e.store,records:e.records}));let a=0;for(let[e,r]of i)try{await new Promise((n,r)=>{let i=t.deleteDatabase(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error),i.onblocked=()=>r(Error(`Deletion blocked for ${e}`))}),await new Promise((i,o)=>{let s=n.schemas.find(t=>t.name===e),c=t.open(e,s?.version??1);c.onupgradeneeded=()=>{let e=c.result;for(let t of r)if(!e.objectStoreNames.contains(t.store)){let n=s?.stores?.find(e=>e.name===t.store);e.createObjectStore(t.store,{...n?.keyPath===void 0?{}:{keyPath:n.keyPath},autoIncrement:n?.autoIncrement??!1})}},c.onsuccess=async()=>{let e=c.result;for(let t of r)try{await new Promise(n=>{let r=e.transaction(t.store,`readwrite`);r.oncomplete=()=>n(),r.onerror=()=>n(),r.onabort=()=>n();let i=r.objectStore(t.store);for(let e of t.records)try{i.keyPath===null?i.add(e.value,e.key):i.add(e.value),a++}catch{}})}catch{}e.close(),i()},c.onerror=()=>o(c.error)})}catch{}return{restored:a>0,recordCount:a}},e);c=t.restored,l=t.recordCount}catch{}return{restored:!0,snapshotId:r.id,url:r.url,cookiesRestored:o,storageRestored:s,indexedDBRestored:c,indexedDBRecordsRestored:l}}};const v=`(async () => {
|
|
2
|
+
const idb = globalThis.indexedDB;
|
|
3
|
+
if (!idb) return [];
|
|
4
|
+
let dbs = [];
|
|
5
|
+
try { if (typeof idb.databases === 'function') dbs = await idb.databases(); } catch (e) {}
|
|
6
|
+
const out = [];
|
|
7
|
+
for (const info of dbs) {
|
|
8
|
+
const name = info && info.name;
|
|
9
|
+
if (typeof name !== 'string') continue;
|
|
10
|
+
try {
|
|
11
|
+
const db = await new Promise((resolve, reject) => {
|
|
12
|
+
const r = idb.open(name);
|
|
13
|
+
r.onsuccess = () => resolve(r.result);
|
|
14
|
+
r.onerror = () => reject(r.error);
|
|
15
|
+
});
|
|
16
|
+
const storeNames = Array.from(db.objectStoreNames);
|
|
17
|
+
const stores = [];
|
|
18
|
+
if (storeNames.length) {
|
|
19
|
+
await new Promise((resolve) => {
|
|
20
|
+
const tx = db.transaction(storeNames, 'readonly');
|
|
21
|
+
tx.oncomplete = () => resolve();
|
|
22
|
+
tx.onerror = () => resolve();
|
|
23
|
+
tx.onabort = () => resolve();
|
|
24
|
+
for (const sn of storeNames) {
|
|
25
|
+
const s = tx.objectStore(sn);
|
|
26
|
+
const c = s.count();
|
|
27
|
+
c.onsuccess = () => {
|
|
28
|
+
const kp = s.keyPath;
|
|
29
|
+
const base = { name: sn, count: c.result, autoIncrement: s.autoIncrement };
|
|
30
|
+
stores.push(kp === null || kp === undefined ? base : { ...base, keyPath: kp });
|
|
31
|
+
};
|
|
32
|
+
c.onerror = () => stores.push({ name: sn, count: 0 });
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
const version = typeof db.version === 'number' ? db.version : undefined;
|
|
37
|
+
db.close();
|
|
38
|
+
out.push(version === undefined ? { name, stores } : { name, version, stores });
|
|
39
|
+
} catch (e) {
|
|
40
|
+
out.push({ name, error: (e && e.message) ? String(e.message) : 'open-failed' });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return out;
|
|
44
|
+
})()`,y=`(async () => {
|
|
45
|
+
const MAX_RECORDS_PER_STORE = 100;
|
|
46
|
+
const idb = globalThis.indexedDB;
|
|
47
|
+
if (!idb) return [];
|
|
48
|
+
let dbs = [];
|
|
49
|
+
try { if (typeof idb.databases === 'function') dbs = await idb.databases(); } catch (e) {}
|
|
50
|
+
const out = [];
|
|
51
|
+
for (const info of dbs) {
|
|
52
|
+
const name = info && info.name;
|
|
53
|
+
if (typeof name !== 'string') continue;
|
|
54
|
+
try {
|
|
55
|
+
const db = await new Promise((resolve, reject) => {
|
|
56
|
+
const r = idb.open(name);
|
|
57
|
+
r.onsuccess = () => resolve(r.result);
|
|
58
|
+
r.onerror = () => reject(r.error);
|
|
59
|
+
});
|
|
60
|
+
const storeNames = Array.from(db.objectStoreNames);
|
|
61
|
+
for (const sn of storeNames) {
|
|
62
|
+
try {
|
|
63
|
+
const records = [];
|
|
64
|
+
let count = 0;
|
|
65
|
+
await new Promise((resolve) => {
|
|
66
|
+
const tx = db.transaction(sn, 'readonly');
|
|
67
|
+
tx.oncomplete = () => resolve();
|
|
68
|
+
tx.onerror = () => resolve();
|
|
69
|
+
tx.onabort = () => resolve();
|
|
70
|
+
const store = tx.objectStore(sn);
|
|
71
|
+
const cursorReq = store.openCursor();
|
|
72
|
+
cursorReq.onsuccess = (event) => {
|
|
73
|
+
const cursor = event.target.result;
|
|
74
|
+
if (cursor && count < MAX_RECORDS_PER_STORE) {
|
|
75
|
+
try {
|
|
76
|
+
records.push({ key: JSON.parse(JSON.stringify(cursor.key)), value: JSON.parse(JSON.stringify(cursor.value)) });
|
|
77
|
+
} catch (e) {
|
|
78
|
+
records.push({ key: String(cursor.key), value: '<non-serializable>' });
|
|
79
|
+
}
|
|
80
|
+
count++;
|
|
81
|
+
cursor.continue();
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
});
|
|
85
|
+
if (records.length > 0) {
|
|
86
|
+
out.push({ database: name, store: sn, records });
|
|
87
|
+
}
|
|
88
|
+
} catch (e) {
|
|
89
|
+
// skip unreadable stores
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
db.close();
|
|
93
|
+
} catch (e) {
|
|
94
|
+
// skip unopenable databases
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return out;
|
|
98
|
+
})()`;function b(e){return{...e,constraints:e.constraints?[...e.constraints]:void 0,risks:e.risks?[...e.risks]:void 0,nextSteps:e.nextSteps?[...e.nextSteps]:void 0,keyFindings:e.keyFindings?[...e.keyFindings]:void 0,artifacts:e.artifacts?[...e.artifacts]:void 0}}function x(e){return{...e,tags:e.tags?[...e.tags]:void 0}}function S(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.id==`string`&&w(t.status)&&typeof t.description==`string`&&typeof t.createdAt==`number`&&D(t.constraints)&&D(t.risks)&&D(t.nextSteps)&&D(t.keyFindings)&&D(t.artifacts)}function C(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.id==`string`&&typeof t.category==`string`&&typeof t.content==`string`&&typeof t.confidence==`number`&&typeof t.timestamp==`number`&&D(t.tags)&&(t.severity===void 0||j(t.severity))&&(t.toolSource===void 0||typeof t.toolSource==`string`)&&(t.sourceTaskId===void 0||typeof t.sourceTaskId==`string`)}function w(e){return e===`pending`||e===`in_progress`||e===`completed`||e===`failed`}function T(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function E(e){if(e===`pending`||e===`in_progress`||e===`failed`)return e}function D(e){return e===void 0||Array.isArray(e)&&e.every(e=>typeof e==`string`)}function O(e){if(!Array.isArray(e))return;let t=e.filter(e=>typeof e==`string`&&e.length>0);return t.length>0?[...new Set(t)]:void 0}function k(e){return typeof e!=`number`||!Number.isFinite(e)?1:Math.min(1,Math.max(0,e))}function A(e){if(j(e))return e;throw Error(`Invalid severity. Expected one of: info, low, medium, high, critical`)}function j(e){return e===`info`||e===`low`||e===`medium`||e===`high`||e===`critical`}export{_ as CoordinationHandlers,g as SharedStateBoardHandlers};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as e,s as t}from"./modules-CC_ADmwi.mjs";import{c as n}from"./parse-args-B6dwWc9k.mjs";import{r}from"./ResponseBuilder-BLicSCjn.mjs";let i={enabled:!1,page:null};async function a(e,n){return r(async()=>{if(i.enabled)return{success:!0,running:!0,message:`Coverage already running`};let{coveragePage:n}=await t(e.collector);return i={enabled:!0,page:n},{success:!0,running:!0,message:`JS+CSS coverage collection started. Use page_coverage_stop to collect results.`}})}async function o(t,n){return r(async()=>{if(!i.enabled)return{success:!1,error:`Coverage is not running. Use page_coverage_start first.`};let n=await e(t.collector,i.page,!0);i={enabled:!1,page:null};let r=n.reduce((e,t)=>e+t.totalBytes,0),a=n.reduce((e,t)=>e+t.usedBytes,0),o=r>0?(a/r*100).toFixed(1):`0.0`;return{success:!0,running:!1,scriptCount:n.length,totalBytes:r,usedBytes:a,overallCoveragePct:`${o}%`,scripts:n.map(e=>({url:e.url,totalBytes:e.totalBytes,usedBytes:e.usedBytes,coveragePct:e.coveragePercentage.toFixed(1)+`%`}))}})}const s=[];async function c(e){return r(async()=>{let t=n(e,`action`,`add`),r=n(e,`urlPattern`,``),i=n(e,`reason`,``);if(t===`add`||t===`block`)return r?(s.some(e=>e.urlPattern===r)||s.push({urlPattern:r,reason:i||`blocked by user`,blockedAt:new Date().toISOString()}),{success:!0,action:`blocked`,urlPattern:r,rules:s.length}):{success:!1,error:`urlPattern is required for add/block action`};if(t===`remove`||t===`unblock`){if(!r)return{success:!1,error:`urlPattern is required for remove/unblock action`};let e=s.findIndex(e=>e.urlPattern===r);return e>=0?(s.splice(e,1),{success:!0,action:`unblocked`,urlPattern:r,rules:s.length}):{success:!1,error:`No block rule found for pattern: ${r}`}}if(t===`list`)return{success:!0,count:s.length,rules:s};if(t===`clear`){let e=s.length;return s.length=0,{success:!0,action:`cleared`,removed:e}}return{success:!1,error:`Unknown action: ${t}. Valid actions: add, block, remove, unblock, list, clear`}})}export{c as handlePageBlockScript,a as handlePageCoverageStart,o as handlePageCoverageStop};
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./logger-BGCcd-jJ.mjs";import{t}from"./ToolError-g3rjWzhx.mjs";import{i as n}from"./v8-inspector-CTJo08-K.mjs";import{c as r,i,n as a,o,s}from"./parse-args-B6dwWc9k.mjs";import"./definitions-aeRd5DAR.mjs";import"./handlers-BQ4K8Jbr.mjs";import"./definitions-Bob4XMxI.mjs";import{parseExpression as c}from"@babel/parser";var l=class{deps;constructor(e){this.deps=e}async handleDebuggerLifecycle(e){let t=r(e,`action`);if(t!==`enable`&&t!==`disable`)throw Error(`Invalid debugger lifecycle action: ${String(e.action??``)}. Expected one of: enable, disable`);return t===`enable`?(await this.deps.debuggerManager.init(),await this.deps.runtimeInspector.init(),await this.deps.debuggerManager.initAdvancedFeatures(this.deps.runtimeInspector),{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Debugger enabled`,enabled:this.deps.debuggerManager.isEnabled()},null,2)}]}):(await this.deps.debuggerManager.disable(),await this.deps.runtimeInspector.disable(),{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Debugger disabled`},null,2)}]})}async handleDebuggerPause(e){await this.deps.debuggerManager.pause();try{let e=await this.deps.debuggerManager.waitForPaused(500);return{content:[{type:`text`,text:JSON.stringify({success:!0,paused:!0,message:`Execution paused`,reason:e.reason,location:e.callFrames[0]?.location},null,2)}]}}catch{return{content:[{type:`text`,text:JSON.stringify({success:!0,paused:!1,message:`Pause requested; no paused event observed yet`},null,2)}]}}}async handleDebuggerResume(e){let t=this.deps.debuggerManager.getPausedState()!==null;return await this.deps.debuggerManager.resume(),{content:[{type:`text`,text:JSON.stringify({success:!0,resumed:t,message:t?`Execution resumed`:`Resume requested; debugger was not paused`},null,2)}]}}async handleDebuggerRunToLocation(e){let t=r(e,`url`),n=r(e,`scriptId`),a=o(e,`lineNumber`),s=i(e,`columnNumber`),c=r(e,`condition`),l=i(e,`timeout`,3e4);if(!t&&!n)throw Error(`Either url or scriptId must be provided`);let u=t?await this.deps.debuggerManager.setBreakpointByUrl({url:t,lineNumber:a,columnNumber:s,condition:c}):await this.deps.debuggerManager.setBreakpoint({scriptId:n,lineNumber:a,columnNumber:s,condition:c}),d=this.deps.debuggerManager.getPausedState()?.timestamp,f,p;try{await this.deps.debuggerManager.resume(),f=await this.waitForNewPausedState(l,d)}catch(e){p=e}let m=await this.removeTemporaryBreakpoint(u.breakpointId);if(p)return this.runToLocationFailure(p,u,m);if(!m.removed)throw Error(m.error??`Failed to remove temporary breakpoint`);let h=f?.callFrames[0],g=h?.location,_=f?.hitBreakpoints??[],v=_.includes(u.breakpointId)||this.frameMatchesLocation(h,u.location);return{content:[{type:`text`,text:JSON.stringify({success:v,paused:!0,hitTarget:v,message:v?`Execution paused at target location`:`Execution paused before target location`,reason:f?.reason,url:h?.url,location:g,hitBreakpoints:_,temporaryBreakpoint:{breakpointId:u.breakpointId,location:u.location},removedTemporaryBreakpoint:m.removed},null,2)}]}}async waitForNewPausedState(e,t){let n=Date.now()+e;for(;;){let e=Math.max(1,n-Date.now()),r=await this.deps.debuggerManager.waitForPaused(e);if(t===void 0||r.timestamp!==t)return r;if(Date.now()>=n)throw Error(`Timeout waiting for paused event`);await new Promise(e=>setTimeout(e,Math.min(25,Math.max(1,n-Date.now()))))}}async removeTemporaryBreakpoint(e){try{return await this.deps.debuggerManager.removeBreakpoint(e),{removed:!0}}catch(e){return{removed:!1,error:e instanceof Error?e.message:String(e)}}}runToLocationFailure(e,t,n){return{content:[{type:`text`,text:JSON.stringify({success:!1,paused:!1,message:e instanceof Error?e.message:String(e),temporaryBreakpoint:{breakpointId:t.breakpointId,location:t.location},removedTemporaryBreakpoint:n.removed,cleanupError:n.error},null,2)}]}}frameMatchesLocation(e,t){return!e||t.scriptId&&e.location.scriptId!==t.scriptId||t.url&&e.url!==t.url?!1:e.location.lineNumber===t.lineNumber&&(t.columnNumber===void 0||e.location.columnNumber===t.columnNumber)}},u=class{deps;constructor(e){this.deps=e}async handleDebuggerStepInto(t){let n=this.deps.debuggerManager;if(!n.isEnabled())return{content:[{type:`text`,text:JSON.stringify({success:!1,error:`Debugger not enabled`,hint:`Call debugger_lifecycle({ action: 'enable' })() first to enable the debugger`},null,2)}]};if(!n.isPaused())return{content:[{type:`text`,text:JSON.stringify({success:!1,error:`Cannot step while not paused`,hint:`The debugger must be paused at a breakpoint to perform step operations. Set one with breakpoint({ action: 'set', type: 'code', ... }) or pause with debugger_pause().`,currentState:`running`},null,2)}]};try{return await n.stepInto(),{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Stepped into`},null,2)}]}}catch(t){let n=t instanceof Error?t.message:String(t);return e.error(`Step into failed: ${n}`),{content:[{type:`text`,text:JSON.stringify({success:!1,error:n},null,2)}]}}}async handleDebuggerStepOver(t){let n=this.deps.debuggerManager;if(!n.isEnabled())return{content:[{type:`text`,text:JSON.stringify({success:!1,error:`Debugger not enabled`,hint:`Call debugger_lifecycle({ action: 'enable' })() first to enable the debugger`},null,2)}]};if(!n.isPaused())return{content:[{type:`text`,text:JSON.stringify({success:!1,error:`Cannot step while not paused`,hint:`The debugger must be paused at a breakpoint to perform step operations. Set one with breakpoint({ action: 'set', type: 'code', ... }) or pause with debugger_pause().`,currentState:`running`},null,2)}]};try{return await n.stepOver(),{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Stepped over`},null,2)}]}}catch(t){let n=t instanceof Error?t.message:String(t);return e.error(`Step over failed: ${n}`),{content:[{type:`text`,text:JSON.stringify({success:!1,error:n},null,2)}]}}}async handleDebuggerStepOut(t){let n=this.deps.debuggerManager;if(!n.isEnabled())return{content:[{type:`text`,text:JSON.stringify({success:!1,error:`Debugger not enabled`,hint:`Call debugger_lifecycle({ action: 'enable' })() first to enable the debugger`},null,2)}]};if(!n.isPaused())return{content:[{type:`text`,text:JSON.stringify({success:!1,error:`Cannot step out while not paused`,hint:`The debugger must be paused at a breakpoint to perform step out. Set one with breakpoint({ action: 'set', type: 'code', ... }) or pause with debugger_pause().`,currentState:`running`},null,2)}]};try{return await n.stepOut(),{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Stepped out`},null,2)}]}}catch(t){let n=t instanceof Error?t.message:String(t);return e.error(`Step out failed: ${n}`),{content:[{type:`text`,text:JSON.stringify({success:!1,error:n},null,2)}]}}}},d=class{deps;constructor(e){this.deps=e}async handleDebuggerEvaluate(e){let t=r(e,`expression`,``),n=r(e,`callFrameId`),i=await this.deps.runtimeInspector.evaluate(t,n);return{content:[{type:`text`,text:JSON.stringify({success:!0,expression:t,result:i},null,2)}]}}async handleDebuggerEvaluateGlobal(e){let t=r(e,`expression`,``),n=await this.deps.runtimeInspector.evaluateGlobal(t);return{content:[{type:`text`,text:JSON.stringify({success:!0,expression:t,result:n},null,2)}]}}},f=class{deps;constructor(e){this.deps=e}async handleDebuggerWaitForPaused(e){let n=i(e,`timeout`,3e4);try{let e=await this.deps.debuggerManager.waitForPaused(n);return{content:[{type:`text`,text:JSON.stringify({success:!0,paused:!0,reason:e.reason,location:e.callFrames[0]?.location,hitBreakpoints:e.hitBreakpoints},null,2)}]}}catch(e){if(e instanceof t)throw e;return{content:[{type:`text`,text:JSON.stringify({success:!1,paused:!1,message:e instanceof Error?e.message:`Timeout waiting for paused event`},null,2)}]}}}async handleDebuggerGetPausedState(e){let t=this.deps.debuggerManager.getPausedState();return t?{content:[{type:`text`,text:JSON.stringify({paused:!0,reason:t.reason,frameCount:t.callFrames.length,topFrame:{functionName:t.callFrames[0]?.functionName,location:t.callFrames[0]?.location},hitBreakpoints:t.hitBreakpoints,timestamp:t.timestamp},null,2)}]}:{content:[{type:`text`,text:JSON.stringify({paused:!1,message:`Debugger is not paused`},null,2)}]}}async handleDebuggerCaptureHit(e){let n=i(e,`timeout`,3e4),r=a(e,`includeScope`,!0),o=a(e,`includeObjectProperties`,!1),s=i(e,`maxDepth`,1),c=a(e,`skipErrors`,!0);try{let e=await this.deps.debuggerManager.waitForPaused(n),t=[],i=await this.deps.runtimeInspector.getCallStack().catch(e=>{t.push(`callStack: ${e instanceof Error?e.message:String(e)}`)}),a=i?.callFrames??e.callFrames,l=a[0],u=typeof l?.callFrameId==`string`&&l.callFrameId.length>0?l.callFrameId:void 0,d=r&&u?await this.deps.debuggerManager.getScopeVariables({callFrameId:u,includeObjectProperties:o,maxDepth:s,skipErrors:c}).catch(e=>{t.push(`scope: ${e instanceof Error?e.message:String(e)}`)}):void 0;return{content:[{type:`text`,text:JSON.stringify({success:!0,paused:!0,reason:e.reason,hitBreakpoints:e.hitBreakpoints,timestamp:e.timestamp,topFrame:this.summarizeFrame(l),callStack:{frameCount:a.length,reason:i?.reason??e.reason,frames:a.map((e,t)=>({index:t,...this.summarizeFrame(e)}))},scope:d,errors:t},null,2)}]}}catch(e){if(e instanceof t)throw e;return{content:[{type:`text`,text:JSON.stringify({success:!1,paused:!1,message:e instanceof Error?e.message:`Timeout waiting for paused event`},null,2)}]}}}async handleGetCallStack(e){let t=await this.deps.runtimeInspector.getCallStack();return t?{content:[{type:`text`,text:JSON.stringify({success:!0,callStack:{frameCount:t.callFrames.length,reason:t.reason,frames:t.callFrames.map((e,t)=>({index:t,callFrameId:e.callFrameId,functionName:e.functionName,location:`${e.location.url}:${e.location.lineNumber}:${e.location.columnNumber}`,scopeCount:e.scopeChain.length}))}},null,2)}]}:{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Not in paused state. Set a breakpoint and trigger it first.`},null,2)}]}}summarizeFrame(e){let t=typeof e?.location==`object`&&e.location!==null?e.location:void 0,n=typeof t?.url==`string`?t.url:void 0,r=typeof e?.url==`string`?e.url:void 0;return{callFrameId:typeof e?.callFrameId==`string`?e.callFrameId:void 0,functionName:typeof e?.functionName==`string`?e.functionName:void 0,url:r??n,location:t,scopeCount:Array.isArray(e?.scopeChain)?e.scopeChain.length:void 0}}};function p(e){if(typeof e==`object`&&e&&`message`in e){let t=e.message;if(typeof t==`string`&&t.length>0)return t}return String(e)}var m=class{deps;constructor(e){this.deps=e}async handleSaveSession(e){let t=r(e,`filePath`),n=s(e,`metadata`);try{let e=await this.deps.debuggerManager.saveSession(t,n);return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Session saved successfully`,filePath:e,breakpointCount:this.deps.debuggerManager.listBreakpoints().length},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to save session`,error:p(e)},null,2)}]}}}async handleLoadSession(e){let t=r(e,`filePath`),n=r(e,`sessionData`);try{if(t)await this.deps.debuggerManager.loadSessionFromFile(t);else if(n)await this.deps.debuggerManager.importSession(n);else throw Error(`Either filePath or sessionData must be provided`);return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Session loaded successfully`,breakpointCount:this.deps.debuggerManager.listBreakpoints().length,pauseOnExceptions:this.deps.debuggerManager.getPauseOnExceptionsState()},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to load session`,error:p(e)},null,2)}]}}}async handleExportSession(e){let t=s(e,`metadata`);try{let e=this.deps.debuggerManager.exportSession(t);return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Session exported successfully`,session:e},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to export session`,error:p(e)},null,2)}]}}}async handleListSessions(e){try{let e=await this.deps.debuggerManager.listSavedSessions();return{content:[{type:`text`,text:JSON.stringify({success:!0,count:e.length,sessions:e.map(e=>({path:e.path,timestamp:e.timestamp,date:new Date(e.timestamp).toISOString(),metadata:e.metadata}))},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to list sessions`,error:p(e)},null,2)}]}}}};const h=5e4;function g(e){if(!(e===void 0||e.trim()===``)){if(e.length>h)throw Error(`Invalid breakpoint condition: condition is too long (max ${h} chars)`);try{c(e,{sourceType:`unambiguous`,errorRecovery:!1})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Invalid breakpoint condition: ${t}`,{cause:e})}}}var _=class{deps;constructor(e){this.deps=e}async handleBreakpointSet(e){let t=r(e,`url`),n=r(e,`scriptId`),a=i(e,`lineNumber`,0),o=i(e,`columnNumber`),s=r(e,`condition`),c=r(e,`logMessage`);g(s);let l;if(t)l=await this.deps.debuggerManager.setBreakpointByUrl({url:t,lineNumber:a,columnNumber:o,condition:s,logMessage:c});else if(n)l=await this.deps.debuggerManager.setBreakpoint({scriptId:n,lineNumber:a,columnNumber:o,condition:s,logMessage:c});else throw Error(`Either url or scriptId must be provided`);return this.deps.eventBus?.emit(`debugger:breakpoint_hit`,{scriptId:l.location?.scriptId??n??``,lineNumber:l.location?.lineNumber??a,timestamp:new Date().toISOString()}),{content:[{type:`text`,text:JSON.stringify({success:!0,breakpoint:{breakpointId:l.breakpointId,location:l.location,condition:l.condition,logMessage:l.logMessage,enabled:l.enabled}},null,2)}]}}async handleBreakpointSetOnFunction(e){let t=r(e,`functionName`,``).trim();if(!t)throw Error(`functionName is required for type=function`);let n=await this.deps.debuggerManager.setBreakpointOnFunctionCall(t);return{content:[{type:`text`,text:JSON.stringify({success:!0,breakpoint:{breakpointId:n.breakpointId,type:`function`,functionName:n.functionName}},null,2)}]}}async handleBreakpointRemove(e){let t=r(e,`breakpointId`,``);return await this.deps.debuggerManager.removeBreakpoint(t),{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Breakpoint ${t} removed`},null,2)}]}}async handleBreakpointList(e){let t=this.deps.debuggerManager.listBreakpoints();return{content:[{type:`text`,text:JSON.stringify({count:t.length,breakpoints:t.map(e=>({breakpointId:e.breakpointId,location:e.location,condition:e.condition,logMessage:e.logMessage,enabled:e.enabled,hitCount:e.hitCount}))},null,2)}]}}},v=class{deps;constructor(e){this.deps=e}async handleBreakpointSetOnException(e){let t=r(e,`state`,`none`);return await this.deps.debuggerManager.setPauseOnExceptions(t),{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Pause on exceptions set to: ${t}`,state:t},null,2)}]}}};function y(e){if(typeof e==`object`&&e&&`message`in e){let t=e.message;if(typeof t==`string`&&t.length>0)return t}return String(e)}var b=class{deps;constructor(e){this.deps=e}async handleXHRBreakpointSet(e){try{let t=r(e,`urlPattern`,``);await this.deps.debuggerManager.ensureAdvancedFeatures?.();let n=await this.deps.debuggerManager.getXHRManager().setXHRBreakpoint(t);return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`XHR breakpoint set`,breakpointId:n,urlPattern:t},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to set XHR breakpoint`,error:y(e)},null,2)}]}}}async handleXHRBreakpointRemove(e){try{let t=r(e,`breakpointId`,``);await this.deps.debuggerManager.ensureAdvancedFeatures?.();let n=await this.deps.debuggerManager.getXHRManager().removeXHRBreakpoint(t);return{content:[{type:`text`,text:JSON.stringify({success:n,message:n?`XHR breakpoint removed`:`XHR breakpoint not found`,breakpointId:t},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to remove XHR breakpoint`,error:y(e)},null,2)}]}}}async handleXHRBreakpointList(e){try{await this.deps.debuggerManager.ensureAdvancedFeatures?.();let e=this.deps.debuggerManager.getXHRManager().getAllXHRBreakpoints();return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Found ${e.length} XHR breakpoint(s)`,breakpoints:e},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to list XHR breakpoints`,error:y(e)},null,2)}]}}}};function x(e){return typeof e.ensureAdvancedFeatures==`function`}function S(e){if(typeof e==`object`&&e&&`message`in e){let t=e.message;if(typeof t==`string`&&t.length>0)return t}return String(e)}var C=class{deps;constructor(e){this.deps=e}async ensureAdvancedFeaturesIfSupported(){x(this.deps.debuggerManager)&&await this.deps.debuggerManager.ensureAdvancedFeatures()}async handleEventBreakpointSet(e){try{let t=r(e,`eventName`,``),n=r(e,`targetName`);await this.ensureAdvancedFeaturesIfSupported();let i=await this.deps.debuggerManager.getEventManager().setEventListenerBreakpoint(t,n);return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Event breakpoint set`,breakpointId:i,eventName:t,targetName:n},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to set event breakpoint`,error:S(e)},null,2)}]}}}async handleEventBreakpointSetCategory(e){try{let t=r(e,`category`,``);await this.ensureAdvancedFeaturesIfSupported();let n=this.deps.debuggerManager.getEventManager(),i;switch(t){case`mouse`:i=await n.setMouseEventBreakpoints();break;case`keyboard`:i=await n.setKeyboardEventBreakpoints();break;case`timer`:i=await n.setTimerEventBreakpoints();break;case`websocket`:i=await n.setWebSocketEventBreakpoints();break;default:throw Error(`Unknown category: ${t}`)}return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Set ${i.length} ${t} event breakpoint(s)`,category:t,breakpointIds:i},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to set event breakpoints`,error:S(e)},null,2)}]}}}async handleEventBreakpointRemove(e){try{let t=r(e,`breakpointId`,``);await this.ensureAdvancedFeaturesIfSupported();let n=await this.deps.debuggerManager.getEventManager().removeEventListenerBreakpoint(t);return{content:[{type:`text`,text:JSON.stringify({success:n,message:n?`Event breakpoint removed`:`Event breakpoint not found`,breakpointId:t},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to remove event breakpoint`,error:S(e)},null,2)}]}}}async handleEventBreakpointList(e){try{await this.ensureAdvancedFeaturesIfSupported();let e=this.deps.debuggerManager.getEventManager().getAllEventBreakpoints();return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Found ${e.length} event breakpoint(s)`,breakpoints:e},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to list event breakpoints`,error:S(e)},null,2)}]}}}};function w(e){if(typeof e==`object`&&e&&`message`in e){let t=e.message;if(typeof t==`string`&&t.length>0)return t}return String(e)}var T=class{deps;constructor(e){this.deps=e}async handleWatchAdd(e){try{let t=r(e,`expression`,``),n=r(e,`name`),i=this.deps.debuggerManager.getWatchManager().addWatch(t,n);return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Watch expression added`,watchId:i,expression:t,name:n||t},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to add watch expression`,error:w(e)},null,2)}]}}}async handleWatchRemove(e){try{let t=r(e,`watchId`,``),n=this.deps.debuggerManager.getWatchManager().removeWatch(t);return{content:[{type:`text`,text:JSON.stringify({success:n,message:n?`Watch expression removed`:`Watch expression not found`,watchId:t},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to remove watch expression`,error:w(e)},null,2)}]}}}async handleWatchList(e){try{let e=this.deps.debuggerManager.getWatchManager().getAllWatches();return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Found ${e.length} watch expression(s)`,watches:e},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to list watch expressions`,error:w(e)},null,2)}]}}}async handleWatchEvaluateAll(e){try{let t=r(e,`callFrameId`),n=await this.deps.debuggerManager.getWatchManager().evaluateAll(t);return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Evaluated ${n.length} watch expression(s)`,results:n},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to evaluate watch expressions`,error:w(e)},null,2)}]}}}async handleWatchClearAll(e){try{return this.deps.debuggerManager.getWatchManager().clearAll(),{content:[{type:`text`,text:JSON.stringify({success:!0,message:`All watch expressions cleared`},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to clear watch expressions`,error:w(e)},null,2)}]}}}};const E=(e,t)=>{if(e instanceof Error)return e.message;if(typeof e==`object`&&e&&`message`in e){let t=e.message;if(typeof t==`string`)return t}return t};var D=class{deps;constructor(e){this.deps=e}async handleGetScopeVariablesEnhanced(e){let t=r(e,`callFrameId`),n=a(e,`includeObjectProperties`),o=i(e,`maxDepth`),s=a(e,`skipErrors`,!0);try{let e=await this.deps.debuggerManager.getScopeVariables({callFrameId:t,includeObjectProperties:n,maxDepth:o,skipErrors:s});return{content:[{type:`text`,text:JSON.stringify(e,null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:E(e,`Failed to get scope variables`),error:String(e)},null,2)}]}}}async handleGetObjectProperties(e){let t=r(e,`objectId`,``);if(!t)return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`objectId parameter is required`},null,2)}]};try{let e=await this.deps.debuggerManager.getObjectPropertiesById(t);return{content:[{type:`text`,text:JSON.stringify({success:!0,propertyCount:e.length,properties:e},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:E(e,`Failed to get object properties`),error:String(e)},null,2)}]}}}};function O(e){if(typeof e==`object`&&e&&`message`in e){let t=e.message;if(typeof t==`string`&&t.length>0)return t}return String(e)}var k=class{deps;constructor(e){this.deps=e}async getBlackboxManager(){return await this.deps.debuggerManager.ensureAdvancedFeatures?.(),this.deps.debuggerManager.getBlackboxManager()}async handleBlackboxAdd(e){try{let t=r(e,`urlPattern`,``);return await(await this.getBlackboxManager()).blackboxByPattern(t),{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Script pattern blackboxed`,urlPattern:t},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to add blackbox pattern`,error:O(e)},null,2)}]}}}async handleBlackboxAddCommon(e){try{return await(await this.getBlackboxManager()).blackboxCommonLibraries(),{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Blackboxed common library patterns`},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to add common blackbox patterns`,error:O(e)},null,2)}]}}}async handleBlackboxList(e){try{let e=(await this.getBlackboxManager()).getAllBlackboxedPatterns();return{content:[{type:`text`,text:JSON.stringify({success:!0,message:`Found ${e.length} blackboxed pattern(s)`,patterns:e},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({success:!1,message:`Failed to list blackbox patterns`,error:O(e)},null,2)}]}}}};function A(e){return{content:[{type:`text`,text:JSON.stringify(e,null,2)}]}}var j=class{deps;constructor(e){this.deps=e}async handleDebuggerDisassemble(e){let t=r(e,`scriptId`),o=r(e,`callFrameId`),s=i(e,`functionOffset`),c=a(e,`includeSourceFallback`,!1),l=t,u=t?`explicit`:null,d;if(!l){let e=this.deps.debuggerManager.getPausedState()?.callFrames;if(e&&e.length>0){let t=o?e.find(e=>e.callFrameId===o):e[0];if(!t)return A({success:!1,error:`No paused call frame with callFrameId "${o}"`});let n=t.location;d={scriptId:n.scriptId,lineNumber:n.lineNumber,columnNumber:n.columnNumber},l=n.scriptId,l&&(u=`paused`)}}if(!l)return A({success:!1,error:`No scriptId resolved. Pass scriptId explicitly, or pause at a breakpoint first (debugger_disassemble defaults to the current paused frame).`,resolvedFrom:u});if(!this.deps.getPage)return A({success:!1,error:`Page context unavailable — browser must be launched with a page controller.`,scriptId:l,resolvedFrom:u,location:d});let f=new n(this.deps.getPage),p=await f.attemptNativeBytecodeExtraction(l,s??void 0);if(!p)return A({success:!1,error:`Unable to inspect bytecode for scriptId "${l}"`,scriptId:l,resolvedFrom:u,location:d});let m=await f.findHiddenClasses(l);if(p.available&&p.bytecode)return A({success:!0,scriptId:l,resolvedFrom:u,location:d,functionOffset:s??null,mode:`native`,bytecodeAvailable:!0,format:p.format,rawIgnitionBytecodeAvailable:p.rawIgnitionBytecodeAvailable,supportsNativesSyntax:p.supportsNativesSyntax,reason:p.reason,extraction:{functionName:p.functionName,bytecode:p.bytecode,sourcePosition:p.sourcePosition},disassembly:f.disassembleBytecode(p.bytecode),hiddenClasses:m,sourceFallback:null});let h=c?await f.extractBytecode(l,s??void 0):null;return A({success:!0,scriptId:l,resolvedFrom:u,location:d,functionOffset:s??null,mode:h?`source-fallback`:`unavailable`,bytecodeAvailable:!1,format:null,rawIgnitionBytecodeAvailable:p.rawIgnitionBytecodeAvailable,supportsNativesSyntax:p.supportsNativesSyntax,reason:p.reason,extraction:null,disassembly:[],hiddenClasses:m,sourceFallback:h?{format:`pseudo-bytecode`,extraction:h,disassembly:f.disassembleBytecode(h.bytecode)}:null})}},M=class{debuggerManager;runtimeInspector;debuggerControl;debuggerStepping;debuggerEvaluate;debuggerState;sessionManagement;breakpointBasic;breakpointException;xhrBreakpoint;eventBreakpoint;watchExpressions;scopeInspection;blackbox;disassemble;getPage;constructor(e,t,n,r){this.debuggerManager=e,this.runtimeInspector=t,this.getPage=r;let i={debuggerManager:this.debuggerManager,runtimeInspector:this.runtimeInspector};this.debuggerControl=new l(i),this.debuggerStepping=new u({debuggerManager:this.debuggerManager}),this.debuggerEvaluate=new d({runtimeInspector:this.runtimeInspector}),this.debuggerState=new f(i),this.sessionManagement=new m({debuggerManager:this.debuggerManager}),this.breakpointBasic=new _({debuggerManager:this.debuggerManager,eventBus:n}),this.breakpointException=new v({debuggerManager:this.debuggerManager}),this.xhrBreakpoint=new b({debuggerManager:this.debuggerManager}),this.eventBreakpoint=new C({debuggerManager:this.debuggerManager}),this.watchExpressions=new T({debuggerManager:this.debuggerManager}),this.scopeInspection=new D(i),this.blackbox=new k({debuggerManager:this.debuggerManager}),this.disassemble=new j({debuggerManager:this.debuggerManager,getPage:this.getPage})}async handleDebuggerLifecycle(e){return this.debuggerControl.handleDebuggerLifecycle(e)}async handleDebuggerPause(e){return this.debuggerControl.handleDebuggerPause(e)}async handleDebuggerResume(e){return this.debuggerControl.handleDebuggerResume(e)}async handleDebuggerRunToLocation(e){return this.debuggerControl.handleDebuggerRunToLocation(e)}async handleDebuggerStepInto(e){return this.debuggerStepping.handleDebuggerStepInto(e)}async handleDebuggerStepOver(e){return this.debuggerStepping.handleDebuggerStepOver(e)}async handleDebuggerStepOut(e){return this.debuggerStepping.handleDebuggerStepOut(e)}async handleDebuggerEvaluate(e){return this.debuggerEvaluate.handleDebuggerEvaluate(e)}async handleDebuggerEvaluateGlobal(e){return this.debuggerEvaluate.handleDebuggerEvaluateGlobal(e)}async handleDebuggerWaitForPaused(e){return this.debuggerState.handleDebuggerWaitForPaused(e)}async handleDebuggerCaptureHit(e){return this.debuggerState.handleDebuggerCaptureHit(e)}async handleDebuggerGetPausedState(e){return this.debuggerState.handleDebuggerGetPausedState(e)}async handleGetCallStack(e){return this.debuggerState.handleGetCallStack(e)}async handleDebuggerDisassemble(e){return this.disassemble.handleDebuggerDisassemble(e)}async handleSaveSession(e){return this.sessionManagement.handleSaveSession(e)}async handleLoadSession(e){return this.sessionManagement.handleLoadSession(e)}async handleExportSession(e){return this.sessionManagement.handleExportSession(e)}async handleListSessions(e){return this.sessionManagement.handleListSessions(e)}async handleBreakpointSet(e){return this.breakpointBasic.handleBreakpointSet(e)}async handleBreakpointRemove(e){return this.breakpointBasic.handleBreakpointRemove(e)}async handleBreakpointList(e){return this.breakpointBasic.handleBreakpointList(e)}async handleBreakpointSetOnException(e){return this.breakpointException.handleBreakpointSetOnException(e)}async handleXHRBreakpointSet(e){return this.xhrBreakpoint.handleXHRBreakpointSet(e)}async handleXHRBreakpointRemove(e){return this.xhrBreakpoint.handleXHRBreakpointRemove(e)}async handleXHRBreakpointList(e){return this.xhrBreakpoint.handleXHRBreakpointList(e)}async handleEventBreakpointSet(e){return this.eventBreakpoint.handleEventBreakpointSet(e)}async handleEventBreakpointSetCategory(e){return this.eventBreakpoint.handleEventBreakpointSetCategory(e)}async handleEventBreakpointRemove(e){return this.eventBreakpoint.handleEventBreakpointRemove(e)}async handleEventBreakpointList(e){return this.eventBreakpoint.handleEventBreakpointList(e)}async handleWatchAdd(e){return this.watchExpressions.handleWatchAdd(e)}async handleWatchRemove(e){return this.watchExpressions.handleWatchRemove(e)}async handleWatchList(e){return this.watchExpressions.handleWatchList(e)}async handleWatchEvaluateAll(e){return this.watchExpressions.handleWatchEvaluateAll(e)}async handleWatchClearAll(e){return this.watchExpressions.handleWatchClearAll(e)}async handleGetScopeVariablesEnhanced(e){return this.scopeInspection.handleGetScopeVariablesEnhanced(e)}async handleGetObjectProperties(e){return this.scopeInspection.handleGetObjectProperties(e)}async handleBlackboxAdd(e){return this.blackbox.handleBlackboxAdd(e)}async handleBlackboxAddCommon(e){return this.blackbox.handleBlackboxAddCommon(e)}async handleBlackboxList(e){return this.blackbox.handleBlackboxList(e)}async handleBreakpoint(e){let t=String(e.action??``),n=String(e.type??`code`);switch(n){case`code`:switch(t){case`set`:return this.breakpointBasic.handleBreakpointSet(e);case`remove`:return this.breakpointBasic.handleBreakpointRemove(e);case`list`:return this.breakpointBasic.handleBreakpointList(e)}break;case`xhr`:switch(t){case`set`:return this.xhrBreakpoint.handleXHRBreakpointSet(e);case`remove`:return this.xhrBreakpoint.handleXHRBreakpointRemove(e);case`list`:return this.xhrBreakpoint.handleXHRBreakpointList(e)}break;case`event`:switch(t){case`set`:return this.eventBreakpoint.handleEventBreakpointSet(e);case`remove`:return this.eventBreakpoint.handleEventBreakpointRemove(e);case`list`:return this.eventBreakpoint.handleEventBreakpointList(e)}break;case`event_category`:if(t===`set`)return this.eventBreakpoint.handleEventBreakpointSetCategory(e);break;case`exception`:if(t===`set`)return this.breakpointException.handleBreakpointSetOnException(e);break;case`function`:switch(t){case`set`:return this.breakpointBasic.handleBreakpointSetOnFunction(e);case`remove`:return this.breakpointBasic.handleBreakpointRemove(e);case`list`:return this.breakpointBasic.handleBreakpointList(e)}break}return{content:[{type:`text`,text:JSON.stringify({success:!1,error:`Invalid breakpoint action/type: ${t}/${n}. Valid types: code, xhr, event, event_category, exception, function. Valid actions: set, remove, list.`})}]}}async handleWatch(e){let t=String(e.action??``);switch(t){case`add`:return this.watchExpressions.handleWatchAdd(e);case`remove`:return this.watchExpressions.handleWatchRemove(e);case`list`:return this.watchExpressions.handleWatchList(e);case`evaluate_all`:return this.watchExpressions.handleWatchEvaluateAll(e);case`clear_all`:return this.watchExpressions.handleWatchClearAll(e);default:return{content:[{type:`text`,text:JSON.stringify({success:!1,error:`Unknown watch action: ${t}. Valid: add, remove, list, evaluate_all, clear_all`})}]}}}async handleDebuggerStep(e){let t=String(e.direction??`over`);switch(t){case`into`:return this.debuggerStepping.handleDebuggerStepInto(e);case`over`:return this.debuggerStepping.handleDebuggerStepOver(e);case`out`:return this.debuggerStepping.handleDebuggerStepOut(e);default:return{content:[{type:`text`,text:JSON.stringify({success:!1,error:`Unknown direction: ${t}. Valid: into, over, out`})}]}}}async handleDebuggerEvaluateDispatch(e){return String(e.context??`frame`)===`global`?this.debuggerEvaluate.handleDebuggerEvaluateGlobal(e):this.debuggerEvaluate.handleDebuggerEvaluate(e)}async handleDebuggerSession(e){let t=String(e.action??``);switch(t){case`save`:return this.sessionManagement.handleSaveSession(e);case`load`:return this.sessionManagement.handleLoadSession(e);case`export`:return this.sessionManagement.handleExportSession(e);case`list`:return this.sessionManagement.handleListSessions(e);default:return{content:[{type:`text`,text:JSON.stringify({success:!1,error:`Unknown action: ${t}. Valid actions: save, load, export, list`})}]}}}};export{M as DebuggerToolHandlers};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./tool-builder-CpLh-UQd.mjs";const t=[e(`ai_hook`,e=>e.desc(`Manage AI hooks. Actions: inject (inject code into page), get_data (retrieve captured hook data), list (all active hooks), clear (remove hook data by id or all), toggle (enable/disable a hook), export (export data as JSON/CSV).`).enum(`action`,[`inject`,`get_data`,`list`,`clear`,`toggle`,`export`],`Operation to perform`).string(`hookId`,`Hook identifier (required for inject/get_data/toggle; optional for clear/export)`).string(`code`,`Hook code to inject (required for action=inject)`).number(`maxMatches`,`Auto-unhook guard (action=inject only): after the hook fires this many calls the injected guard flips metadata.enabled=false. Hook code must call window.__aiHookUnhookGuard(hookId, value) per call.`).string(`unhookPredicate`,`Auto-unhook guard (action=inject only): JS expression compiled in-page as new Function("value", src); truthy result flips metadata.enabled=false. Hook code must call window.__aiHookUnhookGuard(hookId, value) per call.`).enum(`method`,[`evaluateOnNewDocument`,`evaluate`],`Injection method (for action=inject)`,{default:`evaluate`}).boolean(`enabled`,`Enable or disable hook (required for action=toggle)`).enum(`format`,[`json`,`csv`],`Export format (for action=export)`,{default:`json`}).required(`action`))],n=[e(`hook_preset`,e=>e.desc(`Install a pre-built JavaScript hook from 20+ built-in presets (eval, atob/btoa, Proxy, Reflect, Object.defineProperty, etc.), or provide customTemplate/customTemplates to install your own reusable hook bodies. Use listPresets=true to see all available preset descriptions.`).string(`preset`,`Single preset name to install. Accepts built-in preset ids or ids provided by customTemplate/customTemplates.`).array(`presets`,{type:`string`},`List of preset names to install simultaneously. Accepts built-in ids and custom template ids.`).prop(`customTemplate`,{type:`object`,properties:{id:{type:`string`,description:`Stable preset id, for example deobfuscation-sinks`},description:{type:`string`,description:`Human-readable description for listPresets output.`},body:{type:`string`,description:`Hook body snippet inserted into the preset wrapper.`},mutateReturn:{type:`string`,description:"Optional JS expression that mutates a hooked call return value. May reference __result (the original return). When set, the wrapper exposes __mutateReturn(result); wrap the original call in your body, e.g. `return __mutateReturn(_orig.call(this, code));`. Ships NO hardcoded mutation."}},required:[`id`,`body`],description:`Inline custom template. body should contain the hook body inserted into the standard buildHookCode wrapper. Use {{STACK_CODE}} and {{LOG_FN}} placeholders when needed.`}).prop(`customTemplates`,{type:`array`,items:{type:`object`,properties:{id:{type:`string`},description:{type:`string`},body:{type:`string`},mutateReturn:{type:`string`}},required:[`id`,`body`]},description:`List of inline custom templates to register for this invocation.`}).boolean(`captureStack`,`Include call stack in captured data (has performance impact)`,{default:!1}).boolean(`logToConsole`,`Log hook events to browser console`,{default:!0}).enum(`method`,[`evaluate`,`evaluateOnNewDocument`],`Injection method: evaluate=current page, evaluateOnNewDocument=before page scripts`,{default:`evaluate`}).boolean(`listPresets`,`Set to true to list all available presets with descriptions instead of installing.`,{default:!1}))];export{n,t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./tool-builder-CpLh-UQd.mjs";const t=[e(`run_macro`,e=>e.desc(`Execute a registered macro with sequence, parallel, branch, fallback, and retry orchestration.`).string(`macroId`,`Macro ID to execute`).prop(`inputOverrides`,{type:`object`,description:`Per-step input overrides keyed by step ID`,additionalProperties:{type:`object`,additionalProperties:!0}}).boolean(`dryRun`,`Plan-preview: build the macro node tree and return the effective structure (with optional wrapping, retry, timeout, inputFrom refs) without executing any tools. Surfaces schema errors (e.g. a step with zero or multiple node kinds) before run time.`,{default:!1}).required(`macroId`)),e(`list_macros`,e=>e.desc(`List all available macros.`).query())];export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{g as e}from"./ensure-browser-core-BP70x0TB.mjs";import{t}from"./tool-builder-CpLh-UQd.mjs";const n=[t(`js_heap_search`,e=>e.desc(`Search JS heap for strings matching a pattern.`).string(`pattern`,`Pattern to search`).number(`maxResults`,`Max matches`,{default:50}).boolean(`caseSensitive`,`Case sensitive`,{default:!1}).required(`pattern`).query()),t(`tab_workflow`,e=>e.desc(`Cross-tab coordination.`).enum(`action`,[`list`,`alias_bind`,`alias_open`,`navigate`,`wait_for`,`context_set`,`context_get`,`transfer`,`clear`],`Action`).string(`alias`,`Tab alias`).string(`fromAlias`,`Source tab alias`).number(`index`,`Tab index (0-based)`).string(`url`,`URL`).string(`selector`,`CSS selector to wait for`).string(`waitForText`,`Text to wait for`).string(`key`,`Context key`).string(`value`,`Context value`).string(`expression`,`JS expression for transfer`).number(`timeoutMs`,`Timeout ms`,{default:1e4}).requiredOpenWorld(`action`)),t(`page_coverage_start`,e=>e.desc(`Start JS+CSS code coverage collection on the active page. Coverage tracks which bytes of each loaded script/stylesheet are actually executed. Use page_coverage_stop to stop collection and retrieve results.`).query()),t(`page_coverage_stop`,e=>e.desc(`Stop coverage collection and return per-script JS+CSS coverage results. Includes total bytes, used bytes, and coverage percentage per URL.`).query()),t(`page_block_script`,e=>e.desc(`Manage script blocking rules by URL pattern. Blocked scripts are prevented from loading/executing. Actions: add/block (add a rule), remove/unblock (remove a rule), list (show all rules), clear (remove all).`).enum(`action`,[`add`,`block`,`remove`,`unblock`,`list`,`clear`],`Action`,{default:`list`}).string(`urlPattern`,`URL pattern to block (exact match or * wildcard). Required for add/block/remove/unblock.`).string(`reason`,`Reason for blocking (shown in results)`).openWorld())],r=[t(`page_navigate`,t=>t.desc(`Navigate the page to a URL with wait and network options.`).string(`url`,`Target URL`).enum(`waitUntil`,e,`When to consider navigation succeeded`,{default:`networkidle`}).number(`timeout`,`Navigation timeout in ms`,{default:3e4,minimum:1e3,maximum:12e4}).boolean(`enableNetworkMonitoring`,`Enable network monitoring before navigation`,{default:!1}).required(`url`).idempotent().openWorld()),t(`page_reload`,e=>e.desc(`Reload the page with optional cache bypass.`).idempotent().openWorld()),t(`page_back`,e=>e.desc(`Navigate back in browser history.`).openWorld()),t(`page_forward`,e=>e.desc(`Navigate forward in browser history.`).openWorld()),t(`page_list_frames`,e=>e.desc(`List page frames for frame targeting.`).query()),t(`page_click`,e=>e.desc(`Click a page element by CSS selector.`).string(`selector`,`CSS selector`).enum(`button`,[`left`,`right`,`middle`],`Mouse button`,{default:`left`}).number(`clickCount`,`Number of clicks`,{default:1,minimum:1,maximum:10}).number(`delay`,`Delay between mousedown and mouseup in ms`,{minimum:0,maximum:1e4}).number(`timeout`,`Click timeout in ms`,{default:1e4,minimum:1e3,maximum:12e4}).string(`frameUrl`,`iframe URL substring`).string(`frameSelector`,`iframe CSS selector`).requiredOpenWorld(`selector`)),t(`page_type`,e=>e.desc(`Type text into an element.`).string(`selector`,`CSS selector`).string(`text`,`Text to type`).number(`delay`,`Delay between key presses in ms`,{minimum:0,maximum:1e3}).string(`frameUrl`,`iframe URL substring`).string(`frameSelector`,`iframe CSS selector`).requiredOpenWorld(`selector`,`text`)),t(`page_upload_files`,e=>e.desc(`Upload one or more local files into an <input type="file"> element.`).string(`selector`,`CSS selector for the file input`).array(`paths`,{type:`string`},`Project-relative file paths to upload`).string(`frameUrl`,`iframe URL substring`).string(`frameSelector`,`iframe CSS selector`).required(`selector`,`paths`).openWorld()),t(`page_select`,e=>e.desc(`Select option(s) in a <select> element.`).string(`selector`,`CSS selector`).array(`values`,{type:`string`},`Values to select`).string(`frameUrl`,`iframe URL substring`).string(`frameSelector`,`iframe CSS selector`).required(`selector`,`values`).idempotent().openWorld()),t(`page_hover`,e=>e.desc(`Hover over an element by CSS selector.`).string(`selector`,`CSS selector`).string(`frameUrl`,`iframe URL substring`).string(`frameSelector`,`iframe CSS selector`).required(`selector`).idempotent().openWorld()),t(`page_scroll`,e=>e.desc(`Scroll to absolute or relative coordinates.`).number(`x`,`Horizontal position`,{default:0}).number(`y`,`Vertical position`,{default:0}).idempotent()),t(`page_wait_for_selector`,e=>e.desc(`Wait for an element to appear.`).string(`selector`,`CSS selector`).number(`timeout`,`Timeout in ms`,{default:3e4,minimum:1e3,maximum:12e4}).required(`selector`).query()),t(`page_evaluate`,e=>e.desc(`Execute JavaScript in page context.`).string(`code`,`JavaScript code`).string(`script`,`Alias of code`).string(`expression`,`Alias of code`).boolean(`autoSummarize`,`Auto-summarize large results`,{default:!0}).number(`maxSize`,`Max result size in bytes before summarizing`,{default:51200,minimum:1024,maximum:10485760}).array(`fieldFilter`,{type:`string`},`Field names to strip from result (recursive)`).boolean(`stripBase64`,`Strip base64 strings from result`,{default:!1}).string(`frameUrl`,`iframe URL substring`).string(`frameSelector`,`iframe CSS selector`).openWorld()),t(`page_screenshot`,e=>e.desc(`Capture a page or element screenshot.`).prop(`selector`,{oneOf:[{type:`string`,description:`CSS selector`},{type:`array`,items:{type:`string`},description:`Multiple CSS selectors`}],description:`Element selector(s). Omit for full page viewport.`}).object(`clip`,{x:{type:`number`,description:`Left offset`},y:{type:`number`,description:`Top offset`},width:{type:`number`,description:`Width`},height:{type:`number`,description:`Height`}},`Pixel region to capture`,{required:[`x`,`y`,`width`,`height`]}).string(`path`,`File path to save screenshot`).enum(`type`,[`png`,`jpeg`],`Image format`,{default:`png`}).number(`quality`,`Image quality 0-100 (jpeg only)`,{minimum:1,maximum:100}).boolean(`fullPage`,`Capture full scrollable page`,{default:!1}).query()),t(`get_all_scripts`,e=>e.desc(`List all scripts loaded by the page with optional source.`).boolean(`includeSource`,`Include source code`,{default:!1}).query()),t(`get_script_source`,e=>e.desc(`Retrieve source code of a script by ID or URL pattern.`).string(`scriptId`,`Script ID`).string(`url`,`Script URL (supports wildcards)`).boolean(`preview`,`Preview only (first N lines + metadata)`,{default:!1}).number(`maxLines`,`Max lines in preview`,{default:100,minimum:1,maximum:1e4}).number(`startLine`,`Start line (1-based)`,{minimum:1}).number(`endLine`,`End line (1-based)`,{minimum:1}).query())],i=[t(`console_monitor`,e=>e.desc(`Toggle console log capture (log, warn, error, info, debug).`).enum(`action`,[`enable`,`disable`],`Action`).required(`action`).idempotent()),t(`console_get_logs`,e=>e.desc(`Retrieve captured console logs with type and time filters.`).enum(`type`,[`log`,`warn`,`error`,`info`,`debug`],`Log type filter`).number(`limit`,`Max logs`).number(`since`,`Timestamp filter`).query()),t(`console_execute`,e=>e.desc(`Evaluate a JS expression in the browser console context.`).string(`expression`,`JavaScript expression`).number(`maxSize`,`Max result size in bytes before offloading (default 50KB → detailId ref)`,{default:51200,minimum:1024,maximum:104857600}).boolean(`stripBase64`,`Strip base64 strings from result`,{default:!1}).requiredOpenWorld(`expression`)),t(`page_inject_script`,e=>e.desc(`Inject JavaScript to run on every page load.`).string(`script`,`JavaScript code`).requiredOpenWorld(`script`)),t(`page_cookies`,e=>e.desc(`Manage page cookies; clear requires matching expectedCount.`).enum(`action`,[`get`,`set`,`clear`],`Action`).number(`expectedCount`,`Required for clear: must match current count`).array(`urls`,{type:`string`},`Optional URL scope for action=get; omitted returns all cookies via CDP`).array(`cookies`,{type:`object`,properties:{name:{type:`string`},value:{type:`string`},domain:{type:`string`},path:{type:`string`},expires:{type:`number`},httpOnly:{type:`boolean`},secure:{type:`boolean`},sameSite:{type:`string`,enum:[`Strict`,`Lax`,`None`]}},required:[`name`,`value`]},`Cookies (action=set)`).destructive().required(`action`)),t(`page_set_viewport`,e=>e.desc(`Set the browser viewport dimensions.`).number(`width`,`Width`).number(`height`,`Height`).required(`width`,`height`).idempotent()),t(`page_emulate_device`,e=>e.desc(`Emulate a mobile device profile.`).string(`device`,`Device name`).required(`device`).idempotent()),t(`page_local_storage`,e=>e.desc(`Read, write, delete, or clear localStorage entries for the current origin.`).enum(`action`,[`get`,`set`,`delete`,`clear`],`Action`).string(`key`,`Key (for set/get/delete)`).string(`value`,`Value (for set)`).required(`action`)),t(`page_session_storage`,e=>e.desc(`Read, write, delete, or clear sessionStorage entries for the current origin.`).enum(`action`,[`get`,`set`,`delete`,`clear`],`Action`).string(`key`,`Key (for set/get/delete)`).string(`value`,`Value (for set)`).required(`action`)),t(`page_storage_info`,e=>e.desc(`Query navigator.storage.estimate() for {usage, quota} and navigator.storage.persisted() to inspect the origin storage budget and persistence status (offline/PWA reverse engineering).`).query()),t(`page_press_key`,e=>e.desc(`Simulate a key press by name.`).string(`key`,`Key name`).requiredOpenWorld(`key`)),t(`page_handle_dialog`,e=>e.desc(`Control how JavaScript dialogs (alert/confirm/prompt/beforeunload) are answered. By default installs a persistent handler that auto-dismisses all dialogs. Set dismissAll=false for one-shot handling of the next dialog.`).boolean(`accept`,`Accept (true) or dismiss (false) the dialog`,{default:!0}).string(`promptText`,`Response text for prompt dialogs (accept must be true)`).boolean(`dismissAll`,`Install a persistent handler that auto-dismisses all future dialogs`,{default:!1}).idempotent()),t(`service_worker_deliver_push`,e=>e.desc(`Deliver a synthetic push message to a service worker via CDP ServiceWorker.deliverPushMessage. Requires an attached CDP session on a SW target.`).string(`origin`,`Origin of the service worker registration`).string(`registrationId`,`Service worker registration ID`).string(`data`,`Push message payload data`).required(`origin`,`registrationId`)),t(`service_worker_dispatch_sync`,e=>e.desc(`Dispatch a Background Sync event to a service worker via CDP ServiceWorker.dispatchSyncEvent. Requires an attached CDP session on a SW target.`).string(`origin`,`Origin of the service worker registration`).string(`registrationId`,`Service worker registration ID`).string(`tag`,`Sync tag (identifies the sync event)`,{default:``}).boolean(`lastChance`,`Whether this is the last retry attempt`,{default:!1}).required(`origin`,`registrationId`))],a=[t(`get_detailed_data`,e=>e.desc(`Retrieve large data by detailId.`).string(`detailId`,`Detail ID from previous response`).string(`path`,`Path to specific nested data`).required(`detailId`).query()),t(`get_offloaded_data`,e=>e.desc('Retrieve the original bytes of a field that was offloaded to disk (see the `_offload.path` in a placeholder). Returns base64 by default for binary blobs (e.g. decoded data: URIs); use encoding="utf8" for text.').string(`path`,`Project-relative path from an _offload placeholder (under artifacts/offloaded/)`).enum(`encoding`,[`base64`,`utf8`],`Output encoding`,{default:`base64`}).required(`path`).query()),t(`browser_launch`,e=>e.desc(`Launch Chromium/Camoufox or connect to a running browser.`).enum(`driver`,[`chrome`,`camoufox`],`Browser driver`,{default:`chrome`}).boolean(`headless`,`Run headless`,{default:!1}).enum(`os`,[`windows`,`macos`,`linux`],`OS fingerprint (camoufox)`,{default:`windows`}).enum(`mode`,[`launch`,`connect`],`Launch or connect`,{default:`launch`}).string(`browserURL`,`Browser debug endpoint URL`).string(`wsEndpoint`,`WebSocket endpoint`).boolean(`autoConnect`,`Auto-detect local Chrome debug WebSocket`,{default:!1}).enum(`channel`,[`stable`,`beta`,`dev`,`canary`],`Chrome channel`,{default:`stable`}).string(`userDataDir`,`Chrome profile directory`).array(`args`,{type:`string`},`Extra Chrome launch args`).string(`sslKeyLogFile`,`Path to write Chrome TLS key log (--ssl-key-log). Chrome emits NSS-format secrets (CLIENT_RANDOM/TRAFFIC_SECRET) here; pair with tls_keylog_parse to decrypt captured traffic. Chrome-only, launch-time.`).boolean(`enableV8NativesSyntax`,`Enable V8 native syntax for launched Chrome`,{default:!0}).boolean(`geoip`,`Auto-resolve GeoIP (camoufox)`,{default:!1}).boolean(`humanize`,`Humanize cursor (camoufox)`,{default:!1}).string(`proxy`,`Proxy URL (camoufox)`).boolean(`blockImages`,`Block images (camoufox)`,{default:!1}).boolean(`blockWebrtc`,`Block WebRTC (camoufox)`,{default:!1}).boolean(`blockWebgl`,`Block WebGL (camoufox)`,{default:!1}).string(`locale`,`Firefox locale (camoufox)`).array(`addons`,{type:`string`},`Firefox addons (camoufox)`).array(`fonts`,{type:`string`},`Custom fonts (camoufox)`).array(`excludeAddons`,{type:`string`},`Addons to exclude (camoufox)`).boolean(`customFontsOnly`,`Only use custom fonts (camoufox)`,{default:!1}).object(`screen`,{width:{type:`number`},height:{type:`number`}},`Screen resolution (camoufox)`).object(`window`,{width:{type:`number`},height:{type:`number`}},`Window size (camoufox)`).prop(`fingerprint`,{type:`object`,description:`Pre-generated fingerprint (camoufox)`,additionalProperties:!0}).prop(`webglConfig`,{type:`object`,description:`WebGL config (camoufox)`,additionalProperties:!0}).prop(`firefoxUserPrefs`,{type:`object`,description:`Firefox about:config overrides (camoufox)`,additionalProperties:!0}).boolean(`mainWorldEval`,`Main world eval (camoufox)`,{default:!0}).openWorld()),t(`camoufox_server`,e=>e.desc(`Start, close, or check status of a Camoufox anti-detect server.`).enum(`action`,[`launch`,`close`,`status`],`Action`).number(`port`,`Listen port (launch)`).string(`ws_path`,`WebSocket path (launch)`).enum(`os`,[`windows`,`macos`,`linux`],`OS fingerprint (launch)`,{default:`windows`}).boolean(`headless`,`Headless (launch)`,{default:!0}).boolean(`geoip`,`GeoIP (launch)`,{default:!1}).boolean(`humanize`,`Humanize cursor (launch)`,{default:!1}).string(`proxy`,`Proxy URL (launch)`).boolean(`blockImages`,`Block images (launch)`,{default:!1}).boolean(`blockWebrtc`,`Block WebRTC (launch)`,{default:!1}).boolean(`blockWebgl`,`Block WebGL (launch)`,{default:!1}).string(`locale`,`Firefox locale (launch)`).array(`addons`,{type:`string`},`Addons (launch)`).array(`fonts`,{type:`string`},`Fonts (launch)`).array(`excludeAddons`,{type:`string`},`Excluded addons (launch)`).boolean(`customFontsOnly`,`Only custom fonts (launch)`,{default:!1}).object(`screen`,{width:{type:`number`},height:{type:`number`}},`Screen resolution (launch)`).object(`window`,{width:{type:`number`},height:{type:`number`}},`Window size (launch)`).prop(`fingerprint`,{type:`object`,description:`Pre-generated fingerprint (launch)`,additionalProperties:!0}).prop(`webglConfig`,{type:`object`,description:`WebGL config (launch)`,additionalProperties:!0}).prop(`firefoxUserPrefs`,{type:`object`,description:`Firefox about:config overrides (launch)`,additionalProperties:!0}).boolean(`mainWorldEval`,`Main world eval (launch)`,{default:!0}).boolean(`enableCache`,`Enable cache (launch)`,{default:!1}).required(`action`).destructive()),t(`browser_attach`,e=>e.desc(`Connect to a running browser.`).string(`browserURL`,`Debug endpoint URL`).string(`wsEndpoint`,`WebSocket URL`).boolean(`autoConnect`,`Auto-detect local Chrome debug WebSocket`,{default:!1}).enum(`channel`,[`stable`,`beta`,`dev`,`canary`],`Chrome channel`,{default:`stable`}).string(`userDataDir`,`Chrome profile directory`).number(`pageIndex`,`Tab index to activate`,{default:0}).openWorld()),t(`browser_list_cdp_targets`,e=>e.desc(`List CDP targets with optional type/URL/title filters.`).string(`browserURL`,`Browser URL`).string(`wsEndpoint`,`WebSocket endpoint`).boolean(`autoConnect`,`Auto-detect local Chrome debug WebSocket`,{default:!1}).enum(`channel`,[`stable`,`beta`,`dev`,`canary`],`Chrome channel`,{default:`stable`}).string(`userDataDir`,`Chrome profile directory`).string(`type`,`Target type filter`).array(`types`,{type:`string`},`Target types to include`).string(`targetId`,`Exact targetId filter`).string(`urlPattern`,`URL substring filter`).string(`titlePattern`,`Title substring filter`).boolean(`attachedOnly`,`Only attached targets`,{default:!1}).boolean(`discoverOOPIF`,`Auto-discover cross-origin iframes`,{default:!0}).query().openWorld()),t(`browser_attach_cdp_target`,e=>e.desc(`Attach to a CDP target by targetId.`).string(`targetId`,`Target ID`).required(`targetId`)),t(`browser_detach_cdp_target`,e=>e.desc(`Detach the current CDP target session.`).destructive()),t(`browser_evaluate_cdp_target`,e=>e.desc(`Evaluate JS in the attached CDP target.`).string(`code`,`JavaScript code`).string(`script`,`Alias of code`).string(`expression`,`Alias of code`).boolean(`returnByValue`,`Return by value`,{default:!0}).boolean(`awaitPromise`,`Await promises`,{default:!0}).boolean(`autoSummarize`,`Summarize large results`,{default:!0}).number(`maxSize`,`Max size before summarizing`,{default:51200}).array(`fieldFilter`,{type:`string`},`Field names to strip`).boolean(`stripBase64`,`Strip base64 payloads`,{default:!1}).openWorld()),t(`browser_list_workers`,e=>e.desc(`Enumerate Service Worker / Shared Worker / dedicated Web Worker targets via Target.getTargets. Use browser_worker_scripts(targetId=...) afterwards to dump a worker's loaded scripts — essential for inspecting PWA / SW-backed auth code.`).string(`urlPattern`,`URL substring filter`).boolean(`includeServiceWorkers`,`Include service_worker targets`,{default:!0}).boolean(`includeDedicatedWorkers`,`Include dedicated worker targets`,{default:!0}).boolean(`includeSharedWorkers`,`Include shared_worker targets`,{default:!0}).query().openWorld()),t(`browser_worker_scripts`,e=>e.desc(`Attach a CDP session to a worker target and dump its parsed scripts (equivalent to get_all_scripts, but scoped to a worker). Debugger.scriptParsed is replayed on Debugger.enable, so already-loaded worker scripts are returned.`).string(`targetId`,`Worker targetId from browser_list_workers`).boolean(`includeSource`,`Fetch each script body (byte-capped to protect context)`,{default:!1}).number(`maxScripts`,`Max scripts returned`,{default:200}).required(`targetId`).query().openWorld()),t(`browser_close`,e=>e.desc(`Close the browser and release all resources.`).destructive()),t(`browser_status`,e=>e.desc(`Report browser status: running, tab count, version.`).query())],o=[t(`captcha_detect`,e=>e.desc(`Detect CAPTCHAs on the current page.`).query()),t(`captcha_wait`,e=>e.desc(`Block until the user manually solves the CAPTCHA.`).number(`timeout`,`Timeout in ms`,{default:3e5}).query().openWorld()),t(`captcha_config`,e=>e.desc(`Configure CAPTCHA detection sensitivity and solver backend.`).boolean(`autoDetectCaptcha`,`Auto-detect after navigation`).boolean(`autoSwitchHeadless`,`Switch to headed on detection`).number(`captchaTimeout`,`Wait timeout in ms`).idempotent()),t(`stealth_inject`,e=>e.desc(`Inject anti-detection scripts to reduce bot fingerprint exposure.`).idempotent()),t(`stealth_set_user_agent`,e=>e.desc(`Set User-Agent and fingerprint.`).enum(`platform`,[`windows`,`mac`,`linux`],`Platform`,{default:`windows`}).idempotent()),t(`stealth_configure_jitter`,e=>e.desc(`Configure CDP timing jitter.`).boolean(`enabled`,`Enable`,{default:!0}).number(`minDelayMs`,`Min delay ms`,{default:20}).number(`maxDelayMs`,`Max delay ms`,{default:80}).boolean(`burstMode`,`Skip jitter for time-critical ops`,{default:!1}).idempotent()),t(`stealth_generate_fingerprint`,e=>e.desc(`Generate a browser fingerprint.`).enum(`os`,[`windows`,`macos`,`linux`],`Target OS`).enum(`browser`,[`chrome`,`firefox`],`Target browser`,{default:`chrome`}).string(`locale`,`Locale`,{default:`en-US`})),t(`stealth_verify`,e=>e.desc(`Run anti-detection checks.`).query()),t(`browser_font_fingerprint`,e=>e.desc(`Enumerate locally-installed fonts for fingerprint analysis. Primary path is the Local Font Access API (queryLocalFonts, Chromium 103+); when unavailable or denied, falls back to a small document.fonts.check probe set. Returns the detected font set, a stable hash for comparison, and optionally spoofs the font fingerprint.`).boolean(`useLocalFontApi`,`Prefer queryLocalFonts() enumeration (richer)`,{default:!0}).boolean(`spoof`,`Override document.fonts.check to a spoofed result`,{default:!1}).number(`maxFonts`,`Cap on enumerated local fonts`,{default:2e3}).query().openWorld()),t(`browser_list_tabs`,e=>e.desc(`List open browser tabs with URLs and titles.`).string(`browserURL`,`Browser URL`).string(`wsEndpoint`,`WebSocket endpoint`).boolean(`autoConnect`,`Auto-detect Chrome debug WebSocket`,{default:!1}).enum(`channel`,[`stable`,`beta`,`dev`,`canary`],`Chrome channel`,{default:`stable`}).string(`userDataDir`,`Chrome profile directory`).query().openWorld()),t(`browser_select_tab`,e=>e.desc(`Switch active tab by index, URL pattern, or title pattern.`).number(`index`,`Tab index`).string(`urlPattern`,`URL substring match`).string(`titlePattern`,`Title substring match`).idempotent()),t(`framework_state_extract`,e=>e.desc(`Extract React/Vue/Svelte/Solid component state and meta-framework info.`).enum(`framework`,[`auto`,`react`,`vue2`,`vue3`,`svelte`,`solid`,`preact`],`Framework`,{default:`auto`}).string(`selector`,`Root element CSS selector`).number(`maxDepth`,`Max traversal depth`,{default:5}).query().openWorld()),t(`indexeddb_dump`,e=>e.desc(`Export IndexedDB databases and records. Supports keyRange queries (IDBKeyRange.bound/lower/upper), indexName (query a specific index), count (count-only mode), and cursor pagination (stream large stores in batches).`).string(`database`,`Database name`).string(`store`,`Object store name`).number(`maxRecords`,`Max records per store`,{default:100}).string(`indexName`,`Query a specific index on the object store`).boolean(`count`,`Return only {count} of matching records (no record fetch)`,{default:!1}).object(`keyRange`,{lower:{type:`string`},upper:{type:`string`},lowerOpen:{type:`boolean`},upperOpen:{type:`boolean`}},`IDBKeyRange bounds. lower/upper accepted as strings (IndexedDB casts to the index key type).`).object(`cursor`,{offset:{type:`number`},batchSize:{type:`number`}},`Stream a batch via openCursor instead of getAll. Returns {records, hasMore, nextOffset}.`).query()),t(`camoufox_geolocation`,e=>e.desc(`Get geolocation for a locale.`).string(`locale`,`Locale string`).string(`proxy`,`Proxy URL for IP lookup`).required(`locale`).query()),t(`browser_passkey_seed`,e=>e.desc(`Seed a WebAuthn/Passkey credential into the browser for test automation.`).string(`relyingPartyId`,`Relying party ID (e.g. example.com)`).string(`credentialId`,`Base64-encoded credential ID`).string(`userHandle`,`Base64-encoded user handle`).string(`privateKey`,`Base64-encoded PKCS#8 private key`).string(`publicKey`,`Base64-encoded public key (optional but recommended)`).string(`userDisplayName`,`Display name for the credential owner`).required(`relyingPartyId`,`credentialId`,`userHandle`,`privateKey`).destructive().idempotent())],s=[t(`browser_codegen_start`,e=>e.desc(`Start recording browser actions as replayable steps.`).idempotent()),t(`browser_codegen_stop`,e=>e.desc(`Stop recording browser actions and return cleaned replay steps.`).query()),t(`captcha_solver_capabilities`,e=>e.desc(`Report CAPTCHA solving mode availability.`).query()),t(`human_mouse`,e=>e.desc(`Move mouse along a Bezier curve with jitter.`).number(`fromX`,`Start X`).number(`fromY`,`Start Y`).number(`toX`,`Target X`).number(`toY`,`Target Y`).string(`selector`,`CSS selector (alternative to toX/toY)`).string(`frameUrl`,`iframe URL substring`).string(`frameSelector`,`iframe CSS selector`).number(`durationMs`,`Duration ms`,{default:600}).number(`steps`,`Intermediate points`,{default:24}).number(`jitterPx`,`Max jitter px`,{default:1.5}).enum(`curve`,[`ease`,`linear`,`ease-in`,`ease-out`],`Speed curve`,{default:`ease`}).boolean(`click`,`Click at destination`,{default:!1}).openWorld()),t(`human_scroll`,e=>e.desc(`Scroll with randomized speed and pauses to mimic human behavior.`).number(`distance`,`Distance px`,{default:500}).enum(`direction`,[`up`,`down`,`left`,`right`],`Direction`,{default:`down`}).number(`durationMs`,`Duration ms`,{default:1500}).number(`segments`,`Segments`,{default:8}).number(`pauseMs`,`Pause between segments ms`,{default:80}).number(`jitter`,`Variation factor 0-1`,{default:.3}).string(`selector`,`Scrollable container selector`).openWorld()),t(`human_typing`,e=>e.desc(`Type text with human-like speed and occasional typos.`).string(`selector`,`CSS selector`).string(`text`,`Text to type`).string(`frameUrl`,`iframe URL substring`).string(`frameSelector`,`iframe CSS selector`).number(`wpm`,`Words per minute`,{default:90}).number(`errorRate`,`Typo probability per char`,{default:.02}).number(`correctDelayMs`,`Delay before correcting typo ms`,{default:200}).boolean(`clearFirst`,`Clear existing value first`,{default:!1}).requiredOpenWorld(`selector`,`text`)),t(`captcha_vision_solve`,e=>e.desc(`Solve a CAPTCHA with manual flow or a configured external service.`).enum(`mode`,[`external_service`,`manual`],`Solver mode`).string(`provider`,`External solver provider`).string(`apiKey`,`API key`).enum(`challengeType`,[`image`,`widget`,`browser_check`],`Challenge type`,{default:`image`}).string(`typeHint`,`Legacy alias for challengeType`).enum(`taskKind`,[`image`,`recaptcha_v2`,`recaptcha_v3`,`hcaptcha`,`funcaptcha`,`turnstile`],`Explicit solver task kind`).string(`siteKey`,`Widget site key`).string(`pageUrl`,`Page URL`).string(`imageBase64`,`Explicit base64 image payload`).number(`timeoutMs`,`Timeout ms`,{default:18e4}).number(`maxRetries`,`Max retries`,{default:2}).openWorld()),t(`widget_challenge_solve`,e=>e.desc(`Solve a widget challenge with hook, manual, or configured external service.`).string(`siteKey`,`Widget site key`).string(`pageUrl`,`Page URL`).enum(`mode`,[`external_service`,`hook`,`manual`],`Solving mode`).string(`provider`,`External solver provider`).string(`apiKey`,`API key`).number(`timeoutMs`,`Timeout ms`,{default:12e4}).boolean(`injectToken`,`Auto-inject token`,{default:!0}).string(`responseSelector`,`Explicit selector to receive the solved token`).string(`callbackName`,`Explicit global callback name for hook or injection flows`).openWorld())],c=[t(`browser_jsdom_parse`,e=>e.desc(`Parse HTML into an in-memory JSDOM session. No browser needed.`).string(`html`,`HTML source`).string(`url`,`Document URL`).string(`contentType`,`Content-Type`).enum(`runScripts`,[`none`,`outside-only`,`dangerously`],`Script execution mode`,{default:`none`}).boolean(`includeNodeLocations`,`Track source offsets`,{default:!1}).boolean(`pretendToBeVisual`,`Expose rAF/matchMedia shims`,{default:!1}).string(`referrer`,`Referrer URL`).number(`storageQuotaBytes`,`Storage quota bytes`,{default:5e6}).required(`html`).query()),t(`browser_jsdom_query`,e=>e.desc(`Query a JSDOM session with a CSS selector.`).string(`sessionId`,`Session ID`).string(`selector`,`CSS selector`).number(`maxResults`,`Max matches`,{default:50}).array(`attributes`,{type:`string`},`Attribute whitelist`).boolean(`includeText`,`Include textContent`,{default:!0}).boolean(`includeHtml`,`Include outerHTML`,{default:!1}).boolean(`includeLocation`,`Include source offsets`,{default:!1}).required(`sessionId`,`selector`).query()),t(`browser_jsdom_execute`,e=>e.desc(`Evaluate JS inside a JSDOM session.`).string(`sessionId`,`Session ID`).string(`code`,`JavaScript code`).number(`timeoutMs`,`Timeout hint ms`,{default:5e3}).required(`sessionId`,`code`)),t(`browser_jsdom_serialize`,e=>e.desc(`Serialize a JSDOM session to HTML.`).string(`sessionId`,`Session ID`).string(`selector`,`CSS selector for a fragment`).boolean(`pretty`,`Pretty-print`,{default:!1}).required(`sessionId`).query()),t(`browser_jsdom_cookies`,e=>e.desc(`Manage cookies on a JSDOM session. Isolated from the attached browser.`).string(`sessionId`,`Session ID`).enum(`action`,[`get`,`set`,`clear`],`Action`,{default:`get`}).string(`url`,`URL scope`).object(`cookie`,{name:{type:`string`,description:`Name`},value:{type:`string`,description:`Value`},domain:{type:`string`,description:`Domain`},path:{type:`string`,description:`Path`},expires:{type:`string`,description:`Expiration`},httpOnly:{type:`boolean`,description:`HttpOnly`},secure:{type:`boolean`,description:`Secure`},sameSite:{type:`string`,description:`SameSite`},raw:{type:`string`,description:`Raw Set-Cookie string`}},`Cookie (action=set)`).destructive().requiredOpenWorld(`sessionId`))],l=[...a,...r,...i,...o,...s,...c];export{n,l as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./tool-builder-CpLh-UQd.mjs";const t=[e(`ws_monitor`,e=>e.desc(`Enable or disable WebSocket frame capture.`).enum(`action`,[`enable`,`disable`],`Monitor action`).string(`urlFilter`,`Regex filter for WebSocket URL (action=enable)`).number(`maxFrames`,`Maximum frames in memory (action=enable, default: 1000)`,{default:1e3,minimum:1,maximum:2e4}).boolean(`exposeInstances`,`Also install an in-page WebSocket wrapper retaining live WebSocket instances for ws_send_frame replay (action=enable). Only WebSockets created after enable are reachable.`).required(`action`).destructive()),e(`ws_get_frames`,e=>e.desc(`Get captured WebSocket frames with pagination and payload filter.`).enum(`direction`,[`sent`,`received`,`all`],`Frame direction filter`,{default:`all`}).number(`limit`,`Maximum frames to return`,{default:100,minimum:1,maximum:1e4}).number(`offset`,`Pagination offset`,{default:0,minimum:0}).string(`payloadFilter`,`Regex filter on frame payload`).boolean(`fullPayload`,`Include the full captured payload for each returned frame`,{default:!1}).readOnly()),e(`ws_get_connections`,e=>e.desc(`Get tracked WebSocket connections, frame counts, and timing metadata.`).readOnly()),e(`ws_export_capture`,e=>e.desc(`Export captured WebSocket frames to artifacts/captures as JSON or NDJSON.`).enum(`format`,[`json`,`ndjson`],`Export file format`,{default:`json`}).enum(`direction`,[`sent`,`received`,`all`],`Frame direction filter`,{default:`all`}).string(`payloadFilter`,`Regex filter on frame payload`).boolean(`includePayload`,`Include full captured payloads in the artifact`,{default:!0}).openWorld()),e(`ws_send_frame`,e=>e.desc(`Send a frame through a live in-page WebSocket instance retained by ws_monitor(exposeInstances=true). Enables edit-and-resend replay of WebSocket traffic. Only reaches WebSockets created AFTER exposeInstances was enabled (existing sockets are not retroactively reachable).`).string(`url`,`The WebSocket URL of the target instance`).string(`payload`,`The frame payload to send (text, or base64 when binary=true)`).boolean(`binary`,`Treat payload as base64-encoded binary (decode before send)`,{default:!1}).required(`url`,`payload`).openWorld()),e(`sse_monitor_enable`,e=>e.desc(`Enable SSE monitoring by injecting EventSource interceptor.`).string(`urlFilter`,`Regex filter for EventSource URL`).number(`maxEvents`,`Maximum SSE events in memory`,{default:2e3,minimum:1,maximum:5e4}).boolean(`persistent`,`Survive page navigations via evaluateOnNewDocument`)),e(`sse_get_events`,e=>e.desc(`Get captured SSE events with filters and pagination.`).string(`sourceUrl`,`Filter by EventSource URL`).string(`eventType`,`Filter by SSE event type`).number(`limit`,`Maximum events`,{default:100,minimum:1,maximum:1e4}).number(`offset`,`Pagination offset`,{default:0,minimum:0}).boolean(`fullData`,`Include full captured SSE event data when available`,{default:!1}).readOnly()),e(`sse_export_capture`,e=>e.desc(`Export captured SSE events to artifacts/captures as JSON or NDJSON.`).enum(`format`,[`json`,`ndjson`],`Export file format`,{default:`json`}).string(`sourceUrl`,`Filter by EventSource URL`).string(`eventType`,`Filter by SSE event type`).boolean(`includeData`,`Include full captured event data in the artifact`,{default:!0}).openWorld()),e(`grpc_monitor`,e=>e.desc(`Enable or disable live capture of gRPC / gRPC-Web calls. gRPC calls are detected by content-type application/grpc(-web)?(+proto)? on the HTTP/2 response. On loadingFinished the response body is pulled (base64) and split into length-prefixed messages; feed each message payloadBase64 to protobuf_decode_raw to complete the decode chain. Must be enabled before navigating so requests are captured from the start.`).enum(`action`,[`enable`,`disable`],`Monitor action`).string(`urlFilter`,`Regex filter for the gRPC request URL (action=enable)`).number(`maxCalls`,`Maximum captured gRPC calls in memory (action=enable, default: 100)`,{default:100,minimum:1,maximum:5e3}).required(`action`).destructive()),e(`grpc_get_calls`,e=>e.desc(`Get captured gRPC / gRPC-Web calls with parsed message summaries. Set fullMessages=true to include the parsed message arrays (each carries payloadBase64 — feed to protobuf_decode_raw). Without fullMessages only per-call counts and flags are returned.`).string(`urlFilter`,`Regex filter on the gRPC request URL`).number(`limit`,`Maximum calls to return`,{default:50,minimum:1,maximum:1e3}).number(`offset`,`Pagination offset`,{default:0,minimum:0}).boolean(`fullMessages`,`Include parsed message arrays (payloads) for each call`,{default:!1}).readOnly()),e(`grpc_export_capture`,e=>e.desc(`Export captured gRPC / gRPC-Web calls to artifacts/captures as JSON or NDJSON.`).enum(`format`,[`json`,`ndjson`],`Export file format`,{default:`json`}).string(`urlFilter`,`Regex filter on the gRPC request URL`).boolean(`includeMessages`,`Include parsed message arrays (payloads) for each call`,{default:!0}).openWorld()),e(`fetch_stream_monitor`,e=>e.desc(`Enable or disable capture of fetch()-based streams. Wraps window.fetch and, for responses with content-type text/event-stream, clones the body and parses the SSE frame stream into events. Covers the LLM / GraphQL-subscription streaming that the EventSource-based sse_monitor_enable misses (fetch + POST + custom headers). Use fetch_stream_get_events to read captured events.`).enum(`action`,[`enable`,`disable`],`Monitor action`,{default:`enable`}).string(`urlFilter`,`Regex filter for the fetched stream URL`).number(`maxEvents`,`Maximum events in memory (default: 2000)`,{default:2e3,minimum:1,maximum:5e4}).boolean(`persistent`,`Survive page navigations via evaluateOnNewDocument`).openWorld()),e(`fetch_stream_get_events`,e=>e.desc(`Get events captured by the fetch()-based stream monitor (text/event-stream consumed via fetch). Set fullData=true to include full event data.`).string(`sourceUrl`,`Filter by the fetched stream URL`).string(`eventType`,`Filter by SSE event type`).number(`limit`,`Maximum events`,{default:100,minimum:1,maximum:5e3}).number(`offset`,`Pagination offset`,{default:0,minimum:0}).boolean(`fullData`,`Include full captured event data when available`,{default:!1}).readOnly()),e(`fetch_stream_export_capture`,e=>e.desc(`Export events captured by the fetch()-based stream monitor to artifacts/captures as JSON or NDJSON.`).enum(`format`,[`json`,`ndjson`],`Export file format`,{default:`json`}).string(`sourceUrl`,`Filter by the fetched stream URL`).string(`eventType`,`Filter by SSE event type`).boolean(`includeData`,`Include full captured event data in the artifact`,{default:!0}).openWorld()),e(`webrtc_monitor`,e=>e.desc(`Enable or disable capture of WebRTC data-channel traffic. Wraps RTCPeerConnection in-page (no CDP coverage for RTCDataChannel): intercepts createDataChannel (local channels) and the datachannel event (remote channels), capturing both outbound send() and inbound message events. Use webrtc_get_events to read captured messages.`).enum(`action`,[`enable`,`disable`],`Monitor action`,{default:`enable`}).string(`urlFilter`,`Regex filter (reserved — currently informational)`).number(`maxEvents`,`Maximum messages in memory (default: 2000)`,{default:2e3,minimum:1,maximum:5e4}).boolean(`persistent`,`Survive page navigations via evaluateOnNewDocument`).openWorld()),e(`webrtc_get_events`,e=>e.desc(`Get messages captured by the WebRTC data-channel monitor. Set fullData=true to include full message data. Filter by channel label and direction (sent/received).`).string(`label`,`Filter by data-channel label`).enum(`direction`,[`sent`,`received`],`Message direction filter`).number(`limit`,`Maximum messages`,{default:100,minimum:1,maximum:5e3}).number(`offset`,`Pagination offset`,{default:0,minimum:0}).boolean(`fullData`,`Include full captured message data when available`,{default:!1}).readOnly()),e(`webrtc_export_capture`,e=>e.desc(`Export messages captured by the WebRTC data-channel monitor to artifacts/captures as JSON or NDJSON.`).enum(`format`,[`json`,`ndjson`],`Export file format`,{default:`json`}).string(`label`,`Filter by data-channel label`).enum(`direction`,[`sent`,`received`],`Message direction filter`).boolean(`includeData`,`Include full captured message data in the artifact`,{default:!0}).openWorld())];export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./tool-builder-CpLh-UQd.mjs";const t={type:`array`,description:`Remapping rules for unpacked bundle module paths`,items:{type:`object`,properties:{path:{type:`string`,description:`New module path when matched`},pattern:{type:`string`,description:`Match text or regex`},matchType:{type:`string`,enum:[`includes`,`regex`,`exact`],description:`How to interpret pattern`,default:`includes`},target:{type:`string`,enum:[`code`,`path`],description:`Match against source code or module path`,default:`code`}},required:[`path`,`pattern`]}};function n(e){return e.boolean(`unpack`,`Unpack webpack/browserify bundles`,{default:!0}).boolean(`unminify`,`Reformat and unminify code`,{default:!0}).boolean(`jsx`,`Decompile React.createElement to JSX`,{default:!0}).boolean(`mangle`,`Rename obfuscated identifiers`,{default:!1}).string(`outputDir`,`Directory to save deobfuscated artifacts`).boolean(`forceOutput`,`Remove outputDir before saving`,{default:!1}).boolean(`includeModuleCode`,`Include module source in bundle output`,{default:!1}).number(`maxBundleModules`,`Maximum bundle modules to return`,{default:100,minimum:1,maximum:1e4}).prop(`mappings`,t)}const r=[e(`collect_code`,e=>e.desc(`Collect JavaScript from a target website with configurable strategy.`).boolean(`includeInline`,`Include inline scripts`,{default:!0}).boolean(`includeExternal`,`Include external scripts`,{default:!0}).boolean(`includeDynamic`,`Include dynamically loaded scripts`,{default:!1}).enum(`smartMode`,[`summary`,`priority`,`incremental`,`full`],`Collection mode`,{default:`full`}).boolean(`compress`,`Enable compression`,{default:!1}).number(`maxTotalSize`,`Maximum total size in bytes`,{default:2097152,minimum:1024,maximum:10485760}).number(`maxFileSize`,`Maximum single file size in KB`,{default:500,minimum:1,maximum:102400}).array(`priorities`,{type:`string`},`Preferred URL patterns for priority mode`).boolean(`returnSummaryOnly`,`Return summary only`,{default:!1}).string(`url`,`Target URL to collect scripts from`).requiredOpenWorld(`url`)),e(`search_in_scripts`,e=>e.desc(`Search collected scripts by keyword or regex pattern.`).string(`keyword`,`Search keyword or regex pattern`).boolean(`isRegex`,`Treat keyword as regex`,{default:!1}).boolean(`caseSensitive`,`Case-sensitive search`,{default:!1}).number(`contextLines`,`Context lines around each match`,{default:3,minimum:0,maximum:50}).number(`maxMatches`,`Maximum matches`,{default:100,minimum:1,maximum:1e4}).boolean(`returnSummary`,`Return summary instead of full payload`,{default:!1}).number(`maxContextSize`,`Max response size before summary fallback`,{default:5e4,minimum:1e3,maximum:1e6}).required(`keyword`).query()),e(`extract_function_tree`,e=>e.desc(`Extract a function and its dependency tree from collected scripts.`).string(`scriptId`,`Script identifier`).string(`functionName`,`Function name to extract`).number(`maxDepth`,`Maximum dependency traversal depth`,{default:3,minimum:1,maximum:20}).number(`maxSize`,`Maximum output size in KB`,{default:500,minimum:1,maximum:10240}).boolean(`includeComments`,`Include comments in extracted source`,{default:!0}).required(`scriptId`,`functionName`)),e(`deobfuscate`,e=>n(e.desc(`Run webcrack-powered JavaScript deobfuscation with bundle unpacking.`).string(`code`,`Obfuscated JavaScript source`).enum(`engine`,[`auto`,`webcrack`,`jscrambler`,`packer`,`vm`],`Deobfuscation engine`,{default:`auto`}).enum(`llm`,[`gpt-4`,`claude`],`Preferred LLM for analysis`,{default:`gpt-4`}).boolean(`detectOnly`,`Detect only without transformation (webcrack engine)`,{default:!1})).required(`code`)),e(`understand_code`,e=>e.desc(`Run semantic code analysis for structure, behavior, and risks.`).string(`code`,`Source code to analyze`).prop(`context`,{type:`object`,description:`Additional contextual data`}).enum(`focus`,[`structure`,`business`,`security`,`all`],`Analysis focus`,{default:`all`}).required(`code`)),e(`detect_crypto`,e=>e.desc(`Detect cryptographic algorithms and usage patterns in source code.`).string(`code`,`Source code for crypto analysis`).required(`code`).query()),e(`manage_hooks`,e=>e.desc(`Create, inspect, and clear JavaScript runtime hooks.`).enum(`action`,[`create`,`list`,`records`,`clear`],`Hook management operation`).string(`target`,`Hook target identifier`).enum(`type`,[`function`,`xhr`,`fetch`,`websocket`,`localstorage`,`cookie`],`Hook target type`).enum(`hookAction`,[`log`,`block`,`modify`],`Hook behavior`,{default:`log`}).string(`customCode`,`Custom JavaScript hook payload`).string(`hookId`,`Hook identifier`).requiredOpenWorld(`action`)),e(`detect_obfuscation`,e=>e.desc(`Detect obfuscation techniques in JavaScript source.`).string(`code`,`Source code to inspect`).boolean(`generateReport`,`Include human-readable report`,{default:!0}).required(`code`).query()),e(`webcrack_unpack`,e=>n(e.desc(`Run webcrack bundle unpacking and return extracted module graph.`).string(`code`,`Bundled or obfuscated JavaScript source`)).required(`code`)),e(`clear_collected_data`,e=>e.desc(`Clear collected script data, caches, and in-memory indexes.`).destructive()),e(`get_collection_stats`,e=>e.desc(`Get collection, cache, and compression statistics.`).query()),e(`webpack_enumerate`,e=>e.desc(`Enumerate webpack modules in current page and search for keywords.`).string(`searchKeyword`,`Keyword to search across module exports`).boolean(`forceRequireAll`,`Force-require every module`,{default:!1}).number(`maxResults`,`Maximum matching modules`,{default:20,minimum:1,maximum:1e4}).openWorld()),e(`llm_suggest_names`,e=>e.desc(`Use LLM to suggest meaningful names for obfuscated identifiers.`).array(`identifiers`,{type:`string`},`Array of obfuscated identifier names to rename`).required(`code`,`identifiers`).readOnly()),e(`js_deobfuscate_jsvmp`,e=>e.desc(`Deobfuscate JSVMP/VM-protected JavaScript: extract VM bytecode and restore original logic.`).string(`code`,`Obfuscated JavaScript source containing VM/JSVMP patterns`).boolean(`aggressive`,`Use aggressive deobfuscation strategy`,{default:!1}).boolean(`extractInstructions`,`Extract and list VM instructions`,{default:!0}).number(`timeout`,`Deobfuscation timeout in ms`,{default:3e4,minimum:5e3,maximum:12e4}).boolean(`detectOnly`,`Only detect JSVMP without deobfuscating`,{default:!1}).required(`code`)),e(`js_deobfuscate_pipeline`,e=>e.desc(`Three-stage deobfuscation pipeline: preprocess → deobfuscate → humanize.`).string(`code`,`Obfuscated JavaScript source`).boolean(`useWebcrack`,`Apply webcrack after preprocessor stage`,{default:!0}).boolean(`aggressive`,`Enable aggressive transforms in deobfuscator stage`,{default:!1}).boolean(`humanize`,`Run humanizer stage (variable renaming)`,{default:!0}).boolean(`returnStageDetails`,`Include per-stage results in output`,{default:!1}).required(`code`)),e(`js_analyze_vm`,e=>e.desc(`Analyze JSVMP/VM interpreter: dispatch type, handler table, opcode map.`).string(`code`,`JavaScript source containing VM interpreter`).boolean(`extractBytecode`,`Attempt to extract VM bytecode`,{default:!0}).boolean(`mapOpcodes`,`Map opcodes to inferred operations`,{default:!0}).required(`code`)),e(`js_solve_constraints`,e=>e.desc(`Solve opaque predicates and constant expressions in obfuscated code.`).string(`code`,`JavaScript source with opaque predicates or constant conditions`).boolean(`replaceInPlace`,`Replace solved conditions with their constant values`,{default:!0}).number(`maxIterations`,`Maximum solving iterations`,{default:100,minimum:1,maximum:1e4}).required(`code`)),e(`analysis_ast_match`,e=>e.desc(`Match AST nodes by type and optional property filter.`).string(`code`,`JavaScript source code to search`).string(`nodeType`,`AST node type to match (e.g. CallExpression, MemberExpression, FunctionDeclaration)`).string(`filter`,`Optional property filter as JSON path=value, e.g. {"callee.name":"eval"}`).number(`maxResults`,`Maximum matches to return`,{default:50,minimum:1,maximum:500}).required(`code`,`nodeType`)),e(`analysis_deflat_control_flow`,e=>e.desc(`Flatten switch-dispatch control flow back to straight-line code.`).string(`code`,`Obfuscated JavaScript source with CFF pattern`).boolean(`removeDispatcher`,`Remove the dispatcher variable after flattening`,{default:!0}).required(`code`)),e(`analysis_decode_string_array`,e=>e.desc(`Decode literal string-array access back to strings.`).string(`code`,`JavaScript source`).boolean(`removeRotation`,`Apply simple rotation cleanup first`,{default:!0}).number(`maxReplacements`,`Maximum replacements`,{default:200,minimum:1,maximum:1e4}).required(`code`)),e(`js_symbolic_execute`,e=>e.desc(`Symbolic execution of JavaScript: explore all feasible execution paths, collect path constraints, and solve them. Best for control-flow-flattened code with complex branching.`).string(`code`,`JavaScript source to symbolically execute`).number(`maxPaths`,`Maximum paths to explore`,{default:100,minimum:1,maximum:1e3}).number(`maxDepth`,`Maximum traversal depth`,{default:50,minimum:1,maximum:200}).number(`timeout`,`Execution timeout in ms`,{default:3e4,minimum:5e3,maximum:12e4}).boolean(`enableConstraintSolving`,`Run constraint solver on collected paths`,{default:!1}).required(`code`)),e(`js_symbolic_execute_jsvmp`,e=>e.desc(`Symbolic execution of JSVMP bytecode: step through instructions symbolically to infer original logic, constraints, and confidence score. Use after js_analyze_vm to get instructions.`).prop(`instructions`,{type:`array`,description:`JSVMP instructions from js_analyze_vm (array of {opcode, operands, location})`,items:{type:`object`,properties:{opcode:{type:`string`,description:`Instruction opcode`},operands:{type:`array`,description:`Operands`},location:{type:`number`,description:`Bytecode offset`}}}}).enum(`vmType`,[`custom`,`standard`],`VM type hint`,{default:`custom`}).number(`maxSteps`,`Maximum steps to execute`,{default:1e3,minimum:100,maximum:5e4}).number(`timeout`,`Execution timeout in ms`,{default:3e4,minimum:5e3,maximum:12e4}).required(`instructions`)),e(`ai_suggest_exploits`,e=>e.desc(`Use LLM to suggest exploit primitives and attack chains for a given vulnerability. Returns theoretical exploitation steps, references, and required conditions. IMPORTANT: Does NOT generate executable payloads or malicious code.`).prop(`vulnerability`,{type:`object`,description:`Vulnerability details (type, description, severity, location)`,properties:{type:{type:`string`,description:`Vulnerability type (e.g., xss, sqli, rce)`},description:{type:`string`,description:`Vulnerability description`},severity:{type:`string`,enum:[`critical`,`high`,`medium`,`low`]},location:{type:`object`,description:`Source location`}},required:[`type`,`description`]}).enum(`targetPlatform`,[`browser`,`nodejs`,`electron`,`android`,`ios`,`unknown`],`Target platform`,{default:`unknown`}).array(`mitigations`,{type:`string`},`Known mitigations in place (e.g., CSP, ASLR)`).required(`vulnerability`).readOnly()),e(`analysis_data_flow`,e=>e.desc(`Trace data flow through JavaScript: identify sources (user input, network, storage), sinks (XSS, eval, SQL injection, command execution), sanitizer pass-through points, and tainted variable propagation paths. Useful for finding injection vulnerabilities.`).string(`code`,`JavaScript source code to analyze`).required(`code`)),e(`analysis_security_scan`,e=>e.desc(`Static security scan of JavaScript: detect hardcoded secrets (API keys, tokens), dangerous functions (eval, Function constructor), XSS sinks (innerHTML, document.write), SQL injection patterns, and weak crypto (Math.random). Returns structured risks with severity and recommendations.`).string(`code`,`JavaScript source code to scan`).required(`code`))];export{r as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./tool-builder-CpLh-UQd.mjs";import{t}from"./authorization-schema-Jtikc5Yt.mjs";const n=[e(`network_extract_auth`,e=>e.desc(`Extract authentication data from captured network requests.`).number(`minConfidence`,`Minimum confidence threshold 0-1`,{default:.4,minimum:0,maximum:1})),e(`network_export_har`,e=>e.desc(`Export captured network traffic as HAR.`).string(`outputPath`,`File path to write the HAR file. If omitted, returns HAR as JSON.`).boolean(`includeBodies`,`Include response bodies in the HAR (may be slow for large captures). Default: false`,{default:!1}).openWorld()),e(`network_replay_request`,e=>e.desc(`Replay a captured network request with optional changes.`).string(`requestId`,`Request ID from network_get_requests to replay`).object(`headerPatch`,{additionalProperties:{type:`string`}},`Headers to add or override (key-value pairs)`).object(`sessionProfile`,{cookies:{type:`array`,items:{type:`object`,properties:{name:{type:`string`},value:{type:`string`},domain:{type:`string`},path:{type:`string`},expires:{type:`number`},httpOnly:{type:`boolean`},secure:{type:`boolean`},sameSite:{type:`string`,enum:[`Strict`,`Lax`,`None`]}},required:[`name`,`value`]}},userAgent:{type:`string`},acceptLanguage:{type:`string`},referer:{type:`string`},clientHints:{type:`object`,properties:{"sec-ch-ua":{type:`string`},"sec-ch-ua-mobile":{type:`string`},"sec-ch-ua-platform":{type:`string`},"sec-ch-ua-full-version-list":{type:`string`}}},platform:{type:`string`},origin:{type:`string`},collectedAt:{type:`number`},ttlSec:{type:`number`}},`Inject browser cookies, User-Agent and Accept-Language from a captured session into the replay.`).string(`bodyPatch`,`Replace the entire request body with this string`).string(`methodOverride`,`Override the HTTP method`).string(`urlOverride`,`Override the request URL`).object(`authorization`,t,`Request-scoped authorization policy for private-network or insecure-HTTP replay. Use exact hosts/CIDRs instead of process-wide bypasses.`).string(`authorizationCapability`,`Base64url-encoded JSON capability for request-scoped authorization. Payload fields mirror authorization and must include requestId.`).number(`timeoutMs`,`Request timeout in milliseconds`,{default:3e4,minimum:1e3,maximum:12e4}).boolean(`dryRun`,`Preview the request without sending it`,{default:!0}).requiredOpenWorld(`requestId`)),e(`network_intercept`,e=>e.desc(`Manage network interception rules.`).enum(`action`,[`add`,`list`,`disable`],`Intercept operation`).string(`urlPattern`,`URL pattern to match`).enum(`urlPatternType`,[`glob`,`regex`],`How to interpret urlPattern`,{default:`glob`}).enum(`interceptAction`,[`continue`,`abort`,`fulfill`],`Match action`,{default:`fulfill`}).enum(`stage`,[`Request`,`Response`],`Intercept stage. Response (default) intercepts after server responds.`,{default:`Response`}).number(`responseCode`,`HTTP status code to return`,{default:200,minimum:100,maximum:599}).object(`responseHeaders`,{additionalProperties:{type:`string`}},`Custom response headers as key-value pairs.`).string(`responseBody`,`Custom response body string.`).array(`rules`,{type:`object`,properties:{urlPattern:{type:`string`},urlPatternType:{type:`string`,enum:[`glob`,`regex`]},interceptAction:{type:`string`,enum:[`continue`,`abort`,`fulfill`]},stage:{type:`string`,enum:[`Request`,`Response`]},responseCode:{type:`number`},responseHeaders:{type:`object`,additionalProperties:{type:`string`}},responseBody:{type:`string`}},required:[`urlPattern`]},`Rule objects to add`).string(`ruleId`,`Rule ID to remove`).boolean(`all`,`Remove all rules`,{default:!1}).required(`action`)),e(`network_tls_fingerprint`,e=>e.desc(`Compute TLS/HTTP fingerprints for bot detection. compute_tls/compute_http build fingerprints from user-supplied lists; parse_client_hello parses a raw ClientHello record (hex) and emits JA3 + JA4 from the real wire bytes; analyze_request links a captured requestId.`).enum(`mode`,[`analyze_request`,`compute_tls`,`compute_http`,`parse_client_hello`],`Fingerprint mode`).string(`requestId`,`Request ID to analyze`).string(`clientHelloHex`,`Raw ClientHello TLS record as hex (parse_client_hello mode)`).array(`tlsVersions`,{type:`string`},`TLS version codes in order`).array(`ciphers`,{type:`string`},`Cipher suite codes in order`).array(`extensions`,{type:`string`},`Extension type codes in order`).array(`signatureAlgorithms`,{type:`string`},`Signature algorithm codes in order`).enum(`protocol`,[`tls`,`quic`,`dtls`],`Transport protocol type`,{default:`tls`}).boolean(`sni`,`Whether SNI (Server Name Indication) extension is present`,{default:!0}).string(`alpn`,`ALPN value`).array(`httpHeaders`,{type:`string`},`HTTP header names in order`).string(`userAgent`,`User-Agent value`).string(`httpMethod`,`HTTP method`,{default:`GET`}).string(`httpVersion`,`HTTP version`,{default:`1.1`}).string(`cookieHeader`,`Cookie header value`).string(`acceptLanguage`,`Accept-Language header value`).boolean(`includeAnalysis`,`Include detailed fingerprint breakdown`,{default:!0}).required(`mode`)),e(`network_bot_detect_analyze`,e=>e.desc(`Analyze captured requests for bot-detection signals. Optionally supply a JA3/JA4 TLS fingerprint (from network_tls_fingerprint parse_client_hello) plus user-defined knownBad hash lists; matching hashes raise the bot score. Ships NO hardcoded feature library — the caller decides which hashes are bot-like.`).number(`limit`,`Maximum requests to analyze`,{default:50,minimum:1,maximum:500}).boolean(`includeDetails`,`Include per-request analysis details`,{default:!1}).string(`ja3`,`Captured TLS JA3 hash (MD5, 32 hex) to expose as a signal and match against knownBadJa3`).string(`ja4`,`Captured TLS JA4 hash to expose as a signal and match against knownBadJa4`).array(`knownBadJa3`,{type:`string`},`User-supplied JA3 hashes considered bot-like (matched against ja3). The tool ships no hardcoded list.`).array(`knownBadJa4`,{type:`string`},`User-supplied JA4 hashes considered bot-like (matched against ja4). The tool ships no hardcoded list.`).string(`h2Hash`,`Captured HTTP/2 fingerprint sha256 (from network_http2_fingerprint — Akamai-style SETTINGS/WINDOW_UPDATE/PRIORITY canonical) to expose as a signal and match against knownBadH2.`).array(`knownBadH2`,{type:`string`},`User-supplied HTTP/2 fingerprint hashes considered bot-like (matched against h2Hash). The tool ships no hardcoded list.`).query())],r=[e(`network_enable`,e=>e.desc(`Enable network request monitoring.`).boolean(`enableExceptions`,`Also capture uncaught exceptions`,{default:!0})),e(`network_disable`,e=>e.desc(`Disable network request monitoring`).destructive()),e(`network_get_status`,e=>e.desc(`Get network monitoring status.`).query()),e(`network_monitor`,e=>e.desc(`Manage network request monitoring.`).enum(`action`,[`enable`,`disable`,`status`],`Action to perform`).boolean(`enableExceptions`,`Only for enable action: Also capture uncaught exceptions`,{default:!0}).required(`action`)),e(`network_get_requests`,e=>e.desc(`Get captured network requests.`).string(`url`,`Filter by URL substring`).string(`urlRegex`,`Filter by URL regex pattern`).string(`method`,`Filter by HTTP method (GET, POST, PUT, DELETE)`).string(`statusCode`,`Filter by response status code. Exact ("404") or class ("4xx"/"5xx"/"2xx" matches the N00-N99 range). Requests without a captured response status are excluded when this filter is set.`).number(`sinceTimestamp`,`Only return requests after this epoch timestamp (milliseconds). Useful for incremental polling.`).string(`sinceRequestId`,`Only return requests after this requestId (exclusive). Useful for incremental retrieval.`).number(`tail`,`Return the last N requests after filtering`).number(`limit`,`Maximum number of results per page`,{default:100,minimum:1,maximum:1e3}).number(`offset`,`Skip results for pagination`,{default:0,minimum:0}).boolean(`autoEnable`,`Auto-enable network monitoring when currently disabled`,{default:!0}).boolean(`enableExceptions`,`When autoEnable=true, also enable uncaught exception monitoring`,{default:!0}).array(`fields`,{type:`string`},`Only include these fields per request (e.g. ["url","method","status"]). Reduces response size drastically.`).boolean(`deduplicateUrls`,`Deduplicate URLs by stripping query params and normalizing path segments (UUIDs/IDs → {id}). Returns unique endpoint patterns with counts instead of individual requests.`,{default:!1})),e(`network_get_response_body`,e=>e.desc(`Get the response body for a captured request.`).string(`requestId`,`Request ID (from network_get_requests)`).number(`maxSize`,`Maximum response size in bytes`,{default:1e5,minimum:1024,maximum:2e7}).boolean(`returnSummary`,`Return only size and preview instead of full body`,{default:!1}).number(`retries`,`Retry count when response body is not yet available`,{default:3,minimum:0,maximum:10}).number(`retryIntervalMs`,`Retry interval in milliseconds`,{default:500,minimum:50,maximum:5e3}).boolean(`autoEnable`,`Auto-enable network monitoring when currently disabled`,{default:!1}).boolean(`enableExceptions`,`When autoEnable=true, also enable uncaught exception monitoring`,{default:!0}).required(`requestId`)),e(`network_get_stats`,e=>e.desc(`Get network statistics.`).query()),e(`performance_get_metrics`,e=>e.desc(`Get page performance metrics.`).boolean(`includeTimeline`,`Include detailed timeline events`,{default:!1}).query()),e(`performance_coverage`,e=>e.desc(`Start or stop code coverage recording.`).enum(`action`,[`start`,`stop`],`Coverage action`).required(`action`)),e(`performance_take_heap_snapshot`,e=>e.desc(`Take a V8 heap memory snapshot`)),e(`performance_trace`,e=>e.desc(`Start or stop a Chrome performance trace.`).enum(`action`,[`start`,`stop`],`Trace action`).array(`categories`,{type:`string`},`Trace categories to capture`).boolean(`screenshots`,`Capture screenshots during tracing`,{default:!1}).string(`artifactPath`,`Custom output path`).required(`action`)),e(`profiler_cpu`,e=>e.desc(`Start or stop CPU profiling.`).enum(`action`,[`start`,`stop`],`Profiler action`).string(`artifactPath`,`Custom output path`).required(`action`)),e(`profiler_heap_sampling`,e=>e.desc(`Start or stop heap allocation sampling.`).enum(`action`,[`start`,`stop`],`Sampling action`).number(`samplingInterval`,`Sampling interval in bytes`,{default:32768,minimum:256,maximum:1048576}).string(`artifactPath`,`Custom output path`).number(`topN`,`Number of top allocators to return`,{default:20,minimum:1,maximum:100}).required(`action`))],i=[e(`console_get_exceptions`,e=>e.desc(`Get captured uncaught exceptions from the page`).string(`url`,`Filter by URL substring`).number(`limit`,`Maximum number of exceptions to return`,{default:50,minimum:1,maximum:1e3}).readOnly()),e(`console_inject`,e=>e.desc(`Inject an in-page script, XHR, fetch, or function monitor.`).enum(`type`,[`script`,`xhr`,`fetch`,`function`],`Injection type`).string(`functionName`,`Global function path to trace`).boolean(`persistent`,`Keep the injection across page navigations`,{default:!1}).required(`type`).openWorld()),e(`console_inject_fetch_interceptor`,e=>e.desc(`Inject a fetch interceptor.`).boolean(`persistent`,`Keep the injection across page navigations`,{default:!1}).openWorld()),e(`console_inject_xhr_interceptor`,e=>e.desc(`Inject an XMLHttpRequest interceptor.`).boolean(`persistent`,`Keep the injection across page navigations`,{default:!1}).openWorld()),e(`console_buffers`,e=>e.desc(`Manage injected interceptor state.`).enum(`action`,[`clear`,`reset`],`Buffer action: clear buffers or reset interceptors`).required(`action`))],a=[e(`network_traceroute`,e=>e.desc(`Run an ICMP traceroute.`).string(`target`,`Target hostname or IP address to trace route to`).number(`maxHops`,`Maximum number of hops`,{default:30,minimum:1,maximum:64}).number(`timeout`,`Per-hop timeout in milliseconds`,{default:5e3,minimum:100,maximum:3e4}).number(`packetSize`,`ICMP echo request payload size in bytes`,{default:32,minimum:8,maximum:65500}).object(`authorization`,t,`Request-scoped authorization policy for private-network traceroute. Use exact hosts/CIDRs instead of process-wide bypasses.`).required(`target`).query()),e(`network_icmp_probe`,e=>e.desc(`Run an ICMP echo probe.`).string(`target`,`Target hostname or IP address to probe`).number(`ttl`,`Time-to-live value`,{default:128,minimum:1,maximum:255}).number(`packetSize`,`ICMP echo request payload size in bytes`,{default:32,minimum:8,maximum:65500}).number(`timeout`,`Timeout in milliseconds`,{default:5e3,minimum:100,maximum:3e4}).object(`authorization`,t,`Request-scoped authorization policy for private-network ICMP probes. Use exact hosts/CIDRs instead of process-wide bypasses.`).required(`target`).query())],o=[e(`http_request_build`,e=>e.desc(`Build a raw HTTP/1.x request payload.`).string(`method`,`HTTP method token`).string(`target`,`Request target, such as /path, *, or an absolute-form URL`).string(`host`,`Optional Host header value to inject when addHostHeader is enabled`).object(`headers`,{additionalProperties:{type:`string`}},`Optional HTTP headers to include in the request`).string(`body`,`Optional UTF-8 request body`).enum(`httpVersion`,[`1.0`,`1.1`],`HTTP protocol version to emit`,{default:`1.1`}).boolean(`addHostHeader`,`Auto-add the Host header when host is provided`,{default:!0}).boolean(`addContentLength`,`Auto-add Content-Length when a body is present and Transfer-Encoding is absent`,{default:!0}).boolean(`addConnectionClose`,`Auto-add Connection: close when absent`,{default:!0}).requiredOpenWorld(`method`,`target`)),e(`http_plain_request`,e=>e.desc(`Send a raw HTTP request over plain TCP.`).string(`host`,`Target hostname or IP literal`).number(`port`,`TCP port to connect to. Default: 80`,{default:80,minimum:1,maximum:65535}).string(`requestText`,`Raw HTTP request text to send as UTF-8 bytes`).object(`authorization`,t,`Request-scoped authorization policy for private-network or insecure-HTTP targets. Use exact hosts/CIDRs instead of process-wide bypasses.`).number(`timeoutMs`,`Socket timeout in milliseconds`,{default:3e4,minimum:1e3,maximum:12e4}).number(`maxResponseBytes`,`Maximum number of raw response bytes to capture before truncating the exchange`,{default:512e3,minimum:1024,maximum:10485760}).requiredOpenWorld(`host`,`requestText`)),e(`http2_probe`,e=>e.desc(`Probe an HTTP/2 endpoint.`).string(`url`,`Absolute http:// or https:// URL to probe`).string(`method`,`HTTP method token to send. Default: GET`).object(`headers`,{additionalProperties:{type:`string`}},`Optional request headers to include. Header names are normalized to lowercase for HTTP/2.`).string(`body`,`Optional UTF-8 request body to send with the probe`).array(`alpnProtocols`,{type:`string`},`ALPN protocols to offer`).object(`authorization`,t,`Request-scoped authorization policy for private-network or insecure-HTTP targets. Use exact hosts/CIDRs instead of process-wide bypasses.`).number(`timeoutMs`,`Probe timeout in milliseconds`,{default:3e4,minimum:1e3,maximum:12e4}).number(`maxBodyBytes`,`Maximum number of response body bytes to capture for the snippet before truncating`,{default:32768,minimum:1024,maximum:1048576}).requiredOpenWorld(`url`)),e(`http2_frame_build`,e=>e.desc(`Build a raw HTTP/2 frame.`).string(`frameType`,`HTTP/2 frame type: DATA, SETTINGS, PING, WINDOW_UPDATE, RST_STREAM, GOAWAY, PUSH_PROMISE, or RAW`).number(`streamId`,`Stream identifier (0 for connection-level frames). Default: 0`,{default:0,minimum:0,maximum:2147483647}).number(`flags`,`Raw flags byte (0-255). Overrides type-specific defaults when set.`,{minimum:0,maximum:255}).number(`frameTypeCode`,`Explicit frame type code for RAW frames (0-255). Required when frameType is RAW.`,{minimum:0,maximum:255}).string(`payloadHex`,`Frame payload as a hex string. Mutually exclusive with payloadText.`).string(`payloadText`,`Frame payload as a text string. Mutually exclusive with payloadHex.`).string(`payloadEncoding`,`Encoding for payloadText: utf8 or ascii. Default: utf8`).array(`settings`,{type:`object`,properties:{id:{type:`number`},value:{type:`number`}},required:[`id`,`value`]},`Array of {id, value} entries for SETTINGS frames`).boolean(`ack`,`Set the ACK flag on SETTINGS or PING frames`).string(`pingOpaqueDataHex`,`Exactly 8 bytes of opaque data for PING frames (hex string)`).number(`windowSizeIncrement`,`Window size increment for WINDOW_UPDATE frames (1 to 2^31-1)`).number(`errorCode`,`Error code for RST_STREAM or GOAWAY frames (0 to 2^32-1)`).number(`lastStreamId`,`Last stream ID for GOAWAY frames (0 to 2^31-1)`).string(`debugDataText`,`Optional debug data for GOAWAY frames`).string(`debugDataEncoding`,`Encoding for debugDataText: utf8 or ascii. Default: utf8`).requiredOpenWorld(`frameType`)),e(`http2_frame_parse`,e=>e.desc(`Decode a raw HTTP/2 frame (hex string) back into its header fields and type-specific payload (SETTINGS entries, PING opaque data, WINDOW_UPDATE increment, RST_STREAM/GOAWAY error codes, GOAWAY debug data). Inverse of http2_frame_build. Lenient: malformed payloads set decodeError but still return payloadHex.`).string(`frameHex`,`HTTP/2 frame as a hex string (9-byte header + payload). Whitespace tolerated.`).requiredOpenWorld(`frameHex`)),e(`network_http2_fingerprint`,e=>e.desc(`Compute an Akamai-style HTTP/2 fingerprint from one or more captured HTTP/2 frames (the client connection preface: SETTINGS + stream-0 WINDOW_UPDATE + any PRIORITY frames). Returns the canonical "<settings>|<window_update>|<priority>" string, a sha256 hash, and the structured fields (settings entries, window update increment, priorities). Ships NO hardcoded feature library — the structured fields are authoritative; the caller decides what is "bad". Pair with network_tls_fingerprint for full client identity.`).string(`framesHex`,`One or more concatenated HTTP/2 frames as a hex string. The 24-byte connection preface magic ("PRI * HTTP/2.0...") is auto-detected and skipped if present. Whitespace tolerated.`).requiredOpenWorld(`framesHex`)),e(`grpc_frame_parse`,e=>e.desc(`Split a captured gRPC / gRPC-Web body into its length-prefixed messages. Each message is 1 compressed-flag byte + 4-byte big-endian length + payload. Detects gRPC-Web trailer frames (flag bit 7) and the compression flag (bit 0). Lenient: a truncated trailing message is still emitted with a warning. Each message exposes payloadHex and payloadBase64 — feed payloadBase64 directly to protobuf_decode_raw to complete the gRPC decode chain (capture body -> grpc_frame_parse -> protobuf_decode_raw).`).string(`data`,`gRPC body as hex (default) or base64. Whitespace tolerated.`).string(`encoding`,`Input encoding: hex (default) or base64. Use base64 for CDP response bodies.`).requiredOpenWorld(`data`)),e(`grpc_frame_build`,e=>e.desc(`Encode one or more messages into a gRPC / gRPC-Web length-prefixed body. Inverse of grpc_frame_parse — for constructing test or replay bodies. Each message takes payloadHex plus optional compressed / isTrailer flags.`).array(`messages`,{type:`object`,properties:{payloadHex:{type:`string`},compressed:{type:`number`},isTrailer:{type:`number`}},required:[`payloadHex`]},`Array of { payloadHex, compressed?, isTrailer? }`).requiredOpenWorld(`messages`)),e(`dns_resolve`,e=>e.desc(`Resolve a hostname to DNS records using the system resolver or an optional DNS server.`).string(`hostname`,`Hostname to resolve (e.g. google.com)`).string(`rrType`,`DNS record type: A, AAAA, MX, TXT, NS, CNAME, SOA, PTR, SRV, or ANY`,{default:`A`}).string(`server`,`Optional DNS resolver server, for example 1.1.1.1 or 8.8.8.8`).requiredOpenWorld(`hostname`)),e(`dns_reverse`,e=>e.desc(`Reverse DNS lookup — find hostnames for an IP address.`).string(`ip`,`IP address to reverse lookup (e.g. 8.8.8.8)`).string(`server`,`Optional DNS resolver server, for example 1.1.1.1 or 8.8.8.8`).requiredOpenWorld(`ip`)),e(`dns_probe`,e=>e.desc(`Run a DNS query and return structured status instead of throwing.`).string(`hostname`,`Hostname to query`).string(`rrType`,`DNS record type: A, AAAA, MX, TXT, NS, CNAME, SOA, PTR, SRV, or ANY`,{default:`A`}).string(`server`,`Optional DNS resolver server, for example 1.1.1.1 or 8.8.8.8`).requiredOpenWorld(`hostname`)),e(`dns_cname_chain`,e=>e.desc(`Trace the full CNAME chain for a hostname.`).string(`hostname`,`Hostname to trace CNAME chain for`).number(`maxDepth`,`Maximum chain depth to follow. Default: 10`,{default:10,minimum:1,maximum:30}).string(`server`,`Optional DNS resolver server, for example 1.1.1.1 or 8.8.8.8`).requiredOpenWorld(`hostname`)),e(`dns_bulk_resolve`,e=>e.desc(`Resolve many hostnames concurrently with per-host status.`).array(`hostnames`,{type:`string`},`List of hostnames to resolve (max 1000)`).string(`rrType`,`DNS record type: A, AAAA, MX, TXT, NS, CNAME, SOA, PTR, SRV, or ANY`,{default:`A`}).number(`concurrency`,`Maximum number of concurrent DNS queries. Default: 10`,{default:10,minimum:1,maximum:50}).string(`server`,`Optional DNS resolver server, for example 1.1.1.1 or 8.8.8.8`).requiredOpenWorld(`hostnames`)),e(`network_rtt_measure`,e=>e.desc(`Measure round-trip time to a target URL.`).string(`url`,`Target URL to measure RTT to`).enum(`probeType`,[`tcp`,`tls`,`http`],`Probe type`,{default:`tcp`}).number(`iterations`,`Number of probe iterations (1-50). Default: 5`,{default:5,minimum:1,maximum:50}).number(`timeoutMs`,`Per-probe timeout in milliseconds (100-30000). Default: 5000`,{default:5e3,minimum:100,maximum:3e4}).object(`authorization`,t,`Request-scoped authorization policy for private-network or insecure-HTTP measurement. Use exact hosts/CIDRs instead of process-wide bypasses.`).requiredOpenWorld(`url`)),e(`network_latency_stats`,e=>e.desc(`Measure repeated latency and compute percentile stats.`).string(`url`,`Target URL to measure`).enum(`probeType`,[`tcp`,`tls`,`http`],`Probe type`,{default:`http`}).number(`iterations`,`Number of probes`,{default:20,minimum:5,maximum:100}).number(`concurrency`,`Max concurrent probes`,{default:5,minimum:1,maximum:20}).number(`timeoutMs`,`Per-probe timeout ms`,{default:5e3,minimum:100,maximum:3e4}).object(`authorization`,t,`Request-scoped authorization policy for private-network or insecure-HTTP measurement. Use exact hosts/CIDRs instead of process-wide bypasses.`).requiredOpenWorld(`url`))],s=[...r,...i,...o,...n,...a];export{s as t};
|