@introspection-ai/recipes 0.19.2 → 0.20.0

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 (116) hide show
  1. package/dist/agents.d.ts +17 -1
  2. package/dist/agents.d.ts.map +1 -1
  3. package/dist/agents.js +15 -1
  4. package/dist/agents.js.map +1 -1
  5. package/dist/child-agent.d.ts +3 -1
  6. package/dist/child-agent.d.ts.map +1 -1
  7. package/dist/child-agent.js +1 -0
  8. package/dist/child-agent.js.map +1 -1
  9. package/dist/mcp-chunks/{auth-command-3K7V3VCW.js → auth-command-IQ4J332A.js} +26 -38
  10. package/dist/mcp-chunks/call-arguments-MCCBPJMY.js +15 -0
  11. package/dist/mcp-chunks/{call-command-OFPHPFM5.js → call-command-WPQ3MDOE.js} +74 -40
  12. package/dist/mcp-chunks/{chunk-LNSUME65.js → chunk-24FKKIXI.js} +29 -13
  13. package/dist/mcp-chunks/{chunk-HTZ2URXW.js → chunk-2CTVPSHF.js} +3 -3
  14. package/dist/mcp-chunks/{chunk-NCXEJ35U.js → chunk-3FB4ZJ4Z.js} +4 -4
  15. package/dist/mcp-chunks/{chunk-P3RN22HQ.js → chunk-3MIFROM7.js} +3 -2
  16. package/dist/mcp-chunks/{chunk-GFYTST6N.js → chunk-54UGGTOX.js} +1 -1
  17. package/dist/mcp-chunks/{chunk-L4VKBFYI.js → chunk-5HQYKAE7.js} +101 -16
  18. package/dist/mcp-chunks/{chunk-E6RVTWJY.js → chunk-5YBCGQA7.js} +1 -1
  19. package/dist/mcp-chunks/{chunk-6D6KPSXN.js → chunk-AJPFOQLF.js} +1 -1
  20. package/dist/mcp-chunks/{chunk-C2PQFLWS.js → chunk-B4XFULJ6.js} +15 -6
  21. package/dist/mcp-chunks/{chunk-HAO6PL7Z.js → chunk-DIIFWDZ7.js} +7 -7
  22. package/dist/mcp-chunks/{chunk-55JIHDU3.js → chunk-EEYUPDRX.js} +1 -1
  23. package/dist/mcp-chunks/{chunk-7A63PAGP.js → chunk-ETYYCEQF.js} +21 -5
  24. package/dist/mcp-chunks/{chunk-E6T37ED6.js → chunk-FNQV2ONG.js} +2 -2
  25. package/dist/mcp-chunks/{chunk-2JHHONW4.js → chunk-FW5QVG6V.js} +1 -1
  26. package/dist/mcp-chunks/{chunk-YCYSQA5V.js → chunk-FZ7K5EGL.js} +5 -5
  27. package/dist/mcp-chunks/{chunk-KSMY7PXI.js → chunk-G5C4WVDQ.js} +1 -1
  28. package/dist/mcp-chunks/{chunk-XRGLP3Z2.js → chunk-GPCLDF6U.js} +1 -1
  29. package/dist/mcp-chunks/{chunk-KSGYBW3F.js → chunk-GQHTGV5E.js} +72 -22
  30. package/dist/mcp-chunks/{chunk-64EP2BVO.js → chunk-HULRE4D2.js} +1 -1
  31. package/dist/mcp-chunks/{chunk-UENXT3NE.js → chunk-ILSK6AWI.js} +1 -1
  32. package/dist/mcp-chunks/{chunk-RBVYCKCD.js → chunk-ILULMM2E.js} +2 -2
  33. package/dist/mcp-chunks/{chunk-NZOIX6XW.js → chunk-ITJWLDF5.js} +2 -2
  34. package/dist/mcp-chunks/{chunk-XUF6KARU.js → chunk-IUFDFNNP.js} +1 -1
  35. package/dist/mcp-chunks/chunk-JJG2OEHI.js +12 -0
  36. package/dist/mcp-chunks/{chunk-YPJ5EHXR.js → chunk-K56RW4HB.js} +4 -4
  37. package/dist/mcp-chunks/{chunk-H7F5RZXS.js → chunk-KJ3CMHWS.js} +2 -1
  38. package/dist/mcp-chunks/{chunk-WXBPMFSN.js → chunk-LI4L4FOV.js} +91 -34
  39. package/dist/mcp-chunks/{chunk-ETWN4IIA.js → chunk-LYZRCACV.js} +6 -6
  40. package/dist/mcp-chunks/{chunk-ZBFZ5UFE.js → chunk-MDVNQ4HM.js} +3 -1
  41. package/dist/mcp-chunks/{chunk-3IZQW4H4.js → chunk-MNAVFYYV.js} +212 -18
  42. package/dist/mcp-chunks/{chunk-7DH57OKF.js → chunk-MWD5PZ4G.js} +2 -2
  43. package/dist/mcp-chunks/{chunk-YSPT6F7K.js → chunk-N2HVJU7X.js} +1 -1
  44. package/dist/mcp-chunks/{chunk-WWO5WGH5.js → chunk-NACLB5YH.js} +5 -5
  45. package/dist/mcp-chunks/{chunk-QJACOI2W.js → chunk-NMF5S5DC.js} +4 -2
  46. package/dist/mcp-chunks/{chunk-54EWGONA.js → chunk-NPU7EMGE.js} +10 -6
  47. package/dist/mcp-chunks/{chunk-SFREPU3D.js → chunk-NSZY5WLR.js} +1 -1
  48. package/dist/mcp-chunks/{chunk-7RDLPFIO.js → chunk-QK6LUI5Q.js} +2 -2
  49. package/dist/mcp-chunks/{chunk-XTL4MHFH.js → chunk-QONTHFPO.js} +11 -7
  50. package/dist/mcp-chunks/{chunk-YTKRAHO6.js → chunk-RDOD354S.js} +4 -4
  51. package/dist/mcp-chunks/{chunk-2MEHGB7D.js → chunk-RXSZ2W6Y.js} +1 -1
  52. package/dist/mcp-chunks/{chunk-UHOKCTZT.js → chunk-RYAUNXFA.js} +1 -1
  53. package/dist/mcp-chunks/{chunk-GIF7LOYU.js → chunk-SCD2NAX5.js} +2 -2
  54. package/dist/mcp-chunks/{chunk-F3LL4EBL.js → chunk-SHZVDY6Z.js} +1 -1
  55. package/dist/mcp-chunks/{chunk-CNDY7WB4.js → chunk-TAVMVGD5.js} +2 -2
  56. package/dist/mcp-chunks/{chunk-JAKI24KR.js → chunk-U23EY5DN.js} +1 -1
  57. package/dist/mcp-chunks/{chunk-SB2UUURE.js → chunk-UAIJZBGL.js} +10 -10
  58. package/dist/mcp-chunks/{chunk-PKOJCYNA.js → chunk-UDG3RHKX.js} +2 -2
  59. package/dist/mcp-chunks/{chunk-CA5WFJZA.js → chunk-VC6SKXTI.js} +1 -1
  60. package/dist/mcp-chunks/chunk-VJ2TSA5R.js +818 -0
  61. package/dist/mcp-chunks/{chunk-FWP4RACK.js → chunk-VREKED5H.js} +2 -2
  62. package/dist/mcp-chunks/{chunk-2FSDGCHW.js → chunk-WKUCIR2F.js} +374 -527
  63. package/dist/mcp-chunks/chunk-XRRT3SZM.js +1931 -0
  64. package/dist/mcp-chunks/{chunk-GSZOK5TS.js → chunk-YDJ7E2PH.js} +3 -3
  65. package/dist/mcp-chunks/{chunk-LICH4Q7A.js → chunk-ZI44YPFF.js} +4 -4
  66. package/dist/mcp-chunks/{chunk-DEUU7WSN.js → chunk-ZNKNF2BV.js} +2 -2
  67. package/dist/mcp-chunks/{chunk-DXPHJFSA.js → chunk-ZSKQI4TS.js} +4 -4
  68. package/dist/mcp-chunks/{cli-E4P6SZLQ.js → cli-Z7KV4PCE.js} +70 -69
  69. package/dist/mcp-chunks/client-B3FMQNGF.js +21 -0
  70. package/dist/mcp-chunks/{config-command-MWF3RHPQ.js → config-command-XXCDOB3M.js} +27 -27
  71. package/dist/mcp-chunks/daemon-command-BAREANTC.js +35 -0
  72. package/dist/mcp-chunks/{dist-ZIPUENTM.js → dist-V4UB7RTR.js} +547 -402
  73. package/dist/mcp-chunks/{emit-ts-command-GOVJJ64A.js → emit-ts-command-FEHTMXXB.js} +16 -16
  74. package/dist/mcp-chunks/{generate-cli-runner-L5OQIMEY.js → generate-cli-runner-OA6XL77R.js} +49 -42
  75. package/dist/mcp-chunks/{inspect-cli-command-7OMMREPE.js → inspect-cli-command-UQKKE5VO.js} +9 -9
  76. package/dist/mcp-chunks/{launch-BWXPLPB7.js → launch-KMPDJOUH.js} +1 -1
  77. package/dist/mcp-chunks/{lifecycle-B5UC65PT.js → lifecycle-R3IP22MJ.js} +1 -1
  78. package/dist/mcp-chunks/{list-command-ZO4HVFQK.js → list-command-7ENYKBF6.js} +31 -31
  79. package/dist/mcp-chunks/{output-utils-M3TJ2N4M.js → output-utils-N75TOWBX.js} +3 -3
  80. package/dist/mcp-chunks/{prompt-CH6TK0bC-C7OTKGRD.js → prompt-CH6TK0bC-NSBYYJZH.js} +1 -1
  81. package/dist/mcp-chunks/{record-command-VD3HUQIC.js → record-command-XHPCL7IG.js} +5 -5
  82. package/dist/mcp-chunks/{replay-command-AX6IN7YD.js → replay-command-CB56L3ZA.js} +6 -6
  83. package/dist/mcp-chunks/{resource-command-JEZ2DW2G.js → resource-command-STEBHVT7.js} +9 -9
  84. package/dist/mcp-chunks/{result-utils-3YHYGS45.js → result-utils-UONY2KNY.js} +3 -3
  85. package/dist/mcp-chunks/runtime-Z45IVD24.js +39 -0
  86. package/dist/mcp-chunks/{runtime-wrapper-UREU7GC3.js → runtime-wrapper-SYYAQVO6.js} +6 -6
  87. package/dist/mcp-chunks/{serve-command-M47YZ6JN.js → serve-command-VYSFRZFE.js} +35 -27
  88. package/dist/mcp-chunks/{timeouts-THZRYP4B.js → timeouts-T3JP3MUF.js} +5 -3
  89. package/dist/mcp-chunks/{vault-command-53P7MLCB.js → vault-command-AJ3X7GDI.js} +58 -12
  90. package/dist/mcp-chunks/{webapi-PHEQZQKH.js → webapi-BLTNWSB2.js} +68 -60
  91. package/dist/mcp-daemon.js +30 -28
  92. package/dist/mcp-run-worker.js +30 -28
  93. package/dist/mcp.d.ts.map +1 -1
  94. package/dist/mcp.js +2 -1
  95. package/dist/mcp.js.map +1 -1
  96. package/dist/pi-extension.d.ts +3 -0
  97. package/dist/pi-extension.d.ts.map +1 -1
  98. package/dist/pi-extension.js +27 -0
  99. package/dist/pi-extension.js.map +1 -1
  100. package/dist/run-controller.d.ts +3 -1
  101. package/dist/run-controller.d.ts.map +1 -1
  102. package/dist/run-controller.js +10 -0
  103. package/dist/run-controller.js.map +1 -1
  104. package/dist/session.d.ts +3 -1
  105. package/dist/session.d.ts.map +1 -1
  106. package/dist/session.js +4 -1
  107. package/dist/session.js.map +1 -1
  108. package/docs/host-api.md +12 -0
  109. package/docs/pi-extension.md +10 -0
  110. package/package.json +11 -11
  111. package/vendor/introspection-recipe-check/win32-x64/introspection-recipe-check.exe +0 -0
  112. package/dist/mcp-chunks/call-arguments-TX3F2TEE.js +0 -15
  113. package/dist/mcp-chunks/chunk-SRZZQ6TL.js +0 -266
  114. package/dist/mcp-chunks/client-2EJC4PLL.js +0 -18
  115. package/dist/mcp-chunks/daemon-command-6CJ26MKI.js +0 -33
  116. package/dist/mcp-chunks/runtime-HSYVOME7.js +0 -37
@@ -1,12 +1,12 @@
1
1
  import { createRequire as __createRequire } from "node:module"; const require = __createRequire(import.meta.url);
2
2
  import {
3
3
  mcporterConfigCandidates
4
- } from "./chunk-FWP4RACK.js";
4
+ } from "./chunk-VREKED5H.js";
5
5
  import {
6
6
  expandHome
7
- } from "./chunk-HAO6PL7Z.js";
7
+ } from "./chunk-DIIFWDZ7.js";
8
8
 
9
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/config/path-discovery.js
9
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/config/path-discovery.js
10
10
  import fsSync from "node:fs";
11
11
  import fs from "node:fs/promises";
12
12
  import path from "node:path";
@@ -4,12 +4,12 @@ import {
4
4
  extraDimText,
5
5
  redText,
6
6
  yellowText
7
- } from "./chunk-XUF6KARU.js";
7
+ } from "./chunk-IUFDFNNP.js";
8
8
  import {
9
9
  analyzeConnectionError
10
- } from "./chunk-DEUU7WSN.js";
10
+ } from "./chunk-ZNKNF2BV.js";
11
11
 
12
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/cli/path-utils.js
12
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/cli/path-utils.js
13
13
  import os from "node:os";
14
14
  import path from "node:path";
15
15
  function formatPathForDisplay(filePath) {
@@ -19,7 +19,7 @@ function formatPathForDisplay(filePath) {
19
19
  return displayPath;
20
20
  }
21
21
 
22
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/cli/list-format.js
22
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/cli/list-format.js
23
23
  function renderServerListRow(result, timeoutMs, options = {}) {
24
24
  const description = result.server.description ? dimText(` \u2014 ${result.server.description}`) : "";
25
25
  const durationLabel = dimText(`${(result.durationMs / 1e3).toFixed(1)}s`);
@@ -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.0/node_modules/mcporter/dist/cli/generate/tools.js
3
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/cli/generate/tools.js
4
4
  function resolveSchemaType(value) {
5
5
  if (value === "integer") {
6
6
  return "number";
@@ -127,7 +127,8 @@ function getDescriptorDefault(descriptor) {
127
127
  function buildPlaceholder(property, type, enumValues, formatSlug) {
128
128
  const normalized = property.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`).replace(/_/g, "-");
129
129
  if (enumValues && enumValues.length > 0) {
130
- return `<${normalized}:${enumValues.join("|")}>`;
130
+ const suffix = type === "array" ? ",..." : "";
131
+ return `<${normalized}:${enumValues.join("|")}${suffix}>`;
131
132
  }
132
133
  switch (type) {
133
134
  case "number":
@@ -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.0/node_modules/mcporter/dist/logging.js
3
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/logging.js
4
4
  var LOG_LEVEL_ORDER = {
5
5
  debug: 10,
6
6
  info: 20,
@@ -1,21 +1,21 @@
1
1
  import { createRequire as __createRequire } from "node:module"; const require = __createRequire(import.meta.url);
2
2
  import {
3
3
  writeTextFileAtomic
4
- } from "./chunk-7A63PAGP.js";
4
+ } from "./chunk-ETYYCEQF.js";
5
5
  import {
6
6
  homeConfigCandidates,
7
7
  listConfigLayerPaths,
8
8
  pathExists,
9
9
  pathExistsAsync,
10
10
  resolveConfigPath
11
- } from "./chunk-HTZ2URXW.js";
11
+ } from "./chunk-2CTVPSHF.js";
12
12
  import {
13
13
  expandHome,
14
14
  resolveEnvPlaceholders
15
- } from "./chunk-HAO6PL7Z.js";
15
+ } from "./chunk-DIIFWDZ7.js";
16
16
  import {
17
17
  resolveLifecycle
18
- } from "./chunk-6D6KPSXN.js";
18
+ } from "./chunk-AJPFOQLF.js";
19
19
  import {
20
20
  external_exports
21
21
  } from "./chunk-LWVFSQYX.js";
@@ -2020,14 +2020,14 @@ var require_toml = __commonJS({
2020
2020
  }
2021
2021
  });
2022
2022
 
2023
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/config.js
2023
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/config.js
2024
2024
  import path6 from "node:path";
2025
2025
 
2026
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/config/read-config.js
2026
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/config/read-config.js
2027
2027
  import fs2 from "node:fs/promises";
2028
2028
  import path from "node:path";
2029
2029
 
2030
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/config-schema.js
2030
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/config-schema.js
2031
2031
  var ImportKindSchema = external_exports.enum(["cursor", "claude-code", "claude-desktop", "codex", "windsurf", "opencode", "vscode"]).describe("Supported editor/client configurations to import MCP servers from");
2032
2032
  var DEFAULT_IMPORTS = [
2033
2033
  "cursor",
@@ -2054,6 +2054,7 @@ var RawLoggingSchema = external_exports.object({
2054
2054
  }).optional().describe("Logging configuration for the server");
2055
2055
  var RawHttpFetchSchema = external_exports.enum(["default", "node-http1"]).describe("HTTP fetch implementation for Streamable HTTP/SSE requests");
2056
2056
  var ProtocolVersionSchema = external_exports.enum(["auto", "legacy", "2026-07-28"]).describe("MCP protocol negotiation mode; defaults to auto");
2057
+ var ChromeDevtoolsRelayPolicySchema = external_exports.enum(["off", "prefer", "require"]).describe("OpenClaw Chrome extension relay routing policy; defaults to prefer");
2057
2058
  var RawRefreshSchema = external_exports.object({
2058
2059
  tokenEndpoint: external_exports.string().optional().describe("OAuth token endpoint used to refresh access tokens"),
2059
2060
  token_endpoint: external_exports.string().optional().describe("OAuth token endpoint used to refresh access tokens"),
@@ -2088,6 +2089,8 @@ var RawEntrySchema = external_exports.object({
2088
2089
  client_name: external_exports.string().optional().describe("Client identifier for server telemetry (snake_case)"),
2089
2090
  protocolVersion: ProtocolVersionSchema.optional().describe("MCP protocol negotiation mode (camelCase)"),
2090
2091
  protocol_version: ProtocolVersionSchema.optional().describe("MCP protocol negotiation mode (snake_case)"),
2092
+ chromeDevtoolsRelay: ChromeDevtoolsRelayPolicySchema.optional().describe("OpenClaw Chrome extension relay policy for chrome-devtools-mcp (camelCase)"),
2093
+ chrome_devtools_relay: ChromeDevtoolsRelayPolicySchema.optional().describe("OpenClaw Chrome extension relay policy for chrome-devtools-mcp (snake_case)"),
2091
2094
  oauthClientId: external_exports.string().optional().describe("Pre-registered OAuth client id (camelCase)"),
2092
2095
  oauth_client_id: external_exports.string().optional().describe("Pre-registered OAuth client id (snake_case)"),
2093
2096
  oauthClientSecret: external_exports.string().optional().describe("Pre-registered OAuth client secret (camelCase)"),
@@ -2139,7 +2142,7 @@ var RawConfigSchema = external_exports.object({
2139
2142
  imports: external_exports.array(ImportKindSchema).optional().describe("Editor configurations to import servers from. Omit to use defaults, or set to [] to disable imports")
2140
2143
  }).describe("mcporter configuration file schema");
2141
2144
 
2142
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/config/imports/shared.js
2145
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/config/imports/shared.js
2143
2146
  import fs from "node:fs/promises";
2144
2147
 
2145
2148
  // node_modules/.pnpm/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/impl/scanner.js
@@ -2643,6 +2646,64 @@ function parse(text, errors = [], options = ParseOptions.DEFAULT) {
2643
2646
  visit(text, visitor, options);
2644
2647
  return currentParent[0];
2645
2648
  }
2649
+ function parseTree(text, errors = [], options = ParseOptions.DEFAULT) {
2650
+ let currentParent = { type: "array", offset: -1, length: -1, children: [], parent: void 0 };
2651
+ function ensurePropertyComplete(endOffset) {
2652
+ if (currentParent.type === "property") {
2653
+ currentParent.length = endOffset - currentParent.offset;
2654
+ currentParent = currentParent.parent;
2655
+ }
2656
+ }
2657
+ function onValue(valueNode) {
2658
+ currentParent.children.push(valueNode);
2659
+ return valueNode;
2660
+ }
2661
+ const visitor = {
2662
+ onObjectBegin: (offset) => {
2663
+ currentParent = onValue({ type: "object", offset, length: -1, parent: currentParent, children: [] });
2664
+ },
2665
+ onObjectProperty: (name, offset, length) => {
2666
+ currentParent = onValue({ type: "property", offset, length: -1, parent: currentParent, children: [] });
2667
+ currentParent.children.push({ type: "string", value: name, offset, length, parent: currentParent });
2668
+ },
2669
+ onObjectEnd: (offset, length) => {
2670
+ ensurePropertyComplete(offset + length);
2671
+ currentParent.length = offset + length - currentParent.offset;
2672
+ currentParent = currentParent.parent;
2673
+ ensurePropertyComplete(offset + length);
2674
+ },
2675
+ onArrayBegin: (offset, length) => {
2676
+ currentParent = onValue({ type: "array", offset, length: -1, parent: currentParent, children: [] });
2677
+ },
2678
+ onArrayEnd: (offset, length) => {
2679
+ currentParent.length = offset + length - currentParent.offset;
2680
+ currentParent = currentParent.parent;
2681
+ ensurePropertyComplete(offset + length);
2682
+ },
2683
+ onLiteralValue: (value, offset, length) => {
2684
+ onValue({ type: getNodeType(value), offset, length, parent: currentParent, value });
2685
+ ensurePropertyComplete(offset + length);
2686
+ },
2687
+ onSeparator: (sep, offset, length) => {
2688
+ if (currentParent.type === "property") {
2689
+ if (sep === ":") {
2690
+ currentParent.colonOffset = offset;
2691
+ } else if (sep === ",") {
2692
+ ensurePropertyComplete(offset);
2693
+ }
2694
+ }
2695
+ },
2696
+ onError: (error, offset, length) => {
2697
+ errors.push({ error, offset, length });
2698
+ }
2699
+ };
2700
+ visit(text, visitor, options);
2701
+ const result = currentParent.children[0];
2702
+ if (result) {
2703
+ delete result.parent;
2704
+ }
2705
+ return result;
2706
+ }
2646
2707
  function visit(text, visitor, options = ParseOptions.DEFAULT) {
2647
2708
  const _scanner = createScanner(text, false);
2648
2709
  const _jsonPath = [];
@@ -2948,6 +3009,26 @@ function visit(text, visitor, options = ParseOptions.DEFAULT) {
2948
3009
  }
2949
3010
  return true;
2950
3011
  }
3012
+ function getNodeType(value) {
3013
+ switch (typeof value) {
3014
+ case "boolean":
3015
+ return "boolean";
3016
+ case "number":
3017
+ return "number";
3018
+ case "string":
3019
+ return "string";
3020
+ case "object": {
3021
+ if (!value) {
3022
+ return "null";
3023
+ } else if (Array.isArray(value)) {
3024
+ return "array";
3025
+ }
3026
+ return "object";
3027
+ }
3028
+ default:
3029
+ return "null";
3030
+ }
3031
+ }
2951
3032
 
2952
3033
  // node_modules/.pnpm/jsonc-parser@3.3.1/node_modules/jsonc-parser/lib/esm/main.js
2953
3034
  var ScanError;
@@ -2981,6 +3062,7 @@ var SyntaxKind;
2981
3062
  SyntaxKind2[SyntaxKind2["EOF"] = 17] = "EOF";
2982
3063
  })(SyntaxKind || (SyntaxKind = {}));
2983
3064
  var parse2 = parse;
3065
+ var parseTree2 = parseTree;
2984
3066
  var ParseErrorCode;
2985
3067
  (function(ParseErrorCode2) {
2986
3068
  ParseErrorCode2[ParseErrorCode2["InvalidSymbol"] = 1] = "InvalidSymbol";
@@ -3038,7 +3120,7 @@ function printParseErrorCode(code) {
3038
3120
  return "<unknown ParseErrorCode>";
3039
3121
  }
3040
3122
 
3041
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/config/imports/shared.js
3123
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/config/imports/shared.js
3042
3124
  async function fileExists(filePath) {
3043
3125
  try {
3044
3126
  await fs.access(filePath);
@@ -3061,7 +3143,7 @@ function isRecord(value) {
3061
3143
  return Boolean(value && typeof value === "object" && !Array.isArray(value));
3062
3144
  }
3063
3145
 
3064
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/config/read-config.js
3146
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/config/read-config.js
3065
3147
  async function loadConfigLayers(options, rootDir) {
3066
3148
  const explicitPath = options.configPath ?? process.env.MCPORTER_CONFIG;
3067
3149
  if (explicitPath) {
@@ -3128,12 +3210,12 @@ function includesErrnoMessage(error, code) {
3128
3210
  return typeof message === "string" && message.includes(code);
3129
3211
  }
3130
3212
 
3131
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/config/imports/external.js
3213
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/config/imports/external.js
3132
3214
  var import_toml = __toESM(require_toml(), 1);
3133
3215
  import fs3 from "node:fs/promises";
3134
3216
  import path3 from "node:path";
3135
3217
 
3136
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/config/imports/paths-utils.js
3218
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/config/imports/paths-utils.js
3137
3219
  import os from "node:os";
3138
3220
  import path2 from "node:path";
3139
3221
  function normalizeProjectPath(input) {
@@ -3161,7 +3243,7 @@ function pathsEqual(a, b) {
3161
3243
  return a === b;
3162
3244
  }
3163
3245
 
3164
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/config/imports/external.js
3246
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/config/imports/external.js
3165
3247
  async function readExternalEntries(filePath, options = {}) {
3166
3248
  if (!await fileExists(filePath)) {
3167
3249
  return null;
@@ -3437,7 +3519,7 @@ function shouldIgnoreParseError(error) {
3437
3519
  return "fromTOML" in error;
3438
3520
  }
3439
3521
 
3440
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/config/imports/paths.js
3522
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/config/imports/paths.js
3441
3523
  import os2 from "node:os";
3442
3524
  import path4 from "node:path";
3443
3525
  function pathsForImport(kind, rootDir) {
@@ -3571,7 +3653,7 @@ function dedupePaths(paths) {
3571
3653
  return result;
3572
3654
  }
3573
3655
 
3574
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/config-normalize.js
3656
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/config-normalize.js
3575
3657
  import fs4 from "node:fs";
3576
3658
  import path5 from "node:path";
3577
3659
  function normalizeServerEntry(name, raw, baseDir, source, sources) {
@@ -3583,6 +3665,7 @@ function normalizeServerEntry(name, raw, baseDir, source, sources) {
3583
3665
  const tokenCacheDir = normalizePath(raw.tokenCacheDir ?? raw.token_cache_dir);
3584
3666
  const clientName = raw.clientName ?? raw.client_name;
3585
3667
  const protocolVersion = raw.protocolVersion ?? raw.protocol_version;
3668
+ const chromeDevtoolsRelay = raw.chromeDevtoolsRelay ?? raw.chrome_devtools_relay;
3586
3669
  const oauthClientId = raw.oauthClientId ?? raw.oauth_client_id ?? void 0;
3587
3670
  const oauthClientSecret = raw.oauthClientSecret ?? raw.oauth_client_secret ?? void 0;
3588
3671
  const oauthClientSecretEnv = raw.oauthClientSecretEnv ?? raw.oauth_client_secret_env ?? void 0;
@@ -3628,6 +3711,7 @@ function normalizeServerEntry(name, raw, baseDir, source, sources) {
3628
3711
  tokenCacheDir,
3629
3712
  clientName,
3630
3713
  protocolVersion,
3714
+ chromeDevtoolsRelay,
3631
3715
  oauthClientId,
3632
3716
  oauthClientSecret,
3633
3717
  oauthClientSecretEnv,
@@ -3855,7 +3939,7 @@ function normalizeLogging(raw) {
3855
3939
  return void 0;
3856
3940
  }
3857
3941
 
3858
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/config.js
3942
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/config.js
3859
3943
  async function buildServerDefinitions(layers, rootDir) {
3860
3944
  const merged = /* @__PURE__ */ new Map();
3861
3945
  for (const layer of layers) {
@@ -3958,6 +4042,7 @@ function resolveConfigPath2(configPath, rootDir) {
3958
4042
  }
3959
4043
 
3960
4044
  export {
4045
+ parseTree2 as parseTree,
3961
4046
  readExternalEntries,
3962
4047
  pathsForImport,
3963
4048
  __configInternals,
@@ -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.0/node_modules/mcporter/dist/cli/record-replay-env.js
3
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/cli/record-replay-env.js
4
4
  var KEEP_ALIVE_DISABLED_FOR_MODE = "*";
5
5
  function buildRecordCommandEnv(sessionName, server) {
6
6
  return buildModeEnv({
@@ -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.0/node_modules/mcporter/dist/lifecycle.js
3
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/lifecycle.js
4
4
  var DEFAULT_KEEP_ALIVE = /* @__PURE__ */ new Set(["chrome-devtools", "mobile-mcp", "playwright", "cloudbase"]);
5
5
  var includeOverride = parseList(process.env.MCPORTER_KEEPALIVE);
6
6
  var excludeOverride = parseList(process.env.MCPORTER_DISABLE_KEEPALIVE ?? process.env.MCPORTER_NO_KEEPALIVE);
@@ -3,16 +3,16 @@ import {
3
3
  readJsonFile,
4
4
  withFileLock,
5
5
  writeJsonFile
6
- } from "./chunk-7A63PAGP.js";
6
+ } from "./chunk-ETYYCEQF.js";
7
7
  import {
8
8
  mcporterDir
9
- } from "./chunk-FWP4RACK.js";
9
+ } from "./chunk-VREKED5H.js";
10
10
 
11
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/oauth-vault.js
11
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/oauth-vault.js
12
12
  import crypto from "node:crypto";
13
13
  import path from "node:path";
14
14
 
15
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/oauth-credential-validation.js
15
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/oauth-credential-validation.js
16
16
  function isRecord(value) {
17
17
  return Boolean(value && typeof value === "object" && !Array.isArray(value));
18
18
  }
@@ -33,7 +33,7 @@ function isStoredOAuthClientInformation(value) {
33
33
  return isOptionalString(value, "issuer");
34
34
  }
35
35
 
36
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/oauth-token-generation.js
36
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/oauth-token-generation.js
37
37
  import { randomUUID } from "node:crypto";
38
38
  import { isDeepStrictEqual } from "node:util";
39
39
  var TOKEN_GENERATION_FIELD = "__mcporter_generation";
@@ -113,7 +113,7 @@ function sameOAuthClientValue(left, right) {
113
113
  return isDeepStrictEqual(withoutClientGeneration(left), withoutClientGeneration(right));
114
114
  }
115
115
 
116
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/oauth-vault.js
116
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/oauth-vault.js
117
117
  function getOAuthVaultPath() {
118
118
  return path.join(mcporterDir("data"), "credentials.json");
119
119
  }
@@ -187,6 +187,14 @@ function stringRecord(value) {
187
187
  }
188
188
  return Object.fromEntries(Object.entries(value).filter((entry) => typeof entry[1] === "string"));
189
189
  }
190
+ async function vaultCredentialKeys(definition) {
191
+ const key = vaultKeyForDefinition(definition);
192
+ if (definition.command.kind !== "http") {
193
+ return [key];
194
+ }
195
+ const vault = await readVault();
196
+ return [.../* @__PURE__ */ new Set([key, ...legacyOAuthRenameKeys(vault, definition, key)])];
197
+ }
190
198
  async function loadVaultEntryForRecovery(definition) {
191
199
  const vault = await readVault();
192
200
  const key = vaultKeyForDefinition(definition);
@@ -415,6 +423,7 @@ export {
415
423
  sameOAuthClientValue,
416
424
  getOAuthVaultPath,
417
425
  reconcileVaultServerUrl,
426
+ vaultCredentialKeys,
418
427
  loadVaultEntryForRecovery,
419
428
  saveVaultEntry,
420
429
  clearVaultTokensIfMatching,
@@ -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.0/node_modules/mcporter/dist/env.js
3
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/env.js
4
4
  import os from "node:os";
5
5
  import path from "node:path";
6
6
  var ENV_DEFAULT_PATTERN = /^\$\{([A-Za-z_][A-Za-z0-9_]*)(?::-|:|-)?([^}]*)\}$/;
@@ -19,7 +19,7 @@ function expandHome(input) {
19
19
  }
20
20
  return input;
21
21
  }
22
- function resolveEnvValue(raw) {
22
+ function resolveEnvValue(raw, env = process.env) {
23
23
  if (typeof raw !== "string") {
24
24
  return String(raw);
25
25
  }
@@ -30,21 +30,21 @@ function resolveEnvValue(raw) {
30
30
  if (!envName) {
31
31
  return raw;
32
32
  }
33
- const existing = process.env[envName];
33
+ const existing = env[envName];
34
34
  if (existing && existing !== "") {
35
35
  return existing;
36
36
  }
37
37
  return defaultValue;
38
38
  }
39
39
  if (raw.startsWith("$")) {
40
- return resolveEnvPlaceholders(raw);
40
+ return resolveEnvPlaceholders(raw, env);
41
41
  }
42
42
  return raw;
43
43
  }
44
- function resolveEnvPlaceholders(value) {
44
+ function resolveEnvPlaceholders(value, env = process.env) {
45
45
  if (value.startsWith(ENV_DIRECT_PREFIX)) {
46
46
  const envName = value.slice(ENV_DIRECT_PREFIX.length);
47
- const envValue = process.env[envName];
47
+ const envValue = env[envName];
48
48
  if (envValue === void 0) {
49
49
  throw new Error(`Environment variable '${envName}' is required for MCP header substitution.`);
50
50
  }
@@ -52,7 +52,7 @@ function resolveEnvPlaceholders(value) {
52
52
  }
53
53
  const missing = /* @__PURE__ */ new Set();
54
54
  const replaced = value.replace(ENV_INTERPOLATION_PATTERN, (placeholder, envName, fallback) => {
55
- const envValue = process.env[envName];
55
+ const envValue = env[envName];
56
56
  if (envValue !== void 0 && envValue !== "") {
57
57
  return envValue;
58
58
  }
@@ -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.0/node_modules/mcporter/dist/cli/ephemeral-flags.js
3
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/cli/ephemeral-flags.js
4
4
  function extractEphemeralServerFlags(args, options = {}) {
5
5
  let spec;
6
6
  const ensureSpec = () => {
@@ -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.0/node_modules/mcporter/dist/process-utils.js
3
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/process-utils.js
4
4
  function isProcessRunning(pid) {
5
5
  if (!Number.isInteger(pid) || pid <= 0) {
6
6
  return false;
@@ -13,7 +13,7 @@ function isProcessRunning(pid) {
13
13
  }
14
14
  }
15
15
 
16
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/fs-json.js
16
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/fs-json.js
17
17
  import crypto from "node:crypto";
18
18
  import { constants } from "node:fs";
19
19
  import fs from "node:fs/promises";
@@ -24,6 +24,17 @@ var MALFORMED_LOCK_STALE_MS = 1e3;
24
24
  var MAX_SYMLINK_DEPTH = 40;
25
25
  var DEFAULT_ATOMIC_FILE_MODE = 384;
26
26
  var localLockTails = /* @__PURE__ */ new Map();
27
+ var FileLockTimeoutError = class extends Error {
28
+ lockPath;
29
+ constructor(lockPath, options) {
30
+ super(`Timed out waiting for file lock ${lockPath}`, options);
31
+ this.name = "FileLockTimeoutError";
32
+ this.lockPath = lockPath;
33
+ }
34
+ };
35
+ function isFileLockTimeoutError(error) {
36
+ return error instanceof FileLockTimeoutError;
37
+ }
27
38
  async function readJsonFile(filePath) {
28
39
  try {
29
40
  const content = await fs.readFile(filePath, "utf8");
@@ -97,7 +108,7 @@ ${(/* @__PURE__ */ new Date()).toISOString()}
97
108
  continue;
98
109
  }
99
110
  if (Date.now() - startedAt > timeoutMs) {
100
- throw new Error(`Timed out waiting for file lock ${lockPath}`, { cause: error });
111
+ throw new FileLockTimeoutError(lockPath, { cause: error });
101
112
  }
102
113
  await sleep(LOCK_POLL_MS);
103
114
  }
@@ -146,7 +157,7 @@ async function waitForLocalLock(previous, timeoutMs, key) {
146
157
  await Promise.race([
147
158
  previous,
148
159
  new Promise((_, reject) => {
149
- timer = setTimeout(() => reject(new Error(`Timed out waiting for file lock ${key}.lock`)), Math.max(0, timeoutMs));
160
+ timer = setTimeout(() => reject(new FileLockTimeoutError(`${key}.lock`)), Math.max(0, timeoutMs));
150
161
  })
151
162
  ]);
152
163
  } finally {
@@ -170,6 +181,9 @@ async function resolveAtomicWriteTarget(filePath) {
170
181
  throw error;
171
182
  }
172
183
  }
184
+ async function canonicalizeFilePath(filePath) {
185
+ return await resolvePathFollowingSymlinks(path.resolve(filePath));
186
+ }
173
187
  async function resolvePathFollowingSymlinks(filePath) {
174
188
  let currentPath = await canonicalizeParentDirectory(filePath);
175
189
  for (let depth = 0; depth < MAX_SYMLINK_DEPTH; depth += 1) {
@@ -271,8 +285,10 @@ async function isMalformedLockStale(lockPath) {
271
285
 
272
286
  export {
273
287
  isProcessRunning,
288
+ isFileLockTimeoutError,
274
289
  readJsonFile,
275
290
  writeTextFileAtomic,
276
291
  writeJsonFile,
277
- withFileLock
292
+ withFileLock,
293
+ canonicalizeFilePath
278
294
  };
@@ -1,9 +1,9 @@
1
1
  import { createRequire as __createRequire } from "node:module"; const require = __createRequire(import.meta.url);
2
2
  import {
3
3
  legacyMcporterDir
4
- } from "./chunk-FWP4RACK.js";
4
+ } from "./chunk-VREKED5H.js";
5
5
 
6
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/runtime/record-transport.js
6
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/runtime/record-transport.js
7
7
  import fs from "node:fs/promises";
8
8
  import path from "node:path";
9
9
  var initializedRecordingPaths = /* @__PURE__ */ new Map();
@@ -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.0/node_modules/mcporter/dist/cli/errors.js
3
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/cli/errors.js
4
4
  var CliUsageError = class extends Error {
5
5
  constructor(message) {
6
6
  super(message);
@@ -1,18 +1,18 @@
1
1
  import { createRequire as __createRequire } from "node:module"; const require = __createRequire(import.meta.url);
2
2
  import {
3
3
  findServerByHttpUrl
4
- } from "./chunk-GIF7LOYU.js";
4
+ } from "./chunk-SCD2NAX5.js";
5
5
  import {
6
6
  persistEphemeralServer,
7
7
  resolveEphemeralServer,
8
8
  splitCommandLine
9
- } from "./chunk-WWO5WGH5.js";
9
+ } from "./chunk-NACLB5YH.js";
10
10
  import {
11
11
  looksLikeHttpUrl,
12
12
  normalizeHttpUrlCandidate
13
- } from "./chunk-UENXT3NE.js";
13
+ } from "./chunk-ILSK6AWI.js";
14
14
 
15
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/cli/adhoc-help.js
15
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/cli/adhoc-help.js
16
16
  var ADHOC_SERVER_HELP_ENTRIES = [
17
17
  { flag: "--http-url <url>", description: "Register an HTTP server for this run." },
18
18
  { flag: "--allow-http", description: "Permit plain http:// URLs with --http-url." },
@@ -30,7 +30,7 @@ function renderAdhocServerHelpLines(width = 23) {
30
30
  return ADHOC_SERVER_HELP_ENTRIES.map((entry) => ` ${entry.flag.padEnd(width)}${entry.description}`);
31
31
  }
32
32
 
33
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/cli/ephemeral-target.js
33
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/cli/ephemeral-target.js
34
34
  async function prepareEphemeralServerTarget(options) {
35
35
  let target = options.target;
36
36
  let spec = options.ephemeral ? { ...options.ephemeral } : void 0;
@@ -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.0/node_modules/mcporter/dist/cli/json-output.js
3
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/cli/json-output.js
4
4
  function buildConnectionIssueEnvelope(params) {
5
5
  return {
6
6
  server: params.server,
@@ -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.0/node_modules/mcporter/dist/cli/flag-utils.js
3
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/cli/flag-utils.js
4
4
  function extractFlags(args, keys) {
5
5
  const flags = {};
6
6
  let index = 0;