@astryxdesign/cli 0.6.4 → 0.6.5-canary.00f1ed9

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 (405) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +103 -95
  3. package/api/build/_adapter.d.mts +36 -2
  4. package/api/build/_adapter.mjs +41 -10
  5. package/api/build/build.doc.mjs +8 -3
  6. package/api/build/build.test.mjs +60 -2
  7. package/api/build/kit/kit.mjs +109 -26
  8. package/api/build/kit/rank.d.mts +24 -8
  9. package/api/build/kit/rank.mjs +277 -97
  10. package/api/build/kit/rank.test.mjs +231 -48
  11. package/api/component/_adapter.d.mts +25 -0
  12. package/api/component/_adapter.mjs +59 -5
  13. package/api/component/component.d.mts +6 -3
  14. package/api/component/component.doc.mjs +37 -17
  15. package/api/component/component.mjs +249 -9
  16. package/api/component/component.type.d.mts +25 -0
  17. package/api/component/component.type.mjs +44 -0
  18. package/api/discover/_adapter.d.mts +114 -6
  19. package/api/discover/_adapter.mjs +372 -17
  20. package/api/discover/_adapter.test.mjs +215 -0
  21. package/api/discover/_catalog-view.d.mts +115 -0
  22. package/api/discover/_catalog-view.mjs +203 -0
  23. package/api/discover/_catalog-view.test.mjs +128 -0
  24. package/api/discover/detail/detail.d.mts +18 -6
  25. package/api/discover/detail/detail.mjs +67 -13
  26. package/api/discover/detail/detail.test.mjs +85 -0
  27. package/api/discover/detail/item/item.d.mts +26 -0
  28. package/api/discover/detail/item/item.mjs +78 -0
  29. package/api/discover/detail/item/item.test.mjs +73 -0
  30. package/api/discover/discover.d.mts +3 -9
  31. package/api/discover/discover.doc.mjs +61 -18
  32. package/api/discover/discover.mjs +220 -36
  33. package/api/discover/discover.test.mjs +11 -2
  34. package/api/discover/discover.type.d.mts +147 -8
  35. package/api/discover/discover.type.mjs +102 -12
  36. package/api/discover/list/list.d.mts +20 -6
  37. package/api/discover/list/list.mjs +45 -12
  38. package/api/discover/list/list.test.mjs +46 -0
  39. package/api/discover/search/search.d.mts +18 -16
  40. package/api/discover/search/search.mjs +102 -56
  41. package/api/discover/search/search.test.mjs +144 -10
  42. package/api/docs/_adapter.d.mts +8 -3
  43. package/api/docs/_adapter.mjs +14 -6
  44. package/api/docs/docOverlays.test.mjs +27 -1
  45. package/api/docs/docs.doc.mjs +2 -2
  46. package/api/docs/docs.test.mjs +54 -18
  47. package/api/docs/integration-tree.test.mjs +17 -0
  48. package/api/docs/integrationDocs.test.mjs +27 -5
  49. package/api/doctor/doctor.d.mts +8 -3
  50. package/api/doctor/doctor.doc.mjs +17 -8
  51. package/api/doctor/doctor.mjs +90 -9
  52. package/api/doctor/doctor.test.mjs +122 -10
  53. package/api/doctor/doctor.type.d.mts +1 -1
  54. package/api/doctor/doctor.type.mjs +1 -1
  55. package/api/error.d.mts +22 -0
  56. package/api/error.mjs +42 -0
  57. package/api/gap-report/gap-report.doc.mjs +19 -10
  58. package/api/hook/hook.doc.mjs +6 -3
  59. package/api/index.d.mts +1 -0
  60. package/api/index.mjs +5 -3
  61. package/api/init/init.doc.mjs +17 -12
  62. package/api/integration/add-contribution.d.mts +2 -1
  63. package/api/integration/add-contribution.mjs +7 -3
  64. package/api/integration/add-contribution.test.mjs +3 -3
  65. package/api/integration/add-helpers.d.mts +5 -2
  66. package/api/integration/add-helpers.mjs +36 -9
  67. package/api/integration/add-theme.mjs +266 -23
  68. package/api/integration/add-theme.test.mjs +247 -0
  69. package/api/integration/authoring-checks.mjs +12 -9
  70. package/api/integration/authoring-checks.type.d.mts +8 -0
  71. package/api/integration/authoring-checks.type.mjs +7 -3
  72. package/api/integration/integration-authoring.type.d.mts +4 -1
  73. package/api/integration/integration-authoring.type.mjs +6 -1
  74. package/api/integration/integrationAdd.doc.mjs +6 -0
  75. package/api/integration/integrationAddTheme.doc.mjs +10 -0
  76. package/api/integration/integrationComponentConflicts.doc.mjs +1 -1
  77. package/api/integration/integrationDocConflicts.doc.mjs +1 -1
  78. package/api/integration/integrationPackCheck.doc.mjs +3 -3
  79. package/api/integration/integrationTemplateConflicts.doc.mjs +1 -1
  80. package/api/integration/pack-check.lifecycle-output.test.mjs +107 -0
  81. package/api/integration/pack-check.mjs +92 -10
  82. package/api/integration/pack-check.test.mjs +140 -1
  83. package/api/integration/pack-check.type.mjs +1 -1
  84. package/api/integration/validate-integration.d.mts +4 -2
  85. package/api/integration/validate-integration.mjs +7 -2
  86. package/api/integration/validate-integration.test.mjs +55 -0
  87. package/api/integration/validate-integration.type.d.mts +5 -0
  88. package/api/integration/validate-integration.type.mjs +5 -1
  89. package/api/integration/validateIntegration.doc.mjs +1 -1
  90. package/api/json/assertResponse.doc.mjs +1 -1
  91. package/api/json/isError.doc.mjs +1 -1
  92. package/api/layout/expand/expand.mjs +12 -7
  93. package/api/layout/expand/expand.receipt.test.mjs +74 -0
  94. package/api/layout/layout.type.d.mts +1 -0
  95. package/api/layout/layout.type.mjs +1 -0
  96. package/api/layout/layoutExpand.doc.mjs +1 -1
  97. package/api/search/search.d.mts +51 -1
  98. package/api/search/search.doc.mjs +2 -2
  99. package/api/search/search.mjs +299 -17
  100. package/api/search/search.test.mjs +216 -18
  101. package/api/swizzle/copy/copy.mjs +66 -3
  102. package/api/swizzle/swizzle.doc.mjs +11 -5
  103. package/api/template/copy/copy.mjs +15 -9
  104. package/api/template/copy/copy.receipt.test.mjs +77 -0
  105. package/api/template/copy/copy.test.mjs +9 -0
  106. package/api/template/show/show.mjs +15 -4
  107. package/api/template/show/show.test.mjs +76 -0
  108. package/api/template/template-integration.test.mjs +14 -0
  109. package/api/template/template.d.mts +1 -1
  110. package/api/template/template.doc.mjs +8 -3
  111. package/api/template/template.mjs +1 -0
  112. package/api/template/template.type.d.mts +2 -0
  113. package/api/template/template.type.mjs +2 -0
  114. package/api/theme/add/add.mjs +17 -25
  115. package/api/theme/add/add.rollback.test.mjs +158 -0
  116. package/api/theme/add/add.staging.test.mjs +40 -23
  117. package/api/theme/build/build.d.mts +24 -0
  118. package/api/theme/build/build.family.test.mjs +7 -12
  119. package/api/theme/build/build.mjs +243 -26
  120. package/api/theme/build/build.project-core.test.mjs +165 -0
  121. package/api/theme/build/build.rollback.test.mjs +148 -0
  122. package/api/theme/generateTonalPalette.doc.mjs +1 -2
  123. package/api/theme/listThemes.doc.mjs +1 -1
  124. package/api/theme/themeAdd.doc.mjs +9 -10
  125. package/api/theme/themeBuild.doc.mjs +13 -13
  126. package/api/theme/themeList.doc.mjs +1 -1
  127. package/api/theme/themeListAvailable.doc.mjs +2 -1
  128. package/api/theme/themePaletteGenerate.doc.mjs +15 -8
  129. package/api/theme/themeTargets.doc.mjs +3 -2
  130. package/api/theme/themeTemplate.doc.mjs +2 -1
  131. package/api/upgrade/run/files-changed.test.mjs +111 -0
  132. package/api/upgrade/run/run.mjs +25 -6
  133. package/api/upgrade/run/run.test.mjs +45 -1
  134. package/api/upgrade/upgrade.doc.mjs +24 -22
  135. package/api/upgrade/upgrade.type.d.mts +1 -0
  136. package/api/upgrade/upgrade.type.mjs +3 -2
  137. package/assets/codemods/__tests__/runner.test.mjs +3 -1
  138. package/assets/codemods/file-count.test.mjs +163 -0
  139. package/assets/codemods/integration-runner.mjs +3 -3
  140. package/assets/codemods/runner.mjs +5 -4
  141. package/assets/docs/README.md +4 -2
  142. package/assets/docs/browser-support.doc.mjs +11 -11
  143. package/assets/docs/color.doc.mjs +8 -2
  144. package/assets/docs/elevation.doc.mjs +6 -4
  145. package/assets/docs/getting-started.doc.mjs +5 -16
  146. package/assets/docs/icons.doc.mjs +3 -21
  147. package/assets/docs/illustrations.doc.mjs +7 -15
  148. package/assets/docs/internationalization.doc.mjs +7 -5
  149. package/assets/docs/layout.doc.dense.mjs +130 -82
  150. package/assets/docs/layout.doc.mjs +133 -77
  151. package/assets/docs/migration.doc.mjs +19 -21
  152. package/assets/docs/motion.doc.mjs +16 -3
  153. package/assets/docs/principles.doc.dense.mjs +5 -5
  154. package/assets/docs/principles.doc.mjs +8 -0
  155. package/assets/docs/principles.doc.zh.mjs +6 -6
  156. package/assets/docs/shape.doc.mjs +8 -3
  157. package/assets/docs/spacing.doc.mjs +7 -2
  158. package/assets/docs/styling-libraries.doc.mjs +6 -2
  159. package/assets/docs/styling.doc.mjs +19 -23
  160. package/assets/docs/theme.doc.dense.mjs +58 -18
  161. package/assets/docs/theme.doc.mjs +57 -47
  162. package/assets/docs/theme.doc.zh.mjs +9 -8
  163. package/assets/docs/tokens.doc.dense.mjs +2 -2
  164. package/assets/docs/tokens.doc.mjs +389 -8
  165. package/assets/docs/tokens.doc.zh.mjs +2 -2
  166. package/assets/docs/tree/add-a-component.doc.mjs +75 -0
  167. package/assets/docs/tree/add-a-theme.doc.mjs +85 -0
  168. package/assets/docs/tree/add-a-topic.doc.mjs +144 -0
  169. package/assets/docs/tree/agent-guidance.doc.mjs +138 -0
  170. package/assets/docs/tree/block-template.doc.mjs +130 -0
  171. package/assets/docs/tree/build-the-template.doc.mjs +28 -0
  172. package/assets/docs/tree/building-blocks.doc.mjs +46 -0
  173. package/assets/docs/tree/check-your-docs.doc.mjs +137 -0
  174. package/assets/docs/tree/checks.doc.mjs +119 -0
  175. package/assets/docs/tree/codemods.doc.mjs +147 -0
  176. package/assets/docs/tree/component-family.doc.mjs +113 -0
  177. package/assets/docs/tree/component-imports.doc.mjs +69 -0
  178. package/assets/docs/tree/component-lookups.doc.mjs +149 -0
  179. package/assets/docs/tree/components.doc.mjs +23 -0
  180. package/assets/docs/tree/configuration.doc.mjs +23 -0
  181. package/assets/docs/tree/debug-and-gap-reports.doc.mjs +182 -0
  182. package/assets/docs/tree/define-the-theme.doc.mjs +118 -0
  183. package/assets/docs/tree/describe-the-component.doc.mjs +57 -0
  184. package/assets/docs/tree/docs.doc.mjs +21 -0
  185. package/assets/docs/tree/document-the-template.doc.mjs +28 -0
  186. package/assets/docs/tree/document-the-theme.doc.mjs +68 -0
  187. package/assets/docs/tree/export-template-assets.doc.mjs +147 -0
  188. package/assets/docs/tree/extend-or-replace.doc.mjs +103 -0
  189. package/assets/docs/tree/fonts-and-assets.doc.mjs +106 -0
  190. package/assets/docs/tree/generate-a-palette.doc.mjs +66 -0
  191. package/assets/docs/tree/grade-template-with-agent.doc.mjs +105 -0
  192. package/assets/docs/tree/help.doc.mjs +16 -0
  193. package/assets/docs/tree/integrations.doc.mjs +25 -451
  194. package/assets/docs/tree/links.doc.mjs +98 -0
  195. package/assets/docs/tree/package-and-test.doc.mjs +32 -0
  196. package/assets/docs/tree/page-template.doc.mjs +71 -0
  197. package/assets/docs/tree/publishing.doc.mjs +111 -0
  198. package/assets/docs/tree/quick-start.doc.mjs +272 -0
  199. package/assets/docs/tree/replace-a-core-component.doc.mjs +104 -0
  200. package/assets/docs/tree/replace-a-core-template.doc.mjs +172 -0
  201. package/assets/docs/tree/sections-and-placement.doc.mjs +108 -0
  202. package/assets/docs/tree/see-it-in-an-app.doc.mjs +59 -0
  203. package/assets/docs/tree/ship.doc.mjs +16 -0
  204. package/assets/docs/tree/short-and-findable.doc.mjs +108 -0
  205. package/assets/docs/tree/single-component.doc.mjs +165 -0
  206. package/assets/docs/tree/start-a-template.doc.mjs +143 -0
  207. package/assets/docs/tree/subcomponent.doc.mjs +115 -0
  208. package/assets/docs/tree/template-assets.doc.mjs +64 -0
  209. package/assets/docs/tree/template-doc-overview.doc.mjs +121 -0
  210. package/assets/docs/tree/template-fonts.doc.mjs +102 -0
  211. package/assets/docs/tree/template-grading-rubric.doc.mjs +452 -0
  212. package/assets/docs/tree/template-icons.doc.mjs +97 -0
  213. package/assets/docs/tree/template-images-media.doc.mjs +127 -0
  214. package/assets/docs/tree/template-styles.doc.mjs +93 -0
  215. package/assets/docs/tree/templates.doc.mjs +34 -0
  216. package/assets/docs/tree/test-in-an-app.doc.mjs +115 -0
  217. package/assets/docs/tree/test-template-in-app.doc.mjs +128 -0
  218. package/assets/docs/tree/themes.doc.mjs +39 -0
  219. package/assets/docs/tree/troubleshooting.doc.mjs +153 -0
  220. package/assets/docs/tree/upgrading.doc.mjs +103 -0
  221. package/assets/docs/tree/use-a-theme-in-an-app.doc.mjs +51 -0
  222. package/assets/docs/tree/verify-packed-template.doc.mjs +77 -0
  223. package/assets/docs/tree/versioning.doc.mjs +162 -0
  224. package/assets/docs/tree/write-good-templates.doc.mjs +64 -0
  225. package/assets/docs/tree/write-the-template-file.doc.mjs +154 -0
  226. package/assets/docs/typography.doc.mjs +24 -4
  227. package/assets/docs/working-with-ai.doc.mjs +30 -22
  228. package/assets/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.tsx +1 -1
  229. package/assets/templates/pages/ai-chat/template.doc.mjs +16 -1
  230. package/assets/templates/pages/ai-chat-landing/template.doc.mjs +9 -1
  231. package/assets/templates/pages/blank/template.doc.mjs +3 -1
  232. package/assets/templates/pages/canvas-editor/template.doc.mjs +9 -1
  233. package/assets/templates/pages/centered-hero/template.doc.mjs +3 -1
  234. package/assets/templates/pages/checkout-wizard/template.doc.mjs +1 -0
  235. package/assets/templates/pages/classic-gallery/template.doc.mjs +3 -1
  236. package/assets/templates/pages/contact-form/template.doc.mjs +16 -1
  237. package/assets/templates/pages/dashboard/template.doc.mjs +15 -1
  238. package/assets/templates/pages/dashboard-alert-rail/template.doc.mjs +23 -1
  239. package/assets/templates/pages/dashboard-cohort-funnel/template.doc.mjs +10 -1
  240. package/assets/templates/pages/dashboard-comparison/template.doc.mjs +9 -1
  241. package/assets/templates/pages/dashboard-composition/template.doc.mjs +10 -1
  242. package/assets/templates/pages/dashboard-progress/template.doc.mjs +17 -1
  243. package/assets/templates/pages/dashboard-scorecard/template.doc.mjs +2 -1
  244. package/assets/templates/pages/detail-page/template.doc.mjs +8 -0
  245. package/assets/templates/pages/documentation/template.doc.mjs +10 -1
  246. package/assets/templates/pages/documentation-design/template.doc.mjs +10 -1
  247. package/assets/templates/pages/documentation-technical/template.doc.mjs +10 -1
  248. package/assets/templates/pages/editor/template.doc.mjs +9 -1
  249. package/assets/templates/pages/file-explorer/template.doc.mjs +3 -1
  250. package/assets/templates/pages/form-two-column/template.doc.mjs +17 -1
  251. package/assets/templates/pages/form-wizard/template.doc.mjs +14 -1
  252. package/assets/templates/pages/form-wizard-dialog/template.doc.mjs +1 -0
  253. package/assets/templates/pages/gallery-hero/template.doc.mjs +10 -1
  254. package/assets/templates/pages/ide/template.doc.mjs +9 -1
  255. package/assets/templates/pages/incident-console/template.doc.mjs +10 -1
  256. package/assets/templates/pages/kanban-board/template.doc.mjs +11 -1
  257. package/assets/templates/pages/library/template.doc.mjs +15 -1
  258. package/assets/templates/pages/login/template.doc.mjs +10 -1
  259. package/assets/templates/pages/login-card/template.doc.mjs +11 -1
  260. package/assets/templates/pages/login-split/template.doc.mjs +10 -1
  261. package/assets/templates/pages/login-sso/template.doc.mjs +10 -1
  262. package/assets/templates/pages/messaging-shell/template.doc.mjs +11 -1
  263. package/assets/templates/pages/mixed-gallery/template.doc.mjs +10 -1
  264. package/assets/templates/pages/payment-form/template.doc.mjs +3 -1
  265. package/assets/templates/pages/product-detail/template.doc.mjs +9 -1
  266. package/assets/templates/pages/product-gallery/template.doc.mjs +10 -1
  267. package/assets/templates/pages/settings/template.doc.mjs +3 -1
  268. package/assets/templates/pages/settings-dialog/template.doc.mjs +9 -1
  269. package/assets/templates/pages/settings-sidebar/template.doc.mjs +9 -1
  270. package/assets/templates/pages/shell-nav/template.doc.mjs +10 -1
  271. package/assets/templates/pages/shell-side-nav/template.doc.mjs +14 -1
  272. package/assets/templates/pages/shell-top-nav/template.doc.mjs +11 -1
  273. package/assets/templates/pages/side-gallery/template.doc.mjs +3 -1
  274. package/assets/templates/pages/table/template.doc.mjs +11 -1
  275. package/assets/templates/pages/table-filter/template.doc.mjs +21 -1
  276. package/assets/templates/pages/table-grouped/template.doc.mjs +15 -1
  277. package/assets/templates/pages/table-inbox/template.doc.mjs +18 -6
  278. package/assets/templates/pages/table-page/template.doc.mjs +20 -1
  279. package/assets/templates/pages/table-tree/template.doc.mjs +14 -1
  280. package/assets/templates/pages/theme-showcase/template.doc.mjs +10 -1
  281. package/assets/templates/pages/work-item-detail/template.doc.mjs +10 -0
  282. package/assets/templates/themes/butter/icons.tsx +2 -0
  283. package/assets/templates/themes/chocolate/icons.tsx +2 -0
  284. package/assets/templates/themes/gothic/icons.tsx +2 -0
  285. package/assets/templates/themes/matcha/icons.tsx +2 -0
  286. package/assets/templates/themes/neutral/icons.tsx +2 -0
  287. package/assets/templates/themes/stone/icons.tsx +2 -0
  288. package/assets/templates/themes/y2k/icons.tsx +2 -0
  289. package/authoring/config/config.doc.mjs +9 -1
  290. package/authoring/config/parse.d.mts +2 -0
  291. package/authoring/config/parse.mjs +19 -0
  292. package/authoring/config/parse.test.mjs +8 -0
  293. package/authoring/config/type.ts +11 -0
  294. package/authoring/discover/discover.doc.d.mts +13 -0
  295. package/authoring/discover/discover.doc.mjs +138 -0
  296. package/authoring/discover/parse.d.mts +24 -0
  297. package/authoring/discover/parse.mjs +128 -0
  298. package/authoring/discover/parse.test.mjs +124 -0
  299. package/authoring/discover/type.ts +87 -0
  300. package/authoring/doctypes/_schema.d.mts +3 -2
  301. package/authoring/doctypes/_schema.mjs +6 -0
  302. package/authoring/doctypes/base/graph-fields.doc.mjs +3 -3
  303. package/authoring/doctypes/base/type.ts +4 -2
  304. package/authoring/doctypes/component/component.doc.mjs +6 -0
  305. package/authoring/doctypes/component/type.ts +8 -0
  306. package/authoring/doctypes/reference/reference.doc.mjs +7 -0
  307. package/authoring/doctypes/reference/type.ts +5 -0
  308. package/authoring/doctypes/schema/schema.doc.mjs +2 -2
  309. package/authoring/doctypes/template/parse.d.mts +2 -0
  310. package/authoring/doctypes/template/parse.mjs +1 -0
  311. package/authoring/doctypes/template/parse.test.mjs +21 -0
  312. package/authoring/doctypes/template/template.doc.mjs +7 -1
  313. package/authoring/doctypes/template/type.ts +12 -2
  314. package/authoring/index.d.mts +1 -0
  315. package/authoring/index.d.ts +10 -0
  316. package/authoring/index.mjs +1 -0
  317. package/authoring/integration/integration.doc.mjs +12 -10
  318. package/clients/cli/commands/component/index.mjs +152 -55
  319. package/clients/cli/commands/component-batch.test.mjs +341 -0
  320. package/clients/cli/commands/component-ownership.test.mjs +89 -0
  321. package/clients/cli/commands/component.doc.mjs +27 -9
  322. package/clients/cli/commands/discover.doc.mjs +53 -9
  323. package/clients/cli/commands/discover.mjs +393 -118
  324. package/clients/cli/commands/discover.sources.test.mjs +267 -0
  325. package/clients/cli/commands/docs.doc.mjs +1 -1
  326. package/clients/cli/commands/docs.mjs +60 -17
  327. package/clients/cli/commands/docs.test.mjs +113 -24
  328. package/clients/cli/commands/doctor-integration-docs.doc.mjs +3 -2
  329. package/clients/cli/commands/doctor-integration.test.mjs +53 -0
  330. package/clients/cli/commands/doctor.doc.mjs +3 -1
  331. package/clients/cli/commands/doctor.mjs +53 -9
  332. package/clients/cli/commands/gap-report.doc.mjs +10 -9
  333. package/clients/cli/commands/init.doc.mjs +9 -6
  334. package/clients/cli/commands/integration-add.doc.mjs +17 -7
  335. package/clients/cli/commands/integration-authoring.test.mjs +70 -9
  336. package/clients/cli/commands/integration-pack.doc.mjs +5 -9
  337. package/clients/cli/commands/integration-real-world.test.mjs +1 -1
  338. package/clients/cli/commands/integration-verify.doc.mjs +22 -0
  339. package/clients/cli/commands/integration.doc.mjs +4 -4
  340. package/clients/cli/commands/integration.mjs +76 -43
  341. package/clients/cli/commands/layout-expand.doc.mjs +3 -1
  342. package/clients/cli/commands/layout.expand-receipt.test.mjs +94 -0
  343. package/clients/cli/commands/layout.mjs +16 -0
  344. package/clients/cli/commands/manifest.doc.mjs +1 -1
  345. package/clients/cli/commands/search.doc.mjs +10 -3
  346. package/clients/cli/commands/search.mjs +21 -2
  347. package/clients/cli/commands/search.test.mjs +21 -4
  348. package/clients/cli/commands/swizzle.doc.mjs +1 -1
  349. package/clients/cli/commands/template.copy-receipt.test.mjs +60 -0
  350. package/clients/cli/commands/template.doc.mjs +1 -1
  351. package/clients/cli/commands/template.mjs +19 -5
  352. package/clients/cli/commands/template.show-media.test.mjs +62 -0
  353. package/clients/cli/commands/text-json-parity.test.mjs +7 -1
  354. package/clients/cli/commands/theme-add.doc.mjs +1 -1
  355. package/clients/cli/commands/theme-palette-generate.doc.mjs +3 -2
  356. package/clients/cli/commands/theme-palette.doc.mjs +1 -2
  357. package/clients/cli/commands/theme-targets.doc.mjs +2 -2
  358. package/clients/cli/commands/theme.doc.mjs +2 -1
  359. package/clients/cli/commands/upgrade.ascii-output.test.mjs +14 -0
  360. package/clients/cli/commands/upgrade.doc.mjs +62 -3
  361. package/clients/cli/commands/write-failure.test.mjs +175 -0
  362. package/clients/cli/index.mjs +28 -6
  363. package/clients/cli/lib/define-command.mjs +28 -4
  364. package/clients/cli/lib/define-command.test.mjs +54 -0
  365. package/clients/cli/lib/exit-codes.test.mjs +17 -1
  366. package/clients/cli/lib/json-shim.mjs +24 -14
  367. package/clients/cli/lib/manifest.mjs +48 -156
  368. package/clients/cli/lib/manifest.test.mjs +103 -9
  369. package/clients/cli/lib/parse-error-format.test.mjs +81 -0
  370. package/foundation/agent-docs/agent-docs.mjs +1 -1
  371. package/foundation/agent-docs/agent-docs.test.mjs +3 -2
  372. package/foundation/discovery/authoring-self-docs.mjs +1 -0
  373. package/foundation/discovery/authoring-self-docs.test.mjs +6 -2
  374. package/foundation/discovery/cli-self-docs.mjs +16 -2
  375. package/foundation/discovery/cli-self-docs.test.mjs +20 -0
  376. package/foundation/discovery/docs-discovery.mjs +5 -1
  377. package/foundation/discovery/docs-discovery.test.mjs +21 -0
  378. package/foundation/discovery/docs-section-key.d.mts +1 -1
  379. package/foundation/discovery/docs-section-key.mjs +1 -1
  380. package/foundation/discovery/template-adapter.d.mts +14 -0
  381. package/foundation/discovery/template-adapter.fixture-refs.test.mjs +37 -1
  382. package/foundation/discovery/template-adapter.mjs +21 -1
  383. package/foundation/doc-compiler/doc-loads.test.mjs +5 -4
  384. package/foundation/doc-compiler/inputs.test.mjs +0 -1
  385. package/foundation/doc-compiler/tree.d.mts +4 -0
  386. package/foundation/doc-compiler/tree.mjs +6 -1
  387. package/foundation/doc-compiler/tree.test.mjs +65 -14
  388. package/foundation/integrations/cli-requirement.d.mts +75 -11
  389. package/foundation/integrations/cli-requirement.mjs +120 -23
  390. package/foundation/integrations/cli-requirement.test.mjs +141 -9
  391. package/foundation/integrations/contribution-inventory.mjs +1 -1
  392. package/foundation/integrations/integrations.d.mts +14 -1
  393. package/foundation/integrations/integrations.mjs +41 -1
  394. package/foundation/integrations/integrations.test.mjs +31 -0
  395. package/foundation/response/batch.type.d.mts +33 -0
  396. package/foundation/response/batch.type.mjs +34 -0
  397. package/foundation/response/error-codes.doc.mjs +6 -8
  398. package/foundation/response/error-codes.test.mjs +30 -5
  399. package/foundation/response/response-types.doc.d.mts +5 -4
  400. package/foundation/response/response-types.doc.mjs +49 -19
  401. package/foundation/response/response-types.doc.test.mjs +23 -0
  402. package/foundation/response/response.doc.mjs +11 -10
  403. package/package.json +9 -9
  404. package/assets/docs/tree/integrations.test.mjs +0 -62
  405. package/assets/docs/tree/writing-docs.doc.mjs +0 -286
@@ -95,7 +95,7 @@ function legacyTitleMatchIndex(sections, query) {
95
95
 
96
96
  /**
97
97
  * A name as a docs-tree route segment: lowercase words joined by hyphens, so
98
- * `integrationPackCheck` and `integration pack` both read naturally.
98
+ * `integrationPackCheck` and `integration verify` both read naturally.
99
99
  * @param {string} name
100
100
  * @returns {string}
101
101
  */
@@ -49,6 +49,19 @@ export function effectiveTemplateDiscovery(templates: DiscoveredTemplate[]): Dis
49
49
  * @returns {string} Source with demo asset references replaced.
50
50
  */
51
51
  export function stripTemplateAssetRefs(source: string): string;
52
+ /**
53
+ * {@link stripTemplateAssetRefs}, plus how many references it replaced: one per
54
+ * replaced reference, however many fixture paths its URL carries (a reference
55
+ * is replaced whole, query included), and none for a prose mention or a
56
+ * third-party URL left as written. That count is what a receipt discloses.
57
+ *
58
+ * @param {string} source - Template source code.
59
+ * @returns {{source: string, demoMediaReplaced: number}}
60
+ */
61
+ export function replaceDemoMedia(source: string): {
62
+ source: string;
63
+ demoMediaReplaced: number;
64
+ };
52
65
  /**
53
66
  * List the core page-template directory names (sorted). The `template --list`
54
67
  * view discovers far more; this is the minimal core-page set `init` scaffolds
@@ -173,6 +186,7 @@ export type DiscoveredTemplate = {
173
186
  name: string;
174
187
  displayName?: string | undefined;
175
188
  description: string;
189
+ keywords?: string[] | undefined;
176
190
  category?: string | undefined;
177
191
  isReady?: boolean | undefined;
178
192
  scaffold?: boolean | undefined;
@@ -5,7 +5,7 @@ import * as fs from 'node:fs';
5
5
  import * as path from 'node:path';
6
6
  import {fileURLToPath} from 'node:url';
7
7
  import jscodeshift from 'jscodeshift';
8
- import {stripTemplateAssetRefs} from './template-adapter.mjs';
8
+ import {replaceDemoMedia, stripTemplateAssetRefs} from './template-adapter.mjs';
9
9
 
10
10
  const PLACEHOLDER = stripTemplateAssetRefs("'/template-assets/x.png'").slice(
11
11
  1,
@@ -212,6 +212,42 @@ describe('stripTemplateAssetRefs fixture references', () => {
212
212
  });
213
213
  });
214
214
 
215
+ describe('replaceDemoMedia', () => {
216
+ it('counts a reference once, however many fixture paths its URL carries', () => {
217
+ const source =
218
+ "const hero = '/template-assets/a.png?f=/template-assets/b.png';";
219
+ expect(replaceDemoMedia(source)).toEqual({
220
+ source: stripTemplateAssetRefs(source),
221
+ demoMediaReplaced: 1,
222
+ });
223
+ });
224
+
225
+ it('counts a poster and a video as two references', () => {
226
+ const source =
227
+ '<video poster="/template-assets/poster.jpg" src="/template-assets/clip.mp4" />';
228
+ const result = replaceDemoMedia(source);
229
+ expect(result).toEqual({
230
+ source: stripTemplateAssetRefs(source),
231
+ demoMediaReplaced: 2,
232
+ });
233
+ expect(result.source).not.toContain('/template-assets/');
234
+ });
235
+
236
+ it.each([
237
+ [
238
+ 'a prose mention',
239
+ '<p>Demo media lives under /template-assets/ in the docsite.</p>',
240
+ ],
241
+ [
242
+ 'a third-party URL',
243
+ "const u = 'https://example.com/template-assets/a.png';",
244
+ ],
245
+ ['source with no fixture', 'const x = 1;'],
246
+ ])('counts nothing for %s it leaves as written', (_label, source) => {
247
+ expect(replaceDemoMedia(source)).toEqual({source, demoMediaReplaced: 0});
248
+ });
249
+ });
250
+
215
251
  describe('shipped templates', () => {
216
252
  it('copy with every fixture replaced and still parse', () => {
217
253
  const root = path.resolve(
@@ -102,6 +102,7 @@ export function effectiveTemplateDiscovery(templates) {
102
102
  * @property {string} name
103
103
  * @property {string} [displayName]
104
104
  * @property {string} description
105
+ * @property {string[]} [keywords]
105
106
  * @property {string} [category]
106
107
  * @property {boolean} [isReady]
107
108
  * @property {boolean} [scaffold]
@@ -320,9 +321,23 @@ function toPosixPath(p) {
320
321
  * @returns {string} Source with demo asset references replaced.
321
322
  */
322
323
  export function stripTemplateAssetRefs(source) {
324
+ return replaceDemoMedia(source).source;
325
+ }
326
+
327
+ /**
328
+ * {@link stripTemplateAssetRefs}, plus how many references it replaced: one per
329
+ * replaced reference, however many fixture paths its URL carries (a reference
330
+ * is replaced whole, query included), and none for a prose mention or a
331
+ * third-party URL left as written. That count is what a receipt discloses.
332
+ *
333
+ * @param {string} source - Template source code.
334
+ * @returns {{source: string, demoMediaReplaced: number}}
335
+ */
336
+ export function replaceDemoMedia(source) {
323
337
  const needle = `/${FIXTURE_SEGMENT}`;
324
338
  let output = '';
325
339
  let copied = 0;
340
+ let demoMediaReplaced = 0;
326
341
  /** @type {Array<[number, number]> | undefined} */
327
342
  let comments;
328
343
  let at = source.indexOf(needle);
@@ -343,10 +358,11 @@ export function stripTemplateAssetRefs(source) {
343
358
  if (edit) {
344
359
  output += source.slice(copied, start) + edit.text;
345
360
  copied = edit.end;
361
+ demoMediaReplaced += 1;
346
362
  }
347
363
  at = source.indexOf(needle, end);
348
364
  }
349
- return output + source.slice(copied);
365
+ return {source: output + source.slice(copied), demoMediaReplaced};
350
366
  }
351
367
 
352
368
  /** @param {string | undefined} char */
@@ -633,6 +649,7 @@ async function discoverPages() {
633
649
  name: doc?.name || dir.name,
634
650
  description: doc?.description || '',
635
651
  category: doc?.category || '',
652
+ keywords: doc?.keywords ?? [],
636
653
  isReady: doc?.isReady ?? true,
637
654
  scaffold: doc?.scaffold ?? false,
638
655
  filePath: path.join(dirPath, 'page.tsx'),
@@ -661,6 +678,7 @@ async function discoverBlocks() {
661
678
  dirName: basename,
662
679
  name: doc?.name || basename,
663
680
  description: doc?.description || '',
681
+ keywords: doc?.keywords ?? [],
664
682
  isReady: doc?.isReady ?? true,
665
683
  aspectRatio: doc?.aspectRatio ?? 1,
666
684
  componentsUsed: doc?.componentsUsed ?? [],
@@ -702,6 +720,7 @@ async function discoverExternalBlocks(cwd = process.cwd()) {
702
720
  dirName: basename,
703
721
  name: doc?.name || basename,
704
722
  description: doc?.description || '',
723
+ keywords: doc?.keywords ?? [],
705
724
  isReady: doc?.isReady ?? true,
706
725
  aspectRatio: doc?.aspectRatio ?? 1,
707
726
  componentsUsed: doc?.componentsUsed ?? [],
@@ -1269,6 +1288,7 @@ export async function discoverIntegrationTemplatesForOne(integration) {
1269
1288
  name: doc?.name || id,
1270
1289
  displayName: doc?.displayName,
1271
1290
  description: doc?.description || '',
1291
+ keywords: doc?.keywords ?? [],
1272
1292
  category: doc?.category || '',
1273
1293
  isReady: doc?.isReady ?? true,
1274
1294
  scaffold: doc?.scaffold ?? false,
@@ -53,21 +53,21 @@ const RUNNERS = {
53
53
  sites: ['import(node:child_process)', 'worker_threads.Worker'],
54
54
  },
55
55
  'api/integration/pack-check.mjs': {
56
- runs: '`npm pack`, `tar`, and a Node script that resolves the packed specifiers, to check a package as published',
57
- sites: ['child_process.spawnSync ×3'],
56
+ runs: '`npm pack`, `tar`, and a Node script that resolves the packed specifiers, to check a package as published, and the package\'s doc modules, to see which need a newer CLI',
57
+ sites: ['child_process.spawnSync ×3', 'loadTopicModule'],
58
58
  },
59
59
  'api/swizzle/_github.mjs': {
60
60
  runs: '`gh auth status`, to check the GitHub CLI is signed in',
61
61
  sites: ['child_process.execFileSync'],
62
62
  },
63
63
  'api/theme/build/build.mjs': {
64
- runs: 'theme source modules, through jiti; eval for legacy theme object literals',
64
+ runs: "theme source modules, through jiti; eval for legacy theme object literals; the project's installed Core",
65
65
  sites: [
66
66
  '.evalModule() ×2',
67
67
  '.import()',
68
68
  'createJiti ×4',
69
69
  'eval ×2',
70
- 'import(<computed>)',
70
+ 'import(<computed>) ×3',
71
71
  ],
72
72
  },
73
73
  'api/theme/build/core-interception.mjs': {
@@ -188,6 +188,7 @@ const RUNNERS = {
188
188
  'import ../../../api/integration/integrationPackCheck.doc.mjs',
189
189
  'import ./integration-add.doc.mjs',
190
190
  'import ./integration-pack.doc.mjs',
191
+ 'import ./integration-verify.doc.mjs',
191
192
  'import ./integration.doc.mjs',
192
193
  ],
193
194
  },
@@ -90,7 +90,6 @@ describe('collectDocInputs over what this repo ships', () => {
90
90
  ).toEqual([
91
91
  'Chat',
92
92
  'ChatComposerTokenElement',
93
- 'Code',
94
93
  'ContextMenuItem',
95
94
  'Heading',
96
95
  'Indicator',
@@ -240,6 +240,10 @@ export type TreeNode = {
240
240
  name: string;
241
241
  title: string;
242
242
  summary: string;
243
+ /**
244
+ * an authored namespace's search keywords
245
+ */
246
+ keywords?: string[] | undefined;
243
247
  /**
244
248
  * the parent's route; null at the top
245
249
  */
@@ -58,7 +58,7 @@ export const KIND_GROUPS = Object.freeze({
58
58
  schema: {
59
59
  segment: 'schemas',
60
60
  title: 'Schemas',
61
- summary: 'Every shape the CLI reads or returns, field by field.',
61
+ summary: 'Data shapes, field by field.',
62
62
  },
63
63
  enum: {
64
64
  segment: 'enums',
@@ -140,6 +140,7 @@ export const UNORGANIZED = 'unorganized';
140
140
  * @property {string} name
141
141
  * @property {string} title
142
142
  * @property {string} summary
143
+ * @property {string[]} [keywords] an authored namespace's search keywords
143
144
  * @property {string | null} parent the parent's route; null at the top
144
145
  * @property {string | null} slot the parent slot this node sits in
145
146
  * @property {number | null} order
@@ -420,10 +421,14 @@ export function buildDocsTree({namespaces, docs, topics = []}) {
420
421
  name: input.doc.name,
421
422
  title: input.doc.title,
422
423
  summary: input.doc.summary,
424
+ ...(Array.isArray(input.doc.keywords)
425
+ ? {keywords: input.doc.keywords}
426
+ : {}),
423
427
  parent: parentRoute,
424
428
  slot: home?.slot ?? null,
425
429
  order: home?.order ?? null,
426
430
  generated: false,
431
+ ref: {selfDoc: input.doc},
427
432
  slots: Object.entries(input.doc.slots).map(([name, slot]) => ({
428
433
  name,
429
434
  title: slot.title,
@@ -13,6 +13,8 @@
13
13
  */
14
14
 
15
15
  import {describe, expect, it} from 'vitest';
16
+ import * as fs from 'node:fs';
17
+ import * as path from 'node:path';
16
18
  import {
17
19
  buildDocsTree,
18
20
  KIND_GROUPS,
@@ -494,12 +496,38 @@ describe("the CLI's own docs tree", () => {
494
496
  const tree = await loadDocsTree({fresh: true});
495
497
  expect(tree.diagnostics).toEqual([]);
496
498
  expect(tree.roots().map(node => node.route)).toEqual(['cli']);
499
+ // Every slot child is a node one level below the namespace that places
500
+ // it, and every node but the root is placed. Read from the tree, so a
501
+ // restructure of the guides does not need this test edited.
502
+ const nodes = [...tree.nodes.values()];
503
+ const placed = new Set();
504
+ const misplaced = [];
505
+ for (const node of nodes) {
506
+ for (const slot of node.slots ?? []) {
507
+ for (const child of slot.children) {
508
+ placed.add(child);
509
+ const rest = child.slice(node.route.length + 1);
510
+ if (
511
+ tree.get(child) == null ||
512
+ !child.startsWith(`${node.route}/`) ||
513
+ rest.includes('/')
514
+ ) {
515
+ misplaced.push(`${node.route} › ${slot.name} › ${child}`);
516
+ }
517
+ }
518
+ }
519
+ }
520
+ expect(misplaced).toEqual([]);
497
521
  expect(
498
- tree.get('cli')?.slots.map(slot => [slot.name, slot.children]),
499
- ).toEqual([
500
- ['guides', ['cli/integrations', 'cli/writing-docs']],
501
- ['reference', ['cli/commands', 'cli/api']],
502
- ]);
522
+ nodes
523
+ .map(node => node.route)
524
+ .filter(route => route !== 'cli' && !placed.has(route)),
525
+ ).toEqual([]);
526
+ // The reference groups the CLI generates from its own typed docs.
527
+ expect(
528
+ tree.get('cli')?.slots.find(slot => slot.name === 'reference')
529
+ ?.children,
530
+ ).toEqual(['cli/commands', 'cli/api']);
503
531
  expect(tree.get('cli/api')?.slots[0].children).toEqual([
504
532
  'cli/api/functions',
505
533
  'cli/api/schemas',
@@ -560,15 +588,38 @@ describe("the CLI's own docs tree", () => {
560
588
  async () => {
561
589
  const inputs = await loadTreeInputs({selfDocs: false});
562
590
  expect(inputs.diagnostics).toEqual([]);
563
- expect(inputs.namespaces.map(n => n.doc.name).sort()).toEqual([
564
- 'api',
565
- 'cli',
566
- 'commands',
567
- ]);
568
- expect(inputs.docs.map(d => [d.name, d.placement?.parent])).toEqual([
569
- ['integrations', 'namespace:cli'],
570
- ['writing-docs', 'namespace:cli'],
571
- ]);
591
+ // Every doc file in the tree directory is read, as a namespace or a
592
+ // guide, and named after its file.
593
+ const records = [
594
+ ...inputs.namespaces.map(n => ({name: n.doc.name, source: n.source})),
595
+ ...inputs.docs.map(d => ({name: d.name, source: d.source})),
596
+ ];
597
+ const files = fs
598
+ .readdirSync(new URL('../../assets/docs/tree/', import.meta.url))
599
+ .filter(file => file.endsWith('.doc.mjs'))
600
+ .sort();
601
+ expect(
602
+ records.map(record => path.basename(String(record.source))).sort(),
603
+ ).toEqual(files);
604
+ expect(
605
+ records.filter(
606
+ record =>
607
+ path.basename(String(record.source)) !== `${record.name}.doc.mjs`,
608
+ ),
609
+ ).toEqual([]);
610
+ expect(new Set(inputs.docs.map(d => d.kind))).toEqual(
611
+ new Set(['generic']),
612
+ );
613
+ // Every guide's parent is a namespace from the same directory.
614
+ const namespaces = new Set(
615
+ inputs.namespaces.map(n => `namespace:${n.doc.name}`),
616
+ );
617
+ expect(
618
+ inputs.docs
619
+ .filter(d => d.placement?.parent != null)
620
+ .filter(d => !namespaces.has(d.placement.parent))
621
+ .map(d => d.name),
622
+ ).toEqual([]);
572
623
  },
573
624
  SLOW,
574
625
  );
@@ -9,37 +9,101 @@
9
9
  * @returns {string | null}
10
10
  */
11
11
  export function lowestAdmitted(range: unknown): string | null;
12
+ /**
13
+ * Why a package that uses a feature an older CLI cannot read would lose it,
14
+ * or null when its declared CLI range admits only CLIs that read it.
15
+ * @param {any} pkg package.json
16
+ * @param {string} feature what the package does, e.g. "ships a namespace doc"
17
+ * @param {string} loss what an older CLI does with it
18
+ * @param {string} floor the first stable CLI release that reads it
19
+ * @returns {string | null}
20
+ */
21
+ export function cliRangeProblem(pkg: any, feature: string, loss: string, floor: string): string | null;
12
22
  /**
13
23
  * Why a package that ships a namespace doc or a placed guide would lose its
14
24
  * docs on an older CLI, or null when its declared CLI range admits only CLIs
15
25
  * that read the docs tree. Published 0.6.3 hides every topic of a package
16
26
  * with a namespace doc; builds of main before the docs tree also do so for a
17
- * placed guide.
27
+ * placed guide. Published 0.6.4 reads both.
18
28
  * @param {any} pkg package.json
19
29
  * @returns {string | null}
20
30
  */
21
31
  export function docsTreeCliProblem(pkg: any): string | null;
22
32
  /**
23
- * Why a package with a template that sets `replaces` would lose its templates
24
- * and doc topics on an older CLI (spec:AST-035), or null when its declared CLI
33
+ * Why a package with a template that sets `replaces` would lose templates and
34
+ * doc topics on an older CLI (spec:AST-035), or null when its declared CLI
25
35
  * range admits only CLIs that read the field.
26
36
  * @param {any} pkg package.json
27
37
  * @returns {string | null}
28
38
  */
29
39
  export function replacesCliProblem(pkg: any): string | null;
30
40
  /**
31
- * The package.json with a CLI peer that reads namespace docs: optional, unless
32
- * the package already says otherwise.
41
+ * Why a package with a doc section that sets `id` would lose its doc topics on
42
+ * an older CLI, or null when its declared CLI range admits only CLIs that read
43
+ * the field. Published 0.6.3 rejects a section `id` and hides every doc topic
44
+ * the package ships; published 0.6.4 reads it.
45
+ * @param {any} pkg package.json
46
+ * @returns {string | null}
47
+ */
48
+ export function sectionIdsCliProblem(pkg: any): string | null;
49
+ /**
50
+ * Why a package that ships a theme would lose its themes and doc topics on an
51
+ * older CLI, or null when its declared CLI range admits only CLIs that read
52
+ * typed theme descriptors. Published 0.6.3 rejects a themes root with no
53
+ * `manifest.json` catalog, which `integration add theme` no longer writes;
54
+ * published 0.6.4 reads the descriptors.
55
+ * @param {any} pkg package.json
56
+ * @returns {string | null}
57
+ */
58
+ export function themesCliProblem(pkg: any): string | null;
59
+ /**
60
+ * Why a package with a template that sets `keywords` would lose that template
61
+ * and its doc topics on an older CLI, or null when its declared CLI range
62
+ * admits only CLIs that read the field. Published 0.6.3 rejects the field,
63
+ * drops that template, and hides the package's doc topics.
64
+ * @param {any} pkg package.json
65
+ * @returns {string | null}
66
+ */
67
+ export function keywordsCliProblem(pkg: any): string | null;
68
+ /**
69
+ * The package.json with a CLI peer of `>=floor`: optional, unless the package
70
+ * already says otherwise. Call it only when the package's range admits a CLI
71
+ * before `floor`, so a stricter range is never lowered.
72
+ * @param {any} pkg package.json
73
+ * @param {string} floor the first stable CLI release the package needs
74
+ * @returns {any}
75
+ */
76
+ export function withCliPeer(pkg: any, floor: string): any;
77
+ /**
78
+ * The package.json with a CLI peer that reads namespace docs.
33
79
  * @param {any} pkg package.json
34
80
  * @returns {any}
35
81
  */
36
82
  export function withDocsTreeCli(pkg: any): any;
37
83
  export const CLI_PACKAGE: "@astryxdesign/cli";
38
84
  /**
39
- * The first CLI release that reads an integration's docs tree (namespace docs
40
- * and placed guides) and its templates' `replaces`. A release before it can
41
- * hide every doc topic a package with a namespace doc or a placed guide
42
- * ships, with no warning, and it rejects `replaces` and withholds the
43
- * package's templates and doc topics.
85
+ * The first stable CLI release that reads an integration's docs tree:
86
+ * namespace docs and placed guides. Published 0.6.3 rejects a namespace doc
87
+ * and hides every doc topic the package ships, with no warning; published
88
+ * 0.6.4 lists the namespace and reads its guides.
89
+ */
90
+ export const NAMESPACE_DOCS_CLI: "0.6.4";
91
+ /**
92
+ * The first CLI release that reads a template's `replaces` and `keywords`. A
93
+ * release before it rejects either field, drops that template, and hides the
94
+ * package's doc topics.
95
+ */
96
+ export const REPLACES_CLI: "0.7.0";
97
+ /**
98
+ * The first stable CLI release that reads typed theme descriptors, the theme
99
+ * folder `integration add theme` writes. Published 0.6.3 rejects a themes root
100
+ * with no `manifest.json` catalog and withholds the package's themes and doc
101
+ * topics; published 0.6.4 lists the themes.
102
+ */
103
+ export const THEMES_CLI: "0.6.4";
104
+ /**
105
+ * The first stable CLI release that reads a doc section's `id`. Published
106
+ * 0.6.3 rejects the field and hides every doc topic the package ships;
107
+ * published 0.6.4 reads the section by its id.
44
108
  */
45
- export const DOCS_TREE_CLI: "0.7.0";
109
+ export const SECTION_IDS_CLI: "0.6.4";