@astryxdesign/cli 0.6.3 → 0.6.4-canary.0e1fbdb

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 (728) hide show
  1. package/CHANGELOG.md +194 -0
  2. package/README.md +152 -107
  3. package/api/blog/blog.doc.mjs +1 -0
  4. package/api/build/_adapter.d.mts +50 -0
  5. package/api/build/_adapter.mjs +60 -0
  6. package/api/build/build.doc.mjs +22 -10
  7. package/api/build/build.test.mjs +219 -8
  8. package/api/build/build.type.d.mts +91 -2
  9. package/api/build/build.type.mjs +52 -8
  10. package/api/build/help/help.d.mts +12 -5
  11. package/api/build/help/help.mjs +69 -6
  12. package/api/build/kit/kit.d.mts +4 -1
  13. package/api/build/kit/kit.mjs +208 -53
  14. package/api/build/kit/rank.d.mts +44 -0
  15. package/api/build/kit/rank.mjs +432 -0
  16. package/api/build/kit/rank.test.mjs +196 -0
  17. package/api/component/_adapter.d.mts +31 -12
  18. package/api/component/_adapter.mjs +79 -15
  19. package/api/component/component.d.mts +6 -3
  20. package/api/component/component.doc.mjs +49 -19
  21. package/api/component/component.mjs +339 -22
  22. package/api/component/component.test.mjs +38 -0
  23. package/api/component/component.type.d.mts +47 -11
  24. package/api/component/component.type.mjs +76 -24
  25. package/api/component/detail/blocks/blocks.d.mts +2 -1
  26. package/api/component/detail/blocks/blocks.mjs +4 -3
  27. package/api/component/list/list.d.mts +0 -5
  28. package/api/component/list/list.mjs +40 -11
  29. package/api/discover/_adapter.d.mts +114 -6
  30. package/api/discover/_adapter.mjs +372 -17
  31. package/api/discover/_adapter.test.mjs +215 -0
  32. package/api/discover/_catalog-view.d.mts +115 -0
  33. package/api/discover/_catalog-view.mjs +203 -0
  34. package/api/discover/_catalog-view.test.mjs +128 -0
  35. package/api/discover/detail/detail.d.mts +18 -6
  36. package/api/discover/detail/detail.mjs +67 -13
  37. package/api/discover/detail/detail.test.mjs +85 -0
  38. package/api/discover/detail/item/item.d.mts +26 -0
  39. package/api/discover/detail/item/item.mjs +78 -0
  40. package/api/discover/detail/item/item.test.mjs +73 -0
  41. package/api/discover/discover.d.mts +3 -9
  42. package/api/discover/discover.doc.mjs +62 -18
  43. package/api/discover/discover.mjs +220 -36
  44. package/api/discover/discover.test.mjs +11 -2
  45. package/api/discover/discover.type.d.mts +150 -11
  46. package/api/discover/discover.type.mjs +107 -17
  47. package/api/discover/list/list.d.mts +20 -6
  48. package/api/discover/list/list.mjs +45 -12
  49. package/api/discover/list/list.test.mjs +46 -0
  50. package/api/discover/search/search.d.mts +18 -16
  51. package/api/discover/search/search.mjs +102 -56
  52. package/api/discover/search/search.test.mjs +144 -10
  53. package/api/docs/_adapter.d.mts +277 -41
  54. package/api/docs/_adapter.mjs +993 -108
  55. package/api/docs/compiled-topics.test.mjs +78 -0
  56. package/api/docs/detail/detail.mjs +22 -63
  57. package/api/docs/detail/section/section.d.mts +1 -1
  58. package/api/docs/detail/section/section.mjs +54 -19
  59. package/api/docs/detail/section/section.test.mjs +50 -0
  60. package/api/docs/docOverlays.test.mjs +27 -1
  61. package/api/docs/docs.d.mts +10 -3
  62. package/api/docs/docs.doc.mjs +55 -16
  63. package/api/docs/docs.mjs +53 -10
  64. package/api/docs/docs.type.d.mts +221 -5
  65. package/api/docs/docs.type.mjs +153 -11
  66. package/api/docs/index/index.d.mts +18 -0
  67. package/api/docs/index/index.mjs +40 -0
  68. package/api/docs/index/index.test.mjs +62 -0
  69. package/api/docs/list/list.mjs +28 -12
  70. package/api/docs/node/node.d.mts +43 -0
  71. package/api/docs/node/node.mjs +192 -0
  72. package/api/docs/reference-blocks.test.mjs +406 -0
  73. package/api/doctor/doctor.d.mts +104 -1
  74. package/api/doctor/doctor.doc.mjs +18 -8
  75. package/api/doctor/doctor.mjs +635 -7
  76. package/api/doctor/doctor.test.mjs +732 -11
  77. package/api/doctor/doctor.type.d.mts +1 -1
  78. package/api/doctor/doctor.type.mjs +1 -1
  79. package/api/gap-report/gap-report.doc.mjs +27 -14
  80. package/api/hook/_adapter.mjs +19 -5
  81. package/api/hook/hook.doc.mjs +7 -3
  82. package/api/hook/hook.type.d.mts +3 -3
  83. package/api/hook/hook.type.mjs +11 -11
  84. package/api/hook/list/list.d.mts +2 -2
  85. package/api/hook/list/list.mjs +69 -17
  86. package/api/index.d.mts +2 -1
  87. package/api/index.mjs +6 -3
  88. package/api/init/init.doc.mjs +22 -12
  89. package/api/init/init.test.mjs +41 -1
  90. package/api/init/remove/remove.mjs +1 -1
  91. package/api/init/run/run.mjs +20 -10
  92. package/api/integration/add-contribution.component-names.test.mjs +120 -0
  93. package/api/integration/add-contribution.d.mts +2 -1
  94. package/api/integration/add-contribution.mjs +130 -15
  95. package/api/integration/add-contribution.test.mjs +258 -7
  96. package/api/integration/add-helpers.d.mts +5 -2
  97. package/api/integration/add-helpers.mjs +36 -9
  98. package/api/integration/add-theme.mjs +56 -65
  99. package/api/integration/add-theme.test.mjs +139 -21
  100. package/api/integration/authoring-checks.mjs +138 -28
  101. package/api/integration/authoring-checks.test.mjs +179 -7
  102. package/api/integration/authoring-checks.type.mjs +6 -1
  103. package/api/integration/integration-authoring.type.d.mts +3 -1
  104. package/api/integration/integration-authoring.type.mjs +2 -0
  105. package/api/integration/integration-block-exports.test.mjs +10 -6
  106. package/api/integration/integrationAdd.doc.mjs +14 -4
  107. package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
  108. package/api/integration/integrationAddCodemod.doc.mjs +1 -0
  109. package/api/integration/integrationAddComponent.doc.mjs +2 -1
  110. package/api/integration/integrationAddDoc.doc.mjs +8 -1
  111. package/api/integration/integrationAddTemplate.doc.mjs +1 -0
  112. package/api/integration/integrationAddTheme.doc.mjs +6 -5
  113. package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
  114. package/api/integration/integrationDocConflicts.doc.mjs +2 -1
  115. package/api/integration/integrationPackCheck.doc.mjs +5 -4
  116. package/api/integration/integrationTemplateConflicts.doc.d.mts +3 -0
  117. package/api/integration/integrationTemplateConflicts.doc.mjs +4 -0
  118. package/api/integration/pack-check.lifecycle-output.test.mjs +107 -0
  119. package/api/integration/pack-check.mjs +160 -11
  120. package/api/integration/pack-check.test.mjs +477 -47
  121. package/api/integration/pack-check.type.d.mts +26 -2
  122. package/api/integration/pack-check.type.mjs +15 -2
  123. package/api/integration/summarizeIssues.doc.mjs +1 -0
  124. package/api/integration/template-conflict-compatibility.test.mjs +73 -0
  125. package/api/integration/validate-integration-fixes.test.mjs +1389 -0
  126. package/api/integration/validate-integration.mjs +52 -102
  127. package/api/integration/validate-integration.test.mjs +179 -26
  128. package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
  129. package/api/integration/validateIntegration.doc.mjs +3 -2
  130. package/api/json/assertResponse.doc.mjs +2 -1
  131. package/api/json/envelope-types.test.mjs +76 -0
  132. package/api/json/index.ts +2 -0
  133. package/api/json/isError.doc.mjs +2 -1
  134. package/api/json/parseResponse.doc.mjs +3 -2
  135. package/api/layout/_adapter.mjs +20 -5
  136. package/api/layout/expand/expand.mjs +7 -5
  137. package/api/layout/expand/expand.path-safety.test.mjs +53 -0
  138. package/api/layout/grammar/grammar.mjs +2 -1
  139. package/api/layout/layoutCheck.doc.mjs +1 -0
  140. package/api/layout/layoutExpand.doc.mjs +2 -1
  141. package/api/layout/layoutGrammar.doc.mjs +1 -0
  142. package/api/search/search-return-type.test.mjs +54 -0
  143. package/api/search/search.d.mts +89 -12
  144. package/api/search/search.doc.mjs +8 -2
  145. package/api/search/search.mjs +697 -97
  146. package/api/search/search.type.d.mts +15 -3
  147. package/api/search/search.type.mjs +5 -2
  148. package/api/swizzle/copy/copy.mjs +28 -11
  149. package/api/swizzle/swizzle.doc.mjs +8 -5
  150. package/api/swizzle/swizzle.type.d.mts +2 -2
  151. package/api/swizzle/swizzle.type.mjs +2 -2
  152. package/api/template/copy/copy.mjs +18 -24
  153. package/api/template/copy/copy.test.mjs +26 -0
  154. package/api/template/list/list.mjs +1 -0
  155. package/api/template/table-floating-bulk-actions.test.mjs +66 -0
  156. package/api/template/template-integration.test.mjs +1072 -3
  157. package/api/template/template-suffix.test.mjs +41 -21
  158. package/api/template/template.d.mts +1 -1
  159. package/api/template/template.doc.mjs +32 -9
  160. package/api/template/template.mjs +45 -8
  161. package/api/template/template.type.d.mts +12 -14
  162. package/api/template/template.type.mjs +15 -14
  163. package/api/theme/_adapter.d.mts +2 -3
  164. package/api/theme/_adapter.mjs +4 -5
  165. package/api/theme/add/add.binary.test.mjs +84 -0
  166. package/api/theme/add/add.mjs +31 -22
  167. package/api/theme/add/add.rollback.test.mjs +158 -0
  168. package/api/theme/add/add.staging.test.mjs +83 -0
  169. package/api/theme/add/add.test.mjs +14 -1
  170. package/api/theme/build/build.family.test.mjs +7 -12
  171. package/api/theme/build/build.mjs +140 -59
  172. package/api/theme/build/build.public-component-vars.test.mjs +1 -1
  173. package/api/theme/build/build.receipt-doc.test.mjs +111 -0
  174. package/api/theme/build/build.rollback.test.mjs +148 -0
  175. package/api/theme/build/build.test.mjs +127 -0
  176. package/api/theme/build/font-warning.mjs +3 -3
  177. package/api/theme/build/font-warning.test.mjs +5 -2
  178. package/api/theme/generateTonalPalette.doc.mjs +2 -2
  179. package/api/theme/integration-themes.test.mjs +39 -28
  180. package/api/theme/list/list.test.mjs +19 -20
  181. package/api/theme/listThemes.doc.mjs +6 -5
  182. package/api/theme/palette/generate/generate.mjs +8 -3
  183. package/api/theme/palette/generate/generate.test.mjs +96 -0
  184. package/api/theme/palette/generate/generator.d.mts +10 -13
  185. package/api/theme/palette/generate/generator.mjs +15 -4
  186. package/api/theme/palette/generate/generator.test.mjs +10 -0
  187. package/api/theme/template/template.mjs +11 -2
  188. package/api/theme/template/template.test.mjs +20 -0
  189. package/api/theme/theme.type.d.mts +170 -11
  190. package/api/theme/theme.type.mjs +94 -27
  191. package/api/theme/themeAdd.doc.mjs +12 -12
  192. package/api/theme/themeBuild.doc.mjs +21 -17
  193. package/api/theme/themeList.doc.mjs +6 -3
  194. package/api/theme/themeListAvailable.doc.mjs +6 -3
  195. package/api/theme/themePaletteGenerate.doc.mjs +16 -8
  196. package/api/theme/themeTargets.doc.mjs +4 -2
  197. package/api/theme/themeTemplate.doc.mjs +8 -3
  198. package/api/upgrade/_adapter.d.mts +32 -5
  199. package/api/upgrade/_adapter.mjs +139 -22
  200. package/api/upgrade/list/list.mjs +2 -1
  201. package/api/upgrade/list/list.test.mjs +73 -0
  202. package/api/upgrade/project-context.test.mjs +272 -0
  203. package/api/upgrade/provider-agreement.test.mjs +152 -0
  204. package/api/upgrade/run/files-changed.test.mjs +111 -0
  205. package/api/upgrade/run/run.mjs +358 -59
  206. package/api/upgrade/status/status.mjs +2 -2
  207. package/api/upgrade/upgrade.doc.mjs +32 -23
  208. package/api/upgrade/upgrade.type.d.mts +43 -5
  209. package/api/upgrade/upgrade.type.mjs +29 -13
  210. package/assets/codemods/__tests__/registry.test.mjs +1 -0
  211. package/assets/codemods/__tests__/runner.test.mjs +332 -8
  212. package/assets/codemods/file-count.test.mjs +163 -0
  213. package/assets/codemods/integration-discovery.mjs +48 -4
  214. package/assets/codemods/integration-discovery.test.mjs +73 -0
  215. package/assets/codemods/integration-runner.mjs +59 -7
  216. package/assets/codemods/integration-runner.protection.test.mjs +153 -0
  217. package/assets/codemods/registry.mjs +1 -0
  218. package/assets/codemods/run-codemod.mjs +177 -34
  219. package/assets/codemods/runner.mjs +353 -104
  220. package/assets/codemods/term-log.mjs +32 -8
  221. package/assets/codemods/term-log.test.mjs +19 -1
  222. package/assets/codemods/transform-prop.mjs +109 -0
  223. package/assets/codemods/transform-prop.test.mjs +95 -0
  224. package/assets/codemods/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +86 -165
  225. package/assets/codemods/transforms/v0.0.14/rename-status-variants.mjs +72 -210
  226. package/assets/codemods/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +83 -115
  227. package/assets/codemods/transforms/v0.1.8/rename-avatar-size-scale.mjs +57 -186
  228. package/assets/codemods/transforms/v0.3.0/__tests__/unwrap-authoring-factories.test.mjs +27 -5
  229. package/assets/codemods/transforms/v0.3.0/unwrap-authoring-factories.mjs +20 -5
  230. package/assets/codemods/transforms/v0.6.0/__tests__/next-codemods.test.mjs +47 -0
  231. package/assets/codemods/transforms/v0.6.0/rename-resizable-pixel-bounds.mjs +57 -10
  232. package/assets/codemods/transforms/v0.6.4/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
  233. package/assets/codemods/transforms/v0.6.4/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
  234. package/assets/codemods/transforms/v0.6.4/index.mjs +31 -0
  235. package/assets/codemods/transforms/v0.6.4/migrate-native-picker-to-presentation.mjs +148 -0
  236. package/assets/codemods/transforms/v0.6.4/migrate-theme-catalog-to-descriptors.mjs +141 -0
  237. package/assets/docs/README.md +12 -1
  238. package/assets/docs/authoring.doc.mjs +14 -0
  239. package/assets/docs/browser-support.doc.mjs +11 -11
  240. package/assets/docs/color.doc.mjs +8 -2
  241. package/assets/docs/elevation.doc.mjs +6 -4
  242. package/assets/docs/getting-started.doc.mjs +6 -17
  243. package/assets/docs/icons.doc.mjs +2 -21
  244. package/assets/docs/illustrations.doc.mjs +7 -15
  245. package/assets/docs/internationalization.doc.mjs +7 -5
  246. package/assets/docs/layout.doc.dense.mjs +132 -84
  247. package/assets/docs/layout.doc.mjs +134 -78
  248. package/assets/docs/migration.doc.mjs +19 -21
  249. package/assets/docs/motion.doc.mjs +16 -3
  250. package/assets/docs/principles.doc.dense.mjs +5 -5
  251. package/assets/docs/principles.doc.mjs +14 -6
  252. package/assets/docs/principles.doc.zh.mjs +6 -6
  253. package/assets/docs/shape.doc.mjs +8 -3
  254. package/assets/docs/spacing.doc.mjs +7 -2
  255. package/assets/docs/styling-libraries.doc.mjs +10 -6
  256. package/assets/docs/styling.doc.mjs +22 -26
  257. package/assets/docs/theme.doc.dense.mjs +58 -18
  258. package/assets/docs/theme.doc.mjs +60 -50
  259. package/assets/docs/theme.doc.zh.mjs +9 -8
  260. package/assets/docs/tokens.doc.dense.mjs +2 -2
  261. package/assets/docs/tokens.doc.mjs +390 -9
  262. package/assets/docs/tokens.doc.zh.mjs +2 -2
  263. package/assets/docs/tree/add-a-component.doc.mjs +75 -0
  264. package/assets/docs/tree/add-a-theme.doc.mjs +85 -0
  265. package/assets/docs/tree/add-a-topic.doc.mjs +144 -0
  266. package/assets/docs/tree/agent-guidance.doc.mjs +138 -0
  267. package/assets/docs/tree/api.doc.mjs +30 -0
  268. package/assets/docs/tree/block-template.doc.mjs +130 -0
  269. package/assets/docs/tree/build-the-template.doc.mjs +28 -0
  270. package/assets/docs/tree/building-blocks.doc.mjs +46 -0
  271. package/assets/docs/tree/check-your-docs.doc.mjs +137 -0
  272. package/assets/docs/tree/checks.doc.mjs +119 -0
  273. package/assets/docs/tree/cli.doc.mjs +23 -0
  274. package/assets/docs/tree/codemods.doc.mjs +147 -0
  275. package/assets/docs/tree/commands.doc.mjs +25 -0
  276. package/assets/docs/tree/component-family.doc.mjs +113 -0
  277. package/assets/docs/tree/component-imports.doc.mjs +69 -0
  278. package/assets/docs/tree/component-lookups.doc.mjs +149 -0
  279. package/assets/docs/tree/components.doc.mjs +23 -0
  280. package/assets/docs/tree/configuration.doc.mjs +23 -0
  281. package/assets/docs/tree/debug-and-gap-reports.doc.mjs +182 -0
  282. package/assets/docs/tree/define-the-theme.doc.mjs +118 -0
  283. package/assets/docs/tree/describe-the-component.doc.mjs +57 -0
  284. package/assets/docs/tree/docs.doc.mjs +21 -0
  285. package/assets/docs/tree/document-the-template.doc.mjs +28 -0
  286. package/assets/docs/tree/document-the-theme.doc.mjs +68 -0
  287. package/assets/docs/tree/export-template-assets.doc.mjs +147 -0
  288. package/assets/docs/tree/extend-or-replace.doc.mjs +103 -0
  289. package/assets/docs/tree/fonts-and-assets.doc.mjs +106 -0
  290. package/assets/docs/tree/generate-a-palette.doc.mjs +66 -0
  291. package/assets/docs/tree/grade-template-with-agent.doc.mjs +105 -0
  292. package/assets/docs/tree/help.doc.mjs +16 -0
  293. package/assets/docs/tree/integrations.doc.mjs +40 -0
  294. package/assets/docs/tree/links.doc.mjs +98 -0
  295. package/assets/docs/tree/package-and-test.doc.mjs +32 -0
  296. package/assets/docs/tree/page-template.doc.mjs +71 -0
  297. package/assets/docs/tree/publishing.doc.mjs +111 -0
  298. package/assets/docs/tree/quick-start.doc.mjs +272 -0
  299. package/assets/docs/tree/replace-a-core-component.doc.mjs +104 -0
  300. package/assets/docs/tree/replace-a-core-template.doc.mjs +172 -0
  301. package/assets/docs/tree/sections-and-placement.doc.mjs +108 -0
  302. package/assets/docs/tree/see-it-in-an-app.doc.mjs +59 -0
  303. package/assets/docs/tree/ship.doc.mjs +16 -0
  304. package/assets/docs/tree/short-and-findable.doc.mjs +108 -0
  305. package/assets/docs/tree/single-component.doc.mjs +165 -0
  306. package/assets/docs/tree/start-a-template.doc.mjs +143 -0
  307. package/assets/docs/tree/subcomponent.doc.mjs +115 -0
  308. package/assets/docs/tree/template-assets.doc.mjs +64 -0
  309. package/assets/docs/tree/template-doc-overview.doc.mjs +109 -0
  310. package/assets/docs/tree/template-fonts.doc.mjs +102 -0
  311. package/assets/docs/tree/template-grading-rubric.doc.mjs +452 -0
  312. package/assets/docs/tree/template-icons.doc.mjs +97 -0
  313. package/assets/docs/tree/template-images-media.doc.mjs +127 -0
  314. package/assets/docs/tree/template-styles.doc.mjs +93 -0
  315. package/assets/docs/tree/templates.doc.mjs +34 -0
  316. package/assets/docs/tree/test-in-an-app.doc.mjs +115 -0
  317. package/assets/docs/tree/test-template-in-app.doc.mjs +128 -0
  318. package/assets/docs/tree/themes.doc.mjs +39 -0
  319. package/assets/docs/tree/troubleshooting.doc.mjs +149 -0
  320. package/assets/docs/tree/upgrading.doc.mjs +103 -0
  321. package/assets/docs/tree/use-a-theme-in-an-app.doc.mjs +51 -0
  322. package/assets/docs/tree/verify-packed-template.doc.mjs +77 -0
  323. package/assets/docs/tree/versioning.doc.mjs +161 -0
  324. package/assets/docs/tree/write-good-templates.doc.mjs +64 -0
  325. package/assets/docs/tree/write-the-template-file.doc.mjs +154 -0
  326. package/assets/docs/typography.doc.mjs +24 -4
  327. package/assets/docs/working-with-ai.doc.mjs +34 -26
  328. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.doc.mjs +1 -1
  329. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.tsx +1 -3
  330. package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
  331. package/assets/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.tsx +1 -1
  332. package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
  333. package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
  334. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.doc.mjs +14 -0
  335. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.tsx +61 -0
  336. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.doc.mjs +14 -0
  337. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.tsx +126 -0
  338. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.doc.mjs +15 -0
  339. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.tsx +86 -0
  340. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.doc.mjs +14 -0
  341. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.tsx +99 -0
  342. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.doc.mjs +14 -0
  343. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.tsx +122 -0
  344. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.doc.mjs +14 -0
  345. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.tsx +95 -0
  346. package/assets/templates/blocks/components/Table/TableBulkActionsTable.doc.mjs +14 -0
  347. package/assets/templates/blocks/components/Table/TableBulkActionsTable.tsx +71 -0
  348. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.doc.mjs +19 -0
  349. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.tsx +139 -0
  350. package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
  351. package/assets/templates/blocks/components/Timer/TimerFormats.doc.mjs +14 -0
  352. package/assets/templates/blocks/components/Timer/TimerFormats.tsx +34 -0
  353. package/assets/templates/blocks/components/Timer/TimerInline.doc.mjs +14 -0
  354. package/assets/templates/blocks/components/Timer/TimerInline.tsx +14 -0
  355. package/assets/templates/blocks/components/Timer/TimerShowcase.doc.mjs +13 -0
  356. package/assets/templates/blocks/components/Timer/TimerShowcase.tsx +47 -0
  357. package/assets/templates/blocks/components/Timer/TimerTypography.doc.mjs +14 -0
  358. package/assets/templates/blocks/components/Timer/TimerTypography.tsx +31 -0
  359. package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.doc.mjs +19 -3
  360. package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.tsx +383 -65
  361. package/assets/templates/pages/table-tree/page.tsx +1704 -0
  362. package/assets/templates/pages/table-tree/template.doc.mjs +12 -0
  363. package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
  364. package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
  365. package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
  366. package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
  367. package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
  368. package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
  369. package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
  370. package/authoring/_shared/contract.ts +22 -0
  371. package/authoring/codemod/codemod.doc.mjs +7 -2
  372. package/authoring/codemod/parse.d.mts +8 -8
  373. package/authoring/codemod/parse.mjs +8 -6
  374. package/authoring/codemod/type.ts +12 -0
  375. package/authoring/config/config.doc.mjs +11 -3
  376. package/authoring/config/debug-composition.test.mjs +92 -0
  377. package/authoring/config/parse.d.mts +15 -13
  378. package/authoring/config/parse.mjs +27 -8
  379. package/authoring/config/parse.test.mjs +8 -0
  380. package/authoring/config/type.ts +29 -6
  381. package/authoring/debug/debug.doc.d.mts +11 -0
  382. package/authoring/debug/debug.doc.mjs +182 -0
  383. package/authoring/debug/parse.d.mts +8 -8
  384. package/authoring/debug/parse.mjs +3 -3
  385. package/authoring/discover/discover.doc.d.mts +13 -0
  386. package/authoring/discover/discover.doc.mjs +138 -0
  387. package/authoring/discover/parse.d.mts +24 -0
  388. package/authoring/discover/parse.mjs +128 -0
  389. package/authoring/discover/parse.test.mjs +124 -0
  390. package/authoring/discover/type.ts +87 -0
  391. package/authoring/doctypes/_schema.d.mts +792 -24
  392. package/authoring/doctypes/_schema.mjs +549 -39
  393. package/authoring/doctypes/base/graph-fields.doc.d.mts +9 -0
  394. package/authoring/doctypes/base/graph-fields.doc.mjs +64 -0
  395. package/authoring/doctypes/base/type.ts +43 -0
  396. package/authoring/doctypes/command/command.doc.mjs +4 -3
  397. package/authoring/doctypes/command/parse.d.mts +2 -2
  398. package/authoring/doctypes/command/parse.mjs +1 -1
  399. package/authoring/doctypes/command/type.ts +5 -4
  400. package/authoring/doctypes/component/component.doc.mjs +12 -3
  401. package/authoring/doctypes/component/parse.d.mts +2 -2
  402. package/authoring/doctypes/component/parse.mjs +1 -1
  403. package/authoring/doctypes/component/type.ts +14 -5
  404. package/authoring/doctypes/doctypes-new.test.mjs +48 -6
  405. package/authoring/doctypes/enum/enum.doc.mjs +1 -1
  406. package/authoring/doctypes/enum/parse.d.mts +2 -2
  407. package/authoring/doctypes/enum/parse.mjs +1 -1
  408. package/authoring/doctypes/enum/type.ts +4 -2
  409. package/authoring/doctypes/function/function.doc.mjs +7 -2
  410. package/authoring/doctypes/function/parse.d.mts +2 -2
  411. package/authoring/doctypes/function/parse.mjs +1 -1
  412. package/authoring/doctypes/function/type.ts +9 -4
  413. package/authoring/doctypes/hook/hook.doc.mjs +4 -0
  414. package/authoring/doctypes/hook/parse.d.mts +2 -2
  415. package/authoring/doctypes/hook/parse.mjs +1 -1
  416. package/authoring/doctypes/hook/type.ts +5 -4
  417. package/authoring/doctypes/legacy.d.mts +8 -6
  418. package/authoring/doctypes/legacy.mjs +5 -4
  419. package/authoring/doctypes/load-contract.test.mjs +233 -0
  420. package/authoring/doctypes/namespace/namespace.doc.d.mts +9 -0
  421. package/authoring/doctypes/namespace/namespace.doc.mjs +128 -0
  422. package/authoring/doctypes/namespace/parse.d.mts +12 -0
  423. package/authoring/doctypes/namespace/parse.mjs +25 -0
  424. package/authoring/doctypes/namespace/parse.test.mjs +163 -0
  425. package/authoring/doctypes/namespace/type.ts +74 -0
  426. package/authoring/doctypes/parse.d.mts +22 -18
  427. package/authoring/doctypes/parse.mjs +22 -11
  428. package/authoring/doctypes/parse.test.mjs +77 -3
  429. package/authoring/doctypes/reference/parse.d.mts +2 -2
  430. package/authoring/doctypes/reference/parse.mjs +8 -5
  431. package/authoring/doctypes/reference/reference.doc.mjs +55 -6
  432. package/authoring/doctypes/reference/type.ts +75 -7
  433. package/authoring/doctypes/schema/parse.d.mts +2 -2
  434. package/authoring/doctypes/schema/parse.mjs +1 -1
  435. package/authoring/doctypes/schema/schema.doc.mjs +2 -2
  436. package/authoring/doctypes/schema/type.ts +4 -4
  437. package/authoring/doctypes/template/parse.d.mts +94 -1
  438. package/authoring/doctypes/template/parse.mjs +40 -2
  439. package/authoring/doctypes/template/parse.test.mjs +26 -2
  440. package/authoring/doctypes/template/template.doc.mjs +13 -3
  441. package/authoring/doctypes/template/type.ts +13 -2
  442. package/authoring/doctypes/theme/parse.d.mts +35 -0
  443. package/authoring/doctypes/theme/parse.mjs +76 -0
  444. package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
  445. package/authoring/doctypes/theme/theme.doc.mjs +79 -0
  446. package/authoring/doctypes/theme/type.ts +42 -0
  447. package/authoring/doctypes/types.ts +12 -10
  448. package/authoring/gap-report/gap-report.doc.d.mts +12 -0
  449. package/authoring/gap-report/gap-report.doc.mjs +183 -0
  450. package/authoring/gap-report/parse.d.mts +10 -10
  451. package/authoring/gap-report/parse.mjs +6 -6
  452. package/authoring/gap-report/type.ts +1 -1
  453. package/authoring/identity/identity.doc.d.mts +9 -0
  454. package/authoring/identity/identity.doc.mjs +61 -0
  455. package/authoring/identity/type.ts +132 -0
  456. package/authoring/index.d.mts +3 -0
  457. package/authoring/index.d.ts +62 -17
  458. package/authoring/index.mjs +4 -1
  459. package/authoring/integration/integration.doc.mjs +22 -13
  460. package/authoring/integration/parse.d.mts +2 -2
  461. package/authoring/integration/parse.mjs +1 -1
  462. package/authoring/integration/parse.test.mjs +10 -1
  463. package/authoring/integration/schema.d.mts +6 -4
  464. package/authoring/integration/schema.mjs +9 -3
  465. package/authoring/integration/type.ts +19 -8
  466. package/authoring/shadcn/receipt.d.mts +6 -6
  467. package/clients/cli/__tests__/cliManifest.test.ts +27 -29
  468. package/clients/cli/command-load-failure.test.mjs +83 -0
  469. package/clients/cli/commands/blog.doc.mjs +1 -1
  470. package/clients/cli/commands/blog.mjs +23 -8
  471. package/clients/cli/commands/blog.test.mjs +42 -1
  472. package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
  473. package/clients/cli/commands/build-theme.ascii-output.test.mjs +161 -0
  474. package/clients/cli/commands/build-theme.flag-docs.test.mjs +110 -0
  475. package/clients/cli/commands/build-theme.mjs +16 -50
  476. package/clients/cli/commands/build-theme.path-safety.test.mjs +86 -1
  477. package/clients/cli/commands/build-theme.variants.test.mjs +76 -0
  478. package/clients/cli/commands/build.doc.mjs +16 -8
  479. package/clients/cli/commands/build.exit-codes-doc.test.mjs +50 -0
  480. package/clients/cli/commands/build.mjs +137 -114
  481. package/clients/cli/commands/build.playbook.test.mjs +75 -0
  482. package/clients/cli/commands/build.text-fields.test.mjs +81 -0
  483. package/clients/cli/commands/component/index.mjs +153 -61
  484. package/clients/cli/commands/component-batch.test.mjs +341 -0
  485. package/clients/cli/commands/component-ownership.test.mjs +92 -3
  486. package/clients/cli/commands/component-package.test.mjs +46 -0
  487. package/clients/cli/commands/component-resolution.test.mjs +21 -0
  488. package/clients/cli/commands/component.doc.mjs +28 -10
  489. package/clients/cli/commands/component.test.mjs +19 -0
  490. package/clients/cli/commands/detail-levels.test.mjs +2 -2
  491. package/clients/cli/commands/discover.broken-integration.test.mjs +52 -5
  492. package/clients/cli/commands/discover.components-flag.test.mjs +97 -0
  493. package/clients/cli/commands/discover.doc.mjs +55 -9
  494. package/clients/cli/commands/discover.mjs +393 -118
  495. package/clients/cli/commands/discover.sources.test.mjs +267 -0
  496. package/clients/cli/commands/discover.text-projection.test.mjs +103 -0
  497. package/clients/cli/commands/docs.doc.mjs +28 -6
  498. package/clients/cli/commands/docs.mjs +295 -38
  499. package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
  500. package/clients/cli/commands/doctor-integration-docs.doc.mjs +6 -5
  501. package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
  502. package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
  503. package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
  504. package/clients/cli/commands/doctor-integration.package-json.test.mjs +53 -0
  505. package/clients/cli/commands/doctor-integration.test.mjs +143 -8
  506. package/clients/cli/commands/doctor.doc.mjs +4 -2
  507. package/clients/cli/commands/doctor.mjs +108 -37
  508. package/clients/cli/commands/doctor.test.mjs +42 -0
  509. package/clients/cli/commands/gap-report.doc.mjs +27 -15
  510. package/clients/cli/commands/gap-report.test.mjs +72 -0
  511. package/clients/cli/commands/hook/index.mjs +7 -17
  512. package/clients/cli/commands/hook.doc.mjs +1 -1
  513. package/clients/cli/commands/hook.text-projection.test.mjs +45 -0
  514. package/clients/cli/commands/init.doc.mjs +24 -10
  515. package/clients/cli/commands/init.flag-help.test.mjs +153 -0
  516. package/clients/cli/commands/integration-add.controls.test.mjs +132 -0
  517. package/clients/cli/commands/integration-add.doc.mjs +39 -13
  518. package/clients/cli/commands/integration-authoring.test.mjs +74 -19
  519. package/clients/cli/commands/integration-pack.doc.mjs +6 -10
  520. package/clients/cli/commands/integration-real-world.test.mjs +4 -10
  521. package/clients/cli/commands/integration-verify.doc.mjs +22 -0
  522. package/clients/cli/commands/integration.doc.mjs +5 -5
  523. package/clients/cli/commands/integration.mjs +75 -43
  524. package/clients/cli/commands/interactive-guard.test.mjs +101 -24
  525. package/clients/cli/commands/json-contract.test.mjs +33 -0
  526. package/clients/cli/commands/layout-check.doc.mjs +15 -4
  527. package/clients/cli/commands/layout-expand.doc.mjs +22 -5
  528. package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
  529. package/clients/cli/commands/layout.doc.mjs +3 -3
  530. package/clients/cli/commands/layout.mjs +21 -9
  531. package/clients/cli/commands/layout.path-help.test.mjs +33 -0
  532. package/clients/cli/commands/layout.stdin-cap.test.mjs +47 -0
  533. package/clients/cli/commands/layout.text-fields.test.mjs +39 -0
  534. package/clients/cli/commands/manifest.doc.mjs +2 -2
  535. package/clients/cli/commands/no-prompt-wording.test.mjs +94 -0
  536. package/clients/cli/commands/search.doc.mjs +16 -6
  537. package/clients/cli/commands/search.mjs +49 -11
  538. package/clients/cli/commands/search.test.mjs +92 -0
  539. package/clients/cli/commands/setup-nudge.test.mjs +6 -0
  540. package/clients/cli/commands/swizzle.doc.mjs +4 -3
  541. package/clients/cli/commands/swizzle.path-safety.test.mjs +42 -0
  542. package/clients/cli/commands/template.doc.mjs +53 -14
  543. package/clients/cli/commands/template.flag-help.test.mjs +117 -0
  544. package/clients/cli/commands/template.mjs +4 -91
  545. package/clients/cli/commands/template.path-help.test.mjs +40 -0
  546. package/clients/cli/commands/text-json-parity.test.mjs +725 -0
  547. package/clients/cli/commands/theme-add.doc.mjs +5 -4
  548. package/clients/cli/commands/theme-build.doc.mjs +8 -7
  549. package/clients/cli/commands/theme-list.doc.mjs +2 -2
  550. package/clients/cli/commands/theme-palette-generate.doc.mjs +12 -7
  551. package/clients/cli/commands/theme-palette-generate.test.mjs +19 -0
  552. package/clients/cli/commands/theme-palette.doc.mjs +2 -3
  553. package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
  554. package/clients/cli/commands/theme-targets.doc.mjs +3 -3
  555. package/clients/cli/commands/theme-template.behavior.test.mjs +12 -0
  556. package/clients/cli/commands/theme-template.doc.mjs +2 -2
  557. package/clients/cli/commands/theme.doc.mjs +3 -2
  558. package/clients/cli/commands/upgrade.ascii-output.test.mjs +87 -0
  559. package/clients/cli/commands/upgrade.doc.mjs +83 -12
  560. package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
  561. package/clients/cli/commands/upgrade.flag-help.test.mjs +188 -0
  562. package/clients/cli/commands/upgrade.hook-output.test.mjs +88 -0
  563. package/clients/cli/commands/upgrade.mjs +29 -7
  564. package/clients/cli/formatters/index.mjs +164 -1
  565. package/clients/cli/formatters/index.test.mjs +97 -0
  566. package/clients/cli/index.mjs +47 -34
  567. package/clients/cli/latest-version-env.test.mjs +50 -0
  568. package/clients/cli/lib/cli-error.test.mjs +7 -0
  569. package/clients/cli/lib/component-format.mjs +9 -9
  570. package/clients/cli/lib/component-format.test.mjs +1 -1
  571. package/clients/cli/lib/define-command.mjs +56 -6
  572. package/clients/cli/lib/define-command.test.mjs +54 -0
  573. package/clients/cli/lib/doc-text-ascii.test.mjs +82 -0
  574. package/clients/cli/lib/exit-codes.test.mjs +113 -0
  575. package/clients/cli/lib/hook-format.mjs +19 -10
  576. package/clients/cli/lib/json-shim.mjs +62 -16
  577. package/clients/cli/lib/json-shim.test.mjs +83 -0
  578. package/clients/cli/lib/manifest.d.ts +2 -0
  579. package/clients/cli/lib/manifest.mjs +53 -6
  580. package/clients/cli/lib/manifest.test.mjs +22 -2
  581. package/clients/cli/lib/parse-error-format.test.mjs +81 -0
  582. package/foundation/agent-docs/agent-docs.d.mts +7 -2
  583. package/foundation/agent-docs/agent-docs.mjs +83 -13
  584. package/foundation/agent-docs/agent-docs.path-safety.test.mjs +266 -4
  585. package/foundation/config/integration-debug.test.mjs +28 -3
  586. package/foundation/config/project-themes.test.mjs +11 -19
  587. package/foundation/config/project.d.mts +20 -11
  588. package/foundation/config/project.mjs +263 -91
  589. package/foundation/config/project.test.mjs +270 -21
  590. package/foundation/discovery/authoring-self-docs.d.mts +87 -0
  591. package/foundation/discovery/authoring-self-docs.mjs +237 -0
  592. package/foundation/discovery/authoring-self-docs.test.mjs +174 -0
  593. package/foundation/discovery/authoring-surface.d.mts +74 -0
  594. package/foundation/discovery/authoring-surface.mjs +525 -0
  595. package/foundation/discovery/authoring-surface.test.mjs +392 -0
  596. package/foundation/discovery/cli-self-docs.d.mts +119 -0
  597. package/foundation/discovery/cli-self-docs.mjs +504 -0
  598. package/foundation/discovery/cli-self-docs.test.mjs +395 -0
  599. package/foundation/discovery/component-discovery.d.mts +39 -1
  600. package/foundation/discovery/component-discovery.mjs +50 -1
  601. package/foundation/discovery/component-loader.d.mts +35 -38
  602. package/foundation/discovery/component-loader.mjs +53 -222
  603. package/foundation/discovery/docs-discovery.d.mts +119 -11
  604. package/foundation/discovery/docs-discovery.mjs +427 -108
  605. package/foundation/discovery/docs-discovery.test.mjs +386 -20
  606. package/foundation/discovery/docs-output-budget.d.mts +28 -0
  607. package/foundation/discovery/docs-output-budget.mjs +50 -0
  608. package/foundation/discovery/docs-section-key.d.mts +116 -0
  609. package/foundation/discovery/docs-section-key.mjs +322 -0
  610. package/foundation/discovery/docs-section-key.test.mjs +246 -0
  611. package/foundation/discovery/template-adapter.d.mts +113 -11
  612. package/foundation/discovery/template-adapter.fixture-refs.test.mjs +248 -0
  613. package/foundation/discovery/template-adapter.integration-isolation.test.mjs +94 -0
  614. package/foundation/discovery/template-adapter.mjs +774 -83
  615. package/foundation/discovery/template-adapter.test.mjs +57 -0
  616. package/foundation/discovery/template-conflict-release.d.mts +13 -0
  617. package/foundation/discovery/template-conflict-release.mjs +40 -0
  618. package/foundation/discovery/template-conflict-release.test.mjs +40 -0
  619. package/foundation/discovery/theme-discovery.d.mts +67 -7
  620. package/foundation/discovery/theme-discovery.mjs +916 -186
  621. package/foundation/discovery/theme-discovery.test.mjs +613 -219
  622. package/foundation/discovery/theming-targets.test.mjs +4 -0
  623. package/foundation/doc-compiler/bundle.d.mts +47 -0
  624. package/foundation/doc-compiler/bundle.mjs +278 -0
  625. package/foundation/doc-compiler/bundle.test.mjs +266 -0
  626. package/foundation/doc-compiler/compile.d.mts +343 -0
  627. package/foundation/doc-compiler/compile.mjs +558 -0
  628. package/foundation/doc-compiler/diagnostics.d.mts +126 -0
  629. package/foundation/doc-compiler/diagnostics.mjs +305 -0
  630. package/foundation/doc-compiler/doc-compiler.test.mjs +714 -0
  631. package/foundation/doc-compiler/doc-loads.test.mjs +1643 -0
  632. package/foundation/doc-compiler/import.d.mts +24 -0
  633. package/foundation/doc-compiler/import.mjs +59 -0
  634. package/foundation/doc-compiler/inputs.d.mts +102 -0
  635. package/foundation/doc-compiler/inputs.mjs +291 -0
  636. package/foundation/doc-compiler/inputs.test.mjs +298 -0
  637. package/foundation/doc-compiler/ir.d.mts +22 -0
  638. package/foundation/doc-compiler/ir.mjs +471 -0
  639. package/foundation/doc-compiler/lenses.d.mts +36 -0
  640. package/foundation/doc-compiler/lenses.mjs +173 -0
  641. package/foundation/doc-compiler/links.d.mts +162 -0
  642. package/foundation/doc-compiler/links.mjs +294 -0
  643. package/foundation/doc-compiler/links.test.mjs +192 -0
  644. package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
  645. package/foundation/doc-compiler/overlays.d.mts +37 -0
  646. package/foundation/doc-compiler/overlays.mjs +206 -0
  647. package/foundation/doc-compiler/parse-readable.d.mts +9 -0
  648. package/foundation/doc-compiler/parse-readable.mjs +29 -0
  649. package/foundation/doc-compiler/read.d.mts +127 -0
  650. package/foundation/doc-compiler/read.mjs +325 -0
  651. package/foundation/doc-compiler/read.test.mjs +313 -0
  652. package/foundation/doc-compiler/source.d.mts +33 -0
  653. package/foundation/doc-compiler/source.mjs +128 -0
  654. package/foundation/doc-compiler/tree.d.mts +292 -0
  655. package/foundation/doc-compiler/tree.mjs +881 -0
  656. package/foundation/fs/file-protection.d.mts +33 -0
  657. package/foundation/fs/file-protection.mjs +825 -0
  658. package/foundation/fs/file-protection.test.mjs +250 -0
  659. package/foundation/fs/module-loader.d.mts +1 -0
  660. package/foundation/fs/module-loader.mjs +50 -1
  661. package/foundation/fs/module-loader.stdout.test.mjs +332 -0
  662. package/foundation/fs/path-safety.d.mts +3 -2
  663. package/foundation/fs/path-safety.mjs +49 -19
  664. package/foundation/fs/path-safety.test.mjs +50 -0
  665. package/foundation/fs/publish-file-hardlink-unavailable.test.mjs +129 -94
  666. package/foundation/identity/provider-identity.d.mts +90 -0
  667. package/foundation/identity/provider-identity.mjs +320 -0
  668. package/foundation/identity/provider-identity.test.mjs +254 -0
  669. package/foundation/identity/providers.d.mts +7 -0
  670. package/foundation/identity/providers.mjs +16 -0
  671. package/foundation/integrations/autolink.d.mts +58 -1
  672. package/foundation/integrations/autolink.mjs +143 -45
  673. package/foundation/integrations/autolink.test.mjs +1 -1
  674. package/foundation/integrations/cli-requirement.d.mts +65 -0
  675. package/foundation/integrations/cli-requirement.mjs +189 -0
  676. package/foundation/integrations/cli-requirement.test.mjs +89 -0
  677. package/foundation/integrations/contribution-fixes.d.mts +145 -0
  678. package/foundation/integrations/contribution-fixes.mjs +1284 -0
  679. package/foundation/integrations/contribution-inventory.d.mts +3 -2
  680. package/foundation/integrations/contribution-inventory.mjs +28 -25
  681. package/foundation/integrations/contribution-inventory.test.mjs +86 -27
  682. package/foundation/integrations/integration-warnings.d.mts +9 -2
  683. package/foundation/integrations/integration-warnings.mjs +52 -21
  684. package/foundation/integrations/integration-warnings.test.mjs +74 -1
  685. package/foundation/integrations/integrations.d.mts +63 -3
  686. package/foundation/integrations/integrations.mjs +122 -9
  687. package/foundation/integrations/integrations.test.mjs +415 -1
  688. package/foundation/integrations/provider-conflicts.test.mjs +125 -0
  689. package/foundation/integrations/provider-ledger.test.mjs +275 -0
  690. package/foundation/integrations/provider-resolution.d.mts +152 -0
  691. package/foundation/integrations/provider-resolution.mjs +576 -0
  692. package/foundation/integrations/provider-resolution.test.mjs +369 -0
  693. package/foundation/integrations/theme-descriptor.d.mts +8 -0
  694. package/foundation/integrations/theme-descriptor.mjs +44 -0
  695. package/foundation/integrations/validate-contributions.d.mts +2 -0
  696. package/foundation/integrations/validate-contributions.mjs +131 -29
  697. package/foundation/response/base.d.ts +8 -4
  698. package/foundation/response/batch.type.d.mts +33 -0
  699. package/foundation/response/batch.type.mjs +34 -0
  700. package/foundation/response/error-codes.d.mts +3 -1
  701. package/foundation/response/error-codes.d.ts +2 -0
  702. package/foundation/response/error-codes.doc.mjs +19 -12
  703. package/foundation/response/error-codes.mjs +8 -2
  704. package/foundation/response/error-codes.test.mjs +166 -14
  705. package/foundation/response/json-contract.test.mjs +57 -17
  706. package/foundation/response/json.d.mts +4 -2
  707. package/foundation/response/json.mjs +8 -10
  708. package/foundation/response/response-types.doc.d.mts +7 -2
  709. package/foundation/response/response-types.doc.mjs +69 -25
  710. package/foundation/response/response-types.doc.test.mjs +181 -0
  711. package/foundation/response/response.doc.mjs +12 -11
  712. package/foundation/text/string-utils.d.mts +8 -0
  713. package/foundation/text/string-utils.mjs +40 -10
  714. package/foundation/xle/expand.d.mts +2 -0
  715. package/foundation/xle/expand.mjs +4 -3
  716. package/foundation/xle/expand.test.mjs +54 -0
  717. package/foundation/xle/xle.test.mjs +13 -0
  718. package/package.json +10 -11
  719. package/api/docs/docs.test.mjs +0 -83
  720. package/api/docs/integrationDocs.test.mjs +0 -208
  721. package/api/search/search.test.mjs +0 -389
  722. package/assets/docs/cli-integrations.doc.mjs +0 -367
  723. package/assets/templates/themes/manifest.json +0 -95
  724. package/clients/cli/commands/docs.test.mjs +0 -102
  725. package/clients/cli/lib/update-check.mjs +0 -83
  726. package/clients/cli/lib/update-check.test.mjs +0 -137
  727. package/clients/cli/update-hint-commands.test.mjs +0 -54
  728. package/foundation/agent-docs/agent-docs.test.mjs +0 -1141
@@ -3,16 +3,259 @@
3
3
  /**
4
4
  * @file Sealed doc load-boundary schemas (doctypes-internal).
5
5
  *
6
- * These zod schemas are the implementation detail behind the doctypes parsers.
7
- * They are NOT part of the public authoring surface: nothing outside
8
- * `authoring/doctypes/**` imports them, and they never appear in a public type.
9
- * They accept BOTH the stamped formats (`type: 'component' | 'function' |
10
- * 'generic'`) and the legacy loose `export const docs = {...}` shape, so the
11
- * ~600+ existing docs keep validating unchanged.
6
+ * Existing doctypes keep their historical top-level passthrough policy so
7
+ * already-published docs continue to load. NamespaceDoc and every semantic
8
+ * content block are strict: a misspelled field cannot reach a renderer as
9
+ * missing data.
12
10
  */
13
11
 
14
12
  import {z} from 'zod';
15
13
 
14
+ /** @typedef {import('./base/type.js').AuthoredDocGraphFields} AuthoredDocGraphFieldsType */
15
+ /** @typedef {import('./base/type.js').AuthoredDocKind} AuthoredDocKind */
16
+ /** @typedef {import('./namespace/type.js').NamespaceDoc} NamespaceDoc */
17
+ /** @typedef {import('./reference/type.js').ReferenceContentBlock} ReferenceContentBlock */
18
+ /** @typedef {import('./reference/type.js').GraphContentBlock} GraphContentBlock */
19
+ /** @typedef {import('./reference/type.js').ReferenceSection} ReferenceSection */
20
+ /** @typedef {import('./reference/type.js').ReferenceDoc} ReferenceDoc */
21
+ /** @typedef {import('./component/type.js').SingleComponentDoc} SingleComponentDoc */
22
+ /** @typedef {import('./base/type.js').ComponentPropDoc} ComponentPropDoc */
23
+ /** @typedef {import('./hook/type.js').HookDoc} HookDoc */
24
+ /** @typedef {import('./function/type.js').FunctionDoc} FunctionDoc */
25
+ /** @typedef {import('./schema/type.js').SchemaDoc} SchemaDoc */
26
+ /** @typedef {import('./command/type.js').CommandDoc} CommandDoc */
27
+ /** @typedef {import('./enum/type.js').EnumDoc} EnumDoc */
28
+
29
+ const nonEmptyString = z.string().min(1);
30
+
31
+ /** Every authored doc-kind discriminant accepted by parseDoc. */
32
+ export const AuthoredDocKindSchema = z.enum([
33
+ 'component',
34
+ 'function',
35
+ 'generic',
36
+ 'page',
37
+ 'block',
38
+ 'schema',
39
+ 'command',
40
+ 'enum',
41
+ 'namespace',
42
+ ]);
43
+
44
+ /**
45
+ * @typedef {import('../_shared/contract.js').Expect<
46
+ * import('../_shared/contract.js').Equal<z.infer<typeof AuthoredDocKindSchema>, AuthoredDocKind>
47
+ * >} _AuthoredDocKindDriftLock
48
+ */
49
+
50
+ /** Shared optional graph fields for every authored doc kind. */
51
+ export const AuthoredDocGraphFields = {
52
+ placement: z
53
+ .object({
54
+ parent: nonEmptyString,
55
+ slot: nonEmptyString.optional(),
56
+ order: z.number().int().safe().optional(),
57
+ })
58
+ .strict()
59
+ .optional(),
60
+ aliases: z.array(nonEmptyString).optional(),
61
+ audience: z.enum(['public', 'internal']).optional(),
62
+ };
63
+
64
+ const _AuthoredDocGraphSchema = z.object(AuthoredDocGraphFields).strict();
65
+
66
+ /**
67
+ * @typedef {import('../_shared/contract.js').Expect<
68
+ * import('../_shared/contract.js').MutuallyAssignable<
69
+ * z.infer<typeof _AuthoredDocGraphSchema>,
70
+ * AuthoredDocGraphFieldsType
71
+ * >
72
+ * >} _AuthoredDocGraphDriftLock
73
+ */
74
+
75
+ const ProseBlockSchema = z
76
+ .object({type: z.literal('prose'), text: nonEmptyString})
77
+ .strict();
78
+ const HeadingBlockSchema = z
79
+ .object({
80
+ type: z.literal('heading'),
81
+ level: z.union([z.literal(3), z.literal(4), z.literal(5), z.literal(6)]),
82
+ text: nonEmptyString,
83
+ })
84
+ .strict();
85
+ const CodeBlockSchema = z
86
+ .object({
87
+ type: z.literal('code'),
88
+ lang: nonEmptyString,
89
+ code: z.string(),
90
+ label: nonEmptyString.optional(),
91
+ })
92
+ .strict();
93
+ const TableBlockSchema = z
94
+ .object({
95
+ type: z.literal('table'),
96
+ headers: z.array(z.string()).min(1),
97
+ rows: z.array(z.array(z.string())),
98
+ })
99
+ .strict()
100
+ .superRefine((table, context) => {
101
+ table.rows.forEach((row, index) => {
102
+ if (row.length !== table.headers.length) {
103
+ context.addIssue({
104
+ code: 'custom',
105
+ path: ['rows', index],
106
+ message: `expected ${table.headers.length} cells`,
107
+ });
108
+ }
109
+ });
110
+ });
111
+ const ListBlockSchema = z
112
+ .object({
113
+ type: z.literal('list'),
114
+ style: z.enum(['ordered', 'unordered', 'do', 'dont']),
115
+ items: z.array(nonEmptyString).min(1),
116
+ })
117
+ .strict();
118
+ const TokenReferenceBlockSchema = z
119
+ .object({
120
+ type: z.literal('token-ref'),
121
+ topic: nonEmptyString,
122
+ section: nonEmptyString,
123
+ })
124
+ .strict();
125
+ const WorkflowBlockSchema = z
126
+ .object({
127
+ type: z.literal('workflow'),
128
+ title: nonEmptyString.optional(),
129
+ steps: z
130
+ .array(
131
+ z
132
+ .object({
133
+ title: nonEmptyString,
134
+ description: nonEmptyString.optional(),
135
+ references: z.array(nonEmptyString).min(1).optional(),
136
+ })
137
+ .strict(),
138
+ )
139
+ .min(1),
140
+ })
141
+ .strict();
142
+ const CollectionBlockSchema = z
143
+ .object({
144
+ type: z.literal('collection'),
145
+ title: nonEmptyString.optional(),
146
+ source: z.object({slot: nonEmptyString}).strict(),
147
+ presentation: z.enum(['list', 'cards', 'compact']).optional(),
148
+ whenEmpty: z.enum(['show', 'omit']).optional(),
149
+ })
150
+ .strict();
151
+ const ReferenceBlockSchema = z
152
+ .object({
153
+ type: z.literal('reference'),
154
+ target: nonEmptyString,
155
+ projection: z
156
+ .object({
157
+ fields: z.array(nonEmptyString).min(1).optional(),
158
+ sections: z.array(nonEmptyString).min(1).optional(),
159
+ })
160
+ .strict()
161
+ .optional(),
162
+ presentation: z.enum(['summary', 'compact', 'full']).optional(),
163
+ })
164
+ .strict();
165
+
166
+ /** Runtime schema for the stable content-block union published in 0.6.x. */
167
+ export const ReferenceContentBlockSchema = z.discriminatedUnion('type', [
168
+ ProseBlockSchema,
169
+ HeadingBlockSchema,
170
+ CodeBlockSchema,
171
+ TableBlockSchema,
172
+ ListBlockSchema,
173
+ TokenReferenceBlockSchema,
174
+ ]);
175
+
176
+ /** Runtime schema for graph-only blocks used by NamespaceDoc. */
177
+ export const GraphContentBlockSchema = z.discriminatedUnion('type', [
178
+ WorkflowBlockSchema,
179
+ CollectionBlockSchema,
180
+ ReferenceBlockSchema,
181
+ ]);
182
+
183
+ /**
184
+ * A topic section's blocks: the stable union, plus a reference block, which a
185
+ * read inlines as the doc it includes.
186
+ */
187
+ export const SectionContentBlockSchema = z.discriminatedUnion('type', [
188
+ ProseBlockSchema,
189
+ HeadingBlockSchema,
190
+ CodeBlockSchema,
191
+ TableBlockSchema,
192
+ ListBlockSchema,
193
+ TokenReferenceBlockSchema,
194
+ ReferenceBlockSchema,
195
+ ]);
196
+
197
+ /** Namespace content accepts both stable reference blocks and graph-only blocks. */
198
+ export const NamespaceContentBlockSchema = z.discriminatedUnion('type', [
199
+ ProseBlockSchema,
200
+ HeadingBlockSchema,
201
+ CodeBlockSchema,
202
+ TableBlockSchema,
203
+ ListBlockSchema,
204
+ TokenReferenceBlockSchema,
205
+ WorkflowBlockSchema,
206
+ CollectionBlockSchema,
207
+ ReferenceBlockSchema,
208
+ ]);
209
+
210
+ /**
211
+ * @typedef {import('../_shared/contract.js').Expect<
212
+ * import('../_shared/contract.js').Equal<
213
+ * z.infer<typeof ReferenceContentBlockSchema>,
214
+ * ReferenceContentBlock
215
+ * >
216
+ * >} _ReferenceContentBlockDriftLock
217
+ */
218
+
219
+ /**
220
+ * @typedef {import('../_shared/contract.js').Expect<
221
+ * import('../_shared/contract.js').Equal<
222
+ * z.infer<typeof GraphContentBlockSchema>,
223
+ * GraphContentBlock
224
+ * >
225
+ * >} _GraphContentBlockDriftLock
226
+ */
227
+
228
+ /**
229
+ * @typedef {import('../_shared/contract.js').Expect<
230
+ * import('../_shared/contract.js').Equal<
231
+ * z.infer<typeof SectionContentBlockSchema>,
232
+ * ReferenceSection['content'][number]
233
+ * >
234
+ * >} _SectionContentBlockDriftLock
235
+ */
236
+
237
+ const ReferenceSectionSchema = z
238
+ .object({
239
+ id: nonEmptyString.optional(),
240
+ title: nonEmptyString,
241
+ category: z.string().optional(),
242
+ content: z.array(SectionContentBlockSchema),
243
+ previewType: z
244
+ .enum([
245
+ 'swatch',
246
+ 'shadow-box',
247
+ 'radius-box',
248
+ 'spacing-bar',
249
+ 'size-bar',
250
+ 'border-line',
251
+ 'duration-bar',
252
+ 'easing-curve',
253
+ 'font-sample',
254
+ ])
255
+ .optional(),
256
+ })
257
+ .strict();
258
+
16
259
  const PropSchema = z
17
260
  .object({
18
261
  name: z.string().min(1, 'prop name is required'),
@@ -42,6 +285,7 @@ const ReturnSchema = z
42
285
  .passthrough();
43
286
 
44
287
  const BaseDocFields = {
288
+ ...AuthoredDocGraphFields,
45
289
  name: z.string().min(1, 'name is required'),
46
290
  displayName: z.string().optional(),
47
291
  description: z.string().optional(),
@@ -56,21 +300,70 @@ const BaseDocFields = {
56
300
  isHiddenFromOverview: z.boolean().optional(),
57
301
  };
58
302
 
59
- /** New-format stamped component doc (`type: 'component'`). */
60
- export const ComponentDocKindSchema = z
303
+ const ComponentBaseSchema = z
61
304
  .object({
62
305
  ...BaseDocFields,
63
306
  type: z.literal('component'),
64
- props: z.array(PropSchema),
65
307
  theming: z.unknown().optional(),
66
308
  playground: z.unknown().optional(),
67
309
  examples: z.array(z.unknown()).optional(),
310
+ replaces: z.string().min(1).optional(),
68
311
  })
69
312
  .passthrough();
70
313
 
71
- /** Return entry for the generalized function doc: `name` is optional so CLI/API
72
- * functions can document their `{type, data}` envelope entries (which have no
73
- * field name), while hooks keep listing named return fields. */
314
+ /**
315
+ * One entry in a group doc's `components`: a full ComponentEntry or a
316
+ * name-only ComponentRef. Readers look every entry up by `name`, so that much
317
+ * is checked here; the rest passes through, as on an unstamped doc.
318
+ */
319
+ const ComponentGroupEntrySchema = z
320
+ .object({name: z.string().min(1, 'component name is required')})
321
+ .passthrough();
322
+
323
+ /**
324
+ * New-format stamped component doc (`type: 'component'`): one component's
325
+ * `props`, or the `components` a group doc documents together. These are the
326
+ * shapes the published ComponentDoc type allows, and the ones an unstamped doc
327
+ * may already take.
328
+ */
329
+ export const ComponentDocKindSchema = ComponentBaseSchema.extend({
330
+ props: z.array(PropSchema).optional(),
331
+ components: z.array(ComponentGroupEntrySchema).optional(),
332
+ }).superRefine((doc, context) => {
333
+ if (doc.props == null && doc.components == null) {
334
+ context.addIssue({
335
+ code: 'custom',
336
+ path: ['props'],
337
+ message:
338
+ 'expected the props array, or `components` for a doc that groups several components',
339
+ });
340
+ }
341
+ });
342
+
343
+ /**
344
+ * A stamped component doc as it loads. The loader accepts what the unstamped
345
+ * format always accepted, so stamping an existing doc never breaks it:
346
+ * `displayName` may be missing, `category` is any string, `usage`, `theming`,
347
+ * `playground` and `examples` pass through unchecked, and a doc has `props`,
348
+ * `components`, or both; each `components` entry needs only a `name`. Every
349
+ * other field matches the published type.
350
+ *
351
+ * @typedef {Omit<SingleComponentDoc,
352
+ * 'type' | 'displayName' | 'category' | 'usage' | 'theming' | 'examples' | 'playground' | 'props'>
353
+ * & {type: 'component', displayName?: string, category?: string, usage?: unknown,
354
+ * theming?: unknown, examples?: unknown[], playground?: unknown,
355
+ * props?: ComponentPropDoc[], components?: Array<{name: string}>}} LoadedComponentDoc
356
+ */
357
+ /**
358
+ * @typedef {import('../_shared/contract.js').Expect<
359
+ * import('../_shared/contract.js').MutuallyAssignable<
360
+ * import('../_shared/contract.js').NamedFields<z.infer<typeof ComponentDocKindSchema>>,
361
+ * import('../_shared/contract.js').NamedFields<LoadedComponentDoc>
362
+ * >
363
+ * >} _ComponentDocDriftLock
364
+ */
365
+
366
+ /** Return entry for generalized function docs. */
74
367
  const FunctionReturnSchema = z
75
368
  .object({
76
369
  name: z.string().min(1).optional(),
@@ -79,8 +372,7 @@ const FunctionReturnSchema = z
79
372
  })
80
373
  .passthrough();
81
374
 
82
- /** New-format stamped function doc (`type: 'function'`) — hooks and CLI/API
83
- * functions alike (the discriminant and schema are shared). */
375
+ /** New-format stamped function doc (`type: 'function'`). */
84
376
  export const FunctionDocKindSchema = z
85
377
  .object({
86
378
  ...BaseDocFields,
@@ -90,30 +382,98 @@ export const FunctionDocKindSchema = z
90
382
  })
91
383
  .passthrough();
92
384
 
93
- /** New-format stamped generic reference/topic doc (`type: 'generic'`). */
385
+ /**
386
+ * A stamped function doc as it loads: as with components, `displayName` may be
387
+ * missing and `usage` passes through unchecked.
388
+ *
389
+ * @typedef {Omit<FunctionDoc, 'type' | 'displayName' | 'usage'>
390
+ * & {type: 'function', displayName?: string, usage?: unknown}} LoadedFunctionDoc
391
+ */
392
+ /**
393
+ * @typedef {import('../_shared/contract.js').Expect<
394
+ * import('../_shared/contract.js').MutuallyAssignable<
395
+ * import('../_shared/contract.js').NamedFields<z.infer<typeof FunctionDocKindSchema>>,
396
+ * import('../_shared/contract.js').NamedFields<LoadedFunctionDoc>
397
+ * >
398
+ * >} _FunctionDocDriftLock
399
+ */
400
+
401
+ /**
402
+ * Every HookDoc is a FunctionDoc, so the one function schema covers both.
403
+ *
404
+ * @typedef {import('../_shared/contract.js').Expect<[HookDoc] extends [FunctionDoc] ? true : false>} _HookDocIsFunctionDocLock
405
+ */
406
+
407
+ /**
408
+ * Stamped generic reference/topic doc (`type: 'generic'`). `title` and
409
+ * `sections` stay optional at this parser boundary for docs produced by the
410
+ * shipped v0.3.0 factory-removal codemod. When present, all rich fields and
411
+ * semantic blocks are validated.
412
+ */
94
413
  export const GenericDocKindSchema = z
95
414
  .object({
96
415
  ...BaseDocFields,
97
416
  type: z.literal('generic'),
98
- // Declared rather than left to the passthrough: these two are read by
99
- // docs discovery to resolve one topic against another, so a non-string
100
- // should fail at the load boundary, not halfway through resolution.
101
- replaces: z.string().optional(),
102
- extends: z.string().optional(),
417
+ title: nonEmptyString.optional(),
418
+ // Search terms the title and sections do not use; `astryx search` matches
419
+ // them as keywords of the whole topic (ReferenceDoc `keywords`).
420
+ keywords: z.array(z.string()).optional(),
421
+ sections: z.array(ReferenceSectionSchema).min(1).optional(),
422
+ replaces: nonEmptyString.optional(),
423
+ extends: nonEmptyString.optional(),
424
+ tokenCategory: z.string().optional(),
103
425
  })
104
- .passthrough();
426
+ .passthrough()
427
+ .superRefine((doc, context) => {
428
+ if (doc.replaces != null && doc.extends != null) {
429
+ context.addIssue({
430
+ code: 'custom',
431
+ path: ['extends'],
432
+ message: 'declares both `replaces` and `extends`; choose one',
433
+ });
434
+ }
435
+ const sectionIds = new Set();
436
+ doc.sections?.forEach((section, index) => {
437
+ if (section.id == null) return;
438
+ if (sectionIds.has(section.id)) {
439
+ context.addIssue({
440
+ code: 'custom',
441
+ path: ['sections', index, 'id'],
442
+ message: `duplicate section id "${section.id}"`,
443
+ });
444
+ }
445
+ sectionIds.add(section.id);
446
+ });
447
+ });
105
448
 
106
- /** Recursive field descriptor for a SchemaDoc (objects nest via `fields`). The
107
- * explicit cast breaks the self-referential type inference (TS7022) that the
108
- * authoring-contract `checkJs` pass would otherwise flag. */
449
+ /**
450
+ * A stamped generic doc as the load check accepts it. `title`, `description`
451
+ * and `sections` may be missing, as in docs the v0.3.0 factory-removal codemod
452
+ * produced; `parseReference` then fills them (title from `displayName` or
453
+ * `name`, an empty description, no sections), so its result is a full
454
+ * ReferenceDoc. Only a doc with a description and sections is a usable topic
455
+ * (see `problemsInTopic`).
456
+ *
457
+ * @typedef {Omit<ReferenceDoc, 'type' | 'title' | 'description' | 'sections'>
458
+ * & {type: 'generic'}
459
+ * & Partial<Pick<ReferenceDoc, 'title' | 'description' | 'sections'>>} LoadedReferenceDoc
460
+ */
461
+ /**
462
+ * @typedef {import('../_shared/contract.js').Expect<
463
+ * import('../_shared/contract.js').MutuallyAssignable<
464
+ * import('../_shared/contract.js').NamedFields<z.infer<typeof GenericDocKindSchema>>,
465
+ * import('../_shared/contract.js').NamedFields<LoadedReferenceDoc>
466
+ * >
467
+ * >} _ReferenceDocDriftLock
468
+ */
469
+
470
+ /** Recursive field descriptor for a SchemaDoc. */
109
471
  const SchemaFieldSchema =
110
- /** @type {import('zod').ZodType<import('./schema/type').SchemaFieldDoc>} */ (
472
+ /** @type {import('zod').ZodType<import('./schema/type.js').SchemaFieldDoc>} */ (
111
473
  z.lazy(() =>
112
474
  z
113
475
  .object({
114
476
  name: z.string().min(1, 'field name is required'),
115
- // `{error}` covers a missing (undefined) type; `.min(1)` covers an
116
- // empty string — both give the same author-friendly message.
117
477
  type: z
118
478
  .string({error: 'field type is required'})
119
479
  .min(1, 'field type is required'),
@@ -128,15 +488,15 @@ const SchemaFieldSchema =
128
488
  )
129
489
  );
130
490
 
131
- /** New stamped schema doc (`type: 'schema'`) — documents an authored object. */
491
+ /** New stamped schema doc (`type: 'schema'`). */
132
492
  export const SchemaDocKindSchema = z
133
493
  .object({
494
+ ...AuthoredDocGraphFields,
134
495
  type: z.literal('schema'),
135
496
  name: z.string().min(1, 'name is required'),
136
497
  displayName: z.string().min(1, 'displayName is required'),
137
498
  description: z.string(),
138
499
  namespace: z.string().optional(),
139
- aliases: z.array(z.string()).optional(),
140
500
  appliesTo: z.string().optional(),
141
501
  fields: z.array(SchemaFieldSchema),
142
502
  examples: z
@@ -146,21 +506,29 @@ export const SchemaDocKindSchema = z
146
506
  .passthrough(),
147
507
  )
148
508
  .optional(),
149
- notes: z.array(z.unknown()).optional(),
509
+ notes: z.array(ReferenceContentBlockSchema).optional(),
150
510
  })
151
511
  .passthrough();
152
512
 
153
- /** New stamped command doc (`type: 'command'`) — a function's terminal binding;
154
- * references a FunctionDoc via `fn`. */
513
+ /**
514
+ * @typedef {import('../_shared/contract.js').Expect<
515
+ * import('../_shared/contract.js').MutuallyAssignable<
516
+ * import('../_shared/contract.js').NamedFields<z.infer<typeof SchemaDocKindSchema>>,
517
+ * import('../_shared/contract.js').NamedFields<SchemaDoc & {type: 'schema'}>
518
+ * >
519
+ * >} _SchemaDocDriftLock
520
+ */
521
+
522
+ /** New stamped command doc (`type: 'command'`). */
155
523
  export const CommandDocKindSchema = z
156
524
  .object({
525
+ ...AuthoredDocGraphFields,
157
526
  type: z.literal('command'),
158
527
  name: z.string().min(1, 'name is required'),
159
528
  displayName: z.string().min(1, 'displayName is required'),
160
529
  summary: z.string(),
161
530
  description: z.string().optional(),
162
531
  namespace: z.string().optional(),
163
- aliases: z.array(z.string()).optional(),
164
532
  fn: z.string().optional(),
165
533
  args: z
166
534
  .array(
@@ -207,20 +575,28 @@ export const CommandDocKindSchema = z
207
575
  .array(z.object({code: z.number(), when: z.string()}).passthrough())
208
576
  .optional(),
209
577
  related: z.array(z.string()).optional(),
210
- notes: z.array(z.unknown()).optional(),
578
+ notes: z.array(ReferenceContentBlockSchema).optional(),
211
579
  })
212
580
  .passthrough();
213
581
 
214
- /** New stamped enum doc (`type: 'enum'`) — a closed vocabulary (error codes,
215
- * response-type discriminants). */
582
+ /**
583
+ * @typedef {import('../_shared/contract.js').Expect<
584
+ * import('../_shared/contract.js').MutuallyAssignable<
585
+ * import('../_shared/contract.js').NamedFields<z.infer<typeof CommandDocKindSchema>>,
586
+ * import('../_shared/contract.js').NamedFields<CommandDoc & {type: 'command'}>
587
+ * >
588
+ * >} _CommandDocDriftLock
589
+ */
590
+
591
+ /** New stamped enum doc (`type: 'enum'`). */
216
592
  export const EnumDocKindSchema = z
217
593
  .object({
594
+ ...AuthoredDocGraphFields,
218
595
  type: z.literal('enum'),
219
596
  name: z.string().min(1, 'name is required'),
220
597
  displayName: z.string().min(1, 'displayName is required'),
221
598
  description: z.string(),
222
599
  namespace: z.string().optional(),
223
- aliases: z.array(z.string()).optional(),
224
600
  members: z.array(
225
601
  z
226
602
  .object({
@@ -233,8 +609,108 @@ export const EnumDocKindSchema = z
233
609
  })
234
610
  .passthrough();
235
611
 
236
- // ── Legacy loose format (unchanged, kept for back-compat) ─────────────
612
+ /**
613
+ * @typedef {import('../_shared/contract.js').Expect<
614
+ * import('../_shared/contract.js').MutuallyAssignable<
615
+ * import('../_shared/contract.js').NamedFields<z.infer<typeof EnumDocKindSchema>>,
616
+ * import('../_shared/contract.js').NamedFields<EnumDoc & {type: 'enum'}>
617
+ * >
618
+ * >} _EnumDocDriftLock
619
+ */
620
+
621
+ const NamespaceSlotSchema = z
622
+ .object({
623
+ title: nonEmptyString,
624
+ accepts: z
625
+ .object({
626
+ kinds: z.array(AuthoredDocKindSchema).min(1),
627
+ providers: z.enum(['same', 'configured']).optional(),
628
+ })
629
+ .strict(),
630
+ })
631
+ .strict();
632
+
633
+ /** The one new authored doctype: a hierarchy and layout owner. */
634
+ export const NamespaceDocKindSchema = z
635
+ .object({
636
+ ...AuthoredDocGraphFields,
637
+ type: z.literal('namespace'),
638
+ name: nonEmptyString,
639
+ title: nonEmptyString,
640
+ summary: nonEmptyString,
641
+ keywords: z.array(nonEmptyString).optional(),
642
+ slots: z
643
+ .record(nonEmptyString, NamespaceSlotSchema)
644
+ .refine(slots => Object.keys(slots).length > 0, {
645
+ message: 'at least one slot is required',
646
+ }),
647
+ adopts: z
648
+ .array(
649
+ z
650
+ .object({
651
+ source: z
652
+ .object({
653
+ group: nonEmptyString,
654
+ kinds: z.array(AuthoredDocKindSchema).min(1).optional(),
655
+ })
656
+ .strict(),
657
+ into: nonEmptyString,
658
+ groupBy: z.literal('kind').optional(),
659
+ })
660
+ .strict(),
661
+ )
662
+ .optional(),
663
+ blocks: z.array(NamespaceContentBlockSchema).optional(),
664
+ })
665
+ .strict()
666
+ .superRefine((doc, context) => {
667
+ const slots = new Set(Object.keys(doc.slots));
668
+ doc.adopts?.forEach((rule, index) => {
669
+ const slot = doc.slots[rule.into];
670
+ if (slot == null) {
671
+ context.addIssue({
672
+ code: 'custom',
673
+ path: ['adopts', index, 'into'],
674
+ message: `must name a declared slot; received "${rule.into}"`,
675
+ });
676
+ return;
677
+ }
678
+ /** @type {AuthoredDocKind[]} */
679
+ const adoptedKinds =
680
+ rule.groupBy === 'kind' ? ['namespace'] : (rule.source.kinds ?? []);
681
+ adoptedKinds.forEach(kind => {
682
+ if (!slot.accepts.kinds.includes(kind)) {
683
+ context.addIssue({
684
+ code: 'custom',
685
+ path: ['adopts', index, 'into'],
686
+ message: `slot "${rule.into}" does not accept adopted kind "${kind}"`,
687
+ });
688
+ }
689
+ });
690
+ });
691
+ doc.blocks?.forEach((block, index) => {
692
+ if (block.type === 'collection' && !slots.has(block.source.slot)) {
693
+ context.addIssue({
694
+ code: 'custom',
695
+ path: ['blocks', index, 'source', 'slot'],
696
+ message: `must name a declared slot; received "${block.source.slot}"`,
697
+ });
698
+ }
699
+ });
700
+ });
701
+
702
+ /**
703
+ * @typedef {import('../_shared/contract.js').Expect<
704
+ * import('../_shared/contract.js').Equal<
705
+ * z.infer<typeof NamespaceDocKindSchema>,
706
+ * NamespaceDoc
707
+ * >
708
+ * >} _NamespaceDocDriftLock
709
+ */
710
+
711
+ // Legacy loose format stays permissive for backward compatibility.
237
712
  const LegacyBaseDocSchema = z.object({
713
+ ...AuthoredDocGraphFields,
238
714
  name: z.string().min(1, 'name is required'),
239
715
  displayName: z.string().optional(),
240
716
  description: z.string().optional(),
@@ -255,6 +731,39 @@ const LegacyBaseDocSchema = z.object({
255
731
  relatedHooks: z.array(z.string()).optional(),
256
732
  });
257
733
 
734
+ const LegacyReferenceDocSchema = LegacyBaseDocSchema.extend({
735
+ title: nonEmptyString,
736
+ description: z.string(),
737
+ // As on the stamped schema: search terms for the whole topic.
738
+ keywords: z.array(z.string()).optional(),
739
+ sections: z.array(ReferenceSectionSchema).min(1),
740
+ replaces: nonEmptyString.optional(),
741
+ extends: nonEmptyString.optional(),
742
+ tokenCategory: z.string().optional(),
743
+ })
744
+ .passthrough()
745
+ .superRefine((doc, context) => {
746
+ if (doc.replaces != null && doc.extends != null) {
747
+ context.addIssue({
748
+ code: 'custom',
749
+ path: ['extends'],
750
+ message: 'declares both `replaces` and `extends`; choose one',
751
+ });
752
+ }
753
+ const sectionIds = new Set();
754
+ doc.sections.forEach((section, index) => {
755
+ if (section.id == null) return;
756
+ if (sectionIds.has(section.id)) {
757
+ context.addIssue({
758
+ code: 'custom',
759
+ path: ['sections', index, 'id'],
760
+ message: `duplicate section id "${section.id}"`,
761
+ });
762
+ }
763
+ sectionIds.add(section.id);
764
+ });
765
+ });
766
+
258
767
  const LegacySingleComponentDocSchema = LegacyBaseDocSchema.extend({
259
768
  props: z.array(PropSchema),
260
769
  }).passthrough();
@@ -274,10 +783,11 @@ const LegacySubComponentDocSchema = LegacyBaseDocSchema.extend({
274
783
  props: z.array(PropSchema),
275
784
  }).passthrough();
276
785
 
277
- /** The permissive legacy union (sub-component first, then hook, multi, single). */
786
+ /** The permissive legacy union (sub-component, hook, multi, single, then reference). */
278
787
  export const LegacyDocSchema = z.union([
279
788
  LegacySubComponentDocSchema,
280
789
  LegacyHookDocSchema,
281
790
  LegacyMultiComponentDocSchema,
282
791
  LegacySingleComponentDocSchema,
792
+ LegacyReferenceDocSchema,
283
793
  ]);