@introspection-ai/recipes 0.18.1 → 0.19.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 (146) hide show
  1. package/dist/inspect.d.ts +1 -0
  2. package/dist/inspect.d.ts.map +1 -1
  3. package/dist/inspect.js +3 -0
  4. package/dist/inspect.js.map +1 -1
  5. package/dist/mcp-chunks/{auth-command-ZLGYIEUY.js → auth-command-3K7V3VCW.js} +31 -35
  6. package/dist/mcp-chunks/call-arguments-TX3F2TEE.js +15 -0
  7. package/dist/mcp-chunks/{call-command-LKTKSYTH.js → call-command-OFPHPFM5.js} +36 -34
  8. package/dist/mcp-chunks/chunk-2FSDGCHW.js +3299 -0
  9. package/dist/mcp-chunks/{chunk-BV56DXPW.js → chunk-2JHHONW4.js} +1 -1
  10. package/dist/mcp-chunks/chunk-2MEHGB7D.js +63 -0
  11. package/dist/mcp-chunks/chunk-3IZQW4H4.js +929 -0
  12. package/dist/mcp-chunks/{chunk-MZ2NARG7.js → chunk-54EWGONA.js} +5 -5
  13. package/dist/mcp-chunks/{chunk-LQQEYD76.js → chunk-55JIHDU3.js} +1 -1
  14. package/dist/mcp-chunks/chunk-64EP2BVO.js +39 -0
  15. package/dist/mcp-chunks/{chunk-LS7PMWSR.js → chunk-6D6KPSXN.js} +1 -1
  16. package/dist/mcp-chunks/{chunk-2XL7MG7R.js → chunk-7A63PAGP.js} +15 -9
  17. package/dist/mcp-chunks/chunk-7DH57OKF.js +28 -0
  18. package/dist/mcp-chunks/{chunk-BTLAWHTA.js → chunk-7RDLPFIO.js} +2 -2
  19. package/dist/mcp-chunks/chunk-C2PQFLWS.js +422 -0
  20. package/dist/mcp-chunks/chunk-CA5WFJZA.js +197 -0
  21. package/dist/mcp-chunks/{chunk-LNH5LAJD.js → chunk-CNDY7WB4.js} +2 -2
  22. package/dist/mcp-chunks/{chunk-UKYNQGNE.js → chunk-DEUU7WSN.js} +34 -8
  23. package/dist/mcp-chunks/{chunk-LKIBAYKU.js → chunk-DXPHJFSA.js} +25 -35
  24. package/dist/mcp-chunks/{chunk-J6LYIZXN.js → chunk-E6RVTWJY.js} +1 -1
  25. package/dist/mcp-chunks/{chunk-7FHEBT5G.js → chunk-E6T37ED6.js} +18 -13
  26. package/dist/mcp-chunks/chunk-ETWN4IIA.js +57 -0
  27. package/dist/mcp-chunks/{chunk-YVZKMV5H.js → chunk-F3LL4EBL.js} +1 -1
  28. package/dist/mcp-chunks/chunk-FWP4RACK.js +42 -0
  29. package/dist/mcp-chunks/{chunk-6W5QFASN.js → chunk-GFYTST6N.js} +1 -1
  30. package/dist/mcp-chunks/{chunk-TEUKFFQL.js → chunk-GIF7LOYU.js} +2 -2
  31. package/dist/mcp-chunks/{chunk-QXJUA3ND.js → chunk-GSZOK5TS.js} +828 -7
  32. package/dist/mcp-chunks/chunk-H7F5RZXS.js +26 -0
  33. package/dist/mcp-chunks/{chunk-ECIVB7P4.js → chunk-HAO6PL7Z.js} +2 -37
  34. package/dist/mcp-chunks/{chunk-WQJZMCJN.js → chunk-HTZ2URXW.js} +5 -3
  35. package/dist/mcp-chunks/{chunk-BWHIA4PC.js → chunk-JAKI24KR.js} +1 -1
  36. package/dist/mcp-chunks/{chunk-PWYFKGKG.js → chunk-KSGYBW3F.js} +180 -89
  37. package/dist/mcp-chunks/{chunk-SJCCBNZ4.js → chunk-KSMY7PXI.js} +1 -1
  38. package/dist/mcp-chunks/{chunk-2U4BSDC4.js → chunk-L4VKBFYI.js} +48 -29
  39. package/dist/mcp-chunks/{chunk-LEZSACDE.js → chunk-LICH4Q7A.js} +4 -4
  40. package/dist/mcp-chunks/{chunk-PIIYJR44.js → chunk-LNSUME65.js} +29 -33
  41. package/dist/mcp-chunks/{chunk-D3MRAZ6H.js → chunk-LWVFSQYX.js} +13974 -15562
  42. package/dist/mcp-chunks/{chunk-7KA2VJVZ.js → chunk-NCXEJ35U.js} +10 -5
  43. package/dist/mcp-chunks/{chunk-5QOSCSQB.js → chunk-NZOIX6XW.js} +2 -2
  44. package/dist/mcp-chunks/{chunk-XANPGTLI.js → chunk-P3RN22HQ.js} +11 -4
  45. package/dist/mcp-chunks/{chunk-IABRYROW.js → chunk-PKOJCYNA.js} +3 -3
  46. package/dist/mcp-chunks/{chunk-BNV3TPE4.js → chunk-QJACOI2W.js} +5 -13
  47. package/dist/mcp-chunks/{chunk-UNKB4SBV.js → chunk-RBVYCKCD.js} +2 -2
  48. package/dist/mcp-chunks/{chunk-DHBE7UBH.js → chunk-SB2UUURE.js} +12 -42
  49. package/dist/mcp-chunks/{chunk-4SQKWYFF.js → chunk-SFREPU3D.js} +1 -1
  50. package/dist/mcp-chunks/{chunk-BZIQOWE6.js → chunk-SRZZQ6TL.js} +35 -36
  51. package/dist/mcp-chunks/{chunk-M3TPODXI.js → chunk-UENXT3NE.js} +1 -1
  52. package/dist/mcp-chunks/chunk-UHOKCTZT.js +37 -0
  53. package/dist/mcp-chunks/{chunk-E22DYOW5.js → chunk-WWO5WGH5.js} +5 -5
  54. package/dist/mcp-chunks/{chunk-6XCZGU3G.js → chunk-WXBPMFSN.js} +149 -192
  55. package/dist/mcp-chunks/{chunk-XQK2JSW4.js → chunk-XRGLP3Z2.js} +14 -2
  56. package/dist/mcp-chunks/{chunk-L7NTQVYN.js → chunk-XTL4MHFH.js} +28 -10
  57. package/dist/mcp-chunks/{chunk-N46NEFAF.js → chunk-XUF6KARU.js} +1 -1
  58. package/dist/mcp-chunks/{chunk-WD6BOD24.js → chunk-YCYSQA5V.js} +23 -4
  59. package/dist/mcp-chunks/chunk-YPJ5EHXR.js +17394 -0
  60. package/dist/mcp-chunks/{chunk-NRAJX5E4.js → chunk-YSPT6F7K.js} +3 -3
  61. package/dist/mcp-chunks/{chunk-7UDVSOOF.js → chunk-YTKRAHO6.js} +54 -46
  62. package/dist/mcp-chunks/chunk-ZBFZ5UFE.js +67 -0
  63. package/dist/mcp-chunks/{cli-UV4QJZZM.js → cli-E4P6SZLQ.js} +89 -76
  64. package/dist/mcp-chunks/client-2EJC4PLL.js +18 -0
  65. package/dist/mcp-chunks/{config-command-NLAGKID5.js → config-command-MWF3RHPQ.js} +38 -59
  66. package/dist/mcp-chunks/daemon-command-6CJ26MKI.js +33 -0
  67. package/dist/mcp-chunks/{dist-LK3SHAMX.js → dist-ZIPUENTM.js} +527 -469
  68. package/dist/mcp-chunks/{emit-ts-command-VBXVXO6V.js → emit-ts-command-GOVJJ64A.js} +16 -13
  69. package/dist/mcp-chunks/{generate-cli-runner-6CAZZA3P.js → generate-cli-runner-L5OQIMEY.js} +242 -247
  70. package/dist/mcp-chunks/{inspect-cli-command-3ZORTOR7.js → inspect-cli-command-7OMMREPE.js} +10 -9
  71. package/dist/mcp-chunks/{launch-YKRXHXJI.js → launch-BWXPLPB7.js} +1 -1
  72. package/dist/mcp-chunks/{lifecycle-XVKRHPH3.js → lifecycle-B5UC65PT.js} +1 -1
  73. package/dist/mcp-chunks/{list-command-2MEGGNFQ.js → list-command-ZO4HVFQK.js} +74 -43
  74. package/dist/mcp-chunks/{output-utils-NKESLAJ6.js → output-utils-M3TJ2N4M.js} +3 -3
  75. package/dist/mcp-chunks/{prompt-B1Yc1NPt-VGOTWJMN.js → prompt-CH6TK0bC-C7OTKGRD.js} +1 -3
  76. package/dist/mcp-chunks/{record-command-YXHTTTT5.js → record-command-VD3HUQIC.js} +5 -4
  77. package/dist/mcp-chunks/replay-command-AX6IN7YD.js +42 -0
  78. package/dist/mcp-chunks/{resource-command-OO4NYF5C.js → resource-command-JEZ2DW2G.js} +10 -10
  79. package/dist/mcp-chunks/{result-utils-MOHHLNM7.js → result-utils-3YHYGS45.js} +4 -4
  80. package/dist/mcp-chunks/runtime-HSYVOME7.js +37 -0
  81. package/dist/mcp-chunks/{runtime-wrapper-RPWDIDBF.js → runtime-wrapper-UREU7GC3.js} +7 -3
  82. package/dist/mcp-chunks/serve-command-M47YZ6JN.js +16018 -0
  83. package/dist/mcp-chunks/{timeouts-W2XWCCXR.js → timeouts-THZRYP4B.js} +3 -1
  84. package/dist/mcp-chunks/{vault-command-PIYIUEZL.js → vault-command-53P7MLCB.js} +7 -6
  85. package/dist/mcp-chunks/webapi-PHEQZQKH.js +3316 -0
  86. package/dist/mcp-client.js +11 -1
  87. package/dist/mcp-client.js.map +1 -1
  88. package/dist/mcp-daemon-client.d.ts.map +1 -1
  89. package/dist/mcp-daemon-client.js +3 -0
  90. package/dist/mcp-daemon-client.js.map +1 -1
  91. package/dist/mcp-daemon-protocol.d.ts +6 -0
  92. package/dist/mcp-daemon-protocol.d.ts.map +1 -1
  93. package/dist/mcp-daemon-protocol.js.map +1 -1
  94. package/dist/mcp-daemon.js +43 -22
  95. package/dist/mcp-daemon.js.map +1 -1
  96. package/dist/mcp-run-worker.js +29 -22
  97. package/dist/mcp-trace-context.d.ts +6 -0
  98. package/dist/mcp-trace-context.d.ts.map +1 -0
  99. package/dist/mcp-trace-context.js +31 -0
  100. package/dist/mcp-trace-context.js.map +1 -0
  101. package/dist/model-binding.d.ts.map +1 -1
  102. package/dist/model-binding.js +8 -4
  103. package/dist/model-binding.js.map +1 -1
  104. package/dist/pi-extension.d.ts.map +1 -1
  105. package/dist/pi-extension.js +15 -1
  106. package/dist/pi-extension.js.map +1 -1
  107. package/dist/recipe/resolve.d.ts +2 -0
  108. package/dist/recipe/resolve.d.ts.map +1 -1
  109. package/dist/recipe/resolve.js +2 -1
  110. package/dist/recipe/resolve.js.map +1 -1
  111. package/dist/recipe-agent.d.ts +5 -2
  112. package/dist/recipe-agent.d.ts.map +1 -1
  113. package/dist/recipe-agent.js +20 -4
  114. package/dist/recipe-agent.js.map +1 -1
  115. package/dist/recipe-model.d.ts +16 -6
  116. package/dist/recipe-model.d.ts.map +1 -1
  117. package/dist/recipe-model.js +178 -28
  118. package/dist/recipe-model.js.map +1 -1
  119. package/dist/recipe-session.d.ts +14 -0
  120. package/dist/recipe-session.d.ts.map +1 -0
  121. package/dist/recipe-session.js +181 -0
  122. package/dist/recipe-session.js.map +1 -0
  123. package/dist/session.d.ts.map +1 -1
  124. package/dist/session.js +23 -1
  125. package/dist/session.js.map +1 -1
  126. package/docs/agent-composition.md +52 -22
  127. package/docs/pi-extension.md +11 -3
  128. package/docs/recipe-format.md +47 -5
  129. package/package.json +6 -6
  130. package/vendor/introspection-recipe-check/darwin-arm64/introspection-recipe-check +0 -0
  131. package/vendor/introspection-recipe-check/darwin-x64/introspection-recipe-check +0 -0
  132. package/vendor/introspection-recipe-check/linux-arm64/introspection-recipe-check +0 -0
  133. package/vendor/introspection-recipe-check/linux-x64/introspection-recipe-check +0 -0
  134. package/vendor/introspection-recipe-check/linux-x64-musl/introspection-recipe-check +0 -0
  135. package/vendor/introspection-recipe-check/win32-x64/introspection-recipe-check.exe +0 -0
  136. package/dist/mcp-chunks/call-arguments-LU3W6D3K.js +0 -13
  137. package/dist/mcp-chunks/chunk-HKRJ6O36.js +0 -1076
  138. package/dist/mcp-chunks/chunk-NNOEGEUZ.js +0 -17273
  139. package/dist/mcp-chunks/chunk-P3PSC54P.js +0 -869
  140. package/dist/mcp-chunks/chunk-TATVT5IT.js +0 -194
  141. package/dist/mcp-chunks/chunk-YHQUTU6L.js +0 -571
  142. package/dist/mcp-chunks/client-S7RQUG5U.js +0 -13
  143. package/dist/mcp-chunks/daemon-command-U242Z6VY.js +0 -26
  144. package/dist/mcp-chunks/replay-command-25HJ6AQU.js +0 -85
  145. package/dist/mcp-chunks/runtime-5WJ3G25Y.js +0 -33
  146. package/dist/mcp-chunks/serve-command-DHXJZMMN.js +0 -3302
@@ -5,6 +5,7 @@ const THINKING_LEVELS = new Set([
5
5
  "medium",
6
6
  "high",
7
7
  "xhigh",
8
+ "max",
8
9
  ]);
9
10
  const CACHE_RETENTIONS = new Set(["none", "short", "long"]);
10
11
  const MODEL_KEYS = new Set([
@@ -18,9 +19,39 @@ const MODEL_KEYS = new Set([
18
19
  "max_retry_delay_ms",
19
20
  "providers",
20
21
  ]);
21
- const PROVIDER_KEYS = new Set(["openrouter", "anthropic"]);
22
+ const AI_KEYS = new Set(["model", "thinking_level", "options", "providers"]);
23
+ const BLOCKED_AI_OPTION_KEYS = new Set([
24
+ "apiKey",
25
+ "azureApiVersion",
26
+ "azureBaseUrl",
27
+ "azureDeploymentName",
28
+ "azureResourceName",
29
+ "bearerToken",
30
+ "client",
31
+ "env",
32
+ "fetch",
33
+ "headers",
34
+ "location",
35
+ "onPayload",
36
+ "onResponse",
37
+ "profile",
38
+ "project",
39
+ "reasoning",
40
+ "region",
41
+ "sessionId",
42
+ "signal",
43
+ "telemetryContext",
44
+ "transformHeaders",
45
+ ]);
46
+ const SNAKE_CASE_KEY = /^[a-z][a-z0-9]*(?:_[a-z0-9]+)*$/;
47
+ const LEGACY_PROVIDER_KEYS = new Set(["openrouter", "anthropic"]);
48
+ const AI_PROVIDER_KEYS = new Set([
49
+ "openrouter",
50
+ "anthropic",
51
+ "vercel_ai_gateway",
52
+ ]);
22
53
  const OPENROUTER_PROVIDER_KEYS = new Set(["routing"]);
23
- const OPENROUTER_KEYS = new Set([
54
+ const LEGACY_OPENROUTER_KEYS = new Set([
24
55
  "allow_fallbacks",
25
56
  "require_parameters",
26
57
  "data_collection",
@@ -36,6 +67,8 @@ const OPENROUTER_KEYS = new Set([
36
67
  "preferred_max_latency",
37
68
  ]);
38
69
  const ANTHROPIC_KEYS = new Set(["betas", "context_management"]);
70
+ const VERCEL_AI_GATEWAY_KEYS = new Set(["routing"]);
71
+ const BLOCKED_VERCEL_AI_GATEWAY_ROUTING_KEYS = new Set(["byok"]);
39
72
  export class RecipeModelConfigError extends Error {
40
73
  constructor(message) {
41
74
  super(message);
@@ -48,6 +81,26 @@ function isRecord(value) {
48
81
  function hasKeys(value) {
49
82
  return value !== undefined && Object.keys(value).length > 0;
50
83
  }
84
+ function snakeToCamel(key) {
85
+ return key.replace(/_([a-z0-9])/g, (_, character) => character.toUpperCase());
86
+ }
87
+ function normalizeSnakeCaseObject(context, value) {
88
+ if (!isRecord(value)) {
89
+ throw new RecipeModelConfigError(`${context}: expected object`);
90
+ }
91
+ const normalized = {};
92
+ for (const [key, child] of Object.entries(value)) {
93
+ if (!SNAKE_CASE_KEY.test(key)) {
94
+ throw new RecipeModelConfigError(`${context} has non-snake_case key "${key}"`);
95
+ }
96
+ const normalizedKey = snakeToCamel(key);
97
+ if (BLOCKED_AI_OPTION_KEYS.has(normalizedKey)) {
98
+ throw new RecipeModelConfigError(`${context} cannot configure host-owned option "${key}"`);
99
+ }
100
+ normalized[normalizedKey] = child;
101
+ }
102
+ return normalized;
103
+ }
51
104
  function optionalString(context, key, value) {
52
105
  if (value === undefined)
53
106
  return undefined;
@@ -96,51 +149,86 @@ function assertKnownKeys(context, keyPrefix, data, allowed) {
96
149
  throw new RecipeModelConfigError(`${context} has unsupported ${keyPrefix} key(s): ${unknown.join(", ")}`);
97
150
  }
98
151
  }
99
- function parseOpenRouterRouting(context, value) {
152
+ function parseOpenRouterRouting(context, value, prefix) {
100
153
  if (value === undefined)
101
154
  return undefined;
102
155
  if (!isRecord(value)) {
103
- throw new RecipeModelConfigError(`${context} has invalid model.providers.openrouter.routing: expected object`);
156
+ throw new RecipeModelConfigError(`${context} has invalid ${prefix}.providers.openrouter.routing: expected object`);
157
+ }
158
+ // `ai:` is the forward-compatible Pi boundary. OpenRouter owns this payload
159
+ // and can add routing fields without requiring a Recipes release. Keep the
160
+ // legacy `model:` block strict so its existing typo detection does not
161
+ // change underneath published Recipes.
162
+ if (prefix === "model") {
163
+ assertKnownKeys(context, `${prefix}.providers.openrouter.routing`, value, LEGACY_OPENROUTER_KEYS);
104
164
  }
105
- assertKnownKeys(context, "model.providers.openrouter.routing", value, OPENROUTER_KEYS);
106
165
  return { ...value };
107
166
  }
108
- function parseOpenRouterProvider(context, value) {
167
+ function parseOpenRouterProvider(context, value, prefix) {
109
168
  if (value === undefined)
110
169
  return undefined;
111
170
  if (!isRecord(value)) {
112
- throw new RecipeModelConfigError(`${context} has invalid model.providers.openrouter: expected object`);
171
+ throw new RecipeModelConfigError(`${context} has invalid ${prefix}.providers.openrouter: expected object`);
113
172
  }
114
- assertKnownKeys(context, "model.providers.openrouter", value, OPENROUTER_PROVIDER_KEYS);
115
- return parseOpenRouterRouting(context, value.routing);
173
+ assertKnownKeys(context, `${prefix}.providers.openrouter`, value, OPENROUTER_PROVIDER_KEYS);
174
+ return parseOpenRouterRouting(context, value.routing, prefix);
116
175
  }
117
- function parseAnthropic(context, value) {
176
+ function parseAnthropic(context, value, prefix) {
118
177
  if (value === undefined)
119
178
  return undefined;
120
179
  if (!isRecord(value)) {
121
- throw new RecipeModelConfigError(`${context} has invalid model.providers.anthropic: expected object`);
180
+ throw new RecipeModelConfigError(`${context} has invalid ${prefix}.providers.anthropic: expected object`);
181
+ }
182
+ assertKnownKeys(context, `${prefix}.providers.anthropic`, value, ANTHROPIC_KEYS);
183
+ const betas = optionalStringArray(context, `${prefix}.providers.anthropic.betas`, value.betas);
184
+ const contextManagement = value.context_management;
185
+ if (contextManagement !== undefined && !isRecord(contextManagement)) {
186
+ throw new RecipeModelConfigError(`${context} has invalid ${prefix}.providers.anthropic.context_management: expected object`);
122
187
  }
123
- assertKnownKeys(context, "model.providers.anthropic", value, ANTHROPIC_KEYS);
124
- const betas = optionalStringArray(context, "model.providers.anthropic.betas", value.betas);
125
188
  return {
126
189
  ...(betas ? { betas } : {}),
127
- ...(value.context_management !== undefined
128
- ? { contextManagement: value.context_management }
190
+ ...(contextManagement !== undefined
191
+ ? { contextManagement }
129
192
  : {}),
130
193
  };
131
194
  }
132
- function parseProviders(context, value) {
195
+ function parseVercelAiGatewayRouting(context, value) {
196
+ if (value === undefined)
197
+ return undefined;
198
+ if (!isRecord(value)) {
199
+ throw new RecipeModelConfigError(`${context} has invalid ai.providers.vercel_ai_gateway.routing: expected object`);
200
+ }
201
+ const blocked = Object.keys(value).filter((key) => BLOCKED_VERCEL_AI_GATEWAY_ROUTING_KEYS.has(key));
202
+ if (blocked.length > 0) {
203
+ throw new RecipeModelConfigError(`${context} cannot configure host-owned ai.providers.vercel_ai_gateway.routing field(s): ${blocked.join(", ")}`);
204
+ }
205
+ return { ...value };
206
+ }
207
+ function parseVercelAiGateway(context, value) {
208
+ if (value === undefined)
209
+ return undefined;
210
+ if (!isRecord(value)) {
211
+ throw new RecipeModelConfigError(`${context} has invalid ai.providers.vercel_ai_gateway: expected object`);
212
+ }
213
+ assertKnownKeys(context, "ai.providers.vercel_ai_gateway", value, VERCEL_AI_GATEWAY_KEYS);
214
+ return parseVercelAiGatewayRouting(context, value.routing);
215
+ }
216
+ function parseProviders(context, value, prefix) {
133
217
  if (value === undefined)
134
218
  return undefined;
135
219
  if (!isRecord(value)) {
136
- throw new RecipeModelConfigError(`${context} has invalid model.providers: expected object`);
220
+ throw new RecipeModelConfigError(`${context} has invalid ${prefix}.providers: expected object`);
137
221
  }
138
- assertKnownKeys(context, "model.providers", value, PROVIDER_KEYS);
139
- const openrouter = parseOpenRouterProvider(context, value.openrouter);
140
- const anthropic = parseAnthropic(context, value.anthropic);
222
+ assertKnownKeys(context, `${prefix}.providers`, value, prefix === "ai" ? AI_PROVIDER_KEYS : LEGACY_PROVIDER_KEYS);
223
+ const openrouter = parseOpenRouterProvider(context, value.openrouter, prefix);
224
+ const anthropic = parseAnthropic(context, value.anthropic, prefix);
225
+ const vercelAiGateway = prefix === "ai"
226
+ ? parseVercelAiGateway(context, value.vercel_ai_gateway)
227
+ : undefined;
141
228
  return {
142
229
  ...(openrouter ? { openrouter } : {}),
143
230
  ...(anthropic ? { anthropic } : {}),
231
+ ...(vercelAiGateway ? { vercelAiGateway } : {}),
144
232
  };
145
233
  }
146
234
  /**
@@ -179,7 +267,7 @@ export function parseRecipeAgentModelConfig(context, value) {
179
267
  ...(maxRetryDelayMs !== undefined ? { maxRetryDelayMs } : {}),
180
268
  };
181
269
  const name = optionalString(context, "model.name", value.name);
182
- const providers = parseProviders(context, value.providers);
270
+ const providers = parseProviders(context, value.providers, "model");
183
271
  return {
184
272
  ...(name ? { name } : {}),
185
273
  ...(thinkingLevel
@@ -189,10 +277,35 @@ export function parseRecipeAgentModelConfig(context, value) {
189
277
  ...(providers ?? {}),
190
278
  };
191
279
  }
280
+ /**
281
+ * Parse the preferred agent YAML `ai:` block. `options` keys are normalized
282
+ * from Recipe snake_case to Pi camelCase without enumerating Pi's evolving
283
+ * request-option surface. Nested values are deliberately left opaque.
284
+ */
285
+ export function parseRecipeAgentAiConfig(context, value) {
286
+ if (value === undefined)
287
+ return undefined;
288
+ if (!isRecord(value)) {
289
+ throw new RecipeModelConfigError(`${context} has invalid ai: expected object`);
290
+ }
291
+ assertKnownKeys(context, "ai", value, AI_KEYS);
292
+ const name = optionalString(context, "ai.model", value.model);
293
+ const thinkingLevel = parseThinkingLevel(context, "ai.thinking_level", value.thinking_level);
294
+ const streamOptions = value.options === undefined
295
+ ? undefined
296
+ : normalizeSnakeCaseObject(`${context} ai.options`, value.options);
297
+ const providers = parseProviders(context, value.providers, "ai");
298
+ return {
299
+ ...(name ? { name } : {}),
300
+ ...(thinkingLevel ? { thinkingLevel } : {}),
301
+ ...(streamOptions && hasKeys(streamOptions) ? { streamOptions } : {}),
302
+ ...(providers ?? {}),
303
+ };
304
+ }
192
305
  /**
193
306
  * Merge a child agent's model config over its `from:` base. Sections
194
- * (`streamOptions`, `openrouter`, `anthropic`) merge by key so a child can
195
- * override one option without restating the base's.
307
+ * (`streamOptions`, `openrouter`, `anthropic`, `vercelAiGateway`) merge by key
308
+ * so a child can override one option without restating the base's.
196
309
  */
197
310
  export function mergeRecipeAgentModelConfig(base, overlay) {
198
311
  if (!base)
@@ -214,12 +327,17 @@ export function mergeRecipeAgentModelConfig(base, overlay) {
214
327
  ...(base.anthropic ?? {}),
215
328
  ...(overlay.anthropic ?? {}),
216
329
  };
330
+ const vercelAiGateway = {
331
+ ...(base.vercelAiGateway ?? {}),
332
+ ...(overlay.vercelAiGateway ?? {}),
333
+ };
217
334
  return {
218
335
  ...base,
219
336
  ...overlay,
220
337
  ...(hasKeys(streamOptions) ? { streamOptions } : {}),
221
338
  ...(hasKeys(openrouter) ? { openrouter } : {}),
222
339
  ...(hasKeys(anthropic) ? { anthropic } : {}),
340
+ ...(hasKeys(vercelAiGateway) ? { vercelAiGateway } : {}),
223
341
  };
224
342
  }
225
343
  /** Clone mutable model metadata before applying Recipe-local configuration. */
@@ -276,10 +394,41 @@ function withAnthropicContextManagement(payload, model, config) {
276
394
  context_management: contextManagement,
277
395
  };
278
396
  }
397
+ function withVercelAiGatewayRouting(payload, model, config) {
398
+ const routing = config.vercelAiGateway;
399
+ if (routing === undefined ||
400
+ model.provider !== "vercel-ai-gateway" ||
401
+ !isRecord(payload)) {
402
+ return payload;
403
+ }
404
+ const providerOptions = isRecord(payload.providerOptions)
405
+ ? payload.providerOptions
406
+ : {};
407
+ const gateway = isRecord(providerOptions.gateway)
408
+ ? providerOptions.gateway
409
+ : {};
410
+ return {
411
+ ...payload,
412
+ providerOptions: {
413
+ ...providerOptions,
414
+ gateway: {
415
+ ...gateway,
416
+ ...routing,
417
+ },
418
+ },
419
+ };
420
+ }
421
+ /** Apply Recipe-owned provider payload policy after Pi serializes a request. */
422
+ export function applyRecipeAgentPayloadPolicy(payload, model, config) {
423
+ if (!config)
424
+ return payload;
425
+ const withAnthropicPolicy = withAnthropicContextManagement(payload, model, config);
426
+ return withVercelAiGatewayRouting(withAnthropicPolicy, model, config);
427
+ }
279
428
  /**
280
- * Apply stream options and Anthropic context management onto a live agent
281
- * session. Wraps the session's stream function and payload hook; safe to call
282
- * once per session.
429
+ * Apply stream options and provider payload policy onto a live agent session.
430
+ * Wraps the session's stream function and payload hook; safe to call once per
431
+ * session.
283
432
  */
284
433
  export function applyRecipeAgentModelConfigToSession(session, config) {
285
434
  if (!config)
@@ -288,10 +437,11 @@ export function applyRecipeAgentModelConfigToSession(session, config) {
288
437
  const baseStreamFn = session.agent.streamFunction;
289
438
  session.agent.streamFunction = (model, context, options) => baseStreamFn(model, context, mergeStreamOptions(options, config.streamOptions));
290
439
  }
291
- if (config.anthropic?.contextManagement !== undefined) {
440
+ if (config.anthropic?.contextManagement !== undefined ||
441
+ config.vercelAiGateway !== undefined) {
292
442
  const previousOnPayload = session.agent.onPayload;
293
443
  session.agent.onPayload = async (payload, model) => {
294
- const nextPayload = withAnthropicContextManagement(payload, model, config);
444
+ const nextPayload = applyRecipeAgentPayloadPolicy(payload, model, config);
295
445
  const previousResult = previousOnPayload
296
446
  ? await previousOnPayload(nextPayload, model)
297
447
  : undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"recipe-model.js","sourceRoot":"","sources":["../src/recipe-model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recipe-model.js","sourceRoot":"","sources":["../src/recipe-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type RecipeQueueMode = "all" | "one-at-a-time";
2
+ export type RecipeToolExecutionMode = "parallel" | "sequential";
3
+ export interface RecipeAgentSessionConfig {
4
+ steeringMode?: RecipeQueueMode;
5
+ followUpMode?: RecipeQueueMode;
6
+ toolExecution?: RecipeToolExecutionMode;
7
+ settings?: Record<string, unknown>;
8
+ }
9
+ export declare class RecipeSessionConfigError extends Error {
10
+ constructor(message: string);
11
+ }
12
+ export declare function parseRecipeAgentSessionConfig(context: string, value: unknown): RecipeAgentSessionConfig | undefined;
13
+ export declare function mergeRecipeAgentSessionConfig(base: RecipeAgentSessionConfig | undefined, overlay: RecipeAgentSessionConfig | undefined): RecipeAgentSessionConfig | undefined;
14
+ //# sourceMappingURL=recipe-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipe-session.d.ts","sourceRoot":"","sources":["../src/recipe-session.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,eAAe,CAAC;AACtD,MAAM,MAAM,uBAAuB,GAAG,UAAU,GAAG,YAAY,CAAC;AAEhE,MAAM,WAAW,wBAAwB;IACvC,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,aAAa,CAAC,EAAE,uBAAuB,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAkLD,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,GACb,wBAAwB,GAAG,SAAS,CAiEtC;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,wBAAwB,GAAG,SAAS,EAC1C,OAAO,EAAE,wBAAwB,GAAG,SAAS,GAC5C,wBAAwB,GAAG,SAAS,CAStC"}
@@ -0,0 +1,181 @@
1
+ const SESSION_KEYS = new Set([
2
+ "steering_mode",
3
+ "follow_up_mode",
4
+ "tool_execution",
5
+ "retry",
6
+ "compaction",
7
+ "images",
8
+ ]);
9
+ const SNAKE_CASE_KEY = /^[a-z][a-z0-9]*(?:_[a-z0-9]+)*$/;
10
+ export class RecipeSessionConfigError extends Error {
11
+ constructor(message) {
12
+ super(message);
13
+ this.name = "RecipeSessionConfigError";
14
+ }
15
+ }
16
+ function isRecord(value) {
17
+ return !!value && typeof value === "object" && !Array.isArray(value);
18
+ }
19
+ function assertKnownKeys(context, value, allowed) {
20
+ const unknown = Object.keys(value).filter((key) => !allowed.includes(key));
21
+ if (unknown.length > 0) {
22
+ throw new RecipeSessionConfigError(`${context} has unsupported key(s): ${unknown.join(", ")}`);
23
+ }
24
+ }
25
+ function sessionObject(context, value) {
26
+ if (!isRecord(value)) {
27
+ throw new RecipeSessionConfigError(`${context}: expected object`);
28
+ }
29
+ for (const key of Object.keys(value)) {
30
+ if (!SNAKE_CASE_KEY.test(key)) {
31
+ throw new RecipeSessionConfigError(`${context} has invalid key "${key}"`);
32
+ }
33
+ }
34
+ return value;
35
+ }
36
+ function optionalBoolean(context, key, value) {
37
+ if (value === undefined)
38
+ return undefined;
39
+ if (typeof value !== "boolean") {
40
+ throw new RecipeSessionConfigError(`${context}.${key}: expected boolean`);
41
+ }
42
+ return value;
43
+ }
44
+ function optionalInteger(context, key, value, min) {
45
+ if (value === undefined)
46
+ return undefined;
47
+ if (typeof value !== "number" ||
48
+ !Number.isSafeInteger(value) ||
49
+ value < min) {
50
+ throw new RecipeSessionConfigError(`${context}.${key}: expected integer >= ${min}`);
51
+ }
52
+ return value;
53
+ }
54
+ function definedObject(entries) {
55
+ const defined = Object.fromEntries(Object.entries(entries).filter(([, value]) => value !== undefined));
56
+ return Object.keys(defined).length > 0 ? defined : undefined;
57
+ }
58
+ function parseProviderRetry(context, value) {
59
+ const data = sessionObject(context, value);
60
+ assertKnownKeys(context, data, [
61
+ "timeout_ms",
62
+ "max_retries",
63
+ "max_retry_delay_ms",
64
+ ]);
65
+ return definedObject({
66
+ timeoutMs: optionalInteger(context, "timeout_ms", data.timeout_ms, 1),
67
+ maxRetries: optionalInteger(context, "max_retries", data.max_retries, 0),
68
+ maxRetryDelayMs: optionalInteger(context, "max_retry_delay_ms", data.max_retry_delay_ms, 0),
69
+ });
70
+ }
71
+ function parseRetry(context, value) {
72
+ const data = sessionObject(context, value);
73
+ assertKnownKeys(context, data, [
74
+ "enabled",
75
+ "max_retries",
76
+ "base_delay_ms",
77
+ "provider",
78
+ ]);
79
+ return definedObject({
80
+ enabled: optionalBoolean(context, "enabled", data.enabled),
81
+ maxRetries: optionalInteger(context, "max_retries", data.max_retries, 0),
82
+ baseDelayMs: optionalInteger(context, "base_delay_ms", data.base_delay_ms, 0),
83
+ provider: data.provider === undefined
84
+ ? undefined
85
+ : parseProviderRetry(`${context}.provider`, data.provider),
86
+ });
87
+ }
88
+ function parseCompaction(context, value) {
89
+ const data = sessionObject(context, value);
90
+ assertKnownKeys(context, data, [
91
+ "enabled",
92
+ "reserve_tokens",
93
+ "keep_recent_tokens",
94
+ ]);
95
+ return definedObject({
96
+ enabled: optionalBoolean(context, "enabled", data.enabled),
97
+ reserveTokens: optionalInteger(context, "reserve_tokens", data.reserve_tokens, 0),
98
+ keepRecentTokens: optionalInteger(context, "keep_recent_tokens", data.keep_recent_tokens, 0),
99
+ });
100
+ }
101
+ function parseImages(context, value) {
102
+ const data = sessionObject(context, value);
103
+ assertKnownKeys(context, data, ["auto_resize", "block_images"]);
104
+ return definedObject({
105
+ autoResize: optionalBoolean(context, "auto_resize", data.auto_resize),
106
+ blockImages: optionalBoolean(context, "block_images", data.block_images),
107
+ });
108
+ }
109
+ function parseQueueMode(context, key, value) {
110
+ if (value === undefined)
111
+ return undefined;
112
+ if (value !== "all" && value !== "one-at-a-time") {
113
+ throw new RecipeSessionConfigError(`${context} has invalid session.${key}: expected all or one-at-a-time`);
114
+ }
115
+ return value;
116
+ }
117
+ export function parseRecipeAgentSessionConfig(context, value) {
118
+ if (value === undefined)
119
+ return undefined;
120
+ if (!isRecord(value)) {
121
+ throw new RecipeSessionConfigError(`${context} has invalid session: expected object`);
122
+ }
123
+ const unknown = Object.keys(value).filter((key) => !SESSION_KEYS.has(key));
124
+ if (unknown.length > 0) {
125
+ throw new RecipeSessionConfigError(`${context} has unsupported session key(s): ${unknown.join(", ")}`);
126
+ }
127
+ const steeringMode = parseQueueMode(context, "steering_mode", value.steering_mode);
128
+ const followUpMode = parseQueueMode(context, "follow_up_mode", value.follow_up_mode);
129
+ const toolExecution = value.tool_execution;
130
+ if (toolExecution !== undefined &&
131
+ toolExecution !== "parallel" &&
132
+ toolExecution !== "sequential") {
133
+ throw new RecipeSessionConfigError(`${context} has invalid session.tool_execution: expected parallel or sequential`);
134
+ }
135
+ const parsedToolExecution = toolExecution;
136
+ const settings = {
137
+ ...(steeringMode ? { steeringMode } : {}),
138
+ ...(followUpMode ? { followUpMode } : {}),
139
+ };
140
+ const nestedSettings = {
141
+ retry: value.retry === undefined
142
+ ? undefined
143
+ : parseRetry(`${context} session.retry`, value.retry),
144
+ compaction: value.compaction === undefined
145
+ ? undefined
146
+ : parseCompaction(`${context} session.compaction`, value.compaction),
147
+ images: value.images === undefined
148
+ ? undefined
149
+ : parseImages(`${context} session.images`, value.images),
150
+ };
151
+ Object.assign(settings, definedObject(nestedSettings));
152
+ const parsed = {
153
+ ...(steeringMode ? { steeringMode } : {}),
154
+ ...(followUpMode ? { followUpMode } : {}),
155
+ ...(parsedToolExecution ? { toolExecution: parsedToolExecution } : {}),
156
+ ...(Object.keys(settings).length > 0 ? { settings } : {}),
157
+ };
158
+ return Object.keys(parsed).length > 0 ? parsed : undefined;
159
+ }
160
+ export function mergeRecipeAgentSessionConfig(base, overlay) {
161
+ if (!base)
162
+ return overlay;
163
+ if (!overlay)
164
+ return base;
165
+ const settings = mergeObjects(base.settings ?? {}, overlay.settings ?? {});
166
+ return {
167
+ ...base,
168
+ ...overlay,
169
+ ...(Object.keys(settings).length > 0 ? { settings } : {}),
170
+ };
171
+ }
172
+ function mergeObjects(base, overlay) {
173
+ const merged = { ...base };
174
+ for (const [key, value] of Object.entries(overlay)) {
175
+ merged[key] = isRecord(merged[key]) && isRecord(value)
176
+ ? mergeObjects(merged[key], value)
177
+ : value;
178
+ }
179
+ return merged;
180
+ }
181
+ //# sourceMappingURL=recipe-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipe-session.js","sourceRoot":"","sources":["../src/recipe-session.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
package/dist/session.js CHANGED
@@ -12,6 +12,24 @@ import { loadRecipeExtensionFactory } from "./recipe-extensions.js";
12
12
  import { bindRecipeExtensionFactory, createRecipeExtensionRegistrationRegistry, recipeExtensionToolAllowlist, } from "./extensions.js";
13
13
  import { applyRecipeAgentModelConfigToModel, applyRecipeAgentModelConfigToSession, cloneModelForRecipe, } from "./recipe-model.js";
14
14
  export { expectedProviderEnvVars } from "./provider-env.js";
15
+ function sessionSettingsManager(base, sessionSettings) {
16
+ if (!sessionSettings)
17
+ return base;
18
+ const merge = (left, right) => {
19
+ const result = { ...left };
20
+ for (const [key, value] of Object.entries(right)) {
21
+ const current = result[key];
22
+ result[key] =
23
+ current && value &&
24
+ typeof current === "object" && !Array.isArray(current) &&
25
+ typeof value === "object" && !Array.isArray(value)
26
+ ? merge(current, value)
27
+ : value;
28
+ }
29
+ return result;
30
+ };
31
+ return SettingsManager.inMemory(merge(merge(base.getGlobalSettings(), base.getProjectSettings()), sessionSettings));
32
+ }
15
33
  export { RecipeCredentialError, RecipeModelError, RecipeModelTransportError, };
16
34
  function schemaChildPosition(position, key) {
17
35
  if (position === "schema-map")
@@ -323,7 +341,8 @@ async function createSessionForAgent(recipe, opts) {
323
341
  ])));
324
342
  }
325
343
  inlineExtensions.push(...(opts.extensionFactories ?? []));
326
- const settingsManager = opts.settingsManager ?? SettingsManager.create(cwd, recipe.recipeDir);
344
+ const baseSettingsManager = opts.settingsManager ?? SettingsManager.create(cwd, recipe.recipeDir);
345
+ const settingsManager = sessionSettingsManager(baseSettingsManager, recipe.sessionConfig?.settings);
327
346
  const services = await createAgentSessionServices({
328
347
  cwd,
329
348
  agentDir: recipe.recipeDir,
@@ -440,6 +459,9 @@ async function createSessionForAgent(recipe, opts) {
440
459
  customTools,
441
460
  });
442
461
  session = created.session;
462
+ if (recipe.sessionConfig?.toolExecution) {
463
+ session.agent.toolExecution = recipe.sessionConfig.toolExecution;
464
+ }
443
465
  normalizeSessionToolsForModel(session, model);
444
466
  applyRecipeAgentModelConfigToSession(session, recipe.modelConfig);
445
467
  await session.bindExtensions({});