@try-works/dsh-model-as-tool 0.1.2 → 0.3.6

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 (267) hide show
  1. package/bin/dsh-tool-mode-credentials.mjs +20 -0
  2. package/bin/dsh-tool-mode.mjs +202 -0
  3. package/catalog/desert-ant-models.json +693 -693
  4. package/client/client.model-tools.js +592 -0
  5. package/client/index.js +1679 -0
  6. package/lib/adapters/index.d.ts.map +1 -1
  7. package/lib/adapters/index.js +4 -4
  8. package/lib/bindings.d.ts.map +1 -1
  9. package/lib/bindings.js +26 -25
  10. package/lib/capability.d.ts.map +1 -1
  11. package/lib/capability.js +17 -0
  12. package/lib/capture-path.d.ts +97 -0
  13. package/lib/capture-path.d.ts.map +1 -0
  14. package/lib/capture-path.js +152 -0
  15. package/lib/diagnostics.d.ts +166 -0
  16. package/lib/diagnostics.d.ts.map +1 -0
  17. package/lib/diagnostics.js +135 -0
  18. package/lib/extension-dependencies.d.ts +197 -0
  19. package/lib/extension-dependencies.d.ts.map +1 -0
  20. package/lib/extension-dependencies.js +369 -0
  21. package/lib/extension-dispatch.d.ts +117 -0
  22. package/lib/extension-dispatch.d.ts.map +1 -0
  23. package/lib/extension-dispatch.js +124 -0
  24. package/lib/extension-registrar.d.ts +100 -0
  25. package/lib/extension-registrar.d.ts.map +1 -0
  26. package/lib/extension-registrar.js +134 -0
  27. package/lib/extensions-api.d.ts +217 -0
  28. package/lib/extensions-api.d.ts.map +1 -0
  29. package/lib/extensions-api.js +17 -0
  30. package/lib/extensions-remote.d.ts +54 -0
  31. package/lib/extensions-remote.d.ts.map +1 -0
  32. package/lib/extensions-remote.js +66 -0
  33. package/lib/extensions-service.d.ts +334 -0
  34. package/lib/extensions-service.d.ts.map +1 -0
  35. package/lib/extensions-service.js +1351 -0
  36. package/lib/harness-llm.d.ts +138 -0
  37. package/lib/harness-llm.d.ts.map +1 -0
  38. package/lib/harness-llm.js +218 -0
  39. package/lib/harness-serving.d.ts +95 -0
  40. package/lib/harness-serving.d.ts.map +1 -0
  41. package/lib/harness-serving.js +157 -0
  42. package/lib/headless.d.ts +97 -0
  43. package/lib/headless.d.ts.map +1 -0
  44. package/lib/headless.js +349 -0
  45. package/lib/http-acquisition.d.ts +27 -0
  46. package/lib/http-acquisition.d.ts.map +1 -0
  47. package/lib/http-acquisition.js +136 -0
  48. package/lib/index.d.ts +250 -7
  49. package/lib/index.d.ts.map +1 -1
  50. package/lib/index.js +2625 -70
  51. package/lib/invocation-accounting.d.ts +169 -0
  52. package/lib/invocation-accounting.d.ts.map +1 -0
  53. package/lib/invocation-accounting.js +148 -0
  54. package/lib/legacy-migration.d.ts +95 -0
  55. package/lib/legacy-migration.d.ts.map +1 -0
  56. package/lib/legacy-migration.js +429 -0
  57. package/lib/managed-workers.d.ts +151 -0
  58. package/lib/managed-workers.d.ts.map +1 -0
  59. package/lib/managed-workers.js +249 -0
  60. package/lib/mcp/client-grant.d.ts +74 -0
  61. package/lib/mcp/client-grant.d.ts.map +1 -0
  62. package/lib/mcp/client-grant.js +60 -0
  63. package/lib/mcp/credential-cli.d.ts +38 -0
  64. package/lib/mcp/credential-cli.d.ts.map +1 -0
  65. package/lib/mcp/credential-cli.js +148 -0
  66. package/lib/mcp/credential-store.d.ts +143 -0
  67. package/lib/mcp/credential-store.d.ts.map +1 -0
  68. package/lib/mcp/credential-store.js +454 -0
  69. package/lib/mcp/host-binding.d.ts +25 -0
  70. package/lib/mcp/host-binding.d.ts.map +1 -1
  71. package/lib/mcp/host-binding.js +107 -14
  72. package/lib/mcp/http.d.ts +68 -18
  73. package/lib/mcp/http.d.ts.map +1 -1
  74. package/lib/mcp/http.js +390 -62
  75. package/lib/mcp/oauth.d.ts +149 -0
  76. package/lib/mcp/oauth.d.ts.map +1 -0
  77. package/lib/mcp/oauth.js +396 -0
  78. package/lib/mcp/protocol.d.ts +46 -7
  79. package/lib/mcp/protocol.d.ts.map +1 -1
  80. package/lib/mcp/protocol.js +63 -16
  81. package/lib/mcp/rate-limit.d.ts +68 -0
  82. package/lib/mcp/rate-limit.d.ts.map +1 -0
  83. package/lib/mcp/rate-limit.js +114 -0
  84. package/lib/mcp/sdk-v2.d.ts +17 -0
  85. package/lib/mcp/sdk-v2.d.ts.map +1 -0
  86. package/lib/mcp/sdk-v2.js +181 -0
  87. package/lib/mcp/server.d.ts +11 -1
  88. package/lib/mcp/server.d.ts.map +1 -1
  89. package/lib/mcp/server.js +80 -13
  90. package/lib/mcp/stdio.d.ts.map +1 -1
  91. package/lib/mcp/stdio.js +9 -1
  92. package/lib/mcp/subscriptions.d.ts +43 -1
  93. package/lib/mcp/subscriptions.d.ts.map +1 -1
  94. package/lib/mcp/subscriptions.js +90 -9
  95. package/lib/model-qualification.d.ts +192 -0
  96. package/lib/model-qualification.d.ts.map +1 -0
  97. package/lib/model-qualification.js +178 -0
  98. package/lib/planning.d.ts +246 -0
  99. package/lib/planning.d.ts.map +1 -0
  100. package/lib/planning.js +457 -0
  101. package/lib/prepared-assets.d.ts +178 -0
  102. package/lib/prepared-assets.d.ts.map +1 -0
  103. package/lib/prepared-assets.js +286 -0
  104. package/lib/provider-bridge.d.ts +37 -0
  105. package/lib/provider-bridge.d.ts.map +1 -1
  106. package/lib/provider-bridge.js +189 -12
  107. package/lib/ptc-authority.d.ts +140 -0
  108. package/lib/ptc-authority.d.ts.map +1 -0
  109. package/lib/ptc-authority.js +216 -0
  110. package/lib/ptc-runtime.d.ts +156 -0
  111. package/lib/ptc-runtime.d.ts.map +1 -0
  112. package/lib/ptc-runtime.js +191 -0
  113. package/lib/publication.d.ts +2 -1
  114. package/lib/publication.d.ts.map +1 -1
  115. package/lib/publication.js +13 -5
  116. package/lib/receipt.d.ts.map +1 -1
  117. package/lib/receipt.js +8 -0
  118. package/lib/title-proposal.d.ts +194 -0
  119. package/lib/title-proposal.d.ts.map +1 -0
  120. package/lib/title-proposal.js +244 -0
  121. package/lib/tool-mode-run.d.ts +235 -0
  122. package/lib/tool-mode-run.d.ts.map +1 -0
  123. package/lib/tool-mode-run.js +283 -0
  124. package/lib/types.d.ts +3 -1
  125. package/lib/types.d.ts.map +1 -1
  126. package/lib/update-surface.d.ts +79 -0
  127. package/lib/update-surface.d.ts.map +1 -0
  128. package/lib/update-surface.js +224 -0
  129. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/lang-detect.d.ts +16 -0
  130. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/lang-detect.d.ts.map +1 -0
  131. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/lang-detect.js +85 -0
  132. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/standard.d.ts +38 -0
  133. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/standard.d.ts.map +1 -0
  134. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/standard.js +445 -0
  135. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/stt-transcribe.d.ts +20 -0
  136. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/stt-transcribe.d.ts.map +1 -0
  137. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/stt-transcribe.js +112 -0
  138. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/text-embed.d.ts +14 -0
  139. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/text-embed.d.ts.map +1 -0
  140. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/text-embed.js +63 -0
  141. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/text-rerank.d.ts +14 -0
  142. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/text-rerank.d.ts.map +1 -0
  143. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/text-rerank.js +76 -0
  144. package/node_modules/@try-works/tool-mode-contracts/lib/dsh.d.ts +82 -0
  145. package/node_modules/@try-works/tool-mode-contracts/lib/dsh.d.ts.map +1 -0
  146. package/node_modules/@try-works/tool-mode-contracts/lib/dsh.js +274 -0
  147. package/node_modules/@try-works/tool-mode-contracts/lib/index.d.ts +26 -0
  148. package/node_modules/@try-works/tool-mode-contracts/lib/index.d.ts.map +1 -0
  149. package/node_modules/@try-works/tool-mode-contracts/lib/index.js +48 -0
  150. package/node_modules/@try-works/tool-mode-contracts/lib/meta.d.ts +104 -0
  151. package/node_modules/@try-works/tool-mode-contracts/lib/meta.d.ts.map +1 -0
  152. package/node_modules/@try-works/tool-mode-contracts/lib/meta.js +55 -0
  153. package/node_modules/@try-works/tool-mode-contracts/lib/registry.d.ts +107 -0
  154. package/node_modules/@try-works/tool-mode-contracts/lib/registry.d.ts.map +1 -0
  155. package/node_modules/@try-works/tool-mode-contracts/lib/registry.js +246 -0
  156. package/node_modules/@try-works/tool-mode-contracts/package.json +34 -0
  157. package/node_modules/@try-works/tool-mode-extension-sdk/bin/dsh-tool-mode.mjs +20 -0
  158. package/node_modules/@try-works/tool-mode-extension-sdk/lib/cli.d.ts +80 -0
  159. package/node_modules/@try-works/tool-mode-extension-sdk/lib/cli.d.ts.map +1 -0
  160. package/node_modules/@try-works/tool-mode-extension-sdk/lib/cli.js +533 -0
  161. package/node_modules/@try-works/tool-mode-extension-sdk/lib/declarative-recipes.d.ts +83 -0
  162. package/node_modules/@try-works/tool-mode-extension-sdk/lib/declarative-recipes.d.ts.map +1 -0
  163. package/node_modules/@try-works/tool-mode-extension-sdk/lib/declarative-recipes.js +125 -0
  164. package/node_modules/@try-works/tool-mode-extension-sdk/lib/discovery.d.ts +70 -0
  165. package/node_modules/@try-works/tool-mode-extension-sdk/lib/discovery.d.ts.map +1 -0
  166. package/node_modules/@try-works/tool-mode-extension-sdk/lib/discovery.js +201 -0
  167. package/node_modules/@try-works/tool-mode-extension-sdk/lib/errors.d.ts +57 -0
  168. package/node_modules/@try-works/tool-mode-extension-sdk/lib/errors.d.ts.map +1 -0
  169. package/node_modules/@try-works/tool-mode-extension-sdk/lib/errors.js +83 -0
  170. package/node_modules/@try-works/tool-mode-extension-sdk/lib/index.d.ts +31 -0
  171. package/node_modules/@try-works/tool-mode-extension-sdk/lib/index.d.ts.map +1 -0
  172. package/node_modules/@try-works/tool-mode-extension-sdk/lib/index.js +31 -0
  173. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/archive.d.ts +86 -0
  174. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/archive.d.ts.map +1 -0
  175. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/archive.js +185 -0
  176. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/dependencies.d.ts +126 -0
  177. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/dependencies.d.ts.map +1 -0
  178. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/dependencies.js +297 -0
  179. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/lifecycle.d.ts +216 -0
  180. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/lifecycle.d.ts.map +1 -0
  181. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/lifecycle.js +800 -0
  182. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/migration.d.ts +210 -0
  183. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/migration.d.ts.map +1 -0
  184. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/migration.js +368 -0
  185. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/runtime-link.d.ts +63 -0
  186. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/runtime-link.d.ts.map +1 -0
  187. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/runtime-link.js +149 -0
  188. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/source-directory.d.ts +35 -0
  189. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/source-directory.d.ts.map +1 -0
  190. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/source-directory.js +179 -0
  191. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/staged.d.ts +179 -0
  192. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/staged.d.ts.map +1 -0
  193. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/staged.js +235 -0
  194. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/store.d.ts +367 -0
  195. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/store.d.ts.map +1 -0
  196. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/store.js +807 -0
  197. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/update-flow.d.ts +185 -0
  198. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/update-flow.d.ts.map +1 -0
  199. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/update-flow.js +504 -0
  200. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/zip-source.d.ts +17 -0
  201. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/zip-source.d.ts.map +1 -0
  202. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/zip-source.js +80 -0
  203. package/node_modules/@try-works/tool-mode-extension-sdk/lib/load.d.ts +52 -0
  204. package/node_modules/@try-works/tool-mode-extension-sdk/lib/load.d.ts.map +1 -0
  205. package/node_modules/@try-works/tool-mode-extension-sdk/lib/load.js +102 -0
  206. package/node_modules/@try-works/tool-mode-extension-sdk/lib/manifest.d.ts +171 -0
  207. package/node_modules/@try-works/tool-mode-extension-sdk/lib/manifest.d.ts.map +1 -0
  208. package/node_modules/@try-works/tool-mode-extension-sdk/lib/manifest.js +271 -0
  209. package/node_modules/@try-works/tool-mode-extension-sdk/lib/runtime.d.ts +242 -0
  210. package/node_modules/@try-works/tool-mode-extension-sdk/lib/runtime.d.ts.map +1 -0
  211. package/node_modules/@try-works/tool-mode-extension-sdk/lib/runtime.js +58 -0
  212. package/node_modules/@try-works/tool-mode-extension-sdk/lib/state.d.ts +118 -0
  213. package/node_modules/@try-works/tool-mode-extension-sdk/lib/state.d.ts.map +1 -0
  214. package/node_modules/@try-works/tool-mode-extension-sdk/lib/state.js +113 -0
  215. package/node_modules/@try-works/tool-mode-extension-sdk/lib/worker/worker-child.d.ts +2 -0
  216. package/node_modules/@try-works/tool-mode-extension-sdk/lib/worker/worker-child.d.ts.map +1 -0
  217. package/node_modules/@try-works/tool-mode-extension-sdk/lib/worker/worker-child.js +351 -0
  218. package/node_modules/@try-works/tool-mode-extension-sdk/lib/worker.d.ts +150 -0
  219. package/node_modules/@try-works/tool-mode-extension-sdk/lib/worker.d.ts.map +1 -0
  220. package/node_modules/@try-works/tool-mode-extension-sdk/lib/worker.js +670 -0
  221. package/node_modules/@try-works/tool-mode-extension-sdk/package.json +53 -0
  222. package/node_modules/@try-works/tool-mode-extension-sdk/schema/extension-manifest-1.1.0.schema.json +253 -0
  223. package/node_modules/@try-works/tool-mode-recipes/bin/tool-mode-recipe.mjs +15 -0
  224. package/node_modules/@try-works/tool-mode-recipes/lib/broker.d.ts +427 -0
  225. package/node_modules/@try-works/tool-mode-recipes/lib/broker.d.ts.map +1 -0
  226. package/node_modules/@try-works/tool-mode-recipes/lib/broker.js +592 -0
  227. package/node_modules/@try-works/tool-mode-recipes/lib/cli.d.ts +60 -0
  228. package/node_modules/@try-works/tool-mode-recipes/lib/cli.d.ts.map +1 -0
  229. package/node_modules/@try-works/tool-mode-recipes/lib/cli.js +936 -0
  230. package/node_modules/@try-works/tool-mode-recipes/lib/dsh-adapter.d.ts +237 -0
  231. package/node_modules/@try-works/tool-mode-recipes/lib/dsh-adapter.d.ts.map +1 -0
  232. package/node_modules/@try-works/tool-mode-recipes/lib/dsh-adapter.js +200 -0
  233. package/node_modules/@try-works/tool-mode-recipes/lib/fixture-provider.d.ts +85 -0
  234. package/node_modules/@try-works/tool-mode-recipes/lib/fixture-provider.d.ts.map +1 -0
  235. package/node_modules/@try-works/tool-mode-recipes/lib/fixture-provider.js +176 -0
  236. package/node_modules/@try-works/tool-mode-recipes/lib/images.d.ts +105 -0
  237. package/node_modules/@try-works/tool-mode-recipes/lib/images.d.ts.map +1 -0
  238. package/node_modules/@try-works/tool-mode-recipes/lib/images.js +129 -0
  239. package/node_modules/@try-works/tool-mode-recipes/lib/index.d.ts +25 -0
  240. package/node_modules/@try-works/tool-mode-recipes/lib/index.d.ts.map +1 -0
  241. package/node_modules/@try-works/tool-mode-recipes/lib/index.js +25 -0
  242. package/node_modules/@try-works/tool-mode-recipes/lib/recipe-format.d.ts +325 -0
  243. package/node_modules/@try-works/tool-mode-recipes/lib/recipe-format.d.ts.map +1 -0
  244. package/node_modules/@try-works/tool-mode-recipes/lib/recipe-format.js +1310 -0
  245. package/node_modules/@try-works/tool-mode-recipes/lib/templates.d.ts +51 -0
  246. package/node_modules/@try-works/tool-mode-recipes/lib/templates.d.ts.map +1 -0
  247. package/node_modules/@try-works/tool-mode-recipes/lib/templates.js +310 -0
  248. package/node_modules/@try-works/tool-mode-recipes/lib/titles.d.ts +227 -0
  249. package/node_modules/@try-works/tool-mode-recipes/lib/titles.d.ts.map +1 -0
  250. package/node_modules/@try-works/tool-mode-recipes/lib/titles.js +407 -0
  251. package/node_modules/@try-works/tool-mode-recipes/package.json +56 -0
  252. package/node_modules/@try-works/tool-mode-recipes/recipes/describe-image.json +38 -0
  253. package/node_modules/@try-works/tool-mode-recipes/recipes/text-title.json +45 -0
  254. package/node_modules/@try-works/tool-mode-recipes/schema/harness-model-recipe.schema.json +273 -0
  255. package/package.json +50 -17
  256. package/remote/spec.mjs +439 -0
  257. package/remote/typert.host.mjs +14 -0
  258. package/remote/typert.remote-client.mjs +16 -0
  259. package/lib/adapters/tongue.d.ts +0 -31
  260. package/lib/adapters/tongue.d.ts.map +0 -1
  261. package/lib/adapters/tongue.js +0 -93
  262. package/lib/adapters/voz.d.ts +0 -28
  263. package/lib/adapters/voz.d.ts.map +0 -1
  264. package/lib/adapters/voz.js +0 -102
  265. /package/{lib → node_modules/@try-works/tool-mode-extension-sdk/lib}/licensing.d.ts +0 -0
  266. /package/{lib → node_modules/@try-works/tool-mode-extension-sdk/lib}/licensing.d.ts.map +0 -0
  267. /package/{lib → node_modules/@try-works/tool-mode-extension-sdk/lib}/licensing.js +0 -0
@@ -0,0 +1,325 @@
1
+ /**
2
+ * The declarative recipe package format (RCP-01, RCP-02, RCP-03, RCP-05, RCP-06).
3
+ *
4
+ * A recipe is TRUSTED, DATA-ONLY: a static instruction string plus typed input
5
+ * bindings. It is deliberately neither a PTC program nor an autonomous subagent. It has
6
+ * no statements, no expressions, no imports and no filesystem access, because the moment
7
+ * a recipe can COMPUTE something it needs an interpreter with a threat model instead of
8
+ * a validator with an allow-list — and the threat model is the expensive part.
9
+ *
10
+ * Every rule below exists to keep that true against a recipe that is trying not to be
11
+ * data, and each one names what it prevents:
12
+ *
13
+ * - **Unknown keys are refused, not ignored.** A key this host does not implement is
14
+ * either a typo or a field that means something elsewhere; silently dropping it runs a
15
+ * recipe that is not the one the author wrote (RCP-02, RCP-06).
16
+ * - **`tools`, `messages`, `history` and `conversation` are refused BY NAME**, with a
17
+ * reason that says a recipe is data and not a program. HLM-05 forbids inheriting the
18
+ * parent's conversation, system prompt, tools, skills, attachments or memory, so a
19
+ * recipe that asks for any of them is refused here rather than quietly starved of them
20
+ * at dispatch time.
21
+ * - **Executable template syntax is refused.** `{{name}}` is a binding placeholder and
22
+ * nothing else; `${...}` and `<%...%>` are template CODE, and RCP-02 forbids it.
23
+ * - **A placeholder that names no declared input is refused** (RCP-03: an unbound
24
+ * pointer), because a template referring to something the caller can never supply is a
25
+ * recipe that cannot be satisfied.
26
+ * - **The limits are RES-10's initial per-leaf maxima**, asserted individually: 1024
27
+ * output tokens and two image inputs. A recipe may lower a limit, never raise it.
28
+ * - **The parsed recipe is deep-frozen**, so a caller holding it cannot widen the limits
29
+ * or rewrite the instructions it was authorized with (RCP-05, RCP-06).
30
+ *
31
+ * Bindings are a NAME-KEYED map rather than the specification's JSON Pointers on
32
+ * purpose. A pointer is a small language — `/a/b/0`, `~0` escapes, `-`, traversal past a
33
+ * reserved member — and RCP-03 has to reject all of it. A closed map of identifier-named
34
+ * inputs has no pointer to traverse, so the whole class of pointer abuse is absent by
35
+ * construction rather than by check.
36
+ *
37
+ * @module @try-works/tool-mode-recipes/recipe-format
38
+ */
39
+ /**
40
+ * RES-10's initial maximum output tokens for one leaf invocation.
41
+ *
42
+ * Restated here rather than imported: this package must not depend on the host package,
43
+ * because a declarative recipe package is loaded by the host and not the other way
44
+ * around (EXT-02, ARCH-02). The number is asserted in the tests so a drift between the
45
+ * two copies is a failing test rather than a silent budget change.
46
+ */
47
+ export declare const INITIAL_MAX_OUTPUT_TOKENS = 1024;
48
+ /** RES-10's initial maximum image inputs for one leaf invocation. */
49
+ export declare const INITIAL_MAX_IMAGE_INPUTS = 2;
50
+ /** The only keys a recipe may carry at the top level. */
51
+ export declare const RECIPE_TOP_LEVEL_KEYS: readonly string[];
52
+ /**
53
+ * Key names that are refused wherever they appear, at any depth.
54
+ *
55
+ * These are the fields through which a recipe would stop being data and start being a
56
+ * program with access to the parent agent's context. They are checked BEFORE the
57
+ * allow-list so the failure names the real problem — "a recipe is data, not a program" —
58
+ * instead of reporting a generic unknown key.
59
+ */
60
+ export declare const FORBIDDEN_RECIPE_KEYS: readonly string[];
61
+ /**
62
+ * Property names that must never appear, because they reach past data into the object
63
+ * model (RCP-03: reserved prototype/member abuse).
64
+ */
65
+ export declare const RESERVED_RECIPE_KEYS: readonly string[];
66
+ /** The input kinds a recipe may declare. */
67
+ export type RecipeInputKind = 'string' | 'integer' | 'number' | 'boolean' | 'image';
68
+ /**
69
+ * One declarative input binding.
70
+ *
71
+ * The vocabulary is JSON-Schema-ish so the same declaration can be projected into a real
72
+ * JSON Schema for DSH registration ({@link inputSchemaFor}) and into a tool contract,
73
+ * with no second description of the input to drift from this one.
74
+ */
75
+ export interface RecipeInputDeclaration {
76
+ /** The binding kind. `image` is this format's typed media binding, not a JSON Schema type. */
77
+ readonly type: RecipeInputKind;
78
+ /** Whether a caller must supply it. Defaults to false. */
79
+ readonly required: boolean;
80
+ /** What the input is for. Bound into nothing; documentation for the author and the caller. */
81
+ readonly description?: string;
82
+ /** Minimum characters, for `string`. */
83
+ readonly minLength?: number;
84
+ /** Maximum characters, for `string`. */
85
+ readonly maxLength?: number;
86
+ /** Minimum value, for `integer` and `number`. */
87
+ readonly minimum?: number;
88
+ /** Maximum value, for `integer` and `number`. */
89
+ readonly maximum?: number;
90
+ /** Admitted values, for the scalar kinds. */
91
+ readonly enum?: readonly (string | number | boolean)[];
92
+ /** The value used when a caller omits the field. */
93
+ readonly default?: string | number | boolean;
94
+ /** Admitted media types, for `image`. */
95
+ readonly mediaTypes?: readonly string[];
96
+ /** Maximum bytes of one image, for `image`. */
97
+ readonly maxBytes?: number;
98
+ /**
99
+ * Set only by a CANONICAL RCP-02 `inputBindings` entry of kind `"json"`: the
100
+ * caller supplies a data-only object or array, which is JSON-serialized into
101
+ * the bound string (RCP-03's "JSON serialization" binding).
102
+ */
103
+ readonly jsonSerialized?: true;
104
+ }
105
+ /** The recipe's declared input map, keyed by input name. */
106
+ export type RecipeInputMap = Readonly<Record<string, RecipeInputDeclaration>>;
107
+ /** The tool identity a recipe implements (RCP-06). */
108
+ export interface RecipeToolIdentity {
109
+ /** The tool name, e.g. `text_title`. */
110
+ readonly name: string;
111
+ /** The contract identity, e.g. `text.title`. */
112
+ readonly contractId: string;
113
+ }
114
+ /**
115
+ * What a recipe declares about recording and destinations.
116
+ *
117
+ * Both are DECLARATIONS, not grants: the host's policy decides whether the invocation
118
+ * actually runs, and `record: false` under a host that requires recording is refused
119
+ * rather than silently dropped (HLM-09).
120
+ */
121
+ export interface RecipePolicy {
122
+ /** Whether the invocation's prepared request must be journaled. */
123
+ readonly record: boolean;
124
+ /** Whether a remote destination is acceptable to the author. */
125
+ readonly allowRemote: boolean;
126
+ }
127
+ /** A validated, frozen recipe. */
128
+ export interface RecipeManifest {
129
+ /** Recipe identity, e.g. `text-title`. */
130
+ readonly id: string;
131
+ /** Semantic version (RCP-06: a prompt change is a version change). */
132
+ readonly version: string;
133
+ /** A real sentence describing what the recipe does. */
134
+ readonly description: string;
135
+ /** The tool this recipe implements. */
136
+ readonly tool: RecipeToolIdentity;
137
+ /** The declared inputs, in declaration order. */
138
+ readonly inputs: RecipeInputMap;
139
+ /** The static instruction text, with `{{name}}` binding placeholders. */
140
+ readonly promptTemplate: string;
141
+ /** The recipe's own output-token ceiling. Never above RES-10's initial maximum. */
142
+ readonly maxOutputTokens: number;
143
+ /** The image inputs this recipe permits. `max` is never above RES-10's initial maximum. */
144
+ readonly imageInputs: {
145
+ readonly max: number;
146
+ };
147
+ /** Recording and destination declarations. */
148
+ readonly policy: RecipePolicy;
149
+ /**
150
+ * Present only when a CANONICAL recipe selects `approved-profile` (RCP-05):
151
+ * the logical profile name the operator binds; unresolved bindings keep the
152
+ * tool unavailable with `EXECUTOR_NOT_CONFIGURED`.
153
+ */
154
+ readonly modelSelection?: {
155
+ readonly strategy: 'approved-profile';
156
+ readonly profile: string;
157
+ };
158
+ /**
159
+ * Present only when a CANONICAL recipe declares `response` (RCP-04). `json`
160
+ * mode is prompt-enforced and locally validated in this build — no provider
161
+ * structured-output negotiation — which the describe metadata discloses.
162
+ */
163
+ readonly response?: {
164
+ readonly mode: 'text' | 'json';
165
+ readonly field: string;
166
+ };
167
+ }
168
+ /** Errors this format reports, using RCP-11's vocabulary where it has a code. */
169
+ export type RecipeErrorCode =
170
+ /** The recipe is not a valid recipe. */
171
+ 'INVALID_RECIPE'
172
+ /** The supplied arguments do not satisfy the recipe's declared inputs. */
173
+ | 'RECIPE_BINDING_ERROR'
174
+ /** The supplied bindings exceed a budget RES-10 states. */
175
+ | 'MODEL_BUDGET_EXCEEDED'
176
+ /** A binding carries a media type the recipe does not admit. */
177
+ | 'UNSUPPORTED_MODALITY';
178
+ /**
179
+ * Render one named error.
180
+ *
181
+ * The code prefix is what a caller switches on; the sentence after it is what a human
182
+ * reads. Both are needed: a code alone does not say which key was wrong, and a sentence
183
+ * alone cannot be matched on without matching prose.
184
+ * @param code - the error code.
185
+ * @param message - the specific problem, naming the offending key or field.
186
+ * @returns the rendered error.
187
+ */
188
+ export declare function formatRecipeError(code: RecipeErrorCode, message: string): string;
189
+ /**
190
+ * The code of a rendered error.
191
+ * @param error - a rendered error.
192
+ * @returns the code, or the whole string when it carries no prefix.
193
+ */
194
+ export declare function errorCodeOf(error: string): string;
195
+ /** What a bound argument may be: a scalar, or a typed image reference. */
196
+ export type RecipeValue = string | number | boolean | RecipeImageValue;
197
+ /**
198
+ * A bound image: the media type plus the ACTUAL bytes.
199
+ *
200
+ * Bytes, not a path and not a URL. A path would make the provider call depend on a
201
+ * filesystem read that happens outside the validated request, and a URL would make it
202
+ * depend on the network; both break the property that the request is fully described by
203
+ * the recipe and the bound inputs (HLM-05, RCP-03).
204
+ */
205
+ export interface RecipeImageValue {
206
+ /** The image's media type, e.g. `image/png`. */
207
+ readonly mediaType: string;
208
+ /** The image bytes. */
209
+ readonly bytes: Uint8Array;
210
+ }
211
+ /** The result of parsing a recipe. */
212
+ export type RecipeParseResult = {
213
+ readonly ok: true;
214
+ readonly recipe: RecipeManifest;
215
+ } | {
216
+ readonly ok: false;
217
+ readonly errors: readonly string[];
218
+ };
219
+ /** The result of binding caller arguments to a recipe's declared inputs. */
220
+ export type RecipeBindingResult = {
221
+ readonly ok: true;
222
+ readonly values: Readonly<Record<string, RecipeValue>>;
223
+ } | {
224
+ readonly ok: false;
225
+ readonly errors: readonly string[];
226
+ };
227
+ /** Options that tie a recipe to the tool whose implementation it claims to be. */
228
+ export interface ParseRecipeOptions {
229
+ /** The tool name the recipe is being loaded as. A mismatch is refused (RCP-06). */
230
+ readonly expectedToolName?: string;
231
+ /** The contract identity the recipe is being loaded as. A mismatch is refused. */
232
+ readonly expectedContractId?: string;
233
+ }
234
+ /**
235
+ * Parse and validate a raw recipe.
236
+ *
237
+ * Every violation is collected and reported — one error per problem — because fixing a
238
+ * recipe one error per run is how an author gives up.
239
+ * @param raw - the parsed JSON of a recipe file, or any candidate value.
240
+ * @param options - the tool identity the recipe is being loaded as.
241
+ * @returns the frozen recipe, or every reason it is not one.
242
+ */
243
+ export declare function parseRecipe(raw: unknown, options?: ParseRecipeOptions): RecipeParseResult;
244
+ /**
245
+ * Serialize a frozen recipe as the CANONICAL RCP-02 document.
246
+ *
247
+ * The output is what pack/create emit and what the schema's canonical branch
248
+ * validates: `schemaVersion`/`kind`/`modelSelection`/`instructions`/
249
+ * `inputBindings`/`response`/`limits`/`context` plus the identity keys
250
+ * (id/version/description/tool). The richer legacy constraint fields are
251
+ * re-emitted on the bindings, so canonical → parse → canonical is LOSSLESS.
252
+ * `modelSelection.strategy` defaults to `caller-model` with the derived
253
+ * requires; an `approved-profile` selection is preserved verbatim.
254
+ *
255
+ * @param recipe - the frozen recipe.
256
+ * @returns the canonical document.
257
+ */
258
+ export declare function toCanonicalRecipe(recipe: RecipeManifest): Record<string, unknown>;
259
+ /**
260
+ * Bind caller arguments to a recipe's declared inputs.
261
+ *
262
+ * Every problem is reported, not the first: an author fixing a binding one field per run
263
+ * is an author who ships the field they gave up on. Nothing is coerced — a string "3" is
264
+ * not the integer 3, because a silently coerced binding is a binding the caller did not
265
+ * supply.
266
+ * @param recipe - the recipe whose inputs are being bound.
267
+ * @param args - the caller's arguments.
268
+ * @returns the bound values, or every reason they do not satisfy the recipe.
269
+ */
270
+ export declare function validateRecipeInputs(recipe: RecipeManifest, args: unknown): RecipeBindingResult;
271
+ /**
272
+ * Render the prompt from validated bindings (RCP-02, RCP-03).
273
+ *
274
+ * A line that binds an absent optional input is DROPPED, whole. RCP-03 says a missing
275
+ * optional focus omits that user content rather than stringifying `undefined`, and in a
276
+ * flat string the only way to omit a labelled section is to omit its line.
277
+ *
278
+ * A bound image contributes a bounded REFERENCE — its media type and byte count — never
279
+ * its bytes: MOD-06 forbids concatenating raw byte data into text.
280
+ * @param recipe - the recipe to render.
281
+ * @param values - bindings from {@link validateRecipeInputs}.
282
+ * @returns the prompt text.
283
+ * @throws Error when a required binding has no value, which means the caller skipped
284
+ * validation; the broker always validates first.
285
+ */
286
+ export declare function renderPrompt(recipe: RecipeManifest, values: Readonly<Record<string, RecipeValue>>): string;
287
+ /**
288
+ * The textual reference a bound image contributes to a prompt (HLM-09, MOD-06).
289
+ * @param image - the bound image.
290
+ * @returns a bounded reference naming the media type and size.
291
+ */
292
+ export declare function imageReference(image: RecipeImageValue): string;
293
+ /**
294
+ * Project a recipe's input declarations into a JSON Schema (DECL-01).
295
+ *
296
+ * This is what makes one declaration serve three surfaces: the tool contract, the DSH
297
+ * parameter projection and the MCP schema all read this object, so there is no second
298
+ * description of the inputs to drift from the recipe. The schema is closed, because an
299
+ * open object would advertise that a caller may add inputs the recipe does not have.
300
+ * @param recipe - the recipe to project.
301
+ * @returns a JSON Schema object for the tool's arguments.
302
+ */
303
+ export declare function inputSchemaFor(recipe: RecipeManifest): Record<string, unknown>;
304
+ /** The parts of the host's invocation policy a description must state (RCP-10). */
305
+ export interface DescribedPolicy {
306
+ /** Whether a remote destination is permitted for this invocation. */
307
+ readonly remoteDestinations: boolean;
308
+ /** The host's output-token ceiling. */
309
+ readonly outputTokens: number;
310
+ /** The host's image-input ceiling. */
311
+ readonly imageInputs: number;
312
+ }
313
+ /**
314
+ * Describe a recipe and its actual executor possibilities (RCP-10).
315
+ *
316
+ * The description states what the invocation will really do — the effective token
317
+ * ceiling after narrowing, whether a remote destination is possible at all, and that no
318
+ * parent context is supplied — because discovery that describes the recipe's wishes
319
+ * rather than the host's limits tells a caller it can do something it cannot.
320
+ * @param recipe - the recipe to describe.
321
+ * @param policy - the host policy in force.
322
+ * @returns a bounded, honest description.
323
+ */
324
+ export declare function describeRecipe(recipe: RecipeManifest, policy: DescribedPolicy): string;
325
+ //# sourceMappingURL=recipe-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipe-format.d.ts","sourceRoot":"","sources":["../src/recipe-format.ts"],"names":[],"mappings":"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"}