@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,25 +1,24 @@
1
1
  import { createRequire as __createRequire } from "node:module"; const require = __createRequire(import.meta.url);
2
2
  import {
3
3
  createKeepAliveRuntime
4
- } from "./chunk-XTL4MHFH.js";
4
+ } from "./chunk-QONTHFPO.js";
5
5
  import {
6
6
  createRuntime
7
- } from "./chunk-2FSDGCHW.js";
7
+ } from "./chunk-WKUCIR2F.js";
8
8
  import {
9
9
  createNonInteractiveElicitationResponder
10
- } from "./chunk-CA5WFJZA.js";
11
- import "./chunk-E6T37ED6.js";
12
- import "./chunk-SRZZQ6TL.js";
13
- import "./chunk-3IZQW4H4.js";
14
- import "./chunk-C2PQFLWS.js";
15
- import "./chunk-7DH57OKF.js";
16
- import "./chunk-2MEHGB7D.js";
10
+ } from "./chunk-VC6SKXTI.js";
11
+ import "./chunk-FNQV2ONG.js";
12
+ import "./chunk-VJ2TSA5R.js";
13
+ import "./chunk-MNAVFYYV.js";
14
+ import "./chunk-B4XFULJ6.js";
15
+ import "./chunk-MWD5PZ4G.js";
16
+ import "./chunk-RXSZ2W6Y.js";
17
17
  import {
18
18
  MCPORTER_VERSION
19
- } from "./chunk-SFREPU3D.js";
20
- import "./chunk-GFYTST6N.js";
21
- import "./chunk-ETWN4IIA.js";
22
- import "./chunk-DEUU7WSN.js";
19
+ } from "./chunk-NSZY5WLR.js";
20
+ import "./chunk-54UGGTOX.js";
21
+ import "./chunk-ZNKNF2BV.js";
23
22
  import {
24
23
  AnnotationsSchema,
25
24
  AudioContentSchema,
@@ -208,19 +207,22 @@ import {
208
207
  UnsubscribeRequestSchema,
209
208
  UntitledMultiSelectEnumSchemaSchema,
210
209
  UntitledSingleSelectEnumSchemaSchema
211
- } from "./chunk-YPJ5EHXR.js";
210
+ } from "./chunk-K56RW4HB.js";
212
211
  import {
213
212
  DaemonClient
214
- } from "./chunk-KSGYBW3F.js";
215
- import "./chunk-ZBFZ5UFE.js";
216
- import "./chunk-L4VKBFYI.js";
217
- import "./chunk-7A63PAGP.js";
218
- import "./chunk-HTZ2URXW.js";
219
- import "./chunk-FWP4RACK.js";
220
- import "./chunk-HAO6PL7Z.js";
213
+ } from "./chunk-GQHTGV5E.js";
214
+ import "./chunk-MDVNQ4HM.js";
215
+ import "./chunk-XRRT3SZM.js";
216
+ import "./chunk-JJG2OEHI.js";
217
+ import "./chunk-LYZRCACV.js";
218
+ import "./chunk-5HQYKAE7.js";
219
+ import "./chunk-ETYYCEQF.js";
220
+ import "./chunk-2CTVPSHF.js";
221
+ import "./chunk-VREKED5H.js";
222
+ import "./chunk-DIIFWDZ7.js";
221
223
  import {
222
224
  isKeepAliveServer
223
- } from "./chunk-6D6KPSXN.js";
225
+ } from "./chunk-AJPFOQLF.js";
224
226
  import {
225
227
  _enum,
226
228
  _null,
@@ -247,9 +249,10 @@ import {
247
249
  } from "./chunk-LWVFSQYX.js";
248
250
  import "./chunk-LRKZP7DJ.js";
249
251
 
250
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/serve.js
252
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/serve.js
251
253
  import http from "node:http";
252
254
  import { Readable } from "node:stream";
255
+ import { pipeline } from "node:stream/promises";
253
256
 
254
257
  // node_modules/.pnpm/@modelcontextprotocol+server@2.0.0/node_modules/@modelcontextprotocol/server/dist/chunk-Br0eD_fh.mjs
255
258
  var __create = Object.create;
@@ -15574,7 +15577,7 @@ function toError2(value) {
15574
15577
  return value instanceof Error ? value : new Error(String(value));
15575
15578
  }
15576
15579
 
15577
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/serve.js
15580
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/serve.js
15578
15581
  var TOOL_SEPARATOR = "__";
15579
15582
  var DEFAULT_OBJECT_SCHEMA = { type: "object" };
15580
15583
  var DEFAULT_SERVE_HTTP_HOST = "127.0.0.1";
@@ -15744,8 +15747,13 @@ async function handleNodeRequest(handler, request, response) {
15744
15747
  return;
15745
15748
  }
15746
15749
  const body = Readable.fromWeb(webResponse.body);
15747
- body.on("error", (error) => response.destroy(error));
15748
- body.pipe(response);
15750
+ await pipeHttpResponseBody(body, response);
15751
+ }
15752
+ async function pipeHttpResponseBody(body, response) {
15753
+ try {
15754
+ await pipeline(body, response);
15755
+ } catch {
15756
+ }
15749
15757
  }
15750
15758
  function toWebRequest(request) {
15751
15759
  const host = request.headers.host ?? DEFAULT_SERVE_HTTP_HOST;
@@ -15839,7 +15847,7 @@ function isSchemaRecord(schema) {
15839
15847
  return !!schema && typeof schema === "object" && !Array.isArray(schema);
15840
15848
  }
15841
15849
 
15842
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/cli/serve-command.js
15850
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/cli/serve-command.js
15843
15851
  async function handleServeCli(args, options) {
15844
15852
  const parsed = parseServeArgs(args);
15845
15853
  const elicitation = createNonInteractiveElicitationResponder({
@@ -1,17 +1,19 @@
1
1
  import { createRequire as __createRequire } from "node:module"; const require = __createRequire(import.meta.url);
2
2
  import {
3
3
  LIST_TIMEOUT_MS,
4
+ STDOUT_FLUSH_TIMEOUT_MS,
4
5
  consumeTimeoutFlag,
5
6
  parsePositiveInteger,
6
7
  parseTimeout,
7
8
  resolveCallTimeout,
8
9
  withTimeout
9
- } from "./chunk-QJACOI2W.js";
10
- import "./chunk-ETWN4IIA.js";
11
- import "./chunk-HAO6PL7Z.js";
10
+ } from "./chunk-NMF5S5DC.js";
11
+ import "./chunk-LYZRCACV.js";
12
+ import "./chunk-DIIFWDZ7.js";
12
13
  import "./chunk-LRKZP7DJ.js";
13
14
  export {
14
15
  LIST_TIMEOUT_MS,
16
+ STDOUT_FLUSH_TIMEOUT_MS,
15
17
  consumeTimeoutFlag,
16
18
  parsePositiveInteger,
17
19
  parseTimeout,
@@ -1,18 +1,18 @@
1
1
  import { createRequire as __createRequire } from "node:module"; const require = __createRequire(import.meta.url);
2
2
  import {
3
3
  CliUsageError
4
- } from "./chunk-2JHHONW4.js";
4
+ } from "./chunk-FW5QVG6V.js";
5
5
  import {
6
6
  clearVaultEntry,
7
7
  getOAuthVaultPath,
8
8
  saveVaultEntry
9
- } from "./chunk-C2PQFLWS.js";
10
- import "./chunk-7A63PAGP.js";
11
- import "./chunk-FWP4RACK.js";
12
- import "./chunk-HAO6PL7Z.js";
9
+ } from "./chunk-B4XFULJ6.js";
10
+ import "./chunk-ETYYCEQF.js";
11
+ import "./chunk-VREKED5H.js";
12
+ import "./chunk-DIIFWDZ7.js";
13
13
  import "./chunk-LRKZP7DJ.js";
14
14
 
15
- // node_modules/.pnpm/mcporter@0.13.0/node_modules/mcporter/dist/cli/vault-command.js
15
+ // node_modules/.pnpm/mcporter@0.13.6/node_modules/mcporter/dist/cli/vault-command.js
16
16
  import fs from "node:fs/promises";
17
17
  async function handleVault(runtime, args, options = {}) {
18
18
  const subcommand = args.shift();
@@ -36,7 +36,7 @@ async function handleVaultSet(runtime, args, options) {
36
36
  throw new CliUsageError(`Unknown vault set argument '${args[0]}'.`);
37
37
  }
38
38
  const definition = runtime.getDefinition(server);
39
- const payload = validateVaultPayload(JSON.parse(await readPayload(source, options)));
39
+ const payload = validateVaultPayload(parseVaultPayload(await readPayload(source, options), source));
40
40
  await saveVaultEntry(definition, {
41
41
  tokens: payload.tokens,
42
42
  ...payload.clientInfo ? { clientInfo: payload.clientInfo } : {}
@@ -92,6 +92,13 @@ async function readPayload(source, options) {
92
92
  process.stdin.on("error", reject);
93
93
  });
94
94
  }
95
+ function parseVaultPayload(raw, source) {
96
+ try {
97
+ return JSON.parse(raw);
98
+ } catch {
99
+ throw new CliUsageError(source.kind === "file" ? `Vault payload file '${source.path}' is not valid JSON.` : "Vault payload from stdin is not valid JSON.");
100
+ }
101
+ }
95
102
  function validateVaultPayload(value) {
96
103
  if (!value || typeof value !== "object") {
97
104
  throw new CliUsageError("Vault payload must be a JSON object.");
@@ -124,16 +131,50 @@ function validateOAuthTokens(tokens) {
124
131
  throw new CliUsageError(`Vault payload tokens.${key} must be a string.`);
125
132
  }
126
133
  }
127
- if (tokens.expires_in !== void 0 && (!Number.isFinite(tokens.expires_in) || typeof tokens.expires_in !== "number")) {
128
- throw new CliUsageError("Vault payload tokens.expires_in must be a finite number.");
134
+ for (const key of ["expires_in", "expires_at", "expiresAt"]) {
135
+ const value = tokens[key];
136
+ if (value !== void 0 && (typeof value !== "number" || !Number.isFinite(value))) {
137
+ throw new CliUsageError(`Vault payload tokens.${key} must be a finite number.`);
138
+ }
129
139
  }
130
140
  }
141
+ var OAUTH_CLIENT_STRING_FIELDS = [
142
+ "client_id",
143
+ "client_secret",
144
+ "token_endpoint_auth_method",
145
+ "application_type",
146
+ "client_name",
147
+ "client_uri",
148
+ "logo_uri",
149
+ "scope",
150
+ "tos_uri",
151
+ "policy_uri",
152
+ "jwks_uri",
153
+ "software_id",
154
+ "software_version",
155
+ "software_statement",
156
+ "issuer"
157
+ ];
158
+ var OAUTH_CLIENT_STRING_ARRAY_FIELDS = ["redirect_uris", "grant_types", "response_types", "contacts"];
159
+ var OAUTH_CLIENT_NUMBER_FIELDS = ["client_id_issued_at", "client_secret_expires_at"];
131
160
  function validateOAuthClientInfo(clientInfo) {
132
- for (const [key, value] of Object.entries(clientInfo)) {
133
- if (value !== void 0 && value !== null && typeof value !== "string") {
161
+ for (const key of OAUTH_CLIENT_STRING_FIELDS) {
162
+ if (clientInfo[key] !== void 0 && clientInfo[key] !== null && typeof clientInfo[key] !== "string") {
134
163
  throw new CliUsageError(`Vault payload clientInfo.${key} must be a string.`);
135
164
  }
136
165
  }
166
+ for (const key of OAUTH_CLIENT_STRING_ARRAY_FIELDS) {
167
+ const value = clientInfo[key];
168
+ if (value !== void 0 && value !== null && (!Array.isArray(value) || value.some((item) => typeof item !== "string"))) {
169
+ throw new CliUsageError(`Vault payload clientInfo.${key} must be an array of strings.`);
170
+ }
171
+ }
172
+ for (const key of OAUTH_CLIENT_NUMBER_FIELDS) {
173
+ const value = clientInfo[key];
174
+ if (value !== void 0 && value !== null && (typeof value !== "number" || !Number.isFinite(value))) {
175
+ throw new CliUsageError(`Vault payload clientInfo.${key} must be a finite number.`);
176
+ }
177
+ }
137
178
  }
138
179
  function printVaultHelp() {
139
180
  const lines = [
@@ -145,7 +186,12 @@ function printVaultHelp() {
145
186
  " vault clear <server> Remove the server entry from the OAuth vault.",
146
187
  "",
147
188
  "Payload:",
148
- ' { "tokens": { "access_token": "...", "token_type": "Bearer" }, "clientInfo": { "client_id": "..." } }'
189
+ ' { "tokens": { "access_token": "...", "token_type": "Bearer" }, "clientInfo": { "client_id": "..." } }',
190
+ "",
191
+ " clientInfo accepts a full dynamic client registration response, including the",
192
+ " redirect_uris, grant_types, response_types and contacts arrays, the",
193
+ " client_id_issued_at and client_secret_expires_at timestamps, and provider",
194
+ " metadata outside RFC 7591."
149
195
  ];
150
196
  console.error(lines.join("\n"));
151
197
  }