@introspection-ai/recipes 0.25.1 → 0.27.1
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/dist/api/mcp.d.ts +3 -3
- package/dist/api/mcp.d.ts.map +1 -1
- package/dist/api/mcp.js +1 -1
- package/dist/api/mcp.js.map +1 -1
- package/dist/{child-agent-completions.d.ts → child/agent-completions.d.ts} +2 -2
- package/dist/child/agent-completions.d.ts.map +1 -0
- package/dist/{child-agent-completions.js → child/agent-completions.js} +1 -1
- package/dist/child/agent-completions.js.map +1 -0
- package/dist/{child-agent-store.d.ts → child/agent-store.d.ts} +1 -1
- package/dist/child/agent-store.d.ts.map +1 -0
- package/dist/{child-agent-store.js → child/agent-store.js} +1 -1
- package/dist/child/agent-store.js.map +1 -0
- package/dist/{child-agent.d.ts → child/agent.d.ts} +2 -2
- package/dist/child/agent.d.ts.map +1 -0
- package/dist/{child-agent.js → child/agent.js} +5 -5
- package/dist/child/agent.js.map +1 -0
- package/dist/{child-session.d.ts → child/session.d.ts} +4 -4
- package/dist/child/session.d.ts.map +1 -0
- package/dist/{child-session.js → child/session.js} +2 -2
- package/dist/child/session.js.map +1 -0
- package/dist/connector-tools.d.ts +1 -1
- package/dist/connector-tools.js +2 -2
- package/dist/inspect.d.ts +1 -1
- package/dist/inspect.js +1 -1
- package/dist/{mcp-catalog.d.ts → mcp/catalog.d.ts} +3 -3
- package/dist/mcp/catalog.d.ts.map +1 -0
- package/dist/{mcp-catalog.js → mcp/catalog.js} +2 -2
- package/dist/mcp/catalog.js.map +1 -0
- package/dist/{mcp-command-context.d.ts → mcp/cli/command-context.d.ts} +1 -1
- package/dist/mcp/cli/command-context.d.ts.map +1 -0
- package/dist/{mcp-command-context.js → mcp/cli/command-context.js} +1 -1
- package/dist/mcp/cli/command-context.js.map +1 -0
- package/dist/{mcp-cli-core.d.ts → mcp/cli/core.d.ts} +14 -8
- package/dist/mcp/cli/core.d.ts.map +1 -0
- package/dist/{mcp-cli-core.js → mcp/cli/core.js} +105 -146
- package/dist/mcp/cli/core.js.map +1 -0
- package/dist/mcp/cli/help.d.ts +6 -0
- package/dist/mcp/cli/help.d.ts.map +1 -0
- package/dist/mcp/cli/help.js +116 -0
- package/dist/mcp/cli/help.js.map +1 -0
- package/dist/mcp/cli/index.d.ts +3 -0
- package/dist/mcp/cli/index.d.ts.map +1 -0
- package/dist/{mcp-cli.js → mcp/cli/index.js} +4 -4
- package/dist/mcp/cli/index.js.map +1 -0
- package/dist/{mcp-cli-policy.d.ts → mcp/cli/policy.d.ts} +2 -2
- package/dist/mcp/cli/policy.d.ts.map +1 -0
- package/dist/{mcp-cli-policy.js → mcp/cli/policy.js} +2 -2
- package/dist/mcp/cli/policy.js.map +1 -0
- package/dist/mcp/cli/run-worker.d.ts +2 -0
- package/dist/mcp/cli/run-worker.d.ts.map +1 -0
- package/dist/mcp/cli/run-worker.js +54 -0
- package/dist/mcp/cli/run-worker.js.map +1 -0
- package/dist/mcp/client-entry.d.ts +3 -0
- package/dist/mcp/client-entry.d.ts.map +1 -0
- package/dist/{mcp-client.js → mcp/client-entry.js} +3 -3
- package/dist/mcp/client-entry.js.map +1 -0
- package/dist/{mcp-contract.d.ts → mcp/contract.d.ts} +2 -2
- package/dist/mcp/contract.d.ts.map +1 -0
- package/dist/{mcp-contract.js → mcp/contract.js} +1 -1
- package/dist/mcp/contract.js.map +1 -0
- package/dist/{mcp-daemon-client.d.ts → mcp/daemon/client.d.ts} +3 -2
- package/dist/mcp/daemon/client.d.ts.map +1 -0
- package/dist/{mcp-daemon-client.js → mcp/daemon/client.js} +12 -8
- package/dist/mcp/daemon/client.js.map +1 -0
- package/dist/mcp/daemon/index.d.ts +3 -0
- package/dist/mcp/daemon/index.d.ts.map +1 -0
- package/dist/mcp/daemon/index.js +453 -0
- package/dist/{mcp-daemon.js.map → mcp/daemon/index.js.map} +1 -1
- package/dist/{mcp-daemon-protocol.d.ts → mcp/daemon/protocol.d.ts} +2 -2
- package/dist/mcp/daemon/protocol.d.ts.map +1 -0
- package/dist/{mcp-daemon-protocol.js → mcp/daemon/protocol.js} +1 -1
- package/dist/mcp/daemon/protocol.js.map +1 -0
- package/dist/{mcp.d.ts → mcp/index.d.ts} +5 -5
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/{mcp.js → mcp/index.js} +16 -10
- package/dist/mcp/index.js.map +1 -0
- package/dist/{mcp-policy.d.ts → mcp/policy.d.ts} +3 -3
- package/dist/mcp/policy.d.ts.map +1 -0
- package/dist/{mcp-policy.js → mcp/policy.js} +1 -1
- package/dist/mcp/policy.js.map +1 -0
- package/dist/{mcp-tools.d.ts → mcp/tools.d.ts} +4 -4
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/{mcp-tools.js → mcp/tools.js} +4 -4
- package/dist/mcp/tools.js.map +1 -0
- package/dist/{mcp-trace-context.d.ts → mcp/trace-context.d.ts} +2 -2
- package/dist/mcp/trace-context.d.ts.map +1 -0
- package/dist/{mcp-trace-context.js → mcp/trace-context.js} +1 -1
- package/dist/mcp/trace-context.js.map +1 -0
- package/dist/mcp-chunks/{auth-command-4WFRNU2I.js → auth-command-GQFV6QYP.js} +24 -27
- package/dist/mcp-chunks/call-arguments-VT7JLNJY.js +16 -0
- package/dist/mcp-chunks/{call-command-JBIKXOGC.js → call-command-LMAREWKD.js} +45 -45
- package/dist/mcp-chunks/{chunk-3JGS7LQB.js → chunk-2HOMVWSA.js} +2 -2
- package/dist/mcp-chunks/{chunk-G6OMDUNG.js → chunk-2P2HVZ3G.js} +1 -1
- package/dist/mcp-chunks/{chunk-ED2WN5BI.js → chunk-34QXE62Y.js} +175 -147
- package/dist/mcp-chunks/{chunk-Y3EDWN2P.js → chunk-5B7GRMUK.js} +1 -1
- package/dist/mcp-chunks/chunk-5BMCVE2J.js +516 -0
- package/dist/mcp-chunks/{chunk-V5AYEKSL.js → chunk-6QZQZXDJ.js} +52 -81
- package/dist/mcp-chunks/{chunk-3R2WK3NB.js → chunk-6RG6AD5X.js} +6 -6
- package/dist/mcp-chunks/{chunk-SNKXMWDB.js → chunk-77BZYP72.js} +1 -1
- package/dist/mcp-chunks/chunk-7PFJCLXL.js +123 -0
- package/dist/mcp-chunks/chunk-7WL4TMON.js +31 -0
- package/dist/mcp-chunks/{chunk-ELA77TDC.js → chunk-C2VLY7ED.js} +4 -4
- package/dist/mcp-chunks/{chunk-FAJPJTOC.js → chunk-CLR6DJV3.js} +1 -1
- package/dist/mcp-chunks/{chunk-ZOAQDFAO.js → chunk-D6B2M5V7.js} +1 -1
- package/dist/mcp-chunks/{chunk-WTMJMM3B.js → chunk-D6SVCPN6.js} +3 -30
- package/dist/mcp-chunks/chunk-FBVRU4Y3.js +1195 -0
- package/dist/mcp-chunks/{chunk-EMSNQHZZ.js → chunk-FONFU4G5.js} +1 -1
- package/dist/mcp-chunks/{chunk-BWW4XRUC.js → chunk-H4KL74PV.js} +303 -161
- package/dist/mcp-chunks/{chunk-ITR7FQM3.js → chunk-H7ARMBV7.js} +4 -9
- package/dist/mcp-chunks/{chunk-EPT4MYOF.js → chunk-HZ2SX5U6.js} +39 -34
- package/dist/mcp-chunks/{chunk-36VIJRYY.js → chunk-I6UMKX5E.js} +4 -4
- package/dist/mcp-chunks/{chunk-ASG4OY3M.js → chunk-IF6LRV3J.js} +21 -28
- package/dist/mcp-chunks/{chunk-KW3ANJ36.js → chunk-JVYCENPP.js} +4 -4
- package/dist/mcp-chunks/{chunk-AIKLVBYU.js → chunk-KOWNVUL2.js} +34 -7
- package/dist/mcp-chunks/{chunk-B2LNXGAP.js → chunk-KQCLM7R7.js} +4 -4
- package/dist/mcp-chunks/{chunk-OP3IW2V6.js → chunk-L6OOGZVA.js} +2 -2
- package/dist/mcp-chunks/{chunk-MOEZ43ZL.js → chunk-LCBDVFVA.js} +1 -1
- package/dist/mcp-chunks/{chunk-ITCCROID.js → chunk-LIEFPSSB.js} +5 -5
- package/dist/mcp-chunks/{chunk-GUXMP7QB.js → chunk-LQIE4PKL.js} +2 -2
- package/dist/mcp-chunks/{chunk-WYLHHXI6.js → chunk-LXHPDKEF.js} +26 -11
- package/dist/mcp-chunks/{chunk-6YZW3XAE.js → chunk-MJFZM5EV.js} +5 -5
- package/dist/mcp-chunks/{chunk-TPHPAEDH.js → chunk-NQW3ES2G.js} +2 -8
- package/dist/mcp-chunks/{chunk-IPNSPKQK.js → chunk-O2VOMKAS.js} +15 -17
- package/dist/mcp-chunks/{chunk-QZUC2T72.js → chunk-O4JIUOWF.js} +2 -2
- package/dist/mcp-chunks/{chunk-C2KNLFZR.js → chunk-P3UVILEW.js} +2 -2
- package/dist/mcp-chunks/{chunk-7WOKCV6Q.js → chunk-P463YBJM.js} +1 -1
- package/dist/mcp-chunks/{chunk-GQ6NSIDS.js → chunk-PJCMJ65D.js} +1175 -718
- package/dist/mcp-chunks/{chunk-CZKDJZER.js → chunk-QALB3DRW.js} +1 -1
- package/dist/mcp-chunks/{chunk-JG4TRUPF.js → chunk-QJNF3A3F.js} +1 -1
- package/dist/mcp-chunks/{chunk-HLRCUHNO.js → chunk-RIHPVCGI.js} +1 -1
- package/dist/mcp-chunks/{chunk-RD7NHCRK.js → chunk-RZIJUJGL.js} +60 -1074
- package/dist/mcp-chunks/{chunk-4ZNBWL65.js → chunk-S2YF442K.js} +2 -2
- package/dist/mcp-chunks/chunk-S5F3HEZZ.js +37060 -0
- package/dist/mcp-chunks/{chunk-TF2YTYE4.js → chunk-S6GJ42I2.js} +1 -1
- package/dist/mcp-chunks/chunk-T4MQCFIK.js +982 -0
- package/dist/mcp-chunks/{chunk-SCOMDV54.js → chunk-TUQGOYK6.js} +1 -1
- package/dist/mcp-chunks/{chunk-YIRGLKDA.js → chunk-TYYSBILI.js} +46 -27
- package/dist/mcp-chunks/{chunk-FS5JIKT6.js → chunk-UHO6KIUJ.js} +6 -6
- package/dist/mcp-chunks/{chunk-RSTKSBVF.js → chunk-UIPG6W7N.js} +2 -2
- package/dist/mcp-chunks/{chunk-IME7DGLJ.js → chunk-UKM35J67.js} +2 -2
- package/dist/mcp-chunks/{chunk-FX5NYWBH.js → chunk-UYJZJXC2.js} +3 -3
- package/dist/mcp-chunks/{chunk-HCOKLSOB.js → chunk-VJIAHZZG.js} +4 -4
- package/dist/mcp-chunks/{chunk-IYWYVHHD.js → chunk-WHJUDBPR.js} +1 -1
- package/dist/mcp-chunks/{chunk-53NRFMB3.js → chunk-XNHGMWN2.js} +46 -25
- package/dist/mcp-chunks/{cli-XU26MUCN.js → cli-JI7MEAAX.js} +111 -79
- package/dist/mcp-chunks/client-QU7ABSNB.js +30 -0
- package/dist/mcp-chunks/{config-command-UQMMIK2U.js → config-command-GRZLKD3R.js} +36 -29
- package/dist/mcp-chunks/daemon-command-3266CYHO.js +30 -0
- package/dist/mcp-chunks/{dist-DM2RXZMU.js → dist-USMCQ22V.js} +105 -47
- package/dist/mcp-chunks/{emit-ts-command-KAOL6DAN.js → emit-ts-command-7VLESP7H.js} +20 -19
- package/dist/mcp-chunks/{generate-cli-runner-AK6XNRTK.js → generate-cli-runner-SSW2B72K.js} +54 -51
- package/dist/mcp-chunks/generated-daemon-runtime-7CFVWLC7.js +30 -0
- package/dist/mcp-chunks/{inspect-cli-command-6FVJO7H2.js → inspect-cli-command-NCGCMOIS.js} +9 -10
- package/dist/mcp-chunks/{launch-EIT73HX4.js → launch-NBONSPNK.js} +1 -1
- package/dist/mcp-chunks/{lifecycle-QH4TUI3K.js → lifecycle-CXAKUCN4.js} +1 -1
- package/dist/mcp-chunks/{list-command-UOB2XZK7.js → list-command-5T4UF4PF.js} +61 -75
- package/dist/mcp-chunks/{output-utils-6YXH23T7.js → output-utils-YFTWQZ5V.js} +3 -3
- package/dist/mcp-chunks/{prompt-CH6TK0bC-ZB6RFAXR.js → prompt-CH6TK0bC-6DI4RA4E.js} +1 -1
- package/dist/mcp-chunks/{record-command-FO5TTERC.js → record-command-TE5O7WBL.js} +5 -5
- package/dist/mcp-chunks/{replay-command-SCBPCGQ7.js → replay-command-QCUL5ASR.js} +6 -6
- package/dist/mcp-chunks/{resource-command-S2J7XEMV.js → resource-command-XMGF7EAK.js} +9 -10
- package/dist/mcp-chunks/{result-utils-OME6HGS6.js → result-utils-HKB42M7Y.js} +3 -4
- package/dist/mcp-chunks/runtime-3X2XVS6X.js +37 -0
- package/dist/mcp-chunks/runtime-wrapper-MI3HF45J.js +10 -0
- package/dist/mcp-chunks/{serve-command-DDBZZSG6.js → serve-command-5HV3ZE25.js} +30 -34
- package/dist/mcp-chunks/{timeouts-HNGNKDQN.js → timeouts-YBFBTLV2.js} +8 -5
- package/dist/mcp-chunks/{vault-command-TJZYS3YI.js → vault-command-FC2PD5U6.js} +4 -6
- package/dist/mcp-chunks/webapi-IFUPO72B.js +2481 -0
- package/dist/mcp-daemon.js +35 -33
- package/dist/mcp-run-worker.js +28 -32
- package/dist/pi-extension.d.ts +1 -1
- package/dist/pi-extension.js +8 -8
- package/dist/pi-extension.js.map +1 -1
- package/dist/{recipe-agent.d.ts → recipe/agent.d.ts} +3 -3
- package/dist/recipe/agent.d.ts.map +1 -0
- package/dist/{recipe-agent.js → recipe/agent.js} +5 -5
- package/dist/recipe/agent.js.map +1 -0
- package/dist/{recipe-extensions.d.ts → recipe/extensions.d.ts} +1 -1
- package/dist/recipe/extensions.d.ts.map +1 -0
- package/dist/{recipe-extensions.js → recipe/extensions.js} +1 -1
- package/dist/recipe/extensions.js.map +1 -0
- package/dist/{recipe-mcp-config.d.ts → recipe/mcp-config.d.ts} +2 -2
- package/dist/recipe/mcp-config.d.ts.map +1 -0
- package/dist/{recipe-mcp-config.js → recipe/mcp-config.js} +1 -1
- package/dist/recipe/mcp-config.js.map +1 -0
- package/dist/{recipe-model.d.ts → recipe/model.d.ts} +1 -1
- package/dist/recipe/model.d.ts.map +1 -0
- package/dist/{recipe-model.js → recipe/model.js} +1 -1
- package/dist/recipe/model.js.map +1 -0
- package/dist/{recipe-package.d.ts → recipe/package.d.ts} +1 -1
- package/dist/recipe/package.d.ts.map +1 -0
- package/dist/{recipe-package.js → recipe/package.js} +1 -1
- package/dist/recipe/package.js.map +1 -0
- package/dist/recipe/resolve.d.ts +6 -6
- package/dist/recipe/resolve.d.ts.map +1 -1
- package/dist/recipe/resolve.js +4 -4
- package/dist/recipe/resolve.js.map +1 -1
- package/dist/{recipe-session.d.ts → recipe/session.d.ts} +1 -1
- package/dist/recipe/session.d.ts.map +1 -0
- package/dist/{recipe-session.js → recipe/session.js} +1 -1
- package/dist/recipe/session.js.map +1 -0
- package/dist/{recipe-skills.d.ts → recipe/skills.d.ts} +1 -1
- package/dist/recipe/skills.d.ts.map +1 -0
- package/dist/{recipe-skills.js → recipe/skills.js} +2 -2
- package/dist/recipe/skills.js.map +1 -0
- package/dist/run-controller.js +2 -2
- package/dist/session.d.ts +1 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +5 -5
- package/dist/session.js.map +1 -1
- package/docs/channels.md +1 -1
- package/docs/pi-extension.md +1 -1
- package/docs/recipe-format.md +8 -4
- package/docs/recipe-templates.md +46 -0
- package/docs/slack.md +1 -1
- package/package.json +14 -14
- package/dist/child-agent-completions.d.ts.map +0 -1
- package/dist/child-agent-completions.js.map +0 -1
- package/dist/child-agent-store.d.ts.map +0 -1
- package/dist/child-agent-store.js.map +0 -1
- package/dist/child-agent.d.ts.map +0 -1
- package/dist/child-agent.js.map +0 -1
- package/dist/child-session.d.ts.map +0 -1
- package/dist/child-session.js.map +0 -1
- package/dist/mcp-catalog.d.ts.map +0 -1
- package/dist/mcp-catalog.js.map +0 -1
- package/dist/mcp-chunks/call-arguments-4DWPBLQP.js +0 -15
- package/dist/mcp-chunks/chunk-3Z7MFS6K.js +0 -86
- package/dist/mcp-chunks/chunk-AD3FQ73K.js +0 -39
- package/dist/mcp-chunks/chunk-DTZHEVKC.js +0 -12
- package/dist/mcp-chunks/chunk-H3JCYHGS.js +0 -1018
- package/dist/mcp-chunks/chunk-HN7WPMCA.js +0 -18904
- package/dist/mcp-chunks/chunk-I5GI2A2D.js +0 -92
- package/dist/mcp-chunks/chunk-IRTJXFWA.js +0 -28
- package/dist/mcp-chunks/chunk-NTHUNCXJ.js +0 -526
- package/dist/mcp-chunks/chunk-OD3MSMXY.js +0 -15
- package/dist/mcp-chunks/chunk-PZ323CXI.js +0 -17394
- package/dist/mcp-chunks/client-OT34CKRH.js +0 -21
- package/dist/mcp-chunks/daemon-command-YCIOZGPZ.js +0 -35
- package/dist/mcp-chunks/runtime-QIPMLIJI.js +0 -39
- package/dist/mcp-chunks/runtime-wrapper-X4YFKMJI.js +0 -16
- package/dist/mcp-chunks/webapi-4GWO2UBA.js +0 -3508
- package/dist/mcp-cli-core.d.ts.map +0 -1
- package/dist/mcp-cli-core.js.map +0 -1
- package/dist/mcp-cli-help.d.ts +0 -2
- package/dist/mcp-cli-help.d.ts.map +0 -1
- package/dist/mcp-cli-help.js +0 -36
- package/dist/mcp-cli-help.js.map +0 -1
- package/dist/mcp-cli-policy.d.ts.map +0 -1
- package/dist/mcp-cli-policy.js.map +0 -1
- package/dist/mcp-cli.d.ts +0 -3
- package/dist/mcp-cli.d.ts.map +0 -1
- package/dist/mcp-cli.js.map +0 -1
- package/dist/mcp-client.d.ts +0 -3
- package/dist/mcp-client.d.ts.map +0 -1
- package/dist/mcp-client.js.map +0 -1
- package/dist/mcp-command-context.d.ts.map +0 -1
- package/dist/mcp-command-context.js.map +0 -1
- package/dist/mcp-contract.d.ts.map +0 -1
- package/dist/mcp-contract.js.map +0 -1
- package/dist/mcp-daemon-client.d.ts.map +0 -1
- package/dist/mcp-daemon-client.js.map +0 -1
- package/dist/mcp-daemon-protocol.d.ts.map +0 -1
- package/dist/mcp-daemon-protocol.js.map +0 -1
- package/dist/mcp-daemon.d.ts +0 -3
- package/dist/mcp-daemon.d.ts.map +0 -1
- package/dist/mcp-policy.d.ts.map +0 -1
- package/dist/mcp-policy.js.map +0 -1
- package/dist/mcp-run-worker.d.ts +0 -2
- package/dist/mcp-run-worker.d.ts.map +0 -1
- package/dist/mcp-run-worker.js.map +0 -1
- package/dist/mcp-tools.d.ts.map +0 -1
- package/dist/mcp-tools.js.map +0 -1
- package/dist/mcp-trace-context.d.ts.map +0 -1
- package/dist/mcp-trace-context.js.map +0 -1
- package/dist/mcp.d.ts.map +0 -1
- package/dist/mcp.js.map +0 -1
- package/dist/recipe-agent.d.ts.map +0 -1
- package/dist/recipe-agent.js.map +0 -1
- package/dist/recipe-extensions.d.ts.map +0 -1
- package/dist/recipe-extensions.js.map +0 -1
- package/dist/recipe-mcp-config.d.ts.map +0 -1
- package/dist/recipe-mcp-config.js.map +0 -1
- package/dist/recipe-model.d.ts.map +0 -1
- package/dist/recipe-model.js.map +0 -1
- package/dist/recipe-package.d.ts.map +0 -1
- package/dist/recipe-package.js.map +0 -1
- package/dist/recipe-session.d.ts.map +0 -1
- package/dist/recipe-session.js.map +0 -1
- package/dist/recipe-skills.d.ts.map +0 -1
- package/dist/recipe-skills.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __createRequire } from "node:module"; const require = __createRequire(import.meta.url);
|
|
2
2
|
|
|
3
|
-
// node_modules/.pnpm/mcporter@0.13.
|
|
3
|
+
// node_modules/.pnpm/mcporter@0.13.13/node_modules/mcporter/dist/sdk-stdio-logging.js
|
|
4
4
|
var STDIO_LOGS_FORCED = process.env.MCPORTER_STDIO_LOGS === "1";
|
|
5
5
|
var STDIO_TRACE_ENABLED = process.env.MCPORTER_STDIO_TRACE === "1";
|
|
6
6
|
var stdioLogMode = STDIO_LOGS_FORCED ? "always" : "auto";
|
|
@@ -1,22 +1,13 @@
|
|
|
1
1
|
import { createRequire as __createRequire } from "node:module"; const require = __createRequire(import.meta.url);
|
|
2
|
-
import {
|
|
3
|
-
resolveCommandArgument,
|
|
4
|
-
resolveCommandArguments
|
|
5
|
-
} from "./chunk-I5GI2A2D.js";
|
|
6
2
|
import {
|
|
7
3
|
parseTree
|
|
8
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-T4MQCFIK.js";
|
|
9
5
|
import {
|
|
6
|
+
resolveEnvPlaceholders,
|
|
10
7
|
resolveEnvValue
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
|
|
13
|
-
// node_modules/.pnpm/mcporter@0.13.8/node_modules/mcporter/dist/chrome-devtools-relay.js
|
|
14
|
-
import { createHash as createHash3 } from "node:crypto";
|
|
15
|
-
import fs from "node:fs";
|
|
16
|
-
import os from "node:os";
|
|
17
|
-
import path2 from "node:path";
|
|
8
|
+
} from "./chunk-D6SVCPN6.js";
|
|
18
9
|
|
|
19
|
-
// node_modules/.pnpm/mcporter@0.13.
|
|
10
|
+
// node_modules/.pnpm/mcporter@0.13.13/node_modules/mcporter/dist/chrome-devtools-command.js
|
|
20
11
|
var AUTO_CONNECT_FLAGS = /* @__PURE__ */ new Set(["--autoConnect", "--auto-connect"]);
|
|
21
12
|
var NEGATED_AUTO_CONNECT_FLAGS = /* @__PURE__ */ new Set(["--no-autoConnect", "--no-auto-connect"]);
|
|
22
13
|
var CONNECTION_VALUE_FLAGS = /* @__PURE__ */ new Set([
|
|
@@ -76,6 +67,19 @@ function isChromeDevtoolsToken(token) {
|
|
|
76
67
|
const basename = normalized.slice(normalized.lastIndexOf("/") + 1);
|
|
77
68
|
return /^chrome-devtools-mcp(?:@[^/]+)?(?:\.(?:bat|cjs|cmd|exe|js|mjs))?$/u.test(basename) || normalized.includes("/chrome-devtools-mcp/") && /\.(?:bat|cjs|cmd|exe|js|mjs)$/u.test(basename);
|
|
78
69
|
}
|
|
70
|
+
function isExistingChromeDevtoolsCommand(command, args) {
|
|
71
|
+
if (isAmbiguousChromeDevtoolsAutoConnectCommand(command, args))
|
|
72
|
+
return true;
|
|
73
|
+
if (resolveChromeDevtoolsAutoConnectCommand(command, args).enabled)
|
|
74
|
+
return true;
|
|
75
|
+
const target = resolveChromeDevtoolsTarget(command, args);
|
|
76
|
+
if (!target)
|
|
77
|
+
return true;
|
|
78
|
+
return target.args.some((arg) => {
|
|
79
|
+
const option = arg.split("=")[0] ?? arg;
|
|
80
|
+
return CONNECTION_VALUE_FLAGS.has(option) || /^-[^-]/u.test(option) && [...CONNECTION_VALUE_FLAGS].some((flag) => flag.length === 2 && option.includes(flag.slice(1)));
|
|
81
|
+
});
|
|
82
|
+
}
|
|
79
83
|
function isAmbiguousChromeDevtoolsAutoConnectCommand(command, args) {
|
|
80
84
|
if (isChromeDevtoolsToken(command))
|
|
81
85
|
return false;
|
|
@@ -273,7 +277,94 @@ function booleanLiteral(value) {
|
|
|
273
277
|
return void 0;
|
|
274
278
|
}
|
|
275
279
|
|
|
276
|
-
// node_modules/.pnpm/mcporter@0.13.
|
|
280
|
+
// node_modules/.pnpm/mcporter@0.13.13/node_modules/mcporter/dist/runtime/utils.js
|
|
281
|
+
var ENV_PLACEHOLDER_PATTERN = /\$\{(?:env:[^}]*|[A-Za-z_][A-Za-z0-9_]*(?::-[^}]*)?)\}/;
|
|
282
|
+
var MAX_TIMER_DELAY_MS = 2147483647;
|
|
283
|
+
function resolveCommandArgument(value, env = process.env) {
|
|
284
|
+
if (!value) {
|
|
285
|
+
return value;
|
|
286
|
+
}
|
|
287
|
+
if (!value.includes("$")) {
|
|
288
|
+
return value;
|
|
289
|
+
}
|
|
290
|
+
const needsInterpolation = value.startsWith("$env:") || ENV_PLACEHOLDER_PATTERN.test(value);
|
|
291
|
+
if (!needsInterpolation) {
|
|
292
|
+
return value;
|
|
293
|
+
}
|
|
294
|
+
return resolveEnvPlaceholders(value, env);
|
|
295
|
+
}
|
|
296
|
+
function resolveCommandArguments(args, env = process.env) {
|
|
297
|
+
if (args.length === 0) {
|
|
298
|
+
return [];
|
|
299
|
+
}
|
|
300
|
+
return args.map((arg) => resolveCommandArgument(arg, env));
|
|
301
|
+
}
|
|
302
|
+
function normalizeTimeout(raw) {
|
|
303
|
+
if (raw == null) {
|
|
304
|
+
return void 0;
|
|
305
|
+
}
|
|
306
|
+
if (!Number.isFinite(raw)) {
|
|
307
|
+
return void 0;
|
|
308
|
+
}
|
|
309
|
+
const coerced = Math.trunc(raw);
|
|
310
|
+
return coerced > 0 ? Math.min(coerced, MAX_TIMER_DELAY_MS) : void 0;
|
|
311
|
+
}
|
|
312
|
+
function raceWithTimeout(promise, timeoutMs) {
|
|
313
|
+
return new Promise((resolve, reject) => {
|
|
314
|
+
const delayMs = Number.isFinite(timeoutMs) ? Math.min(Math.max(Math.trunc(timeoutMs), 1), MAX_TIMER_DELAY_MS) : MAX_TIMER_DELAY_MS;
|
|
315
|
+
const cancelTimeout = scheduleDeadline(() => {
|
|
316
|
+
reject(new Error("Timeout"));
|
|
317
|
+
}, delayMs);
|
|
318
|
+
promise.then((value) => {
|
|
319
|
+
cancelTimeout();
|
|
320
|
+
resolve(value);
|
|
321
|
+
}, (error) => {
|
|
322
|
+
cancelTimeout();
|
|
323
|
+
reject(error);
|
|
324
|
+
});
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
function scheduleDeadline(callback, delayMs) {
|
|
328
|
+
const deadline = performance.now() + delayMs;
|
|
329
|
+
let timer;
|
|
330
|
+
let cancelled = false;
|
|
331
|
+
const scheduleNext = () => {
|
|
332
|
+
if (cancelled)
|
|
333
|
+
return;
|
|
334
|
+
const remainingMs = deadline - performance.now();
|
|
335
|
+
if (remainingMs <= 0) {
|
|
336
|
+
callback();
|
|
337
|
+
} else if (remainingMs > 864e5) {
|
|
338
|
+
timer = setTimeout(scheduleNext, 864e5);
|
|
339
|
+
} else if (remainingMs > 36e5) {
|
|
340
|
+
timer = setTimeout(scheduleNext, 36e5);
|
|
341
|
+
} else if (remainingMs > 6e4) {
|
|
342
|
+
timer = setTimeout(scheduleNext, 6e4);
|
|
343
|
+
} else if (remainingMs > 1e3) {
|
|
344
|
+
timer = setTimeout(scheduleNext, 1e3);
|
|
345
|
+
} else if (remainingMs > 100) {
|
|
346
|
+
timer = setTimeout(scheduleNext, 100);
|
|
347
|
+
} else if (remainingMs > 10) {
|
|
348
|
+
timer = setTimeout(scheduleNext, 10);
|
|
349
|
+
} else {
|
|
350
|
+
timer = setTimeout(scheduleNext, 1);
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
scheduleNext();
|
|
354
|
+
return () => {
|
|
355
|
+
cancelled = true;
|
|
356
|
+
if (timer)
|
|
357
|
+
clearTimeout(timer);
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
// node_modules/.pnpm/mcporter@0.13.13/node_modules/mcporter/dist/chrome-devtools-relay.js
|
|
362
|
+
import { createHash as createHash3 } from "node:crypto";
|
|
363
|
+
import fs from "node:fs";
|
|
364
|
+
import os from "node:os";
|
|
365
|
+
import path2 from "node:path";
|
|
366
|
+
|
|
367
|
+
// node_modules/.pnpm/mcporter@0.13.13/node_modules/mcporter/dist/chrome-devtools-relay-proxy.js
|
|
277
368
|
import { createHash, randomBytes, timingSafeEqual } from "node:crypto";
|
|
278
369
|
import http, {} from "node:http";
|
|
279
370
|
var WEBSOCKET_GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
|
|
@@ -282,9 +373,33 @@ async function startChromeDevtoolsRelayProxy(options) {
|
|
|
282
373
|
const clientAuthorization = `Bearer ${randomBytes(32).toString("base64url")}`;
|
|
283
374
|
let downstreamAccepted = false;
|
|
284
375
|
let closed = false;
|
|
376
|
+
const lifetime = new AbortController();
|
|
377
|
+
let closing;
|
|
285
378
|
const server = http.createServer((_request, response) => {
|
|
286
379
|
response.writeHead(404, { Connection: "close", "Content-Length": "0" }).end();
|
|
287
380
|
});
|
|
381
|
+
const binding = Promise.withResolvers();
|
|
382
|
+
const terminate = (reason) => {
|
|
383
|
+
if (closing)
|
|
384
|
+
return closing;
|
|
385
|
+
closed = true;
|
|
386
|
+
closing = binding.promise.catch(() => {
|
|
387
|
+
}).then(() => closeServer(server, sockets));
|
|
388
|
+
lifetime.abort(reason);
|
|
389
|
+
closeUpstream(options.upstream.socket);
|
|
390
|
+
for (const socket of sockets)
|
|
391
|
+
socket.destroy();
|
|
392
|
+
return closing;
|
|
393
|
+
};
|
|
394
|
+
const onUpstreamError = () => {
|
|
395
|
+
void terminate("upstream");
|
|
396
|
+
};
|
|
397
|
+
const onUpstreamClose = () => {
|
|
398
|
+
options.upstream.socket.off("error", onUpstreamError);
|
|
399
|
+
void terminate("upstream");
|
|
400
|
+
};
|
|
401
|
+
options.upstream.socket.on("error", onUpstreamError);
|
|
402
|
+
options.upstream.socket.once("close", onUpstreamClose);
|
|
288
403
|
server.on("connection", (socket) => trackSocket(sockets, socket));
|
|
289
404
|
server.on("upgrade", (request, downstream, head) => {
|
|
290
405
|
if (closed || downstreamAccepted || !isValidDownstreamUpgrade(request, clientAuthorization) || options.upstream.socket.destroyed) {
|
|
@@ -310,53 +425,44 @@ async function startChromeDevtoolsRelayProxy(options) {
|
|
|
310
425
|
downstream.write(options.upstream.head);
|
|
311
426
|
if (head.length > 0)
|
|
312
427
|
options.upstream.socket.write(head);
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
downstream.once("error", () => options.upstream.socket.destroy());
|
|
316
|
-
downstream.once("close", () => options.upstream.socket.destroy());
|
|
428
|
+
downstream.once("error", () => void terminate("downstream"));
|
|
429
|
+
downstream.once("close", () => void terminate("downstream"));
|
|
317
430
|
downstream.pipe(options.upstream.socket).pipe(downstream);
|
|
318
431
|
server.close();
|
|
319
432
|
});
|
|
320
|
-
const
|
|
321
|
-
|
|
322
|
-
};
|
|
323
|
-
options.upstream.socket.once("close", onUpstreamClose);
|
|
433
|
+
const onBindError = (error) => binding.reject(error);
|
|
434
|
+
server.once("error", onBindError);
|
|
324
435
|
try {
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
server.listen(0, "127.0.0.1", () => {
|
|
329
|
-
server.off("error", onError);
|
|
330
|
-
resolve();
|
|
331
|
-
});
|
|
436
|
+
server.listen(0, "127.0.0.1", () => {
|
|
437
|
+
server.off("error", onBindError);
|
|
438
|
+
binding.resolve();
|
|
332
439
|
});
|
|
440
|
+
await binding.promise;
|
|
333
441
|
} catch (error) {
|
|
334
|
-
|
|
442
|
+
binding.reject(error);
|
|
443
|
+
await terminate("owner");
|
|
335
444
|
throw error;
|
|
336
445
|
}
|
|
446
|
+
if (closed || options.upstream.socket.destroyed) {
|
|
447
|
+
await terminate("upstream");
|
|
448
|
+
throw new Error("Chrome relay connection closed before child handoff.");
|
|
449
|
+
}
|
|
337
450
|
const address = server.address();
|
|
338
451
|
if (!address || address.address !== "127.0.0.1") {
|
|
339
|
-
|
|
340
|
-
server.close();
|
|
452
|
+
await terminate("owner");
|
|
341
453
|
throw new Error("Chrome relay proxy failed to bind to IPv4 loopback.");
|
|
342
454
|
}
|
|
343
455
|
let authorizationAvailable = true;
|
|
344
456
|
return {
|
|
345
457
|
endpoint: `ws://127.0.0.1:${address.port}/cdp`,
|
|
458
|
+
signal: lifetime.signal,
|
|
346
459
|
consumeClientAuthorization() {
|
|
347
460
|
if (!authorizationAvailable)
|
|
348
461
|
throw new Error("Chrome relay authorization handoff already consumed.");
|
|
349
462
|
authorizationAvailable = false;
|
|
350
463
|
return clientAuthorization;
|
|
351
464
|
},
|
|
352
|
-
|
|
353
|
-
if (closed)
|
|
354
|
-
return;
|
|
355
|
-
closed = true;
|
|
356
|
-
options.upstream.socket.off("close", onUpstreamClose);
|
|
357
|
-
closeUpstream(options.upstream.socket);
|
|
358
|
-
await closeServer(server, sockets);
|
|
359
|
-
}
|
|
465
|
+
close: () => terminate("owner")
|
|
360
466
|
};
|
|
361
467
|
}
|
|
362
468
|
function isValidDownstreamUpgrade(request, expectedAuthorization) {
|
|
@@ -414,7 +520,7 @@ async function closeServer(server, sockets) {
|
|
|
414
520
|
await new Promise((resolve) => server.close(() => resolve()));
|
|
415
521
|
}
|
|
416
522
|
|
|
417
|
-
// node_modules/.pnpm/mcporter@0.13.
|
|
523
|
+
// node_modules/.pnpm/mcporter@0.13.13/node_modules/mcporter/dist/browser-relay-auth-v2.js
|
|
418
524
|
import { createHmac, hash, timingSafeEqual as timingSafeEqual2 } from "node:crypto";
|
|
419
525
|
var BROWSER_RELAY_AUTH_LABEL = "openclaw.browser-relay.auth";
|
|
420
526
|
var BROWSER_RELAY_AUTH_VERSION = 2;
|
|
@@ -483,7 +589,7 @@ function isCanonicalBase64Url(value, bytes) {
|
|
|
483
589
|
return decoded.byteLength === bytes && decoded.toString("base64url") === value;
|
|
484
590
|
}
|
|
485
591
|
|
|
486
|
-
// node_modules/.pnpm/mcporter@0.13.
|
|
592
|
+
// node_modules/.pnpm/mcporter@0.13.13/node_modules/mcporter/dist/chrome-devtools-relay-client.js
|
|
487
593
|
import { createHash as createHash2, randomBytes as randomBytes2 } from "node:crypto";
|
|
488
594
|
import { lookup } from "node:dns/promises";
|
|
489
595
|
import net from "node:net";
|
|
@@ -994,7 +1100,7 @@ function isTimeoutError(error) {
|
|
|
994
1100
|
return Boolean(error && typeof error === "object" && error.reason === "timeout");
|
|
995
1101
|
}
|
|
996
1102
|
|
|
997
|
-
// node_modules/.pnpm/mcporter@0.13.
|
|
1103
|
+
// node_modules/.pnpm/mcporter@0.13.13/node_modules/mcporter/dist/chrome-devtools-relay-discovery.js
|
|
998
1104
|
import { spawn } from "node:child_process";
|
|
999
1105
|
import { statSync } from "node:fs";
|
|
1000
1106
|
import net2 from "node:net";
|
|
@@ -1448,16 +1554,13 @@ function openClawDiscoveryEnvironment(env) {
|
|
|
1448
1554
|
return filtered;
|
|
1449
1555
|
}
|
|
1450
1556
|
|
|
1451
|
-
// node_modules/.pnpm/mcporter@0.13.
|
|
1452
|
-
var DEFAULT_RELAY_PROBE_TIMEOUT_MS =
|
|
1557
|
+
// node_modules/.pnpm/mcporter@0.13.13/node_modules/mcporter/dist/chrome-devtools-relay.js
|
|
1558
|
+
var DEFAULT_RELAY_PROBE_TIMEOUT_MS = 2e4;
|
|
1453
1559
|
var MIN_RELAY_PROBE_TIMEOUT_MS = 100;
|
|
1454
1560
|
var MAX_RELAY_PROBE_TIMEOUT_MS = 3e4;
|
|
1455
|
-
var
|
|
1456
|
-
var
|
|
1457
|
-
var RELAY_CWD_SENTINEL = "$MCPORTER_CHROME_RELAY_CWD";
|
|
1458
|
-
var RELAY_CREDENTIAL_SENTINEL = "$MCPORTER_CHROME_RELAY_CREDENTIAL:";
|
|
1561
|
+
var UNRESOLVED_RELAY_IDENTITY = "undiscovered";
|
|
1562
|
+
var RELAY_DEPENDENCY_SENTINEL = "$MCPORTER_CHROME_RELAY_DEPENDENCY:";
|
|
1459
1563
|
var RELAY_DISCOVERY_SENTINEL = "$MCPORTER_CHROME_RELAY_DISCOVERY:";
|
|
1460
|
-
var CHROME_DEVTOOLS_RELAY_RUNTIME_IDENTITY_VERSION = 1;
|
|
1461
1564
|
var CHROME_DEVTOOLS_RELAY_RUNTIME_ENV_KEYS = [
|
|
1462
1565
|
"MCPORTER_CHROME_DEVTOOLS_RELAY_POLICY",
|
|
1463
1566
|
"MCPORTER_DISABLE_CHROME_DEVTOOLS_RELAY",
|
|
@@ -1473,6 +1576,29 @@ var ChromeDevtoolsRelayRequiredError = class extends Error {
|
|
|
1473
1576
|
this.name = "ChromeDevtoolsRelayRequiredError";
|
|
1474
1577
|
}
|
|
1475
1578
|
};
|
|
1579
|
+
var ChromeDevtoolsRelayDiscoveryError = class extends Error {
|
|
1580
|
+
code = "relay_discovery_failed";
|
|
1581
|
+
decision;
|
|
1582
|
+
constructor(reason, policy, timeoutMs) {
|
|
1583
|
+
super(`OpenClaw relay discovery failed (discovery-${reason}; timeout budget ${timeoutMs}ms). No relay endpoint was selected; this request was not dispatched. Check the OpenClaw installation and the canonical Chrome definition in the global mcporter config. For slow cold starts, set MCPORTER_CHROME_DEVTOOLS_RELAY_TIMEOUT_MS in that definition\u2019s env map; drain and stop the daemon after changing its configuration.`);
|
|
1584
|
+
this.name = "ChromeDevtoolsRelayDiscoveryError";
|
|
1585
|
+
this.decision = { route: "unavailable", reason: `discovery-${reason}`, policy, endpoint: void 0 };
|
|
1586
|
+
}
|
|
1587
|
+
};
|
|
1588
|
+
async function discoverRelayBaseUrl(env, keyId, timeoutMs, policy, options) {
|
|
1589
|
+
const discovered = await discoverOpenClawRelayUrl({
|
|
1590
|
+
env,
|
|
1591
|
+
keyId,
|
|
1592
|
+
timeoutMs,
|
|
1593
|
+
run: options.discover,
|
|
1594
|
+
platform: options.discovery?.platform,
|
|
1595
|
+
isFile: options.discovery?.isFile,
|
|
1596
|
+
cwd: options.discovery?.cwd
|
|
1597
|
+
}).catch(() => ({ reason: "unavailable" }));
|
|
1598
|
+
if (discovered.reason === "success" && discovered.url)
|
|
1599
|
+
return discovered.url;
|
|
1600
|
+
throw new ChromeDevtoolsRelayDiscoveryError(discovered.reason === "success" ? "malformed" : discovered.reason, policy, timeoutMs);
|
|
1601
|
+
}
|
|
1476
1602
|
var lastDecisions = /* @__PURE__ */ new Map();
|
|
1477
1603
|
function recordChromeDevtoolsRelayDecision(server, decision) {
|
|
1478
1604
|
lastDecisions.set(server, decision);
|
|
@@ -1632,22 +1758,25 @@ async function rewriteChromeDevtoolsArgsForRelay(command, args, env = process.en
|
|
|
1632
1758
|
return { credential: { key, keyId: deriveBrowserRelayKeyId(key) } };
|
|
1633
1759
|
})() : defaultReadCredential(relayEnv);
|
|
1634
1760
|
if (!loaded.credential) {
|
|
1635
|
-
const
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
return unavailableOrLegacy(args, policy, loaded.reason ?? "invalid-credential", upstreamEndpoint
|
|
1761
|
+
const upstreamEndpoint = explicitBase.url ? new URL("/cdp", explicitBase.url) : void 0;
|
|
1762
|
+
if (upstreamEndpoint)
|
|
1763
|
+
upstreamEndpoint.protocol = "ws:";
|
|
1764
|
+
return unavailableOrLegacy(args, policy, loaded.reason ?? "invalid-credential", upstreamEndpoint?.toString(), options);
|
|
1639
1765
|
}
|
|
1640
1766
|
const timeoutMs = resolveChromeDevtoolsRelayProbeTimeoutMs(relayEnv);
|
|
1641
1767
|
try {
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1768
|
+
let base;
|
|
1769
|
+
try {
|
|
1770
|
+
base = explicitBase.url ?? await discoverRelayBaseUrl(relayEnv, loaded.credential.keyId, timeoutMs, policy, options);
|
|
1771
|
+
} catch (error) {
|
|
1772
|
+
if (!(error instanceof ChromeDevtoolsRelayDiscoveryError))
|
|
1773
|
+
throw error;
|
|
1774
|
+
if (policy === "require") {
|
|
1775
|
+
options.onDecision?.(error.decision);
|
|
1776
|
+
throw error;
|
|
1777
|
+
}
|
|
1778
|
+
return unavailableOrLegacy(args, policy, error.decision.reason, void 0, options);
|
|
1779
|
+
}
|
|
1651
1780
|
const upstreamEndpoint = new URL("/cdp", base);
|
|
1652
1781
|
upstreamEndpoint.protocol = "ws:";
|
|
1653
1782
|
const endpoint = upstreamEndpoint.toString();
|
|
@@ -1718,7 +1847,7 @@ function sanitizeRelayIdentityEnvironment(env) {
|
|
|
1718
1847
|
const selected = selectChromeDevtoolsRelayRuntimeEnvironment(env);
|
|
1719
1848
|
if (selected.MCPORTER_CHROME_DEVTOOLS_RELAY_URL !== void 0) {
|
|
1720
1849
|
const explicit = explicitRelayBaseUrl(selected);
|
|
1721
|
-
selected.MCPORTER_CHROME_DEVTOOLS_RELAY_URL = explicit.url?.toString() ?? "invalid-endpoint";
|
|
1850
|
+
selected.MCPORTER_CHROME_DEVTOOLS_RELAY_URL = explicit.explicit ? explicit.url?.toString() ?? "invalid-endpoint" : "";
|
|
1722
1851
|
}
|
|
1723
1852
|
return selected;
|
|
1724
1853
|
}
|
|
@@ -1734,96 +1863,40 @@ function chromeDevtoolsRelayEnvironmentKeys(definitions, env = process.env) {
|
|
|
1734
1863
|
continue;
|
|
1735
1864
|
}
|
|
1736
1865
|
for (const key of commandEnvironmentKeys)
|
|
1737
|
-
keys.add(key);
|
|
1866
|
+
keys.add(`${RELAY_DEPENDENCY_SENTINEL}${key}`);
|
|
1738
1867
|
const resolvedDefinitionEnv = resolveRelayIdentityEnvOverrides(definition.env, env);
|
|
1739
|
-
for (const pathKey of [
|
|
1740
|
-
"HOME",
|
|
1741
|
-
"USERPROFILE",
|
|
1742
|
-
"OPENCLAW_HOME",
|
|
1743
|
-
"OPENCLAW_STATE_DIR",
|
|
1744
|
-
"OPENCLAW_OAUTH_DIR",
|
|
1745
|
-
"OPENCLAW_CONFIG_PATH"
|
|
1746
|
-
]) {
|
|
1747
|
-
const override = resolvedDefinitionEnv[pathKey]?.trim();
|
|
1748
|
-
if (override && override !== "~" && !override.startsWith("~/") && !override.startsWith("~\\") && !path2.isAbsolute(override)) {
|
|
1749
|
-
keys.add(RELAY_CWD_SENTINEL);
|
|
1750
|
-
}
|
|
1751
|
-
}
|
|
1752
1868
|
for (const key of CHROME_DEVTOOLS_RELAY_RUNTIME_ENV_KEYS) {
|
|
1753
|
-
keys.add(key);
|
|
1754
1869
|
const override = definition.env?.[key];
|
|
1755
1870
|
if (!override)
|
|
1756
1871
|
continue;
|
|
1757
1872
|
for (const referenced of referencedEnvironmentVariables(override))
|
|
1758
|
-
keys.add(referenced);
|
|
1873
|
+
keys.add(`${RELAY_DEPENDENCY_SENTINEL}${referenced}`);
|
|
1759
1874
|
}
|
|
1760
|
-
const effectiveEnv = { ...env, ...resolvedDefinitionEnv };
|
|
1761
1875
|
const resolvedCommand = resolveCommandArgument(definition.command.command, env);
|
|
1762
1876
|
const resolvedArgs = resolveCommandArguments(definition.command.args, env);
|
|
1763
|
-
|
|
1877
|
+
const eligible = isChromeDevtoolsAutoConnectCommand(resolvedCommand, resolvedArgs);
|
|
1878
|
+
if (!eligible && !isAmbiguousChromeDevtoolsAutoConnectCommand(resolvedCommand, resolvedArgs))
|
|
1764
1879
|
continue;
|
|
1765
|
-
const
|
|
1766
|
-
keys.add(`${
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1880
|
+
const environment = sanitizeRelayIdentityEnvironment(resolvedDefinitionEnv);
|
|
1881
|
+
keys.add(`${RELAY_DISCOVERY_SENTINEL}${Buffer.from(JSON.stringify({
|
|
1882
|
+
server: definition.name,
|
|
1883
|
+
eligible,
|
|
1884
|
+
environment,
|
|
1885
|
+
configuredPolicy: definition.chromeDevtoolsRelay
|
|
1886
|
+
}), "utf8").toString("base64url")}`);
|
|
1772
1887
|
}
|
|
1773
1888
|
return [...keys].toSorted();
|
|
1774
1889
|
}
|
|
1775
1890
|
async function resolveChromeDevtoolsRelayRuntimeIdentity(keys, env = process.env, options = {}) {
|
|
1776
|
-
const
|
|
1777
|
-
const
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
continue;
|
|
1782
|
-
const payload = parseRelayDiscoveryIdentity(key.slice(RELAY_DISCOVERY_SENTINEL.length));
|
|
1783
|
-
if (!payload) {
|
|
1784
|
-
discoveryValues.push([key, DEFAULT_RELAY_IDENTITY_URL]);
|
|
1785
|
-
continue;
|
|
1786
|
-
}
|
|
1787
|
-
const effectiveEnv = {
|
|
1788
|
-
...selectChromeDevtoolsRelayRuntimeEnvironment(env),
|
|
1789
|
-
...payload.environment
|
|
1790
|
-
};
|
|
1791
|
-
const explicit = explicitRelayBaseUrl(effectiveEnv);
|
|
1792
|
-
if (explicit.explicit) {
|
|
1793
|
-
discoveryValues.push([key, explicit.url?.toString() ?? "invalid-endpoint"]);
|
|
1794
|
-
continue;
|
|
1795
|
-
}
|
|
1796
|
-
if (resolveChromeDevtoolsRelayPolicy(payload.configuredPolicy, effectiveEnv) === "off") {
|
|
1797
|
-
discoveryValues.push([key, "disabled"]);
|
|
1798
|
-
continue;
|
|
1799
|
-
}
|
|
1800
|
-
const keyId = credentialId(payload.credentialPath);
|
|
1801
|
-
if (keyId === "missing-credential" || keyId === "invalid-credential") {
|
|
1802
|
-
discoveryValues.push([key, DEFAULT_RELAY_IDENTITY_URL]);
|
|
1803
|
-
continue;
|
|
1804
|
-
}
|
|
1805
|
-
try {
|
|
1806
|
-
const discovered = await discoverOpenClawRelayUrl({
|
|
1807
|
-
env: effectiveEnv,
|
|
1808
|
-
keyId,
|
|
1809
|
-
timeoutMs: resolveChromeDevtoolsRelayProbeTimeoutMs(effectiveEnv),
|
|
1810
|
-
run: options.discover,
|
|
1811
|
-
platform: options.discovery?.platform,
|
|
1812
|
-
isFile: options.discovery?.isFile,
|
|
1813
|
-
cwd: options.discovery?.cwd
|
|
1814
|
-
});
|
|
1815
|
-
discoveryValues.push([key, discovered.url?.toString() ?? DEFAULT_RELAY_IDENTITY_URL]);
|
|
1816
|
-
} catch {
|
|
1817
|
-
discoveryValues.push([key, DEFAULT_RELAY_IDENTITY_URL]);
|
|
1891
|
+
const { values, relays } = relayEnvironmentIdentityValues(keys, env);
|
|
1892
|
+
for (const relay of relays) {
|
|
1893
|
+
let endpoint = relay.endpoint;
|
|
1894
|
+
if (relay.discover && relay.keyId !== "missing-credential" && relay.keyId !== "invalid-credential") {
|
|
1895
|
+
endpoint = (await discoverRelayBaseUrl(relay.env, relay.keyId, relay.timeoutMs, relay.policy, options)).toString();
|
|
1818
1896
|
}
|
|
1897
|
+
values.push([relay.server, endpoint]);
|
|
1819
1898
|
}
|
|
1820
|
-
|
|
1821
|
-
return hashRelayIdentityValues(environmentValues);
|
|
1822
|
-
return hashRelayIdentityValues([
|
|
1823
|
-
...environmentValues,
|
|
1824
|
-
["$relayRuntimeIdentity", CHROME_DEVTOOLS_RELAY_RUNTIME_IDENTITY_VERSION],
|
|
1825
|
-
...discoveryValues
|
|
1826
|
-
]);
|
|
1899
|
+
return hashRelayIdentityValues(values);
|
|
1827
1900
|
}
|
|
1828
1901
|
function createRelayCredentialIdResolver() {
|
|
1829
1902
|
const credentialIds = /* @__PURE__ */ new Map();
|
|
@@ -1838,26 +1911,90 @@ function createRelayCredentialIdResolver() {
|
|
|
1838
1911
|
return value;
|
|
1839
1912
|
};
|
|
1840
1913
|
}
|
|
1841
|
-
function relayEnvironmentIdentityValues(keys, env
|
|
1842
|
-
const
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1914
|
+
function relayEnvironmentIdentityValues(keys, env) {
|
|
1915
|
+
const credentialId = createRelayCredentialIdResolver();
|
|
1916
|
+
const values = [];
|
|
1917
|
+
const relays = [];
|
|
1918
|
+
for (const key of keys) {
|
|
1919
|
+
if (key.startsWith(RELAY_DEPENDENCY_SENTINEL)) {
|
|
1920
|
+
values.push([key, env[key.slice(RELAY_DEPENDENCY_SENTINEL.length)] ?? null]);
|
|
1921
|
+
continue;
|
|
1848
1922
|
}
|
|
1849
|
-
if (key.startsWith(RELAY_DISCOVERY_SENTINEL)) {
|
|
1850
|
-
|
|
1923
|
+
if (!key.startsWith(RELAY_DISCOVERY_SENTINEL)) {
|
|
1924
|
+
values.push([key, relayEnvironmentIdentityValue(key, env)]);
|
|
1925
|
+
continue;
|
|
1851
1926
|
}
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1927
|
+
const payload = parseRelayDiscoveryIdentity(key.slice(RELAY_DISCOVERY_SENTINEL.length));
|
|
1928
|
+
if (!payload)
|
|
1929
|
+
throw new Error("Invalid Chrome DevTools relay identity metadata");
|
|
1930
|
+
const effectiveEnv = { ...selectChromeDevtoolsRelayRuntimeEnvironment(env), ...payload.environment };
|
|
1931
|
+
const policy = resolveChromeDevtoolsRelayPolicy(payload.configuredPolicy, effectiveEnv);
|
|
1932
|
+
const timeoutMs = resolveChromeDevtoolsRelayProbeTimeoutMs(effectiveEnv);
|
|
1933
|
+
const explicit = explicitRelayBaseUrl(effectiveEnv);
|
|
1934
|
+
const credentialDir = resolveOpenClawCredentialDir(effectiveEnv);
|
|
1935
|
+
const keyId = payload.eligible ? credentialId(path2.join(credentialDir, "browser-extension-relay.secret")) : "not-eligible";
|
|
1936
|
+
const server = `$relay:${payload.server}`;
|
|
1937
|
+
values.push([
|
|
1938
|
+
server,
|
|
1939
|
+
JSON.stringify({
|
|
1940
|
+
policy,
|
|
1941
|
+
timeoutMs,
|
|
1942
|
+
eligible: payload.eligible,
|
|
1943
|
+
credentialDir,
|
|
1944
|
+
keyId,
|
|
1945
|
+
// These values also reach the discovery subprocess; retain inputs whose equivalence it does not guarantee.
|
|
1946
|
+
discovery: OPENCLAW_RELAY_DISCOVERY_ENV_KEYS.map((name) => [
|
|
1947
|
+
name,
|
|
1948
|
+
relayEnvironmentIdentityValue(name, effectiveEnv)
|
|
1949
|
+
]),
|
|
1950
|
+
cwd: relayIdentityDependsOnCwd(effectiveEnv) ? process.cwd() : null
|
|
1951
|
+
})
|
|
1952
|
+
]);
|
|
1953
|
+
relays.push({
|
|
1954
|
+
server,
|
|
1955
|
+
policy,
|
|
1956
|
+
env: effectiveEnv,
|
|
1957
|
+
timeoutMs,
|
|
1958
|
+
keyId,
|
|
1959
|
+
endpoint: policy === "off" ? "disabled" : explicit.explicit ? explicit.url?.toString() ?? "invalid-endpoint" : UNRESOLVED_RELAY_IDENTITY,
|
|
1960
|
+
discover: payload.eligible && policy !== "off" && !explicit.explicit
|
|
1961
|
+
});
|
|
1856
1962
|
}
|
|
1857
|
-
|
|
1963
|
+
if (keys.length > 0)
|
|
1964
|
+
values.push(["$relayAuth", "v2-effective-metadata-discovery"]);
|
|
1965
|
+
return { values, relays };
|
|
1966
|
+
}
|
|
1967
|
+
function relayEnvironmentIdentityValue(key, env) {
|
|
1968
|
+
switch (key) {
|
|
1969
|
+
case "MCPORTER_CHROME_DEVTOOLS_RELAY_POLICY":
|
|
1970
|
+
case "MCPORTER_DISABLE_CHROME_DEVTOOLS_RELAY":
|
|
1971
|
+
return resolveChromeDevtoolsRelayPolicy(void 0, env);
|
|
1972
|
+
case "MCPORTER_CHROME_DEVTOOLS_RELAY_TIMEOUT_MS":
|
|
1973
|
+
return resolveChromeDevtoolsRelayProbeTimeoutMs(env);
|
|
1974
|
+
case "MCPORTER_CHROME_DEVTOOLS_RELAY_URL": {
|
|
1975
|
+
const explicit = explicitRelayBaseUrl(env);
|
|
1976
|
+
return explicit.explicit ? explicit.url?.toString() ?? "invalid-endpoint" : UNRESOLVED_RELAY_IDENTITY;
|
|
1977
|
+
}
|
|
1978
|
+
case "OPENCLAW_PROFILE":
|
|
1979
|
+
return normalizeOpenClawProfile(env.OPENCLAW_PROFILE) ?? null;
|
|
1980
|
+
default:
|
|
1981
|
+
return env[key] ?? null;
|
|
1982
|
+
}
|
|
1983
|
+
}
|
|
1984
|
+
function relayIdentityDependsOnCwd(env) {
|
|
1985
|
+
const paths = [
|
|
1986
|
+
env.HOME,
|
|
1987
|
+
env.USERPROFILE,
|
|
1988
|
+
env.OPENCLAW_HOME,
|
|
1989
|
+
env.OPENCLAW_STATE_DIR,
|
|
1990
|
+
env.OPENCLAW_OAUTH_DIR,
|
|
1991
|
+
env.OPENCLAW_CONFIG_PATH,
|
|
1992
|
+
...(env.PATH ?? env.Path)?.split(path2.delimiter) ?? []
|
|
1993
|
+
];
|
|
1994
|
+
return paths.some((value) => value !== void 0 && !path2.isAbsolute(value) && !value.startsWith("~"));
|
|
1858
1995
|
}
|
|
1859
1996
|
function hashRelayIdentityValues(values) {
|
|
1860
|
-
return createHash3("sha256").update(JSON.stringify(values)).digest("hex").slice(0, 16);
|
|
1997
|
+
return createHash3("sha256").update(JSON.stringify(values.toSorted((a, b) => a[0].localeCompare(b[0]) || JSON.stringify(a[1]).localeCompare(JSON.stringify(b[1]))))).digest("hex").slice(0, 16);
|
|
1861
1998
|
}
|
|
1862
1999
|
function parseRelayDiscoveryIdentity(encoded) {
|
|
1863
2000
|
try {
|
|
@@ -1865,21 +2002,19 @@ function parseRelayDiscoveryIdentity(encoded) {
|
|
|
1865
2002
|
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
1866
2003
|
return void 0;
|
|
1867
2004
|
const candidate = value;
|
|
1868
|
-
if (typeof candidate.
|
|
2005
|
+
if (typeof candidate.server !== "string" || typeof candidate.eligible !== "boolean" || !candidate.environment || typeof candidate.environment !== "object")
|
|
1869
2006
|
return void 0;
|
|
1870
|
-
|
|
1871
|
-
if (candidate.configuredPolicy !== void 0 && !["off", "prefer", "require"].includes(candidate.configuredPolicy)) {
|
|
2007
|
+
if (candidate.configuredPolicy !== void 0 && !["off", "prefer", "require"].includes(candidate.configuredPolicy))
|
|
1872
2008
|
return void 0;
|
|
1873
|
-
}
|
|
1874
2009
|
const environment = {};
|
|
1875
2010
|
for (const [key, raw] of Object.entries(candidate.environment)) {
|
|
1876
|
-
if (!CHROME_DEVTOOLS_RELAY_RUNTIME_ENV_KEYS.includes(key) || typeof raw !== "string")
|
|
2011
|
+
if (!CHROME_DEVTOOLS_RELAY_RUNTIME_ENV_KEYS.includes(key) || typeof raw !== "string")
|
|
1877
2012
|
return void 0;
|
|
1878
|
-
}
|
|
1879
2013
|
environment[key] = raw;
|
|
1880
2014
|
}
|
|
1881
2015
|
return {
|
|
1882
|
-
|
|
2016
|
+
server: candidate.server,
|
|
2017
|
+
eligible: candidate.eligible,
|
|
1883
2018
|
environment,
|
|
1884
2019
|
configuredPolicy: candidate.configuredPolicy
|
|
1885
2020
|
};
|
|
@@ -1918,12 +2053,19 @@ function isErrno(error, code) {
|
|
|
1918
2053
|
}
|
|
1919
2054
|
|
|
1920
2055
|
export {
|
|
2056
|
+
isExistingChromeDevtoolsCommand,
|
|
1921
2057
|
resolveChromeDevtoolsAutoConnectCommand,
|
|
1922
|
-
|
|
2058
|
+
resolveCommandArgument,
|
|
2059
|
+
resolveCommandArguments,
|
|
2060
|
+
normalizeTimeout,
|
|
2061
|
+
raceWithTimeout,
|
|
1923
2062
|
ChromeDevtoolsRelayRequiredError,
|
|
2063
|
+
ChromeDevtoolsRelayDiscoveryError,
|
|
1924
2064
|
recordChromeDevtoolsRelayDecision,
|
|
1925
2065
|
getChromeDevtoolsRelayDecision,
|
|
1926
2066
|
formatChromeDevtoolsRelayDecision,
|
|
2067
|
+
resolveChromeDevtoolsRelayProbeTimeoutMs,
|
|
2068
|
+
resolveChromeDevtoolsRelayPolicy,
|
|
1927
2069
|
rewriteChromeDevtoolsArgsForRelay,
|
|
1928
2070
|
resolveChromeDevtoolsRelayEnvironment,
|
|
1929
2071
|
chromeDevtoolsRelayEnvironmentKeys,
|