@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.
- package/README.md +51 -1
- package/assets/docs/guide/SKILL.md +45 -53
- package/assets/docs/guide/animation/create/base.md +234 -243
- package/assets/docs/guide/animation/create/text.md +250 -231
- package/assets/docs/guide/animation/create.md +197 -231
- package/assets/docs/guide/animation/edit.md +196 -271
- package/assets/docs/guide/animation/types.md +182 -185
- package/assets/docs/guide/animation.md +9 -6
- package/assets/docs/guide/api/AssetAPI.md +7 -53
- package/assets/docs/guide/api/BlockAPI.md +725 -648
- package/assets/docs/guide/api/CreativeEngine.md +7 -16
- package/assets/docs/guide/api/EditorAPI.md +32 -93
- package/assets/docs/guide/api/EventAPI.md +1 -2
- package/assets/docs/guide/api/SceneAPI.md +47 -98
- package/assets/docs/guide/api/VariableAPI.md +1 -4
- package/assets/docs/guide/api/node/classes/assetapi.md +1090 -0
- package/assets/docs/guide/api/node/classes/blockapi.md +12965 -0
- package/assets/docs/guide/api/node/classes/creativeengine.md +319 -0
- package/assets/docs/guide/api/node/classes/editorapi.md +3417 -0
- package/assets/docs/guide/api/node/classes/engineactions.md +319 -0
- package/assets/docs/guide/api/node/classes/eventapi.md +56 -0
- package/assets/docs/guide/api/node/classes/sceneapi.md +1370 -0
- package/assets/docs/guide/api/node/classes/variableapi.md +143 -0
- package/assets/docs/guide/api/node/enumerations/compressionformat.md +23 -0
- package/assets/docs/guide/api/node/enumerations/compressionlevel.md +24 -0
- package/assets/docs/guide/api/node/functions/iscmykcolor.md +30 -0
- package/assets/docs/guide/api/node/functions/isrgbacolor.md +30 -0
- package/assets/docs/guide/api/node/functions/isspotcolor.md +30 -0
- package/assets/docs/guide/api/node/interfaces/addvideooptions.md +31 -0
- package/assets/docs/guide/api/node/interfaces/applyassetoptions.md +31 -0
- package/assets/docs/guide/api/node/interfaces/asset.md +30 -0
- package/assets/docs/guide/api/node/interfaces/assetbooleanproperty.md +25 -0
- package/assets/docs/guide/api/node/interfaces/assetcmykcolor.md +26 -0
- package/assets/docs/guide/api/node/interfaces/assetcolorproperty.md +25 -0
- package/assets/docs/guide/api/node/interfaces/assetcontentaspectratio.md +23 -0
- package/assets/docs/guide/api/node/interfaces/assetdefinition.md +31 -0
- package/assets/docs/guide/api/node/interfaces/assetenumproperty.md +26 -0
- package/assets/docs/guide/api/node/interfaces/assetfixedaspectratio.md +24 -0
- package/assets/docs/guide/api/node/interfaces/assetfixedsize.md +25 -0
- package/assets/docs/guide/api/node/interfaces/assetfreeaspectratio.md +22 -0
- package/assets/docs/guide/api/node/interfaces/assetnumberproperty.md +28 -0
- package/assets/docs/guide/api/node/interfaces/assetpayload.md +27 -0
- package/assets/docs/guide/api/node/interfaces/assetquerydata.md +32 -0
- package/assets/docs/guide/api/node/interfaces/assetresult.md +46 -0
- package/assets/docs/guide/api/node/interfaces/assetrgbcolor.md +25 -0
- package/assets/docs/guide/api/node/interfaces/assetsource.md +111 -0
- package/assets/docs/guide/api/node/interfaces/assetspotcolor.md +25 -0
- package/assets/docs/guide/api/node/interfaces/assetsqueryresult.md +31 -0
- package/assets/docs/guide/api/node/interfaces/assetstringproperty.md +25 -0
- package/assets/docs/guide/api/node/interfaces/assetstylepreset.md +39 -0
- package/assets/docs/guide/api/node/interfaces/assetstylepresetanimation.md +23 -0
- package/assets/docs/guide/api/node/interfaces/audiotrackinfo.md +32 -0
- package/assets/docs/guide/api/node/interfaces/blockevent.md +26 -0
- package/assets/docs/guide/api/node/interfaces/blockstateerror.md +26 -0
- package/assets/docs/guide/api/node/interfaces/blockstatepending.md +26 -0
- package/assets/docs/guide/api/node/interfaces/blockstateready.md +25 -0
- package/assets/docs/guide/api/node/interfaces/buffer.md +26 -0
- package/assets/docs/guide/api/node/interfaces/characterinkbox.md +29 -0
- package/assets/docs/guide/api/node/interfaces/cmykcolor.md +34 -0
- package/assets/docs/guide/api/node/interfaces/completeassetresult.md +46 -0
- package/assets/docs/guide/api/node/interfaces/configuration.md +38 -0
- package/assets/docs/guide/api/node/interfaces/dominantcolor.md +25 -0
- package/assets/docs/guide/api/node/interfaces/dominantcolorsoptions.md +23 -0
- package/assets/docs/guide/api/node/interfaces/engineactioninfo.md +24 -0
- package/assets/docs/guide/api/node/interfaces/engineactionsregistry.md +18 -0
- package/assets/docs/guide/api/node/interfaces/engineplugin.md +30 -0
- package/assets/docs/guide/api/node/interfaces/font.md +27 -0
- package/assets/docs/guide/api/node/interfaces/fontmetrics.md +32 -0
- package/assets/docs/guide/api/node/interfaces/gradientcolorstop.md +28 -0
- package/assets/docs/guide/api/node/interfaces/logger.md +39 -0
- package/assets/docs/guide/api/node/interfaces/pageduration.md +23 -0
- package/assets/docs/guide/api/node/interfaces/range.md +23 -0
- package/assets/docs/guide/api/node/interfaces/rgbacolor.md +32 -0
- package/assets/docs/guide/api/node/interfaces/rgbcolor.md +30 -0
- package/assets/docs/guide/api/node/interfaces/settings.md +126 -0
- package/assets/docs/guide/api/node/interfaces/size2.md +21 -0
- package/assets/docs/guide/api/node/interfaces/source.md +24 -0
- package/assets/docs/guide/api/node/interfaces/spotcolor.md +30 -0
- package/assets/docs/guide/api/node/interfaces/textdecorationconfig.md +31 -0
- package/assets/docs/guide/api/node/interfaces/textfontsizeoptions.md +24 -0
- package/assets/docs/guide/api/node/interfaces/textruninfo.md +33 -0
- package/assets/docs/guide/api/node/interfaces/transientresource.md +26 -0
- package/assets/docs/guide/api/node/interfaces/typeface.md +23 -0
- package/assets/docs/guide/api/node/interfaces/vec2.md +21 -0
- package/assets/docs/guide/api/node/interfaces/vec3.md +22 -0
- package/assets/docs/guide/api/node/type-aliases/addimageoptions.md +36 -0
- package/assets/docs/guide/api/node/type-aliases/animationbaselinedirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationblockswipetextdirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationeasing.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationentry.md +28 -0
- package/assets/docs/guide/api/node/type-aliases/animationgrowdirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationjumploopdirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationkenburnsdirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationmergetextdirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationoptions.md +28 -0
- package/assets/docs/guide/api/node/type-aliases/animationspindirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationspinloopdirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationtype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/animationtypelonghand.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/animationtypeshorthand.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationtypewritertextwritingstyle.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationwipedirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/applicationmimetype.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/assetcolor.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/assetfilter.md +47 -0
- package/assets/docs/guide/api/node/type-aliases/assetgroups.md +25 -0
- package/assets/docs/guide/api/node/type-aliases/assetmetadata.md +42 -0
- package/assets/docs/guide/api/node/type-aliases/assetproperty.md +25 -0
- package/assets/docs/guide/api/node/type-aliases/assetpropertyfilter.md +41 -0
- package/assets/docs/guide/api/node/type-aliases/assetpropertypath.md +26 -0
- package/assets/docs/guide/api/node/type-aliases/assetstylepresetanimationproperties.md +34 -0
- package/assets/docs/guide/api/node/type-aliases/assetstylepresetproperties.md +29 -0
- package/assets/docs/guide/api/node/type-aliases/assetstylepresetpropertyvalue.md +29 -0
- package/assets/docs/guide/api/node/type-aliases/assetstylepresetscalableproperty.md +28 -0
- package/assets/docs/guide/api/node/type-aliases/assettransformpreset.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/asyncuriresolver.md +36 -0
- package/assets/docs/guide/api/node/type-aliases/audioexportoptions.md +43 -0
- package/assets/docs/guide/api/node/type-aliases/audiofromvideooptions.md +27 -0
- package/assets/docs/guide/api/node/type-aliases/audiomimetype.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/blendmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/blockenumtype.md +63 -0
- package/assets/docs/guide/api/node/type-aliases/blockstate.md +26 -0
- package/assets/docs/guide/api/node/type-aliases/blurtype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/blurtypelonghand.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/blurtypeshorthand.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/booleanoperation.md +27 -0
- package/assets/docs/guide/api/node/type-aliases/boolpropertyname.md +79 -0
- package/assets/docs/guide/api/node/type-aliases/cameraclampingovershootmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/captionhorizontalalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/captionverticalalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/cmyk.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/color.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/colorpickercolormode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/colorpropertyname.md +31 -0
- package/assets/docs/guide/api/node/type-aliases/colorspace.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/contentfillmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/controlgizmomovehandlevisibility.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/controlgizmoresizehandlesvisibility.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/controlgizmorotatehandlesvisibility.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/controlgizmoscalehandlesvisibility.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/createsceneoptions.md +30 -0
- package/assets/docs/guide/api/node/type-aliases/cutoutoperation.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/cutouttype.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/defaultassetsourceid.md +37 -0
- package/assets/docs/guide/api/node/type-aliases/demoassetsourceid.md +33 -0
- package/assets/docs/guide/api/node/type-aliases/designblockid.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/designblocktype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/designblocktypelonghand.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/designblocktypeshorthand.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/designunit.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/doubleclickselectionmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/doublepropertyname.md +26 -0
- package/assets/docs/guide/api/node/type-aliases/dropshadowoptions.md +32 -0
- package/assets/docs/guide/api/node/type-aliases/editmode.md +27 -0
- package/assets/docs/guide/api/node/type-aliases/effecttype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/effecttypelonghand.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/effecttypeshorthand.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/engineactionid.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/enginecustomactionfunction.md +30 -0
- package/assets/docs/guide/api/node/type-aliases/engineplugincontext.md +30 -0
- package/assets/docs/guide/api/node/type-aliases/enumpropertyname.md +59 -0
- package/assets/docs/guide/api/node/type-aliases/enumvalues.md +59 -0
- package/assets/docs/guide/api/node/type-aliases/exportoptions.md +57 -0
- package/assets/docs/guide/api/node/type-aliases/fillpixelstreamorientation.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/filltype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/filltypelonghand.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/filltypeshorthand.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/floatpropertyname.md +184 -0
- package/assets/docs/guide/api/node/type-aliases/fontsizeunit.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/fontstyle.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/fontweight.md +30 -0
- package/assets/docs/guide/api/node/type-aliases/gradientstoprgba.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/heightmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/hexcolorstring.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/historyid.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/historyupdate.md +25 -0
- package/assets/docs/guide/api/node/type-aliases/horizontalblockalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/horizontalcontentfillalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/horizontaltextalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/imagemimetype.md +25 -0
- package/assets/docs/guide/api/node/type-aliases/intpropertyname.md +26 -0
- package/assets/docs/guide/api/node/type-aliases/liststyle.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/locale.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/loglevel.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/mimetype.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/objecttype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/objecttypelonghand.md +27 -0
- package/assets/docs/guide/api/node/type-aliases/objecttypeshorthand.md +27 -0
- package/assets/docs/guide/api/node/type-aliases/optionalprefix.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/pageguidessource.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/palettecolor.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/positionmode.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/positionxmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/positionymode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/propertytype.md +31 -0
- package/assets/docs/guide/api/node/type-aliases/rgba.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/rolestring.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/scenefontsizeunit.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/scenelayout.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/scenemode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/scope.md +50 -0
- package/assets/docs/guide/api/node/type-aliases/settingboolpropertyname.md +62 -0
- package/assets/docs/guide/api/node/type-aliases/settingcolorpropertyname.md +38 -0
- package/assets/docs/guide/api/node/type-aliases/settingenumpropertyname.md +29 -0
- package/assets/docs/guide/api/node/type-aliases/settingenumtype.md +33 -0
- package/assets/docs/guide/api/node/type-aliases/settingenumvalues.md +29 -0
- package/assets/docs/guide/api/node/type-aliases/settingfloatpropertyname.md +25 -0
- package/assets/docs/guide/api/node/type-aliases/settingintpropertyname.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/settingkey.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/settingsbool.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/settingscolor.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/settingscolorrgba.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/settingsenum.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/settingsfloat.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/settingsint.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/settingsstring.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/settingstringpropertyname.md +28 -0
- package/assets/docs/guide/api/node/type-aliases/settingtype.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/settingvaluetype.md +26 -0
- package/assets/docs/guide/api/node/type-aliases/shapetype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/shapetypelonghand.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/shapetypeshorthand.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/shapevectorpathfillrule.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/sizemode.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/sortingorder.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/sourcesetpropertyname.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/splitoptions.md +28 -0
- package/assets/docs/guide/api/node/type-aliases/stringpropertyname.md +43 -0
- package/assets/docs/guide/api/node/type-aliases/strokecap.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokecornergeometry.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokedashendcap.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokedashstartcap.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokeendcap.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokeposition.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokestartcap.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokestyle.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/syncuriresolver.md +31 -0
- package/assets/docs/guide/api/node/type-aliases/textanimationwritingstyle.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/textcase.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/textdecorationline.md +27 -0
- package/assets/docs/guide/api/node/type-aliases/textdecorationstyle.md +26 -0
- package/assets/docs/guide/api/node/type-aliases/textverticalalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/timelinetrackvisibility.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/touchpinchaction.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/touchrotateaction.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/typefacedefinition.md +41 -0
- package/assets/docs/guide/api/node/type-aliases/verticalblockalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/verticalcontentfillalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/videoexportoptions.md +54 -0
- package/assets/docs/guide/api/node/type-aliases/videomimetype.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/widthmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/xywh.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/zoomautofitaxis.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/zoomoptions.md +27 -0
- package/assets/docs/guide/api/node/variables/animation_types.md +21 -0
- package/assets/docs/guide/api/node/variables/animationbaselinedirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationblockswipetextdirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationeasingvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationgrowdirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationjumploopdirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationkenburnsdirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationmergetextdirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationspindirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationspinloopdirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationtypewritertextwritingstylevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationwipedirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/blendmodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/blur_types.md +21 -0
- package/assets/docs/guide/api/node/variables/cameraclampingovershootmodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/captionhorizontalalignmentvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/captionverticalalignmentvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/colorpickercolormodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/contentfillmodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/controlgizmomovehandlevisibilityvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/controlgizmoresizehandlesvisibilityvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/controlgizmorotatehandlesvisibilityvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/controlgizmoscalehandlesvisibilityvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/cutouttypevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/design_block_types.md +21 -0
- package/assets/docs/guide/api/node/variables/doubleclickselectionmodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/effect_types.md +21 -0
- package/assets/docs/guide/api/node/variables/fill_types.md +21 -0
- package/assets/docs/guide/api/node/variables/fillpixelstreamorientationvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/heightmodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/horizontalcontentfillalignmentvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/loglevel.md +37 -0
- package/assets/docs/guide/api/node/variables/mimetype.md +41 -0
- package/assets/docs/guide/api/node/variables/pageguidessourcevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/positionxmodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/positionymodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/scenedesignunitvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/scenefontsizeunitvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/scenelayoutvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/scenemodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/shape_types.md +21 -0
- package/assets/docs/guide/api/node/variables/shapevectorpathfillrulevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokecapvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokecornergeometryvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokedashendcapvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokedashstartcapvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokeendcapvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokepositionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokestartcapvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokestylevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/textanimationwritingstylevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/texthorizontalalignmentvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/textverticalalignmentvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/timelinetrackvisibilityvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/touchpinchactionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/touchrotateactionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/verticalcontentfillalignmentvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/widthmodevalues.md +18 -0
- package/assets/docs/guide/api/types.md +5 -9
- package/assets/docs/guide/api-reference/overview.md +7 -7
- package/assets/docs/guide/automation/auto-resize.md +263 -300
- package/assets/docs/guide/automation/data-merge.md +246 -275
- package/assets/docs/guide/automation/design-generation.md +102 -31
- package/assets/docs/guide/automation/multi-image-generation.md +758 -0
- package/assets/docs/guide/automation/overview.md +21 -4
- package/assets/docs/guide/automation.md +10 -5
- package/assets/docs/guide/capabilities.md +6 -4
- package/assets/docs/guide/colors/adjust.md +247 -249
- package/assets/docs/guide/colors/apply.md +127 -138
- package/assets/docs/guide/colors/basics.md +126 -150
- package/assets/docs/guide/colors/conversion.md +171 -177
- package/assets/docs/guide/colors/create-color-palette.md +244 -245
- package/assets/docs/guide/colors/extract-colors.md +144 -0
- package/assets/docs/guide/colors/for-print/cmyk.md +292 -352
- package/assets/docs/guide/colors/for-print/spot.md +521 -578
- package/assets/docs/guide/colors/for-print.md +9 -4
- package/assets/docs/guide/colors/for-screen/p3.md +12 -10
- package/assets/docs/guide/colors/for-screen/srgb.md +107 -133
- package/assets/docs/guide/colors/for-screen.md +9 -4
- package/assets/docs/guide/colors/overview.md +6 -4
- package/assets/docs/guide/colors/replace.md +381 -419
- package/assets/docs/guide/colors.md +9 -4
- package/assets/docs/guide/compatibility.md +7 -5
- package/assets/docs/guide/concepts/architecture.md +17 -15
- package/assets/docs/guide/concepts/assets.md +152 -140
- package/assets/docs/guide/concepts/blocks.md +227 -323
- package/assets/docs/guide/concepts/buffers.md +147 -276
- package/assets/docs/guide/concepts/design-units.md +95 -145
- package/assets/docs/guide/concepts/editing-workflow.md +69 -183
- package/assets/docs/guide/concepts/events.md +80 -122
- package/assets/docs/guide/concepts/headless-mode.md +237 -0
- package/assets/docs/guide/concepts/pages.md +137 -127
- package/assets/docs/guide/concepts/resources.md +156 -217
- package/assets/docs/guide/concepts/scenes.md +191 -210
- package/assets/docs/guide/concepts/templating.md +118 -74
- package/assets/docs/guide/concepts/terminology.md +49 -47
- package/assets/docs/guide/concepts/undo-and-history.md +229 -303
- package/assets/docs/guide/concepts.md +9 -7
- package/assets/docs/guide/configuration.md +252 -380
- package/assets/docs/guide/conversion/overview.md +33 -4
- package/assets/docs/guide/conversion/to-base64.md +127 -167
- package/assets/docs/guide/conversion/to-pdf.md +24 -474
- package/assets/docs/guide/conversion/to-png.md +168 -211
- package/assets/docs/guide/conversion.md +9 -4
- package/assets/docs/guide/create-audio/audio/add-music.md +301 -327
- package/assets/docs/guide/create-audio/audio/add-sound-effects.md +475 -359
- package/assets/docs/guide/create-audio/audio/loop.md +232 -272
- package/assets/docs/guide/create-composition/add-background.md +237 -239
- package/assets/docs/guide/create-composition/blend-modes.md +118 -209
- package/assets/docs/guide/create-composition/collage.md +538 -320
- package/assets/docs/guide/create-composition/group-and-ungroup.md +216 -261
- package/assets/docs/guide/create-composition/layer-management.md +219 -257
- package/assets/docs/guide/create-composition/layout.md +513 -315
- package/assets/docs/guide/create-composition/lock-design.md +90 -109
- package/assets/docs/guide/create-composition/multi-page.md +133 -113
- package/assets/docs/guide/create-composition/overview.md +16 -4
- package/assets/docs/guide/create-composition/programmatic.md +288 -344
- package/assets/docs/guide/create-composition.md +10 -5
- package/assets/docs/guide/create-templates/add-dynamic-content/placeholders.md +443 -569
- package/assets/docs/guide/create-templates/add-dynamic-content/set-editing-constraints.md +567 -470
- package/assets/docs/guide/create-templates/add-dynamic-content/text-variables.md +179 -516
- package/assets/docs/guide/create-templates/add-dynamic-content.md +226 -224
- package/assets/docs/guide/create-templates/add-to-template-library.md +183 -193
- package/assets/docs/guide/create-templates/edit-or-remove.md +297 -303
- package/assets/docs/guide/create-templates/from-scratch.md +207 -268
- package/assets/docs/guide/create-templates/import/from-scene-file.md +158 -236
- package/assets/docs/guide/create-templates/import.md +145 -161
- package/assets/docs/guide/create-templates/lock.md +42 -295
- package/assets/docs/guide/create-templates/overview.md +33 -4
- package/assets/docs/guide/create-templates.md +9 -5
- package/assets/docs/guide/create-video/audio/adjust-speed.md +157 -207
- package/assets/docs/guide/create-video/audio/adjust-volume.md +116 -227
- package/assets/docs/guide/create-video/control.md +352 -193
- package/assets/docs/guide/create-video/limitations.md +175 -280
- package/assets/docs/guide/create-video.md +11 -10
- package/assets/docs/guide/edit-image/add-watermark.md +283 -330
- package/assets/docs/guide/edit-image/overview.md +29 -4
- package/assets/docs/guide/edit-image/remove-bg.md +283 -337
- package/assets/docs/guide/edit-image/replace-colors.md +424 -502
- package/assets/docs/guide/edit-image/transform/crop.md +463 -402
- package/assets/docs/guide/edit-image/transform/flip.md +353 -0
- package/assets/docs/guide/edit-image/transform/move.md +143 -100
- package/assets/docs/guide/edit-image/transform/resize.md +118 -88
- package/assets/docs/guide/edit-image/transform/rotate.md +132 -165
- package/assets/docs/guide/edit-image/transform/scale.md +230 -228
- package/assets/docs/guide/edit-image/transform.md +10 -5
- package/assets/docs/guide/edit-image.md +11 -7
- package/assets/docs/guide/edit-video/add-captions.md +344 -421
- package/assets/docs/guide/edit-video/add-watermark.md +312 -258
- package/assets/docs/guide/edit-video/join-and-arrange.md +237 -371
- package/assets/docs/guide/edit-video/redaction.md +419 -385
- package/assets/docs/guide/edit-video/split.md +243 -493
- package/assets/docs/guide/edit-video/transform/crop.md +21 -352
- package/assets/docs/guide/edit-video/transform/flip.md +102 -76
- package/assets/docs/guide/edit-video/transform/move.md +258 -310
- package/assets/docs/guide/edit-video/transform/resize.md +264 -428
- package/assets/docs/guide/edit-video/transform/rotate.md +265 -228
- package/assets/docs/guide/edit-video/transform/scale.md +320 -417
- package/assets/docs/guide/edit-video/transform.md +10 -6
- package/assets/docs/guide/edit-video/trim.md +448 -494
- package/assets/docs/guide/engine-interface.md +51 -62
- package/assets/docs/guide/export-save-publish/create-thumbnail.md +148 -184
- package/assets/docs/guide/export-save-publish/export/compress.md +161 -559
- package/assets/docs/guide/export-save-publish/export/overview.md +224 -373
- package/assets/docs/guide/export-save-publish/export/partial-export.md +386 -577
- package/assets/docs/guide/export-save-publish/export/size-limits.md +215 -310
- package/assets/docs/guide/export-save-publish/export/to-jpeg.md +132 -213
- package/assets/docs/guide/export-save-publish/export/to-pdf.md +139 -267
- package/assets/docs/guide/export-save-publish/export/to-png.md +121 -165
- package/assets/docs/guide/export-save-publish/export/to-raw-data.md +187 -234
- package/assets/docs/guide/export-save-publish/export/to-webp.md +160 -190
- package/assets/docs/guide/export-save-publish/export/with-color-mask.md +359 -203
- package/assets/docs/guide/export-save-publish/export.md +14 -11
- package/assets/docs/guide/export-save-publish/for-printing.md +141 -237
- package/assets/docs/guide/export-save-publish/for-social-media.md +124 -261
- package/assets/docs/guide/export-save-publish/pre-export-validation.md +436 -522
- package/assets/docs/guide/export-save-publish/save.md +167 -226
- package/assets/docs/guide/export-save-publish/store-custom-metadata.md +97 -162
- package/assets/docs/guide/file-format-support.md +9 -9
- package/assets/docs/guide/fills/color.md +370 -347
- package/assets/docs/guide/fills/image.md +167 -196
- package/assets/docs/guide/fills/overview.md +6 -4
- package/assets/docs/guide/fills/video.md +286 -438
- package/assets/docs/guide/fills.md +12 -8
- package/assets/docs/guide/filters-and-effects/apply.md +598 -664
- package/assets/docs/guide/filters-and-effects/blur.md +261 -159
- package/assets/docs/guide/filters-and-effects/chroma-key-green-screen.md +194 -293
- package/assets/docs/guide/filters-and-effects/create-custom-filters.md +548 -466
- package/assets/docs/guide/filters-and-effects/create-custom-lut-filter.md +176 -244
- package/assets/docs/guide/filters-and-effects/distortion.md +317 -384
- package/assets/docs/guide/filters-and-effects/duotone.md +221 -217
- package/assets/docs/guide/filters-and-effects/gradients.md +670 -813
- package/assets/docs/guide/filters-and-effects/overview.md +7 -7
- package/assets/docs/guide/filters-and-effects/support.md +97 -132
- package/assets/docs/guide/filters-and-effects.md +11 -6
- package/assets/docs/guide/get-started/agent-skills.md +20 -18
- package/assets/docs/guide/get-started/build-with-ai.md +7 -4
- package/assets/docs/guide/get-started/bun.md +219 -0
- package/assets/docs/guide/get-started/deno.md +161 -0
- package/assets/docs/guide/get-started/mcp-server.md +6 -4
- package/assets/docs/guide/get-started/overview.md +11 -6
- package/assets/docs/guide/get-started/vanilla-aws-lambda.md +506 -0
- package/assets/docs/guide/get-started/vanilla-clone-github-project.md +124 -0
- package/assets/docs/guide/get-started/vanilla.md +235 -0
- package/assets/docs/guide/guides/export-save-publish/export/audio.md +80 -66
- package/assets/docs/guide/guides.md +10 -9
- package/assets/docs/guide/import-media/asset-panel/refresh-assets.md +259 -288
- package/assets/docs/guide/import-media/concepts.md +20 -38
- package/assets/docs/guide/import-media/content-json-schema.md +145 -125
- package/assets/docs/guide/import-media/default-assets.md +113 -161
- package/assets/docs/guide/import-media/edit-or-remove-assets.md +391 -395
- package/assets/docs/guide/import-media/file-format-support.md +78 -61
- package/assets/docs/guide/import-media/from-remote-source/asset-versioning.md +273 -244
- package/assets/docs/guide/import-media/from-remote-source/remote-asset.md +152 -222
- package/assets/docs/guide/import-media/from-remote-source.md +9 -11
- package/assets/docs/guide/import-media/overview.md +5 -5
- package/assets/docs/guide/import-media/retrieve-mimetype.md +216 -108
- package/assets/docs/guide/import-media/size-limits.md +6 -4
- package/assets/docs/guide/import-media/source-sets.md +190 -251
- package/assets/docs/guide/import-media.md +10 -8
- package/assets/docs/guide/insert-media/audio.md +202 -195
- package/assets/docs/guide/insert-media/images.md +190 -188
- package/assets/docs/guide/insert-media/position-and-align.md +284 -551
- package/assets/docs/guide/insert-media/shapes-or-stickers.md +402 -418
- package/assets/docs/guide/insert-media/videos.md +236 -203
- package/assets/docs/guide/insert-media.md +10 -5
- package/assets/docs/guide/key-capabilities.md +36 -4
- package/assets/docs/guide/key-concepts.md +6 -4
- package/assets/docs/guide/licensing.md +6 -4
- package/assets/docs/guide/llms-txt.md +11 -7
- package/assets/docs/guide/open-the-editor/blank-canvas.md +102 -63
- package/assets/docs/guide/open-the-editor/from-image.md +157 -127
- package/assets/docs/guide/open-the-editor/from-template.md +131 -92
- package/assets/docs/guide/open-the-editor/from-video.md +204 -212
- package/assets/docs/guide/open-the-editor/import-design/from-archive.md +310 -360
- package/assets/docs/guide/open-the-editor/import-design/from-indesign.md +716 -513
- package/assets/docs/guide/open-the-editor/import-design/from-photoshop.md +667 -695
- package/assets/docs/guide/open-the-editor/import-design.md +228 -266
- package/assets/docs/guide/open-the-editor/load-scene.md +72 -68
- package/assets/docs/guide/open-the-editor/overview.md +6 -4
- package/assets/docs/guide/open-the-editor/uri-resolver.md +160 -251
- package/assets/docs/guide/open-the-editor.md +11 -9
- package/assets/docs/guide/outlines/overview.md +12 -4
- package/assets/docs/guide/outlines/shadows-and-glows.md +105 -410
- package/assets/docs/guide/outlines/strokes.md +218 -166
- package/assets/docs/guide/outlines.md +9 -4
- package/assets/docs/guide/overview.md +14 -6
- package/assets/docs/guide/performance.md +220 -113
- package/assets/docs/guide/plugins/print-ready-pdf.md +273 -368
- package/assets/docs/guide/plugins.md +10 -16
- package/assets/docs/guide/rules/asset-handling.md +7 -18
- package/assets/docs/guide/rules/common-pitfalls.md +25 -42
- package/assets/docs/guide/rules/content-fill-mode.md +4 -4
- package/assets/docs/guide/rules/enforce-brand-guidelines.md +398 -567
- package/assets/docs/guide/rules/lock-content.md +188 -231
- package/assets/docs/guide/rules/moderate-content.md +580 -571
- package/assets/docs/guide/rules/overview.md +345 -380
- package/assets/docs/guide/rules/silent-init-errors.md +4 -1
- package/assets/docs/guide/rules/verify-properties-before-use.md +2 -11
- package/assets/docs/guide/rules.md +10 -5
- package/assets/docs/guide/security.md +7 -5
- package/assets/docs/guide/serve-assets.md +57 -284
- package/assets/docs/guide/settings.md +96 -74
- package/assets/docs/guide/shapes.md +10 -5
- package/assets/docs/guide/stickers-and-shapes/combine.md +397 -583
- package/assets/docs/guide/stickers-and-shapes/create-cutout.md +181 -268
- package/assets/docs/guide/stickers-and-shapes/create-edit/create-shapes.md +418 -431
- package/assets/docs/guide/stickers-and-shapes/create-edit/create-stickers.md +147 -226
- package/assets/docs/guide/stickers-and-shapes/create-edit/edit-shapes.md +138 -123
- package/assets/docs/guide/stickers-and-shapes/insert-qr-code.md +151 -149
- package/assets/docs/guide/stickers.md +9 -4
- package/assets/docs/guide/text/add.md +470 -482
- package/assets/docs/guide/text/adjust-spacing.md +179 -214
- package/assets/docs/guide/text/auto-size.md +210 -271
- package/assets/docs/guide/text/edit.md +294 -309
- package/assets/docs/guide/text/effects.md +154 -190
- package/assets/docs/guide/text/emojis.md +199 -232
- package/assets/docs/guide/text/language-support.md +369 -382
- package/assets/docs/guide/text/overview.md +41 -4
- package/assets/docs/guide/text/styling.md +239 -273
- package/assets/docs/guide/text/text-designs.md +405 -544
- package/assets/docs/guide/text.md +10 -9
- package/assets/docs/guide/to-v1-19.md +12 -10
- package/assets/docs/guide/upgrade.md +8 -9
- package/assets/docs/guide/use-templates/apply-template.md +174 -163
- package/assets/docs/guide/use-templates/generate.md +171 -152
- package/assets/docs/guide/use-templates/overview.md +32 -4
- package/assets/docs/guide/use-templates/programmatic.md +266 -301
- package/assets/docs/guide/use-templates/replace-content.md +181 -171
- package/assets/docs/guide/what-is-cesdk.md +71 -282
- package/assets/docs/handbook/SKILL.md +24 -0
- package/dist/assets/inline.generated.d.ts.map +1 -1
- package/dist/assets/inline.generated.js +544 -406
- package/dist/assets/inline.generated.js.map +1 -1
- package/dist/assets/load-browser.d.ts +1 -1
- package/dist/assets/load-browser.js +1 -1
- package/dist/assets/load-browser.js.map +1 -1
- package/dist/assets/load-node.d.ts +1 -1
- package/dist/assets/load-node.js +1 -1
- package/dist/assets/load-node.js.map +1 -1
- package/dist/cli/http.d.ts.map +1 -1
- package/dist/cli/http.js +4 -28
- package/dist/cli/http.js.map +1 -1
- package/dist/cli/redirect-console.d.ts +1 -1
- package/dist/cli/redirect-console.d.ts.map +1 -1
- package/dist/cli/redirect-console.js +12 -3
- package/dist/cli/redirect-console.js.map +1 -1
- package/dist/cli/resolve-license.d.ts.map +1 -1
- package/dist/cli/resolve-license.js +8 -6
- package/dist/cli/resolve-license.js.map +1 -1
- package/dist/cli/stdio.d.ts +9 -0
- package/dist/cli/stdio.d.ts.map +1 -1
- package/dist/cli/stdio.js +48 -4
- package/dist/cli/stdio.js.map +1 -1
- package/dist/cli.js +10 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +11 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +20 -1
- package/dist/config.js.map +1 -1
- package/dist/diagnostics/bundle.d.ts +10 -0
- package/dist/diagnostics/bundle.d.ts.map +1 -0
- package/dist/diagnostics/bundle.js +148 -0
- package/dist/diagnostics/bundle.js.map +1 -0
- package/dist/diagnostics/compose.d.ts +3 -0
- package/dist/diagnostics/compose.d.ts.map +1 -0
- package/dist/diagnostics/compose.js +15 -0
- package/dist/diagnostics/compose.js.map +1 -0
- package/dist/diagnostics/events.d.ts +34 -0
- package/dist/diagnostics/events.d.ts.map +1 -0
- package/dist/diagnostics/events.js +3 -0
- package/dist/diagnostics/events.js.map +1 -0
- package/dist/diagnostics/file-sink.d.ts +38 -0
- package/dist/diagnostics/file-sink.d.ts.map +1 -0
- package/dist/diagnostics/file-sink.js +157 -0
- package/dist/diagnostics/file-sink.js.map +1 -0
- package/dist/diagnostics/redact.d.ts +7 -0
- package/dist/diagnostics/redact.d.ts.map +1 -0
- package/dist/diagnostics/redact.js +43 -0
- package/dist/diagnostics/redact.js.map +1 -0
- package/dist/diagnostics/tool-call-adapter.d.ts +4 -0
- package/dist/diagnostics/tool-call-adapter.d.ts.map +1 -0
- package/dist/diagnostics/tool-call-adapter.js +21 -0
- package/dist/diagnostics/tool-call-adapter.js.map +1 -0
- package/dist/engine/cesdk-adapter.d.ts +5 -1
- package/dist/engine/cesdk-adapter.d.ts.map +1 -1
- package/dist/engine/cesdk-adapter.js +9 -2
- package/dist/engine/cesdk-adapter.js.map +1 -1
- package/dist/engine/index.d.ts +1 -0
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +4 -0
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/scene-resource-schemes.d.ts +2 -0
- package/dist/engine/scene-resource-schemes.d.ts.map +1 -0
- package/dist/engine/scene-resource-schemes.js +20 -0
- package/dist/engine/scene-resource-schemes.js.map +1 -0
- package/dist/http/server.d.ts +0 -6
- package/dist/http/server.d.ts.map +1 -1
- package/dist/http/server.js +1 -2
- package/dist/http/server.js.map +1 -1
- package/dist/server.d.ts +0 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +4 -60
- package/dist/server.js.map +1 -1
- package/dist/test/scripts/changelog-add.d.ts +8 -0
- package/dist/test/scripts/changelog-add.d.ts.map +1 -0
- package/dist/test/scripts/changelog-add.js +50 -0
- package/dist/test/scripts/changelog-add.js.map +1 -0
- package/dist/test/scripts/changelog-collate.d.ts +38 -0
- package/dist/test/scripts/changelog-collate.d.ts.map +1 -0
- package/dist/test/scripts/changelog-collate.js +171 -0
- package/dist/test/scripts/changelog-collate.js.map +1 -0
- package/dist/test/test/changelog.test.d.ts +2 -0
- package/dist/test/test/changelog.test.d.ts.map +1 -0
- package/dist/test/test/changelog.test.js +293 -0
- package/dist/test/test/changelog.test.js.map +1 -0
- package/dist/test/test/cli/dispatcher.test.js +10 -3
- package/dist/test/test/cli/dispatcher.test.js.map +1 -1
- package/dist/test/test/cli/redirect-console.test.js +31 -0
- package/dist/test/test/cli/redirect-console.test.js.map +1 -1
- package/dist/test/test/cli/resolve-license.test.js +10 -1
- package/dist/test/test/cli/resolve-license.test.js.map +1 -1
- package/dist/test/test/cli/stdio-diagnostics.test.d.ts +2 -0
- package/dist/test/test/cli/stdio-diagnostics.test.d.ts.map +1 -0
- package/dist/test/test/cli/stdio-diagnostics.test.js +31 -0
- package/dist/test/test/cli/stdio-diagnostics.test.js.map +1 -0
- package/dist/test/test/config.test.js +17 -13
- package/dist/test/test/config.test.js.map +1 -1
- package/dist/test/test/diagnostics/bundle.test.d.ts +2 -0
- package/dist/test/test/diagnostics/bundle.test.d.ts.map +1 -0
- package/dist/test/test/diagnostics/bundle.test.js +53 -0
- package/dist/test/test/diagnostics/bundle.test.js.map +1 -0
- package/dist/test/test/diagnostics/compose.test.d.ts +2 -0
- package/dist/test/test/diagnostics/compose.test.d.ts.map +1 -0
- package/dist/test/test/diagnostics/compose.test.js +31 -0
- package/dist/test/test/diagnostics/compose.test.js.map +1 -0
- package/dist/test/test/diagnostics/file-sink.test.d.ts +2 -0
- package/dist/test/test/diagnostics/file-sink.test.d.ts.map +1 -0
- package/dist/test/test/diagnostics/file-sink.test.js +113 -0
- package/dist/test/test/diagnostics/file-sink.test.js.map +1 -0
- package/dist/test/test/diagnostics/redact.test.d.ts +2 -0
- package/dist/test/test/diagnostics/redact.test.d.ts.map +1 -0
- package/dist/test/test/diagnostics/redact.test.js +59 -0
- package/dist/test/test/diagnostics/redact.test.js.map +1 -0
- package/dist/test/test/diagnostics/tool-call-adapter.test.d.ts +2 -0
- package/dist/test/test/diagnostics/tool-call-adapter.test.d.ts.map +1 -0
- package/dist/test/test/diagnostics/tool-call-adapter.test.js +34 -0
- package/dist/test/test/diagnostics/tool-call-adapter.test.js.map +1 -0
- package/dist/test/test/engine/cesdk-adapter.test.d.ts +2 -0
- package/dist/test/test/engine/cesdk-adapter.test.d.ts.map +1 -0
- package/dist/test/test/engine/cesdk-adapter.test.js +32 -0
- package/dist/test/test/engine/cesdk-adapter.test.js.map +1 -0
- package/dist/test/test/handbook-contract.test.js +6 -2
- package/dist/test/test/handbook-contract.test.js.map +1 -1
- package/dist/test/test/http/server.test.js +0 -36
- package/dist/test/test/http/server.test.js.map +1 -1
- package/dist/test/test/http/workspace-auth.test.js +0 -1
- package/dist/test/test/http/workspace-auth.test.js.map +1 -1
- package/dist/test/test/server.test.js +0 -40
- package/dist/test/test/server.test.js.map +1 -1
- package/dist/test/test/tools/edit-harness.d.ts +14 -0
- package/dist/test/test/tools/edit-harness.d.ts.map +1 -0
- package/dist/test/test/tools/edit-harness.js +30 -0
- package/dist/test/test/tools/edit-harness.js.map +1 -0
- package/dist/test/test/tools/edit.telemetry.test.d.ts +2 -0
- package/dist/test/test/tools/edit.telemetry.test.d.ts.map +1 -0
- package/dist/test/test/tools/edit.telemetry.test.js +46 -0
- package/dist/test/test/tools/edit.telemetry.test.js.map +1 -0
- package/dist/test/test/tools/export-harness.d.ts +13 -0
- package/dist/test/test/tools/export-harness.d.ts.map +1 -0
- package/dist/test/test/tools/export-harness.js +27 -0
- package/dist/test/test/tools/export-harness.js.map +1 -0
- package/dist/test/test/tools/export.telemetry.test.d.ts +2 -0
- package/dist/test/test/tools/export.telemetry.test.d.ts.map +1 -0
- package/dist/test/test/tools/export.telemetry.test.js +65 -0
- package/dist/test/test/tools/export.telemetry.test.js.map +1 -0
- package/dist/test/test/tools/import.test.d.ts +2 -0
- package/dist/test/test/tools/import.test.d.ts.map +1 -0
- package/dist/test/test/tools/import.test.js +122 -0
- package/dist/test/test/tools/import.test.js.map +1 -0
- package/dist/test/test/tools/index.test.js +78 -16
- package/dist/test/test/tools/index.test.js.map +1 -1
- package/dist/test/test/tools/load.integration.test.d.ts +2 -0
- package/dist/test/test/tools/load.integration.test.d.ts.map +1 -0
- package/dist/test/test/tools/load.integration.test.js +165 -0
- package/dist/test/test/tools/load.integration.test.js.map +1 -0
- package/dist/test/test/tools/load.test.d.ts +2 -0
- package/dist/test/test/tools/load.test.d.ts.map +1 -0
- package/dist/test/test/tools/load.test.js +387 -0
- package/dist/test/test/tools/load.test.js.map +1 -0
- package/dist/test/test/tools/preview-harness.d.ts +9 -0
- package/dist/test/test/tools/preview-harness.d.ts.map +1 -0
- package/dist/test/test/tools/preview-harness.js +23 -0
- package/dist/test/test/tools/preview-harness.js.map +1 -0
- package/dist/test/test/tools/preview.telemetry.test.d.ts +2 -0
- package/dist/test/test/tools/preview.telemetry.test.d.ts.map +1 -0
- package/dist/test/test/tools/preview.telemetry.test.js +36 -0
- package/dist/test/test/tools/preview.telemetry.test.js.map +1 -0
- package/dist/test/test/tools/schema-best-practices.d.ts +13 -0
- package/dist/test/test/tools/schema-best-practices.d.ts.map +1 -0
- package/dist/test/test/tools/schema-best-practices.js +169 -0
- package/dist/test/test/tools/schema-best-practices.js.map +1 -0
- package/dist/test/test/tools/schema-best-practices.test.d.ts +3 -0
- package/dist/test/test/tools/schema-best-practices.test.d.ts.map +1 -0
- package/dist/test/test/tools/schema-best-practices.test.js +194 -0
- package/dist/test/test/tools/schema-best-practices.test.js.map +1 -0
- package/dist/test/test/tools/spans.test.d.ts +2 -0
- package/dist/test/test/tools/spans.test.d.ts.map +1 -0
- package/dist/test/test/tools/spans.test.js +84 -0
- package/dist/test/test/tools/spans.test.js.map +1 -0
- package/dist/test/test/viewer/cesdk-cdn.test.d.ts +2 -0
- package/dist/test/test/viewer/cesdk-cdn.test.d.ts.map +1 -0
- package/dist/test/test/viewer/cesdk-cdn.test.js +19 -0
- package/dist/test/test/viewer/cesdk-cdn.test.js.map +1 -0
- package/dist/test/test/viewer/config-route.test.d.ts +2 -0
- package/dist/test/test/viewer/config-route.test.d.ts.map +1 -0
- package/dist/test/test/viewer/config-route.test.js +28 -0
- package/dist/test/test/viewer/config-route.test.js.map +1 -0
- package/dist/test/test/viewer/spa-version.test.d.ts +2 -0
- package/dist/test/test/viewer/spa-version.test.d.ts.map +1 -0
- package/dist/test/test/viewer/spa-version.test.js +14 -0
- package/dist/test/test/viewer/spa-version.test.js.map +1 -0
- package/dist/test/test/workspace/content-hash.test.d.ts +2 -0
- package/dist/test/test/workspace/content-hash.test.d.ts.map +1 -0
- package/dist/test/test/workspace/content-hash.test.js +17 -0
- package/dist/test/test/workspace/content-hash.test.js.map +1 -0
- package/dist/test/tsconfig.test.tsbuildinfo +1 -1
- package/dist/test/vitest.config.js +1 -1
- package/dist/test/vitest.config.js.map +1 -1
- package/dist/tools/asset-generate.d.ts.map +1 -1
- package/dist/tools/asset-generate.js +1 -8
- package/dist/tools/asset-generate.js.map +1 -1
- package/dist/tools/edit.d.ts +3 -0
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +145 -96
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/export.d.ts +3 -0
- package/dist/tools/export.d.ts.map +1 -1
- package/dist/tools/export.js +146 -108
- package/dist/tools/export.js.map +1 -1
- package/dist/tools/import.d.ts +12 -0
- package/dist/tools/import.d.ts.map +1 -0
- package/dist/tools/import.js +144 -0
- package/dist/tools/import.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +44 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/load.d.ts +26 -0
- package/dist/tools/load.d.ts.map +1 -0
- package/dist/tools/load.js +400 -0
- package/dist/tools/load.js.map +1 -0
- package/dist/tools/preview.d.ts +3 -0
- package/dist/tools/preview.d.ts.map +1 -1
- package/dist/tools/preview.js +79 -44
- package/dist/tools/preview.js.map +1 -1
- package/dist/tools/result.d.ts +1 -1
- package/dist/tools/result.js +2 -2
- package/dist/tools/result.js.map +1 -1
- package/dist/tools/spans.d.ts +45 -0
- package/dist/tools/spans.d.ts.map +1 -0
- package/dist/tools/spans.js +77 -0
- package/dist/tools/spans.js.map +1 -0
- package/dist/tools/telemetry-wrapper.d.ts +4 -0
- package/dist/tools/telemetry-wrapper.d.ts.map +1 -0
- package/dist/tools/telemetry-wrapper.js +43 -0
- package/dist/tools/telemetry-wrapper.js.map +1 -0
- package/dist/viewer/cesdk-cdn.d.ts +16 -0
- package/dist/viewer/cesdk-cdn.d.ts.map +1 -0
- package/dist/viewer/cesdk-cdn.js +30 -0
- package/dist/viewer/cesdk-cdn.js.map +1 -0
- package/dist/viewer/router.d.ts +6 -0
- package/dist/viewer/router.d.ts.map +1 -1
- package/dist/viewer/router.js +4 -1
- package/dist/viewer/router.js.map +1 -1
- package/dist/viewer/spa-assets.generated.d.ts.map +1 -1
- package/dist/viewer/spa-assets.generated.js +2 -3
- package/dist/viewer/spa-assets.generated.js.map +1 -1
- package/dist/workspace/content-hash.d.ts +2 -0
- package/dist/workspace/content-hash.d.ts.map +1 -0
- package/dist/workspace/content-hash.js +15 -0
- package/dist/workspace/content-hash.js.map +1 -0
- package/package.json +18 -9
- package/assets/docs/guide/actions.md +0 -1038
- package/assets/docs/guide/animation/overview.md +0 -22
- package/assets/docs/guide/automation/batch-processing.md +0 -474
- package/assets/docs/guide/browser-support.md +0 -38
- package/assets/docs/guide/concepts/edit-modes.md +0 -431
- package/assets/docs/guide/concepts/headless-mode/browser.md +0 -291
- package/assets/docs/guide/create-audio/audio.md +0 -336
- package/assets/docs/guide/create-video/overview.md +0 -224
- package/assets/docs/guide/create-video/timeline-editor.md +0 -622
- package/assets/docs/guide/create-video/update-caption-presets.md +0 -676
- package/assets/docs/guide/edit-image/vectorize.md +0 -204
- package/assets/docs/guide/export-save-publish/export/to-html5.md +0 -474
- package/assets/docs/guide/export-save-publish/export/to-mp4.md +0 -364
- package/assets/docs/guide/get-started/vanilla-js/quickstart.md +0 -175
- package/assets/docs/guide/grid-and-rulers.md +0 -222
- package/assets/docs/guide/guides/text/rendering-internals.md +0 -796
- package/assets/docs/guide/import-media/asset-library.md +0 -23
- package/assets/docs/guide/import-media/asset-panel/basics.md +0 -324
- package/assets/docs/guide/import-media/asset-panel/customize.md +0 -478
- package/assets/docs/guide/import-media/asset-panel/thumbnails.md +0 -633
- package/assets/docs/guide/import-media/capture-from-camera/record-video.md +0 -137
- package/assets/docs/guide/import-media/capture-from-camera.md +0 -20
- package/assets/docs/guide/import-media/from-local-source/user-upload.md +0 -438
- package/assets/docs/guide/import-media/from-local-source.md +0 -20
- package/assets/docs/guide/import-media/from-remote-source/getty-images.md +0 -627
- package/assets/docs/guide/import-media/from-remote-source/imgly-premium-assets.md +0 -625
- package/assets/docs/guide/import-media/from-remote-source/pexels.md +0 -692
- package/assets/docs/guide/import-media/from-remote-source/soundstripe.md +0 -497
- package/assets/docs/guide/import-media/from-remote-source/third-party.md +0 -51
- package/assets/docs/guide/import-media/from-remote-source/unsplash.md +0 -914
- package/assets/docs/guide/import-media/from-remote-source/your-server.md +0 -764
- package/assets/docs/guide/open-the-editor/from-htmlcanvas.md +0 -228
- package/assets/docs/guide/open-the-editor/set-zoom-level.md +0 -303
- package/assets/docs/guide/plugins/asset-sources.md +0 -553
- package/assets/docs/guide/starterkits/3d-mockup-editor.md +0 -748
- package/assets/docs/guide/starterkits/advanced-editor.md +0 -698
- package/assets/docs/guide/starterkits/advanced-video-editor.md +0 -696
- package/assets/docs/guide/starterkits/ai-editor.md +0 -749
- package/assets/docs/guide/starterkits/airtable-image-editor.md +0 -672
- package/assets/docs/guide/starterkits/apparel-ui.md +0 -188
- package/assets/docs/guide/starterkits/assets.md +0 -27
- package/assets/docs/guide/starterkits/auto-resize.md +0 -586
- package/assets/docs/guide/starterkits/automated-video-generation.md +0 -692
- package/assets/docs/guide/starterkits/background-removal-editor.md +0 -480
- package/assets/docs/guide/starterkits/content-moderation.md +0 -863
- package/assets/docs/guide/starterkits/creative-automation.md +0 -28
- package/assets/docs/guide/starterkits/custom-built-uis.md +0 -26
- package/assets/docs/guide/starterkits/customization.md +0 -29
- package/assets/docs/guide/starterkits/cutout-lines-editor.md +0 -470
- package/assets/docs/guide/starterkits/data-merge.md +0 -850
- package/assets/docs/guide/starterkits/design-editor.md +0 -698
- package/assets/docs/guide/starterkits/design-generation.md +0 -719
- package/assets/docs/guide/starterkits/design-validation.md +0 -808
- package/assets/docs/guide/starterkits/editor-ui-configurations.md +0 -14
- package/assets/docs/guide/starterkits/export-options.md +0 -724
- package/assets/docs/guide/starterkits/export-using-renderer.md +0 -708
- package/assets/docs/guide/starterkits/extensibility.md +0 -28
- package/assets/docs/guide/starterkits/force-crop-editor.md +0 -675
- package/assets/docs/guide/starterkits/form-based-template-adoption.md +0 -522
- package/assets/docs/guide/starterkits/getty-images-editor.md +0 -700
- package/assets/docs/guide/starterkits/html5-ads-exporter.md +0 -719
- package/assets/docs/guide/starterkits/indesign-template-import.md +0 -580
- package/assets/docs/guide/starterkits/layouts-editor.md +0 -724
- package/assets/docs/guide/starterkits/mobile-ui.md +0 -185
- package/assets/docs/guide/starterkits/mockup-editor.md +0 -745
- package/assets/docs/guide/starterkits/multi-image-generation.md +0 -542
- package/assets/docs/guide/starterkits/page-sizes-editor.md +0 -657
- package/assets/docs/guide/starterkits/pexels-image-editor.md +0 -665
- package/assets/docs/guide/starterkits/photo-editor.md +0 -755
- package/assets/docs/guide/starterkits/photo-ui.md +0 -186
- package/assets/docs/guide/starterkits/photobook-ui.md +0 -188
- package/assets/docs/guide/starterkits/placeholders.md +0 -678
- package/assets/docs/guide/starterkits/player.md +0 -405
- package/assets/docs/guide/starterkits/plugins.md +0 -25
- package/assets/docs/guide/starterkits/postcard-editor.md +0 -202
- package/assets/docs/guide/starterkits/pptx-template-import.md +0 -581
- package/assets/docs/guide/starterkits/print-ready-pdf-editor.md +0 -746
- package/assets/docs/guide/starterkits/product-editor.md +0 -773
- package/assets/docs/guide/starterkits/psd-template-import.md +0 -580
- package/assets/docs/guide/starterkits/qr-code-editor.md +0 -470
- package/assets/docs/guide/starterkits/single-page-editor.md +0 -661
- package/assets/docs/guide/starterkits/start-with-image.md +0 -684
- package/assets/docs/guide/starterkits/start-with-video.md +0 -651
- package/assets/docs/guide/starterkits/t-shirt-designer.md +0 -742
- package/assets/docs/guide/starterkits/templating.md +0 -23
- package/assets/docs/guide/starterkits/theming.md +0 -662
- package/assets/docs/guide/starterkits/translation-internationalization.md +0 -662
- package/assets/docs/guide/starterkits/unsplash-editor.md +0 -839
- package/assets/docs/guide/starterkits/vectorizer-editor.md +0 -466
- package/assets/docs/guide/starterkits/version-history.md +0 -745
- package/assets/docs/guide/starterkits/video-animations.md +0 -853
- package/assets/docs/guide/starterkits/video-captions.md +0 -884
- package/assets/docs/guide/starterkits/video-editing.md +0 -25
- package/assets/docs/guide/starterkits/video-editor.md +0 -696
- package/assets/docs/guide/starterkits/video-export-options.md +0 -676
- package/assets/docs/guide/starterkits/viewer.md +0 -400
- package/assets/docs/guide/starterkits.md +0 -41
- package/assets/docs/guide/stickers-and-shapes/create-edit/vector-edit.md +0 -362
- package/assets/docs/guide/text/custom-fonts.md +0 -401
- package/assets/docs/guide/text/decorations.md +0 -330
- package/assets/docs/guide/text/enumerations.md +0 -258
- package/assets/docs/guide/to-v1-10.md +0 -131
- package/assets/docs/guide/to-v1-13.md +0 -165
- package/assets/docs/guide/to-v1-32.md +0 -110
- package/assets/docs/guide/to-v1-69.md +0 -468
- package/assets/docs/guide/to-v1-72.md +0 -193
- package/assets/docs/guide/use-templates/library.md +0 -450
- package/assets/docs/guide/user-interface/ai-integration/audio-generation.md +0 -428
- package/assets/docs/guide/user-interface/ai-integration/auto-captions.md +0 -337
- package/assets/docs/guide/user-interface/ai-integration/custom-provider.md +0 -853
- package/assets/docs/guide/user-interface/ai-integration/gateway-provider.md +0 -1045
- package/assets/docs/guide/user-interface/ai-integration/image-generation.md +0 -641
- package/assets/docs/guide/user-interface/ai-integration/integrate.md +0 -966
- package/assets/docs/guide/user-interface/ai-integration/proxy-server.md +0 -99
- package/assets/docs/guide/user-interface/ai-integration/text-generation.md +0 -498
- package/assets/docs/guide/user-interface/ai-integration/video-generation.md +0 -493
- package/assets/docs/guide/user-interface/ai-integration.md +0 -30
- package/assets/docs/guide/user-interface/appearance/change-ui-font.md +0 -316
- package/assets/docs/guide/user-interface/appearance/custom-labels.md +0 -509
- package/assets/docs/guide/user-interface/appearance/icons.md +0 -373
- package/assets/docs/guide/user-interface/appearance/theming.md +0 -665
- package/assets/docs/guide/user-interface/appearance.md +0 -23
- package/assets/docs/guide/user-interface/build-your-own-ui.md +0 -620
- package/assets/docs/guide/user-interface/customization/canvas-menu.md +0 -412
- package/assets/docs/guide/user-interface/customization/canvas.md +0 -281
- package/assets/docs/guide/user-interface/customization/color-palette.md +0 -413
- package/assets/docs/guide/user-interface/customization/crop-presets.md +0 -384
- package/assets/docs/guide/user-interface/customization/disable-or-enable.md +0 -676
- package/assets/docs/guide/user-interface/customization/dock.md +0 -399
- package/assets/docs/guide/user-interface/customization/force-crop.md +0 -289
- package/assets/docs/guide/user-interface/customization/inspector-bar.md +0 -371
- package/assets/docs/guide/user-interface/customization/navigation-bar.md +0 -516
- package/assets/docs/guide/user-interface/customization/page-format.md +0 -436
- package/assets/docs/guide/user-interface/customization/panel.md +0 -605
- package/assets/docs/guide/user-interface/customization/quick-start/add-action-buttons.md +0 -531
- package/assets/docs/guide/user-interface/customization/quick-start/add-dock-buttons.md +0 -358
- package/assets/docs/guide/user-interface/customization/quick-start/create-custom-components.md +0 -374
- package/assets/docs/guide/user-interface/customization/quick-start/reorder-components.md +0 -323
- package/assets/docs/guide/user-interface/customization/quick-start/show-hide-components.md +0 -294
- package/assets/docs/guide/user-interface/customization/quick-start.md +0 -12
- package/assets/docs/guide/user-interface/customization/reference/component-order-api.md +0 -519
- package/assets/docs/guide/user-interface/customization/reference/component-reference.md +0 -333
- package/assets/docs/guide/user-interface/customization/reference.md +0 -12
- package/assets/docs/guide/user-interface/customization.md +0 -39
- package/assets/docs/guide/user-interface/localization.md +0 -633
- package/assets/docs/guide/user-interface/overview.md +0 -167
- package/assets/docs/guide/user-interface/ui-extensions/add-custom-feature.md +0 -411
- package/assets/docs/guide/user-interface/ui-extensions/asset-library.md +0 -721
- package/assets/docs/guide/user-interface/ui-extensions/create-custom-panel.md +0 -331
- package/assets/docs/guide/user-interface/ui-extensions/customize-behaviour.md +0 -553
- package/assets/docs/guide/user-interface/ui-extensions/notifications-and-dialogs.md +0 -672
- package/assets/docs/guide/user-interface/ui-extensions/quick-actions.md +0 -415
- package/assets/docs/guide/user-interface/ui-extensions/register-new-component.md +0 -521
- package/assets/docs/guide/user-interface/ui-extensions.md +0 -26
- package/assets/docs/guide/user-interface.md +0 -25
- package/assets/prompts/evals-assetGenerate.md +0 -12
- package/assets/prompts/evals-brutalistCore.md +0 -34
- package/assets/prompts/evals-danskCatalogue.md +0 -31
- package/assets/prompts/evals-exportRoundTrip.md +0 -12
- package/assets/prompts/evals-inspectPriorCode.md +0 -16
- package/assets/prompts/evals-listProjectFiles.md +0 -6
- package/assets/prompts/evals-readAndExplainScript.md +0 -6
- package/assets/prompts/evals-resumeAcrossRestart.md +0 -15
- package/assets/prompts/evals-rewindRecovery.md +0 -10
- package/assets/prompts/evals-searchAcrossFiles.md +0 -6
- package/assets/prompts/evals-weddingCard.md +0 -20
- package/assets/prompts/explain.md +0 -6
- package/assets/prompts/review.md +0 -6
- package/dist/frontmatter.d.ts +0 -15
- package/dist/frontmatter.d.ts.map +0 -1
- package/dist/frontmatter.js +0 -46
- package/dist/frontmatter.js.map +0 -1
- package/dist/test/test/frontmatter.test.d.ts +0 -2
- package/dist/test/test/frontmatter.test.d.ts.map +0 -1
- package/dist/test/test/frontmatter.test.js +0 -55
- package/dist/test/test/frontmatter.test.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Returns the codesign-mcp asset bundle (SYSTEM.md,
|
|
2
|
+
* Returns the codesign-mcp asset bundle (SYSTEM.md, skills/) keyed
|
|
3
3
|
* by forward-slash-relative paths under `agent/`. Both surfaces (node and
|
|
4
4
|
* browser) share the same inlined bundle generated at codesign-mcp build time
|
|
5
5
|
* by scripts/generate-inline-assets.mjs.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { INLINE_ASSETS } from './inline.generated.js';
|
|
2
2
|
/**
|
|
3
|
-
* Returns the codesign-mcp asset bundle (SYSTEM.md,
|
|
3
|
+
* Returns the codesign-mcp asset bundle (SYSTEM.md, skills/) keyed
|
|
4
4
|
* by forward-slash-relative paths under `agent/`. Both surfaces (node and
|
|
5
5
|
* browser) share the same inlined bundle generated at codesign-mcp build time
|
|
6
6
|
* by scripts/generate-inline-assets.mjs.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-browser.js","sourceRoot":"","sources":["../../src/assets/load-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;AAC9B,CAAC","sourcesContent":["import { INLINE_ASSETS } from './inline.generated.js';\n\n/**\n * Returns the codesign-mcp asset bundle (SYSTEM.md,
|
|
1
|
+
{"version":3,"file":"load-browser.js","sourceRoot":"","sources":["../../src/assets/load-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;AAC9B,CAAC","sourcesContent":["import { INLINE_ASSETS } from './inline.generated.js';\n\n/**\n * Returns the codesign-mcp asset bundle (SYSTEM.md, skills/) keyed\n * by forward-slash-relative paths under `agent/`. Both surfaces (node and\n * browser) share the same inlined bundle generated at codesign-mcp build time\n * by scripts/generate-inline-assets.mjs.\n */\nexport function loadBrowserAssets(): Record<string, string> {\n return { ...INLINE_ASSETS };\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Returns the codesign-mcp asset bundle (SYSTEM.md,
|
|
2
|
+
* Returns the codesign-mcp asset bundle (SYSTEM.md, skills/) keyed
|
|
3
3
|
* by forward-slash-relative paths under `agent/`. Both surfaces (node and
|
|
4
4
|
* browser) share the same inlined bundle generated at codesign-mcp build time
|
|
5
5
|
* by scripts/generate-inline-assets.mjs.
|
package/dist/assets/load-node.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { INLINE_ASSETS } from './inline.generated.js';
|
|
2
2
|
/**
|
|
3
|
-
* Returns the codesign-mcp asset bundle (SYSTEM.md,
|
|
3
|
+
* Returns the codesign-mcp asset bundle (SYSTEM.md, skills/) keyed
|
|
4
4
|
* by forward-slash-relative paths under `agent/`. Both surfaces (node and
|
|
5
5
|
* browser) share the same inlined bundle generated at codesign-mcp build time
|
|
6
6
|
* by scripts/generate-inline-assets.mjs.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-node.js","sourceRoot":"","sources":["../../src/assets/load-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;AAC9B,CAAC","sourcesContent":["import { INLINE_ASSETS } from './inline.generated.js';\n\n/**\n * Returns the codesign-mcp asset bundle (SYSTEM.md,
|
|
1
|
+
{"version":3,"file":"load-node.js","sourceRoot":"","sources":["../../src/assets/load-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;AAC9B,CAAC","sourcesContent":["import { INLINE_ASSETS } from './inline.generated.js';\n\n/**\n * Returns the codesign-mcp asset bundle (SYSTEM.md, skills/) keyed\n * by forward-slash-relative paths under `agent/`. Both surfaces (node and\n * browser) share the same inlined bundle generated at codesign-mcp build time\n * by scripts/generate-inline-assets.mjs.\n */\nexport function loadNodeAssets(): Record<string, string> {\n return { ...INLINE_ASSETS };\n}\n"]}
|
package/dist/cli/http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/cli/http.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/cli/http.ts"],"names":[],"mappings":"AA0EA,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4L5D"}
|
package/dist/cli/http.js
CHANGED
|
@@ -24,9 +24,6 @@ import { NodeWorkspaceFS } from '../workspace/node-fs.js';
|
|
|
24
24
|
import { S3WorkspaceFS } from '../workspace/s3.js';
|
|
25
25
|
import { ScopedWorkspaceFS } from '../workspace/scoped.js';
|
|
26
26
|
import { loadNodeAssets } from '../assets/load-node.js';
|
|
27
|
-
import { mountMetricsEndpoints } from '../metrics/mount.js';
|
|
28
|
-
import { MetricsRecorder } from '../metrics/recorder.js';
|
|
29
|
-
import { createMetricsTool } from '../tools/metrics.js';
|
|
30
27
|
const HOST = '0.0.0.0'; // bind all interfaces; TLS/routing is the front's job
|
|
31
28
|
async function buildBackend(cfg) {
|
|
32
29
|
if (cfg.workspace.backend === 's3') {
|
|
@@ -62,6 +59,8 @@ export async function runHttp(_argv) {
|
|
|
62
59
|
process.stderr.write(`codesign-mcp http: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
63
60
|
process.exit(1);
|
|
64
61
|
}
|
|
62
|
+
const { buildDiagnostics } = await import('./stdio.js');
|
|
63
|
+
const { telemetry } = buildDiagnostics();
|
|
65
64
|
const license = cfg.cesdkLicense;
|
|
66
65
|
const { rawFs, s3: s3Backend } = await buildBackend(cfg);
|
|
67
66
|
const broadcaster = new SseBroadcaster();
|
|
@@ -77,11 +76,6 @@ export async function runHttp(_argv) {
|
|
|
77
76
|
// engine (per pool slot) so distinct engines run in parallel.
|
|
78
77
|
const engineLock = new Mutex();
|
|
79
78
|
const resolveWorkspaceId = makeWorkspaceResolver(cfg);
|
|
80
|
-
// Process-global perf recorder — constructed once, owns its own memory
|
|
81
|
-
// timer, DI'd into every session's MCP server. Undefined (and thus a no-op
|
|
82
|
-
// everywhere) unless IMGLY_METRICS_ENABLED is on.
|
|
83
|
-
const recorder = cfg.metricsEnabled ? new MetricsRecorder() : undefined;
|
|
84
|
-
recorder?.start();
|
|
85
79
|
const app = await createCodesignHttpServer({
|
|
86
80
|
assets: loadNodeAssets(),
|
|
87
81
|
buildId: cfg.buildId,
|
|
@@ -89,7 +83,6 @@ export async function runHttp(_argv) {
|
|
|
89
83
|
idleTimeoutMs: cfg.idleTimeoutMs,
|
|
90
84
|
resolveWorkspaceId,
|
|
91
85
|
trustedSessionIdHeader: 'x-mcp-session-id',
|
|
92
|
-
...(recorder ? { metrics: recorder } : {}),
|
|
93
86
|
...(cfg.viewerCorsOrigins
|
|
94
87
|
? { cors: { origin: cfg.viewerCorsOrigins } }
|
|
95
88
|
: {}),
|
|
@@ -155,28 +148,12 @@ export async function runHttp(_argv) {
|
|
|
155
148
|
// `as never`: buildDesignToolRegistrations is generic over the engine type
|
|
156
149
|
// (unknown at this composition root); the concrete @cesdk/engine type isn't
|
|
157
150
|
// threaded up here, so this is the sanctioned boundary cast (see no-as-any).
|
|
158
|
-
renderThumbnail: renderThumbnail
|
|
151
|
+
renderThumbnail: renderThumbnail,
|
|
152
|
+
telemetry
|
|
159
153
|
});
|
|
160
|
-
if (recorder) {
|
|
161
|
-
// Same merged shape as GET /metrics; `app` is assigned by the time any
|
|
162
|
-
// session is created (first initialize), so the closure is safe.
|
|
163
|
-
tools.push(createMetricsTool({
|
|
164
|
-
recorder,
|
|
165
|
-
activeSessions: () => app.sessions.size,
|
|
166
|
-
maxSessions: cfg.maxEngines
|
|
167
|
-
}));
|
|
168
|
-
}
|
|
169
154
|
return { engine, tools };
|
|
170
155
|
},
|
|
171
156
|
mountExtras: (expressApp) => {
|
|
172
|
-
if (recorder) {
|
|
173
|
-
// Metrics work in every workspace mode; the viewer (below) is single-only.
|
|
174
|
-
mountMetricsEndpoints(expressApp, {
|
|
175
|
-
recorder,
|
|
176
|
-
maxSessions: cfg.maxEngines,
|
|
177
|
-
activeSessions: () => app.sessions.size
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
157
|
if (cfg.auth.mode === 'session') {
|
|
181
158
|
// Multi-tenant viewer: /v/<sid> scopes reads to s/<sid> per request.
|
|
182
159
|
mountSessionViewer(expressApp, {
|
|
@@ -222,7 +199,6 @@ export async function runHttp(_argv) {
|
|
|
222
199
|
}, 5000);
|
|
223
200
|
hardExit.unref();
|
|
224
201
|
clearInterval(evictTimer);
|
|
225
|
-
recorder?.stop();
|
|
226
202
|
server.close();
|
|
227
203
|
server.closeAllConnections();
|
|
228
204
|
broadcaster.closeAll();
|
package/dist/cli/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/cli/http.ts"],"names":[],"mappings":"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","sourcesContent":["// packages/codesign-mcp/src/cli/http.ts\n//\n// codesign-mcp http — Streamable HTTP transport. Composition root: loads\n// IMGLY_* config, selects the storage backend (local|s3), builds a\n// PER-SESSION ScopedWorkspaceFS + RevisionStore, wires the workspace resolver,\n// and mounts the viewer: fixed `/viewer` in `single` mode, multi-tenant\n// `/v/<sid>` in `session` mode (disabled in `header` mode — follow-up).\nimport { loadConfig, type ServerConfig } from '../config.js';\nimport { ensureEngineAssetSources } from '../engine/asset-sources.js';\nimport { cesdkAdapter } from '../engine/cesdk-adapter.js';\nimport { Mutex } from '../engine/mutex.js';\nimport { EngineSession } from '../engine/session.js';\nimport { registerUnsplashSource } from '../engine/unsplash-source.js';\nimport { registerWorkspaceUriResolver } from '../engine/uri-resolver.js';\nimport { LocalGatewayClient } from '../gateway/local.js';\nimport { createCodesignHttpServer } from '../http/server.js';\nimport { makeWorkspaceResolver } from '../http/workspace-auth.js';\nimport { RevisionStore } from '../revisions/store.js';\nimport { ensureHeadlessEngine } from '../tools/engine.js';\nimport { buildDesignToolRegistrations } from '../tools/index.js';\nimport {\n createViewerRouter,\n LocalViewerUrlBuilder,\n mountSessionViewer,\n SseBroadcaster,\n viewerBaseFor\n} from '../viewer/index.js';\nimport { PresignedR2UrlBuilder } from '../viewer/presigned-r2-url-builder.js';\nimport { NodeWorkspaceFS } from '../workspace/node-fs.js';\nimport { S3WorkspaceFS } from '../workspace/s3.js';\nimport { ScopedWorkspaceFS } from '../workspace/scoped.js';\nimport { loadNodeAssets } from '../assets/load-node.js';\nimport type { WorkspaceFS } from '../workspace/types.js';\nimport { mountMetricsEndpoints } from '../metrics/mount.js';\nimport { MetricsRecorder } from '../metrics/recorder.js';\nimport { createMetricsTool } from '../tools/metrics.js';\n\nconst HOST = '0.0.0.0'; // bind all interfaces; TLS/routing is the front's job\n\ninterface S3BackendInfo {\n /** The real S3Client — used to build per-session presigned download URLs. */\n client: import('@aws-sdk/client-s3').S3Client;\n bucket: string;\n}\n\ninterface BackendResult {\n rawFs: WorkspaceFS;\n /** Present only when the s3 backend is active. */\n s3?: S3BackendInfo;\n}\n\nasync function buildBackend(cfg: ServerConfig): Promise<BackendResult> {\n if (cfg.workspace.backend === 's3') {\n const { S3Client } = await import('@aws-sdk/client-s3');\n const s3 = cfg.workspace.s3;\n if (!s3)\n throw new Error('config: s3 backend selected but s3 config missing');\n const client = new S3Client({\n region: s3.region,\n ...(s3.endpoint ? { endpoint: s3.endpoint, forcePathStyle: true } : {}),\n ...(s3.accessKeyId && s3.secretAccessKey\n ? {\n credentials: {\n accessKeyId: s3.accessKeyId,\n secretAccessKey: s3.secretAccessKey\n }\n }\n : {})\n });\n return {\n rawFs: new S3WorkspaceFS({ client, bucket: s3.bucket }),\n s3: { client, bucket: s3.bucket }\n };\n }\n return { rawFs: new NodeWorkspaceFS(cfg.workspace.dir ?? '/data') };\n}\n\nexport async function runHttp(_argv: string[]): Promise<void> {\n let cfg: ServerConfig;\n try {\n cfg = loadConfig();\n } catch (err) {\n process.stderr.write(\n `codesign-mcp http: ${err instanceof Error ? err.message : String(err)}\\n`\n );\n process.exit(1);\n }\n\n const license = cfg.cesdkLicense;\n const { rawFs, s3: s3Backend } = await buildBackend(cfg);\n const broadcaster = new SseBroadcaster();\n const gateway = new LocalGatewayClient({\n apiKey: cfg.gateway.apiKey,\n ...(cfg.gateway.baseUrl ? { endpoint: cfg.gateway.baseUrl } : {})\n });\n // ensureHeadlessEngine is a process singleton, so EVERY session's tools\n // operate on the same CE.SDK engine. This one lock — created once here, NOT\n // per session — serializes all engine access across sessions so two clients\n // editing concurrently can't corrupt each other's scene. When the engine\n // becomes a per-session/per-workspace pool, this moves to be one lock per\n // engine (per pool slot) so distinct engines run in parallel.\n const engineLock = new Mutex();\n const resolveWorkspaceId = makeWorkspaceResolver(cfg);\n // Process-global perf recorder — constructed once, owns its own memory\n // timer, DI'd into every session's MCP server. Undefined (and thus a no-op\n // everywhere) unless IMGLY_METRICS_ENABLED is on.\n const recorder = cfg.metricsEnabled ? new MetricsRecorder() : undefined;\n recorder?.start();\n\n const app = await createCodesignHttpServer({\n assets: loadNodeAssets(),\n buildId: cfg.buildId,\n maxSessions: cfg.maxEngines,\n idleTimeoutMs: cfg.idleTimeoutMs,\n resolveWorkspaceId,\n trustedSessionIdHeader: 'x-mcp-session-id',\n ...(recorder ? { metrics: recorder } : {}),\n ...(cfg.viewerCorsOrigins\n ? { cors: { origin: cfg.viewerCorsOrigins } }\n : {}),\n createSession: async ({ sessionId, workspaceId }) => {\n const scopedFs = new ScopedWorkspaceFS(rawFs, workspaceId);\n const store = new RevisionStore(scopedFs);\n const engine = await ensureHeadlessEngine(license);\n // Idempotent (engine is a process singleton) — only the first successful registration pays the CDN fetch.\n await ensureEngineAssetSources(engine);\n // Demo `unsplash` custom source (synchronous, idempotent) so asset_search\n // has a real remote source alongside the CDN ones. Public IMG.LY proxy.\n registerUnsplashSource(engine);\n // Per-session viewer base: session mode lives under /v/<sid> (reachable\n // through the CF Worker when IMGLY_PUBLIC_BASE_URL is set); single mode\n // keeps the fixed /viewer mount.\n const viewerBase = viewerBaseFor({\n publicBaseUrl: cfg.publicBaseUrl,\n port: cfg.port,\n mode: cfg.auth.mode,\n sessionId\n });\n // Build a per-session URL builder. On the S3/R2 backend we use the\n // PresignedR2UrlBuilder so forDownload returns a presigned GET URL\n // directly from R2 — the /r/ Express route is not mounted on the hosted\n // Cloudflare deployment. On the local backend we fall back to\n // LocalViewerUrlBuilder (forDownload == forResource == /r/ URL).\n const urlBuilder = s3Backend\n ? new PresignedR2UrlBuilder({\n base: viewerBase,\n client: s3Backend.client,\n bucket: s3Backend.bucket,\n workspaceId\n })\n : new LocalViewerUrlBuilder({ base: viewerBase });\n // The engine and its URI resolver are process-global (ensureHeadlessEngine\n // is a cached singleton). Re-registering here is redundant after the first\n // session but harmless — the resolver is always the same function.\n // PresignedR2UrlBuilder inherits forResource (sync) from\n // LocalViewerUrlBuilder, so the sync URI-resolver callback stays valid.\n registerWorkspaceUriResolver(engine, urlBuilder);\n const session = new EngineSession({\n size: 1,\n adapter: cesdkAdapter(engine)\n });\n const renderThumbnail = async ({\n engine: eng\n }: {\n revision: string;\n engine: import('@cesdk/engine').default;\n }) => {\n const pages = eng.scene.getPages?.() ?? [];\n if (pages.length === 0) throw new Error('no pages');\n const blob = await eng.block.export(pages[0], 'image/webp', {\n targetWidth: 256\n });\n return new Uint8Array(await blob.arrayBuffer());\n };\n const tools = buildDesignToolRegistrations({\n fs: scopedFs,\n store,\n session,\n engineLock,\n gateway,\n urlBuilder,\n allowOutPath: false,\n onLeafWritten: (e) => broadcaster.broadcast(e),\n // `as never`: buildDesignToolRegistrations is generic over the engine type\n // (unknown at this composition root); the concrete @cesdk/engine type isn't\n // threaded up here, so this is the sanctioned boundary cast (see no-as-any).\n renderThumbnail: renderThumbnail as never\n });\n if (recorder) {\n // Same merged shape as GET /metrics; `app` is assigned by the time any\n // session is created (first initialize), so the closure is safe.\n tools.push(\n createMetricsTool({\n recorder,\n activeSessions: () => app.sessions.size,\n maxSessions: cfg.maxEngines\n })\n );\n }\n return { engine, tools };\n },\n mountExtras: (expressApp) => {\n if (recorder) {\n // Metrics work in every workspace mode; the viewer (below) is single-only.\n mountMetricsEndpoints(expressApp, {\n recorder,\n maxSessions: cfg.maxEngines,\n activeSessions: () => app.sessions.size\n });\n }\n if (cfg.auth.mode === 'session') {\n // Multi-tenant viewer: /v/<sid> scopes reads to s/<sid> per request.\n mountSessionViewer(expressApp, {\n rawFs,\n broadcaster,\n cesdkLicense: license\n });\n return;\n }\n if (cfg.auth.mode !== 'single') {\n process.stderr.write(\n `codesign-mcp http: viewer disabled in \"${cfg.auth.mode}\" mode (multi-tenant viewer is a follow-up).\\n`\n );\n return;\n }\n const viewerScopedFs = new ScopedWorkspaceFS(\n rawFs,\n cfg.auth.fixedWorkspaceId ?? 'default'\n );\n const viewerStore = new RevisionStore(viewerScopedFs);\n expressApp.use(\n '/viewer',\n createViewerRouter({\n store: viewerStore,\n fs: viewerScopedFs,\n broadcaster,\n cesdkLicense: license\n })\n );\n }\n });\n\n const evictTimer = setInterval(\n () =>\n void app.sessions.evictIdle().then((evicted) => {\n if (evicted.length > 0)\n process.stderr.write(\n `codesign-mcp http: evicted ${evicted.length} idle session(s)\\n`\n );\n }),\n Math.max(10_000, cfg.idleTimeoutMs / 2)\n );\n\n const server = app.listen(cfg.port, HOST, () => {\n process.stderr.write(\n `codesign-mcp http: listening on http://${HOST}:${cfg.port}/mcp` +\n ` (mode=${cfg.auth.mode} backend=${cfg.workspace.backend})\\n`\n );\n });\n\n let shuttingDown = false;\n const shutdown = async (signal: string) => {\n if (shuttingDown) {\n process.stderr.write(\n `codesign-mcp http: ${signal} again — forcing exit.\\n`\n );\n process.exit(1);\n }\n shuttingDown = true;\n process.stderr.write(`codesign-mcp http: ${signal} — shutting down.\\n`);\n const hardExit = setTimeout(() => {\n process.stderr.write(\n 'codesign-mcp http: shutdown timed out — forcing exit.\\n'\n );\n process.exit(1);\n }, 5000);\n hardExit.unref();\n clearInterval(evictTimer);\n recorder?.stop();\n server.close();\n server.closeAllConnections();\n broadcaster.closeAll();\n await app.shutdown();\n process.exit(0);\n };\n process.on('SIGINT', () => void shutdown('SIGINT'));\n process.on('SIGTERM', () => void shutdown('SIGTERM'));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/cli/http.ts"],"names":[],"mappings":"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","sourcesContent":["// packages/codesign-mcp/src/cli/http.ts\n//\n// codesign-mcp http — Streamable HTTP transport. Composition root: loads\n// IMGLY_* config, selects the storage backend (local|s3), builds a\n// PER-SESSION ScopedWorkspaceFS + RevisionStore, wires the workspace resolver,\n// and mounts the viewer: fixed `/viewer` in `single` mode, multi-tenant\n// `/v/<sid>` in `session` mode (disabled in `header` mode — follow-up).\nimport { loadConfig, type ServerConfig } from '../config.js';\nimport { ensureEngineAssetSources } from '../engine/asset-sources.js';\nimport { cesdkAdapter } from '../engine/cesdk-adapter.js';\nimport { Mutex } from '../engine/mutex.js';\nimport { EngineSession } from '../engine/session.js';\nimport { registerUnsplashSource } from '../engine/unsplash-source.js';\nimport { registerWorkspaceUriResolver } from '../engine/uri-resolver.js';\nimport { LocalGatewayClient } from '../gateway/local.js';\nimport { createCodesignHttpServer } from '../http/server.js';\nimport { makeWorkspaceResolver } from '../http/workspace-auth.js';\nimport { RevisionStore } from '../revisions/store.js';\nimport { ensureHeadlessEngine } from '../tools/engine.js';\nimport { buildDesignToolRegistrations } from '../tools/index.js';\nimport {\n createViewerRouter,\n LocalViewerUrlBuilder,\n mountSessionViewer,\n SseBroadcaster,\n viewerBaseFor\n} from '../viewer/index.js';\nimport { PresignedR2UrlBuilder } from '../viewer/presigned-r2-url-builder.js';\nimport { NodeWorkspaceFS } from '../workspace/node-fs.js';\nimport { S3WorkspaceFS } from '../workspace/s3.js';\nimport { ScopedWorkspaceFS } from '../workspace/scoped.js';\nimport { loadNodeAssets } from '../assets/load-node.js';\nimport type { WorkspaceFS } from '../workspace/types.js';\n\nconst HOST = '0.0.0.0'; // bind all interfaces; TLS/routing is the front's job\n\ninterface S3BackendInfo {\n /** The real S3Client — used to build per-session presigned download URLs. */\n client: import('@aws-sdk/client-s3').S3Client;\n bucket: string;\n}\n\ninterface BackendResult {\n rawFs: WorkspaceFS;\n /** Present only when the s3 backend is active. */\n s3?: S3BackendInfo;\n}\n\nasync function buildBackend(cfg: ServerConfig): Promise<BackendResult> {\n if (cfg.workspace.backend === 's3') {\n const { S3Client } = await import('@aws-sdk/client-s3');\n const s3 = cfg.workspace.s3;\n if (!s3)\n throw new Error('config: s3 backend selected but s3 config missing');\n const client = new S3Client({\n region: s3.region,\n ...(s3.endpoint ? { endpoint: s3.endpoint, forcePathStyle: true } : {}),\n ...(s3.accessKeyId && s3.secretAccessKey\n ? {\n credentials: {\n accessKeyId: s3.accessKeyId,\n secretAccessKey: s3.secretAccessKey\n }\n }\n : {})\n });\n return {\n rawFs: new S3WorkspaceFS({ client, bucket: s3.bucket }),\n s3: { client, bucket: s3.bucket }\n };\n }\n return { rawFs: new NodeWorkspaceFS(cfg.workspace.dir ?? '/data') };\n}\n\nexport async function runHttp(_argv: string[]): Promise<void> {\n let cfg: ServerConfig;\n try {\n cfg = loadConfig();\n } catch (err) {\n process.stderr.write(\n `codesign-mcp http: ${err instanceof Error ? err.message : String(err)}\\n`\n );\n process.exit(1);\n }\n\n const { buildDiagnostics } = await import('./stdio.js');\n const { telemetry } = buildDiagnostics();\n\n const license = cfg.cesdkLicense;\n const { rawFs, s3: s3Backend } = await buildBackend(cfg);\n const broadcaster = new SseBroadcaster();\n const gateway = new LocalGatewayClient({\n apiKey: cfg.gateway.apiKey,\n ...(cfg.gateway.baseUrl ? { endpoint: cfg.gateway.baseUrl } : {})\n });\n // ensureHeadlessEngine is a process singleton, so EVERY session's tools\n // operate on the same CE.SDK engine. This one lock — created once here, NOT\n // per session — serializes all engine access across sessions so two clients\n // editing concurrently can't corrupt each other's scene. When the engine\n // becomes a per-session/per-workspace pool, this moves to be one lock per\n // engine (per pool slot) so distinct engines run in parallel.\n const engineLock = new Mutex();\n const resolveWorkspaceId = makeWorkspaceResolver(cfg);\n\n const app = await createCodesignHttpServer({\n assets: loadNodeAssets(),\n buildId: cfg.buildId,\n maxSessions: cfg.maxEngines,\n idleTimeoutMs: cfg.idleTimeoutMs,\n resolveWorkspaceId,\n trustedSessionIdHeader: 'x-mcp-session-id',\n ...(cfg.viewerCorsOrigins\n ? { cors: { origin: cfg.viewerCorsOrigins } }\n : {}),\n createSession: async ({ sessionId, workspaceId }) => {\n const scopedFs = new ScopedWorkspaceFS(rawFs, workspaceId);\n const store = new RevisionStore(scopedFs);\n const engine = await ensureHeadlessEngine(license);\n // Idempotent (engine is a process singleton) — only the first successful registration pays the CDN fetch.\n await ensureEngineAssetSources(engine);\n // Demo `unsplash` custom source (synchronous, idempotent) so asset_search\n // has a real remote source alongside the CDN ones. Public IMG.LY proxy.\n registerUnsplashSource(engine);\n // Per-session viewer base: session mode lives under /v/<sid> (reachable\n // through the CF Worker when IMGLY_PUBLIC_BASE_URL is set); single mode\n // keeps the fixed /viewer mount.\n const viewerBase = viewerBaseFor({\n publicBaseUrl: cfg.publicBaseUrl,\n port: cfg.port,\n mode: cfg.auth.mode,\n sessionId\n });\n // Build a per-session URL builder. On the S3/R2 backend we use the\n // PresignedR2UrlBuilder so forDownload returns a presigned GET URL\n // directly from R2 — the /r/ Express route is not mounted on the hosted\n // Cloudflare deployment. On the local backend we fall back to\n // LocalViewerUrlBuilder (forDownload == forResource == /r/ URL).\n const urlBuilder = s3Backend\n ? new PresignedR2UrlBuilder({\n base: viewerBase,\n client: s3Backend.client,\n bucket: s3Backend.bucket,\n workspaceId\n })\n : new LocalViewerUrlBuilder({ base: viewerBase });\n // The engine and its URI resolver are process-global (ensureHeadlessEngine\n // is a cached singleton). Re-registering here is redundant after the first\n // session but harmless — the resolver is always the same function.\n // PresignedR2UrlBuilder inherits forResource (sync) from\n // LocalViewerUrlBuilder, so the sync URI-resolver callback stays valid.\n registerWorkspaceUriResolver(engine, urlBuilder);\n const session = new EngineSession({\n size: 1,\n adapter: cesdkAdapter(engine)\n });\n const renderThumbnail = async ({\n engine: eng\n }: {\n revision: string;\n engine: import('@cesdk/engine').default;\n }) => {\n const pages = eng.scene.getPages?.() ?? [];\n if (pages.length === 0) throw new Error('no pages');\n const blob = await eng.block.export(pages[0], 'image/webp', {\n targetWidth: 256\n });\n return new Uint8Array(await blob.arrayBuffer());\n };\n const tools = buildDesignToolRegistrations({\n fs: scopedFs,\n store,\n session,\n engineLock,\n gateway,\n urlBuilder,\n allowOutPath: false,\n onLeafWritten: (e) => broadcaster.broadcast(e),\n // `as never`: buildDesignToolRegistrations is generic over the engine type\n // (unknown at this composition root); the concrete @cesdk/engine type isn't\n // threaded up here, so this is the sanctioned boundary cast (see no-as-any).\n renderThumbnail: renderThumbnail as never,\n telemetry\n });\n return { engine, tools };\n },\n mountExtras: (expressApp) => {\n if (cfg.auth.mode === 'session') {\n // Multi-tenant viewer: /v/<sid> scopes reads to s/<sid> per request.\n mountSessionViewer(expressApp, {\n rawFs,\n broadcaster,\n cesdkLicense: license\n });\n return;\n }\n if (cfg.auth.mode !== 'single') {\n process.stderr.write(\n `codesign-mcp http: viewer disabled in \"${cfg.auth.mode}\" mode (multi-tenant viewer is a follow-up).\\n`\n );\n return;\n }\n const viewerScopedFs = new ScopedWorkspaceFS(\n rawFs,\n cfg.auth.fixedWorkspaceId ?? 'default'\n );\n const viewerStore = new RevisionStore(viewerScopedFs);\n expressApp.use(\n '/viewer',\n createViewerRouter({\n store: viewerStore,\n fs: viewerScopedFs,\n broadcaster,\n cesdkLicense: license\n })\n );\n }\n });\n\n const evictTimer = setInterval(\n () =>\n void app.sessions.evictIdle().then((evicted) => {\n if (evicted.length > 0)\n process.stderr.write(\n `codesign-mcp http: evicted ${evicted.length} idle session(s)\\n`\n );\n }),\n Math.max(10_000, cfg.idleTimeoutMs / 2)\n );\n\n const server = app.listen(cfg.port, HOST, () => {\n process.stderr.write(\n `codesign-mcp http: listening on http://${HOST}:${cfg.port}/mcp` +\n ` (mode=${cfg.auth.mode} backend=${cfg.workspace.backend})\\n`\n );\n });\n\n let shuttingDown = false;\n const shutdown = async (signal: string) => {\n if (shuttingDown) {\n process.stderr.write(\n `codesign-mcp http: ${signal} again — forcing exit.\\n`\n );\n process.exit(1);\n }\n shuttingDown = true;\n process.stderr.write(`codesign-mcp http: ${signal} — shutting down.\\n`);\n const hardExit = setTimeout(() => {\n process.stderr.write(\n 'codesign-mcp http: shutdown timed out — forcing exit.\\n'\n );\n process.exit(1);\n }, 5000);\n hardExit.unref();\n clearInterval(evictTimer);\n server.close();\n server.closeAllConnections();\n broadcaster.closeAll();\n await app.shutdown();\n process.exit(0);\n };\n process.on('SIGINT', () => void shutdown('SIGINT'));\n process.on('SIGTERM', () => void shutdown('SIGTERM'));\n}\n"]}
|
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
* (e.g. Claude Desktop) fail to parse the next message. console.error already
|
|
7
7
|
* writes to stderr and is intentionally left untouched.
|
|
8
8
|
*/
|
|
9
|
-
export declare function redirectConsoleToStderr(): void;
|
|
9
|
+
export declare function redirectConsoleToStderr(onLine?: (level: 'log' | 'info' | 'warn' | 'debug' | 'trace', text: string) => void): void;
|
|
10
10
|
//# sourceMappingURL=redirect-console.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redirect-console.d.ts","sourceRoot":"","sources":["../../src/cli/redirect-console.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"redirect-console.d.ts","sourceRoot":"","sources":["../../src/cli/redirect-console.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,CAAC,EAAE,CACP,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,EAClD,IAAI,EAAE,MAAM,KACT,IAAI,GACR,IAAI,CAgBN"}
|
|
@@ -6,12 +6,21 @@
|
|
|
6
6
|
* (e.g. Claude Desktop) fail to parse the next message. console.error already
|
|
7
7
|
* writes to stderr and is intentionally left untouched.
|
|
8
8
|
*/
|
|
9
|
-
export function redirectConsoleToStderr() {
|
|
9
|
+
export function redirectConsoleToStderr(onLine) {
|
|
10
10
|
for (const m of ['log', 'info', 'warn', 'debug', 'trace']) {
|
|
11
11
|
console[m] = (...args) => {
|
|
12
|
-
|
|
12
|
+
const text = args
|
|
13
13
|
.map((a) => (typeof a === 'string' ? a : JSON.stringify(a)))
|
|
14
|
-
.join(' ')
|
|
14
|
+
.join(' ');
|
|
15
|
+
process.stderr.write(text + '\n');
|
|
16
|
+
if (onLine) {
|
|
17
|
+
try {
|
|
18
|
+
onLine(m, text);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// A diagnostics emit must never break console output.
|
|
22
|
+
}
|
|
23
|
+
}
|
|
15
24
|
};
|
|
16
25
|
}
|
|
17
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redirect-console.js","sourceRoot":"","sources":["../../src/cli/redirect-console.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB;
|
|
1
|
+
{"version":3,"file":"redirect-console.js","sourceRoot":"","sources":["../../src/cli/redirect-console.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAGS;IAET,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAU,EAAE,CAAC;QACnE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAe,EAAQ,EAAE;YACxC,MAAM,IAAI,GAAG,IAAI;iBACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3D,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;YAClC,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC;oBACH,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBAClB,CAAC;gBAAC,MAAM,CAAC;oBACP,sDAAsD;gBACxD,CAAC;YACH,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["/**\n * Redirect the console.* methods that default to stdout (log/info/warn/debug/\n * trace) to stderr. In stdio mode stdout is the JSON-RPC channel and must carry\n * ONLY protocol traffic; the CE.SDK engine logs `[CreativeEngine]`/`[UBQ]` lines\n * via console.log at init, which would corrupt the stream and make strict hosts\n * (e.g. Claude Desktop) fail to parse the next message. console.error already\n * writes to stderr and is intentionally left untouched.\n */\nexport function redirectConsoleToStderr(\n onLine?: (\n level: 'log' | 'info' | 'warn' | 'debug' | 'trace',\n text: string\n ) => void\n): void {\n for (const m of ['log', 'info', 'warn', 'debug', 'trace'] as const) {\n console[m] = (...args: unknown[]): void => {\n const text = args\n .map((a) => (typeof a === 'string' ? a : JSON.stringify(a)))\n .join(' ');\n process.stderr.write(text + '\\n');\n if (onLine) {\n try {\n onLine(m, text);\n } catch {\n // A diagnostics emit must never break console output.\n }\n }\n };\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-license.d.ts","sourceRoot":"","sources":["../../src/cli/resolve-license.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolve-license.d.ts","sourceRoot":"","sources":["../../src/cli/resolve-license.ts"],"names":[],"mappings":"AAOA,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,YAAY,EAAE,MAAM,GACnB,MAAM,GAAG,SAAS,CAKpB"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
// Resolve the CE.SDK license for stdio mode.
|
|
2
|
-
// wins
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
1
|
+
// Resolve the CE.SDK license for stdio mode. Precedence: an explicit
|
|
2
|
+
// CESDK_LICENSE wins, then IMGLY_CESDK_LICENSE (the repo's .env convention, so a
|
|
3
|
+
// local `--env-file=.env` run works without remapping), then the
|
|
4
|
+
// build-time-bundled trial (empty in dev and at GA). Blank/whitespace is treated
|
|
5
|
+
// as absent so an empty env var can't shadow the next source. The env-first
|
|
6
|
+
// order is what makes the bundled trial a beta-only, no-op addition: at GA we
|
|
7
|
+
// stop injecting it and the env license is the only source.
|
|
6
8
|
export function resolveLicense(env, trialLicense) {
|
|
7
|
-
const fromEnv = env.CESDK_LICENSE?.trim();
|
|
9
|
+
const fromEnv = env.CESDK_LICENSE?.trim() || env.IMGLY_CESDK_LICENSE?.trim();
|
|
8
10
|
if (fromEnv)
|
|
9
11
|
return fromEnv;
|
|
10
12
|
const trial = trialLicense.trim();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-license.js","sourceRoot":"","sources":["../../src/cli/resolve-license.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"resolve-license.js","sourceRoot":"","sources":["../../src/cli/resolve-license.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,iFAAiF;AACjF,iEAAiE;AACjE,iFAAiF;AACjF,4EAA4E;AAC5E,8EAA8E;AAC9E,4DAA4D;AAC5D,MAAM,UAAU,cAAc,CAC5B,GAAsB,EACtB,YAAoB;IAEpB,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC;IAC7E,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;IAClC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC","sourcesContent":["// Resolve the CE.SDK license for stdio mode. Precedence: an explicit\n// CESDK_LICENSE wins, then IMGLY_CESDK_LICENSE (the repo's .env convention, so a\n// local `--env-file=.env` run works without remapping), then the\n// build-time-bundled trial (empty in dev and at GA). Blank/whitespace is treated\n// as absent so an empty env var can't shadow the next source. The env-first\n// order is what makes the bundled trial a beta-only, no-op addition: at GA we\n// stop injecting it and the env license is the only source.\nexport function resolveLicense(\n env: NodeJS.ProcessEnv,\n trialLicense: string\n): string | undefined {\n const fromEnv = env.CESDK_LICENSE?.trim() || env.IMGLY_CESDK_LICENSE?.trim();\n if (fromEnv) return fromEnv;\n const trial = trialLicense.trim();\n return trial.length > 0 ? trial : undefined;\n}\n"]}
|
package/dist/cli/stdio.d.ts
CHANGED
|
@@ -1,2 +1,11 @@
|
|
|
1
|
+
import type { Env } from '../config.js';
|
|
2
|
+
import { type DiagnosticsSink } from '../diagnostics/events.js';
|
|
3
|
+
import { type TelemetrySink } from '../tools/spans.js';
|
|
4
|
+
export declare function buildDiagnostics(env?: Env): {
|
|
5
|
+
diag: DiagnosticsSink;
|
|
6
|
+
telemetry: TelemetrySink;
|
|
7
|
+
dir: string | undefined;
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
};
|
|
1
10
|
export declare function runStdio(): Promise<void>;
|
|
2
11
|
//# sourceMappingURL=stdio.d.ts.map
|
package/dist/cli/stdio.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../src/cli/stdio.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../src/cli/stdio.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,0BAA0B,CAAC;AAclC,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAc5E,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,GAAiB,GAAG;IACxD,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,aAAa,CAAC;IACzB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;CAClB,CAYA;AAED,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CA8I9C"}
|
package/dist/cli/stdio.js
CHANGED
|
@@ -27,6 +27,10 @@ import { homedir } from 'node:os';
|
|
|
27
27
|
import { join as joinPath } from 'node:path';
|
|
28
28
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
29
29
|
import { loadNodeAssets } from '../assets/load-node.js';
|
|
30
|
+
import { diagnosticsFileEnabled, resolveDiagnosticsDir } from '../config.js';
|
|
31
|
+
import { NOOP_DIAGNOSTICS_SINK } from '../diagnostics/events.js';
|
|
32
|
+
import { FileDiagnosticsSink } from '../diagnostics/file-sink.js';
|
|
33
|
+
import { toolCallSink } from '../diagnostics/tool-call-adapter.js';
|
|
30
34
|
import { ensureEngineAssetSources } from '../engine/asset-sources.js';
|
|
31
35
|
import { cesdkAdapter } from '../engine/cesdk-adapter.js';
|
|
32
36
|
import { Mutex } from '../engine/mutex.js';
|
|
@@ -38,23 +42,43 @@ import { RevisionStore } from '../revisions/store.js';
|
|
|
38
42
|
import { createCodesignMcpServer } from '../server.js';
|
|
39
43
|
import { ensureHeadlessEngine } from '../tools/engine.js';
|
|
40
44
|
import { buildDesignToolRegistrations } from '../tools/index.js';
|
|
45
|
+
import { NOOP_TELEMETRY_SINK } from '../tools/spans.js';
|
|
41
46
|
import { createViewerRouter, LocalViewerUrlBuilder, SseBroadcaster, startViewerListener } from '../viewer/index.js';
|
|
42
47
|
import { NodeWorkspaceFS } from '../workspace/node-fs.js';
|
|
43
48
|
import { redirectConsoleToStderr } from './redirect-console.js';
|
|
44
49
|
import { resolveLicense } from './resolve-license.js';
|
|
45
50
|
import { TRIAL_CESDK_LICENSE } from './trial-license.generated.js';
|
|
46
51
|
const DEFAULT_WORKSPACE = joinPath(homedir(), '.codesign', 'workspace');
|
|
52
|
+
export function buildDiagnostics(env = process.env) {
|
|
53
|
+
if (!diagnosticsFileEnabled(env)) {
|
|
54
|
+
return {
|
|
55
|
+
diag: NOOP_DIAGNOSTICS_SINK,
|
|
56
|
+
telemetry: NOOP_TELEMETRY_SINK,
|
|
57
|
+
dir: undefined,
|
|
58
|
+
enabled: false
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const dir = resolveDiagnosticsDir(env);
|
|
62
|
+
const sink = new FileDiagnosticsSink({ dir });
|
|
63
|
+
return { diag: sink, telemetry: toolCallSink(sink), dir, enabled: true };
|
|
64
|
+
}
|
|
47
65
|
export async function runStdio() {
|
|
66
|
+
const { diag, telemetry, dir: diagnosticsDir, enabled: diagnosticsEnabled } = buildDiagnostics();
|
|
67
|
+
if (diagnosticsEnabled && diagnosticsDir) {
|
|
68
|
+
await FileDiagnosticsSink.pruneOnStartup({ dir: diagnosticsDir });
|
|
69
|
+
process.stderr.write(`codesign-mcp stdio: diagnostics logging to ${diagnosticsDir} — redacted, local-only; disable with IMGLY_DIAGNOSTICS_FILE=false\n`);
|
|
70
|
+
}
|
|
48
71
|
// stdout is the JSON-RPC channel in stdio mode; keep engine console.* noise off it.
|
|
49
|
-
redirectConsoleToStderr();
|
|
72
|
+
redirectConsoleToStderr((level, text) => diag.emit({ kind: 'engine_log', timestamp: Date.now(), level, text }));
|
|
50
73
|
const license = resolveLicense(process.env, TRIAL_CESDK_LICENSE);
|
|
51
74
|
if (!license) {
|
|
52
|
-
process.stderr.write('codesign-mcp stdio: no CESDK_LICENSE set and no bundled trial license — set CESDK_LICENSE to a CE.SDK node license string.\n');
|
|
75
|
+
process.stderr.write('codesign-mcp stdio: no CESDK_LICENSE set and no bundled trial license — set CESDK_LICENSE (or IMGLY_CESDK_LICENSE) to a CE.SDK node license string.\n');
|
|
53
76
|
process.exit(1);
|
|
54
77
|
}
|
|
55
78
|
// True when the license came from the bundled trial (no explicit env override).
|
|
56
79
|
// Used only to turn an engine-init rejection into a trial-aware hint below.
|
|
57
|
-
const usedTrial = !process.env.CESDK_LICENSE?.trim()
|
|
80
|
+
const usedTrial = !process.env.CESDK_LICENSE?.trim() &&
|
|
81
|
+
!process.env.IMGLY_CESDK_LICENSE?.trim();
|
|
58
82
|
const workspaceRoot = process.env.CODESIGN_WORKSPACE ?? DEFAULT_WORKSPACE;
|
|
59
83
|
const fs = new NodeWorkspaceFS(workspaceRoot);
|
|
60
84
|
const store = new RevisionStore(fs);
|
|
@@ -76,15 +100,34 @@ export async function runStdio() {
|
|
|
76
100
|
});
|
|
77
101
|
const listener = await startViewerListener({ router: viewerRouter });
|
|
78
102
|
process.stderr.write(`codesign-mcp stdio: viewer at ${listener.base}\n`);
|
|
103
|
+
diag.emit({
|
|
104
|
+
kind: 'lifecycle',
|
|
105
|
+
timestamp: Date.now(),
|
|
106
|
+
text: 'viewer_listening'
|
|
107
|
+
});
|
|
79
108
|
const urlBuilder = new LocalViewerUrlBuilder({ base: listener.base });
|
|
80
109
|
// Kick off the heavy engine bootstrap WITHOUT awaiting it — see the file
|
|
81
110
|
// header. server.connect() below answers the handshake while this runs.
|
|
111
|
+
diag.emit({
|
|
112
|
+
kind: 'lifecycle',
|
|
113
|
+
timestamp: Date.now(),
|
|
114
|
+
text: 'engine_init_start'
|
|
115
|
+
});
|
|
82
116
|
const enginePromise = bootstrapEngine({ license, urlBuilder, usedTrial });
|
|
83
117
|
// Nothing awaits enginePromise until the first tool call. Attach a logger so a
|
|
84
118
|
// background init failure surfaces on stderr instead of crashing the process
|
|
85
119
|
// on an unhandled rejection; the awaiting tool call still sees the real error.
|
|
86
120
|
void enginePromise.catch((err) => {
|
|
87
121
|
process.stderr.write(`codesign-mcp stdio: engine initialization failed — ${err instanceof Error ? (err.stack ?? err.message) : String(err)}\n`);
|
|
122
|
+
diag.emit({
|
|
123
|
+
kind: 'lifecycle',
|
|
124
|
+
timestamp: Date.now(),
|
|
125
|
+
text: 'engine_init_failed',
|
|
126
|
+
error: {
|
|
127
|
+
message: err instanceof Error ? err.message : String(err),
|
|
128
|
+
...(err instanceof Error && err.stack ? { stack: err.stack } : {})
|
|
129
|
+
}
|
|
130
|
+
});
|
|
88
131
|
});
|
|
89
132
|
// size=1, single shared engine resolved lazily from enginePromise.
|
|
90
133
|
// EngineSession only calls adapter.create() (awaiting the engine) on the first
|
|
@@ -113,7 +156,8 @@ export async function runStdio() {
|
|
|
113
156
|
urlBuilder,
|
|
114
157
|
allowOutPath: true,
|
|
115
158
|
onLeafWritten: (e) => broadcaster.broadcast(e),
|
|
116
|
-
renderThumbnail: renderThumbnail // adapter's E generic is `unknown`; cesdk engine type fits
|
|
159
|
+
renderThumbnail: renderThumbnail, // adapter's E generic is `unknown`; cesdk engine type fits
|
|
160
|
+
telemetry
|
|
117
161
|
});
|
|
118
162
|
const assets = loadNodeAssets();
|
|
119
163
|
const server = createCodesignMcpServer({
|
package/dist/cli/stdio.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/cli/stdio.ts"],"names":[],"mappings":"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","sourcesContent":["// MCP server over stdin/stdout. Bootstraps:\n// - Workspace (NodeWorkspaceFS rooted at $CODESIGN_WORKSPACE or ~/.codesign/workspace)\n// - RevisionStore over the workspace\n// - EngineSession (size=1) over the headless CE.SDK engine\n// - SseBroadcaster for the viewer\n// - Viewer router + ephemeral localhost listener\n// - design + workspace tool registrations\n// - LocalGatewayClient (reads $API_KEY)\n//\n// stdio's single-engine, single-workspace model is the simplest possible\n// wiring; HTTP transport (F2) reuses the same primitives per-session.\n//\n// Startup order matters: everything cheap (workspace, store, viewer listener,\n// tool wiring) runs before `server.connect()` so the MCP handshake replies\n// immediately. The expensive CE.SDK engine init + CDN asset-source fetch are\n// deferred to a background promise (bootstrapEngine) that the first tool call\n// awaits. Doing this work before connect can blow the host's MCP startup\n// timeout on a cold boot — seen as \"fails on add/update, works after Reconnect\".\n//\n// Optional env:\n// CESDK_LICENSE — overrides the build-time-bundled trial license. Mandatory\n// at GA / when no trial is baked in (see resolve-license.ts).\n//\n// Logging note: stdout is reserved for MCP protocol traffic. Everything\n// human-facing (errors, progress) goes to stderr.\nimport { homedir } from 'node:os';\nimport { join as joinPath } from 'node:path';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { loadNodeAssets } from '../assets/load-node.js';\nimport { ensureEngineAssetSources } from '../engine/asset-sources.js';\nimport { cesdkAdapter } from '../engine/cesdk-adapter.js';\nimport { Mutex } from '../engine/mutex.js';\nimport { EngineSession } from '../engine/session.js';\nimport { registerUnsplashSource } from '../engine/unsplash-source.js';\nimport { registerWorkspaceUriResolver } from '../engine/uri-resolver.js';\nimport { LocalGatewayClient } from '../gateway/local.js';\nimport { RevisionStore } from '../revisions/store.js';\nimport { createCodesignMcpServer } from '../server.js';\nimport { ensureHeadlessEngine } from '../tools/engine.js';\nimport { buildDesignToolRegistrations } from '../tools/index.js';\nimport {\n createViewerRouter,\n LocalViewerUrlBuilder,\n SseBroadcaster,\n startViewerListener\n} from '../viewer/index.js';\nimport { NodeWorkspaceFS } from '../workspace/node-fs.js';\nimport { redirectConsoleToStderr } from './redirect-console.js';\nimport { resolveLicense } from './resolve-license.js';\nimport { TRIAL_CESDK_LICENSE } from './trial-license.generated.js';\n\nconst DEFAULT_WORKSPACE = joinPath(homedir(), '.codesign', 'workspace');\n\nexport async function runStdio(): Promise<void> {\n // stdout is the JSON-RPC channel in stdio mode; keep engine console.* noise off it.\n redirectConsoleToStderr();\n\n const license = resolveLicense(process.env, TRIAL_CESDK_LICENSE);\n if (!license) {\n process.stderr.write(\n 'codesign-mcp stdio: no CESDK_LICENSE set and no bundled trial license — set CESDK_LICENSE to a CE.SDK node license string.\\n'\n );\n process.exit(1);\n }\n // True when the license came from the bundled trial (no explicit env override).\n // Used only to turn an engine-init rejection into a trial-aware hint below.\n const usedTrial = !process.env.CESDK_LICENSE?.trim();\n\n const workspaceRoot = process.env.CODESIGN_WORKSPACE ?? DEFAULT_WORKSPACE;\n const fs = new NodeWorkspaceFS(workspaceRoot);\n const store = new RevisionStore(fs);\n\n // One engine, one lock. stdio is single-session so there is no contention\n // today, but the engine tools require the lock and it keeps wiring uniform\n // with the HTTP transport.\n const engineLock = new Mutex();\n const broadcaster = new SseBroadcaster();\n const gateway = new LocalGatewayClient({ apiKey: process.env.API_KEY });\n\n // The viewer listener binds an ephemeral localhost port — cheap and local, so\n // it stays on the startup path. urlBuilder must exist before we build the tools\n // and before the engine's workspace:// URI resolver is wired.\n const viewerRouter = createViewerRouter({\n store,\n fs,\n broadcaster,\n cesdkLicense: license,\n workspaceRoot\n });\n const listener = await startViewerListener({ router: viewerRouter });\n process.stderr.write(`codesign-mcp stdio: viewer at ${listener.base}\\n`);\n const urlBuilder = new LocalViewerUrlBuilder({ base: listener.base });\n\n // Kick off the heavy engine bootstrap WITHOUT awaiting it — see the file\n // header. server.connect() below answers the handshake while this runs.\n const enginePromise = bootstrapEngine({ license, urlBuilder, usedTrial });\n // Nothing awaits enginePromise until the first tool call. Attach a logger so a\n // background init failure surfaces on stderr instead of crashing the process\n // on an unhandled rejection; the awaiting tool call still sees the real error.\n void enginePromise.catch((err) => {\n process.stderr.write(\n `codesign-mcp stdio: engine initialization failed — ${\n err instanceof Error ? (err.stack ?? err.message) : String(err)\n }\\n`\n );\n });\n\n // size=1, single shared engine resolved lazily from enginePromise.\n // EngineSession only calls adapter.create() (awaiting the engine) on the first\n // edit, by which point the bootstrap is usually already settled.\n const session = new EngineSession({\n size: 1,\n adapter: cesdkAdapter(enginePromise)\n });\n\n const renderThumbnail = async ({\n engine: eng\n }: {\n revision: string;\n engine: import('@cesdk/engine').default;\n }): Promise<Uint8Array> => {\n // Thumbnail = the scene's first page rendered to a 256-px webp. Best-effort.\n // We use page 0 of the scene; if the scene has no pages, throw → swallowed.\n const pages = eng.scene.getPages();\n if (!pages || pages.length === 0) throw new Error('no pages');\n const blob = await eng.block.export(pages[0], 'image/webp', {\n targetWidth: 256\n });\n return new Uint8Array(await blob.arrayBuffer());\n };\n\n const tools = buildDesignToolRegistrations({\n fs,\n store,\n session,\n engineLock,\n gateway,\n urlBuilder,\n allowOutPath: true,\n onLeafWritten: (e) => broadcaster.broadcast(e),\n renderThumbnail: renderThumbnail as never // adapter's E generic is `unknown`; cesdk engine type fits\n });\n\n const assets = loadNodeAssets();\n const server = createCodesignMcpServer({\n assets,\n tools\n });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n const shutdown = async () => {\n await listener.close();\n await server.close();\n process.exit(0);\n };\n process.on('SIGINT', () => void shutdown());\n process.on('SIGTERM', () => void shutdown());\n}\n\n// Heavy engine bootstrap, run in the background by runStdio (off the MCP\n// handshake path). Resolves to a fully-wired engine: design-unit-patched (by\n// ensureHeadlessEngine), workspace:// URI resolver installed, and — best-effort\n// — the default + demo + unsplash asset sources registered so asset_search has\n// content. The asset-source step hits the CDN; failures log to stderr and leave\n// the engine usable (asset_search just sees fewer sources).\nasync function bootstrapEngine({\n license,\n urlBuilder,\n usedTrial\n}: {\n license: string;\n urlBuilder: LocalViewerUrlBuilder;\n /** License came from the bundled trial — turns an init rejection into a hint. */\n usedTrial: boolean;\n}): Promise<Awaited<ReturnType<typeof ensureHeadlessEngine>>> {\n let engine: Awaited<ReturnType<typeof ensureHeadlessEngine>>;\n try {\n engine = await ensureHeadlessEngine(license);\n } catch (err) {\n if (usedTrial) {\n process.stderr.write(\n 'codesign-mcp stdio: the bundled trial license was rejected (it may have expired). Set CESDK_LICENSE to a valid CE.SDK node license string.\\n'\n );\n }\n throw err;\n }\n // Resolve workspace:// asset URIs to the listener's /r/ route so the headless\n // engine can fetch generated assets embedded in scenes.\n registerWorkspaceUriResolver(engine, urlBuilder);\n // Default + demo asset sources so `asset_search` has content (CDN fetch,\n // best-effort — a failure logs to stderr and the engine stays usable).\n await ensureEngineAssetSources(engine);\n // Demo `unsplash` custom source (synchronous, idempotent) so asset_search has\n // a real remote source alongside the CDN ones. Public IMG.LY demo proxy.\n registerUnsplashSource(engine);\n return engine;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/cli/stdio.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,yFAAyF;AACzF,uCAAuC;AACvC,6DAA6D;AAC7D,oCAAoC;AACpC,mDAAmD;AACnD,4CAA4C;AAC5C,0CAA0C;AAC1C,EAAE;AACF,yEAAyE;AACzE,sEAAsE;AACtE,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,6EAA6E;AAC7E,8EAA8E;AAC9E,yEAAyE;AACzE,iFAAiF;AACjF,EAAE;AACF,gBAAgB;AAChB,8EAA8E;AAC9E,gEAAgE;AAChE,EAAE;AACF,wEAAwE;AACxE,kDAAkD;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EACL,qBAAqB,EAEtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAsB,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AAExE,MAAM,UAAU,gBAAgB,CAAC,MAAW,OAAO,CAAC,GAAG;IAMrD,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO;YACL,IAAI,EAAE,qBAAqB;YAC3B,SAAS,EAAE,mBAAmB;YAC9B,GAAG,EAAE,SAAS;YACd,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,mBAAmB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,MAAM,EACJ,IAAI,EACJ,SAAS,EACT,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,kBAAkB,EAC5B,GAAG,gBAAgB,EAAE,CAAC;IACvB,IAAI,kBAAkB,IAAI,cAAc,EAAE,CAAC;QACzC,MAAM,mBAAmB,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC;QAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,8CAA8C,cAAc,sEAAsE,CACnI,CAAC;IACJ,CAAC;IACD,oFAAoF;IACpF,uBAAuB,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CACtC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CACtE,CAAC;IAEF,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IACjE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,uJAAuJ,CACxJ,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,gFAAgF;IAChF,4EAA4E;IAC5E,MAAM,SAAS,GACb,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE;QAClC,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC;IAE3C,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,iBAAiB,CAAC;IAC1E,MAAM,EAAE,GAAG,IAAI,eAAe,CAAC,aAAa,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;IAEpC,0EAA0E;IAC1E,2EAA2E;IAC3E,2BAA2B;IAC3B,MAAM,UAAU,GAAG,IAAI,KAAK,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,IAAI,cAAc,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAExE,8EAA8E;IAC9E,gFAAgF;IAChF,8DAA8D;IAC9D,MAAM,YAAY,GAAG,kBAAkB,CAAC;QACtC,KAAK;QACL,EAAE;QACF,WAAW;QACX,YAAY,EAAE,OAAO;QACrB,aAAa;KACd,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IACrE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;IACzE,IAAI,CAAC,IAAI,CAAC;QACR,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,IAAI,EAAE,kBAAkB;KACzB,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,IAAI,qBAAqB,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAEtE,yEAAyE;IACzE,wEAAwE;IACxE,IAAI,CAAC,IAAI,CAAC;QACR,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,IAAI,EAAE,mBAAmB;KAC1B,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,eAAe,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1E,+EAA+E;IAC/E,6EAA6E;IAC7E,+EAA+E;IAC/E,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sDACE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAChE,IAAI,CACL,CAAC;QACF,IAAI,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,IAAI,EAAE,oBAAoB;YAC1B,KAAK,EAAE;gBACL,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBACzD,GAAG,CAAC,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnE;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,mEAAmE;IACnE,+EAA+E;IAC/E,iEAAiE;IACjE,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC;QAChC,IAAI,EAAE,CAAC;QACP,OAAO,EAAE,YAAY,CAAC,aAAa,CAAC;KACrC,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,KAAK,EAAE,EAC7B,MAAM,EAAE,GAAG,EAIZ,EAAuB,EAAE;QACxB,6EAA6E;QAC7E,4EAA4E;QAC5E,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE;YAC1D,WAAW,EAAE,GAAG;SACjB,CAAC,CAAC;QACH,OAAO,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,4BAA4B,CAAC;QACzC,EAAE;QACF,KAAK;QACL,OAAO;QACP,UAAU;QACV,OAAO;QACP,UAAU;QACV,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9C,eAAe,EAAE,eAAwB,EAAE,2DAA2D;QACtG,SAAS;KACV,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,uBAAuB,CAAC;QACrC,MAAM;QACN,KAAK;KACN,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,yEAAyE;AACzE,6EAA6E;AAC7E,gFAAgF;AAChF,+EAA+E;AAC/E,gFAAgF;AAChF,4DAA4D;AAC5D,KAAK,UAAU,eAAe,CAAC,EAC7B,OAAO,EACP,UAAU,EACV,SAAS,EAMV;IACC,IAAI,MAAwD,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,8IAA8I,CAC/I,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,8EAA8E;IAC9E,wDAAwD;IACxD,4BAA4B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACjD,yEAAyE;IACzE,uEAAuE;IACvE,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACvC,8EAA8E;IAC9E,yEAAyE;IACzE,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["// MCP server over stdin/stdout. Bootstraps:\n// - Workspace (NodeWorkspaceFS rooted at $CODESIGN_WORKSPACE or ~/.codesign/workspace)\n// - RevisionStore over the workspace\n// - EngineSession (size=1) over the headless CE.SDK engine\n// - SseBroadcaster for the viewer\n// - Viewer router + ephemeral localhost listener\n// - design + workspace tool registrations\n// - LocalGatewayClient (reads $API_KEY)\n//\n// stdio's single-engine, single-workspace model is the simplest possible\n// wiring; HTTP transport (F2) reuses the same primitives per-session.\n//\n// Startup order matters: everything cheap (workspace, store, viewer listener,\n// tool wiring) runs before `server.connect()` so the MCP handshake replies\n// immediately. The expensive CE.SDK engine init + CDN asset-source fetch are\n// deferred to a background promise (bootstrapEngine) that the first tool call\n// awaits. Doing this work before connect can blow the host's MCP startup\n// timeout on a cold boot — seen as \"fails on add/update, works after Reconnect\".\n//\n// Optional env:\n// CESDK_LICENSE — overrides the build-time-bundled trial license. Mandatory\n// at GA / when no trial is baked in (see resolve-license.ts).\n//\n// Logging note: stdout is reserved for MCP protocol traffic. Everything\n// human-facing (errors, progress) goes to stderr.\nimport { homedir } from 'node:os';\nimport { join as joinPath } from 'node:path';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { loadNodeAssets } from '../assets/load-node.js';\nimport type { Env } from '../config.js';\nimport { diagnosticsFileEnabled, resolveDiagnosticsDir } from '../config.js';\nimport {\n NOOP_DIAGNOSTICS_SINK,\n type DiagnosticsSink\n} from '../diagnostics/events.js';\nimport { FileDiagnosticsSink } from '../diagnostics/file-sink.js';\nimport { toolCallSink } from '../diagnostics/tool-call-adapter.js';\nimport { ensureEngineAssetSources } from '../engine/asset-sources.js';\nimport { cesdkAdapter } from '../engine/cesdk-adapter.js';\nimport { Mutex } from '../engine/mutex.js';\nimport { EngineSession } from '../engine/session.js';\nimport { registerUnsplashSource } from '../engine/unsplash-source.js';\nimport { registerWorkspaceUriResolver } from '../engine/uri-resolver.js';\nimport { LocalGatewayClient } from '../gateway/local.js';\nimport { RevisionStore } from '../revisions/store.js';\nimport { createCodesignMcpServer } from '../server.js';\nimport { ensureHeadlessEngine } from '../tools/engine.js';\nimport { buildDesignToolRegistrations } from '../tools/index.js';\nimport { NOOP_TELEMETRY_SINK, type TelemetrySink } from '../tools/spans.js';\nimport {\n createViewerRouter,\n LocalViewerUrlBuilder,\n SseBroadcaster,\n startViewerListener\n} from '../viewer/index.js';\nimport { NodeWorkspaceFS } from '../workspace/node-fs.js';\nimport { redirectConsoleToStderr } from './redirect-console.js';\nimport { resolveLicense } from './resolve-license.js';\nimport { TRIAL_CESDK_LICENSE } from './trial-license.generated.js';\n\nconst DEFAULT_WORKSPACE = joinPath(homedir(), '.codesign', 'workspace');\n\nexport function buildDiagnostics(env: Env = process.env): {\n diag: DiagnosticsSink;\n telemetry: TelemetrySink;\n dir: string | undefined;\n enabled: boolean;\n} {\n if (!diagnosticsFileEnabled(env)) {\n return {\n diag: NOOP_DIAGNOSTICS_SINK,\n telemetry: NOOP_TELEMETRY_SINK,\n dir: undefined,\n enabled: false\n };\n }\n const dir = resolveDiagnosticsDir(env);\n const sink = new FileDiagnosticsSink({ dir });\n return { diag: sink, telemetry: toolCallSink(sink), dir, enabled: true };\n}\n\nexport async function runStdio(): Promise<void> {\n const {\n diag,\n telemetry,\n dir: diagnosticsDir,\n enabled: diagnosticsEnabled\n } = buildDiagnostics();\n if (diagnosticsEnabled && diagnosticsDir) {\n await FileDiagnosticsSink.pruneOnStartup({ dir: diagnosticsDir });\n process.stderr.write(\n `codesign-mcp stdio: diagnostics logging to ${diagnosticsDir} — redacted, local-only; disable with IMGLY_DIAGNOSTICS_FILE=false\\n`\n );\n }\n // stdout is the JSON-RPC channel in stdio mode; keep engine console.* noise off it.\n redirectConsoleToStderr((level, text) =>\n diag.emit({ kind: 'engine_log', timestamp: Date.now(), level, text })\n );\n\n const license = resolveLicense(process.env, TRIAL_CESDK_LICENSE);\n if (!license) {\n process.stderr.write(\n 'codesign-mcp stdio: no CESDK_LICENSE set and no bundled trial license — set CESDK_LICENSE (or IMGLY_CESDK_LICENSE) to a CE.SDK node license string.\\n'\n );\n process.exit(1);\n }\n // True when the license came from the bundled trial (no explicit env override).\n // Used only to turn an engine-init rejection into a trial-aware hint below.\n const usedTrial =\n !process.env.CESDK_LICENSE?.trim() &&\n !process.env.IMGLY_CESDK_LICENSE?.trim();\n\n const workspaceRoot = process.env.CODESIGN_WORKSPACE ?? DEFAULT_WORKSPACE;\n const fs = new NodeWorkspaceFS(workspaceRoot);\n const store = new RevisionStore(fs);\n\n // One engine, one lock. stdio is single-session so there is no contention\n // today, but the engine tools require the lock and it keeps wiring uniform\n // with the HTTP transport.\n const engineLock = new Mutex();\n const broadcaster = new SseBroadcaster();\n const gateway = new LocalGatewayClient({ apiKey: process.env.API_KEY });\n\n // The viewer listener binds an ephemeral localhost port — cheap and local, so\n // it stays on the startup path. urlBuilder must exist before we build the tools\n // and before the engine's workspace:// URI resolver is wired.\n const viewerRouter = createViewerRouter({\n store,\n fs,\n broadcaster,\n cesdkLicense: license,\n workspaceRoot\n });\n const listener = await startViewerListener({ router: viewerRouter });\n process.stderr.write(`codesign-mcp stdio: viewer at ${listener.base}\\n`);\n diag.emit({\n kind: 'lifecycle',\n timestamp: Date.now(),\n text: 'viewer_listening'\n });\n const urlBuilder = new LocalViewerUrlBuilder({ base: listener.base });\n\n // Kick off the heavy engine bootstrap WITHOUT awaiting it — see the file\n // header. server.connect() below answers the handshake while this runs.\n diag.emit({\n kind: 'lifecycle',\n timestamp: Date.now(),\n text: 'engine_init_start'\n });\n const enginePromise = bootstrapEngine({ license, urlBuilder, usedTrial });\n // Nothing awaits enginePromise until the first tool call. Attach a logger so a\n // background init failure surfaces on stderr instead of crashing the process\n // on an unhandled rejection; the awaiting tool call still sees the real error.\n void enginePromise.catch((err) => {\n process.stderr.write(\n `codesign-mcp stdio: engine initialization failed — ${\n err instanceof Error ? (err.stack ?? err.message) : String(err)\n }\\n`\n );\n diag.emit({\n kind: 'lifecycle',\n timestamp: Date.now(),\n text: 'engine_init_failed',\n error: {\n message: err instanceof Error ? err.message : String(err),\n ...(err instanceof Error && err.stack ? { stack: err.stack } : {})\n }\n });\n });\n\n // size=1, single shared engine resolved lazily from enginePromise.\n // EngineSession only calls adapter.create() (awaiting the engine) on the first\n // edit, by which point the bootstrap is usually already settled.\n const session = new EngineSession({\n size: 1,\n adapter: cesdkAdapter(enginePromise)\n });\n\n const renderThumbnail = async ({\n engine: eng\n }: {\n revision: string;\n engine: import('@cesdk/engine').default;\n }): Promise<Uint8Array> => {\n // Thumbnail = the scene's first page rendered to a 256-px webp. Best-effort.\n // We use page 0 of the scene; if the scene has no pages, throw → swallowed.\n const pages = eng.scene.getPages();\n if (!pages || pages.length === 0) throw new Error('no pages');\n const blob = await eng.block.export(pages[0], 'image/webp', {\n targetWidth: 256\n });\n return new Uint8Array(await blob.arrayBuffer());\n };\n\n const tools = buildDesignToolRegistrations({\n fs,\n store,\n session,\n engineLock,\n gateway,\n urlBuilder,\n allowOutPath: true,\n onLeafWritten: (e) => broadcaster.broadcast(e),\n renderThumbnail: renderThumbnail as never, // adapter's E generic is `unknown`; cesdk engine type fits\n telemetry\n });\n\n const assets = loadNodeAssets();\n const server = createCodesignMcpServer({\n assets,\n tools\n });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n const shutdown = async () => {\n await listener.close();\n await server.close();\n process.exit(0);\n };\n process.on('SIGINT', () => void shutdown());\n process.on('SIGTERM', () => void shutdown());\n}\n\n// Heavy engine bootstrap, run in the background by runStdio (off the MCP\n// handshake path). Resolves to a fully-wired engine: design-unit-patched (by\n// ensureHeadlessEngine), workspace:// URI resolver installed, and — best-effort\n// — the default + demo + unsplash asset sources registered so asset_search has\n// content. The asset-source step hits the CDN; failures log to stderr and leave\n// the engine usable (asset_search just sees fewer sources).\nasync function bootstrapEngine({\n license,\n urlBuilder,\n usedTrial\n}: {\n license: string;\n urlBuilder: LocalViewerUrlBuilder;\n /** License came from the bundled trial — turns an init rejection into a hint. */\n usedTrial: boolean;\n}): Promise<Awaited<ReturnType<typeof ensureHeadlessEngine>>> {\n let engine: Awaited<ReturnType<typeof ensureHeadlessEngine>>;\n try {\n engine = await ensureHeadlessEngine(license);\n } catch (err) {\n if (usedTrial) {\n process.stderr.write(\n 'codesign-mcp stdio: the bundled trial license was rejected (it may have expired). Set CESDK_LICENSE to a valid CE.SDK node license string.\\n'\n );\n }\n throw err;\n }\n // Resolve workspace:// asset URIs to the listener's /r/ route so the headless\n // engine can fetch generated assets embedded in scenes.\n registerWorkspaceUriResolver(engine, urlBuilder);\n // Default + demo asset sources so `asset_search` has content (CDN fetch,\n // best-effort — a failure logs to stderr and the engine stays usable).\n await ensureEngineAssetSources(engine);\n // Demo `unsplash` custom source (synchronous, idempotent) so asset_search has\n // a real remote source alongside the CDN ones. Public IMG.LY demo proxy.\n registerUnsplashSource(engine);\n return engine;\n}\n"]}
|
package/dist/cli.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
//
|
|
11
11
|
// Lazy imports per subcommand: stdio mode never loads express; http mode
|
|
12
12
|
// never loads StdioServerTransport. Smaller crash surface, faster start.
|
|
13
|
-
const USAGE = `Usage: codesign-mcp <stdio|http> [flags]
|
|
13
|
+
const USAGE = `Usage: codesign-mcp <stdio|http|diagnose> [flags]
|
|
14
14
|
|
|
15
15
|
Subcommands:
|
|
16
16
|
stdio MCP server over stdin/stdout. Spawned by hosts
|
|
@@ -22,6 +22,9 @@ Subcommands:
|
|
|
22
22
|
[--max-sessions <n>] Defaults: --port 3030 --host 127.0.0.1
|
|
23
23
|
[--idle-timeout-ms <n>] --max-sessions 10 --idle-timeout-ms 1800000
|
|
24
24
|
|
|
25
|
+
diagnose Collect local diagnostics logs into a redacted
|
|
26
|
+
.zip you can send to IMG.LY. No network.
|
|
27
|
+
|
|
25
28
|
Common env:
|
|
26
29
|
CESDK_LICENSE required for both modes (CE.SDK headless
|
|
27
30
|
engine license).
|
|
@@ -57,6 +60,12 @@ async function main() {
|
|
|
57
60
|
await runHttp(process.argv.slice(3));
|
|
58
61
|
return;
|
|
59
62
|
}
|
|
63
|
+
case 'diagnose': {
|
|
64
|
+
const { runDiagnose } = await import('./diagnostics/bundle.js');
|
|
65
|
+
const zipPath = await runDiagnose();
|
|
66
|
+
process.stdout.write(`codesign-mcp: diagnostics bundle written to\n ${zipPath}\nAttach this file to your issue or email support — it is redacted and local-only.\n`);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
60
69
|
case '-h':
|
|
61
70
|
case '--help':
|
|
62
71
|
process.stdout.write(USAGE);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,6CAA6C;AAC7C,EAAE;AACF,2EAA2E;AAC3E,wEAAwE;AACxE,8CAA8C;AAC9C,EAAE;AACF,0EAA0E;AAC1E,4EAA4E;AAC5E,EAAE;AACF,yEAAyE;AACzE,yEAAyE;AAEzE,MAAM,KAAK,GAAG
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,6CAA6C;AAC7C,EAAE;AACF,2EAA2E;AAC3E,wEAAwE;AACxE,8CAA8C;AAC9C,EAAE;AACF,0EAA0E;AAC1E,4EAA4E;AAC5E,EAAE;AACF,yEAAyE;AACzE,yEAAyE;AAEzE,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsBb,CAAC;AAEF,yEAAyE;AACzE,0EAA0E;AAC1E,6EAA6E;AAC7E,wEAAwE;AACxE,8EAA8E;AAC9E,4EAA4E;AAC5E,SAAS,sBAAsB;IAC7B,IAAI,OAAO,UAAU,CAAC,MAAM,EAAE,eAAe,KAAK,UAAU,EAAE,CAAC;QAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,8CAA8C,OAAO,CAAC,OAAO,KAAK;YAChE,8BAA8B,CACjC,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,sBAAsB,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACpD,MAAM,QAAQ,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;YAClD,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;YAChE,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kDAAkD,OAAO,sFAAsF,CAChJ,CAAC;YACF,OAAO;QACT,CAAC;QACD,KAAK,IAAI,CAAC;QACV,KAAK,QAAQ;YACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO;QACT,KAAK,SAAS;YACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,KAAK,EAAE,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO;QACT;YACE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qCAAqC,GAAG,OAAO,KAAK,EAAE,CACvD,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,yBAAyB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAC7F,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\n// codesign-mcp — single bin, two transports.\n//\n// codesign-mcp stdio MCP server over stdin/stdout. Spawned by hosts\n// like Claude Desktop / Claude Code via their\n// `command` config.\n//\n// codesign-mcp http MCP server over Streamable HTTP. Long-running\n// listener; hosts connect via their `url` config.\n//\n// Lazy imports per subcommand: stdio mode never loads express; http mode\n// never loads StdioServerTransport. Smaller crash surface, faster start.\n\nconst USAGE = `Usage: codesign-mcp <stdio|http|diagnose> [flags]\n\nSubcommands:\n stdio MCP server over stdin/stdout. Spawned by hosts\n like Claude Desktop / Claude Code via their\n \\`command\\` config.\n\n http [--port <n>] MCP server over Streamable HTTP. Long-running\n [--host <ip>] listener; hosts connect via their \\`url\\` config.\n [--max-sessions <n>] Defaults: --port 3030 --host 127.0.0.1\n [--idle-timeout-ms <n>] --max-sessions 10 --idle-timeout-ms 1800000\n\n diagnose Collect local diagnostics logs into a redacted\n .zip you can send to IMG.LY. No network.\n\nCommon env:\n CESDK_LICENSE required for both modes (CE.SDK headless\n engine license).\n IMGLY_DEFAULT_ASSETS_BASE_URL manifest root for the default asset sources\n (self-hosted deployments; default: IMG.LY CDN).\n IMGLY_DEMO_ASSETS_BASE_URL manifest root for the demo asset sources\n (default: IMG.LY CDN).\n`;\n\n// The CE.SDK headless engine seeds its randomness from a global `crypto`\n// (`crypto.getRandomValues`), which Node only exposes by default on v20+.\n// On older runtimes — or sandboxes that strip globals — the engine dies deep\n// inside its WASM runtime with a cryptic `ReferenceError: crypto is not\n// defined`, often taking the whole process (and the MCP connection) down with\n// it. Feature-detect the capability up front and fail with a clear message.\nfunction assertSupportedRuntime(): void {\n if (typeof globalThis.crypto?.getRandomValues !== 'function') {\n process.stderr.write(\n `codesign-mcp: unsupported Node.js runtime (${process.version}). ` +\n `Node.js >= 20 is required.\\n`\n );\n process.exit(1);\n }\n}\n\nasync function main(): Promise<void> {\n assertSupportedRuntime();\n const sub = process.argv[2];\n switch (sub) {\n case 'stdio': {\n const { runStdio } = await import('./cli/stdio.js');\n await runStdio();\n return;\n }\n case 'http': {\n const { runHttp } = await import('./cli/http.js');\n await runHttp(process.argv.slice(3));\n return;\n }\n case 'diagnose': {\n const { runDiagnose } = await import('./diagnostics/bundle.js');\n const zipPath = await runDiagnose();\n process.stdout.write(\n `codesign-mcp: diagnostics bundle written to\\n ${zipPath}\\nAttach this file to your issue or email support — it is redacted and local-only.\\n`\n );\n return;\n }\n case '-h':\n case '--help':\n process.stdout.write(USAGE);\n return;\n case undefined:\n process.stderr.write(`codesign-mcp: missing subcommand.\\n${USAGE}`);\n process.exit(2);\n return;\n default:\n process.stderr.write(\n `codesign-mcp: unknown subcommand \"${sub}\".\\n${USAGE}`\n );\n process.exit(2);\n }\n}\n\nmain().catch((err) => {\n process.stderr.write(\n `codesign-mcp: fatal — ${err instanceof Error ? (err.stack ?? err.message) : String(err)}\\n`\n );\n process.exit(1);\n});\n"]}
|
package/dist/config.d.ts
CHANGED
|
@@ -35,8 +35,6 @@ export interface ServerConfig {
|
|
|
35
35
|
maxEngines: number;
|
|
36
36
|
idleTimeoutMs: number;
|
|
37
37
|
logLevel: string;
|
|
38
|
-
/** Expose the perf metrics route + dashboard SPA. Default false. */
|
|
39
|
-
metricsEnabled: boolean;
|
|
40
38
|
workspace: WorkspaceConfig;
|
|
41
39
|
auth: {
|
|
42
40
|
mode: WorkspaceMode;
|
|
@@ -58,4 +56,15 @@ export interface ServerConfig {
|
|
|
58
56
|
publicBaseUrl?: string;
|
|
59
57
|
}
|
|
60
58
|
export declare function loadConfig(env?: Env): ServerConfig;
|
|
59
|
+
/**
|
|
60
|
+
* Local diagnostics file logging is ON by default so evidence exists before a
|
|
61
|
+
* user knows they hit a bug. Disable with IMGLY_DIAGNOSTICS_FILE=false (or 0).
|
|
62
|
+
*/
|
|
63
|
+
export declare function diagnosticsFileEnabled(env?: Env): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Where diagnostics NDJSON is written. Explicit IMGLY_DIAGNOSTICS_DIR wins;
|
|
66
|
+
* otherwise <workspaceRoot>/logs, where workspaceRoot mirrors the stdio default
|
|
67
|
+
* ($CODESIGN_WORKSPACE ?? ~/.codesign/workspace).
|
|
68
|
+
*/
|
|
69
|
+
export declare function resolveDiagnosticsDir(env?: Env): string;
|
|
61
70
|
//# sourceMappingURL=config.d.ts.map
|