@imgly/codesign-mcp 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (973) hide show
  1. package/README.md +51 -1
  2. package/assets/docs/guide/SKILL.md +45 -53
  3. package/assets/docs/guide/animation/create/base.md +234 -243
  4. package/assets/docs/guide/animation/create/text.md +250 -231
  5. package/assets/docs/guide/animation/create.md +197 -231
  6. package/assets/docs/guide/animation/edit.md +196 -271
  7. package/assets/docs/guide/animation/types.md +182 -185
  8. package/assets/docs/guide/animation.md +9 -6
  9. package/assets/docs/guide/api/AssetAPI.md +7 -53
  10. package/assets/docs/guide/api/BlockAPI.md +725 -648
  11. package/assets/docs/guide/api/CreativeEngine.md +7 -16
  12. package/assets/docs/guide/api/EditorAPI.md +32 -93
  13. package/assets/docs/guide/api/EventAPI.md +1 -2
  14. package/assets/docs/guide/api/SceneAPI.md +47 -98
  15. package/assets/docs/guide/api/VariableAPI.md +1 -4
  16. package/assets/docs/guide/api/node/classes/assetapi.md +1090 -0
  17. package/assets/docs/guide/api/node/classes/blockapi.md +12965 -0
  18. package/assets/docs/guide/api/node/classes/creativeengine.md +319 -0
  19. package/assets/docs/guide/api/node/classes/editorapi.md +3417 -0
  20. package/assets/docs/guide/api/node/classes/engineactions.md +319 -0
  21. package/assets/docs/guide/api/node/classes/eventapi.md +56 -0
  22. package/assets/docs/guide/api/node/classes/sceneapi.md +1370 -0
  23. package/assets/docs/guide/api/node/classes/variableapi.md +143 -0
  24. package/assets/docs/guide/api/node/enumerations/compressionformat.md +23 -0
  25. package/assets/docs/guide/api/node/enumerations/compressionlevel.md +24 -0
  26. package/assets/docs/guide/api/node/functions/iscmykcolor.md +30 -0
  27. package/assets/docs/guide/api/node/functions/isrgbacolor.md +30 -0
  28. package/assets/docs/guide/api/node/functions/isspotcolor.md +30 -0
  29. package/assets/docs/guide/api/node/interfaces/addvideooptions.md +31 -0
  30. package/assets/docs/guide/api/node/interfaces/applyassetoptions.md +31 -0
  31. package/assets/docs/guide/api/node/interfaces/asset.md +30 -0
  32. package/assets/docs/guide/api/node/interfaces/assetbooleanproperty.md +25 -0
  33. package/assets/docs/guide/api/node/interfaces/assetcmykcolor.md +26 -0
  34. package/assets/docs/guide/api/node/interfaces/assetcolorproperty.md +25 -0
  35. package/assets/docs/guide/api/node/interfaces/assetcontentaspectratio.md +23 -0
  36. package/assets/docs/guide/api/node/interfaces/assetdefinition.md +31 -0
  37. package/assets/docs/guide/api/node/interfaces/assetenumproperty.md +26 -0
  38. package/assets/docs/guide/api/node/interfaces/assetfixedaspectratio.md +24 -0
  39. package/assets/docs/guide/api/node/interfaces/assetfixedsize.md +25 -0
  40. package/assets/docs/guide/api/node/interfaces/assetfreeaspectratio.md +22 -0
  41. package/assets/docs/guide/api/node/interfaces/assetnumberproperty.md +28 -0
  42. package/assets/docs/guide/api/node/interfaces/assetpayload.md +27 -0
  43. package/assets/docs/guide/api/node/interfaces/assetquerydata.md +32 -0
  44. package/assets/docs/guide/api/node/interfaces/assetresult.md +46 -0
  45. package/assets/docs/guide/api/node/interfaces/assetrgbcolor.md +25 -0
  46. package/assets/docs/guide/api/node/interfaces/assetsource.md +111 -0
  47. package/assets/docs/guide/api/node/interfaces/assetspotcolor.md +25 -0
  48. package/assets/docs/guide/api/node/interfaces/assetsqueryresult.md +31 -0
  49. package/assets/docs/guide/api/node/interfaces/assetstringproperty.md +25 -0
  50. package/assets/docs/guide/api/node/interfaces/assetstylepreset.md +39 -0
  51. package/assets/docs/guide/api/node/interfaces/assetstylepresetanimation.md +23 -0
  52. package/assets/docs/guide/api/node/interfaces/audiotrackinfo.md +32 -0
  53. package/assets/docs/guide/api/node/interfaces/blockevent.md +26 -0
  54. package/assets/docs/guide/api/node/interfaces/blockstateerror.md +26 -0
  55. package/assets/docs/guide/api/node/interfaces/blockstatepending.md +26 -0
  56. package/assets/docs/guide/api/node/interfaces/blockstateready.md +25 -0
  57. package/assets/docs/guide/api/node/interfaces/buffer.md +26 -0
  58. package/assets/docs/guide/api/node/interfaces/characterinkbox.md +29 -0
  59. package/assets/docs/guide/api/node/interfaces/cmykcolor.md +34 -0
  60. package/assets/docs/guide/api/node/interfaces/completeassetresult.md +46 -0
  61. package/assets/docs/guide/api/node/interfaces/configuration.md +38 -0
  62. package/assets/docs/guide/api/node/interfaces/dominantcolor.md +25 -0
  63. package/assets/docs/guide/api/node/interfaces/dominantcolorsoptions.md +23 -0
  64. package/assets/docs/guide/api/node/interfaces/engineactioninfo.md +24 -0
  65. package/assets/docs/guide/api/node/interfaces/engineactionsregistry.md +18 -0
  66. package/assets/docs/guide/api/node/interfaces/engineplugin.md +30 -0
  67. package/assets/docs/guide/api/node/interfaces/font.md +27 -0
  68. package/assets/docs/guide/api/node/interfaces/fontmetrics.md +32 -0
  69. package/assets/docs/guide/api/node/interfaces/gradientcolorstop.md +28 -0
  70. package/assets/docs/guide/api/node/interfaces/logger.md +39 -0
  71. package/assets/docs/guide/api/node/interfaces/pageduration.md +23 -0
  72. package/assets/docs/guide/api/node/interfaces/range.md +23 -0
  73. package/assets/docs/guide/api/node/interfaces/rgbacolor.md +32 -0
  74. package/assets/docs/guide/api/node/interfaces/rgbcolor.md +30 -0
  75. package/assets/docs/guide/api/node/interfaces/settings.md +126 -0
  76. package/assets/docs/guide/api/node/interfaces/size2.md +21 -0
  77. package/assets/docs/guide/api/node/interfaces/source.md +24 -0
  78. package/assets/docs/guide/api/node/interfaces/spotcolor.md +30 -0
  79. package/assets/docs/guide/api/node/interfaces/textdecorationconfig.md +31 -0
  80. package/assets/docs/guide/api/node/interfaces/textfontsizeoptions.md +24 -0
  81. package/assets/docs/guide/api/node/interfaces/textruninfo.md +33 -0
  82. package/assets/docs/guide/api/node/interfaces/transientresource.md +26 -0
  83. package/assets/docs/guide/api/node/interfaces/typeface.md +23 -0
  84. package/assets/docs/guide/api/node/interfaces/vec2.md +21 -0
  85. package/assets/docs/guide/api/node/interfaces/vec3.md +22 -0
  86. package/assets/docs/guide/api/node/type-aliases/addimageoptions.md +36 -0
  87. package/assets/docs/guide/api/node/type-aliases/animationbaselinedirection.md +18 -0
  88. package/assets/docs/guide/api/node/type-aliases/animationblockswipetextdirection.md +18 -0
  89. package/assets/docs/guide/api/node/type-aliases/animationeasing.md +18 -0
  90. package/assets/docs/guide/api/node/type-aliases/animationentry.md +28 -0
  91. package/assets/docs/guide/api/node/type-aliases/animationgrowdirection.md +18 -0
  92. package/assets/docs/guide/api/node/type-aliases/animationjumploopdirection.md +18 -0
  93. package/assets/docs/guide/api/node/type-aliases/animationkenburnsdirection.md +18 -0
  94. package/assets/docs/guide/api/node/type-aliases/animationmergetextdirection.md +18 -0
  95. package/assets/docs/guide/api/node/type-aliases/animationoptions.md +28 -0
  96. package/assets/docs/guide/api/node/type-aliases/animationspindirection.md +18 -0
  97. package/assets/docs/guide/api/node/type-aliases/animationspinloopdirection.md +18 -0
  98. package/assets/docs/guide/api/node/type-aliases/animationtype.md +24 -0
  99. package/assets/docs/guide/api/node/type-aliases/animationtypelonghand.md +21 -0
  100. package/assets/docs/guide/api/node/type-aliases/animationtypeshorthand.md +18 -0
  101. package/assets/docs/guide/api/node/type-aliases/animationtypewritertextwritingstyle.md +18 -0
  102. package/assets/docs/guide/api/node/type-aliases/animationwipedirection.md +18 -0
  103. package/assets/docs/guide/api/node/type-aliases/applicationmimetype.md +20 -0
  104. package/assets/docs/guide/api/node/type-aliases/assetcolor.md +23 -0
  105. package/assets/docs/guide/api/node/type-aliases/assetfilter.md +47 -0
  106. package/assets/docs/guide/api/node/type-aliases/assetgroups.md +25 -0
  107. package/assets/docs/guide/api/node/type-aliases/assetmetadata.md +42 -0
  108. package/assets/docs/guide/api/node/type-aliases/assetproperty.md +25 -0
  109. package/assets/docs/guide/api/node/type-aliases/assetpropertyfilter.md +41 -0
  110. package/assets/docs/guide/api/node/type-aliases/assetpropertypath.md +26 -0
  111. package/assets/docs/guide/api/node/type-aliases/assetstylepresetanimationproperties.md +34 -0
  112. package/assets/docs/guide/api/node/type-aliases/assetstylepresetproperties.md +29 -0
  113. package/assets/docs/guide/api/node/type-aliases/assetstylepresetpropertyvalue.md +29 -0
  114. package/assets/docs/guide/api/node/type-aliases/assetstylepresetscalableproperty.md +28 -0
  115. package/assets/docs/guide/api/node/type-aliases/assettransformpreset.md +24 -0
  116. package/assets/docs/guide/api/node/type-aliases/asyncuriresolver.md +36 -0
  117. package/assets/docs/guide/api/node/type-aliases/audioexportoptions.md +43 -0
  118. package/assets/docs/guide/api/node/type-aliases/audiofromvideooptions.md +27 -0
  119. package/assets/docs/guide/api/node/type-aliases/audiomimetype.md +20 -0
  120. package/assets/docs/guide/api/node/type-aliases/blendmode.md +18 -0
  121. package/assets/docs/guide/api/node/type-aliases/blockenumtype.md +63 -0
  122. package/assets/docs/guide/api/node/type-aliases/blockstate.md +26 -0
  123. package/assets/docs/guide/api/node/type-aliases/blurtype.md +24 -0
  124. package/assets/docs/guide/api/node/type-aliases/blurtypelonghand.md +21 -0
  125. package/assets/docs/guide/api/node/type-aliases/blurtypeshorthand.md +18 -0
  126. package/assets/docs/guide/api/node/type-aliases/booleanoperation.md +27 -0
  127. package/assets/docs/guide/api/node/type-aliases/boolpropertyname.md +79 -0
  128. package/assets/docs/guide/api/node/type-aliases/cameraclampingovershootmode.md +18 -0
  129. package/assets/docs/guide/api/node/type-aliases/captionhorizontalalignment.md +18 -0
  130. package/assets/docs/guide/api/node/type-aliases/captionverticalalignment.md +18 -0
  131. package/assets/docs/guide/api/node/type-aliases/cmyk.md +23 -0
  132. package/assets/docs/guide/api/node/type-aliases/color.md +23 -0
  133. package/assets/docs/guide/api/node/type-aliases/colorpickercolormode.md +18 -0
  134. package/assets/docs/guide/api/node/type-aliases/colorpropertyname.md +31 -0
  135. package/assets/docs/guide/api/node/type-aliases/colorspace.md +20 -0
  136. package/assets/docs/guide/api/node/type-aliases/contentfillmode.md +18 -0
  137. package/assets/docs/guide/api/node/type-aliases/controlgizmomovehandlevisibility.md +18 -0
  138. package/assets/docs/guide/api/node/type-aliases/controlgizmoresizehandlesvisibility.md +18 -0
  139. package/assets/docs/guide/api/node/type-aliases/controlgizmorotatehandlesvisibility.md +18 -0
  140. package/assets/docs/guide/api/node/type-aliases/controlgizmoscalehandlesvisibility.md +18 -0
  141. package/assets/docs/guide/api/node/type-aliases/createsceneoptions.md +30 -0
  142. package/assets/docs/guide/api/node/type-aliases/cutoutoperation.md +20 -0
  143. package/assets/docs/guide/api/node/type-aliases/cutouttype.md +18 -0
  144. package/assets/docs/guide/api/node/type-aliases/defaultassetsourceid.md +37 -0
  145. package/assets/docs/guide/api/node/type-aliases/demoassetsourceid.md +33 -0
  146. package/assets/docs/guide/api/node/type-aliases/designblockid.md +20 -0
  147. package/assets/docs/guide/api/node/type-aliases/designblocktype.md +24 -0
  148. package/assets/docs/guide/api/node/type-aliases/designblocktypelonghand.md +21 -0
  149. package/assets/docs/guide/api/node/type-aliases/designblocktypeshorthand.md +18 -0
  150. package/assets/docs/guide/api/node/type-aliases/designunit.md +18 -0
  151. package/assets/docs/guide/api/node/type-aliases/doubleclickselectionmode.md +18 -0
  152. package/assets/docs/guide/api/node/type-aliases/doublepropertyname.md +26 -0
  153. package/assets/docs/guide/api/node/type-aliases/dropshadowoptions.md +32 -0
  154. package/assets/docs/guide/api/node/type-aliases/editmode.md +27 -0
  155. package/assets/docs/guide/api/node/type-aliases/effecttype.md +24 -0
  156. package/assets/docs/guide/api/node/type-aliases/effecttypelonghand.md +21 -0
  157. package/assets/docs/guide/api/node/type-aliases/effecttypeshorthand.md +18 -0
  158. package/assets/docs/guide/api/node/type-aliases/engineactionid.md +20 -0
  159. package/assets/docs/guide/api/node/type-aliases/enginecustomactionfunction.md +30 -0
  160. package/assets/docs/guide/api/node/type-aliases/engineplugincontext.md +30 -0
  161. package/assets/docs/guide/api/node/type-aliases/enumpropertyname.md +59 -0
  162. package/assets/docs/guide/api/node/type-aliases/enumvalues.md +59 -0
  163. package/assets/docs/guide/api/node/type-aliases/exportoptions.md +57 -0
  164. package/assets/docs/guide/api/node/type-aliases/fillpixelstreamorientation.md +18 -0
  165. package/assets/docs/guide/api/node/type-aliases/filltype.md +24 -0
  166. package/assets/docs/guide/api/node/type-aliases/filltypelonghand.md +21 -0
  167. package/assets/docs/guide/api/node/type-aliases/filltypeshorthand.md +18 -0
  168. package/assets/docs/guide/api/node/type-aliases/floatpropertyname.md +184 -0
  169. package/assets/docs/guide/api/node/type-aliases/fontsizeunit.md +23 -0
  170. package/assets/docs/guide/api/node/type-aliases/fontstyle.md +20 -0
  171. package/assets/docs/guide/api/node/type-aliases/fontweight.md +30 -0
  172. package/assets/docs/guide/api/node/type-aliases/gradientstoprgba.md +23 -0
  173. package/assets/docs/guide/api/node/type-aliases/heightmode.md +18 -0
  174. package/assets/docs/guide/api/node/type-aliases/hexcolorstring.md +20 -0
  175. package/assets/docs/guide/api/node/type-aliases/historyid.md +20 -0
  176. package/assets/docs/guide/api/node/type-aliases/historyupdate.md +25 -0
  177. package/assets/docs/guide/api/node/type-aliases/horizontalblockalignment.md +18 -0
  178. package/assets/docs/guide/api/node/type-aliases/horizontalcontentfillalignment.md +18 -0
  179. package/assets/docs/guide/api/node/type-aliases/horizontaltextalignment.md +18 -0
  180. package/assets/docs/guide/api/node/type-aliases/imagemimetype.md +25 -0
  181. package/assets/docs/guide/api/node/type-aliases/intpropertyname.md +26 -0
  182. package/assets/docs/guide/api/node/type-aliases/liststyle.md +20 -0
  183. package/assets/docs/guide/api/node/type-aliases/locale.md +20 -0
  184. package/assets/docs/guide/api/node/type-aliases/loglevel.md +24 -0
  185. package/assets/docs/guide/api/node/type-aliases/mimetype.md +20 -0
  186. package/assets/docs/guide/api/node/type-aliases/objecttype.md +24 -0
  187. package/assets/docs/guide/api/node/type-aliases/objecttypelonghand.md +27 -0
  188. package/assets/docs/guide/api/node/type-aliases/objecttypeshorthand.md +27 -0
  189. package/assets/docs/guide/api/node/type-aliases/optionalprefix.md +24 -0
  190. package/assets/docs/guide/api/node/type-aliases/pageguidessource.md +18 -0
  191. package/assets/docs/guide/api/node/type-aliases/palettecolor.md +24 -0
  192. package/assets/docs/guide/api/node/type-aliases/positionmode.md +20 -0
  193. package/assets/docs/guide/api/node/type-aliases/positionxmode.md +18 -0
  194. package/assets/docs/guide/api/node/type-aliases/positionymode.md +18 -0
  195. package/assets/docs/guide/api/node/type-aliases/propertytype.md +31 -0
  196. package/assets/docs/guide/api/node/type-aliases/rgba.md +23 -0
  197. package/assets/docs/guide/api/node/type-aliases/rolestring.md +23 -0
  198. package/assets/docs/guide/api/node/type-aliases/scenefontsizeunit.md +18 -0
  199. package/assets/docs/guide/api/node/type-aliases/scenelayout.md +18 -0
  200. package/assets/docs/guide/api/node/type-aliases/scenemode.md +18 -0
  201. package/assets/docs/guide/api/node/type-aliases/scope.md +50 -0
  202. package/assets/docs/guide/api/node/type-aliases/settingboolpropertyname.md +62 -0
  203. package/assets/docs/guide/api/node/type-aliases/settingcolorpropertyname.md +38 -0
  204. package/assets/docs/guide/api/node/type-aliases/settingenumpropertyname.md +29 -0
  205. package/assets/docs/guide/api/node/type-aliases/settingenumtype.md +33 -0
  206. package/assets/docs/guide/api/node/type-aliases/settingenumvalues.md +29 -0
  207. package/assets/docs/guide/api/node/type-aliases/settingfloatpropertyname.md +25 -0
  208. package/assets/docs/guide/api/node/type-aliases/settingintpropertyname.md +18 -0
  209. package/assets/docs/guide/api/node/type-aliases/settingkey.md +20 -0
  210. package/assets/docs/guide/api/node/type-aliases/settingsbool.md +18 -0
  211. package/assets/docs/guide/api/node/type-aliases/settingscolor.md +20 -0
  212. package/assets/docs/guide/api/node/type-aliases/settingscolorrgba.md +24 -0
  213. package/assets/docs/guide/api/node/type-aliases/settingsenum.md +18 -0
  214. package/assets/docs/guide/api/node/type-aliases/settingsfloat.md +18 -0
  215. package/assets/docs/guide/api/node/type-aliases/settingsint.md +18 -0
  216. package/assets/docs/guide/api/node/type-aliases/settingsstring.md +18 -0
  217. package/assets/docs/guide/api/node/type-aliases/settingstringpropertyname.md +28 -0
  218. package/assets/docs/guide/api/node/type-aliases/settingtype.md +20 -0
  219. package/assets/docs/guide/api/node/type-aliases/settingvaluetype.md +26 -0
  220. package/assets/docs/guide/api/node/type-aliases/shapetype.md +24 -0
  221. package/assets/docs/guide/api/node/type-aliases/shapetypelonghand.md +21 -0
  222. package/assets/docs/guide/api/node/type-aliases/shapetypeshorthand.md +18 -0
  223. package/assets/docs/guide/api/node/type-aliases/shapevectorpathfillrule.md +18 -0
  224. package/assets/docs/guide/api/node/type-aliases/sizemode.md +20 -0
  225. package/assets/docs/guide/api/node/type-aliases/sortingorder.md +21 -0
  226. package/assets/docs/guide/api/node/type-aliases/sourcesetpropertyname.md +18 -0
  227. package/assets/docs/guide/api/node/type-aliases/splitoptions.md +28 -0
  228. package/assets/docs/guide/api/node/type-aliases/stringpropertyname.md +43 -0
  229. package/assets/docs/guide/api/node/type-aliases/strokecap.md +18 -0
  230. package/assets/docs/guide/api/node/type-aliases/strokecornergeometry.md +18 -0
  231. package/assets/docs/guide/api/node/type-aliases/strokedashendcap.md +18 -0
  232. package/assets/docs/guide/api/node/type-aliases/strokedashstartcap.md +18 -0
  233. package/assets/docs/guide/api/node/type-aliases/strokeendcap.md +18 -0
  234. package/assets/docs/guide/api/node/type-aliases/strokeposition.md +18 -0
  235. package/assets/docs/guide/api/node/type-aliases/strokestartcap.md +18 -0
  236. package/assets/docs/guide/api/node/type-aliases/strokestyle.md +18 -0
  237. package/assets/docs/guide/api/node/type-aliases/syncuriresolver.md +31 -0
  238. package/assets/docs/guide/api/node/type-aliases/textanimationwritingstyle.md +18 -0
  239. package/assets/docs/guide/api/node/type-aliases/textcase.md +20 -0
  240. package/assets/docs/guide/api/node/type-aliases/textdecorationline.md +27 -0
  241. package/assets/docs/guide/api/node/type-aliases/textdecorationstyle.md +26 -0
  242. package/assets/docs/guide/api/node/type-aliases/textverticalalignment.md +18 -0
  243. package/assets/docs/guide/api/node/type-aliases/timelinetrackvisibility.md +18 -0
  244. package/assets/docs/guide/api/node/type-aliases/touchpinchaction.md +18 -0
  245. package/assets/docs/guide/api/node/type-aliases/touchrotateaction.md +18 -0
  246. package/assets/docs/guide/api/node/type-aliases/typefacedefinition.md +41 -0
  247. package/assets/docs/guide/api/node/type-aliases/verticalblockalignment.md +18 -0
  248. package/assets/docs/guide/api/node/type-aliases/verticalcontentfillalignment.md +18 -0
  249. package/assets/docs/guide/api/node/type-aliases/videoexportoptions.md +54 -0
  250. package/assets/docs/guide/api/node/type-aliases/videomimetype.md +20 -0
  251. package/assets/docs/guide/api/node/type-aliases/widthmode.md +18 -0
  252. package/assets/docs/guide/api/node/type-aliases/xywh.md +23 -0
  253. package/assets/docs/guide/api/node/type-aliases/zoomautofitaxis.md +20 -0
  254. package/assets/docs/guide/api/node/type-aliases/zoomoptions.md +27 -0
  255. package/assets/docs/guide/api/node/variables/animation_types.md +21 -0
  256. package/assets/docs/guide/api/node/variables/animationbaselinedirectionvalues.md +18 -0
  257. package/assets/docs/guide/api/node/variables/animationblockswipetextdirectionvalues.md +18 -0
  258. package/assets/docs/guide/api/node/variables/animationeasingvalues.md +18 -0
  259. package/assets/docs/guide/api/node/variables/animationgrowdirectionvalues.md +18 -0
  260. package/assets/docs/guide/api/node/variables/animationjumploopdirectionvalues.md +18 -0
  261. package/assets/docs/guide/api/node/variables/animationkenburnsdirectionvalues.md +18 -0
  262. package/assets/docs/guide/api/node/variables/animationmergetextdirectionvalues.md +18 -0
  263. package/assets/docs/guide/api/node/variables/animationspindirectionvalues.md +18 -0
  264. package/assets/docs/guide/api/node/variables/animationspinloopdirectionvalues.md +18 -0
  265. package/assets/docs/guide/api/node/variables/animationtypewritertextwritingstylevalues.md +18 -0
  266. package/assets/docs/guide/api/node/variables/animationwipedirectionvalues.md +18 -0
  267. package/assets/docs/guide/api/node/variables/blendmodevalues.md +18 -0
  268. package/assets/docs/guide/api/node/variables/blur_types.md +21 -0
  269. package/assets/docs/guide/api/node/variables/cameraclampingovershootmodevalues.md +18 -0
  270. package/assets/docs/guide/api/node/variables/captionhorizontalalignmentvalues.md +18 -0
  271. package/assets/docs/guide/api/node/variables/captionverticalalignmentvalues.md +18 -0
  272. package/assets/docs/guide/api/node/variables/colorpickercolormodevalues.md +18 -0
  273. package/assets/docs/guide/api/node/variables/contentfillmodevalues.md +18 -0
  274. package/assets/docs/guide/api/node/variables/controlgizmomovehandlevisibilityvalues.md +18 -0
  275. package/assets/docs/guide/api/node/variables/controlgizmoresizehandlesvisibilityvalues.md +18 -0
  276. package/assets/docs/guide/api/node/variables/controlgizmorotatehandlesvisibilityvalues.md +18 -0
  277. package/assets/docs/guide/api/node/variables/controlgizmoscalehandlesvisibilityvalues.md +18 -0
  278. package/assets/docs/guide/api/node/variables/cutouttypevalues.md +18 -0
  279. package/assets/docs/guide/api/node/variables/design_block_types.md +21 -0
  280. package/assets/docs/guide/api/node/variables/doubleclickselectionmodevalues.md +18 -0
  281. package/assets/docs/guide/api/node/variables/effect_types.md +21 -0
  282. package/assets/docs/guide/api/node/variables/fill_types.md +21 -0
  283. package/assets/docs/guide/api/node/variables/fillpixelstreamorientationvalues.md +18 -0
  284. package/assets/docs/guide/api/node/variables/heightmodevalues.md +18 -0
  285. package/assets/docs/guide/api/node/variables/horizontalcontentfillalignmentvalues.md +18 -0
  286. package/assets/docs/guide/api/node/variables/loglevel.md +37 -0
  287. package/assets/docs/guide/api/node/variables/mimetype.md +41 -0
  288. package/assets/docs/guide/api/node/variables/pageguidessourcevalues.md +18 -0
  289. package/assets/docs/guide/api/node/variables/positionxmodevalues.md +18 -0
  290. package/assets/docs/guide/api/node/variables/positionymodevalues.md +18 -0
  291. package/assets/docs/guide/api/node/variables/scenedesignunitvalues.md +18 -0
  292. package/assets/docs/guide/api/node/variables/scenefontsizeunitvalues.md +18 -0
  293. package/assets/docs/guide/api/node/variables/scenelayoutvalues.md +18 -0
  294. package/assets/docs/guide/api/node/variables/scenemodevalues.md +18 -0
  295. package/assets/docs/guide/api/node/variables/shape_types.md +21 -0
  296. package/assets/docs/guide/api/node/variables/shapevectorpathfillrulevalues.md +18 -0
  297. package/assets/docs/guide/api/node/variables/strokecapvalues.md +18 -0
  298. package/assets/docs/guide/api/node/variables/strokecornergeometryvalues.md +18 -0
  299. package/assets/docs/guide/api/node/variables/strokedashendcapvalues.md +18 -0
  300. package/assets/docs/guide/api/node/variables/strokedashstartcapvalues.md +18 -0
  301. package/assets/docs/guide/api/node/variables/strokeendcapvalues.md +18 -0
  302. package/assets/docs/guide/api/node/variables/strokepositionvalues.md +18 -0
  303. package/assets/docs/guide/api/node/variables/strokestartcapvalues.md +18 -0
  304. package/assets/docs/guide/api/node/variables/strokestylevalues.md +18 -0
  305. package/assets/docs/guide/api/node/variables/textanimationwritingstylevalues.md +18 -0
  306. package/assets/docs/guide/api/node/variables/texthorizontalalignmentvalues.md +18 -0
  307. package/assets/docs/guide/api/node/variables/textverticalalignmentvalues.md +18 -0
  308. package/assets/docs/guide/api/node/variables/timelinetrackvisibilityvalues.md +18 -0
  309. package/assets/docs/guide/api/node/variables/touchpinchactionvalues.md +18 -0
  310. package/assets/docs/guide/api/node/variables/touchrotateactionvalues.md +18 -0
  311. package/assets/docs/guide/api/node/variables/verticalcontentfillalignmentvalues.md +18 -0
  312. package/assets/docs/guide/api/node/variables/widthmodevalues.md +18 -0
  313. package/assets/docs/guide/api/types.md +5 -9
  314. package/assets/docs/guide/api-reference/overview.md +7 -7
  315. package/assets/docs/guide/automation/auto-resize.md +263 -300
  316. package/assets/docs/guide/automation/data-merge.md +246 -275
  317. package/assets/docs/guide/automation/design-generation.md +102 -31
  318. package/assets/docs/guide/automation/multi-image-generation.md +758 -0
  319. package/assets/docs/guide/automation/overview.md +21 -4
  320. package/assets/docs/guide/automation.md +10 -5
  321. package/assets/docs/guide/capabilities.md +6 -4
  322. package/assets/docs/guide/colors/adjust.md +247 -249
  323. package/assets/docs/guide/colors/apply.md +127 -138
  324. package/assets/docs/guide/colors/basics.md +126 -150
  325. package/assets/docs/guide/colors/conversion.md +171 -177
  326. package/assets/docs/guide/colors/create-color-palette.md +244 -245
  327. package/assets/docs/guide/colors/extract-colors.md +144 -0
  328. package/assets/docs/guide/colors/for-print/cmyk.md +292 -352
  329. package/assets/docs/guide/colors/for-print/spot.md +521 -578
  330. package/assets/docs/guide/colors/for-print.md +9 -4
  331. package/assets/docs/guide/colors/for-screen/p3.md +12 -10
  332. package/assets/docs/guide/colors/for-screen/srgb.md +107 -133
  333. package/assets/docs/guide/colors/for-screen.md +9 -4
  334. package/assets/docs/guide/colors/overview.md +6 -4
  335. package/assets/docs/guide/colors/replace.md +381 -419
  336. package/assets/docs/guide/colors.md +9 -4
  337. package/assets/docs/guide/compatibility.md +7 -5
  338. package/assets/docs/guide/concepts/architecture.md +17 -15
  339. package/assets/docs/guide/concepts/assets.md +152 -140
  340. package/assets/docs/guide/concepts/blocks.md +227 -323
  341. package/assets/docs/guide/concepts/buffers.md +147 -276
  342. package/assets/docs/guide/concepts/design-units.md +95 -145
  343. package/assets/docs/guide/concepts/editing-workflow.md +69 -183
  344. package/assets/docs/guide/concepts/events.md +80 -122
  345. package/assets/docs/guide/concepts/headless-mode.md +237 -0
  346. package/assets/docs/guide/concepts/pages.md +137 -127
  347. package/assets/docs/guide/concepts/resources.md +156 -217
  348. package/assets/docs/guide/concepts/scenes.md +191 -210
  349. package/assets/docs/guide/concepts/templating.md +118 -74
  350. package/assets/docs/guide/concepts/terminology.md +49 -47
  351. package/assets/docs/guide/concepts/undo-and-history.md +229 -303
  352. package/assets/docs/guide/concepts.md +9 -7
  353. package/assets/docs/guide/configuration.md +252 -380
  354. package/assets/docs/guide/conversion/overview.md +33 -4
  355. package/assets/docs/guide/conversion/to-base64.md +127 -167
  356. package/assets/docs/guide/conversion/to-pdf.md +24 -474
  357. package/assets/docs/guide/conversion/to-png.md +168 -211
  358. package/assets/docs/guide/conversion.md +9 -4
  359. package/assets/docs/guide/create-audio/audio/add-music.md +301 -327
  360. package/assets/docs/guide/create-audio/audio/add-sound-effects.md +475 -359
  361. package/assets/docs/guide/create-audio/audio/loop.md +232 -272
  362. package/assets/docs/guide/create-composition/add-background.md +237 -239
  363. package/assets/docs/guide/create-composition/blend-modes.md +118 -209
  364. package/assets/docs/guide/create-composition/collage.md +538 -320
  365. package/assets/docs/guide/create-composition/group-and-ungroup.md +216 -261
  366. package/assets/docs/guide/create-composition/layer-management.md +219 -257
  367. package/assets/docs/guide/create-composition/layout.md +513 -315
  368. package/assets/docs/guide/create-composition/lock-design.md +90 -109
  369. package/assets/docs/guide/create-composition/multi-page.md +133 -113
  370. package/assets/docs/guide/create-composition/overview.md +16 -4
  371. package/assets/docs/guide/create-composition/programmatic.md +288 -344
  372. package/assets/docs/guide/create-composition.md +10 -5
  373. package/assets/docs/guide/create-templates/add-dynamic-content/placeholders.md +443 -569
  374. package/assets/docs/guide/create-templates/add-dynamic-content/set-editing-constraints.md +567 -470
  375. package/assets/docs/guide/create-templates/add-dynamic-content/text-variables.md +179 -516
  376. package/assets/docs/guide/create-templates/add-dynamic-content.md +226 -224
  377. package/assets/docs/guide/create-templates/add-to-template-library.md +183 -193
  378. package/assets/docs/guide/create-templates/edit-or-remove.md +297 -303
  379. package/assets/docs/guide/create-templates/from-scratch.md +207 -268
  380. package/assets/docs/guide/create-templates/import/from-scene-file.md +158 -236
  381. package/assets/docs/guide/create-templates/import.md +145 -161
  382. package/assets/docs/guide/create-templates/lock.md +42 -295
  383. package/assets/docs/guide/create-templates/overview.md +33 -4
  384. package/assets/docs/guide/create-templates.md +9 -5
  385. package/assets/docs/guide/create-video/audio/adjust-speed.md +157 -207
  386. package/assets/docs/guide/create-video/audio/adjust-volume.md +116 -227
  387. package/assets/docs/guide/create-video/control.md +352 -193
  388. package/assets/docs/guide/create-video/limitations.md +175 -280
  389. package/assets/docs/guide/create-video.md +11 -10
  390. package/assets/docs/guide/edit-image/add-watermark.md +283 -330
  391. package/assets/docs/guide/edit-image/overview.md +29 -4
  392. package/assets/docs/guide/edit-image/remove-bg.md +283 -337
  393. package/assets/docs/guide/edit-image/replace-colors.md +424 -502
  394. package/assets/docs/guide/edit-image/transform/crop.md +463 -402
  395. package/assets/docs/guide/edit-image/transform/flip.md +353 -0
  396. package/assets/docs/guide/edit-image/transform/move.md +143 -100
  397. package/assets/docs/guide/edit-image/transform/resize.md +118 -88
  398. package/assets/docs/guide/edit-image/transform/rotate.md +132 -165
  399. package/assets/docs/guide/edit-image/transform/scale.md +230 -228
  400. package/assets/docs/guide/edit-image/transform.md +10 -5
  401. package/assets/docs/guide/edit-image.md +11 -7
  402. package/assets/docs/guide/edit-video/add-captions.md +344 -421
  403. package/assets/docs/guide/edit-video/add-watermark.md +312 -258
  404. package/assets/docs/guide/edit-video/join-and-arrange.md +237 -371
  405. package/assets/docs/guide/edit-video/redaction.md +419 -385
  406. package/assets/docs/guide/edit-video/split.md +243 -493
  407. package/assets/docs/guide/edit-video/transform/crop.md +21 -352
  408. package/assets/docs/guide/edit-video/transform/flip.md +102 -76
  409. package/assets/docs/guide/edit-video/transform/move.md +258 -310
  410. package/assets/docs/guide/edit-video/transform/resize.md +264 -428
  411. package/assets/docs/guide/edit-video/transform/rotate.md +265 -228
  412. package/assets/docs/guide/edit-video/transform/scale.md +320 -417
  413. package/assets/docs/guide/edit-video/transform.md +10 -6
  414. package/assets/docs/guide/edit-video/trim.md +448 -494
  415. package/assets/docs/guide/engine-interface.md +51 -62
  416. package/assets/docs/guide/export-save-publish/create-thumbnail.md +148 -184
  417. package/assets/docs/guide/export-save-publish/export/compress.md +161 -559
  418. package/assets/docs/guide/export-save-publish/export/overview.md +224 -373
  419. package/assets/docs/guide/export-save-publish/export/partial-export.md +386 -577
  420. package/assets/docs/guide/export-save-publish/export/size-limits.md +215 -310
  421. package/assets/docs/guide/export-save-publish/export/to-jpeg.md +132 -213
  422. package/assets/docs/guide/export-save-publish/export/to-pdf.md +139 -267
  423. package/assets/docs/guide/export-save-publish/export/to-png.md +121 -165
  424. package/assets/docs/guide/export-save-publish/export/to-raw-data.md +187 -234
  425. package/assets/docs/guide/export-save-publish/export/to-webp.md +160 -190
  426. package/assets/docs/guide/export-save-publish/export/with-color-mask.md +359 -203
  427. package/assets/docs/guide/export-save-publish/export.md +14 -11
  428. package/assets/docs/guide/export-save-publish/for-printing.md +141 -237
  429. package/assets/docs/guide/export-save-publish/for-social-media.md +124 -261
  430. package/assets/docs/guide/export-save-publish/pre-export-validation.md +436 -522
  431. package/assets/docs/guide/export-save-publish/save.md +167 -226
  432. package/assets/docs/guide/export-save-publish/store-custom-metadata.md +97 -162
  433. package/assets/docs/guide/file-format-support.md +9 -9
  434. package/assets/docs/guide/fills/color.md +370 -347
  435. package/assets/docs/guide/fills/image.md +167 -196
  436. package/assets/docs/guide/fills/overview.md +6 -4
  437. package/assets/docs/guide/fills/video.md +286 -438
  438. package/assets/docs/guide/fills.md +12 -8
  439. package/assets/docs/guide/filters-and-effects/apply.md +598 -664
  440. package/assets/docs/guide/filters-and-effects/blur.md +261 -159
  441. package/assets/docs/guide/filters-and-effects/chroma-key-green-screen.md +194 -293
  442. package/assets/docs/guide/filters-and-effects/create-custom-filters.md +548 -466
  443. package/assets/docs/guide/filters-and-effects/create-custom-lut-filter.md +176 -244
  444. package/assets/docs/guide/filters-and-effects/distortion.md +317 -384
  445. package/assets/docs/guide/filters-and-effects/duotone.md +221 -217
  446. package/assets/docs/guide/filters-and-effects/gradients.md +670 -813
  447. package/assets/docs/guide/filters-and-effects/overview.md +7 -7
  448. package/assets/docs/guide/filters-and-effects/support.md +97 -132
  449. package/assets/docs/guide/filters-and-effects.md +11 -6
  450. package/assets/docs/guide/get-started/agent-skills.md +20 -18
  451. package/assets/docs/guide/get-started/build-with-ai.md +7 -4
  452. package/assets/docs/guide/get-started/bun.md +219 -0
  453. package/assets/docs/guide/get-started/deno.md +161 -0
  454. package/assets/docs/guide/get-started/mcp-server.md +6 -4
  455. package/assets/docs/guide/get-started/overview.md +11 -6
  456. package/assets/docs/guide/get-started/vanilla-aws-lambda.md +506 -0
  457. package/assets/docs/guide/get-started/vanilla-clone-github-project.md +124 -0
  458. package/assets/docs/guide/get-started/vanilla.md +235 -0
  459. package/assets/docs/guide/guides/export-save-publish/export/audio.md +80 -66
  460. package/assets/docs/guide/guides.md +10 -9
  461. package/assets/docs/guide/import-media/asset-panel/refresh-assets.md +259 -288
  462. package/assets/docs/guide/import-media/concepts.md +20 -38
  463. package/assets/docs/guide/import-media/content-json-schema.md +145 -125
  464. package/assets/docs/guide/import-media/default-assets.md +113 -161
  465. package/assets/docs/guide/import-media/edit-or-remove-assets.md +391 -395
  466. package/assets/docs/guide/import-media/file-format-support.md +78 -61
  467. package/assets/docs/guide/import-media/from-remote-source/asset-versioning.md +273 -244
  468. package/assets/docs/guide/import-media/from-remote-source/remote-asset.md +152 -222
  469. package/assets/docs/guide/import-media/from-remote-source.md +9 -11
  470. package/assets/docs/guide/import-media/overview.md +5 -5
  471. package/assets/docs/guide/import-media/retrieve-mimetype.md +216 -108
  472. package/assets/docs/guide/import-media/size-limits.md +6 -4
  473. package/assets/docs/guide/import-media/source-sets.md +190 -251
  474. package/assets/docs/guide/import-media.md +10 -8
  475. package/assets/docs/guide/insert-media/audio.md +202 -195
  476. package/assets/docs/guide/insert-media/images.md +190 -188
  477. package/assets/docs/guide/insert-media/position-and-align.md +284 -551
  478. package/assets/docs/guide/insert-media/shapes-or-stickers.md +402 -418
  479. package/assets/docs/guide/insert-media/videos.md +236 -203
  480. package/assets/docs/guide/insert-media.md +10 -5
  481. package/assets/docs/guide/key-capabilities.md +36 -4
  482. package/assets/docs/guide/key-concepts.md +6 -4
  483. package/assets/docs/guide/licensing.md +6 -4
  484. package/assets/docs/guide/llms-txt.md +11 -7
  485. package/assets/docs/guide/open-the-editor/blank-canvas.md +102 -63
  486. package/assets/docs/guide/open-the-editor/from-image.md +157 -127
  487. package/assets/docs/guide/open-the-editor/from-template.md +131 -92
  488. package/assets/docs/guide/open-the-editor/from-video.md +204 -212
  489. package/assets/docs/guide/open-the-editor/import-design/from-archive.md +310 -360
  490. package/assets/docs/guide/open-the-editor/import-design/from-indesign.md +716 -513
  491. package/assets/docs/guide/open-the-editor/import-design/from-photoshop.md +667 -695
  492. package/assets/docs/guide/open-the-editor/import-design.md +228 -266
  493. package/assets/docs/guide/open-the-editor/load-scene.md +72 -68
  494. package/assets/docs/guide/open-the-editor/overview.md +6 -4
  495. package/assets/docs/guide/open-the-editor/uri-resolver.md +160 -251
  496. package/assets/docs/guide/open-the-editor.md +11 -9
  497. package/assets/docs/guide/outlines/overview.md +12 -4
  498. package/assets/docs/guide/outlines/shadows-and-glows.md +105 -410
  499. package/assets/docs/guide/outlines/strokes.md +218 -166
  500. package/assets/docs/guide/outlines.md +9 -4
  501. package/assets/docs/guide/overview.md +14 -6
  502. package/assets/docs/guide/performance.md +220 -113
  503. package/assets/docs/guide/plugins/print-ready-pdf.md +273 -368
  504. package/assets/docs/guide/plugins.md +10 -16
  505. package/assets/docs/guide/rules/asset-handling.md +7 -18
  506. package/assets/docs/guide/rules/common-pitfalls.md +25 -42
  507. package/assets/docs/guide/rules/content-fill-mode.md +4 -4
  508. package/assets/docs/guide/rules/enforce-brand-guidelines.md +398 -567
  509. package/assets/docs/guide/rules/lock-content.md +188 -231
  510. package/assets/docs/guide/rules/moderate-content.md +580 -571
  511. package/assets/docs/guide/rules/overview.md +345 -380
  512. package/assets/docs/guide/rules/silent-init-errors.md +4 -1
  513. package/assets/docs/guide/rules/verify-properties-before-use.md +2 -11
  514. package/assets/docs/guide/rules.md +10 -5
  515. package/assets/docs/guide/security.md +7 -5
  516. package/assets/docs/guide/serve-assets.md +57 -284
  517. package/assets/docs/guide/settings.md +96 -74
  518. package/assets/docs/guide/shapes.md +10 -5
  519. package/assets/docs/guide/stickers-and-shapes/combine.md +397 -583
  520. package/assets/docs/guide/stickers-and-shapes/create-cutout.md +181 -268
  521. package/assets/docs/guide/stickers-and-shapes/create-edit/create-shapes.md +418 -431
  522. package/assets/docs/guide/stickers-and-shapes/create-edit/create-stickers.md +147 -226
  523. package/assets/docs/guide/stickers-and-shapes/create-edit/edit-shapes.md +138 -123
  524. package/assets/docs/guide/stickers-and-shapes/insert-qr-code.md +151 -149
  525. package/assets/docs/guide/stickers.md +9 -4
  526. package/assets/docs/guide/text/add.md +470 -482
  527. package/assets/docs/guide/text/adjust-spacing.md +179 -214
  528. package/assets/docs/guide/text/auto-size.md +210 -271
  529. package/assets/docs/guide/text/edit.md +294 -309
  530. package/assets/docs/guide/text/effects.md +154 -190
  531. package/assets/docs/guide/text/emojis.md +199 -232
  532. package/assets/docs/guide/text/language-support.md +369 -382
  533. package/assets/docs/guide/text/overview.md +41 -4
  534. package/assets/docs/guide/text/styling.md +239 -273
  535. package/assets/docs/guide/text/text-designs.md +405 -544
  536. package/assets/docs/guide/text.md +10 -9
  537. package/assets/docs/guide/to-v1-19.md +12 -10
  538. package/assets/docs/guide/upgrade.md +8 -9
  539. package/assets/docs/guide/use-templates/apply-template.md +174 -163
  540. package/assets/docs/guide/use-templates/generate.md +171 -152
  541. package/assets/docs/guide/use-templates/overview.md +32 -4
  542. package/assets/docs/guide/use-templates/programmatic.md +266 -301
  543. package/assets/docs/guide/use-templates/replace-content.md +181 -171
  544. package/assets/docs/guide/what-is-cesdk.md +71 -282
  545. package/assets/docs/handbook/SKILL.md +24 -0
  546. package/dist/assets/inline.generated.d.ts.map +1 -1
  547. package/dist/assets/inline.generated.js +544 -406
  548. package/dist/assets/inline.generated.js.map +1 -1
  549. package/dist/assets/load-browser.d.ts +1 -1
  550. package/dist/assets/load-browser.js +1 -1
  551. package/dist/assets/load-browser.js.map +1 -1
  552. package/dist/assets/load-node.d.ts +1 -1
  553. package/dist/assets/load-node.js +1 -1
  554. package/dist/assets/load-node.js.map +1 -1
  555. package/dist/cli/http.d.ts.map +1 -1
  556. package/dist/cli/http.js +4 -28
  557. package/dist/cli/http.js.map +1 -1
  558. package/dist/cli/redirect-console.d.ts +1 -1
  559. package/dist/cli/redirect-console.d.ts.map +1 -1
  560. package/dist/cli/redirect-console.js +12 -3
  561. package/dist/cli/redirect-console.js.map +1 -1
  562. package/dist/cli/resolve-license.d.ts.map +1 -1
  563. package/dist/cli/resolve-license.js +8 -6
  564. package/dist/cli/resolve-license.js.map +1 -1
  565. package/dist/cli/stdio.d.ts +9 -0
  566. package/dist/cli/stdio.d.ts.map +1 -1
  567. package/dist/cli/stdio.js +48 -4
  568. package/dist/cli/stdio.js.map +1 -1
  569. package/dist/cli.js +10 -1
  570. package/dist/cli.js.map +1 -1
  571. package/dist/config.d.ts +11 -2
  572. package/dist/config.d.ts.map +1 -1
  573. package/dist/config.js +20 -1
  574. package/dist/config.js.map +1 -1
  575. package/dist/diagnostics/bundle.d.ts +10 -0
  576. package/dist/diagnostics/bundle.d.ts.map +1 -0
  577. package/dist/diagnostics/bundle.js +148 -0
  578. package/dist/diagnostics/bundle.js.map +1 -0
  579. package/dist/diagnostics/compose.d.ts +3 -0
  580. package/dist/diagnostics/compose.d.ts.map +1 -0
  581. package/dist/diagnostics/compose.js +15 -0
  582. package/dist/diagnostics/compose.js.map +1 -0
  583. package/dist/diagnostics/events.d.ts +34 -0
  584. package/dist/diagnostics/events.d.ts.map +1 -0
  585. package/dist/diagnostics/events.js +3 -0
  586. package/dist/diagnostics/events.js.map +1 -0
  587. package/dist/diagnostics/file-sink.d.ts +38 -0
  588. package/dist/diagnostics/file-sink.d.ts.map +1 -0
  589. package/dist/diagnostics/file-sink.js +157 -0
  590. package/dist/diagnostics/file-sink.js.map +1 -0
  591. package/dist/diagnostics/redact.d.ts +7 -0
  592. package/dist/diagnostics/redact.d.ts.map +1 -0
  593. package/dist/diagnostics/redact.js +43 -0
  594. package/dist/diagnostics/redact.js.map +1 -0
  595. package/dist/diagnostics/tool-call-adapter.d.ts +4 -0
  596. package/dist/diagnostics/tool-call-adapter.d.ts.map +1 -0
  597. package/dist/diagnostics/tool-call-adapter.js +21 -0
  598. package/dist/diagnostics/tool-call-adapter.js.map +1 -0
  599. package/dist/engine/cesdk-adapter.d.ts +5 -1
  600. package/dist/engine/cesdk-adapter.d.ts.map +1 -1
  601. package/dist/engine/cesdk-adapter.js +9 -2
  602. package/dist/engine/cesdk-adapter.js.map +1 -1
  603. package/dist/engine/index.d.ts +1 -0
  604. package/dist/engine/index.d.ts.map +1 -1
  605. package/dist/engine/index.js +4 -0
  606. package/dist/engine/index.js.map +1 -1
  607. package/dist/engine/scene-resource-schemes.d.ts +2 -0
  608. package/dist/engine/scene-resource-schemes.d.ts.map +1 -0
  609. package/dist/engine/scene-resource-schemes.js +20 -0
  610. package/dist/engine/scene-resource-schemes.js.map +1 -0
  611. package/dist/http/server.d.ts +0 -6
  612. package/dist/http/server.d.ts.map +1 -1
  613. package/dist/http/server.js +1 -2
  614. package/dist/http/server.js.map +1 -1
  615. package/dist/server.d.ts +0 -4
  616. package/dist/server.d.ts.map +1 -1
  617. package/dist/server.js +4 -60
  618. package/dist/server.js.map +1 -1
  619. package/dist/test/scripts/changelog-add.d.ts +8 -0
  620. package/dist/test/scripts/changelog-add.d.ts.map +1 -0
  621. package/dist/test/scripts/changelog-add.js +50 -0
  622. package/dist/test/scripts/changelog-add.js.map +1 -0
  623. package/dist/test/scripts/changelog-collate.d.ts +38 -0
  624. package/dist/test/scripts/changelog-collate.d.ts.map +1 -0
  625. package/dist/test/scripts/changelog-collate.js +171 -0
  626. package/dist/test/scripts/changelog-collate.js.map +1 -0
  627. package/dist/test/test/changelog.test.d.ts +2 -0
  628. package/dist/test/test/changelog.test.d.ts.map +1 -0
  629. package/dist/test/test/changelog.test.js +293 -0
  630. package/dist/test/test/changelog.test.js.map +1 -0
  631. package/dist/test/test/cli/dispatcher.test.js +10 -3
  632. package/dist/test/test/cli/dispatcher.test.js.map +1 -1
  633. package/dist/test/test/cli/redirect-console.test.js +31 -0
  634. package/dist/test/test/cli/redirect-console.test.js.map +1 -1
  635. package/dist/test/test/cli/resolve-license.test.js +10 -1
  636. package/dist/test/test/cli/resolve-license.test.js.map +1 -1
  637. package/dist/test/test/cli/stdio-diagnostics.test.d.ts +2 -0
  638. package/dist/test/test/cli/stdio-diagnostics.test.d.ts.map +1 -0
  639. package/dist/test/test/cli/stdio-diagnostics.test.js +31 -0
  640. package/dist/test/test/cli/stdio-diagnostics.test.js.map +1 -0
  641. package/dist/test/test/config.test.js +17 -13
  642. package/dist/test/test/config.test.js.map +1 -1
  643. package/dist/test/test/diagnostics/bundle.test.d.ts +2 -0
  644. package/dist/test/test/diagnostics/bundle.test.d.ts.map +1 -0
  645. package/dist/test/test/diagnostics/bundle.test.js +53 -0
  646. package/dist/test/test/diagnostics/bundle.test.js.map +1 -0
  647. package/dist/test/test/diagnostics/compose.test.d.ts +2 -0
  648. package/dist/test/test/diagnostics/compose.test.d.ts.map +1 -0
  649. package/dist/test/test/diagnostics/compose.test.js +31 -0
  650. package/dist/test/test/diagnostics/compose.test.js.map +1 -0
  651. package/dist/test/test/diagnostics/file-sink.test.d.ts +2 -0
  652. package/dist/test/test/diagnostics/file-sink.test.d.ts.map +1 -0
  653. package/dist/test/test/diagnostics/file-sink.test.js +113 -0
  654. package/dist/test/test/diagnostics/file-sink.test.js.map +1 -0
  655. package/dist/test/test/diagnostics/redact.test.d.ts +2 -0
  656. package/dist/test/test/diagnostics/redact.test.d.ts.map +1 -0
  657. package/dist/test/test/diagnostics/redact.test.js +59 -0
  658. package/dist/test/test/diagnostics/redact.test.js.map +1 -0
  659. package/dist/test/test/diagnostics/tool-call-adapter.test.d.ts +2 -0
  660. package/dist/test/test/diagnostics/tool-call-adapter.test.d.ts.map +1 -0
  661. package/dist/test/test/diagnostics/tool-call-adapter.test.js +34 -0
  662. package/dist/test/test/diagnostics/tool-call-adapter.test.js.map +1 -0
  663. package/dist/test/test/engine/cesdk-adapter.test.d.ts +2 -0
  664. package/dist/test/test/engine/cesdk-adapter.test.d.ts.map +1 -0
  665. package/dist/test/test/engine/cesdk-adapter.test.js +32 -0
  666. package/dist/test/test/engine/cesdk-adapter.test.js.map +1 -0
  667. package/dist/test/test/handbook-contract.test.js +6 -2
  668. package/dist/test/test/handbook-contract.test.js.map +1 -1
  669. package/dist/test/test/http/server.test.js +0 -36
  670. package/dist/test/test/http/server.test.js.map +1 -1
  671. package/dist/test/test/http/workspace-auth.test.js +0 -1
  672. package/dist/test/test/http/workspace-auth.test.js.map +1 -1
  673. package/dist/test/test/server.test.js +0 -40
  674. package/dist/test/test/server.test.js.map +1 -1
  675. package/dist/test/test/tools/edit-harness.d.ts +14 -0
  676. package/dist/test/test/tools/edit-harness.d.ts.map +1 -0
  677. package/dist/test/test/tools/edit-harness.js +30 -0
  678. package/dist/test/test/tools/edit-harness.js.map +1 -0
  679. package/dist/test/test/tools/edit.telemetry.test.d.ts +2 -0
  680. package/dist/test/test/tools/edit.telemetry.test.d.ts.map +1 -0
  681. package/dist/test/test/tools/edit.telemetry.test.js +46 -0
  682. package/dist/test/test/tools/edit.telemetry.test.js.map +1 -0
  683. package/dist/test/test/tools/export-harness.d.ts +13 -0
  684. package/dist/test/test/tools/export-harness.d.ts.map +1 -0
  685. package/dist/test/test/tools/export-harness.js +27 -0
  686. package/dist/test/test/tools/export-harness.js.map +1 -0
  687. package/dist/test/test/tools/export.telemetry.test.d.ts +2 -0
  688. package/dist/test/test/tools/export.telemetry.test.d.ts.map +1 -0
  689. package/dist/test/test/tools/export.telemetry.test.js +65 -0
  690. package/dist/test/test/tools/export.telemetry.test.js.map +1 -0
  691. package/dist/test/test/tools/import.test.d.ts +2 -0
  692. package/dist/test/test/tools/import.test.d.ts.map +1 -0
  693. package/dist/test/test/tools/import.test.js +122 -0
  694. package/dist/test/test/tools/import.test.js.map +1 -0
  695. package/dist/test/test/tools/index.test.js +78 -16
  696. package/dist/test/test/tools/index.test.js.map +1 -1
  697. package/dist/test/test/tools/load.integration.test.d.ts +2 -0
  698. package/dist/test/test/tools/load.integration.test.d.ts.map +1 -0
  699. package/dist/test/test/tools/load.integration.test.js +165 -0
  700. package/dist/test/test/tools/load.integration.test.js.map +1 -0
  701. package/dist/test/test/tools/load.test.d.ts +2 -0
  702. package/dist/test/test/tools/load.test.d.ts.map +1 -0
  703. package/dist/test/test/tools/load.test.js +387 -0
  704. package/dist/test/test/tools/load.test.js.map +1 -0
  705. package/dist/test/test/tools/preview-harness.d.ts +9 -0
  706. package/dist/test/test/tools/preview-harness.d.ts.map +1 -0
  707. package/dist/test/test/tools/preview-harness.js +23 -0
  708. package/dist/test/test/tools/preview-harness.js.map +1 -0
  709. package/dist/test/test/tools/preview.telemetry.test.d.ts +2 -0
  710. package/dist/test/test/tools/preview.telemetry.test.d.ts.map +1 -0
  711. package/dist/test/test/tools/preview.telemetry.test.js +36 -0
  712. package/dist/test/test/tools/preview.telemetry.test.js.map +1 -0
  713. package/dist/test/test/tools/schema-best-practices.d.ts +13 -0
  714. package/dist/test/test/tools/schema-best-practices.d.ts.map +1 -0
  715. package/dist/test/test/tools/schema-best-practices.js +169 -0
  716. package/dist/test/test/tools/schema-best-practices.js.map +1 -0
  717. package/dist/test/test/tools/schema-best-practices.test.d.ts +3 -0
  718. package/dist/test/test/tools/schema-best-practices.test.d.ts.map +1 -0
  719. package/dist/test/test/tools/schema-best-practices.test.js +194 -0
  720. package/dist/test/test/tools/schema-best-practices.test.js.map +1 -0
  721. package/dist/test/test/tools/spans.test.d.ts +2 -0
  722. package/dist/test/test/tools/spans.test.d.ts.map +1 -0
  723. package/dist/test/test/tools/spans.test.js +84 -0
  724. package/dist/test/test/tools/spans.test.js.map +1 -0
  725. package/dist/test/test/viewer/cesdk-cdn.test.d.ts +2 -0
  726. package/dist/test/test/viewer/cesdk-cdn.test.d.ts.map +1 -0
  727. package/dist/test/test/viewer/cesdk-cdn.test.js +19 -0
  728. package/dist/test/test/viewer/cesdk-cdn.test.js.map +1 -0
  729. package/dist/test/test/viewer/config-route.test.d.ts +2 -0
  730. package/dist/test/test/viewer/config-route.test.d.ts.map +1 -0
  731. package/dist/test/test/viewer/config-route.test.js +28 -0
  732. package/dist/test/test/viewer/config-route.test.js.map +1 -0
  733. package/dist/test/test/viewer/spa-version.test.d.ts +2 -0
  734. package/dist/test/test/viewer/spa-version.test.d.ts.map +1 -0
  735. package/dist/test/test/viewer/spa-version.test.js +14 -0
  736. package/dist/test/test/viewer/spa-version.test.js.map +1 -0
  737. package/dist/test/test/workspace/content-hash.test.d.ts +2 -0
  738. package/dist/test/test/workspace/content-hash.test.d.ts.map +1 -0
  739. package/dist/test/test/workspace/content-hash.test.js +17 -0
  740. package/dist/test/test/workspace/content-hash.test.js.map +1 -0
  741. package/dist/test/tsconfig.test.tsbuildinfo +1 -1
  742. package/dist/test/vitest.config.js +1 -1
  743. package/dist/test/vitest.config.js.map +1 -1
  744. package/dist/tools/asset-generate.d.ts.map +1 -1
  745. package/dist/tools/asset-generate.js +1 -8
  746. package/dist/tools/asset-generate.js.map +1 -1
  747. package/dist/tools/edit.d.ts +3 -0
  748. package/dist/tools/edit.d.ts.map +1 -1
  749. package/dist/tools/edit.js +145 -96
  750. package/dist/tools/edit.js.map +1 -1
  751. package/dist/tools/export.d.ts +3 -0
  752. package/dist/tools/export.d.ts.map +1 -1
  753. package/dist/tools/export.js +146 -108
  754. package/dist/tools/export.js.map +1 -1
  755. package/dist/tools/import.d.ts +12 -0
  756. package/dist/tools/import.d.ts.map +1 -0
  757. package/dist/tools/import.js +144 -0
  758. package/dist/tools/import.js.map +1 -0
  759. package/dist/tools/index.d.ts +3 -0
  760. package/dist/tools/index.d.ts.map +1 -1
  761. package/dist/tools/index.js +44 -4
  762. package/dist/tools/index.js.map +1 -1
  763. package/dist/tools/load.d.ts +26 -0
  764. package/dist/tools/load.d.ts.map +1 -0
  765. package/dist/tools/load.js +400 -0
  766. package/dist/tools/load.js.map +1 -0
  767. package/dist/tools/preview.d.ts +3 -0
  768. package/dist/tools/preview.d.ts.map +1 -1
  769. package/dist/tools/preview.js +79 -44
  770. package/dist/tools/preview.js.map +1 -1
  771. package/dist/tools/result.d.ts +1 -1
  772. package/dist/tools/result.js +2 -2
  773. package/dist/tools/result.js.map +1 -1
  774. package/dist/tools/spans.d.ts +45 -0
  775. package/dist/tools/spans.d.ts.map +1 -0
  776. package/dist/tools/spans.js +77 -0
  777. package/dist/tools/spans.js.map +1 -0
  778. package/dist/tools/telemetry-wrapper.d.ts +4 -0
  779. package/dist/tools/telemetry-wrapper.d.ts.map +1 -0
  780. package/dist/tools/telemetry-wrapper.js +43 -0
  781. package/dist/tools/telemetry-wrapper.js.map +1 -0
  782. package/dist/viewer/cesdk-cdn.d.ts +16 -0
  783. package/dist/viewer/cesdk-cdn.d.ts.map +1 -0
  784. package/dist/viewer/cesdk-cdn.js +30 -0
  785. package/dist/viewer/cesdk-cdn.js.map +1 -0
  786. package/dist/viewer/router.d.ts +6 -0
  787. package/dist/viewer/router.d.ts.map +1 -1
  788. package/dist/viewer/router.js +4 -1
  789. package/dist/viewer/router.js.map +1 -1
  790. package/dist/viewer/spa-assets.generated.d.ts.map +1 -1
  791. package/dist/viewer/spa-assets.generated.js +2 -3
  792. package/dist/viewer/spa-assets.generated.js.map +1 -1
  793. package/dist/workspace/content-hash.d.ts +2 -0
  794. package/dist/workspace/content-hash.d.ts.map +1 -0
  795. package/dist/workspace/content-hash.js +15 -0
  796. package/dist/workspace/content-hash.js.map +1 -0
  797. package/package.json +18 -9
  798. package/assets/docs/guide/actions.md +0 -1038
  799. package/assets/docs/guide/animation/overview.md +0 -22
  800. package/assets/docs/guide/automation/batch-processing.md +0 -474
  801. package/assets/docs/guide/browser-support.md +0 -38
  802. package/assets/docs/guide/concepts/edit-modes.md +0 -431
  803. package/assets/docs/guide/concepts/headless-mode/browser.md +0 -291
  804. package/assets/docs/guide/create-audio/audio.md +0 -336
  805. package/assets/docs/guide/create-video/overview.md +0 -224
  806. package/assets/docs/guide/create-video/timeline-editor.md +0 -622
  807. package/assets/docs/guide/create-video/update-caption-presets.md +0 -676
  808. package/assets/docs/guide/edit-image/vectorize.md +0 -204
  809. package/assets/docs/guide/export-save-publish/export/to-html5.md +0 -474
  810. package/assets/docs/guide/export-save-publish/export/to-mp4.md +0 -364
  811. package/assets/docs/guide/get-started/vanilla-js/quickstart.md +0 -175
  812. package/assets/docs/guide/grid-and-rulers.md +0 -222
  813. package/assets/docs/guide/guides/text/rendering-internals.md +0 -796
  814. package/assets/docs/guide/import-media/asset-library.md +0 -23
  815. package/assets/docs/guide/import-media/asset-panel/basics.md +0 -324
  816. package/assets/docs/guide/import-media/asset-panel/customize.md +0 -478
  817. package/assets/docs/guide/import-media/asset-panel/thumbnails.md +0 -633
  818. package/assets/docs/guide/import-media/capture-from-camera/record-video.md +0 -137
  819. package/assets/docs/guide/import-media/capture-from-camera.md +0 -20
  820. package/assets/docs/guide/import-media/from-local-source/user-upload.md +0 -438
  821. package/assets/docs/guide/import-media/from-local-source.md +0 -20
  822. package/assets/docs/guide/import-media/from-remote-source/getty-images.md +0 -627
  823. package/assets/docs/guide/import-media/from-remote-source/imgly-premium-assets.md +0 -625
  824. package/assets/docs/guide/import-media/from-remote-source/pexels.md +0 -692
  825. package/assets/docs/guide/import-media/from-remote-source/soundstripe.md +0 -497
  826. package/assets/docs/guide/import-media/from-remote-source/third-party.md +0 -51
  827. package/assets/docs/guide/import-media/from-remote-source/unsplash.md +0 -914
  828. package/assets/docs/guide/import-media/from-remote-source/your-server.md +0 -764
  829. package/assets/docs/guide/open-the-editor/from-htmlcanvas.md +0 -228
  830. package/assets/docs/guide/open-the-editor/set-zoom-level.md +0 -303
  831. package/assets/docs/guide/plugins/asset-sources.md +0 -553
  832. package/assets/docs/guide/starterkits/3d-mockup-editor.md +0 -748
  833. package/assets/docs/guide/starterkits/advanced-editor.md +0 -698
  834. package/assets/docs/guide/starterkits/advanced-video-editor.md +0 -696
  835. package/assets/docs/guide/starterkits/ai-editor.md +0 -749
  836. package/assets/docs/guide/starterkits/airtable-image-editor.md +0 -672
  837. package/assets/docs/guide/starterkits/apparel-ui.md +0 -188
  838. package/assets/docs/guide/starterkits/assets.md +0 -27
  839. package/assets/docs/guide/starterkits/auto-resize.md +0 -586
  840. package/assets/docs/guide/starterkits/automated-video-generation.md +0 -692
  841. package/assets/docs/guide/starterkits/background-removal-editor.md +0 -480
  842. package/assets/docs/guide/starterkits/content-moderation.md +0 -863
  843. package/assets/docs/guide/starterkits/creative-automation.md +0 -28
  844. package/assets/docs/guide/starterkits/custom-built-uis.md +0 -26
  845. package/assets/docs/guide/starterkits/customization.md +0 -29
  846. package/assets/docs/guide/starterkits/cutout-lines-editor.md +0 -470
  847. package/assets/docs/guide/starterkits/data-merge.md +0 -850
  848. package/assets/docs/guide/starterkits/design-editor.md +0 -698
  849. package/assets/docs/guide/starterkits/design-generation.md +0 -719
  850. package/assets/docs/guide/starterkits/design-validation.md +0 -808
  851. package/assets/docs/guide/starterkits/editor-ui-configurations.md +0 -14
  852. package/assets/docs/guide/starterkits/export-options.md +0 -724
  853. package/assets/docs/guide/starterkits/export-using-renderer.md +0 -708
  854. package/assets/docs/guide/starterkits/extensibility.md +0 -28
  855. package/assets/docs/guide/starterkits/force-crop-editor.md +0 -675
  856. package/assets/docs/guide/starterkits/form-based-template-adoption.md +0 -522
  857. package/assets/docs/guide/starterkits/getty-images-editor.md +0 -700
  858. package/assets/docs/guide/starterkits/html5-ads-exporter.md +0 -719
  859. package/assets/docs/guide/starterkits/indesign-template-import.md +0 -580
  860. package/assets/docs/guide/starterkits/layouts-editor.md +0 -724
  861. package/assets/docs/guide/starterkits/mobile-ui.md +0 -185
  862. package/assets/docs/guide/starterkits/mockup-editor.md +0 -745
  863. package/assets/docs/guide/starterkits/multi-image-generation.md +0 -542
  864. package/assets/docs/guide/starterkits/page-sizes-editor.md +0 -657
  865. package/assets/docs/guide/starterkits/pexels-image-editor.md +0 -665
  866. package/assets/docs/guide/starterkits/photo-editor.md +0 -755
  867. package/assets/docs/guide/starterkits/photo-ui.md +0 -186
  868. package/assets/docs/guide/starterkits/photobook-ui.md +0 -188
  869. package/assets/docs/guide/starterkits/placeholders.md +0 -678
  870. package/assets/docs/guide/starterkits/player.md +0 -405
  871. package/assets/docs/guide/starterkits/plugins.md +0 -25
  872. package/assets/docs/guide/starterkits/postcard-editor.md +0 -202
  873. package/assets/docs/guide/starterkits/pptx-template-import.md +0 -581
  874. package/assets/docs/guide/starterkits/print-ready-pdf-editor.md +0 -746
  875. package/assets/docs/guide/starterkits/product-editor.md +0 -773
  876. package/assets/docs/guide/starterkits/psd-template-import.md +0 -580
  877. package/assets/docs/guide/starterkits/qr-code-editor.md +0 -470
  878. package/assets/docs/guide/starterkits/single-page-editor.md +0 -661
  879. package/assets/docs/guide/starterkits/start-with-image.md +0 -684
  880. package/assets/docs/guide/starterkits/start-with-video.md +0 -651
  881. package/assets/docs/guide/starterkits/t-shirt-designer.md +0 -742
  882. package/assets/docs/guide/starterkits/templating.md +0 -23
  883. package/assets/docs/guide/starterkits/theming.md +0 -662
  884. package/assets/docs/guide/starterkits/translation-internationalization.md +0 -662
  885. package/assets/docs/guide/starterkits/unsplash-editor.md +0 -839
  886. package/assets/docs/guide/starterkits/vectorizer-editor.md +0 -466
  887. package/assets/docs/guide/starterkits/version-history.md +0 -745
  888. package/assets/docs/guide/starterkits/video-animations.md +0 -853
  889. package/assets/docs/guide/starterkits/video-captions.md +0 -884
  890. package/assets/docs/guide/starterkits/video-editing.md +0 -25
  891. package/assets/docs/guide/starterkits/video-editor.md +0 -696
  892. package/assets/docs/guide/starterkits/video-export-options.md +0 -676
  893. package/assets/docs/guide/starterkits/viewer.md +0 -400
  894. package/assets/docs/guide/starterkits.md +0 -41
  895. package/assets/docs/guide/stickers-and-shapes/create-edit/vector-edit.md +0 -362
  896. package/assets/docs/guide/text/custom-fonts.md +0 -401
  897. package/assets/docs/guide/text/decorations.md +0 -330
  898. package/assets/docs/guide/text/enumerations.md +0 -258
  899. package/assets/docs/guide/to-v1-10.md +0 -131
  900. package/assets/docs/guide/to-v1-13.md +0 -165
  901. package/assets/docs/guide/to-v1-32.md +0 -110
  902. package/assets/docs/guide/to-v1-69.md +0 -468
  903. package/assets/docs/guide/to-v1-72.md +0 -193
  904. package/assets/docs/guide/use-templates/library.md +0 -450
  905. package/assets/docs/guide/user-interface/ai-integration/audio-generation.md +0 -428
  906. package/assets/docs/guide/user-interface/ai-integration/auto-captions.md +0 -337
  907. package/assets/docs/guide/user-interface/ai-integration/custom-provider.md +0 -853
  908. package/assets/docs/guide/user-interface/ai-integration/gateway-provider.md +0 -1045
  909. package/assets/docs/guide/user-interface/ai-integration/image-generation.md +0 -641
  910. package/assets/docs/guide/user-interface/ai-integration/integrate.md +0 -966
  911. package/assets/docs/guide/user-interface/ai-integration/proxy-server.md +0 -99
  912. package/assets/docs/guide/user-interface/ai-integration/text-generation.md +0 -498
  913. package/assets/docs/guide/user-interface/ai-integration/video-generation.md +0 -493
  914. package/assets/docs/guide/user-interface/ai-integration.md +0 -30
  915. package/assets/docs/guide/user-interface/appearance/change-ui-font.md +0 -316
  916. package/assets/docs/guide/user-interface/appearance/custom-labels.md +0 -509
  917. package/assets/docs/guide/user-interface/appearance/icons.md +0 -373
  918. package/assets/docs/guide/user-interface/appearance/theming.md +0 -665
  919. package/assets/docs/guide/user-interface/appearance.md +0 -23
  920. package/assets/docs/guide/user-interface/build-your-own-ui.md +0 -620
  921. package/assets/docs/guide/user-interface/customization/canvas-menu.md +0 -412
  922. package/assets/docs/guide/user-interface/customization/canvas.md +0 -281
  923. package/assets/docs/guide/user-interface/customization/color-palette.md +0 -413
  924. package/assets/docs/guide/user-interface/customization/crop-presets.md +0 -384
  925. package/assets/docs/guide/user-interface/customization/disable-or-enable.md +0 -676
  926. package/assets/docs/guide/user-interface/customization/dock.md +0 -399
  927. package/assets/docs/guide/user-interface/customization/force-crop.md +0 -289
  928. package/assets/docs/guide/user-interface/customization/inspector-bar.md +0 -371
  929. package/assets/docs/guide/user-interface/customization/navigation-bar.md +0 -516
  930. package/assets/docs/guide/user-interface/customization/page-format.md +0 -436
  931. package/assets/docs/guide/user-interface/customization/panel.md +0 -605
  932. package/assets/docs/guide/user-interface/customization/quick-start/add-action-buttons.md +0 -531
  933. package/assets/docs/guide/user-interface/customization/quick-start/add-dock-buttons.md +0 -358
  934. package/assets/docs/guide/user-interface/customization/quick-start/create-custom-components.md +0 -374
  935. package/assets/docs/guide/user-interface/customization/quick-start/reorder-components.md +0 -323
  936. package/assets/docs/guide/user-interface/customization/quick-start/show-hide-components.md +0 -294
  937. package/assets/docs/guide/user-interface/customization/quick-start.md +0 -12
  938. package/assets/docs/guide/user-interface/customization/reference/component-order-api.md +0 -519
  939. package/assets/docs/guide/user-interface/customization/reference/component-reference.md +0 -333
  940. package/assets/docs/guide/user-interface/customization/reference.md +0 -12
  941. package/assets/docs/guide/user-interface/customization.md +0 -39
  942. package/assets/docs/guide/user-interface/localization.md +0 -633
  943. package/assets/docs/guide/user-interface/overview.md +0 -167
  944. package/assets/docs/guide/user-interface/ui-extensions/add-custom-feature.md +0 -411
  945. package/assets/docs/guide/user-interface/ui-extensions/asset-library.md +0 -721
  946. package/assets/docs/guide/user-interface/ui-extensions/create-custom-panel.md +0 -331
  947. package/assets/docs/guide/user-interface/ui-extensions/customize-behaviour.md +0 -553
  948. package/assets/docs/guide/user-interface/ui-extensions/notifications-and-dialogs.md +0 -672
  949. package/assets/docs/guide/user-interface/ui-extensions/quick-actions.md +0 -415
  950. package/assets/docs/guide/user-interface/ui-extensions/register-new-component.md +0 -521
  951. package/assets/docs/guide/user-interface/ui-extensions.md +0 -26
  952. package/assets/docs/guide/user-interface.md +0 -25
  953. package/assets/prompts/evals-assetGenerate.md +0 -12
  954. package/assets/prompts/evals-brutalistCore.md +0 -34
  955. package/assets/prompts/evals-danskCatalogue.md +0 -31
  956. package/assets/prompts/evals-exportRoundTrip.md +0 -12
  957. package/assets/prompts/evals-inspectPriorCode.md +0 -16
  958. package/assets/prompts/evals-listProjectFiles.md +0 -6
  959. package/assets/prompts/evals-readAndExplainScript.md +0 -6
  960. package/assets/prompts/evals-resumeAcrossRestart.md +0 -15
  961. package/assets/prompts/evals-rewindRecovery.md +0 -10
  962. package/assets/prompts/evals-searchAcrossFiles.md +0 -6
  963. package/assets/prompts/evals-weddingCard.md +0 -20
  964. package/assets/prompts/explain.md +0 -6
  965. package/assets/prompts/review.md +0 -6
  966. package/dist/frontmatter.d.ts +0 -15
  967. package/dist/frontmatter.d.ts.map +0 -1
  968. package/dist/frontmatter.js +0 -46
  969. package/dist/frontmatter.js.map +0 -1
  970. package/dist/test/test/frontmatter.test.d.ts +0 -2
  971. package/dist/test/test/frontmatter.test.d.ts.map +0 -1
  972. package/dist/test/test/frontmatter.test.js +0 -55
  973. package/dist/test/test/frontmatter.test.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAErD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,GAAiB,GACrB,MAAM,GAAG,SAAS,CAIpB;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC5D,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,IAAI,CAAC;AAE9C,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,yBAAyB;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,EAAE,CAAC,EAAE,QAAQ,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,eAAe,CAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,aAAa,CAAC;QACpB,6DAA6D;QAC7D,MAAM,EAAE,MAAM,CAAC;QACf,uCAAuC;QACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAsBD,wBAAgB,UAAU,CAAC,GAAG,GAAE,GAAiB,GAAG,YAAY,CAqE/D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAErD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,GAAiB,GACrB,MAAM,GAAG,SAAS,CAIpB;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC5D,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,IAAI,CAAC;AAE9C,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,yBAAyB;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,EAAE,CAAC,EAAE,QAAQ,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,eAAe,CAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,aAAa,CAAC;QACpB,6DAA6D;QAC7D,MAAM,EAAE,MAAM,CAAC;QACf,uCAAuC;QACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAsBD,wBAAgB,UAAU,CAAC,GAAG,GAAE,GAAiB,GAAG,YAAY,CAoE/D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,GAAE,GAAiB,GAAG,OAAO,CAEtE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,GAAiB,GAAG,MAAM,CAKpE"}
package/dist/config.js CHANGED
@@ -6,6 +6,8 @@
6
6
  // resolveSecret — the de-facto Docker/K8s secret standard. No secret is ever
7
7
  // logged or written; loadConfig only reads.
8
8
  import { readFileSync } from 'node:fs';
9
+ import { homedir } from 'node:os';
10
+ import { join as joinPath } from 'node:path';
9
11
  /**
10
12
  * Resolve a secret: prefer `<NAME>_FILE` (trimmed file contents — secret files
11
13
  * end in a newline) and fall back to the plain `<NAME>` env var. A superset of
@@ -88,7 +90,6 @@ export function loadConfig(env = process.env) {
88
90
  maxEngines: intEnv(env, 'IMGLY_MAX_ENGINES', 8),
89
91
  idleTimeoutMs: intEnv(env, 'IMGLY_SESSION_IDLE_TIMEOUT', 900) * 1000,
90
92
  logLevel: env.IMGLY_LOG_LEVEL ?? 'info',
91
- metricsEnabled: boolEnv(env, 'IMGLY_METRICS_ENABLED', false),
92
93
  workspace,
93
94
  auth,
94
95
  gateway
@@ -99,4 +100,22 @@ export function loadConfig(env = process.env) {
99
100
  cfg.publicBaseUrl = env.IMGLY_PUBLIC_BASE_URL.replace(/\/+$/, '');
100
101
  return cfg;
101
102
  }
103
+ /**
104
+ * Local diagnostics file logging is ON by default so evidence exists before a
105
+ * user knows they hit a bug. Disable with IMGLY_DIAGNOSTICS_FILE=false (or 0).
106
+ */
107
+ export function diagnosticsFileEnabled(env = process.env) {
108
+ return boolEnv(env, 'IMGLY_DIAGNOSTICS_FILE', true);
109
+ }
110
+ /**
111
+ * Where diagnostics NDJSON is written. Explicit IMGLY_DIAGNOSTICS_DIR wins;
112
+ * otherwise <workspaceRoot>/logs, where workspaceRoot mirrors the stdio default
113
+ * ($CODESIGN_WORKSPACE ?? ~/.codesign/workspace).
114
+ */
115
+ export function resolveDiagnosticsDir(env = process.env) {
116
+ if (env.IMGLY_DIAGNOSTICS_DIR)
117
+ return env.IMGLY_DIAGNOSTICS_DIR;
118
+ const workspaceRoot = env.CODESIGN_WORKSPACE ?? joinPath(homedir(), '.codesign', 'workspace');
119
+ return joinPath(workspaceRoot, 'logs');
120
+ }
102
121
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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","sourcesContent":["// packages/codesign-mcp/src/config.ts\n//\n// The IMGLY_* configuration contract (spec §9.2). One image, switched purely\n// by runtime env. Non-secret knobs are plain env vars; the four secrets\n// (license, gateway key, two S3 keys) also accept the `*_FILE` convention via\n// resolveSecret — the de-facto Docker/K8s secret standard. No secret is ever\n// logged or written; loadConfig only reads.\nimport { readFileSync } from 'node:fs';\n\nexport type Env = Record<string, string | undefined>;\n\n/**\n * Resolve a secret: prefer `<NAME>_FILE` (trimmed file contents — secret files\n * end in a newline) and fall back to the plain `<NAME>` env var. A superset of\n * \"just env vars\": production mounts a file, local dev passes the raw value.\n */\nexport function resolveSecret(\n name: string,\n env: Env = process.env\n): string | undefined {\n const filePath = env[`${name}_FILE`];\n if (filePath) return readFileSync(filePath, 'utf8').trim();\n return env[name];\n}\n\nexport type WorkspaceMode = 'header' | 'session' | 'single';\nexport type WorkspaceBackend = 'local' | 's3';\n\nexport interface S3Config {\n bucket: string;\n endpoint?: string;\n region: string;\n accessKeyId?: string;\n secretAccessKey?: string;\n}\n\nexport interface WorkspaceConfig {\n backend: WorkspaceBackend;\n /** local backend only */\n dir?: string;\n /** s3 backend only */\n s3?: S3Config;\n}\n\nexport interface ServerConfig {\n cesdkLicense: string;\n /**\n * Build identity, surfaced as the MCP `serverInfo.version`. Lets a client\n * (e.g. the deploy smoketest) detect a stale, not-yet-rolled-out container:\n * the deploy injects the git SHA, the smoketest asserts the running server\n * reports it. Default `'dev'` for local runs.\n */\n buildId: string;\n port: number;\n /** Max concurrent engines/sessions — the RAM cap (spec §9.2). */\n maxEngines: number;\n idleTimeoutMs: number;\n logLevel: string;\n /** Expose the perf metrics route + dashboard SPA. Default false. */\n metricsEnabled: boolean;\n workspace: WorkspaceConfig;\n auth: {\n mode: WorkspaceMode;\n /** header carrying the trusted workspaceId (header mode). */\n header: string;\n /** fixed workspaceId (single mode). */\n fixedWorkspaceId?: string;\n };\n gateway: { apiKey?: string; baseUrl?: string };\n viewerCorsOrigins?: string[];\n /**\n * Public origin of this deployment (e.g. the Cloudflare Worker URL),\n * no trailing slash. Used to build viewer URLs the MCP client's human can\n * actually open. Absent → loopback URLs (local dev).\n */\n publicBaseUrl?: string;\n}\n\nfunction requireEnv(env: Env, name: string): string {\n const v = env[name];\n if (!v) throw new Error(`config: ${name} is required`);\n return v;\n}\n\nfunction intEnv(env: Env, name: string, fallback: number): number {\n const raw = env[name];\n if (raw === undefined) return fallback;\n const n = Number(raw);\n if (!Number.isFinite(n)) throw new Error(`config: ${name} must be a number`);\n return n;\n}\n\nfunction boolEnv(env: Env, name: string, fallback: boolean): boolean {\n const raw = env[name];\n if (raw === undefined) return fallback;\n return raw === 'true' || raw === '1';\n}\n\nexport function loadConfig(env: Env = process.env): ServerConfig {\n const cesdkLicense = resolveSecret('IMGLY_CESDK_LICENSE', env);\n if (!cesdkLicense) throw new Error('config: IMGLY_CESDK_LICENSE is required');\n\n const mode = (env.IMGLY_WORKSPACE_MODE ?? 'header') as WorkspaceMode;\n if (mode !== 'header' && mode !== 'session' && mode !== 'single')\n throw new Error(\n `config: IMGLY_WORKSPACE_MODE must be header|session|single (got \"${mode}\")`\n );\n\n const auth: ServerConfig['auth'] = {\n mode,\n header: env.IMGLY_AUTH_WORKSPACE_HEADER ?? 'X-Workspace-Id'\n };\n if (mode === 'single') {\n auth.fixedWorkspaceId = requireEnv(env, 'IMGLY_WORKSPACE_ID');\n }\n\n const backend = (env.IMGLY_WORKSPACE_BACKEND ?? 'local') as WorkspaceBackend;\n if (backend !== 'local' && backend !== 's3')\n throw new Error(\n `config: IMGLY_WORKSPACE_BACKEND must be local|s3 (got \"${backend}\")`\n );\n\n let workspace: WorkspaceConfig;\n if (backend === 's3') {\n const s3: S3Config = {\n bucket: requireEnv(env, 'IMGLY_WORKSPACE_S3_BUCKET'),\n region: env.IMGLY_WORKSPACE_S3_REGION ?? 'auto'\n };\n if (env.IMGLY_WORKSPACE_S3_ENDPOINT)\n s3.endpoint = env.IMGLY_WORKSPACE_S3_ENDPOINT;\n // Keys are optional: absent -> AWS default credential chain (IAM role).\n const accessKeyId = resolveSecret('IMGLY_WORKSPACE_S3_ACCESS_KEY_ID', env);\n const secretAccessKey = resolveSecret(\n 'IMGLY_WORKSPACE_S3_SECRET_ACCESS_KEY',\n env\n );\n if (accessKeyId) s3.accessKeyId = accessKeyId;\n if (secretAccessKey) s3.secretAccessKey = secretAccessKey;\n workspace = { backend, s3 };\n } else {\n workspace = { backend, dir: env.IMGLY_WORKSPACE_DIR ?? '/data' };\n }\n\n const gateway: ServerConfig['gateway'] = {};\n const gatewayKey = resolveSecret('IMGLY_GATEWAY_API_KEY', env);\n if (gatewayKey) gateway.apiKey = gatewayKey;\n if (env.IMGLY_GATEWAY_BASE_URL) gateway.baseUrl = env.IMGLY_GATEWAY_BASE_URL;\n\n const cfg: ServerConfig = {\n cesdkLicense,\n buildId: env.IMGLY_BUILD_ID ?? 'dev',\n port: intEnv(env, 'PORT', 8080),\n maxEngines: intEnv(env, 'IMGLY_MAX_ENGINES', 8),\n idleTimeoutMs: intEnv(env, 'IMGLY_SESSION_IDLE_TIMEOUT', 900) * 1000,\n logLevel: env.IMGLY_LOG_LEVEL ?? 'info',\n metricsEnabled: boolEnv(env, 'IMGLY_METRICS_ENABLED', false),\n workspace,\n auth,\n gateway\n };\n if (env.IMGLY_VIEWER_CORS_ORIGINS)\n cfg.viewerCorsOrigins = env.IMGLY_VIEWER_CORS_ORIGINS.split(',').map((s) =>\n s.trim()\n );\n if (env.IMGLY_PUBLIC_BASE_URL)\n cfg.publicBaseUrl = env.IMGLY_PUBLIC_BASE_URL.replace(/\\/+$/, '');\n return cfg;\n}\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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","sourcesContent":["// packages/codesign-mcp/src/config.ts\n//\n// The IMGLY_* configuration contract (spec §9.2). One image, switched purely\n// by runtime env. Non-secret knobs are plain env vars; the four secrets\n// (license, gateway key, two S3 keys) also accept the `*_FILE` convention via\n// resolveSecret — the de-facto Docker/K8s secret standard. No secret is ever\n// logged or written; loadConfig only reads.\nimport { readFileSync } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { join as joinPath } from 'node:path';\n\nexport type Env = Record<string, string | undefined>;\n\n/**\n * Resolve a secret: prefer `<NAME>_FILE` (trimmed file contents — secret files\n * end in a newline) and fall back to the plain `<NAME>` env var. A superset of\n * \"just env vars\": production mounts a file, local dev passes the raw value.\n */\nexport function resolveSecret(\n name: string,\n env: Env = process.env\n): string | undefined {\n const filePath = env[`${name}_FILE`];\n if (filePath) return readFileSync(filePath, 'utf8').trim();\n return env[name];\n}\n\nexport type WorkspaceMode = 'header' | 'session' | 'single';\nexport type WorkspaceBackend = 'local' | 's3';\n\nexport interface S3Config {\n bucket: string;\n endpoint?: string;\n region: string;\n accessKeyId?: string;\n secretAccessKey?: string;\n}\n\nexport interface WorkspaceConfig {\n backend: WorkspaceBackend;\n /** local backend only */\n dir?: string;\n /** s3 backend only */\n s3?: S3Config;\n}\n\nexport interface ServerConfig {\n cesdkLicense: string;\n /**\n * Build identity, surfaced as the MCP `serverInfo.version`. Lets a client\n * (e.g. the deploy smoketest) detect a stale, not-yet-rolled-out container:\n * the deploy injects the git SHA, the smoketest asserts the running server\n * reports it. Default `'dev'` for local runs.\n */\n buildId: string;\n port: number;\n /** Max concurrent engines/sessions — the RAM cap (spec §9.2). */\n maxEngines: number;\n idleTimeoutMs: number;\n logLevel: string;\n workspace: WorkspaceConfig;\n auth: {\n mode: WorkspaceMode;\n /** header carrying the trusted workspaceId (header mode). */\n header: string;\n /** fixed workspaceId (single mode). */\n fixedWorkspaceId?: string;\n };\n gateway: { apiKey?: string; baseUrl?: string };\n viewerCorsOrigins?: string[];\n /**\n * Public origin of this deployment (e.g. the Cloudflare Worker URL),\n * no trailing slash. Used to build viewer URLs the MCP client's human can\n * actually open. Absent → loopback URLs (local dev).\n */\n publicBaseUrl?: string;\n}\n\nfunction requireEnv(env: Env, name: string): string {\n const v = env[name];\n if (!v) throw new Error(`config: ${name} is required`);\n return v;\n}\n\nfunction intEnv(env: Env, name: string, fallback: number): number {\n const raw = env[name];\n if (raw === undefined) return fallback;\n const n = Number(raw);\n if (!Number.isFinite(n)) throw new Error(`config: ${name} must be a number`);\n return n;\n}\n\nfunction boolEnv(env: Env, name: string, fallback: boolean): boolean {\n const raw = env[name];\n if (raw === undefined) return fallback;\n return raw === 'true' || raw === '1';\n}\n\nexport function loadConfig(env: Env = process.env): ServerConfig {\n const cesdkLicense = resolveSecret('IMGLY_CESDK_LICENSE', env);\n if (!cesdkLicense) throw new Error('config: IMGLY_CESDK_LICENSE is required');\n\n const mode = (env.IMGLY_WORKSPACE_MODE ?? 'header') as WorkspaceMode;\n if (mode !== 'header' && mode !== 'session' && mode !== 'single')\n throw new Error(\n `config: IMGLY_WORKSPACE_MODE must be header|session|single (got \"${mode}\")`\n );\n\n const auth: ServerConfig['auth'] = {\n mode,\n header: env.IMGLY_AUTH_WORKSPACE_HEADER ?? 'X-Workspace-Id'\n };\n if (mode === 'single') {\n auth.fixedWorkspaceId = requireEnv(env, 'IMGLY_WORKSPACE_ID');\n }\n\n const backend = (env.IMGLY_WORKSPACE_BACKEND ?? 'local') as WorkspaceBackend;\n if (backend !== 'local' && backend !== 's3')\n throw new Error(\n `config: IMGLY_WORKSPACE_BACKEND must be local|s3 (got \"${backend}\")`\n );\n\n let workspace: WorkspaceConfig;\n if (backend === 's3') {\n const s3: S3Config = {\n bucket: requireEnv(env, 'IMGLY_WORKSPACE_S3_BUCKET'),\n region: env.IMGLY_WORKSPACE_S3_REGION ?? 'auto'\n };\n if (env.IMGLY_WORKSPACE_S3_ENDPOINT)\n s3.endpoint = env.IMGLY_WORKSPACE_S3_ENDPOINT;\n // Keys are optional: absent -> AWS default credential chain (IAM role).\n const accessKeyId = resolveSecret('IMGLY_WORKSPACE_S3_ACCESS_KEY_ID', env);\n const secretAccessKey = resolveSecret(\n 'IMGLY_WORKSPACE_S3_SECRET_ACCESS_KEY',\n env\n );\n if (accessKeyId) s3.accessKeyId = accessKeyId;\n if (secretAccessKey) s3.secretAccessKey = secretAccessKey;\n workspace = { backend, s3 };\n } else {\n workspace = { backend, dir: env.IMGLY_WORKSPACE_DIR ?? '/data' };\n }\n\n const gateway: ServerConfig['gateway'] = {};\n const gatewayKey = resolveSecret('IMGLY_GATEWAY_API_KEY', env);\n if (gatewayKey) gateway.apiKey = gatewayKey;\n if (env.IMGLY_GATEWAY_BASE_URL) gateway.baseUrl = env.IMGLY_GATEWAY_BASE_URL;\n\n const cfg: ServerConfig = {\n cesdkLicense,\n buildId: env.IMGLY_BUILD_ID ?? 'dev',\n port: intEnv(env, 'PORT', 8080),\n maxEngines: intEnv(env, 'IMGLY_MAX_ENGINES', 8),\n idleTimeoutMs: intEnv(env, 'IMGLY_SESSION_IDLE_TIMEOUT', 900) * 1000,\n logLevel: env.IMGLY_LOG_LEVEL ?? 'info',\n workspace,\n auth,\n gateway\n };\n if (env.IMGLY_VIEWER_CORS_ORIGINS)\n cfg.viewerCorsOrigins = env.IMGLY_VIEWER_CORS_ORIGINS.split(',').map((s) =>\n s.trim()\n );\n if (env.IMGLY_PUBLIC_BASE_URL)\n cfg.publicBaseUrl = env.IMGLY_PUBLIC_BASE_URL.replace(/\\/+$/, '');\n return cfg;\n}\n\n/**\n * Local diagnostics file logging is ON by default so evidence exists before a\n * user knows they hit a bug. Disable with IMGLY_DIAGNOSTICS_FILE=false (or 0).\n */\nexport function diagnosticsFileEnabled(env: Env = process.env): boolean {\n return boolEnv(env, 'IMGLY_DIAGNOSTICS_FILE', true);\n}\n\n/**\n * Where diagnostics NDJSON is written. Explicit IMGLY_DIAGNOSTICS_DIR wins;\n * otherwise <workspaceRoot>/logs, where workspaceRoot mirrors the stdio default\n * ($CODESIGN_WORKSPACE ?? ~/.codesign/workspace).\n */\nexport function resolveDiagnosticsDir(env: Env = process.env): string {\n if (env.IMGLY_DIAGNOSTICS_DIR) return env.IMGLY_DIAGNOSTICS_DIR;\n const workspaceRoot =\n env.CODESIGN_WORKSPACE ?? joinPath(homedir(), '.codesign', 'workspace');\n return joinPath(workspaceRoot, 'logs');\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import type { Env } from '../config.js';
2
+ export interface BundleFile {
3
+ name: string;
4
+ bytes: Buffer;
5
+ }
6
+ export declare function collectBundleFiles(dir: string, meta: Record<string, unknown>): Promise<BundleFile[]>;
7
+ export declare function buildBundleMeta(env?: Env): Record<string, unknown>;
8
+ export declare function runDiagnose(env?: Env): Promise<string>;
9
+ export declare function writeStoreZip(files: BundleFile[], outPath: string): Promise<void>;
10
+ //# sourceMappingURL=bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/diagnostics/bundle.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAIxC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,UAAU,EAAE,CAAC,CAgBvB;AAgBD,wBAAgB,eAAe,CAC7B,GAAG,GAAE,GAAiB,GACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBzB;AAED,wBAAsB,WAAW,CAAC,GAAG,GAAE,GAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAWzE;AAsBD,wBAAsB,aAAa,CACjC,KAAK,EAAE,UAAU,EAAE,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CA0Df"}
@@ -0,0 +1,148 @@
1
+ // packages/codesign-mcp/src/diagnostics/bundle.ts
2
+ //
3
+ // Behind `codesign-mcp diagnose`: collect the rotated NDJSON, scrub raw text
4
+ // (belt-and-suspenders over write-time redaction), add a non-secret meta.json,
5
+ // and pack it all into a single zero-dependency STORE zip the user forwards.
6
+ // No network. Works whether or not a server is running (it just reads disk;
7
+ // the active file's incomplete trailing line is skipped).
8
+ import { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';
9
+ import { join } from 'node:path';
10
+ import { arch, platform } from 'node:os';
11
+ import { createRequire } from 'node:module';
12
+ import { deflateRawSync } from 'node:zlib';
13
+ import { resolveDiagnosticsDir } from '../config.js';
14
+ import { redactText } from './redact.js';
15
+ export async function collectBundleFiles(dir, meta) {
16
+ const names = (await readdir(dir).catch(() => []))
17
+ .filter((n) => /^diagnostics(\.\d+)?\.ndjson$/.test(n))
18
+ .sort();
19
+ const files = [];
20
+ for (const name of names) {
21
+ const raw = await readFile(join(dir, name), 'utf8').catch(() => '');
22
+ const scrubbed = scrubNdjson(raw);
23
+ if (scrubbed.length > 0)
24
+ files.push({ name, bytes: Buffer.from(scrubbed, 'utf8') });
25
+ }
26
+ files.push({
27
+ name: 'meta.json',
28
+ bytes: Buffer.from(redactText(JSON.stringify(meta, null, 2)), 'utf8')
29
+ });
30
+ return files;
31
+ }
32
+ /** Redact each COMPLETE line; drop an incomplete trailing line (mid-write). */
33
+ function scrubNdjson(raw) {
34
+ if (raw.length === 0)
35
+ return '';
36
+ const endsClean = raw.endsWith('\n');
37
+ const lines = raw.split('\n');
38
+ if (!endsClean)
39
+ lines.pop(); // partial trailing line
40
+ return (lines
41
+ .filter((l) => l.length > 0)
42
+ .map((l) => redactText(l))
43
+ .join('\n') + '\n');
44
+ }
45
+ export function buildBundleMeta(env = process.env) {
46
+ const require = createRequire(import.meta.url);
47
+ let cesdkVersion = 'unknown';
48
+ try {
49
+ cesdkVersion = require('@cesdk/engine/package.json').version;
50
+ }
51
+ catch {
52
+ // engine package layout may not expose package.json; leave 'unknown'
53
+ }
54
+ return {
55
+ buildId: env.IMGLY_BUILD_ID ?? 'dev',
56
+ os: platform(),
57
+ arch: arch(),
58
+ node: process.version,
59
+ cesdkEngine: cesdkVersion,
60
+ diagnosticsDir: resolveDiagnosticsDir(env)
61
+ };
62
+ }
63
+ export async function runDiagnose(env = process.env) {
64
+ const dir = resolveDiagnosticsDir(env);
65
+ // Ensure the dir exists — on a fresh install there may be no logs yet but the
66
+ // user still expects a zip (it will contain only meta.json).
67
+ await mkdir(dir, { recursive: true });
68
+ const files = await collectBundleFiles(dir, buildBundleMeta(env));
69
+ // Timestamp is injected by the caller of Date.now at runtime — fine in product code.
70
+ const stamp = new Date().toISOString().replace(/[:.]/g, '-');
71
+ const outPath = join(dir, `diagnostics-${stamp}.zip`);
72
+ await writeStoreZip(files, outPath);
73
+ return outPath;
74
+ }
75
+ // --- Minimal ZIP writer (deflate, zero deps) ---------------------------------
76
+ // One local-file-header + data per entry, then a central directory. Enough for
77
+ // any unzip tool to open; we deflate with node:zlib to keep bundles small.
78
+ const CRC_TABLE = (() => {
79
+ const t = new Uint32Array(256);
80
+ for (let n = 0; n < 256; n++) {
81
+ let c = n;
82
+ for (let k = 0; k < 8; k++)
83
+ c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
84
+ t[n] = c >>> 0;
85
+ }
86
+ return t;
87
+ })();
88
+ function crc32(buf) {
89
+ let c = 0xffffffff;
90
+ for (let i = 0; i < buf.length; i++)
91
+ c = CRC_TABLE[(c ^ buf[i]) & 0xff] ^ (c >>> 8);
92
+ return (c ^ 0xffffffff) >>> 0;
93
+ }
94
+ export async function writeStoreZip(files, outPath) {
95
+ const chunks = [];
96
+ const central = [];
97
+ let offset = 0;
98
+ for (const file of files) {
99
+ const nameBuf = Buffer.from(file.name, 'utf8');
100
+ const crc = crc32(file.bytes);
101
+ const compressed = deflateRawSync(file.bytes);
102
+ const local = Buffer.alloc(30);
103
+ local.writeUInt32LE(0x04034b50, 0); // local file header signature
104
+ local.writeUInt16LE(20, 4); // version needed
105
+ local.writeUInt16LE(0, 6); // flags
106
+ local.writeUInt16LE(8, 8); // method: deflate
107
+ local.writeUInt16LE(0, 10); // mod time
108
+ local.writeUInt16LE(0, 12); // mod date
109
+ local.writeUInt32LE(crc, 14);
110
+ local.writeUInt32LE(compressed.length, 18);
111
+ local.writeUInt32LE(file.bytes.length, 22);
112
+ local.writeUInt16LE(nameBuf.length, 26);
113
+ local.writeUInt16LE(0, 28); // extra len
114
+ chunks.push(local, nameBuf, compressed);
115
+ const cd = Buffer.alloc(46);
116
+ cd.writeUInt32LE(0x02014b50, 0); // central dir header signature
117
+ cd.writeUInt16LE(20, 4); // version made by
118
+ cd.writeUInt16LE(20, 6); // version needed
119
+ cd.writeUInt16LE(0, 8); // flags
120
+ cd.writeUInt16LE(8, 10); // method
121
+ cd.writeUInt16LE(0, 12);
122
+ cd.writeUInt16LE(0, 14);
123
+ cd.writeUInt32LE(crc, 16);
124
+ cd.writeUInt32LE(compressed.length, 20);
125
+ cd.writeUInt32LE(file.bytes.length, 24);
126
+ cd.writeUInt16LE(nameBuf.length, 28);
127
+ cd.writeUInt16LE(0, 30); // extra
128
+ cd.writeUInt16LE(0, 32); // comment
129
+ cd.writeUInt16LE(0, 34); // disk #
130
+ cd.writeUInt16LE(0, 36); // internal attrs
131
+ cd.writeUInt32LE(0, 38); // external attrs
132
+ cd.writeUInt32LE(offset, 42); // local header offset
133
+ central.push(cd, nameBuf);
134
+ offset += local.length + nameBuf.length + compressed.length;
135
+ }
136
+ const centralBuf = Buffer.concat(central);
137
+ const end = Buffer.alloc(22);
138
+ end.writeUInt32LE(0x06054b50, 0); // end of central dir signature
139
+ end.writeUInt16LE(0, 4);
140
+ end.writeUInt16LE(0, 6);
141
+ end.writeUInt16LE(files.length, 8);
142
+ end.writeUInt16LE(files.length, 10);
143
+ end.writeUInt32LE(centralBuf.length, 12);
144
+ end.writeUInt32LE(offset, 16);
145
+ end.writeUInt16LE(0, 20);
146
+ await writeFile(outPath, Buffer.concat([...chunks, centralBuf, end]));
147
+ }
148
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/diagnostics/bundle.ts"],"names":[],"mappings":"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","sourcesContent":["// packages/codesign-mcp/src/diagnostics/bundle.ts\n//\n// Behind `codesign-mcp diagnose`: collect the rotated NDJSON, scrub raw text\n// (belt-and-suspenders over write-time redaction), add a non-secret meta.json,\n// and pack it all into a single zero-dependency STORE zip the user forwards.\n// No network. Works whether or not a server is running (it just reads disk;\n// the active file's incomplete trailing line is skipped).\nimport { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { arch, platform } from 'node:os';\nimport { createRequire } from 'node:module';\nimport { deflateRawSync } from 'node:zlib';\nimport type { Env } from '../config.js';\nimport { resolveDiagnosticsDir } from '../config.js';\nimport { redactText } from './redact.js';\n\nexport interface BundleFile {\n name: string;\n bytes: Buffer;\n}\n\nexport async function collectBundleFiles(\n dir: string,\n meta: Record<string, unknown>\n): Promise<BundleFile[]> {\n const names = (await readdir(dir).catch(() => [] as string[]))\n .filter((n) => /^diagnostics(\\.\\d+)?\\.ndjson$/.test(n))\n .sort();\n const files: BundleFile[] = [];\n for (const name of names) {\n const raw = await readFile(join(dir, name), 'utf8').catch(() => '');\n const scrubbed = scrubNdjson(raw);\n if (scrubbed.length > 0)\n files.push({ name, bytes: Buffer.from(scrubbed, 'utf8') });\n }\n files.push({\n name: 'meta.json',\n bytes: Buffer.from(redactText(JSON.stringify(meta, null, 2)), 'utf8')\n });\n return files;\n}\n\n/** Redact each COMPLETE line; drop an incomplete trailing line (mid-write). */\nfunction scrubNdjson(raw: string): string {\n if (raw.length === 0) return '';\n const endsClean = raw.endsWith('\\n');\n const lines = raw.split('\\n');\n if (!endsClean) lines.pop(); // partial trailing line\n return (\n lines\n .filter((l) => l.length > 0)\n .map((l) => redactText(l))\n .join('\\n') + '\\n'\n );\n}\n\nexport function buildBundleMeta(\n env: Env = process.env\n): Record<string, unknown> {\n const require = createRequire(import.meta.url);\n let cesdkVersion = 'unknown';\n try {\n cesdkVersion = (\n require('@cesdk/engine/package.json') as { version: string }\n ).version;\n } catch {\n // engine package layout may not expose package.json; leave 'unknown'\n }\n return {\n buildId: env.IMGLY_BUILD_ID ?? 'dev',\n os: platform(),\n arch: arch(),\n node: process.version,\n cesdkEngine: cesdkVersion,\n diagnosticsDir: resolveDiagnosticsDir(env)\n };\n}\n\nexport async function runDiagnose(env: Env = process.env): Promise<string> {\n const dir = resolveDiagnosticsDir(env);\n // Ensure the dir exists — on a fresh install there may be no logs yet but the\n // user still expects a zip (it will contain only meta.json).\n await mkdir(dir, { recursive: true });\n const files = await collectBundleFiles(dir, buildBundleMeta(env));\n // Timestamp is injected by the caller of Date.now at runtime — fine in product code.\n const stamp = new Date().toISOString().replace(/[:.]/g, '-');\n const outPath = join(dir, `diagnostics-${stamp}.zip`);\n await writeStoreZip(files, outPath);\n return outPath;\n}\n\n// --- Minimal ZIP writer (deflate, zero deps) ---------------------------------\n// One local-file-header + data per entry, then a central directory. Enough for\n// any unzip tool to open; we deflate with node:zlib to keep bundles small.\nconst CRC_TABLE = (() => {\n const t = new Uint32Array(256);\n for (let n = 0; n < 256; n++) {\n let c = n;\n for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n t[n] = c >>> 0;\n }\n return t;\n})();\n\nfunction crc32(buf: Buffer): number {\n let c = 0xffffffff;\n for (let i = 0; i < buf.length; i++)\n c = CRC_TABLE[(c ^ buf[i]) & 0xff] ^ (c >>> 8);\n return (c ^ 0xffffffff) >>> 0;\n}\n\nexport async function writeStoreZip(\n files: BundleFile[],\n outPath: string\n): Promise<void> {\n const chunks: Buffer[] = [];\n const central: Buffer[] = [];\n let offset = 0;\n\n for (const file of files) {\n const nameBuf = Buffer.from(file.name, 'utf8');\n const crc = crc32(file.bytes);\n const compressed = deflateRawSync(file.bytes);\n const local = Buffer.alloc(30);\n local.writeUInt32LE(0x04034b50, 0); // local file header signature\n local.writeUInt16LE(20, 4); // version needed\n local.writeUInt16LE(0, 6); // flags\n local.writeUInt16LE(8, 8); // method: deflate\n local.writeUInt16LE(0, 10); // mod time\n local.writeUInt16LE(0, 12); // mod date\n local.writeUInt32LE(crc, 14);\n local.writeUInt32LE(compressed.length, 18);\n local.writeUInt32LE(file.bytes.length, 22);\n local.writeUInt16LE(nameBuf.length, 26);\n local.writeUInt16LE(0, 28); // extra len\n chunks.push(local, nameBuf, compressed);\n\n const cd = Buffer.alloc(46);\n cd.writeUInt32LE(0x02014b50, 0); // central dir header signature\n cd.writeUInt16LE(20, 4); // version made by\n cd.writeUInt16LE(20, 6); // version needed\n cd.writeUInt16LE(0, 8); // flags\n cd.writeUInt16LE(8, 10); // method\n cd.writeUInt16LE(0, 12);\n cd.writeUInt16LE(0, 14);\n cd.writeUInt32LE(crc, 16);\n cd.writeUInt32LE(compressed.length, 20);\n cd.writeUInt32LE(file.bytes.length, 24);\n cd.writeUInt16LE(nameBuf.length, 28);\n cd.writeUInt16LE(0, 30); // extra\n cd.writeUInt16LE(0, 32); // comment\n cd.writeUInt16LE(0, 34); // disk #\n cd.writeUInt16LE(0, 36); // internal attrs\n cd.writeUInt32LE(0, 38); // external attrs\n cd.writeUInt32LE(offset, 42); // local header offset\n central.push(cd, nameBuf);\n\n offset += local.length + nameBuf.length + compressed.length;\n }\n\n const centralBuf = Buffer.concat(central);\n const end = Buffer.alloc(22);\n end.writeUInt32LE(0x06054b50, 0); // end of central dir signature\n end.writeUInt16LE(0, 4);\n end.writeUInt16LE(0, 6);\n end.writeUInt16LE(files.length, 8);\n end.writeUInt16LE(files.length, 10);\n end.writeUInt32LE(centralBuf.length, 12);\n end.writeUInt32LE(offset, 16);\n end.writeUInt16LE(0, 20);\n\n await writeFile(outPath, Buffer.concat([...chunks, centralBuf, end]));\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { DiagnosticsSink } from './events.js';
2
+ export declare function composeSinks(...sinks: DiagnosticsSink[]): DiagnosticsSink;
3
+ //# sourceMappingURL=compose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/diagnostics/compose.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAmB,eAAe,EAAE,MAAM,aAAa,CAAC;AAEpE,wBAAgB,YAAY,CAAC,GAAG,KAAK,EAAE,eAAe,EAAE,GAAG,eAAe,CAYzE"}
@@ -0,0 +1,15 @@
1
+ export function composeSinks(...sinks) {
2
+ return {
3
+ emit(event) {
4
+ for (const sink of sinks) {
5
+ try {
6
+ sink.emit(event);
7
+ }
8
+ catch {
9
+ // A misbehaving sink must never break event production.
10
+ }
11
+ }
12
+ }
13
+ };
14
+ }
15
+ //# sourceMappingURL=compose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose.js","sourceRoot":"","sources":["../../src/diagnostics/compose.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,YAAY,CAAC,GAAG,KAAwB;IACtD,OAAO;QACL,IAAI,CAAC,KAAsB;YACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACH,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,CAAC;gBAAC,MAAM,CAAC;oBACP,wDAAwD;gBAC1D,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["// packages/codesign-mcp/src/diagnostics/compose.ts\n//\n// Fan one event out to N sinks. M1 uses a single file sink; compose keeps the\n// future multi-sink path trivial and lets tests observe alongside the file sink.\n// One sink throwing must not rob the others (or the caller) — each emit is guarded.\nimport type { DiagnosticEvent, DiagnosticsSink } from './events.js';\n\nexport function composeSinks(...sinks: DiagnosticsSink[]): DiagnosticsSink {\n return {\n emit(event: DiagnosticEvent): void {\n for (const sink of sinks) {\n try {\n sink.emit(event);\n } catch {\n // A misbehaving sink must never break event production.\n }\n }\n }\n };\n}\n"]}
@@ -0,0 +1,34 @@
1
+ import type { Span } from '../tools/spans.js';
2
+ export interface ErrorInfo {
3
+ message: string;
4
+ stack?: string;
5
+ }
6
+ export type DiagnosticEvent = {
7
+ kind: 'tool_call';
8
+ timestamp: number;
9
+ tool: string;
10
+ succeeded: boolean;
11
+ totalMs: number;
12
+ spans: Span[];
13
+ error?: ErrorInfo;
14
+ args?: unknown;
15
+ result?: unknown;
16
+ revision?: string;
17
+ session?: string;
18
+ } | {
19
+ kind: 'engine_log';
20
+ timestamp: number;
21
+ level: 'log' | 'info' | 'warn' | 'error' | 'debug' | 'trace';
22
+ text: string;
23
+ } | {
24
+ kind: 'lifecycle';
25
+ timestamp: number;
26
+ text: string;
27
+ error?: ErrorInfo;
28
+ };
29
+ export interface DiagnosticsSink {
30
+ emit(event: DiagnosticEvent): void;
31
+ }
32
+ /** The off-switch: a sink that accepts and discards every event. */
33
+ export declare const NOOP_DIAGNOSTICS_SINK: DiagnosticsSink;
34
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/diagnostics/events.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,eAAe,GACvB;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAC7D,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,CAAC;AAEN,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;CACpC;AAED,oEAAoE;AACpE,eAAO,MAAM,qBAAqB,EAAE,eAA+B,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** The off-switch: a sink that accepts and discards every event. */
2
+ export const NOOP_DIAGNOSTICS_SINK = { emit() { } };
3
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/diagnostics/events.ts"],"names":[],"mappings":"AA2CA,oEAAoE;AACpE,MAAM,CAAC,MAAM,qBAAqB,GAAoB,EAAE,IAAI,KAAI,CAAC,EAAE,CAAC","sourcesContent":["// packages/codesign-mcp/src/diagnostics/events.ts\n//\n// The single transport shape for the diagnostics stream. Every diagnostic datum\n// — tool call, engine console line, lifecycle breadcrumb — is one DiagnosticEvent,\n// one NDJSON line. Sinks (file today; OTel/in-memory later) consume this union.\nimport type { Span } from '../tools/spans.js';\n\nexport interface ErrorInfo {\n message: string;\n stack?: string;\n}\n\nexport type DiagnosticEvent =\n | {\n kind: 'tool_call';\n timestamp: number;\n tool: string;\n succeeded: boolean;\n totalMs: number;\n spans: Span[];\n error?: ErrorInfo;\n args?: unknown;\n result?: unknown;\n revision?: string;\n session?: string;\n }\n | {\n kind: 'engine_log';\n timestamp: number;\n level: 'log' | 'info' | 'warn' | 'error' | 'debug' | 'trace';\n text: string;\n }\n | {\n kind: 'lifecycle';\n timestamp: number;\n text: string;\n error?: ErrorInfo;\n };\n\nexport interface DiagnosticsSink {\n emit(event: DiagnosticEvent): void;\n}\n\n/** The off-switch: a sink that accepts and discards every event. */\nexport const NOOP_DIAGNOSTICS_SINK: DiagnosticsSink = { emit() {} };\n"]}
@@ -0,0 +1,38 @@
1
+ import type { DiagnosticEvent, DiagnosticsSink } from './events.js';
2
+ export interface FileSinkOptions {
3
+ dir: string;
4
+ fileName?: string;
5
+ maxFileBytes?: number;
6
+ keep?: number;
7
+ totalBudgetBytes?: number;
8
+ maxAgeMs?: number;
9
+ }
10
+ export declare class FileDiagnosticsSink implements DiagnosticsSink {
11
+ private readonly dir;
12
+ private readonly fileName;
13
+ private readonly maxFileBytes;
14
+ private readonly keep;
15
+ private readonly totalBudgetBytes;
16
+ private readonly active;
17
+ private tail;
18
+ private gitignoreWritten;
19
+ private notifiedError;
20
+ constructor(opts: FileSinkOptions);
21
+ emit(event: DiagnosticEvent): void;
22
+ /** Await all queued writes — for tests and graceful shutdown. */
23
+ flush(): Promise<void>;
24
+ private write;
25
+ private activeSize;
26
+ private rotate;
27
+ private enforceBudget;
28
+ private rotatedPath;
29
+ private rotatedFiles;
30
+ private noteError;
31
+ /**
32
+ * Startup GC: delete rotated files older than maxAgeMs, then enforce the
33
+ * total-size budget. The safe point to run this is before any writer is
34
+ * active. Never throws.
35
+ */
36
+ static pruneOnStartup(opts: FileSinkOptions): Promise<void>;
37
+ }
38
+ //# sourceMappingURL=file-sink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-sink.d.ts","sourceRoot":"","sources":["../../src/diagnostics/file-sink.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGpE,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAYD,qBAAa,mBAAoB,YAAW,eAAe;IACzD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,IAAI,CAAoC;IAChD,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,aAAa,CAAS;gBAElB,IAAI,EAAE,eAAe;IASjC,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAmBlC,iEAAiE;IAC3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAId,KAAK;YAaL,UAAU;YAQV,MAAM;YAeN,aAAa;IAW3B,OAAO,CAAC,WAAW;YAOL,YAAY;IAiB1B,OAAO,CAAC,SAAS;IAQjB;;;;OAIG;WACU,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CA0BlE"}
@@ -0,0 +1,157 @@
1
+ // packages/codesign-mcp/src/diagnostics/file-sink.ts
2
+ //
3
+ // The M1 sink: one rotated NDJSON file holding the whole stream, redacted at
4
+ // write so secrets never touch disk. Bounded three ways — per-file rotation,
5
+ // a total-size budget across rotated files, and a startup prune by age +
6
+ // budget. emit() is fire-and-forget (queued) so it never adds tool latency,
7
+ // and it swallows its own I/O errors so a failed append can't break a call.
8
+ import { appendFile, stat, rename, unlink, mkdir, readdir, writeFile } from 'node:fs/promises';
9
+ import { join } from 'node:path';
10
+ import { redactValue } from './redact.js';
11
+ const DEFAULTS = {
12
+ fileName: 'diagnostics.ndjson',
13
+ maxFileBytes: 8 * 1024 * 1024,
14
+ keep: 5,
15
+ totalBudgetBytes: 50 * 1024 * 1024,
16
+ maxAgeMs: 14 * 24 * 60 * 60 * 1000
17
+ };
18
+ const ROTATED_RE = /^(.*)\.(\d+)\.ndjson$/;
19
+ export class FileDiagnosticsSink {
20
+ constructor(opts) {
21
+ this.tail = Promise.resolve();
22
+ this.gitignoreWritten = false;
23
+ this.notifiedError = false;
24
+ this.dir = opts.dir;
25
+ this.fileName = opts.fileName ?? DEFAULTS.fileName;
26
+ this.maxFileBytes = opts.maxFileBytes ?? DEFAULTS.maxFileBytes;
27
+ this.keep = opts.keep ?? DEFAULTS.keep;
28
+ this.totalBudgetBytes = opts.totalBudgetBytes ?? DEFAULTS.totalBudgetBytes;
29
+ this.active = join(this.dir, this.fileName);
30
+ }
31
+ emit(event) {
32
+ // Redact at write: secrets never hit disk. Fail-closed — a redactor throw
33
+ // drops the payload to a stub rather than writing raw.
34
+ let line;
35
+ try {
36
+ line = JSON.stringify(redactValue(event)) + '\n';
37
+ }
38
+ catch {
39
+ line =
40
+ JSON.stringify({
41
+ kind: event?.kind ?? 'unknown',
42
+ timestamp: event?.timestamp ?? 0,
43
+ redactionError: true
44
+ }) + '\n';
45
+ }
46
+ this.tail = this.tail
47
+ .then(() => this.write(line))
48
+ .catch((err) => this.noteError(err));
49
+ }
50
+ /** Await all queued writes — for tests and graceful shutdown. */
51
+ async flush() {
52
+ await this.tail;
53
+ }
54
+ async write(line) {
55
+ await mkdir(this.dir, { recursive: true });
56
+ if (!this.gitignoreWritten) {
57
+ this.gitignoreWritten = true;
58
+ await writeFile(join(this.dir, '.gitignore'), '*\n').catch(() => { });
59
+ }
60
+ const size = await this.activeSize();
61
+ if (size > 0 && size + Buffer.byteLength(line) > this.maxFileBytes) {
62
+ await this.rotate();
63
+ }
64
+ await appendFile(this.active, line);
65
+ }
66
+ async activeSize() {
67
+ try {
68
+ return (await stat(this.active)).size;
69
+ }
70
+ catch {
71
+ return 0;
72
+ }
73
+ }
74
+ async rotate() {
75
+ // Shift diagnostics.N.ndjson -> N+1, active -> .1, then trim to keep + budget.
76
+ const rotated = await this.rotatedFiles();
77
+ for (const { index } of rotated.sort((a, b) => b.index - a.index)) {
78
+ const from = this.rotatedPath(index);
79
+ if (index + 1 > this.keep) {
80
+ await unlink(from).catch(() => { });
81
+ }
82
+ else {
83
+ await rename(from, this.rotatedPath(index + 1)).catch(() => { });
84
+ }
85
+ }
86
+ await rename(this.active, this.rotatedPath(1)).catch(() => { });
87
+ await this.enforceBudget();
88
+ }
89
+ async enforceBudget() {
90
+ const rotated = await this.rotatedFiles();
91
+ let total = rotated.reduce((n, r) => n + r.size, 0);
92
+ // Delete oldest (highest index) first until under budget.
93
+ for (const r of rotated.sort((a, b) => b.index - a.index)) {
94
+ if (total <= this.totalBudgetBytes)
95
+ break;
96
+ await unlink(this.rotatedPath(r.index)).catch(() => { });
97
+ total -= r.size;
98
+ }
99
+ }
100
+ rotatedPath(index) {
101
+ return join(this.dir, `${this.fileName.replace(/\.ndjson$/, '')}.${index}.ndjson`);
102
+ }
103
+ async rotatedFiles() {
104
+ const base = this.fileName.replace(/\.ndjson$/, '');
105
+ const out = [];
106
+ for (const name of await readdir(this.dir).catch(() => [])) {
107
+ const m = name.match(ROTATED_RE);
108
+ if (m && m[1] === base) {
109
+ const size = (await stat(join(this.dir, name)).catch(() => ({ size: 0 }))).size;
110
+ out.push({ index: Number(m[2]), size });
111
+ }
112
+ }
113
+ return out;
114
+ }
115
+ noteError(err) {
116
+ if (this.notifiedError)
117
+ return;
118
+ this.notifiedError = true;
119
+ process.stderr.write(`codesign-mcp: diagnostics file write failed — ${err instanceof Error ? err.message : String(err)}\n`);
120
+ }
121
+ /**
122
+ * Startup GC: delete rotated files older than maxAgeMs, then enforce the
123
+ * total-size budget. The safe point to run this is before any writer is
124
+ * active. Never throws.
125
+ */
126
+ static async pruneOnStartup(opts) {
127
+ const dir = opts.dir;
128
+ const fileName = opts.fileName ?? DEFAULTS.fileName;
129
+ const base = fileName.replace(/\.ndjson$/, '');
130
+ const maxAgeMs = opts.maxAgeMs ?? DEFAULTS.maxAgeMs;
131
+ const totalBudgetBytes = opts.totalBudgetBytes ?? DEFAULTS.totalBudgetBytes;
132
+ const now = Date.now();
133
+ const rotated = [];
134
+ for (const name of await readdir(dir).catch(() => [])) {
135
+ const m = name.match(ROTATED_RE);
136
+ if (!m || m[1] !== base)
137
+ continue;
138
+ const s = await stat(join(dir, name)).catch(() => null);
139
+ if (!s)
140
+ continue;
141
+ if (now - s.mtimeMs > maxAgeMs) {
142
+ await unlink(join(dir, name)).catch(() => { });
143
+ }
144
+ else {
145
+ rotated.push({ index: Number(m[2]), size: s.size, mtimeMs: s.mtimeMs });
146
+ }
147
+ }
148
+ let total = rotated.reduce((n, r) => n + r.size, 0);
149
+ for (const r of rotated.sort((a, b) => b.index - a.index)) {
150
+ if (total <= totalBudgetBytes)
151
+ break;
152
+ await unlink(join(dir, `${base}.${r.index}.ndjson`)).catch(() => { });
153
+ total -= r.size;
154
+ }
155
+ }
156
+ }
157
+ //# sourceMappingURL=file-sink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-sink.js","sourceRoot":"","sources":["../../src/diagnostics/file-sink.ts"],"names":[],"mappings":"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","sourcesContent":["// packages/codesign-mcp/src/diagnostics/file-sink.ts\n//\n// The M1 sink: one rotated NDJSON file holding the whole stream, redacted at\n// write so secrets never touch disk. Bounded three ways — per-file rotation,\n// a total-size budget across rotated files, and a startup prune by age +\n// budget. emit() is fire-and-forget (queued) so it never adds tool latency,\n// and it swallows its own I/O errors so a failed append can't break a call.\nimport {\n appendFile,\n stat,\n rename,\n unlink,\n mkdir,\n readdir,\n writeFile\n} from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { DiagnosticEvent, DiagnosticsSink } from './events.js';\nimport { redactValue } from './redact.js';\n\nexport interface FileSinkOptions {\n dir: string;\n fileName?: string;\n maxFileBytes?: number;\n keep?: number;\n totalBudgetBytes?: number;\n maxAgeMs?: number;\n}\n\nconst DEFAULTS = {\n fileName: 'diagnostics.ndjson',\n maxFileBytes: 8 * 1024 * 1024,\n keep: 5,\n totalBudgetBytes: 50 * 1024 * 1024,\n maxAgeMs: 14 * 24 * 60 * 60 * 1000\n};\n\nconst ROTATED_RE = /^(.*)\\.(\\d+)\\.ndjson$/;\n\nexport class FileDiagnosticsSink implements DiagnosticsSink {\n private readonly dir: string;\n private readonly fileName: string;\n private readonly maxFileBytes: number;\n private readonly keep: number;\n private readonly totalBudgetBytes: number;\n private readonly active: string;\n private tail: Promise<void> = Promise.resolve();\n private gitignoreWritten = false;\n private notifiedError = false;\n\n constructor(opts: FileSinkOptions) {\n this.dir = opts.dir;\n this.fileName = opts.fileName ?? DEFAULTS.fileName;\n this.maxFileBytes = opts.maxFileBytes ?? DEFAULTS.maxFileBytes;\n this.keep = opts.keep ?? DEFAULTS.keep;\n this.totalBudgetBytes = opts.totalBudgetBytes ?? DEFAULTS.totalBudgetBytes;\n this.active = join(this.dir, this.fileName);\n }\n\n emit(event: DiagnosticEvent): void {\n // Redact at write: secrets never hit disk. Fail-closed — a redactor throw\n // drops the payload to a stub rather than writing raw.\n let line: string;\n try {\n line = JSON.stringify(redactValue(event)) + '\\n';\n } catch {\n line =\n JSON.stringify({\n kind: event?.kind ?? 'unknown',\n timestamp: event?.timestamp ?? 0,\n redactionError: true\n }) + '\\n';\n }\n this.tail = this.tail\n .then(() => this.write(line))\n .catch((err) => this.noteError(err));\n }\n\n /** Await all queued writes — for tests and graceful shutdown. */\n async flush(): Promise<void> {\n await this.tail;\n }\n\n private async write(line: string): Promise<void> {\n await mkdir(this.dir, { recursive: true });\n if (!this.gitignoreWritten) {\n this.gitignoreWritten = true;\n await writeFile(join(this.dir, '.gitignore'), '*\\n').catch(() => {});\n }\n const size = await this.activeSize();\n if (size > 0 && size + Buffer.byteLength(line) > this.maxFileBytes) {\n await this.rotate();\n }\n await appendFile(this.active, line);\n }\n\n private async activeSize(): Promise<number> {\n try {\n return (await stat(this.active)).size;\n } catch {\n return 0;\n }\n }\n\n private async rotate(): Promise<void> {\n // Shift diagnostics.N.ndjson -> N+1, active -> .1, then trim to keep + budget.\n const rotated = await this.rotatedFiles();\n for (const { index } of rotated.sort((a, b) => b.index - a.index)) {\n const from = this.rotatedPath(index);\n if (index + 1 > this.keep) {\n await unlink(from).catch(() => {});\n } else {\n await rename(from, this.rotatedPath(index + 1)).catch(() => {});\n }\n }\n await rename(this.active, this.rotatedPath(1)).catch(() => {});\n await this.enforceBudget();\n }\n\n private async enforceBudget(): Promise<void> {\n const rotated = await this.rotatedFiles();\n let total = rotated.reduce((n, r) => n + r.size, 0);\n // Delete oldest (highest index) first until under budget.\n for (const r of rotated.sort((a, b) => b.index - a.index)) {\n if (total <= this.totalBudgetBytes) break;\n await unlink(this.rotatedPath(r.index)).catch(() => {});\n total -= r.size;\n }\n }\n\n private rotatedPath(index: number): string {\n return join(\n this.dir,\n `${this.fileName.replace(/\\.ndjson$/, '')}.${index}.ndjson`\n );\n }\n\n private async rotatedFiles(): Promise<\n Array<{ index: number; size: number }>\n > {\n const base = this.fileName.replace(/\\.ndjson$/, '');\n const out: Array<{ index: number; size: number }> = [];\n for (const name of await readdir(this.dir).catch(() => [] as string[])) {\n const m = name.match(ROTATED_RE);\n if (m && m[1] === base) {\n const size = (\n await stat(join(this.dir, name)).catch(() => ({ size: 0 }))\n ).size;\n out.push({ index: Number(m[2]), size });\n }\n }\n return out;\n }\n\n private noteError(err: unknown): void {\n if (this.notifiedError) return;\n this.notifiedError = true;\n process.stderr.write(\n `codesign-mcp: diagnostics file write failed — ${err instanceof Error ? err.message : String(err)}\\n`\n );\n }\n\n /**\n * Startup GC: delete rotated files older than maxAgeMs, then enforce the\n * total-size budget. The safe point to run this is before any writer is\n * active. Never throws.\n */\n static async pruneOnStartup(opts: FileSinkOptions): Promise<void> {\n const dir = opts.dir;\n const fileName = opts.fileName ?? DEFAULTS.fileName;\n const base = fileName.replace(/\\.ndjson$/, '');\n const maxAgeMs = opts.maxAgeMs ?? DEFAULTS.maxAgeMs;\n const totalBudgetBytes = opts.totalBudgetBytes ?? DEFAULTS.totalBudgetBytes;\n const now = Date.now();\n const rotated: Array<{ index: number; size: number; mtimeMs: number }> = [];\n for (const name of await readdir(dir).catch(() => [] as string[])) {\n const m = name.match(ROTATED_RE);\n if (!m || m[1] !== base) continue;\n const s = await stat(join(dir, name)).catch(() => null);\n if (!s) continue;\n if (now - s.mtimeMs > maxAgeMs) {\n await unlink(join(dir, name)).catch(() => {});\n } else {\n rotated.push({ index: Number(m[2]), size: s.size, mtimeMs: s.mtimeMs });\n }\n }\n let total = rotated.reduce((n, r) => n + r.size, 0);\n for (const r of rotated.sort((a, b) => b.index - a.index)) {\n if (total <= totalBudgetBytes) break;\n await unlink(join(dir, `${base}.${r.index}.ndjson`)).catch(() => {});\n total -= r.size;\n }\n }\n}\n"]}
@@ -0,0 +1,7 @@
1
+ /** Key names whose VALUE is always dropped, matched case-insensitively. */
2
+ export declare const SECRET_KEY_RE: RegExp;
3
+ /** Substrings shaped like a credential; scrubbed out of any string. */
4
+ export declare const SECRET_PATTERNS: RegExp[];
5
+ export declare function redactText(text: string): string;
6
+ export declare function redactValue(value: unknown): unknown;
7
+ //# sourceMappingURL=redact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/diagnostics/redact.ts"],"names":[],"mappings":"AAUA,2EAA2E;AAC3E,eAAO,MAAM,aAAa,QACoC,CAAC;AAE/D,uEAAuE;AACvE,eAAO,MAAM,eAAe,EAAE,MAAM,EAOnC,CAAC;AAEF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAWnD"}