@astryxdesign/cli 0.6.3-canary.ebaebc4 → 0.6.3-canary.ee13359

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 (501) hide show
  1. package/README.md +114 -77
  2. package/api/blog/blog.doc.mjs +1 -0
  3. package/api/build/build.doc.mjs +4 -3
  4. package/api/build/build.test.mjs +14 -3
  5. package/api/build/build.type.d.mts +35 -1
  6. package/api/build/build.type.mjs +24 -3
  7. package/api/build/help/help.d.mts +8 -5
  8. package/api/build/help/help.mjs +56 -6
  9. package/api/component/_adapter.d.mts +6 -12
  10. package/api/component/_adapter.mjs +20 -10
  11. package/api/component/component.doc.mjs +13 -3
  12. package/api/component/component.mjs +91 -14
  13. package/api/component/component.test.mjs +38 -0
  14. package/api/component/component.type.d.mts +16 -5
  15. package/api/component/component.type.mjs +13 -5
  16. package/api/component/detail/blocks/blocks.d.mts +2 -1
  17. package/api/component/detail/blocks/blocks.mjs +4 -3
  18. package/api/component/list/list.d.mts +0 -5
  19. package/api/component/list/list.mjs +40 -11
  20. package/api/discover/discover.doc.mjs +2 -1
  21. package/api/docs/_adapter.d.mts +210 -34
  22. package/api/docs/_adapter.mjs +674 -134
  23. package/api/docs/detail/detail.mjs +11 -3
  24. package/api/docs/detail/section/section.mjs +24 -13
  25. package/api/docs/detail/section/section.test.mjs +15 -6
  26. package/api/docs/docs.d.mts +5 -3
  27. package/api/docs/docs.doc.mjs +36 -15
  28. package/api/docs/docs.mjs +44 -8
  29. package/api/docs/docs.test.mjs +158 -4
  30. package/api/docs/docs.type.d.mts +165 -2
  31. package/api/docs/docs.type.mjs +101 -3
  32. package/api/docs/index/index.mjs +11 -3
  33. package/api/docs/index/index.test.mjs +1 -1
  34. package/api/docs/integration-tree.test.mjs +547 -0
  35. package/api/docs/integrationDocs.test.mjs +14 -14
  36. package/api/docs/list/list.mjs +28 -12
  37. package/api/docs/node/node.d.mts +43 -0
  38. package/api/docs/node/node.mjs +192 -0
  39. package/api/doctor/doctor.d.mts +54 -4
  40. package/api/doctor/doctor.doc.mjs +1 -0
  41. package/api/doctor/doctor.mjs +327 -16
  42. package/api/doctor/doctor.test.mjs +420 -7
  43. package/api/gap-report/gap-report.doc.mjs +8 -4
  44. package/api/hook/_adapter.mjs +19 -5
  45. package/api/hook/hook.doc.mjs +1 -0
  46. package/api/hook/list/list.d.mts +1 -1
  47. package/api/hook/list/list.mjs +69 -17
  48. package/api/index.d.mts +1 -1
  49. package/api/index.mjs +1 -0
  50. package/api/init/init.doc.mjs +6 -1
  51. package/api/init/init.test.mjs +41 -1
  52. package/api/init/remove/remove.mjs +1 -1
  53. package/api/init/run/run.mjs +20 -10
  54. package/api/integration/add-contribution.component-names.test.mjs +120 -0
  55. package/api/integration/add-contribution.d.mts +2 -1
  56. package/api/integration/add-contribution.mjs +125 -12
  57. package/api/integration/add-contribution.test.mjs +254 -3
  58. package/api/integration/add-theme.mjs +34 -64
  59. package/api/integration/add-theme.test.mjs +105 -21
  60. package/api/integration/authoring-checks.mjs +108 -31
  61. package/api/integration/authoring-checks.test.mjs +171 -6
  62. package/api/integration/authoring-checks.type.d.mts +3 -1
  63. package/api/integration/authoring-checks.type.mjs +3 -1
  64. package/api/integration/integration-authoring.type.d.mts +2 -0
  65. package/api/integration/integration-authoring.type.mjs +2 -0
  66. package/api/integration/integration-block-exports.test.mjs +10 -6
  67. package/api/integration/integrationAdd.doc.mjs +14 -4
  68. package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
  69. package/api/integration/integrationAddCodemod.doc.mjs +1 -0
  70. package/api/integration/integrationAddComponent.doc.mjs +2 -1
  71. package/api/integration/integrationAddDoc.doc.mjs +8 -1
  72. package/api/integration/integrationAddTemplate.doc.mjs +1 -0
  73. package/api/integration/integrationAddTheme.doc.mjs +6 -5
  74. package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
  75. package/api/integration/integrationDocConflicts.doc.mjs +2 -1
  76. package/api/integration/integrationPackCheck.doc.mjs +2 -1
  77. package/api/integration/integrationTemplateConflicts.doc.mjs +7 -5
  78. package/api/integration/pack-check.mjs +34 -0
  79. package/api/integration/pack-check.test.mjs +138 -47
  80. package/api/integration/pack-check.type.d.mts +26 -2
  81. package/api/integration/pack-check.type.mjs +14 -1
  82. package/api/integration/summarizeIssues.doc.mjs +1 -0
  83. package/api/integration/validate-integration-fixes.test.mjs +1389 -0
  84. package/api/integration/validate-integration.mjs +52 -102
  85. package/api/integration/validate-integration.test.mjs +179 -26
  86. package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
  87. package/api/integration/validateIntegration.doc.mjs +3 -2
  88. package/api/json/assertResponse.doc.mjs +1 -0
  89. package/api/json/envelope-types.test.mjs +76 -0
  90. package/api/json/index.ts +2 -0
  91. package/api/json/isError.doc.mjs +1 -0
  92. package/api/json/parseResponse.doc.mjs +3 -2
  93. package/api/layout/_adapter.mjs +20 -5
  94. package/api/layout/expand/expand.mjs +7 -5
  95. package/api/layout/expand/expand.path-safety.test.mjs +53 -0
  96. package/api/layout/grammar/grammar.mjs +2 -1
  97. package/api/layout/layoutCheck.doc.mjs +1 -0
  98. package/api/layout/layoutExpand.doc.mjs +2 -1
  99. package/api/layout/layoutGrammar.doc.mjs +1 -0
  100. package/api/search/search-return-type.test.mjs +54 -0
  101. package/api/search/search.d.mts +28 -10
  102. package/api/search/search.doc.mjs +8 -2
  103. package/api/search/search.mjs +334 -38
  104. package/api/search/search.test.mjs +124 -1
  105. package/api/search/search.type.d.mts +13 -1
  106. package/api/search/search.type.mjs +4 -1
  107. package/api/swizzle/copy/copy.mjs +28 -11
  108. package/api/swizzle/swizzle.doc.mjs +2 -1
  109. package/api/template/copy/copy.mjs +17 -23
  110. package/api/template/copy/copy.test.mjs +17 -0
  111. package/api/template/list/list.mjs +1 -0
  112. package/api/template/template-integration.test.mjs +1022 -3
  113. package/api/template/template-suffix.test.mjs +41 -21
  114. package/api/template/template.doc.mjs +30 -8
  115. package/api/template/template.mjs +45 -8
  116. package/api/template/template.type.d.mts +6 -8
  117. package/api/template/template.type.mjs +3 -2
  118. package/api/theme/_adapter.d.mts +2 -3
  119. package/api/theme/_adapter.mjs +4 -5
  120. package/api/theme/add/add.binary.test.mjs +84 -0
  121. package/api/theme/add/add.mjs +20 -3
  122. package/api/theme/add/add.staging.test.mjs +66 -0
  123. package/api/theme/add/add.test.mjs +14 -1
  124. package/api/theme/build/build.mjs +114 -37
  125. package/api/theme/build/build.public-component-vars.test.mjs +1 -1
  126. package/api/theme/build/build.receipt-doc.test.mjs +111 -0
  127. package/api/theme/build/font-warning.mjs +3 -3
  128. package/api/theme/build/font-warning.test.mjs +5 -2
  129. package/api/theme/generateTonalPalette.doc.mjs +1 -0
  130. package/api/theme/integration-themes.test.mjs +39 -28
  131. package/api/theme/list/list.test.mjs +19 -20
  132. package/api/theme/listThemes.doc.mjs +6 -5
  133. package/api/theme/palette/generate/generate.mjs +7 -2
  134. package/api/theme/palette/generate/generate.test.mjs +96 -0
  135. package/api/theme/palette/generate/generator.mjs +8 -1
  136. package/api/theme/palette/generate/generator.test.mjs +10 -0
  137. package/api/theme/template/template.mjs +11 -2
  138. package/api/theme/template/template.test.mjs +20 -0
  139. package/api/theme/themeAdd.doc.mjs +4 -3
  140. package/api/theme/themeBuild.doc.mjs +8 -4
  141. package/api/theme/themeList.doc.mjs +6 -3
  142. package/api/theme/themeListAvailable.doc.mjs +5 -3
  143. package/api/theme/themePaletteGenerate.doc.mjs +1 -0
  144. package/api/theme/themeTargets.doc.mjs +1 -0
  145. package/api/theme/themeTemplate.doc.mjs +6 -2
  146. package/api/upgrade/_adapter.d.mts +32 -5
  147. package/api/upgrade/_adapter.mjs +124 -73
  148. package/api/upgrade/list/list.mjs +2 -1
  149. package/api/upgrade/list/list.test.mjs +73 -0
  150. package/api/upgrade/provider-agreement.test.mjs +152 -0
  151. package/api/upgrade/run/run.mjs +356 -59
  152. package/api/upgrade/status/status.mjs +2 -2
  153. package/api/upgrade/upgrade.doc.mjs +8 -2
  154. package/api/upgrade/upgrade.type.d.mts +38 -0
  155. package/api/upgrade/upgrade.type.mjs +16 -0
  156. package/assets/codemods/__tests__/runner.test.mjs +330 -8
  157. package/assets/codemods/integration-discovery.mjs +8 -2
  158. package/assets/codemods/integration-discovery.test.mjs +15 -0
  159. package/assets/codemods/integration-runner.mjs +56 -4
  160. package/assets/codemods/integration-runner.protection.test.mjs +153 -0
  161. package/assets/codemods/run-codemod.mjs +177 -34
  162. package/assets/codemods/runner.mjs +350 -102
  163. package/assets/codemods/term-log.mjs +32 -8
  164. package/assets/codemods/term-log.test.mjs +19 -1
  165. package/assets/codemods/transform-prop.mjs +109 -0
  166. package/assets/codemods/transform-prop.test.mjs +95 -0
  167. package/assets/codemods/transforms/next/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
  168. package/assets/codemods/transforms/next/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
  169. package/assets/codemods/transforms/next/index.mjs +19 -1
  170. package/assets/codemods/transforms/next/migrate-native-picker-to-presentation.mjs +148 -0
  171. package/assets/codemods/transforms/next/migrate-theme-catalog-to-descriptors.mjs +141 -0
  172. package/assets/codemods/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +86 -165
  173. package/assets/codemods/transforms/v0.0.14/rename-status-variants.mjs +72 -210
  174. package/assets/codemods/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +83 -115
  175. package/assets/codemods/transforms/v0.1.8/rename-avatar-size-scale.mjs +57 -186
  176. package/assets/codemods/transforms/v0.6.0/__tests__/next-codemods.test.mjs +47 -0
  177. package/assets/codemods/transforms/v0.6.0/rename-resizable-pixel-bounds.mjs +57 -10
  178. package/assets/docs/getting-started.doc.mjs +2 -2
  179. package/assets/docs/principles.doc.mjs +6 -6
  180. package/assets/docs/styling-libraries.doc.mjs +2 -2
  181. package/assets/docs/styling.doc.mjs +4 -4
  182. package/assets/docs/theme.doc.mjs +4 -4
  183. package/assets/docs/tokens.doc.mjs +1 -1
  184. package/assets/docs/tree/api.doc.mjs +30 -0
  185. package/assets/docs/tree/cli.doc.mjs +23 -0
  186. package/assets/docs/tree/commands.doc.mjs +25 -0
  187. package/assets/docs/{cli-integrations.doc.mjs → tree/integrations.doc.mjs} +66 -38
  188. package/assets/docs/tree/integrations.test.mjs +62 -0
  189. package/assets/docs/tree/writing-docs.doc.mjs +286 -0
  190. package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
  191. package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
  192. package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
  193. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.doc.mjs +14 -0
  194. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.tsx +61 -0
  195. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.doc.mjs +14 -0
  196. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.tsx +126 -0
  197. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.doc.mjs +15 -0
  198. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.tsx +86 -0
  199. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.doc.mjs +14 -0
  200. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.tsx +99 -0
  201. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.doc.mjs +14 -0
  202. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.tsx +122 -0
  203. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.doc.mjs +14 -0
  204. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.tsx +95 -0
  205. package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
  206. package/assets/templates/pages/table-tree/page.tsx +1704 -0
  207. package/assets/templates/pages/table-tree/template.doc.mjs +12 -0
  208. package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
  209. package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
  210. package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
  211. package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
  212. package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
  213. package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
  214. package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
  215. package/authoring/codemod/codemod.doc.mjs +1 -1
  216. package/authoring/codemod/type.ts +12 -0
  217. package/authoring/config/config.doc.mjs +2 -2
  218. package/authoring/config/debug-composition.test.mjs +92 -0
  219. package/authoring/config/type.ts +15 -3
  220. package/authoring/debug/debug.doc.d.mts +11 -0
  221. package/authoring/debug/debug.doc.mjs +182 -0
  222. package/authoring/debug/parse.d.mts +3 -3
  223. package/authoring/doctypes/_schema.d.mts +71 -141
  224. package/authoring/doctypes/_schema.mjs +29 -2
  225. package/authoring/doctypes/base/graph-fields.doc.mjs +8 -6
  226. package/authoring/doctypes/base/type.ts +6 -5
  227. package/authoring/doctypes/command/command.doc.mjs +1 -1
  228. package/authoring/doctypes/command/type.ts +2 -2
  229. package/authoring/doctypes/component/type.ts +2 -2
  230. package/authoring/doctypes/doctypes-new.test.mjs +48 -6
  231. package/authoring/doctypes/enum/enum.doc.mjs +1 -1
  232. package/authoring/doctypes/enum/type.ts +1 -1
  233. package/authoring/doctypes/function/function.doc.mjs +3 -2
  234. package/authoring/doctypes/function/type.ts +3 -2
  235. package/authoring/doctypes/hook/type.ts +2 -2
  236. package/authoring/doctypes/load-contract.test.mjs +3 -2
  237. package/authoring/doctypes/namespace/namespace.doc.mjs +6 -10
  238. package/authoring/doctypes/namespace/parse.test.mjs +23 -25
  239. package/authoring/doctypes/namespace/type.ts +5 -2
  240. package/authoring/doctypes/parse.d.mts +4 -2
  241. package/authoring/doctypes/parse.mjs +10 -5
  242. package/authoring/doctypes/reference/reference.doc.mjs +7 -5
  243. package/authoring/doctypes/reference/type.ts +12 -10
  244. package/authoring/doctypes/schema/schema.doc.mjs +1 -1
  245. package/authoring/doctypes/schema/type.ts +1 -2
  246. package/authoring/doctypes/template/parse.d.mts +2 -0
  247. package/authoring/doctypes/template/parse.mjs +4 -0
  248. package/authoring/doctypes/template/parse.test.mjs +18 -0
  249. package/authoring/doctypes/template/template.doc.mjs +9 -3
  250. package/authoring/doctypes/template/type.ts +8 -0
  251. package/authoring/doctypes/theme/parse.d.mts +35 -0
  252. package/authoring/doctypes/theme/parse.mjs +76 -0
  253. package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
  254. package/authoring/doctypes/theme/theme.doc.mjs +79 -0
  255. package/authoring/doctypes/theme/type.ts +42 -0
  256. package/authoring/doctypes/types.ts +2 -1
  257. package/authoring/gap-report/gap-report.doc.d.mts +12 -0
  258. package/authoring/gap-report/gap-report.doc.mjs +183 -0
  259. package/authoring/identity/identity.doc.mjs +2 -2
  260. package/authoring/index.d.mts +1 -0
  261. package/authoring/index.d.ts +7 -4
  262. package/authoring/index.mjs +2 -1
  263. package/authoring/integration/integration.doc.mjs +2 -2
  264. package/authoring/integration/type.ts +4 -10
  265. package/clients/cli/__tests__/cliManifest.test.ts +27 -29
  266. package/clients/cli/command-load-failure.test.mjs +83 -0
  267. package/clients/cli/commands/blog.doc.mjs +1 -1
  268. package/clients/cli/commands/blog.mjs +23 -8
  269. package/clients/cli/commands/blog.test.mjs +42 -1
  270. package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
  271. package/clients/cli/commands/build-theme.ascii-output.test.mjs +161 -0
  272. package/clients/cli/commands/build-theme.flag-docs.test.mjs +110 -0
  273. package/clients/cli/commands/build-theme.mjs +16 -50
  274. package/clients/cli/commands/build-theme.path-safety.test.mjs +86 -1
  275. package/clients/cli/commands/build-theme.variants.test.mjs +76 -0
  276. package/clients/cli/commands/build.doc.mjs +5 -2
  277. package/clients/cli/commands/build.exit-codes-doc.test.mjs +50 -0
  278. package/clients/cli/commands/build.mjs +37 -49
  279. package/clients/cli/commands/build.playbook.test.mjs +75 -0
  280. package/clients/cli/commands/build.text-fields.test.mjs +40 -0
  281. package/clients/cli/commands/component/index.mjs +3 -8
  282. package/clients/cli/commands/component-ownership.test.mjs +3 -3
  283. package/clients/cli/commands/component-package.test.mjs +46 -0
  284. package/clients/cli/commands/component-resolution.test.mjs +21 -0
  285. package/clients/cli/commands/component.doc.mjs +1 -1
  286. package/clients/cli/commands/component.test.mjs +19 -0
  287. package/clients/cli/commands/detail-levels.test.mjs +2 -2
  288. package/clients/cli/commands/discover.broken-integration.test.mjs +52 -5
  289. package/clients/cli/commands/discover.components-flag.test.mjs +97 -0
  290. package/clients/cli/commands/discover.doc.mjs +5 -3
  291. package/clients/cli/commands/discover.mjs +4 -4
  292. package/clients/cli/commands/discover.text-projection.test.mjs +103 -0
  293. package/clients/cli/commands/docs.doc.mjs +21 -9
  294. package/clients/cli/commands/docs.mjs +182 -68
  295. package/clients/cli/commands/docs.test.mjs +120 -16
  296. package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
  297. package/clients/cli/commands/doctor-integration-docs.doc.mjs +3 -3
  298. package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
  299. package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
  300. package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
  301. package/clients/cli/commands/doctor-integration.package-json.test.mjs +53 -0
  302. package/clients/cli/commands/doctor-integration.test.mjs +83 -8
  303. package/clients/cli/commands/doctor.doc.mjs +1 -1
  304. package/clients/cli/commands/doctor.mjs +30 -25
  305. package/clients/cli/commands/doctor.test.mjs +42 -0
  306. package/clients/cli/commands/gap-report.doc.mjs +17 -6
  307. package/clients/cli/commands/gap-report.test.mjs +72 -0
  308. package/clients/cli/commands/hook/index.mjs +7 -17
  309. package/clients/cli/commands/hook.doc.mjs +1 -1
  310. package/clients/cli/commands/hook.text-projection.test.mjs +45 -0
  311. package/clients/cli/commands/init.doc.mjs +20 -9
  312. package/clients/cli/commands/init.flag-help.test.mjs +153 -0
  313. package/clients/cli/commands/integration-add.controls.test.mjs +132 -0
  314. package/clients/cli/commands/integration-add.doc.mjs +32 -6
  315. package/clients/cli/commands/integration-pack.doc.mjs +1 -1
  316. package/clients/cli/commands/integration-real-world.test.mjs +3 -9
  317. package/clients/cli/commands/integration.doc.mjs +1 -1
  318. package/clients/cli/commands/integration.mjs +1 -0
  319. package/clients/cli/commands/interactive-guard.test.mjs +101 -24
  320. package/clients/cli/commands/json-contract.test.mjs +33 -0
  321. package/clients/cli/commands/layout-check.doc.mjs +15 -4
  322. package/clients/cli/commands/layout-expand.doc.mjs +22 -5
  323. package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
  324. package/clients/cli/commands/layout.doc.mjs +3 -3
  325. package/clients/cli/commands/layout.mjs +21 -9
  326. package/clients/cli/commands/layout.path-help.test.mjs +33 -0
  327. package/clients/cli/commands/layout.stdin-cap.test.mjs +47 -0
  328. package/clients/cli/commands/layout.text-fields.test.mjs +39 -0
  329. package/clients/cli/commands/manifest.doc.mjs +1 -1
  330. package/clients/cli/commands/no-prompt-wording.test.mjs +94 -0
  331. package/clients/cli/commands/search.doc.mjs +7 -4
  332. package/clients/cli/commands/search.mjs +28 -9
  333. package/clients/cli/commands/search.test.mjs +75 -0
  334. package/clients/cli/commands/setup-nudge.test.mjs +6 -0
  335. package/clients/cli/commands/swizzle.doc.mjs +3 -2
  336. package/clients/cli/commands/swizzle.path-safety.test.mjs +42 -0
  337. package/clients/cli/commands/template.doc.mjs +52 -13
  338. package/clients/cli/commands/template.flag-help.test.mjs +117 -0
  339. package/clients/cli/commands/template.mjs +4 -91
  340. package/clients/cli/commands/template.path-help.test.mjs +40 -0
  341. package/clients/cli/commands/text-json-parity.test.mjs +719 -0
  342. package/clients/cli/commands/theme-add.doc.mjs +4 -3
  343. package/clients/cli/commands/theme-build.doc.mjs +8 -7
  344. package/clients/cli/commands/theme-list.doc.mjs +2 -2
  345. package/clients/cli/commands/theme-palette-generate.doc.mjs +3 -3
  346. package/clients/cli/commands/theme-palette-generate.test.mjs +19 -0
  347. package/clients/cli/commands/theme-palette.doc.mjs +1 -1
  348. package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
  349. package/clients/cli/commands/theme-targets.doc.mjs +1 -1
  350. package/clients/cli/commands/theme-template.behavior.test.mjs +12 -0
  351. package/clients/cli/commands/theme-template.doc.mjs +2 -2
  352. package/clients/cli/commands/theme.doc.mjs +1 -1
  353. package/clients/cli/commands/upgrade.ascii-output.test.mjs +87 -0
  354. package/clients/cli/commands/upgrade.doc.mjs +20 -8
  355. package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
  356. package/clients/cli/commands/upgrade.flag-help.test.mjs +188 -0
  357. package/clients/cli/commands/upgrade.hook-output.test.mjs +88 -0
  358. package/clients/cli/commands/upgrade.mjs +29 -7
  359. package/clients/cli/formatters/index.mjs +2 -0
  360. package/clients/cli/formatters/index.test.mjs +6 -0
  361. package/clients/cli/index.mjs +21 -30
  362. package/clients/cli/latest-version-env.test.mjs +50 -0
  363. package/clients/cli/lib/cli-error.test.mjs +7 -0
  364. package/clients/cli/lib/component-format.mjs +9 -9
  365. package/clients/cli/lib/component-format.test.mjs +1 -1
  366. package/clients/cli/lib/define-command.mjs +32 -6
  367. package/clients/cli/lib/doc-text-ascii.test.mjs +82 -0
  368. package/clients/cli/lib/exit-codes.test.mjs +97 -0
  369. package/clients/cli/lib/hook-format.mjs +19 -10
  370. package/clients/cli/lib/json-shim.mjs +38 -2
  371. package/clients/cli/lib/json-shim.test.mjs +83 -0
  372. package/clients/cli/lib/manifest.d.ts +2 -0
  373. package/clients/cli/lib/manifest.mjs +31 -2
  374. package/clients/cli/lib/manifest.test.mjs +17 -0
  375. package/foundation/agent-docs/agent-docs.d.mts +4 -0
  376. package/foundation/agent-docs/agent-docs.mjs +70 -3
  377. package/foundation/agent-docs/agent-docs.path-safety.test.mjs +266 -4
  378. package/foundation/agent-docs/agent-docs.test.mjs +10 -1
  379. package/foundation/config/integration-debug.test.mjs +28 -3
  380. package/foundation/config/project-themes.test.mjs +11 -19
  381. package/foundation/config/project.d.mts +20 -11
  382. package/foundation/config/project.mjs +246 -89
  383. package/foundation/config/project.test.mjs +270 -21
  384. package/foundation/discovery/authoring-self-docs.d.mts +6 -0
  385. package/foundation/discovery/authoring-self-docs.mjs +17 -7
  386. package/foundation/discovery/authoring-self-docs.test.mjs +20 -9
  387. package/foundation/discovery/authoring-surface.d.mts +74 -0
  388. package/foundation/discovery/authoring-surface.mjs +525 -0
  389. package/foundation/discovery/authoring-surface.test.mjs +392 -0
  390. package/foundation/discovery/cli-self-docs.d.mts +119 -0
  391. package/foundation/discovery/cli-self-docs.mjs +490 -0
  392. package/foundation/discovery/cli-self-docs.test.mjs +375 -0
  393. package/foundation/discovery/component-discovery.d.mts +38 -0
  394. package/foundation/discovery/component-discovery.mjs +48 -0
  395. package/foundation/discovery/component-loader.d.mts +35 -38
  396. package/foundation/discovery/component-loader.mjs +53 -222
  397. package/foundation/discovery/docs-discovery.d.mts +108 -10
  398. package/foundation/discovery/docs-discovery.mjs +191 -30
  399. package/foundation/discovery/docs-discovery.test.mjs +71 -32
  400. package/foundation/discovery/docs-output-budget.d.mts +2 -2
  401. package/foundation/discovery/docs-output-budget.mjs +1 -1
  402. package/foundation/discovery/docs-section-key.d.mts +28 -10
  403. package/foundation/discovery/docs-section-key.mjs +134 -33
  404. package/foundation/discovery/docs-section-key.test.mjs +41 -19
  405. package/foundation/discovery/template-adapter.d.mts +113 -11
  406. package/foundation/discovery/template-adapter.fixture-refs.test.mjs +248 -0
  407. package/foundation/discovery/template-adapter.integration-isolation.test.mjs +94 -0
  408. package/foundation/discovery/template-adapter.mjs +772 -82
  409. package/foundation/discovery/template-adapter.test.mjs +57 -0
  410. package/foundation/discovery/theme-discovery.d.mts +67 -7
  411. package/foundation/discovery/theme-discovery.mjs +916 -186
  412. package/foundation/discovery/theme-discovery.test.mjs +613 -219
  413. package/foundation/doc-compiler/bundle.d.mts +47 -0
  414. package/foundation/doc-compiler/bundle.mjs +278 -0
  415. package/foundation/doc-compiler/bundle.test.mjs +266 -0
  416. package/foundation/doc-compiler/compile.d.mts +220 -39
  417. package/foundation/doc-compiler/compile.mjs +311 -15
  418. package/foundation/doc-compiler/diagnostics.d.mts +126 -0
  419. package/foundation/doc-compiler/diagnostics.mjs +305 -0
  420. package/foundation/doc-compiler/doc-compiler.test.mjs +28 -1
  421. package/foundation/doc-compiler/doc-loads.test.mjs +1642 -0
  422. package/foundation/doc-compiler/import.d.mts +24 -0
  423. package/foundation/doc-compiler/import.mjs +59 -0
  424. package/foundation/doc-compiler/inputs.d.mts +102 -0
  425. package/foundation/doc-compiler/inputs.mjs +291 -0
  426. package/foundation/doc-compiler/inputs.test.mjs +299 -0
  427. package/foundation/doc-compiler/ir.d.mts +13 -0
  428. package/foundation/doc-compiler/ir.mjs +196 -12
  429. package/foundation/doc-compiler/lenses.d.mts +3 -2
  430. package/foundation/doc-compiler/lenses.mjs +2 -1
  431. package/foundation/doc-compiler/links.d.mts +135 -0
  432. package/foundation/doc-compiler/links.mjs +253 -0
  433. package/foundation/doc-compiler/links.test.mjs +139 -0
  434. package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
  435. package/foundation/doc-compiler/overlays.d.mts +37 -0
  436. package/foundation/doc-compiler/overlays.mjs +206 -0
  437. package/foundation/doc-compiler/parse-readable.d.mts +9 -0
  438. package/foundation/doc-compiler/parse-readable.mjs +29 -0
  439. package/foundation/doc-compiler/read.d.mts +127 -0
  440. package/foundation/doc-compiler/read.mjs +325 -0
  441. package/foundation/doc-compiler/read.test.mjs +313 -0
  442. package/foundation/doc-compiler/source.d.mts +33 -0
  443. package/foundation/doc-compiler/source.mjs +128 -0
  444. package/foundation/doc-compiler/tree.d.mts +288 -0
  445. package/foundation/doc-compiler/tree.mjs +876 -0
  446. package/foundation/doc-compiler/tree.test.mjs +598 -0
  447. package/foundation/fs/file-protection.d.mts +33 -0
  448. package/foundation/fs/file-protection.mjs +825 -0
  449. package/foundation/fs/file-protection.test.mjs +250 -0
  450. package/foundation/fs/module-loader.d.mts +1 -0
  451. package/foundation/fs/module-loader.mjs +50 -1
  452. package/foundation/fs/module-loader.stdout.test.mjs +332 -0
  453. package/foundation/fs/path-safety.d.mts +3 -2
  454. package/foundation/fs/path-safety.mjs +49 -19
  455. package/foundation/fs/path-safety.test.mjs +50 -0
  456. package/foundation/fs/publish-file-hardlink-unavailable.test.mjs +129 -94
  457. package/foundation/integrations/autolink.d.mts +58 -1
  458. package/foundation/integrations/autolink.mjs +143 -52
  459. package/foundation/integrations/autolink.test.mjs +1 -1
  460. package/foundation/integrations/cli-requirement.d.mts +45 -0
  461. package/foundation/integrations/cli-requirement.mjs +154 -0
  462. package/foundation/integrations/cli-requirement.test.mjs +109 -0
  463. package/foundation/integrations/contribution-fixes.d.mts +145 -0
  464. package/foundation/integrations/contribution-fixes.mjs +1284 -0
  465. package/foundation/integrations/contribution-inventory.d.mts +3 -2
  466. package/foundation/integrations/contribution-inventory.mjs +27 -24
  467. package/foundation/integrations/contribution-inventory.test.mjs +86 -27
  468. package/foundation/integrations/integration-warnings.d.mts +9 -2
  469. package/foundation/integrations/integration-warnings.mjs +51 -26
  470. package/foundation/integrations/integration-warnings.test.mjs +74 -1
  471. package/foundation/integrations/integrations.d.mts +3 -0
  472. package/foundation/integrations/integrations.mjs +11 -97
  473. package/foundation/integrations/provider-ledger.test.mjs +275 -0
  474. package/foundation/integrations/provider-resolution.d.mts +152 -0
  475. package/foundation/integrations/provider-resolution.mjs +576 -0
  476. package/foundation/integrations/provider-resolution.test.mjs +369 -0
  477. package/foundation/integrations/theme-descriptor.d.mts +8 -0
  478. package/foundation/integrations/theme-descriptor.mjs +44 -0
  479. package/foundation/integrations/validate-contributions.mjs +121 -29
  480. package/foundation/response/base.d.ts +8 -4
  481. package/foundation/response/error-codes.d.mts +3 -1
  482. package/foundation/response/error-codes.d.ts +2 -0
  483. package/foundation/response/error-codes.doc.mjs +13 -4
  484. package/foundation/response/error-codes.mjs +8 -2
  485. package/foundation/response/error-codes.test.mjs +137 -10
  486. package/foundation/response/json-contract.test.mjs +11 -0
  487. package/foundation/response/json.d.mts +4 -2
  488. package/foundation/response/json.mjs +8 -10
  489. package/foundation/response/response-types.doc.mjs +22 -17
  490. package/foundation/response/response-types.doc.test.mjs +158 -0
  491. package/foundation/response/response.doc.mjs +1 -1
  492. package/foundation/text/string-utils.mjs +22 -10
  493. package/foundation/xle/expand.d.mts +2 -0
  494. package/foundation/xle/expand.mjs +4 -3
  495. package/foundation/xle/expand.test.mjs +54 -0
  496. package/foundation/xle/xle.test.mjs +13 -0
  497. package/package.json +10 -9
  498. package/assets/templates/themes/manifest.json +0 -95
  499. package/clients/cli/lib/update-check.mjs +0 -83
  500. package/clients/cli/lib/update-check.test.mjs +0 -137
  501. package/clients/cli/update-hint-commands.test.mjs +0 -54
@@ -8,14 +8,14 @@
8
8
  * English `description` is read from its file; a contributed topic already
9
9
  * carries the one discovery read. The listing never applies --dense/--zh
10
10
  * overlays.
11
- * @output { type: 'docs.list', data: DocsListEntry[] } — one entry per topic in
12
- * read order, each naming the package that owns it, matching
13
- * `astryx --json docs`.
11
+ * @output { type: 'docs.list', data: DocsListEntry[] } — one entry per topic
12
+ * in read order, then one per top-level docs-tree namespace, each naming the
13
+ * package that owns it, matching `astryx --json docs`.
14
14
  * @position Leaf under api/docs. Sibling of detail; both share _adapter.mjs.
15
15
  */
16
16
 
17
- import {pathToFileURL} from 'node:url';
18
- import {loadDocsCatalog} from '../_adapter.mjs';
17
+ import {loadTopicFile} from '../../../foundation/doc-compiler/read.mjs';
18
+ import {holdsOwnName, loadDocsCatalog, projectTree} from '../_adapter.mjs';
19
19
 
20
20
  /**
21
21
  * @param {object} [options]
@@ -24,17 +24,17 @@ import {loadDocsCatalog} from '../_adapter.mjs';
24
24
  */
25
25
  export async function list({cwd} = {}) {
26
26
  const catalog = await loadDocsCatalog(cwd);
27
+ const tree = await projectTree(catalog);
27
28
  /** @type {Array<import('../docs.type.mjs').DocsListEntry>} */
28
29
  const entries = [];
29
30
  for (const entry of catalog.entries()) {
31
+ // A topic whose name opens another doc is not listed (spec:AST-046
32
+ // FR11); `astryx doctor` names the clash.
33
+ if (!holdsOwnName(tree, catalog, entry)) continue;
30
34
  let description = entry.description ?? '';
31
35
  if (entry.description == null) {
32
- try {
33
- const mod = await import(pathToFileURL(entry.path).href);
34
- description = (mod.docs ?? mod.default)?.description ?? '';
35
- } catch {
36
- description = '';
37
- }
36
+ const file = await loadTopicFile(entry.path, null);
37
+ description = file.doc?.description ?? '';
38
38
  }
39
39
  /** @type {import('../docs.type.mjs').DocsListEntry} */
40
40
  const listed = {
@@ -45,5 +45,21 @@ export async function list({cwd} = {}) {
45
45
  if (entry.replaces != null) listed.replaces = entry.replaces;
46
46
  entries.push(listed);
47
47
  }
48
- return {type: 'docs.list', data: entries};
48
+ // The docs tree's top-level namespaces, the CLI's and each integration's,
49
+ // each the way into a whole branch (spec:AST-046 FR7). They go in `meta`,
50
+ // so `data` stays the topic list 0.6 returned: every entry reads as a topic.
51
+ const namespaces = tree.roots().map(root => ({
52
+ topic: root.route,
53
+ description: root.summary,
54
+ package: root.provider,
55
+ }));
56
+ /** @type {NonNullable<import('../docs.type.mjs').DocsListResponse['meta']>} */
57
+ const meta = {};
58
+ if (namespaces.length > 0) meta.namespaces = namespaces;
59
+ // A package whose docs did not load is named, so its author knows why its
60
+ // topics are missing.
61
+ if (catalog.issues.length > 0) meta.notLoaded = [...catalog.issues];
62
+ return Object.keys(meta).length === 0
63
+ ? {type: 'docs.list', data: entries}
64
+ : {type: 'docs.list', data: entries, meta};
49
65
  }
@@ -0,0 +1,43 @@
1
+ // @generated by scripts/sync-api-types.mjs from the JSDoc in api/**/*.mjs.
2
+ // DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
3
+
4
+ /**
5
+ * @typedef {import('../../../foundation/doc-compiler/tree.mjs').DocsTree} DocsTree
6
+ * @typedef {import('../../../foundation/doc-compiler/tree.mjs').TreeNode} TreeNode
7
+ */
8
+ /**
9
+ * The docs.node view of one tree node.
10
+ * @param {import('../../../foundation/discovery/docs-discovery.mjs').DocsCatalog} catalog
11
+ * @param {DocsTree} tree
12
+ * @param {TreeNode} node
13
+ * @returns {Promise<import('../docs.type.mjs').DocsNode>}
14
+ */
15
+ export function nodeView(catalog: import("../../../foundation/discovery/docs-discovery.mjs").DocsCatalog, tree: DocsTree, node: TreeNode): Promise<import("../docs.type.mjs").DocsNode>;
16
+ /**
17
+ * The typed edges a doc declares (spec:AST-047 FR5), resolved to routes: a
18
+ * function doc's `command` and `related`, and a command doc's `fn` and
19
+ * `related`. A bare name resolves among the kinds its field allows; a name
20
+ * that matches docs of more than one allowed kind is an error, never a silent
21
+ * pick. A `command` resolves to the command doc its leading words name, so
22
+ * `integration add theme` (the `integration add` command with its kind
23
+ * argument) opens `integration add`. Every name that resolves to no doc, or to
24
+ * more than one, is returned in `unresolved`; the graph walk test fails on it,
25
+ * so no edge a doc declares can go stale.
26
+ * @param {DocsTree} tree
27
+ * @param {TreeNode} node
28
+ * @returns {{routes: string[], unresolved: string[]}}
29
+ */
30
+ export function typedEdges(tree: DocsTree, node: TreeNode): {
31
+ routes: string[];
32
+ unresolved: string[];
33
+ };
34
+ /**
35
+ * @param {string} route
36
+ * @param {{cwd?: string}} [options]
37
+ * @returns {Promise<import('../docs.type.mjs').DocsNodeResponse>}
38
+ */
39
+ export function node(route: string, options?: {
40
+ cwd?: string;
41
+ }): Promise<import("../docs.type.mjs").DocsNodeResponse>;
42
+ export type DocsTree = import("../../../foundation/doc-compiler/tree.mjs").DocsTree;
43
+ export type TreeNode = import("../../../foundation/doc-compiler/tree.mjs").TreeNode;
@@ -0,0 +1,192 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file docs.node leaf — one namespace or typed doc in the docs tree.
5
+ *
6
+ * @input A route the docs tree resolves: a namespace such as `cli/api`, or a
7
+ * typed doc such as `cli/api/functions/search`, plus {cwd}.
8
+ * @output { type: 'docs.node', data: DocsNode } — the node's identity, title
9
+ * and summary, the namespaces above it, and either its slots with their
10
+ * children (a namespace) or its content (a typed doc). A namespace never
11
+ * lists its grandchildren, so a reader goes down one level at a time.
12
+ * Matches `astryx --json docs <route>`.
13
+ * @position Leaf under api/docs, beside the topic leaves. A guide the tree
14
+ * places is a topic: the detail leaf reads it by its route.
15
+ */
16
+
17
+ import {
18
+ nodeContent,
19
+ placeLinks,
20
+ resolveDocsArgument,
21
+ unknownTopicError,
22
+ } from '../_adapter.mjs';
23
+
24
+ /**
25
+ * @typedef {import('../../../foundation/doc-compiler/tree.mjs').DocsTree} DocsTree
26
+ * @typedef {import('../../../foundation/doc-compiler/tree.mjs').TreeNode} TreeNode
27
+ */
28
+
29
+ /**
30
+ * The docs.node view of one tree node.
31
+ * @param {import('../../../foundation/discovery/docs-discovery.mjs').DocsCatalog} catalog
32
+ * @param {DocsTree} tree
33
+ * @param {TreeNode} node
34
+ * @returns {Promise<import('../docs.type.mjs').DocsNode>}
35
+ */
36
+ export async function nodeView(catalog, tree, node) {
37
+ const {content} = await nodeContent(catalog, tree, node);
38
+ return {
39
+ id: node.id,
40
+ route: node.route,
41
+ kind: node.kind,
42
+ package: node.provider,
43
+ title: node.title,
44
+ summary: node.summary,
45
+ breadcrumb: tree
46
+ .ancestors(node)
47
+ .map(ancestor => ({route: ancestor.route, title: ancestor.title})),
48
+ slots: node.slots
49
+ .filter(slot => slot.children.length > 0)
50
+ .map(slot => ({
51
+ name: slot.name,
52
+ title: slot.title,
53
+ children: slot.children.map(route => {
54
+ const child = /** @type {TreeNode} */ (tree.get(route));
55
+ return {
56
+ route: child.route,
57
+ name: child.route.slice(child.route.lastIndexOf('/') + 1),
58
+ kind: child.kind,
59
+ title: child.title,
60
+ summary: child.summary,
61
+ };
62
+ }),
63
+ })),
64
+ content,
65
+ links: nodeLinks(tree, node),
66
+ };
67
+ }
68
+
69
+ /**
70
+ * The moves a node offers (spec:AST-047): up to the level it sits in (the
71
+ * topic list, for a top-level namespace), and across to the nodes before and
72
+ * after it in its parent's slot.
73
+ * @param {DocsTree} tree
74
+ * @param {TreeNode} node
75
+ * @returns {import('../docs.type.mjs').DocsLinks}
76
+ */
77
+ function nodeLinks(tree, node) {
78
+ const links = placeLinks(tree, node);
79
+ const related = typedEdges(tree, node).routes;
80
+ if (related.length > 0) {
81
+ links.related = related.map(
82
+ route =>
83
+ /** @type {import('../docs.type.mjs').DocsCommand} */ (
84
+ `astryx docs ${route}`
85
+ ),
86
+ );
87
+ }
88
+ return links;
89
+ }
90
+
91
+ /** @type {WeakMap<DocsTree, Map<string, string>>} */
92
+ const routeIndexes = new WeakMap();
93
+
94
+ /**
95
+ * The route of each node, by its kind and name.
96
+ * @param {DocsTree} tree
97
+ * @returns {Map<string, string>}
98
+ */
99
+ function routeIndex(tree) {
100
+ let routes = routeIndexes.get(tree);
101
+ if (!routes) {
102
+ routes = new Map();
103
+ for (const each of tree.nodes.values()) {
104
+ routes.set(`${each.kind}\u0000${each.name}`, each.route);
105
+ }
106
+ routeIndexes.set(tree, routes);
107
+ }
108
+ return routes;
109
+ }
110
+
111
+ /**
112
+ * The kinds of doc each typed field may name. A bare name in one of these
113
+ * fields names a doc of the same provider and one of these kinds, so it is a
114
+ * doc identity (spec:AST-047 FR9).
115
+ */
116
+ const EDGE_KINDS = {
117
+ function: {command: ['command'], related: ['function']},
118
+ command: {fn: ['function'], related: ['command']},
119
+ };
120
+
121
+ /**
122
+ * The typed edges a doc declares (spec:AST-047 FR5), resolved to routes: a
123
+ * function doc's `command` and `related`, and a command doc's `fn` and
124
+ * `related`. A bare name resolves among the kinds its field allows; a name
125
+ * that matches docs of more than one allowed kind is an error, never a silent
126
+ * pick. A `command` resolves to the command doc its leading words name, so
127
+ * `integration add theme` (the `integration add` command with its kind
128
+ * argument) opens `integration add`. Every name that resolves to no doc, or to
129
+ * more than one, is returned in `unresolved`; the graph walk test fails on it,
130
+ * so no edge a doc declares can go stale.
131
+ * @param {DocsTree} tree
132
+ * @param {TreeNode} node
133
+ * @returns {{routes: string[], unresolved: string[]}}
134
+ */
135
+ export function typedEdges(tree, node) {
136
+ const doc = /** @type {any} */ (node.ref)?.selfDoc;
137
+ /** @type {string[]} */
138
+ const routes = [];
139
+ /** @type {string[]} */
140
+ const unresolved = [];
141
+ const fields = /** @type {Record<string, string[]> | undefined} */ (
142
+ /** @type {any} */ (EDGE_KINDS)[node.kind]
143
+ );
144
+ if (!doc || !fields) return {routes, unresolved};
145
+ const index = routeIndex(tree);
146
+ /** @param {string[]} kinds @param {string} name */
147
+ const among = (kinds, name) =>
148
+ kinds
149
+ .map(kind => index.get(`${kind}\u0000${name}`))
150
+ .filter(route => typeof route === 'string');
151
+ for (const [field, kinds] of Object.entries(fields)) {
152
+ const value = doc[field];
153
+ const names = Array.isArray(value) ? value : value == null ? [] : [value];
154
+ for (const name of names) {
155
+ if (typeof name !== 'string' || name.trim() === '') continue;
156
+ let found = among(kinds, name);
157
+ if (found.length === 0 && field === 'command') {
158
+ const words = name.trim().split(/\s+/);
159
+ for (let n = words.length - 1; n > 0 && found.length === 0; n--) {
160
+ found = among(kinds, words.slice(0, n).join(' '));
161
+ }
162
+ }
163
+ if (found.length === 1) routes.push(/** @type {string} */ (found[0]));
164
+ else if (found.length === 0) {
165
+ unresolved.push(`${field} "${name}" names no ${kinds.join(' or ')} doc`);
166
+ } else {
167
+ unresolved.push(
168
+ `${field} "${name}" names more than one doc (${found.join(', ')})`,
169
+ );
170
+ }
171
+ }
172
+ }
173
+ return {
174
+ routes: [...new Set(routes)].filter(route => route !== node.route),
175
+ unresolved,
176
+ };
177
+ }
178
+
179
+ /**
180
+ * @param {string} route
181
+ * @param {{cwd?: string}} [options]
182
+ * @returns {Promise<import('../docs.type.mjs').DocsNodeResponse>}
183
+ */
184
+ export async function node(route, options = {}) {
185
+ const found = await resolveDocsArgument(route, options);
186
+ if (found.kind !== 'node')
187
+ throw await unknownTopicError(route, found.catalog);
188
+ return {
189
+ type: 'docs.node',
190
+ data: await nodeView(found.catalog, found.tree, found.node),
191
+ };
192
+ }
@@ -68,7 +68,13 @@ export function checkAgentDocs(ctx: DoctorContext): DoctorCheck;
68
68
  */
69
69
  export function checkPeerDeps(ctx: DoctorContext): DoctorCheck;
70
70
  /**
71
- * Check 9 — report the detected package manager, and say so when the project's
71
+ * Summarize the combined integration graph, including cross-package warnings.
72
+ * @param {DoctorContext} ctx
73
+ * @returns {DoctorCheck}
74
+ */
75
+ export function checkIntegrationIssues(ctx: DoctorContext): DoctorCheck;
76
+ /**
77
+ * Check 10 — report the detected package manager, and say so when the project's
72
78
  * own declaration disagrees with what is on disk.
73
79
  *
74
80
  * Two states are worth surfacing rather than guessing past, because in both the
@@ -100,12 +106,47 @@ export function checkPackageManager(ctx: DoctorContext): DoctorCheck;
100
106
  export function checkProviderIdentity(ctx: DoctorContext): DoctorCheck;
101
107
  /**
102
108
  * Every authoring self-doc is reachable from `astryx docs authoring`, loads,
103
- * and fits in one read. The audit is imported here, inside the try, so a
104
- * malformed self-doc is reported rather than taking Doctor down.
109
+ * and fits in one read, and every type `@astryxdesign/cli/authoring` exports
110
+ * has its doc there: the self-doc beside the module that declares it. The
111
+ * audits are imported here, inside the try, so a malformed self-doc is
112
+ * reported rather than taking Doctor down.
105
113
  * @param {DoctorContext} [_ctx]
114
+ * @param {{root?: string, sources?: string[], topicKeys?: Set<string> | null}} [options]
115
+ * Another authoring tree, list, or topic index to audit (for tests).
116
+ * @returns {Promise<DoctorCheck>}
117
+ */
118
+ export function checkAuthoringDocs(_ctx?: DoctorContext, options?: {
119
+ root?: string;
120
+ sources?: string[];
121
+ topicKeys?: Set<string> | null;
122
+ }): Promise<DoctorCheck>;
123
+ /**
124
+ * Every command, API function, schema, and enum doc the CLI ships declares a
125
+ * namespace, and something reads it: the docs tree under `astryx docs cli`
126
+ * for `cli/commands` and `cli/api`, `astryx docs authoring` for `authoring`.
127
+ * @param {DoctorContext | Partial<DoctorContext>} _ctx
128
+ * @param {{root?: string, sources?: string[], authoringSources?: string[]}} [options]
129
+ * test seams: the CLI root, the docs to audit, and the authoring topic's list
106
130
  * @returns {Promise<DoctorCheck>}
107
131
  */
108
- export function checkAuthoringDocs(_ctx?: DoctorContext): Promise<DoctorCheck>;
132
+ export function checkCliDocs(_ctx: DoctorContext | Partial<DoctorContext>, options?: {
133
+ root?: string;
134
+ sources?: string[];
135
+ authoringSources?: string[];
136
+ }): Promise<DoctorCheck>;
137
+ /**
138
+ * The docs tree builds with no error, and every CLI typed doc in a `cli/...`
139
+ * group has a route in it (spec:AST-046): each placement names a namespace of
140
+ * its own package and a slot that accepts it, exactly one namespace adopts
141
+ * each doc, and each route belongs to one doc.
142
+ * @param {DoctorContext | Partial<DoctorContext>} _ctx
143
+ * @param {{tree?: import('../../foundation/doc-compiler/tree.mjs').DocsTree}} [options]
144
+ * test seam: a tree to check instead of the CLI's own
145
+ * @returns {Promise<DoctorCheck>}
146
+ */
147
+ export function checkDocsTree(_ctx: DoctorContext | Partial<DoctorContext>, options?: {
148
+ tree?: import("../../foundation/doc-compiler/tree.mjs").DocsTree;
149
+ }): Promise<DoctorCheck>;
109
150
  /**
110
151
  * Every topic reads progressively, in every language it ships: it loads, its
111
152
  * section index and each of its sections fit in one read, and no contributed
@@ -216,6 +257,15 @@ export type DoctorContext = {
216
257
  * could not be built, when it could not.
217
258
  */
218
259
  docsCatalogError?: string | null | undefined;
260
+ /**
261
+ * Combined project-level integration issues, including cross-package template replacement warnings.
262
+ */
263
+ integrationIssues?: {
264
+ package: string;
265
+ code: string;
266
+ severity: "warning" | "error";
267
+ message: string;
268
+ }[] | null | undefined;
219
269
  /**
220
270
  * - Error thrown while resolving the config
221
271
  * path (e.g. multiple config files present), surfaced by checkConfig as a FAIL.
@@ -11,6 +11,7 @@ export const doc = {
11
11
  type: 'function',
12
12
  kind: 'api',
13
13
  name: 'doctor',
14
+ namespace: 'cli/api',
14
15
  displayName: 'doctor()',
15
16
  summary: 'Read-only project + environment health check.',
16
17
  description: