@imgly/codesign-mcp 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1085) hide show
  1. package/README.md +56 -11
  2. package/assets/docs/guide/SKILL.md +45 -53
  3. package/assets/docs/guide/animation/create/base.md +234 -243
  4. package/assets/docs/guide/animation/create/text.md +250 -231
  5. package/assets/docs/guide/animation/create.md +197 -231
  6. package/assets/docs/guide/animation/edit.md +196 -271
  7. package/assets/docs/guide/animation/types.md +182 -185
  8. package/assets/docs/guide/animation.md +9 -6
  9. package/assets/docs/guide/api/AssetAPI.md +7 -53
  10. package/assets/docs/guide/api/BlockAPI.md +725 -648
  11. package/assets/docs/guide/api/CreativeEngine.md +7 -16
  12. package/assets/docs/guide/api/EditorAPI.md +32 -93
  13. package/assets/docs/guide/api/EventAPI.md +1 -2
  14. package/assets/docs/guide/api/SceneAPI.md +47 -98
  15. package/assets/docs/guide/api/VariableAPI.md +1 -4
  16. package/assets/docs/guide/api/node/classes/assetapi.md +1090 -0
  17. package/assets/docs/guide/api/node/classes/blockapi.md +12965 -0
  18. package/assets/docs/guide/api/node/classes/creativeengine.md +319 -0
  19. package/assets/docs/guide/api/node/classes/editorapi.md +3417 -0
  20. package/assets/docs/guide/api/node/classes/engineactions.md +319 -0
  21. package/assets/docs/guide/api/node/classes/eventapi.md +56 -0
  22. package/assets/docs/guide/api/node/classes/sceneapi.md +1370 -0
  23. package/assets/docs/guide/api/node/classes/variableapi.md +143 -0
  24. package/assets/docs/guide/api/node/enumerations/compressionformat.md +23 -0
  25. package/assets/docs/guide/api/node/enumerations/compressionlevel.md +24 -0
  26. package/assets/docs/guide/api/node/functions/iscmykcolor.md +30 -0
  27. package/assets/docs/guide/api/node/functions/isrgbacolor.md +30 -0
  28. package/assets/docs/guide/api/node/functions/isspotcolor.md +30 -0
  29. package/assets/docs/guide/api/node/interfaces/addvideooptions.md +31 -0
  30. package/assets/docs/guide/api/node/interfaces/applyassetoptions.md +31 -0
  31. package/assets/docs/guide/api/node/interfaces/asset.md +30 -0
  32. package/assets/docs/guide/api/node/interfaces/assetbooleanproperty.md +25 -0
  33. package/assets/docs/guide/api/node/interfaces/assetcmykcolor.md +26 -0
  34. package/assets/docs/guide/api/node/interfaces/assetcolorproperty.md +25 -0
  35. package/assets/docs/guide/api/node/interfaces/assetcontentaspectratio.md +23 -0
  36. package/assets/docs/guide/api/node/interfaces/assetdefinition.md +31 -0
  37. package/assets/docs/guide/api/node/interfaces/assetenumproperty.md +26 -0
  38. package/assets/docs/guide/api/node/interfaces/assetfixedaspectratio.md +24 -0
  39. package/assets/docs/guide/api/node/interfaces/assetfixedsize.md +25 -0
  40. package/assets/docs/guide/api/node/interfaces/assetfreeaspectratio.md +22 -0
  41. package/assets/docs/guide/api/node/interfaces/assetnumberproperty.md +28 -0
  42. package/assets/docs/guide/api/node/interfaces/assetpayload.md +27 -0
  43. package/assets/docs/guide/api/node/interfaces/assetquerydata.md +32 -0
  44. package/assets/docs/guide/api/node/interfaces/assetresult.md +46 -0
  45. package/assets/docs/guide/api/node/interfaces/assetrgbcolor.md +25 -0
  46. package/assets/docs/guide/api/node/interfaces/assetsource.md +111 -0
  47. package/assets/docs/guide/api/node/interfaces/assetspotcolor.md +25 -0
  48. package/assets/docs/guide/api/node/interfaces/assetsqueryresult.md +31 -0
  49. package/assets/docs/guide/api/node/interfaces/assetstringproperty.md +25 -0
  50. package/assets/docs/guide/api/node/interfaces/assetstylepreset.md +39 -0
  51. package/assets/docs/guide/api/node/interfaces/assetstylepresetanimation.md +23 -0
  52. package/assets/docs/guide/api/node/interfaces/audiotrackinfo.md +32 -0
  53. package/assets/docs/guide/api/node/interfaces/blockevent.md +26 -0
  54. package/assets/docs/guide/api/node/interfaces/blockstateerror.md +26 -0
  55. package/assets/docs/guide/api/node/interfaces/blockstatepending.md +26 -0
  56. package/assets/docs/guide/api/node/interfaces/blockstateready.md +25 -0
  57. package/assets/docs/guide/api/node/interfaces/buffer.md +26 -0
  58. package/assets/docs/guide/api/node/interfaces/characterinkbox.md +29 -0
  59. package/assets/docs/guide/api/node/interfaces/cmykcolor.md +34 -0
  60. package/assets/docs/guide/api/node/interfaces/completeassetresult.md +46 -0
  61. package/assets/docs/guide/api/node/interfaces/configuration.md +38 -0
  62. package/assets/docs/guide/api/node/interfaces/dominantcolor.md +25 -0
  63. package/assets/docs/guide/api/node/interfaces/dominantcolorsoptions.md +23 -0
  64. package/assets/docs/guide/api/node/interfaces/engineactioninfo.md +24 -0
  65. package/assets/docs/guide/api/node/interfaces/engineactionsregistry.md +18 -0
  66. package/assets/docs/guide/api/node/interfaces/engineplugin.md +30 -0
  67. package/assets/docs/guide/api/node/interfaces/font.md +27 -0
  68. package/assets/docs/guide/api/node/interfaces/fontmetrics.md +32 -0
  69. package/assets/docs/guide/api/node/interfaces/gradientcolorstop.md +28 -0
  70. package/assets/docs/guide/api/node/interfaces/logger.md +39 -0
  71. package/assets/docs/guide/api/node/interfaces/pageduration.md +23 -0
  72. package/assets/docs/guide/api/node/interfaces/range.md +23 -0
  73. package/assets/docs/guide/api/node/interfaces/rgbacolor.md +32 -0
  74. package/assets/docs/guide/api/node/interfaces/rgbcolor.md +30 -0
  75. package/assets/docs/guide/api/node/interfaces/settings.md +126 -0
  76. package/assets/docs/guide/api/node/interfaces/size2.md +21 -0
  77. package/assets/docs/guide/api/node/interfaces/source.md +24 -0
  78. package/assets/docs/guide/api/node/interfaces/spotcolor.md +30 -0
  79. package/assets/docs/guide/api/node/interfaces/textdecorationconfig.md +31 -0
  80. package/assets/docs/guide/api/node/interfaces/textfontsizeoptions.md +24 -0
  81. package/assets/docs/guide/api/node/interfaces/textruninfo.md +33 -0
  82. package/assets/docs/guide/api/node/interfaces/transientresource.md +26 -0
  83. package/assets/docs/guide/api/node/interfaces/typeface.md +23 -0
  84. package/assets/docs/guide/api/node/interfaces/vec2.md +21 -0
  85. package/assets/docs/guide/api/node/interfaces/vec3.md +22 -0
  86. package/assets/docs/guide/api/node/type-aliases/addimageoptions.md +36 -0
  87. package/assets/docs/guide/api/node/type-aliases/animationbaselinedirection.md +18 -0
  88. package/assets/docs/guide/api/node/type-aliases/animationblockswipetextdirection.md +18 -0
  89. package/assets/docs/guide/api/node/type-aliases/animationeasing.md +18 -0
  90. package/assets/docs/guide/api/node/type-aliases/animationentry.md +28 -0
  91. package/assets/docs/guide/api/node/type-aliases/animationgrowdirection.md +18 -0
  92. package/assets/docs/guide/api/node/type-aliases/animationjumploopdirection.md +18 -0
  93. package/assets/docs/guide/api/node/type-aliases/animationkenburnsdirection.md +18 -0
  94. package/assets/docs/guide/api/node/type-aliases/animationmergetextdirection.md +18 -0
  95. package/assets/docs/guide/api/node/type-aliases/animationoptions.md +28 -0
  96. package/assets/docs/guide/api/node/type-aliases/animationspindirection.md +18 -0
  97. package/assets/docs/guide/api/node/type-aliases/animationspinloopdirection.md +18 -0
  98. package/assets/docs/guide/api/node/type-aliases/animationtype.md +24 -0
  99. package/assets/docs/guide/api/node/type-aliases/animationtypelonghand.md +21 -0
  100. package/assets/docs/guide/api/node/type-aliases/animationtypeshorthand.md +18 -0
  101. package/assets/docs/guide/api/node/type-aliases/animationtypewritertextwritingstyle.md +18 -0
  102. package/assets/docs/guide/api/node/type-aliases/animationwipedirection.md +18 -0
  103. package/assets/docs/guide/api/node/type-aliases/applicationmimetype.md +20 -0
  104. package/assets/docs/guide/api/node/type-aliases/assetcolor.md +23 -0
  105. package/assets/docs/guide/api/node/type-aliases/assetfilter.md +47 -0
  106. package/assets/docs/guide/api/node/type-aliases/assetgroups.md +25 -0
  107. package/assets/docs/guide/api/node/type-aliases/assetmetadata.md +42 -0
  108. package/assets/docs/guide/api/node/type-aliases/assetproperty.md +25 -0
  109. package/assets/docs/guide/api/node/type-aliases/assetpropertyfilter.md +41 -0
  110. package/assets/docs/guide/api/node/type-aliases/assetpropertypath.md +26 -0
  111. package/assets/docs/guide/api/node/type-aliases/assetstylepresetanimationproperties.md +34 -0
  112. package/assets/docs/guide/api/node/type-aliases/assetstylepresetproperties.md +29 -0
  113. package/assets/docs/guide/api/node/type-aliases/assetstylepresetpropertyvalue.md +29 -0
  114. package/assets/docs/guide/api/node/type-aliases/assetstylepresetscalableproperty.md +28 -0
  115. package/assets/docs/guide/api/node/type-aliases/assettransformpreset.md +24 -0
  116. package/assets/docs/guide/api/node/type-aliases/asyncuriresolver.md +36 -0
  117. package/assets/docs/guide/api/node/type-aliases/audioexportoptions.md +43 -0
  118. package/assets/docs/guide/api/node/type-aliases/audiofromvideooptions.md +27 -0
  119. package/assets/docs/guide/api/node/type-aliases/audiomimetype.md +20 -0
  120. package/assets/docs/guide/api/node/type-aliases/blendmode.md +18 -0
  121. package/assets/docs/guide/api/node/type-aliases/blockenumtype.md +63 -0
  122. package/assets/docs/guide/api/node/type-aliases/blockstate.md +26 -0
  123. package/assets/docs/guide/api/node/type-aliases/blurtype.md +24 -0
  124. package/assets/docs/guide/api/node/type-aliases/blurtypelonghand.md +21 -0
  125. package/assets/docs/guide/api/node/type-aliases/blurtypeshorthand.md +18 -0
  126. package/assets/docs/guide/api/node/type-aliases/booleanoperation.md +27 -0
  127. package/assets/docs/guide/api/node/type-aliases/boolpropertyname.md +79 -0
  128. package/assets/docs/guide/api/node/type-aliases/cameraclampingovershootmode.md +18 -0
  129. package/assets/docs/guide/api/node/type-aliases/captionhorizontalalignment.md +18 -0
  130. package/assets/docs/guide/api/node/type-aliases/captionverticalalignment.md +18 -0
  131. package/assets/docs/guide/api/node/type-aliases/cmyk.md +23 -0
  132. package/assets/docs/guide/api/node/type-aliases/color.md +23 -0
  133. package/assets/docs/guide/api/node/type-aliases/colorpickercolormode.md +18 -0
  134. package/assets/docs/guide/api/node/type-aliases/colorpropertyname.md +31 -0
  135. package/assets/docs/guide/api/node/type-aliases/colorspace.md +20 -0
  136. package/assets/docs/guide/api/node/type-aliases/contentfillmode.md +18 -0
  137. package/assets/docs/guide/api/node/type-aliases/controlgizmomovehandlevisibility.md +18 -0
  138. package/assets/docs/guide/api/node/type-aliases/controlgizmoresizehandlesvisibility.md +18 -0
  139. package/assets/docs/guide/api/node/type-aliases/controlgizmorotatehandlesvisibility.md +18 -0
  140. package/assets/docs/guide/api/node/type-aliases/controlgizmoscalehandlesvisibility.md +18 -0
  141. package/assets/docs/guide/api/node/type-aliases/createsceneoptions.md +30 -0
  142. package/assets/docs/guide/api/node/type-aliases/cutoutoperation.md +20 -0
  143. package/assets/docs/guide/api/node/type-aliases/cutouttype.md +18 -0
  144. package/assets/docs/guide/api/node/type-aliases/defaultassetsourceid.md +37 -0
  145. package/assets/docs/guide/api/node/type-aliases/demoassetsourceid.md +33 -0
  146. package/assets/docs/guide/api/node/type-aliases/designblockid.md +20 -0
  147. package/assets/docs/guide/api/node/type-aliases/designblocktype.md +24 -0
  148. package/assets/docs/guide/api/node/type-aliases/designblocktypelonghand.md +21 -0
  149. package/assets/docs/guide/api/node/type-aliases/designblocktypeshorthand.md +18 -0
  150. package/assets/docs/guide/api/node/type-aliases/designunit.md +18 -0
  151. package/assets/docs/guide/api/node/type-aliases/doubleclickselectionmode.md +18 -0
  152. package/assets/docs/guide/api/node/type-aliases/doublepropertyname.md +26 -0
  153. package/assets/docs/guide/api/node/type-aliases/dropshadowoptions.md +32 -0
  154. package/assets/docs/guide/api/node/type-aliases/editmode.md +27 -0
  155. package/assets/docs/guide/api/node/type-aliases/effecttype.md +24 -0
  156. package/assets/docs/guide/api/node/type-aliases/effecttypelonghand.md +21 -0
  157. package/assets/docs/guide/api/node/type-aliases/effecttypeshorthand.md +18 -0
  158. package/assets/docs/guide/api/node/type-aliases/engineactionid.md +20 -0
  159. package/assets/docs/guide/api/node/type-aliases/enginecustomactionfunction.md +30 -0
  160. package/assets/docs/guide/api/node/type-aliases/engineplugincontext.md +30 -0
  161. package/assets/docs/guide/api/node/type-aliases/enumpropertyname.md +59 -0
  162. package/assets/docs/guide/api/node/type-aliases/enumvalues.md +59 -0
  163. package/assets/docs/guide/api/node/type-aliases/exportoptions.md +57 -0
  164. package/assets/docs/guide/api/node/type-aliases/fillpixelstreamorientation.md +18 -0
  165. package/assets/docs/guide/api/node/type-aliases/filltype.md +24 -0
  166. package/assets/docs/guide/api/node/type-aliases/filltypelonghand.md +21 -0
  167. package/assets/docs/guide/api/node/type-aliases/filltypeshorthand.md +18 -0
  168. package/assets/docs/guide/api/node/type-aliases/floatpropertyname.md +184 -0
  169. package/assets/docs/guide/api/node/type-aliases/fontsizeunit.md +23 -0
  170. package/assets/docs/guide/api/node/type-aliases/fontstyle.md +20 -0
  171. package/assets/docs/guide/api/node/type-aliases/fontweight.md +30 -0
  172. package/assets/docs/guide/api/node/type-aliases/gradientstoprgba.md +23 -0
  173. package/assets/docs/guide/api/node/type-aliases/heightmode.md +18 -0
  174. package/assets/docs/guide/api/node/type-aliases/hexcolorstring.md +20 -0
  175. package/assets/docs/guide/api/node/type-aliases/historyid.md +20 -0
  176. package/assets/docs/guide/api/node/type-aliases/historyupdate.md +25 -0
  177. package/assets/docs/guide/api/node/type-aliases/horizontalblockalignment.md +18 -0
  178. package/assets/docs/guide/api/node/type-aliases/horizontalcontentfillalignment.md +18 -0
  179. package/assets/docs/guide/api/node/type-aliases/horizontaltextalignment.md +18 -0
  180. package/assets/docs/guide/api/node/type-aliases/imagemimetype.md +25 -0
  181. package/assets/docs/guide/api/node/type-aliases/intpropertyname.md +26 -0
  182. package/assets/docs/guide/api/node/type-aliases/liststyle.md +20 -0
  183. package/assets/docs/guide/api/node/type-aliases/locale.md +20 -0
  184. package/assets/docs/guide/api/node/type-aliases/loglevel.md +24 -0
  185. package/assets/docs/guide/api/node/type-aliases/mimetype.md +20 -0
  186. package/assets/docs/guide/api/node/type-aliases/objecttype.md +24 -0
  187. package/assets/docs/guide/api/node/type-aliases/objecttypelonghand.md +27 -0
  188. package/assets/docs/guide/api/node/type-aliases/objecttypeshorthand.md +27 -0
  189. package/assets/docs/guide/api/node/type-aliases/optionalprefix.md +24 -0
  190. package/assets/docs/guide/api/node/type-aliases/pageguidessource.md +18 -0
  191. package/assets/docs/guide/api/node/type-aliases/palettecolor.md +24 -0
  192. package/assets/docs/guide/api/node/type-aliases/positionmode.md +20 -0
  193. package/assets/docs/guide/api/node/type-aliases/positionxmode.md +18 -0
  194. package/assets/docs/guide/api/node/type-aliases/positionymode.md +18 -0
  195. package/assets/docs/guide/api/node/type-aliases/propertytype.md +31 -0
  196. package/assets/docs/guide/api/node/type-aliases/rgba.md +23 -0
  197. package/assets/docs/guide/api/node/type-aliases/rolestring.md +23 -0
  198. package/assets/docs/guide/api/node/type-aliases/scenefontsizeunit.md +18 -0
  199. package/assets/docs/guide/api/node/type-aliases/scenelayout.md +18 -0
  200. package/assets/docs/guide/api/node/type-aliases/scenemode.md +18 -0
  201. package/assets/docs/guide/api/node/type-aliases/scope.md +50 -0
  202. package/assets/docs/guide/api/node/type-aliases/settingboolpropertyname.md +62 -0
  203. package/assets/docs/guide/api/node/type-aliases/settingcolorpropertyname.md +38 -0
  204. package/assets/docs/guide/api/node/type-aliases/settingenumpropertyname.md +29 -0
  205. package/assets/docs/guide/api/node/type-aliases/settingenumtype.md +33 -0
  206. package/assets/docs/guide/api/node/type-aliases/settingenumvalues.md +29 -0
  207. package/assets/docs/guide/api/node/type-aliases/settingfloatpropertyname.md +25 -0
  208. package/assets/docs/guide/api/node/type-aliases/settingintpropertyname.md +18 -0
  209. package/assets/docs/guide/api/node/type-aliases/settingkey.md +20 -0
  210. package/assets/docs/guide/api/node/type-aliases/settingsbool.md +18 -0
  211. package/assets/docs/guide/api/node/type-aliases/settingscolor.md +20 -0
  212. package/assets/docs/guide/api/node/type-aliases/settingscolorrgba.md +24 -0
  213. package/assets/docs/guide/api/node/type-aliases/settingsenum.md +18 -0
  214. package/assets/docs/guide/api/node/type-aliases/settingsfloat.md +18 -0
  215. package/assets/docs/guide/api/node/type-aliases/settingsint.md +18 -0
  216. package/assets/docs/guide/api/node/type-aliases/settingsstring.md +18 -0
  217. package/assets/docs/guide/api/node/type-aliases/settingstringpropertyname.md +28 -0
  218. package/assets/docs/guide/api/node/type-aliases/settingtype.md +20 -0
  219. package/assets/docs/guide/api/node/type-aliases/settingvaluetype.md +26 -0
  220. package/assets/docs/guide/api/node/type-aliases/shapetype.md +24 -0
  221. package/assets/docs/guide/api/node/type-aliases/shapetypelonghand.md +21 -0
  222. package/assets/docs/guide/api/node/type-aliases/shapetypeshorthand.md +18 -0
  223. package/assets/docs/guide/api/node/type-aliases/shapevectorpathfillrule.md +18 -0
  224. package/assets/docs/guide/api/node/type-aliases/sizemode.md +20 -0
  225. package/assets/docs/guide/api/node/type-aliases/sortingorder.md +21 -0
  226. package/assets/docs/guide/api/node/type-aliases/sourcesetpropertyname.md +18 -0
  227. package/assets/docs/guide/api/node/type-aliases/splitoptions.md +28 -0
  228. package/assets/docs/guide/api/node/type-aliases/stringpropertyname.md +43 -0
  229. package/assets/docs/guide/api/node/type-aliases/strokecap.md +18 -0
  230. package/assets/docs/guide/api/node/type-aliases/strokecornergeometry.md +18 -0
  231. package/assets/docs/guide/api/node/type-aliases/strokedashendcap.md +18 -0
  232. package/assets/docs/guide/api/node/type-aliases/strokedashstartcap.md +18 -0
  233. package/assets/docs/guide/api/node/type-aliases/strokeendcap.md +18 -0
  234. package/assets/docs/guide/api/node/type-aliases/strokeposition.md +18 -0
  235. package/assets/docs/guide/api/node/type-aliases/strokestartcap.md +18 -0
  236. package/assets/docs/guide/api/node/type-aliases/strokestyle.md +18 -0
  237. package/assets/docs/guide/api/node/type-aliases/syncuriresolver.md +31 -0
  238. package/assets/docs/guide/api/node/type-aliases/textanimationwritingstyle.md +18 -0
  239. package/assets/docs/guide/api/node/type-aliases/textcase.md +20 -0
  240. package/assets/docs/guide/api/node/type-aliases/textdecorationline.md +27 -0
  241. package/assets/docs/guide/api/node/type-aliases/textdecorationstyle.md +26 -0
  242. package/assets/docs/guide/api/node/type-aliases/textverticalalignment.md +18 -0
  243. package/assets/docs/guide/api/node/type-aliases/timelinetrackvisibility.md +18 -0
  244. package/assets/docs/guide/api/node/type-aliases/touchpinchaction.md +18 -0
  245. package/assets/docs/guide/api/node/type-aliases/touchrotateaction.md +18 -0
  246. package/assets/docs/guide/api/node/type-aliases/typefacedefinition.md +41 -0
  247. package/assets/docs/guide/api/node/type-aliases/verticalblockalignment.md +18 -0
  248. package/assets/docs/guide/api/node/type-aliases/verticalcontentfillalignment.md +18 -0
  249. package/assets/docs/guide/api/node/type-aliases/videoexportoptions.md +54 -0
  250. package/assets/docs/guide/api/node/type-aliases/videomimetype.md +20 -0
  251. package/assets/docs/guide/api/node/type-aliases/widthmode.md +18 -0
  252. package/assets/docs/guide/api/node/type-aliases/xywh.md +23 -0
  253. package/assets/docs/guide/api/node/type-aliases/zoomautofitaxis.md +20 -0
  254. package/assets/docs/guide/api/node/type-aliases/zoomoptions.md +27 -0
  255. package/assets/docs/guide/api/node/variables/animation_types.md +21 -0
  256. package/assets/docs/guide/api/node/variables/animationbaselinedirectionvalues.md +18 -0
  257. package/assets/docs/guide/api/node/variables/animationblockswipetextdirectionvalues.md +18 -0
  258. package/assets/docs/guide/api/node/variables/animationeasingvalues.md +18 -0
  259. package/assets/docs/guide/api/node/variables/animationgrowdirectionvalues.md +18 -0
  260. package/assets/docs/guide/api/node/variables/animationjumploopdirectionvalues.md +18 -0
  261. package/assets/docs/guide/api/node/variables/animationkenburnsdirectionvalues.md +18 -0
  262. package/assets/docs/guide/api/node/variables/animationmergetextdirectionvalues.md +18 -0
  263. package/assets/docs/guide/api/node/variables/animationspindirectionvalues.md +18 -0
  264. package/assets/docs/guide/api/node/variables/animationspinloopdirectionvalues.md +18 -0
  265. package/assets/docs/guide/api/node/variables/animationtypewritertextwritingstylevalues.md +18 -0
  266. package/assets/docs/guide/api/node/variables/animationwipedirectionvalues.md +18 -0
  267. package/assets/docs/guide/api/node/variables/blendmodevalues.md +18 -0
  268. package/assets/docs/guide/api/node/variables/blur_types.md +21 -0
  269. package/assets/docs/guide/api/node/variables/cameraclampingovershootmodevalues.md +18 -0
  270. package/assets/docs/guide/api/node/variables/captionhorizontalalignmentvalues.md +18 -0
  271. package/assets/docs/guide/api/node/variables/captionverticalalignmentvalues.md +18 -0
  272. package/assets/docs/guide/api/node/variables/colorpickercolormodevalues.md +18 -0
  273. package/assets/docs/guide/api/node/variables/contentfillmodevalues.md +18 -0
  274. package/assets/docs/guide/api/node/variables/controlgizmomovehandlevisibilityvalues.md +18 -0
  275. package/assets/docs/guide/api/node/variables/controlgizmoresizehandlesvisibilityvalues.md +18 -0
  276. package/assets/docs/guide/api/node/variables/controlgizmorotatehandlesvisibilityvalues.md +18 -0
  277. package/assets/docs/guide/api/node/variables/controlgizmoscalehandlesvisibilityvalues.md +18 -0
  278. package/assets/docs/guide/api/node/variables/cutouttypevalues.md +18 -0
  279. package/assets/docs/guide/api/node/variables/design_block_types.md +21 -0
  280. package/assets/docs/guide/api/node/variables/doubleclickselectionmodevalues.md +18 -0
  281. package/assets/docs/guide/api/node/variables/effect_types.md +21 -0
  282. package/assets/docs/guide/api/node/variables/fill_types.md +21 -0
  283. package/assets/docs/guide/api/node/variables/fillpixelstreamorientationvalues.md +18 -0
  284. package/assets/docs/guide/api/node/variables/heightmodevalues.md +18 -0
  285. package/assets/docs/guide/api/node/variables/horizontalcontentfillalignmentvalues.md +18 -0
  286. package/assets/docs/guide/api/node/variables/loglevel.md +37 -0
  287. package/assets/docs/guide/api/node/variables/mimetype.md +41 -0
  288. package/assets/docs/guide/api/node/variables/pageguidessourcevalues.md +18 -0
  289. package/assets/docs/guide/api/node/variables/positionxmodevalues.md +18 -0
  290. package/assets/docs/guide/api/node/variables/positionymodevalues.md +18 -0
  291. package/assets/docs/guide/api/node/variables/scenedesignunitvalues.md +18 -0
  292. package/assets/docs/guide/api/node/variables/scenefontsizeunitvalues.md +18 -0
  293. package/assets/docs/guide/api/node/variables/scenelayoutvalues.md +18 -0
  294. package/assets/docs/guide/api/node/variables/scenemodevalues.md +18 -0
  295. package/assets/docs/guide/api/node/variables/shape_types.md +21 -0
  296. package/assets/docs/guide/api/node/variables/shapevectorpathfillrulevalues.md +18 -0
  297. package/assets/docs/guide/api/node/variables/strokecapvalues.md +18 -0
  298. package/assets/docs/guide/api/node/variables/strokecornergeometryvalues.md +18 -0
  299. package/assets/docs/guide/api/node/variables/strokedashendcapvalues.md +18 -0
  300. package/assets/docs/guide/api/node/variables/strokedashstartcapvalues.md +18 -0
  301. package/assets/docs/guide/api/node/variables/strokeendcapvalues.md +18 -0
  302. package/assets/docs/guide/api/node/variables/strokepositionvalues.md +18 -0
  303. package/assets/docs/guide/api/node/variables/strokestartcapvalues.md +18 -0
  304. package/assets/docs/guide/api/node/variables/strokestylevalues.md +18 -0
  305. package/assets/docs/guide/api/node/variables/textanimationwritingstylevalues.md +18 -0
  306. package/assets/docs/guide/api/node/variables/texthorizontalalignmentvalues.md +18 -0
  307. package/assets/docs/guide/api/node/variables/textverticalalignmentvalues.md +18 -0
  308. package/assets/docs/guide/api/node/variables/timelinetrackvisibilityvalues.md +18 -0
  309. package/assets/docs/guide/api/node/variables/touchpinchactionvalues.md +18 -0
  310. package/assets/docs/guide/api/node/variables/touchrotateactionvalues.md +18 -0
  311. package/assets/docs/guide/api/node/variables/verticalcontentfillalignmentvalues.md +18 -0
  312. package/assets/docs/guide/api/node/variables/widthmodevalues.md +18 -0
  313. package/assets/docs/guide/api/types.md +5 -9
  314. package/assets/docs/guide/api-reference/overview.md +7 -7
  315. package/assets/docs/guide/automation/auto-resize.md +263 -300
  316. package/assets/docs/guide/automation/data-merge.md +246 -275
  317. package/assets/docs/guide/automation/design-generation.md +102 -31
  318. package/assets/docs/guide/automation/multi-image-generation.md +758 -0
  319. package/assets/docs/guide/automation/overview.md +21 -4
  320. package/assets/docs/guide/automation.md +10 -5
  321. package/assets/docs/guide/capabilities.md +6 -4
  322. package/assets/docs/guide/colors/adjust.md +247 -249
  323. package/assets/docs/guide/colors/apply.md +127 -138
  324. package/assets/docs/guide/colors/basics.md +126 -150
  325. package/assets/docs/guide/colors/conversion.md +171 -177
  326. package/assets/docs/guide/colors/create-color-palette.md +244 -245
  327. package/assets/docs/guide/colors/extract-colors.md +144 -0
  328. package/assets/docs/guide/colors/for-print/cmyk.md +292 -352
  329. package/assets/docs/guide/colors/for-print/spot.md +521 -578
  330. package/assets/docs/guide/colors/for-print.md +9 -4
  331. package/assets/docs/guide/colors/for-screen/p3.md +12 -10
  332. package/assets/docs/guide/colors/for-screen/srgb.md +107 -133
  333. package/assets/docs/guide/colors/for-screen.md +9 -4
  334. package/assets/docs/guide/colors/overview.md +6 -4
  335. package/assets/docs/guide/colors/replace.md +381 -419
  336. package/assets/docs/guide/colors.md +9 -4
  337. package/assets/docs/guide/compatibility.md +7 -5
  338. package/assets/docs/guide/concepts/architecture.md +17 -15
  339. package/assets/docs/guide/concepts/assets.md +152 -140
  340. package/assets/docs/guide/concepts/blocks.md +227 -323
  341. package/assets/docs/guide/concepts/buffers.md +147 -276
  342. package/assets/docs/guide/concepts/design-units.md +95 -145
  343. package/assets/docs/guide/concepts/editing-workflow.md +69 -183
  344. package/assets/docs/guide/concepts/events.md +80 -122
  345. package/assets/docs/guide/concepts/headless-mode.md +237 -0
  346. package/assets/docs/guide/concepts/pages.md +137 -127
  347. package/assets/docs/guide/concepts/resources.md +156 -217
  348. package/assets/docs/guide/concepts/scenes.md +191 -210
  349. package/assets/docs/guide/concepts/templating.md +118 -74
  350. package/assets/docs/guide/concepts/terminology.md +49 -47
  351. package/assets/docs/guide/concepts/undo-and-history.md +229 -303
  352. package/assets/docs/guide/concepts.md +9 -7
  353. package/assets/docs/guide/configuration.md +252 -380
  354. package/assets/docs/guide/conversion/overview.md +33 -4
  355. package/assets/docs/guide/conversion/to-base64.md +127 -167
  356. package/assets/docs/guide/conversion/to-pdf.md +24 -474
  357. package/assets/docs/guide/conversion/to-png.md +168 -211
  358. package/assets/docs/guide/conversion.md +9 -4
  359. package/assets/docs/guide/create-audio/audio/add-music.md +301 -327
  360. package/assets/docs/guide/create-audio/audio/add-sound-effects.md +475 -359
  361. package/assets/docs/guide/create-audio/audio/loop.md +232 -272
  362. package/assets/docs/guide/create-composition/add-background.md +237 -239
  363. package/assets/docs/guide/create-composition/blend-modes.md +118 -209
  364. package/assets/docs/guide/create-composition/collage.md +538 -320
  365. package/assets/docs/guide/create-composition/group-and-ungroup.md +216 -261
  366. package/assets/docs/guide/create-composition/layer-management.md +219 -257
  367. package/assets/docs/guide/create-composition/layout.md +513 -315
  368. package/assets/docs/guide/create-composition/lock-design.md +90 -109
  369. package/assets/docs/guide/create-composition/multi-page.md +133 -113
  370. package/assets/docs/guide/create-composition/overview.md +16 -4
  371. package/assets/docs/guide/create-composition/programmatic.md +288 -344
  372. package/assets/docs/guide/create-composition.md +10 -5
  373. package/assets/docs/guide/create-templates/add-dynamic-content/placeholders.md +443 -569
  374. package/assets/docs/guide/create-templates/add-dynamic-content/set-editing-constraints.md +567 -470
  375. package/assets/docs/guide/create-templates/add-dynamic-content/text-variables.md +179 -516
  376. package/assets/docs/guide/create-templates/add-dynamic-content.md +226 -224
  377. package/assets/docs/guide/create-templates/add-to-template-library.md +183 -193
  378. package/assets/docs/guide/create-templates/edit-or-remove.md +297 -303
  379. package/assets/docs/guide/create-templates/from-scratch.md +207 -268
  380. package/assets/docs/guide/create-templates/import/from-scene-file.md +158 -236
  381. package/assets/docs/guide/create-templates/import.md +145 -161
  382. package/assets/docs/guide/create-templates/lock.md +42 -295
  383. package/assets/docs/guide/create-templates/overview.md +33 -4
  384. package/assets/docs/guide/create-templates.md +9 -5
  385. package/assets/docs/guide/create-video/audio/adjust-speed.md +157 -207
  386. package/assets/docs/guide/create-video/audio/adjust-volume.md +116 -227
  387. package/assets/docs/guide/create-video/control.md +352 -193
  388. package/assets/docs/guide/create-video/limitations.md +175 -280
  389. package/assets/docs/guide/create-video.md +11 -10
  390. package/assets/docs/guide/edit-image/add-watermark.md +283 -330
  391. package/assets/docs/guide/edit-image/overview.md +29 -4
  392. package/assets/docs/guide/edit-image/remove-bg.md +283 -337
  393. package/assets/docs/guide/edit-image/replace-colors.md +424 -502
  394. package/assets/docs/guide/edit-image/transform/crop.md +463 -402
  395. package/assets/docs/guide/edit-image/transform/flip.md +353 -0
  396. package/assets/docs/guide/edit-image/transform/move.md +143 -100
  397. package/assets/docs/guide/edit-image/transform/resize.md +118 -88
  398. package/assets/docs/guide/edit-image/transform/rotate.md +132 -165
  399. package/assets/docs/guide/edit-image/transform/scale.md +230 -228
  400. package/assets/docs/guide/edit-image/transform.md +10 -5
  401. package/assets/docs/guide/edit-image.md +11 -7
  402. package/assets/docs/guide/edit-video/add-captions.md +344 -421
  403. package/assets/docs/guide/edit-video/add-watermark.md +312 -258
  404. package/assets/docs/guide/edit-video/join-and-arrange.md +237 -371
  405. package/assets/docs/guide/edit-video/redaction.md +419 -385
  406. package/assets/docs/guide/edit-video/split.md +243 -493
  407. package/assets/docs/guide/edit-video/transform/crop.md +21 -352
  408. package/assets/docs/guide/edit-video/transform/flip.md +102 -76
  409. package/assets/docs/guide/edit-video/transform/move.md +258 -310
  410. package/assets/docs/guide/edit-video/transform/resize.md +264 -428
  411. package/assets/docs/guide/edit-video/transform/rotate.md +265 -228
  412. package/assets/docs/guide/edit-video/transform/scale.md +320 -417
  413. package/assets/docs/guide/edit-video/transform.md +10 -6
  414. package/assets/docs/guide/edit-video/trim.md +448 -494
  415. package/assets/docs/guide/engine-interface.md +51 -62
  416. package/assets/docs/guide/export-save-publish/create-thumbnail.md +148 -184
  417. package/assets/docs/guide/export-save-publish/export/compress.md +161 -559
  418. package/assets/docs/guide/export-save-publish/export/overview.md +224 -373
  419. package/assets/docs/guide/export-save-publish/export/partial-export.md +386 -577
  420. package/assets/docs/guide/export-save-publish/export/size-limits.md +215 -310
  421. package/assets/docs/guide/export-save-publish/export/to-jpeg.md +132 -213
  422. package/assets/docs/guide/export-save-publish/export/to-pdf.md +139 -267
  423. package/assets/docs/guide/export-save-publish/export/to-png.md +121 -165
  424. package/assets/docs/guide/export-save-publish/export/to-raw-data.md +187 -234
  425. package/assets/docs/guide/export-save-publish/export/to-webp.md +160 -190
  426. package/assets/docs/guide/export-save-publish/export/with-color-mask.md +359 -203
  427. package/assets/docs/guide/export-save-publish/export.md +14 -11
  428. package/assets/docs/guide/export-save-publish/for-printing.md +141 -237
  429. package/assets/docs/guide/export-save-publish/for-social-media.md +124 -261
  430. package/assets/docs/guide/export-save-publish/pre-export-validation.md +436 -522
  431. package/assets/docs/guide/export-save-publish/save.md +167 -226
  432. package/assets/docs/guide/export-save-publish/store-custom-metadata.md +97 -162
  433. package/assets/docs/guide/file-format-support.md +9 -9
  434. package/assets/docs/guide/fills/color.md +370 -347
  435. package/assets/docs/guide/fills/image.md +167 -196
  436. package/assets/docs/guide/fills/overview.md +6 -4
  437. package/assets/docs/guide/fills/video.md +286 -438
  438. package/assets/docs/guide/fills.md +12 -8
  439. package/assets/docs/guide/filters-and-effects/apply.md +598 -664
  440. package/assets/docs/guide/filters-and-effects/blur.md +261 -159
  441. package/assets/docs/guide/filters-and-effects/chroma-key-green-screen.md +194 -293
  442. package/assets/docs/guide/filters-and-effects/create-custom-filters.md +548 -466
  443. package/assets/docs/guide/filters-and-effects/create-custom-lut-filter.md +176 -244
  444. package/assets/docs/guide/filters-and-effects/distortion.md +317 -384
  445. package/assets/docs/guide/filters-and-effects/duotone.md +221 -217
  446. package/assets/docs/guide/filters-and-effects/gradients.md +670 -813
  447. package/assets/docs/guide/filters-and-effects/overview.md +7 -7
  448. package/assets/docs/guide/filters-and-effects/support.md +97 -132
  449. package/assets/docs/guide/filters-and-effects.md +11 -6
  450. package/assets/docs/guide/get-started/agent-skills.md +20 -18
  451. package/assets/docs/guide/get-started/build-with-ai.md +7 -4
  452. package/assets/docs/guide/get-started/bun.md +219 -0
  453. package/assets/docs/guide/get-started/deno.md +161 -0
  454. package/assets/docs/guide/get-started/mcp-server.md +6 -4
  455. package/assets/docs/guide/get-started/overview.md +11 -6
  456. package/assets/docs/guide/get-started/vanilla-aws-lambda.md +506 -0
  457. package/assets/docs/guide/get-started/vanilla-clone-github-project.md +124 -0
  458. package/assets/docs/guide/get-started/vanilla.md +235 -0
  459. package/assets/docs/guide/guides/export-save-publish/export/audio.md +80 -66
  460. package/assets/docs/guide/guides.md +10 -9
  461. package/assets/docs/guide/import-media/asset-panel/refresh-assets.md +259 -288
  462. package/assets/docs/guide/import-media/concepts.md +20 -38
  463. package/assets/docs/guide/import-media/content-json-schema.md +145 -125
  464. package/assets/docs/guide/import-media/default-assets.md +113 -161
  465. package/assets/docs/guide/import-media/edit-or-remove-assets.md +391 -395
  466. package/assets/docs/guide/import-media/file-format-support.md +78 -61
  467. package/assets/docs/guide/import-media/from-remote-source/asset-versioning.md +273 -244
  468. package/assets/docs/guide/import-media/from-remote-source/remote-asset.md +152 -222
  469. package/assets/docs/guide/import-media/from-remote-source.md +9 -11
  470. package/assets/docs/guide/import-media/overview.md +5 -5
  471. package/assets/docs/guide/import-media/retrieve-mimetype.md +216 -108
  472. package/assets/docs/guide/import-media/size-limits.md +6 -4
  473. package/assets/docs/guide/import-media/source-sets.md +190 -251
  474. package/assets/docs/guide/import-media.md +10 -8
  475. package/assets/docs/guide/insert-media/audio.md +202 -195
  476. package/assets/docs/guide/insert-media/images.md +190 -188
  477. package/assets/docs/guide/insert-media/position-and-align.md +284 -551
  478. package/assets/docs/guide/insert-media/shapes-or-stickers.md +402 -418
  479. package/assets/docs/guide/insert-media/videos.md +236 -203
  480. package/assets/docs/guide/insert-media.md +10 -5
  481. package/assets/docs/guide/key-capabilities.md +36 -4
  482. package/assets/docs/guide/key-concepts.md +6 -4
  483. package/assets/docs/guide/licensing.md +6 -4
  484. package/assets/docs/guide/llms-txt.md +11 -7
  485. package/assets/docs/guide/open-the-editor/blank-canvas.md +102 -63
  486. package/assets/docs/guide/open-the-editor/from-image.md +157 -127
  487. package/assets/docs/guide/open-the-editor/from-template.md +131 -92
  488. package/assets/docs/guide/open-the-editor/from-video.md +204 -212
  489. package/assets/docs/guide/open-the-editor/import-design/from-archive.md +310 -360
  490. package/assets/docs/guide/open-the-editor/import-design/from-indesign.md +716 -513
  491. package/assets/docs/guide/open-the-editor/import-design/from-photoshop.md +667 -695
  492. package/assets/docs/guide/open-the-editor/import-design.md +228 -266
  493. package/assets/docs/guide/open-the-editor/load-scene.md +72 -68
  494. package/assets/docs/guide/open-the-editor/overview.md +6 -4
  495. package/assets/docs/guide/open-the-editor/uri-resolver.md +160 -251
  496. package/assets/docs/guide/open-the-editor.md +11 -9
  497. package/assets/docs/guide/outlines/overview.md +12 -4
  498. package/assets/docs/guide/outlines/shadows-and-glows.md +105 -410
  499. package/assets/docs/guide/outlines/strokes.md +218 -166
  500. package/assets/docs/guide/outlines.md +9 -4
  501. package/assets/docs/guide/overview.md +14 -6
  502. package/assets/docs/guide/performance.md +220 -113
  503. package/assets/docs/guide/plugins/print-ready-pdf.md +273 -368
  504. package/assets/docs/guide/plugins.md +10 -16
  505. package/assets/docs/guide/rules/asset-handling.md +7 -18
  506. package/assets/docs/guide/rules/common-pitfalls.md +25 -42
  507. package/assets/docs/guide/rules/content-fill-mode.md +4 -4
  508. package/assets/docs/guide/rules/enforce-brand-guidelines.md +398 -567
  509. package/assets/docs/guide/rules/lock-content.md +188 -231
  510. package/assets/docs/guide/rules/moderate-content.md +580 -571
  511. package/assets/docs/guide/rules/overview.md +345 -380
  512. package/assets/docs/guide/rules/silent-init-errors.md +4 -1
  513. package/assets/docs/guide/rules/verify-properties-before-use.md +2 -11
  514. package/assets/docs/guide/rules.md +10 -5
  515. package/assets/docs/guide/security.md +7 -5
  516. package/assets/docs/guide/serve-assets.md +57 -284
  517. package/assets/docs/guide/settings.md +96 -74
  518. package/assets/docs/guide/shapes.md +10 -5
  519. package/assets/docs/guide/stickers-and-shapes/combine.md +397 -583
  520. package/assets/docs/guide/stickers-and-shapes/create-cutout.md +181 -268
  521. package/assets/docs/guide/stickers-and-shapes/create-edit/create-shapes.md +418 -431
  522. package/assets/docs/guide/stickers-and-shapes/create-edit/create-stickers.md +147 -226
  523. package/assets/docs/guide/stickers-and-shapes/create-edit/edit-shapes.md +138 -123
  524. package/assets/docs/guide/stickers-and-shapes/insert-qr-code.md +151 -149
  525. package/assets/docs/guide/stickers.md +9 -4
  526. package/assets/docs/guide/text/add.md +470 -482
  527. package/assets/docs/guide/text/adjust-spacing.md +179 -214
  528. package/assets/docs/guide/text/auto-size.md +210 -271
  529. package/assets/docs/guide/text/edit.md +294 -309
  530. package/assets/docs/guide/text/effects.md +154 -190
  531. package/assets/docs/guide/text/emojis.md +199 -232
  532. package/assets/docs/guide/text/language-support.md +369 -382
  533. package/assets/docs/guide/text/overview.md +41 -4
  534. package/assets/docs/guide/text/styling.md +239 -273
  535. package/assets/docs/guide/text/text-designs.md +405 -544
  536. package/assets/docs/guide/text.md +10 -9
  537. package/assets/docs/guide/to-v1-19.md +12 -10
  538. package/assets/docs/guide/upgrade.md +8 -9
  539. package/assets/docs/guide/use-templates/apply-template.md +174 -163
  540. package/assets/docs/guide/use-templates/generate.md +171 -152
  541. package/assets/docs/guide/use-templates/overview.md +32 -4
  542. package/assets/docs/guide/use-templates/programmatic.md +266 -301
  543. package/assets/docs/guide/use-templates/replace-content.md +181 -171
  544. package/assets/docs/guide/what-is-cesdk.md +71 -282
  545. package/assets/docs/handbook/SKILL.md +24 -0
  546. package/dist/assets/inline.generated.d.ts.map +1 -1
  547. package/dist/assets/inline.generated.js +544 -406
  548. package/dist/assets/inline.generated.js.map +1 -1
  549. package/dist/assets/load-browser.d.ts +1 -1
  550. package/dist/assets/load-browser.js +1 -1
  551. package/dist/assets/load-browser.js.map +1 -1
  552. package/dist/assets/load-node.d.ts +1 -1
  553. package/dist/assets/load-node.js +1 -1
  554. package/dist/assets/load-node.js.map +1 -1
  555. package/dist/cli/http.d.ts.map +1 -1
  556. package/dist/cli/http.js +16 -30
  557. package/dist/cli/http.js.map +1 -1
  558. package/dist/cli/redirect-console.d.ts +1 -1
  559. package/dist/cli/redirect-console.d.ts.map +1 -1
  560. package/dist/cli/redirect-console.js +12 -3
  561. package/dist/cli/redirect-console.js.map +1 -1
  562. package/dist/cli/resolve-license.d.ts.map +1 -1
  563. package/dist/cli/resolve-license.js +8 -6
  564. package/dist/cli/resolve-license.js.map +1 -1
  565. package/dist/cli/stdio.d.ts +9 -0
  566. package/dist/cli/stdio.d.ts.map +1 -1
  567. package/dist/cli/stdio.js +136 -24
  568. package/dist/cli/stdio.js.map +1 -1
  569. package/dist/cli.js +10 -1
  570. package/dist/cli.js.map +1 -1
  571. package/dist/config.d.ts +22 -4
  572. package/dist/config.d.ts.map +1 -1
  573. package/dist/config.js +32 -2
  574. package/dist/config.js.map +1 -1
  575. package/dist/diagnostics/bundle.d.ts +10 -0
  576. package/dist/diagnostics/bundle.d.ts.map +1 -0
  577. package/dist/diagnostics/bundle.js +148 -0
  578. package/dist/diagnostics/bundle.js.map +1 -0
  579. package/dist/diagnostics/compose.d.ts +3 -0
  580. package/dist/diagnostics/compose.d.ts.map +1 -0
  581. package/dist/diagnostics/compose.js +15 -0
  582. package/dist/diagnostics/compose.js.map +1 -0
  583. package/dist/diagnostics/events.d.ts +40 -0
  584. package/dist/diagnostics/events.d.ts.map +1 -0
  585. package/dist/diagnostics/events.js +3 -0
  586. package/dist/diagnostics/events.js.map +1 -0
  587. package/dist/diagnostics/file-sink.d.ts +38 -0
  588. package/dist/diagnostics/file-sink.d.ts.map +1 -0
  589. package/dist/diagnostics/file-sink.js +157 -0
  590. package/dist/diagnostics/file-sink.js.map +1 -0
  591. package/dist/diagnostics/redact.d.ts +7 -0
  592. package/dist/diagnostics/redact.d.ts.map +1 -0
  593. package/dist/diagnostics/redact.js +43 -0
  594. package/dist/diagnostics/redact.js.map +1 -0
  595. package/dist/diagnostics/tool-call-adapter.d.ts +4 -0
  596. package/dist/diagnostics/tool-call-adapter.d.ts.map +1 -0
  597. package/dist/diagnostics/tool-call-adapter.js +21 -0
  598. package/dist/diagnostics/tool-call-adapter.js.map +1 -0
  599. package/dist/engine/cesdk-adapter.d.ts +10 -2
  600. package/dist/engine/cesdk-adapter.d.ts.map +1 -1
  601. package/dist/engine/cesdk-adapter.js +17 -3
  602. package/dist/engine/cesdk-adapter.js.map +1 -1
  603. package/dist/engine/engine-capacity.d.ts +16 -0
  604. package/dist/engine/engine-capacity.d.ts.map +1 -0
  605. package/dist/engine/engine-capacity.js +48 -0
  606. package/dist/engine/engine-capacity.js.map +1 -0
  607. package/dist/engine/engine-slots.d.ts +48 -0
  608. package/dist/engine/engine-slots.d.ts.map +1 -0
  609. package/dist/engine/engine-slots.js +182 -0
  610. package/dist/engine/engine-slots.js.map +1 -0
  611. package/dist/engine/index.d.ts +1 -0
  612. package/dist/engine/index.d.ts.map +1 -1
  613. package/dist/engine/index.js +4 -0
  614. package/dist/engine/index.js.map +1 -1
  615. package/dist/engine/scene-resource-schemes.d.ts +2 -0
  616. package/dist/engine/scene-resource-schemes.d.ts.map +1 -0
  617. package/dist/engine/scene-resource-schemes.js +20 -0
  618. package/dist/engine/scene-resource-schemes.js.map +1 -0
  619. package/dist/http/server.d.ts +0 -6
  620. package/dist/http/server.d.ts.map +1 -1
  621. package/dist/http/server.js +1 -2
  622. package/dist/http/server.js.map +1 -1
  623. package/dist/server.d.ts +0 -4
  624. package/dist/server.d.ts.map +1 -1
  625. package/dist/server.js +4 -60
  626. package/dist/server.js.map +1 -1
  627. package/dist/tools/asset-generate.d.ts.map +1 -1
  628. package/dist/tools/asset-generate.js +1 -8
  629. package/dist/tools/asset-generate.js.map +1 -1
  630. package/dist/tools/edit.d.ts +3 -0
  631. package/dist/tools/edit.d.ts.map +1 -1
  632. package/dist/tools/edit.js +145 -96
  633. package/dist/tools/edit.js.map +1 -1
  634. package/dist/tools/engine.d.ts +13 -0
  635. package/dist/tools/engine.d.ts.map +1 -1
  636. package/dist/tools/engine.js +28 -0
  637. package/dist/tools/engine.js.map +1 -1
  638. package/dist/tools/export.d.ts +3 -0
  639. package/dist/tools/export.d.ts.map +1 -1
  640. package/dist/tools/export.js +146 -108
  641. package/dist/tools/export.js.map +1 -1
  642. package/dist/tools/import.d.ts +12 -0
  643. package/dist/tools/import.d.ts.map +1 -0
  644. package/dist/tools/import.js +144 -0
  645. package/dist/tools/import.js.map +1 -0
  646. package/dist/tools/index.d.ts +3 -0
  647. package/dist/tools/index.d.ts.map +1 -1
  648. package/dist/tools/index.js +44 -4
  649. package/dist/tools/index.js.map +1 -1
  650. package/dist/tools/load.d.ts +26 -0
  651. package/dist/tools/load.d.ts.map +1 -0
  652. package/dist/tools/load.js +400 -0
  653. package/dist/tools/load.js.map +1 -0
  654. package/dist/tools/preview.d.ts +3 -0
  655. package/dist/tools/preview.d.ts.map +1 -1
  656. package/dist/tools/preview.js +79 -44
  657. package/dist/tools/preview.js.map +1 -1
  658. package/dist/tools/result.d.ts +1 -1
  659. package/dist/tools/result.js +2 -2
  660. package/dist/tools/result.js.map +1 -1
  661. package/dist/tools/spans.d.ts +45 -0
  662. package/dist/tools/spans.d.ts.map +1 -0
  663. package/dist/tools/spans.js +77 -0
  664. package/dist/tools/spans.js.map +1 -0
  665. package/dist/tools/telemetry-wrapper.d.ts +4 -0
  666. package/dist/tools/telemetry-wrapper.d.ts.map +1 -0
  667. package/dist/tools/telemetry-wrapper.js +43 -0
  668. package/dist/tools/telemetry-wrapper.js.map +1 -0
  669. package/dist/viewer/cesdk-cdn.d.ts +16 -0
  670. package/dist/viewer/cesdk-cdn.d.ts.map +1 -0
  671. package/dist/viewer/cesdk-cdn.js +30 -0
  672. package/dist/viewer/cesdk-cdn.js.map +1 -0
  673. package/dist/viewer/router.d.ts +6 -0
  674. package/dist/viewer/router.d.ts.map +1 -1
  675. package/dist/viewer/router.js +4 -1
  676. package/dist/viewer/router.js.map +1 -1
  677. package/dist/viewer/spa-assets.generated.d.ts.map +1 -1
  678. package/dist/viewer/spa-assets.generated.js +2 -3
  679. package/dist/viewer/spa-assets.generated.js.map +1 -1
  680. package/dist/workspace/content-hash.d.ts +2 -0
  681. package/dist/workspace/content-hash.d.ts.map +1 -0
  682. package/dist/workspace/content-hash.js +15 -0
  683. package/dist/workspace/content-hash.js.map +1 -0
  684. package/package.json +19 -10
  685. package/assets/docs/guide/actions.md +0 -1038
  686. package/assets/docs/guide/animation/overview.md +0 -22
  687. package/assets/docs/guide/automation/batch-processing.md +0 -474
  688. package/assets/docs/guide/browser-support.md +0 -38
  689. package/assets/docs/guide/concepts/edit-modes.md +0 -431
  690. package/assets/docs/guide/concepts/headless-mode/browser.md +0 -291
  691. package/assets/docs/guide/create-audio/audio.md +0 -336
  692. package/assets/docs/guide/create-video/overview.md +0 -224
  693. package/assets/docs/guide/create-video/timeline-editor.md +0 -622
  694. package/assets/docs/guide/create-video/update-caption-presets.md +0 -676
  695. package/assets/docs/guide/edit-image/vectorize.md +0 -204
  696. package/assets/docs/guide/export-save-publish/export/to-html5.md +0 -474
  697. package/assets/docs/guide/export-save-publish/export/to-mp4.md +0 -364
  698. package/assets/docs/guide/get-started/vanilla-js/quickstart.md +0 -175
  699. package/assets/docs/guide/grid-and-rulers.md +0 -222
  700. package/assets/docs/guide/guides/text/rendering-internals.md +0 -796
  701. package/assets/docs/guide/import-media/asset-library.md +0 -23
  702. package/assets/docs/guide/import-media/asset-panel/basics.md +0 -324
  703. package/assets/docs/guide/import-media/asset-panel/customize.md +0 -478
  704. package/assets/docs/guide/import-media/asset-panel/thumbnails.md +0 -633
  705. package/assets/docs/guide/import-media/capture-from-camera/record-video.md +0 -137
  706. package/assets/docs/guide/import-media/capture-from-camera.md +0 -20
  707. package/assets/docs/guide/import-media/from-local-source/user-upload.md +0 -438
  708. package/assets/docs/guide/import-media/from-local-source.md +0 -20
  709. package/assets/docs/guide/import-media/from-remote-source/getty-images.md +0 -627
  710. package/assets/docs/guide/import-media/from-remote-source/imgly-premium-assets.md +0 -625
  711. package/assets/docs/guide/import-media/from-remote-source/pexels.md +0 -692
  712. package/assets/docs/guide/import-media/from-remote-source/soundstripe.md +0 -497
  713. package/assets/docs/guide/import-media/from-remote-source/third-party.md +0 -51
  714. package/assets/docs/guide/import-media/from-remote-source/unsplash.md +0 -914
  715. package/assets/docs/guide/import-media/from-remote-source/your-server.md +0 -764
  716. package/assets/docs/guide/open-the-editor/from-htmlcanvas.md +0 -228
  717. package/assets/docs/guide/open-the-editor/set-zoom-level.md +0 -303
  718. package/assets/docs/guide/plugins/asset-sources.md +0 -553
  719. package/assets/docs/guide/starterkits/3d-mockup-editor.md +0 -748
  720. package/assets/docs/guide/starterkits/advanced-editor.md +0 -698
  721. package/assets/docs/guide/starterkits/advanced-video-editor.md +0 -696
  722. package/assets/docs/guide/starterkits/ai-editor.md +0 -749
  723. package/assets/docs/guide/starterkits/airtable-image-editor.md +0 -672
  724. package/assets/docs/guide/starterkits/apparel-ui.md +0 -188
  725. package/assets/docs/guide/starterkits/assets.md +0 -27
  726. package/assets/docs/guide/starterkits/auto-resize.md +0 -586
  727. package/assets/docs/guide/starterkits/automated-video-generation.md +0 -692
  728. package/assets/docs/guide/starterkits/background-removal-editor.md +0 -480
  729. package/assets/docs/guide/starterkits/content-moderation.md +0 -863
  730. package/assets/docs/guide/starterkits/creative-automation.md +0 -28
  731. package/assets/docs/guide/starterkits/custom-built-uis.md +0 -26
  732. package/assets/docs/guide/starterkits/customization.md +0 -29
  733. package/assets/docs/guide/starterkits/cutout-lines-editor.md +0 -470
  734. package/assets/docs/guide/starterkits/data-merge.md +0 -850
  735. package/assets/docs/guide/starterkits/design-editor.md +0 -698
  736. package/assets/docs/guide/starterkits/design-generation.md +0 -719
  737. package/assets/docs/guide/starterkits/design-validation.md +0 -808
  738. package/assets/docs/guide/starterkits/editor-ui-configurations.md +0 -14
  739. package/assets/docs/guide/starterkits/export-options.md +0 -724
  740. package/assets/docs/guide/starterkits/export-using-renderer.md +0 -708
  741. package/assets/docs/guide/starterkits/extensibility.md +0 -28
  742. package/assets/docs/guide/starterkits/force-crop-editor.md +0 -675
  743. package/assets/docs/guide/starterkits/form-based-template-adoption.md +0 -522
  744. package/assets/docs/guide/starterkits/getty-images-editor.md +0 -700
  745. package/assets/docs/guide/starterkits/html5-ads-exporter.md +0 -719
  746. package/assets/docs/guide/starterkits/indesign-template-import.md +0 -580
  747. package/assets/docs/guide/starterkits/layouts-editor.md +0 -724
  748. package/assets/docs/guide/starterkits/mobile-ui.md +0 -185
  749. package/assets/docs/guide/starterkits/mockup-editor.md +0 -745
  750. package/assets/docs/guide/starterkits/multi-image-generation.md +0 -542
  751. package/assets/docs/guide/starterkits/page-sizes-editor.md +0 -657
  752. package/assets/docs/guide/starterkits/pexels-image-editor.md +0 -665
  753. package/assets/docs/guide/starterkits/photo-editor.md +0 -755
  754. package/assets/docs/guide/starterkits/photo-ui.md +0 -186
  755. package/assets/docs/guide/starterkits/photobook-ui.md +0 -188
  756. package/assets/docs/guide/starterkits/placeholders.md +0 -678
  757. package/assets/docs/guide/starterkits/player.md +0 -405
  758. package/assets/docs/guide/starterkits/plugins.md +0 -25
  759. package/assets/docs/guide/starterkits/postcard-editor.md +0 -202
  760. package/assets/docs/guide/starterkits/pptx-template-import.md +0 -581
  761. package/assets/docs/guide/starterkits/print-ready-pdf-editor.md +0 -746
  762. package/assets/docs/guide/starterkits/product-editor.md +0 -773
  763. package/assets/docs/guide/starterkits/psd-template-import.md +0 -580
  764. package/assets/docs/guide/starterkits/qr-code-editor.md +0 -470
  765. package/assets/docs/guide/starterkits/single-page-editor.md +0 -661
  766. package/assets/docs/guide/starterkits/start-with-image.md +0 -684
  767. package/assets/docs/guide/starterkits/start-with-video.md +0 -651
  768. package/assets/docs/guide/starterkits/t-shirt-designer.md +0 -742
  769. package/assets/docs/guide/starterkits/templating.md +0 -23
  770. package/assets/docs/guide/starterkits/theming.md +0 -662
  771. package/assets/docs/guide/starterkits/translation-internationalization.md +0 -662
  772. package/assets/docs/guide/starterkits/unsplash-editor.md +0 -839
  773. package/assets/docs/guide/starterkits/vectorizer-editor.md +0 -466
  774. package/assets/docs/guide/starterkits/version-history.md +0 -745
  775. package/assets/docs/guide/starterkits/video-animations.md +0 -853
  776. package/assets/docs/guide/starterkits/video-captions.md +0 -884
  777. package/assets/docs/guide/starterkits/video-editing.md +0 -25
  778. package/assets/docs/guide/starterkits/video-editor.md +0 -696
  779. package/assets/docs/guide/starterkits/video-export-options.md +0 -676
  780. package/assets/docs/guide/starterkits/viewer.md +0 -400
  781. package/assets/docs/guide/starterkits.md +0 -41
  782. package/assets/docs/guide/stickers-and-shapes/create-edit/vector-edit.md +0 -362
  783. package/assets/docs/guide/text/custom-fonts.md +0 -401
  784. package/assets/docs/guide/text/decorations.md +0 -330
  785. package/assets/docs/guide/text/enumerations.md +0 -258
  786. package/assets/docs/guide/to-v1-10.md +0 -131
  787. package/assets/docs/guide/to-v1-13.md +0 -165
  788. package/assets/docs/guide/to-v1-32.md +0 -110
  789. package/assets/docs/guide/to-v1-69.md +0 -468
  790. package/assets/docs/guide/to-v1-72.md +0 -193
  791. package/assets/docs/guide/use-templates/library.md +0 -450
  792. package/assets/docs/guide/user-interface/ai-integration/audio-generation.md +0 -428
  793. package/assets/docs/guide/user-interface/ai-integration/auto-captions.md +0 -337
  794. package/assets/docs/guide/user-interface/ai-integration/custom-provider.md +0 -853
  795. package/assets/docs/guide/user-interface/ai-integration/gateway-provider.md +0 -1045
  796. package/assets/docs/guide/user-interface/ai-integration/image-generation.md +0 -641
  797. package/assets/docs/guide/user-interface/ai-integration/integrate.md +0 -966
  798. package/assets/docs/guide/user-interface/ai-integration/proxy-server.md +0 -99
  799. package/assets/docs/guide/user-interface/ai-integration/text-generation.md +0 -498
  800. package/assets/docs/guide/user-interface/ai-integration/video-generation.md +0 -493
  801. package/assets/docs/guide/user-interface/ai-integration.md +0 -30
  802. package/assets/docs/guide/user-interface/appearance/change-ui-font.md +0 -316
  803. package/assets/docs/guide/user-interface/appearance/custom-labels.md +0 -509
  804. package/assets/docs/guide/user-interface/appearance/icons.md +0 -373
  805. package/assets/docs/guide/user-interface/appearance/theming.md +0 -665
  806. package/assets/docs/guide/user-interface/appearance.md +0 -23
  807. package/assets/docs/guide/user-interface/build-your-own-ui.md +0 -620
  808. package/assets/docs/guide/user-interface/customization/canvas-menu.md +0 -412
  809. package/assets/docs/guide/user-interface/customization/canvas.md +0 -281
  810. package/assets/docs/guide/user-interface/customization/color-palette.md +0 -413
  811. package/assets/docs/guide/user-interface/customization/crop-presets.md +0 -384
  812. package/assets/docs/guide/user-interface/customization/disable-or-enable.md +0 -676
  813. package/assets/docs/guide/user-interface/customization/dock.md +0 -399
  814. package/assets/docs/guide/user-interface/customization/force-crop.md +0 -289
  815. package/assets/docs/guide/user-interface/customization/inspector-bar.md +0 -371
  816. package/assets/docs/guide/user-interface/customization/navigation-bar.md +0 -516
  817. package/assets/docs/guide/user-interface/customization/page-format.md +0 -436
  818. package/assets/docs/guide/user-interface/customization/panel.md +0 -605
  819. package/assets/docs/guide/user-interface/customization/quick-start/add-action-buttons.md +0 -531
  820. package/assets/docs/guide/user-interface/customization/quick-start/add-dock-buttons.md +0 -358
  821. package/assets/docs/guide/user-interface/customization/quick-start/create-custom-components.md +0 -374
  822. package/assets/docs/guide/user-interface/customization/quick-start/reorder-components.md +0 -323
  823. package/assets/docs/guide/user-interface/customization/quick-start/show-hide-components.md +0 -294
  824. package/assets/docs/guide/user-interface/customization/quick-start.md +0 -12
  825. package/assets/docs/guide/user-interface/customization/reference/component-order-api.md +0 -519
  826. package/assets/docs/guide/user-interface/customization/reference/component-reference.md +0 -333
  827. package/assets/docs/guide/user-interface/customization/reference.md +0 -12
  828. package/assets/docs/guide/user-interface/customization.md +0 -39
  829. package/assets/docs/guide/user-interface/localization.md +0 -633
  830. package/assets/docs/guide/user-interface/overview.md +0 -167
  831. package/assets/docs/guide/user-interface/ui-extensions/add-custom-feature.md +0 -411
  832. package/assets/docs/guide/user-interface/ui-extensions/asset-library.md +0 -721
  833. package/assets/docs/guide/user-interface/ui-extensions/create-custom-panel.md +0 -331
  834. package/assets/docs/guide/user-interface/ui-extensions/customize-behaviour.md +0 -553
  835. package/assets/docs/guide/user-interface/ui-extensions/notifications-and-dialogs.md +0 -672
  836. package/assets/docs/guide/user-interface/ui-extensions/quick-actions.md +0 -415
  837. package/assets/docs/guide/user-interface/ui-extensions/register-new-component.md +0 -521
  838. package/assets/docs/guide/user-interface/ui-extensions.md +0 -26
  839. package/assets/docs/guide/user-interface.md +0 -25
  840. package/assets/prompts/evals-assetGenerate.md +0 -12
  841. package/assets/prompts/evals-brutalistCore.md +0 -34
  842. package/assets/prompts/evals-danskCatalogue.md +0 -31
  843. package/assets/prompts/evals-exportRoundTrip.md +0 -12
  844. package/assets/prompts/evals-inspectPriorCode.md +0 -16
  845. package/assets/prompts/evals-listProjectFiles.md +0 -6
  846. package/assets/prompts/evals-readAndExplainScript.md +0 -6
  847. package/assets/prompts/evals-resumeAcrossRestart.md +0 -15
  848. package/assets/prompts/evals-rewindRecovery.md +0 -10
  849. package/assets/prompts/evals-searchAcrossFiles.md +0 -6
  850. package/assets/prompts/evals-weddingCard.md +0 -20
  851. package/assets/prompts/explain.md +0 -6
  852. package/assets/prompts/review.md +0 -6
  853. package/dist/dashboard/router.d.ts +0 -3
  854. package/dist/dashboard/router.d.ts.map +0 -1
  855. package/dist/dashboard/router.js +0 -19
  856. package/dist/dashboard/router.js.map +0 -1
  857. package/dist/dashboard/spa-assets.generated.d.ts +0 -2
  858. package/dist/dashboard/spa-assets.generated.d.ts.map +0 -1
  859. package/dist/dashboard/spa-assets.generated.js +0 -220
  860. package/dist/dashboard/spa-assets.generated.js.map +0 -1
  861. package/dist/frontmatter.d.ts +0 -15
  862. package/dist/frontmatter.d.ts.map +0 -1
  863. package/dist/frontmatter.js +0 -46
  864. package/dist/frontmatter.js.map +0 -1
  865. package/dist/metrics/mount.d.ts +0 -11
  866. package/dist/metrics/mount.d.ts.map +0 -1
  867. package/dist/metrics/mount.js +0 -13
  868. package/dist/metrics/mount.js.map +0 -1
  869. package/dist/metrics/recorder.d.ts +0 -55
  870. package/dist/metrics/recorder.d.ts.map +0 -1
  871. package/dist/metrics/recorder.js +0 -97
  872. package/dist/metrics/recorder.js.map +0 -1
  873. package/dist/test/test/cli/dispatcher.test.d.ts +0 -2
  874. package/dist/test/test/cli/dispatcher.test.d.ts.map +0 -1
  875. package/dist/test/test/cli/dispatcher.test.js +0 -47
  876. package/dist/test/test/cli/dispatcher.test.js.map +0 -1
  877. package/dist/test/test/cli/redirect-console.test.d.ts +0 -2
  878. package/dist/test/test/cli/redirect-console.test.d.ts.map +0 -1
  879. package/dist/test/test/cli/redirect-console.test.js +0 -47
  880. package/dist/test/test/cli/redirect-console.test.js.map +0 -1
  881. package/dist/test/test/cli/resolve-license.test.d.ts +0 -2
  882. package/dist/test/test/cli/resolve-license.test.d.ts.map +0 -1
  883. package/dist/test/test/cli/resolve-license.test.js +0 -20
  884. package/dist/test/test/cli/resolve-license.test.js.map +0 -1
  885. package/dist/test/test/cli/stdio-license.test.d.ts +0 -2
  886. package/dist/test/test/cli/stdio-license.test.d.ts.map +0 -1
  887. package/dist/test/test/cli/stdio-license.test.js +0 -19
  888. package/dist/test/test/cli/stdio-license.test.js.map +0 -1
  889. package/dist/test/test/config.test.d.ts +0 -2
  890. package/dist/test/test/config.test.d.ts.map +0 -1
  891. package/dist/test/test/config.test.js +0 -91
  892. package/dist/test/test/config.test.js.map +0 -1
  893. package/dist/test/test/cross-ref.test.d.ts +0 -2
  894. package/dist/test/test/cross-ref.test.d.ts.map +0 -1
  895. package/dist/test/test/cross-ref.test.js +0 -39
  896. package/dist/test/test/cross-ref.test.js.map +0 -1
  897. package/dist/test/test/engine/asset-sources.test.d.ts +0 -2
  898. package/dist/test/test/engine/asset-sources.test.d.ts.map +0 -1
  899. package/dist/test/test/engine/asset-sources.test.js +0 -100
  900. package/dist/test/test/engine/asset-sources.test.js.map +0 -1
  901. package/dist/test/test/engine/mutex.test.d.ts +0 -2
  902. package/dist/test/test/engine/mutex.test.d.ts.map +0 -1
  903. package/dist/test/test/engine/mutex.test.js +0 -63
  904. package/dist/test/test/engine/mutex.test.js.map +0 -1
  905. package/dist/test/test/engine/session.test.d.ts +0 -2
  906. package/dist/test/test/engine/session.test.d.ts.map +0 -1
  907. package/dist/test/test/engine/session.test.js +0 -159
  908. package/dist/test/test/engine/session.test.js.map +0 -1
  909. package/dist/test/test/engine/unsplash-source.test.d.ts +0 -2
  910. package/dist/test/test/engine/unsplash-source.test.d.ts.map +0 -1
  911. package/dist/test/test/engine/unsplash-source.test.js +0 -129
  912. package/dist/test/test/engine/unsplash-source.test.js.map +0 -1
  913. package/dist/test/test/engine/uri-resolver.test.d.ts +0 -2
  914. package/dist/test/test/engine/uri-resolver.test.d.ts.map +0 -1
  915. package/dist/test/test/engine/uri-resolver.test.js +0 -38
  916. package/dist/test/test/engine/uri-resolver.test.js.map +0 -1
  917. package/dist/test/test/frontmatter.test.d.ts +0 -2
  918. package/dist/test/test/frontmatter.test.d.ts.map +0 -1
  919. package/dist/test/test/frontmatter.test.js +0 -55
  920. package/dist/test/test/frontmatter.test.js.map +0 -1
  921. package/dist/test/test/gateway/hosted-stub.test.d.ts +0 -2
  922. package/dist/test/test/gateway/hosted-stub.test.d.ts.map +0 -1
  923. package/dist/test/test/gateway/hosted-stub.test.js +0 -11
  924. package/dist/test/test/gateway/hosted-stub.test.js.map +0 -1
  925. package/dist/test/test/gateway/local.test.d.ts +0 -2
  926. package/dist/test/test/gateway/local.test.d.ts.map +0 -1
  927. package/dist/test/test/gateway/local.test.js +0 -29
  928. package/dist/test/test/gateway/local.test.js.map +0 -1
  929. package/dist/test/test/handbook-contract.test.d.ts +0 -2
  930. package/dist/test/test/handbook-contract.test.d.ts.map +0 -1
  931. package/dist/test/test/handbook-contract.test.js +0 -75
  932. package/dist/test/test/handbook-contract.test.js.map +0 -1
  933. package/dist/test/test/http/server.test.d.ts +0 -2
  934. package/dist/test/test/http/server.test.d.ts.map +0 -1
  935. package/dist/test/test/http/server.test.js +0 -374
  936. package/dist/test/test/http/server.test.js.map +0 -1
  937. package/dist/test/test/http/session-id-header.test.d.ts +0 -2
  938. package/dist/test/test/http/session-id-header.test.d.ts.map +0 -1
  939. package/dist/test/test/http/session-id-header.test.js +0 -76
  940. package/dist/test/test/http/session-id-header.test.js.map +0 -1
  941. package/dist/test/test/http/session-manager.test.d.ts +0 -2
  942. package/dist/test/test/http/session-manager.test.d.ts.map +0 -1
  943. package/dist/test/test/http/session-manager.test.js +0 -97
  944. package/dist/test/test/http/session-manager.test.js.map +0 -1
  945. package/dist/test/test/http/workspace-auth.test.d.ts +0 -2
  946. package/dist/test/test/http/workspace-auth.test.d.ts.map +0 -1
  947. package/dist/test/test/http/workspace-auth.test.js +0 -41
  948. package/dist/test/test/http/workspace-auth.test.js.map +0 -1
  949. package/dist/test/test/metrics/mount.test.d.ts +0 -2
  950. package/dist/test/test/metrics/mount.test.d.ts.map +0 -1
  951. package/dist/test/test/metrics/mount.test.js +0 -59
  952. package/dist/test/test/metrics/mount.test.js.map +0 -1
  953. package/dist/test/test/metrics/recorder.test.d.ts +0 -2
  954. package/dist/test/test/metrics/recorder.test.d.ts.map +0 -1
  955. package/dist/test/test/metrics/recorder.test.js +0 -118
  956. package/dist/test/test/metrics/recorder.test.js.map +0 -1
  957. package/dist/test/test/revisions/hash.test.d.ts +0 -2
  958. package/dist/test/test/revisions/hash.test.d.ts.map +0 -1
  959. package/dist/test/test/revisions/hash.test.js +0 -33
  960. package/dist/test/test/revisions/hash.test.js.map +0 -1
  961. package/dist/test/test/revisions/store.test.d.ts +0 -2
  962. package/dist/test/test/revisions/store.test.d.ts.map +0 -1
  963. package/dist/test/test/revisions/store.test.js +0 -315
  964. package/dist/test/test/revisions/store.test.js.map +0 -1
  965. package/dist/test/test/server.metrics.test.d.ts +0 -2
  966. package/dist/test/test/server.metrics.test.d.ts.map +0 -1
  967. package/dist/test/test/server.metrics.test.js +0 -87
  968. package/dist/test/test/server.metrics.test.js.map +0 -1
  969. package/dist/test/test/server.test.d.ts +0 -2
  970. package/dist/test/test/server.test.d.ts.map +0 -1
  971. package/dist/test/test/server.test.js +0 -186
  972. package/dist/test/test/server.test.js.map +0 -1
  973. package/dist/test/test/skill-tools.test.d.ts +0 -2
  974. package/dist/test/test/skill-tools.test.d.ts.map +0 -1
  975. package/dist/test/test/skill-tools.test.js +0 -84
  976. package/dist/test/test/skill-tools.test.js.map +0 -1
  977. package/dist/test/test/smoke.test.d.ts +0 -2
  978. package/dist/test/test/smoke.test.d.ts.map +0 -1
  979. package/dist/test/test/smoke.test.js +0 -8
  980. package/dist/test/test/smoke.test.js.map +0 -1
  981. package/dist/test/test/tools/asset-generate.test.d.ts +0 -2
  982. package/dist/test/test/tools/asset-generate.test.d.ts.map +0 -1
  983. package/dist/test/test/tools/asset-generate.test.js +0 -66
  984. package/dist/test/test/tools/asset-generate.test.js.map +0 -1
  985. package/dist/test/test/tools/asset-search.test.d.ts +0 -2
  986. package/dist/test/test/tools/asset-search.test.d.ts.map +0 -1
  987. package/dist/test/test/tools/asset-search.test.js +0 -121
  988. package/dist/test/test/tools/asset-search.test.js.map +0 -1
  989. package/dist/test/test/tools/edit.test.d.ts +0 -2
  990. package/dist/test/test/tools/edit.test.d.ts.map +0 -1
  991. package/dist/test/test/tools/edit.test.js +0 -267
  992. package/dist/test/test/tools/edit.test.js.map +0 -1
  993. package/dist/test/test/tools/export.test.d.ts +0 -2
  994. package/dist/test/test/tools/export.test.d.ts.map +0 -1
  995. package/dist/test/test/tools/export.test.js +0 -174
  996. package/dist/test/test/tools/export.test.js.map +0 -1
  997. package/dist/test/test/tools/history.test.d.ts +0 -2
  998. package/dist/test/test/tools/history.test.d.ts.map +0 -1
  999. package/dist/test/test/tools/history.test.js +0 -29
  1000. package/dist/test/test/tools/history.test.js.map +0 -1
  1001. package/dist/test/test/tools/index.test.d.ts +0 -2
  1002. package/dist/test/test/tools/index.test.d.ts.map +0 -1
  1003. package/dist/test/test/tools/index.test.js +0 -55
  1004. package/dist/test/test/tools/index.test.js.map +0 -1
  1005. package/dist/test/test/tools/inspect.test.d.ts +0 -2
  1006. package/dist/test/test/tools/inspect.test.d.ts.map +0 -1
  1007. package/dist/test/test/tools/inspect.test.js +0 -62
  1008. package/dist/test/test/tools/inspect.test.js.map +0 -1
  1009. package/dist/test/test/tools/list.test.d.ts +0 -2
  1010. package/dist/test/test/tools/list.test.d.ts.map +0 -1
  1011. package/dist/test/test/tools/list.test.js +0 -23
  1012. package/dist/test/test/tools/list.test.js.map +0 -1
  1013. package/dist/test/test/tools/metrics.test.d.ts +0 -2
  1014. package/dist/test/test/tools/metrics.test.d.ts.map +0 -1
  1015. package/dist/test/test/tools/metrics.test.js +0 -29
  1016. package/dist/test/test/tools/metrics.test.js.map +0 -1
  1017. package/dist/test/test/tools/open-editor.test.d.ts +0 -2
  1018. package/dist/test/test/tools/open-editor.test.d.ts.map +0 -1
  1019. package/dist/test/test/tools/open-editor.test.js +0 -53
  1020. package/dist/test/test/tools/open-editor.test.js.map +0 -1
  1021. package/dist/test/test/tools/preview.test.d.ts +0 -2
  1022. package/dist/test/test/tools/preview.test.d.ts.map +0 -1
  1023. package/dist/test/test/tools/preview.test.js +0 -75
  1024. package/dist/test/test/tools/preview.test.js.map +0 -1
  1025. package/dist/test/test/tools/rename.test.d.ts +0 -2
  1026. package/dist/test/test/tools/rename.test.d.ts.map +0 -1
  1027. package/dist/test/test/tools/rename.test.js +0 -16
  1028. package/dist/test/test/tools/rename.test.js.map +0 -1
  1029. package/dist/test/test/tools/save.test.d.ts +0 -2
  1030. package/dist/test/test/tools/save.test.d.ts.map +0 -1
  1031. package/dist/test/test/tools/save.test.js +0 -137
  1032. package/dist/test/test/tools/save.test.js.map +0 -1
  1033. package/dist/test/test/viewer/broadcaster.test.d.ts +0 -2
  1034. package/dist/test/test/viewer/broadcaster.test.d.ts.map +0 -1
  1035. package/dist/test/test/viewer/broadcaster.test.js +0 -53
  1036. package/dist/test/test/viewer/broadcaster.test.js.map +0 -1
  1037. package/dist/test/test/viewer/resource-route.test.d.ts +0 -2
  1038. package/dist/test/test/viewer/resource-route.test.d.ts.map +0 -1
  1039. package/dist/test/test/viewer/resource-route.test.js +0 -70
  1040. package/dist/test/test/viewer/resource-route.test.js.map +0 -1
  1041. package/dist/test/test/viewer/router.test.d.ts +0 -2
  1042. package/dist/test/test/viewer/router.test.d.ts.map +0 -1
  1043. package/dist/test/test/viewer/router.test.js +0 -227
  1044. package/dist/test/test/viewer/router.test.js.map +0 -1
  1045. package/dist/test/test/viewer/session-mount.test.d.ts +0 -2
  1046. package/dist/test/test/viewer/session-mount.test.d.ts.map +0 -1
  1047. package/dist/test/test/viewer/session-mount.test.js +0 -52
  1048. package/dist/test/test/viewer/session-mount.test.js.map +0 -1
  1049. package/dist/test/test/viewer/url-builder.test.d.ts +0 -2
  1050. package/dist/test/test/viewer/url-builder.test.d.ts.map +0 -1
  1051. package/dist/test/test/viewer/url-builder.test.js +0 -98
  1052. package/dist/test/test/viewer/url-builder.test.js.map +0 -1
  1053. package/dist/test/test/workspace/hosted-stub.test.d.ts +0 -2
  1054. package/dist/test/test/workspace/hosted-stub.test.d.ts.map +0 -1
  1055. package/dist/test/test/workspace/hosted-stub.test.js +0 -30
  1056. package/dist/test/test/workspace/hosted-stub.test.js.map +0 -1
  1057. package/dist/test/test/workspace/in-memory.test.d.ts +0 -2
  1058. package/dist/test/test/workspace/in-memory.test.d.ts.map +0 -1
  1059. package/dist/test/test/workspace/in-memory.test.js +0 -4
  1060. package/dist/test/test/workspace/in-memory.test.js.map +0 -1
  1061. package/dist/test/test/workspace/node-fs.test.d.ts +0 -2
  1062. package/dist/test/test/workspace/node-fs.test.d.ts.map +0 -1
  1063. package/dist/test/test/workspace/node-fs.test.js +0 -20
  1064. package/dist/test/test/workspace/node-fs.test.js.map +0 -1
  1065. package/dist/test/test/workspace/s3.test.d.ts +0 -2
  1066. package/dist/test/test/workspace/s3.test.d.ts.map +0 -1
  1067. package/dist/test/test/workspace/s3.test.js +0 -153
  1068. package/dist/test/test/workspace/s3.test.js.map +0 -1
  1069. package/dist/test/test/workspace/scoped.test.d.ts +0 -2
  1070. package/dist/test/test/workspace/scoped.test.d.ts.map +0 -1
  1071. package/dist/test/test/workspace/scoped.test.js +0 -59
  1072. package/dist/test/test/workspace/scoped.test.js.map +0 -1
  1073. package/dist/test/test/workspace/shared-contract.d.ts +0 -3
  1074. package/dist/test/test/workspace/shared-contract.d.ts.map +0 -1
  1075. package/dist/test/test/workspace/shared-contract.js +0 -92
  1076. package/dist/test/test/workspace/shared-contract.js.map +0 -1
  1077. package/dist/test/tsconfig.test.tsbuildinfo +0 -1
  1078. package/dist/test/vitest.config.d.ts +0 -3
  1079. package/dist/test/vitest.config.d.ts.map +0 -1
  1080. package/dist/test/vitest.config.js +0 -8
  1081. package/dist/test/vitest.config.js.map +0 -1
  1082. package/dist/tools/metrics.d.ts +0 -11
  1083. package/dist/tools/metrics.d.ts.map +0 -1
  1084. package/dist/tools/metrics.js +0 -28
  1085. package/dist/tools/metrics.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Returns the codesign-mcp asset bundle (SYSTEM.md, prompts/, skills/) keyed
2
+ * Returns the codesign-mcp asset bundle (SYSTEM.md, skills/) keyed
3
3
  * by forward-slash-relative paths under `agent/`. Both surfaces (node and
4
4
  * browser) share the same inlined bundle generated at codesign-mcp build time
5
5
  * by scripts/generate-inline-assets.mjs.
@@ -1,6 +1,6 @@
1
1
  import { INLINE_ASSETS } from './inline.generated.js';
2
2
  /**
3
- * Returns the codesign-mcp asset bundle (SYSTEM.md, prompts/, skills/) keyed
3
+ * Returns the codesign-mcp asset bundle (SYSTEM.md, skills/) keyed
4
4
  * by forward-slash-relative paths under `agent/`. Both surfaces (node and
5
5
  * browser) share the same inlined bundle generated at codesign-mcp build time
6
6
  * by scripts/generate-inline-assets.mjs.
@@ -1 +1 @@
1
- {"version":3,"file":"load-browser.js","sourceRoot":"","sources":["../../src/assets/load-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;AAC9B,CAAC","sourcesContent":["import { INLINE_ASSETS } from './inline.generated.js';\n\n/**\n * Returns the codesign-mcp asset bundle (SYSTEM.md, prompts/, skills/) keyed\n * by forward-slash-relative paths under `agent/`. Both surfaces (node and\n * browser) share the same inlined bundle generated at codesign-mcp build time\n * by scripts/generate-inline-assets.mjs.\n */\nexport function loadBrowserAssets(): Record<string, string> {\n return { ...INLINE_ASSETS };\n}\n"]}
1
+ {"version":3,"file":"load-browser.js","sourceRoot":"","sources":["../../src/assets/load-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;AAC9B,CAAC","sourcesContent":["import { INLINE_ASSETS } from './inline.generated.js';\n\n/**\n * Returns the codesign-mcp asset bundle (SYSTEM.md, skills/) keyed\n * by forward-slash-relative paths under `agent/`. Both surfaces (node and\n * browser) share the same inlined bundle generated at codesign-mcp build time\n * by scripts/generate-inline-assets.mjs.\n */\nexport function loadBrowserAssets(): Record<string, string> {\n return { ...INLINE_ASSETS };\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Returns the codesign-mcp asset bundle (SYSTEM.md, prompts/, skills/) keyed
2
+ * Returns the codesign-mcp asset bundle (SYSTEM.md, skills/) keyed
3
3
  * by forward-slash-relative paths under `agent/`. Both surfaces (node and
4
4
  * browser) share the same inlined bundle generated at codesign-mcp build time
5
5
  * by scripts/generate-inline-assets.mjs.
@@ -1,6 +1,6 @@
1
1
  import { INLINE_ASSETS } from './inline.generated.js';
2
2
  /**
3
- * Returns the codesign-mcp asset bundle (SYSTEM.md, prompts/, skills/) keyed
3
+ * Returns the codesign-mcp asset bundle (SYSTEM.md, skills/) keyed
4
4
  * by forward-slash-relative paths under `agent/`. Both surfaces (node and
5
5
  * browser) share the same inlined bundle generated at codesign-mcp build time
6
6
  * by scripts/generate-inline-assets.mjs.
@@ -1 +1 @@
1
- {"version":3,"file":"load-node.js","sourceRoot":"","sources":["../../src/assets/load-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;AAC9B,CAAC","sourcesContent":["import { INLINE_ASSETS } from './inline.generated.js';\n\n/**\n * Returns the codesign-mcp asset bundle (SYSTEM.md, prompts/, skills/) keyed\n * by forward-slash-relative paths under `agent/`. Both surfaces (node and\n * browser) share the same inlined bundle generated at codesign-mcp build time\n * by scripts/generate-inline-assets.mjs.\n */\nexport function loadNodeAssets(): Record<string, string> {\n return { ...INLINE_ASSETS };\n}\n"]}
1
+ {"version":3,"file":"load-node.js","sourceRoot":"","sources":["../../src/assets/load-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;AAC9B,CAAC","sourcesContent":["import { INLINE_ASSETS } from './inline.generated.js';\n\n/**\n * Returns the codesign-mcp asset bundle (SYSTEM.md, skills/) keyed\n * by forward-slash-relative paths under `agent/`. Both surfaces (node and\n * browser) share the same inlined bundle generated at codesign-mcp build time\n * by scripts/generate-inline-assets.mjs.\n */\nexport function loadNodeAssets(): Record<string, string> {\n return { ...INLINE_ASSETS };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/cli/http.ts"],"names":[],"mappings":"AA6EA,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkN5D"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/cli/http.ts"],"names":[],"mappings":"AA6EA,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyM5D"}
package/dist/cli/http.js CHANGED
@@ -16,7 +16,7 @@ import { LocalGatewayClient } from '../gateway/local.js';
16
16
  import { createCodesignHttpServer } from '../http/server.js';
17
17
  import { makeWorkspaceResolver } from '../http/workspace-auth.js';
18
18
  import { RevisionStore } from '../revisions/store.js';
19
- import { ensureHeadlessEngine } from '../tools/engine.js';
19
+ import { disposeHeadlessEngine, ensureHeadlessEngine } from '../tools/engine.js';
20
20
  import { buildDesignToolRegistrations } from '../tools/index.js';
21
21
  import { createViewerRouter, LocalViewerUrlBuilder, mountSessionViewer, SseBroadcaster, viewerBaseFor } from '../viewer/index.js';
22
22
  import { PresignedR2UrlBuilder } from '../viewer/presigned-r2-url-builder.js';
@@ -24,9 +24,6 @@ import { NodeWorkspaceFS } from '../workspace/node-fs.js';
24
24
  import { S3WorkspaceFS } from '../workspace/s3.js';
25
25
  import { ScopedWorkspaceFS } from '../workspace/scoped.js';
26
26
  import { loadNodeAssets } from '../assets/load-node.js';
27
- import { mountMetricsEndpoints } from '../metrics/mount.js';
28
- import { MetricsRecorder } from '../metrics/recorder.js';
29
- import { createMetricsTool } from '../tools/metrics.js';
30
27
  const HOST = '0.0.0.0'; // bind all interfaces; TLS/routing is the front's job
31
28
  async function buildBackend(cfg) {
32
29
  if (cfg.workspace.backend === 's3') {
@@ -62,6 +59,8 @@ export async function runHttp(_argv) {
62
59
  process.stderr.write(`codesign-mcp http: ${err instanceof Error ? err.message : String(err)}\n`);
63
60
  process.exit(1);
64
61
  }
62
+ const { buildDiagnostics } = await import('./stdio.js');
63
+ const { telemetry } = buildDiagnostics();
65
64
  const license = cfg.cesdkLicense;
66
65
  const { rawFs, s3: s3Backend } = await buildBackend(cfg);
67
66
  const broadcaster = new SseBroadcaster();
@@ -77,19 +76,13 @@ export async function runHttp(_argv) {
77
76
  // engine (per pool slot) so distinct engines run in parallel.
78
77
  const engineLock = new Mutex();
79
78
  const resolveWorkspaceId = makeWorkspaceResolver(cfg);
80
- // Process-global perf recorder — constructed once, owns its own memory
81
- // timer, DI'd into every session's MCP server. Undefined (and thus a no-op
82
- // everywhere) unless IMGLY_METRICS_ENABLED is on.
83
- const recorder = cfg.metricsEnabled ? new MetricsRecorder() : undefined;
84
- recorder?.start();
85
79
  const app = await createCodesignHttpServer({
86
80
  assets: loadNodeAssets(),
87
81
  buildId: cfg.buildId,
88
- maxSessions: cfg.maxEngines,
82
+ maxSessions: cfg.maxHttpEngines,
89
83
  idleTimeoutMs: cfg.idleTimeoutMs,
90
84
  resolveWorkspaceId,
91
85
  trustedSessionIdHeader: 'x-mcp-session-id',
92
- ...(recorder ? { metrics: recorder } : {}),
93
86
  ...(cfg.viewerCorsOrigins
94
87
  ? { cors: { origin: cfg.viewerCorsOrigins } }
95
88
  : {}),
@@ -155,28 +148,12 @@ export async function runHttp(_argv) {
155
148
  // `as never`: buildDesignToolRegistrations is generic over the engine type
156
149
  // (unknown at this composition root); the concrete @cesdk/engine type isn't
157
150
  // threaded up here, so this is the sanctioned boundary cast (see no-as-any).
158
- renderThumbnail: renderThumbnail
151
+ renderThumbnail: renderThumbnail,
152
+ telemetry
159
153
  });
160
- if (recorder) {
161
- // Same merged shape as GET /metrics; `app` is assigned by the time any
162
- // session is created (first initialize), so the closure is safe.
163
- tools.push(createMetricsTool({
164
- recorder,
165
- activeSessions: () => app.sessions.size,
166
- maxSessions: cfg.maxEngines
167
- }));
168
- }
169
154
  return { engine, tools };
170
155
  },
171
156
  mountExtras: (expressApp) => {
172
- if (recorder) {
173
- // Metrics work in every workspace mode; the viewer (below) is single-only.
174
- mountMetricsEndpoints(expressApp, {
175
- recorder,
176
- maxSessions: cfg.maxEngines,
177
- activeSessions: () => app.sessions.size
178
- });
179
- }
180
157
  if (cfg.auth.mode === 'session') {
181
158
  // Multi-tenant viewer: /v/<sid> scopes reads to s/<sid> per request.
182
159
  mountSessionViewer(expressApp, {
@@ -222,11 +199,20 @@ export async function runHttp(_argv) {
222
199
  }, 5000);
223
200
  hardExit.unref();
224
201
  clearInterval(evictTimer);
225
- recorder?.stop();
226
202
  server.close();
227
203
  server.closeAllConnections();
228
204
  broadcaster.closeAll();
229
205
  await app.shutdown();
206
+ // The engine is a process singleton shared by every session (see
207
+ // ensureHeadlessEngine), so per-session destroy can't dispose it — the
208
+ // process exit does. Release it deterministically here. When engines become
209
+ // a fixed pool, disposal moves to per-slot teardown inside app.shutdown().
210
+ try {
211
+ await disposeHeadlessEngine();
212
+ }
213
+ catch (err) {
214
+ process.stderr.write(`codesign-mcp http: engine dispose failed — ${err instanceof Error ? err.message : String(err)}\n`);
215
+ }
230
216
  process.exit(0);
231
217
  };
232
218
  process.on('SIGINT', () => void shutdown('SIGINT'));
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/cli/http.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,EAAE;AACF,yEAAyE;AACzE,mEAAmE;AACnE,+EAA+E;AAC/E,wEAAwE;AACxE,wEAAwE;AACxE,OAAO,EAAE,UAAU,EAAqB,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,sDAAsD;AAc9E,KAAK,UAAU,YAAY,CAAC,GAAiB;IAC3C,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACnC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxD,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC,EAAE;YACL,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC;YAC1B,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,GAAG,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,eAAe;gBACtC,CAAC,CAAC;oBACE,WAAW,EAAE;wBACX,WAAW,EAAE,EAAE,CAAC,WAAW;wBAC3B,eAAe,EAAE,EAAE,CAAC,eAAe;qBACpC;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;QACH,OAAO;YACL,KAAK,EAAE,IAAI,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC;YACvD,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE;SAClC,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,OAAO,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAe;IAC3C,IAAI,GAAiB,CAAC;IACtB,IAAI,CAAC;QACH,GAAG,GAAG,UAAU,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sBAAsB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAC3E,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,IAAI,cAAc,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC;QACrC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM;QAC1B,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClE,CAAC,CAAC;IACH,wEAAwE;IACxE,4EAA4E;IAC5E,4EAA4E;IAC5E,yEAAyE;IACzE,0EAA0E;IAC1E,8DAA8D;IAC9D,MAAM,UAAU,GAAG,IAAI,KAAK,EAAE,CAAC;IAC/B,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IACtD,uEAAuE;IACvE,2EAA2E;IAC3E,kDAAkD;IAClD,MAAM,QAAQ,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAElB,MAAM,GAAG,GAAG,MAAM,wBAAwB,CAAC;QACzC,MAAM,EAAE,cAAc,EAAE;QACxB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,WAAW,EAAE,GAAG,CAAC,UAAU;QAC3B,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,kBAAkB;QAClB,sBAAsB,EAAE,kBAAkB;QAC1C,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,GAAG,CAAC,iBAAiB;YACvB,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,iBAAiB,EAAE,EAAE;YAC7C,CAAC,CAAC,EAAE,CAAC;QACP,aAAa,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE;YAClD,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;YACnD,0GAA0G;YAC1G,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAC;YACvC,0EAA0E;YAC1E,wEAAwE;YACxE,sBAAsB,CAAC,MAAM,CAAC,CAAC;YAC/B,wEAAwE;YACxE,wEAAwE;YACxE,iCAAiC;YACjC,MAAM,UAAU,GAAG,aAAa,CAAC;gBAC/B,aAAa,EAAE,GAAG,CAAC,aAAa;gBAChC,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI;gBACnB,SAAS;aACV,CAAC,CAAC;YACH,mEAAmE;YACnE,mEAAmE;YACnE,wEAAwE;YACxE,8DAA8D;YAC9D,iEAAiE;YACjE,MAAM,UAAU,GAAG,SAAS;gBAC1B,CAAC,CAAC,IAAI,qBAAqB,CAAC;oBACxB,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,SAAS,CAAC,MAAM;oBACxB,MAAM,EAAE,SAAS,CAAC,MAAM;oBACxB,WAAW;iBACZ,CAAC;gBACJ,CAAC,CAAC,IAAI,qBAAqB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YACpD,2EAA2E;YAC3E,2EAA2E;YAC3E,mEAAmE;YACnE,yDAAyD;YACzD,wEAAwE;YACxE,4BAA4B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC;gBAChC,IAAI,EAAE,CAAC;gBACP,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC;aAC9B,CAAC,CAAC;YACH,MAAM,eAAe,GAAG,KAAK,EAAE,EAC7B,MAAM,EAAE,GAAG,EAIZ,EAAE,EAAE;gBACH,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC;gBAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;gBACpD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE;oBAC1D,WAAW,EAAE,GAAG;iBACjB,CAAC,CAAC;gBACH,OAAO,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAClD,CAAC,CAAC;YACF,MAAM,KAAK,GAAG,4BAA4B,CAAC;gBACzC,EAAE,EAAE,QAAQ;gBACZ,KAAK;gBACL,OAAO;gBACP,UAAU;gBACV,OAAO;gBACP,UAAU;gBACV,YAAY,EAAE,KAAK;gBACnB,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC9C,2EAA2E;gBAC3E,4EAA4E;gBAC5E,6EAA6E;gBAC7E,eAAe,EAAE,eAAwB;aAC1C,CAAC,CAAC;YACH,IAAI,QAAQ,EAAE,CAAC;gBACb,uEAAuE;gBACvE,iEAAiE;gBACjE,KAAK,CAAC,IAAI,CACR,iBAAiB,CAAC;oBAChB,QAAQ;oBACR,cAAc,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI;oBACvC,WAAW,EAAE,GAAG,CAAC,UAAU;iBAC5B,CAAC,CACH,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAC3B,CAAC;QACD,WAAW,EAAE,CAAC,UAAU,EAAE,EAAE;YAC1B,IAAI,QAAQ,EAAE,CAAC;gBACb,2EAA2E;gBAC3E,qBAAqB,CAAC,UAAU,EAAE;oBAChC,QAAQ;oBACR,WAAW,EAAE,GAAG,CAAC,UAAU;oBAC3B,cAAc,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI;iBACxC,CAAC,CAAC;YACL,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAChC,qEAAqE;gBACrE,kBAAkB,CAAC,UAAU,EAAE;oBAC7B,KAAK;oBACL,WAAW;oBACX,YAAY,EAAE,OAAO;iBACtB,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,0CAA0C,GAAG,CAAC,IAAI,CAAC,IAAI,gDAAgD,CACxG,CAAC;gBACF,OAAO;YACT,CAAC;YACD,MAAM,cAAc,GAAG,IAAI,iBAAiB,CAC1C,KAAK,EACL,GAAG,CAAC,IAAI,CAAC,gBAAgB,IAAI,SAAS,CACvC,CAAC;YACF,MAAM,WAAW,GAAG,IAAI,aAAa,CAAC,cAAc,CAAC,CAAC;YACtD,UAAU,CAAC,GAAG,CACZ,SAAS,EACT,kBAAkB,CAAC;gBACjB,KAAK,EAAE,WAAW;gBAClB,EAAE,EAAE,cAAc;gBAClB,WAAW;gBACX,YAAY,EAAE,OAAO;aACtB,CAAC,CACH,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,WAAW,CAC5B,GAAG,EAAE,CACH,KAAK,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,8BAA8B,OAAO,CAAC,MAAM,oBAAoB,CACjE,CAAC;IACN,CAAC,CAAC,EACJ,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CACxC,CAAC;IAEF,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;QAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,0CAA0C,IAAI,IAAI,GAAG,CAAC,IAAI,MAAM;YAC9D,UAAU,GAAG,CAAC,IAAI,CAAC,IAAI,YAAY,GAAG,CAAC,SAAS,CAAC,OAAO,KAAK,CAChE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;QACxC,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sBAAsB,MAAM,0BAA0B,CACvD,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,YAAY,GAAG,IAAI,CAAC;QACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,MAAM,qBAAqB,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE;YAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,yDAAyD,CAC1D,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,EAAE,IAAI,CAAC,CAAC;QACT,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,aAAa,CAAC,UAAU,CAAC,CAAC;QAC1B,QAAQ,EAAE,IAAI,EAAE,CAAC;QACjB,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAC7B,WAAW,CAAC,QAAQ,EAAE,CAAC;QACvB,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AACxD,CAAC","sourcesContent":["// packages/codesign-mcp/src/cli/http.ts\n//\n// codesign-mcp http — Streamable HTTP transport. Composition root: loads\n// IMGLY_* config, selects the storage backend (local|s3), builds a\n// PER-SESSION ScopedWorkspaceFS + RevisionStore, wires the workspace resolver,\n// and mounts the viewer: fixed `/viewer` in `single` mode, multi-tenant\n// `/v/<sid>` in `session` mode (disabled in `header` mode — follow-up).\nimport { loadConfig, type ServerConfig } from '../config.js';\nimport { ensureEngineAssetSources } from '../engine/asset-sources.js';\nimport { cesdkAdapter } from '../engine/cesdk-adapter.js';\nimport { Mutex } from '../engine/mutex.js';\nimport { EngineSession } from '../engine/session.js';\nimport { registerUnsplashSource } from '../engine/unsplash-source.js';\nimport { registerWorkspaceUriResolver } from '../engine/uri-resolver.js';\nimport { LocalGatewayClient } from '../gateway/local.js';\nimport { createCodesignHttpServer } from '../http/server.js';\nimport { makeWorkspaceResolver } from '../http/workspace-auth.js';\nimport { RevisionStore } from '../revisions/store.js';\nimport { ensureHeadlessEngine } from '../tools/engine.js';\nimport { buildDesignToolRegistrations } from '../tools/index.js';\nimport {\n createViewerRouter,\n LocalViewerUrlBuilder,\n mountSessionViewer,\n SseBroadcaster,\n viewerBaseFor\n} from '../viewer/index.js';\nimport { PresignedR2UrlBuilder } from '../viewer/presigned-r2-url-builder.js';\nimport { NodeWorkspaceFS } from '../workspace/node-fs.js';\nimport { S3WorkspaceFS } from '../workspace/s3.js';\nimport { ScopedWorkspaceFS } from '../workspace/scoped.js';\nimport { loadNodeAssets } from '../assets/load-node.js';\nimport type { WorkspaceFS } from '../workspace/types.js';\nimport { mountMetricsEndpoints } from '../metrics/mount.js';\nimport { MetricsRecorder } from '../metrics/recorder.js';\nimport { createMetricsTool } from '../tools/metrics.js';\n\nconst HOST = '0.0.0.0'; // bind all interfaces; TLS/routing is the front's job\n\ninterface S3BackendInfo {\n /** The real S3Client — used to build per-session presigned download URLs. */\n client: import('@aws-sdk/client-s3').S3Client;\n bucket: string;\n}\n\ninterface BackendResult {\n rawFs: WorkspaceFS;\n /** Present only when the s3 backend is active. */\n s3?: S3BackendInfo;\n}\n\nasync function buildBackend(cfg: ServerConfig): Promise<BackendResult> {\n if (cfg.workspace.backend === 's3') {\n const { S3Client } = await import('@aws-sdk/client-s3');\n const s3 = cfg.workspace.s3;\n if (!s3)\n throw new Error('config: s3 backend selected but s3 config missing');\n const client = new S3Client({\n region: s3.region,\n ...(s3.endpoint ? { endpoint: s3.endpoint, forcePathStyle: true } : {}),\n ...(s3.accessKeyId && s3.secretAccessKey\n ? {\n credentials: {\n accessKeyId: s3.accessKeyId,\n secretAccessKey: s3.secretAccessKey\n }\n }\n : {})\n });\n return {\n rawFs: new S3WorkspaceFS({ client, bucket: s3.bucket }),\n s3: { client, bucket: s3.bucket }\n };\n }\n return { rawFs: new NodeWorkspaceFS(cfg.workspace.dir ?? '/data') };\n}\n\nexport async function runHttp(_argv: string[]): Promise<void> {\n let cfg: ServerConfig;\n try {\n cfg = loadConfig();\n } catch (err) {\n process.stderr.write(\n `codesign-mcp http: ${err instanceof Error ? err.message : String(err)}\\n`\n );\n process.exit(1);\n }\n\n const license = cfg.cesdkLicense;\n const { rawFs, s3: s3Backend } = await buildBackend(cfg);\n const broadcaster = new SseBroadcaster();\n const gateway = new LocalGatewayClient({\n apiKey: cfg.gateway.apiKey,\n ...(cfg.gateway.baseUrl ? { endpoint: cfg.gateway.baseUrl } : {})\n });\n // ensureHeadlessEngine is a process singleton, so EVERY session's tools\n // operate on the same CE.SDK engine. This one lock — created once here, NOT\n // per session — serializes all engine access across sessions so two clients\n // editing concurrently can't corrupt each other's scene. When the engine\n // becomes a per-session/per-workspace pool, this moves to be one lock per\n // engine (per pool slot) so distinct engines run in parallel.\n const engineLock = new Mutex();\n const resolveWorkspaceId = makeWorkspaceResolver(cfg);\n // Process-global perf recorder — constructed once, owns its own memory\n // timer, DI'd into every session's MCP server. Undefined (and thus a no-op\n // everywhere) unless IMGLY_METRICS_ENABLED is on.\n const recorder = cfg.metricsEnabled ? new MetricsRecorder() : undefined;\n recorder?.start();\n\n const app = await createCodesignHttpServer({\n assets: loadNodeAssets(),\n buildId: cfg.buildId,\n maxSessions: cfg.maxEngines,\n idleTimeoutMs: cfg.idleTimeoutMs,\n resolveWorkspaceId,\n trustedSessionIdHeader: 'x-mcp-session-id',\n ...(recorder ? { metrics: recorder } : {}),\n ...(cfg.viewerCorsOrigins\n ? { cors: { origin: cfg.viewerCorsOrigins } }\n : {}),\n createSession: async ({ sessionId, workspaceId }) => {\n const scopedFs = new ScopedWorkspaceFS(rawFs, workspaceId);\n const store = new RevisionStore(scopedFs);\n const engine = await ensureHeadlessEngine(license);\n // Idempotent (engine is a process singleton) — only the first successful registration pays the CDN fetch.\n await ensureEngineAssetSources(engine);\n // Demo `unsplash` custom source (synchronous, idempotent) so asset_search\n // has a real remote source alongside the CDN ones. Public IMG.LY proxy.\n registerUnsplashSource(engine);\n // Per-session viewer base: session mode lives under /v/<sid> (reachable\n // through the CF Worker when IMGLY_PUBLIC_BASE_URL is set); single mode\n // keeps the fixed /viewer mount.\n const viewerBase = viewerBaseFor({\n publicBaseUrl: cfg.publicBaseUrl,\n port: cfg.port,\n mode: cfg.auth.mode,\n sessionId\n });\n // Build a per-session URL builder. On the S3/R2 backend we use the\n // PresignedR2UrlBuilder so forDownload returns a presigned GET URL\n // directly from R2 — the /r/ Express route is not mounted on the hosted\n // Cloudflare deployment. On the local backend we fall back to\n // LocalViewerUrlBuilder (forDownload == forResource == /r/ URL).\n const urlBuilder = s3Backend\n ? new PresignedR2UrlBuilder({\n base: viewerBase,\n client: s3Backend.client,\n bucket: s3Backend.bucket,\n workspaceId\n })\n : new LocalViewerUrlBuilder({ base: viewerBase });\n // The engine and its URI resolver are process-global (ensureHeadlessEngine\n // is a cached singleton). Re-registering here is redundant after the first\n // session but harmless — the resolver is always the same function.\n // PresignedR2UrlBuilder inherits forResource (sync) from\n // LocalViewerUrlBuilder, so the sync URI-resolver callback stays valid.\n registerWorkspaceUriResolver(engine, urlBuilder);\n const session = new EngineSession({\n size: 1,\n adapter: cesdkAdapter(engine)\n });\n const renderThumbnail = async ({\n engine: eng\n }: {\n revision: string;\n engine: import('@cesdk/engine').default;\n }) => {\n const pages = eng.scene.getPages?.() ?? [];\n if (pages.length === 0) throw new Error('no pages');\n const blob = await eng.block.export(pages[0], 'image/webp', {\n targetWidth: 256\n });\n return new Uint8Array(await blob.arrayBuffer());\n };\n const tools = buildDesignToolRegistrations({\n fs: scopedFs,\n store,\n session,\n engineLock,\n gateway,\n urlBuilder,\n allowOutPath: false,\n onLeafWritten: (e) => broadcaster.broadcast(e),\n // `as never`: buildDesignToolRegistrations is generic over the engine type\n // (unknown at this composition root); the concrete @cesdk/engine type isn't\n // threaded up here, so this is the sanctioned boundary cast (see no-as-any).\n renderThumbnail: renderThumbnail as never\n });\n if (recorder) {\n // Same merged shape as GET /metrics; `app` is assigned by the time any\n // session is created (first initialize), so the closure is safe.\n tools.push(\n createMetricsTool({\n recorder,\n activeSessions: () => app.sessions.size,\n maxSessions: cfg.maxEngines\n })\n );\n }\n return { engine, tools };\n },\n mountExtras: (expressApp) => {\n if (recorder) {\n // Metrics work in every workspace mode; the viewer (below) is single-only.\n mountMetricsEndpoints(expressApp, {\n recorder,\n maxSessions: cfg.maxEngines,\n activeSessions: () => app.sessions.size\n });\n }\n if (cfg.auth.mode === 'session') {\n // Multi-tenant viewer: /v/<sid> scopes reads to s/<sid> per request.\n mountSessionViewer(expressApp, {\n rawFs,\n broadcaster,\n cesdkLicense: license\n });\n return;\n }\n if (cfg.auth.mode !== 'single') {\n process.stderr.write(\n `codesign-mcp http: viewer disabled in \"${cfg.auth.mode}\" mode (multi-tenant viewer is a follow-up).\\n`\n );\n return;\n }\n const viewerScopedFs = new ScopedWorkspaceFS(\n rawFs,\n cfg.auth.fixedWorkspaceId ?? 'default'\n );\n const viewerStore = new RevisionStore(viewerScopedFs);\n expressApp.use(\n '/viewer',\n createViewerRouter({\n store: viewerStore,\n fs: viewerScopedFs,\n broadcaster,\n cesdkLicense: license\n })\n );\n }\n });\n\n const evictTimer = setInterval(\n () =>\n void app.sessions.evictIdle().then((evicted) => {\n if (evicted.length > 0)\n process.stderr.write(\n `codesign-mcp http: evicted ${evicted.length} idle session(s)\\n`\n );\n }),\n Math.max(10_000, cfg.idleTimeoutMs / 2)\n );\n\n const server = app.listen(cfg.port, HOST, () => {\n process.stderr.write(\n `codesign-mcp http: listening on http://${HOST}:${cfg.port}/mcp` +\n ` (mode=${cfg.auth.mode} backend=${cfg.workspace.backend})\\n`\n );\n });\n\n let shuttingDown = false;\n const shutdown = async (signal: string) => {\n if (shuttingDown) {\n process.stderr.write(\n `codesign-mcp http: ${signal} again — forcing exit.\\n`\n );\n process.exit(1);\n }\n shuttingDown = true;\n process.stderr.write(`codesign-mcp http: ${signal} — shutting down.\\n`);\n const hardExit = setTimeout(() => {\n process.stderr.write(\n 'codesign-mcp http: shutdown timed out — forcing exit.\\n'\n );\n process.exit(1);\n }, 5000);\n hardExit.unref();\n clearInterval(evictTimer);\n recorder?.stop();\n server.close();\n server.closeAllConnections();\n broadcaster.closeAll();\n await app.shutdown();\n process.exit(0);\n };\n process.on('SIGINT', () => void shutdown('SIGINT'));\n process.on('SIGTERM', () => void shutdown('SIGTERM'));\n}\n"]}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/cli/http.ts"],"names":[],"mappings":"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","sourcesContent":["// packages/codesign-mcp/src/cli/http.ts\n//\n// codesign-mcp http — Streamable HTTP transport. Composition root: loads\n// IMGLY_* config, selects the storage backend (local|s3), builds a\n// PER-SESSION ScopedWorkspaceFS + RevisionStore, wires the workspace resolver,\n// and mounts the viewer: fixed `/viewer` in `single` mode, multi-tenant\n// `/v/<sid>` in `session` mode (disabled in `header` mode — follow-up).\nimport { loadConfig, type ServerConfig } from '../config.js';\nimport { ensureEngineAssetSources } from '../engine/asset-sources.js';\nimport { cesdkAdapter } from '../engine/cesdk-adapter.js';\nimport { Mutex } from '../engine/mutex.js';\nimport { EngineSession } from '../engine/session.js';\nimport { registerUnsplashSource } from '../engine/unsplash-source.js';\nimport { registerWorkspaceUriResolver } from '../engine/uri-resolver.js';\nimport { LocalGatewayClient } from '../gateway/local.js';\nimport { createCodesignHttpServer } from '../http/server.js';\nimport { makeWorkspaceResolver } from '../http/workspace-auth.js';\nimport { RevisionStore } from '../revisions/store.js';\nimport {\n disposeHeadlessEngine,\n ensureHeadlessEngine\n} from '../tools/engine.js';\nimport { buildDesignToolRegistrations } from '../tools/index.js';\nimport {\n createViewerRouter,\n LocalViewerUrlBuilder,\n mountSessionViewer,\n SseBroadcaster,\n viewerBaseFor\n} from '../viewer/index.js';\nimport { PresignedR2UrlBuilder } from '../viewer/presigned-r2-url-builder.js';\nimport { NodeWorkspaceFS } from '../workspace/node-fs.js';\nimport { S3WorkspaceFS } from '../workspace/s3.js';\nimport { ScopedWorkspaceFS } from '../workspace/scoped.js';\nimport { loadNodeAssets } from '../assets/load-node.js';\nimport type { WorkspaceFS } from '../workspace/types.js';\n\nconst HOST = '0.0.0.0'; // bind all interfaces; TLS/routing is the front's job\n\ninterface S3BackendInfo {\n /** The real S3Client — used to build per-session presigned download URLs. */\n client: import('@aws-sdk/client-s3').S3Client;\n bucket: string;\n}\n\ninterface BackendResult {\n rawFs: WorkspaceFS;\n /** Present only when the s3 backend is active. */\n s3?: S3BackendInfo;\n}\n\nasync function buildBackend(cfg: ServerConfig): Promise<BackendResult> {\n if (cfg.workspace.backend === 's3') {\n const { S3Client } = await import('@aws-sdk/client-s3');\n const s3 = cfg.workspace.s3;\n if (!s3)\n throw new Error('config: s3 backend selected but s3 config missing');\n const client = new S3Client({\n region: s3.region,\n ...(s3.endpoint ? { endpoint: s3.endpoint, forcePathStyle: true } : {}),\n ...(s3.accessKeyId && s3.secretAccessKey\n ? {\n credentials: {\n accessKeyId: s3.accessKeyId,\n secretAccessKey: s3.secretAccessKey\n }\n }\n : {})\n });\n return {\n rawFs: new S3WorkspaceFS({ client, bucket: s3.bucket }),\n s3: { client, bucket: s3.bucket }\n };\n }\n return { rawFs: new NodeWorkspaceFS(cfg.workspace.dir ?? '/data') };\n}\n\nexport async function runHttp(_argv: string[]): Promise<void> {\n let cfg: ServerConfig;\n try {\n cfg = loadConfig();\n } catch (err) {\n process.stderr.write(\n `codesign-mcp http: ${err instanceof Error ? err.message : String(err)}\\n`\n );\n process.exit(1);\n }\n\n const { buildDiagnostics } = await import('./stdio.js');\n const { telemetry } = buildDiagnostics();\n\n const license = cfg.cesdkLicense;\n const { rawFs, s3: s3Backend } = await buildBackend(cfg);\n const broadcaster = new SseBroadcaster();\n const gateway = new LocalGatewayClient({\n apiKey: cfg.gateway.apiKey,\n ...(cfg.gateway.baseUrl ? { endpoint: cfg.gateway.baseUrl } : {})\n });\n // ensureHeadlessEngine is a process singleton, so EVERY session's tools\n // operate on the same CE.SDK engine. This one lock — created once here, NOT\n // per session — serializes all engine access across sessions so two clients\n // editing concurrently can't corrupt each other's scene. When the engine\n // becomes a per-session/per-workspace pool, this moves to be one lock per\n // engine (per pool slot) so distinct engines run in parallel.\n const engineLock = new Mutex();\n const resolveWorkspaceId = makeWorkspaceResolver(cfg);\n\n const app = await createCodesignHttpServer({\n assets: loadNodeAssets(),\n buildId: cfg.buildId,\n maxSessions: cfg.maxHttpEngines,\n idleTimeoutMs: cfg.idleTimeoutMs,\n resolveWorkspaceId,\n trustedSessionIdHeader: 'x-mcp-session-id',\n ...(cfg.viewerCorsOrigins\n ? { cors: { origin: cfg.viewerCorsOrigins } }\n : {}),\n createSession: async ({ sessionId, workspaceId }) => {\n const scopedFs = new ScopedWorkspaceFS(rawFs, workspaceId);\n const store = new RevisionStore(scopedFs);\n const engine = await ensureHeadlessEngine(license);\n // Idempotent (engine is a process singleton) — only the first successful registration pays the CDN fetch.\n await ensureEngineAssetSources(engine);\n // Demo `unsplash` custom source (synchronous, idempotent) so asset_search\n // has a real remote source alongside the CDN ones. Public IMG.LY proxy.\n registerUnsplashSource(engine);\n // Per-session viewer base: session mode lives under /v/<sid> (reachable\n // through the CF Worker when IMGLY_PUBLIC_BASE_URL is set); single mode\n // keeps the fixed /viewer mount.\n const viewerBase = viewerBaseFor({\n publicBaseUrl: cfg.publicBaseUrl,\n port: cfg.port,\n mode: cfg.auth.mode,\n sessionId\n });\n // Build a per-session URL builder. On the S3/R2 backend we use the\n // PresignedR2UrlBuilder so forDownload returns a presigned GET URL\n // directly from R2 — the /r/ Express route is not mounted on the hosted\n // Cloudflare deployment. On the local backend we fall back to\n // LocalViewerUrlBuilder (forDownload == forResource == /r/ URL).\n const urlBuilder = s3Backend\n ? new PresignedR2UrlBuilder({\n base: viewerBase,\n client: s3Backend.client,\n bucket: s3Backend.bucket,\n workspaceId\n })\n : new LocalViewerUrlBuilder({ base: viewerBase });\n // The engine and its URI resolver are process-global (ensureHeadlessEngine\n // is a cached singleton). Re-registering here is redundant after the first\n // session but harmless — the resolver is always the same function.\n // PresignedR2UrlBuilder inherits forResource (sync) from\n // LocalViewerUrlBuilder, so the sync URI-resolver callback stays valid.\n registerWorkspaceUriResolver(engine, urlBuilder);\n const session = new EngineSession({\n size: 1,\n adapter: cesdkAdapter(engine)\n });\n const renderThumbnail = async ({\n engine: eng\n }: {\n revision: string;\n engine: import('@cesdk/engine').default;\n }) => {\n const pages = eng.scene.getPages?.() ?? [];\n if (pages.length === 0) throw new Error('no pages');\n const blob = await eng.block.export(pages[0], 'image/webp', {\n targetWidth: 256\n });\n return new Uint8Array(await blob.arrayBuffer());\n };\n const tools = buildDesignToolRegistrations({\n fs: scopedFs,\n store,\n session,\n engineLock,\n gateway,\n urlBuilder,\n allowOutPath: false,\n onLeafWritten: (e) => broadcaster.broadcast(e),\n // `as never`: buildDesignToolRegistrations is generic over the engine type\n // (unknown at this composition root); the concrete @cesdk/engine type isn't\n // threaded up here, so this is the sanctioned boundary cast (see no-as-any).\n renderThumbnail: renderThumbnail as never,\n telemetry\n });\n return { engine, tools };\n },\n mountExtras: (expressApp) => {\n if (cfg.auth.mode === 'session') {\n // Multi-tenant viewer: /v/<sid> scopes reads to s/<sid> per request.\n mountSessionViewer(expressApp, {\n rawFs,\n broadcaster,\n cesdkLicense: license\n });\n return;\n }\n if (cfg.auth.mode !== 'single') {\n process.stderr.write(\n `codesign-mcp http: viewer disabled in \"${cfg.auth.mode}\" mode (multi-tenant viewer is a follow-up).\\n`\n );\n return;\n }\n const viewerScopedFs = new ScopedWorkspaceFS(\n rawFs,\n cfg.auth.fixedWorkspaceId ?? 'default'\n );\n const viewerStore = new RevisionStore(viewerScopedFs);\n expressApp.use(\n '/viewer',\n createViewerRouter({\n store: viewerStore,\n fs: viewerScopedFs,\n broadcaster,\n cesdkLicense: license\n })\n );\n }\n });\n\n const evictTimer = setInterval(\n () =>\n void app.sessions.evictIdle().then((evicted) => {\n if (evicted.length > 0)\n process.stderr.write(\n `codesign-mcp http: evicted ${evicted.length} idle session(s)\\n`\n );\n }),\n Math.max(10_000, cfg.idleTimeoutMs / 2)\n );\n\n const server = app.listen(cfg.port, HOST, () => {\n process.stderr.write(\n `codesign-mcp http: listening on http://${HOST}:${cfg.port}/mcp` +\n ` (mode=${cfg.auth.mode} backend=${cfg.workspace.backend})\\n`\n );\n });\n\n let shuttingDown = false;\n const shutdown = async (signal: string) => {\n if (shuttingDown) {\n process.stderr.write(\n `codesign-mcp http: ${signal} again — forcing exit.\\n`\n );\n process.exit(1);\n }\n shuttingDown = true;\n process.stderr.write(`codesign-mcp http: ${signal} — shutting down.\\n`);\n const hardExit = setTimeout(() => {\n process.stderr.write(\n 'codesign-mcp http: shutdown timed out — forcing exit.\\n'\n );\n process.exit(1);\n }, 5000);\n hardExit.unref();\n clearInterval(evictTimer);\n server.close();\n server.closeAllConnections();\n broadcaster.closeAll();\n await app.shutdown();\n // The engine is a process singleton shared by every session (see\n // ensureHeadlessEngine), so per-session destroy can't dispose it — the\n // process exit does. Release it deterministically here. When engines become\n // a fixed pool, disposal moves to per-slot teardown inside app.shutdown().\n try {\n await disposeHeadlessEngine();\n } catch (err) {\n process.stderr.write(\n `codesign-mcp http: engine dispose failed — ${\n err instanceof Error ? err.message : String(err)\n }\\n`\n );\n }\n process.exit(0);\n };\n process.on('SIGINT', () => void shutdown('SIGINT'));\n process.on('SIGTERM', () => void shutdown('SIGTERM'));\n}\n"]}
@@ -6,5 +6,5 @@
6
6
  * (e.g. Claude Desktop) fail to parse the next message. console.error already
7
7
  * writes to stderr and is intentionally left untouched.
8
8
  */
9
- export declare function redirectConsoleToStderr(): void;
9
+ export declare function redirectConsoleToStderr(onLine?: (level: 'log' | 'info' | 'warn' | 'debug' | 'trace', text: string) => void): void;
10
10
  //# sourceMappingURL=redirect-console.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"redirect-console.d.ts","sourceRoot":"","sources":["../../src/cli/redirect-console.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAU9C"}
1
+ {"version":3,"file":"redirect-console.d.ts","sourceRoot":"","sources":["../../src/cli/redirect-console.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,CAAC,EAAE,CACP,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,EAClD,IAAI,EAAE,MAAM,KACT,IAAI,GACR,IAAI,CAgBN"}
@@ -6,12 +6,21 @@
6
6
  * (e.g. Claude Desktop) fail to parse the next message. console.error already
7
7
  * writes to stderr and is intentionally left untouched.
8
8
  */
9
- export function redirectConsoleToStderr() {
9
+ export function redirectConsoleToStderr(onLine) {
10
10
  for (const m of ['log', 'info', 'warn', 'debug', 'trace']) {
11
11
  console[m] = (...args) => {
12
- process.stderr.write(args
12
+ const text = args
13
13
  .map((a) => (typeof a === 'string' ? a : JSON.stringify(a)))
14
- .join(' ') + '\n');
14
+ .join(' ');
15
+ process.stderr.write(text + '\n');
16
+ if (onLine) {
17
+ try {
18
+ onLine(m, text);
19
+ }
20
+ catch {
21
+ // A diagnostics emit must never break console output.
22
+ }
23
+ }
15
24
  };
16
25
  }
17
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"redirect-console.js","sourceRoot":"","sources":["../../src/cli/redirect-console.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB;IACrC,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAU,EAAE,CAAC;QACnE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAe,EAAQ,EAAE;YACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI;iBACD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3D,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CACpB,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["/**\n * Redirect the console.* methods that default to stdout (log/info/warn/debug/\n * trace) to stderr. In stdio mode stdout is the JSON-RPC channel and must carry\n * ONLY protocol traffic; the CE.SDK engine logs `[CreativeEngine]`/`[UBQ]` lines\n * via console.log at init, which would corrupt the stream and make strict hosts\n * (e.g. Claude Desktop) fail to parse the next message. console.error already\n * writes to stderr and is intentionally left untouched.\n */\nexport function redirectConsoleToStderr(): void {\n for (const m of ['log', 'info', 'warn', 'debug', 'trace'] as const) {\n console[m] = (...args: unknown[]): void => {\n process.stderr.write(\n args\n .map((a) => (typeof a === 'string' ? a : JSON.stringify(a)))\n .join(' ') + '\\n'\n );\n };\n }\n}\n"]}
1
+ {"version":3,"file":"redirect-console.js","sourceRoot":"","sources":["../../src/cli/redirect-console.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAGS;IAET,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAU,EAAE,CAAC;QACnE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAe,EAAQ,EAAE;YACxC,MAAM,IAAI,GAAG,IAAI;iBACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3D,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;YAClC,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC;oBACH,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBAClB,CAAC;gBAAC,MAAM,CAAC;oBACP,sDAAsD;gBACxD,CAAC;YACH,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["/**\n * Redirect the console.* methods that default to stdout (log/info/warn/debug/\n * trace) to stderr. In stdio mode stdout is the JSON-RPC channel and must carry\n * ONLY protocol traffic; the CE.SDK engine logs `[CreativeEngine]`/`[UBQ]` lines\n * via console.log at init, which would corrupt the stream and make strict hosts\n * (e.g. Claude Desktop) fail to parse the next message. console.error already\n * writes to stderr and is intentionally left untouched.\n */\nexport function redirectConsoleToStderr(\n onLine?: (\n level: 'log' | 'info' | 'warn' | 'debug' | 'trace',\n text: string\n ) => void\n): void {\n for (const m of ['log', 'info', 'warn', 'debug', 'trace'] as const) {\n console[m] = (...args: unknown[]): void => {\n const text = args\n .map((a) => (typeof a === 'string' ? a : JSON.stringify(a)))\n .join(' ');\n process.stderr.write(text + '\\n');\n if (onLine) {\n try {\n onLine(m, text);\n } catch {\n // A diagnostics emit must never break console output.\n }\n }\n };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-license.d.ts","sourceRoot":"","sources":["../../src/cli/resolve-license.ts"],"names":[],"mappings":"AAKA,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,YAAY,EAAE,MAAM,GACnB,MAAM,GAAG,SAAS,CAKpB"}
1
+ {"version":3,"file":"resolve-license.d.ts","sourceRoot":"","sources":["../../src/cli/resolve-license.ts"],"names":[],"mappings":"AAOA,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,YAAY,EAAE,MAAM,GACnB,MAAM,GAAG,SAAS,CAKpB"}
@@ -1,10 +1,12 @@
1
- // Resolve the CE.SDK license for stdio mode. An explicit CESDK_LICENSE always
2
- // wins; otherwise fall back to the build-time-bundled trial (empty in dev and at
3
- // GA). Blank/whitespace is treated as absent so an empty env var can't shadow the
4
- // trial. The env-first order is what makes the bundled trial a beta-only, no-op
5
- // addition: at GA we stop injecting it and CESDK_LICENSE is the only source.
1
+ // Resolve the CE.SDK license for stdio mode. Precedence: an explicit
2
+ // CESDK_LICENSE wins, then IMGLY_CESDK_LICENSE (the repo's .env convention, so a
3
+ // local `--env-file=.env` run works without remapping), then the
4
+ // build-time-bundled trial (empty in dev and at GA). Blank/whitespace is treated
5
+ // as absent so an empty env var can't shadow the next source. The env-first
6
+ // order is what makes the bundled trial a beta-only, no-op addition: at GA we
7
+ // stop injecting it and the env license is the only source.
6
8
  export function resolveLicense(env, trialLicense) {
7
- const fromEnv = env.CESDK_LICENSE?.trim();
9
+ const fromEnv = env.CESDK_LICENSE?.trim() || env.IMGLY_CESDK_LICENSE?.trim();
8
10
  if (fromEnv)
9
11
  return fromEnv;
10
12
  const trial = trialLicense.trim();
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-license.js","sourceRoot":"","sources":["../../src/cli/resolve-license.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,iFAAiF;AACjF,kFAAkF;AAClF,gFAAgF;AAChF,6EAA6E;AAC7E,MAAM,UAAU,cAAc,CAC5B,GAAsB,EACtB,YAAoB;IAEpB,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;IAC1C,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;IAClC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC","sourcesContent":["// Resolve the CE.SDK license for stdio mode. An explicit CESDK_LICENSE always\n// wins; otherwise fall back to the build-time-bundled trial (empty in dev and at\n// GA). Blank/whitespace is treated as absent so an empty env var can't shadow the\n// trial. The env-first order is what makes the bundled trial a beta-only, no-op\n// addition: at GA we stop injecting it and CESDK_LICENSE is the only source.\nexport function resolveLicense(\n env: NodeJS.ProcessEnv,\n trialLicense: string\n): string | undefined {\n const fromEnv = env.CESDK_LICENSE?.trim();\n if (fromEnv) return fromEnv;\n const trial = trialLicense.trim();\n return trial.length > 0 ? trial : undefined;\n}\n"]}
1
+ {"version":3,"file":"resolve-license.js","sourceRoot":"","sources":["../../src/cli/resolve-license.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,iFAAiF;AACjF,iEAAiE;AACjE,iFAAiF;AACjF,4EAA4E;AAC5E,8EAA8E;AAC9E,4DAA4D;AAC5D,MAAM,UAAU,cAAc,CAC5B,GAAsB,EACtB,YAAoB;IAEpB,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC;IAC7E,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;IAClC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC","sourcesContent":["// Resolve the CE.SDK license for stdio mode. Precedence: an explicit\n// CESDK_LICENSE wins, then IMGLY_CESDK_LICENSE (the repo's .env convention, so a\n// local `--env-file=.env` run works without remapping), then the\n// build-time-bundled trial (empty in dev and at GA). Blank/whitespace is treated\n// as absent so an empty env var can't shadow the next source. The env-first\n// order is what makes the bundled trial a beta-only, no-op addition: at GA we\n// stop injecting it and the env license is the only source.\nexport function resolveLicense(\n env: NodeJS.ProcessEnv,\n trialLicense: string\n): string | undefined {\n const fromEnv = env.CESDK_LICENSE?.trim() || env.IMGLY_CESDK_LICENSE?.trim();\n if (fromEnv) return fromEnv;\n const trial = trialLicense.trim();\n return trial.length > 0 ? trial : undefined;\n}\n"]}
@@ -1,2 +1,11 @@
1
+ import type { Env } from '../config.js';
2
+ import { type DiagnosticsSink } from '../diagnostics/events.js';
3
+ import { type TelemetrySink } from '../tools/spans.js';
4
+ export declare function buildDiagnostics(env?: Env): {
5
+ diag: DiagnosticsSink;
6
+ telemetry: TelemetrySink;
7
+ dir: string | undefined;
8
+ enabled: boolean;
9
+ };
1
10
  export declare function runStdio(): Promise<void>;
2
11
  //# sourceMappingURL=stdio.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../src/cli/stdio.ts"],"names":[],"mappings":"AAqDA,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CA0G9C"}
1
+ {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../src/cli/stdio.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAMxC,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,0BAA0B,CAAC;AAmBlC,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAc5E,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,GAAiB,GAAG;IACxD,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,aAAa,CAAC;IACzB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;CAClB,CAYA;AAED,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAiN9C"}
package/dist/cli/stdio.js CHANGED
@@ -27,8 +27,14 @@ import { homedir } from 'node:os';
27
27
  import { join as joinPath } from 'node:path';
28
28
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
29
29
  import { loadNodeAssets } from '../assets/load-node.js';
30
+ import { diagnosticsFileEnabled, resolveDiagnosticsDir, resolveMaxStdioEngines } from '../config.js';
31
+ import { NOOP_DIAGNOSTICS_SINK } from '../diagnostics/events.js';
32
+ import { FileDiagnosticsSink } from '../diagnostics/file-sink.js';
33
+ import { toolCallSink } from '../diagnostics/tool-call-adapter.js';
30
34
  import { ensureEngineAssetSources } from '../engine/asset-sources.js';
31
35
  import { cesdkAdapter } from '../engine/cesdk-adapter.js';
36
+ import { wrapEngineCapacity } from '../engine/engine-capacity.js';
37
+ import { createSlotGatedEngine } from '../engine/engine-slots.js';
32
38
  import { Mutex } from '../engine/mutex.js';
33
39
  import { EngineSession } from '../engine/session.js';
34
40
  import { registerUnsplashSource } from '../engine/unsplash-source.js';
@@ -36,25 +42,45 @@ import { registerWorkspaceUriResolver } from '../engine/uri-resolver.js';
36
42
  import { LocalGatewayClient } from '../gateway/local.js';
37
43
  import { RevisionStore } from '../revisions/store.js';
38
44
  import { createCodesignMcpServer } from '../server.js';
39
- import { ensureHeadlessEngine } from '../tools/engine.js';
45
+ import { disposeHeadlessEngine, ensureHeadlessEngine } from '../tools/engine.js';
40
46
  import { buildDesignToolRegistrations } from '../tools/index.js';
47
+ import { NOOP_TELEMETRY_SINK } from '../tools/spans.js';
41
48
  import { createViewerRouter, LocalViewerUrlBuilder, SseBroadcaster, startViewerListener } from '../viewer/index.js';
42
49
  import { NodeWorkspaceFS } from '../workspace/node-fs.js';
43
50
  import { redirectConsoleToStderr } from './redirect-console.js';
44
51
  import { resolveLicense } from './resolve-license.js';
45
52
  import { TRIAL_CESDK_LICENSE } from './trial-license.generated.js';
46
53
  const DEFAULT_WORKSPACE = joinPath(homedir(), '.codesign', 'workspace');
54
+ export function buildDiagnostics(env = process.env) {
55
+ if (!diagnosticsFileEnabled(env)) {
56
+ return {
57
+ diag: NOOP_DIAGNOSTICS_SINK,
58
+ telemetry: NOOP_TELEMETRY_SINK,
59
+ dir: undefined,
60
+ enabled: false
61
+ };
62
+ }
63
+ const dir = resolveDiagnosticsDir(env);
64
+ const sink = new FileDiagnosticsSink({ dir });
65
+ return { diag: sink, telemetry: toolCallSink(sink), dir, enabled: true };
66
+ }
47
67
  export async function runStdio() {
68
+ const { diag, telemetry, dir: diagnosticsDir, enabled: diagnosticsEnabled } = buildDiagnostics();
69
+ if (diagnosticsEnabled && diagnosticsDir) {
70
+ await FileDiagnosticsSink.pruneOnStartup({ dir: diagnosticsDir });
71
+ process.stderr.write(`codesign-mcp stdio: diagnostics logging to ${diagnosticsDir} — redacted, local-only; disable with IMGLY_DIAGNOSTICS_FILE=false\n`);
72
+ }
48
73
  // stdout is the JSON-RPC channel in stdio mode; keep engine console.* noise off it.
49
- redirectConsoleToStderr();
74
+ redirectConsoleToStderr((level, text) => diag.emit({ kind: 'engine_log', timestamp: Date.now(), level, text }));
50
75
  const license = resolveLicense(process.env, TRIAL_CESDK_LICENSE);
51
76
  if (!license) {
52
- process.stderr.write('codesign-mcp stdio: no CESDK_LICENSE set and no bundled trial license — set CESDK_LICENSE to a CE.SDK node license string.\n');
77
+ process.stderr.write('codesign-mcp stdio: no CESDK_LICENSE set and no bundled trial license — set CESDK_LICENSE (or IMGLY_CESDK_LICENSE) to a CE.SDK node license string.\n');
53
78
  process.exit(1);
54
79
  }
55
80
  // True when the license came from the bundled trial (no explicit env override).
56
81
  // Used only to turn an engine-init rejection into a trial-aware hint below.
57
- const usedTrial = !process.env.CESDK_LICENSE?.trim();
82
+ const usedTrial = !process.env.CESDK_LICENSE?.trim() &&
83
+ !process.env.IMGLY_CESDK_LICENSE?.trim();
58
84
  const workspaceRoot = process.env.CODESIGN_WORKSPACE ?? DEFAULT_WORKSPACE;
59
85
  const fs = new NodeWorkspaceFS(workspaceRoot);
60
86
  const store = new RevisionStore(fs);
@@ -76,22 +102,49 @@ export async function runStdio() {
76
102
  });
77
103
  const listener = await startViewerListener({ router: viewerRouter });
78
104
  process.stderr.write(`codesign-mcp stdio: viewer at ${listener.base}\n`);
105
+ diag.emit({
106
+ kind: 'lifecycle',
107
+ timestamp: Date.now(),
108
+ text: 'viewer_listening'
109
+ });
79
110
  const urlBuilder = new LocalViewerUrlBuilder({ base: listener.base });
80
- // Kick off the heavy engine bootstrap WITHOUT awaiting it see the file
81
- // header. server.connect() below answers the handshake while this runs.
82
- const enginePromise = bootstrapEngine({ license, urlBuilder, usedTrial });
83
- // Nothing awaits enginePromise until the first tool call. Attach a logger so a
84
- // background init failure surfaces on stderr instead of crashing the process
85
- // on an unhandled rejection; the awaiting tool call still sees the real error.
86
- void enginePromise.catch((err) => {
87
- process.stderr.write(`codesign-mcp stdio: engine initialization failed — ${err instanceof Error ? (err.stack ?? err.message) : String(err)}\n`);
111
+ // Engine boot is DEFERRED to the first engine-using tool call and gated by a
112
+ // machine-wide slot (CODE-59): idle panes hold no engine (~8-12 MB) and no
113
+ // slot; only real design work boots one, and at most IMGLY_MAX_STDIO_ENGINES
114
+ // engines run across all stdio processes at once. bootstrapEngine still runs
115
+ // OFF the handshake path it is just triggered lazily now, not eagerly.
116
+ // At capacity, get() throws EngineCapacityError, which wrapEngineCapacity
117
+ // (below) turns into an isError tool result.
118
+ const gatedEngine = createSlotGatedEngine({
119
+ max: resolveMaxStdioEngines(process.env),
120
+ boot: () => {
121
+ diag.emit({
122
+ kind: 'lifecycle',
123
+ timestamp: Date.now(),
124
+ text: 'engine_init_start'
125
+ });
126
+ const p = bootstrapEngine({ license, urlBuilder, usedTrial });
127
+ // Surface a background init failure on stderr + diagnostics. The awaiting
128
+ // tool call still sees the real error; this just avoids a silent gap.
129
+ void p.catch((err) => {
130
+ process.stderr.write(`codesign-mcp stdio: engine initialization failed — ${err instanceof Error ? (err.stack ?? err.message) : String(err)}\n`);
131
+ diag.emit({
132
+ kind: 'lifecycle',
133
+ timestamp: Date.now(),
134
+ text: 'engine_init_failed',
135
+ error: {
136
+ message: err instanceof Error ? err.message : String(err),
137
+ ...(err instanceof Error && err.stack ? { stack: err.stack } : {})
138
+ }
139
+ });
140
+ });
141
+ return p;
142
+ }
88
143
  });
89
- // size=1, single shared engine resolved lazily from enginePromise.
90
- // EngineSession only calls adapter.create() (awaiting the engine) on the first
91
- // edit, by which point the bootstrap is usually already settled.
144
+ // size=1, single shared engine resolved lazily (and slot-gated) on first edit.
92
145
  const session = new EngineSession({
93
146
  size: 1,
94
- adapter: cesdkAdapter(enginePromise)
147
+ adapter: cesdkAdapter(() => gatedEngine.get())
95
148
  });
96
149
  const renderThumbnail = async ({ engine: eng }) => {
97
150
  // Thumbnail = the scene's first page rendered to a 256-px webp. Best-effort.
@@ -113,22 +166,81 @@ export async function runStdio() {
113
166
  urlBuilder,
114
167
  allowOutPath: true,
115
168
  onLeafWritten: (e) => broadcaster.broadcast(e),
116
- renderThumbnail: renderThumbnail // adapter's E generic is `unknown`; cesdk engine type fits
117
- });
169
+ renderThumbnail: renderThumbnail, // adapter's E generic is `unknown`; cesdk engine type fits
170
+ telemetry
171
+ }).map(wrapEngineCapacity);
118
172
  const assets = loadNodeAssets();
119
173
  const server = createCodesignMcpServer({
120
174
  assets,
121
175
  tools
122
176
  });
123
177
  const transport = new StdioServerTransport();
124
- await server.connect(transport);
125
- const shutdown = async () => {
126
- await listener.close();
127
- await server.close();
178
+ let shuttingDown = false;
179
+ const shutdown = async (reason) => {
180
+ if (shuttingDown)
181
+ return; // idempotent — a signal and the transport close can race
182
+ shuttingDown = true;
183
+ diag.emit({
184
+ kind: 'lifecycle',
185
+ timestamp: Date.now(),
186
+ text: `shutdown:${reason}`
187
+ });
188
+ // Flush the breadcrumb NOW, before the slower teardown below. emit() is
189
+ // fire-and-forget, engine dispose can take seconds, and a client may SIGKILL
190
+ // after a short grace window — landing the event first lets it survive even
191
+ // if we're killed mid-teardown.
192
+ try {
193
+ await diag.flush?.();
194
+ }
195
+ catch {
196
+ // best-effort
197
+ }
198
+ try {
199
+ await listener.close();
200
+ }
201
+ catch {
202
+ // best-effort — keep tearing down
203
+ }
204
+ try {
205
+ await server.close();
206
+ }
207
+ catch {
208
+ // best-effort
209
+ }
210
+ // Release the CE.SDK engine (WASM/native runtime) deterministically instead
211
+ // of leaving it to process teardown. Best-effort: a dispose error must never
212
+ // block the exit below.
213
+ try {
214
+ await disposeHeadlessEngine();
215
+ }
216
+ catch (err) {
217
+ process.stderr.write(`codesign-mcp stdio: engine dispose failed — ${err instanceof Error ? err.message : String(err)}\n`);
218
+ }
219
+ // Release the machine-wide engine slot (CODE-59) so another session can boot.
220
+ // Clean path; SIGKILL is covered by PID-liveness reaping on the next acquire.
221
+ try {
222
+ await gatedEngine.release();
223
+ }
224
+ catch {
225
+ // best-effort — never block the exit
226
+ }
128
227
  process.exit(0);
129
228
  };
130
- process.on('SIGINT', () => void shutdown());
131
- process.on('SIGTERM', () => void shutdown());
229
+ // A client can disconnect by closing the stdio pipe (stdin EOF) WITHOUT a
230
+ // signal — e.g. an orphaned/crashed host. `StdioServerTransport` only listens
231
+ // for stdin `data`/`error`, never EOF, so it never surfaces that disconnect on
232
+ // its own; the viewer listener's open socket then keeps the event loop alive
233
+ // and the process lingers with the engine resident. So detect stdin EOF here
234
+ // and reap. Listeners are attached before connect() (which puts stdin into
235
+ // flowing mode) so we can't miss the `end`. `server.onclose` additionally
236
+ // covers a protocol-level close routed through transport.close().
237
+ server.onclose = () => void shutdown('server-close');
238
+ process.stdin.on('end', () => void shutdown('stdin-end'));
239
+ process.stdin.on('close', () => void shutdown('stdin-close'));
240
+ await server.connect(transport);
241
+ process.on('SIGINT', () => void shutdown('SIGINT'));
242
+ process.on('SIGTERM', () => void shutdown('SIGTERM'));
243
+ process.on('SIGHUP', () => void shutdown('SIGHUP'));
132
244
  }
133
245
  // Heavy engine bootstrap, run in the background by runStdio (off the MCP
134
246
  // handshake path). Resolves to a fully-wired engine: design-unit-patched (by