@introspection-ai/recipes 0.13.0 → 0.14.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 (222) hide show
  1. package/README.md +45 -58
  2. package/dist/{agent-tool.d.ts → agents.d.ts} +4 -1
  3. package/dist/agents.d.ts.map +1 -0
  4. package/dist/{agent-tool.js → agents.js} +1 -1
  5. package/dist/agents.js.map +1 -0
  6. package/dist/api/extensions.d.ts +3 -0
  7. package/dist/api/extensions.d.ts.map +1 -0
  8. package/dist/api/extensions.js +2 -0
  9. package/dist/api/extensions.js.map +1 -0
  10. package/dist/api/mcp.d.ts +4 -0
  11. package/dist/api/mcp.d.ts.map +1 -0
  12. package/dist/api/mcp.js +2 -0
  13. package/dist/api/mcp.js.map +1 -0
  14. package/dist/api/session.d.ts +3 -0
  15. package/dist/api/session.d.ts.map +1 -0
  16. package/dist/api/session.js +2 -0
  17. package/dist/api/session.js.map +1 -0
  18. package/dist/child-agent.d.ts +5 -4
  19. package/dist/child-agent.d.ts.map +1 -1
  20. package/dist/child-agent.js +26 -117
  21. package/dist/child-agent.js.map +1 -1
  22. package/dist/child-session.d.ts +23 -0
  23. package/dist/child-session.d.ts.map +1 -0
  24. package/dist/child-session.js +48 -0
  25. package/dist/child-session.js.map +1 -0
  26. package/dist/extensions.d.ts +29 -0
  27. package/dist/extensions.d.ts.map +1 -0
  28. package/dist/extensions.js +119 -0
  29. package/dist/extensions.js.map +1 -0
  30. package/dist/index.d.ts +4 -13
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +2 -13
  33. package/dist/index.js.map +1 -1
  34. package/dist/inspect.d.ts +38 -5
  35. package/dist/inspect.d.ts.map +1 -1
  36. package/dist/inspect.js +92 -41
  37. package/dist/inspect.js.map +1 -1
  38. package/dist/interactions.d.ts +18 -2
  39. package/dist/interactions.d.ts.map +1 -1
  40. package/dist/interactions.js +41 -10
  41. package/dist/interactions.js.map +1 -1
  42. package/dist/mcp-catalog.d.ts +1 -0
  43. package/dist/mcp-catalog.d.ts.map +1 -1
  44. package/dist/mcp-catalog.js +14 -6
  45. package/dist/mcp-catalog.js.map +1 -1
  46. package/dist/mcp-chunks/auth-command-ZLGYIEUY.js +273 -0
  47. package/dist/mcp-chunks/call-arguments-LU3W6D3K.js +13 -0
  48. package/dist/mcp-chunks/call-command-LKTKSYTH.js +612 -0
  49. package/dist/mcp-chunks/chunk-2U4BSDC4.js +3951 -0
  50. package/dist/mcp-chunks/chunk-2XL7MG7R.js +272 -0
  51. package/dist/mcp-chunks/chunk-3BJA27PY.js +2321 -0
  52. package/dist/mcp-chunks/chunk-4SQKWYFF.js +15 -0
  53. package/dist/mcp-chunks/chunk-5QOSCSQB.js +290 -0
  54. package/dist/mcp-chunks/chunk-6W5QFASN.js +77 -0
  55. package/dist/mcp-chunks/chunk-6XCZGU3G.js +1004 -0
  56. package/dist/mcp-chunks/chunk-7FHEBT5G.js +149 -0
  57. package/dist/mcp-chunks/chunk-7KA2VJVZ.js +114 -0
  58. package/dist/mcp-chunks/chunk-7UDVSOOF.js +138 -0
  59. package/dist/mcp-chunks/chunk-BNV3TPE4.js +66 -0
  60. package/dist/mcp-chunks/chunk-BTLAWHTA.js +129 -0
  61. package/dist/mcp-chunks/chunk-BV56DXPW.js +13 -0
  62. package/dist/mcp-chunks/chunk-BWHIA4PC.js +90 -0
  63. package/dist/mcp-chunks/chunk-BZIQOWE6.js +267 -0
  64. package/dist/mcp-chunks/chunk-D3MRAZ6H.js +16140 -0
  65. package/dist/mcp-chunks/chunk-DHBE7UBH.js +750 -0
  66. package/dist/mcp-chunks/chunk-E22DYOW5.js +251 -0
  67. package/dist/mcp-chunks/chunk-ECIVB7P4.js +139 -0
  68. package/dist/mcp-chunks/chunk-HKRJ6O36.js +1076 -0
  69. package/dist/mcp-chunks/chunk-IABRYROW.js +44 -0
  70. package/dist/mcp-chunks/chunk-J6LYIZXN.js +45 -0
  71. package/dist/mcp-chunks/chunk-L7NTQVYN.js +161 -0
  72. package/dist/mcp-chunks/chunk-LEZSACDE.js +141 -0
  73. package/dist/mcp-chunks/chunk-LKIBAYKU.js +208 -0
  74. package/dist/mcp-chunks/chunk-LNH5LAJD.js +152 -0
  75. package/dist/mcp-chunks/chunk-LQQEYD76.js +124 -0
  76. package/dist/mcp-chunks/chunk-LRKZP7DJ.js +47 -0
  77. package/dist/mcp-chunks/chunk-LS7PMWSR.js +109 -0
  78. package/dist/mcp-chunks/chunk-M3TPODXI.js +95 -0
  79. package/dist/mcp-chunks/chunk-MZ2NARG7.js +400 -0
  80. package/dist/mcp-chunks/chunk-N46NEFAF.js +45 -0
  81. package/dist/mcp-chunks/chunk-NNOEGEUZ.js +17273 -0
  82. package/dist/mcp-chunks/chunk-NRAJX5E4.js +69 -0
  83. package/dist/mcp-chunks/chunk-P3PSC54P.js +869 -0
  84. package/dist/mcp-chunks/chunk-PIIYJR44.js +6341 -0
  85. package/dist/mcp-chunks/chunk-PWYFKGKG.js +385 -0
  86. package/dist/mcp-chunks/chunk-SJCCBNZ4.js +45 -0
  87. package/dist/mcp-chunks/chunk-TATVT5IT.js +194 -0
  88. package/dist/mcp-chunks/chunk-TEUKFFQL.js +29 -0
  89. package/dist/mcp-chunks/chunk-UKYNQGNE.js +150 -0
  90. package/dist/mcp-chunks/chunk-UNKB4SBV.js +37 -0
  91. package/dist/mcp-chunks/chunk-WD6BOD24.js +138 -0
  92. package/dist/mcp-chunks/chunk-WQJZMCJN.js +73 -0
  93. package/dist/mcp-chunks/chunk-XANPGTLI.js +364 -0
  94. package/dist/mcp-chunks/chunk-XQK2JSW4.js +35 -0
  95. package/dist/mcp-chunks/chunk-YHQUTU6L.js +571 -0
  96. package/dist/mcp-chunks/chunk-YVZKMV5H.js +57 -0
  97. package/dist/mcp-chunks/cli-UV4QJZZM.js +929 -0
  98. package/dist/mcp-chunks/client-S7RQUG5U.js +13 -0
  99. package/dist/mcp-chunks/config-command-NLAGKID5.js +1101 -0
  100. package/dist/mcp-chunks/daemon-command-U242Z6VY.js +26 -0
  101. package/dist/mcp-chunks/dist-LK3SHAMX.js +6478 -0
  102. package/dist/mcp-chunks/emit-ts-command-VBXVXO6V.js +386 -0
  103. package/dist/mcp-chunks/generate-cli-runner-6CAZZA3P.js +1426 -0
  104. package/dist/mcp-chunks/inspect-cli-command-3ZORTOR7.js +111 -0
  105. package/dist/mcp-chunks/launch-YKRXHXJI.js +10 -0
  106. package/dist/mcp-chunks/lifecycle-XVKRHPH3.js +16 -0
  107. package/dist/mcp-chunks/list-command-2MEGGNFQ.js +4190 -0
  108. package/dist/mcp-chunks/output-utils-NKESLAJ6.js +12 -0
  109. package/dist/mcp-chunks/prompt-B1Yc1NPt-VGOTWJMN.js +918 -0
  110. package/dist/mcp-chunks/record-command-YXHTTTT5.js +17 -0
  111. package/dist/mcp-chunks/replay-command-25HJ6AQU.js +85 -0
  112. package/dist/mcp-chunks/resource-command-OO4NYF5C.js +97 -0
  113. package/dist/mcp-chunks/result-utils-MOHHLNM7.js +15 -0
  114. package/dist/mcp-chunks/runtime-5WJ3G25Y.js +33 -0
  115. package/dist/mcp-chunks/runtime-wrapper-RPWDIDBF.js +10 -0
  116. package/dist/mcp-chunks/serve-command-DHXJZMMN.js +3302 -0
  117. package/dist/mcp-chunks/timeouts-W2XWCCXR.js +18 -0
  118. package/dist/mcp-chunks/vault-command-PIYIUEZL.js +154 -0
  119. package/dist/mcp-daemon-client.d.ts +6 -1
  120. package/dist/mcp-daemon-client.d.ts.map +1 -1
  121. package/dist/mcp-daemon-client.js +119 -2
  122. package/dist/mcp-daemon-client.js.map +1 -1
  123. package/dist/mcp-daemon-protocol.d.ts +18 -1
  124. package/dist/mcp-daemon-protocol.d.ts.map +1 -1
  125. package/dist/mcp-daemon-protocol.js +31 -0
  126. package/dist/mcp-daemon-protocol.js.map +1 -1
  127. package/dist/mcp-daemon.js +169 -76602
  128. package/dist/mcp-daemon.js.map +1 -1
  129. package/dist/mcp-policy.d.ts +11 -0
  130. package/dist/mcp-policy.d.ts.map +1 -0
  131. package/dist/mcp-policy.js +27 -0
  132. package/dist/mcp-policy.js.map +1 -0
  133. package/dist/mcp-run-worker.js +38 -76540
  134. package/dist/mcp-tools.d.ts +39 -0
  135. package/dist/mcp-tools.d.ts.map +1 -0
  136. package/dist/mcp-tools.js +493 -0
  137. package/dist/mcp-tools.js.map +1 -0
  138. package/dist/mcp.d.ts +21 -9
  139. package/dist/mcp.d.ts.map +1 -1
  140. package/dist/mcp.js +101 -31
  141. package/dist/mcp.js.map +1 -1
  142. package/dist/model-binding.d.ts +39 -0
  143. package/dist/model-binding.d.ts.map +1 -0
  144. package/dist/model-binding.js +103 -0
  145. package/dist/model-binding.js.map +1 -0
  146. package/dist/pi-extension.d.ts +2 -22
  147. package/dist/pi-extension.d.ts.map +1 -1
  148. package/dist/pi-extension.js +296 -71
  149. package/dist/pi-extension.js.map +1 -1
  150. package/dist/recipe/resolve.d.ts +43 -20
  151. package/dist/recipe/resolve.d.ts.map +1 -1
  152. package/dist/recipe/resolve.js +215 -70
  153. package/dist/recipe/resolve.js.map +1 -1
  154. package/dist/recipe-agent.d.ts +24 -27
  155. package/dist/recipe-agent.d.ts.map +1 -1
  156. package/dist/recipe-agent.js +278 -230
  157. package/dist/recipe-agent.js.map +1 -1
  158. package/dist/recipe-check.d.ts +17 -0
  159. package/dist/recipe-check.d.ts.map +1 -0
  160. package/dist/recipe-check.js +258 -0
  161. package/dist/recipe-check.js.map +1 -0
  162. package/dist/recipe-extensions.d.ts.map +1 -1
  163. package/dist/recipe-extensions.js +0 -3
  164. package/dist/recipe-extensions.js.map +1 -1
  165. package/dist/recipe-model.d.ts +3 -1
  166. package/dist/recipe-model.d.ts.map +1 -1
  167. package/dist/recipe-model.js +15 -12
  168. package/dist/recipe-model.js.map +1 -1
  169. package/dist/recipe-package.d.ts +6 -28
  170. package/dist/recipe-package.d.ts.map +1 -1
  171. package/dist/recipe-package.js +248 -191
  172. package/dist/recipe-package.js.map +1 -1
  173. package/dist/recipe-skills.d.ts.map +1 -1
  174. package/dist/recipe-skills.js +42 -29
  175. package/dist/recipe-skills.js.map +1 -1
  176. package/dist/run-controller.d.ts +10 -9
  177. package/dist/run-controller.d.ts.map +1 -1
  178. package/dist/run-controller.js +28 -21
  179. package/dist/run-controller.js.map +1 -1
  180. package/dist/session.d.ts +40 -53
  181. package/dist/session.d.ts.map +1 -1
  182. package/dist/session.js +312 -173
  183. package/dist/session.js.map +1 -1
  184. package/dist/test-utils.d.ts +7 -7
  185. package/dist/test-utils.d.ts.map +1 -1
  186. package/dist/test-utils.js +32 -15
  187. package/dist/test-utils.js.map +1 -1
  188. package/docs/agent-composition.md +41 -35
  189. package/docs/host-api.md +201 -0
  190. package/docs/index.md +8 -14
  191. package/docs/interactions.md +12 -11
  192. package/docs/mcp-auth.md +6 -6
  193. package/docs/mcp-configuration.md +72 -24
  194. package/docs/pi-extension.md +39 -11
  195. package/docs/recipe-flow.md +9 -9
  196. package/docs/recipe-format.md +90 -41
  197. package/package.json +23 -17
  198. package/vendor/mcp-client/darwin-arm64/mcp-client +0 -0
  199. package/vendor/mcp-client/darwin-x64/mcp-client +0 -0
  200. package/vendor/mcp-client/linux-arm64/mcp-client +0 -0
  201. package/vendor/recipe-check/darwin-arm64/recipe-check +0 -0
  202. package/vendor/recipe-check/darwin-x64/recipe-check +0 -0
  203. package/vendor/recipe-check/linux-arm64/recipe-check +0 -0
  204. package/vendor/recipe-check/linux-x64/recipe-check +0 -0
  205. package/vendor/recipe-check/linux-x64-musl/recipe-check +0 -0
  206. package/vendor/recipe-check/win32-x64/recipe-check.exe +0 -0
  207. package/dist/agent-tool.d.ts.map +0 -1
  208. package/dist/agent-tool.js.map +0 -1
  209. package/dist/run.d.ts +0 -28
  210. package/dist/run.d.ts.map +0 -1
  211. package/dist/run.js +0 -84
  212. package/dist/run.js.map +0 -1
  213. package/dist/testing.d.ts +0 -25
  214. package/dist/testing.d.ts.map +0 -1
  215. package/dist/testing.js +0 -96
  216. package/dist/testing.js.map +0 -1
  217. package/docs/deployment-configuration.md +0 -65
  218. package/docs/migration.md +0 -70
  219. package/docs/python-bindings-release.md +0 -47
  220. package/docs/recipe-evals.md +0 -70
  221. package/docs/recipe-judges.md +0 -152
  222. package/docs/runtime-library.md +0 -171
@@ -0,0 +1,29 @@
1
+ import type { ExtensionAPI, ExtensionFactory } from "@earendil-works/pi-coding-agent";
2
+ export interface RecipeExtensionSessionContext {
3
+ readonly recipe: {
4
+ readonly name: string;
5
+ };
6
+ readonly agent: {
7
+ readonly name: string;
8
+ };
9
+ readonly session: {
10
+ readonly role: "root" | "subagent";
11
+ };
12
+ }
13
+ export interface RecipeExtensionRegistrationRegistry {
14
+ claim(kind: string, name: string, owner: string): void;
15
+ release(kind: string, name: string, owner: string): void;
16
+ }
17
+ /** @internal Exact tool names a package extension may keep model-visible. */
18
+ export declare function recipeExtensionToolAllowlist(declaredTools: readonly string[], hasAgentTool: boolean, additionalToolNames?: readonly string[]): ReadonlySet<string>;
19
+ /** @internal Reject ambiguous registrations across the package closure. */
20
+ export declare function createRecipeExtensionRegistrationRegistry(): RecipeExtensionRegistrationRegistry;
21
+ /** Return the immutable Recipe identity bound to this extension instance. */
22
+ export declare function getRecipeSessionContext(pi: ExtensionAPI): RecipeExtensionSessionContext;
23
+ /** Register behavior only when this session is running the named agent. */
24
+ export declare function forAgent(pi: ExtensionAPI, agentName: string, register: (context: RecipeExtensionSessionContext) => void): void;
25
+ /** Register behavior only when a session predicate matches. */
26
+ export declare function forRecipeSession(pi: ExtensionAPI, predicate: (context: RecipeExtensionSessionContext) => boolean, register: (context: RecipeExtensionSessionContext) => void): void;
27
+ /** @internal Bind context before Pi invokes a package extension factory. */
28
+ export declare function bindRecipeExtensionFactory(factory: ExtensionFactory, context: RecipeExtensionSessionContext, registrationRegistry?: RecipeExtensionRegistrationRegistry, owner?: string, allowedToolNames?: ReadonlySet<string>): ExtensionFactory;
29
+ //# sourceMappingURL=extensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EACjB,MAAM,iCAAiC,CAAC;AAEzC,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;KACpC,CAAC;CACH;AAID,MAAM,WAAW,mCAAmC;IAClD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACvD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1D;AAED,6EAA6E;AAC7E,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,YAAY,EAAE,OAAO,EACrB,mBAAmB,GAAE,SAAS,MAAM,EAAO,GAC1C,WAAW,CAAC,MAAM,CAAC,CAMrB;AAED,2EAA2E;AAC3E,wBAAgB,yCAAyC,IAAI,mCAAmC,CAyB/F;AAED,6EAA6E;AAC7E,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,YAAY,GACf,6BAA6B,CAQ/B;AAED,2EAA2E;AAC3E,wBAAgB,QAAQ,CACtB,EAAE,EAAE,YAAY,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,IAAI,GACzD,IAAI,CAGN;AAED,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,YAAY,EAChB,SAAS,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,EAC9D,QAAQ,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,IAAI,GACzD,IAAI,CAGN;AAED,4EAA4E;AAC5E,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,6BAA6B,EACtC,oBAAoB,CAAC,EAAE,mCAAmC,EAC1D,KAAK,SAAuB,EAC5B,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GACrC,gBAAgB,CAkFlB"}
@@ -0,0 +1,119 @@
1
+ const contexts = new WeakMap();
2
+ /** @internal Exact tool names a package extension may keep model-visible. */
3
+ export function recipeExtensionToolAllowlist(declaredTools, hasAgentTool, additionalToolNames = []) {
4
+ return new Set([
5
+ ...declaredTools,
6
+ ...(hasAgentTool ? ["agent"] : []),
7
+ ...additionalToolNames,
8
+ ]);
9
+ }
10
+ /** @internal Reject ambiguous registrations across the package closure. */
11
+ export function createRecipeExtensionRegistrationRegistry() {
12
+ const owners = new Map();
13
+ return {
14
+ claim(kind, name, owner) {
15
+ const key = `${kind}\0${name}`;
16
+ const existing = owners.get(key);
17
+ if (existing === owner)
18
+ return;
19
+ if (existing) {
20
+ throw new Error(`Recipe extension ${kind} registration "${name}" conflicts between ${existing} and ${owner}`);
21
+ }
22
+ owners.set(key, owner);
23
+ },
24
+ release(kind, name, owner) {
25
+ const key = `${kind}\0${name}`;
26
+ const existing = owners.get(key);
27
+ if (existing !== owner) {
28
+ throw new Error(`Recipe extension ${owner} cannot unregister ${kind} "${name}" owned by ${existing ?? "<host>"}`);
29
+ }
30
+ owners.delete(key);
31
+ },
32
+ };
33
+ }
34
+ /** Return the immutable Recipe identity bound to this extension instance. */
35
+ export function getRecipeSessionContext(pi) {
36
+ const context = contexts.get(pi);
37
+ if (!context) {
38
+ throw new Error("This extension is not running inside a Recipe-owned session");
39
+ }
40
+ return context;
41
+ }
42
+ /** Register behavior only when this session is running the named agent. */
43
+ export function forAgent(pi, agentName, register) {
44
+ const context = getRecipeSessionContext(pi);
45
+ if (context.agent.name === agentName)
46
+ register(context);
47
+ }
48
+ /** Register behavior only when a session predicate matches. */
49
+ export function forRecipeSession(pi, predicate, register) {
50
+ const context = getRecipeSessionContext(pi);
51
+ if (predicate(context))
52
+ register(context);
53
+ }
54
+ /** @internal Bind context before Pi invokes a package extension factory. */
55
+ export function bindRecipeExtensionFactory(factory, context, registrationRegistry, owner = "<recipe-extension>", allowedToolNames) {
56
+ return async (pi) => {
57
+ const registrationKinds = {
58
+ registerTool: "tool",
59
+ registerCommand: "command",
60
+ registerShortcut: "shortcut",
61
+ registerFlag: "flag",
62
+ registerMessageRenderer: "message renderer",
63
+ registerEntryRenderer: "entry renderer",
64
+ registerProvider: "provider",
65
+ };
66
+ const guarded = registrationRegistry || allowedToolNames
67
+ ? new Proxy(pi, {
68
+ get(target, property, receiver) {
69
+ const value = Reflect.get(target, property, receiver);
70
+ const kind = typeof property === "string"
71
+ ? registrationKinds[property]
72
+ : undefined;
73
+ if (!kind || !registrationRegistry || typeof value !== "function") {
74
+ if (property === "setActiveTools" &&
75
+ typeof value === "function" &&
76
+ allowedToolNames) {
77
+ return (names) => {
78
+ const undeclared = names.filter((name) => !allowedToolNames.has(name));
79
+ if (undeclared.length > 0) {
80
+ throw new Error(`Recipe extension attempted to activate undeclared tool(s): ${undeclared.join(", ")}`);
81
+ }
82
+ return value.call(target, names);
83
+ };
84
+ }
85
+ if (property === "unregisterProvider" &&
86
+ typeof value === "function" &&
87
+ registrationRegistry) {
88
+ return (name) => {
89
+ const providerName = typeof name === "string" ? name : name.id;
90
+ if (providerName) {
91
+ registrationRegistry.release("provider", providerName, owner);
92
+ }
93
+ return value.call(target, name);
94
+ };
95
+ }
96
+ return typeof value === "function" ? value.bind(target) : value;
97
+ }
98
+ return (...args) => {
99
+ const registrationName = property === "registerTool"
100
+ ? args[0]?.name
101
+ : property === "registerProvider" &&
102
+ typeof args[0] === "object"
103
+ ? args[0]?.id
104
+ : args[0];
105
+ if (typeof registrationName === "string") {
106
+ registrationRegistry.claim(kind, property === "registerShortcut"
107
+ ? registrationName.toLowerCase()
108
+ : registrationName, owner);
109
+ }
110
+ return value.apply(target, args);
111
+ };
112
+ },
113
+ })
114
+ : pi;
115
+ contexts.set(guarded, context);
116
+ await factory(guarded);
117
+ };
118
+ }
119
+ //# sourceMappingURL=extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,14 +1,5 @@
1
- export * from "./interactions.js";
2
- export * from "./agent-tool.js";
3
- export * from "./inspect.js";
4
- export * from "./mcp-catalog.js";
5
- export * from "./mcp.js";
6
- export * from "./pi-extension.js";
7
- export * from "./recipe-agent.js";
8
- export * from "./recipe-model.js";
9
- export * from "./recipe-package.js";
10
- export * from "./recipe/resolve.js";
11
- export * from "./run.js";
12
- export * from "./run-controller.js";
13
- export * from "./session.js";
1
+ export { resolveRecipe, RecipeResolutionError, } from "./recipe/resolve.js";
2
+ export type { ResolvedRecipe, ResolvedRecipeAgent, ResolvedRecipeAgentMcp, } from "./recipe/resolve.js";
3
+ export { createAgentSession, RecipeCredentialError, RecipeMcpEnvironmentInUseError, RecipeModelError, RecipeModelTransportError, } from "./api/session.js";
4
+ export type { CreateAgentSessionOptions, RecipeSessionHandle, RecipeSessionOtelOptions, } from "./api/session.js";
14
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,8BAA8B,EAC9B,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -1,14 +1,3 @@
1
- export * from "./interactions.js";
2
- export * from "./agent-tool.js";
3
- export * from "./inspect.js";
4
- export * from "./mcp-catalog.js";
5
- export * from "./mcp.js";
6
- export * from "./pi-extension.js";
7
- export * from "./recipe-agent.js";
8
- export * from "./recipe-model.js";
9
- export * from "./recipe-package.js";
10
- export * from "./recipe/resolve.js";
11
- export * from "./run.js";
12
- export * from "./run-controller.js";
13
- export * from "./session.js";
1
+ export { resolveRecipe, RecipeResolutionError, } from "./recipe/resolve.js";
2
+ export { createAgentSession, RecipeCredentialError, RecipeMcpEnvironmentInUseError, RecipeModelError, RecipeModelTransportError, } from "./api/session.js";
14
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,8BAA8B,EAC9B,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC"}
package/dist/inspect.d.ts CHANGED
@@ -1,7 +1,35 @@
1
+ import type { RecipeAgentConfigField } from "./recipe-agent.js";
2
+ import type { ResolvedRecipe, ResolvedRecipeAgent } from "./recipe/resolve.js";
3
+ export interface RecipeAgentInspection {
4
+ name: string;
5
+ from?: string;
6
+ declaredFields: RecipeAgentConfigField[];
7
+ provenance: Partial<Record<RecipeAgentConfigField, string[]>>;
8
+ model: {
9
+ name: string;
10
+ thinkingLevel?: string;
11
+ config?: ResolvedRecipeAgent["modelConfig"];
12
+ };
13
+ prompt: {
14
+ base: "SYSTEM.md" | "pi";
15
+ agentInstructions?: {
16
+ mode: "append" | "replace";
17
+ source: string;
18
+ };
19
+ };
20
+ tools: {
21
+ authored: string[];
22
+ root: string[];
23
+ subagent: string[];
24
+ };
25
+ skills: string[];
26
+ subagents: string[];
27
+ mcp?: ResolvedRecipeAgent["mcp"];
28
+ }
1
29
  /**
2
30
  * What a recipe requires before it can run, derived entirely from the
3
- * package's existing declarations — no new manifest keys. Hosts and adapters
4
- * can use this for preflight checks and configuration UIs.
31
+ * package's existing declarations — no new manifest keys. Hosts can use this
32
+ * for preflight checks and configuration UIs.
5
33
  */
6
34
  export interface RecipeInspection {
7
35
  name: string;
@@ -9,18 +37,23 @@ export interface RecipeInspection {
9
37
  description?: string;
10
38
  agents: string[];
11
39
  providers: string[];
12
- credential_env: string[];
40
+ credentialEnv: string[];
13
41
  mcp: {
14
42
  required: string[];
15
43
  optional: string[];
16
44
  };
17
- mcp_env: string[];
45
+ mcpEnv: string[];
18
46
  resources: {
19
47
  agents: number;
20
48
  skills: number;
21
49
  extensions: number;
22
50
  prompts: number;
23
51
  };
52
+ packageClosure: {
53
+ extensions: string[];
54
+ prompts: string[];
55
+ };
56
+ resolvedAgents: RecipeAgentInspection[];
24
57
  }
25
- export declare function inspectRecipe(recipeDir: string): RecipeInspection;
58
+ export declare function inspectRecipe(resolvedRecipe: ResolvedRecipe): RecipeInspection;
26
59
  //# sourceMappingURL=inspect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../src/inspect.ts"],"names":[],"mappings":"AAeA;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,GAAG,EAAE;QAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAChD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAiFjE"}
1
+ {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../src/inspect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/E,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,sBAAsB,EAAE,CAAC;IACzC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,sBAAsB,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9D,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,MAAM,CAAC,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC;KAC7C,CAAC;IACF,MAAM,EAAE;QACN,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;QACzB,iBAAiB,CAAC,EAAE;YAClB,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;YAC3B,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,GAAG,EAAE;QAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAChD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,cAAc,EAAE;QACd,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,cAAc,EAAE,qBAAqB,EAAE,CAAC;CACzC;AAmFD,wBAAgB,aAAa,CAAC,cAAc,EAAE,cAAc,GAAG,gBAAgB,CA2E9E"}
package/dist/inspect.js CHANGED
@@ -1,16 +1,84 @@
1
- import { existsSync, readFileSync } from "node:fs";
2
- import { resolve } from "node:path";
3
- import { loadRecipeAgentDefinitions } from "./recipe-agent.js";
4
- import { generatedBindingEnvVars, placeholderEnvVars, recipeMcpLocalConfigPath, recipeMcpLocalExamplePath, } from "./recipe-mcp-config.js";
5
- import { packageResourcePaths, readPiPackageManifest, } from "./recipe-package.js";
1
+ import { generatedBindingEnvVars } from "./recipe-mcp-config.js";
6
2
  import { expectedProviderEnvVars } from "./provider-env.js";
7
- export function inspectRecipe(recipeDir) {
8
- const dir = resolve(recipeDir);
9
- const manifest = readPiPackageManifest(dir);
10
- const definitions = loadRecipeAgentDefinitions(dir);
11
- const agents = [...new Set([...definitions.values()].map((a) => a.name))];
3
+ function agentChain(recipe, agent) {
4
+ const chain = [];
5
+ const seen = new Set();
6
+ let current = agent;
7
+ while (current && !seen.has(current.name)) {
8
+ seen.add(current.name);
9
+ chain.unshift(current);
10
+ current = current.definition.from
11
+ ? recipe.agents.get(current.definition.from)
12
+ : undefined;
13
+ }
14
+ return chain;
15
+ }
16
+ function inspectAgent(recipe, agent, hasSystemPrompt) {
17
+ const chain = agentChain(recipe, agent);
18
+ const fields = [
19
+ "description",
20
+ "model",
21
+ "tools",
22
+ "mcp",
23
+ "skills",
24
+ "subagents",
25
+ "system_instructions",
26
+ ];
27
+ const provenance = Object.fromEntries(fields.flatMap((field) => {
28
+ const sources = chain
29
+ .filter((entry) => entry.definition.declaredFields?.includes(field))
30
+ .map((entry) => entry.name);
31
+ return sources.length > 0 ? [[field, sources]] : [];
32
+ }));
33
+ const instructionSource = provenance.system_instructions?.at(-1);
34
+ const rootTools = [
35
+ ...agent.tools,
36
+ ...(agent.subagents.size > 0 ? ["agent"] : []),
37
+ ];
38
+ return {
39
+ name: agent.name,
40
+ ...(agent.definition.from ? { from: agent.definition.from } : {}),
41
+ declaredFields: [...(agent.definition.declaredFields ?? [])],
42
+ provenance,
43
+ model: {
44
+ name: agent.modelSpec,
45
+ ...(agent.thinkingLevel
46
+ ? { thinkingLevel: agent.thinkingLevel }
47
+ : {}),
48
+ ...(agent.modelConfig ? { config: agent.modelConfig } : {}),
49
+ },
50
+ prompt: {
51
+ base: hasSystemPrompt ? "SYSTEM.md" : "pi",
52
+ ...(agent.definition.systemInstructions && instructionSource
53
+ ? {
54
+ agentInstructions: {
55
+ mode: agent.definition.systemInstructions.mode,
56
+ source: instructionSource,
57
+ },
58
+ }
59
+ : {}),
60
+ },
61
+ tools: {
62
+ authored: [...agent.tools],
63
+ root: rootTools,
64
+ subagent: [...agent.tools],
65
+ },
66
+ skills: [...agent.skillPaths],
67
+ subagents: [...agent.subagents.keys()],
68
+ ...(agent.mcp ? { mcp: agent.mcp } : {}),
69
+ };
70
+ }
71
+ export function inspectRecipe(resolvedRecipe) {
72
+ const manifest = resolvedRecipe.manifest;
73
+ const definitions = [...resolvedRecipe.agents.values()].map((agent) => agent.definition);
74
+ const agents = [...new Set(definitions.map((agent) => agent.name))];
75
+ const uniqueResolvedAgents = [
76
+ ...new Map([...resolvedRecipe.agents.values()].map((agent) => [agent.name, agent])).values(),
77
+ ];
78
+ const extensionPaths = resolvedRecipe.resources.extensions;
79
+ const promptPaths = resolvedRecipe.resources.prompts;
12
80
  const providers = [
13
- ...new Set([...definitions.values()].flatMap((agent) => {
81
+ ...new Set(definitions.flatMap((agent) => {
14
82
  const spec = agent.model?.name;
15
83
  const slash = spec?.indexOf("/") ?? -1;
16
84
  return spec && slash > 0 ? [spec.slice(0, slash)] : [];
@@ -25,46 +93,29 @@ export function inspectRecipe(recipeDir) {
25
93
  const optional = manifest.mcp.servers
26
94
  .filter((server) => !server.required)
27
95
  .map((server) => server.id);
28
- // Binding env vars: prefer the recipe's own binding file (or its example)
29
- // when present; otherwise the generated-binding convention per server.
30
- let mcpEnv;
31
- const bindingSource = [
32
- recipeMcpLocalConfigPath(dir),
33
- recipeMcpLocalExamplePath(dir),
34
- ].find((path) => existsSync(path));
35
- if (bindingSource) {
36
- const content = readFileSync(bindingSource, "utf8");
37
- const parsed = JSON.parse(content);
38
- mcpEnv = [
39
- ...new Set([
40
- ...placeholderEnvVars(content),
41
- ...(parsed.servers ?? []).flatMap((server) => typeof server.oauthClientSecretEnv === "string" &&
42
- server.oauthClientSecretEnv
43
- ? [server.oauthClientSecretEnv]
44
- : []),
45
- ]),
46
- ].sort();
47
- }
48
- else {
49
- mcpEnv = [
50
- ...new Set(manifest.mcp.servers.flatMap((server) => generatedBindingEnvVars(server.id))),
51
- ].sort();
52
- }
96
+ const mcpEnv = [
97
+ ...new Set(manifest.mcp.servers.flatMap((server) => generatedBindingEnvVars(server.id))),
98
+ ].sort();
53
99
  return {
54
100
  name: manifest.name,
55
101
  version: manifest.version,
56
102
  ...(manifest.description ? { description: manifest.description } : {}),
57
103
  agents,
58
104
  providers,
59
- credential_env: credentialEnv,
105
+ credentialEnv,
60
106
  mcp: { required, optional },
61
- mcp_env: mcpEnv,
107
+ mcpEnv,
62
108
  resources: {
63
109
  agents: agents.length,
64
- skills: packageResourcePaths(manifest, "skills").length,
65
- extensions: packageResourcePaths(manifest, "extensions").length,
66
- prompts: packageResourcePaths(manifest, "prompts").length,
110
+ skills: resolvedRecipe.resources.skills.length,
111
+ extensions: extensionPaths.length,
112
+ prompts: promptPaths.length,
113
+ },
114
+ packageClosure: {
115
+ extensions: [...extensionPaths],
116
+ prompts: [...promptPaths],
67
117
  },
118
+ resolvedAgents: uniqueResolvedAgents.map((agent) => inspectAgent(resolvedRecipe, agent, resolvedRecipe.resources.hasSystemPrompt)),
68
119
  };
69
120
  }
70
121
  //# sourceMappingURL=inspect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../src/inspect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../src/inspect.ts"],"names":[],"mappings":"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"}
@@ -193,12 +193,28 @@ export interface AskUserResult {
193
193
  * make progress without surfacing a UI dialog or an interrupt.
194
194
  */
195
195
  export declare function autoResolveInteractions<T>(fn: () => Promise<T>): Promise<T>;
196
- /** @deprecated Use `autoResolveInteractions()` for the explicit behavior. */
197
- export declare function suppressInterruptResume<T>(fn: () => Promise<T>): Promise<T>;
198
196
  /** Ask the user, resolving the best available interaction channel. */
199
197
  export declare function askUser(request: AskUserRequest, opts: AskUserOptions): Promise<AskUserResult>;
200
198
  /** Ask a blocking clarification question without hand-authoring interrupt details. */
201
199
  export declare function askUserQuestion(request: AskUserQuestionRequest, opts: AskUserOptions): Promise<AskUserResult>;
202
200
  /** Request approval without hand-authoring interrupt details or display data. */
203
201
  export declare function askUserApproval(request: AskUserApprovalRequest, opts: AskUserOptions): Promise<AskUserResult>;
202
+ /**
203
+ * Render the byte-exact text a Recipe tool receives for an interaction
204
+ * outcome. Hosts use this when replacing a paused tool result on resume.
205
+ */
206
+ export declare function formatInteractionOutcome(outcome: AskUserOutcome): string;
207
+ /**
208
+ * Host-neutral shape for a response to a paused Recipe interaction.
209
+ * Protocol adapters can pass their resume record without depending on AG-UI
210
+ * or another transport package.
211
+ */
212
+ export interface InteractionResumeResponse {
213
+ status?: string;
214
+ payload?: unknown;
215
+ }
216
+ /**
217
+ * Convert a host resume response into the frozen Recipe interaction envelope.
218
+ */
219
+ export declare function formatInteractionResume(response: InteractionResumeResponse): string;
204
220
  //# sourceMappingURL=interactions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../src/interactions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../src/interactions.ts"],"names":[],"mappings":"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"}
@@ -54,9 +54,8 @@ const UNAVAILABLE_ENVELOPE = "User interaction is unavailable in this session; n
54
54
  // Recipe extensions and their host may resolve separate physical copies of
55
55
  // Recipes (for example, one under the recipe and one under runtime-worker).
56
56
  // Keep the async context process-global so either copy can establish the child
57
- // boundary and every current copy observes it. Retain the pre-rename symbol
58
- // key so old and new package versions interoperate in the same process.
59
- const INTERACTION_AUTO_RESOLUTION_KEY = Symbol.for("@introspection-ai/pi-recipes/interaction-auto-resolution");
57
+ // boundary and every current copy observes it.
58
+ const INTERACTION_AUTO_RESOLUTION_KEY = Symbol.for("@introspection-ai/recipes/interaction-auto-resolution");
60
59
  const interactionGlobals = globalThis;
61
60
  const interactionAutoResolution = interactionGlobals[INTERACTION_AUTO_RESOLUTION_KEY] ??
62
61
  new AsyncLocalStorage();
@@ -71,10 +70,6 @@ interactionGlobals[INTERACTION_AUTO_RESOLUTION_KEY] = interactionAutoResolution;
71
70
  export function autoResolveInteractions(fn) {
72
71
  return interactionAutoResolution.run(true, fn);
73
72
  }
74
- /** @deprecated Use `autoResolveInteractions()` for the explicit behavior. */
75
- export function suppressInterruptResume(fn) {
76
- return autoResolveInteractions(fn);
77
- }
78
73
  /** Ask the user, resolving the best available interaction channel. */
79
74
  export async function askUser(request, opts) {
80
75
  const env = opts.env ?? process.env;
@@ -286,7 +281,11 @@ function localDialogMessage(request) {
286
281
  }
287
282
  return lines.join("\n");
288
283
  }
289
- function envelopeText(outcome) {
284
+ /**
285
+ * Render the byte-exact text a Recipe tool receives for an interaction
286
+ * outcome. Hosts use this when replacing a paused tool result on resume.
287
+ */
288
+ export function formatInteractionOutcome(outcome) {
290
289
  switch (outcome.type) {
291
290
  case "answered":
292
291
  return `Answer: ${outcome.answer}`;
@@ -306,6 +305,38 @@ function envelopeText(outcome) {
306
305
  return UNAVAILABLE_ENVELOPE;
307
306
  }
308
307
  }
308
+ /**
309
+ * Convert a host resume response into the frozen Recipe interaction envelope.
310
+ */
311
+ export function formatInteractionResume(response) {
312
+ if (response.status === "cancelled") {
313
+ return formatInteractionOutcome({ type: "declined" });
314
+ }
315
+ const payload = response.payload &&
316
+ typeof response.payload === "object" &&
317
+ !Array.isArray(response.payload)
318
+ ? response.payload
319
+ : undefined;
320
+ const answer = typeof payload?.answer === "string" ? payload.answer.trim() : "";
321
+ if (answer) {
322
+ return formatInteractionOutcome({ type: "answered", answer });
323
+ }
324
+ if (typeof payload?.approved === "boolean") {
325
+ const feedback = typeof payload.feedback === "string" ? payload.feedback.trim() : "";
326
+ return formatInteractionOutcome(payload.approved
327
+ ? {
328
+ type: "approved",
329
+ ...(feedback ? { feedback } : {}),
330
+ }
331
+ : {
332
+ type: "revision_requested",
333
+ ...(feedback ? { feedback } : {}),
334
+ });
335
+ }
336
+ return response.status
337
+ ? `Interrupt response: ${response.status}`
338
+ : "Interrupt response received.";
339
+ }
309
340
  function normalizeOptions(options) {
310
341
  return (options ?? []).flatMap((option) => {
311
342
  if (typeof option === "string") {
@@ -343,7 +374,7 @@ function interruptDetails(request, outcome) {
343
374
  function finishedResult(request, outcome) {
344
375
  return {
345
376
  outcome,
346
- content: [{ type: "text", text: envelopeText(outcome) }],
377
+ content: [{ type: "text", text: formatInteractionOutcome(outcome) }],
347
378
  details: interruptDetails(request, outcome),
348
379
  };
349
380
  }
@@ -351,7 +382,7 @@ function awaitingUserResult(request, _toolCallId) {
351
382
  const outcome = { type: "awaiting_user" };
352
383
  return {
353
384
  outcome,
354
- content: [{ type: "text", text: envelopeText(outcome) }],
385
+ content: [{ type: "text", text: formatInteractionOutcome(outcome) }],
355
386
  details: interruptDetails(request, outcome),
356
387
  };
357
388
  }