@cueframe/kernel 0.0.1 → 0.1.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 (432) hide show
  1. package/LICENSE +661 -0
  2. package/dist/_members/account-model/testing/conversationStoreContract.d.ts +1 -1
  3. package/dist/_members/authoring/providers/resourceApi.d.ts +1 -1
  4. package/dist/_members/authoring/transpileComponent.d.ts +1 -1
  5. package/dist/_members/cloud-import/CloudImportService.d.ts +35 -0
  6. package/dist/_members/cloud-import/ImportProvider.d.ts +73 -0
  7. package/dist/_members/cloud-import/MediaItemPreprocessor.d.ts +27 -0
  8. package/dist/_members/cloud-import/cloudConfig.d.ts +23 -0
  9. package/dist/_members/cloud-import/index.d.ts +9 -0
  10. package/dist/_members/cloud-import/multipartUpload.d.ts +12 -0
  11. package/dist/_members/composition/ops/compositionOps.d.ts +2 -1
  12. package/dist/_members/composition/ops/types.d.ts +1 -1
  13. package/dist/_members/composition/projection/behind-readiness.d.ts +127 -0
  14. package/dist/_members/composition/projection/index.d.ts +2 -0
  15. package/dist/_members/composition/projection/reframe-readiness.d.ts +156 -0
  16. package/dist/_members/composition/timeline/placement.d.ts +1 -1
  17. package/dist/_members/composition/validators/composition.d.ts +43 -26
  18. package/dist/_members/composition/validators/render.d.ts +32 -0
  19. package/dist/_members/composition-ops/index.d.ts +1 -1
  20. package/dist/_members/composition-ops/opRecorder.d.ts +1 -1
  21. package/dist/_members/convex-api/api.d.ts +5 -0
  22. package/dist/_members/convex-api/dataModel.d.ts +6 -0
  23. package/dist/_members/core/render/compositionRender.d.ts +17 -1
  24. package/dist/_members/core/render/exportSettings.d.ts +1 -1
  25. package/dist/_members/core/render/types.d.ts +31 -0
  26. package/dist/_members/mcp/curation.d.ts +1 -1
  27. package/dist/_members/plane/conformance.d.ts +1 -1
  28. package/dist/_members/render-harness/localRender.d.ts +1 -1
  29. package/dist/animate.js +828 -79187
  30. package/dist/authoring/build-tools.js +8 -11
  31. package/dist/authoring/context.js +5 -5
  32. package/dist/authoring/models.js +1 -2
  33. package/dist/authoring/prompts.js +1 -1
  34. package/dist/authoring/tools.js +7 -7
  35. package/dist/authoring/transpileComponent.js +3 -2220
  36. package/dist/authoring.js +30 -30
  37. package/dist/brand-derivation.js +1 -1
  38. package/dist/chunk-6IU2UQI5.js +107 -0
  39. package/dist/{chunk-5I7VDCAC.js → chunk-7FO3ZJ43.js} +4 -1
  40. package/dist/{chunk-N67PDTKQ.js → chunk-ABL557OT.js} +1 -1
  41. package/dist/{chunk-MC5DLSEV.js → chunk-AP6ZIVAV.js} +15 -15
  42. package/dist/{chunk-QLAQHR3L.js → chunk-AQBREB5O.js} +1 -1
  43. package/dist/{chunk-DSNG6WLU.js → chunk-AYVJXDLB.js} +1 -4
  44. package/dist/{chunk-6CMVBTTP.js → chunk-DK2ODBNT.js} +19 -9
  45. package/dist/chunk-DSMLHYJ4.js +82 -0
  46. package/dist/{chunk-BRKJKB33.js → chunk-FYZVH3MC.js} +1 -1
  47. package/dist/{chunk-MVEE6HEC.js → chunk-GA23TRNR.js} +5 -7
  48. package/dist/chunk-HCCBDJLW.js +68 -0
  49. package/dist/{chunk-JRQVPFLF.js → chunk-HY3RIEZW.js} +1 -1
  50. package/dist/{chunk-OIRUO5P7.js → chunk-JJ6XD7NG.js} +152 -2
  51. package/dist/{_members/primitives/chunk-IDAL6G3Y.js → chunk-JQMPHKLU.js} +19 -27
  52. package/dist/{chunk-G3PBH53P.js → chunk-MBCXCJOE.js} +1 -1
  53. package/dist/{chunk-UEI3NLNK.js → chunk-MHOQTPOB.js} +1 -4
  54. package/dist/{chunk-37NJ27UU.js → chunk-OCFDUCF4.js} +3 -0
  55. package/dist/{chunk-WZTTZHNR.js → chunk-OLFOPQCA.js} +12 -9
  56. package/dist/{chunk-P43IE4WB.js → chunk-P727GZVO.js} +2 -4
  57. package/dist/{chunk-52AHXNKM.js → chunk-PDYO3DOJ.js} +5 -5
  58. package/dist/{chunk-S3P5BFFL.js → chunk-PMY24FUD.js} +2 -4
  59. package/dist/{chunk-ATAF24QG.js → chunk-PODIYN2K.js} +10 -3
  60. package/dist/chunk-RF7U3SCL.js +606 -0
  61. package/dist/{chunk-JD77Y2WM.js → chunk-SW336CJP.js} +1 -4
  62. package/dist/{chunk-TULRCY6U.js → chunk-TOJEXFXL.js} +1 -1
  63. package/dist/{chunk-ELLSET2N.js → chunk-UHGSZZDI.js} +3 -6
  64. package/dist/{chunk-M3I5LMAB.js → chunk-UY4SWJVE.js} +1 -1
  65. package/dist/{chunk-6QJ3V3VS.js → chunk-YX2GSJK7.js} +1 -1
  66. package/dist/chunk-ZT7MHRQU.js +104 -0
  67. package/dist/{chunk-NV4I6GJV.js → chunk-ZWMV6DD2.js} +27 -4
  68. package/dist/cloud-import/multipart.d.ts +1 -0
  69. package/dist/cloud-import/multipart.js +8 -0
  70. package/dist/cloud-import.d.ts +1 -0
  71. package/dist/cloud-import.js +234 -0
  72. package/dist/compose/renderer.js +19 -22
  73. package/dist/compose.js +19 -22
  74. package/dist/composition/graphics-plan.js +3 -3
  75. package/dist/composition/ops.js +4 -4
  76. package/dist/composition/primitive-catalog.js +1 -1
  77. package/dist/composition/projection.js +21 -5
  78. package/dist/composition/validators.js +6 -4
  79. package/dist/composition-ops.js +15 -13
  80. package/dist/composition.js +26 -8
  81. package/dist/{context-CEAKQ5T7.js → context-YWUZDG5X.js} +5 -5
  82. package/dist/convex-api/dataModel.d.ts +1 -0
  83. package/dist/convex-api/dataModel.js +0 -0
  84. package/dist/convex-api.d.ts +1 -0
  85. package/dist/convex-api.js +8 -0
  86. package/dist/core/render.js +3 -3
  87. package/dist/core/select.js +2 -2
  88. package/dist/core.js +3 -3
  89. package/dist/errors.js +1 -1
  90. package/dist/mcp/adapter.js +2 -5
  91. package/dist/mcp/server.js +1 -2
  92. package/dist/mcp.js +2 -95
  93. package/dist/media-model/media-kind.js +9 -98
  94. package/dist/media-model/testing.js +1071 -718
  95. package/dist/nle-export/server.js +328 -130
  96. package/dist/nle-export/xml.js +5 -22799
  97. package/dist/nle-export.js +20 -22
  98. package/dist/primitives/backgrounds.js +2 -3
  99. package/dist/primitives/captions.js +4 -243
  100. package/dist/primitives/effects.js +2 -3
  101. package/dist/primitives/hero-text.js +2 -3
  102. package/dist/primitives/layouts.js +2 -3
  103. package/dist/primitives/lib/index.js +8 -10
  104. package/dist/primitives/lib/preview.js +1 -2
  105. package/dist/primitives/lib/schema.js +1 -2
  106. package/dist/primitives/lib/text/fitText.js +1 -2
  107. package/dist/primitives/lib.js +8 -10
  108. package/dist/primitives/scenes.js +1 -2
  109. package/dist/primitives/text.js +2 -3
  110. package/dist/primitives/ui-blocks.js +4 -5
  111. package/dist/primitives.js +19 -21
  112. package/package.json +125 -16
  113. package/dist/TextureLoader-UQOFUSAP.js +0 -422
  114. package/dist/VideoTexture-AQWSPIJG.js +0 -62
  115. package/dist/_members/account-model/index.js +0 -4
  116. package/dist/_members/account-model/testing/conversationStoreContract.js +0 -168
  117. package/dist/_members/account-model/testing/index.js +0 -7
  118. package/dist/_members/account-model/testing/restorePointStoreContract.js +0 -69
  119. package/dist/_members/account-model/types/index.js +0 -1
  120. package/dist/_members/account-model/validators/contextFile.js +0 -18
  121. package/dist/_members/account-model/validators/conversation.js +0 -95
  122. package/dist/_members/account-model/validators/dashboardInsight.js +0 -16
  123. package/dist/_members/account-model/validators/index.js +0 -7
  124. package/dist/_members/account-model/validators/sessionToken.js +0 -49
  125. package/dist/_members/account-model/validators/uploadToken.js +0 -16
  126. package/dist/_members/account-model/validators/userSettings.js +0 -12
  127. package/dist/_members/account-model/validators/workingComposition.js +0 -20
  128. package/dist/_members/brand-derivation/constants.js +0 -20
  129. package/dist/_members/brand-derivation/contrastSafe.js +0 -114
  130. package/dist/_members/brand-derivation/index.js +0 -1
  131. package/dist/_members/composition/audio/audioMix.js +0 -61
  132. package/dist/_members/composition/audio/index.js +0 -5
  133. package/dist/_members/composition/audio/mixStaging.js +0 -195
  134. package/dist/_members/composition/audio/musicPack.generated.js +0 -136
  135. package/dist/_members/composition/audio/musicPack.js +0 -36
  136. package/dist/_members/composition/audio/pack.generated.js +0 -603
  137. package/dist/_members/composition/audio/pack.js +0 -48
  138. package/dist/_members/composition/audio/palette.js +0 -134
  139. package/dist/_members/composition/autozoom/index.js +0 -83
  140. package/dist/_members/composition/brand-kit.js +0 -45
  141. package/dist/_members/composition/brief/contract.js +0 -209
  142. package/dist/_members/composition/color-grade.js +0 -80
  143. package/dist/_members/composition/depth.js +0 -8
  144. package/dist/_members/composition/fixtures/index.js +0 -143
  145. package/dist/_members/composition/fixtures/vaayaErrored.d.ts +0 -25
  146. package/dist/_members/composition/fixtures/vaayaErrored.js +0 -203
  147. package/dist/_members/composition/fonts.js +0 -162
  148. package/dist/_members/composition/graphics-plan/compile.js +0 -221
  149. package/dist/_members/composition/graphics-plan/index.js +0 -10
  150. package/dist/_members/composition/graphics-plan/instantiateMotif.js +0 -44
  151. package/dist/_members/composition/graphics-plan/motion.js +0 -66
  152. package/dist/_members/composition/graphics-plan/schemas.js +0 -261
  153. package/dist/_members/composition/graphics-plan/solve.js +0 -145
  154. package/dist/_members/composition/index.js +0 -5
  155. package/dist/_members/composition/invariants/clipPlacement.js +0 -69
  156. package/dist/_members/composition/invariants/composition.js +0 -28
  157. package/dist/_members/composition/invariants/errors.js +0 -10
  158. package/dist/_members/composition/invariants/etag.js +0 -38
  159. package/dist/_members/composition/invariants/ids.js +0 -33
  160. package/dist/_members/composition/invariants/index.js +0 -9
  161. package/dist/_members/composition/invariants/keyframes.js +0 -45
  162. package/dist/_members/composition/invariants/markers.js +0 -29
  163. package/dist/_members/composition/invariants/time.js +0 -20
  164. package/dist/_members/composition/invariants/tracks.js +0 -304
  165. package/dist/_members/composition/ops/compositionOps.js +0 -1056
  166. package/dist/_members/composition/ops/headlessStore.js +0 -94
  167. package/dist/_members/composition/ops/index.js +0 -4
  168. package/dist/_members/composition/ops/selectors.js +0 -118
  169. package/dist/_members/composition/ops/timeline-word.js +0 -1
  170. package/dist/_members/composition/ops/transcript.js +0 -77
  171. package/dist/_members/composition/ops/types.js +0 -16
  172. package/dist/_members/composition/primitive-catalog/catalogQuery.js +0 -150
  173. package/dist/_members/composition/primitive-catalog/disabled.js +0 -32
  174. package/dist/_members/composition/primitive-catalog/generated/meta.js +0 -15161
  175. package/dist/_members/composition/primitive-catalog/index.js +0 -46
  176. package/dist/_members/composition/primitive-catalog/paramValidation.js +0 -231
  177. package/dist/_members/composition/primitive-catalog/projection.js +0 -164
  178. package/dist/_members/composition/primitive-catalog/types.js +0 -14
  179. package/dist/_members/composition/projection/behind-placement.js +0 -62
  180. package/dist/_members/composition/projection/brandKit.js +0 -482
  181. package/dist/_members/composition/projection/cardTokens.js +0 -209
  182. package/dist/_members/composition/projection/composition-floor.js +0 -582
  183. package/dist/_members/composition/projection/cropProjection.js +0 -257
  184. package/dist/_members/composition/projection/index.js +0 -7
  185. package/dist/_members/composition/projection/occlusion-budget.js +0 -104
  186. package/dist/_members/composition/projection/safe-zones.js +0 -99
  187. package/dist/_members/composition/reframe/aspectLoss.js +0 -115
  188. package/dist/_members/composition/reframe/coverage.js +0 -62
  189. package/dist/_members/composition/reframe/derive.js +0 -73
  190. package/dist/_members/composition/reframe/index.js +0 -109
  191. package/dist/_members/composition/reframe/kenBurns.js +0 -64
  192. package/dist/_members/composition/reframe/shotScale.js +0 -176
  193. package/dist/_members/composition/reframe/trajectory.js +0 -124
  194. package/dist/_members/composition/timeline/compound.js +0 -134
  195. package/dist/_members/composition/timeline/index.js +0 -9
  196. package/dist/_members/composition/timeline/intent.js +0 -228
  197. package/dist/_members/composition/timeline/keyframes.js +0 -121
  198. package/dist/_members/composition/timeline/link.js +0 -59
  199. package/dist/_members/composition/timeline/occupancy.js +0 -36
  200. package/dist/_members/composition/timeline/placement.js +0 -74
  201. package/dist/_members/composition/timeline/plan.js +0 -31
  202. package/dist/_members/composition/timeline/resolve.js +0 -170
  203. package/dist/_members/composition/timeline/trims.js +0 -278
  204. package/dist/_members/composition/types/index.js +0 -1
  205. package/dist/_members/composition/validators/brandKit.js +0 -295
  206. package/dist/_members/composition/validators/composePlan.js +0 -113
  207. package/dist/_members/composition/validators/composition.js +0 -703
  208. package/dist/_members/composition/validators/font.js +0 -34
  209. package/dist/_members/composition/validators/graphicKinds.js +0 -30
  210. package/dist/_members/composition/validators/index.js +0 -9
  211. package/dist/_members/composition/validators/project.js +0 -29
  212. package/dist/_members/composition/validators/registry.js +0 -41
  213. package/dist/_members/composition/validators/render.js +0 -139
  214. package/dist/_members/composition/validators/session.js +0 -37
  215. package/dist/_members/composition/validators/webhook.js +0 -72
  216. package/dist/_members/composition-ops/alphaLayers.js +0 -141
  217. package/dist/_members/composition-ops/index.js +0 -637
  218. package/dist/_members/composition-ops/materializeGrid.js +0 -99
  219. package/dist/_members/composition-ops/opRecorder.js +0 -196
  220. package/dist/_members/composition-ops/recordingStore.js +0 -14
  221. package/dist/_members/composition-ops/replaceRegion.js +0 -102
  222. package/dist/_members/composition-ops/testFixtures.js +0 -19
  223. package/dist/_members/core/index.js +0 -5
  224. package/dist/_members/core/render/bookends.js +0 -53
  225. package/dist/_members/core/render/captions.js +0 -127
  226. package/dist/_members/core/render/compositionRender.js +0 -1249
  227. package/dist/_members/core/render/deriveTrajectory.js +0 -889
  228. package/dist/_members/core/render/emphasis.js +0 -16
  229. package/dist/_members/core/render/eval/cropBox.js +0 -139
  230. package/dist/_members/core/render/eval/inclusion.js +0 -96
  231. package/dist/_members/core/render/eval/index.js +0 -146
  232. package/dist/_members/core/render/eval/metrics.js +0 -94
  233. package/dist/_members/core/render/exportSettings.js +0 -65
  234. package/dist/_members/core/render/index.js +0 -20
  235. package/dist/_members/core/render/mapFaceToPerson.js +0 -73
  236. package/dist/_members/core/render/types.js +0 -8
  237. package/dist/_members/core/render/vcam/cameraPath.js +0 -248
  238. package/dist/_members/core/render/vcam/constants.js +0 -115
  239. package/dist/_members/core/render/vcam/errorCodes.js +0 -39
  240. package/dist/_members/core/render/vcam/framing.js +0 -136
  241. package/dist/_members/core/render/vcam/requiredRegion.js +0 -137
  242. package/dist/_members/core/render/vcam/shots.js +0 -53
  243. package/dist/_members/core/render/vcam/subjectSet.js +0 -388
  244. package/dist/_members/core/select/errorCodes.js +0 -38
  245. package/dist/_members/core/select/index.js +0 -26
  246. package/dist/_members/core/select/model.js +0 -18
  247. package/dist/_members/core/select/select.js +0 -244
  248. package/dist/_members/core/select/stabilize.js +0 -242
  249. package/dist/_members/core/types.js +0 -7
  250. package/dist/_members/errors/index.js +0 -1
  251. package/dist/_members/errors/registry.js +0 -560
  252. package/dist/_members/foundation/codes/index.js +0 -31
  253. package/dist/_members/foundation/index.js +0 -2
  254. package/dist/_members/foundation/primitives/index.js +0 -5
  255. package/dist/_members/mcp/adapter.js +0 -771
  256. package/dist/_members/mcp/burnedNames.js +0 -73
  257. package/dist/_members/mcp/core.js +0 -390
  258. package/dist/_members/mcp/curation.js +0 -792
  259. package/dist/_members/mcp/executor.js +0 -142
  260. package/dist/_members/mcp/format.js +0 -9
  261. package/dist/_members/mcp/generated/catalogPreviews.js +0 -95
  262. package/dist/_members/mcp/generated/harness.js +0 -81
  263. package/dist/_members/mcp/generated/operations.js +0 -131
  264. package/dist/_members/mcp/index.js +0 -50
  265. package/dist/_members/mcp/internalLoopTools.js +0 -109
  266. package/dist/_members/mcp/prompts.js +0 -45
  267. package/dist/_members/mcp/resources.js +0 -166
  268. package/dist/_members/mcp/server.js +0 -340
  269. package/dist/_members/mcp/wait.js +0 -378
  270. package/dist/_members/mcp/x402Meta.js +0 -66
  271. package/dist/_members/media-model/api.js +0 -175
  272. package/dist/_members/media-model/index.js +0 -1
  273. package/dist/_members/media-model/media-kind.js +0 -116
  274. package/dist/_members/media-model/testing/index.js +0 -1
  275. package/dist/_members/media-model/testing/mediaStoreContract.js +0 -82
  276. package/dist/_members/media-model/transcriptSearch.js +0 -70
  277. package/dist/_members/media-model/transcriptSearchCases.json +0 -79
  278. package/dist/_members/nle-export/compact-timeline.js +0 -73
  279. package/dist/_members/nle-export/compact-timeline.js.map +0 -1
  280. package/dist/_members/nle-export/composition-to-input.js +0 -147
  281. package/dist/_members/nle-export/composition-to-input.js.map +0 -1
  282. package/dist/_members/nle-export/fcpxml.js +0 -159
  283. package/dist/_members/nle-export/fcpxml.js.map +0 -1
  284. package/dist/_members/nle-export/index.js +0 -12
  285. package/dist/_members/nle-export/index.js.map +0 -1
  286. package/dist/_members/nle-export/premiere.js +0 -161
  287. package/dist/_members/nle-export/premiere.js.map +0 -1
  288. package/dist/_members/nle-export/server/index.js +0 -2
  289. package/dist/_members/nle-export/server/index.js.map +0 -1
  290. package/dist/_members/nle-export/server/pack-zip.js +0 -38
  291. package/dist/_members/nle-export/server/pack-zip.js.map +0 -1
  292. package/dist/_members/nle-export/srt.js +0 -50
  293. package/dist/_members/nle-export/srt.js.map +0 -1
  294. package/dist/_members/nle-export/types.js +0 -9
  295. package/dist/_members/nle-export/types.js.map +0 -1
  296. package/dist/_members/nle-export/xml/index.js +0 -11
  297. package/dist/_members/nle-export/xml/index.js.map +0 -1
  298. package/dist/_members/nle-export/xml-utils.js +0 -48
  299. package/dist/_members/nle-export/xml-utils.js.map +0 -1
  300. package/dist/_members/perception/activeSpeaker.js +0 -103
  301. package/dist/_members/perception/audioQuality.js +0 -76
  302. package/dist/_members/perception/energyBeat.js +0 -99
  303. package/dist/_members/perception/identityMatch.js +0 -91
  304. package/dist/_members/perception/index.js +0 -48
  305. package/dist/_members/perception/visualQuality.js +0 -95
  306. package/dist/_members/plane/conformance.js +0 -90
  307. package/dist/_members/plane/contract.js +0 -49
  308. package/dist/_members/plane/index.js +0 -16
  309. package/dist/_members/primitives/backgrounds/index.js +0 -32
  310. package/dist/_members/primitives/backgrounds/index.js.map +0 -1
  311. package/dist/_members/primitives/captions/index.js +0 -398
  312. package/dist/_members/primitives/captions/index.js.map +0 -1
  313. package/dist/_members/primitives/chunk-2LVE4UIT.js +0 -139
  314. package/dist/_members/primitives/chunk-2LVE4UIT.js.map +0 -1
  315. package/dist/_members/primitives/chunk-3IQUH6KK.js +0 -20
  316. package/dist/_members/primitives/chunk-3IQUH6KK.js.map +0 -1
  317. package/dist/_members/primitives/chunk-3OMURV6Q.js +0 -112
  318. package/dist/_members/primitives/chunk-3OMURV6Q.js.map +0 -1
  319. package/dist/_members/primitives/chunk-4IS6TMEG.js +0 -21
  320. package/dist/_members/primitives/chunk-4IS6TMEG.js.map +0 -1
  321. package/dist/_members/primitives/chunk-5MWGAEGQ.js +0 -1644
  322. package/dist/_members/primitives/chunk-5MWGAEGQ.js.map +0 -1
  323. package/dist/_members/primitives/chunk-7RRPFPQK.js +0 -15
  324. package/dist/_members/primitives/chunk-7RRPFPQK.js.map +0 -1
  325. package/dist/_members/primitives/chunk-DH5TRZK2.js +0 -125
  326. package/dist/_members/primitives/chunk-DH5TRZK2.js.map +0 -1
  327. package/dist/_members/primitives/chunk-E3KNUSFG.js +0 -2337
  328. package/dist/_members/primitives/chunk-E3KNUSFG.js.map +0 -1
  329. package/dist/_members/primitives/chunk-G2B3G4HK.js +0 -47
  330. package/dist/_members/primitives/chunk-G2B3G4HK.js.map +0 -1
  331. package/dist/_members/primitives/chunk-HFPFGZXT.js +0 -1494
  332. package/dist/_members/primitives/chunk-HFPFGZXT.js.map +0 -1
  333. package/dist/_members/primitives/chunk-HIWVFZVH.js +0 -19
  334. package/dist/_members/primitives/chunk-HIWVFZVH.js.map +0 -1
  335. package/dist/_members/primitives/chunk-IDAL6G3Y.js.map +0 -1
  336. package/dist/_members/primitives/chunk-KNC6JP5F.js +0 -34
  337. package/dist/_members/primitives/chunk-KNC6JP5F.js.map +0 -1
  338. package/dist/_members/primitives/chunk-KYRDVZST.js +0 -459
  339. package/dist/_members/primitives/chunk-KYRDVZST.js.map +0 -1
  340. package/dist/_members/primitives/chunk-LWLHS2NS.js +0 -3410
  341. package/dist/_members/primitives/chunk-LWLHS2NS.js.map +0 -1
  342. package/dist/_members/primitives/chunk-QAQ3P7DR.js +0 -8855
  343. package/dist/_members/primitives/chunk-QAQ3P7DR.js.map +0 -1
  344. package/dist/_members/primitives/chunk-ROV2ODWC.js +0 -81
  345. package/dist/_members/primitives/chunk-ROV2ODWC.js.map +0 -1
  346. package/dist/_members/primitives/chunk-TCRC2FH3.js +0 -183
  347. package/dist/_members/primitives/chunk-TCRC2FH3.js.map +0 -1
  348. package/dist/_members/primitives/chunk-US4YEDAA.js +0 -96
  349. package/dist/_members/primitives/chunk-US4YEDAA.js.map +0 -1
  350. package/dist/_members/primitives/chunk-UVKRO5ER.js +0 -13
  351. package/dist/_members/primitives/chunk-UVKRO5ER.js.map +0 -1
  352. package/dist/_members/primitives/chunk-W4EIIF2I.js +0 -10
  353. package/dist/_members/primitives/chunk-W4EIIF2I.js.map +0 -1
  354. package/dist/_members/primitives/chunk-WPGKIPCO.js +0 -3563
  355. package/dist/_members/primitives/chunk-WPGKIPCO.js.map +0 -1
  356. package/dist/_members/primitives/chunk-WZFLEGMD.js +0 -1435
  357. package/dist/_members/primitives/chunk-WZFLEGMD.js.map +0 -1
  358. package/dist/_members/primitives/chunk-XHU3WBEI.js +0 -33
  359. package/dist/_members/primitives/chunk-XHU3WBEI.js.map +0 -1
  360. package/dist/_members/primitives/chunk-YN7WTZZ7.js +0 -46
  361. package/dist/_members/primitives/chunk-YN7WTZZ7.js.map +0 -1
  362. package/dist/_members/primitives/effects/index.js +0 -30
  363. package/dist/_members/primitives/effects/index.js.map +0 -1
  364. package/dist/_members/primitives/hero-text/index.js +0 -14
  365. package/dist/_members/primitives/hero-text/index.js.map +0 -1
  366. package/dist/_members/primitives/index.js +0 -64
  367. package/dist/_members/primitives/index.js.map +0 -1
  368. package/dist/_members/primitives/layouts/index.js +0 -24
  369. package/dist/_members/primitives/layouts/index.js.map +0 -1
  370. package/dist/_members/primitives/lib/easings.js +0 -26
  371. package/dist/_members/primitives/lib/easings.js.map +0 -1
  372. package/dist/_members/primitives/lib/index.js +0 -74
  373. package/dist/_members/primitives/lib/index.js.map +0 -1
  374. package/dist/_members/primitives/lib/palette.js +0 -72
  375. package/dist/_members/primitives/lib/palette.js.map +0 -1
  376. package/dist/_members/primitives/lib/preview.js +0 -8
  377. package/dist/_members/primitives/lib/preview.js.map +0 -1
  378. package/dist/_members/primitives/lib/schema.js +0 -12
  379. package/dist/_members/primitives/lib/schema.js.map +0 -1
  380. package/dist/_members/primitives/lib/seeded-random.js +0 -14
  381. package/dist/_members/primitives/lib/seeded-random.js.map +0 -1
  382. package/dist/_members/primitives/lib/text/contrast.js +0 -12
  383. package/dist/_members/primitives/lib/text/contrast.js.map +0 -1
  384. package/dist/_members/primitives/lib/text/fill.js +0 -8
  385. package/dist/_members/primitives/lib/text/fill.js.map +0 -1
  386. package/dist/_members/primitives/lib/text/fitText.js +0 -10
  387. package/dist/_members/primitives/lib/text/fitText.js.map +0 -1
  388. package/dist/_members/primitives/lib/text/marker.js +0 -8
  389. package/dist/_members/primitives/lib/text/marker.js.map +0 -1
  390. package/dist/_members/primitives/lib/text/motion.js +0 -16
  391. package/dist/_members/primitives/lib/text/motion.js.map +0 -1
  392. package/dist/_members/primitives/lib/text/recolor.js +0 -8
  393. package/dist/_members/primitives/lib/text/recolor.js.map +0 -1
  394. package/dist/_members/primitives/lib/text/spec.js +0 -1
  395. package/dist/_members/primitives/lib/text/spec.js.map +0 -1
  396. package/dist/_members/primitives/lib/text/stage.js +0 -8
  397. package/dist/_members/primitives/lib/text/stage.js.map +0 -1
  398. package/dist/_members/primitives/lib/text/typeface.js +0 -8
  399. package/dist/_members/primitives/lib/text/typeface.js.map +0 -1
  400. package/dist/_members/primitives/lib/tokens.js +0 -24
  401. package/dist/_members/primitives/lib/tokens.js.map +0 -1
  402. package/dist/_members/primitives/lib/types.js +0 -1
  403. package/dist/_members/primitives/lib/types.js.map +0 -1
  404. package/dist/_members/primitives/params-required.json +0 -153
  405. package/dist/_members/primitives/scenes/index.js +0 -25
  406. package/dist/_members/primitives/scenes/index.js.map +0 -1
  407. package/dist/_members/primitives/subject-foreground/index.js +0 -30
  408. package/dist/_members/primitives/subject-foreground/index.js.map +0 -1
  409. package/dist/_members/primitives/text/index.js +0 -57
  410. package/dist/_members/primitives/text/index.js.map +0 -1
  411. package/dist/_members/primitives/transitions/index.js +0 -67
  412. package/dist/_members/primitives/transitions/index.js.map +0 -1
  413. package/dist/_members/primitives/ui-blocks/index.js +0 -76
  414. package/dist/_members/primitives/ui-blocks/index.js.map +0 -1
  415. package/dist/_members/primitives/version-map.json +0 -105
  416. package/dist/_members/primitives/workspace.js +0 -60
  417. package/dist/_members/primitives/workspace.js.map +0 -1
  418. package/dist/chunk-7GISRVON.js +0 -14176
  419. package/dist/chunk-DIBOJJMU.js +0 -16838
  420. package/dist/chunk-EAUSEGB7.js +0 -420
  421. package/dist/chunk-FUWJOVVK.js +0 -3633
  422. package/dist/chunk-G75E7YA4.js +0 -11883
  423. package/dist/chunk-JCZQT7K3.js +0 -3266
  424. package/dist/chunk-KF5ETMKB.js +0 -544
  425. package/dist/chunk-NDKERSXY.js +0 -1296
  426. package/dist/chunk-V43Y7IE4.js +0 -3621
  427. package/dist/chunk-VIVQHIGZ.js +0 -4319
  428. package/dist/chunk-YA3OR2KK.js +0 -249
  429. package/dist/hls-HD4C5G6W.js +0 -33000
  430. package/dist/token-RGFIT24D.js +0 -69
  431. package/dist/token-util-GPLSGYVO.js +0 -5
  432. package/dist/vision_bundle-5Y376MAR.js +0 -4084
@@ -1,73 +0,0 @@
1
- /**
2
- * Burned tool names (amendment A12, plan 2026-07-10-flow-verbs) — names that
3
- * DIED in the verb cutover and may NEVER be reused for a different job: a
4
- * reused name is a silent behavior change for every old caller.
5
- *
6
- * Each burned name registers as a TOMBSTONE tool: calling it hard-errors with
7
- * the replacement (an agent with a stale memory of the surface gets taught,
8
- * not a bare method-not-found), and the tools/list entry itself documents the
9
- * cutover. The gate in curation.test.ts ("burned names stay dead") asserts no
10
- * curated/infrastructure tool ever takes a burned name back, that the
11
- * internal-loop overlap stays exactly the documented four, and that every
12
- * tombstone's replacement is a live tool.
13
- */
14
- export const BURNED_NAMES = [
15
- {
16
- name: "create_composition",
17
- replacement: "compose",
18
- reason: "renamed — one flagship verb: compose {briefId | fromComposition | suggestionId} starts the Director run.",
19
- },
20
- {
21
- name: "verify_composition",
22
- replacement: "score_composition",
23
- reason: "renamed — the standalone sighted check SCORES a composition and returns a Checkpoint packet.",
24
- },
25
- {
26
- name: "render_frame",
27
- replacement: "preview_frame",
28
- reason: "renamed — the evidence family says preview_*; render_* is the paid finisher family.",
29
- },
30
- {
31
- name: "trigger_suggestions",
32
- replacement: "suggest_briefs",
33
- reason: "renamed — the analysis mints kind-'clip' Briefs, each composable via compose {briefId}.",
34
- },
35
- {
36
- name: "resume_compose",
37
- replacement: "resume",
38
- reason: "renamed — checkpoint-addressed: resume(checkpointId, {decision}) answers the packet, not the job.",
39
- },
40
- {
41
- name: "open_session",
42
- replacement: "score_composition / preview_frame / preview_component",
43
- reason: "sessions dissolved — each op manages its own warm box server-side, billed flat per operation.",
44
- },
45
- {
46
- name: "close_session",
47
- replacement: "(nothing — the managed box reaps itself on idle)",
48
- reason: "sessions dissolved — there is no client-held box to close.",
49
- },
50
- {
51
- name: "commit_session",
52
- replacement: "apply_composition",
53
- reason: "scratch-vs-active dissolved into composition versioning — there is nothing left to commit.",
54
- },
55
- {
56
- name: "new_video",
57
- replacement: "new_composition",
58
- reason: "renamed — every verb in the family says composition; only the mint said video.",
59
- },
60
- {
61
- name: "list_components",
62
- replacement: "list_catalog",
63
- reason: "renamed — 'component' on the wire means installed-only; the verb returns the whole catalog.",
64
- },
65
- {
66
- name: "adopt_candidate",
67
- replacement: "apply_composition",
68
- reason: "removed — adopt a consult proposal by applying its composition (the client stays the author).",
69
- },
70
- ];
71
- export function burnedNameError(b) {
72
- return `'${b.name}' was RETIRED in the 2026-07 verb cutover and will never come back. Use ${b.replacement}. (${b.reason})`;
73
- }
@@ -1,390 +0,0 @@
1
- import { ApiError, adviseError } from '@cueframe/sdk';
2
- import * as bodySchemas from '@cueframe/sdk/zod';
3
- import { GENERATED_OPERATIONS } from './generated/operations.js';
4
- import { MCP_PAYMENT_REQUIRED_CODE, isX402PaymentRequired, extractPaymentFromMeta, encodePaymentSignature, } from './x402Meta.js';
5
- export function text(s) {
6
- return { content: [{ type: 'text', text: s }] };
7
- }
8
- export function errText(s) {
9
- return { content: [{ type: 'text', text: s }], isError: true };
10
- }
11
- /**
12
- * The JSON payload of a tool result. Since `content` gained image/audio blocks,
13
- * callers can no longer assume `content[0].text` — but every result still leads
14
- * with its text block (see `withMedia`), so this is the stable accessor.
15
- */
16
- export function firstText(r) {
17
- const b = r.content.find((c) => c.type === 'text');
18
- return b?.text ?? '';
19
- }
20
- /**
21
- * Sniff an image's media type from its base64 magic bytes.
22
- *
23
- * Authoritative, never hardcoded: the declared media type must match the pixels
24
- * or the model API rejects the whole message. Server-rendered stills are PNG,
25
- * but `view_style_reference` exemplars are USER-UPLOADED frames written as JPEG
26
- * (`frame-01.jpg`) — hardcoding `image/png` mislabeled every inspiration kit's
27
- * exemplars and crashed the designer the instant it looked at the reference
28
- * (2026-07-16, waverly-mercury card-lane bench). Unknown ⇒ png (the server default).
29
- *
30
- * Lives here rather than in adapter.ts so the ai-SDK path and the MCP-server path
31
- * share ONE sniffer — the bug above must not be re-introduced on the new surface.
32
- */
33
- /**
34
- * base64 ⇄ bytes WITHOUT Node's `Buffer`.
35
- *
36
- * The hosted MCP runs in Convex's V8 runtime, which has the web APIs (`btoa`,
37
- * `atob`, `Uint8Array`) but NOT Node globals. `Buffer.from(...)` threw there on
38
- * every preview — AFTER a successful fetch — and `fetchAsBase64`'s catch
39
- * swallowed it, so `mcp_preview` reported `{urls:2, fetched:0}` and the whole
40
- * eyes-and-ears surface silently did nothing in production while 187 tests
41
- * passed under Node. Web APIs only, so one implementation serves both runtimes.
42
- */
43
- function bytesToBase64(bytes) {
44
- // PREFERRED: the TC39 standard method (proposal-arraybuffer-base64, now in MDN).
45
- // Skips the binary-string round trip entirely, so there is no argument-count
46
- // limit to trip over. Feature-detected because Convex's runtime version is not
47
- // ours to pin.
48
- const std = bytes.toBase64;
49
- if (typeof std === 'function')
50
- return std.call(bytes);
51
- // FALLBACK: chunked String.fromCharCode + btoa — the documented pattern for
52
- // Workers-like runtimes. 8192 is the size those guides use: passing a whole
53
- // 100KB thumbnail (or even 32768 bytes) as spread arguments can exceed the
54
- // engine's max-argument limit and throw. Our tests use 4-byte fixtures, so a
55
- // too-large chunk would never have failed in CI — only in production, on a
56
- // real image, silently, exactly like the Buffer bug this replaced.
57
- let bin = '';
58
- const CHUNK = 8192;
59
- for (let i = 0; i < bytes.length; i += CHUNK) {
60
- bin += String.fromCharCode(...bytes.subarray(i, i + CHUNK));
61
- }
62
- return btoa(bin);
63
- }
64
- /**
65
- * Decode only the leading bytes — enough for a magic-number sniff.
66
- *
67
- * `atob` is STRICTER than the `Buffer.from(s,'base64')` this replaced: it throws
68
- * on a prefix whose length is not a multiple of 4, and on stray padding. So take
69
- * a 4-aligned prefix and never let a malformed string propagate — an unsniffable
70
- * blob falls back to the caller's default rather than failing the tool call.
71
- */
72
- function base64Head(base64, n = 12) {
73
- const want = Math.ceil((n * 4) / 3);
74
- const aligned = base64.slice(0, Math.min(base64.length, want) & ~3);
75
- if (!aligned)
76
- return new Uint8Array(0);
77
- let bin;
78
- try {
79
- bin = atob(aligned);
80
- }
81
- catch {
82
- return new Uint8Array(0);
83
- }
84
- const out = new Uint8Array(Math.min(n, bin.length));
85
- for (let i = 0; i < out.length; i++)
86
- out[i] = bin.charCodeAt(i);
87
- return out;
88
- }
89
- function ascii(b, start, end) {
90
- let s = '';
91
- for (let i = start; i < end && i < b.length; i++)
92
- s += String.fromCharCode(b[i]);
93
- return s;
94
- }
95
- export function sniffImageMediaType(base64) {
96
- const head = base64Head(base64);
97
- if (head.length >= 4 && head[0] === 0x89 && head[1] === 0x50 && head[2] === 0x4e && head[3] === 0x47)
98
- return 'image/png';
99
- if (head.length >= 3 && head[0] === 0xff && head[1] === 0xd8 && head[2] === 0xff)
100
- return 'image/jpeg';
101
- if (head.length >= 12 && ascii(head, 0, 4) === 'RIFF' && ascii(head, 8, 12) === 'WEBP')
102
- return 'image/webp';
103
- if (head.length >= 4 && ascii(head, 0, 3) === 'GIF')
104
- return 'image/gif';
105
- return 'image/png';
106
- }
107
- /** Sniff an audio media type from magic bytes; unknown ⇒ mpeg (Freesound previews are mp3). */
108
- export function sniffAudioMediaType(base64) {
109
- const head = base64Head(base64);
110
- if (head.length >= 4 && ascii(head, 0, 4) === 'OggS')
111
- return 'audio/ogg';
112
- if (head.length >= 12 && ascii(head, 0, 4) === 'RIFF' && ascii(head, 8, 12) === 'WAVE')
113
- return 'audio/wav';
114
- if (head.length >= 4 && ascii(head, 4, 8) === 'ftyp')
115
- return 'audio/mp4';
116
- if (head.length >= 3 && ascii(head, 0, 3) === 'ID3')
117
- return 'audio/mpeg';
118
- if (head.length >= 2 && head[0] === 0xff && (head[1] & 0xe0) === 0xe0)
119
- return 'audio/mpeg';
120
- return 'audio/mpeg';
121
- }
122
- /**
123
- * A tool result that carries the JSON payload as text AND the pixels/samples the
124
- * agent needs to judge it.
125
- *
126
- * THE CONTRACT, and why it is shaped this way:
127
- * - Media is ADDITIVE. The JSON text block is always first and unchanged, so ids,
128
- * urls and flags keep flowing and nothing downstream breaks.
129
- * - Zero media ⇒ NO media blocks at all, just the text. An empty content array is
130
- * the one failure the old `(b) images never leave execute() content-shaped`
131
- * constraint was written to avoid (adapter.ts:384-390) — the fix for "empty
132
- * array is invalid" is to omit the block, not to convert every image to text
133
- * forever.
134
- * - Media types are SNIFFED per item, never declared by the caller.
135
- */
136
- export function withMedia(payload, media) {
137
- const blocks = [{ type: 'text', text: payload }];
138
- for (const m of media) {
139
- if (!m.data)
140
- continue;
141
- blocks.push(m.kind === 'image'
142
- ? { type: 'image', data: m.data, mimeType: sniffImageMediaType(m.data) }
143
- : { type: 'audio', data: m.data, mimeType: sniffAudioMediaType(m.data) });
144
- }
145
- return { content: blocks };
146
- }
147
- /**
148
- * Fetch a URL and return its bytes as base64. Returns undefined on ANY failure —
149
- * a preview that will not load must never fail the tool call it decorates, since
150
- * the JSON payload is still useful on its own.
151
- */
152
- /**
153
- * Per-image ceiling. A PREVIEW is a thumbnail — 7KB for a catalog poster, ~30KB
154
- * for a Pexels preview. 2MB is generous headroom; the old 8MB was sized for
155
- * "some image" rather than for the thing this actually fetches.
156
- */
157
- const MAX_PREVIEW_BYTES = 2 * 1024 * 1024;
158
- /**
159
- * Cumulative ceiling across ONE tool response.
160
- *
161
- * Convex caps an httpAction response at 20MB
162
- * (https://docs.convex.dev/production/state/limits), and base64 inflates bytes
163
- * by 4/3. The count cap alone did NOT bound this: 12 images x the old 8MB
164
- * per-image limit is 96MB raw => ~128MB encoded, six times over the ceiling. A
165
- * count is not a size. 3MB raw (~4MB encoded) leaves the response comfortably
166
- * inside the limit with room for the JSON payload.
167
- */
168
- const MAX_PREVIEW_BYTES_TOTAL = 3 * 1024 * 1024;
169
- export async function fetchAsBase64(url, opts) {
170
- const timeoutMs = opts?.timeoutMs ?? 10_000;
171
- const maxBytes = opts?.maxBytes ?? MAX_PREVIEW_BYTES;
172
- try {
173
- const ctl = new AbortController();
174
- const t = setTimeout(() => ctl.abort(), timeoutMs);
175
- const res = await fetch(url, { signal: ctl.signal });
176
- clearTimeout(t);
177
- if (!res.ok)
178
- return undefined;
179
- const bytes = new Uint8Array(await res.arrayBuffer());
180
- if (bytes.byteLength === 0 || bytes.byteLength > maxBytes)
181
- return undefined;
182
- return bytesToBase64(bytes);
183
- }
184
- catch (err) {
185
- // Log the REASON. Swallowing this is what hid a Buffer-not-defined crash in
186
- // the Convex isolate behind an innocent-looking "no previews available".
187
- console.log(JSON.stringify({ evt: 'preview_fetch_failed', err: err instanceof Error ? err.message : String(err) }));
188
- return undefined;
189
- }
190
- }
191
- /**
192
- * Fetch up to `cap` previews concurrently, preserving input order and dropping
193
- * failures. The cap is a TOKEN budget, not a correctness one: a contact sheet of
194
- * a dozen downscaled thumbnails is the difference between an agent that can see
195
- * and one that blows its context on one full-size still.
196
- */
197
- /**
198
- * Preview cache, keyed by URL.
199
- *
200
- * `list_catalog` re-fetched up to 12 posters on EVERY call, and their keys are
201
- * content-addressed (`<id>@<version>.jpg`) — they can never change, so that was
202
- * pure repeat work on the hottest discovery verb. Convex reuses a warm isolate
203
- * across invocations, so a module-level map is the cheapest correct place for
204
- * this: no new substrate, nothing to invalidate, and it evaporates with the
205
- * isolate. Presigned R2 URLs carry a fresh signature per call, so they simply
206
- * never hit — correct by construction rather than by a rule someone must
207
- * remember.
208
- */
209
- const previewCache = new Map();
210
- const PREVIEW_CACHE_MAX = 64;
211
- function cacheGet(url) {
212
- const hit = previewCache.get(url);
213
- if (hit === undefined)
214
- return undefined;
215
- // refresh recency
216
- previewCache.delete(url);
217
- previewCache.set(url, hit);
218
- return hit;
219
- }
220
- function cachePut(url, data) {
221
- if (previewCache.size >= PREVIEW_CACHE_MAX) {
222
- const oldest = previewCache.keys().next().value;
223
- if (oldest !== undefined)
224
- previewCache.delete(oldest);
225
- }
226
- previewCache.set(url, data);
227
- }
228
- /** Test seam — the cache is module-level and outlives a single test. */
229
- export function __resetPreviewCache() {
230
- previewCache.clear();
231
- }
232
- /**
233
- * Fetch up to `cap` previews, preserving input order and dropping failures.
234
- *
235
- * Bounded by BOTH a count and a cumulative byte budget: the count keeps the
236
- * contact sheet legible, the bytes keep the response inside Convex's 20MB
237
- * httpAction ceiling. Sequential rather than parallel because the budget has to
238
- * be spent in order — a parallel batch cannot know it has already overspent.
239
- */
240
- export async function fetchPreviews(urls, cap = 12, opts) {
241
- const picked = urls.filter((u) => !!u).slice(0, cap);
242
- const out = [];
243
- let spent = 0;
244
- for (const u of picked) {
245
- const cached = opts?.fetchOne ? undefined : cacheGet(u);
246
- const data = cached ??
247
- (opts?.fetchOne
248
- ? await opts.fetchOne(u).catch(() => undefined)
249
- : await fetchAsBase64(u, opts));
250
- if (!data)
251
- continue;
252
- // base64 length is a close proxy for encoded bytes; budget on what we SEND.
253
- if (spent + data.length > MAX_PREVIEW_BYTES_TOTAL * 1.34)
254
- break;
255
- spent += data.length;
256
- if (!cached && !opts?.fetchOne)
257
- cachePut(u, data);
258
- out.push(data);
259
- }
260
- return out;
261
- }
262
- // ── error formatting (reuses the SDK's advice table) ──────────────────────
263
- export function fmtErr(err) {
264
- const head = err instanceof ApiError
265
- ? `${err.message} (${err.code}, ${err.status})`
266
- : err instanceof Error
267
- ? err.message
268
- : String(err);
269
- const advice = adviseError(err);
270
- return advice ? `${head}\n → ${advice}` : head;
271
- }
272
- /** Reconstruct an ApiError from a non-2xx executor response so adviseError works. */
273
- export function apiErrorFrom(res) {
274
- let code = 'internal_error';
275
- let message = res.text || `HTTP ${res.status}`;
276
- let details;
277
- try {
278
- const j = JSON.parse(res.text);
279
- if (j && typeof j === 'object' && j.error) {
280
- code = j.error.code ?? code;
281
- message = j.error.message ?? message;
282
- details = j.error.details;
283
- }
284
- }
285
- catch {
286
- /* non-JSON body — keep the raw text as the message */
287
- }
288
- return new ApiError(res.status, { code, message, details }, res.requestId);
289
- }
290
- export function isOk(status) {
291
- return status >= 200 && status < 300;
292
- }
293
- export function safeParse(textBody) {
294
- try {
295
- return JSON.parse(textBody);
296
- }
297
- catch {
298
- return undefined;
299
- }
300
- }
301
- // ── generated-manifest accessors ──────────────────────────────────────────
302
- const OP_BY_ID = new Map(GENERATED_OPERATIONS.map((o) => [o.operationId, o]));
303
- /** Look up a generated operation by id; throws (fail-loud) if absent. */
304
- export function opById(operationId) {
305
- const op = OP_BY_ID.get(operationId);
306
- if (!op) {
307
- throw new Error(`MCP: no generated operation '${operationId}'. The op-manifest (generated/operations.ts) is out of sync — run \`pnpm generate:mcp-tools\`.`);
308
- }
309
- return op;
310
- }
311
- /** The bound zod body schema for an operation, or undefined for body-less ops. */
312
- export function bodySchemaFor(op) {
313
- if (!op.bodyKey)
314
- return undefined;
315
- const schema = bodySchemas[op.bodyKey];
316
- if (!schema) {
317
- throw new Error(`MCP: bodySchemas.${op.bodyKey} not found for '${op.operationId}'. Run \`pnpm generate:sdk\`.`);
318
- }
319
- return schema;
320
- }
321
- /**
322
- * Substitute path params into an op's template. `mapArg(opParamName)` returns the
323
- * concrete value (raw layer: the arg of the same name; curated layer: the friendly
324
- * arg mapped to this op param). Values are URL-encoded.
325
- */
326
- export function buildPath(op, mapArg) {
327
- let path = op.pathTemplate;
328
- for (const p of op.pathParams) {
329
- path = path.replace(`{${p}}`, encodeURIComponent(String(mapArg(p))));
330
- }
331
- return path;
332
- }
333
- /** Run an operation through the executor. `body` is sent only for bodied ops. */
334
- export async function invokeOp(ex, op, mapArg, body,
335
- /** base64 PAYMENT-SIGNATURE for a paid (x402) tool call; omitted for authed calls. */
336
- payment,
337
- /** Pre-encoded query string (no leading '?') — curated queryArgs filters. */
338
- query) {
339
- return ex.invoke({
340
- method: op.method,
341
- path: buildPath(op, mapArg),
342
- body: op.bodyKey ? (body ?? {}) : undefined,
343
- ...(query ? { query } : {}),
344
- payment,
345
- });
346
- }
347
- /**
348
- * Surface a canonical x402 `PaymentRequired` challenge as the MCP result an
349
- * x402-aware client acts on. Emit the PaymentRequired JSON in BOTH carriers:
350
- * `content[0].text` (the spec-required carrier a content-first client parses —
351
- * matching @x402/mcp's own reference server) AND `structuredContent` (the
352
- * preferred carrier the pinned client reads first). The envelope already carries
353
- * a top-level human `error` string, so a non-x402 LLM client still reads a
354
- * legible reason. `paymentRequired` is pre-parsed + shape-checked by the caller.
355
- */
356
- function paymentRequiredResult(paymentRequired) {
357
- return {
358
- content: [{ type: 'text', text: JSON.stringify(paymentRequired) }],
359
- isError: true,
360
- structuredContent: paymentRequired,
361
- };
362
- }
363
- /**
364
- * Run an op through the executor with x402 pay-per-call support (used by every
365
- * tool). Reads the client's signed payment from the tool call `_meta`, forwards
366
- * it as `PAYMENT-SIGNATURE` so the REST x402 middleware verifies + settles (the
367
- * SAME money path as a direct REST call), turns an inner 402 into a
368
- * payment-required result, and attaches the settle receipt on success.
369
- * `formatOk` builds the success result from the executor response; `label` names
370
- * the tool for the error message. Payment-free (key/OAuth) calls are unaffected.
371
- */
372
- export async function dispatchOp(ex, op, mapArg, body, extra, label, formatOk) {
373
- const paymentObj = extractPaymentFromMeta(extra?._meta);
374
- const payment = paymentObj ? encodePaymentSignature(paymentObj) : undefined;
375
- const res = await invokeOp(ex, op, mapArg, body, payment);
376
- // Discriminate the x402 challenge from the OTHER errors that share HTTP 402
377
- // (billing_required, generation_budget_exceeded, payment_invalid, …): only a
378
- // real PaymentRequired body ({x402Version, accepts[]}) becomes a "pay with
379
- // x402" result; everything else falls through to its typed error advice.
380
- if (res.status === MCP_PAYMENT_REQUIRED_CODE) {
381
- const parsed = safeParse(res.text);
382
- if (isX402PaymentRequired(parsed))
383
- return paymentRequiredResult(parsed);
384
- }
385
- if (!isOk(res.status))
386
- return errText(`${label} failed: ${fmtErr(apiErrorFrom(res))}`);
387
- // No receipt attach: settle is async (see x402.ts) — the caller reads the final
388
- // outcome from x402Payments, not an inline `_meta["x402/payment-response"]`.
389
- return formatOk(res);
390
- }