@imgly/codesign-mcp 0.1.5 → 0.1.7

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 (1085) hide show
  1. package/README.md +56 -11
  2. package/assets/docs/guide/SKILL.md +45 -53
  3. package/assets/docs/guide/animation/create/base.md +234 -243
  4. package/assets/docs/guide/animation/create/text.md +250 -231
  5. package/assets/docs/guide/animation/create.md +197 -231
  6. package/assets/docs/guide/animation/edit.md +196 -271
  7. package/assets/docs/guide/animation/types.md +182 -185
  8. package/assets/docs/guide/animation.md +9 -6
  9. package/assets/docs/guide/api/AssetAPI.md +7 -53
  10. package/assets/docs/guide/api/BlockAPI.md +725 -648
  11. package/assets/docs/guide/api/CreativeEngine.md +7 -16
  12. package/assets/docs/guide/api/EditorAPI.md +32 -93
  13. package/assets/docs/guide/api/EventAPI.md +1 -2
  14. package/assets/docs/guide/api/SceneAPI.md +47 -98
  15. package/assets/docs/guide/api/VariableAPI.md +1 -4
  16. package/assets/docs/guide/api/node/classes/assetapi.md +1090 -0
  17. package/assets/docs/guide/api/node/classes/blockapi.md +12965 -0
  18. package/assets/docs/guide/api/node/classes/creativeengine.md +319 -0
  19. package/assets/docs/guide/api/node/classes/editorapi.md +3417 -0
  20. package/assets/docs/guide/api/node/classes/engineactions.md +319 -0
  21. package/assets/docs/guide/api/node/classes/eventapi.md +56 -0
  22. package/assets/docs/guide/api/node/classes/sceneapi.md +1370 -0
  23. package/assets/docs/guide/api/node/classes/variableapi.md +143 -0
  24. package/assets/docs/guide/api/node/enumerations/compressionformat.md +23 -0
  25. package/assets/docs/guide/api/node/enumerations/compressionlevel.md +24 -0
  26. package/assets/docs/guide/api/node/functions/iscmykcolor.md +30 -0
  27. package/assets/docs/guide/api/node/functions/isrgbacolor.md +30 -0
  28. package/assets/docs/guide/api/node/functions/isspotcolor.md +30 -0
  29. package/assets/docs/guide/api/node/interfaces/addvideooptions.md +31 -0
  30. package/assets/docs/guide/api/node/interfaces/applyassetoptions.md +31 -0
  31. package/assets/docs/guide/api/node/interfaces/asset.md +30 -0
  32. package/assets/docs/guide/api/node/interfaces/assetbooleanproperty.md +25 -0
  33. package/assets/docs/guide/api/node/interfaces/assetcmykcolor.md +26 -0
  34. package/assets/docs/guide/api/node/interfaces/assetcolorproperty.md +25 -0
  35. package/assets/docs/guide/api/node/interfaces/assetcontentaspectratio.md +23 -0
  36. package/assets/docs/guide/api/node/interfaces/assetdefinition.md +31 -0
  37. package/assets/docs/guide/api/node/interfaces/assetenumproperty.md +26 -0
  38. package/assets/docs/guide/api/node/interfaces/assetfixedaspectratio.md +24 -0
  39. package/assets/docs/guide/api/node/interfaces/assetfixedsize.md +25 -0
  40. package/assets/docs/guide/api/node/interfaces/assetfreeaspectratio.md +22 -0
  41. package/assets/docs/guide/api/node/interfaces/assetnumberproperty.md +28 -0
  42. package/assets/docs/guide/api/node/interfaces/assetpayload.md +27 -0
  43. package/assets/docs/guide/api/node/interfaces/assetquerydata.md +32 -0
  44. package/assets/docs/guide/api/node/interfaces/assetresult.md +46 -0
  45. package/assets/docs/guide/api/node/interfaces/assetrgbcolor.md +25 -0
  46. package/assets/docs/guide/api/node/interfaces/assetsource.md +111 -0
  47. package/assets/docs/guide/api/node/interfaces/assetspotcolor.md +25 -0
  48. package/assets/docs/guide/api/node/interfaces/assetsqueryresult.md +31 -0
  49. package/assets/docs/guide/api/node/interfaces/assetstringproperty.md +25 -0
  50. package/assets/docs/guide/api/node/interfaces/assetstylepreset.md +39 -0
  51. package/assets/docs/guide/api/node/interfaces/assetstylepresetanimation.md +23 -0
  52. package/assets/docs/guide/api/node/interfaces/audiotrackinfo.md +32 -0
  53. package/assets/docs/guide/api/node/interfaces/blockevent.md +26 -0
  54. package/assets/docs/guide/api/node/interfaces/blockstateerror.md +26 -0
  55. package/assets/docs/guide/api/node/interfaces/blockstatepending.md +26 -0
  56. package/assets/docs/guide/api/node/interfaces/blockstateready.md +25 -0
  57. package/assets/docs/guide/api/node/interfaces/buffer.md +26 -0
  58. package/assets/docs/guide/api/node/interfaces/characterinkbox.md +29 -0
  59. package/assets/docs/guide/api/node/interfaces/cmykcolor.md +34 -0
  60. package/assets/docs/guide/api/node/interfaces/completeassetresult.md +46 -0
  61. package/assets/docs/guide/api/node/interfaces/configuration.md +38 -0
  62. package/assets/docs/guide/api/node/interfaces/dominantcolor.md +25 -0
  63. package/assets/docs/guide/api/node/interfaces/dominantcolorsoptions.md +23 -0
  64. package/assets/docs/guide/api/node/interfaces/engineactioninfo.md +24 -0
  65. package/assets/docs/guide/api/node/interfaces/engineactionsregistry.md +18 -0
  66. package/assets/docs/guide/api/node/interfaces/engineplugin.md +30 -0
  67. package/assets/docs/guide/api/node/interfaces/font.md +27 -0
  68. package/assets/docs/guide/api/node/interfaces/fontmetrics.md +32 -0
  69. package/assets/docs/guide/api/node/interfaces/gradientcolorstop.md +28 -0
  70. package/assets/docs/guide/api/node/interfaces/logger.md +39 -0
  71. package/assets/docs/guide/api/node/interfaces/pageduration.md +23 -0
  72. package/assets/docs/guide/api/node/interfaces/range.md +23 -0
  73. package/assets/docs/guide/api/node/interfaces/rgbacolor.md +32 -0
  74. package/assets/docs/guide/api/node/interfaces/rgbcolor.md +30 -0
  75. package/assets/docs/guide/api/node/interfaces/settings.md +126 -0
  76. package/assets/docs/guide/api/node/interfaces/size2.md +21 -0
  77. package/assets/docs/guide/api/node/interfaces/source.md +24 -0
  78. package/assets/docs/guide/api/node/interfaces/spotcolor.md +30 -0
  79. package/assets/docs/guide/api/node/interfaces/textdecorationconfig.md +31 -0
  80. package/assets/docs/guide/api/node/interfaces/textfontsizeoptions.md +24 -0
  81. package/assets/docs/guide/api/node/interfaces/textruninfo.md +33 -0
  82. package/assets/docs/guide/api/node/interfaces/transientresource.md +26 -0
  83. package/assets/docs/guide/api/node/interfaces/typeface.md +23 -0
  84. package/assets/docs/guide/api/node/interfaces/vec2.md +21 -0
  85. package/assets/docs/guide/api/node/interfaces/vec3.md +22 -0
  86. package/assets/docs/guide/api/node/type-aliases/addimageoptions.md +36 -0
  87. package/assets/docs/guide/api/node/type-aliases/animationbaselinedirection.md +18 -0
  88. package/assets/docs/guide/api/node/type-aliases/animationblockswipetextdirection.md +18 -0
  89. package/assets/docs/guide/api/node/type-aliases/animationeasing.md +18 -0
  90. package/assets/docs/guide/api/node/type-aliases/animationentry.md +28 -0
  91. package/assets/docs/guide/api/node/type-aliases/animationgrowdirection.md +18 -0
  92. package/assets/docs/guide/api/node/type-aliases/animationjumploopdirection.md +18 -0
  93. package/assets/docs/guide/api/node/type-aliases/animationkenburnsdirection.md +18 -0
  94. package/assets/docs/guide/api/node/type-aliases/animationmergetextdirection.md +18 -0
  95. package/assets/docs/guide/api/node/type-aliases/animationoptions.md +28 -0
  96. package/assets/docs/guide/api/node/type-aliases/animationspindirection.md +18 -0
  97. package/assets/docs/guide/api/node/type-aliases/animationspinloopdirection.md +18 -0
  98. package/assets/docs/guide/api/node/type-aliases/animationtype.md +24 -0
  99. package/assets/docs/guide/api/node/type-aliases/animationtypelonghand.md +21 -0
  100. package/assets/docs/guide/api/node/type-aliases/animationtypeshorthand.md +18 -0
  101. package/assets/docs/guide/api/node/type-aliases/animationtypewritertextwritingstyle.md +18 -0
  102. package/assets/docs/guide/api/node/type-aliases/animationwipedirection.md +18 -0
  103. package/assets/docs/guide/api/node/type-aliases/applicationmimetype.md +20 -0
  104. package/assets/docs/guide/api/node/type-aliases/assetcolor.md +23 -0
  105. package/assets/docs/guide/api/node/type-aliases/assetfilter.md +47 -0
  106. package/assets/docs/guide/api/node/type-aliases/assetgroups.md +25 -0
  107. package/assets/docs/guide/api/node/type-aliases/assetmetadata.md +42 -0
  108. package/assets/docs/guide/api/node/type-aliases/assetproperty.md +25 -0
  109. package/assets/docs/guide/api/node/type-aliases/assetpropertyfilter.md +41 -0
  110. package/assets/docs/guide/api/node/type-aliases/assetpropertypath.md +26 -0
  111. package/assets/docs/guide/api/node/type-aliases/assetstylepresetanimationproperties.md +34 -0
  112. package/assets/docs/guide/api/node/type-aliases/assetstylepresetproperties.md +29 -0
  113. package/assets/docs/guide/api/node/type-aliases/assetstylepresetpropertyvalue.md +29 -0
  114. package/assets/docs/guide/api/node/type-aliases/assetstylepresetscalableproperty.md +28 -0
  115. package/assets/docs/guide/api/node/type-aliases/assettransformpreset.md +24 -0
  116. package/assets/docs/guide/api/node/type-aliases/asyncuriresolver.md +36 -0
  117. package/assets/docs/guide/api/node/type-aliases/audioexportoptions.md +43 -0
  118. package/assets/docs/guide/api/node/type-aliases/audiofromvideooptions.md +27 -0
  119. package/assets/docs/guide/api/node/type-aliases/audiomimetype.md +20 -0
  120. package/assets/docs/guide/api/node/type-aliases/blendmode.md +18 -0
  121. package/assets/docs/guide/api/node/type-aliases/blockenumtype.md +63 -0
  122. package/assets/docs/guide/api/node/type-aliases/blockstate.md +26 -0
  123. package/assets/docs/guide/api/node/type-aliases/blurtype.md +24 -0
  124. package/assets/docs/guide/api/node/type-aliases/blurtypelonghand.md +21 -0
  125. package/assets/docs/guide/api/node/type-aliases/blurtypeshorthand.md +18 -0
  126. package/assets/docs/guide/api/node/type-aliases/booleanoperation.md +27 -0
  127. package/assets/docs/guide/api/node/type-aliases/boolpropertyname.md +79 -0
  128. package/assets/docs/guide/api/node/type-aliases/cameraclampingovershootmode.md +18 -0
  129. package/assets/docs/guide/api/node/type-aliases/captionhorizontalalignment.md +18 -0
  130. package/assets/docs/guide/api/node/type-aliases/captionverticalalignment.md +18 -0
  131. package/assets/docs/guide/api/node/type-aliases/cmyk.md +23 -0
  132. package/assets/docs/guide/api/node/type-aliases/color.md +23 -0
  133. package/assets/docs/guide/api/node/type-aliases/colorpickercolormode.md +18 -0
  134. package/assets/docs/guide/api/node/type-aliases/colorpropertyname.md +31 -0
  135. package/assets/docs/guide/api/node/type-aliases/colorspace.md +20 -0
  136. package/assets/docs/guide/api/node/type-aliases/contentfillmode.md +18 -0
  137. package/assets/docs/guide/api/node/type-aliases/controlgizmomovehandlevisibility.md +18 -0
  138. package/assets/docs/guide/api/node/type-aliases/controlgizmoresizehandlesvisibility.md +18 -0
  139. package/assets/docs/guide/api/node/type-aliases/controlgizmorotatehandlesvisibility.md +18 -0
  140. package/assets/docs/guide/api/node/type-aliases/controlgizmoscalehandlesvisibility.md +18 -0
  141. package/assets/docs/guide/api/node/type-aliases/createsceneoptions.md +30 -0
  142. package/assets/docs/guide/api/node/type-aliases/cutoutoperation.md +20 -0
  143. package/assets/docs/guide/api/node/type-aliases/cutouttype.md +18 -0
  144. package/assets/docs/guide/api/node/type-aliases/defaultassetsourceid.md +37 -0
  145. package/assets/docs/guide/api/node/type-aliases/demoassetsourceid.md +33 -0
  146. package/assets/docs/guide/api/node/type-aliases/designblockid.md +20 -0
  147. package/assets/docs/guide/api/node/type-aliases/designblocktype.md +24 -0
  148. package/assets/docs/guide/api/node/type-aliases/designblocktypelonghand.md +21 -0
  149. package/assets/docs/guide/api/node/type-aliases/designblocktypeshorthand.md +18 -0
  150. package/assets/docs/guide/api/node/type-aliases/designunit.md +18 -0
  151. package/assets/docs/guide/api/node/type-aliases/doubleclickselectionmode.md +18 -0
  152. package/assets/docs/guide/api/node/type-aliases/doublepropertyname.md +26 -0
  153. package/assets/docs/guide/api/node/type-aliases/dropshadowoptions.md +32 -0
  154. package/assets/docs/guide/api/node/type-aliases/editmode.md +27 -0
  155. package/assets/docs/guide/api/node/type-aliases/effecttype.md +24 -0
  156. package/assets/docs/guide/api/node/type-aliases/effecttypelonghand.md +21 -0
  157. package/assets/docs/guide/api/node/type-aliases/effecttypeshorthand.md +18 -0
  158. package/assets/docs/guide/api/node/type-aliases/engineactionid.md +20 -0
  159. package/assets/docs/guide/api/node/type-aliases/enginecustomactionfunction.md +30 -0
  160. package/assets/docs/guide/api/node/type-aliases/engineplugincontext.md +30 -0
  161. package/assets/docs/guide/api/node/type-aliases/enumpropertyname.md +59 -0
  162. package/assets/docs/guide/api/node/type-aliases/enumvalues.md +59 -0
  163. package/assets/docs/guide/api/node/type-aliases/exportoptions.md +57 -0
  164. package/assets/docs/guide/api/node/type-aliases/fillpixelstreamorientation.md +18 -0
  165. package/assets/docs/guide/api/node/type-aliases/filltype.md +24 -0
  166. package/assets/docs/guide/api/node/type-aliases/filltypelonghand.md +21 -0
  167. package/assets/docs/guide/api/node/type-aliases/filltypeshorthand.md +18 -0
  168. package/assets/docs/guide/api/node/type-aliases/floatpropertyname.md +184 -0
  169. package/assets/docs/guide/api/node/type-aliases/fontsizeunit.md +23 -0
  170. package/assets/docs/guide/api/node/type-aliases/fontstyle.md +20 -0
  171. package/assets/docs/guide/api/node/type-aliases/fontweight.md +30 -0
  172. package/assets/docs/guide/api/node/type-aliases/gradientstoprgba.md +23 -0
  173. package/assets/docs/guide/api/node/type-aliases/heightmode.md +18 -0
  174. package/assets/docs/guide/api/node/type-aliases/hexcolorstring.md +20 -0
  175. package/assets/docs/guide/api/node/type-aliases/historyid.md +20 -0
  176. package/assets/docs/guide/api/node/type-aliases/historyupdate.md +25 -0
  177. package/assets/docs/guide/api/node/type-aliases/horizontalblockalignment.md +18 -0
  178. package/assets/docs/guide/api/node/type-aliases/horizontalcontentfillalignment.md +18 -0
  179. package/assets/docs/guide/api/node/type-aliases/horizontaltextalignment.md +18 -0
  180. package/assets/docs/guide/api/node/type-aliases/imagemimetype.md +25 -0
  181. package/assets/docs/guide/api/node/type-aliases/intpropertyname.md +26 -0
  182. package/assets/docs/guide/api/node/type-aliases/liststyle.md +20 -0
  183. package/assets/docs/guide/api/node/type-aliases/locale.md +20 -0
  184. package/assets/docs/guide/api/node/type-aliases/loglevel.md +24 -0
  185. package/assets/docs/guide/api/node/type-aliases/mimetype.md +20 -0
  186. package/assets/docs/guide/api/node/type-aliases/objecttype.md +24 -0
  187. package/assets/docs/guide/api/node/type-aliases/objecttypelonghand.md +27 -0
  188. package/assets/docs/guide/api/node/type-aliases/objecttypeshorthand.md +27 -0
  189. package/assets/docs/guide/api/node/type-aliases/optionalprefix.md +24 -0
  190. package/assets/docs/guide/api/node/type-aliases/pageguidessource.md +18 -0
  191. package/assets/docs/guide/api/node/type-aliases/palettecolor.md +24 -0
  192. package/assets/docs/guide/api/node/type-aliases/positionmode.md +20 -0
  193. package/assets/docs/guide/api/node/type-aliases/positionxmode.md +18 -0
  194. package/assets/docs/guide/api/node/type-aliases/positionymode.md +18 -0
  195. package/assets/docs/guide/api/node/type-aliases/propertytype.md +31 -0
  196. package/assets/docs/guide/api/node/type-aliases/rgba.md +23 -0
  197. package/assets/docs/guide/api/node/type-aliases/rolestring.md +23 -0
  198. package/assets/docs/guide/api/node/type-aliases/scenefontsizeunit.md +18 -0
  199. package/assets/docs/guide/api/node/type-aliases/scenelayout.md +18 -0
  200. package/assets/docs/guide/api/node/type-aliases/scenemode.md +18 -0
  201. package/assets/docs/guide/api/node/type-aliases/scope.md +50 -0
  202. package/assets/docs/guide/api/node/type-aliases/settingboolpropertyname.md +62 -0
  203. package/assets/docs/guide/api/node/type-aliases/settingcolorpropertyname.md +38 -0
  204. package/assets/docs/guide/api/node/type-aliases/settingenumpropertyname.md +29 -0
  205. package/assets/docs/guide/api/node/type-aliases/settingenumtype.md +33 -0
  206. package/assets/docs/guide/api/node/type-aliases/settingenumvalues.md +29 -0
  207. package/assets/docs/guide/api/node/type-aliases/settingfloatpropertyname.md +25 -0
  208. package/assets/docs/guide/api/node/type-aliases/settingintpropertyname.md +18 -0
  209. package/assets/docs/guide/api/node/type-aliases/settingkey.md +20 -0
  210. package/assets/docs/guide/api/node/type-aliases/settingsbool.md +18 -0
  211. package/assets/docs/guide/api/node/type-aliases/settingscolor.md +20 -0
  212. package/assets/docs/guide/api/node/type-aliases/settingscolorrgba.md +24 -0
  213. package/assets/docs/guide/api/node/type-aliases/settingsenum.md +18 -0
  214. package/assets/docs/guide/api/node/type-aliases/settingsfloat.md +18 -0
  215. package/assets/docs/guide/api/node/type-aliases/settingsint.md +18 -0
  216. package/assets/docs/guide/api/node/type-aliases/settingsstring.md +18 -0
  217. package/assets/docs/guide/api/node/type-aliases/settingstringpropertyname.md +28 -0
  218. package/assets/docs/guide/api/node/type-aliases/settingtype.md +20 -0
  219. package/assets/docs/guide/api/node/type-aliases/settingvaluetype.md +26 -0
  220. package/assets/docs/guide/api/node/type-aliases/shapetype.md +24 -0
  221. package/assets/docs/guide/api/node/type-aliases/shapetypelonghand.md +21 -0
  222. package/assets/docs/guide/api/node/type-aliases/shapetypeshorthand.md +18 -0
  223. package/assets/docs/guide/api/node/type-aliases/shapevectorpathfillrule.md +18 -0
  224. package/assets/docs/guide/api/node/type-aliases/sizemode.md +20 -0
  225. package/assets/docs/guide/api/node/type-aliases/sortingorder.md +21 -0
  226. package/assets/docs/guide/api/node/type-aliases/sourcesetpropertyname.md +18 -0
  227. package/assets/docs/guide/api/node/type-aliases/splitoptions.md +28 -0
  228. package/assets/docs/guide/api/node/type-aliases/stringpropertyname.md +43 -0
  229. package/assets/docs/guide/api/node/type-aliases/strokecap.md +18 -0
  230. package/assets/docs/guide/api/node/type-aliases/strokecornergeometry.md +18 -0
  231. package/assets/docs/guide/api/node/type-aliases/strokedashendcap.md +18 -0
  232. package/assets/docs/guide/api/node/type-aliases/strokedashstartcap.md +18 -0
  233. package/assets/docs/guide/api/node/type-aliases/strokeendcap.md +18 -0
  234. package/assets/docs/guide/api/node/type-aliases/strokeposition.md +18 -0
  235. package/assets/docs/guide/api/node/type-aliases/strokestartcap.md +18 -0
  236. package/assets/docs/guide/api/node/type-aliases/strokestyle.md +18 -0
  237. package/assets/docs/guide/api/node/type-aliases/syncuriresolver.md +31 -0
  238. package/assets/docs/guide/api/node/type-aliases/textanimationwritingstyle.md +18 -0
  239. package/assets/docs/guide/api/node/type-aliases/textcase.md +20 -0
  240. package/assets/docs/guide/api/node/type-aliases/textdecorationline.md +27 -0
  241. package/assets/docs/guide/api/node/type-aliases/textdecorationstyle.md +26 -0
  242. package/assets/docs/guide/api/node/type-aliases/textverticalalignment.md +18 -0
  243. package/assets/docs/guide/api/node/type-aliases/timelinetrackvisibility.md +18 -0
  244. package/assets/docs/guide/api/node/type-aliases/touchpinchaction.md +18 -0
  245. package/assets/docs/guide/api/node/type-aliases/touchrotateaction.md +18 -0
  246. package/assets/docs/guide/api/node/type-aliases/typefacedefinition.md +41 -0
  247. package/assets/docs/guide/api/node/type-aliases/verticalblockalignment.md +18 -0
  248. package/assets/docs/guide/api/node/type-aliases/verticalcontentfillalignment.md +18 -0
  249. package/assets/docs/guide/api/node/type-aliases/videoexportoptions.md +54 -0
  250. package/assets/docs/guide/api/node/type-aliases/videomimetype.md +20 -0
  251. package/assets/docs/guide/api/node/type-aliases/widthmode.md +18 -0
  252. package/assets/docs/guide/api/node/type-aliases/xywh.md +23 -0
  253. package/assets/docs/guide/api/node/type-aliases/zoomautofitaxis.md +20 -0
  254. package/assets/docs/guide/api/node/type-aliases/zoomoptions.md +27 -0
  255. package/assets/docs/guide/api/node/variables/animation_types.md +21 -0
  256. package/assets/docs/guide/api/node/variables/animationbaselinedirectionvalues.md +18 -0
  257. package/assets/docs/guide/api/node/variables/animationblockswipetextdirectionvalues.md +18 -0
  258. package/assets/docs/guide/api/node/variables/animationeasingvalues.md +18 -0
  259. package/assets/docs/guide/api/node/variables/animationgrowdirectionvalues.md +18 -0
  260. package/assets/docs/guide/api/node/variables/animationjumploopdirectionvalues.md +18 -0
  261. package/assets/docs/guide/api/node/variables/animationkenburnsdirectionvalues.md +18 -0
  262. package/assets/docs/guide/api/node/variables/animationmergetextdirectionvalues.md +18 -0
  263. package/assets/docs/guide/api/node/variables/animationspindirectionvalues.md +18 -0
  264. package/assets/docs/guide/api/node/variables/animationspinloopdirectionvalues.md +18 -0
  265. package/assets/docs/guide/api/node/variables/animationtypewritertextwritingstylevalues.md +18 -0
  266. package/assets/docs/guide/api/node/variables/animationwipedirectionvalues.md +18 -0
  267. package/assets/docs/guide/api/node/variables/blendmodevalues.md +18 -0
  268. package/assets/docs/guide/api/node/variables/blur_types.md +21 -0
  269. package/assets/docs/guide/api/node/variables/cameraclampingovershootmodevalues.md +18 -0
  270. package/assets/docs/guide/api/node/variables/captionhorizontalalignmentvalues.md +18 -0
  271. package/assets/docs/guide/api/node/variables/captionverticalalignmentvalues.md +18 -0
  272. package/assets/docs/guide/api/node/variables/colorpickercolormodevalues.md +18 -0
  273. package/assets/docs/guide/api/node/variables/contentfillmodevalues.md +18 -0
  274. package/assets/docs/guide/api/node/variables/controlgizmomovehandlevisibilityvalues.md +18 -0
  275. package/assets/docs/guide/api/node/variables/controlgizmoresizehandlesvisibilityvalues.md +18 -0
  276. package/assets/docs/guide/api/node/variables/controlgizmorotatehandlesvisibilityvalues.md +18 -0
  277. package/assets/docs/guide/api/node/variables/controlgizmoscalehandlesvisibilityvalues.md +18 -0
  278. package/assets/docs/guide/api/node/variables/cutouttypevalues.md +18 -0
  279. package/assets/docs/guide/api/node/variables/design_block_types.md +21 -0
  280. package/assets/docs/guide/api/node/variables/doubleclickselectionmodevalues.md +18 -0
  281. package/assets/docs/guide/api/node/variables/effect_types.md +21 -0
  282. package/assets/docs/guide/api/node/variables/fill_types.md +21 -0
  283. package/assets/docs/guide/api/node/variables/fillpixelstreamorientationvalues.md +18 -0
  284. package/assets/docs/guide/api/node/variables/heightmodevalues.md +18 -0
  285. package/assets/docs/guide/api/node/variables/horizontalcontentfillalignmentvalues.md +18 -0
  286. package/assets/docs/guide/api/node/variables/loglevel.md +37 -0
  287. package/assets/docs/guide/api/node/variables/mimetype.md +41 -0
  288. package/assets/docs/guide/api/node/variables/pageguidessourcevalues.md +18 -0
  289. package/assets/docs/guide/api/node/variables/positionxmodevalues.md +18 -0
  290. package/assets/docs/guide/api/node/variables/positionymodevalues.md +18 -0
  291. package/assets/docs/guide/api/node/variables/scenedesignunitvalues.md +18 -0
  292. package/assets/docs/guide/api/node/variables/scenefontsizeunitvalues.md +18 -0
  293. package/assets/docs/guide/api/node/variables/scenelayoutvalues.md +18 -0
  294. package/assets/docs/guide/api/node/variables/scenemodevalues.md +18 -0
  295. package/assets/docs/guide/api/node/variables/shape_types.md +21 -0
  296. package/assets/docs/guide/api/node/variables/shapevectorpathfillrulevalues.md +18 -0
  297. package/assets/docs/guide/api/node/variables/strokecapvalues.md +18 -0
  298. package/assets/docs/guide/api/node/variables/strokecornergeometryvalues.md +18 -0
  299. package/assets/docs/guide/api/node/variables/strokedashendcapvalues.md +18 -0
  300. package/assets/docs/guide/api/node/variables/strokedashstartcapvalues.md +18 -0
  301. package/assets/docs/guide/api/node/variables/strokeendcapvalues.md +18 -0
  302. package/assets/docs/guide/api/node/variables/strokepositionvalues.md +18 -0
  303. package/assets/docs/guide/api/node/variables/strokestartcapvalues.md +18 -0
  304. package/assets/docs/guide/api/node/variables/strokestylevalues.md +18 -0
  305. package/assets/docs/guide/api/node/variables/textanimationwritingstylevalues.md +18 -0
  306. package/assets/docs/guide/api/node/variables/texthorizontalalignmentvalues.md +18 -0
  307. package/assets/docs/guide/api/node/variables/textverticalalignmentvalues.md +18 -0
  308. package/assets/docs/guide/api/node/variables/timelinetrackvisibilityvalues.md +18 -0
  309. package/assets/docs/guide/api/node/variables/touchpinchactionvalues.md +18 -0
  310. package/assets/docs/guide/api/node/variables/touchrotateactionvalues.md +18 -0
  311. package/assets/docs/guide/api/node/variables/verticalcontentfillalignmentvalues.md +18 -0
  312. package/assets/docs/guide/api/node/variables/widthmodevalues.md +18 -0
  313. package/assets/docs/guide/api/types.md +5 -9
  314. package/assets/docs/guide/api-reference/overview.md +7 -7
  315. package/assets/docs/guide/automation/auto-resize.md +263 -300
  316. package/assets/docs/guide/automation/data-merge.md +246 -275
  317. package/assets/docs/guide/automation/design-generation.md +102 -31
  318. package/assets/docs/guide/automation/multi-image-generation.md +758 -0
  319. package/assets/docs/guide/automation/overview.md +21 -4
  320. package/assets/docs/guide/automation.md +10 -5
  321. package/assets/docs/guide/capabilities.md +6 -4
  322. package/assets/docs/guide/colors/adjust.md +247 -249
  323. package/assets/docs/guide/colors/apply.md +127 -138
  324. package/assets/docs/guide/colors/basics.md +126 -150
  325. package/assets/docs/guide/colors/conversion.md +171 -177
  326. package/assets/docs/guide/colors/create-color-palette.md +244 -245
  327. package/assets/docs/guide/colors/extract-colors.md +144 -0
  328. package/assets/docs/guide/colors/for-print/cmyk.md +292 -352
  329. package/assets/docs/guide/colors/for-print/spot.md +521 -578
  330. package/assets/docs/guide/colors/for-print.md +9 -4
  331. package/assets/docs/guide/colors/for-screen/p3.md +12 -10
  332. package/assets/docs/guide/colors/for-screen/srgb.md +107 -133
  333. package/assets/docs/guide/colors/for-screen.md +9 -4
  334. package/assets/docs/guide/colors/overview.md +6 -4
  335. package/assets/docs/guide/colors/replace.md +381 -419
  336. package/assets/docs/guide/colors.md +9 -4
  337. package/assets/docs/guide/compatibility.md +7 -5
  338. package/assets/docs/guide/concepts/architecture.md +17 -15
  339. package/assets/docs/guide/concepts/assets.md +152 -140
  340. package/assets/docs/guide/concepts/blocks.md +227 -323
  341. package/assets/docs/guide/concepts/buffers.md +147 -276
  342. package/assets/docs/guide/concepts/design-units.md +95 -145
  343. package/assets/docs/guide/concepts/editing-workflow.md +69 -183
  344. package/assets/docs/guide/concepts/events.md +80 -122
  345. package/assets/docs/guide/concepts/headless-mode.md +237 -0
  346. package/assets/docs/guide/concepts/pages.md +137 -127
  347. package/assets/docs/guide/concepts/resources.md +156 -217
  348. package/assets/docs/guide/concepts/scenes.md +191 -210
  349. package/assets/docs/guide/concepts/templating.md +118 -74
  350. package/assets/docs/guide/concepts/terminology.md +49 -47
  351. package/assets/docs/guide/concepts/undo-and-history.md +229 -303
  352. package/assets/docs/guide/concepts.md +9 -7
  353. package/assets/docs/guide/configuration.md +252 -380
  354. package/assets/docs/guide/conversion/overview.md +33 -4
  355. package/assets/docs/guide/conversion/to-base64.md +127 -167
  356. package/assets/docs/guide/conversion/to-pdf.md +24 -474
  357. package/assets/docs/guide/conversion/to-png.md +168 -211
  358. package/assets/docs/guide/conversion.md +9 -4
  359. package/assets/docs/guide/create-audio/audio/add-music.md +301 -327
  360. package/assets/docs/guide/create-audio/audio/add-sound-effects.md +475 -359
  361. package/assets/docs/guide/create-audio/audio/loop.md +232 -272
  362. package/assets/docs/guide/create-composition/add-background.md +237 -239
  363. package/assets/docs/guide/create-composition/blend-modes.md +118 -209
  364. package/assets/docs/guide/create-composition/collage.md +538 -320
  365. package/assets/docs/guide/create-composition/group-and-ungroup.md +216 -261
  366. package/assets/docs/guide/create-composition/layer-management.md +219 -257
  367. package/assets/docs/guide/create-composition/layout.md +513 -315
  368. package/assets/docs/guide/create-composition/lock-design.md +90 -109
  369. package/assets/docs/guide/create-composition/multi-page.md +133 -113
  370. package/assets/docs/guide/create-composition/overview.md +16 -4
  371. package/assets/docs/guide/create-composition/programmatic.md +288 -344
  372. package/assets/docs/guide/create-composition.md +10 -5
  373. package/assets/docs/guide/create-templates/add-dynamic-content/placeholders.md +443 -569
  374. package/assets/docs/guide/create-templates/add-dynamic-content/set-editing-constraints.md +567 -470
  375. package/assets/docs/guide/create-templates/add-dynamic-content/text-variables.md +179 -516
  376. package/assets/docs/guide/create-templates/add-dynamic-content.md +226 -224
  377. package/assets/docs/guide/create-templates/add-to-template-library.md +183 -193
  378. package/assets/docs/guide/create-templates/edit-or-remove.md +297 -303
  379. package/assets/docs/guide/create-templates/from-scratch.md +207 -268
  380. package/assets/docs/guide/create-templates/import/from-scene-file.md +158 -236
  381. package/assets/docs/guide/create-templates/import.md +145 -161
  382. package/assets/docs/guide/create-templates/lock.md +42 -295
  383. package/assets/docs/guide/create-templates/overview.md +33 -4
  384. package/assets/docs/guide/create-templates.md +9 -5
  385. package/assets/docs/guide/create-video/audio/adjust-speed.md +157 -207
  386. package/assets/docs/guide/create-video/audio/adjust-volume.md +116 -227
  387. package/assets/docs/guide/create-video/control.md +352 -193
  388. package/assets/docs/guide/create-video/limitations.md +175 -280
  389. package/assets/docs/guide/create-video.md +11 -10
  390. package/assets/docs/guide/edit-image/add-watermark.md +283 -330
  391. package/assets/docs/guide/edit-image/overview.md +29 -4
  392. package/assets/docs/guide/edit-image/remove-bg.md +283 -337
  393. package/assets/docs/guide/edit-image/replace-colors.md +424 -502
  394. package/assets/docs/guide/edit-image/transform/crop.md +463 -402
  395. package/assets/docs/guide/edit-image/transform/flip.md +353 -0
  396. package/assets/docs/guide/edit-image/transform/move.md +143 -100
  397. package/assets/docs/guide/edit-image/transform/resize.md +118 -88
  398. package/assets/docs/guide/edit-image/transform/rotate.md +132 -165
  399. package/assets/docs/guide/edit-image/transform/scale.md +230 -228
  400. package/assets/docs/guide/edit-image/transform.md +10 -5
  401. package/assets/docs/guide/edit-image.md +11 -7
  402. package/assets/docs/guide/edit-video/add-captions.md +344 -421
  403. package/assets/docs/guide/edit-video/add-watermark.md +312 -258
  404. package/assets/docs/guide/edit-video/join-and-arrange.md +237 -371
  405. package/assets/docs/guide/edit-video/redaction.md +419 -385
  406. package/assets/docs/guide/edit-video/split.md +243 -493
  407. package/assets/docs/guide/edit-video/transform/crop.md +21 -352
  408. package/assets/docs/guide/edit-video/transform/flip.md +102 -76
  409. package/assets/docs/guide/edit-video/transform/move.md +258 -310
  410. package/assets/docs/guide/edit-video/transform/resize.md +264 -428
  411. package/assets/docs/guide/edit-video/transform/rotate.md +265 -228
  412. package/assets/docs/guide/edit-video/transform/scale.md +320 -417
  413. package/assets/docs/guide/edit-video/transform.md +10 -6
  414. package/assets/docs/guide/edit-video/trim.md +448 -494
  415. package/assets/docs/guide/engine-interface.md +51 -62
  416. package/assets/docs/guide/export-save-publish/create-thumbnail.md +148 -184
  417. package/assets/docs/guide/export-save-publish/export/compress.md +161 -559
  418. package/assets/docs/guide/export-save-publish/export/overview.md +224 -373
  419. package/assets/docs/guide/export-save-publish/export/partial-export.md +386 -577
  420. package/assets/docs/guide/export-save-publish/export/size-limits.md +215 -310
  421. package/assets/docs/guide/export-save-publish/export/to-jpeg.md +132 -213
  422. package/assets/docs/guide/export-save-publish/export/to-pdf.md +139 -267
  423. package/assets/docs/guide/export-save-publish/export/to-png.md +121 -165
  424. package/assets/docs/guide/export-save-publish/export/to-raw-data.md +187 -234
  425. package/assets/docs/guide/export-save-publish/export/to-webp.md +160 -190
  426. package/assets/docs/guide/export-save-publish/export/with-color-mask.md +359 -203
  427. package/assets/docs/guide/export-save-publish/export.md +14 -11
  428. package/assets/docs/guide/export-save-publish/for-printing.md +141 -237
  429. package/assets/docs/guide/export-save-publish/for-social-media.md +124 -261
  430. package/assets/docs/guide/export-save-publish/pre-export-validation.md +436 -522
  431. package/assets/docs/guide/export-save-publish/save.md +167 -226
  432. package/assets/docs/guide/export-save-publish/store-custom-metadata.md +97 -162
  433. package/assets/docs/guide/file-format-support.md +9 -9
  434. package/assets/docs/guide/fills/color.md +370 -347
  435. package/assets/docs/guide/fills/image.md +167 -196
  436. package/assets/docs/guide/fills/overview.md +6 -4
  437. package/assets/docs/guide/fills/video.md +286 -438
  438. package/assets/docs/guide/fills.md +12 -8
  439. package/assets/docs/guide/filters-and-effects/apply.md +598 -664
  440. package/assets/docs/guide/filters-and-effects/blur.md +261 -159
  441. package/assets/docs/guide/filters-and-effects/chroma-key-green-screen.md +194 -293
  442. package/assets/docs/guide/filters-and-effects/create-custom-filters.md +548 -466
  443. package/assets/docs/guide/filters-and-effects/create-custom-lut-filter.md +176 -244
  444. package/assets/docs/guide/filters-and-effects/distortion.md +317 -384
  445. package/assets/docs/guide/filters-and-effects/duotone.md +221 -217
  446. package/assets/docs/guide/filters-and-effects/gradients.md +670 -813
  447. package/assets/docs/guide/filters-and-effects/overview.md +7 -7
  448. package/assets/docs/guide/filters-and-effects/support.md +97 -132
  449. package/assets/docs/guide/filters-and-effects.md +11 -6
  450. package/assets/docs/guide/get-started/agent-skills.md +20 -18
  451. package/assets/docs/guide/get-started/build-with-ai.md +7 -4
  452. package/assets/docs/guide/get-started/bun.md +219 -0
  453. package/assets/docs/guide/get-started/deno.md +161 -0
  454. package/assets/docs/guide/get-started/mcp-server.md +6 -4
  455. package/assets/docs/guide/get-started/overview.md +11 -6
  456. package/assets/docs/guide/get-started/vanilla-aws-lambda.md +506 -0
  457. package/assets/docs/guide/get-started/vanilla-clone-github-project.md +124 -0
  458. package/assets/docs/guide/get-started/vanilla.md +235 -0
  459. package/assets/docs/guide/guides/export-save-publish/export/audio.md +80 -66
  460. package/assets/docs/guide/guides.md +10 -9
  461. package/assets/docs/guide/import-media/asset-panel/refresh-assets.md +259 -288
  462. package/assets/docs/guide/import-media/concepts.md +20 -38
  463. package/assets/docs/guide/import-media/content-json-schema.md +145 -125
  464. package/assets/docs/guide/import-media/default-assets.md +113 -161
  465. package/assets/docs/guide/import-media/edit-or-remove-assets.md +391 -395
  466. package/assets/docs/guide/import-media/file-format-support.md +78 -61
  467. package/assets/docs/guide/import-media/from-remote-source/asset-versioning.md +273 -244
  468. package/assets/docs/guide/import-media/from-remote-source/remote-asset.md +152 -222
  469. package/assets/docs/guide/import-media/from-remote-source.md +9 -11
  470. package/assets/docs/guide/import-media/overview.md +5 -5
  471. package/assets/docs/guide/import-media/retrieve-mimetype.md +216 -108
  472. package/assets/docs/guide/import-media/size-limits.md +6 -4
  473. package/assets/docs/guide/import-media/source-sets.md +190 -251
  474. package/assets/docs/guide/import-media.md +10 -8
  475. package/assets/docs/guide/insert-media/audio.md +202 -195
  476. package/assets/docs/guide/insert-media/images.md +190 -188
  477. package/assets/docs/guide/insert-media/position-and-align.md +284 -551
  478. package/assets/docs/guide/insert-media/shapes-or-stickers.md +402 -418
  479. package/assets/docs/guide/insert-media/videos.md +236 -203
  480. package/assets/docs/guide/insert-media.md +10 -5
  481. package/assets/docs/guide/key-capabilities.md +36 -4
  482. package/assets/docs/guide/key-concepts.md +6 -4
  483. package/assets/docs/guide/licensing.md +6 -4
  484. package/assets/docs/guide/llms-txt.md +11 -7
  485. package/assets/docs/guide/open-the-editor/blank-canvas.md +102 -63
  486. package/assets/docs/guide/open-the-editor/from-image.md +157 -127
  487. package/assets/docs/guide/open-the-editor/from-template.md +131 -92
  488. package/assets/docs/guide/open-the-editor/from-video.md +204 -212
  489. package/assets/docs/guide/open-the-editor/import-design/from-archive.md +310 -360
  490. package/assets/docs/guide/open-the-editor/import-design/from-indesign.md +716 -513
  491. package/assets/docs/guide/open-the-editor/import-design/from-photoshop.md +667 -695
  492. package/assets/docs/guide/open-the-editor/import-design.md +228 -266
  493. package/assets/docs/guide/open-the-editor/load-scene.md +72 -68
  494. package/assets/docs/guide/open-the-editor/overview.md +6 -4
  495. package/assets/docs/guide/open-the-editor/uri-resolver.md +160 -251
  496. package/assets/docs/guide/open-the-editor.md +11 -9
  497. package/assets/docs/guide/outlines/overview.md +12 -4
  498. package/assets/docs/guide/outlines/shadows-and-glows.md +105 -410
  499. package/assets/docs/guide/outlines/strokes.md +218 -166
  500. package/assets/docs/guide/outlines.md +9 -4
  501. package/assets/docs/guide/overview.md +14 -6
  502. package/assets/docs/guide/performance.md +220 -113
  503. package/assets/docs/guide/plugins/print-ready-pdf.md +273 -368
  504. package/assets/docs/guide/plugins.md +10 -16
  505. package/assets/docs/guide/rules/asset-handling.md +7 -18
  506. package/assets/docs/guide/rules/common-pitfalls.md +25 -42
  507. package/assets/docs/guide/rules/content-fill-mode.md +4 -4
  508. package/assets/docs/guide/rules/enforce-brand-guidelines.md +398 -567
  509. package/assets/docs/guide/rules/lock-content.md +188 -231
  510. package/assets/docs/guide/rules/moderate-content.md +580 -571
  511. package/assets/docs/guide/rules/overview.md +345 -380
  512. package/assets/docs/guide/rules/silent-init-errors.md +4 -1
  513. package/assets/docs/guide/rules/verify-properties-before-use.md +2 -11
  514. package/assets/docs/guide/rules.md +10 -5
  515. package/assets/docs/guide/security.md +7 -5
  516. package/assets/docs/guide/serve-assets.md +57 -284
  517. package/assets/docs/guide/settings.md +96 -74
  518. package/assets/docs/guide/shapes.md +10 -5
  519. package/assets/docs/guide/stickers-and-shapes/combine.md +397 -583
  520. package/assets/docs/guide/stickers-and-shapes/create-cutout.md +181 -268
  521. package/assets/docs/guide/stickers-and-shapes/create-edit/create-shapes.md +418 -431
  522. package/assets/docs/guide/stickers-and-shapes/create-edit/create-stickers.md +147 -226
  523. package/assets/docs/guide/stickers-and-shapes/create-edit/edit-shapes.md +138 -123
  524. package/assets/docs/guide/stickers-and-shapes/insert-qr-code.md +151 -149
  525. package/assets/docs/guide/stickers.md +9 -4
  526. package/assets/docs/guide/text/add.md +470 -482
  527. package/assets/docs/guide/text/adjust-spacing.md +179 -214
  528. package/assets/docs/guide/text/auto-size.md +210 -271
  529. package/assets/docs/guide/text/edit.md +294 -309
  530. package/assets/docs/guide/text/effects.md +154 -190
  531. package/assets/docs/guide/text/emojis.md +199 -232
  532. package/assets/docs/guide/text/language-support.md +369 -382
  533. package/assets/docs/guide/text/overview.md +41 -4
  534. package/assets/docs/guide/text/styling.md +239 -273
  535. package/assets/docs/guide/text/text-designs.md +405 -544
  536. package/assets/docs/guide/text.md +10 -9
  537. package/assets/docs/guide/to-v1-19.md +12 -10
  538. package/assets/docs/guide/upgrade.md +8 -9
  539. package/assets/docs/guide/use-templates/apply-template.md +174 -163
  540. package/assets/docs/guide/use-templates/generate.md +171 -152
  541. package/assets/docs/guide/use-templates/overview.md +32 -4
  542. package/assets/docs/guide/use-templates/programmatic.md +266 -301
  543. package/assets/docs/guide/use-templates/replace-content.md +181 -171
  544. package/assets/docs/guide/what-is-cesdk.md +71 -282
  545. package/assets/docs/handbook/SKILL.md +24 -0
  546. package/dist/assets/inline.generated.d.ts.map +1 -1
  547. package/dist/assets/inline.generated.js +544 -406
  548. package/dist/assets/inline.generated.js.map +1 -1
  549. package/dist/assets/load-browser.d.ts +1 -1
  550. package/dist/assets/load-browser.js +1 -1
  551. package/dist/assets/load-browser.js.map +1 -1
  552. package/dist/assets/load-node.d.ts +1 -1
  553. package/dist/assets/load-node.js +1 -1
  554. package/dist/assets/load-node.js.map +1 -1
  555. package/dist/cli/http.d.ts.map +1 -1
  556. package/dist/cli/http.js +16 -30
  557. package/dist/cli/http.js.map +1 -1
  558. package/dist/cli/redirect-console.d.ts +1 -1
  559. package/dist/cli/redirect-console.d.ts.map +1 -1
  560. package/dist/cli/redirect-console.js +12 -3
  561. package/dist/cli/redirect-console.js.map +1 -1
  562. package/dist/cli/resolve-license.d.ts.map +1 -1
  563. package/dist/cli/resolve-license.js +8 -6
  564. package/dist/cli/resolve-license.js.map +1 -1
  565. package/dist/cli/stdio.d.ts +9 -0
  566. package/dist/cli/stdio.d.ts.map +1 -1
  567. package/dist/cli/stdio.js +136 -24
  568. package/dist/cli/stdio.js.map +1 -1
  569. package/dist/cli.js +10 -1
  570. package/dist/cli.js.map +1 -1
  571. package/dist/config.d.ts +22 -4
  572. package/dist/config.d.ts.map +1 -1
  573. package/dist/config.js +32 -2
  574. package/dist/config.js.map +1 -1
  575. package/dist/diagnostics/bundle.d.ts +10 -0
  576. package/dist/diagnostics/bundle.d.ts.map +1 -0
  577. package/dist/diagnostics/bundle.js +148 -0
  578. package/dist/diagnostics/bundle.js.map +1 -0
  579. package/dist/diagnostics/compose.d.ts +3 -0
  580. package/dist/diagnostics/compose.d.ts.map +1 -0
  581. package/dist/diagnostics/compose.js +15 -0
  582. package/dist/diagnostics/compose.js.map +1 -0
  583. package/dist/diagnostics/events.d.ts +40 -0
  584. package/dist/diagnostics/events.d.ts.map +1 -0
  585. package/dist/diagnostics/events.js +3 -0
  586. package/dist/diagnostics/events.js.map +1 -0
  587. package/dist/diagnostics/file-sink.d.ts +38 -0
  588. package/dist/diagnostics/file-sink.d.ts.map +1 -0
  589. package/dist/diagnostics/file-sink.js +157 -0
  590. package/dist/diagnostics/file-sink.js.map +1 -0
  591. package/dist/diagnostics/redact.d.ts +7 -0
  592. package/dist/diagnostics/redact.d.ts.map +1 -0
  593. package/dist/diagnostics/redact.js +43 -0
  594. package/dist/diagnostics/redact.js.map +1 -0
  595. package/dist/diagnostics/tool-call-adapter.d.ts +4 -0
  596. package/dist/diagnostics/tool-call-adapter.d.ts.map +1 -0
  597. package/dist/diagnostics/tool-call-adapter.js +21 -0
  598. package/dist/diagnostics/tool-call-adapter.js.map +1 -0
  599. package/dist/engine/cesdk-adapter.d.ts +10 -2
  600. package/dist/engine/cesdk-adapter.d.ts.map +1 -1
  601. package/dist/engine/cesdk-adapter.js +17 -3
  602. package/dist/engine/cesdk-adapter.js.map +1 -1
  603. package/dist/engine/engine-capacity.d.ts +16 -0
  604. package/dist/engine/engine-capacity.d.ts.map +1 -0
  605. package/dist/engine/engine-capacity.js +48 -0
  606. package/dist/engine/engine-capacity.js.map +1 -0
  607. package/dist/engine/engine-slots.d.ts +48 -0
  608. package/dist/engine/engine-slots.d.ts.map +1 -0
  609. package/dist/engine/engine-slots.js +182 -0
  610. package/dist/engine/engine-slots.js.map +1 -0
  611. package/dist/engine/index.d.ts +1 -0
  612. package/dist/engine/index.d.ts.map +1 -1
  613. package/dist/engine/index.js +4 -0
  614. package/dist/engine/index.js.map +1 -1
  615. package/dist/engine/scene-resource-schemes.d.ts +2 -0
  616. package/dist/engine/scene-resource-schemes.d.ts.map +1 -0
  617. package/dist/engine/scene-resource-schemes.js +20 -0
  618. package/dist/engine/scene-resource-schemes.js.map +1 -0
  619. package/dist/http/server.d.ts +0 -6
  620. package/dist/http/server.d.ts.map +1 -1
  621. package/dist/http/server.js +1 -2
  622. package/dist/http/server.js.map +1 -1
  623. package/dist/server.d.ts +0 -4
  624. package/dist/server.d.ts.map +1 -1
  625. package/dist/server.js +4 -60
  626. package/dist/server.js.map +1 -1
  627. package/dist/tools/asset-generate.d.ts.map +1 -1
  628. package/dist/tools/asset-generate.js +1 -8
  629. package/dist/tools/asset-generate.js.map +1 -1
  630. package/dist/tools/edit.d.ts +3 -0
  631. package/dist/tools/edit.d.ts.map +1 -1
  632. package/dist/tools/edit.js +145 -96
  633. package/dist/tools/edit.js.map +1 -1
  634. package/dist/tools/engine.d.ts +13 -0
  635. package/dist/tools/engine.d.ts.map +1 -1
  636. package/dist/tools/engine.js +28 -0
  637. package/dist/tools/engine.js.map +1 -1
  638. package/dist/tools/export.d.ts +3 -0
  639. package/dist/tools/export.d.ts.map +1 -1
  640. package/dist/tools/export.js +146 -108
  641. package/dist/tools/export.js.map +1 -1
  642. package/dist/tools/import.d.ts +12 -0
  643. package/dist/tools/import.d.ts.map +1 -0
  644. package/dist/tools/import.js +144 -0
  645. package/dist/tools/import.js.map +1 -0
  646. package/dist/tools/index.d.ts +3 -0
  647. package/dist/tools/index.d.ts.map +1 -1
  648. package/dist/tools/index.js +44 -4
  649. package/dist/tools/index.js.map +1 -1
  650. package/dist/tools/load.d.ts +26 -0
  651. package/dist/tools/load.d.ts.map +1 -0
  652. package/dist/tools/load.js +400 -0
  653. package/dist/tools/load.js.map +1 -0
  654. package/dist/tools/preview.d.ts +3 -0
  655. package/dist/tools/preview.d.ts.map +1 -1
  656. package/dist/tools/preview.js +79 -44
  657. package/dist/tools/preview.js.map +1 -1
  658. package/dist/tools/result.d.ts +1 -1
  659. package/dist/tools/result.js +2 -2
  660. package/dist/tools/result.js.map +1 -1
  661. package/dist/tools/spans.d.ts +45 -0
  662. package/dist/tools/spans.d.ts.map +1 -0
  663. package/dist/tools/spans.js +77 -0
  664. package/dist/tools/spans.js.map +1 -0
  665. package/dist/tools/telemetry-wrapper.d.ts +4 -0
  666. package/dist/tools/telemetry-wrapper.d.ts.map +1 -0
  667. package/dist/tools/telemetry-wrapper.js +43 -0
  668. package/dist/tools/telemetry-wrapper.js.map +1 -0
  669. package/dist/viewer/cesdk-cdn.d.ts +16 -0
  670. package/dist/viewer/cesdk-cdn.d.ts.map +1 -0
  671. package/dist/viewer/cesdk-cdn.js +30 -0
  672. package/dist/viewer/cesdk-cdn.js.map +1 -0
  673. package/dist/viewer/router.d.ts +6 -0
  674. package/dist/viewer/router.d.ts.map +1 -1
  675. package/dist/viewer/router.js +4 -1
  676. package/dist/viewer/router.js.map +1 -1
  677. package/dist/viewer/spa-assets.generated.d.ts.map +1 -1
  678. package/dist/viewer/spa-assets.generated.js +2 -3
  679. package/dist/viewer/spa-assets.generated.js.map +1 -1
  680. package/dist/workspace/content-hash.d.ts +2 -0
  681. package/dist/workspace/content-hash.d.ts.map +1 -0
  682. package/dist/workspace/content-hash.js +15 -0
  683. package/dist/workspace/content-hash.js.map +1 -0
  684. package/package.json +19 -10
  685. package/assets/docs/guide/actions.md +0 -1038
  686. package/assets/docs/guide/animation/overview.md +0 -22
  687. package/assets/docs/guide/automation/batch-processing.md +0 -474
  688. package/assets/docs/guide/browser-support.md +0 -38
  689. package/assets/docs/guide/concepts/edit-modes.md +0 -431
  690. package/assets/docs/guide/concepts/headless-mode/browser.md +0 -291
  691. package/assets/docs/guide/create-audio/audio.md +0 -336
  692. package/assets/docs/guide/create-video/overview.md +0 -224
  693. package/assets/docs/guide/create-video/timeline-editor.md +0 -622
  694. package/assets/docs/guide/create-video/update-caption-presets.md +0 -676
  695. package/assets/docs/guide/edit-image/vectorize.md +0 -204
  696. package/assets/docs/guide/export-save-publish/export/to-html5.md +0 -474
  697. package/assets/docs/guide/export-save-publish/export/to-mp4.md +0 -364
  698. package/assets/docs/guide/get-started/vanilla-js/quickstart.md +0 -175
  699. package/assets/docs/guide/grid-and-rulers.md +0 -222
  700. package/assets/docs/guide/guides/text/rendering-internals.md +0 -796
  701. package/assets/docs/guide/import-media/asset-library.md +0 -23
  702. package/assets/docs/guide/import-media/asset-panel/basics.md +0 -324
  703. package/assets/docs/guide/import-media/asset-panel/customize.md +0 -478
  704. package/assets/docs/guide/import-media/asset-panel/thumbnails.md +0 -633
  705. package/assets/docs/guide/import-media/capture-from-camera/record-video.md +0 -137
  706. package/assets/docs/guide/import-media/capture-from-camera.md +0 -20
  707. package/assets/docs/guide/import-media/from-local-source/user-upload.md +0 -438
  708. package/assets/docs/guide/import-media/from-local-source.md +0 -20
  709. package/assets/docs/guide/import-media/from-remote-source/getty-images.md +0 -627
  710. package/assets/docs/guide/import-media/from-remote-source/imgly-premium-assets.md +0 -625
  711. package/assets/docs/guide/import-media/from-remote-source/pexels.md +0 -692
  712. package/assets/docs/guide/import-media/from-remote-source/soundstripe.md +0 -497
  713. package/assets/docs/guide/import-media/from-remote-source/third-party.md +0 -51
  714. package/assets/docs/guide/import-media/from-remote-source/unsplash.md +0 -914
  715. package/assets/docs/guide/import-media/from-remote-source/your-server.md +0 -764
  716. package/assets/docs/guide/open-the-editor/from-htmlcanvas.md +0 -228
  717. package/assets/docs/guide/open-the-editor/set-zoom-level.md +0 -303
  718. package/assets/docs/guide/plugins/asset-sources.md +0 -553
  719. package/assets/docs/guide/starterkits/3d-mockup-editor.md +0 -748
  720. package/assets/docs/guide/starterkits/advanced-editor.md +0 -698
  721. package/assets/docs/guide/starterkits/advanced-video-editor.md +0 -696
  722. package/assets/docs/guide/starterkits/ai-editor.md +0 -749
  723. package/assets/docs/guide/starterkits/airtable-image-editor.md +0 -672
  724. package/assets/docs/guide/starterkits/apparel-ui.md +0 -188
  725. package/assets/docs/guide/starterkits/assets.md +0 -27
  726. package/assets/docs/guide/starterkits/auto-resize.md +0 -586
  727. package/assets/docs/guide/starterkits/automated-video-generation.md +0 -692
  728. package/assets/docs/guide/starterkits/background-removal-editor.md +0 -480
  729. package/assets/docs/guide/starterkits/content-moderation.md +0 -863
  730. package/assets/docs/guide/starterkits/creative-automation.md +0 -28
  731. package/assets/docs/guide/starterkits/custom-built-uis.md +0 -26
  732. package/assets/docs/guide/starterkits/customization.md +0 -29
  733. package/assets/docs/guide/starterkits/cutout-lines-editor.md +0 -470
  734. package/assets/docs/guide/starterkits/data-merge.md +0 -850
  735. package/assets/docs/guide/starterkits/design-editor.md +0 -698
  736. package/assets/docs/guide/starterkits/design-generation.md +0 -719
  737. package/assets/docs/guide/starterkits/design-validation.md +0 -808
  738. package/assets/docs/guide/starterkits/editor-ui-configurations.md +0 -14
  739. package/assets/docs/guide/starterkits/export-options.md +0 -724
  740. package/assets/docs/guide/starterkits/export-using-renderer.md +0 -708
  741. package/assets/docs/guide/starterkits/extensibility.md +0 -28
  742. package/assets/docs/guide/starterkits/force-crop-editor.md +0 -675
  743. package/assets/docs/guide/starterkits/form-based-template-adoption.md +0 -522
  744. package/assets/docs/guide/starterkits/getty-images-editor.md +0 -700
  745. package/assets/docs/guide/starterkits/html5-ads-exporter.md +0 -719
  746. package/assets/docs/guide/starterkits/indesign-template-import.md +0 -580
  747. package/assets/docs/guide/starterkits/layouts-editor.md +0 -724
  748. package/assets/docs/guide/starterkits/mobile-ui.md +0 -185
  749. package/assets/docs/guide/starterkits/mockup-editor.md +0 -745
  750. package/assets/docs/guide/starterkits/multi-image-generation.md +0 -542
  751. package/assets/docs/guide/starterkits/page-sizes-editor.md +0 -657
  752. package/assets/docs/guide/starterkits/pexels-image-editor.md +0 -665
  753. package/assets/docs/guide/starterkits/photo-editor.md +0 -755
  754. package/assets/docs/guide/starterkits/photo-ui.md +0 -186
  755. package/assets/docs/guide/starterkits/photobook-ui.md +0 -188
  756. package/assets/docs/guide/starterkits/placeholders.md +0 -678
  757. package/assets/docs/guide/starterkits/player.md +0 -405
  758. package/assets/docs/guide/starterkits/plugins.md +0 -25
  759. package/assets/docs/guide/starterkits/postcard-editor.md +0 -202
  760. package/assets/docs/guide/starterkits/pptx-template-import.md +0 -581
  761. package/assets/docs/guide/starterkits/print-ready-pdf-editor.md +0 -746
  762. package/assets/docs/guide/starterkits/product-editor.md +0 -773
  763. package/assets/docs/guide/starterkits/psd-template-import.md +0 -580
  764. package/assets/docs/guide/starterkits/qr-code-editor.md +0 -470
  765. package/assets/docs/guide/starterkits/single-page-editor.md +0 -661
  766. package/assets/docs/guide/starterkits/start-with-image.md +0 -684
  767. package/assets/docs/guide/starterkits/start-with-video.md +0 -651
  768. package/assets/docs/guide/starterkits/t-shirt-designer.md +0 -742
  769. package/assets/docs/guide/starterkits/templating.md +0 -23
  770. package/assets/docs/guide/starterkits/theming.md +0 -662
  771. package/assets/docs/guide/starterkits/translation-internationalization.md +0 -662
  772. package/assets/docs/guide/starterkits/unsplash-editor.md +0 -839
  773. package/assets/docs/guide/starterkits/vectorizer-editor.md +0 -466
  774. package/assets/docs/guide/starterkits/version-history.md +0 -745
  775. package/assets/docs/guide/starterkits/video-animations.md +0 -853
  776. package/assets/docs/guide/starterkits/video-captions.md +0 -884
  777. package/assets/docs/guide/starterkits/video-editing.md +0 -25
  778. package/assets/docs/guide/starterkits/video-editor.md +0 -696
  779. package/assets/docs/guide/starterkits/video-export-options.md +0 -676
  780. package/assets/docs/guide/starterkits/viewer.md +0 -400
  781. package/assets/docs/guide/starterkits.md +0 -41
  782. package/assets/docs/guide/stickers-and-shapes/create-edit/vector-edit.md +0 -362
  783. package/assets/docs/guide/text/custom-fonts.md +0 -401
  784. package/assets/docs/guide/text/decorations.md +0 -330
  785. package/assets/docs/guide/text/enumerations.md +0 -258
  786. package/assets/docs/guide/to-v1-10.md +0 -131
  787. package/assets/docs/guide/to-v1-13.md +0 -165
  788. package/assets/docs/guide/to-v1-32.md +0 -110
  789. package/assets/docs/guide/to-v1-69.md +0 -468
  790. package/assets/docs/guide/to-v1-72.md +0 -193
  791. package/assets/docs/guide/use-templates/library.md +0 -450
  792. package/assets/docs/guide/user-interface/ai-integration/audio-generation.md +0 -428
  793. package/assets/docs/guide/user-interface/ai-integration/auto-captions.md +0 -337
  794. package/assets/docs/guide/user-interface/ai-integration/custom-provider.md +0 -853
  795. package/assets/docs/guide/user-interface/ai-integration/gateway-provider.md +0 -1045
  796. package/assets/docs/guide/user-interface/ai-integration/image-generation.md +0 -641
  797. package/assets/docs/guide/user-interface/ai-integration/integrate.md +0 -966
  798. package/assets/docs/guide/user-interface/ai-integration/proxy-server.md +0 -99
  799. package/assets/docs/guide/user-interface/ai-integration/text-generation.md +0 -498
  800. package/assets/docs/guide/user-interface/ai-integration/video-generation.md +0 -493
  801. package/assets/docs/guide/user-interface/ai-integration.md +0 -30
  802. package/assets/docs/guide/user-interface/appearance/change-ui-font.md +0 -316
  803. package/assets/docs/guide/user-interface/appearance/custom-labels.md +0 -509
  804. package/assets/docs/guide/user-interface/appearance/icons.md +0 -373
  805. package/assets/docs/guide/user-interface/appearance/theming.md +0 -665
  806. package/assets/docs/guide/user-interface/appearance.md +0 -23
  807. package/assets/docs/guide/user-interface/build-your-own-ui.md +0 -620
  808. package/assets/docs/guide/user-interface/customization/canvas-menu.md +0 -412
  809. package/assets/docs/guide/user-interface/customization/canvas.md +0 -281
  810. package/assets/docs/guide/user-interface/customization/color-palette.md +0 -413
  811. package/assets/docs/guide/user-interface/customization/crop-presets.md +0 -384
  812. package/assets/docs/guide/user-interface/customization/disable-or-enable.md +0 -676
  813. package/assets/docs/guide/user-interface/customization/dock.md +0 -399
  814. package/assets/docs/guide/user-interface/customization/force-crop.md +0 -289
  815. package/assets/docs/guide/user-interface/customization/inspector-bar.md +0 -371
  816. package/assets/docs/guide/user-interface/customization/navigation-bar.md +0 -516
  817. package/assets/docs/guide/user-interface/customization/page-format.md +0 -436
  818. package/assets/docs/guide/user-interface/customization/panel.md +0 -605
  819. package/assets/docs/guide/user-interface/customization/quick-start/add-action-buttons.md +0 -531
  820. package/assets/docs/guide/user-interface/customization/quick-start/add-dock-buttons.md +0 -358
  821. package/assets/docs/guide/user-interface/customization/quick-start/create-custom-components.md +0 -374
  822. package/assets/docs/guide/user-interface/customization/quick-start/reorder-components.md +0 -323
  823. package/assets/docs/guide/user-interface/customization/quick-start/show-hide-components.md +0 -294
  824. package/assets/docs/guide/user-interface/customization/quick-start.md +0 -12
  825. package/assets/docs/guide/user-interface/customization/reference/component-order-api.md +0 -519
  826. package/assets/docs/guide/user-interface/customization/reference/component-reference.md +0 -333
  827. package/assets/docs/guide/user-interface/customization/reference.md +0 -12
  828. package/assets/docs/guide/user-interface/customization.md +0 -39
  829. package/assets/docs/guide/user-interface/localization.md +0 -633
  830. package/assets/docs/guide/user-interface/overview.md +0 -167
  831. package/assets/docs/guide/user-interface/ui-extensions/add-custom-feature.md +0 -411
  832. package/assets/docs/guide/user-interface/ui-extensions/asset-library.md +0 -721
  833. package/assets/docs/guide/user-interface/ui-extensions/create-custom-panel.md +0 -331
  834. package/assets/docs/guide/user-interface/ui-extensions/customize-behaviour.md +0 -553
  835. package/assets/docs/guide/user-interface/ui-extensions/notifications-and-dialogs.md +0 -672
  836. package/assets/docs/guide/user-interface/ui-extensions/quick-actions.md +0 -415
  837. package/assets/docs/guide/user-interface/ui-extensions/register-new-component.md +0 -521
  838. package/assets/docs/guide/user-interface/ui-extensions.md +0 -26
  839. package/assets/docs/guide/user-interface.md +0 -25
  840. package/assets/prompts/evals-assetGenerate.md +0 -12
  841. package/assets/prompts/evals-brutalistCore.md +0 -34
  842. package/assets/prompts/evals-danskCatalogue.md +0 -31
  843. package/assets/prompts/evals-exportRoundTrip.md +0 -12
  844. package/assets/prompts/evals-inspectPriorCode.md +0 -16
  845. package/assets/prompts/evals-listProjectFiles.md +0 -6
  846. package/assets/prompts/evals-readAndExplainScript.md +0 -6
  847. package/assets/prompts/evals-resumeAcrossRestart.md +0 -15
  848. package/assets/prompts/evals-rewindRecovery.md +0 -10
  849. package/assets/prompts/evals-searchAcrossFiles.md +0 -6
  850. package/assets/prompts/evals-weddingCard.md +0 -20
  851. package/assets/prompts/explain.md +0 -6
  852. package/assets/prompts/review.md +0 -6
  853. package/dist/dashboard/router.d.ts +0 -3
  854. package/dist/dashboard/router.d.ts.map +0 -1
  855. package/dist/dashboard/router.js +0 -19
  856. package/dist/dashboard/router.js.map +0 -1
  857. package/dist/dashboard/spa-assets.generated.d.ts +0 -2
  858. package/dist/dashboard/spa-assets.generated.d.ts.map +0 -1
  859. package/dist/dashboard/spa-assets.generated.js +0 -220
  860. package/dist/dashboard/spa-assets.generated.js.map +0 -1
  861. package/dist/frontmatter.d.ts +0 -15
  862. package/dist/frontmatter.d.ts.map +0 -1
  863. package/dist/frontmatter.js +0 -46
  864. package/dist/frontmatter.js.map +0 -1
  865. package/dist/metrics/mount.d.ts +0 -11
  866. package/dist/metrics/mount.d.ts.map +0 -1
  867. package/dist/metrics/mount.js +0 -13
  868. package/dist/metrics/mount.js.map +0 -1
  869. package/dist/metrics/recorder.d.ts +0 -55
  870. package/dist/metrics/recorder.d.ts.map +0 -1
  871. package/dist/metrics/recorder.js +0 -97
  872. package/dist/metrics/recorder.js.map +0 -1
  873. package/dist/test/test/cli/dispatcher.test.d.ts +0 -2
  874. package/dist/test/test/cli/dispatcher.test.d.ts.map +0 -1
  875. package/dist/test/test/cli/dispatcher.test.js +0 -47
  876. package/dist/test/test/cli/dispatcher.test.js.map +0 -1
  877. package/dist/test/test/cli/redirect-console.test.d.ts +0 -2
  878. package/dist/test/test/cli/redirect-console.test.d.ts.map +0 -1
  879. package/dist/test/test/cli/redirect-console.test.js +0 -47
  880. package/dist/test/test/cli/redirect-console.test.js.map +0 -1
  881. package/dist/test/test/cli/resolve-license.test.d.ts +0 -2
  882. package/dist/test/test/cli/resolve-license.test.d.ts.map +0 -1
  883. package/dist/test/test/cli/resolve-license.test.js +0 -20
  884. package/dist/test/test/cli/resolve-license.test.js.map +0 -1
  885. package/dist/test/test/cli/stdio-license.test.d.ts +0 -2
  886. package/dist/test/test/cli/stdio-license.test.d.ts.map +0 -1
  887. package/dist/test/test/cli/stdio-license.test.js +0 -19
  888. package/dist/test/test/cli/stdio-license.test.js.map +0 -1
  889. package/dist/test/test/config.test.d.ts +0 -2
  890. package/dist/test/test/config.test.d.ts.map +0 -1
  891. package/dist/test/test/config.test.js +0 -91
  892. package/dist/test/test/config.test.js.map +0 -1
  893. package/dist/test/test/cross-ref.test.d.ts +0 -2
  894. package/dist/test/test/cross-ref.test.d.ts.map +0 -1
  895. package/dist/test/test/cross-ref.test.js +0 -39
  896. package/dist/test/test/cross-ref.test.js.map +0 -1
  897. package/dist/test/test/engine/asset-sources.test.d.ts +0 -2
  898. package/dist/test/test/engine/asset-sources.test.d.ts.map +0 -1
  899. package/dist/test/test/engine/asset-sources.test.js +0 -100
  900. package/dist/test/test/engine/asset-sources.test.js.map +0 -1
  901. package/dist/test/test/engine/mutex.test.d.ts +0 -2
  902. package/dist/test/test/engine/mutex.test.d.ts.map +0 -1
  903. package/dist/test/test/engine/mutex.test.js +0 -63
  904. package/dist/test/test/engine/mutex.test.js.map +0 -1
  905. package/dist/test/test/engine/session.test.d.ts +0 -2
  906. package/dist/test/test/engine/session.test.d.ts.map +0 -1
  907. package/dist/test/test/engine/session.test.js +0 -159
  908. package/dist/test/test/engine/session.test.js.map +0 -1
  909. package/dist/test/test/engine/unsplash-source.test.d.ts +0 -2
  910. package/dist/test/test/engine/unsplash-source.test.d.ts.map +0 -1
  911. package/dist/test/test/engine/unsplash-source.test.js +0 -129
  912. package/dist/test/test/engine/unsplash-source.test.js.map +0 -1
  913. package/dist/test/test/engine/uri-resolver.test.d.ts +0 -2
  914. package/dist/test/test/engine/uri-resolver.test.d.ts.map +0 -1
  915. package/dist/test/test/engine/uri-resolver.test.js +0 -38
  916. package/dist/test/test/engine/uri-resolver.test.js.map +0 -1
  917. package/dist/test/test/frontmatter.test.d.ts +0 -2
  918. package/dist/test/test/frontmatter.test.d.ts.map +0 -1
  919. package/dist/test/test/frontmatter.test.js +0 -55
  920. package/dist/test/test/frontmatter.test.js.map +0 -1
  921. package/dist/test/test/gateway/hosted-stub.test.d.ts +0 -2
  922. package/dist/test/test/gateway/hosted-stub.test.d.ts.map +0 -1
  923. package/dist/test/test/gateway/hosted-stub.test.js +0 -11
  924. package/dist/test/test/gateway/hosted-stub.test.js.map +0 -1
  925. package/dist/test/test/gateway/local.test.d.ts +0 -2
  926. package/dist/test/test/gateway/local.test.d.ts.map +0 -1
  927. package/dist/test/test/gateway/local.test.js +0 -29
  928. package/dist/test/test/gateway/local.test.js.map +0 -1
  929. package/dist/test/test/handbook-contract.test.d.ts +0 -2
  930. package/dist/test/test/handbook-contract.test.d.ts.map +0 -1
  931. package/dist/test/test/handbook-contract.test.js +0 -75
  932. package/dist/test/test/handbook-contract.test.js.map +0 -1
  933. package/dist/test/test/http/server.test.d.ts +0 -2
  934. package/dist/test/test/http/server.test.d.ts.map +0 -1
  935. package/dist/test/test/http/server.test.js +0 -374
  936. package/dist/test/test/http/server.test.js.map +0 -1
  937. package/dist/test/test/http/session-id-header.test.d.ts +0 -2
  938. package/dist/test/test/http/session-id-header.test.d.ts.map +0 -1
  939. package/dist/test/test/http/session-id-header.test.js +0 -76
  940. package/dist/test/test/http/session-id-header.test.js.map +0 -1
  941. package/dist/test/test/http/session-manager.test.d.ts +0 -2
  942. package/dist/test/test/http/session-manager.test.d.ts.map +0 -1
  943. package/dist/test/test/http/session-manager.test.js +0 -97
  944. package/dist/test/test/http/session-manager.test.js.map +0 -1
  945. package/dist/test/test/http/workspace-auth.test.d.ts +0 -2
  946. package/dist/test/test/http/workspace-auth.test.d.ts.map +0 -1
  947. package/dist/test/test/http/workspace-auth.test.js +0 -41
  948. package/dist/test/test/http/workspace-auth.test.js.map +0 -1
  949. package/dist/test/test/metrics/mount.test.d.ts +0 -2
  950. package/dist/test/test/metrics/mount.test.d.ts.map +0 -1
  951. package/dist/test/test/metrics/mount.test.js +0 -59
  952. package/dist/test/test/metrics/mount.test.js.map +0 -1
  953. package/dist/test/test/metrics/recorder.test.d.ts +0 -2
  954. package/dist/test/test/metrics/recorder.test.d.ts.map +0 -1
  955. package/dist/test/test/metrics/recorder.test.js +0 -118
  956. package/dist/test/test/metrics/recorder.test.js.map +0 -1
  957. package/dist/test/test/revisions/hash.test.d.ts +0 -2
  958. package/dist/test/test/revisions/hash.test.d.ts.map +0 -1
  959. package/dist/test/test/revisions/hash.test.js +0 -33
  960. package/dist/test/test/revisions/hash.test.js.map +0 -1
  961. package/dist/test/test/revisions/store.test.d.ts +0 -2
  962. package/dist/test/test/revisions/store.test.d.ts.map +0 -1
  963. package/dist/test/test/revisions/store.test.js +0 -315
  964. package/dist/test/test/revisions/store.test.js.map +0 -1
  965. package/dist/test/test/server.metrics.test.d.ts +0 -2
  966. package/dist/test/test/server.metrics.test.d.ts.map +0 -1
  967. package/dist/test/test/server.metrics.test.js +0 -87
  968. package/dist/test/test/server.metrics.test.js.map +0 -1
  969. package/dist/test/test/server.test.d.ts +0 -2
  970. package/dist/test/test/server.test.d.ts.map +0 -1
  971. package/dist/test/test/server.test.js +0 -186
  972. package/dist/test/test/server.test.js.map +0 -1
  973. package/dist/test/test/skill-tools.test.d.ts +0 -2
  974. package/dist/test/test/skill-tools.test.d.ts.map +0 -1
  975. package/dist/test/test/skill-tools.test.js +0 -84
  976. package/dist/test/test/skill-tools.test.js.map +0 -1
  977. package/dist/test/test/smoke.test.d.ts +0 -2
  978. package/dist/test/test/smoke.test.d.ts.map +0 -1
  979. package/dist/test/test/smoke.test.js +0 -8
  980. package/dist/test/test/smoke.test.js.map +0 -1
  981. package/dist/test/test/tools/asset-generate.test.d.ts +0 -2
  982. package/dist/test/test/tools/asset-generate.test.d.ts.map +0 -1
  983. package/dist/test/test/tools/asset-generate.test.js +0 -66
  984. package/dist/test/test/tools/asset-generate.test.js.map +0 -1
  985. package/dist/test/test/tools/asset-search.test.d.ts +0 -2
  986. package/dist/test/test/tools/asset-search.test.d.ts.map +0 -1
  987. package/dist/test/test/tools/asset-search.test.js +0 -121
  988. package/dist/test/test/tools/asset-search.test.js.map +0 -1
  989. package/dist/test/test/tools/edit.test.d.ts +0 -2
  990. package/dist/test/test/tools/edit.test.d.ts.map +0 -1
  991. package/dist/test/test/tools/edit.test.js +0 -267
  992. package/dist/test/test/tools/edit.test.js.map +0 -1
  993. package/dist/test/test/tools/export.test.d.ts +0 -2
  994. package/dist/test/test/tools/export.test.d.ts.map +0 -1
  995. package/dist/test/test/tools/export.test.js +0 -174
  996. package/dist/test/test/tools/export.test.js.map +0 -1
  997. package/dist/test/test/tools/history.test.d.ts +0 -2
  998. package/dist/test/test/tools/history.test.d.ts.map +0 -1
  999. package/dist/test/test/tools/history.test.js +0 -29
  1000. package/dist/test/test/tools/history.test.js.map +0 -1
  1001. package/dist/test/test/tools/index.test.d.ts +0 -2
  1002. package/dist/test/test/tools/index.test.d.ts.map +0 -1
  1003. package/dist/test/test/tools/index.test.js +0 -55
  1004. package/dist/test/test/tools/index.test.js.map +0 -1
  1005. package/dist/test/test/tools/inspect.test.d.ts +0 -2
  1006. package/dist/test/test/tools/inspect.test.d.ts.map +0 -1
  1007. package/dist/test/test/tools/inspect.test.js +0 -62
  1008. package/dist/test/test/tools/inspect.test.js.map +0 -1
  1009. package/dist/test/test/tools/list.test.d.ts +0 -2
  1010. package/dist/test/test/tools/list.test.d.ts.map +0 -1
  1011. package/dist/test/test/tools/list.test.js +0 -23
  1012. package/dist/test/test/tools/list.test.js.map +0 -1
  1013. package/dist/test/test/tools/metrics.test.d.ts +0 -2
  1014. package/dist/test/test/tools/metrics.test.d.ts.map +0 -1
  1015. package/dist/test/test/tools/metrics.test.js +0 -29
  1016. package/dist/test/test/tools/metrics.test.js.map +0 -1
  1017. package/dist/test/test/tools/open-editor.test.d.ts +0 -2
  1018. package/dist/test/test/tools/open-editor.test.d.ts.map +0 -1
  1019. package/dist/test/test/tools/open-editor.test.js +0 -53
  1020. package/dist/test/test/tools/open-editor.test.js.map +0 -1
  1021. package/dist/test/test/tools/preview.test.d.ts +0 -2
  1022. package/dist/test/test/tools/preview.test.d.ts.map +0 -1
  1023. package/dist/test/test/tools/preview.test.js +0 -75
  1024. package/dist/test/test/tools/preview.test.js.map +0 -1
  1025. package/dist/test/test/tools/rename.test.d.ts +0 -2
  1026. package/dist/test/test/tools/rename.test.d.ts.map +0 -1
  1027. package/dist/test/test/tools/rename.test.js +0 -16
  1028. package/dist/test/test/tools/rename.test.js.map +0 -1
  1029. package/dist/test/test/tools/save.test.d.ts +0 -2
  1030. package/dist/test/test/tools/save.test.d.ts.map +0 -1
  1031. package/dist/test/test/tools/save.test.js +0 -137
  1032. package/dist/test/test/tools/save.test.js.map +0 -1
  1033. package/dist/test/test/viewer/broadcaster.test.d.ts +0 -2
  1034. package/dist/test/test/viewer/broadcaster.test.d.ts.map +0 -1
  1035. package/dist/test/test/viewer/broadcaster.test.js +0 -53
  1036. package/dist/test/test/viewer/broadcaster.test.js.map +0 -1
  1037. package/dist/test/test/viewer/resource-route.test.d.ts +0 -2
  1038. package/dist/test/test/viewer/resource-route.test.d.ts.map +0 -1
  1039. package/dist/test/test/viewer/resource-route.test.js +0 -70
  1040. package/dist/test/test/viewer/resource-route.test.js.map +0 -1
  1041. package/dist/test/test/viewer/router.test.d.ts +0 -2
  1042. package/dist/test/test/viewer/router.test.d.ts.map +0 -1
  1043. package/dist/test/test/viewer/router.test.js +0 -227
  1044. package/dist/test/test/viewer/router.test.js.map +0 -1
  1045. package/dist/test/test/viewer/session-mount.test.d.ts +0 -2
  1046. package/dist/test/test/viewer/session-mount.test.d.ts.map +0 -1
  1047. package/dist/test/test/viewer/session-mount.test.js +0 -52
  1048. package/dist/test/test/viewer/session-mount.test.js.map +0 -1
  1049. package/dist/test/test/viewer/url-builder.test.d.ts +0 -2
  1050. package/dist/test/test/viewer/url-builder.test.d.ts.map +0 -1
  1051. package/dist/test/test/viewer/url-builder.test.js +0 -98
  1052. package/dist/test/test/viewer/url-builder.test.js.map +0 -1
  1053. package/dist/test/test/workspace/hosted-stub.test.d.ts +0 -2
  1054. package/dist/test/test/workspace/hosted-stub.test.d.ts.map +0 -1
  1055. package/dist/test/test/workspace/hosted-stub.test.js +0 -30
  1056. package/dist/test/test/workspace/hosted-stub.test.js.map +0 -1
  1057. package/dist/test/test/workspace/in-memory.test.d.ts +0 -2
  1058. package/dist/test/test/workspace/in-memory.test.d.ts.map +0 -1
  1059. package/dist/test/test/workspace/in-memory.test.js +0 -4
  1060. package/dist/test/test/workspace/in-memory.test.js.map +0 -1
  1061. package/dist/test/test/workspace/node-fs.test.d.ts +0 -2
  1062. package/dist/test/test/workspace/node-fs.test.d.ts.map +0 -1
  1063. package/dist/test/test/workspace/node-fs.test.js +0 -20
  1064. package/dist/test/test/workspace/node-fs.test.js.map +0 -1
  1065. package/dist/test/test/workspace/s3.test.d.ts +0 -2
  1066. package/dist/test/test/workspace/s3.test.d.ts.map +0 -1
  1067. package/dist/test/test/workspace/s3.test.js +0 -153
  1068. package/dist/test/test/workspace/s3.test.js.map +0 -1
  1069. package/dist/test/test/workspace/scoped.test.d.ts +0 -2
  1070. package/dist/test/test/workspace/scoped.test.d.ts.map +0 -1
  1071. package/dist/test/test/workspace/scoped.test.js +0 -59
  1072. package/dist/test/test/workspace/scoped.test.js.map +0 -1
  1073. package/dist/test/test/workspace/shared-contract.d.ts +0 -3
  1074. package/dist/test/test/workspace/shared-contract.d.ts.map +0 -1
  1075. package/dist/test/test/workspace/shared-contract.js +0 -92
  1076. package/dist/test/test/workspace/shared-contract.js.map +0 -1
  1077. package/dist/test/tsconfig.test.tsbuildinfo +0 -1
  1078. package/dist/test/vitest.config.d.ts +0 -3
  1079. package/dist/test/vitest.config.d.ts.map +0 -1
  1080. package/dist/test/vitest.config.js +0 -8
  1081. package/dist/test/vitest.config.js.map +0 -1
  1082. package/dist/tools/metrics.d.ts +0 -11
  1083. package/dist/tools/metrics.d.ts.map +0 -1
  1084. package/dist/tools/metrics.js +0 -28
  1085. package/dist/tools/metrics.js.map +0 -1
@@ -2,11 +2,14 @@ import type { Mutex } from '../engine/mutex.js';
2
2
  import type { EngineSession } from '../engine/session.js';
3
3
  import type { RevisionStore } from '../revisions/store.js';
4
4
  import type { CodesignMcpToolRegistration } from '../server.js';
5
+ import { type TelemetrySink } from './spans.js';
5
6
  export interface CreatePreviewToolOptions<E = unknown> {
6
7
  store: RevisionStore;
7
8
  session: EngineSession<E>;
8
9
  /** Guards the shared engine — load-then-export must not interleave with another session's edit (see engine/mutex.ts). */
9
10
  engineLock: Mutex;
11
+ /** Diagnostics telemetry port. Absent → no-op (no timing overhead beyond a few clocks). */
12
+ telemetry?: TelemetrySink;
10
13
  }
11
14
  export declare function createPreviewTool<E = unknown>(opts: CreatePreviewToolOptions<E>): CodesignMcpToolRegistration;
12
15
  //# sourceMappingURL=preview.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../src/tools/preview.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,sBAAsB,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AA6ChE,MAAM,WAAW,wBAAwB,CAAC,CAAC,GAAG,OAAO;IACnD,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC1B,yHAAyH;IACzH,UAAU,EAAE,KAAK,CAAC;CACnB;AAUD,wBAAgB,iBAAiB,CAAC,CAAC,GAAG,OAAO,EAC3C,IAAI,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAChC,2BAA2B,CAgE7B"}
1
+ {"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../src/tools/preview.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,sBAAsB,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AA6CpB,MAAM,WAAW,wBAAwB,CAAC,CAAC,GAAG,OAAO;IACnD,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC1B,yHAAyH;IACzH,UAAU,EAAE,KAAK,CAAC;IAClB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAUD,wBAAgB,iBAAiB,CAAC,CAAC,GAAG,OAAO,EAC3C,IAAI,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAChC,2BAA2B,CAsG7B"}
@@ -4,6 +4,8 @@
4
4
  // (spec §6.1): when supplied and the engine slot is at a different revision,
5
5
  // the session loads that revision before exporting. Without `revision`, renders
6
6
  // the engine's current state (uses `session.currentSlot()` — side-effect-free).
7
+ import { performance } from 'node:perf_hooks';
8
+ import { SpanRecorder, NOOP_TELEMETRY_SINK, summarizeResult, toErrorShape } from './spans.js';
7
9
  const MAX_DIMENSION_PX = 1800;
8
10
  const DEFAULT_TARGET_WIDTH = 512;
9
11
  const DESCRIPTION = [
@@ -40,64 +42,97 @@ function bytesToBase64(bytes) {
40
42
  }
41
43
  export function createPreviewTool(opts) {
42
44
  const { store, session, engineLock } = opts;
45
+ const telemetry = opts.telemetry ?? NOOP_TELEMETRY_SINK;
43
46
  return {
44
47
  name: 'preview',
45
48
  description: DESCRIPTION,
46
49
  inputSchema: PREVIEW_INPUT_SCHEMA,
47
50
  call: async (rawArgs) => {
48
- const args = (rawArgs ?? {});
49
- if (typeof args.blockId !== 'number') {
50
- return {
51
- isError: true,
52
- content: [
53
- {
54
- type: 'text',
55
- text: 'preview: `blockId` (integer) is required.'
56
- }
57
- ]
58
- };
59
- }
60
- // Load (if a revision was given) and export read the shared engine across
61
- // awaits — serialize against any concurrent engine-touching tool call.
62
- return engineLock.runExclusive(async () => {
63
- let slot;
64
- if (args.revision !== undefined) {
65
- const rev = await store.read(args.revision);
66
- await session.populate(args.revision, rev.scene);
67
- slot = await session.acquire(args.revision);
68
- }
69
- else {
70
- // No revision: render the current engine state via the side-effect-free
71
- // currentSlot accessor (does NOT reset). If no slot is warm, error.
72
- const current = session.currentSlot();
73
- if (!current) {
51
+ const rec = new SpanRecorder();
52
+ const startedAt = performance.now();
53
+ let result;
54
+ let threw;
55
+ let revision;
56
+ try {
57
+ result = await (async () => {
58
+ const args = (rawArgs ?? {});
59
+ if (typeof args.blockId !== 'number') {
74
60
  return {
75
61
  isError: true,
76
62
  content: [
77
63
  {
78
64
  type: 'text',
79
- text: 'preview: no engine state to render. Run `edit` first, or pass `revision` to load a specific revision.'
65
+ text: 'preview: `blockId` (integer) is required.'
80
66
  }
81
67
  ]
82
68
  };
83
69
  }
84
- slot = current;
85
- }
86
- const eng = slot.engine;
87
- const format = args.format ?? 'webp';
88
- const mimeType = `image/${format}`;
89
- const targetWidth = Math.min(args.width ?? DEFAULT_TARGET_WIDTH, MAX_DIMENSION_PX);
90
- const exportOpts = { targetWidth };
91
- if (args.height !== undefined)
92
- exportOpts.targetHeight = Math.min(args.height, MAX_DIMENSION_PX);
93
- const blob = await eng.block.export(args.blockId, mimeType, exportOpts);
94
- const bytes = new Uint8Array(await blob.arrayBuffer());
95
- return {
96
- content: [
97
- { type: 'image', data: bytesToBase64(bytes), mimeType }
98
- ]
99
- };
100
- });
70
+ // Load (if a revision was given) and export read the shared engine across
71
+ // awaits — serialize against any concurrent engine-touching tool call.
72
+ const beforeLock = performance.now();
73
+ return engineLock.runExclusive(async () => {
74
+ rec.add('lock_wait', performance.now() - beforeLock);
75
+ let slot;
76
+ if (args.revision !== undefined) {
77
+ const revId = args.revision;
78
+ revision = revId;
79
+ const rev = await rec.time('workspace_read', () => store.read(revId));
80
+ slot = await rec.time('engine_scene_load', async () => {
81
+ await session.populate(revId, rev.scene);
82
+ return session.acquire(revId);
83
+ });
84
+ }
85
+ else {
86
+ // No revision: render the current engine state via the side-effect-free
87
+ // currentSlot accessor (does NOT reset). If no slot is warm, error.
88
+ const current = session.currentSlot();
89
+ if (!current) {
90
+ return {
91
+ isError: true,
92
+ content: [
93
+ {
94
+ type: 'text',
95
+ text: 'preview: no engine state to render. Run `edit` first, or pass `revision` to load a specific revision.'
96
+ }
97
+ ]
98
+ };
99
+ }
100
+ slot = current;
101
+ }
102
+ const eng = slot.engine;
103
+ const format = args.format ?? 'webp';
104
+ const mimeType = `image/${format}`;
105
+ const targetWidth = Math.min(args.width ?? DEFAULT_TARGET_WIDTH, MAX_DIMENSION_PX);
106
+ const exportOpts = { targetWidth };
107
+ if (args.height !== undefined)
108
+ exportOpts.targetHeight = Math.min(args.height, MAX_DIMENSION_PX);
109
+ const blob = await rec.time('engine_execute', () => eng.block.export(args.blockId, mimeType, exportOpts));
110
+ const bytes = new Uint8Array(await blob.arrayBuffer());
111
+ return {
112
+ content: [
113
+ { type: 'image', data: bytesToBase64(bytes), mimeType }
114
+ ]
115
+ };
116
+ });
117
+ })();
118
+ return result;
119
+ }
120
+ catch (err) {
121
+ threw = err;
122
+ throw err;
123
+ }
124
+ finally {
125
+ telemetry.record({
126
+ tool: 'preview',
127
+ succeeded: threw === undefined && result?.isError !== true,
128
+ totalMs: performance.now() - startedAt,
129
+ spans: rec.list(),
130
+ args: rawArgs,
131
+ ...(result !== undefined ? { result: summarizeResult(result) } : {}),
132
+ ...(revision ? { revision } : {}),
133
+ ...(threw ? { error: toErrorShape(threw) } : {})
134
+ });
135
+ }
101
136
  }
102
137
  };
103
138
  }
@@ -1 +1 @@
1
- {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/tools/preview.ts"],"names":[],"mappings":"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","sourcesContent":["// packages/codesign-mcp/src/tools/preview.ts\n//\n// `preview` — renders a block to an inline image. Adds an optional `revision`\n// (spec §6.1): when supplied and the engine slot is at a different revision,\n// the session loads that revision before exporting. Without `revision`, renders\n// the engine's current state (uses `session.currentSlot()` — side-effect-free).\n\nimport type { Mutex } from '../engine/mutex.js';\nimport type { EngineSession, EngineSlot } from '../engine/session.js';\nimport type { RevisionStore } from '../revisions/store.js';\nimport type { CodesignMcpToolRegistration } from '../server.js';\n\nconst MAX_DIMENSION_PX = 1800;\nconst DEFAULT_TARGET_WIDTH = 512;\n\ninterface MinimalEngine {\n block: {\n export(blockId: number, mimeType: string, options?: unknown): Promise<Blob>;\n };\n}\n\ninterface PreviewArgs {\n blockId: number;\n revision?: string;\n format?: 'webp' | 'png' | 'jpeg';\n width?: number;\n height?: number;\n}\n\nconst DESCRIPTION = [\n 'Render a block (almost always a page) to an inline image so you can see the result.',\n '',\n \"`blockId` is REQUIRED — preview the page you're working on, not the scene root.\",\n '',\n \"Optional `revision`: if supplied, loads that revision into the engine before rendering. Without it, renders the engine's current state (almost always what you want directly after `edit`).\",\n '',\n \"Defaults: format='webp', width=512. Width/height clamped at 1800 px (Anthropic many-image limit).\"\n].join('\\n');\n\nconst PREVIEW_INPUT_SCHEMA = {\n type: 'object' as const,\n properties: {\n blockId: { type: 'integer' as const },\n revision: {\n type: 'string' as const,\n description: \"Revision id; defaults to the engine's current state.\"\n },\n format: { enum: ['webp', 'png', 'jpeg'] },\n width: { type: 'integer' as const, minimum: 1 },\n height: { type: 'integer' as const, minimum: 1 }\n },\n required: ['blockId'],\n additionalProperties: false\n};\n\nexport interface CreatePreviewToolOptions<E = unknown> {\n store: RevisionStore;\n session: EngineSession<E>;\n /** Guards the shared engine — load-then-export must not interleave with another session's edit (see engine/mutex.ts). */\n engineLock: Mutex;\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n if (typeof Buffer !== 'undefined')\n return Buffer.from(bytes).toString('base64');\n let s = '';\n for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]);\n return btoa(s);\n}\n\nexport function createPreviewTool<E = unknown>(\n opts: CreatePreviewToolOptions<E>\n): CodesignMcpToolRegistration {\n const { store, session, engineLock } = opts;\n return {\n name: 'preview',\n description: DESCRIPTION,\n inputSchema: PREVIEW_INPUT_SCHEMA,\n call: async (rawArgs) => {\n const args = (rawArgs ?? {}) as PreviewArgs;\n if (typeof args.blockId !== 'number') {\n return {\n isError: true,\n content: [\n {\n type: 'text' as const,\n text: 'preview: `blockId` (integer) is required.'\n }\n ]\n };\n }\n // Load (if a revision was given) and export read the shared engine across\n // awaits — serialize against any concurrent engine-touching tool call.\n return engineLock.runExclusive(async () => {\n let slot: EngineSlot<E>;\n if (args.revision !== undefined) {\n const rev = await store.read(args.revision);\n await session.populate(args.revision, rev.scene);\n slot = await session.acquire(args.revision);\n } else {\n // No revision: render the current engine state via the side-effect-free\n // currentSlot accessor (does NOT reset). If no slot is warm, error.\n const current = session.currentSlot();\n if (!current) {\n return {\n isError: true,\n content: [\n {\n type: 'text' as const,\n text: 'preview: no engine state to render. Run `edit` first, or pass `revision` to load a specific revision.'\n }\n ]\n };\n }\n slot = current;\n }\n const eng = slot.engine as MinimalEngine;\n const format = args.format ?? 'webp';\n const mimeType = `image/${format}`;\n const targetWidth = Math.min(\n args.width ?? DEFAULT_TARGET_WIDTH,\n MAX_DIMENSION_PX\n );\n const exportOpts: Record<string, unknown> = { targetWidth };\n if (args.height !== undefined)\n exportOpts.targetHeight = Math.min(args.height, MAX_DIMENSION_PX);\n const blob = await eng.block.export(args.blockId, mimeType, exportOpts);\n const bytes = new Uint8Array(await blob.arrayBuffer());\n return {\n content: [\n { type: 'image' as const, data: bytesToBase64(bytes), mimeType }\n ]\n };\n });\n }\n };\n}\n"]}
1
+ {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/tools/preview.ts"],"names":[],"mappings":"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","sourcesContent":["// packages/codesign-mcp/src/tools/preview.ts\n//\n// `preview` — renders a block to an inline image. Adds an optional `revision`\n// (spec §6.1): when supplied and the engine slot is at a different revision,\n// the session loads that revision before exporting. Without `revision`, renders\n// the engine's current state (uses `session.currentSlot()` — side-effect-free).\n\nimport { performance } from 'node:perf_hooks';\nimport type { Mutex } from '../engine/mutex.js';\nimport type { EngineSession, EngineSlot } from '../engine/session.js';\nimport type { RevisionStore } from '../revisions/store.js';\nimport type { CodesignMcpToolRegistration } from '../server.js';\nimport {\n SpanRecorder,\n NOOP_TELEMETRY_SINK,\n summarizeResult,\n toErrorShape,\n type TelemetrySink\n} from './spans.js';\n\nconst MAX_DIMENSION_PX = 1800;\nconst DEFAULT_TARGET_WIDTH = 512;\n\ninterface MinimalEngine {\n block: {\n export(blockId: number, mimeType: string, options?: unknown): Promise<Blob>;\n };\n}\n\ninterface PreviewArgs {\n blockId: number;\n revision?: string;\n format?: 'webp' | 'png' | 'jpeg';\n width?: number;\n height?: number;\n}\n\nconst DESCRIPTION = [\n 'Render a block (almost always a page) to an inline image so you can see the result.',\n '',\n \"`blockId` is REQUIRED — preview the page you're working on, not the scene root.\",\n '',\n \"Optional `revision`: if supplied, loads that revision into the engine before rendering. Without it, renders the engine's current state (almost always what you want directly after `edit`).\",\n '',\n \"Defaults: format='webp', width=512. Width/height clamped at 1800 px (Anthropic many-image limit).\"\n].join('\\n');\n\nconst PREVIEW_INPUT_SCHEMA = {\n type: 'object' as const,\n properties: {\n blockId: { type: 'integer' as const },\n revision: {\n type: 'string' as const,\n description: \"Revision id; defaults to the engine's current state.\"\n },\n format: { enum: ['webp', 'png', 'jpeg'] },\n width: { type: 'integer' as const, minimum: 1 },\n height: { type: 'integer' as const, minimum: 1 }\n },\n required: ['blockId'],\n additionalProperties: false\n};\n\nexport interface CreatePreviewToolOptions<E = unknown> {\n store: RevisionStore;\n session: EngineSession<E>;\n /** Guards the shared engine — load-then-export must not interleave with another session's edit (see engine/mutex.ts). */\n engineLock: Mutex;\n /** Diagnostics telemetry port. Absent → no-op (no timing overhead beyond a few clocks). */\n telemetry?: TelemetrySink;\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n if (typeof Buffer !== 'undefined')\n return Buffer.from(bytes).toString('base64');\n let s = '';\n for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]);\n return btoa(s);\n}\n\nexport function createPreviewTool<E = unknown>(\n opts: CreatePreviewToolOptions<E>\n): CodesignMcpToolRegistration {\n const { store, session, engineLock } = opts;\n const telemetry = opts.telemetry ?? NOOP_TELEMETRY_SINK;\n return {\n name: 'preview',\n description: DESCRIPTION,\n inputSchema: PREVIEW_INPUT_SCHEMA,\n call: async (rawArgs) => {\n const rec = new SpanRecorder();\n const startedAt = performance.now();\n type CallResult = Awaited<\n ReturnType<CodesignMcpToolRegistration['call']>\n >;\n let result: CallResult | undefined;\n let threw: unknown;\n let revision: string | undefined;\n try {\n result = await (async (): Promise<CallResult> => {\n const args = (rawArgs ?? {}) as PreviewArgs;\n if (typeof args.blockId !== 'number') {\n return {\n isError: true,\n content: [\n {\n type: 'text' as const,\n text: 'preview: `blockId` (integer) is required.'\n }\n ]\n };\n }\n // Load (if a revision was given) and export read the shared engine across\n // awaits — serialize against any concurrent engine-touching tool call.\n const beforeLock = performance.now();\n return engineLock.runExclusive(async () => {\n rec.add('lock_wait', performance.now() - beforeLock);\n let slot: EngineSlot<E>;\n if (args.revision !== undefined) {\n const revId = args.revision;\n revision = revId;\n const rev = await rec.time('workspace_read', () =>\n store.read(revId)\n );\n slot = await rec.time('engine_scene_load', async () => {\n await session.populate(revId, rev.scene);\n return session.acquire(revId);\n });\n } else {\n // No revision: render the current engine state via the side-effect-free\n // currentSlot accessor (does NOT reset). If no slot is warm, error.\n const current = session.currentSlot();\n if (!current) {\n return {\n isError: true,\n content: [\n {\n type: 'text' as const,\n text: 'preview: no engine state to render. Run `edit` first, or pass `revision` to load a specific revision.'\n }\n ]\n };\n }\n slot = current;\n }\n const eng = slot.engine as MinimalEngine;\n const format = args.format ?? 'webp';\n const mimeType = `image/${format}`;\n const targetWidth = Math.min(\n args.width ?? DEFAULT_TARGET_WIDTH,\n MAX_DIMENSION_PX\n );\n const exportOpts: Record<string, unknown> = { targetWidth };\n if (args.height !== undefined)\n exportOpts.targetHeight = Math.min(args.height, MAX_DIMENSION_PX);\n const blob = await rec.time('engine_execute', () =>\n eng.block.export(args.blockId, mimeType, exportOpts)\n );\n const bytes = new Uint8Array(await blob.arrayBuffer());\n return {\n content: [\n { type: 'image' as const, data: bytesToBase64(bytes), mimeType }\n ]\n };\n });\n })();\n return result;\n } catch (err) {\n threw = err;\n throw err;\n } finally {\n telemetry.record({\n tool: 'preview',\n succeeded: threw === undefined && result?.isError !== true,\n totalMs: performance.now() - startedAt,\n spans: rec.list(),\n args: rawArgs,\n ...(result !== undefined ? { result: summarizeResult(result) } : {}),\n ...(revision ? { revision } : {}),\n ...(threw ? { error: toErrorShape(threw) } : {})\n });\n }\n }\n };\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import type { ImageContent, TextContent } from './content-types.js';
2
2
  /**
3
- * The strict return contract for `design_exec`.
3
+ * The strict return contract for `edit`.
4
4
  *
5
5
  * The function body must return undefined, a single MessagePart, or an array
6
6
  * of MessageParts. Anything else throws an educational error so the LLM
@@ -47,9 +47,9 @@ function inspect(value) {
47
47
  return typeof value;
48
48
  }
49
49
  function badShape(value) {
50
- return new Error(`design_exec must return undefined, a MessagePart, or MessagePart[]. Got: ${inspect(value)}. ` +
50
+ return new Error(`edit must return undefined, a MessagePart, or MessagePart[]. Got: ${inspect(value)}. ` +
51
51
  `Wrap explicitly — e.g. return { type: "text", text: String(value) }, or return ` +
52
52
  `{ type: "image", data: "<base64>", mimeType: "image/png" }. For visual verification, ` +
53
- `prefer the design_capture tool — it renders + encodes for you.`);
53
+ `prefer the preview tool — it renders + encodes for you.`);
54
54
  }
55
55
  //# sourceMappingURL=result.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/tools/result.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/D,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;IACD,IACE,CAAC,CAAC,IAAI,KAAK,OAAO;QAClB,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;QAC1B,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAC9B,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC/D,CAAC;IACD,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACjD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACrD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC;IAC5C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAC3B,OAAO,WAAW,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IAC1E,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,UAAU,KAAK,GAAG,CAAC;IACzD,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,WAAW,KAAK,GAAG,CAAC;IAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,KAAK,CAAC,MAAM,SAAS,CAAC;IAChE,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,KAAK,YAAY,IAAI;QACtD,OAAO,QAAQ,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,IAAI,SAAS,GAAG,CAAC;IAC5D,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,cAAc,KAAK,CAAC,UAAU,IAAI,CAAC;IAC3E,IAAI,KAAK,YAAY,WAAW;QAAE,OAAO,eAAe,KAAK,CAAC,UAAU,IAAI,CAAC;IAC7E,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC;aACtC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,OAAO,WAAW,IAAI,IAAI,CAAC;IAC7B,CAAC;IACD,OAAO,OAAO,KAAK,CAAC;AACtB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,IAAI,KAAK,CACd,4EAA4E,OAAO,CAAC,KAAK,CAAC,IAAI;QAC5F,iFAAiF;QACjF,uFAAuF;QACvF,gEAAgE,CACnE,CAAC;AACJ,CAAC","sourcesContent":["import type { ImageContent, TextContent } from './content-types.js';\n\n/**\n * The strict return contract for `design_exec`.\n *\n * The function body must return undefined, a single MessagePart, or an array\n * of MessageParts. Anything else throws an educational error so the LLM\n * learns the rule on first miss.\n */\nexport type MessagePart = TextContent | ImageContent;\n\nexport function validatePart(value: unknown): MessagePart {\n if (!value || typeof value !== 'object') throw badShape(value);\n const v = value as Record<string, unknown>;\n if (v.type === 'text' && typeof v.text === 'string') {\n return { type: 'text', text: v.text };\n }\n if (\n v.type === 'image' &&\n typeof v.data === 'string' &&\n typeof v.mimeType === 'string'\n ) {\n return { type: 'image', data: v.data, mimeType: v.mimeType };\n }\n throw badShape(value);\n}\n\nexport function normalizeResult(raw: unknown): MessagePart[] {\n if (raw === undefined || raw === null) return [];\n if (Array.isArray(raw)) return raw.map(validatePart);\n return [validatePart(raw)];\n}\n\nfunction inspect(value: unknown): string {\n if (value === undefined) return 'undefined';\n if (value === null) return 'null';\n if (typeof value === 'string')\n return `string(\"${value.slice(0, 40)}${value.length > 40 ? '…' : ''}\")`;\n if (typeof value === 'number') return `number(${value})`;\n if (typeof value === 'boolean') return `boolean(${value})`;\n if (Array.isArray(value)) return `array(${value.length} items)`;\n if (typeof Blob !== 'undefined' && value instanceof Blob)\n return `Blob(${value.size}B, ${value.type || 'no mime'})`;\n if (value instanceof Uint8Array) return `Uint8Array(${value.byteLength}B)`;\n if (value instanceof ArrayBuffer) return `ArrayBuffer(${value.byteLength}B)`;\n if (typeof value === 'object') {\n const keys = Object.keys(value as object)\n .slice(0, 5)\n .join(',');\n return `object({${keys}})`;\n }\n return typeof value;\n}\n\nfunction badShape(value: unknown): Error {\n return new Error(\n `design_exec must return undefined, a MessagePart, or MessagePart[]. Got: ${inspect(value)}. ` +\n `Wrap explicitly — e.g. return { type: \"text\", text: String(value) }, or return ` +\n `{ type: \"image\", data: \"<base64>\", mimeType: \"image/png\" }. For visual verification, ` +\n `prefer the design_capture tool — it renders + encodes for you.`\n );\n}\n"]}
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/tools/result.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/D,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;IACD,IACE,CAAC,CAAC,IAAI,KAAK,OAAO;QAClB,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;QAC1B,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAC9B,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC/D,CAAC;IACD,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACjD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACrD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC;IAC5C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAC3B,OAAO,WAAW,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IAC1E,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,UAAU,KAAK,GAAG,CAAC;IACzD,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,WAAW,KAAK,GAAG,CAAC;IAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,KAAK,CAAC,MAAM,SAAS,CAAC;IAChE,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,KAAK,YAAY,IAAI;QACtD,OAAO,QAAQ,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,IAAI,SAAS,GAAG,CAAC;IAC5D,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,cAAc,KAAK,CAAC,UAAU,IAAI,CAAC;IAC3E,IAAI,KAAK,YAAY,WAAW;QAAE,OAAO,eAAe,KAAK,CAAC,UAAU,IAAI,CAAC;IAC7E,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC;aACtC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,OAAO,WAAW,IAAI,IAAI,CAAC;IAC7B,CAAC;IACD,OAAO,OAAO,KAAK,CAAC;AACtB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,IAAI,KAAK,CACd,qEAAqE,OAAO,CAAC,KAAK,CAAC,IAAI;QACrF,iFAAiF;QACjF,uFAAuF;QACvF,yDAAyD,CAC5D,CAAC;AACJ,CAAC","sourcesContent":["import type { ImageContent, TextContent } from './content-types.js';\n\n/**\n * The strict return contract for `edit`.\n *\n * The function body must return undefined, a single MessagePart, or an array\n * of MessageParts. Anything else throws an educational error so the LLM\n * learns the rule on first miss.\n */\nexport type MessagePart = TextContent | ImageContent;\n\nexport function validatePart(value: unknown): MessagePart {\n if (!value || typeof value !== 'object') throw badShape(value);\n const v = value as Record<string, unknown>;\n if (v.type === 'text' && typeof v.text === 'string') {\n return { type: 'text', text: v.text };\n }\n if (\n v.type === 'image' &&\n typeof v.data === 'string' &&\n typeof v.mimeType === 'string'\n ) {\n return { type: 'image', data: v.data, mimeType: v.mimeType };\n }\n throw badShape(value);\n}\n\nexport function normalizeResult(raw: unknown): MessagePart[] {\n if (raw === undefined || raw === null) return [];\n if (Array.isArray(raw)) return raw.map(validatePart);\n return [validatePart(raw)];\n}\n\nfunction inspect(value: unknown): string {\n if (value === undefined) return 'undefined';\n if (value === null) return 'null';\n if (typeof value === 'string')\n return `string(\"${value.slice(0, 40)}${value.length > 40 ? '…' : ''}\")`;\n if (typeof value === 'number') return `number(${value})`;\n if (typeof value === 'boolean') return `boolean(${value})`;\n if (Array.isArray(value)) return `array(${value.length} items)`;\n if (typeof Blob !== 'undefined' && value instanceof Blob)\n return `Blob(${value.size}B, ${value.type || 'no mime'})`;\n if (value instanceof Uint8Array) return `Uint8Array(${value.byteLength}B)`;\n if (value instanceof ArrayBuffer) return `ArrayBuffer(${value.byteLength}B)`;\n if (typeof value === 'object') {\n const keys = Object.keys(value as object)\n .slice(0, 5)\n .join(',');\n return `object({${keys}})`;\n }\n return typeof value;\n}\n\nfunction badShape(value: unknown): Error {\n return new Error(\n `edit must return undefined, a MessagePart, or MessagePart[]. Got: ${inspect(value)}. ` +\n `Wrap explicitly — e.g. return { type: \"text\", text: String(value) }, or return ` +\n `{ type: \"image\", data: \"<base64>\", mimeType: \"image/png\" }. For visual verification, ` +\n `prefer the preview tool — it renders + encodes for you.`\n );\n}\n"]}
@@ -0,0 +1,45 @@
1
+ export interface Span {
2
+ phase: string;
3
+ ms: number;
4
+ }
5
+ export declare class SpanRecorder {
6
+ private readonly spans;
7
+ /** Time an async phase; records its wall-time as a Span even if it throws. */
8
+ time<T>(phase: string, fn: () => Promise<T>): Promise<T>;
9
+ /** Record a pre-measured phase (e.g. lock-wait computed by the caller). */
10
+ add(phase: string, ms: number): void;
11
+ list(): Span[];
12
+ }
13
+ export interface ToolCallReport {
14
+ tool: string;
15
+ succeeded: boolean;
16
+ totalMs: number;
17
+ spans: Span[];
18
+ error?: {
19
+ message: string;
20
+ stack?: string;
21
+ };
22
+ args?: unknown;
23
+ /** The tool's return value, summarized (large base64 blobs dropped). */
24
+ result?: unknown;
25
+ revision?: string;
26
+ session?: string;
27
+ }
28
+ export interface TelemetrySink {
29
+ record(report: ToolCallReport): void;
30
+ }
31
+ /** The off-switch: injected when diagnostics is disabled. */
32
+ export declare const NOOP_TELEMETRY_SINK: TelemetrySink;
33
+ export declare function toErrorShape(err: unknown): {
34
+ message: string;
35
+ stack?: string;
36
+ };
37
+ /**
38
+ * Shrink a tool result for the diagnostics log: keep the shape (content parts,
39
+ * text, mime types, isError). Small text (URLs, JSON summaries) passes through.
40
+ * Image payloads are kept up to MAX_INLINE_IMAGE_CHARS so the viewer can render
41
+ * them; any other large inline base64 blob is dropped to a length marker so it
42
+ * doesn't bloat every log line. Non-result shapes are returned as-is.
43
+ */
44
+ export declare function summarizeResult(result: unknown): unknown;
45
+ //# sourceMappingURL=spans.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spans.d.ts","sourceRoot":"","sources":["../../src/tools/spans.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,IAAI;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IAEpC,8EAA8E;IACxE,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAS9D,2EAA2E;IAC3E,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAIpC,IAAI,IAAI,IAAI,EAAE;CAGf;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;CACtC;AAED,6DAA6D;AAC7D,eAAO,MAAM,mBAAmB,EAAE,aAA+B,CAAC;AAElE,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAOA;AAWD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAoBxD"}
@@ -0,0 +1,77 @@
1
+ // packages/codesign-mcp/src/tools/spans.ts
2
+ //
3
+ // The narrow, telemetry-agnostic port the design tools depend on. Tools time
4
+ // their phases with a SpanRecorder and hand a ToolCallReport to an injected
5
+ // TelemetrySink; they import NOTHING from src/diagnostics/, so they stay
6
+ // extractable. The MCP side bridges TelemetrySink -> DiagnosticsSink (adapter).
7
+ import { performance } from 'node:perf_hooks';
8
+ export class SpanRecorder {
9
+ constructor() {
10
+ this.spans = [];
11
+ }
12
+ /** Time an async phase; records its wall-time as a Span even if it throws. */
13
+ async time(phase, fn) {
14
+ const start = performance.now();
15
+ try {
16
+ return await fn();
17
+ }
18
+ finally {
19
+ this.spans.push({ phase, ms: performance.now() - start });
20
+ }
21
+ }
22
+ /** Record a pre-measured phase (e.g. lock-wait computed by the caller). */
23
+ add(phase, ms) {
24
+ this.spans.push({ phase, ms });
25
+ }
26
+ list() {
27
+ return this.spans.slice();
28
+ }
29
+ }
30
+ /** The off-switch: injected when diagnostics is disabled. */
31
+ export const NOOP_TELEMETRY_SINK = { record() { } };
32
+ export function toErrorShape(err) {
33
+ if (err instanceof Error) {
34
+ return err.stack
35
+ ? { message: err.message, stack: err.stack }
36
+ : { message: err.message };
37
+ }
38
+ return { message: String(err) };
39
+ }
40
+ /** Non-image base64 `data` past this length is dropped from the report. */
41
+ const MAX_INLINE_DATA_CHARS = 256;
42
+ /**
43
+ * Image `data` is KEPT up to this length so the viewer can render a preview;
44
+ * beyond it (a huge export, a video frame) we drop the bytes. ~150 KB base64
45
+ * covers the `preview` tool's default 512-px renders comfortably.
46
+ */
47
+ const MAX_INLINE_IMAGE_CHARS = 200_000;
48
+ /**
49
+ * Shrink a tool result for the diagnostics log: keep the shape (content parts,
50
+ * text, mime types, isError). Small text (URLs, JSON summaries) passes through.
51
+ * Image payloads are kept up to MAX_INLINE_IMAGE_CHARS so the viewer can render
52
+ * them; any other large inline base64 blob is dropped to a length marker so it
53
+ * doesn't bloat every log line. Non-result shapes are returned as-is.
54
+ */
55
+ export function summarizeResult(result) {
56
+ if (!result || typeof result !== 'object')
57
+ return result;
58
+ const r = result;
59
+ if (!Array.isArray(r.content))
60
+ return result;
61
+ const content = r.content.map((part) => {
62
+ if (part && typeof part === 'object') {
63
+ const p = part;
64
+ if (typeof p.data === 'string') {
65
+ const isImage = p.type === 'image' ||
66
+ (typeof p.mimeType === 'string' && p.mimeType.startsWith('image/'));
67
+ const cap = isImage ? MAX_INLINE_IMAGE_CHARS : MAX_INLINE_DATA_CHARS;
68
+ if (p.data.length > cap) {
69
+ return { ...p, data: `<${p.data.length} base64 chars omitted>` };
70
+ }
71
+ }
72
+ }
73
+ return part;
74
+ });
75
+ return { ...r, content };
76
+ }
77
+ //# sourceMappingURL=spans.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spans.js","sourceRoot":"","sources":["../../src/tools/spans.ts"],"names":[],"mappings":"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","sourcesContent":["// packages/codesign-mcp/src/tools/spans.ts\n//\n// The narrow, telemetry-agnostic port the design tools depend on. Tools time\n// their phases with a SpanRecorder and hand a ToolCallReport to an injected\n// TelemetrySink; they import NOTHING from src/diagnostics/, so they stay\n// extractable. The MCP side bridges TelemetrySink -> DiagnosticsSink (adapter).\nimport { performance } from 'node:perf_hooks';\n\nexport interface Span {\n phase: string;\n ms: number;\n}\n\nexport class SpanRecorder {\n private readonly spans: Span[] = [];\n\n /** Time an async phase; records its wall-time as a Span even if it throws. */\n async time<T>(phase: string, fn: () => Promise<T>): Promise<T> {\n const start = performance.now();\n try {\n return await fn();\n } finally {\n this.spans.push({ phase, ms: performance.now() - start });\n }\n }\n\n /** Record a pre-measured phase (e.g. lock-wait computed by the caller). */\n add(phase: string, ms: number): void {\n this.spans.push({ phase, ms });\n }\n\n list(): Span[] {\n return this.spans.slice();\n }\n}\n\nexport interface ToolCallReport {\n tool: string;\n succeeded: boolean;\n totalMs: number;\n spans: Span[];\n error?: { message: string; stack?: string };\n args?: unknown;\n /** The tool's return value, summarized (large base64 blobs dropped). */\n result?: unknown;\n revision?: string;\n session?: string;\n}\n\nexport interface TelemetrySink {\n record(report: ToolCallReport): void;\n}\n\n/** The off-switch: injected when diagnostics is disabled. */\nexport const NOOP_TELEMETRY_SINK: TelemetrySink = { record() {} };\n\nexport function toErrorShape(err: unknown): {\n message: string;\n stack?: string;\n} {\n if (err instanceof Error) {\n return err.stack\n ? { message: err.message, stack: err.stack }\n : { message: err.message };\n }\n return { message: String(err) };\n}\n\n/** Non-image base64 `data` past this length is dropped from the report. */\nconst MAX_INLINE_DATA_CHARS = 256;\n/**\n * Image `data` is KEPT up to this length so the viewer can render a preview;\n * beyond it (a huge export, a video frame) we drop the bytes. ~150 KB base64\n * covers the `preview` tool's default 512-px renders comfortably.\n */\nconst MAX_INLINE_IMAGE_CHARS = 200_000;\n\n/**\n * Shrink a tool result for the diagnostics log: keep the shape (content parts,\n * text, mime types, isError). Small text (URLs, JSON summaries) passes through.\n * Image payloads are kept up to MAX_INLINE_IMAGE_CHARS so the viewer can render\n * them; any other large inline base64 blob is dropped to a length marker so it\n * doesn't bloat every log line. Non-result shapes are returned as-is.\n */\nexport function summarizeResult(result: unknown): unknown {\n if (!result || typeof result !== 'object') return result;\n const r = result as { content?: unknown };\n if (!Array.isArray(r.content)) return result;\n const content = r.content.map((part) => {\n if (part && typeof part === 'object') {\n const p = part as { type?: unknown; data?: unknown; mimeType?: unknown };\n if (typeof p.data === 'string') {\n const isImage =\n p.type === 'image' ||\n (typeof p.mimeType === 'string' && p.mimeType.startsWith('image/'));\n const cap = isImage ? MAX_INLINE_IMAGE_CHARS : MAX_INLINE_DATA_CHARS;\n if (p.data.length > cap) {\n return { ...p, data: `<${p.data.length} base64 chars omitted>` };\n }\n }\n }\n return part;\n });\n return { ...r, content };\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { CodesignMcpToolRegistration } from '../server.js';
2
+ import { type TelemetrySink } from './spans.js';
3
+ export declare function wrapWithTelemetry(registration: CodesignMcpToolRegistration, telemetry: TelemetrySink): CodesignMcpToolRegistration;
4
+ //# sourceMappingURL=telemetry-wrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-wrapper.d.ts","sourceRoot":"","sources":["../../src/tools/telemetry-wrapper.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAiC,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/E,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,2BAA2B,EACzC,SAAS,EAAE,aAAa,GACvB,2BAA2B,CA+B7B"}
@@ -0,0 +1,43 @@
1
+ // packages/codesign-mcp/src/tools/telemetry-wrapper.ts
2
+ //
3
+ // Wraps a tool registration so EVERY call lands in the diagnostics stream —
4
+ // even tools with no internal phase instrumentation. The engine tools
5
+ // (edit/preview/export) self-report a richer ToolCallReport with phase spans;
6
+ // this wrapper covers all the rest, giving a uniform "what ran, with what args,
7
+ // returning what, how long, ok or not" record (with empty spans). It mirrors
8
+ // the engine tools' own finally-block reporting so success/error/timing are
9
+ // computed identically.
10
+ import { performance } from 'node:perf_hooks';
11
+ import { summarizeResult, toErrorShape } from './spans.js';
12
+ export function wrapWithTelemetry(registration, telemetry) {
13
+ return {
14
+ ...registration,
15
+ call: async (rawArgs) => {
16
+ const startedAt = performance.now();
17
+ let result;
18
+ let threw;
19
+ try {
20
+ result = await registration.call(rawArgs);
21
+ return result;
22
+ }
23
+ catch (err) {
24
+ threw = err;
25
+ throw err;
26
+ }
27
+ finally {
28
+ telemetry.record({
29
+ tool: registration.name,
30
+ // A tool signals failure two ways: it throws, or it returns
31
+ // { isError: true }. Both count as not-succeeded.
32
+ succeeded: threw === undefined && result?.isError !== true,
33
+ totalMs: performance.now() - startedAt,
34
+ spans: [],
35
+ args: rawArgs,
36
+ ...(result !== undefined ? { result: summarizeResult(result) } : {}),
37
+ ...(threw ? { error: toErrorShape(threw) } : {})
38
+ });
39
+ }
40
+ }
41
+ };
42
+ }
43
+ //# sourceMappingURL=telemetry-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-wrapper.js","sourceRoot":"","sources":["../../src/tools/telemetry-wrapper.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,4EAA4E;AAC5E,sEAAsE;AACtE,8EAA8E;AAC9E,gFAAgF;AAChF,6EAA6E;AAC7E,4EAA4E;AAC5E,wBAAwB;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAsB,MAAM,YAAY,CAAC;AAE/E,MAAM,UAAU,iBAAiB,CAC/B,YAAyC,EACzC,SAAwB;IAExB,OAAO;QACL,GAAG,YAAY;QACf,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACtB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAIpC,IAAI,MAA8B,CAAC;YACnC,IAAI,KAAc,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC1C,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,KAAK,GAAG,GAAG,CAAC;gBACZ,MAAM,GAAG,CAAC;YACZ,CAAC;oBAAS,CAAC;gBACT,SAAS,CAAC,MAAM,CAAC;oBACf,IAAI,EAAE,YAAY,CAAC,IAAI;oBACvB,4DAA4D;oBAC5D,kDAAkD;oBAClD,SAAS,EAAE,KAAK,KAAK,SAAS,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI;oBAC1D,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS;oBACtC,KAAK,EAAE,EAAE;oBACT,IAAI,EAAE,OAAO;oBACb,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACjD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["// packages/codesign-mcp/src/tools/telemetry-wrapper.ts\n//\n// Wraps a tool registration so EVERY call lands in the diagnostics stream —\n// even tools with no internal phase instrumentation. The engine tools\n// (edit/preview/export) self-report a richer ToolCallReport with phase spans;\n// this wrapper covers all the rest, giving a uniform \"what ran, with what args,\n// returning what, how long, ok or not\" record (with empty spans). It mirrors\n// the engine tools' own finally-block reporting so success/error/timing are\n// computed identically.\nimport { performance } from 'node:perf_hooks';\nimport type { CodesignMcpToolRegistration } from '../server.js';\nimport { summarizeResult, toErrorShape, type TelemetrySink } from './spans.js';\n\nexport function wrapWithTelemetry(\n registration: CodesignMcpToolRegistration,\n telemetry: TelemetrySink\n): CodesignMcpToolRegistration {\n return {\n ...registration,\n call: async (rawArgs) => {\n const startedAt = performance.now();\n type CallResult = Awaited<\n ReturnType<CodesignMcpToolRegistration['call']>\n >;\n let result: CallResult | undefined;\n let threw: unknown;\n try {\n result = await registration.call(rawArgs);\n return result;\n } catch (err) {\n threw = err;\n throw err;\n } finally {\n telemetry.record({\n tool: registration.name,\n // A tool signals failure two ways: it throws, or it returns\n // { isError: true }. Both count as not-succeeded.\n succeeded: threw === undefined && result?.isError !== true,\n totalMs: performance.now() - startedAt,\n spans: [],\n args: rawArgs,\n ...(result !== undefined ? { result: summarizeResult(result) } : {}),\n ...(threw ? { error: toErrorShape(threw) } : {})\n });\n }\n }\n };\n}\n"]}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Build the cdn.img.ly URL for the `cesdk-js` browser bundle at `version`.
3
+ * Release/rc builds live at the plain path; nightlies live under
4
+ * `/nightlies/<version>/…` (version repeated). The channel is derivable from
5
+ * the version string alone. Single source of truth for the URL shape — used
6
+ * by the viewer config endpoint AND the bump preflight.
7
+ */
8
+ export declare function cesdkCdnUrl(version: string): string;
9
+ /**
10
+ * Read the exact version of the installed `@cesdk/node` (all three CE.SDK
11
+ * packages are pinned identical). As of 1.77 the package no longer exports
12
+ * `./package.json`, so resolve the main entry and read the sibling file
13
+ * directly — mirrors scripts/sync-cesdk-api.ts.
14
+ */
15
+ export declare function installedCesdkVersion(): string;
16
+ //# sourceMappingURL=cesdk-cdn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cesdk-cdn.d.ts","sourceRoot":"","sources":["../../src/viewer/cesdk-cdn.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAQ9C"}
@@ -0,0 +1,30 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { createRequire } from 'node:module';
3
+ import path from 'node:path';
4
+ /**
5
+ * Build the cdn.img.ly URL for the `cesdk-js` browser bundle at `version`.
6
+ * Release/rc builds live at the plain path; nightlies live under
7
+ * `/nightlies/<version>/…` (version repeated). The channel is derivable from
8
+ * the version string alone. Single source of truth for the URL shape — used
9
+ * by the viewer config endpoint AND the bump preflight.
10
+ */
11
+ export function cesdkCdnUrl(version) {
12
+ const pkgPath = `packages/imgly/cesdk-js/${version}/index.js`;
13
+ return version.includes('-nightly.')
14
+ ? `https://cdn.img.ly/nightlies/${version}/${pkgPath}`
15
+ : `https://cdn.img.ly/${pkgPath}`;
16
+ }
17
+ /**
18
+ * Read the exact version of the installed `@cesdk/node` (all three CE.SDK
19
+ * packages are pinned identical). As of 1.77 the package no longer exports
20
+ * `./package.json`, so resolve the main entry and read the sibling file
21
+ * directly — mirrors scripts/sync-cesdk-api.ts.
22
+ */
23
+ export function installedCesdkVersion() {
24
+ const require = createRequire(import.meta.url);
25
+ const main = require.resolve('@cesdk/node');
26
+ const pkgJsonPath = path.join(path.dirname(main), 'package.json');
27
+ const { version } = JSON.parse(readFileSync(pkgJsonPath, 'utf8'));
28
+ return version;
29
+ }
30
+ //# sourceMappingURL=cesdk-cdn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cesdk-cdn.js","sourceRoot":"","sources":["../../src/viewer/cesdk-cdn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,OAAO,GAAG,2BAA2B,OAAO,WAAW,CAAC;IAC9D,OAAO,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;QAClC,CAAC,CAAC,gCAAgC,OAAO,IAAI,OAAO,EAAE;QACtD,CAAC,CAAC,sBAAsB,OAAO,EAAE,CAAC;AACtC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC;IAClE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAE/D,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["import { readFileSync } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\n\n/**\n * Build the cdn.img.ly URL for the `cesdk-js` browser bundle at `version`.\n * Release/rc builds live at the plain path; nightlies live under\n * `/nightlies/<version>/…` (version repeated). The channel is derivable from\n * the version string alone. Single source of truth for the URL shape — used\n * by the viewer config endpoint AND the bump preflight.\n */\nexport function cesdkCdnUrl(version: string): string {\n const pkgPath = `packages/imgly/cesdk-js/${version}/index.js`;\n return version.includes('-nightly.')\n ? `https://cdn.img.ly/nightlies/${version}/${pkgPath}`\n : `https://cdn.img.ly/${pkgPath}`;\n}\n\n/**\n * Read the exact version of the installed `@cesdk/node` (all three CE.SDK\n * packages are pinned identical). As of 1.77 the package no longer exports\n * `./package.json`, so resolve the main entry and read the sibling file\n * directly — mirrors scripts/sync-cesdk-api.ts.\n */\nexport function installedCesdkVersion(): string {\n const require = createRequire(import.meta.url);\n const main = require.resolve('@cesdk/node');\n const pkgJsonPath = path.join(path.dirname(main), 'package.json');\n const { version } = JSON.parse(readFileSync(pkgJsonPath, 'utf8')) as {\n version: string;\n };\n return version;\n}\n"]}
@@ -15,6 +15,12 @@ export interface CreateViewerRouterOptions {
15
15
  cesdkLicense?: string;
16
16
  /** Absolute workspace root, forwarded to the `/r/` route for disk streaming. Empty on object-store backends. */
17
17
  workspaceRoot?: string;
18
+ /**
19
+ * Full cdn.img.ly URL the browser viewer imports the CE.SDK engine from.
20
+ * Defaults to the installed engine version so the preview can never drift
21
+ * from the node runtime. Overridable for tests.
22
+ */
23
+ cesdkEngineUrl?: string;
18
24
  }
19
25
  export declare function createViewerRouter(opts: CreateViewerRouterOptions): Router;
20
26
  //# sourceMappingURL=router.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/viewer/router.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,MAAM,EACP,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIvD,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,aAAa,CAAC;IACrB,EAAE,EAAE,WAAW,CAAC;IAChB,WAAW,EAAE,cAAc,CAAC;IAC5B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gHAAgH;IAChH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,yBAAyB,GAAG,MAAM,CAgJ1E"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/viewer/router.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,MAAM,EACP,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKvD,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,aAAa,CAAC;IACrB,EAAE,EAAE,WAAW,CAAC;IAChB,WAAW,EAAE,cAAc,CAAC;IAC5B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gHAAgH;IAChH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,yBAAyB,GAAG,MAAM,CAmJ1E"}
@@ -6,9 +6,11 @@
6
6
  import { Router } from 'express';
7
7
  import { createResourceRoute } from './resource-route.js';
8
8
  import { SPA_ASSETS } from './spa-assets.generated.js';
9
+ import { cesdkCdnUrl, installedCesdkVersion } from './cesdk-cdn.js';
9
10
  export function createViewerRouter(opts) {
10
11
  const { store, fs, broadcaster } = opts;
11
12
  const router = Router();
13
+ const cesdkEngineUrl = opts.cesdkEngineUrl ?? cesdkCdnUrl(installedCesdkVersion());
12
14
  // The SPA is mounted at root on the stdio listener (req.baseUrl === "") and
13
15
  // under "/viewer" on the HTTP transport (req.baseUrl === "/viewer"). Its
14
16
  // HTML/JS address assets and API routes by path, so we inject the live mount
@@ -22,7 +24,8 @@ export function createViewerRouter(opts) {
22
24
  // URIs. `req.baseUrl` is "" on the stdio listener, "/viewer" on HTTP.
23
25
  res.json({
24
26
  license: opts.cesdkLicense ?? '',
25
- resourceBase: `${req.baseUrl}/r/`
27
+ resourceBase: `${req.baseUrl}/r/`,
28
+ cesdkEngineUrl
26
29
  });
27
30
  });
28
31
  router.use(createResourceRoute({ fs, workspaceRoot: opts.workspaceRoot ?? '' }));