@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.
Files changed (291) hide show
  1. package/dist/api/mcp.d.ts +3 -3
  2. package/dist/api/mcp.d.ts.map +1 -1
  3. package/dist/api/mcp.js +1 -1
  4. package/dist/api/mcp.js.map +1 -1
  5. package/dist/{child-agent-completions.d.ts → child/agent-completions.d.ts} +2 -2
  6. package/dist/child/agent-completions.d.ts.map +1 -0
  7. package/dist/{child-agent-completions.js → child/agent-completions.js} +1 -1
  8. package/dist/child/agent-completions.js.map +1 -0
  9. package/dist/{child-agent-store.d.ts → child/agent-store.d.ts} +1 -1
  10. package/dist/child/agent-store.d.ts.map +1 -0
  11. package/dist/{child-agent-store.js → child/agent-store.js} +1 -1
  12. package/dist/child/agent-store.js.map +1 -0
  13. package/dist/{child-agent.d.ts → child/agent.d.ts} +2 -2
  14. package/dist/child/agent.d.ts.map +1 -0
  15. package/dist/{child-agent.js → child/agent.js} +5 -5
  16. package/dist/child/agent.js.map +1 -0
  17. package/dist/{child-session.d.ts → child/session.d.ts} +4 -4
  18. package/dist/child/session.d.ts.map +1 -0
  19. package/dist/{child-session.js → child/session.js} +2 -2
  20. package/dist/child/session.js.map +1 -0
  21. package/dist/connector-tools.d.ts +1 -1
  22. package/dist/connector-tools.js +2 -2
  23. package/dist/inspect.d.ts +1 -1
  24. package/dist/inspect.js +1 -1
  25. package/dist/{mcp-catalog.d.ts → mcp/catalog.d.ts} +3 -3
  26. package/dist/mcp/catalog.d.ts.map +1 -0
  27. package/dist/{mcp-catalog.js → mcp/catalog.js} +2 -2
  28. package/dist/mcp/catalog.js.map +1 -0
  29. package/dist/{mcp-command-context.d.ts → mcp/cli/command-context.d.ts} +1 -1
  30. package/dist/mcp/cli/command-context.d.ts.map +1 -0
  31. package/dist/{mcp-command-context.js → mcp/cli/command-context.js} +1 -1
  32. package/dist/mcp/cli/command-context.js.map +1 -0
  33. package/dist/{mcp-cli-core.d.ts → mcp/cli/core.d.ts} +14 -8
  34. package/dist/mcp/cli/core.d.ts.map +1 -0
  35. package/dist/{mcp-cli-core.js → mcp/cli/core.js} +105 -146
  36. package/dist/mcp/cli/core.js.map +1 -0
  37. package/dist/mcp/cli/help.d.ts +6 -0
  38. package/dist/mcp/cli/help.d.ts.map +1 -0
  39. package/dist/mcp/cli/help.js +116 -0
  40. package/dist/mcp/cli/help.js.map +1 -0
  41. package/dist/mcp/cli/index.d.ts +3 -0
  42. package/dist/mcp/cli/index.d.ts.map +1 -0
  43. package/dist/{mcp-cli.js → mcp/cli/index.js} +4 -4
  44. package/dist/mcp/cli/index.js.map +1 -0
  45. package/dist/{mcp-cli-policy.d.ts → mcp/cli/policy.d.ts} +2 -2
  46. package/dist/mcp/cli/policy.d.ts.map +1 -0
  47. package/dist/{mcp-cli-policy.js → mcp/cli/policy.js} +2 -2
  48. package/dist/mcp/cli/policy.js.map +1 -0
  49. package/dist/mcp/cli/run-worker.d.ts +2 -0
  50. package/dist/mcp/cli/run-worker.d.ts.map +1 -0
  51. package/dist/mcp/cli/run-worker.js +54 -0
  52. package/dist/mcp/cli/run-worker.js.map +1 -0
  53. package/dist/mcp/client-entry.d.ts +3 -0
  54. package/dist/mcp/client-entry.d.ts.map +1 -0
  55. package/dist/{mcp-client.js → mcp/client-entry.js} +3 -3
  56. package/dist/mcp/client-entry.js.map +1 -0
  57. package/dist/{mcp-contract.d.ts → mcp/contract.d.ts} +2 -2
  58. package/dist/mcp/contract.d.ts.map +1 -0
  59. package/dist/{mcp-contract.js → mcp/contract.js} +1 -1
  60. package/dist/mcp/contract.js.map +1 -0
  61. package/dist/{mcp-daemon-client.d.ts → mcp/daemon/client.d.ts} +3 -2
  62. package/dist/mcp/daemon/client.d.ts.map +1 -0
  63. package/dist/{mcp-daemon-client.js → mcp/daemon/client.js} +12 -8
  64. package/dist/mcp/daemon/client.js.map +1 -0
  65. package/dist/mcp/daemon/index.d.ts +3 -0
  66. package/dist/mcp/daemon/index.d.ts.map +1 -0
  67. package/dist/mcp/daemon/index.js +453 -0
  68. package/dist/{mcp-daemon.js.map → mcp/daemon/index.js.map} +1 -1
  69. package/dist/{mcp-daemon-protocol.d.ts → mcp/daemon/protocol.d.ts} +2 -2
  70. package/dist/mcp/daemon/protocol.d.ts.map +1 -0
  71. package/dist/{mcp-daemon-protocol.js → mcp/daemon/protocol.js} +1 -1
  72. package/dist/mcp/daemon/protocol.js.map +1 -0
  73. package/dist/{mcp.d.ts → mcp/index.d.ts} +5 -5
  74. package/dist/mcp/index.d.ts.map +1 -0
  75. package/dist/{mcp.js → mcp/index.js} +16 -10
  76. package/dist/mcp/index.js.map +1 -0
  77. package/dist/{mcp-policy.d.ts → mcp/policy.d.ts} +3 -3
  78. package/dist/mcp/policy.d.ts.map +1 -0
  79. package/dist/{mcp-policy.js → mcp/policy.js} +1 -1
  80. package/dist/mcp/policy.js.map +1 -0
  81. package/dist/{mcp-tools.d.ts → mcp/tools.d.ts} +4 -4
  82. package/dist/mcp/tools.d.ts.map +1 -0
  83. package/dist/{mcp-tools.js → mcp/tools.js} +4 -4
  84. package/dist/mcp/tools.js.map +1 -0
  85. package/dist/{mcp-trace-context.d.ts → mcp/trace-context.d.ts} +2 -2
  86. package/dist/mcp/trace-context.d.ts.map +1 -0
  87. package/dist/{mcp-trace-context.js → mcp/trace-context.js} +1 -1
  88. package/dist/mcp/trace-context.js.map +1 -0
  89. package/dist/mcp-chunks/{auth-command-4WFRNU2I.js → auth-command-GQFV6QYP.js} +24 -27
  90. package/dist/mcp-chunks/call-arguments-VT7JLNJY.js +16 -0
  91. package/dist/mcp-chunks/{call-command-JBIKXOGC.js → call-command-LMAREWKD.js} +45 -45
  92. package/dist/mcp-chunks/{chunk-3JGS7LQB.js → chunk-2HOMVWSA.js} +2 -2
  93. package/dist/mcp-chunks/{chunk-G6OMDUNG.js → chunk-2P2HVZ3G.js} +1 -1
  94. package/dist/mcp-chunks/{chunk-ED2WN5BI.js → chunk-34QXE62Y.js} +175 -147
  95. package/dist/mcp-chunks/{chunk-Y3EDWN2P.js → chunk-5B7GRMUK.js} +1 -1
  96. package/dist/mcp-chunks/chunk-5BMCVE2J.js +516 -0
  97. package/dist/mcp-chunks/{chunk-V5AYEKSL.js → chunk-6QZQZXDJ.js} +52 -81
  98. package/dist/mcp-chunks/{chunk-3R2WK3NB.js → chunk-6RG6AD5X.js} +6 -6
  99. package/dist/mcp-chunks/{chunk-SNKXMWDB.js → chunk-77BZYP72.js} +1 -1
  100. package/dist/mcp-chunks/chunk-7PFJCLXL.js +123 -0
  101. package/dist/mcp-chunks/chunk-7WL4TMON.js +31 -0
  102. package/dist/mcp-chunks/{chunk-ELA77TDC.js → chunk-C2VLY7ED.js} +4 -4
  103. package/dist/mcp-chunks/{chunk-FAJPJTOC.js → chunk-CLR6DJV3.js} +1 -1
  104. package/dist/mcp-chunks/{chunk-ZOAQDFAO.js → chunk-D6B2M5V7.js} +1 -1
  105. package/dist/mcp-chunks/{chunk-WTMJMM3B.js → chunk-D6SVCPN6.js} +3 -30
  106. package/dist/mcp-chunks/chunk-FBVRU4Y3.js +1195 -0
  107. package/dist/mcp-chunks/{chunk-EMSNQHZZ.js → chunk-FONFU4G5.js} +1 -1
  108. package/dist/mcp-chunks/{chunk-BWW4XRUC.js → chunk-H4KL74PV.js} +303 -161
  109. package/dist/mcp-chunks/{chunk-ITR7FQM3.js → chunk-H7ARMBV7.js} +4 -9
  110. package/dist/mcp-chunks/{chunk-EPT4MYOF.js → chunk-HZ2SX5U6.js} +39 -34
  111. package/dist/mcp-chunks/{chunk-36VIJRYY.js → chunk-I6UMKX5E.js} +4 -4
  112. package/dist/mcp-chunks/{chunk-ASG4OY3M.js → chunk-IF6LRV3J.js} +21 -28
  113. package/dist/mcp-chunks/{chunk-KW3ANJ36.js → chunk-JVYCENPP.js} +4 -4
  114. package/dist/mcp-chunks/{chunk-AIKLVBYU.js → chunk-KOWNVUL2.js} +34 -7
  115. package/dist/mcp-chunks/{chunk-B2LNXGAP.js → chunk-KQCLM7R7.js} +4 -4
  116. package/dist/mcp-chunks/{chunk-OP3IW2V6.js → chunk-L6OOGZVA.js} +2 -2
  117. package/dist/mcp-chunks/{chunk-MOEZ43ZL.js → chunk-LCBDVFVA.js} +1 -1
  118. package/dist/mcp-chunks/{chunk-ITCCROID.js → chunk-LIEFPSSB.js} +5 -5
  119. package/dist/mcp-chunks/{chunk-GUXMP7QB.js → chunk-LQIE4PKL.js} +2 -2
  120. package/dist/mcp-chunks/{chunk-WYLHHXI6.js → chunk-LXHPDKEF.js} +26 -11
  121. package/dist/mcp-chunks/{chunk-6YZW3XAE.js → chunk-MJFZM5EV.js} +5 -5
  122. package/dist/mcp-chunks/{chunk-TPHPAEDH.js → chunk-NQW3ES2G.js} +2 -8
  123. package/dist/mcp-chunks/{chunk-IPNSPKQK.js → chunk-O2VOMKAS.js} +15 -17
  124. package/dist/mcp-chunks/{chunk-QZUC2T72.js → chunk-O4JIUOWF.js} +2 -2
  125. package/dist/mcp-chunks/{chunk-C2KNLFZR.js → chunk-P3UVILEW.js} +2 -2
  126. package/dist/mcp-chunks/{chunk-7WOKCV6Q.js → chunk-P463YBJM.js} +1 -1
  127. package/dist/mcp-chunks/{chunk-GQ6NSIDS.js → chunk-PJCMJ65D.js} +1175 -718
  128. package/dist/mcp-chunks/{chunk-CZKDJZER.js → chunk-QALB3DRW.js} +1 -1
  129. package/dist/mcp-chunks/{chunk-JG4TRUPF.js → chunk-QJNF3A3F.js} +1 -1
  130. package/dist/mcp-chunks/{chunk-HLRCUHNO.js → chunk-RIHPVCGI.js} +1 -1
  131. package/dist/mcp-chunks/{chunk-RD7NHCRK.js → chunk-RZIJUJGL.js} +60 -1074
  132. package/dist/mcp-chunks/{chunk-4ZNBWL65.js → chunk-S2YF442K.js} +2 -2
  133. package/dist/mcp-chunks/chunk-S5F3HEZZ.js +37060 -0
  134. package/dist/mcp-chunks/{chunk-TF2YTYE4.js → chunk-S6GJ42I2.js} +1 -1
  135. package/dist/mcp-chunks/chunk-T4MQCFIK.js +982 -0
  136. package/dist/mcp-chunks/{chunk-SCOMDV54.js → chunk-TUQGOYK6.js} +1 -1
  137. package/dist/mcp-chunks/{chunk-YIRGLKDA.js → chunk-TYYSBILI.js} +46 -27
  138. package/dist/mcp-chunks/{chunk-FS5JIKT6.js → chunk-UHO6KIUJ.js} +6 -6
  139. package/dist/mcp-chunks/{chunk-RSTKSBVF.js → chunk-UIPG6W7N.js} +2 -2
  140. package/dist/mcp-chunks/{chunk-IME7DGLJ.js → chunk-UKM35J67.js} +2 -2
  141. package/dist/mcp-chunks/{chunk-FX5NYWBH.js → chunk-UYJZJXC2.js} +3 -3
  142. package/dist/mcp-chunks/{chunk-HCOKLSOB.js → chunk-VJIAHZZG.js} +4 -4
  143. package/dist/mcp-chunks/{chunk-IYWYVHHD.js → chunk-WHJUDBPR.js} +1 -1
  144. package/dist/mcp-chunks/{chunk-53NRFMB3.js → chunk-XNHGMWN2.js} +46 -25
  145. package/dist/mcp-chunks/{cli-XU26MUCN.js → cli-JI7MEAAX.js} +111 -79
  146. package/dist/mcp-chunks/client-QU7ABSNB.js +30 -0
  147. package/dist/mcp-chunks/{config-command-UQMMIK2U.js → config-command-GRZLKD3R.js} +36 -29
  148. package/dist/mcp-chunks/daemon-command-3266CYHO.js +30 -0
  149. package/dist/mcp-chunks/{dist-DM2RXZMU.js → dist-USMCQ22V.js} +105 -47
  150. package/dist/mcp-chunks/{emit-ts-command-KAOL6DAN.js → emit-ts-command-7VLESP7H.js} +20 -19
  151. package/dist/mcp-chunks/{generate-cli-runner-AK6XNRTK.js → generate-cli-runner-SSW2B72K.js} +54 -51
  152. package/dist/mcp-chunks/generated-daemon-runtime-7CFVWLC7.js +30 -0
  153. package/dist/mcp-chunks/{inspect-cli-command-6FVJO7H2.js → inspect-cli-command-NCGCMOIS.js} +9 -10
  154. package/dist/mcp-chunks/{launch-EIT73HX4.js → launch-NBONSPNK.js} +1 -1
  155. package/dist/mcp-chunks/{lifecycle-QH4TUI3K.js → lifecycle-CXAKUCN4.js} +1 -1
  156. package/dist/mcp-chunks/{list-command-UOB2XZK7.js → list-command-5T4UF4PF.js} +61 -75
  157. package/dist/mcp-chunks/{output-utils-6YXH23T7.js → output-utils-YFTWQZ5V.js} +3 -3
  158. package/dist/mcp-chunks/{prompt-CH6TK0bC-ZB6RFAXR.js → prompt-CH6TK0bC-6DI4RA4E.js} +1 -1
  159. package/dist/mcp-chunks/{record-command-FO5TTERC.js → record-command-TE5O7WBL.js} +5 -5
  160. package/dist/mcp-chunks/{replay-command-SCBPCGQ7.js → replay-command-QCUL5ASR.js} +6 -6
  161. package/dist/mcp-chunks/{resource-command-S2J7XEMV.js → resource-command-XMGF7EAK.js} +9 -10
  162. package/dist/mcp-chunks/{result-utils-OME6HGS6.js → result-utils-HKB42M7Y.js} +3 -4
  163. package/dist/mcp-chunks/runtime-3X2XVS6X.js +37 -0
  164. package/dist/mcp-chunks/runtime-wrapper-MI3HF45J.js +10 -0
  165. package/dist/mcp-chunks/{serve-command-DDBZZSG6.js → serve-command-5HV3ZE25.js} +30 -34
  166. package/dist/mcp-chunks/{timeouts-HNGNKDQN.js → timeouts-YBFBTLV2.js} +8 -5
  167. package/dist/mcp-chunks/{vault-command-TJZYS3YI.js → vault-command-FC2PD5U6.js} +4 -6
  168. package/dist/mcp-chunks/webapi-IFUPO72B.js +2481 -0
  169. package/dist/mcp-daemon.js +35 -33
  170. package/dist/mcp-run-worker.js +28 -32
  171. package/dist/pi-extension.d.ts +1 -1
  172. package/dist/pi-extension.js +8 -8
  173. package/dist/pi-extension.js.map +1 -1
  174. package/dist/{recipe-agent.d.ts → recipe/agent.d.ts} +3 -3
  175. package/dist/recipe/agent.d.ts.map +1 -0
  176. package/dist/{recipe-agent.js → recipe/agent.js} +5 -5
  177. package/dist/recipe/agent.js.map +1 -0
  178. package/dist/{recipe-extensions.d.ts → recipe/extensions.d.ts} +1 -1
  179. package/dist/recipe/extensions.d.ts.map +1 -0
  180. package/dist/{recipe-extensions.js → recipe/extensions.js} +1 -1
  181. package/dist/recipe/extensions.js.map +1 -0
  182. package/dist/{recipe-mcp-config.d.ts → recipe/mcp-config.d.ts} +2 -2
  183. package/dist/recipe/mcp-config.d.ts.map +1 -0
  184. package/dist/{recipe-mcp-config.js → recipe/mcp-config.js} +1 -1
  185. package/dist/recipe/mcp-config.js.map +1 -0
  186. package/dist/{recipe-model.d.ts → recipe/model.d.ts} +1 -1
  187. package/dist/recipe/model.d.ts.map +1 -0
  188. package/dist/{recipe-model.js → recipe/model.js} +1 -1
  189. package/dist/recipe/model.js.map +1 -0
  190. package/dist/{recipe-package.d.ts → recipe/package.d.ts} +1 -1
  191. package/dist/recipe/package.d.ts.map +1 -0
  192. package/dist/{recipe-package.js → recipe/package.js} +1 -1
  193. package/dist/recipe/package.js.map +1 -0
  194. package/dist/recipe/resolve.d.ts +6 -6
  195. package/dist/recipe/resolve.d.ts.map +1 -1
  196. package/dist/recipe/resolve.js +4 -4
  197. package/dist/recipe/resolve.js.map +1 -1
  198. package/dist/{recipe-session.d.ts → recipe/session.d.ts} +1 -1
  199. package/dist/recipe/session.d.ts.map +1 -0
  200. package/dist/{recipe-session.js → recipe/session.js} +1 -1
  201. package/dist/recipe/session.js.map +1 -0
  202. package/dist/{recipe-skills.d.ts → recipe/skills.d.ts} +1 -1
  203. package/dist/recipe/skills.d.ts.map +1 -0
  204. package/dist/{recipe-skills.js → recipe/skills.js} +2 -2
  205. package/dist/recipe/skills.js.map +1 -0
  206. package/dist/run-controller.js +2 -2
  207. package/dist/session.d.ts +1 -1
  208. package/dist/session.d.ts.map +1 -1
  209. package/dist/session.js +5 -5
  210. package/dist/session.js.map +1 -1
  211. package/docs/channels.md +1 -1
  212. package/docs/pi-extension.md +1 -1
  213. package/docs/recipe-format.md +8 -4
  214. package/docs/recipe-templates.md +46 -0
  215. package/docs/slack.md +1 -1
  216. package/package.json +14 -14
  217. package/dist/child-agent-completions.d.ts.map +0 -1
  218. package/dist/child-agent-completions.js.map +0 -1
  219. package/dist/child-agent-store.d.ts.map +0 -1
  220. package/dist/child-agent-store.js.map +0 -1
  221. package/dist/child-agent.d.ts.map +0 -1
  222. package/dist/child-agent.js.map +0 -1
  223. package/dist/child-session.d.ts.map +0 -1
  224. package/dist/child-session.js.map +0 -1
  225. package/dist/mcp-catalog.d.ts.map +0 -1
  226. package/dist/mcp-catalog.js.map +0 -1
  227. package/dist/mcp-chunks/call-arguments-4DWPBLQP.js +0 -15
  228. package/dist/mcp-chunks/chunk-3Z7MFS6K.js +0 -86
  229. package/dist/mcp-chunks/chunk-AD3FQ73K.js +0 -39
  230. package/dist/mcp-chunks/chunk-DTZHEVKC.js +0 -12
  231. package/dist/mcp-chunks/chunk-H3JCYHGS.js +0 -1018
  232. package/dist/mcp-chunks/chunk-HN7WPMCA.js +0 -18904
  233. package/dist/mcp-chunks/chunk-I5GI2A2D.js +0 -92
  234. package/dist/mcp-chunks/chunk-IRTJXFWA.js +0 -28
  235. package/dist/mcp-chunks/chunk-NTHUNCXJ.js +0 -526
  236. package/dist/mcp-chunks/chunk-OD3MSMXY.js +0 -15
  237. package/dist/mcp-chunks/chunk-PZ323CXI.js +0 -17394
  238. package/dist/mcp-chunks/client-OT34CKRH.js +0 -21
  239. package/dist/mcp-chunks/daemon-command-YCIOZGPZ.js +0 -35
  240. package/dist/mcp-chunks/runtime-QIPMLIJI.js +0 -39
  241. package/dist/mcp-chunks/runtime-wrapper-X4YFKMJI.js +0 -16
  242. package/dist/mcp-chunks/webapi-4GWO2UBA.js +0 -3508
  243. package/dist/mcp-cli-core.d.ts.map +0 -1
  244. package/dist/mcp-cli-core.js.map +0 -1
  245. package/dist/mcp-cli-help.d.ts +0 -2
  246. package/dist/mcp-cli-help.d.ts.map +0 -1
  247. package/dist/mcp-cli-help.js +0 -36
  248. package/dist/mcp-cli-help.js.map +0 -1
  249. package/dist/mcp-cli-policy.d.ts.map +0 -1
  250. package/dist/mcp-cli-policy.js.map +0 -1
  251. package/dist/mcp-cli.d.ts +0 -3
  252. package/dist/mcp-cli.d.ts.map +0 -1
  253. package/dist/mcp-cli.js.map +0 -1
  254. package/dist/mcp-client.d.ts +0 -3
  255. package/dist/mcp-client.d.ts.map +0 -1
  256. package/dist/mcp-client.js.map +0 -1
  257. package/dist/mcp-command-context.d.ts.map +0 -1
  258. package/dist/mcp-command-context.js.map +0 -1
  259. package/dist/mcp-contract.d.ts.map +0 -1
  260. package/dist/mcp-contract.js.map +0 -1
  261. package/dist/mcp-daemon-client.d.ts.map +0 -1
  262. package/dist/mcp-daemon-client.js.map +0 -1
  263. package/dist/mcp-daemon-protocol.d.ts.map +0 -1
  264. package/dist/mcp-daemon-protocol.js.map +0 -1
  265. package/dist/mcp-daemon.d.ts +0 -3
  266. package/dist/mcp-daemon.d.ts.map +0 -1
  267. package/dist/mcp-policy.d.ts.map +0 -1
  268. package/dist/mcp-policy.js.map +0 -1
  269. package/dist/mcp-run-worker.d.ts +0 -2
  270. package/dist/mcp-run-worker.d.ts.map +0 -1
  271. package/dist/mcp-run-worker.js.map +0 -1
  272. package/dist/mcp-tools.d.ts.map +0 -1
  273. package/dist/mcp-tools.js.map +0 -1
  274. package/dist/mcp-trace-context.d.ts.map +0 -1
  275. package/dist/mcp-trace-context.js.map +0 -1
  276. package/dist/mcp.d.ts.map +0 -1
  277. package/dist/mcp.js.map +0 -1
  278. package/dist/recipe-agent.d.ts.map +0 -1
  279. package/dist/recipe-agent.js.map +0 -1
  280. package/dist/recipe-extensions.d.ts.map +0 -1
  281. package/dist/recipe-extensions.js.map +0 -1
  282. package/dist/recipe-mcp-config.d.ts.map +0 -1
  283. package/dist/recipe-mcp-config.js.map +0 -1
  284. package/dist/recipe-model.d.ts.map +0 -1
  285. package/dist/recipe-model.js.map +0 -1
  286. package/dist/recipe-package.d.ts.map +0 -1
  287. package/dist/recipe-package.js.map +0 -1
  288. package/dist/recipe-session.d.ts.map +0 -1
  289. package/dist/recipe-session.js.map +0 -1
  290. package/dist/recipe-skills.d.ts.map +0 -1
  291. 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.8/node_modules/mcporter/dist/sdk-stdio-logging.js
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-RD7NHCRK.js";
4
+ } from "./chunk-T4MQCFIK.js";
9
5
  import {
6
+ resolveEnvPlaceholders,
10
7
  resolveEnvValue
11
- } from "./chunk-WTMJMM3B.js";
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.8/node_modules/mcporter/dist/chrome-devtools-command.js
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.8/node_modules/mcporter/dist/chrome-devtools-relay-proxy.js
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
- options.upstream.socket.once("error", () => downstream.destroy());
314
- options.upstream.socket.once("close", () => downstream.destroy());
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 onUpstreamClose = () => {
321
- void closeServer(server, sockets);
322
- };
323
- options.upstream.socket.once("close", onUpstreamClose);
433
+ const onBindError = (error) => binding.reject(error);
434
+ server.once("error", onBindError);
324
435
  try {
325
- await new Promise((resolve, reject) => {
326
- const onError = (error) => reject(error);
327
- server.once("error", onError);
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
- closeUpstream(options.upstream.socket);
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
- closeUpstream(options.upstream.socket);
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
- async close() {
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.8/node_modules/mcporter/dist/browser-relay-auth-v2.js
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.8/node_modules/mcporter/dist/chrome-devtools-relay-client.js
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.8/node_modules/mcporter/dist/chrome-devtools-relay-discovery.js
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.8/node_modules/mcporter/dist/chrome-devtools-relay.js
1452
- var DEFAULT_RELAY_PROBE_TIMEOUT_MS = 5e3;
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 DEFAULT_RELAY_URL = "http://127.0.0.1:18799";
1456
- var DEFAULT_RELAY_IDENTITY_URL = new URL(DEFAULT_RELAY_URL).toString();
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 base = explicitBase.url ?? new URL(DEFAULT_RELAY_URL);
1636
- const upstreamEndpoint = new URL("/cdp", base);
1637
- upstreamEndpoint.protocol = "ws:";
1638
- return unavailableOrLegacy(args, policy, loaded.reason ?? "invalid-credential", upstreamEndpoint.toString(), options);
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
- const base = explicitBase.url ?? (await discoverOpenClawRelayUrl({
1643
- env: relayEnv,
1644
- keyId: loaded.credential.keyId,
1645
- timeoutMs,
1646
- run: options.discover,
1647
- platform: options.discovery?.platform,
1648
- isFile: options.discovery?.isFile,
1649
- cwd: options.discovery?.cwd
1650
- })).url ?? new URL(DEFAULT_RELAY_URL);
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
- if (!isChromeDevtoolsAutoConnectCommand(resolvedCommand, resolvedArgs))
1877
+ const eligible = isChromeDevtoolsAutoConnectCommand(resolvedCommand, resolvedArgs);
1878
+ if (!eligible && !isAmbiguousChromeDevtoolsAutoConnectCommand(resolvedCommand, resolvedArgs))
1764
1879
  continue;
1765
- const credentialPath = path2.join(resolveOpenClawCredentialDir(effectiveEnv), "browser-extension-relay.secret");
1766
- keys.add(`${RELAY_CREDENTIAL_SENTINEL}${credentialPath}`);
1767
- const environment = sanitizeRelayIdentityEnvironment(Object.fromEntries(CHROME_DEVTOOLS_RELAY_RUNTIME_ENV_KEYS.flatMap((key) => {
1768
- const value = resolvedDefinitionEnv[key];
1769
- return value === void 0 ? [] : [[key, value]];
1770
- })));
1771
- keys.add(`${RELAY_DISCOVERY_SENTINEL}${Buffer.from(JSON.stringify({ credentialPath, environment, configuredPolicy: definition.chromeDevtoolsRelay }), "utf8").toString("base64url")}`);
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 credentialId = createRelayCredentialIdResolver();
1777
- const environmentValues = relayEnvironmentIdentityValues(keys, env, credentialId);
1778
- const discoveryValues = [];
1779
- for (const key of keys) {
1780
- if (!key.startsWith(RELAY_DISCOVERY_SENTINEL))
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
- if (discoveryValues.length === 0)
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, credentialId) {
1842
- const values = keys.map((key) => {
1843
- if (key === RELAY_CWD_SENTINEL)
1844
- return [key, process.cwd()];
1845
- if (key.startsWith(RELAY_CREDENTIAL_SENTINEL)) {
1846
- const credentialPath = key.slice(RELAY_CREDENTIAL_SENTINEL.length);
1847
- return [key, credentialId(credentialPath)];
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
- return [key, "async-discovery"];
1923
+ if (!key.startsWith(RELAY_DISCOVERY_SENTINEL)) {
1924
+ values.push([key, relayEnvironmentIdentityValue(key, env)]);
1925
+ continue;
1851
1926
  }
1852
- return [key, env[key] ?? null];
1853
- });
1854
- if (keys.length > 0) {
1855
- values.push(["$relayAuth", "v2-async-metadata-discovery"]);
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
- return values;
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.credentialPath !== "string" || !candidate.environment || typeof candidate.environment !== "object") {
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
- credentialPath: candidate.credentialPath,
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
- CHROME_DEVTOOLS_RELAY_RUNTIME_IDENTITY_VERSION,
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,