@imgly/codesign-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (816) hide show
  1. package/LICENSE.md +16 -0
  2. package/README.md +158 -0
  3. package/assets/docs/api/SKILL.md +49 -0
  4. package/assets/docs/api/index.d.ts +10518 -0
  5. package/assets/docs/guide/SKILL.md +142 -0
  6. package/assets/docs/guide/actions.md +1038 -0
  7. package/assets/docs/guide/animation/create/base.md +467 -0
  8. package/assets/docs/guide/animation/create/text.md +453 -0
  9. package/assets/docs/guide/animation/create.md +558 -0
  10. package/assets/docs/guide/animation/edit.md +501 -0
  11. package/assets/docs/guide/animation/overview.md +22 -0
  12. package/assets/docs/guide/animation/types.md +430 -0
  13. package/assets/docs/guide/animation.md +23 -0
  14. package/assets/docs/guide/api/AssetAPI.md +602 -0
  15. package/assets/docs/guide/api/BlockAPI.md +6152 -0
  16. package/assets/docs/guide/api/CreativeEngine.md +180 -0
  17. package/assets/docs/guide/api/EditorAPI.md +1261 -0
  18. package/assets/docs/guide/api/EventAPI.md +25 -0
  19. package/assets/docs/guide/api/SceneAPI.md +729 -0
  20. package/assets/docs/guide/api/VariableAPI.md +59 -0
  21. package/assets/docs/guide/api/types.md +71 -0
  22. package/assets/docs/guide/api-reference/overview.md +20 -0
  23. package/assets/docs/guide/automation/auto-resize.md +412 -0
  24. package/assets/docs/guide/automation/batch-processing.md +474 -0
  25. package/assets/docs/guide/automation/data-merge.md +406 -0
  26. package/assets/docs/guide/automation/design-generation.md +107 -0
  27. package/assets/docs/guide/automation/overview.md +16 -0
  28. package/assets/docs/guide/automation.md +24 -0
  29. package/assets/docs/guide/browser-support.md +38 -0
  30. package/assets/docs/guide/capabilities.md +18 -0
  31. package/assets/docs/guide/colors/adjust.md +551 -0
  32. package/assets/docs/guide/colors/apply.md +349 -0
  33. package/assets/docs/guide/colors/basics.md +440 -0
  34. package/assets/docs/guide/colors/conversion.md +504 -0
  35. package/assets/docs/guide/colors/create-color-palette.md +426 -0
  36. package/assets/docs/guide/colors/for-print/cmyk.md +577 -0
  37. package/assets/docs/guide/colors/for-print/spot.md +751 -0
  38. package/assets/docs/guide/colors/for-print.md +21 -0
  39. package/assets/docs/guide/colors/for-screen/p3.md +60 -0
  40. package/assets/docs/guide/colors/for-screen/srgb.md +463 -0
  41. package/assets/docs/guide/colors/for-screen.md +21 -0
  42. package/assets/docs/guide/colors/overview.md +20 -0
  43. package/assets/docs/guide/colors/replace.md +535 -0
  44. package/assets/docs/guide/colors.md +28 -0
  45. package/assets/docs/guide/compatibility.md +27 -0
  46. package/assets/docs/guide/concepts/architecture.md +99 -0
  47. package/assets/docs/guide/concepts/assets.md +360 -0
  48. package/assets/docs/guide/concepts/blocks.md +750 -0
  49. package/assets/docs/guide/concepts/buffers.md +546 -0
  50. package/assets/docs/guide/concepts/design-units.md +333 -0
  51. package/assets/docs/guide/concepts/edit-modes.md +431 -0
  52. package/assets/docs/guide/concepts/editing-workflow.md +303 -0
  53. package/assets/docs/guide/concepts/events.md +466 -0
  54. package/assets/docs/guide/concepts/headless-mode/browser.md +291 -0
  55. package/assets/docs/guide/concepts/pages.md +396 -0
  56. package/assets/docs/guide/concepts/resources.md +496 -0
  57. package/assets/docs/guide/concepts/scenes.md +443 -0
  58. package/assets/docs/guide/concepts/templating.md +194 -0
  59. package/assets/docs/guide/concepts/terminology.md +296 -0
  60. package/assets/docs/guide/concepts/undo-and-history.md +461 -0
  61. package/assets/docs/guide/concepts.md +38 -0
  62. package/assets/docs/guide/configuration.md +469 -0
  63. package/assets/docs/guide/conversion/overview.md +22 -0
  64. package/assets/docs/guide/conversion/to-base64.md +234 -0
  65. package/assets/docs/guide/conversion/to-pdf.md +616 -0
  66. package/assets/docs/guide/conversion/to-png.md +290 -0
  67. package/assets/docs/guide/conversion.md +23 -0
  68. package/assets/docs/guide/create-audio/audio/add-music.md +430 -0
  69. package/assets/docs/guide/create-audio/audio/add-sound-effects.md +664 -0
  70. package/assets/docs/guide/create-audio/audio/loop.md +370 -0
  71. package/assets/docs/guide/create-audio/audio.md +336 -0
  72. package/assets/docs/guide/create-composition/add-background.md +395 -0
  73. package/assets/docs/guide/create-composition/blend-modes.md +372 -0
  74. package/assets/docs/guide/create-composition/collage.md +432 -0
  75. package/assets/docs/guide/create-composition/group-and-ungroup.md +388 -0
  76. package/assets/docs/guide/create-composition/layer-management.md +503 -0
  77. package/assets/docs/guide/create-composition/layout.md +396 -0
  78. package/assets/docs/guide/create-composition/lock-design.md +362 -0
  79. package/assets/docs/guide/create-composition/multi-page.md +204 -0
  80. package/assets/docs/guide/create-composition/overview.md +18 -0
  81. package/assets/docs/guide/create-composition/programmatic.md +593 -0
  82. package/assets/docs/guide/create-composition.md +30 -0
  83. package/assets/docs/guide/create-templates/add-dynamic-content/placeholders.md +688 -0
  84. package/assets/docs/guide/create-templates/add-dynamic-content/set-editing-constraints.md +600 -0
  85. package/assets/docs/guide/create-templates/add-dynamic-content/text-variables.md +647 -0
  86. package/assets/docs/guide/create-templates/add-dynamic-content.md +307 -0
  87. package/assets/docs/guide/create-templates/add-to-template-library.md +297 -0
  88. package/assets/docs/guide/create-templates/edit-or-remove.md +441 -0
  89. package/assets/docs/guide/create-templates/from-scratch.md +558 -0
  90. package/assets/docs/guide/create-templates/import/from-scene-file.md +440 -0
  91. package/assets/docs/guide/create-templates/import.md +244 -0
  92. package/assets/docs/guide/create-templates/lock.md +325 -0
  93. package/assets/docs/guide/create-templates/overview.md +16 -0
  94. package/assets/docs/guide/create-templates.md +32 -0
  95. package/assets/docs/guide/create-video/audio/adjust-speed.md +302 -0
  96. package/assets/docs/guide/create-video/audio/adjust-volume.md +346 -0
  97. package/assets/docs/guide/create-video/control.md +285 -0
  98. package/assets/docs/guide/create-video/limitations.md +396 -0
  99. package/assets/docs/guide/create-video/overview.md +224 -0
  100. package/assets/docs/guide/create-video/timeline-editor.md +622 -0
  101. package/assets/docs/guide/create-video/update-caption-presets.md +676 -0
  102. package/assets/docs/guide/create-video.md +32 -0
  103. package/assets/docs/guide/edit-image/add-watermark.md +497 -0
  104. package/assets/docs/guide/edit-image/overview.md +22 -0
  105. package/assets/docs/guide/edit-image/remove-bg.md +420 -0
  106. package/assets/docs/guide/edit-image/replace-colors.md +680 -0
  107. package/assets/docs/guide/edit-image/transform/crop.md +523 -0
  108. package/assets/docs/guide/edit-image/transform/move.md +279 -0
  109. package/assets/docs/guide/edit-image/transform/resize.md +301 -0
  110. package/assets/docs/guide/edit-image/transform/rotate.md +408 -0
  111. package/assets/docs/guide/edit-image/transform/scale.md +278 -0
  112. package/assets/docs/guide/edit-image/transform.md +24 -0
  113. package/assets/docs/guide/edit-image/vectorize.md +204 -0
  114. package/assets/docs/guide/edit-image.md +25 -0
  115. package/assets/docs/guide/edit-video/add-captions.md +589 -0
  116. package/assets/docs/guide/edit-video/add-watermark.md +429 -0
  117. package/assets/docs/guide/edit-video/join-and-arrange.md +540 -0
  118. package/assets/docs/guide/edit-video/redaction.md +544 -0
  119. package/assets/docs/guide/edit-video/split.md +634 -0
  120. package/assets/docs/guide/edit-video/transform/crop.md +380 -0
  121. package/assets/docs/guide/edit-video/transform/flip.md +182 -0
  122. package/assets/docs/guide/edit-video/transform/move.md +413 -0
  123. package/assets/docs/guide/edit-video/transform/resize.md +534 -0
  124. package/assets/docs/guide/edit-video/transform/rotate.md +312 -0
  125. package/assets/docs/guide/edit-video/transform/scale.md +603 -0
  126. package/assets/docs/guide/edit-video/transform.md +25 -0
  127. package/assets/docs/guide/edit-video/trim.md +773 -0
  128. package/assets/docs/guide/engine-interface.md +108 -0
  129. package/assets/docs/guide/export-save-publish/create-thumbnail.md +292 -0
  130. package/assets/docs/guide/export-save-publish/export/compress.md +639 -0
  131. package/assets/docs/guide/export-save-publish/export/overview.md +576 -0
  132. package/assets/docs/guide/export-save-publish/export/partial-export.md +694 -0
  133. package/assets/docs/guide/export-save-publish/export/size-limits.md +401 -0
  134. package/assets/docs/guide/export-save-publish/export/to-html5.md +474 -0
  135. package/assets/docs/guide/export-save-publish/export/to-jpeg.md +312 -0
  136. package/assets/docs/guide/export-save-publish/export/to-mp4.md +364 -0
  137. package/assets/docs/guide/export-save-publish/export/to-pdf.md +389 -0
  138. package/assets/docs/guide/export-save-publish/export/to-png.md +255 -0
  139. package/assets/docs/guide/export-save-publish/export/to-raw-data.md +303 -0
  140. package/assets/docs/guide/export-save-publish/export/to-webp.md +261 -0
  141. package/assets/docs/guide/export-save-publish/export/with-color-mask.md +278 -0
  142. package/assets/docs/guide/export-save-publish/export.md +36 -0
  143. package/assets/docs/guide/export-save-publish/for-printing.md +423 -0
  144. package/assets/docs/guide/export-save-publish/for-social-media.md +318 -0
  145. package/assets/docs/guide/export-save-publish/pre-export-validation.md +698 -0
  146. package/assets/docs/guide/export-save-publish/save.md +340 -0
  147. package/assets/docs/guide/export-save-publish/store-custom-metadata.md +367 -0
  148. package/assets/docs/guide/file-format-support.md +34 -0
  149. package/assets/docs/guide/fills/color.md +678 -0
  150. package/assets/docs/guide/fills/image.md +539 -0
  151. package/assets/docs/guide/fills/overview.md +144 -0
  152. package/assets/docs/guide/fills/video.md +641 -0
  153. package/assets/docs/guide/fills.md +24 -0
  154. package/assets/docs/guide/filters-and-effects/apply.md +1019 -0
  155. package/assets/docs/guide/filters-and-effects/blur.md +382 -0
  156. package/assets/docs/guide/filters-and-effects/chroma-key-green-screen.md +445 -0
  157. package/assets/docs/guide/filters-and-effects/create-custom-filters.md +614 -0
  158. package/assets/docs/guide/filters-and-effects/create-custom-lut-filter.md +426 -0
  159. package/assets/docs/guide/filters-and-effects/distortion.md +527 -0
  160. package/assets/docs/guide/filters-and-effects/duotone.md +602 -0
  161. package/assets/docs/guide/filters-and-effects/gradients.md +1311 -0
  162. package/assets/docs/guide/filters-and-effects/overview.md +22 -0
  163. package/assets/docs/guide/filters-and-effects/support.md +623 -0
  164. package/assets/docs/guide/filters-and-effects.md +28 -0
  165. package/assets/docs/guide/get-started/agent-skills.md +119 -0
  166. package/assets/docs/guide/get-started/build-with-ai.md +45 -0
  167. package/assets/docs/guide/get-started/mcp-server.md +119 -0
  168. package/assets/docs/guide/get-started/overview.md +28 -0
  169. package/assets/docs/guide/get-started/vanilla-js/quickstart.md +175 -0
  170. package/assets/docs/guide/grid-and-rulers.md +222 -0
  171. package/assets/docs/guide/guides/export-save-publish/export/audio.md +224 -0
  172. package/assets/docs/guide/guides/text/rendering-internals.md +796 -0
  173. package/assets/docs/guide/guides.md +49 -0
  174. package/assets/docs/guide/import-media/asset-library.md +23 -0
  175. package/assets/docs/guide/import-media/asset-panel/basics.md +324 -0
  176. package/assets/docs/guide/import-media/asset-panel/customize.md +478 -0
  177. package/assets/docs/guide/import-media/asset-panel/refresh-assets.md +415 -0
  178. package/assets/docs/guide/import-media/asset-panel/thumbnails.md +633 -0
  179. package/assets/docs/guide/import-media/capture-from-camera/record-video.md +137 -0
  180. package/assets/docs/guide/import-media/capture-from-camera.md +20 -0
  181. package/assets/docs/guide/import-media/concepts.md +173 -0
  182. package/assets/docs/guide/import-media/content-json-schema.md +615 -0
  183. package/assets/docs/guide/import-media/default-assets.md +381 -0
  184. package/assets/docs/guide/import-media/edit-or-remove-assets.md +489 -0
  185. package/assets/docs/guide/import-media/file-format-support.md +178 -0
  186. package/assets/docs/guide/import-media/from-local-source/user-upload.md +438 -0
  187. package/assets/docs/guide/import-media/from-local-source.md +20 -0
  188. package/assets/docs/guide/import-media/from-remote-source/asset-versioning.md +390 -0
  189. package/assets/docs/guide/import-media/from-remote-source/getty-images.md +627 -0
  190. package/assets/docs/guide/import-media/from-remote-source/imgly-premium-assets.md +625 -0
  191. package/assets/docs/guide/import-media/from-remote-source/pexels.md +692 -0
  192. package/assets/docs/guide/import-media/from-remote-source/remote-asset.md +473 -0
  193. package/assets/docs/guide/import-media/from-remote-source/soundstripe.md +497 -0
  194. package/assets/docs/guide/import-media/from-remote-source/third-party.md +51 -0
  195. package/assets/docs/guide/import-media/from-remote-source/unsplash.md +914 -0
  196. package/assets/docs/guide/import-media/from-remote-source/your-server.md +764 -0
  197. package/assets/docs/guide/import-media/from-remote-source.md +28 -0
  198. package/assets/docs/guide/import-media/overview.md +32 -0
  199. package/assets/docs/guide/import-media/retrieve-mimetype.md +274 -0
  200. package/assets/docs/guide/import-media/size-limits.md +20 -0
  201. package/assets/docs/guide/import-media/source-sets.md +476 -0
  202. package/assets/docs/guide/import-media.md +32 -0
  203. package/assets/docs/guide/insert-media/audio.md +291 -0
  204. package/assets/docs/guide/insert-media/images.md +380 -0
  205. package/assets/docs/guide/insert-media/position-and-align.md +734 -0
  206. package/assets/docs/guide/insert-media/shapes-or-stickers.md +799 -0
  207. package/assets/docs/guide/insert-media/videos.md +308 -0
  208. package/assets/docs/guide/insert-media.md +24 -0
  209. package/assets/docs/guide/key-capabilities.md +24 -0
  210. package/assets/docs/guide/key-concepts.md +83 -0
  211. package/assets/docs/guide/licensing.md +45 -0
  212. package/assets/docs/guide/llms-txt.md +53 -0
  213. package/assets/docs/guide/open-the-editor/blank-canvas.md +124 -0
  214. package/assets/docs/guide/open-the-editor/from-htmlcanvas.md +228 -0
  215. package/assets/docs/guide/open-the-editor/from-image.md +205 -0
  216. package/assets/docs/guide/open-the-editor/from-template.md +189 -0
  217. package/assets/docs/guide/open-the-editor/from-video.md +274 -0
  218. package/assets/docs/guide/open-the-editor/import-design/from-archive.md +504 -0
  219. package/assets/docs/guide/open-the-editor/import-design/from-indesign.md +680 -0
  220. package/assets/docs/guide/open-the-editor/import-design/from-photoshop.md +865 -0
  221. package/assets/docs/guide/open-the-editor/import-design.md +481 -0
  222. package/assets/docs/guide/open-the-editor/load-scene.md +178 -0
  223. package/assets/docs/guide/open-the-editor/overview.md +20 -0
  224. package/assets/docs/guide/open-the-editor/set-zoom-level.md +303 -0
  225. package/assets/docs/guide/open-the-editor/uri-resolver.md +347 -0
  226. package/assets/docs/guide/open-the-editor.md +29 -0
  227. package/assets/docs/guide/outlines/overview.md +14 -0
  228. package/assets/docs/guide/outlines/shadows-and-glows.md +515 -0
  229. package/assets/docs/guide/outlines/strokes.md +292 -0
  230. package/assets/docs/guide/outlines.md +22 -0
  231. package/assets/docs/guide/overview.md +22 -0
  232. package/assets/docs/guide/performance.md +217 -0
  233. package/assets/docs/guide/plugins/asset-sources.md +553 -0
  234. package/assets/docs/guide/plugins/print-ready-pdf.md +549 -0
  235. package/assets/docs/guide/plugins.md +36 -0
  236. package/assets/docs/guide/rules/asset-handling.md +180 -0
  237. package/assets/docs/guide/rules/common-pitfalls.md +272 -0
  238. package/assets/docs/guide/rules/content-fill-mode.md +29 -0
  239. package/assets/docs/guide/rules/enforce-brand-guidelines.md +672 -0
  240. package/assets/docs/guide/rules/lock-content.md +478 -0
  241. package/assets/docs/guide/rules/moderate-content.md +761 -0
  242. package/assets/docs/guide/rules/overview.md +514 -0
  243. package/assets/docs/guide/rules/silent-init-errors.md +137 -0
  244. package/assets/docs/guide/rules/verify-properties-before-use.md +78 -0
  245. package/assets/docs/guide/rules.md +23 -0
  246. package/assets/docs/guide/security.md +199 -0
  247. package/assets/docs/guide/serve-assets.md +332 -0
  248. package/assets/docs/guide/settings.md +199 -0
  249. package/assets/docs/guide/shapes.md +23 -0
  250. package/assets/docs/guide/starterkits/3d-mockup-editor.md +748 -0
  251. package/assets/docs/guide/starterkits/advanced-editor.md +698 -0
  252. package/assets/docs/guide/starterkits/advanced-video-editor.md +696 -0
  253. package/assets/docs/guide/starterkits/ai-editor.md +749 -0
  254. package/assets/docs/guide/starterkits/airtable-image-editor.md +672 -0
  255. package/assets/docs/guide/starterkits/apparel-ui.md +188 -0
  256. package/assets/docs/guide/starterkits/assets.md +27 -0
  257. package/assets/docs/guide/starterkits/auto-resize.md +586 -0
  258. package/assets/docs/guide/starterkits/automated-video-generation.md +692 -0
  259. package/assets/docs/guide/starterkits/background-removal-editor.md +480 -0
  260. package/assets/docs/guide/starterkits/content-moderation.md +863 -0
  261. package/assets/docs/guide/starterkits/creative-automation.md +28 -0
  262. package/assets/docs/guide/starterkits/custom-built-uis.md +26 -0
  263. package/assets/docs/guide/starterkits/customization.md +29 -0
  264. package/assets/docs/guide/starterkits/cutout-lines-editor.md +470 -0
  265. package/assets/docs/guide/starterkits/data-merge.md +850 -0
  266. package/assets/docs/guide/starterkits/design-editor.md +698 -0
  267. package/assets/docs/guide/starterkits/design-generation.md +719 -0
  268. package/assets/docs/guide/starterkits/design-validation.md +808 -0
  269. package/assets/docs/guide/starterkits/editor-ui-configurations.md +14 -0
  270. package/assets/docs/guide/starterkits/export-options.md +724 -0
  271. package/assets/docs/guide/starterkits/export-using-renderer.md +708 -0
  272. package/assets/docs/guide/starterkits/extensibility.md +28 -0
  273. package/assets/docs/guide/starterkits/force-crop-editor.md +675 -0
  274. package/assets/docs/guide/starterkits/form-based-template-adoption.md +522 -0
  275. package/assets/docs/guide/starterkits/getty-images-editor.md +700 -0
  276. package/assets/docs/guide/starterkits/html5-ads-exporter.md +719 -0
  277. package/assets/docs/guide/starterkits/indesign-template-import.md +580 -0
  278. package/assets/docs/guide/starterkits/layouts-editor.md +724 -0
  279. package/assets/docs/guide/starterkits/mobile-ui.md +185 -0
  280. package/assets/docs/guide/starterkits/mockup-editor.md +745 -0
  281. package/assets/docs/guide/starterkits/multi-image-generation.md +542 -0
  282. package/assets/docs/guide/starterkits/page-sizes-editor.md +657 -0
  283. package/assets/docs/guide/starterkits/pexels-image-editor.md +665 -0
  284. package/assets/docs/guide/starterkits/photo-editor.md +755 -0
  285. package/assets/docs/guide/starterkits/photo-ui.md +186 -0
  286. package/assets/docs/guide/starterkits/photobook-ui.md +188 -0
  287. package/assets/docs/guide/starterkits/placeholders.md +678 -0
  288. package/assets/docs/guide/starterkits/player.md +405 -0
  289. package/assets/docs/guide/starterkits/plugins.md +25 -0
  290. package/assets/docs/guide/starterkits/postcard-editor.md +202 -0
  291. package/assets/docs/guide/starterkits/pptx-template-import.md +581 -0
  292. package/assets/docs/guide/starterkits/print-ready-pdf-editor.md +746 -0
  293. package/assets/docs/guide/starterkits/product-editor.md +773 -0
  294. package/assets/docs/guide/starterkits/psd-template-import.md +580 -0
  295. package/assets/docs/guide/starterkits/qr-code-editor.md +470 -0
  296. package/assets/docs/guide/starterkits/single-page-editor.md +661 -0
  297. package/assets/docs/guide/starterkits/start-with-image.md +684 -0
  298. package/assets/docs/guide/starterkits/start-with-video.md +651 -0
  299. package/assets/docs/guide/starterkits/t-shirt-designer.md +742 -0
  300. package/assets/docs/guide/starterkits/templating.md +23 -0
  301. package/assets/docs/guide/starterkits/theming.md +662 -0
  302. package/assets/docs/guide/starterkits/translation-internationalization.md +662 -0
  303. package/assets/docs/guide/starterkits/unsplash-editor.md +839 -0
  304. package/assets/docs/guide/starterkits/vectorizer-editor.md +466 -0
  305. package/assets/docs/guide/starterkits/version-history.md +745 -0
  306. package/assets/docs/guide/starterkits/video-animations.md +853 -0
  307. package/assets/docs/guide/starterkits/video-captions.md +884 -0
  308. package/assets/docs/guide/starterkits/video-editing.md +25 -0
  309. package/assets/docs/guide/starterkits/video-editor.md +696 -0
  310. package/assets/docs/guide/starterkits/video-export-options.md +676 -0
  311. package/assets/docs/guide/starterkits/viewer.md +400 -0
  312. package/assets/docs/guide/starterkits.md +41 -0
  313. package/assets/docs/guide/stickers-and-shapes/combine.md +743 -0
  314. package/assets/docs/guide/stickers-and-shapes/create-cutout.md +425 -0
  315. package/assets/docs/guide/stickers-and-shapes/create-edit/create-shapes.md +794 -0
  316. package/assets/docs/guide/stickers-and-shapes/create-edit/create-stickers.md +290 -0
  317. package/assets/docs/guide/stickers-and-shapes/create-edit/edit-shapes.md +211 -0
  318. package/assets/docs/guide/stickers-and-shapes/create-edit/vector-edit.md +362 -0
  319. package/assets/docs/guide/stickers-and-shapes/insert-qr-code.md +208 -0
  320. package/assets/docs/guide/stickers.md +21 -0
  321. package/assets/docs/guide/text/add.md +641 -0
  322. package/assets/docs/guide/text/adjust-spacing.md +288 -0
  323. package/assets/docs/guide/text/auto-size.md +404 -0
  324. package/assets/docs/guide/text/custom-fonts.md +401 -0
  325. package/assets/docs/guide/text/decorations.md +330 -0
  326. package/assets/docs/guide/text/edit.md +458 -0
  327. package/assets/docs/guide/text/effects.md +244 -0
  328. package/assets/docs/guide/text/emojis.md +310 -0
  329. package/assets/docs/guide/text/enumerations.md +258 -0
  330. package/assets/docs/guide/text/language-support.md +604 -0
  331. package/assets/docs/guide/text/overview.md +14 -0
  332. package/assets/docs/guide/text/styling.md +390 -0
  333. package/assets/docs/guide/text/text-designs.md +834 -0
  334. package/assets/docs/guide/text.md +33 -0
  335. package/assets/docs/guide/to-v1-10.md +131 -0
  336. package/assets/docs/guide/to-v1-13.md +165 -0
  337. package/assets/docs/guide/to-v1-19.md +315 -0
  338. package/assets/docs/guide/to-v1-32.md +110 -0
  339. package/assets/docs/guide/to-v1-69.md +468 -0
  340. package/assets/docs/guide/to-v1-72.md +193 -0
  341. package/assets/docs/guide/upgrade.md +25 -0
  342. package/assets/docs/guide/use-templates/apply-template.md +279 -0
  343. package/assets/docs/guide/use-templates/generate.md +405 -0
  344. package/assets/docs/guide/use-templates/library.md +450 -0
  345. package/assets/docs/guide/use-templates/overview.md +20 -0
  346. package/assets/docs/guide/use-templates/programmatic.md +482 -0
  347. package/assets/docs/guide/use-templates/replace-content.md +399 -0
  348. package/assets/docs/guide/user-interface/ai-integration/audio-generation.md +428 -0
  349. package/assets/docs/guide/user-interface/ai-integration/auto-captions.md +337 -0
  350. package/assets/docs/guide/user-interface/ai-integration/custom-provider.md +853 -0
  351. package/assets/docs/guide/user-interface/ai-integration/gateway-provider.md +1045 -0
  352. package/assets/docs/guide/user-interface/ai-integration/image-generation.md +641 -0
  353. package/assets/docs/guide/user-interface/ai-integration/integrate.md +966 -0
  354. package/assets/docs/guide/user-interface/ai-integration/proxy-server.md +99 -0
  355. package/assets/docs/guide/user-interface/ai-integration/text-generation.md +498 -0
  356. package/assets/docs/guide/user-interface/ai-integration/video-generation.md +493 -0
  357. package/assets/docs/guide/user-interface/ai-integration.md +30 -0
  358. package/assets/docs/guide/user-interface/appearance/change-ui-font.md +316 -0
  359. package/assets/docs/guide/user-interface/appearance/custom-labels.md +509 -0
  360. package/assets/docs/guide/user-interface/appearance/icons.md +373 -0
  361. package/assets/docs/guide/user-interface/appearance/theming.md +665 -0
  362. package/assets/docs/guide/user-interface/appearance.md +23 -0
  363. package/assets/docs/guide/user-interface/build-your-own-ui.md +620 -0
  364. package/assets/docs/guide/user-interface/customization/canvas-menu.md +412 -0
  365. package/assets/docs/guide/user-interface/customization/canvas.md +281 -0
  366. package/assets/docs/guide/user-interface/customization/color-palette.md +413 -0
  367. package/assets/docs/guide/user-interface/customization/crop-presets.md +384 -0
  368. package/assets/docs/guide/user-interface/customization/disable-or-enable.md +676 -0
  369. package/assets/docs/guide/user-interface/customization/dock.md +399 -0
  370. package/assets/docs/guide/user-interface/customization/force-crop.md +289 -0
  371. package/assets/docs/guide/user-interface/customization/inspector-bar.md +371 -0
  372. package/assets/docs/guide/user-interface/customization/navigation-bar.md +516 -0
  373. package/assets/docs/guide/user-interface/customization/page-format.md +436 -0
  374. package/assets/docs/guide/user-interface/customization/panel.md +605 -0
  375. package/assets/docs/guide/user-interface/customization/quick-start/add-action-buttons.md +531 -0
  376. package/assets/docs/guide/user-interface/customization/quick-start/add-dock-buttons.md +358 -0
  377. package/assets/docs/guide/user-interface/customization/quick-start/create-custom-components.md +374 -0
  378. package/assets/docs/guide/user-interface/customization/quick-start/reorder-components.md +323 -0
  379. package/assets/docs/guide/user-interface/customization/quick-start/show-hide-components.md +294 -0
  380. package/assets/docs/guide/user-interface/customization/quick-start.md +12 -0
  381. package/assets/docs/guide/user-interface/customization/reference/component-order-api.md +519 -0
  382. package/assets/docs/guide/user-interface/customization/reference/component-reference.md +333 -0
  383. package/assets/docs/guide/user-interface/customization/reference.md +12 -0
  384. package/assets/docs/guide/user-interface/customization.md +39 -0
  385. package/assets/docs/guide/user-interface/localization.md +633 -0
  386. package/assets/docs/guide/user-interface/overview.md +167 -0
  387. package/assets/docs/guide/user-interface/ui-extensions/add-custom-feature.md +411 -0
  388. package/assets/docs/guide/user-interface/ui-extensions/asset-library.md +721 -0
  389. package/assets/docs/guide/user-interface/ui-extensions/create-custom-panel.md +331 -0
  390. package/assets/docs/guide/user-interface/ui-extensions/customize-behaviour.md +553 -0
  391. package/assets/docs/guide/user-interface/ui-extensions/notifications-and-dialogs.md +672 -0
  392. package/assets/docs/guide/user-interface/ui-extensions/quick-actions.md +415 -0
  393. package/assets/docs/guide/user-interface/ui-extensions/register-new-component.md +521 -0
  394. package/assets/docs/guide/user-interface/ui-extensions.md +26 -0
  395. package/assets/docs/guide/user-interface.md +25 -0
  396. package/assets/docs/guide/what-is-cesdk.md +319 -0
  397. package/assets/docs/handbook/SKILL.md +521 -0
  398. package/assets/prompts/evals-assetGenerate.md +12 -0
  399. package/assets/prompts/evals-brutalistCore.md +34 -0
  400. package/assets/prompts/evals-danskCatalogue.md +31 -0
  401. package/assets/prompts/evals-exportRoundTrip.md +12 -0
  402. package/assets/prompts/evals-inspectPriorCode.md +16 -0
  403. package/assets/prompts/evals-listProjectFiles.md +6 -0
  404. package/assets/prompts/evals-readAndExplainScript.md +6 -0
  405. package/assets/prompts/evals-resumeAcrossRestart.md +15 -0
  406. package/assets/prompts/evals-rewindRecovery.md +10 -0
  407. package/assets/prompts/evals-searchAcrossFiles.md +6 -0
  408. package/assets/prompts/evals-weddingCard.md +20 -0
  409. package/assets/prompts/explain.md +6 -0
  410. package/assets/prompts/review.md +6 -0
  411. package/dist/assets/inline.generated.d.ts +2 -0
  412. package/dist/assets/inline.generated.d.ts.map +1 -0
  413. package/dist/assets/inline.generated.js +413 -0
  414. package/dist/assets/inline.generated.js.map +1 -0
  415. package/dist/assets/load-browser.d.ts +8 -0
  416. package/dist/assets/load-browser.d.ts.map +1 -0
  417. package/dist/assets/load-browser.js +11 -0
  418. package/dist/assets/load-browser.js.map +1 -0
  419. package/dist/assets/load-node.d.ts +8 -0
  420. package/dist/assets/load-node.d.ts.map +1 -0
  421. package/dist/assets/load-node.js +11 -0
  422. package/dist/assets/load-node.js.map +1 -0
  423. package/dist/cli/http.d.ts +2 -0
  424. package/dist/cli/http.d.ts.map +1 -0
  425. package/dist/cli/http.js +231 -0
  426. package/dist/cli/http.js.map +1 -0
  427. package/dist/cli/redirect-console.d.ts +10 -0
  428. package/dist/cli/redirect-console.d.ts.map +1 -0
  429. package/dist/cli/redirect-console.js +18 -0
  430. package/dist/cli/redirect-console.js.map +1 -0
  431. package/dist/cli/resolve-license.d.ts +2 -0
  432. package/dist/cli/resolve-license.d.ts.map +1 -0
  433. package/dist/cli/resolve-license.js +13 -0
  434. package/dist/cli/resolve-license.js.map +1 -0
  435. package/dist/cli/stdio.d.ts +2 -0
  436. package/dist/cli/stdio.d.ts.map +1 -0
  437. package/dist/cli/stdio.js +124 -0
  438. package/dist/cli/stdio.js.map +1 -0
  439. package/dist/cli/trial-license.generated.d.ts +2 -0
  440. package/dist/cli/trial-license.generated.d.ts.map +1 -0
  441. package/dist/cli/trial-license.generated.js +4 -0
  442. package/dist/cli/trial-license.generated.js.map +1 -0
  443. package/dist/cli.d.ts +3 -0
  444. package/dist/cli.d.ts.map +1 -0
  445. package/dist/cli.js +64 -0
  446. package/dist/cli.js.map +1 -0
  447. package/dist/config.d.ts +61 -0
  448. package/dist/config.d.ts.map +1 -0
  449. package/dist/config.js +102 -0
  450. package/dist/config.js.map +1 -0
  451. package/dist/cross-ref.d.ts +2 -0
  452. package/dist/cross-ref.d.ts.map +1 -0
  453. package/dist/cross-ref.js +31 -0
  454. package/dist/cross-ref.js.map +1 -0
  455. package/dist/dashboard/router.d.ts +3 -0
  456. package/dist/dashboard/router.d.ts.map +1 -0
  457. package/dist/dashboard/router.js +19 -0
  458. package/dist/dashboard/router.js.map +1 -0
  459. package/dist/dashboard/spa-assets.generated.d.ts +2 -0
  460. package/dist/dashboard/spa-assets.generated.d.ts.map +1 -0
  461. package/dist/dashboard/spa-assets.generated.js +220 -0
  462. package/dist/dashboard/spa-assets.generated.js.map +1 -0
  463. package/dist/engine/asset-sources.d.ts +17 -0
  464. package/dist/engine/asset-sources.d.ts.map +1 -0
  465. package/dist/engine/asset-sources.js +75 -0
  466. package/dist/engine/asset-sources.js.map +1 -0
  467. package/dist/engine/cesdk-adapter.d.ts +10 -0
  468. package/dist/engine/cesdk-adapter.d.ts.map +1 -0
  469. package/dist/engine/cesdk-adapter.js +19 -0
  470. package/dist/engine/cesdk-adapter.js.map +1 -0
  471. package/dist/engine/index.d.ts +3 -0
  472. package/dist/engine/index.d.ts.map +1 -0
  473. package/dist/engine/index.js +3 -0
  474. package/dist/engine/index.js.map +1 -0
  475. package/dist/engine/mutex.d.ts +5 -0
  476. package/dist/engine/mutex.d.ts.map +1 -0
  477. package/dist/engine/mutex.js +42 -0
  478. package/dist/engine/mutex.js.map +1 -0
  479. package/dist/engine/session.d.ts +50 -0
  480. package/dist/engine/session.d.ts.map +1 -0
  481. package/dist/engine/session.js +95 -0
  482. package/dist/engine/session.js.map +1 -0
  483. package/dist/engine/uri-resolver.d.ts +14 -0
  484. package/dist/engine/uri-resolver.d.ts.map +1 -0
  485. package/dist/engine/uri-resolver.js +12 -0
  486. package/dist/engine/uri-resolver.js.map +1 -0
  487. package/dist/frontmatter.d.ts +15 -0
  488. package/dist/frontmatter.d.ts.map +1 -0
  489. package/dist/frontmatter.js +46 -0
  490. package/dist/frontmatter.js.map +1 -0
  491. package/dist/gateway/hosted-stub.d.ts +6 -0
  492. package/dist/gateway/hosted-stub.d.ts.map +1 -0
  493. package/dist/gateway/hosted-stub.js +11 -0
  494. package/dist/gateway/hosted-stub.js.map +1 -0
  495. package/dist/gateway/index.d.ts +4 -0
  496. package/dist/gateway/index.d.ts.map +1 -0
  497. package/dist/gateway/index.js +4 -0
  498. package/dist/gateway/index.js.map +1 -0
  499. package/dist/gateway/local.d.ts +14 -0
  500. package/dist/gateway/local.d.ts.map +1 -0
  501. package/dist/gateway/local.js +41 -0
  502. package/dist/gateway/local.js.map +1 -0
  503. package/dist/gateway/types.d.ts +24 -0
  504. package/dist/gateway/types.d.ts.map +1 -0
  505. package/dist/gateway/types.js +7 -0
  506. package/dist/gateway/types.js.map +1 -0
  507. package/dist/http/server.d.ts +80 -0
  508. package/dist/http/server.d.ts.map +1 -0
  509. package/dist/http/server.js +183 -0
  510. package/dist/http/server.js.map +1 -0
  511. package/dist/http/session-manager.d.ts +42 -0
  512. package/dist/http/session-manager.d.ts.map +1 -0
  513. package/dist/http/session-manager.js +82 -0
  514. package/dist/http/session-manager.js.map +1 -0
  515. package/dist/http/workspace-auth.d.ts +9 -0
  516. package/dist/http/workspace-auth.d.ts.map +1 -0
  517. package/dist/http/workspace-auth.js +29 -0
  518. package/dist/http/workspace-auth.js.map +1 -0
  519. package/dist/index.d.ts +10 -0
  520. package/dist/index.d.ts.map +1 -0
  521. package/dist/index.js +10 -0
  522. package/dist/index.js.map +1 -0
  523. package/dist/metrics/mount.d.ts +11 -0
  524. package/dist/metrics/mount.d.ts.map +1 -0
  525. package/dist/metrics/mount.js +13 -0
  526. package/dist/metrics/mount.js.map +1 -0
  527. package/dist/metrics/recorder.d.ts +55 -0
  528. package/dist/metrics/recorder.d.ts.map +1 -0
  529. package/dist/metrics/recorder.js +97 -0
  530. package/dist/metrics/recorder.js.map +1 -0
  531. package/dist/revisions/hash.d.ts +7 -0
  532. package/dist/revisions/hash.d.ts.map +1 -0
  533. package/dist/revisions/hash.js +24 -0
  534. package/dist/revisions/hash.js.map +1 -0
  535. package/dist/revisions/index.d.ts +4 -0
  536. package/dist/revisions/index.d.ts.map +1 -0
  537. package/dist/revisions/index.js +4 -0
  538. package/dist/revisions/index.js.map +1 -0
  539. package/dist/revisions/store.d.ts +69 -0
  540. package/dist/revisions/store.d.ts.map +1 -0
  541. package/dist/revisions/store.js +196 -0
  542. package/dist/revisions/store.js.map +1 -0
  543. package/dist/revisions/types.d.ts +39 -0
  544. package/dist/revisions/types.d.ts.map +1 -0
  545. package/dist/revisions/types.js +2 -0
  546. package/dist/revisions/types.js.map +1 -0
  547. package/dist/server.d.ts +51 -0
  548. package/dist/server.d.ts.map +1 -0
  549. package/dist/server.js +175 -0
  550. package/dist/server.js.map +1 -0
  551. package/dist/skill-tools.d.ts +3 -0
  552. package/dist/skill-tools.d.ts.map +1 -0
  553. package/dist/skill-tools.js +105 -0
  554. package/dist/skill-tools.js.map +1 -0
  555. package/dist/test/test/cli/dispatcher.test.d.ts +2 -0
  556. package/dist/test/test/cli/dispatcher.test.d.ts.map +1 -0
  557. package/dist/test/test/cli/dispatcher.test.js +47 -0
  558. package/dist/test/test/cli/dispatcher.test.js.map +1 -0
  559. package/dist/test/test/cross-ref.test.d.ts +2 -0
  560. package/dist/test/test/cross-ref.test.d.ts.map +1 -0
  561. package/dist/test/test/cross-ref.test.js +39 -0
  562. package/dist/test/test/cross-ref.test.js.map +1 -0
  563. package/dist/test/test/engine/session.test.d.ts +2 -0
  564. package/dist/test/test/engine/session.test.d.ts.map +1 -0
  565. package/dist/test/test/engine/session.test.js +144 -0
  566. package/dist/test/test/engine/session.test.js.map +1 -0
  567. package/dist/test/test/engine/uri-resolver.test.d.ts +2 -0
  568. package/dist/test/test/engine/uri-resolver.test.d.ts.map +1 -0
  569. package/dist/test/test/engine/uri-resolver.test.js +38 -0
  570. package/dist/test/test/engine/uri-resolver.test.js.map +1 -0
  571. package/dist/test/test/frontmatter.test.d.ts +2 -0
  572. package/dist/test/test/frontmatter.test.d.ts.map +1 -0
  573. package/dist/test/test/frontmatter.test.js +55 -0
  574. package/dist/test/test/frontmatter.test.js.map +1 -0
  575. package/dist/test/test/gateway/hosted-stub.test.d.ts +2 -0
  576. package/dist/test/test/gateway/hosted-stub.test.d.ts.map +1 -0
  577. package/dist/test/test/gateway/hosted-stub.test.js +11 -0
  578. package/dist/test/test/gateway/hosted-stub.test.js.map +1 -0
  579. package/dist/test/test/gateway/local.test.d.ts +2 -0
  580. package/dist/test/test/gateway/local.test.d.ts.map +1 -0
  581. package/dist/test/test/gateway/local.test.js +29 -0
  582. package/dist/test/test/gateway/local.test.js.map +1 -0
  583. package/dist/test/test/handbook-contract.test.d.ts +2 -0
  584. package/dist/test/test/handbook-contract.test.d.ts.map +1 -0
  585. package/dist/test/test/handbook-contract.test.js +71 -0
  586. package/dist/test/test/handbook-contract.test.js.map +1 -0
  587. package/dist/test/test/http/server.test.d.ts +2 -0
  588. package/dist/test/test/http/server.test.d.ts.map +1 -0
  589. package/dist/test/test/http/server.test.js +245 -0
  590. package/dist/test/test/http/server.test.js.map +1 -0
  591. package/dist/test/test/http/session-manager.test.d.ts +2 -0
  592. package/dist/test/test/http/session-manager.test.d.ts.map +1 -0
  593. package/dist/test/test/http/session-manager.test.js +83 -0
  594. package/dist/test/test/http/session-manager.test.js.map +1 -0
  595. package/dist/test/test/revisions/hash.test.d.ts +2 -0
  596. package/dist/test/test/revisions/hash.test.d.ts.map +1 -0
  597. package/dist/test/test/revisions/hash.test.js +33 -0
  598. package/dist/test/test/revisions/hash.test.js.map +1 -0
  599. package/dist/test/test/revisions/store.test.d.ts +2 -0
  600. package/dist/test/test/revisions/store.test.d.ts.map +1 -0
  601. package/dist/test/test/revisions/store.test.js +245 -0
  602. package/dist/test/test/revisions/store.test.js.map +1 -0
  603. package/dist/test/test/server.test.d.ts +2 -0
  604. package/dist/test/test/server.test.d.ts.map +1 -0
  605. package/dist/test/test/server.test.js +157 -0
  606. package/dist/test/test/server.test.js.map +1 -0
  607. package/dist/test/test/skill-tools.test.d.ts +2 -0
  608. package/dist/test/test/skill-tools.test.d.ts.map +1 -0
  609. package/dist/test/test/skill-tools.test.js +84 -0
  610. package/dist/test/test/skill-tools.test.js.map +1 -0
  611. package/dist/test/test/smoke.test.d.ts +2 -0
  612. package/dist/test/test/smoke.test.d.ts.map +1 -0
  613. package/dist/test/test/smoke.test.js +8 -0
  614. package/dist/test/test/smoke.test.js.map +1 -0
  615. package/dist/test/test/tools/asset-generate.test.d.ts +2 -0
  616. package/dist/test/test/tools/asset-generate.test.d.ts.map +1 -0
  617. package/dist/test/test/tools/asset-generate.test.js +66 -0
  618. package/dist/test/test/tools/asset-generate.test.js.map +1 -0
  619. package/dist/test/test/tools/edit.test.d.ts +2 -0
  620. package/dist/test/test/tools/edit.test.d.ts.map +1 -0
  621. package/dist/test/test/tools/edit.test.js +205 -0
  622. package/dist/test/test/tools/edit.test.js.map +1 -0
  623. package/dist/test/test/tools/export.test.d.ts +2 -0
  624. package/dist/test/test/tools/export.test.d.ts.map +1 -0
  625. package/dist/test/test/tools/export.test.js +144 -0
  626. package/dist/test/test/tools/export.test.js.map +1 -0
  627. package/dist/test/test/tools/history.test.d.ts +2 -0
  628. package/dist/test/test/tools/history.test.d.ts.map +1 -0
  629. package/dist/test/test/tools/history.test.js +29 -0
  630. package/dist/test/test/tools/history.test.js.map +1 -0
  631. package/dist/test/test/tools/inspect.test.d.ts +2 -0
  632. package/dist/test/test/tools/inspect.test.d.ts.map +1 -0
  633. package/dist/test/test/tools/inspect.test.js +62 -0
  634. package/dist/test/test/tools/inspect.test.js.map +1 -0
  635. package/dist/test/test/tools/list.test.d.ts +2 -0
  636. package/dist/test/test/tools/list.test.d.ts.map +1 -0
  637. package/dist/test/test/tools/list.test.js +23 -0
  638. package/dist/test/test/tools/list.test.js.map +1 -0
  639. package/dist/test/test/tools/open-editor.test.d.ts +2 -0
  640. package/dist/test/test/tools/open-editor.test.d.ts.map +1 -0
  641. package/dist/test/test/tools/open-editor.test.js +53 -0
  642. package/dist/test/test/tools/open-editor.test.js.map +1 -0
  643. package/dist/test/test/tools/preview.test.d.ts +2 -0
  644. package/dist/test/test/tools/preview.test.d.ts.map +1 -0
  645. package/dist/test/test/tools/preview.test.js +73 -0
  646. package/dist/test/test/tools/preview.test.js.map +1 -0
  647. package/dist/test/test/tools/rename.test.d.ts +2 -0
  648. package/dist/test/test/tools/rename.test.d.ts.map +1 -0
  649. package/dist/test/test/tools/rename.test.js +17 -0
  650. package/dist/test/test/tools/rename.test.js.map +1 -0
  651. package/dist/test/test/viewer/broadcaster.test.d.ts +2 -0
  652. package/dist/test/test/viewer/broadcaster.test.d.ts.map +1 -0
  653. package/dist/test/test/viewer/broadcaster.test.js +53 -0
  654. package/dist/test/test/viewer/broadcaster.test.js.map +1 -0
  655. package/dist/test/test/viewer/resource-route.test.d.ts +2 -0
  656. package/dist/test/test/viewer/resource-route.test.d.ts.map +1 -0
  657. package/dist/test/test/viewer/resource-route.test.js +70 -0
  658. package/dist/test/test/viewer/resource-route.test.js.map +1 -0
  659. package/dist/test/test/viewer/router.test.d.ts +2 -0
  660. package/dist/test/test/viewer/router.test.d.ts.map +1 -0
  661. package/dist/test/test/viewer/router.test.js +171 -0
  662. package/dist/test/test/viewer/router.test.js.map +1 -0
  663. package/dist/test/test/viewer/url-builder.test.d.ts +2 -0
  664. package/dist/test/test/viewer/url-builder.test.d.ts.map +1 -0
  665. package/dist/test/test/viewer/url-builder.test.js +31 -0
  666. package/dist/test/test/viewer/url-builder.test.js.map +1 -0
  667. package/dist/test/test/workspace/hosted-stub.test.d.ts +2 -0
  668. package/dist/test/test/workspace/hosted-stub.test.d.ts.map +1 -0
  669. package/dist/test/test/workspace/hosted-stub.test.js +30 -0
  670. package/dist/test/test/workspace/hosted-stub.test.js.map +1 -0
  671. package/dist/test/test/workspace/in-memory.test.d.ts +2 -0
  672. package/dist/test/test/workspace/in-memory.test.d.ts.map +1 -0
  673. package/dist/test/test/workspace/in-memory.test.js +4 -0
  674. package/dist/test/test/workspace/in-memory.test.js.map +1 -0
  675. package/dist/test/test/workspace/node-fs.test.d.ts +2 -0
  676. package/dist/test/test/workspace/node-fs.test.d.ts.map +1 -0
  677. package/dist/test/test/workspace/node-fs.test.js +20 -0
  678. package/dist/test/test/workspace/node-fs.test.js.map +1 -0
  679. package/dist/test/test/workspace/shared-contract.d.ts +3 -0
  680. package/dist/test/test/workspace/shared-contract.d.ts.map +1 -0
  681. package/dist/test/test/workspace/shared-contract.js +92 -0
  682. package/dist/test/test/workspace/shared-contract.js.map +1 -0
  683. package/dist/test/tsconfig.test.tsbuildinfo +1 -0
  684. package/dist/test/vitest.config.d.ts +3 -0
  685. package/dist/test/vitest.config.d.ts.map +1 -0
  686. package/dist/test/vitest.config.js +8 -0
  687. package/dist/test/vitest.config.js.map +1 -0
  688. package/dist/tools/asset-generate.d.ts +12 -0
  689. package/dist/tools/asset-generate.d.ts.map +1 -0
  690. package/dist/tools/asset-generate.js +112 -0
  691. package/dist/tools/asset-generate.js.map +1 -0
  692. package/dist/tools/asset-search.d.ts +10 -0
  693. package/dist/tools/asset-search.d.ts.map +1 -0
  694. package/dist/tools/asset-search.js +120 -0
  695. package/dist/tools/asset-search.js.map +1 -0
  696. package/dist/tools/content-types.d.ts +11 -0
  697. package/dist/tools/content-types.d.ts.map +1 -0
  698. package/dist/tools/content-types.js +2 -0
  699. package/dist/tools/content-types.js.map +1 -0
  700. package/dist/tools/edit.d.ts +29 -0
  701. package/dist/tools/edit.d.ts.map +1 -0
  702. package/dist/tools/edit.js +165 -0
  703. package/dist/tools/edit.js.map +1 -0
  704. package/dist/tools/engine.d.ts +31 -0
  705. package/dist/tools/engine.d.ts.map +1 -0
  706. package/dist/tools/engine.js +59 -0
  707. package/dist/tools/engine.js.map +1 -0
  708. package/dist/tools/export.d.ts +19 -0
  709. package/dist/tools/export.d.ts.map +1 -0
  710. package/dist/tools/export.js +179 -0
  711. package/dist/tools/export.js.map +1 -0
  712. package/dist/tools/history.d.ts +7 -0
  713. package/dist/tools/history.d.ts.map +1 -0
  714. package/dist/tools/history.js +54 -0
  715. package/dist/tools/history.js.map +1 -0
  716. package/dist/tools/index.d.ts +35 -0
  717. package/dist/tools/index.d.ts.map +1 -0
  718. package/dist/tools/index.js +72 -0
  719. package/dist/tools/index.js.map +1 -0
  720. package/dist/tools/inspect.d.ts +7 -0
  721. package/dist/tools/inspect.d.ts.map +1 -0
  722. package/dist/tools/inspect.js +80 -0
  723. package/dist/tools/inspect.js.map +1 -0
  724. package/dist/tools/list.d.ts +7 -0
  725. package/dist/tools/list.d.ts.map +1 -0
  726. package/dist/tools/list.js +18 -0
  727. package/dist/tools/list.js.map +1 -0
  728. package/dist/tools/metrics.d.ts +11 -0
  729. package/dist/tools/metrics.d.ts.map +1 -0
  730. package/dist/tools/metrics.js +28 -0
  731. package/dist/tools/metrics.js.map +1 -0
  732. package/dist/tools/open-editor.d.ts +10 -0
  733. package/dist/tools/open-editor.d.ts.map +1 -0
  734. package/dist/tools/open-editor.js +62 -0
  735. package/dist/tools/open-editor.js.map +1 -0
  736. package/dist/tools/preview.d.ts +12 -0
  737. package/dist/tools/preview.d.ts.map +1 -0
  738. package/dist/tools/preview.js +104 -0
  739. package/dist/tools/preview.js.map +1 -0
  740. package/dist/tools/rename.d.ts +7 -0
  741. package/dist/tools/rename.d.ts.map +1 -0
  742. package/dist/tools/rename.js +39 -0
  743. package/dist/tools/rename.js.map +1 -0
  744. package/dist/tools/result.d.ts +12 -0
  745. package/dist/tools/result.d.ts.map +1 -0
  746. package/dist/tools/result.js +55 -0
  747. package/dist/tools/result.js.map +1 -0
  748. package/dist/tools/save.d.ts +19 -0
  749. package/dist/tools/save.d.ts.map +1 -0
  750. package/dist/tools/save.js +117 -0
  751. package/dist/tools/save.js.map +1 -0
  752. package/dist/viewer/broadcaster.d.ts +13 -0
  753. package/dist/viewer/broadcaster.d.ts.map +1 -0
  754. package/dist/viewer/broadcaster.js +44 -0
  755. package/dist/viewer/broadcaster.js.map +1 -0
  756. package/dist/viewer/index.d.ts +7 -0
  757. package/dist/viewer/index.d.ts.map +1 -0
  758. package/dist/viewer/index.js +7 -0
  759. package/dist/viewer/index.js.map +1 -0
  760. package/dist/viewer/listener.d.ts +16 -0
  761. package/dist/viewer/listener.d.ts.map +1 -0
  762. package/dist/viewer/listener.js +30 -0
  763. package/dist/viewer/listener.js.map +1 -0
  764. package/dist/viewer/presigned-r2-url-builder.d.ts +30 -0
  765. package/dist/viewer/presigned-r2-url-builder.d.ts.map +1 -0
  766. package/dist/viewer/presigned-r2-url-builder.js +40 -0
  767. package/dist/viewer/presigned-r2-url-builder.js.map +1 -0
  768. package/dist/viewer/resource-route.d.ts +9 -0
  769. package/dist/viewer/resource-route.d.ts.map +1 -0
  770. package/dist/viewer/resource-route.js +59 -0
  771. package/dist/viewer/resource-route.js.map +1 -0
  772. package/dist/viewer/router.d.ts +20 -0
  773. package/dist/viewer/router.d.ts.map +1 -0
  774. package/dist/viewer/router.js +142 -0
  775. package/dist/viewer/router.js.map +1 -0
  776. package/dist/viewer/session-mount.d.ts +10 -0
  777. package/dist/viewer/session-mount.d.ts.map +1 -0
  778. package/dist/viewer/session-mount.js +24 -0
  779. package/dist/viewer/session-mount.js.map +1 -0
  780. package/dist/viewer/spa-assets.generated.d.ts +2 -0
  781. package/dist/viewer/spa-assets.generated.d.ts.map +1 -0
  782. package/dist/viewer/spa-assets.generated.js +989 -0
  783. package/dist/viewer/spa-assets.generated.js.map +1 -0
  784. package/dist/viewer/url-builder.d.ts +48 -0
  785. package/dist/viewer/url-builder.d.ts.map +1 -0
  786. package/dist/viewer/url-builder.js +38 -0
  787. package/dist/viewer/url-builder.js.map +1 -0
  788. package/dist/workspace/hosted-stub.d.ts +28 -0
  789. package/dist/workspace/hosted-stub.d.ts.map +1 -0
  790. package/dist/workspace/hosted-stub.js +44 -0
  791. package/dist/workspace/hosted-stub.js.map +1 -0
  792. package/dist/workspace/in-memory.d.ts +23 -0
  793. package/dist/workspace/in-memory.d.ts.map +1 -0
  794. package/dist/workspace/in-memory.js +161 -0
  795. package/dist/workspace/in-memory.js.map +1 -0
  796. package/dist/workspace/index.d.ts +6 -0
  797. package/dist/workspace/index.d.ts.map +1 -0
  798. package/dist/workspace/index.js +6 -0
  799. package/dist/workspace/index.js.map +1 -0
  800. package/dist/workspace/node-fs.d.ts +23 -0
  801. package/dist/workspace/node-fs.d.ts.map +1 -0
  802. package/dist/workspace/node-fs.js +90 -0
  803. package/dist/workspace/node-fs.js.map +1 -0
  804. package/dist/workspace/s3.d.ts +32 -0
  805. package/dist/workspace/s3.d.ts.map +1 -0
  806. package/dist/workspace/s3.js +191 -0
  807. package/dist/workspace/s3.js.map +1 -0
  808. package/dist/workspace/scoped.d.ts +32 -0
  809. package/dist/workspace/scoped.d.ts.map +1 -0
  810. package/dist/workspace/scoped.js +76 -0
  811. package/dist/workspace/scoped.js.map +1 -0
  812. package/dist/workspace/types.d.ts +75 -0
  813. package/dist/workspace/types.d.ts.map +1 -0
  814. package/dist/workspace/types.js +18 -0
  815. package/dist/workspace/types.js.map +1 -0
  816. package/package.json +80 -0
@@ -0,0 +1,51 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import type { MetricsRecorder } from './metrics/recorder.js';
3
+ /**
4
+ * One tool the server exposes via tools/list + tools/call. Caller-supplied so
5
+ * the engine-bound implementations live near the surface that owns the engine
6
+ * (the demo passes its existing `createDesignTools` output adapted to this
7
+ * shape; an external bootstrap could pass server-side equivalents).
8
+ */
9
+ export interface CodesignMcpToolRegistration {
10
+ name: string;
11
+ description?: string;
12
+ /** JSON Schema describing the tool's input arguments. */
13
+ inputSchema: unknown;
14
+ call: (args: unknown) => Promise<{
15
+ content: Array<{
16
+ type: 'text';
17
+ text: string;
18
+ } | {
19
+ type: 'image';
20
+ data: string;
21
+ mimeType: string;
22
+ }>;
23
+ isError?: boolean;
24
+ }>;
25
+ }
26
+ export interface CodesignMcpServerOptions {
27
+ /** CreativeEngine instance, DI'd by caller. Pass-through to design tools. */
28
+ engine: unknown;
29
+ /**
30
+ * Asset bundle. Keys are forward-slash paths under one of:
31
+ * "docs/<doc>/SKILL.md" — entry point for handbook / api / guide
32
+ * "docs/<doc>/<file>" — sub-files reachable via the doc tools
33
+ * "prompts/<name>.md" — slash-command prompts
34
+ * Values are file contents.
35
+ */
36
+ assets: Record<string, string>;
37
+ /** URI scheme for resources. Default: "codesign". */
38
+ resourceScheme?: string;
39
+ /** Tools to expose via tools/list + tools/call. */
40
+ tools?: CodesignMcpToolRegistration[];
41
+ /** Optional metrics sink. Absent → tool calls are not timed (no-op). */
42
+ metrics?: MetricsRecorder;
43
+ /**
44
+ * Build identity reported as `serverInfo.version` on `initialize`. A client
45
+ * (the deploy smoketest) can assert it to confirm it's talking to the
46
+ * just-deployed build, not a stale container. Default `'dev'`.
47
+ */
48
+ buildId?: string;
49
+ }
50
+ export declare function createCodesignMcpServer(opts: CodesignMcpServerOptions): Server;
51
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAenE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;QAC/B,OAAO,EAAE,KAAK,CACV;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,GAC9B;YAAE,IAAI,EAAE,OAAO,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CACpD,CAAC;QACF,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,wBAAwB;IACvC,6EAA6E;IAC7E,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,KAAK,CAAC,EAAE,2BAA2B,EAAE,CAAC;IACtC,wEAAwE;IACxE,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAKD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,wBAAwB,GAC7B,MAAM,CA2LR"}
package/dist/server.js ADDED
@@ -0,0 +1,175 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import { CallToolRequestSchema, ErrorCode, GetPromptRequestSchema, ListPromptsRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, McpError, ReadResourceRequestSchema } from '@modelcontextprotocol/sdk/types.js';
3
+ import { rewriteSkillLinks } from './cross-ref.js';
4
+ import { parseFrontmatter } from './frontmatter.js';
5
+ import { buildSkillReadTools } from './skill-tools.js';
6
+ import { performance } from 'node:perf_hooks';
7
+ const DOC_FILE = /^docs\/([^/]+)\/(.+)$/;
8
+ const PROMPT_FILE = /^prompts\/([^/]+)\.md$/;
9
+ export function createCodesignMcpServer(opts) {
10
+ const scheme = opts.resourceScheme ?? 'codesign';
11
+ const assets = opts.assets;
12
+ // `instructions` is intentionally short — it tells the model what the
13
+ // server is and STRONGLY directs it to call `codesign_read_codesign_system`
14
+ // before its first design_exec. Skills are now first-class tools (not MCP
15
+ // resources buried in an XML block), so discovery happens via tools/list
16
+ // on every host without needing ReadMcpResourceTool support.
17
+ //
18
+ // Why short: Claude Code wraps MCP `instructions` in a <system-reminder>
19
+ // and truncates long ones mid-stream. Keeping `instructions` under ~1.5 KB
20
+ // ensures the whole pointer survives any sane truncation.
21
+ //
22
+ // The asset-generation hint is included only when an `asset_generate` tool
23
+ // is actually registered (Local hides it without an API_KEY), so we never
24
+ // advertise a tool the model can't see in tools/list.
25
+ const hasAssetGenerate = (opts.tools ?? []).some((t) => t.name === 'asset_generate');
26
+ const instructions = [
27
+ 'This is the **codesign** MCP server. It hosts a CE.SDK CreativeEngine and a persistent design workspace (revision DAG) for vector design + print-quality PDF output.',
28
+ '',
29
+ '**Required first step** — before any `edit`, call `handbook` (no args). It teaches the mandatory `parent` argument, dirty-on-throw safety, rewind recovery via `list`/`history`, the typeface schema setFont requires, and the runtime quirks that bite first attempts. Skipping it produces broken output.',
30
+ '',
31
+ 'Reference docs, on demand:',
32
+ '- `api({ path?, offset?, limit? })` — CE.SDK TypeScript signatures.',
33
+ '- `guide({ path? })` — CE.SDK Vanilla JS reference docs / topic guides.',
34
+ '',
35
+ 'Design tools (after reading the handbook):',
36
+ '- `edit({ parent, code, title?, note? })` — mutate the canvas; `parent` is REQUIRED (revision id, or null for a new design).',
37
+ '- `preview({ blockId, revision? })` — render a block to an inline image.',
38
+ '- `export({ target, format, revision, blockId })` — render a block to pdf/image and write it into the workspace.',
39
+ '- `save({ revision, outPath? })` — write a self-contained `.zip` archive (scene + assets) of a revision into the workspace.',
40
+ '',
41
+ 'Workspace tools (for resuming + navigating across designs):',
42
+ '- `list()` — every design in the workspace, newest first.',
43
+ '- `history({ revision })` — walk back to the root; how you re-ground after a rewind.',
44
+ '- `inspect({ revision })` — read one revision in full, including the code that produced it (patterns, not block ids).',
45
+ '- `rename({ revision, title })` — rename a design.',
46
+ '- `open_editor({ revision? })` — URL the human can open to view the design.',
47
+ '- `asset_search({ sourceId?, query? })` — browse asset sources; apply results in `edit`.'
48
+ ]
49
+ .concat(hasAssetGenerate
50
+ ? [
51
+ '',
52
+ 'Asset generation:',
53
+ "- `asset_generate({ kind: 'image', prompt, width?, height? })` — opt-in (Local needs API_KEY); Hosted is cost-gated."
54
+ ]
55
+ : [])
56
+ .join('\n');
57
+ // Build the resource map up-front: URI → rewritten markdown body. Cross-refs
58
+ // inside doc content are rewritten to absolute MCP URIs so the model never
59
+ // has to resolve a relative path against a doc dir.
60
+ const rewrittenContent = new Map();
61
+ for (const [key, content] of Object.entries(assets)) {
62
+ const m = key.match(DOC_FILE);
63
+ if (!m)
64
+ continue;
65
+ const [, doc, rest] = m;
66
+ const uri = `${scheme}://docs/${doc}/${rest}`;
67
+ rewrittenContent.set(uri, rewriteSkillLinks(content, doc, scheme));
68
+ }
69
+ // Index prompts by name (frontmatter `name`, falling back to filename).
70
+ const prompts = new Map();
71
+ for (const [key, content] of Object.entries(assets)) {
72
+ const m = key.match(PROMPT_FILE);
73
+ if (!m)
74
+ continue;
75
+ const front = parseFrontmatter(content);
76
+ const name = front.name ?? m[1];
77
+ prompts.set(name, {
78
+ description: front.description ?? '',
79
+ body: front.body
80
+ });
81
+ }
82
+ const server = new Server({ name: 'codesign', version: opts.buildId ?? 'dev' }, {
83
+ capabilities: { resources: {}, prompts: {}, tools: {} },
84
+ instructions
85
+ });
86
+ // `resources/list` advertises only the per-skill SKILL.md (the entry
87
+ // point), not the 392 nested cesdk-guide files. Sub-files stay readable
88
+ // via `resources/read` against any cached URI, but skill content discovery
89
+ // happens through the codesign_read_* tools — those are the universal
90
+ // surface across MCP hosts.
91
+ server.setRequestHandler(ListResourcesRequestSchema, async () => ({
92
+ resources: Array.from(rewrittenContent.keys())
93
+ .filter((uri) => uri.endsWith('/SKILL.md'))
94
+ .map((uri) => ({
95
+ uri,
96
+ mimeType: 'text/markdown',
97
+ name: uri.replace(`${scheme}://`, '')
98
+ }))
99
+ }));
100
+ server.setRequestHandler(ReadResourceRequestSchema, async (req) => {
101
+ const text = rewrittenContent.get(req.params.uri);
102
+ if (text === undefined) {
103
+ throw new McpError(ErrorCode.InvalidParams, `Unknown resource: ${req.params.uri}`);
104
+ }
105
+ return {
106
+ contents: [{ uri: req.params.uri, mimeType: 'text/markdown', text }]
107
+ };
108
+ });
109
+ server.setRequestHandler(ListPromptsRequestSchema, async () => ({
110
+ prompts: Array.from(prompts.entries()).map(([name, p]) => ({
111
+ name,
112
+ description: p.description
113
+ }))
114
+ }));
115
+ server.setRequestHandler(GetPromptRequestSchema, async (req) => {
116
+ const p = prompts.get(req.params.name);
117
+ if (!p) {
118
+ throw new McpError(ErrorCode.InvalidParams, `Unknown prompt: ${req.params.name}`);
119
+ }
120
+ return {
121
+ messages: [
122
+ {
123
+ role: 'user',
124
+ content: { type: 'text', text: p.body }
125
+ }
126
+ ]
127
+ };
128
+ });
129
+ // Tools registered with the server: caller-supplied design tools + the
130
+ // auto-generated skill-read tools (one per skill in the asset bundle).
131
+ // The skill tools always come first so Level 1 wording in the design tool
132
+ // descriptions ("call codesign_read_codesign_system first") points at
133
+ // something the model already sees in tools/list.
134
+ const tools = new Map();
135
+ for (const t of buildSkillReadTools(assets))
136
+ tools.set(t.name, t);
137
+ for (const t of opts.tools ?? [])
138
+ tools.set(t.name, t);
139
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
140
+ tools: Array.from(tools.values()).map((t) => ({
141
+ name: t.name,
142
+ description: t.description,
143
+ inputSchema: t.inputSchema
144
+ }))
145
+ }));
146
+ server.setRequestHandler(CallToolRequestSchema, async (req) => {
147
+ const t = tools.get(req.params.name);
148
+ if (!t) {
149
+ throw new McpError(ErrorCode.InvalidParams, `Unknown tool: ${req.params.name}`);
150
+ }
151
+ // No recorder → byte-for-byte the original behaviour (the off-switch).
152
+ if (!opts.metrics)
153
+ return await t.call(req.params.arguments ?? {});
154
+ const startedAt = performance.now();
155
+ let ok = true;
156
+ try {
157
+ const res = await t.call(req.params.arguments ?? {});
158
+ ok = res.isError !== true;
159
+ return res;
160
+ }
161
+ catch (err) {
162
+ ok = false;
163
+ throw err;
164
+ }
165
+ finally {
166
+ opts.metrics.record({
167
+ tool: req.params.name,
168
+ durationMs: performance.now() - startedAt,
169
+ ok
170
+ });
171
+ }
172
+ });
173
+ return server;
174
+ }
175
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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","sourcesContent":["import { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport {\n CallToolRequestSchema,\n ErrorCode,\n GetPromptRequestSchema,\n ListPromptsRequestSchema,\n ListResourcesRequestSchema,\n ListToolsRequestSchema,\n McpError,\n ReadResourceRequestSchema\n} from '@modelcontextprotocol/sdk/types.js';\nimport { rewriteSkillLinks } from './cross-ref.js';\nimport { parseFrontmatter } from './frontmatter.js';\nimport { buildSkillReadTools } from './skill-tools.js';\nimport { performance } from 'node:perf_hooks';\nimport type { MetricsRecorder } from './metrics/recorder.js';\n\n/**\n * One tool the server exposes via tools/list + tools/call. Caller-supplied so\n * the engine-bound implementations live near the surface that owns the engine\n * (the demo passes its existing `createDesignTools` output adapted to this\n * shape; an external bootstrap could pass server-side equivalents).\n */\nexport interface CodesignMcpToolRegistration {\n name: string;\n description?: string;\n /** JSON Schema describing the tool's input arguments. */\n inputSchema: unknown;\n call: (args: unknown) => Promise<{\n content: Array<\n | { type: 'text'; text: string }\n | { type: 'image'; data: string; mimeType: string }\n >;\n isError?: boolean;\n }>;\n}\n\nexport interface CodesignMcpServerOptions {\n /** CreativeEngine instance, DI'd by caller. Pass-through to design tools. */\n engine: unknown;\n /**\n * Asset bundle. Keys are forward-slash paths under one of:\n * \"docs/<doc>/SKILL.md\" — entry point for handbook / api / guide\n * \"docs/<doc>/<file>\" — sub-files reachable via the doc tools\n * \"prompts/<name>.md\" — slash-command prompts\n * Values are file contents.\n */\n assets: Record<string, string>;\n /** URI scheme for resources. Default: \"codesign\". */\n resourceScheme?: string;\n /** Tools to expose via tools/list + tools/call. */\n tools?: CodesignMcpToolRegistration[];\n /** Optional metrics sink. Absent → tool calls are not timed (no-op). */\n metrics?: MetricsRecorder;\n /**\n * Build identity reported as `serverInfo.version` on `initialize`. A client\n * (the deploy smoketest) can assert it to confirm it's talking to the\n * just-deployed build, not a stale container. Default `'dev'`.\n */\n buildId?: string;\n}\n\nconst DOC_FILE = /^docs\\/([^/]+)\\/(.+)$/;\nconst PROMPT_FILE = /^prompts\\/([^/]+)\\.md$/;\n\nexport function createCodesignMcpServer(\n opts: CodesignMcpServerOptions\n): Server {\n const scheme = opts.resourceScheme ?? 'codesign';\n const assets = opts.assets;\n\n // `instructions` is intentionally short — it tells the model what the\n // server is and STRONGLY directs it to call `codesign_read_codesign_system`\n // before its first design_exec. Skills are now first-class tools (not MCP\n // resources buried in an XML block), so discovery happens via tools/list\n // on every host without needing ReadMcpResourceTool support.\n //\n // Why short: Claude Code wraps MCP `instructions` in a <system-reminder>\n // and truncates long ones mid-stream. Keeping `instructions` under ~1.5 KB\n // ensures the whole pointer survives any sane truncation.\n //\n // The asset-generation hint is included only when an `asset_generate` tool\n // is actually registered (Local hides it without an API_KEY), so we never\n // advertise a tool the model can't see in tools/list.\n const hasAssetGenerate = (opts.tools ?? []).some(\n (t) => t.name === 'asset_generate'\n );\n const instructions = [\n 'This is the **codesign** MCP server. It hosts a CE.SDK CreativeEngine and a persistent design workspace (revision DAG) for vector design + print-quality PDF output.',\n '',\n '**Required first step** — before any `edit`, call `handbook` (no args). It teaches the mandatory `parent` argument, dirty-on-throw safety, rewind recovery via `list`/`history`, the typeface schema setFont requires, and the runtime quirks that bite first attempts. Skipping it produces broken output.',\n '',\n 'Reference docs, on demand:',\n '- `api({ path?, offset?, limit? })` — CE.SDK TypeScript signatures.',\n '- `guide({ path? })` — CE.SDK Vanilla JS reference docs / topic guides.',\n '',\n 'Design tools (after reading the handbook):',\n '- `edit({ parent, code, title?, note? })` — mutate the canvas; `parent` is REQUIRED (revision id, or null for a new design).',\n '- `preview({ blockId, revision? })` — render a block to an inline image.',\n '- `export({ target, format, revision, blockId })` — render a block to pdf/image and write it into the workspace.',\n '- `save({ revision, outPath? })` — write a self-contained `.zip` archive (scene + assets) of a revision into the workspace.',\n '',\n 'Workspace tools (for resuming + navigating across designs):',\n '- `list()` — every design in the workspace, newest first.',\n '- `history({ revision })` — walk back to the root; how you re-ground after a rewind.',\n '- `inspect({ revision })` — read one revision in full, including the code that produced it (patterns, not block ids).',\n '- `rename({ revision, title })` — rename a design.',\n '- `open_editor({ revision? })` — URL the human can open to view the design.',\n '- `asset_search({ sourceId?, query? })` — browse asset sources; apply results in `edit`.'\n ]\n .concat(\n hasAssetGenerate\n ? [\n '',\n 'Asset generation:',\n \"- `asset_generate({ kind: 'image', prompt, width?, height? })` — opt-in (Local needs API_KEY); Hosted is cost-gated.\"\n ]\n : []\n )\n .join('\\n');\n\n // Build the resource map up-front: URI → rewritten markdown body. Cross-refs\n // inside doc content are rewritten to absolute MCP URIs so the model never\n // has to resolve a relative path against a doc dir.\n const rewrittenContent = new Map<string, string>();\n for (const [key, content] of Object.entries(assets)) {\n const m = key.match(DOC_FILE);\n if (!m) continue;\n const [, doc, rest] = m;\n const uri = `${scheme}://docs/${doc}/${rest}`;\n rewrittenContent.set(uri, rewriteSkillLinks(content, doc, scheme));\n }\n\n // Index prompts by name (frontmatter `name`, falling back to filename).\n const prompts = new Map<string, { description: string; body: string }>();\n for (const [key, content] of Object.entries(assets)) {\n const m = key.match(PROMPT_FILE);\n if (!m) continue;\n const front = parseFrontmatter(content);\n const name = front.name ?? m[1];\n prompts.set(name, {\n description: front.description ?? '',\n body: front.body\n });\n }\n\n const server = new Server(\n { name: 'codesign', version: opts.buildId ?? 'dev' },\n {\n capabilities: { resources: {}, prompts: {}, tools: {} },\n instructions\n }\n );\n\n // `resources/list` advertises only the per-skill SKILL.md (the entry\n // point), not the 392 nested cesdk-guide files. Sub-files stay readable\n // via `resources/read` against any cached URI, but skill content discovery\n // happens through the codesign_read_* tools — those are the universal\n // surface across MCP hosts.\n server.setRequestHandler(ListResourcesRequestSchema, async () => ({\n resources: Array.from(rewrittenContent.keys())\n .filter((uri) => uri.endsWith('/SKILL.md'))\n .map((uri) => ({\n uri,\n mimeType: 'text/markdown',\n name: uri.replace(`${scheme}://`, '')\n }))\n }));\n\n server.setRequestHandler(ReadResourceRequestSchema, async (req) => {\n const text = rewrittenContent.get(req.params.uri);\n if (text === undefined) {\n throw new McpError(\n ErrorCode.InvalidParams,\n `Unknown resource: ${req.params.uri}`\n );\n }\n return {\n contents: [{ uri: req.params.uri, mimeType: 'text/markdown', text }]\n };\n });\n\n server.setRequestHandler(ListPromptsRequestSchema, async () => ({\n prompts: Array.from(prompts.entries()).map(([name, p]) => ({\n name,\n description: p.description\n }))\n }));\n\n server.setRequestHandler(GetPromptRequestSchema, async (req) => {\n const p = prompts.get(req.params.name);\n if (!p) {\n throw new McpError(\n ErrorCode.InvalidParams,\n `Unknown prompt: ${req.params.name}`\n );\n }\n return {\n messages: [\n {\n role: 'user',\n content: { type: 'text', text: p.body }\n }\n ]\n };\n });\n\n // Tools registered with the server: caller-supplied design tools + the\n // auto-generated skill-read tools (one per skill in the asset bundle).\n // The skill tools always come first so Level 1 wording in the design tool\n // descriptions (\"call codesign_read_codesign_system first\") points at\n // something the model already sees in tools/list.\n const tools = new Map<string, CodesignMcpToolRegistration>();\n for (const t of buildSkillReadTools(assets)) tools.set(t.name, t);\n for (const t of opts.tools ?? []) tools.set(t.name, t);\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: Array.from(tools.values()).map((t) => ({\n name: t.name,\n description: t.description,\n inputSchema: t.inputSchema as never\n }))\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (req) => {\n const t = tools.get(req.params.name);\n if (!t) {\n throw new McpError(\n ErrorCode.InvalidParams,\n `Unknown tool: ${req.params.name}`\n );\n }\n // No recorder → byte-for-byte the original behaviour (the off-switch).\n if (!opts.metrics) return await t.call(req.params.arguments ?? {});\n\n const startedAt = performance.now();\n let ok = true;\n try {\n const res = await t.call(req.params.arguments ?? {});\n ok = res.isError !== true;\n return res;\n } catch (err) {\n ok = false;\n throw err;\n } finally {\n opts.metrics.record({\n tool: req.params.name,\n durationMs: performance.now() - startedAt,\n ok\n });\n }\n });\n\n return server;\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { CodesignMcpToolRegistration } from './server.js';
2
+ export declare function buildSkillReadTools(assets: Record<string, string>): CodesignMcpToolRegistration[];
3
+ //# sourceMappingURL=skill-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-tools.d.ts","sourceRoot":"","sources":["../src/skill-tools.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAiH/D,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,2BAA2B,EAAE,CAU/B"}
@@ -0,0 +1,105 @@
1
+ // Build doc-read tools from the codesign asset bundle. One tool per doc dir
2
+ // under `docs/`, named after the dir (handbook / api / guide). The tool's
3
+ // description is bespoke per doc so the model sees it in tools/list with a
4
+ // clear "when to use" hint.
5
+ //
6
+ // Path resolution: each tool defaults to returning the doc's SKILL.md body
7
+ // (the entry point). Pass `path` to read a sub-file relative to the doc dir
8
+ // (e.g. path="index.d.ts" for api, path="api/BlockAPI.md" for guide). Pass
9
+ // `offset` (skip count) + `limit` to slice large files like api/index.d.ts
10
+ // (~9000 lines).
11
+ const DOC_KEY = /^docs\/([^/]+)\/SKILL\.md$/;
12
+ const DOC_DESCRIPTIONS = {
13
+ handbook: 'Read this BEFORE your first `edit` call. Contains the Iris design loop ' +
14
+ '(read-API → edit → preview), the strict `edit` return contract, the typeface ' +
15
+ 'object shape required by setFont, page geometry / font sizes for print-quality PDF ' +
16
+ 'output, the common operations cheatsheet, and the runtime quirks that frequently trip ' +
17
+ 'up first attempts. No args.',
18
+ api: 'Look up CE.SDK CreativeEngine TypeScript signatures. Defaults to SKILL.md (an overview). ' +
19
+ 'Pass `path: "index.d.ts"` to read the full type definition file (~9000 lines); slice ' +
20
+ 'with `offset` (skip count: offset=10 starts at line 11) and `limit`.',
21
+ guide: 'Read CE.SDK Vanilla JavaScript reference docs and topic guides. Defaults to SKILL.md ' +
22
+ '(which lists available sub-paths). Pass `path: "api/BlockAPI.md"`, ' +
23
+ '`path: "text/custom-fonts.md"`, `path: "fills/..."`, etc. for specific topics.'
24
+ };
25
+ function detectDocs(assets) {
26
+ const docs = [];
27
+ for (const key of Object.keys(assets)) {
28
+ const m = key.match(DOC_KEY);
29
+ if (!m)
30
+ continue;
31
+ const dir = m[1];
32
+ docs.push({
33
+ dir,
34
+ toolName: dir,
35
+ description: DOC_DESCRIPTIONS[dir] ??
36
+ `Read the ${dir} doc from the codesign asset bundle.`
37
+ });
38
+ }
39
+ docs.sort((a, b) => a.dir.localeCompare(b.dir));
40
+ return docs;
41
+ }
42
+ function readDocFile(assets, docDir, args) {
43
+ const subpath = args.path ?? 'SKILL.md';
44
+ const key = `docs/${docDir}/${subpath}`;
45
+ const body = assets[key];
46
+ if (body === undefined) {
47
+ return {
48
+ isError: true,
49
+ content: [
50
+ {
51
+ type: 'text',
52
+ text: `not found: ${subpath} in ${docDir}. Read SKILL.md (default path) for an overview of available files.`
53
+ }
54
+ ]
55
+ };
56
+ }
57
+ if (typeof args.offset === 'number' || typeof args.limit === 'number') {
58
+ const lines = body.split('\n');
59
+ // `offset` is a SKIP count (offset=10 means "drop the first 10 lines,
60
+ // start at line 11"). `limit` caps how many lines to return.
61
+ const start = Math.max(0, args.offset ?? 0);
62
+ const end = args.limit !== undefined ? start + Math.max(0, args.limit) : lines.length;
63
+ return {
64
+ content: [{ type: 'text', text: lines.slice(start, end).join('\n') }]
65
+ };
66
+ }
67
+ return { content: [{ type: 'text', text: body }] };
68
+ }
69
+ const READ_INPUT_SCHEMA = {
70
+ type: 'object',
71
+ properties: {
72
+ path: {
73
+ type: 'string',
74
+ description: 'Optional sub-path within the skill directory. Defaults to SKILL.md.'
75
+ },
76
+ offset: {
77
+ type: 'integer',
78
+ minimum: 1,
79
+ description: '1-based line number to start reading from. Use with `limit` to slice large files.'
80
+ },
81
+ limit: {
82
+ type: 'integer',
83
+ minimum: 1,
84
+ description: 'Maximum number of lines to return.'
85
+ }
86
+ },
87
+ additionalProperties: false
88
+ };
89
+ const NO_ARGS_SCHEMA = {
90
+ type: 'object',
91
+ properties: {},
92
+ additionalProperties: false
93
+ };
94
+ export function buildSkillReadTools(assets) {
95
+ return detectDocs(assets).map((spec) => ({
96
+ name: spec.toolName,
97
+ description: spec.description,
98
+ inputSchema: spec.dir === 'handbook' ? NO_ARGS_SCHEMA : READ_INPUT_SCHEMA,
99
+ call: async (rawArgs) => {
100
+ const args = (rawArgs ?? {});
101
+ return readDocFile(assets, spec.dir, spec.dir === 'handbook' ? {} : args);
102
+ }
103
+ }));
104
+ }
105
+ //# sourceMappingURL=skill-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-tools.js","sourceRoot":"","sources":["../src/skill-tools.ts"],"names":[],"mappings":"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","sourcesContent":["// Build doc-read tools from the codesign asset bundle. One tool per doc dir\n// under `docs/`, named after the dir (handbook / api / guide). The tool's\n// description is bespoke per doc so the model sees it in tools/list with a\n// clear \"when to use\" hint.\n//\n// Path resolution: each tool defaults to returning the doc's SKILL.md body\n// (the entry point). Pass `path` to read a sub-file relative to the doc dir\n// (e.g. path=\"index.d.ts\" for api, path=\"api/BlockAPI.md\" for guide). Pass\n// `offset` (skip count) + `limit` to slice large files like api/index.d.ts\n// (~9000 lines).\n\nimport type { CodesignMcpToolRegistration } from './server.js';\n\nconst DOC_KEY = /^docs\\/([^/]+)\\/SKILL\\.md$/;\n\ninterface DocSpec {\n dir: string;\n toolName: string;\n description: string;\n}\n\nconst DOC_DESCRIPTIONS: Record<string, string> = {\n handbook:\n 'Read this BEFORE your first `edit` call. Contains the Iris design loop ' +\n '(read-API → edit → preview), the strict `edit` return contract, the typeface ' +\n 'object shape required by setFont, page geometry / font sizes for print-quality PDF ' +\n 'output, the common operations cheatsheet, and the runtime quirks that frequently trip ' +\n 'up first attempts. No args.',\n api:\n 'Look up CE.SDK CreativeEngine TypeScript signatures. Defaults to SKILL.md (an overview). ' +\n 'Pass `path: \"index.d.ts\"` to read the full type definition file (~9000 lines); slice ' +\n 'with `offset` (skip count: offset=10 starts at line 11) and `limit`.',\n guide:\n 'Read CE.SDK Vanilla JavaScript reference docs and topic guides. Defaults to SKILL.md ' +\n '(which lists available sub-paths). Pass `path: \"api/BlockAPI.md\"`, ' +\n '`path: \"text/custom-fonts.md\"`, `path: \"fills/...\"`, etc. for specific topics.'\n};\n\nfunction detectDocs(assets: Record<string, string>): DocSpec[] {\n const docs: DocSpec[] = [];\n for (const key of Object.keys(assets)) {\n const m = key.match(DOC_KEY);\n if (!m) continue;\n const dir = m[1];\n docs.push({\n dir,\n toolName: dir,\n description:\n DOC_DESCRIPTIONS[dir] ??\n `Read the ${dir} doc from the codesign asset bundle.`\n });\n }\n docs.sort((a, b) => a.dir.localeCompare(b.dir));\n return docs;\n}\n\ninterface ReadArgs {\n path?: string;\n offset?: number;\n limit?: number;\n}\n\nfunction readDocFile(\n assets: Record<string, string>,\n docDir: string,\n args: ReadArgs\n): { content: { type: 'text'; text: string }[]; isError?: boolean } {\n const subpath = args.path ?? 'SKILL.md';\n const key = `docs/${docDir}/${subpath}`;\n const body = assets[key];\n if (body === undefined) {\n return {\n isError: true,\n content: [\n {\n type: 'text',\n text: `not found: ${subpath} in ${docDir}. Read SKILL.md (default path) for an overview of available files.`\n }\n ]\n };\n }\n if (typeof args.offset === 'number' || typeof args.limit === 'number') {\n const lines = body.split('\\n');\n // `offset` is a SKIP count (offset=10 means \"drop the first 10 lines,\n // start at line 11\"). `limit` caps how many lines to return.\n const start = Math.max(0, args.offset ?? 0);\n const end =\n args.limit !== undefined ? start + Math.max(0, args.limit) : lines.length;\n return {\n content: [{ type: 'text', text: lines.slice(start, end).join('\\n') }]\n };\n }\n return { content: [{ type: 'text', text: body }] };\n}\n\nconst READ_INPUT_SCHEMA = {\n type: 'object' as const,\n properties: {\n path: {\n type: 'string' as const,\n description:\n 'Optional sub-path within the skill directory. Defaults to SKILL.md.'\n },\n offset: {\n type: 'integer' as const,\n minimum: 1,\n description:\n '1-based line number to start reading from. Use with `limit` to slice large files.'\n },\n limit: {\n type: 'integer' as const,\n minimum: 1,\n description: 'Maximum number of lines to return.'\n }\n },\n additionalProperties: false\n};\n\nconst NO_ARGS_SCHEMA = {\n type: 'object' as const,\n properties: {},\n additionalProperties: false\n};\n\nexport function buildSkillReadTools(\n assets: Record<string, string>\n): CodesignMcpToolRegistration[] {\n return detectDocs(assets).map((spec) => ({\n name: spec.toolName,\n description: spec.description,\n inputSchema: spec.dir === 'handbook' ? NO_ARGS_SCHEMA : READ_INPUT_SCHEMA,\n call: async (rawArgs) => {\n const args = (rawArgs ?? {}) as ReadArgs;\n return readDocFile(assets, spec.dir, spec.dir === 'handbook' ? {} : args);\n }\n }));\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dispatcher.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher.test.d.ts","sourceRoot":"","sources":["../../../../test/cli/dispatcher.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { describe, expect, it } from 'vitest';
5
+ const here = path.dirname(fileURLToPath(import.meta.url));
6
+ const CLI = path.resolve(here, '..', '..', 'dist', 'cli.js');
7
+ function run(args) {
8
+ const r = spawnSync('node', [CLI, ...args], {
9
+ encoding: 'utf8',
10
+ // Don't inherit env — the bare/--help/unknown paths must succeed
11
+ // regardless of CESDK_LICENSE etc., since they don't actually start a
12
+ // transport.
13
+ env: { PATH: process.env.PATH ?? '' },
14
+ timeout: 5000
15
+ });
16
+ return {
17
+ code: r.status ?? -1,
18
+ stdout: r.stdout ?? '',
19
+ stderr: r.stderr ?? ''
20
+ };
21
+ }
22
+ describe('codesign-mcp dispatcher', () => {
23
+ it('prints usage and exits 0 for --help', () => {
24
+ const r = run(['--help']);
25
+ expect(r.code).toBe(0);
26
+ expect(r.stdout).toContain('Usage: codesign-mcp');
27
+ expect(r.stdout).toContain('stdio');
28
+ expect(r.stdout).toContain('http');
29
+ });
30
+ it('prints usage and exits 0 for -h', () => {
31
+ const r = run(['-h']);
32
+ expect(r.code).toBe(0);
33
+ expect(r.stdout).toContain('Usage: codesign-mcp');
34
+ });
35
+ it('prints usage to stderr and exits 2 when no subcommand is given', () => {
36
+ const r = run([]);
37
+ expect(r.code).toBe(2);
38
+ expect(r.stderr).toContain('missing subcommand');
39
+ expect(r.stderr).toContain('Usage: codesign-mcp');
40
+ });
41
+ it('rejects unknown subcommand with stderr + exit 2', () => {
42
+ const r = run(['bogus']);
43
+ expect(r.code).toBe(2);
44
+ expect(r.stderr).toContain('unknown subcommand "bogus"');
45
+ });
46
+ });
47
+ //# sourceMappingURL=dispatcher.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher.test.js","sourceRoot":"","sources":["../../../../test/cli/dispatcher.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawnSync } from 'node:child_process';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { describe, expect, it } from 'vitest';\n\nconst here = path.dirname(fileURLToPath(import.meta.url));\nconst CLI = path.resolve(here, '..', '..', 'dist', 'cli.js');\n\nfunction run(args: string[]): { code: number; stdout: string; stderr: string } {\n const r = spawnSync('node', [CLI, ...args], {\n encoding: 'utf8',\n // Don't inherit env — the bare/--help/unknown paths must succeed\n // regardless of CESDK_LICENSE etc., since they don't actually start a\n // transport.\n env: { PATH: process.env.PATH ?? '' },\n timeout: 5000\n });\n return {\n code: r.status ?? -1,\n stdout: r.stdout ?? '',\n stderr: r.stderr ?? ''\n };\n}\n\ndescribe('codesign-mcp dispatcher', () => {\n it('prints usage and exits 0 for --help', () => {\n const r = run(['--help']);\n expect(r.code).toBe(0);\n expect(r.stdout).toContain('Usage: codesign-mcp');\n expect(r.stdout).toContain('stdio');\n expect(r.stdout).toContain('http');\n });\n\n it('prints usage and exits 0 for -h', () => {\n const r = run(['-h']);\n expect(r.code).toBe(0);\n expect(r.stdout).toContain('Usage: codesign-mcp');\n });\n\n it('prints usage to stderr and exits 2 when no subcommand is given', () => {\n const r = run([]);\n expect(r.code).toBe(2);\n expect(r.stderr).toContain('missing subcommand');\n expect(r.stderr).toContain('Usage: codesign-mcp');\n });\n\n it('rejects unknown subcommand with stderr + exit 2', () => {\n const r = run(['bogus']);\n expect(r.code).toBe(2);\n expect(r.stderr).toContain('unknown subcommand \"bogus\"');\n });\n});\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cross-ref.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cross-ref.test.d.ts","sourceRoot":"","sources":["../../../test/cross-ref.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,39 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { rewriteSkillLinks } from '../src/cross-ref.js';
3
+ describe('rewriteSkillLinks', () => {
4
+ const skill = 'guide';
5
+ const scheme = 'codesign';
6
+ it('rewrites bare relative .md path in markdown link', () => {
7
+ const out = rewriteSkillLinks('[a](animation.md)', skill, scheme);
8
+ expect(out).toBe('[a](codesign://docs/guide/animation.md)');
9
+ });
10
+ it('rewrites ./-prefixed relative path', () => {
11
+ const out = rewriteSkillLinks('[a](./animation.md)', skill, scheme);
12
+ expect(out).toBe('[a](codesign://docs/guide/animation.md)');
13
+ });
14
+ it('rewrites subdirectory path', () => {
15
+ const out = rewriteSkillLinks('[a](api/types.md)', skill, scheme);
16
+ expect(out).toBe('[a](codesign://docs/guide/api/types.md)');
17
+ });
18
+ it('leaves absolute URLs untouched', () => {
19
+ const out = rewriteSkillLinks('[a](https://x.test/y)', skill, scheme);
20
+ expect(out).toBe('[a](https://x.test/y)');
21
+ });
22
+ it('leaves anchors untouched', () => {
23
+ const out = rewriteSkillLinks('[a](#section)', skill, scheme);
24
+ expect(out).toBe('[a](#section)');
25
+ });
26
+ it('leaves paths that escape the skill dir untouched', () => {
27
+ const out = rewriteSkillLinks('[a](../other-skill/x.md)', skill, scheme);
28
+ expect(out).toBe('[a](../other-skill/x.md)');
29
+ });
30
+ it('leaves absolute paths untouched', () => {
31
+ const out = rewriteSkillLinks('[a](/abs/path.md)', skill, scheme);
32
+ expect(out).toBe('[a](/abs/path.md)');
33
+ });
34
+ it('rewrites multiple links in one body', () => {
35
+ const out = rewriteSkillLinks('see [a](a.md) and [b](b.md)', skill, scheme);
36
+ expect(out).toBe('see [a](codesign://docs/guide/a.md) and [b](codesign://docs/guide/b.md)');
37
+ });
38
+ });
39
+ //# sourceMappingURL=cross-ref.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cross-ref.test.js","sourceRoot":"","sources":["../../../test/cross-ref.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC;IACtB,MAAM,MAAM,GAAG,UAAU,CAAC;IAE1B,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,GAAG,GAAG,iBAAiB,CAAC,mBAAmB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAClE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,GAAG,GAAG,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACpE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,GAAG,GAAG,iBAAiB,CAAC,mBAAmB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAClE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,GAAG,GAAG,iBAAiB,CAAC,uBAAuB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACtE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,GAAG,GAAG,iBAAiB,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,GAAG,GAAG,iBAAiB,CAAC,0BAA0B,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACzE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,GAAG,GAAG,iBAAiB,CAAC,mBAAmB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAClE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,GAAG,GAAG,iBAAiB,CAAC,6BAA6B,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC5E,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CACd,yEAAyE,CAC1E,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { describe, expect, it } from 'vitest';\nimport { rewriteSkillLinks } from '../src/cross-ref.js';\n\ndescribe('rewriteSkillLinks', () => {\n const skill = 'guide';\n const scheme = 'codesign';\n\n it('rewrites bare relative .md path in markdown link', () => {\n const out = rewriteSkillLinks('[a](animation.md)', skill, scheme);\n expect(out).toBe('[a](codesign://docs/guide/animation.md)');\n });\n\n it('rewrites ./-prefixed relative path', () => {\n const out = rewriteSkillLinks('[a](./animation.md)', skill, scheme);\n expect(out).toBe('[a](codesign://docs/guide/animation.md)');\n });\n\n it('rewrites subdirectory path', () => {\n const out = rewriteSkillLinks('[a](api/types.md)', skill, scheme);\n expect(out).toBe('[a](codesign://docs/guide/api/types.md)');\n });\n\n it('leaves absolute URLs untouched', () => {\n const out = rewriteSkillLinks('[a](https://x.test/y)', skill, scheme);\n expect(out).toBe('[a](https://x.test/y)');\n });\n\n it('leaves anchors untouched', () => {\n const out = rewriteSkillLinks('[a](#section)', skill, scheme);\n expect(out).toBe('[a](#section)');\n });\n\n it('leaves paths that escape the skill dir untouched', () => {\n const out = rewriteSkillLinks('[a](../other-skill/x.md)', skill, scheme);\n expect(out).toBe('[a](../other-skill/x.md)');\n });\n\n it('leaves absolute paths untouched', () => {\n const out = rewriteSkillLinks('[a](/abs/path.md)', skill, scheme);\n expect(out).toBe('[a](/abs/path.md)');\n });\n\n it('rewrites multiple links in one body', () => {\n const out = rewriteSkillLinks('see [a](a.md) and [b](b.md)', skill, scheme);\n expect(out).toBe(\n 'see [a](codesign://docs/guide/a.md) and [b](codesign://docs/guide/b.md)'\n );\n });\n});\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=session.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.test.d.ts","sourceRoot":"","sources":["../../../../test/engine/session.test.ts"],"names":[],"mappings":""}