@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
@@ -7,6 +7,7 @@
7
7
  //
8
8
  // Phase 1 supports `kind: 'image'` only.
9
9
  import { GatewayDisabledError } from '../gateway/types.js';
10
+ import { shortHash } from '../workspace/content-hash.js';
10
11
  const DESCRIPTION = [
11
12
  'Generate an image asset via the IMG.LY gateway. Writes the asset into the workspace at `assets/<sha>.png`.',
12
13
  '',
@@ -27,14 +28,6 @@ const ASSET_INPUT_SCHEMA = {
27
28
  required: ['kind', 'prompt'],
28
29
  additionalProperties: false
29
30
  };
30
- async function shortHash(bytes) {
31
- const digest = await globalThis.crypto.subtle.digest('SHA-256', bytes);
32
- const view = new Uint8Array(digest);
33
- let hex = '';
34
- for (let i = 0; i < 6; i++)
35
- hex += view[i].toString(16).padStart(2, '0');
36
- return hex;
37
- }
38
31
  function extFor(mime) {
39
32
  if (mime === 'image/jpeg')
40
33
  return 'jpg';
@@ -1 +1 @@
1
- {"version":3,"file":"asset-generate.js","sourceRoot":"","sources":["../../src/tools/asset-generate.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0EAA0E;AAC1E,4EAA4E;AAC5E,8EAA8E;AAC9E,uEAAuE;AACvE,4DAA4D;AAC5D,EAAE;AACF,yCAAyC;AAEzC,OAAO,EAAsB,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAY/E,MAAM,WAAW,GAAG;IAClB,4GAA4G;IAC5G,EAAE;IACF,mMAAmM;IACnM,EAAE;IACF,qEAAqE;IACrE,EAAE;IACF,yIAAyI;CAC1I,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,kBAAkB,GAAG;IACzB,IAAI,EAAE,QAAiB;IACvB,UAAU,EAAE;QACV,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;QAC3C,MAAM,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;QACnC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,EAAE,EAAE;QAChD,MAAM,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,EAAE,EAAE;KAClD;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC5B,oBAAoB,EAAE,KAAK;CAC5B,CAAC;AASF,KAAK,UAAU,SAAS,CAAC,KAAiB;IACxC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACvE,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,MAAM,CAAC;IACzC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,IAAoC;IAEpC,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,WAAW;QACxB,WAAW,EAAE,kBAAkB;QAC/B,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACtB,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAA+B,CAAC;YAC3D,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACpD,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,gDAAgD;yBACvD;qBACF;iBACF,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC1B,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,wBAAwB,IAAI,CAAC,IAAI,0BAA0B;yBAClE;qBACF;iBACF,CAAC;YACJ,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;oBAC3C,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACvC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACjC,MAAM,OAAO,GAAG,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;gBACvC,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC5C,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,GAAG,EAAE,eAAe,OAAO,EAAE;gCAC7B,OAAO,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC;gCACnD,QAAQ,EAAE,GAAG,CAAC,QAAQ;gCACtB,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU;6BAC5B,CAAC;yBACH;qBACF;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,GAAG,GACP,GAAG,YAAY,oBAAoB;oBACjC,CAAC,CAAC,GAAG,CAAC,OAAO;oBACb,CAAC,CAAC,GAAG,YAAY,KAAK;wBACpB,CAAC,CAAC,GAAG,CAAC,OAAO;wBACb,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACpB,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,mBAAmB,GAAG,EAAE,EAAE,CAAC;iBACrE,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["//\n// `asset_generate` — calls the gateway, persists the asset bytes into the\n// workspace at `assets/<sha>.<ext>`, and returns `{ uri, httpUrl, mimeType,\n// bytes }`. `uri` is the durable `workspace://` handle to embed in subsequent\n// `edit` calls (CE.SDK resolves it via the `/r/` route at fetch time);\n// `httpUrl` is a fetch link for opening the asset directly.\n//\n// Phase 1 supports `kind: 'image'` only.\n\nimport { type GatewayClient, GatewayDisabledError } from '../gateway/types.js';\nimport type { CodesignMcpToolRegistration } from '../server.js';\nimport type { ViewerUrlBuilder } from '../viewer/url-builder.js';\nimport type { WorkspaceFS } from '../workspace/types.js';\n\ninterface AssetGenerateArgs {\n kind: 'image' | 'video' | 'audio';\n prompt: string;\n width?: number;\n height?: number;\n}\n\nconst DESCRIPTION = [\n 'Generate an image asset via the IMG.LY gateway. Writes the asset into the workspace at `assets/<sha>.png`.',\n '',\n 'Returns JSON: `{ uri, httpUrl, mimeType, bytes }`. `uri` (a `workspace://` URI) is the durable handle — embed it in subsequent `edit` calls. `httpUrl` is a fetch link for opening the asset now.',\n '',\n \"Phase 1 supports `kind: 'image'` only; video/audio land in Phase 4.\",\n '',\n \"On Local: requires `API_KEY` env. On Hosted: cost-gated via Clerk; an actionable error tells you when it's disabled for your workspace.\"\n].join('\\n');\n\nconst ASSET_INPUT_SCHEMA = {\n type: 'object' as const,\n properties: {\n kind: { enum: ['image', 'video', 'audio'] },\n prompt: { type: 'string' as const },\n width: { type: 'integer' as const, minimum: 64 },\n height: { type: 'integer' as const, minimum: 64 }\n },\n required: ['kind', 'prompt'],\n additionalProperties: false\n};\n\nexport interface CreateAssetGenerateToolOptions {\n gateway: GatewayClient;\n fs: WorkspaceFS;\n /** Builds the `httpUrl` for the generated asset (the `/r/` route). */\n urlBuilder: ViewerUrlBuilder;\n}\n\nasync function shortHash(bytes: Uint8Array): Promise<string> {\n const digest = await globalThis.crypto.subtle.digest('SHA-256', bytes);\n const view = new Uint8Array(digest);\n let hex = '';\n for (let i = 0; i < 6; i++) hex += view[i].toString(16).padStart(2, '0');\n return hex;\n}\n\nfunction extFor(mime: string): string {\n if (mime === 'image/jpeg') return 'jpg';\n if (mime === 'image/webp') return 'webp';\n return 'png';\n}\n\nexport function createAssetGenerateTool(\n opts: CreateAssetGenerateToolOptions\n): CodesignMcpToolRegistration {\n return {\n name: 'asset_generate',\n description: DESCRIPTION,\n inputSchema: ASSET_INPUT_SCHEMA,\n call: async (rawArgs) => {\n const args = (rawArgs ?? {}) as Partial<AssetGenerateArgs>;\n if (typeof args.prompt !== 'string' || !args.prompt) {\n return {\n isError: true,\n content: [\n {\n type: 'text' as const,\n text: 'asset_generate: `prompt` (string) is required.'\n }\n ]\n };\n }\n if (args.kind !== 'image') {\n return {\n isError: true,\n content: [\n {\n type: 'text' as const,\n text: `asset_generate: kind=${args.kind} is deferred to Phase 4.`\n }\n ]\n };\n }\n try {\n const out = await opts.gateway.generateImage({\n prompt: args.prompt,\n width: args.width,\n height: args.height\n });\n const sha = await shortHash(out.bytes);\n const ext = extFor(out.mimeType);\n const relPath = `assets/${sha}.${ext}`;\n await opts.fs.writeFile(relPath, out.bytes);\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n uri: `workspace://${relPath}`,\n httpUrl: await opts.urlBuilder.forDownload(relPath),\n mimeType: out.mimeType,\n bytes: out.bytes.byteLength\n })\n }\n ]\n };\n } catch (err) {\n const msg =\n err instanceof GatewayDisabledError\n ? err.message\n : err instanceof Error\n ? err.message\n : String(err);\n return {\n isError: true,\n content: [{ type: 'text' as const, text: `asset_generate: ${msg}` }]\n };\n }\n }\n };\n}\n"]}
1
+ {"version":3,"file":"asset-generate.js","sourceRoot":"","sources":["../../src/tools/asset-generate.ts"],"names":[],"mappings":"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","sourcesContent":["//\n// `asset_generate` — calls the gateway, persists the asset bytes into the\n// workspace at `assets/<sha>.<ext>`, and returns `{ uri, httpUrl, mimeType,\n// bytes }`. `uri` is the durable `workspace://` handle to embed in subsequent\n// `edit` calls (CE.SDK resolves it via the `/r/` route at fetch time);\n// `httpUrl` is a fetch link for opening the asset directly.\n//\n// Phase 1 supports `kind: 'image'` only.\n\nimport { type GatewayClient, GatewayDisabledError } from '../gateway/types.js';\nimport type { CodesignMcpToolRegistration } from '../server.js';\nimport type { ViewerUrlBuilder } from '../viewer/url-builder.js';\nimport type { WorkspaceFS } from '../workspace/types.js';\nimport { shortHash } from '../workspace/content-hash.js';\n\ninterface AssetGenerateArgs {\n kind: 'image' | 'video' | 'audio';\n prompt: string;\n width?: number;\n height?: number;\n}\n\nconst DESCRIPTION = [\n 'Generate an image asset via the IMG.LY gateway. Writes the asset into the workspace at `assets/<sha>.png`.',\n '',\n 'Returns JSON: `{ uri, httpUrl, mimeType, bytes }`. `uri` (a `workspace://` URI) is the durable handle — embed it in subsequent `edit` calls. `httpUrl` is a fetch link for opening the asset now.',\n '',\n \"Phase 1 supports `kind: 'image'` only; video/audio land in Phase 4.\",\n '',\n \"On Local: requires `API_KEY` env. On Hosted: cost-gated via Clerk; an actionable error tells you when it's disabled for your workspace.\"\n].join('\\n');\n\nconst ASSET_INPUT_SCHEMA = {\n type: 'object' as const,\n properties: {\n kind: { enum: ['image', 'video', 'audio'] },\n prompt: { type: 'string' as const },\n width: { type: 'integer' as const, minimum: 64 },\n height: { type: 'integer' as const, minimum: 64 }\n },\n required: ['kind', 'prompt'],\n additionalProperties: false\n};\n\nexport interface CreateAssetGenerateToolOptions {\n gateway: GatewayClient;\n fs: WorkspaceFS;\n /** Builds the `httpUrl` for the generated asset (the `/r/` route). */\n urlBuilder: ViewerUrlBuilder;\n}\n\nfunction extFor(mime: string): string {\n if (mime === 'image/jpeg') return 'jpg';\n if (mime === 'image/webp') return 'webp';\n return 'png';\n}\n\nexport function createAssetGenerateTool(\n opts: CreateAssetGenerateToolOptions\n): CodesignMcpToolRegistration {\n return {\n name: 'asset_generate',\n description: DESCRIPTION,\n inputSchema: ASSET_INPUT_SCHEMA,\n call: async (rawArgs) => {\n const args = (rawArgs ?? {}) as Partial<AssetGenerateArgs>;\n if (typeof args.prompt !== 'string' || !args.prompt) {\n return {\n isError: true,\n content: [\n {\n type: 'text' as const,\n text: 'asset_generate: `prompt` (string) is required.'\n }\n ]\n };\n }\n if (args.kind !== 'image') {\n return {\n isError: true,\n content: [\n {\n type: 'text' as const,\n text: `asset_generate: kind=${args.kind} is deferred to Phase 4.`\n }\n ]\n };\n }\n try {\n const out = await opts.gateway.generateImage({\n prompt: args.prompt,\n width: args.width,\n height: args.height\n });\n const sha = await shortHash(out.bytes);\n const ext = extFor(out.mimeType);\n const relPath = `assets/${sha}.${ext}`;\n await opts.fs.writeFile(relPath, out.bytes);\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify({\n uri: `workspace://${relPath}`,\n httpUrl: await opts.urlBuilder.forDownload(relPath),\n mimeType: out.mimeType,\n bytes: out.bytes.byteLength\n })\n }\n ]\n };\n } catch (err) {\n const msg =\n err instanceof GatewayDisabledError\n ? err.message\n : err instanceof Error\n ? err.message\n : String(err);\n return {\n isError: true,\n content: [{ type: 'text' as const, text: `asset_generate: ${msg}` }]\n };\n }\n }\n };\n}\n"]}
@@ -3,6 +3,7 @@ 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
5
  import type { WorkspaceFS } from '../workspace/types.js';
6
+ import { type TelemetrySink } from './spans.js';
6
7
  export interface CreateEditToolOptions<E = unknown> {
7
8
  store: RevisionStore;
8
9
  session: EngineSession<E>;
@@ -24,6 +25,8 @@ export interface CreateEditToolOptions<E = unknown> {
24
25
  }) => Promise<Uint8Array>;
25
26
  /** Workspace FS for persisting the thumbnail (required if renderThumbnail is supplied). */
26
27
  fs?: WorkspaceFS;
28
+ /** Diagnostics telemetry port. Absent → no-op (no timing overhead beyond a few clocks). */
29
+ telemetry?: TelemetrySink;
27
30
  }
28
31
  export declare function createEditTool<E = unknown>(opts: CreateEditToolOptions<E>): CodesignMcpToolRegistration;
29
32
  //# sourceMappingURL=edit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,MAAM,WAAW,qBAAqB,CAAC,CAAC,GAAG,OAAO;IAChD,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC1B;;;;OAIG;IACH,UAAU,EAAE,KAAK,CAAC;IAClB,iEAAiE;IACjE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;KACtB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,gGAAgG;IAChG,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,CAAC,CAAC;KACX,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1B,2FAA2F;IAC3F,EAAE,CAAC,EAAE,WAAW,CAAC;CAClB;AAiDD,wBAAgB,cAAc,CAAC,CAAC,GAAG,OAAO,EACxC,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAC7B,2BAA2B,CAoH7B"}
1
+ {"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,qBAAqB,CAAC,CAAC,GAAG,OAAO;IAChD,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC1B;;;;OAIG;IACH,UAAU,EAAE,KAAK,CAAC;IAClB,iEAAiE;IACjE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;KACtB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,gGAAgG;IAChG,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,CAAC,CAAC;KACX,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1B,2FAA2F;IAC3F,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAqDD,wBAAgB,cAAc,CAAC,CAAC,GAAG,OAAO,EACxC,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAC7B,2BAA2B,CA6K7B"}
@@ -11,7 +11,9 @@
11
11
  //
12
12
  // `onLeafWritten` is the viewer hook: called after a successful write so the
13
13
  // SSE broadcaster can fan out the new revision id to subscribed viewers.
14
+ import { performance } from 'node:perf_hooks';
14
15
  import { normalizeResult } from './result.js';
16
+ import { SpanRecorder, NOOP_TELEMETRY_SINK, summarizeResult, toErrorShape } from './spans.js';
15
17
  const DESCRIPTION = [
16
18
  'Edit the CE.SDK canvas by running JavaScript against the live CreativeEngine, then commit the result as a new revision.',
17
19
  '',
@@ -27,7 +29,11 @@ const EDIT_INPUT_SCHEMA = {
27
29
  type: 'object',
28
30
  properties: {
29
31
  parent: {
30
- oneOf: [{ type: 'string' }, { type: 'null' }],
32
+ // `type: ['string','null']` NOT `oneOf: [{string},{null}]`. The
33
+ // type-array nullable idiom is honoured by strict tool-calling; `oneOf`
34
+ // is not (OpenAI bans it, weaker models stringify the value). See
35
+ // test/tools/schema-best-practices.test.ts.
36
+ type: ['string', 'null'],
31
37
  description: 'Parent revision id from a previous edit (a string). To start a new design root, use the JSON null literal. REQUIRED — there is no implicit default.'
32
38
  },
33
39
  code: {
@@ -48,110 +54,153 @@ const EDIT_INPUT_SCHEMA = {
48
54
  };
49
55
  export function createEditTool(opts) {
50
56
  const { store, session, onLeafWritten, renderThumbnail, fs, engineLock } = opts;
57
+ const telemetry = opts.telemetry ?? NOOP_TELEMETRY_SINK;
51
58
  return {
52
59
  name: 'edit',
53
60
  description: DESCRIPTION,
54
61
  inputSchema: EDIT_INPUT_SCHEMA,
55
62
  call: async (rawArgs) => {
56
- const args = (rawArgs ?? {});
57
- if (!Object.hasOwn(args, 'parent')) {
58
- return {
59
- isError: true,
60
- content: [
61
- {
62
- type: 'text',
63
- text: 'edit: `parent` is required. Pass the revision id from a previous edit, or the JSON null literal (no quotes) for a new design root. See `handbook` for the rewind-recovery flow.'
63
+ const rec = new SpanRecorder();
64
+ const startedAt = performance.now();
65
+ let result;
66
+ let threw;
67
+ let revision;
68
+ let codeError;
69
+ try {
70
+ result = await (async () => {
71
+ const args = (rawArgs ?? {});
72
+ if (!Object.hasOwn(args, 'parent')) {
73
+ return {
74
+ isError: true,
75
+ content: [
76
+ {
77
+ type: 'text',
78
+ text: 'edit: `parent` is required. Pass the revision id from a previous edit, or the JSON null literal (no quotes) for a new design root. See `handbook` for the rewind-recovery flow.'
79
+ }
80
+ ]
81
+ };
82
+ }
83
+ if (args.parent === 'null') {
84
+ // Some LLMs / MCP clients emit the JSON string "null" instead of the
85
+ // bare null literal — a quoting slip, not a real revision id. Coerce it
86
+ // rather than reject: this quoting nuance must never block creating a
87
+ // new design root. (Stochastic, model-dependent; see edit.test.ts.)
88
+ args.parent = null;
89
+ }
90
+ if (typeof args.code !== 'string') {
91
+ return {
92
+ isError: true,
93
+ content: [
94
+ {
95
+ type: 'text',
96
+ text: 'edit: `code` (string) is required.'
97
+ }
98
+ ]
99
+ };
100
+ }
101
+ // The shared engine is loaded, mutated by user code, then saved across
102
+ // several awaits below. Serialize the whole sequence so a concurrent
103
+ // session sharing this engine can't swap the scene out mid-edit.
104
+ const beforeLock = performance.now();
105
+ return engineLock.runExclusive(async () => {
106
+ rec.add('lock_wait', performance.now() - beforeLock);
107
+ // Pre-stage scene bytes for the session if parent is non-null.
108
+ if (args.parent !== null) {
109
+ const parentRev = await rec.time('workspace_read', () => store.read(args.parent));
110
+ await rec.time('engine_scene_load', async () => {
111
+ await session.populate(args.parent, parentRev.scene);
112
+ });
64
113
  }
65
- ]
66
- };
67
- }
68
- if (args.parent === 'null') {
69
- // Some LLMs / MCP clients emit the JSON string "null" instead of the
70
- // bare null literal — a quoting slip, not a real revision id. Coerce it
71
- // rather than reject: this quoting nuance must never block creating a
72
- // new design root. (Stochastic, model-dependent; see edit.test.ts.)
73
- args.parent = null;
74
- }
75
- if (typeof args.code !== 'string') {
76
- return {
77
- isError: true,
78
- content: [
79
- {
80
- type: 'text',
81
- text: 'edit: `code` (string) is required.'
114
+ const slot = await rec.time('engine_scene_load', () => session.acquire(args.parent ?? null));
115
+ let codeResult;
116
+ try {
117
+ const AsyncFunction = Object.getPrototypeOf(async () => { }).constructor;
118
+ const fn = new AsyncFunction('engine', args.code);
119
+ codeResult = await rec.time('engine_execute', () => fn(slot.engine));
120
+ }
121
+ catch (err) {
122
+ codeError = err;
123
+ session.markDirty(slot);
124
+ return {
125
+ isError: true,
126
+ content: [
127
+ {
128
+ type: 'text',
129
+ text: `edit: code threw — engine slot marked dirty (next edit pays one reload). ${err instanceof Error
130
+ ? (err.stack ?? err.message)
131
+ : String(err)}`
132
+ }
133
+ ]
134
+ };
135
+ }
136
+ const adapter = session.opts.adapter;
137
+ const sceneBytes = await rec.time('engine_scene_save', () => adapter.saveToString(slot.engine));
138
+ const written = await rec.time('workspace_write', () => store.write({
139
+ scene: sceneBytes,
140
+ parent: args.parent ?? null,
141
+ title: args.title,
142
+ note: args.note,
143
+ code: args.code
144
+ }));
145
+ revision = written.id;
146
+ session.commit(slot, written.id);
147
+ if (renderThumbnail && fs) {
148
+ await rec.time('engine_scene_thumbnail', async () => {
149
+ try {
150
+ const bytes = await renderThumbnail({
151
+ revision: written.id,
152
+ engine: slot.engine
153
+ });
154
+ const shard = written.id.slice(0, 2);
155
+ const rest = written.id.slice(2);
156
+ await fs.writeFile(`exports/${shard}/${rest}/preview.webp`, bytes);
157
+ }
158
+ catch {
159
+ // best-effort; thumbnail failure must not poison the edit success path
160
+ }
161
+ });
82
162
  }
83
- ]
84
- };
163
+ if (onLeafWritten) {
164
+ const rootRevision = args.parent === null
165
+ ? written.id
166
+ : (await store.historyOf(written.id))[0].id;
167
+ await onLeafWritten({ revision: written.id, rootRevision });
168
+ }
169
+ const envelope = {
170
+ revision: written.id,
171
+ parent: args.parent ?? null
172
+ };
173
+ const codeParts = normalizeResult(codeResult);
174
+ return {
175
+ content: [
176
+ { type: 'text', text: JSON.stringify(envelope) },
177
+ ...codeParts
178
+ ]
179
+ };
180
+ });
181
+ })();
182
+ return result;
85
183
  }
86
- // The shared engine is loaded, mutated by user code, then saved across
87
- // several awaits below. Serialize the whole sequence so a concurrent
88
- // session sharing this engine can't swap the scene out mid-edit.
89
- return engineLock.runExclusive(async () => {
90
- // Pre-stage scene bytes for the session if parent is non-null.
91
- if (args.parent !== null) {
92
- const parentRev = await store.read(args.parent);
93
- await session.populate(args.parent, parentRev.scene);
94
- }
95
- const slot = await session.acquire(args.parent ?? null);
96
- let codeResult;
97
- try {
98
- const AsyncFunction = Object.getPrototypeOf(async () => { }).constructor;
99
- const fn = new AsyncFunction('engine', args.code);
100
- codeResult = await fn(slot.engine);
101
- }
102
- catch (err) {
103
- session.markDirty(slot);
104
- return {
105
- isError: true,
106
- content: [
107
- {
108
- type: 'text',
109
- text: `edit: code threw — engine slot marked dirty (next edit pays one reload). ${err instanceof Error
110
- ? (err.stack ?? err.message)
111
- : String(err)}`
112
- }
113
- ]
114
- };
115
- }
116
- const adapter = session.opts.adapter;
117
- const sceneBytes = await adapter.saveToString(slot.engine);
118
- const written = await store.write({
119
- scene: sceneBytes,
120
- parent: args.parent ?? null,
121
- title: args.title,
122
- note: args.note,
123
- code: args.code
184
+ catch (err) {
185
+ threw = err;
186
+ throw err;
187
+ }
188
+ finally {
189
+ telemetry.record({
190
+ tool: 'edit',
191
+ succeeded: threw === undefined && result?.isError !== true,
192
+ totalMs: performance.now() - startedAt,
193
+ spans: rec.list(),
194
+ args: rawArgs,
195
+ ...(result !== undefined ? { result: summarizeResult(result) } : {}),
196
+ ...(revision ? { revision } : {}),
197
+ ...(threw
198
+ ? { error: toErrorShape(threw) }
199
+ : codeError
200
+ ? { error: toErrorShape(codeError) }
201
+ : {})
124
202
  });
125
- session.commit(slot, written.id);
126
- if (renderThumbnail && fs) {
127
- try {
128
- const bytes = await renderThumbnail({
129
- revision: written.id,
130
- engine: slot.engine
131
- });
132
- const shard = written.id.slice(0, 2);
133
- const rest = written.id.slice(2);
134
- await fs.writeFile(`exports/${shard}/${rest}/preview.webp`, bytes);
135
- }
136
- catch {
137
- // best-effort; thumbnail failure must not poison the edit success path
138
- }
139
- }
140
- if (onLeafWritten) {
141
- const rootRevision = args.parent === null
142
- ? written.id
143
- : (await store.historyOf(written.id))[0].id;
144
- await onLeafWritten({ revision: written.id, rootRevision });
145
- }
146
- const envelope = { revision: written.id, parent: args.parent ?? null };
147
- const codeParts = normalizeResult(codeResult);
148
- return {
149
- content: [
150
- { type: 'text', text: JSON.stringify(envelope) },
151
- ...codeParts
152
- ]
153
- };
154
- });
203
+ }
155
204
  }
156
205
  };
157
206
  }
@@ -1 +1 @@
1
- {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":"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","sourcesContent":["// packages/codesign-mcp/src/tools/edit.ts\n//\n// `edit` — the spec's central tool (§6.1). Replaces `exec.ts`. Differences\n// from the POC `exec`:\n// - `parent` is mandatory (null = new design root).\n// - `title?` set on root creation; `note?` annotates this revision.\n// - Writes a new revision via RevisionStore after `code` returns.\n// - Reloads engine if session slot's currentRevision !== parent.\n// - Dirty-on-throw: failed code marks the slot dirty.\n// - Returns {revision, parent} JSON as the first MessagePart (text).\n//\n// `onLeafWritten` is the viewer hook: called after a successful write so the\n// SSE broadcaster can fan out the new revision id to subscribed viewers.\n\nimport type { Mutex } from '../engine/mutex.js';\nimport type { EngineSession } from '../engine/session.js';\nimport type { RevisionStore } from '../revisions/store.js';\nimport type { CodesignMcpToolRegistration } from '../server.js';\nimport type { WorkspaceFS } from '../workspace/types.js';\nimport { normalizeResult } from './result.js';\n\nexport interface CreateEditToolOptions<E = unknown> {\n store: RevisionStore;\n session: EngineSession<E>;\n /**\n * Guards the shared engine. The acquire → run code → save → thumbnail\n * sequence below mutates one engine across several awaits; this serializes\n * it against any other engine-touching tool call (see engine/mutex.ts).\n */\n engineLock: Mutex;\n /** Called after a successful edit writes a new leaf revision. */\n onLeafWritten?: (event: {\n revision: string;\n rootRevision: string;\n }) => void | Promise<void>;\n /** Render a thumbnail for the newly committed revision. Best-effort: failures are swallowed. */\n renderThumbnail?: (event: {\n revision: string;\n engine: E;\n }) => Promise<Uint8Array>;\n /** Workspace FS for persisting the thumbnail (required if renderThumbnail is supplied). */\n fs?: WorkspaceFS;\n}\n\nconst DESCRIPTION = [\n 'Edit the CE.SDK canvas by running JavaScript against the live CreativeEngine, then commit the result as a new revision.',\n '',\n '⚠ Call `handbook` BEFORE your first `edit`. It documents the mandatory `parent` argument, the dirty-on-throw safety contract, the typeface schema, and the runtime quirks.',\n '',\n \"REQUIRED: `parent` is a revision id (returned by a previous edit), or the JSON null literal (no quotes) to start a new design. Omitting it is an error — there is no implicit 'continue from wherever'.\",\n '',\n 'Returns: the first content part is JSON `{ revision, parent }` — store `revision` so you can pass it as `parent` on the next edit.',\n '',\n \"Optional: `title` (set on parent=null only — the design's display name) and `note` (a one-liner describing what this edit accomplished — purely descriptive, helps you re-ground after a rewind).\"\n].join('\\n');\n\ninterface EditArgs {\n parent: string | null;\n code: string;\n title?: string;\n note?: string;\n}\n\nconst EDIT_INPUT_SCHEMA = {\n type: 'object' as const,\n properties: {\n parent: {\n oneOf: [{ type: 'string' as const }, { type: 'null' as const }],\n description:\n 'Parent revision id from a previous edit (a string). To start a new design root, use the JSON null literal. REQUIRED — there is no implicit default.'\n },\n code: {\n type: 'string' as const,\n description:\n 'Async JS body. `engine` is in scope. Strict return contract per the handbook.'\n },\n title: {\n type: 'string' as const,\n description:\n 'Display name for the design. Set only when parent=null (creating a new design). For mid-chain renames use the `rename` tool.'\n },\n note: {\n type: 'string' as const,\n description:\n 'Freeform descriptive text — what this edit accomplished. Metadata only; never load-bearing.'\n }\n },\n required: ['parent', 'code'],\n additionalProperties: false\n};\n\nexport function createEditTool<E = unknown>(\n opts: CreateEditToolOptions<E>\n): CodesignMcpToolRegistration {\n const { store, session, onLeafWritten, renderThumbnail, fs, engineLock } =\n opts;\n return {\n name: 'edit',\n description: DESCRIPTION,\n inputSchema: EDIT_INPUT_SCHEMA,\n call: async (rawArgs) => {\n const args = (rawArgs ?? {}) as Partial<EditArgs>;\n if (!Object.hasOwn(args, 'parent')) {\n return {\n isError: true,\n content: [\n {\n type: 'text' as const,\n text: 'edit: `parent` is required. Pass the revision id from a previous edit, or the JSON null literal (no quotes) for a new design root. See `handbook` for the rewind-recovery flow.'\n }\n ]\n };\n }\n if (args.parent === 'null') {\n // Some LLMs / MCP clients emit the JSON string \"null\" instead of the\n // bare null literal — a quoting slip, not a real revision id. Coerce it\n // rather than reject: this quoting nuance must never block creating a\n // new design root. (Stochastic, model-dependent; see edit.test.ts.)\n args.parent = null;\n }\n if (typeof args.code !== 'string') {\n return {\n isError: true,\n content: [\n {\n type: 'text' as const,\n text: 'edit: `code` (string) is required.'\n }\n ]\n };\n }\n // The shared engine is loaded, mutated by user code, then saved across\n // several awaits below. Serialize the whole sequence so a concurrent\n // session sharing this engine can't swap the scene out mid-edit.\n return engineLock.runExclusive(async () => {\n // Pre-stage scene bytes for the session if parent is non-null.\n if (args.parent !== null) {\n const parentRev = await store.read(args.parent as string);\n await session.populate(args.parent as string, parentRev.scene);\n }\n const slot = await session.acquire(args.parent ?? null);\n let codeResult: unknown;\n try {\n const AsyncFunction = Object.getPrototypeOf(\n async () => {}\n ).constructor;\n const fn = new AsyncFunction('engine', args.code);\n codeResult = await fn(slot.engine);\n } catch (err) {\n session.markDirty(slot);\n return {\n isError: true,\n content: [\n {\n type: 'text' as const,\n text: `edit: code threw — engine slot marked dirty (next edit pays one reload). ${\n err instanceof Error\n ? (err.stack ?? err.message)\n : String(err)\n }`\n }\n ]\n };\n }\n const adapter = (\n session as unknown as {\n opts: { adapter: { saveToString(e: E): Promise<string> } };\n }\n ).opts.adapter;\n const sceneBytes = await adapter.saveToString(slot.engine);\n const written = await store.write({\n scene: sceneBytes,\n parent: args.parent ?? null,\n title: args.title,\n note: args.note,\n code: args.code\n });\n session.commit(slot, written.id);\n if (renderThumbnail && fs) {\n try {\n const bytes = await renderThumbnail({\n revision: written.id,\n engine: slot.engine\n });\n const shard = written.id.slice(0, 2);\n const rest = written.id.slice(2);\n await fs.writeFile(`exports/${shard}/${rest}/preview.webp`, bytes);\n } catch {\n // best-effort; thumbnail failure must not poison the edit success path\n }\n }\n if (onLeafWritten) {\n const rootRevision =\n args.parent === null\n ? written.id\n : (await store.historyOf(written.id))[0].id;\n await onLeafWritten({ revision: written.id, rootRevision });\n }\n const envelope = { revision: written.id, parent: args.parent ?? null };\n const codeParts = normalizeResult(codeResult);\n return {\n content: [\n { type: 'text' as const, text: JSON.stringify(envelope) },\n ...codeParts\n ]\n };\n });\n }\n };\n}\n"]}
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":"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","sourcesContent":["// packages/codesign-mcp/src/tools/edit.ts\n//\n// `edit` — the spec's central tool (§6.1). Replaces `exec.ts`. Differences\n// from the POC `exec`:\n// - `parent` is mandatory (null = new design root).\n// - `title?` set on root creation; `note?` annotates this revision.\n// - Writes a new revision via RevisionStore after `code` returns.\n// - Reloads engine if session slot's currentRevision !== parent.\n// - Dirty-on-throw: failed code marks the slot dirty.\n// - Returns {revision, parent} JSON as the first MessagePart (text).\n//\n// `onLeafWritten` is the viewer hook: called after a successful write so the\n// SSE broadcaster can fan out the new revision id to subscribed viewers.\n\nimport { performance } from 'node:perf_hooks';\nimport type { Mutex } from '../engine/mutex.js';\nimport type { EngineSession } from '../engine/session.js';\nimport type { RevisionStore } from '../revisions/store.js';\nimport type { CodesignMcpToolRegistration } from '../server.js';\nimport type { WorkspaceFS } from '../workspace/types.js';\nimport { normalizeResult } from './result.js';\nimport {\n SpanRecorder,\n NOOP_TELEMETRY_SINK,\n summarizeResult,\n toErrorShape,\n type TelemetrySink\n} from './spans.js';\n\nexport interface CreateEditToolOptions<E = unknown> {\n store: RevisionStore;\n session: EngineSession<E>;\n /**\n * Guards the shared engine. The acquire → run code → save → thumbnail\n * sequence below mutates one engine across several awaits; this serializes\n * it against any other engine-touching tool call (see engine/mutex.ts).\n */\n engineLock: Mutex;\n /** Called after a successful edit writes a new leaf revision. */\n onLeafWritten?: (event: {\n revision: string;\n rootRevision: string;\n }) => void | Promise<void>;\n /** Render a thumbnail for the newly committed revision. Best-effort: failures are swallowed. */\n renderThumbnail?: (event: {\n revision: string;\n engine: E;\n }) => Promise<Uint8Array>;\n /** Workspace FS for persisting the thumbnail (required if renderThumbnail is supplied). */\n fs?: WorkspaceFS;\n /** Diagnostics telemetry port. Absent → no-op (no timing overhead beyond a few clocks). */\n telemetry?: TelemetrySink;\n}\n\nconst DESCRIPTION = [\n 'Edit the CE.SDK canvas by running JavaScript against the live CreativeEngine, then commit the result as a new revision.',\n '',\n '⚠ Call `handbook` BEFORE your first `edit`. It documents the mandatory `parent` argument, the dirty-on-throw safety contract, the typeface schema, and the runtime quirks.',\n '',\n \"REQUIRED: `parent` is a revision id (returned by a previous edit), or the JSON null literal (no quotes) to start a new design. Omitting it is an error — there is no implicit 'continue from wherever'.\",\n '',\n 'Returns: the first content part is JSON `{ revision, parent }` — store `revision` so you can pass it as `parent` on the next edit.',\n '',\n \"Optional: `title` (set on parent=null only — the design's display name) and `note` (a one-liner describing what this edit accomplished — purely descriptive, helps you re-ground after a rewind).\"\n].join('\\n');\n\ninterface EditArgs {\n parent: string | null;\n code: string;\n title?: string;\n note?: string;\n}\n\nconst EDIT_INPUT_SCHEMA = {\n type: 'object' as const,\n properties: {\n parent: {\n // `type: ['string','null']` — NOT `oneOf: [{string},{null}]`. The\n // type-array nullable idiom is honoured by strict tool-calling; `oneOf`\n // is not (OpenAI bans it, weaker models stringify the value). See\n // test/tools/schema-best-practices.test.ts.\n type: ['string', 'null'] as const,\n description:\n 'Parent revision id from a previous edit (a string). To start a new design root, use the JSON null literal. REQUIRED — there is no implicit default.'\n },\n code: {\n type: 'string' as const,\n description:\n 'Async JS body. `engine` is in scope. Strict return contract per the handbook.'\n },\n title: {\n type: 'string' as const,\n description:\n 'Display name for the design. Set only when parent=null (creating a new design). For mid-chain renames use the `rename` tool.'\n },\n note: {\n type: 'string' as const,\n description:\n 'Freeform descriptive text — what this edit accomplished. Metadata only; never load-bearing.'\n }\n },\n required: ['parent', 'code'],\n additionalProperties: false\n};\n\nexport function createEditTool<E = unknown>(\n opts: CreateEditToolOptions<E>\n): CodesignMcpToolRegistration {\n const { store, session, onLeafWritten, renderThumbnail, fs, engineLock } =\n opts;\n const telemetry = opts.telemetry ?? NOOP_TELEMETRY_SINK;\n return {\n name: 'edit',\n description: DESCRIPTION,\n inputSchema: EDIT_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 let codeError: unknown;\n try {\n result = await (async (): Promise<CallResult> => {\n const args = (rawArgs ?? {}) as Partial<EditArgs>;\n if (!Object.hasOwn(args, 'parent')) {\n return {\n isError: true,\n content: [\n {\n type: 'text' as const,\n text: 'edit: `parent` is required. Pass the revision id from a previous edit, or the JSON null literal (no quotes) for a new design root. See `handbook` for the rewind-recovery flow.'\n }\n ]\n };\n }\n if (args.parent === 'null') {\n // Some LLMs / MCP clients emit the JSON string \"null\" instead of the\n // bare null literal — a quoting slip, not a real revision id. Coerce it\n // rather than reject: this quoting nuance must never block creating a\n // new design root. (Stochastic, model-dependent; see edit.test.ts.)\n args.parent = null;\n }\n if (typeof args.code !== 'string') {\n return {\n isError: true,\n content: [\n {\n type: 'text' as const,\n text: 'edit: `code` (string) is required.'\n }\n ]\n };\n }\n // The shared engine is loaded, mutated by user code, then saved across\n // several awaits below. Serialize the whole sequence so a concurrent\n // session sharing this engine can't swap the scene out mid-edit.\n const beforeLock = performance.now();\n return engineLock.runExclusive(async () => {\n rec.add('lock_wait', performance.now() - beforeLock);\n // Pre-stage scene bytes for the session if parent is non-null.\n if (args.parent !== null) {\n const parentRev = await rec.time('workspace_read', () =>\n store.read(args.parent as string)\n );\n await rec.time('engine_scene_load', async () => {\n await session.populate(args.parent as string, parentRev.scene);\n });\n }\n const slot = await rec.time('engine_scene_load', () =>\n session.acquire(args.parent ?? null)\n );\n let codeResult: unknown;\n try {\n const AsyncFunction = Object.getPrototypeOf(\n async () => {}\n ).constructor;\n const fn = new AsyncFunction('engine', args.code);\n codeResult = await rec.time('engine_execute', () =>\n fn(slot.engine)\n );\n } catch (err) {\n codeError = err;\n session.markDirty(slot);\n return {\n isError: true,\n content: [\n {\n type: 'text' as const,\n text: `edit: code threw — engine slot marked dirty (next edit pays one reload). ${\n err instanceof Error\n ? (err.stack ?? err.message)\n : String(err)\n }`\n }\n ]\n };\n }\n const adapter = (\n session as unknown as {\n opts: { adapter: { saveToString(e: E): Promise<string> } };\n }\n ).opts.adapter;\n const sceneBytes = await rec.time('engine_scene_save', () =>\n adapter.saveToString(slot.engine)\n );\n const written = await rec.time('workspace_write', () =>\n store.write({\n scene: sceneBytes,\n parent: args.parent ?? null,\n title: args.title,\n note: args.note,\n code: args.code\n })\n );\n revision = written.id;\n session.commit(slot, written.id);\n if (renderThumbnail && fs) {\n await rec.time('engine_scene_thumbnail', async () => {\n try {\n const bytes = await renderThumbnail({\n revision: written.id,\n engine: slot.engine\n });\n const shard = written.id.slice(0, 2);\n const rest = written.id.slice(2);\n await fs.writeFile(\n `exports/${shard}/${rest}/preview.webp`,\n bytes\n );\n } catch {\n // best-effort; thumbnail failure must not poison the edit success path\n }\n });\n }\n if (onLeafWritten) {\n const rootRevision =\n args.parent === null\n ? written.id\n : (await store.historyOf(written.id))[0].id;\n await onLeafWritten({ revision: written.id, rootRevision });\n }\n const envelope = {\n revision: written.id,\n parent: args.parent ?? null\n };\n const codeParts = normalizeResult(codeResult);\n return {\n content: [\n { type: 'text' as const, text: JSON.stringify(envelope) },\n ...codeParts\n ]\n };\n });\n })();\n return result;\n } catch (err) {\n threw = err;\n throw err;\n } finally {\n telemetry.record({\n tool: 'edit',\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\n ? { error: toErrorShape(threw) }\n : codeError\n ? { error: toErrorShape(codeError) }\n : {})\n });\n }\n }\n };\n}\n"]}
@@ -28,4 +28,17 @@ import type CreativeEngine from '@cesdk/engine';
28
28
  * default to `device: 'auto'` (Metal/EGL → CPU fallback on native).
29
29
  */
30
30
  export declare function ensureHeadlessEngine(license: string): Promise<CreativeEngine>;
31
+ /**
32
+ * Dispose the process-wide headless engine if one was created, and reset the
33
+ * cache so a subsequent `ensureHeadlessEngine` re-initializes from scratch.
34
+ *
35
+ * Idempotent and safe to call when no engine was ever initialized (a no-op that
36
+ * never imports `@cesdk/node`) or while an init is still in flight — it awaits
37
+ * the pending init first so we dispose a fully-constructed engine, never a
38
+ * half-built one. A rejected init produced no engine, so that case is swallowed.
39
+ *
40
+ * `CreativeEngine.dispose()` is synchronous; this wrapper is async only because
41
+ * it may await an in-flight `init()`.
42
+ */
43
+ export declare function disposeHeadlessEngine(): Promise<void>;
31
44
  //# sourceMappingURL=engine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/tools/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,cAAc,MAAM,eAAe,CAAC;AAIhD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAmC7E"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/tools/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,cAAc,MAAM,eAAe,CAAC;AAIhD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAmC7E;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAa3D"}
@@ -56,4 +56,32 @@ export function ensureHeadlessEngine(license) {
56
56
  }
57
57
  return cached;
58
58
  }
59
+ /**
60
+ * Dispose the process-wide headless engine if one was created, and reset the
61
+ * cache so a subsequent `ensureHeadlessEngine` re-initializes from scratch.
62
+ *
63
+ * Idempotent and safe to call when no engine was ever initialized (a no-op that
64
+ * never imports `@cesdk/node`) or while an init is still in flight — it awaits
65
+ * the pending init first so we dispose a fully-constructed engine, never a
66
+ * half-built one. A rejected init produced no engine, so that case is swallowed.
67
+ *
68
+ * `CreativeEngine.dispose()` is synchronous; this wrapper is async only because
69
+ * it may await an in-flight `init()`.
70
+ */
71
+ export async function disposeHeadlessEngine() {
72
+ const pending = cached;
73
+ if (!pending)
74
+ return;
75
+ // Clear the cache first so no concurrent caller receives the engine we are
76
+ // about to dispose; a later `ensureHeadlessEngine` builds a fresh one.
77
+ cached = undefined;
78
+ let engine;
79
+ try {
80
+ engine = await pending;
81
+ }
82
+ catch {
83
+ return; // init never produced an engine — nothing to dispose
84
+ }
85
+ engine.dispose();
86
+ }
59
87
  //# sourceMappingURL=engine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/tools/engine.ts"],"names":[],"mappings":"AAEA,IAAI,MAA2C,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,QAAQ;gBACzC,CAAC,CAAC,oBAAoB;gBACtB,CAAC,CAAC,aAAa,CAAC;YACpB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAGtB,CAAC;YACF,MAAM,IAAI,GACR,GAAG,CAAC,OAAO,IAAK,GAAwC,CAAC;YAC3D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5C,sEAAsE;YACtE,sEAAsE;YACtE,mEAAmE;YACnE,qDAAqD;YACrD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,MAAM,CAAC,KAAyD,CAAC,MAAM;gBACtE,CAAC,CAAC,MAAgB,EAAE,EAAE;oBACpB,MAAM,OAAO,GAAG,UAAU,CACxB,MAA0C,CAC3C,CAAC;oBACF,gEAAgE;oBAChE,8DAA8D;oBAC9D,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oBACpC,OAAO,OAAO,CAAC;gBACjB,CAAC,CAA+B,CAAC;YACnC,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import type CreativeEngine from '@cesdk/engine';\n\nlet cached: Promise<CreativeEngine> | undefined;\n\n/**\n * Initialize a headless CreativeEngine once and share it across calls.\n *\n * Only ever called on node — the browser surface passes `cesdk.engine` directly\n * to the design tools, so this code path is dead in the browser bundle. To keep\n * it that way, both `node:module` and `@cesdk/node` are loaded via async\n * dynamic import inside the function — Vite leaves dynamic imports of node\n * builtins as runtime errors only if executed, not at module init.\n *\n * Both `@cesdk/node` (WASM) and `@cesdk/node-native` (N-API) are loaded through\n * `createRequire` (CJS-shaped) rather than ESM dynamic import. `@cesdk/node`'s\n * emscripten/wasm runtime spawns Workers that resolve relative to the package's\n * `__dirname`; ESM dynamic import + vitest pre-bundling break that path with\n * `ReferenceError: Worker is not defined`. The native package is also CJS-shaped\n * so the same load strategy works for both.\n *\n * Set `IMGLY_CESDK_ENGINE=native` to select the N-API native engine\n * (`@cesdk/node-native`). The default is the WASM engine (`@cesdk/node`).\n *\n * Native vs WASM init API:\n * - Both packages export `CreativeEngine` as `module.exports` (the class\n * itself) with `module.exports.default` aliased to the same class.\n * - Both expose `static init(config?: Partial<Configuration>): Promise<Engine>`\n * and accept `{ license }` as config.\n * - The native `Configuration` adds an optional `device: 'auto'|'cpu'|'gpu'`\n * field (ignored by WASM). We pass only `{ license }` here so both paths\n * default to `device: 'auto'` (Metal/EGL → CPU fallback on native).\n */\nexport function ensureHeadlessEngine(license: string): Promise<CreativeEngine> {\n if (!cached) {\n cached = (async () => {\n const { createRequire } = await import('node:module');\n const require = createRequire(import.meta.url);\n const pkg =\n process.env.IMGLY_CESDK_ENGINE === 'native'\n ? '@cesdk/node-native'\n : '@cesdk/node';\n const mod = require(pkg) as {\n default?: typeof CreativeEngine;\n init?: typeof CreativeEngine.init;\n };\n const Ctor: typeof CreativeEngine =\n mod.default ?? (mod as unknown as typeof CreativeEngine);\n const engine = await Ctor.init({ license });\n // CE.SDK's default design unit is \"Inch\", which makes setTextFontSize\n // + setWidth/Height with numeric pixel-looking values render at ~2.5×\n // the agent's expected size. Patch scene.create so every new scene\n // starts in Pixel — the agent never has to remember.\n const origCreate = engine.scene.create.bind(engine.scene);\n (engine.scene as unknown as { create(layout?: unknown): number }).create =\n ((layout?: unknown) => {\n const sceneId = origCreate(\n layout as Parameters<typeof origCreate>[0]\n );\n // @cesdk/node setDesignUnit takes only the unit; it operates on\n // the current scene, which is the one create() just returned.\n engine.scene.setDesignUnit('Pixel');\n return sceneId;\n }) as typeof engine.scene.create;\n return engine;\n })();\n }\n return cached;\n}\n"]}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/tools/engine.ts"],"names":[],"mappings":"AAEA,IAAI,MAA2C,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,QAAQ;gBACzC,CAAC,CAAC,oBAAoB;gBACtB,CAAC,CAAC,aAAa,CAAC;YACpB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAGtB,CAAC;YACF,MAAM,IAAI,GACR,GAAG,CAAC,OAAO,IAAK,GAAwC,CAAC;YAC3D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5C,sEAAsE;YACtE,sEAAsE;YACtE,mEAAmE;YACnE,qDAAqD;YACrD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,MAAM,CAAC,KAAyD,CAAC,MAAM;gBACtE,CAAC,CAAC,MAAgB,EAAE,EAAE;oBACpB,MAAM,OAAO,GAAG,UAAU,CACxB,MAA0C,CAC3C,CAAC;oBACF,gEAAgE;oBAChE,8DAA8D;oBAC9D,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oBACpC,OAAO,OAAO,CAAC;gBACjB,CAAC,CAA+B,CAAC;YACnC,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,OAAO,GAAG,MAAM,CAAC;IACvB,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,2EAA2E;IAC3E,uEAAuE;IACvE,MAAM,GAAG,SAAS,CAAC;IACnB,IAAI,MAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,OAAO,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,qDAAqD;IAC/D,CAAC;IACD,MAAM,CAAC,OAAO,EAAE,CAAC;AACnB,CAAC","sourcesContent":["import type CreativeEngine from '@cesdk/engine';\n\nlet cached: Promise<CreativeEngine> | undefined;\n\n/**\n * Initialize a headless CreativeEngine once and share it across calls.\n *\n * Only ever called on node — the browser surface passes `cesdk.engine` directly\n * to the design tools, so this code path is dead in the browser bundle. To keep\n * it that way, both `node:module` and `@cesdk/node` are loaded via async\n * dynamic import inside the function — Vite leaves dynamic imports of node\n * builtins as runtime errors only if executed, not at module init.\n *\n * Both `@cesdk/node` (WASM) and `@cesdk/node-native` (N-API) are loaded through\n * `createRequire` (CJS-shaped) rather than ESM dynamic import. `@cesdk/node`'s\n * emscripten/wasm runtime spawns Workers that resolve relative to the package's\n * `__dirname`; ESM dynamic import + vitest pre-bundling break that path with\n * `ReferenceError: Worker is not defined`. The native package is also CJS-shaped\n * so the same load strategy works for both.\n *\n * Set `IMGLY_CESDK_ENGINE=native` to select the N-API native engine\n * (`@cesdk/node-native`). The default is the WASM engine (`@cesdk/node`).\n *\n * Native vs WASM init API:\n * - Both packages export `CreativeEngine` as `module.exports` (the class\n * itself) with `module.exports.default` aliased to the same class.\n * - Both expose `static init(config?: Partial<Configuration>): Promise<Engine>`\n * and accept `{ license }` as config.\n * - The native `Configuration` adds an optional `device: 'auto'|'cpu'|'gpu'`\n * field (ignored by WASM). We pass only `{ license }` here so both paths\n * default to `device: 'auto'` (Metal/EGL → CPU fallback on native).\n */\nexport function ensureHeadlessEngine(license: string): Promise<CreativeEngine> {\n if (!cached) {\n cached = (async () => {\n const { createRequire } = await import('node:module');\n const require = createRequire(import.meta.url);\n const pkg =\n process.env.IMGLY_CESDK_ENGINE === 'native'\n ? '@cesdk/node-native'\n : '@cesdk/node';\n const mod = require(pkg) as {\n default?: typeof CreativeEngine;\n init?: typeof CreativeEngine.init;\n };\n const Ctor: typeof CreativeEngine =\n mod.default ?? (mod as unknown as typeof CreativeEngine);\n const engine = await Ctor.init({ license });\n // CE.SDK's default design unit is \"Inch\", which makes setTextFontSize\n // + setWidth/Height with numeric pixel-looking values render at ~2.5×\n // the agent's expected size. Patch scene.create so every new scene\n // starts in Pixel — the agent never has to remember.\n const origCreate = engine.scene.create.bind(engine.scene);\n (engine.scene as unknown as { create(layout?: unknown): number }).create =\n ((layout?: unknown) => {\n const sceneId = origCreate(\n layout as Parameters<typeof origCreate>[0]\n );\n // @cesdk/node setDesignUnit takes only the unit; it operates on\n // the current scene, which is the one create() just returned.\n engine.scene.setDesignUnit('Pixel');\n return sceneId;\n }) as typeof engine.scene.create;\n return engine;\n })();\n }\n return cached;\n}\n\n/**\n * Dispose the process-wide headless engine if one was created, and reset the\n * cache so a subsequent `ensureHeadlessEngine` re-initializes from scratch.\n *\n * Idempotent and safe to call when no engine was ever initialized (a no-op that\n * never imports `@cesdk/node`) or while an init is still in flight — it awaits\n * the pending init first so we dispose a fully-constructed engine, never a\n * half-built one. A rejected init produced no engine, so that case is swallowed.\n *\n * `CreativeEngine.dispose()` is synchronous; this wrapper is async only because\n * it may await an in-flight `init()`.\n */\nexport async function disposeHeadlessEngine(): Promise<void> {\n const pending = cached;\n if (!pending) return;\n // Clear the cache first so no concurrent caller receives the engine we are\n // about to dispose; a later `ensureHeadlessEngine` builds a fresh one.\n cached = undefined;\n let engine: CreativeEngine;\n try {\n engine = await pending;\n } catch {\n return; // init never produced an engine — nothing to dispose\n }\n engine.dispose();\n}\n"]}
@@ -4,6 +4,7 @@ import type { RevisionStore } from '../revisions/store.js';
4
4
  import type { CodesignMcpToolRegistration } from '../server.js';
5
5
  import type { ViewerUrlBuilder } from '../viewer/url-builder.js';
6
6
  import type { WorkspaceFS } from '../workspace/types.js';
7
+ import { type TelemetrySink } from './spans.js';
7
8
  export interface CreateExportToolOptions<E = unknown> {
8
9
  fs: WorkspaceFS;
9
10
  store: RevisionStore;
@@ -14,6 +15,8 @@ export interface CreateExportToolOptions<E = unknown> {
14
15
  allowOutPath?: boolean;
15
16
  /** Guards the shared engine — load-then-export must not interleave with another session's edit (see engine/mutex.ts). */
16
17
  engineLock: Mutex;
18
+ /** Diagnostics telemetry port. Absent → no-op (no timing overhead beyond a few clocks). */
19
+ telemetry?: TelemetrySink;
17
20
  }
18
21
  export declare function createExportTool<E = unknown>(opts: CreateExportToolOptions<E>): CodesignMcpToolRegistration;
19
22
  //# sourceMappingURL=export.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/tools/export.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAoEzD,MAAM,WAAW,uBAAuB,CAAC,CAAC,GAAG,OAAO;IAClD,EAAE,EAAE,WAAW,CAAC;IAChB,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC1B,8EAA8E;IAC9E,UAAU,EAAE,gBAAgB,CAAC;IAC7B,gFAAgF;IAChF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yHAAyH;IACzH,UAAU,EAAE,KAAK,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,OAAO,EAC1C,IAAI,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAC/B,2BAA2B,CAgI7B"}
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/tools/export.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAoEpB,MAAM,WAAW,uBAAuB,CAAC,CAAC,GAAG,OAAO;IAClD,EAAE,EAAE,WAAW,CAAC;IAChB,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC1B,8EAA8E;IAC9E,UAAU,EAAE,gBAAgB,CAAC;IAC7B,gFAAgF;IAChF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yHAAyH;IACzH,UAAU,EAAE,KAAK,CAAC;IAClB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAED,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,OAAO,EAC1C,IAAI,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAC/B,2BAA2B,CAyK7B"}