@astryxdesign/cli 0.6.3-canary.db4e378 → 0.6.3-canary.db52d98

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 (397) hide show
  1. package/README.md +38 -15
  2. package/api/blog/blog.doc.mjs +1 -0
  3. package/api/build/_adapter.d.mts +50 -0
  4. package/api/build/_adapter.mjs +60 -0
  5. package/api/build/build.doc.mjs +14 -7
  6. package/api/build/build.test.mjs +184 -6
  7. package/api/build/build.type.d.mts +57 -2
  8. package/api/build/build.type.mjs +30 -7
  9. package/api/build/help/help.d.mts +4 -0
  10. package/api/build/help/help.mjs +24 -11
  11. package/api/build/kit/kit.d.mts +4 -1
  12. package/api/build/kit/kit.mjs +165 -49
  13. package/api/build/kit/rank.d.mts +44 -0
  14. package/api/build/kit/rank.mjs +432 -0
  15. package/api/build/kit/rank.test.mjs +196 -0
  16. package/api/component/_adapter.d.mts +6 -12
  17. package/api/component/_adapter.mjs +20 -10
  18. package/api/component/component.doc.mjs +1 -0
  19. package/api/component/component.mjs +60 -12
  20. package/api/component/list/list.mjs +3 -2
  21. package/api/discover/discover.doc.mjs +1 -0
  22. package/api/docs/_adapter.d.mts +252 -34
  23. package/api/docs/_adapter.mjs +923 -132
  24. package/api/docs/detail/detail.mjs +11 -3
  25. package/api/docs/detail/section/section.mjs +24 -13
  26. package/api/docs/detail/section/section.test.mjs +15 -6
  27. package/api/docs/docs.d.mts +5 -3
  28. package/api/docs/docs.doc.mjs +39 -17
  29. package/api/docs/docs.mjs +44 -8
  30. package/api/docs/docs.test.mjs +158 -4
  31. package/api/docs/docs.type.d.mts +181 -2
  32. package/api/docs/docs.type.mjs +117 -3
  33. package/api/docs/index/index.mjs +11 -3
  34. package/api/docs/index/index.test.mjs +1 -1
  35. package/api/docs/integration-tree.test.mjs +555 -0
  36. package/api/docs/integrationDocs.test.mjs +14 -14
  37. package/api/docs/list/list.mjs +28 -12
  38. package/api/docs/node/node.d.mts +43 -0
  39. package/api/docs/node/node.mjs +192 -0
  40. package/api/docs/reference-blocks.test.mjs +406 -0
  41. package/api/doctor/doctor.d.mts +54 -4
  42. package/api/doctor/doctor.doc.mjs +1 -0
  43. package/api/doctor/doctor.mjs +331 -16
  44. package/api/doctor/doctor.test.mjs +420 -7
  45. package/api/gap-report/gap-report.doc.mjs +1 -0
  46. package/api/hook/_adapter.mjs +19 -5
  47. package/api/hook/hook.doc.mjs +1 -0
  48. package/api/hook/list/list.d.mts +1 -1
  49. package/api/hook/list/list.mjs +69 -17
  50. package/api/index.d.mts +1 -1
  51. package/api/index.mjs +1 -0
  52. package/api/init/init.doc.mjs +2 -1
  53. package/api/integration/add-contribution.d.mts +2 -1
  54. package/api/integration/add-contribution.mjs +114 -12
  55. package/api/integration/add-contribution.test.mjs +174 -3
  56. package/api/integration/add-theme.mjs +34 -64
  57. package/api/integration/add-theme.test.mjs +105 -21
  58. package/api/integration/authoring-checks.mjs +138 -28
  59. package/api/integration/authoring-checks.test.mjs +179 -7
  60. package/api/integration/authoring-checks.type.mjs +6 -1
  61. package/api/integration/integration-authoring.type.d.mts +2 -0
  62. package/api/integration/integration-authoring.type.mjs +2 -0
  63. package/api/integration/integration-block-exports.test.mjs +10 -6
  64. package/api/integration/integrationAdd.doc.mjs +7 -0
  65. package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
  66. package/api/integration/integrationAddCodemod.doc.mjs +1 -0
  67. package/api/integration/integrationAddComponent.doc.mjs +1 -0
  68. package/api/integration/integrationAddDoc.doc.mjs +8 -1
  69. package/api/integration/integrationAddTemplate.doc.mjs +1 -0
  70. package/api/integration/integrationAddTheme.doc.mjs +6 -5
  71. package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
  72. package/api/integration/integrationDocConflicts.doc.mjs +2 -1
  73. package/api/integration/integrationPackCheck.doc.mjs +2 -1
  74. package/api/integration/integrationTemplateConflicts.doc.d.mts +3 -0
  75. package/api/integration/integrationTemplateConflicts.doc.mjs +4 -0
  76. package/api/integration/pack-check.mjs +34 -0
  77. package/api/integration/pack-check.test.mjs +138 -47
  78. package/api/integration/pack-check.type.d.mts +26 -2
  79. package/api/integration/pack-check.type.mjs +14 -1
  80. package/api/integration/summarizeIssues.doc.mjs +1 -0
  81. package/api/integration/template-conflict-compatibility.test.mjs +73 -0
  82. package/api/integration/validate-integration-fixes.test.mjs +1389 -0
  83. package/api/integration/validate-integration.mjs +50 -102
  84. package/api/integration/validate-integration.test.mjs +88 -26
  85. package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
  86. package/api/integration/validateIntegration.doc.mjs +2 -1
  87. package/api/json/assertResponse.doc.mjs +1 -0
  88. package/api/json/index.ts +2 -0
  89. package/api/json/isError.doc.mjs +1 -0
  90. package/api/json/parseResponse.doc.mjs +1 -0
  91. package/api/layout/_adapter.mjs +20 -5
  92. package/api/layout/layoutCheck.doc.mjs +1 -0
  93. package/api/layout/layoutExpand.doc.mjs +1 -0
  94. package/api/layout/layoutGrammar.doc.mjs +1 -0
  95. package/api/search/search.d.mts +59 -1
  96. package/api/search/search.doc.mjs +5 -3
  97. package/api/search/search.mjs +458 -77
  98. package/api/search/search.test.mjs +91 -2
  99. package/api/search/search.type.d.mts +13 -1
  100. package/api/search/search.type.mjs +4 -1
  101. package/api/swizzle/swizzle.doc.mjs +1 -0
  102. package/api/template/list/list.mjs +1 -0
  103. package/api/template/table-floating-bulk-actions.test.mjs +66 -0
  104. package/api/template/template-integration.test.mjs +1072 -3
  105. package/api/template/template-suffix.test.mjs +41 -21
  106. package/api/template/template.doc.mjs +28 -7
  107. package/api/template/template.mjs +45 -8
  108. package/api/template/template.type.d.mts +6 -8
  109. package/api/template/template.type.mjs +3 -2
  110. package/api/theme/_adapter.d.mts +2 -3
  111. package/api/theme/_adapter.mjs +4 -5
  112. package/api/theme/add/add.binary.test.mjs +10 -17
  113. package/api/theme/add/add.test.mjs +14 -1
  114. package/api/theme/generateTonalPalette.doc.mjs +1 -0
  115. package/api/theme/integration-themes.test.mjs +39 -28
  116. package/api/theme/list/list.test.mjs +19 -20
  117. package/api/theme/listThemes.doc.mjs +6 -5
  118. package/api/theme/template/template.test.mjs +5 -0
  119. package/api/theme/themeAdd.doc.mjs +4 -3
  120. package/api/theme/themeBuild.doc.mjs +1 -0
  121. package/api/theme/themeList.doc.mjs +6 -3
  122. package/api/theme/themeListAvailable.doc.mjs +5 -3
  123. package/api/theme/themePaletteGenerate.doc.mjs +1 -0
  124. package/api/theme/themeTargets.doc.mjs +1 -0
  125. package/api/theme/themeTemplate.doc.mjs +2 -1
  126. package/api/upgrade/_adapter.d.mts +32 -5
  127. package/api/upgrade/_adapter.mjs +97 -69
  128. package/api/upgrade/provider-agreement.test.mjs +152 -0
  129. package/api/upgrade/run/run.mjs +356 -59
  130. package/api/upgrade/upgrade.doc.mjs +6 -1
  131. package/api/upgrade/upgrade.type.d.mts +34 -0
  132. package/api/upgrade/upgrade.type.mjs +15 -0
  133. package/assets/codemods/__tests__/runner.test.mjs +330 -8
  134. package/assets/codemods/integration-discovery.mjs +8 -2
  135. package/assets/codemods/integration-discovery.test.mjs +15 -0
  136. package/assets/codemods/integration-runner.mjs +56 -4
  137. package/assets/codemods/integration-runner.protection.test.mjs +153 -0
  138. package/assets/codemods/run-codemod.mjs +177 -34
  139. package/assets/codemods/runner.mjs +350 -102
  140. package/assets/codemods/transforms/next/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
  141. package/assets/codemods/transforms/next/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
  142. package/assets/codemods/transforms/next/index.mjs +19 -1
  143. package/assets/codemods/transforms/next/migrate-native-picker-to-presentation.mjs +148 -0
  144. package/assets/codemods/transforms/next/migrate-theme-catalog-to-descriptors.mjs +141 -0
  145. package/assets/docs/getting-started.doc.mjs +2 -2
  146. package/assets/docs/layout.doc.dense.mjs +2 -2
  147. package/assets/docs/layout.doc.mjs +1 -1
  148. package/assets/docs/principles.doc.mjs +6 -6
  149. package/assets/docs/styling-libraries.doc.mjs +3 -3
  150. package/assets/docs/styling.doc.mjs +4 -4
  151. package/assets/docs/theme.doc.mjs +5 -5
  152. package/assets/docs/tokens.doc.mjs +1 -1
  153. package/assets/docs/tree/api.doc.mjs +30 -0
  154. package/assets/docs/tree/cli.doc.mjs +23 -0
  155. package/assets/docs/tree/commands.doc.mjs +25 -0
  156. package/assets/docs/{cli-integrations.doc.mjs → tree/integrations.doc.mjs} +66 -38
  157. package/assets/docs/tree/integrations.test.mjs +62 -0
  158. package/assets/docs/tree/writing-docs.doc.mjs +286 -0
  159. package/assets/docs/working-with-ai.doc.mjs +3 -3
  160. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.doc.mjs +1 -1
  161. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.tsx +1 -3
  162. package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
  163. package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
  164. package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
  165. package/assets/templates/blocks/components/Table/TableBulkActionsTable.doc.mjs +14 -0
  166. package/assets/templates/blocks/components/Table/TableBulkActionsTable.tsx +71 -0
  167. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.doc.mjs +19 -0
  168. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.tsx +139 -0
  169. package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
  170. package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
  171. package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
  172. package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
  173. package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
  174. package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
  175. package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
  176. package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
  177. package/authoring/codemod/codemod.doc.mjs +1 -1
  178. package/authoring/codemod/type.ts +12 -0
  179. package/authoring/config/config.doc.mjs +1 -1
  180. package/authoring/debug/debug.doc.d.mts +11 -0
  181. package/authoring/debug/debug.doc.mjs +182 -0
  182. package/authoring/debug/parse.d.mts +3 -3
  183. package/authoring/doctypes/_schema.d.mts +119 -117
  184. package/authoring/doctypes/_schema.mjs +54 -3
  185. package/authoring/doctypes/base/graph-fields.doc.mjs +8 -6
  186. package/authoring/doctypes/base/type.ts +6 -5
  187. package/authoring/doctypes/command/command.doc.mjs +1 -1
  188. package/authoring/doctypes/command/type.ts +2 -2
  189. package/authoring/doctypes/component/type.ts +2 -2
  190. package/authoring/doctypes/doctypes-new.test.mjs +48 -6
  191. package/authoring/doctypes/enum/enum.doc.mjs +1 -1
  192. package/authoring/doctypes/enum/type.ts +1 -1
  193. package/authoring/doctypes/function/function.doc.mjs +3 -2
  194. package/authoring/doctypes/function/type.ts +3 -2
  195. package/authoring/doctypes/hook/type.ts +2 -2
  196. package/authoring/doctypes/load-contract.test.mjs +28 -2
  197. package/authoring/doctypes/namespace/namespace.doc.mjs +6 -10
  198. package/authoring/doctypes/namespace/parse.test.mjs +23 -25
  199. package/authoring/doctypes/namespace/type.ts +5 -2
  200. package/authoring/doctypes/parse.d.mts +4 -2
  201. package/authoring/doctypes/parse.mjs +10 -5
  202. package/authoring/doctypes/reference/reference.doc.mjs +35 -6
  203. package/authoring/doctypes/reference/type.ts +30 -13
  204. package/authoring/doctypes/schema/schema.doc.mjs +1 -1
  205. package/authoring/doctypes/schema/type.ts +1 -2
  206. package/authoring/doctypes/template/parse.d.mts +2 -0
  207. package/authoring/doctypes/template/parse.mjs +4 -0
  208. package/authoring/doctypes/template/parse.test.mjs +18 -0
  209. package/authoring/doctypes/template/template.doc.mjs +9 -3
  210. package/authoring/doctypes/template/type.ts +8 -0
  211. package/authoring/doctypes/theme/parse.d.mts +35 -0
  212. package/authoring/doctypes/theme/parse.mjs +76 -0
  213. package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
  214. package/authoring/doctypes/theme/theme.doc.mjs +79 -0
  215. package/authoring/doctypes/theme/type.ts +42 -0
  216. package/authoring/doctypes/types.ts +2 -1
  217. package/authoring/gap-report/gap-report.doc.d.mts +12 -0
  218. package/authoring/gap-report/gap-report.doc.mjs +183 -0
  219. package/authoring/identity/identity.doc.mjs +2 -2
  220. package/authoring/index.d.mts +1 -0
  221. package/authoring/index.d.ts +7 -4
  222. package/authoring/index.mjs +2 -1
  223. package/authoring/integration/integration.doc.mjs +2 -2
  224. package/authoring/integration/type.ts +4 -10
  225. package/clients/cli/__tests__/cliManifest.test.ts +27 -29
  226. package/clients/cli/commands/blog.doc.mjs +1 -1
  227. package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
  228. package/clients/cli/commands/build-theme.mjs +11 -45
  229. package/clients/cli/commands/build.doc.mjs +12 -7
  230. package/clients/cli/commands/build.mjs +105 -67
  231. package/clients/cli/commands/build.text-fields.test.mjs +41 -0
  232. package/clients/cli/commands/component/index.mjs +1 -1
  233. package/clients/cli/commands/component-ownership.test.mjs +3 -3
  234. package/clients/cli/commands/component.doc.mjs +1 -1
  235. package/clients/cli/commands/discover.broken-integration.test.mjs +7 -8
  236. package/clients/cli/commands/discover.doc.mjs +1 -1
  237. package/clients/cli/commands/discover.mjs +1 -1
  238. package/clients/cli/commands/docs.doc.mjs +21 -9
  239. package/clients/cli/commands/docs.mjs +184 -70
  240. package/clients/cli/commands/docs.test.mjs +120 -16
  241. package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
  242. package/clients/cli/commands/doctor-integration-docs.doc.mjs +3 -3
  243. package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
  244. package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
  245. package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
  246. package/clients/cli/commands/doctor-integration.test.mjs +90 -8
  247. package/clients/cli/commands/doctor.doc.mjs +1 -1
  248. package/clients/cli/commands/doctor.mjs +53 -16
  249. package/clients/cli/commands/gap-report.doc.mjs +1 -1
  250. package/clients/cli/commands/hook.doc.mjs +1 -1
  251. package/clients/cli/commands/init.doc.mjs +1 -1
  252. package/clients/cli/commands/integration-add.controls.test.mjs +1 -1
  253. package/clients/cli/commands/integration-add.doc.mjs +11 -1
  254. package/clients/cli/commands/integration-pack.doc.mjs +1 -1
  255. package/clients/cli/commands/integration-real-world.test.mjs +3 -9
  256. package/clients/cli/commands/integration.doc.mjs +1 -1
  257. package/clients/cli/commands/integration.mjs +1 -0
  258. package/clients/cli/commands/layout-check.doc.mjs +1 -1
  259. package/clients/cli/commands/layout-expand.doc.mjs +1 -1
  260. package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
  261. package/clients/cli/commands/layout.doc.mjs +1 -1
  262. package/clients/cli/commands/manifest.doc.mjs +1 -1
  263. package/clients/cli/commands/search.doc.mjs +1 -1
  264. package/clients/cli/commands/search.mjs +11 -2
  265. package/clients/cli/commands/setup-nudge.test.mjs +6 -0
  266. package/clients/cli/commands/swizzle.doc.mjs +1 -1
  267. package/clients/cli/commands/template.doc.mjs +24 -7
  268. package/clients/cli/commands/template.mjs +4 -91
  269. package/clients/cli/commands/text-json-parity.test.mjs +719 -0
  270. package/clients/cli/commands/theme-add.doc.mjs +2 -2
  271. package/clients/cli/commands/theme-build.doc.mjs +1 -1
  272. package/clients/cli/commands/theme-list.doc.mjs +2 -2
  273. package/clients/cli/commands/theme-palette-generate.doc.mjs +3 -3
  274. package/clients/cli/commands/theme-palette.doc.mjs +1 -1
  275. package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
  276. package/clients/cli/commands/theme-targets.doc.mjs +1 -1
  277. package/clients/cli/commands/theme-template.doc.mjs +1 -1
  278. package/clients/cli/commands/theme.doc.mjs +1 -1
  279. package/clients/cli/commands/upgrade.doc.mjs +3 -2
  280. package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
  281. package/clients/cli/commands/upgrade.mjs +29 -7
  282. package/clients/cli/formatters/index.mjs +2 -0
  283. package/clients/cli/formatters/index.test.mjs +6 -0
  284. package/clients/cli/index.mjs +8 -0
  285. package/clients/cli/lib/hook-format.mjs +14 -5
  286. package/clients/cli/lib/manifest.mjs +9 -2
  287. package/foundation/agent-docs/agent-docs.d.mts +3 -2
  288. package/foundation/agent-docs/agent-docs.mjs +13 -9
  289. package/foundation/agent-docs/agent-docs.test.mjs +19 -1
  290. package/foundation/config/project-themes.test.mjs +11 -19
  291. package/foundation/config/project.d.mts +20 -11
  292. package/foundation/config/project.mjs +123 -80
  293. package/foundation/config/project.test.mjs +144 -21
  294. package/foundation/discovery/authoring-self-docs.d.mts +18 -0
  295. package/foundation/discovery/authoring-self-docs.mjs +37 -15
  296. package/foundation/discovery/authoring-self-docs.test.mjs +25 -9
  297. package/foundation/discovery/authoring-surface.d.mts +74 -0
  298. package/foundation/discovery/authoring-surface.mjs +525 -0
  299. package/foundation/discovery/authoring-surface.test.mjs +392 -0
  300. package/foundation/discovery/cli-self-docs.d.mts +119 -0
  301. package/foundation/discovery/cli-self-docs.mjs +490 -0
  302. package/foundation/discovery/cli-self-docs.test.mjs +375 -0
  303. package/foundation/discovery/component-discovery.d.mts +38 -0
  304. package/foundation/discovery/component-discovery.mjs +48 -0
  305. package/foundation/discovery/component-loader.d.mts +35 -38
  306. package/foundation/discovery/component-loader.mjs +53 -222
  307. package/foundation/discovery/docs-discovery.d.mts +112 -11
  308. package/foundation/discovery/docs-discovery.mjs +231 -36
  309. package/foundation/discovery/docs-discovery.test.mjs +111 -32
  310. package/foundation/discovery/docs-output-budget.d.mts +2 -2
  311. package/foundation/discovery/docs-output-budget.mjs +1 -1
  312. package/foundation/discovery/docs-section-key.d.mts +28 -10
  313. package/foundation/discovery/docs-section-key.mjs +134 -33
  314. package/foundation/discovery/docs-section-key.test.mjs +41 -19
  315. package/foundation/discovery/template-adapter.d.mts +99 -6
  316. package/foundation/discovery/template-adapter.mjs +480 -57
  317. package/foundation/discovery/template-adapter.test.mjs +57 -0
  318. package/foundation/discovery/template-conflict-release.d.mts +13 -0
  319. package/foundation/discovery/template-conflict-release.mjs +40 -0
  320. package/foundation/discovery/template-conflict-release.test.mjs +40 -0
  321. package/foundation/discovery/theme-discovery.d.mts +67 -7
  322. package/foundation/discovery/theme-discovery.mjs +916 -186
  323. package/foundation/discovery/theme-discovery.test.mjs +613 -219
  324. package/foundation/doc-compiler/bundle.d.mts +47 -0
  325. package/foundation/doc-compiler/bundle.mjs +278 -0
  326. package/foundation/doc-compiler/bundle.test.mjs +266 -0
  327. package/foundation/doc-compiler/compile.d.mts +220 -39
  328. package/foundation/doc-compiler/compile.mjs +311 -15
  329. package/foundation/doc-compiler/diagnostics.d.mts +126 -0
  330. package/foundation/doc-compiler/diagnostics.mjs +305 -0
  331. package/foundation/doc-compiler/doc-compiler.test.mjs +28 -1
  332. package/foundation/doc-compiler/doc-loads.test.mjs +1642 -0
  333. package/foundation/doc-compiler/import.d.mts +24 -0
  334. package/foundation/doc-compiler/import.mjs +59 -0
  335. package/foundation/doc-compiler/inputs.d.mts +102 -0
  336. package/foundation/doc-compiler/inputs.mjs +291 -0
  337. package/foundation/doc-compiler/inputs.test.mjs +299 -0
  338. package/foundation/doc-compiler/ir.d.mts +13 -0
  339. package/foundation/doc-compiler/ir.mjs +196 -12
  340. package/foundation/doc-compiler/lenses.d.mts +8 -5
  341. package/foundation/doc-compiler/lenses.mjs +50 -4
  342. package/foundation/doc-compiler/links.d.mts +162 -0
  343. package/foundation/doc-compiler/links.mjs +294 -0
  344. package/foundation/doc-compiler/links.test.mjs +192 -0
  345. package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
  346. package/foundation/doc-compiler/overlays.d.mts +37 -0
  347. package/foundation/doc-compiler/overlays.mjs +206 -0
  348. package/foundation/doc-compiler/parse-readable.d.mts +9 -0
  349. package/foundation/doc-compiler/parse-readable.mjs +29 -0
  350. package/foundation/doc-compiler/read.d.mts +127 -0
  351. package/foundation/doc-compiler/read.mjs +325 -0
  352. package/foundation/doc-compiler/read.test.mjs +313 -0
  353. package/foundation/doc-compiler/source.d.mts +33 -0
  354. package/foundation/doc-compiler/source.mjs +128 -0
  355. package/foundation/doc-compiler/tree.d.mts +288 -0
  356. package/foundation/doc-compiler/tree.mjs +876 -0
  357. package/foundation/doc-compiler/tree.test.mjs +598 -0
  358. package/foundation/fs/file-protection.d.mts +33 -0
  359. package/foundation/fs/file-protection.mjs +825 -0
  360. package/foundation/fs/file-protection.test.mjs +250 -0
  361. package/foundation/integrations/autolink.d.mts +58 -1
  362. package/foundation/integrations/autolink.mjs +143 -57
  363. package/foundation/integrations/autolink.test.mjs +1 -1
  364. package/foundation/integrations/cli-requirement.d.mts +45 -0
  365. package/foundation/integrations/cli-requirement.mjs +154 -0
  366. package/foundation/integrations/cli-requirement.test.mjs +84 -0
  367. package/foundation/integrations/contribution-fixes.d.mts +145 -0
  368. package/foundation/integrations/contribution-fixes.mjs +1284 -0
  369. package/foundation/integrations/contribution-inventory.d.mts +3 -2
  370. package/foundation/integrations/contribution-inventory.mjs +27 -24
  371. package/foundation/integrations/contribution-inventory.test.mjs +86 -27
  372. package/foundation/integrations/integration-warnings.d.mts +9 -2
  373. package/foundation/integrations/integration-warnings.mjs +51 -26
  374. package/foundation/integrations/integration-warnings.test.mjs +74 -1
  375. package/foundation/integrations/integrations.d.mts +3 -0
  376. package/foundation/integrations/integrations.mjs +11 -97
  377. package/foundation/integrations/provider-ledger.test.mjs +275 -0
  378. package/foundation/integrations/provider-resolution.d.mts +152 -0
  379. package/foundation/integrations/provider-resolution.mjs +576 -0
  380. package/foundation/integrations/provider-resolution.test.mjs +369 -0
  381. package/foundation/integrations/theme-descriptor.d.mts +8 -0
  382. package/foundation/integrations/theme-descriptor.mjs +44 -0
  383. package/foundation/integrations/validate-contributions.mjs +121 -29
  384. package/foundation/response/error-codes.d.mts +3 -1
  385. package/foundation/response/error-codes.d.ts +2 -0
  386. package/foundation/response/error-codes.doc.mjs +12 -2
  387. package/foundation/response/error-codes.mjs +7 -1
  388. package/foundation/response/error-codes.test.mjs +55 -11
  389. package/foundation/response/response-types.doc.d.mts +5 -1
  390. package/foundation/response/response-types.doc.mjs +20 -11
  391. package/foundation/response/response.doc.mjs +1 -1
  392. package/foundation/text/string-utils.d.mts +8 -0
  393. package/foundation/text/string-utils.mjs +40 -10
  394. package/foundation/xle/expand.mjs +1 -1
  395. package/foundation/xle/xle.test.mjs +13 -0
  396. package/package.json +10 -9
  397. package/assets/templates/themes/manifest.json +0 -95
@@ -34,8 +34,17 @@ import {
34
34
  docsIndexBytes,
35
35
  oversizedDocSections,
36
36
  } from '../../foundation/discovery/docs-output-budget.mjs';
37
- import {compileTopic, overlayLanguages} from '../docs/_adapter.mjs';
38
- import {detailView} from '../../foundation/doc-compiler/lenses.mjs';
37
+ import {
38
+ builtinCatalog,
39
+ compileTopic,
40
+ docsLinkProblems,
41
+ guideEntry,
42
+ lowerTopic,
43
+ overlayLanguages,
44
+ projectTree,
45
+ } from '../docs/_adapter.mjs';
46
+ import {typedEdges} from '../docs/node/node.mjs';
47
+ import {detailView, indexView} from '../../foundation/doc-compiler/lenses.mjs';
39
48
  import {semverCompare, isValidSemver, satisfiesRange} from '../../foundation/env/semver.mjs';
40
49
 
41
50
  /**
@@ -66,6 +75,8 @@ import {semverCompare, isValidSemver, satisfiesRange} from '../../foundation/env
66
75
  * `invalid_doc` issues from the project's contributed docs.
67
76
  * @property {string|null} [docsCatalogError] - Why the project's docs catalog
68
77
  * could not be built, when it could not.
78
+ * @property {Array<{package: string, code: string, severity: 'warning'|'error', message: string}>|null} [integrationIssues]
79
+ * Combined project-level integration issues, including cross-package template replacement warnings.
69
80
  * @property {Error|null} [configError] - Error thrown while resolving the config
70
81
  * path (e.g. multiple config files present), surfaced by checkConfig as a FAIL.
71
82
  */
@@ -585,7 +596,45 @@ export function checkPeerDeps(ctx) {
585
596
  }
586
597
 
587
598
  /**
588
- * Check 9 — report the detected package manager, and say so when the project's
599
+ * Summarize the combined integration graph, including cross-package warnings.
600
+ * @param {DoctorContext} ctx
601
+ * @returns {DoctorCheck}
602
+ */
603
+ export function checkIntegrationIssues(ctx) {
604
+ const issues = ctx.integrationIssues;
605
+ if (issues == null) {
606
+ return {
607
+ id: 'integration-issues',
608
+ label: 'Integration contributions',
609
+ status: 'info',
610
+ message: 'Skipped — the project integration graph could not be loaded.',
611
+ };
612
+ }
613
+ if (issues.length === 0) {
614
+ return {
615
+ id: 'integration-issues',
616
+ label: 'Integration contributions',
617
+ status: 'pass',
618
+ message: 'Integration contributions and cross-package relationships are valid.',
619
+ };
620
+ }
621
+ const errors = issues.filter(issue => issue.severity === 'error').length;
622
+ const details = issues
623
+ .map(issue => `${issue.package}: ${issue.message}`)
624
+ .join(' | ');
625
+ // This check is new, so it warns: a project that passed before keeps
626
+ // passing (spec:AST-046 FR8). `astryx doctor integration` fails on errors.
627
+ return {
628
+ id: 'integration-issues',
629
+ label: 'Integration contributions',
630
+ status: 'warn',
631
+ message: `${issues.length} integration issue(s)${errors > 0 ? `, ${errors} of them errors` : ''}: ${details}`,
632
+ fix: 'Run `astryx doctor integration` for package-specific diagnostics and resolve cross-package precedence in astryx.config.',
633
+ };
634
+ }
635
+
636
+ /**
637
+ * Check 10 — report the detected package manager, and say so when the project's
589
638
  * own declaration disagrees with what is on disk.
590
639
  *
591
640
  * Two states are worth surfacing rather than guessing past, because in both the
@@ -721,38 +770,144 @@ function joinProblems(problems) {
721
770
  : `${problems.length} problems: ${problems.join('; ')}`;
722
771
  }
723
772
 
773
+ /** How the self-doc audit's problems are fixed. */
774
+ const AUTHORING_DOCS_FIX =
775
+ 'List every authoring self-doc in AUTHORING_SELF_DOCS, fix the one that fails to load, and split a section that is too large.';
776
+
777
+ /** How the public-surface audit's problems are fixed. */
778
+ const AUTHORING_SURFACE_FIX =
779
+ 'Put a self-doc beside each module whose types @astryxdesign/cli/authoring exports and list it in AUTHORING_SELF_DOCS; export what each listed self-doc documents, or remove that self-doc.';
780
+
781
+ /** Types one problem names before it counts the rest. */
782
+ const NAMED_TYPES = 40;
783
+
784
+ /**
785
+ * @param {string[]} names
786
+ * @returns {string}
787
+ */
788
+ function nameTypes(names) {
789
+ return names.length <= NAMED_TYPES
790
+ ? names.join(', ')
791
+ : `${names.slice(0, NAMED_TYPES).join(', ')} and ${names.length - NAMED_TYPES} more`;
792
+ }
793
+
794
+ /**
795
+ * The section keys `astryx docs authoring --index` lists, read the way that
796
+ * command reads them.
797
+ * @returns {Promise<{keys: Set<string>} | {keys: null, error: string}>}
798
+ */
799
+ async function authoringTopicKeys() {
800
+ try {
801
+ const catalog = DocsCatalog.fromBuiltins();
802
+ const entry = catalog.resolve('authoring');
803
+ if (!entry) return {keys: null, error: 'it is not a built-in topic'};
804
+ const index = indexView(await lowerTopic(catalog, entry));
805
+ return {keys: new Set(index.sections.map(section => section.id))};
806
+ } catch (err) {
807
+ return {
808
+ keys: null,
809
+ error: err instanceof Error ? err.message : String(err),
810
+ };
811
+ }
812
+ }
813
+
814
+ /**
815
+ * @param {Awaited<ReturnType<typeof import('../../foundation/discovery/authoring-surface.mjs').auditAuthoringSurface>>} surface
816
+ * @returns {string[]}
817
+ */
818
+ function surfaceProblems(surface) {
819
+ /** @type {string[]} */
820
+ const problems = [];
821
+ if (surface.types === 0 && surface.untraced.length === 0) {
822
+ problems.push(
823
+ '@astryxdesign/cli/authoring exports no types, so nothing was compared with `astryx docs authoring`',
824
+ );
825
+ }
826
+ for (const {module, names, reason, source, key} of surface.unreadable) {
827
+ const why =
828
+ reason === 'no-self-doc'
829
+ ? `no self-doc sits beside ${module}`
830
+ : reason === 'unregistered'
831
+ ? `${source} is not listed in AUTHORING_SELF_DOCS`
832
+ : reason === 'failed'
833
+ ? `${source} does not load`
834
+ : `${source} renders section "${key}", which the topic's index does not list`;
835
+ problems.push(
836
+ `${nameTypes(names)} from ${module} ${names.length === 1 ? 'has' : 'have'} no doc in \`astryx docs authoring\`: ${why}`,
837
+ );
838
+ }
839
+ for (const {name, reason} of surface.untraced) {
840
+ problems.push(
841
+ `${name} cannot be traced to the module that declares it: ${reason}`,
842
+ );
843
+ }
844
+ for (const {source, subject} of surface.unmatched) {
845
+ problems.push(
846
+ subject
847
+ ? `${source} documents ${subject}, which @astryxdesign/cli/authoring does not export`
848
+ : `${source} documents no type @astryxdesign/cli/authoring exports`,
849
+ );
850
+ }
851
+ return problems;
852
+ }
853
+
724
854
  /**
725
855
  * Every authoring self-doc is reachable from `astryx docs authoring`, loads,
726
- * and fits in one read. The audit is imported here, inside the try, so a
727
- * malformed self-doc is reported rather than taking Doctor down.
856
+ * and fits in one read, and every type `@astryxdesign/cli/authoring` exports
857
+ * has its doc there: the self-doc beside the module that declares it. The
858
+ * audits are imported here, inside the try, so a malformed self-doc is
859
+ * reported rather than taking Doctor down.
728
860
  * @param {DoctorContext} [_ctx]
861
+ * @param {{root?: string, sources?: string[], topicKeys?: Set<string> | null}} [options]
862
+ * Another authoring tree, list, or topic index to audit (for tests).
729
863
  * @returns {Promise<DoctorCheck>}
730
864
  */
731
- export async function checkAuthoringDocs(_ctx) {
865
+ export async function checkAuthoringDocs(_ctx, options = {}) {
732
866
  const id = 'authoring-docs';
733
867
  const label = 'Authoring docs';
734
868
  try {
735
- const {auditAuthoringSelfDocs} = await import(
736
- '../../foundation/discovery/authoring-self-docs.mjs'
737
- );
738
- const audit = await auditAuthoringSelfDocs();
869
+ const {auditAuthoringSelfDocs} =
870
+ await import('../../foundation/discovery/authoring-self-docs.mjs');
871
+ const {auditAuthoringSurface} =
872
+ await import('../../foundation/discovery/authoring-surface.mjs');
873
+ const {root, sources} = options;
874
+ const audit = await auditAuthoringSelfDocs({root, sources});
739
875
  const problems = [
740
876
  ...audit.unreachable.map(
741
877
  source => `${source} is not in \`astryx docs authoring\``,
742
878
  ),
743
- ...audit.failed.map(({source, error}) => `${source} failed to load: ${error}`),
879
+ ...audit.failed.map(
880
+ ({source, error}) => `${source} failed to load: ${error}`,
881
+ ),
744
882
  ...audit.oversized.map(
745
883
  ({key, bytes}) =>
746
884
  `authoring section "${key}" is ${kilobytes(bytes)}, over the ${kilobytes(DOC_OUTPUT_BUDGET_BYTES)} one read may return`,
747
885
  ),
748
886
  ];
749
- if (problems.length > 0) {
887
+ const topic =
888
+ options.topicKeys === undefined
889
+ ? await authoringTopicKeys()
890
+ : {keys: options.topicKeys};
891
+ const surface = [
892
+ ...('error' in topic
893
+ ? [`\`astryx docs authoring\` could not be read: ${topic.error}`]
894
+ : []),
895
+ ...surfaceProblems(
896
+ await auditAuthoringSurface({root, sources, topicKeys: topic.keys}),
897
+ ),
898
+ ];
899
+ if (problems.length + surface.length > 0) {
750
900
  return {
751
901
  id,
752
902
  label,
753
903
  status: 'fail',
754
- message: joinProblems(problems),
755
- fix: 'List every authoring self-doc in AUTHORING_SELF_DOCS, fix the one that fails to load, and split a section that is too large.',
904
+ message: joinProblems([...problems, ...surface]),
905
+ fix: [
906
+ problems.length > 0 ? AUTHORING_DOCS_FIX : null,
907
+ surface.length > 0 ? AUTHORING_SURFACE_FIX : null,
908
+ ]
909
+ .filter(Boolean)
910
+ .join(' '),
756
911
  };
757
912
  }
758
913
  return {
@@ -772,6 +927,153 @@ export async function checkAuthoringDocs(_ctx) {
772
927
  }
773
928
  }
774
929
 
930
+ /** How the CLI-docs audit's problems are fixed. */
931
+ const CLI_DOCS_FIX =
932
+ "Set `namespace` on each CLI doc to the one that reads it: cli/commands for a command, cli/api for an API function or the output schema, error codes, and response types, and authoring for a file an author writes (and list it in AUTHORING_SELF_DOCS).";
933
+
934
+ /** How the docs-tree check's problems are fixed. */
935
+ const DOCS_TREE_FIX =
936
+ 'Fix each placement, adoption rule, or link the message names: a placement names a namespace of its own package, one of its slots, and a slot that accepts its kind; exactly one namespace adopts each doc; every route belongs to one doc; every link names a doc that exists, as `[<provider>:]<kind>:<name>`.';
937
+
938
+ /**
939
+ * Every command, API function, schema, and enum doc the CLI ships declares a
940
+ * namespace, and something reads it: the docs tree under `astryx docs cli`
941
+ * for `cli/commands` and `cli/api`, `astryx docs authoring` for `authoring`.
942
+ * @param {DoctorContext | Partial<DoctorContext>} _ctx
943
+ * @param {{root?: string, sources?: string[], authoringSources?: string[]}} [options]
944
+ * test seams: the CLI root, the docs to audit, and the authoring topic's list
945
+ * @returns {Promise<DoctorCheck>}
946
+ */
947
+ export async function checkCliDocs(_ctx, options = {}) {
948
+ const id = 'cli-docs';
949
+ const label = 'CLI docs';
950
+ try {
951
+ const {auditCliSelfDocs} =
952
+ await import('../../foundation/discovery/cli-self-docs.mjs');
953
+ const audit = await auditCliSelfDocs(options);
954
+ const problems = [
955
+ ...audit.missing.map(
956
+ source =>
957
+ `${source} has no namespace, so no \`astryx docs\` topic reads it`,
958
+ ),
959
+ ...audit.unknown.map(
960
+ ({source, namespace}) =>
961
+ `${source} has namespace "${namespace}", which no \`astryx docs\` topic reads`,
962
+ ),
963
+ ...audit.misfiled.map(({message}) => message),
964
+ ...audit.failed.map(
965
+ ({source, error}) => `${source} failed to load: ${error}`,
966
+ ),
967
+ ...audit.oversized.map(
968
+ ({key, bytes}) =>
969
+ `CLI doc "${key}" is ${kilobytes(bytes)}, over the ${kilobytes(DOC_OUTPUT_BUDGET_BYTES)} one read may return`,
970
+ ),
971
+ ];
972
+ if (problems.length > 0) {
973
+ return {
974
+ id,
975
+ label,
976
+ status: 'fail',
977
+ message: joinProblems(problems),
978
+ fix: CLI_DOCS_FIX,
979
+ };
980
+ }
981
+ return {
982
+ id,
983
+ label,
984
+ status: 'pass',
985
+ message: `All ${audit.docs} CLI docs are readable: ${audit.tree} in the \`astryx docs cli\` tree and ${audit.authoring} in \`astryx docs authoring\`.`,
986
+ };
987
+ } catch (err) {
988
+ return {
989
+ id,
990
+ label,
991
+ status: 'fail',
992
+ message: `The CLI docs could not be audited: ${err instanceof Error ? err.message : String(err)}`,
993
+ fix: 'Reinstall @astryxdesign/cli.',
994
+ };
995
+ }
996
+ }
997
+
998
+ /**
999
+ * The docs tree builds with no error, and every CLI typed doc in a `cli/...`
1000
+ * group has a route in it (spec:AST-046): each placement names a namespace of
1001
+ * its own package and a slot that accepts it, exactly one namespace adopts
1002
+ * each doc, and each route belongs to one doc.
1003
+ * @param {DoctorContext | Partial<DoctorContext>} _ctx
1004
+ * @param {{tree?: import('../../foundation/doc-compiler/tree.mjs').DocsTree}} [options]
1005
+ * test seam: a tree to check instead of the CLI's own
1006
+ * @returns {Promise<DoctorCheck>}
1007
+ */
1008
+ export async function checkDocsTree(_ctx, options = {}) {
1009
+ const id = 'docs-tree';
1010
+ const label = 'Docs tree';
1011
+ try {
1012
+ const catalog =
1013
+ /** @type {any} */ (_ctx)?.docsCatalog ?? builtinCatalog();
1014
+ const tree = options.tree ?? (await projectTree(catalog, {fresh: true}));
1015
+ const problems = tree.diagnostics
1016
+ .filter(d => d.severity === 'error')
1017
+ .map(d => `${d.source ?? d.provider ?? 'docs tree'}: ${d.message}`);
1018
+ if (options.tree === undefined) {
1019
+ const {loadCliSelfDocs, CLI_DOC_NAMESPACES} =
1020
+ await import('../../foundation/discovery/cli-self-docs.mjs');
1021
+ const placed = new Set(
1022
+ [...tree.nodes.values()].map(
1023
+ node => `${node.provider}\u0000${node.kind}\u0000${node.name}`,
1024
+ ),
1025
+ );
1026
+ for (const {source, doc} of (await loadCliSelfDocs()).loaded) {
1027
+ if (CLI_DOC_NAMESPACES[doc.namespace]?.reader !== 'tree') continue;
1028
+ if (!placed.has(`@astryxdesign/cli\u0000${doc.type}\u0000${doc.name}`)) {
1029
+ problems.push(
1030
+ `${source} has namespace "${doc.namespace}", but no docs-tree namespace adopts it`,
1031
+ );
1032
+ }
1033
+ }
1034
+ // Every link between docs names a doc that exists (spec:AST-047 FR9):
1035
+ // typed fields, reference and workflow blocks, and inline links. A
1036
+ // reference block also includes all it names.
1037
+ for (const node of tree.nodes.values()) {
1038
+ for (const edge of typedEdges(tree, node).unresolved) {
1039
+ problems.push(`${node.route}: ${edge}`);
1040
+ }
1041
+ }
1042
+ problems.push(...(await docsLinkProblems(catalog, tree)));
1043
+ problems.push(
1044
+ ...(await docsLinkProblems(catalog, tree, {references: true})),
1045
+ );
1046
+ }
1047
+ // New findings warn: a project that passed before keeps passing
1048
+ // (0.6 compatibility), and the warning names what to fix.
1049
+ if (problems.length > 0) {
1050
+ return {
1051
+ id,
1052
+ label,
1053
+ status: 'warn',
1054
+ message: joinProblems(problems),
1055
+ fix: DOCS_TREE_FIX,
1056
+ };
1057
+ }
1058
+ const nodes = [...tree.nodes.values()];
1059
+ const namespaces = nodes.filter(node => node.kind === 'namespace').length;
1060
+ return {
1061
+ id,
1062
+ label,
1063
+ status: 'pass',
1064
+ message: `The docs tree has ${nodes.length - namespaces} docs in ${namespaces} sections (${tree.roots().length} at the top), each at one route.`,
1065
+ };
1066
+ } catch (err) {
1067
+ return {
1068
+ id,
1069
+ label,
1070
+ status: 'warn',
1071
+ message: `The docs tree could not be built: ${err instanceof Error ? err.message : String(err)}`,
1072
+ fix: 'Reinstall @astryxdesign/cli.',
1073
+ };
1074
+ }
1075
+ }
1076
+
775
1077
  /**
776
1078
  * Every topic reads progressively, in every language it ships: it loads, its
777
1079
  * section index and each of its sections fit in one read, and no contributed
@@ -794,7 +1096,13 @@ export async function checkDocsProgressiveDisclosure(ctx) {
794
1096
  let topics = 0;
795
1097
  const catalog = ctx.docsCatalog;
796
1098
  if (catalog) {
797
- for (const entry of catalog.entries()) {
1099
+ // A guide the docs tree places is a topic read by its route; it is held
1100
+ // to the same budget as every flat topic.
1101
+ const guides = [...(await projectTree(catalog)).nodes.values()]
1102
+ // A flat topic in the Unorganized level is checked above, as a topic.
1103
+ .filter(node => node.kind === 'generic' && !node.ref?.flatTopic)
1104
+ .map(guideEntry);
1105
+ for (const entry of [...catalog.entries(), ...guides]) {
798
1106
  for (const lang of [null, ...overlayLanguages(entry)]) {
799
1107
  const where = lang ? `${entry.name} [${lang}]` : entry.name;
800
1108
  try {
@@ -823,7 +1131,7 @@ export async function checkDocsProgressiveDisclosure(ctx) {
823
1131
  return {
824
1132
  id,
825
1133
  label,
826
- status: 'fail',
1134
+ status: 'warn',
827
1135
  message: joinProblems(problems),
828
1136
  fix: 'Fix the doc each problem names; split a section that is too large into smaller ones, each with its own key.',
829
1137
  };
@@ -848,6 +1156,7 @@ export const SYNC_CHECKS = [
848
1156
  checkThemes,
849
1157
  checkImplicitIntegrations,
850
1158
  checkProviderIdentity,
1159
+ checkIntegrationIssues,
851
1160
  checkAgentDocs,
852
1161
  checkPeerDeps,
853
1162
  checkPackageManager,
@@ -887,6 +1196,8 @@ export async function runChecks(options = {}) {
887
1196
  let docsCatalogIssues = [];
888
1197
  /** @type {string|null} */
889
1198
  let docsCatalogError = null;
1199
+ /** @type {Array<{package: string, code: string, severity: 'warning'|'error', message: string}>|null} */
1200
+ let integrationIssues = null;
890
1201
  try {
891
1202
  const project = await Project.load(cwd);
892
1203
  configTheme =
@@ -901,6 +1212,7 @@ export async function runChecks(options = {}) {
901
1212
  docsCatalog = null;
902
1213
  docsCatalogError = err instanceof Error ? err.message : String(err);
903
1214
  }
1215
+ integrationIssues = await project.issues();
904
1216
  } catch {
905
1217
  // Best-effort: a missing/invalid config leaves configTheme null.
906
1218
  }
@@ -916,6 +1228,7 @@ export async function runChecks(options = {}) {
916
1228
  docsCatalog,
917
1229
  docsCatalogIssues,
918
1230
  docsCatalogError,
1231
+ integrationIssues,
919
1232
  configError,
920
1233
  };
921
1234
 
@@ -929,6 +1242,8 @@ export async function runChecks(options = {}) {
929
1242
  }
930
1243
  }
931
1244
  checks.push(await checkAuthoringDocs(ctx));
1245
+ checks.push(await checkCliDocs(ctx));
1246
+ checks.push(await checkDocsTree(ctx));
932
1247
  checks.push(await checkDocsProgressiveDisclosure(ctx));
933
1248
 
934
1249
  const summary = {pass: 0, warn: 0, fail: 0, info: 0};