@astryxdesign/cli 0.7.2-canary.fe2c655 → 0.7.3-canary.02f5fe4

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 (694) hide show
  1. package/CHANGELOG.md +119 -0
  2. package/README.md +216 -162
  3. package/api/build/_adapter.d.mts +66 -0
  4. package/api/build/_adapter.mjs +139 -4
  5. package/api/build/blocks/blocks.d.mts +92 -0
  6. package/api/build/blocks/blocks.mjs +528 -0
  7. package/api/build/blocks/blocks.test.mjs +238 -0
  8. package/api/build/blocks/blocks.weights.json +1 -0
  9. package/api/build/build.doc.mjs +4 -0
  10. package/api/build/build.mjs +25 -6
  11. package/api/build/build.type.mjs +1 -1
  12. package/api/build/help/help.mjs +1 -1
  13. package/api/build/kit/answer.d.mts +18 -0
  14. package/api/build/kit/answer.mjs +195 -0
  15. package/api/build/kit/answer.test.mjs +108 -0
  16. package/api/build/kit/kind.d.mts +25 -0
  17. package/api/build/kit/kind.mjs +170 -0
  18. package/api/build/kit/kit.d.mts +2 -4
  19. package/api/build/kit/kit.mjs +8 -406
  20. package/api/build/kit/rank.d.mts +3 -32
  21. package/api/build/kit/rank.mjs +25 -342
  22. package/api/build/kit/rank.test.mjs +2 -1
  23. package/api/build/kit/signals.d.mts +79 -0
  24. package/api/build/kit/signals.mjs +295 -0
  25. package/api/build/kit/start.d.mts +32 -0
  26. package/api/build/kit/start.mjs +163 -0
  27. package/api/build/kit/words.d.mts +72 -0
  28. package/api/build/kit/words.mjs +202 -0
  29. package/api/build/tree.d.mts +20 -0
  30. package/api/build/tree.mjs +53 -0
  31. package/api/build/tree.test.mjs +185 -0
  32. package/api/build/tree.weights.json +1 -0
  33. package/api/component/_adapter.d.mts +72 -1
  34. package/api/component/_adapter.mjs +251 -23
  35. package/api/component/component-replacement.test.mjs +1 -0
  36. package/api/component/component.doc.mjs +6 -1
  37. package/api/component/component.mjs +97 -16
  38. package/api/component/component.test.mjs +95 -0
  39. package/api/component/doc-links.test.mjs +386 -0
  40. package/api/component/integration-export-name.test.mjs +644 -0
  41. package/api/component/list/list.mjs +42 -4
  42. package/api/discover/_adapter.d.mts +131 -12
  43. package/api/discover/_adapter.mjs +520 -34
  44. package/api/discover/_adapter.test.mjs +641 -17
  45. package/api/discover/_catalog-view.d.mts +16 -5
  46. package/api/discover/_catalog-view.mjs +32 -8
  47. package/api/discover/detail/doc/doc.mjs +9 -1
  48. package/api/discover/discover.d.mts +11 -0
  49. package/api/discover/discover.doc.mjs +9 -7
  50. package/api/discover/discover.mjs +120 -19
  51. package/api/discover/discover.type.d.mts +20 -7
  52. package/api/discover/discover.type.mjs +17 -7
  53. package/api/discover/list/list.d.mts +4 -3
  54. package/api/discover/list/list.mjs +17 -10
  55. package/api/docs/_adapter.d.mts +76 -2
  56. package/api/docs/_adapter.mjs +630 -34
  57. package/api/docs/docs-homes.test.mjs +127 -0
  58. package/api/docs/docs.doc.mjs +5 -4
  59. package/api/docs/docs.mjs +2 -1
  60. package/api/docs/docs.test.mjs +39 -20
  61. package/api/docs/integration-tree.test.mjs +42 -20
  62. package/api/docs/integrationDocs.test.mjs +125 -1
  63. package/api/docs/list/list.mjs +12 -2
  64. package/api/docs/namespace-section.test.mjs +6 -6
  65. package/api/docs/reference-blocks.test.mjs +3 -5
  66. package/api/doctor/_adapter.d.mts +128 -0
  67. package/api/doctor/_adapter.mjs +253 -4
  68. package/api/doctor/doctor.d.mts +217 -0
  69. package/api/doctor/doctor.doc.mjs +3 -2
  70. package/api/doctor/doctor.mjs +691 -52
  71. package/api/doctor/doctor.test.mjs +267 -18
  72. package/api/doctor/release-checks.test.mjs +156 -0
  73. package/api/doctor/theme-checks.mjs +17 -4
  74. package/api/doctor/theme-checks.test.mjs +223 -7
  75. package/api/error.d.mts +10 -0
  76. package/api/error.mjs +25 -0
  77. package/api/gap-report/gap-report.d.mts +3 -0
  78. package/api/gap-report/gap-report.doc.mjs +11 -3
  79. package/api/gap-report/gap-report.mjs +219 -52
  80. package/api/gap-report/gap-report.test.mjs +233 -0
  81. package/api/gap-report/gap-report.type.d.mts +41 -0
  82. package/api/gap-report/gap-report.type.mjs +18 -0
  83. package/api/hook/_adapter.mjs +3 -11
  84. package/api/hook/hook.doc.mjs +4 -0
  85. package/api/hook/hook.mjs +1 -1
  86. package/api/hook/list/list.d.mts +1 -1
  87. package/api/index.d.mts +2 -0
  88. package/api/index.mjs +2 -0
  89. package/api/init/_adapter.d.mts +22 -0
  90. package/api/init/_adapter.mjs +59 -0
  91. package/api/init/init.d.mts +7 -5
  92. package/api/init/init.doc.mjs +45 -10
  93. package/api/init/init.mjs +28 -4
  94. package/api/init/init.test.mjs +18 -2
  95. package/api/init/init.type.d.mts +50 -5
  96. package/api/init/init.type.mjs +39 -5
  97. package/api/init/remove/remove.mjs +17 -4
  98. package/api/init/remove/remove.test.mjs +114 -2
  99. package/api/init/run/run.d.mts +1 -1
  100. package/api/init/run/run.mjs +86 -12
  101. package/api/init/user/user.d.mts +14 -0
  102. package/api/init/user/user.mjs +87 -0
  103. package/api/init/user/user.test.mjs +232 -0
  104. package/api/integration/_adapter.d.mts +53 -0
  105. package/api/integration/_adapter.mjs +132 -0
  106. package/api/integration/add-contribution.component-names.test.mjs +66 -0
  107. package/api/integration/add-contribution.mjs +8 -4
  108. package/api/integration/add-contribution.test.mjs +4 -2
  109. package/api/integration/authoring-checks.mjs +192 -14
  110. package/api/integration/authoring-checks.test.mjs +1028 -0
  111. package/api/integration/authoring-checks.type.d.mts +143 -0
  112. package/api/integration/authoring-checks.type.mjs +74 -2
  113. package/api/integration/check/check.d.mts +96 -0
  114. package/api/integration/check/check.mjs +357 -0
  115. package/api/integration/check/check.test.mjs +489 -0
  116. package/api/integration/integration-check.type.d.mts +118 -0
  117. package/api/integration/integration-check.type.mjs +84 -0
  118. package/api/integration/integrationCheck.doc.d.mts +10 -0
  119. package/api/integration/integrationCheck.doc.mjs +73 -0
  120. package/api/integration/integrationComponentConflicts.doc.mjs +45 -6
  121. package/api/integration/integrationDocConflicts.doc.mjs +22 -5
  122. package/api/integration/pack-check.mjs +486 -123
  123. package/api/integration/pack-check.test.mjs +817 -10
  124. package/api/integration/validate-integration-case-disk.test.mjs +111 -0
  125. package/api/integration/validate-integration-fixes.test.mjs +73 -5
  126. package/api/integration/validate-integration-gaps.test.mjs +1975 -0
  127. package/api/integration/validate-integration.d.mts +23 -2
  128. package/api/integration/validate-integration.mjs +358 -45
  129. package/api/integration/validate-integration.test.mjs +88 -8
  130. package/api/integration/validate-integration.type.d.mts +105 -0
  131. package/api/integration/validate-integration.type.mjs +79 -1
  132. package/api/integration/validate-unread-theme-folders.test.mjs +3 -2
  133. package/api/integration/validateIntegration.doc.mjs +19 -3
  134. package/api/search/ORDERING.md +28 -0
  135. package/api/search/_adapter.d.mts +91 -0
  136. package/api/search/_adapter.mjs +172 -0
  137. package/api/search/_adapter.test.mjs +173 -0
  138. package/api/search/_candidate-score.d.mts +40 -0
  139. package/api/search/_candidate-score.mjs +238 -0
  140. package/api/search/_cards.json +6098 -0
  141. package/api/search/_compound.d.mts +50 -0
  142. package/api/search/_compound.mjs +170 -0
  143. package/api/search/_doc-searcher.d.mts +4 -0
  144. package/api/search/_doc-searcher.mjs +23 -0
  145. package/api/search/_doc-searcher.test.mjs +36 -0
  146. package/api/search/_doc-searcher.weights.json +1 -0
  147. package/api/search/_doc-text.d.mts +30 -0
  148. package/api/search/_doc-text.mjs +87 -0
  149. package/api/search/_entries.d.mts +63 -0
  150. package/api/search/_entries.mjs +232 -0
  151. package/api/search/_entries.test.mjs +48 -0
  152. package/api/search/_features.d.mts +35 -0
  153. package/api/search/_features.mjs +155 -0
  154. package/api/search/_gather-components.d.mts +26 -0
  155. package/api/search/_gather-components.mjs +284 -0
  156. package/api/search/_gather-docs.d.mts +20 -0
  157. package/api/search/_gather-docs.mjs +254 -0
  158. package/api/search/_gather-hooks.d.mts +12 -0
  159. package/api/search/_gather-hooks.mjs +52 -0
  160. package/api/search/_gather-templates.d.mts +25 -0
  161. package/api/search/_gather-templates.mjs +107 -0
  162. package/api/search/_lexical.d.mts +135 -0
  163. package/api/search/_lexical.mjs +351 -0
  164. package/api/search/_main-searcher.d.mts +19 -0
  165. package/api/search/_main-searcher.mjs +115 -0
  166. package/api/search/_main-searcher.test.mjs +106 -0
  167. package/api/search/_main-searcher.weights.json +1 -0
  168. package/api/search/_module-doc.d.mts +32 -0
  169. package/api/search/_module-doc.mjs +78 -0
  170. package/api/search/_order.d.mts +32 -0
  171. package/api/search/_order.mjs +162 -0
  172. package/api/search/_order.test.mjs +72 -0
  173. package/api/search/_priority.d.mts +50 -0
  174. package/api/search/_priority.mjs +139 -0
  175. package/api/search/_query-words.d.mts +25 -0
  176. package/api/search/_query-words.mjs +92 -0
  177. package/api/search/_query.d.mts +65 -0
  178. package/api/search/_query.mjs +176 -0
  179. package/api/search/_result.d.mts +97 -0
  180. package/api/search/_result.mjs +150 -0
  181. package/api/search/_score.d.mts +60 -0
  182. package/api/search/_score.mjs +283 -0
  183. package/api/search/_synonyms.d.mts +21 -0
  184. package/api/search/_synonyms.mjs +67 -0
  185. package/api/search/_template-searcher.d.mts +4 -0
  186. package/api/search/_template-searcher.mjs +23 -0
  187. package/api/search/_template-searcher.test.mjs +40 -0
  188. package/api/search/_template-searcher.weights.json +1 -0
  189. package/api/search/_titles.d.mts +33 -0
  190. package/api/search/_titles.mjs +65 -0
  191. package/api/search/_words.d.mts +64 -0
  192. package/api/search/_words.mjs +157 -0
  193. package/api/search/search.d.mts +22 -236
  194. package/api/search/search.doc.mjs +14 -7
  195. package/api/search/search.domain-priority.test.mjs +108 -18
  196. package/api/search/search.integration-check.test.mjs +24 -0
  197. package/api/search/search.mjs +59 -1904
  198. package/api/search/search.test.mjs +193 -15
  199. package/api/search/search.type.d.mts +20 -2
  200. package/api/search/search.type.mjs +12 -2
  201. package/api/search/tree.d.mts +15 -0
  202. package/api/search/tree.mjs +40 -0
  203. package/api/search/tree.test.mjs +66 -0
  204. package/api/search/tree.weights.json +1 -0
  205. package/api/swizzle/_adapter.mjs +2 -2
  206. package/api/swizzle/copy/copy.mjs +29 -15
  207. package/api/template/template-integration.test.mjs +1 -1
  208. package/api/template/template.mjs +5 -1
  209. package/api/template/template.test.mjs +120 -3
  210. package/api/theme/_adapter.d.mts +16 -0
  211. package/api/theme/_adapter.mjs +32 -5
  212. package/api/theme/build/build.d.mts +2 -1
  213. package/api/theme/build/build.family.test.mjs +64 -0
  214. package/api/theme/build/build.mjs +250 -38
  215. package/api/theme/build/build.packed-old-core.test.mjs +21 -3
  216. package/api/theme/build/font-warning.mjs +5 -3
  217. package/api/theme/build/font-warning.test.mjs +2 -1
  218. package/api/theme/remove/remove.test.mjs +2 -2
  219. package/api/theme/targets/targets.mjs +3 -10
  220. package/api/theme/themeBuild.doc.mjs +4 -4
  221. package/api/theme/themeTargets.doc.mjs +4 -0
  222. package/api/theme/use/use.test.mjs +1 -1
  223. package/api/upgrade/_adapter.d.mts +97 -11
  224. package/api/upgrade/_adapter.mjs +315 -32
  225. package/api/upgrade/registry/registry.d.mts +10 -4
  226. package/api/upgrade/registry/registry.mjs +33 -16
  227. package/api/upgrade/registry/registry.test.mjs +85 -0
  228. package/api/upgrade/run/cli-behind-core.test.mjs +438 -0
  229. package/api/upgrade/run/run.d.mts +4 -2
  230. package/api/upgrade/run/run.mjs +48 -4
  231. package/api/upgrade/run/run.test.mjs +417 -3
  232. package/api/upgrade/status/status.d.mts +21 -5
  233. package/api/upgrade/status/status.mjs +45 -8
  234. package/api/upgrade/upgrade.doc.mjs +16 -8
  235. package/api/upgrade/upgrade.mjs +18 -3
  236. package/api/upgrade/upgrade.test.mjs +194 -0
  237. package/api/upgrade/upgrade.type.d.mts +28 -3
  238. package/api/upgrade/upgrade.type.mjs +24 -7
  239. package/assets/codemods/__tests__/registry.test.mjs +1 -0
  240. package/assets/codemods/registry.mjs +1 -0
  241. package/assets/codemods/runner.mjs +7 -1
  242. package/assets/codemods/transforms/v0.7.0/__tests__/validate-data-token-ownership.test.mjs +11 -0
  243. package/assets/codemods/transforms/v0.7.0/validate-data-token-ownership.mjs +3 -3
  244. package/assets/codemods/transforms/v0.7.2/__tests__/migrate-list-edge-compensation-to-edge.test.mjs +120 -0
  245. package/assets/codemods/transforms/v0.7.2/index.mjs +20 -0
  246. package/assets/codemods/transforms/v0.7.2/migrate-list-edge-compensation-to-edge.mjs +198 -0
  247. package/assets/discover/official-packages.json +367 -0
  248. package/assets/docs/README.md +10 -0
  249. package/assets/docs/author-a-theme.doc.mjs +5 -5
  250. package/assets/docs/browser-support.doc.mjs +1 -1
  251. package/assets/docs/getting-started.doc.mjs +26 -6
  252. package/assets/docs/is-my-code-good.doc.mjs +287 -0
  253. package/assets/docs/styling-overview.doc.mjs +1 -1
  254. package/assets/docs/theme.doc.dense.mjs +1 -1
  255. package/assets/docs/theme.doc.mjs +2 -2
  256. package/assets/docs/theme.doc.zh.mjs +1 -1
  257. package/assets/docs/tree/add-a-component.doc.mjs +22 -2
  258. package/assets/docs/tree/add-a-theme.doc.mjs +14 -4
  259. package/assets/docs/tree/add-a-topic.doc.mjs +54 -9
  260. package/assets/docs/tree/agent-guidance.doc.mjs +19 -5
  261. package/assets/docs/tree/api.doc.mjs +6 -0
  262. package/assets/docs/tree/authoring.doc.mjs +61 -0
  263. package/assets/docs/tree/block-template.doc.mjs +8 -20
  264. package/assets/docs/tree/build-the-template.doc.mjs +1 -1
  265. package/assets/docs/tree/building-blocks.doc.mjs +6 -2
  266. package/assets/docs/tree/check-the-props.doc.mjs +201 -0
  267. package/assets/docs/tree/check-your-docs.doc.mjs +69 -11
  268. package/assets/docs/tree/checks.doc.mjs +32 -24
  269. package/assets/docs/tree/ci-and-containers.doc.mjs +101 -0
  270. package/assets/docs/tree/cli-command.doc.mjs +142 -0
  271. package/assets/docs/tree/cli.doc.mjs +7 -1
  272. package/assets/docs/tree/codemods.doc.mjs +17 -7
  273. package/assets/docs/tree/commands.doc.mjs +7 -1
  274. package/assets/docs/tree/component-family.doc.mjs +8 -6
  275. package/assets/docs/tree/component-imports.doc.mjs +21 -3
  276. package/assets/docs/tree/components.doc.mjs +7 -1
  277. package/assets/docs/tree/computer-agent-guide.doc.mjs +160 -0
  278. package/assets/docs/tree/computer-integrations.doc.mjs +93 -0
  279. package/assets/docs/tree/configuration.doc.mjs +8 -4
  280. package/assets/docs/tree/debug-and-gap-reports.doc.mjs +41 -22
  281. package/assets/docs/tree/define-the-theme.doc.mjs +7 -6
  282. package/assets/docs/tree/describe-the-component.doc.mjs +3 -3
  283. package/assets/docs/tree/docs.doc.mjs +9 -3
  284. package/assets/docs/tree/document-the-template.doc.mjs +1 -1
  285. package/assets/docs/tree/document-the-theme.doc.mjs +4 -4
  286. package/assets/docs/tree/export-template-assets.doc.mjs +1 -1
  287. package/assets/docs/tree/extend-or-replace.doc.mjs +19 -9
  288. package/assets/docs/{authoring.doc.mjs → tree/field-reference.doc.mjs} +4 -3
  289. package/assets/docs/tree/fonts-and-assets.doc.mjs +3 -3
  290. package/assets/docs/tree/generate-a-palette.doc.mjs +8 -6
  291. package/assets/docs/tree/global-integrations.doc.mjs +124 -0
  292. package/assets/docs/tree/global.doc.mjs +131 -0
  293. package/assets/docs/tree/grade-template-with-agent.doc.mjs +5 -5
  294. package/assets/docs/tree/help.doc.mjs +2 -2
  295. package/assets/docs/tree/host-entry.doc.mjs +128 -0
  296. package/assets/docs/tree/install-once.doc.mjs +105 -0
  297. package/assets/docs/tree/layout-spacing.doc.mjs +2 -3
  298. package/assets/docs/tree/layout.doc.mjs +6 -6
  299. package/assets/docs/tree/links.doc.mjs +7 -6
  300. package/assets/docs/tree/migration-setup.doc.mjs +3 -2
  301. package/assets/docs/tree/migration-verification.doc.mjs +0 -1
  302. package/assets/docs/tree/migration.doc.mjs +0 -1
  303. package/assets/docs/tree/monorepos.doc.mjs +84 -0
  304. package/assets/docs/tree/package-and-test.doc.mjs +1 -1
  305. package/assets/docs/tree/page-template.doc.mjs +4 -8
  306. package/assets/docs/tree/problems.doc.mjs +205 -0
  307. package/assets/docs/tree/project-global-or-both.doc.mjs +131 -0
  308. package/assets/docs/tree/publishing.doc.mjs +6 -6
  309. package/assets/docs/tree/quick-start.doc.mjs +54 -28
  310. package/assets/docs/tree/reference.doc.mjs +192 -0
  311. package/assets/docs/tree/replace-a-core-component.doc.mjs +15 -7
  312. package/assets/docs/tree/replace-a-core-template.doc.mjs +10 -12
  313. package/assets/docs/tree/scaffold.doc.mjs +1 -1
  314. package/assets/docs/tree/sections-and-placement.doc.mjs +9 -11
  315. package/assets/docs/tree/see-it-in-an-app.doc.mjs +17 -5
  316. package/assets/docs/tree/ship.doc.mjs +2 -2
  317. package/assets/docs/tree/short-and-findable.doc.mjs +9 -8
  318. package/assets/docs/tree/single-component.doc.mjs +15 -6
  319. package/assets/docs/tree/start-a-template.doc.mjs +18 -8
  320. package/assets/docs/tree/subcomponent.doc.mjs +6 -6
  321. package/assets/docs/tree/template-assets.doc.mjs +2 -2
  322. package/assets/docs/tree/template-doc-overview.doc.mjs +6 -17
  323. package/assets/docs/tree/template-fonts.doc.mjs +1 -1
  324. package/assets/docs/tree/template-grading-rubric.doc.mjs +17 -38
  325. package/assets/docs/tree/template-icons.doc.mjs +1 -1
  326. package/assets/docs/tree/template-images-media.doc.mjs +1 -1
  327. package/assets/docs/tree/template-styles.doc.mjs +2 -2
  328. package/assets/docs/tree/templates.doc.mjs +7 -1
  329. package/assets/docs/tree/test-in-an-app.doc.mjs +7 -7
  330. package/assets/docs/tree/test-template-in-app.doc.mjs +5 -5
  331. package/assets/docs/tree/themes.doc.mjs +5 -1
  332. package/assets/docs/tree/tokens-and-setup.doc.mjs +19 -15
  333. package/assets/docs/tree/tokens-data.doc.mjs +2 -2
  334. package/assets/docs/tree/troubleshooting.doc.mjs +29 -13
  335. package/assets/docs/tree/type-scale.doc.mjs +3 -3
  336. package/assets/docs/tree/uninstall.doc.mjs +109 -0
  337. package/assets/docs/tree/updates.doc.mjs +92 -0
  338. package/assets/docs/tree/upgrading.doc.mjs +6 -6
  339. package/assets/docs/tree/use-a-theme-in-an-app.doc.mjs +15 -3
  340. package/assets/docs/tree/verify-packed-template.doc.mjs +3 -3
  341. package/assets/docs/tree/versioning.doc.mjs +14 -9
  342. package/assets/docs/tree/who-answers.doc.mjs +119 -0
  343. package/assets/docs/tree/write-good-templates.doc.mjs +1 -1
  344. package/assets/docs/tree/write-the-template-file.doc.mjs +7 -6
  345. package/assets/docs/use-a-theme.doc.mjs +2 -2
  346. package/assets/docs/use-integrations.doc.mjs +120 -0
  347. package/assets/docs/working-with-ai.doc.mjs +70 -13
  348. package/assets/templates/themes/butter/butterTheme.ts +4 -2
  349. package/assets/templates/themes/stone/stoneTheme.ts +4 -2
  350. package/assets/templates/themes/y2k/y2kTheme.ts +4 -2
  351. package/assets/theme.template.ts +1 -1
  352. package/authoring/codemod/codemod.doc.mjs +7 -3
  353. package/authoring/config/config.doc.mjs +9 -6
  354. package/authoring/config/type.ts +4 -2
  355. package/authoring/debug/parse.d.mts +5 -5
  356. package/authoring/discover/discover.doc.mjs +7 -1
  357. package/authoring/doctypes/_schema.d.mts +8 -3
  358. package/authoring/doctypes/_schema.mjs +1 -0
  359. package/authoring/doctypes/base/graph-fields.doc.mjs +6 -4
  360. package/authoring/doctypes/command/command.doc.mjs +20 -12
  361. package/authoring/doctypes/command/type.ts +14 -0
  362. package/authoring/doctypes/component/component.doc.mjs +30 -27
  363. package/authoring/doctypes/component/type.ts +21 -8
  364. package/authoring/doctypes/enum/enum.doc.mjs +7 -4
  365. package/authoring/doctypes/function/function.doc.mjs +9 -8
  366. package/authoring/doctypes/hook/hook.doc.mjs +5 -4
  367. package/authoring/doctypes/hook/type.ts +4 -0
  368. package/authoring/doctypes/namespace/namespace.doc.mjs +7 -6
  369. package/authoring/doctypes/reference/reference.doc.mjs +12 -11
  370. package/authoring/doctypes/schema/schema.doc.mjs +10 -10
  371. package/authoring/doctypes/template/integration-template.doc.d.mts +11 -0
  372. package/authoring/doctypes/template/integration-template.doc.mjs +49 -0
  373. package/authoring/doctypes/template/parse.d.mts +6 -2
  374. package/authoring/doctypes/template/parse.mjs +3 -1
  375. package/authoring/doctypes/template/template.doc.mjs +3 -3
  376. package/authoring/doctypes/template/type.ts +22 -0
  377. package/authoring/doctypes/theme/theme.doc.mjs +2 -2
  378. package/authoring/gap-report/gap-report.doc.mjs +2 -2
  379. package/authoring/identity/identity.doc.mjs +3 -3
  380. package/authoring/index.d.ts +2 -0
  381. package/authoring/integration/integration.doc.mjs +30 -6
  382. package/authoring/integration/parse.test.mjs +21 -0
  383. package/authoring/integration/schema.d.mts +16 -3
  384. package/authoring/integration/schema.mjs +34 -2
  385. package/authoring/integration/type.ts +13 -1
  386. package/clients/cli/bin/astryx.mjs +11 -65
  387. package/clients/cli/cli-command.test.mjs +166 -0
  388. package/clients/cli/command-result-coverage.test.mjs +6 -5
  389. package/clients/cli/commands/blog.doc.mjs +1 -0
  390. package/clients/cli/commands/build-theme.batch-report.test.mjs +17 -3
  391. package/clients/cli/commands/build-theme.color-scheme.test.mjs +1 -1
  392. package/clients/cli/commands/build-theme.font-warning.test.mjs +3 -3
  393. package/clients/cli/commands/build-theme.path-safety.test.mjs +224 -6
  394. package/clients/cli/commands/build-theme.registry.test.mjs +5 -2
  395. package/clients/cli/commands/build.doc.mjs +1 -0
  396. package/clients/cli/commands/build.exit-codes-doc.test.mjs +4 -0
  397. package/clients/cli/commands/cli-postinstall.test.mjs +49 -1
  398. package/clients/cli/commands/component.doc.mjs +1 -0
  399. package/clients/cli/commands/{component/index.mjs → component.mjs} +37 -37
  400. package/clients/cli/commands/component.test.mjs +6 -6
  401. package/clients/cli/commands/discover.broken-integration.test.mjs +11 -7
  402. package/clients/cli/commands/discover.doc.mjs +9 -1
  403. package/clients/cli/commands/discover.mjs +144 -93
  404. package/clients/cli/commands/discover.no-source.test.mjs +448 -33
  405. package/clients/cli/commands/discover.sources.test.mjs +20 -1
  406. package/clients/cli/commands/docs.doc.mjs +3 -2
  407. package/clients/cli/commands/docs.mjs +50 -20
  408. package/clients/cli/commands/docs.test.mjs +16 -16
  409. package/clients/cli/commands/doctor-integration-components.doc.mjs +19 -4
  410. package/clients/cli/commands/doctor-integration-docs.doc.mjs +20 -5
  411. package/clients/cli/commands/doctor-integration-templates.doc.mjs +1 -0
  412. package/clients/cli/commands/doctor-integration-validate.doc.mjs +22 -2
  413. package/clients/cli/commands/doctor-integration.test.mjs +936 -3
  414. package/clients/cli/commands/doctor.doc.mjs +12 -2
  415. package/clients/cli/commands/doctor.mjs +332 -7
  416. package/clients/cli/commands/doctor.test.mjs +75 -4
  417. package/clients/cli/commands/gap-report.doc.mjs +15 -2
  418. package/clients/cli/commands/gap-report.mjs +24 -2
  419. package/clients/cli/commands/gap-report.test.mjs +79 -0
  420. package/clients/cli/commands/hook.doc.mjs +1 -0
  421. package/clients/cli/commands/{hook/index.mjs → hook.mjs} +22 -22
  422. package/clients/cli/commands/import-hint-correctness.test.mjs +1 -1
  423. package/clients/cli/commands/init.behavior.test.mjs +235 -1
  424. package/clients/cli/commands/init.doc.mjs +55 -10
  425. package/clients/cli/commands/init.flag-help.test.mjs +1 -0
  426. package/clients/cli/commands/init.mjs +2 -2
  427. package/clients/cli/commands/integration-add.doc.mjs +7 -0
  428. package/clients/cli/commands/integration-authoring.test.mjs +49 -3
  429. package/clients/cli/commands/integration-check.doc.mjs +93 -0
  430. package/clients/cli/commands/integration-check.test.mjs +489 -0
  431. package/clients/cli/commands/integration-pack.doc.mjs +8 -1
  432. package/clients/cli/commands/integration-verify.doc.mjs +8 -1
  433. package/clients/cli/commands/integration.doc.mjs +6 -2
  434. package/clients/cli/commands/integration.mjs +119 -7
  435. package/clients/cli/commands/json-contract.test.mjs +11 -2
  436. package/clients/cli/commands/manifest.doc.mjs +2 -1
  437. package/clients/cli/commands/manifest.mjs +67 -0
  438. package/clients/cli/commands/outside-project.test.mjs +874 -0
  439. package/clients/cli/commands/postinstall.doc.mjs +23 -0
  440. package/clients/cli/commands/postinstall.mjs +31 -0
  441. package/clients/cli/commands/search.doc.mjs +1 -0
  442. package/clients/cli/commands/search.mjs +16 -11
  443. package/clients/cli/commands/search.test.mjs +429 -296
  444. package/clients/cli/commands/setup-nudge.test.mjs +180 -2
  445. package/clients/cli/commands/swizzle.doc.mjs +7 -0
  446. package/clients/cli/commands/swizzle.mjs +5 -3
  447. package/clients/cli/commands/swizzle.routing.test.mjs +19 -2
  448. package/clients/cli/commands/template.doc.mjs +1 -0
  449. package/clients/cli/commands/text-json-parity.test.mjs +5 -0
  450. package/clients/cli/commands/theme-add-lifecycle.test.mjs +3 -3
  451. package/clients/cli/commands/theme-add.doc.mjs +8 -1
  452. package/clients/cli/commands/theme-build.doc.mjs +3 -2
  453. package/clients/cli/commands/theme-eject.doc.mjs +1 -0
  454. package/clients/cli/commands/theme-list.behavior.test.mjs +6 -0
  455. package/clients/cli/commands/theme-list.doc.mjs +1 -0
  456. package/clients/cli/commands/theme-palette-generate.doc.mjs +1 -0
  457. package/clients/cli/commands/theme-remove.doc.mjs +7 -0
  458. package/clients/cli/commands/theme-targets.doc.mjs +1 -0
  459. package/clients/cli/commands/theme-template.doc.mjs +1 -0
  460. package/clients/cli/commands/theme-use.doc.mjs +7 -0
  461. package/clients/cli/commands/{build-theme.mjs → theme.mjs} +27 -14
  462. package/clients/cli/commands/upgrade.config-ordering.test.mjs +2 -1
  463. package/clients/cli/commands/upgrade.doc.mjs +26 -3
  464. package/clients/cli/commands/upgrade.file-protection.test.mjs +3 -2
  465. package/clients/cli/commands/upgrade.hook-output.test.mjs +2 -1
  466. package/clients/cli/commands/upgrade.mjs +9 -2
  467. package/clients/cli/commands/upgrade.older-cli.test.mjs +160 -0
  468. package/clients/cli/commands/upgrade.subfolder-path.test.mjs +97 -0
  469. package/clients/cli/index.mjs +156 -100
  470. package/clients/cli/lib/cli-error.mjs +4 -1
  471. package/clients/cli/lib/component-format.mjs +1 -1
  472. package/clients/cli/lib/component-format.test.mjs +1 -1
  473. package/clients/cli/lib/define-command.mjs +14 -9
  474. package/clients/cli/lib/exit-codes.test.mjs +5 -0
  475. package/clients/cli/lib/json-shim.mjs +3 -1
  476. package/clients/cli/lib/manifest.d.ts +9 -0
  477. package/clients/cli/lib/manifest.mjs +17 -1
  478. package/clients/cli/lib/manifest.test.mjs +37 -0
  479. package/clients/cli/lib/welcome-box.mjs +50 -0
  480. package/clients/cli/run.mjs +108 -0
  481. package/foundation/agent-docs/agent-doc-state.d.mts +67 -13
  482. package/foundation/agent-docs/agent-doc-state.mjs +123 -14
  483. package/foundation/agent-docs/agent-docs.d.mts +104 -15
  484. package/foundation/agent-docs/agent-docs.mjs +1028 -114
  485. package/foundation/agent-docs/agent-docs.path-safety.test.mjs +1239 -17
  486. package/foundation/agent-docs/agent-docs.test.mjs +683 -39
  487. package/foundation/agent-docs/computer-agent-text.d.mts +170 -0
  488. package/foundation/agent-docs/computer-agent-text.mjs +750 -0
  489. package/foundation/agent-docs/computer-agent-text.test.mjs +699 -0
  490. package/foundation/config/project.d.mts +35 -3
  491. package/foundation/config/project.mjs +243 -26
  492. package/foundation/config/project.test.mjs +122 -0
  493. package/foundation/config/theme-state.mjs +5 -4
  494. package/foundation/discovery/authoring-self-docs.d.mts +7 -0
  495. package/foundation/discovery/authoring-self-docs.mjs +17 -4
  496. package/foundation/discovery/authoring-self-docs.test.mjs +15 -3
  497. package/foundation/discovery/authoring-surface.d.mts +1 -1
  498. package/foundation/discovery/authoring-surface.mjs +2 -2
  499. package/foundation/discovery/authoring-surface.test.mjs +1 -1
  500. package/foundation/discovery/cli-self-docs.d.mts +2 -1
  501. package/foundation/discovery/cli-self-docs.mjs +22 -4
  502. package/foundation/discovery/cli-self-docs.test.mjs +3 -2
  503. package/foundation/discovery/component-discovery.d.mts +227 -10
  504. package/foundation/discovery/component-discovery.export-names.test.mjs +760 -0
  505. package/foundation/discovery/component-discovery.mjs +940 -57
  506. package/foundation/discovery/component-discovery.test.mjs +96 -0
  507. package/foundation/discovery/component-loader.d.mts +1 -1
  508. package/foundation/discovery/component-replacement.mjs +20 -1
  509. package/foundation/discovery/component-replacement.test.mjs +40 -0
  510. package/foundation/discovery/copied-passages.d.mts +216 -0
  511. package/foundation/discovery/copied-passages.mjs +720 -0
  512. package/foundation/discovery/copied-passages.test.mjs +124 -0
  513. package/foundation/discovery/doc-consistency.d.mts +34 -0
  514. package/foundation/discovery/doc-consistency.mjs +513 -0
  515. package/foundation/discovery/doc-consistency.test.mjs +347 -0
  516. package/foundation/discovery/doc-fluff.d.mts +112 -0
  517. package/foundation/discovery/doc-fluff.mjs +328 -0
  518. package/foundation/discovery/doc-fluff.test.mjs +142 -0
  519. package/foundation/discovery/doc-types.d.mts +157 -0
  520. package/foundation/discovery/doc-types.mjs +1231 -0
  521. package/foundation/discovery/doc-types.test.mjs +744 -0
  522. package/foundation/discovery/docs-discovery.d.mts +88 -0
  523. package/foundation/discovery/docs-discovery.mjs +97 -3
  524. package/foundation/discovery/integration-doc-files.d.mts +22 -0
  525. package/foundation/discovery/integration-doc-files.mjs +231 -0
  526. package/foundation/discovery/integration-doc-files.test.mjs +246 -0
  527. package/foundation/discovery/module-exports.d.mts +68 -0
  528. package/foundation/discovery/module-exports.mjs +609 -31
  529. package/foundation/discovery/module-exports.test.mjs +172 -0
  530. package/foundation/discovery/package-tsconfig.d.mts +14 -0
  531. package/foundation/discovery/package-tsconfig.mjs +228 -0
  532. package/foundation/discovery/package-tsconfig.test.mjs +210 -0
  533. package/foundation/discovery/project-typescript.d.mts +32 -0
  534. package/foundation/discovery/project-typescript.mjs +89 -0
  535. package/foundation/discovery/prop-drift.d.mts +297 -0
  536. package/foundation/discovery/prop-drift.mjs +2428 -0
  537. package/foundation/discovery/prop-drift.test.mjs +2337 -0
  538. package/foundation/discovery/runner-allowlist.d.mts +38 -0
  539. package/foundation/discovery/runner-allowlist.mjs +51 -0
  540. package/foundation/discovery/runner-commands.d.mts +77 -0
  541. package/foundation/discovery/runner-commands.mjs +294 -0
  542. package/foundation/discovery/runner-commands.test.mjs +128 -0
  543. package/foundation/discovery/stray-pointers.d.mts +52 -0
  544. package/foundation/discovery/stray-pointers.mjs +293 -0
  545. package/foundation/discovery/stray-pointers.test.mjs +86 -0
  546. package/foundation/discovery/template-adapter.mjs +92 -6
  547. package/foundation/discovery/template-needs.mjs +6 -46
  548. package/foundation/discovery/theme-discovery.mjs +147 -3
  549. package/foundation/discovery/theme-imports.mjs +8 -4
  550. package/foundation/discovery/theme-imports.test.mjs +1 -1
  551. package/foundation/discovery/type-match.d.mts +53 -0
  552. package/foundation/discovery/type-match.mjs +660 -0
  553. package/foundation/discovery/type-match.test.mjs +169 -0
  554. package/foundation/discovery/type-text.d.mts +68 -0
  555. package/foundation/discovery/type-text.mjs +658 -0
  556. package/foundation/discovery/type-text.test.mjs +196 -0
  557. package/foundation/discovery/unresolved-references.d.mts +62 -0
  558. package/foundation/discovery/unresolved-references.mjs +790 -0
  559. package/foundation/discovery/unresolved-references.test.mjs +567 -0
  560. package/foundation/doc-compiler/doc-loads.test.mjs +84 -10
  561. package/foundation/doc-compiler/inputs.mjs +27 -1
  562. package/foundation/doc-compiler/inputs.test.mjs +0 -1
  563. package/foundation/doc-compiler/links.d.mts +41 -5
  564. package/foundation/doc-compiler/links.mjs +167 -28
  565. package/foundation/doc-compiler/links.test.mjs +97 -4
  566. package/foundation/doc-compiler/read.d.mts +1 -1
  567. package/foundation/doc-compiler/read.mjs +59 -1
  568. package/foundation/doc-compiler/read.test.mjs +11 -2
  569. package/foundation/doc-compiler/split-topic-keywords.test.mjs +3 -2
  570. package/foundation/doc-compiler/tree.d.mts +32 -6
  571. package/foundation/doc-compiler/tree.mjs +107 -44
  572. package/foundation/doc-compiler/tree.test.mjs +14 -7
  573. package/foundation/env/cli-command.d.mts +83 -0
  574. package/foundation/env/cli-command.mjs +152 -0
  575. package/foundation/env/cli-command.test.mjs +129 -0
  576. package/foundation/env/node-version.test.mjs +15 -3
  577. package/foundation/env/package-manager.d.mts +93 -9
  578. package/foundation/env/package-manager.global.test.mjs +66 -0
  579. package/foundation/env/package-manager.mjs +184 -13
  580. package/foundation/env/package-manager.test.mjs +341 -15
  581. package/foundation/env/project-scope.d.mts +9 -0
  582. package/foundation/env/project-scope.mjs +33 -0
  583. package/foundation/env/search-path.d.mts +42 -0
  584. package/foundation/env/search-path.mjs +205 -0
  585. package/foundation/env/search-path.test.mjs +122 -0
  586. package/foundation/env/user-dirs.d.mts +39 -0
  587. package/foundation/env/user-dirs.mjs +93 -0
  588. package/foundation/env/user-dirs.test.mjs +72 -0
  589. package/foundation/env/user-settings.d.mts +46 -0
  590. package/foundation/env/user-settings.mjs +106 -0
  591. package/foundation/env/user-settings.test.mjs +64 -0
  592. package/foundation/fs/file-protection.mjs +15 -1
  593. package/foundation/fs/module-loader.d.mts +2 -1
  594. package/foundation/fs/module-loader.mjs +60 -4
  595. package/foundation/fs/module-loader.stdout.test.mjs +3 -2
  596. package/foundation/fs/module-loader.test.mjs +194 -0
  597. package/foundation/fs/path-compare.d.mts +33 -0
  598. package/foundation/fs/path-compare.mjs +73 -0
  599. package/foundation/fs/paths.d.mts +122 -4
  600. package/foundation/fs/paths.mjs +675 -29
  601. package/foundation/fs/paths.test.mjs +439 -54
  602. package/foundation/fs/read-record.d.mts +18 -0
  603. package/foundation/fs/read-record.mjs +131 -0
  604. package/foundation/fs/read-record.test.mjs +77 -0
  605. package/foundation/integrations/autolink.d.mts +2 -1
  606. package/foundation/integrations/autolink.mjs +4 -13
  607. package/foundation/integrations/cli-peer-version.d.mts +36 -0
  608. package/foundation/integrations/cli-peer-version.mjs +132 -0
  609. package/foundation/integrations/cli-peer-version.test.mjs +354 -0
  610. package/foundation/integrations/computer-integrations.d.mts +81 -0
  611. package/foundation/integrations/computer-integrations.mjs +345 -0
  612. package/foundation/integrations/computer-integrations.test.mjs +292 -0
  613. package/foundation/integrations/contribution-inventory.d.mts +26 -20
  614. package/foundation/integrations/contribution-inventory.mjs +97 -8
  615. package/foundation/integrations/exports-subpaths.d.mts +57 -0
  616. package/foundation/integrations/exports-subpaths.mjs +113 -0
  617. package/foundation/integrations/integration-warnings.mjs +3 -2
  618. package/foundation/integrations/integration-warnings.test.mjs +8 -9
  619. package/foundation/integrations/integrations.d.mts +51 -1
  620. package/foundation/integrations/integrations.mjs +106 -4
  621. package/foundation/integrations/issue.ts +6 -0
  622. package/foundation/integrations/public-imports.d.mts +118 -0
  623. package/foundation/integrations/public-imports.mjs +1769 -0
  624. package/foundation/integrations/public-imports.test.mjs +1793 -0
  625. package/foundation/integrations/validate-contributions.d.mts +117 -0
  626. package/foundation/integrations/validate-contributions.mjs +1209 -14
  627. package/foundation/release/agent-text-worker.d.mts +4 -0
  628. package/foundation/release/agent-text-worker.mjs +52 -0
  629. package/foundation/release/cache.d.mts +310 -0
  630. package/foundation/release/cache.mjs +1216 -0
  631. package/foundation/release/cache.test.mjs +923 -0
  632. package/foundation/release/choose.d.mts +207 -0
  633. package/foundation/release/choose.mjs +677 -0
  634. package/foundation/release/choose.test.mjs +427 -0
  635. package/foundation/release/core-worker.d.mts +4 -0
  636. package/foundation/release/core-worker.mjs +38 -0
  637. package/foundation/release/global-state.d.mts +263 -0
  638. package/foundation/release/global-state.mjs +474 -0
  639. package/foundation/release/global-state.test.mjs +381 -0
  640. package/foundation/release/handoff.d.mts +79 -0
  641. package/foundation/release/handoff.e2e.test.mjs +278 -0
  642. package/foundation/release/handoff.mjs +524 -0
  643. package/foundation/release/lock-lease.d.mts +23 -0
  644. package/foundation/release/lock-lease.mjs +80 -0
  645. package/foundation/release/notices.d.mts +307 -0
  646. package/foundation/release/notices.mjs +707 -0
  647. package/foundation/release/notices.test.mjs +586 -0
  648. package/foundation/release/npm-guard.d.mts +4 -0
  649. package/foundation/release/npm-guard.mjs +126 -0
  650. package/foundation/release/project.d.mts +141 -0
  651. package/foundation/release/project.mjs +466 -0
  652. package/foundation/release/project.test.mjs +288 -0
  653. package/foundation/release/refresh-worker.d.mts +4 -0
  654. package/foundation/release/refresh-worker.mjs +27 -0
  655. package/foundation/release/run-context.d.mts +47 -0
  656. package/foundation/release/run-context.mjs +163 -0
  657. package/foundation/release/update-notice-env.d.mts +28 -0
  658. package/foundation/release/update-notice-env.mjs +39 -0
  659. package/foundation/response/base.d.ts +26 -3
  660. package/foundation/response/error-codes.d.mts +3 -1
  661. package/foundation/response/error-codes.doc.mjs +12 -0
  662. package/foundation/response/error-codes.mjs +17 -0
  663. package/foundation/response/error-codes.test.mjs +2 -0
  664. package/foundation/response/json-contract.test.mjs +7 -2
  665. package/foundation/response/json.mjs +4 -1
  666. package/foundation/response/response-types.doc.mjs +22 -11
  667. package/foundation/response/response-types.doc.test.mjs +46 -0
  668. package/foundation/response/response.doc.mjs +3 -3
  669. package/foundation/route/route.d.mts +285 -0
  670. package/foundation/route/route.mjs +324 -0
  671. package/foundation/route/route.test.mjs +153 -0
  672. package/foundation/runtime/hosted-runtime.test.mjs +403 -0
  673. package/foundation/runtime/locked-versions.d.mts +32 -0
  674. package/foundation/runtime/locked-versions.mjs +65 -0
  675. package/foundation/runtime/package-root.d.mts +91 -0
  676. package/foundation/runtime/package-root.mjs +174 -0
  677. package/foundation/runtime/package-set.d.mts +62 -0
  678. package/foundation/runtime/package-set.mjs +130 -0
  679. package/foundation/runtime/package-set.test.mjs +432 -0
  680. package/foundation/text/string-utils.d.mts +2 -1
  681. package/foundation/text/string-utils.mjs +16 -5
  682. package/foundation/text/suggest-order.d.mts +72 -0
  683. package/foundation/text/suggest-order.mjs +363 -0
  684. package/foundation/text/suggest-order.test.mjs +259 -0
  685. package/foundation/xle/browser-imports.test.mjs +74 -0
  686. package/foundation/xle/registry.mjs +4 -0
  687. package/foundation/xle/registry.test.mjs +28 -0
  688. package/host/door-conformance.test.mjs +274 -0
  689. package/host/index.d.ts +116 -0
  690. package/host/index.mjs +295 -0
  691. package/host/index.test.mjs +302 -0
  692. package/package.json +16 -11
  693. package/scripts/postinstall.mjs +24 -5
  694. package/assets/docs/tree/integrations.doc.mjs +0 -40
@@ -16,6 +16,7 @@
16
16
  import * as fs from 'node:fs';
17
17
  import * as path from 'node:path';
18
18
  import {assertWithin, PathSafetyError} from '../fs/path-safety.mjs';
19
+ import {formatCliCommand} from '../env/package-manager.mjs';
19
20
 
20
21
  export const LOCAL_THEME_ROOT = './src/themes';
21
22
  export const THEME_MODULE_BASENAME = 'astryx-themes';
@@ -106,7 +107,7 @@ export function themeModuleCandidates(projectDir) {
106
107
  function validThemeRecord(value, label) {
107
108
  if (!isRecord(value) || !isRecord(value.themes)) {
108
109
  throw new ThemeStateError(
109
- `${label} must carry a static ${THEME_RECORD_MARKER} header. Regenerate it with \`astryx theme add <slug>\`.`,
110
+ `${label} must carry a static ${THEME_RECORD_MARKER} header. Regenerate it with \`${formatCliCommand('theme add <slug>')}\`.`,
110
111
  );
111
112
  }
112
113
  const keys = Object.keys(value);
@@ -139,7 +140,7 @@ function validThemeRecord(value, label) {
139
140
  !THEME_SLUG_RE.test(value.defaultThemeSlug)
140
141
  ) {
141
142
  throw new ThemeStateError(
142
- `${label} defaultThemeSlug must be a lowercase kebab-case slug. Regenerate it with \`astryx theme use <slug>\`.`,
143
+ `${label} defaultThemeSlug must be a lowercase kebab-case slug. Regenerate it with \`${formatCliCommand('theme use <slug>')}\`.`,
143
144
  );
144
145
  }
145
146
  return {themes, defaultSlug: value.defaultThemeSlug};
@@ -159,7 +160,7 @@ export function parseThemeModuleRecord(source, label = 'theme module') {
159
160
  .filter(line => /^\s*\*\s*@astryx-theme-record\s+/u.test(line));
160
161
  if (recordLines.length !== 1) {
161
162
  throw new ThemeStateError(
162
- `${label} must carry exactly one static ${THEME_RECORD_MARKER} header. Regenerate it with \`astryx theme add <slug>\`.`,
163
+ `${label} must carry exactly one static ${THEME_RECORD_MARKER} header. Regenerate it with \`${formatCliCommand('theme add <slug>')}\`.`,
163
164
  );
164
165
  }
165
166
  const payload = recordLines[0].replace(
@@ -318,7 +319,7 @@ export function readThemeState(cwd = process.cwd()) {
318
319
  export function renderThemeModule(themes, defaultSlug, typescript) {
319
320
  if (!themes.some(theme => theme.slug === defaultSlug)) {
320
321
  throw new ThemeStateError(
321
- `Default theme "${defaultSlug}" is not added. Run \`astryx theme add ${defaultSlug}\` first.`,
322
+ `Default theme "${defaultSlug}" is not added. Run \`${formatCliCommand(`theme add ${defaultSlug}`)}\` first.`,
322
323
  );
323
324
  }
324
325
  /** @type {string[]} */
@@ -83,5 +83,12 @@ export function auditAuthoringSelfDocs({ root, sources, budget, }?: {
83
83
  }>;
84
84
  /** The directory the self-docs live under. */
85
85
  export const AUTHORING_ROOT: string;
86
+ /** The guide that holds every authoring schema, one section each. */
87
+ export const AUTHORING_REFERENCE_NAME: "field-reference";
88
+ /**
89
+ * Its route. `astryx docs authoring <name>` reads one of its sections through
90
+ * the authoring namespace (spec:AST-046 FR6).
91
+ */
92
+ export const AUTHORING_REFERENCE_ROUTE: "authoring/field-reference";
86
93
  /** Every authoring self-doc, relative to {@link AUTHORING_ROOT}, in reading order. */
87
94
  export const AUTHORING_SELF_DOCS: string[];
@@ -9,7 +9,7 @@
9
9
  * `authoring` reference topic with one section per self-doc, and an audit
10
10
  * naming any self-doc the topic cannot reach, any that fails to load, and any
11
11
  * section over the docs output budget.
12
- * @position Read by assets/docs/authoring.doc.mjs (the topic) and by Doctor
12
+ * @position Read by assets/docs/tree/field-reference.doc.mjs (the guide) and by Doctor
13
13
  * (the audit). Lives in foundation because authoring/ holds only contracts.
14
14
  * A new `*.doc.mjs` under authoring/ must be added to the list, or Doctor and
15
15
  * the self-doc tests fail.
@@ -27,6 +27,15 @@ import {
27
27
  /** The directory the self-docs live under. */
28
28
  export const AUTHORING_ROOT = path.join(CLI_ROOT, 'authoring');
29
29
 
30
+ /** The guide that holds every authoring schema, one section each. */
31
+ export const AUTHORING_REFERENCE_NAME = 'field-reference';
32
+
33
+ /**
34
+ * Its route. `astryx docs authoring <name>` reads one of its sections through
35
+ * the authoring namespace (spec:AST-046 FR6).
36
+ */
37
+ export const AUTHORING_REFERENCE_ROUTE = `authoring/${AUTHORING_REFERENCE_NAME}`;
38
+
30
39
  /** Every authoring self-doc, relative to {@link AUTHORING_ROOT}, in reading order. */
31
40
  export const AUTHORING_SELF_DOCS = [
32
41
  'integration/integration.doc.mjs',
@@ -46,6 +55,7 @@ export const AUTHORING_SELF_DOCS = [
46
55
  'doctypes/reference/reference.doc.mjs',
47
56
  'doctypes/schema/schema.doc.mjs',
48
57
  'doctypes/template/template.doc.mjs',
58
+ 'doctypes/template/integration-template.doc.mjs',
49
59
  'doctypes/theme/theme.doc.mjs',
50
60
  ];
51
61
 
@@ -188,11 +198,14 @@ export function selfDocSection(doc) {
188
198
  */
189
199
  export function buildAuthoringReferenceDoc(docs) {
190
200
  return /** @type {any} */ ({
191
- name: 'authoring',
192
- title: 'Authoring Reference',
201
+ type: 'generic',
202
+ name: AUTHORING_REFERENCE_NAME,
203
+ placement: {parent: 'namespace:authoring', slot: 'reference', order: 10},
204
+ title: 'Field reference',
193
205
  category: 'guide',
206
+ keywords: ['authoring reference', 'field reference', 'every field'],
194
207
  description:
195
- 'Every file an integration author writes, field by field: the integration manifest, astryx.config, codemods, identity, and each doc type.',
208
+ 'Every file an integration author writes, field by field: the integration manifest, astryx.config, codemods, identity, and each doc type. The guides that use them are the rest of {@link namespace:authoring}.',
196
209
  sections: docs.map(selfDocSection),
197
210
  });
198
211
  }
@@ -38,20 +38,32 @@ describe('authoring self-docs', () => {
38
38
  });
39
39
  });
40
40
 
41
- it('builds a valid topic with one section per self-doc', async () => {
42
- const topic = await buildAuthoringTopic();
41
+ it('builds a valid guide with one section per self-doc, placed under authoring', async () => {
42
+ const {placement, ...topic} = await buildAuthoringTopic();
43
43
  expect(problemsInTopic(topic)).toEqual([]);
44
44
  expect(topic.sections).toHaveLength(AUTHORING_SELF_DOCS.length);
45
+ expect(placement).toEqual({
46
+ parent: 'namespace:authoring',
47
+ slot: 'reference',
48
+ order: 10,
49
+ });
45
50
  });
46
51
 
47
52
  it(
48
53
  'is readable progressively through the docs API',
49
54
  async () => {
50
- const index = await docs('authoring', undefined, {index: true});
55
+ const index = await docs('authoring/field-reference', undefined, {
56
+ index: true,
57
+ });
51
58
  expect(index.type).toBe('docs.index');
52
59
  expect(index.data.sections.map(s => s.id)).toContain('integration');
60
+ // The namespace answers a section read from the field reference, as
61
+ // `astryx docs authoring <name>` always has.
53
62
  const section = await docs('authoring', 'integration');
54
63
  expect(section.data.title).toBe('Astryx Integration');
64
+ expect(
65
+ (await docs('authoring/field-reference', 'integration')).data,
66
+ ).toEqual(section.data);
55
67
  expect(section.data.content.some(block => block.type === 'table')).toBe(
56
68
  true,
57
69
  );
@@ -30,7 +30,7 @@ export function tracePublicAuthoringTypes(root?: string): {
30
30
  * document something public: a public type declared beside it, and, when its
31
31
  * title is the name of a type declared beside it, that type.
32
32
  * @param {{root?: string, sources?: string[], topicKeys?: Set<string> | null}} [options]
33
- * `topicKeys` are the keys `astryx docs authoring --index` lists; null skips
33
+ * `topicKeys` are the keys `astryx docs authoring/field-reference --index` lists; null skips
34
34
  * that comparison.
35
35
  * @returns {Promise<{
36
36
  * types: number,
@@ -7,7 +7,7 @@
7
7
  * @input authoring/index.d.ts and the type modules it re-exports, parsed with
8
8
  * jscodeshift and never imported or type-checked (consumer installs have no
9
9
  * TypeScript); the self-docs on disk and in AUTHORING_SELF_DOCS; and the
10
- * section keys `astryx docs authoring --index` lists.
10
+ * section keys `astryx docs authoring/field-reference --index` lists.
11
11
  * @output {@link tracePublicAuthoringTypes}: each exported type and the module
12
12
  * that declares it. {@link auditAuthoringSurface}: each module whose exported
13
13
  * types a reader cannot reach and why, each export that cannot be traced,
@@ -424,7 +424,7 @@ function declaredIn(t, folder, name) {
424
424
  * document something public: a public type declared beside it, and, when its
425
425
  * title is the name of a type declared beside it, that type.
426
426
  * @param {{root?: string, sources?: string[], topicKeys?: Set<string> | null}} [options]
427
- * `topicKeys` are the keys `astryx docs authoring --index` lists; null skips
427
+ * `topicKeys` are the keys `astryx docs authoring/field-reference --index` lists; null skips
428
428
  * that comparison.
429
429
  * @returns {Promise<{
430
430
  * types: number,
@@ -86,7 +86,7 @@ describe('the public authoring surface of this repo', () => {
86
86
  it(
87
87
  'audits clean: every exported type has a readable doc and every self-doc documents one',
88
88
  async () => {
89
- const index = await docs('authoring', undefined, {index: true});
89
+ const index = await docs('authoring/field-reference', undefined, {index: true});
90
90
  const topicKeys = new Set(
91
91
  index.data.sections.map((/** @type {any} */ s) => s.id),
92
92
  );
@@ -102,7 +102,8 @@ export const CLI_SELF_DOC_DIRS: string[];
102
102
  /**
103
103
  * Every namespace a CLI doc may declare, and what reads it. The docs tree
104
104
  * adopts `cli/commands` (under `cli/commands`) and `cli/api` (under
105
- * `cli/api/<kind>s`); `astryx docs authoring` reads `authoring` from its list.
105
+ * `cli/api/<kind>s`); the field reference (`astryx docs authoring/field-reference`)
106
+ * reads `authoring` from its list.
106
107
  * @type {Record<string, {reader: 'tree' | 'authoring'}>}
107
108
  */
108
109
  export const CLI_DOC_NAMESPACES: Record<string, {
@@ -25,6 +25,7 @@ import {
25
25
  oversizedDocSections,
26
26
  } from './docs-output-budget.mjs';
27
27
  import {routeSegment} from './docs-section-key.mjs';
28
+ import {formatCliCommand} from '../env/package-manager.mjs';
28
29
 
29
30
  /** The directories, relative to the CLI root, that hold the CLI's own docs. */
30
31
  export const CLI_SELF_DOC_DIRS = [
@@ -40,7 +41,8 @@ const NAMESPACED_KINDS = new Set(['command', 'function', 'schema', 'enum']);
40
41
  /**
41
42
  * Every namespace a CLI doc may declare, and what reads it. The docs tree
42
43
  * adopts `cli/commands` (under `cli/commands`) and `cli/api` (under
43
- * `cli/api/<kind>s`); `astryx docs authoring` reads `authoring` from its list.
44
+ * `cli/api/<kind>s`); the field reference (`astryx docs authoring/field-reference`)
45
+ * reads `authoring` from its list.
44
46
  * @type {Record<string, {reader: 'tree' | 'authoring'}>}
45
47
  */
46
48
  export const CLI_DOC_NAMESPACES = {
@@ -187,6 +189,19 @@ function sentence(text, more) {
187
189
  return more && text !== '' && !/[.!?:]$/.test(text) ? `${text}.` : text;
188
190
  }
189
191
 
192
+ /**
193
+ * The line a command doc prints for what it does outside a project (spec
194
+ * AST-081 FR4). A group that only holds subcommands declares nothing and
195
+ * prints nothing.
196
+ * @type {Record<string, string>}
197
+ */
198
+ const OUTSIDE_PROJECT_TEXT = {
199
+ same: "Outside a project (`same`): it answers as it would in a new project on this release, reading this release's Core, as it does in a project with nothing installed: the one installed beside the CLI, else one in the per-user cache, which a global install downloads in the background after a command run online (in CI, the first command that needs it downloads it).",
200
+ refuse:
201
+ 'Outside a project (`refuse`): it writes nothing and fails, naming the app project or integration package it needs.',
202
+ own: 'Outside a project (`own`): it does what the description above says it does outside a project.',
203
+ };
204
+
190
205
  /** @param {any[]} notes */
191
206
  function noteBlocks(notes) {
192
207
  return (notes ?? []).filter(note => TOPIC_BLOCKS.has(note?.type));
@@ -251,6 +266,8 @@ function commandSection(cmd, index) {
251
266
  rows: exitCodes.map((/** @type {any} */ e) => [String(e.code), e.when]),
252
267
  });
253
268
  }
269
+ const outside = OUTSIDE_PROJECT_TEXT[cmd.outsideProject];
270
+ if (outside) content.push({type: 'prose', text: outside});
254
271
  // Links name docs by identity; the route in each command is derived when
255
272
  // the doc is read (spec:AST-047 FR9).
256
273
  const subcommands = (cmd.subcommands ?? []).filter(
@@ -318,7 +335,8 @@ function functionSection(fn, index) {
318
335
  // A Default column only when some parameter declares a default, so a
319
336
  // function with none keeps a three-column table.
320
337
  const defaults = params.some(
321
- (/** @type {any} */ p) => typeof p.default === 'string' && p.default !== '',
338
+ (/** @type {any} */ p) =>
339
+ typeof p.default === 'string' && p.default !== '',
322
340
  );
323
341
  content.push({
324
342
  type: 'table',
@@ -475,13 +493,13 @@ export async function auditCliSelfDocs({
475
493
  else {
476
494
  misfiled.push({
477
495
  source,
478
- message: `${source} has namespace "authoring", but \`astryx docs authoring\` does not list it`,
496
+ message: `${source} has namespace "authoring", but \`${formatCliCommand('docs authoring/field-reference')}\` does not list it`,
479
497
  });
480
498
  }
481
499
  } else if (inAuthoring) {
482
500
  misfiled.push({
483
501
  source,
484
- message: `${source} is read in \`astryx docs authoring\`, but its namespace is "${namespace}"`,
502
+ message: `${source} is read in \`${formatCliCommand('docs authoring/field-reference')}\`, but its namespace is "${namespace}"`,
485
503
  });
486
504
  } else {
487
505
  treeDocs.push(doc);
@@ -25,6 +25,7 @@ import {
25
25
  discoverCliSelfDocSources,
26
26
  } from './cli-self-docs.mjs';
27
27
  import {routeSegment} from './docs-section-key.mjs';
28
+ import {formatCliCommand} from '../env/package-manager.mjs';
28
29
 
29
30
  const SLOW = 60_000;
30
31
 
@@ -145,8 +146,8 @@ describe('auditCliSelfDocs', () => {
145
146
  });
146
147
  const result = await audit(root, ['y/y.doc.mjs', 'z/z.doc.mjs']);
147
148
  expect(result.misfiled.map(entry => entry.message)).toEqual([
148
- 'authoring/x/x.doc.mjs has namespace "authoring", but `astryx docs authoring` does not list it',
149
- 'authoring/y/y.doc.mjs is read in `astryx docs authoring`, but its namespace is "cli/api"',
149
+ `authoring/x/x.doc.mjs has namespace "authoring", but \`${formatCliCommand('docs authoring/field-reference')}\` does not list it`,
150
+ `authoring/y/y.doc.mjs is read in \`${formatCliCommand('docs authoring/field-reference')}\`, but its namespace is "cli/api"`,
150
151
  ]);
151
152
  expect(result.authoring).toBe(1);
152
153
  expect(result.tree).toBe(0);
@@ -1,8 +1,27 @@
1
1
  // @generated by scripts/sync-api-types.mjs from the JSDoc in foundation/**/*.mjs.
2
2
  // DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
3
3
 
4
+ /**
5
+ * Whether a component doc is hidden (`hidden: true`), read as discovery
6
+ * reads it: discovery skips a hidden doc.
7
+ * @param {string} docPath
8
+ * @returns {boolean}
9
+ */
10
+ export function isHiddenComponentDoc(docPath: string): boolean;
11
+ /**
12
+ * The entry a family doc gives `name` in its `components`, when the doc is not
13
+ * the component's own (Stack's doc for VStack); null otherwise.
14
+ * @param {any} docs - a loaded component doc
15
+ * @param {string} name - bare component name
16
+ * @returns {any}
17
+ */
18
+ export function familyMember(docs: any, name: string): any;
4
19
  /**
5
20
  * Auto-discover components by scanning for Astryx*.tsx files in core/src/.
21
+ * A component is listed when a doc documents it: a doc in its folder, or, for a
22
+ * component folder with no doc of its own, the doc `findComponentReadme` finds
23
+ * elsewhere (Heading's doc in the Text folder; HStack and VStack as members of
24
+ * Stack's doc).
6
25
  *
7
26
  * Returns an ordered Record where:
8
27
  * - Grouped components use the group name as key: `'Buttons': ['Button', 'IconButton']`
@@ -103,19 +122,129 @@ export function discoverExternalComponentsGrouped(docsDir: string): Record<strin
103
122
  * @returns {string | null}
104
123
  */
105
124
  export function findExternalComponentDoc(docsDir: string, name: string): string | null;
125
+ /** @param {string} docPath */
126
+ export function docStem(docPath: string): string;
127
+ /**
128
+ * The local module a doc's import names: the doc's own `import`, else the
129
+ * subpath its directory publishes, read through the package's `exports` (its
130
+ * `main` when it has none). Undefined when the package directory is unknown;
131
+ * null when the import names another package or resolves to no file.
132
+ *
133
+ * @param {{name?: string, __packageDir?: string, __packageExports?: Record<string, unknown>|null}} integration
134
+ * @param {string} docPath
135
+ * @param {Record<string, any> | null} doc
136
+ * @returns {string | null | undefined}
137
+ */
138
+ export function importedModule(integration: {
139
+ name?: string;
140
+ __packageDir?: string;
141
+ __packageExports?: Record<string, unknown> | null;
142
+ }, docPath: string, doc: Record<string, any> | null): string | null | undefined;
143
+ /**
144
+ * The file an import of the package's own name resolves to, through its
145
+ * package.json `exports` (or `main` when it has none): `@acme/kit` or
146
+ * `@acme/kit/widget`. Null when the specifier names another package, or the
147
+ * package publishes nothing at it.
148
+ * @param {{name?: string, __packageDir?: string, __packageExports?: Record<string, unknown> | null}} integration
149
+ * @param {string} specifier
150
+ * @returns {string | null}
151
+ */
152
+ export function ownPackageModule(integration: {
153
+ name?: string;
154
+ __packageDir?: string;
155
+ __packageExports?: Record<string, unknown> | null;
156
+ }, specifier: string): string | null;
157
+ /**
158
+ * The `.tsx` file in `folder`, or below it, that declares `name`, taking files
159
+ * in path order: the source of a member whose import never reaches a `.tsx`
160
+ * file, as when the import names built output.
161
+ *
162
+ * @param {string} folder
163
+ * @param {string} name
164
+ * @returns {string | null}
165
+ */
166
+ export function folderSourceFor(folder: string, name: string): string | null;
167
+ /**
168
+ * Each family doc under an integration's components root that names an
169
+ * import, with the file the import resolves to: null when it resolves to none,
170
+ * such as build output that does not exist yet.
171
+ *
172
+ * @param {{name: string, components?: string, issuesUrl?: string, __packageDir?: string, __packageExports?: Record<string, unknown>|null}} integration
173
+ * @returns {Array<{docPath: string, module: string | null}>}
174
+ */
175
+ export function familyImports(integration: {
176
+ name: string;
177
+ components?: string;
178
+ issuesUrl?: string;
179
+ __packageDir?: string;
180
+ __packageExports?: Record<string, unknown> | null;
181
+ }): Array<{
182
+ docPath: string;
183
+ module: string | null;
184
+ }>;
185
+ /**
186
+ * Whether a discovered integration record is a member its family doc lists,
187
+ * decided from the files, not from whether the doc loads.
188
+ *
189
+ * @param {{name: string, docPath: string|null}} record
190
+ * @returns {boolean}
191
+ */
192
+ export function isIntegrationMember(record: {
193
+ name: string;
194
+ docPath: string | null;
195
+ }): boolean;
196
+ /**
197
+ * The entry a family doc gives a member that discovery lists under its own
198
+ * name, or null when the record is the doc's own component or the loaded doc
199
+ * has no entry for it.
200
+ *
201
+ * @param {any} doc the doc loaded from `record.docPath`
202
+ * @param {{name: string, docPath: string|null}} record
203
+ * @returns {any}
204
+ */
205
+ export function integrationMemberEntry(doc: any, record: {
206
+ name: string;
207
+ docPath: string | null;
208
+ }): any;
209
+ /**
210
+ * Visit every component doc under an integration's components root, hidden
211
+ * ones included, in discovery order, with its stem.
212
+ * @param {string | undefined} componentsDir
213
+ * @param {(docPath: string, stem: string) => void} visit
214
+ */
215
+ export function forEachIntegrationDoc(componentsDir: string | undefined, visit: (docPath: string, stem: string) => void): void;
216
+ /**
217
+ * Given an integration component doc path, return the sibling component source
218
+ * (`{Name}.tsx`) if one exists, else null.
219
+ *
220
+ * @param {string} docPath absolute path to a `{Name}.doc.{ts,mjs,js}` file
221
+ * @returns {string|null}
222
+ */
223
+ export function integrationSourceForDoc(docPath: string): string | null;
106
224
  /**
107
225
  * Discover ownership records for the components contributed by a single loaded
108
226
  * integration. Scans the integration's resolved `components` dir for same-stem
109
- * doc files and records each with owner package + issuesUrl + sourcePath.
227
+ * doc files and records each with owner package + issuesUrl + sourcePath. A doc
228
+ * that names a differently named export of its file is recorded under that
229
+ * export, and each family member it lists, under the member's name, unless the
230
+ * name is taken: every doc's file name (a hidden doc's too), a Core name a doc
231
+ * in the package replaces, and a name an earlier doc records.
110
232
  *
111
- * @param {{name: string, components?: string, issuesUrl?: string}} integration
233
+ * @param {{name: string, components?: string, issuesUrl?: string, __packageDir?: string, __packageExports?: Record<string, unknown>|null}} integration
112
234
  * a single entry from `loadedIntegrations` (lib/integrations.mjs)
235
+ * @param {{documentedNames?: boolean}} [options] `documentedNames: false`
236
+ * records each doc under its file name alone, without reading the names
237
+ * docs document: for a caller that needs only what each doc says
113
238
  * @returns {Array<{name: string, package: string, docPath: string, sourcePath: string|null, issuesUrl: string|undefined, group: string|null}>}
114
239
  */
115
240
  export function discoverIntegrationComponents(integration: {
116
241
  name: string;
117
242
  components?: string;
118
243
  issuesUrl?: string;
244
+ __packageDir?: string;
245
+ __packageExports?: Record<string, unknown> | null;
246
+ }, { documentedNames }?: {
247
+ documentedNames?: boolean;
119
248
  }): Array<{
120
249
  name: string;
121
250
  package: string;
@@ -129,11 +258,16 @@ export function discoverIntegrationComponents(integration: {
129
258
  * Invalid metadata or a missing same-stem source removes only that component;
130
259
  * callers can report the returned errors while retaining valid siblings. A
131
260
  * component whose doc sets `replaces` carries the value as written; the
132
- * component replacement resolver decides what it means.
261
+ * component replacement resolver decides what it means. A family member is
262
+ * read through its family's doc: it never carries the family's `replaces`, and
263
+ * a family doc that fails to load is reported once. A doc that fails to load
264
+ * is reported under its file name: what it says cannot be trusted.
133
265
  *
134
266
  * @param {{name: string, components?: string, issuesUrl?: string}} integration
267
+ * @param {{documentedNames?: boolean}} [options] as for
268
+ * {@link discoverIntegrationComponents}
135
269
  * @returns {Promise<{
136
- * components: Array<{name: string, package: string, docPath: string, sourcePath: string, issuesUrl: string|undefined, group: string|null, replaces?: unknown}>,
270
+ * components: Array<{name: string, package: string, docPath: string, sourcePath: string|null, issuesUrl: string|undefined, group: string|null, replaces?: unknown}>,
137
271
  * discovered: Array<{name: string, package: string, docPath: string, sourcePath: string|null, issuesUrl: string|undefined, group: string|null}>,
138
272
  * errors: Array<{name: string, message: string}>,
139
273
  * }>}
@@ -142,12 +276,14 @@ export function discoverValidIntegrationComponents(integration: {
142
276
  name: string;
143
277
  components?: string;
144
278
  issuesUrl?: string;
279
+ }, options?: {
280
+ documentedNames?: boolean;
145
281
  }): Promise<{
146
282
  components: Array<{
147
283
  name: string;
148
284
  package: string;
149
285
  docPath: string;
150
- sourcePath: string;
286
+ sourcePath: string | null;
151
287
  issuesUrl: string | undefined;
152
288
  group: string | null;
153
289
  replaces?: unknown;
@@ -165,30 +301,103 @@ export function discoverValidIntegrationComponents(integration: {
165
301
  message: string;
166
302
  }>;
167
303
  }>;
304
+ /**
305
+ * How an owner holds a component name, which the owner rule
306
+ * ({@link unscopedComponentOwners}) reads: `core` when Core documents it;
307
+ * `file` when an integration doc named after its file is recorded under it;
308
+ * `doc` when only a doc records it: an export name, a member, or the file name
309
+ * of a doc recorded under another export.
310
+ * @typedef {'core' | 'file' | 'doc'} NameHold
311
+ */
312
+ /**
313
+ * How a discovered integration record holds its name.
314
+ * @param {{name: string, docPath: string|null}} record
315
+ * @returns {'file' | 'doc'}
316
+ */
317
+ export function integrationRecordHold(record: {
318
+ name: string;
319
+ docPath: string | null;
320
+ }): "file" | "doc";
321
+ /**
322
+ * The integration component a name finds, as discovery records it, and its
323
+ * hold: the same-stem doc first, then a doc that records the name as an export
324
+ * or a member.
325
+ *
326
+ * @param {{name?: string, components?: string, __packageDir?: string, __packageExports?: Record<string, unknown>|null}} integration
327
+ * @param {string} name
328
+ * @returns {{docPath: string, sourcePath: string|null, hold: 'file' | 'doc'} | null}
329
+ */
330
+ export function findIntegrationComponent(integration: {
331
+ name?: string;
332
+ components?: string;
333
+ __packageDir?: string;
334
+ __packageExports?: Record<string, unknown> | null;
335
+ }, name: string): {
336
+ docPath: string;
337
+ sourcePath: string | null;
338
+ hold: "file" | "doc";
339
+ } | null;
340
+ /**
341
+ * The name discovery records a component doc under: the export its `name`
342
+ * documents when the doc is recorded under it, else the doc's file name.
343
+ *
344
+ * @param {{name?: string, components?: string, __packageDir?: string, __packageExports?: Record<string, unknown>|null}} integration
345
+ * @param {string} docPath
346
+ * @returns {string}
347
+ */
348
+ export function recordedDocName(integration: {
349
+ name?: string;
350
+ components?: string;
351
+ __packageDir?: string;
352
+ __packageExports?: Record<string, unknown> | null;
353
+ }, docPath: string): string;
168
354
  /**
169
355
  * Find an integration component's doc file by name within a loaded
170
356
  * integration's resolved `components` dir. Honors the same-stem convention
171
- * (`{Name}.doc.{ts,mjs,js}`), preferring `.ts` → `.mjs` → `.js`.
357
+ * (`{Name}.doc.{ts,mjs,js}`), preferring `.ts` → `.mjs` → `.js`, and finds a
358
+ * doc that records the component under another name: a differently named
359
+ * export of its file, or a member its family doc lists.
172
360
  *
173
- * @param {{components?: string}} integration
361
+ * @param {{name?: string, components?: string, __packageDir?: string, __packageExports?: Record<string, unknown>|null}} integration
174
362
  * @param {string} name bare component name (no `XDS`/`Astryx` prefix)
175
363
  * @returns {string|null}
176
364
  */
177
365
  export function findIntegrationComponentDoc(integration: {
366
+ name?: string;
178
367
  components?: string;
368
+ __packageDir?: string;
369
+ __packageExports?: Record<string, unknown> | null;
179
370
  }, name: string): string | null;
180
371
  /**
181
- * Find an integration component's swizzleable source file (`{Name}.tsx`) by
182
- * name within a loaded integration's resolved `components` dir. Returns null
372
+ * Find an integration component's swizzleable source file by name within a
373
+ * loaded integration's resolved `components` dir: the same-stem `{Name}.tsx`
374
+ * of its doc, or, for a family member, the file that declares it. Returns null
183
375
  * when the integration ships docs without source.
184
376
  *
185
- * @param {{components?: string}} integration
377
+ * @param {{name?: string, components?: string, __packageDir?: string, __packageExports?: Record<string, unknown>|null}} integration
186
378
  * @param {string} name bare component name
187
379
  * @returns {string|null}
188
380
  */
189
381
  export function findIntegrationComponentSource(integration: {
382
+ name?: string;
190
383
  components?: string;
384
+ __packageDir?: string;
385
+ __packageExports?: Record<string, unknown> | null;
191
386
  }, name: string): string | null;
387
+ /**
388
+ * The owner rule: an owner that holds a name only because a doc records it
389
+ * (`hold: 'doc'`) yields to Core and to every file-named owner; `--package`
390
+ * still reaches it. Surfaces resolve a replacement first, then this rule, then
391
+ * which docs load.
392
+ *
393
+ * @template {{hold?: string}} T
394
+ * @param {T[]} owners each with its {@link NameHold}; an owner without one
395
+ * counts as Core's or file-named
396
+ * @returns {T[]}
397
+ */
398
+ export function unscopedComponentOwners<T extends {
399
+ hold?: string;
400
+ }>(owners: T[]): T[];
192
401
  /**
193
402
  * Build a flat list of ownership records for ALL discoverable components —
194
403
  * core (built-in) plus every loaded integration. This is the authoritative
@@ -217,3 +426,11 @@ export function discoverOwnedComponents(coreDir: string, loadedIntegrations?: Ar
217
426
  }>;
218
427
  /** The owner package name for built-in (core) components. */
219
428
  export const CORE_PACKAGE: import("../../authoring/index.js").ProviderId;
429
+ /**
430
+ * How an owner holds a component name, which the owner rule
431
+ * ({@link unscopedComponentOwners}) reads: `core` when Core documents it;
432
+ * `file` when an integration doc named after its file is recorded under it;
433
+ * `doc` when only a doc records it: an export name, a member, or the file name
434
+ * of a doc recorded under another export.
435
+ */
436
+ export type NameHold = "core" | "file" | "doc";