@imgly/codesign-mcp 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (973) hide show
  1. package/README.md +51 -1
  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 +4 -28
  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 +48 -4
  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 +11 -2
  572. package/dist/config.d.ts.map +1 -1
  573. package/dist/config.js +20 -1
  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 +34 -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 +5 -1
  600. package/dist/engine/cesdk-adapter.d.ts.map +1 -1
  601. package/dist/engine/cesdk-adapter.js +9 -2
  602. package/dist/engine/cesdk-adapter.js.map +1 -1
  603. package/dist/engine/index.d.ts +1 -0
  604. package/dist/engine/index.d.ts.map +1 -1
  605. package/dist/engine/index.js +4 -0
  606. package/dist/engine/index.js.map +1 -1
  607. package/dist/engine/scene-resource-schemes.d.ts +2 -0
  608. package/dist/engine/scene-resource-schemes.d.ts.map +1 -0
  609. package/dist/engine/scene-resource-schemes.js +20 -0
  610. package/dist/engine/scene-resource-schemes.js.map +1 -0
  611. package/dist/http/server.d.ts +0 -6
  612. package/dist/http/server.d.ts.map +1 -1
  613. package/dist/http/server.js +1 -2
  614. package/dist/http/server.js.map +1 -1
  615. package/dist/server.d.ts +0 -4
  616. package/dist/server.d.ts.map +1 -1
  617. package/dist/server.js +4 -60
  618. package/dist/server.js.map +1 -1
  619. package/dist/test/scripts/changelog-add.d.ts +8 -0
  620. package/dist/test/scripts/changelog-add.d.ts.map +1 -0
  621. package/dist/test/scripts/changelog-add.js +50 -0
  622. package/dist/test/scripts/changelog-add.js.map +1 -0
  623. package/dist/test/scripts/changelog-collate.d.ts +38 -0
  624. package/dist/test/scripts/changelog-collate.d.ts.map +1 -0
  625. package/dist/test/scripts/changelog-collate.js +171 -0
  626. package/dist/test/scripts/changelog-collate.js.map +1 -0
  627. package/dist/test/test/changelog.test.d.ts +2 -0
  628. package/dist/test/test/changelog.test.d.ts.map +1 -0
  629. package/dist/test/test/changelog.test.js +293 -0
  630. package/dist/test/test/changelog.test.js.map +1 -0
  631. package/dist/test/test/cli/dispatcher.test.js +10 -3
  632. package/dist/test/test/cli/dispatcher.test.js.map +1 -1
  633. package/dist/test/test/cli/redirect-console.test.js +31 -0
  634. package/dist/test/test/cli/redirect-console.test.js.map +1 -1
  635. package/dist/test/test/cli/resolve-license.test.js +10 -1
  636. package/dist/test/test/cli/resolve-license.test.js.map +1 -1
  637. package/dist/test/test/cli/stdio-diagnostics.test.d.ts +2 -0
  638. package/dist/test/test/cli/stdio-diagnostics.test.d.ts.map +1 -0
  639. package/dist/test/test/cli/stdio-diagnostics.test.js +31 -0
  640. package/dist/test/test/cli/stdio-diagnostics.test.js.map +1 -0
  641. package/dist/test/test/config.test.js +17 -13
  642. package/dist/test/test/config.test.js.map +1 -1
  643. package/dist/test/test/diagnostics/bundle.test.d.ts +2 -0
  644. package/dist/test/test/diagnostics/bundle.test.d.ts.map +1 -0
  645. package/dist/test/test/diagnostics/bundle.test.js +53 -0
  646. package/dist/test/test/diagnostics/bundle.test.js.map +1 -0
  647. package/dist/test/test/diagnostics/compose.test.d.ts +2 -0
  648. package/dist/test/test/diagnostics/compose.test.d.ts.map +1 -0
  649. package/dist/test/test/diagnostics/compose.test.js +31 -0
  650. package/dist/test/test/diagnostics/compose.test.js.map +1 -0
  651. package/dist/test/test/diagnostics/file-sink.test.d.ts +2 -0
  652. package/dist/test/test/diagnostics/file-sink.test.d.ts.map +1 -0
  653. package/dist/test/test/diagnostics/file-sink.test.js +113 -0
  654. package/dist/test/test/diagnostics/file-sink.test.js.map +1 -0
  655. package/dist/test/test/diagnostics/redact.test.d.ts +2 -0
  656. package/dist/test/test/diagnostics/redact.test.d.ts.map +1 -0
  657. package/dist/test/test/diagnostics/redact.test.js +59 -0
  658. package/dist/test/test/diagnostics/redact.test.js.map +1 -0
  659. package/dist/test/test/diagnostics/tool-call-adapter.test.d.ts +2 -0
  660. package/dist/test/test/diagnostics/tool-call-adapter.test.d.ts.map +1 -0
  661. package/dist/test/test/diagnostics/tool-call-adapter.test.js +34 -0
  662. package/dist/test/test/diagnostics/tool-call-adapter.test.js.map +1 -0
  663. package/dist/test/test/engine/cesdk-adapter.test.d.ts +2 -0
  664. package/dist/test/test/engine/cesdk-adapter.test.d.ts.map +1 -0
  665. package/dist/test/test/engine/cesdk-adapter.test.js +32 -0
  666. package/dist/test/test/engine/cesdk-adapter.test.js.map +1 -0
  667. package/dist/test/test/handbook-contract.test.js +6 -2
  668. package/dist/test/test/handbook-contract.test.js.map +1 -1
  669. package/dist/test/test/http/server.test.js +0 -36
  670. package/dist/test/test/http/server.test.js.map +1 -1
  671. package/dist/test/test/http/workspace-auth.test.js +0 -1
  672. package/dist/test/test/http/workspace-auth.test.js.map +1 -1
  673. package/dist/test/test/server.test.js +0 -40
  674. package/dist/test/test/server.test.js.map +1 -1
  675. package/dist/test/test/tools/edit-harness.d.ts +14 -0
  676. package/dist/test/test/tools/edit-harness.d.ts.map +1 -0
  677. package/dist/test/test/tools/edit-harness.js +30 -0
  678. package/dist/test/test/tools/edit-harness.js.map +1 -0
  679. package/dist/test/test/tools/edit.telemetry.test.d.ts +2 -0
  680. package/dist/test/test/tools/edit.telemetry.test.d.ts.map +1 -0
  681. package/dist/test/test/tools/edit.telemetry.test.js +46 -0
  682. package/dist/test/test/tools/edit.telemetry.test.js.map +1 -0
  683. package/dist/test/test/tools/export-harness.d.ts +13 -0
  684. package/dist/test/test/tools/export-harness.d.ts.map +1 -0
  685. package/dist/test/test/tools/export-harness.js +27 -0
  686. package/dist/test/test/tools/export-harness.js.map +1 -0
  687. package/dist/test/test/tools/export.telemetry.test.d.ts +2 -0
  688. package/dist/test/test/tools/export.telemetry.test.d.ts.map +1 -0
  689. package/dist/test/test/tools/export.telemetry.test.js +65 -0
  690. package/dist/test/test/tools/export.telemetry.test.js.map +1 -0
  691. package/dist/test/test/tools/import.test.d.ts +2 -0
  692. package/dist/test/test/tools/import.test.d.ts.map +1 -0
  693. package/dist/test/test/tools/import.test.js +122 -0
  694. package/dist/test/test/tools/import.test.js.map +1 -0
  695. package/dist/test/test/tools/index.test.js +78 -16
  696. package/dist/test/test/tools/index.test.js.map +1 -1
  697. package/dist/test/test/tools/load.integration.test.d.ts +2 -0
  698. package/dist/test/test/tools/load.integration.test.d.ts.map +1 -0
  699. package/dist/test/test/tools/load.integration.test.js +165 -0
  700. package/dist/test/test/tools/load.integration.test.js.map +1 -0
  701. package/dist/test/test/tools/load.test.d.ts +2 -0
  702. package/dist/test/test/tools/load.test.d.ts.map +1 -0
  703. package/dist/test/test/tools/load.test.js +387 -0
  704. package/dist/test/test/tools/load.test.js.map +1 -0
  705. package/dist/test/test/tools/preview-harness.d.ts +9 -0
  706. package/dist/test/test/tools/preview-harness.d.ts.map +1 -0
  707. package/dist/test/test/tools/preview-harness.js +23 -0
  708. package/dist/test/test/tools/preview-harness.js.map +1 -0
  709. package/dist/test/test/tools/preview.telemetry.test.d.ts +2 -0
  710. package/dist/test/test/tools/preview.telemetry.test.d.ts.map +1 -0
  711. package/dist/test/test/tools/preview.telemetry.test.js +36 -0
  712. package/dist/test/test/tools/preview.telemetry.test.js.map +1 -0
  713. package/dist/test/test/tools/schema-best-practices.d.ts +13 -0
  714. package/dist/test/test/tools/schema-best-practices.d.ts.map +1 -0
  715. package/dist/test/test/tools/schema-best-practices.js +169 -0
  716. package/dist/test/test/tools/schema-best-practices.js.map +1 -0
  717. package/dist/test/test/tools/schema-best-practices.test.d.ts +3 -0
  718. package/dist/test/test/tools/schema-best-practices.test.d.ts.map +1 -0
  719. package/dist/test/test/tools/schema-best-practices.test.js +194 -0
  720. package/dist/test/test/tools/schema-best-practices.test.js.map +1 -0
  721. package/dist/test/test/tools/spans.test.d.ts +2 -0
  722. package/dist/test/test/tools/spans.test.d.ts.map +1 -0
  723. package/dist/test/test/tools/spans.test.js +84 -0
  724. package/dist/test/test/tools/spans.test.js.map +1 -0
  725. package/dist/test/test/viewer/cesdk-cdn.test.d.ts +2 -0
  726. package/dist/test/test/viewer/cesdk-cdn.test.d.ts.map +1 -0
  727. package/dist/test/test/viewer/cesdk-cdn.test.js +19 -0
  728. package/dist/test/test/viewer/cesdk-cdn.test.js.map +1 -0
  729. package/dist/test/test/viewer/config-route.test.d.ts +2 -0
  730. package/dist/test/test/viewer/config-route.test.d.ts.map +1 -0
  731. package/dist/test/test/viewer/config-route.test.js +28 -0
  732. package/dist/test/test/viewer/config-route.test.js.map +1 -0
  733. package/dist/test/test/viewer/spa-version.test.d.ts +2 -0
  734. package/dist/test/test/viewer/spa-version.test.d.ts.map +1 -0
  735. package/dist/test/test/viewer/spa-version.test.js +14 -0
  736. package/dist/test/test/viewer/spa-version.test.js.map +1 -0
  737. package/dist/test/test/workspace/content-hash.test.d.ts +2 -0
  738. package/dist/test/test/workspace/content-hash.test.d.ts.map +1 -0
  739. package/dist/test/test/workspace/content-hash.test.js +17 -0
  740. package/dist/test/test/workspace/content-hash.test.js.map +1 -0
  741. package/dist/test/tsconfig.test.tsbuildinfo +1 -1
  742. package/dist/test/vitest.config.js +1 -1
  743. package/dist/test/vitest.config.js.map +1 -1
  744. package/dist/tools/asset-generate.d.ts.map +1 -1
  745. package/dist/tools/asset-generate.js +1 -8
  746. package/dist/tools/asset-generate.js.map +1 -1
  747. package/dist/tools/edit.d.ts +3 -0
  748. package/dist/tools/edit.d.ts.map +1 -1
  749. package/dist/tools/edit.js +145 -96
  750. package/dist/tools/edit.js.map +1 -1
  751. package/dist/tools/export.d.ts +3 -0
  752. package/dist/tools/export.d.ts.map +1 -1
  753. package/dist/tools/export.js +146 -108
  754. package/dist/tools/export.js.map +1 -1
  755. package/dist/tools/import.d.ts +12 -0
  756. package/dist/tools/import.d.ts.map +1 -0
  757. package/dist/tools/import.js +144 -0
  758. package/dist/tools/import.js.map +1 -0
  759. package/dist/tools/index.d.ts +3 -0
  760. package/dist/tools/index.d.ts.map +1 -1
  761. package/dist/tools/index.js +44 -4
  762. package/dist/tools/index.js.map +1 -1
  763. package/dist/tools/load.d.ts +26 -0
  764. package/dist/tools/load.d.ts.map +1 -0
  765. package/dist/tools/load.js +400 -0
  766. package/dist/tools/load.js.map +1 -0
  767. package/dist/tools/preview.d.ts +3 -0
  768. package/dist/tools/preview.d.ts.map +1 -1
  769. package/dist/tools/preview.js +79 -44
  770. package/dist/tools/preview.js.map +1 -1
  771. package/dist/tools/result.d.ts +1 -1
  772. package/dist/tools/result.js +2 -2
  773. package/dist/tools/result.js.map +1 -1
  774. package/dist/tools/spans.d.ts +45 -0
  775. package/dist/tools/spans.d.ts.map +1 -0
  776. package/dist/tools/spans.js +77 -0
  777. package/dist/tools/spans.js.map +1 -0
  778. package/dist/tools/telemetry-wrapper.d.ts +4 -0
  779. package/dist/tools/telemetry-wrapper.d.ts.map +1 -0
  780. package/dist/tools/telemetry-wrapper.js +43 -0
  781. package/dist/tools/telemetry-wrapper.js.map +1 -0
  782. package/dist/viewer/cesdk-cdn.d.ts +16 -0
  783. package/dist/viewer/cesdk-cdn.d.ts.map +1 -0
  784. package/dist/viewer/cesdk-cdn.js +30 -0
  785. package/dist/viewer/cesdk-cdn.js.map +1 -0
  786. package/dist/viewer/router.d.ts +6 -0
  787. package/dist/viewer/router.d.ts.map +1 -1
  788. package/dist/viewer/router.js +4 -1
  789. package/dist/viewer/router.js.map +1 -1
  790. package/dist/viewer/spa-assets.generated.d.ts.map +1 -1
  791. package/dist/viewer/spa-assets.generated.js +2 -3
  792. package/dist/viewer/spa-assets.generated.js.map +1 -1
  793. package/dist/workspace/content-hash.d.ts +2 -0
  794. package/dist/workspace/content-hash.d.ts.map +1 -0
  795. package/dist/workspace/content-hash.js +15 -0
  796. package/dist/workspace/content-hash.js.map +1 -0
  797. package/package.json +18 -9
  798. package/assets/docs/guide/actions.md +0 -1038
  799. package/assets/docs/guide/animation/overview.md +0 -22
  800. package/assets/docs/guide/automation/batch-processing.md +0 -474
  801. package/assets/docs/guide/browser-support.md +0 -38
  802. package/assets/docs/guide/concepts/edit-modes.md +0 -431
  803. package/assets/docs/guide/concepts/headless-mode/browser.md +0 -291
  804. package/assets/docs/guide/create-audio/audio.md +0 -336
  805. package/assets/docs/guide/create-video/overview.md +0 -224
  806. package/assets/docs/guide/create-video/timeline-editor.md +0 -622
  807. package/assets/docs/guide/create-video/update-caption-presets.md +0 -676
  808. package/assets/docs/guide/edit-image/vectorize.md +0 -204
  809. package/assets/docs/guide/export-save-publish/export/to-html5.md +0 -474
  810. package/assets/docs/guide/export-save-publish/export/to-mp4.md +0 -364
  811. package/assets/docs/guide/get-started/vanilla-js/quickstart.md +0 -175
  812. package/assets/docs/guide/grid-and-rulers.md +0 -222
  813. package/assets/docs/guide/guides/text/rendering-internals.md +0 -796
  814. package/assets/docs/guide/import-media/asset-library.md +0 -23
  815. package/assets/docs/guide/import-media/asset-panel/basics.md +0 -324
  816. package/assets/docs/guide/import-media/asset-panel/customize.md +0 -478
  817. package/assets/docs/guide/import-media/asset-panel/thumbnails.md +0 -633
  818. package/assets/docs/guide/import-media/capture-from-camera/record-video.md +0 -137
  819. package/assets/docs/guide/import-media/capture-from-camera.md +0 -20
  820. package/assets/docs/guide/import-media/from-local-source/user-upload.md +0 -438
  821. package/assets/docs/guide/import-media/from-local-source.md +0 -20
  822. package/assets/docs/guide/import-media/from-remote-source/getty-images.md +0 -627
  823. package/assets/docs/guide/import-media/from-remote-source/imgly-premium-assets.md +0 -625
  824. package/assets/docs/guide/import-media/from-remote-source/pexels.md +0 -692
  825. package/assets/docs/guide/import-media/from-remote-source/soundstripe.md +0 -497
  826. package/assets/docs/guide/import-media/from-remote-source/third-party.md +0 -51
  827. package/assets/docs/guide/import-media/from-remote-source/unsplash.md +0 -914
  828. package/assets/docs/guide/import-media/from-remote-source/your-server.md +0 -764
  829. package/assets/docs/guide/open-the-editor/from-htmlcanvas.md +0 -228
  830. package/assets/docs/guide/open-the-editor/set-zoom-level.md +0 -303
  831. package/assets/docs/guide/plugins/asset-sources.md +0 -553
  832. package/assets/docs/guide/starterkits/3d-mockup-editor.md +0 -748
  833. package/assets/docs/guide/starterkits/advanced-editor.md +0 -698
  834. package/assets/docs/guide/starterkits/advanced-video-editor.md +0 -696
  835. package/assets/docs/guide/starterkits/ai-editor.md +0 -749
  836. package/assets/docs/guide/starterkits/airtable-image-editor.md +0 -672
  837. package/assets/docs/guide/starterkits/apparel-ui.md +0 -188
  838. package/assets/docs/guide/starterkits/assets.md +0 -27
  839. package/assets/docs/guide/starterkits/auto-resize.md +0 -586
  840. package/assets/docs/guide/starterkits/automated-video-generation.md +0 -692
  841. package/assets/docs/guide/starterkits/background-removal-editor.md +0 -480
  842. package/assets/docs/guide/starterkits/content-moderation.md +0 -863
  843. package/assets/docs/guide/starterkits/creative-automation.md +0 -28
  844. package/assets/docs/guide/starterkits/custom-built-uis.md +0 -26
  845. package/assets/docs/guide/starterkits/customization.md +0 -29
  846. package/assets/docs/guide/starterkits/cutout-lines-editor.md +0 -470
  847. package/assets/docs/guide/starterkits/data-merge.md +0 -850
  848. package/assets/docs/guide/starterkits/design-editor.md +0 -698
  849. package/assets/docs/guide/starterkits/design-generation.md +0 -719
  850. package/assets/docs/guide/starterkits/design-validation.md +0 -808
  851. package/assets/docs/guide/starterkits/editor-ui-configurations.md +0 -14
  852. package/assets/docs/guide/starterkits/export-options.md +0 -724
  853. package/assets/docs/guide/starterkits/export-using-renderer.md +0 -708
  854. package/assets/docs/guide/starterkits/extensibility.md +0 -28
  855. package/assets/docs/guide/starterkits/force-crop-editor.md +0 -675
  856. package/assets/docs/guide/starterkits/form-based-template-adoption.md +0 -522
  857. package/assets/docs/guide/starterkits/getty-images-editor.md +0 -700
  858. package/assets/docs/guide/starterkits/html5-ads-exporter.md +0 -719
  859. package/assets/docs/guide/starterkits/indesign-template-import.md +0 -580
  860. package/assets/docs/guide/starterkits/layouts-editor.md +0 -724
  861. package/assets/docs/guide/starterkits/mobile-ui.md +0 -185
  862. package/assets/docs/guide/starterkits/mockup-editor.md +0 -745
  863. package/assets/docs/guide/starterkits/multi-image-generation.md +0 -542
  864. package/assets/docs/guide/starterkits/page-sizes-editor.md +0 -657
  865. package/assets/docs/guide/starterkits/pexels-image-editor.md +0 -665
  866. package/assets/docs/guide/starterkits/photo-editor.md +0 -755
  867. package/assets/docs/guide/starterkits/photo-ui.md +0 -186
  868. package/assets/docs/guide/starterkits/photobook-ui.md +0 -188
  869. package/assets/docs/guide/starterkits/placeholders.md +0 -678
  870. package/assets/docs/guide/starterkits/player.md +0 -405
  871. package/assets/docs/guide/starterkits/plugins.md +0 -25
  872. package/assets/docs/guide/starterkits/postcard-editor.md +0 -202
  873. package/assets/docs/guide/starterkits/pptx-template-import.md +0 -581
  874. package/assets/docs/guide/starterkits/print-ready-pdf-editor.md +0 -746
  875. package/assets/docs/guide/starterkits/product-editor.md +0 -773
  876. package/assets/docs/guide/starterkits/psd-template-import.md +0 -580
  877. package/assets/docs/guide/starterkits/qr-code-editor.md +0 -470
  878. package/assets/docs/guide/starterkits/single-page-editor.md +0 -661
  879. package/assets/docs/guide/starterkits/start-with-image.md +0 -684
  880. package/assets/docs/guide/starterkits/start-with-video.md +0 -651
  881. package/assets/docs/guide/starterkits/t-shirt-designer.md +0 -742
  882. package/assets/docs/guide/starterkits/templating.md +0 -23
  883. package/assets/docs/guide/starterkits/theming.md +0 -662
  884. package/assets/docs/guide/starterkits/translation-internationalization.md +0 -662
  885. package/assets/docs/guide/starterkits/unsplash-editor.md +0 -839
  886. package/assets/docs/guide/starterkits/vectorizer-editor.md +0 -466
  887. package/assets/docs/guide/starterkits/version-history.md +0 -745
  888. package/assets/docs/guide/starterkits/video-animations.md +0 -853
  889. package/assets/docs/guide/starterkits/video-captions.md +0 -884
  890. package/assets/docs/guide/starterkits/video-editing.md +0 -25
  891. package/assets/docs/guide/starterkits/video-editor.md +0 -696
  892. package/assets/docs/guide/starterkits/video-export-options.md +0 -676
  893. package/assets/docs/guide/starterkits/viewer.md +0 -400
  894. package/assets/docs/guide/starterkits.md +0 -41
  895. package/assets/docs/guide/stickers-and-shapes/create-edit/vector-edit.md +0 -362
  896. package/assets/docs/guide/text/custom-fonts.md +0 -401
  897. package/assets/docs/guide/text/decorations.md +0 -330
  898. package/assets/docs/guide/text/enumerations.md +0 -258
  899. package/assets/docs/guide/to-v1-10.md +0 -131
  900. package/assets/docs/guide/to-v1-13.md +0 -165
  901. package/assets/docs/guide/to-v1-32.md +0 -110
  902. package/assets/docs/guide/to-v1-69.md +0 -468
  903. package/assets/docs/guide/to-v1-72.md +0 -193
  904. package/assets/docs/guide/use-templates/library.md +0 -450
  905. package/assets/docs/guide/user-interface/ai-integration/audio-generation.md +0 -428
  906. package/assets/docs/guide/user-interface/ai-integration/auto-captions.md +0 -337
  907. package/assets/docs/guide/user-interface/ai-integration/custom-provider.md +0 -853
  908. package/assets/docs/guide/user-interface/ai-integration/gateway-provider.md +0 -1045
  909. package/assets/docs/guide/user-interface/ai-integration/image-generation.md +0 -641
  910. package/assets/docs/guide/user-interface/ai-integration/integrate.md +0 -966
  911. package/assets/docs/guide/user-interface/ai-integration/proxy-server.md +0 -99
  912. package/assets/docs/guide/user-interface/ai-integration/text-generation.md +0 -498
  913. package/assets/docs/guide/user-interface/ai-integration/video-generation.md +0 -493
  914. package/assets/docs/guide/user-interface/ai-integration.md +0 -30
  915. package/assets/docs/guide/user-interface/appearance/change-ui-font.md +0 -316
  916. package/assets/docs/guide/user-interface/appearance/custom-labels.md +0 -509
  917. package/assets/docs/guide/user-interface/appearance/icons.md +0 -373
  918. package/assets/docs/guide/user-interface/appearance/theming.md +0 -665
  919. package/assets/docs/guide/user-interface/appearance.md +0 -23
  920. package/assets/docs/guide/user-interface/build-your-own-ui.md +0 -620
  921. package/assets/docs/guide/user-interface/customization/canvas-menu.md +0 -412
  922. package/assets/docs/guide/user-interface/customization/canvas.md +0 -281
  923. package/assets/docs/guide/user-interface/customization/color-palette.md +0 -413
  924. package/assets/docs/guide/user-interface/customization/crop-presets.md +0 -384
  925. package/assets/docs/guide/user-interface/customization/disable-or-enable.md +0 -676
  926. package/assets/docs/guide/user-interface/customization/dock.md +0 -399
  927. package/assets/docs/guide/user-interface/customization/force-crop.md +0 -289
  928. package/assets/docs/guide/user-interface/customization/inspector-bar.md +0 -371
  929. package/assets/docs/guide/user-interface/customization/navigation-bar.md +0 -516
  930. package/assets/docs/guide/user-interface/customization/page-format.md +0 -436
  931. package/assets/docs/guide/user-interface/customization/panel.md +0 -605
  932. package/assets/docs/guide/user-interface/customization/quick-start/add-action-buttons.md +0 -531
  933. package/assets/docs/guide/user-interface/customization/quick-start/add-dock-buttons.md +0 -358
  934. package/assets/docs/guide/user-interface/customization/quick-start/create-custom-components.md +0 -374
  935. package/assets/docs/guide/user-interface/customization/quick-start/reorder-components.md +0 -323
  936. package/assets/docs/guide/user-interface/customization/quick-start/show-hide-components.md +0 -294
  937. package/assets/docs/guide/user-interface/customization/quick-start.md +0 -12
  938. package/assets/docs/guide/user-interface/customization/reference/component-order-api.md +0 -519
  939. package/assets/docs/guide/user-interface/customization/reference/component-reference.md +0 -333
  940. package/assets/docs/guide/user-interface/customization/reference.md +0 -12
  941. package/assets/docs/guide/user-interface/customization.md +0 -39
  942. package/assets/docs/guide/user-interface/localization.md +0 -633
  943. package/assets/docs/guide/user-interface/overview.md +0 -167
  944. package/assets/docs/guide/user-interface/ui-extensions/add-custom-feature.md +0 -411
  945. package/assets/docs/guide/user-interface/ui-extensions/asset-library.md +0 -721
  946. package/assets/docs/guide/user-interface/ui-extensions/create-custom-panel.md +0 -331
  947. package/assets/docs/guide/user-interface/ui-extensions/customize-behaviour.md +0 -553
  948. package/assets/docs/guide/user-interface/ui-extensions/notifications-and-dialogs.md +0 -672
  949. package/assets/docs/guide/user-interface/ui-extensions/quick-actions.md +0 -415
  950. package/assets/docs/guide/user-interface/ui-extensions/register-new-component.md +0 -521
  951. package/assets/docs/guide/user-interface/ui-extensions.md +0 -26
  952. package/assets/docs/guide/user-interface.md +0 -25
  953. package/assets/prompts/evals-assetGenerate.md +0 -12
  954. package/assets/prompts/evals-brutalistCore.md +0 -34
  955. package/assets/prompts/evals-danskCatalogue.md +0 -31
  956. package/assets/prompts/evals-exportRoundTrip.md +0 -12
  957. package/assets/prompts/evals-inspectPriorCode.md +0 -16
  958. package/assets/prompts/evals-listProjectFiles.md +0 -6
  959. package/assets/prompts/evals-readAndExplainScript.md +0 -6
  960. package/assets/prompts/evals-resumeAcrossRestart.md +0 -15
  961. package/assets/prompts/evals-rewindRecovery.md +0 -10
  962. package/assets/prompts/evals-searchAcrossFiles.md +0 -6
  963. package/assets/prompts/evals-weddingCard.md +0 -20
  964. package/assets/prompts/explain.md +0 -6
  965. package/assets/prompts/review.md +0 -6
  966. package/dist/frontmatter.d.ts +0 -15
  967. package/dist/frontmatter.d.ts.map +0 -1
  968. package/dist/frontmatter.js +0 -46
  969. package/dist/frontmatter.js.map +0 -1
  970. package/dist/test/test/frontmatter.test.d.ts +0 -2
  971. package/dist/test/test/frontmatter.test.d.ts.map +0 -1
  972. package/dist/test/test/frontmatter.test.js +0 -55
  973. package/dist/test/test/frontmatter.test.js.map +0 -1
@@ -0,0 +1,165 @@
1
+ // test/tools/load.integration.test.ts
2
+ //
3
+ // Real-engine integration test for the CODE-3 archive flow. Skipped unless
4
+ // CESDK_LICENSE is set (CI secret / packages/codesign-mcp/.env — export it
5
+ // into the shell before running; vitest does not read .env).
6
+ //
7
+ // Builds its own fixture archive with the real engine (no network): a scene
8
+ // with one image block backed by a local PNG, saved via saveToArchive. This
9
+ // is exactly the shape of the premium-template zips from the original bug.
10
+ import { mkdtemp, rm, writeFile } from 'node:fs/promises';
11
+ import { tmpdir } from 'node:os';
12
+ import { join } from 'node:path';
13
+ import { pathToFileURL } from 'node:url';
14
+ import { afterAll, describe, expect, it } from 'vitest';
15
+ import { cesdkAdapter } from '../../src/engine/cesdk-adapter.js';
16
+ import { Mutex } from '../../src/engine/mutex.js';
17
+ import { SCENE_ALLOWED_RESOURCE_SCHEMES } from '../../src/engine/scene-resource-schemes.js';
18
+ import { EngineSession } from '../../src/engine/session.js';
19
+ import { RevisionStore } from '../../src/revisions/store.js';
20
+ import { ensureHeadlessEngine } from '../../src/tools/engine.js';
21
+ import { createLoadTool } from '../../src/tools/load.js';
22
+ import { InMemoryWorkspaceFS } from '../../src/workspace/in-memory.js';
23
+ const LICENSE = process.env.CESDK_LICENSE;
24
+ // 1x1 red PNG.
25
+ const TINY_PNG = new Uint8Array(Buffer.from('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==', 'base64'));
26
+ const tmpDirs = [];
27
+ afterAll(async () => {
28
+ for (const d of tmpDirs)
29
+ await rm(d, { recursive: true, force: true });
30
+ });
31
+ describe.skipIf(!LICENSE)('load tool — real engine integration', () => {
32
+ it('archive load → explode → save round-trips with no buffer: schemes; re-load dedupes', { timeout: 180_000 }, async () => {
33
+ const engine = await ensureHeadlessEngine(LICENSE);
34
+ // --- Build the fixture archive.
35
+ const dir = await mkdtemp(join(tmpdir(), 'load-integration-'));
36
+ tmpDirs.push(dir);
37
+ const pngPath = join(dir, 'red.png');
38
+ await writeFile(pngPath, TINY_PNG);
39
+ engine.scene.create();
40
+ const scene = engine.scene.get();
41
+ if (scene === null)
42
+ throw new Error('scene.create produced no scene');
43
+ const page = engine.block.create('page');
44
+ engine.block.appendChild(scene, page);
45
+ const graphic = engine.block.create('graphic');
46
+ engine.block.setShape(graphic, engine.block.createShape('rect'));
47
+ const fill = engine.block.createFill('image');
48
+ engine.block.setString(fill, 'fill/image/imageFileURI', pathToFileURL(pngPath).href);
49
+ engine.block.setFill(graphic, fill);
50
+ engine.block.appendChild(page, graphic);
51
+ await engine.block.forceLoadResources([page]);
52
+ const blob = await engine.scene.saveToArchive();
53
+ const zipPath = join(dir, 'fixture.zip');
54
+ await writeFile(zipPath, new Uint8Array(await blob.arrayBuffer()));
55
+ // --- Load it through the real tool.
56
+ const fs = new InMemoryWorkspaceFS();
57
+ const store = new RevisionStore(fs);
58
+ const session = new EngineSession({
59
+ size: 1,
60
+ adapter: cesdkAdapter(engine)
61
+ });
62
+ const tool = createLoadTool({
63
+ fs,
64
+ store,
65
+ session,
66
+ engineLock: new Mutex(),
67
+ allowPath: true
68
+ });
69
+ const result = await tool.call({
70
+ source: { path: zipPath },
71
+ title: 'Fixture'
72
+ });
73
+ expect(result.isError, result.content[0].text).toBeUndefined();
74
+ const body = JSON.parse(result.content[0].text);
75
+ expect(body.title).toBe('Fixture');
76
+ // The archive's bundled bytes landed content-addressed in assets/.
77
+ const assets = await fs.readdir('assets');
78
+ expect(assets.length).toBeGreaterThanOrEqual(1);
79
+ expect(assets.some((f) => f.endsWith('.png'))).toBe(true);
80
+ // Durability: the persisted scene reloads with ZERO transients —
81
+ // nothing would be lost on a future save. (This is the bug's inverse.)
82
+ const rev = await store.read(body.revision);
83
+ await engine.scene.loadFromString(rev.scene);
84
+ expect(engine.editor.findAllTransientResources()).toEqual([]);
85
+ // Regression (CODE-3 acceptance): the EDIT save path — the adapter's
86
+ // saveToString — must serialize a workspace://-referencing scene too.
87
+ const adapter = cesdkAdapter(engine);
88
+ const reSaved = await adapter.saveToString(engine);
89
+ expect(reSaved.length).toBeGreaterThan(0);
90
+ // Idempotence: re-loading the same zip dedupes to the same shas.
91
+ const again = await tool.call({ source: { path: zipPath } });
92
+ expect(again.isError).toBeUndefined();
93
+ expect((await fs.readdir('assets')).sort()).toEqual(assets.sort());
94
+ });
95
+ it('bare .scene load returns a scheme-classified report from real engine state (no workspace-dangling)', { timeout: 180_000 }, async () => {
96
+ const engine = await ensureHeadlessEngine(LICENSE);
97
+ // Build a bare scene referencing a local file:// image — no network, and
98
+ // file:// is a durable engine scheme, so it survives saveToString.
99
+ const dir = await mkdtemp(join(tmpdir(), 'load-bare-integration-'));
100
+ tmpDirs.push(dir);
101
+ const pngPath = join(dir, 'red.png');
102
+ await writeFile(pngPath, TINY_PNG);
103
+ engine.scene.create();
104
+ const scene = engine.scene.get();
105
+ if (scene === null)
106
+ throw new Error('scene.create produced no scene');
107
+ const page = engine.block.create('page');
108
+ engine.block.appendChild(scene, page);
109
+ const graphic = engine.block.create('graphic');
110
+ engine.block.setShape(graphic, engine.block.createShape('rect'));
111
+ const fill = engine.block.createFill('image');
112
+ engine.block.setString(fill, 'fill/image/imageFileURI', pathToFileURL(pngPath).href);
113
+ engine.block.setFill(graphic, fill);
114
+ engine.block.appendChild(page, graphic);
115
+ await engine.block.forceLoadResources([page]);
116
+ const bareScene = await engine.scene.saveToString({
117
+ allowedResourceSchemes: SCENE_ALLOWED_RESOURCE_SCHEMES
118
+ });
119
+ const scenePath = join(dir, 'poster.scene');
120
+ await writeFile(scenePath, bareScene);
121
+ // Load it through the real tool.
122
+ const fs = new InMemoryWorkspaceFS();
123
+ const store = new RevisionStore(fs);
124
+ const session = new EngineSession({
125
+ size: 1,
126
+ adapter: cesdkAdapter(engine)
127
+ });
128
+ const tool = createLoadTool({
129
+ fs,
130
+ store,
131
+ session,
132
+ engineLock: new Mutex(),
133
+ allowPath: true
134
+ });
135
+ const result = await tool.call({
136
+ source: { path: scenePath },
137
+ title: 'Bare'
138
+ });
139
+ expect(result.isError, result.content[0].text).toBeUndefined();
140
+ const body = JSON.parse(result.content[0].text);
141
+ // Bare scenes are persisted verbatim (not re-serialized).
142
+ expect((await store.read(body.revision)).scene).toBe(bareScene);
143
+ // The report is a real array; the dropped `workspace-dangling` never
144
+ // appears, and every class is one of the five scheme buckets.
145
+ expect(Array.isArray(body.assets)).toBe(true);
146
+ const CLASSES = ['workspace', 'external', 'bundle', 'transient', 'other'];
147
+ for (const a of body.assets)
148
+ expect(CLASSES).toContain(a.class);
149
+ // Regression (the mock-vs-real gap that this whole change fixes): the
150
+ // file:// image the engine actually loaded is a DURABLE reference — it is
151
+ // classified by scheme (`other`), never as a phantom `transient`. And no
152
+ // durable-scheme URI anywhere is labeled `transient`.
153
+ const fileEntries = body.assets.filter((a) => a.uri.startsWith('file://'));
154
+ expect(fileEntries.length).toBeGreaterThanOrEqual(1);
155
+ for (const a of fileEntries)
156
+ expect(a.class).toBe('other');
157
+ const isDurable = (u) => u.startsWith('workspace://') ||
158
+ u.startsWith('http://') ||
159
+ u.startsWith('https://') ||
160
+ u.startsWith('bundle://') ||
161
+ u.startsWith('file://');
162
+ expect(body.assets.filter((a) => isDurable(a.uri) && a.class === 'transient')).toEqual([]);
163
+ });
164
+ });
165
+ //# sourceMappingURL=load.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load.integration.test.js","sourceRoot":"","sources":["../../../../test/tools/load.integration.test.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAC3E,6DAA6D;AAC7D,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,2EAA2E;AAC3E,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,8BAA8B,EAAE,MAAM,4CAA4C,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAEvE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AAE1C,eAAe;AACf,MAAM,QAAQ,GAAG,IAAI,UAAU,CAC7B,MAAM,CAAC,IAAI,CACT,kGAAkG,EAClG,QAAQ,CACT,CACF,CAAC;AAEF,MAAM,OAAO,GAAa,EAAE,CAAC;AAC7B,QAAQ,CAAC,KAAK,IAAI,EAAE;IAClB,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACzE,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACpE,EAAE,CACA,oFAAoF,EACpF,EAAE,OAAO,EAAE,OAAO,EAAE,EACpB,KAAK,IAAI,EAAE;QACT,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,OAAiB,CAAC,CAAC;QAE7D,iCAAiC;QACjC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACrC,MAAM,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACjC,IAAI,KAAK,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACtE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,SAAS,CACpB,IAAI,EACJ,yBAAyB,EACzB,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAC5B,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACzC,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAEnE,qCAAqC;QACrC,MAAM,EAAE,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC;YAChC,IAAI,EAAE,CAAC;YACP,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC;SAC9B,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,cAAc,CAAC;YAC1B,EAAE;YACF,KAAK;YACL,OAAO;YACP,UAAU,EAAE,IAAI,KAAK,EAAE;YACvB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;YAC7B,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YACzB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,MAAM,CACJ,MAAM,CAAC,OAAO,EACb,MAAM,CAAC,OAAO,CAAC,CAAC,CAAsB,CAAC,IAAI,CAC7C,CAAC,aAAa,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAsB,CAAC,IAAI,CAGnE,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEnC,mEAAmE;QACnE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1D,iEAAiE;QACjE,uEAAuE;QACvE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE9D,qEAAqE;QACrE,sEAAsE;QACtE,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAE1C,iEAAiE;QACjE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;QACtC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE,CAAC,CACF,CAAC;IAEF,EAAE,CACA,oGAAoG,EACpG,EAAE,OAAO,EAAE,OAAO,EAAE,EACpB,KAAK,IAAI,EAAE;QACT,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,OAAiB,CAAC,CAAC;QAE7D,yEAAyE;QACzE,mEAAmE;QACnE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACrC,MAAM,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACjC,IAAI,KAAK,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACtE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,SAAS,CACpB,IAAI,EACJ,yBAAyB,EACzB,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAC5B,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;YAChD,sBAAsB,EAAE,8BAA8B;SACvD,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC5C,MAAM,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAEtC,iCAAiC;QACjC,MAAM,EAAE,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC;YAChC,IAAI,EAAE,CAAC;YACP,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC;SAC9B,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,cAAc,CAAC;YAC1B,EAAE;YACF,KAAK;YACL,OAAO;YACP,UAAU,EAAE,IAAI,KAAK,EAAE;YACvB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;YAC7B,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YAC3B,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,MAAM,CACJ,MAAM,CAAC,OAAO,EACb,MAAM,CAAC,OAAO,CAAC,CAAC,CAAsB,CAAC,IAAI,CAC7C,CAAC,aAAa,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAsB,CAAC,IAAI,CAInE,CAAC;QAEF,0DAA0D;QAC1D,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChE,qEAAqE;QACrE,8DAA8D;QAC9D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAC1E,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAChE,sEAAsE;QACtE,0EAA0E;QAC1E,yEAAyE;QACzE,sDAAsD;QACtD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3C,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAC5B,CAAC;QACF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACrD,KAAK,MAAM,CAAC,IAAI,WAAW;YAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,EAAE,CAC9B,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC;YAC5B,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC;YACvB,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;YACxB,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC;YACzB,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC1B,MAAM,CACJ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CACvE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["// test/tools/load.integration.test.ts\n//\n// Real-engine integration test for the CODE-3 archive flow. Skipped unless\n// CESDK_LICENSE is set (CI secret / packages/codesign-mcp/.env — export it\n// into the shell before running; vitest does not read .env).\n//\n// Builds its own fixture archive with the real engine (no network): a scene\n// with one image block backed by a local PNG, saved via saveToArchive. This\n// is exactly the shape of the premium-template zips from the original bug.\nimport { mkdtemp, rm, writeFile } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { afterAll, describe, expect, it } from 'vitest';\nimport { cesdkAdapter } from '../../src/engine/cesdk-adapter.js';\nimport { Mutex } from '../../src/engine/mutex.js';\nimport { SCENE_ALLOWED_RESOURCE_SCHEMES } from '../../src/engine/scene-resource-schemes.js';\nimport { EngineSession } from '../../src/engine/session.js';\nimport { RevisionStore } from '../../src/revisions/store.js';\nimport { ensureHeadlessEngine } from '../../src/tools/engine.js';\nimport { createLoadTool } from '../../src/tools/load.js';\nimport { InMemoryWorkspaceFS } from '../../src/workspace/in-memory.js';\n\nconst LICENSE = process.env.CESDK_LICENSE;\n\n// 1x1 red PNG.\nconst TINY_PNG = new Uint8Array(\n Buffer.from(\n 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==',\n 'base64'\n )\n);\n\nconst tmpDirs: string[] = [];\nafterAll(async () => {\n for (const d of tmpDirs) await rm(d, { recursive: true, force: true });\n});\n\ndescribe.skipIf(!LICENSE)('load tool — real engine integration', () => {\n it(\n 'archive load → explode → save round-trips with no buffer: schemes; re-load dedupes',\n { timeout: 180_000 },\n async () => {\n const engine = await ensureHeadlessEngine(LICENSE as string);\n\n // --- Build the fixture archive.\n const dir = await mkdtemp(join(tmpdir(), 'load-integration-'));\n tmpDirs.push(dir);\n const pngPath = join(dir, 'red.png');\n await writeFile(pngPath, TINY_PNG);\n engine.scene.create();\n const scene = engine.scene.get();\n if (scene === null) throw new Error('scene.create produced no scene');\n const page = engine.block.create('page');\n engine.block.appendChild(scene, page);\n const graphic = engine.block.create('graphic');\n engine.block.setShape(graphic, engine.block.createShape('rect'));\n const fill = engine.block.createFill('image');\n engine.block.setString(\n fill,\n 'fill/image/imageFileURI',\n pathToFileURL(pngPath).href\n );\n engine.block.setFill(graphic, fill);\n engine.block.appendChild(page, graphic);\n await engine.block.forceLoadResources([page]);\n const blob = await engine.scene.saveToArchive();\n const zipPath = join(dir, 'fixture.zip');\n await writeFile(zipPath, new Uint8Array(await blob.arrayBuffer()));\n\n // --- Load it through the real tool.\n const fs = new InMemoryWorkspaceFS();\n const store = new RevisionStore(fs);\n const session = new EngineSession({\n size: 1,\n adapter: cesdkAdapter(engine)\n });\n const tool = createLoadTool({\n fs,\n store,\n session,\n engineLock: new Mutex(),\n allowPath: true\n });\n const result = await tool.call({\n source: { path: zipPath },\n title: 'Fixture'\n });\n expect(\n result.isError,\n (result.content[0] as { text: string }).text\n ).toBeUndefined();\n const body = JSON.parse((result.content[0] as { text: string }).text) as {\n revision: string;\n title: string;\n };\n expect(body.title).toBe('Fixture');\n\n // The archive's bundled bytes landed content-addressed in assets/.\n const assets = await fs.readdir('assets');\n expect(assets.length).toBeGreaterThanOrEqual(1);\n expect(assets.some((f) => f.endsWith('.png'))).toBe(true);\n\n // Durability: the persisted scene reloads with ZERO transients —\n // nothing would be lost on a future save. (This is the bug's inverse.)\n const rev = await store.read(body.revision);\n await engine.scene.loadFromString(rev.scene);\n expect(engine.editor.findAllTransientResources()).toEqual([]);\n\n // Regression (CODE-3 acceptance): the EDIT save path — the adapter's\n // saveToString — must serialize a workspace://-referencing scene too.\n const adapter = cesdkAdapter(engine);\n const reSaved = await adapter.saveToString(engine);\n expect(reSaved.length).toBeGreaterThan(0);\n\n // Idempotence: re-loading the same zip dedupes to the same shas.\n const again = await tool.call({ source: { path: zipPath } });\n expect(again.isError).toBeUndefined();\n expect((await fs.readdir('assets')).sort()).toEqual(assets.sort());\n }\n );\n\n it(\n 'bare .scene load returns a scheme-classified report from real engine state (no workspace-dangling)',\n { timeout: 180_000 },\n async () => {\n const engine = await ensureHeadlessEngine(LICENSE as string);\n\n // Build a bare scene referencing a local file:// image — no network, and\n // file:// is a durable engine scheme, so it survives saveToString.\n const dir = await mkdtemp(join(tmpdir(), 'load-bare-integration-'));\n tmpDirs.push(dir);\n const pngPath = join(dir, 'red.png');\n await writeFile(pngPath, TINY_PNG);\n engine.scene.create();\n const scene = engine.scene.get();\n if (scene === null) throw new Error('scene.create produced no scene');\n const page = engine.block.create('page');\n engine.block.appendChild(scene, page);\n const graphic = engine.block.create('graphic');\n engine.block.setShape(graphic, engine.block.createShape('rect'));\n const fill = engine.block.createFill('image');\n engine.block.setString(\n fill,\n 'fill/image/imageFileURI',\n pathToFileURL(pngPath).href\n );\n engine.block.setFill(graphic, fill);\n engine.block.appendChild(page, graphic);\n await engine.block.forceLoadResources([page]);\n const bareScene = await engine.scene.saveToString({\n allowedResourceSchemes: SCENE_ALLOWED_RESOURCE_SCHEMES\n });\n const scenePath = join(dir, 'poster.scene');\n await writeFile(scenePath, bareScene);\n\n // Load it through the real tool.\n const fs = new InMemoryWorkspaceFS();\n const store = new RevisionStore(fs);\n const session = new EngineSession({\n size: 1,\n adapter: cesdkAdapter(engine)\n });\n const tool = createLoadTool({\n fs,\n store,\n session,\n engineLock: new Mutex(),\n allowPath: true\n });\n const result = await tool.call({\n source: { path: scenePath },\n title: 'Bare'\n });\n expect(\n result.isError,\n (result.content[0] as { text: string }).text\n ).toBeUndefined();\n const body = JSON.parse((result.content[0] as { text: string }).text) as {\n revision: string;\n title: string;\n assets: Array<{ uri: string; class: string }>;\n };\n\n // Bare scenes are persisted verbatim (not re-serialized).\n expect((await store.read(body.revision)).scene).toBe(bareScene);\n // The report is a real array; the dropped `workspace-dangling` never\n // appears, and every class is one of the five scheme buckets.\n expect(Array.isArray(body.assets)).toBe(true);\n const CLASSES = ['workspace', 'external', 'bundle', 'transient', 'other'];\n for (const a of body.assets) expect(CLASSES).toContain(a.class);\n // Regression (the mock-vs-real gap that this whole change fixes): the\n // file:// image the engine actually loaded is a DURABLE reference — it is\n // classified by scheme (`other`), never as a phantom `transient`. And no\n // durable-scheme URI anywhere is labeled `transient`.\n const fileEntries = body.assets.filter((a) =>\n a.uri.startsWith('file://')\n );\n expect(fileEntries.length).toBeGreaterThanOrEqual(1);\n for (const a of fileEntries) expect(a.class).toBe('other');\n const isDurable = (u: string) =>\n u.startsWith('workspace://') ||\n u.startsWith('http://') ||\n u.startsWith('https://') ||\n u.startsWith('bundle://') ||\n u.startsWith('file://');\n expect(\n body.assets.filter((a) => isDurable(a.uri) && a.class === 'transient')\n ).toEqual([]);\n }\n );\n});\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=load.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load.test.d.ts","sourceRoot":"","sources":["../../../../test/tools/load.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,387 @@
1
+ import { mkdtemp, rm, writeFile } from 'node:fs/promises';
2
+ import { tmpdir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import { afterEach, describe, expect, it, vi } from 'vitest';
5
+ import { Mutex } from '../../src/engine/mutex.js';
6
+ import { EngineSession } from '../../src/engine/session.js';
7
+ import { RevisionStore } from '../../src/revisions/store.js';
8
+ import { createLoadTool } from '../../src/tools/load.js';
9
+ import { shortHash } from '../../src/workspace/content-hash.js';
10
+ import { InMemoryWorkspaceFS } from '../../src/workspace/in-memory.js';
11
+ // Minimal fake engine implementing exactly the slice load.ts touches.
12
+ function makeFakeEngine() {
13
+ const fake = {
14
+ _scene: '',
15
+ _transients: [],
16
+ _resourceBytes: new Map(),
17
+ scene: {
18
+ // Full optional signatures so tests can assert on later positional args
19
+ // (mock.calls tuples are typed from these).
20
+ loadFromArchiveURL: vi.fn(async (_url, _override, _wait) => 1),
21
+ loadFromString: vi.fn(async (content, _override, _wait) => {
22
+ fake._scene = content;
23
+ return 1;
24
+ }),
25
+ saveToString: vi.fn(async (_opts) => 'SCENE_AFTER_RELOCATE')
26
+ },
27
+ editor: {
28
+ findAllTransientResources: vi.fn(() => fake._transients),
29
+ findAllMediaURIs: vi.fn(() => []),
30
+ getResourceData: vi.fn((uri, _chunkSize, onData) => {
31
+ const bytes = fake._resourceBytes.get(uri);
32
+ if (bytes)
33
+ onData(bytes);
34
+ }),
35
+ relocateResource: vi.fn(),
36
+ getMimeType: vi.fn(async () => 'image/png')
37
+ }
38
+ };
39
+ return fake;
40
+ }
41
+ function makeDeps() {
42
+ const fs = new InMemoryWorkspaceFS();
43
+ const store = new RevisionStore(fs);
44
+ const fakeEngine = makeFakeEngine();
45
+ const adapter = {
46
+ create: () => fakeEngine,
47
+ reset: async (e) => {
48
+ e._scene = '';
49
+ },
50
+ loadFromString: async (e, s) => {
51
+ e._scene = s;
52
+ },
53
+ saveToString: async (e) => e._scene
54
+ };
55
+ const session = new EngineSession({ size: 1, adapter });
56
+ return { fs, store, session, fakeEngine, engineLock: new Mutex() };
57
+ }
58
+ function textOf(result) {
59
+ return result.content[0].text;
60
+ }
61
+ afterEach(() => {
62
+ vi.unstubAllGlobals();
63
+ });
64
+ describe('load tool — schema & validation', () => {
65
+ it('omits the `path` source arm from the schema unless allowPath', () => {
66
+ const { fs, store, session, engineLock } = makeDeps();
67
+ const base = { fs, store, session, engineLock };
68
+ const hosted = createLoadTool({ ...base, allowPath: false });
69
+ const local = createLoadTool({ ...base, allowPath: true });
70
+ // `source` is a flat object (no `oneOf`) — the `path` arm is a sibling
71
+ // property present only on Local. See schema-best-practices.test.ts.
72
+ const sourceProps = (s) => JSON.stringify(s.properties.source.properties);
73
+ expect(sourceProps(hosted.inputSchema)).not.toContain('path');
74
+ expect(sourceProps(local.inputSchema)).toContain('path');
75
+ });
76
+ it('errors when source is missing', async () => {
77
+ const { fs, store, session, engineLock } = makeDeps();
78
+ const tool = createLoadTool({ fs, store, session, engineLock });
79
+ const result = await tool.call({});
80
+ expect(result.isError).toBe(true);
81
+ expect(textOf(result)).toMatch(/source/i);
82
+ });
83
+ it('rejects `path` when not allowed (hosted)', async () => {
84
+ const { fs, store, session, engineLock } = makeDeps();
85
+ const tool = createLoadTool({
86
+ fs,
87
+ store,
88
+ session,
89
+ engineLock,
90
+ allowPath: false
91
+ });
92
+ const result = await tool.call({ source: { path: '/tmp/a.zip' } });
93
+ expect(result.isError).toBe(true);
94
+ expect(textOf(result)).toMatch(/path.*not.*supported/i);
95
+ });
96
+ it('rejects non-http(s) URLs', async () => {
97
+ const { fs, store, session, engineLock } = makeDeps();
98
+ const tool = createLoadTool({ fs, store, session, engineLock });
99
+ const result = await tool.call({
100
+ source: { url: 'file:///etc/passwd' }
101
+ });
102
+ expect(result.isError).toBe(true);
103
+ expect(textOf(result)).toMatch(/http/i);
104
+ });
105
+ it('surfaces a fetch failure as a tool error', async () => {
106
+ vi.stubGlobal('fetch', vi.fn(async () => new Response('nope', { status: 404 })));
107
+ const { fs, store, session, engineLock } = makeDeps();
108
+ const tool = createLoadTool({ fs, store, session, engineLock });
109
+ const result = await tool.call({
110
+ source: { url: 'https://example.com/missing.zip' }
111
+ });
112
+ expect(result.isError).toBe(true);
113
+ expect(textOf(result)).toMatch(/404/);
114
+ });
115
+ it('surfaces a network-level fetch rejection as a tool error', async () => {
116
+ vi.stubGlobal('fetch', vi.fn(async () => {
117
+ throw new TypeError('fetch failed');
118
+ }));
119
+ const { fs, store, session, engineLock } = makeDeps();
120
+ const tool = createLoadTool({ fs, store, session, engineLock });
121
+ const result = await tool.call({
122
+ source: { url: 'https://unreachable.invalid/a.zip' }
123
+ });
124
+ expect(result.isError).toBe(true);
125
+ expect(textOf(result)).toMatch(/fetch failed/);
126
+ });
127
+ it('surfaces a response-body read failure as a tool error', async () => {
128
+ vi.stubGlobal('fetch', vi.fn(async () => ({
129
+ ok: true,
130
+ arrayBuffer: async () => {
131
+ throw new Error('read failed');
132
+ }
133
+ })));
134
+ const { fs, store, session, engineLock } = makeDeps();
135
+ const tool = createLoadTool({ fs, store, session, engineLock });
136
+ const result = await tool.call({
137
+ source: { url: 'https://example.com/tpl/a.zip' }
138
+ });
139
+ expect(result.isError).toBe(true);
140
+ expect(textOf(result)).toMatch(/read failed/);
141
+ });
142
+ });
143
+ // A file whose first 4 bytes are the zip magic — content is irrelevant to the
144
+ // fake engine, only the sniffing dispatch reads it.
145
+ const FAKE_ZIP = new Uint8Array([0x50, 0x4b, 0x03, 0x04, 0xff]);
146
+ describe('load tool — archive flow', () => {
147
+ it('explodes transients into assets/<sha>.<ext>, relocates, writes a root revision', async () => {
148
+ const { fs, store, session, fakeEngine, engineLock } = makeDeps();
149
+ fakeEngine._transients = [{ URL: 'buffer://tmp/1', size: 3 }];
150
+ fakeEngine._resourceBytes.set('buffer://tmp/1', new Uint8Array([1, 2, 3]));
151
+ const dir = await mkdtemp(join(tmpdir(), 'load-test-'));
152
+ const zipPath = join(dir, 'event_story.zip');
153
+ await writeFile(zipPath, FAKE_ZIP);
154
+ const leafEvents = [];
155
+ const tool = createLoadTool({
156
+ fs,
157
+ store,
158
+ session,
159
+ engineLock,
160
+ allowPath: true,
161
+ onLeafWritten: (e) => {
162
+ leafEvents.push(e);
163
+ }
164
+ });
165
+ const result = await tool.call({ source: { path: zipPath } });
166
+ expect(result.isError).toBeUndefined();
167
+ const body = JSON.parse(textOf(result));
168
+ // Title derived from the filename.
169
+ expect(body.title).toBe('event_story');
170
+ // Engine was driven correctly: file:// staging URL, waitForResources.
171
+ const loadCall = fakeEngine.scene.loadFromArchiveURL.mock.calls[0];
172
+ expect(loadCall[0]).toMatch(/^file:\/\//);
173
+ expect(loadCall[2]).toBe(true);
174
+ // Asset extracted content-addressed…
175
+ const sha = await shortHash(new Uint8Array([1, 2, 3]));
176
+ expect(await fs.exists(`assets/${sha}.png`)).toBe(true);
177
+ // …and relocated to its workspace URI.
178
+ expect(fakeEngine.editor.relocateResource).toHaveBeenCalledWith('buffer://tmp/1', `workspace://assets/${sha}.png`);
179
+ // saveToString allows `workspace` but NOT `buffer`.
180
+ const saveOpts = fakeEngine.scene.saveToString.mock.calls[0][0];
181
+ expect(saveOpts.allowedResourceSchemes).toContain('workspace');
182
+ expect(saveOpts.allowedResourceSchemes).not.toContain('buffer');
183
+ // Root revision persisted with the post-relocation scene.
184
+ const rev = await store.read(body.revision);
185
+ expect(rev.scene).toBe('SCENE_AFTER_RELOCATE');
186
+ expect(rev.meta.parent).toBeNull();
187
+ // Viewer hook fired; a new root is its own rootRevision.
188
+ expect(leafEvents).toEqual([
189
+ { revision: body.revision, rootRevision: body.revision }
190
+ ]);
191
+ // Session is warm at the new revision (next edit pays no reload).
192
+ expect(session.currentSlot()?.currentRevision).toBe(body.revision);
193
+ await rm(dir, { recursive: true, force: true });
194
+ });
195
+ it('drains a duplicate-content transient the engine still holds via onDisallowedResourceScheme', async () => {
196
+ // Two transients carry IDENTICAL bytes (a duplicated font in a premium
197
+ // template). Both relocate to the same content-addressed target, so the
198
+ // engine's relocateResource no-ops on the second and still serializes its
199
+ // buffer:// URL. The plain save then throws SCENE.DISALLOWED_SCHEMES; the
200
+ // tool must retry with a drain callback that rewrites the straggler in the
201
+ // OUTPUT to its already-persisted workspace:// form.
202
+ const { fs, store, session, fakeEngine, engineLock } = makeDeps();
203
+ const fontBytes = new Uint8Array([9, 8, 7]);
204
+ fakeEngine._transients = [
205
+ { URL: 'buffer://1', size: 3 },
206
+ { URL: 'buffer://2', size: 3 }
207
+ ];
208
+ fakeEngine._resourceBytes.set('buffer://1', fontBytes);
209
+ fakeEngine._resourceBytes.set('buffer://2', fontBytes);
210
+ fakeEngine.editor.getMimeType.mockResolvedValue('font/ttf');
211
+ // Model the real engine: a plain save (no callback) throws because the
212
+ // duplicate straggler still serializes as buffer://2; a save WITH the
213
+ // drain callback invokes it for the straggler and embeds the rewrite.
214
+ fakeEngine.scene.saveToString.mockImplementation(async (opts) => {
215
+ if (!opts?.onDisallowedResourceScheme) {
216
+ const err = new Error('Scene contains disallowed schemes in resource URLs: "buffer"');
217
+ err.code = 'SCENE.DISALLOWED_SCHEMES';
218
+ throw err;
219
+ }
220
+ const rewritten = await opts.onDisallowedResourceScheme('buffer://2', 'hash');
221
+ return `SCENE:${rewritten}`;
222
+ });
223
+ const dir = await mkdtemp(join(tmpdir(), 'load-test-'));
224
+ const zipPath = join(dir, 'event_story.zip');
225
+ await writeFile(zipPath, FAKE_ZIP);
226
+ const tool = createLoadTool({
227
+ fs,
228
+ store,
229
+ session,
230
+ engineLock,
231
+ allowPath: true
232
+ });
233
+ const result = await tool.call({ source: { path: zipPath } });
234
+ expect(result.isError).toBeUndefined();
235
+ const body = JSON.parse(textOf(result));
236
+ // Dedup: identical bytes → a single asset file, regardless of how many
237
+ // callers (relocate loop + drain callback) persisted them.
238
+ const sha = await shortHash(fontBytes);
239
+ expect(await fs.exists(`assets/${sha}.ttf`)).toBe(true);
240
+ const assetFiles = await fs.readdir('assets');
241
+ expect(assetFiles).toEqual([`${sha}.ttf`]);
242
+ // Persisted scene carries the workspace:// rewrite, not the buffer:// URL.
243
+ const rev = await store.read(body.revision);
244
+ expect(rev.scene).toBe(`SCENE:workspace://assets/${sha}.ttf`);
245
+ expect(rev.scene).not.toContain('buffer://2');
246
+ // After draining, the engine's in-memory state is realigned to the drained
247
+ // scene (the warm slot handed to the next edit must match the persisted
248
+ // revision — reloading collapses the duplicate typeface, dropping the
249
+ // un-relocatable buffer:// straggler).
250
+ expect(fakeEngine.scene.loadFromString).toHaveBeenCalledWith(`SCENE:workspace://assets/${sha}.ttf`, false, true);
251
+ await rm(dir, { recursive: true, force: true });
252
+ });
253
+ it('dedupes: an already-present sha is not rewritten', async () => {
254
+ const { fs, store, session, fakeEngine, engineLock } = makeDeps();
255
+ fakeEngine._transients = [{ URL: 'buffer://tmp/1', size: 3 }];
256
+ fakeEngine._resourceBytes.set('buffer://tmp/1', new Uint8Array([1, 2, 3]));
257
+ const sha = await shortHash(new Uint8Array([1, 2, 3]));
258
+ await fs.writeFile(`assets/${sha}.png`, new Uint8Array([1, 2, 3]));
259
+ const writeSpy = vi.spyOn(fs, 'writeFile');
260
+ const dir = await mkdtemp(join(tmpdir(), 'load-test-'));
261
+ const zipPath = join(dir, 'a.zip');
262
+ await writeFile(zipPath, FAKE_ZIP);
263
+ const tool = createLoadTool({
264
+ fs,
265
+ store,
266
+ session,
267
+ engineLock,
268
+ allowPath: true
269
+ });
270
+ const result = await tool.call({ source: { path: zipPath } });
271
+ expect(result.isError).toBeUndefined();
272
+ const assetWrites = writeSpy.mock.calls.filter(([p]) => String(p).startsWith('assets/'));
273
+ expect(assetWrites).toHaveLength(0);
274
+ await rm(dir, { recursive: true, force: true });
275
+ });
276
+ it('marks the engine slot dirty when the engine throws', async () => {
277
+ const { fs, store, session, fakeEngine, engineLock } = makeDeps();
278
+ fakeEngine.scene.loadFromArchiveURL.mockRejectedValueOnce(new Error('corrupt archive'));
279
+ const dir = await mkdtemp(join(tmpdir(), 'load-test-'));
280
+ const zipPath = join(dir, 'a.zip');
281
+ await writeFile(zipPath, FAKE_ZIP);
282
+ const tool = createLoadTool({
283
+ fs,
284
+ store,
285
+ session,
286
+ engineLock,
287
+ allowPath: true
288
+ });
289
+ const result = await tool.call({ source: { path: zipPath } });
290
+ expect(result.isError).toBe(true);
291
+ expect(textOf(result)).toMatch(/corrupt archive/);
292
+ expect(session.currentSlot()).toBeUndefined();
293
+ await rm(dir, { recursive: true, force: true });
294
+ });
295
+ it('loads an archive from a URL (fetched bytes, staged to a file:// URL)', async () => {
296
+ vi.stubGlobal('fetch', vi.fn(async () => new Response(FAKE_ZIP.slice())));
297
+ const { fs, store, session, fakeEngine, engineLock } = makeDeps();
298
+ const tool = createLoadTool({ fs, store, session, engineLock });
299
+ const result = await tool.call({
300
+ source: { url: 'https://example.com/tpl/event_story.zip' },
301
+ title: 'Event Story'
302
+ });
303
+ expect(result.isError).toBeUndefined();
304
+ const body = JSON.parse(textOf(result));
305
+ expect(body.title).toBe('Event Story');
306
+ expect(fakeEngine.scene.loadFromArchiveURL.mock.calls[0][0]).toMatch(/^file:\/\//);
307
+ });
308
+ it('derives a title from a malformed percent-encoded URL basename without throwing', async () => {
309
+ vi.stubGlobal('fetch', vi.fn(async () => new Response(FAKE_ZIP.slice())));
310
+ const { fs, store, session, engineLock } = makeDeps();
311
+ const tool = createLoadTool({ fs, store, session, engineLock });
312
+ const result = await tool.call({
313
+ source: { url: 'https://example.com/tpl/a%2.zip' }
314
+ });
315
+ expect(result.isError).toBeUndefined();
316
+ const body = JSON.parse(textOf(result));
317
+ expect(body.title).toBe('a%2');
318
+ });
319
+ it('does not percent-decode a local path — a literal `%` in the filename is preserved', async () => {
320
+ const { fs, store, session, engineLock } = makeDeps();
321
+ const dir = await mkdtemp(join(tmpdir(), 'load-test-'));
322
+ const zipPath = join(dir, 'my%20design.zip');
323
+ await writeFile(zipPath, FAKE_ZIP);
324
+ const tool = createLoadTool({
325
+ fs,
326
+ store,
327
+ session,
328
+ engineLock,
329
+ allowPath: true
330
+ });
331
+ const result = await tool.call({ source: { path: zipPath } });
332
+ expect(result.isError).toBeUndefined();
333
+ const body = JSON.parse(textOf(result));
334
+ expect(body.title).toBe('my%20design');
335
+ await rm(dir, { recursive: true, force: true });
336
+ });
337
+ });
338
+ describe('load tool — bare .scene flow', () => {
339
+ it('persists the scene as-is and returns a scheme-classified, deduped asset report', async () => {
340
+ const { fs, store, session, fakeEngine, engineLock } = makeDeps();
341
+ // Real-engine shape (verified in CODE-3): durable re-fetchable refs the
342
+ // engine keeps as URLs (http(s)) come back from findAllMediaURIs(); anything
343
+ // it loaded into memory — workspace:// (via our resolver), bundle://
344
+ // fallbacks, buffer: orphans — comes back from findAllTransientResources()
345
+ // carrying its real URI. `shared.png` appears in BOTH lists → must dedupe.
346
+ fakeEngine.editor.findAllMediaURIs.mockReturnValue([
347
+ 'https://cdn.example.com/hero.jpg',
348
+ 'workspace://assets/shared.png'
349
+ ]);
350
+ fakeEngine._transients = [
351
+ { URL: 'workspace://assets/shared.png', size: 1 },
352
+ { URL: 'workspace://assets/logo.ttf', size: 2 },
353
+ { URL: 'bundle://ly.img.cesdk/fonts/x.otf', size: 3 },
354
+ { URL: 'buffer://orphan', size: 4 },
355
+ { URL: 'file:///tmp/local.png', size: 5 }
356
+ ];
357
+ const dir = await mkdtemp(join(tmpdir(), 'load-test-'));
358
+ const scenePath = join(dir, 'poster.scene');
359
+ await writeFile(scenePath, 'UBQ1BASE64SCENESTRING');
360
+ const tool = createLoadTool({
361
+ fs,
362
+ store,
363
+ session,
364
+ engineLock,
365
+ allowPath: true
366
+ });
367
+ const result = await tool.call({ source: { path: scenePath } });
368
+ expect(result.isError).toBeUndefined();
369
+ const body = JSON.parse(textOf(result));
370
+ expect(body.title).toBe('poster');
371
+ // Engine validated the content (loadFromString), persisted verbatim.
372
+ expect(fakeEngine.scene.loadFromString).toHaveBeenCalledWith('UBQ1BASE64SCENESTRING', false, true);
373
+ expect((await store.read(body.revision)).scene).toBe('UBQ1BASE64SCENESTRING');
374
+ // Classified by scheme; `shared.png` deduped to one entry; a durable-scheme
375
+ // URI (workspace/bundle/file) is NEVER labeled `transient` — only buffer:.
376
+ expect(body.assets).toEqual([
377
+ { uri: 'https://cdn.example.com/hero.jpg', class: 'external' },
378
+ { uri: 'workspace://assets/shared.png', class: 'workspace' },
379
+ { uri: 'workspace://assets/logo.ttf', class: 'workspace' },
380
+ { uri: 'bundle://ly.img.cesdk/fonts/x.otf', class: 'bundle' },
381
+ { uri: 'buffer://orphan', class: 'transient' },
382
+ { uri: 'file:///tmp/local.png', class: 'other' }
383
+ ]);
384
+ await rm(dir, { recursive: true, force: true });
385
+ });
386
+ });
387
+ //# sourceMappingURL=load.test.js.map