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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (728) hide show
  1. package/CHANGELOG.md +194 -0
  2. package/README.md +152 -107
  3. package/api/blog/blog.doc.mjs +1 -0
  4. package/api/build/_adapter.d.mts +50 -0
  5. package/api/build/_adapter.mjs +60 -0
  6. package/api/build/build.doc.mjs +22 -10
  7. package/api/build/build.test.mjs +219 -8
  8. package/api/build/build.type.d.mts +91 -2
  9. package/api/build/build.type.mjs +52 -8
  10. package/api/build/help/help.d.mts +12 -5
  11. package/api/build/help/help.mjs +69 -6
  12. package/api/build/kit/kit.d.mts +4 -1
  13. package/api/build/kit/kit.mjs +208 -53
  14. package/api/build/kit/rank.d.mts +44 -0
  15. package/api/build/kit/rank.mjs +432 -0
  16. package/api/build/kit/rank.test.mjs +196 -0
  17. package/api/component/_adapter.d.mts +31 -12
  18. package/api/component/_adapter.mjs +79 -15
  19. package/api/component/component.d.mts +6 -3
  20. package/api/component/component.doc.mjs +49 -19
  21. package/api/component/component.mjs +339 -22
  22. package/api/component/component.test.mjs +38 -0
  23. package/api/component/component.type.d.mts +47 -11
  24. package/api/component/component.type.mjs +76 -24
  25. package/api/component/detail/blocks/blocks.d.mts +2 -1
  26. package/api/component/detail/blocks/blocks.mjs +4 -3
  27. package/api/component/list/list.d.mts +0 -5
  28. package/api/component/list/list.mjs +40 -11
  29. package/api/discover/_adapter.d.mts +114 -6
  30. package/api/discover/_adapter.mjs +372 -17
  31. package/api/discover/_adapter.test.mjs +215 -0
  32. package/api/discover/_catalog-view.d.mts +115 -0
  33. package/api/discover/_catalog-view.mjs +203 -0
  34. package/api/discover/_catalog-view.test.mjs +128 -0
  35. package/api/discover/detail/detail.d.mts +18 -6
  36. package/api/discover/detail/detail.mjs +67 -13
  37. package/api/discover/detail/detail.test.mjs +85 -0
  38. package/api/discover/detail/item/item.d.mts +26 -0
  39. package/api/discover/detail/item/item.mjs +78 -0
  40. package/api/discover/detail/item/item.test.mjs +73 -0
  41. package/api/discover/discover.d.mts +3 -9
  42. package/api/discover/discover.doc.mjs +62 -18
  43. package/api/discover/discover.mjs +220 -36
  44. package/api/discover/discover.test.mjs +11 -2
  45. package/api/discover/discover.type.d.mts +150 -11
  46. package/api/discover/discover.type.mjs +107 -17
  47. package/api/discover/list/list.d.mts +20 -6
  48. package/api/discover/list/list.mjs +45 -12
  49. package/api/discover/list/list.test.mjs +46 -0
  50. package/api/discover/search/search.d.mts +18 -16
  51. package/api/discover/search/search.mjs +102 -56
  52. package/api/discover/search/search.test.mjs +144 -10
  53. package/api/docs/_adapter.d.mts +277 -41
  54. package/api/docs/_adapter.mjs +993 -108
  55. package/api/docs/compiled-topics.test.mjs +78 -0
  56. package/api/docs/detail/detail.mjs +22 -63
  57. package/api/docs/detail/section/section.d.mts +1 -1
  58. package/api/docs/detail/section/section.mjs +54 -19
  59. package/api/docs/detail/section/section.test.mjs +50 -0
  60. package/api/docs/docOverlays.test.mjs +27 -1
  61. package/api/docs/docs.d.mts +10 -3
  62. package/api/docs/docs.doc.mjs +55 -16
  63. package/api/docs/docs.mjs +53 -10
  64. package/api/docs/docs.type.d.mts +221 -5
  65. package/api/docs/docs.type.mjs +153 -11
  66. package/api/docs/index/index.d.mts +18 -0
  67. package/api/docs/index/index.mjs +40 -0
  68. package/api/docs/index/index.test.mjs +62 -0
  69. package/api/docs/list/list.mjs +28 -12
  70. package/api/docs/node/node.d.mts +43 -0
  71. package/api/docs/node/node.mjs +192 -0
  72. package/api/docs/reference-blocks.test.mjs +406 -0
  73. package/api/doctor/doctor.d.mts +104 -1
  74. package/api/doctor/doctor.doc.mjs +18 -8
  75. package/api/doctor/doctor.mjs +635 -7
  76. package/api/doctor/doctor.test.mjs +732 -11
  77. package/api/doctor/doctor.type.d.mts +1 -1
  78. package/api/doctor/doctor.type.mjs +1 -1
  79. package/api/gap-report/gap-report.doc.mjs +27 -14
  80. package/api/hook/_adapter.mjs +19 -5
  81. package/api/hook/hook.doc.mjs +7 -3
  82. package/api/hook/hook.type.d.mts +3 -3
  83. package/api/hook/hook.type.mjs +11 -11
  84. package/api/hook/list/list.d.mts +2 -2
  85. package/api/hook/list/list.mjs +69 -17
  86. package/api/index.d.mts +2 -1
  87. package/api/index.mjs +6 -3
  88. package/api/init/init.doc.mjs +22 -12
  89. package/api/init/init.test.mjs +41 -1
  90. package/api/init/remove/remove.mjs +1 -1
  91. package/api/init/run/run.mjs +20 -10
  92. package/api/integration/add-contribution.component-names.test.mjs +120 -0
  93. package/api/integration/add-contribution.d.mts +2 -1
  94. package/api/integration/add-contribution.mjs +130 -15
  95. package/api/integration/add-contribution.test.mjs +258 -7
  96. package/api/integration/add-helpers.d.mts +5 -2
  97. package/api/integration/add-helpers.mjs +36 -9
  98. package/api/integration/add-theme.mjs +56 -65
  99. package/api/integration/add-theme.test.mjs +139 -21
  100. package/api/integration/authoring-checks.mjs +138 -28
  101. package/api/integration/authoring-checks.test.mjs +179 -7
  102. package/api/integration/authoring-checks.type.mjs +6 -1
  103. package/api/integration/integration-authoring.type.d.mts +3 -1
  104. package/api/integration/integration-authoring.type.mjs +2 -0
  105. package/api/integration/integration-block-exports.test.mjs +10 -6
  106. package/api/integration/integrationAdd.doc.mjs +14 -4
  107. package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
  108. package/api/integration/integrationAddCodemod.doc.mjs +1 -0
  109. package/api/integration/integrationAddComponent.doc.mjs +2 -1
  110. package/api/integration/integrationAddDoc.doc.mjs +8 -1
  111. package/api/integration/integrationAddTemplate.doc.mjs +1 -0
  112. package/api/integration/integrationAddTheme.doc.mjs +6 -5
  113. package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
  114. package/api/integration/integrationDocConflicts.doc.mjs +2 -1
  115. package/api/integration/integrationPackCheck.doc.mjs +5 -4
  116. package/api/integration/integrationTemplateConflicts.doc.d.mts +3 -0
  117. package/api/integration/integrationTemplateConflicts.doc.mjs +4 -0
  118. package/api/integration/pack-check.lifecycle-output.test.mjs +107 -0
  119. package/api/integration/pack-check.mjs +160 -11
  120. package/api/integration/pack-check.test.mjs +477 -47
  121. package/api/integration/pack-check.type.d.mts +26 -2
  122. package/api/integration/pack-check.type.mjs +15 -2
  123. package/api/integration/summarizeIssues.doc.mjs +1 -0
  124. package/api/integration/template-conflict-compatibility.test.mjs +73 -0
  125. package/api/integration/validate-integration-fixes.test.mjs +1389 -0
  126. package/api/integration/validate-integration.mjs +52 -102
  127. package/api/integration/validate-integration.test.mjs +179 -26
  128. package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
  129. package/api/integration/validateIntegration.doc.mjs +3 -2
  130. package/api/json/assertResponse.doc.mjs +2 -1
  131. package/api/json/envelope-types.test.mjs +76 -0
  132. package/api/json/index.ts +2 -0
  133. package/api/json/isError.doc.mjs +2 -1
  134. package/api/json/parseResponse.doc.mjs +3 -2
  135. package/api/layout/_adapter.mjs +20 -5
  136. package/api/layout/expand/expand.mjs +7 -5
  137. package/api/layout/expand/expand.path-safety.test.mjs +53 -0
  138. package/api/layout/grammar/grammar.mjs +2 -1
  139. package/api/layout/layoutCheck.doc.mjs +1 -0
  140. package/api/layout/layoutExpand.doc.mjs +2 -1
  141. package/api/layout/layoutGrammar.doc.mjs +1 -0
  142. package/api/search/search-return-type.test.mjs +54 -0
  143. package/api/search/search.d.mts +89 -12
  144. package/api/search/search.doc.mjs +8 -2
  145. package/api/search/search.mjs +697 -97
  146. package/api/search/search.type.d.mts +15 -3
  147. package/api/search/search.type.mjs +5 -2
  148. package/api/swizzle/copy/copy.mjs +28 -11
  149. package/api/swizzle/swizzle.doc.mjs +8 -5
  150. package/api/swizzle/swizzle.type.d.mts +2 -2
  151. package/api/swizzle/swizzle.type.mjs +2 -2
  152. package/api/template/copy/copy.mjs +18 -24
  153. package/api/template/copy/copy.test.mjs +26 -0
  154. package/api/template/list/list.mjs +1 -0
  155. package/api/template/table-floating-bulk-actions.test.mjs +66 -0
  156. package/api/template/template-integration.test.mjs +1072 -3
  157. package/api/template/template-suffix.test.mjs +41 -21
  158. package/api/template/template.d.mts +1 -1
  159. package/api/template/template.doc.mjs +32 -9
  160. package/api/template/template.mjs +45 -8
  161. package/api/template/template.type.d.mts +12 -14
  162. package/api/template/template.type.mjs +15 -14
  163. package/api/theme/_adapter.d.mts +2 -3
  164. package/api/theme/_adapter.mjs +4 -5
  165. package/api/theme/add/add.binary.test.mjs +84 -0
  166. package/api/theme/add/add.mjs +31 -22
  167. package/api/theme/add/add.rollback.test.mjs +158 -0
  168. package/api/theme/add/add.staging.test.mjs +83 -0
  169. package/api/theme/add/add.test.mjs +14 -1
  170. package/api/theme/build/build.family.test.mjs +7 -12
  171. package/api/theme/build/build.mjs +140 -59
  172. package/api/theme/build/build.public-component-vars.test.mjs +1 -1
  173. package/api/theme/build/build.receipt-doc.test.mjs +111 -0
  174. package/api/theme/build/build.rollback.test.mjs +148 -0
  175. package/api/theme/build/build.test.mjs +127 -0
  176. package/api/theme/build/font-warning.mjs +3 -3
  177. package/api/theme/build/font-warning.test.mjs +5 -2
  178. package/api/theme/generateTonalPalette.doc.mjs +2 -2
  179. package/api/theme/integration-themes.test.mjs +39 -28
  180. package/api/theme/list/list.test.mjs +19 -20
  181. package/api/theme/listThemes.doc.mjs +6 -5
  182. package/api/theme/palette/generate/generate.mjs +8 -3
  183. package/api/theme/palette/generate/generate.test.mjs +96 -0
  184. package/api/theme/palette/generate/generator.d.mts +10 -13
  185. package/api/theme/palette/generate/generator.mjs +15 -4
  186. package/api/theme/palette/generate/generator.test.mjs +10 -0
  187. package/api/theme/template/template.mjs +11 -2
  188. package/api/theme/template/template.test.mjs +20 -0
  189. package/api/theme/theme.type.d.mts +170 -11
  190. package/api/theme/theme.type.mjs +94 -27
  191. package/api/theme/themeAdd.doc.mjs +12 -12
  192. package/api/theme/themeBuild.doc.mjs +21 -17
  193. package/api/theme/themeList.doc.mjs +6 -3
  194. package/api/theme/themeListAvailable.doc.mjs +6 -3
  195. package/api/theme/themePaletteGenerate.doc.mjs +16 -8
  196. package/api/theme/themeTargets.doc.mjs +4 -2
  197. package/api/theme/themeTemplate.doc.mjs +8 -3
  198. package/api/upgrade/_adapter.d.mts +32 -5
  199. package/api/upgrade/_adapter.mjs +139 -22
  200. package/api/upgrade/list/list.mjs +2 -1
  201. package/api/upgrade/list/list.test.mjs +73 -0
  202. package/api/upgrade/project-context.test.mjs +272 -0
  203. package/api/upgrade/provider-agreement.test.mjs +152 -0
  204. package/api/upgrade/run/files-changed.test.mjs +111 -0
  205. package/api/upgrade/run/run.mjs +358 -59
  206. package/api/upgrade/status/status.mjs +2 -2
  207. package/api/upgrade/upgrade.doc.mjs +32 -23
  208. package/api/upgrade/upgrade.type.d.mts +43 -5
  209. package/api/upgrade/upgrade.type.mjs +29 -13
  210. package/assets/codemods/__tests__/registry.test.mjs +1 -0
  211. package/assets/codemods/__tests__/runner.test.mjs +332 -8
  212. package/assets/codemods/file-count.test.mjs +163 -0
  213. package/assets/codemods/integration-discovery.mjs +48 -4
  214. package/assets/codemods/integration-discovery.test.mjs +73 -0
  215. package/assets/codemods/integration-runner.mjs +59 -7
  216. package/assets/codemods/integration-runner.protection.test.mjs +153 -0
  217. package/assets/codemods/registry.mjs +1 -0
  218. package/assets/codemods/run-codemod.mjs +177 -34
  219. package/assets/codemods/runner.mjs +353 -104
  220. package/assets/codemods/term-log.mjs +32 -8
  221. package/assets/codemods/term-log.test.mjs +19 -1
  222. package/assets/codemods/transform-prop.mjs +109 -0
  223. package/assets/codemods/transform-prop.test.mjs +95 -0
  224. package/assets/codemods/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +86 -165
  225. package/assets/codemods/transforms/v0.0.14/rename-status-variants.mjs +72 -210
  226. package/assets/codemods/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +83 -115
  227. package/assets/codemods/transforms/v0.1.8/rename-avatar-size-scale.mjs +57 -186
  228. package/assets/codemods/transforms/v0.3.0/__tests__/unwrap-authoring-factories.test.mjs +27 -5
  229. package/assets/codemods/transforms/v0.3.0/unwrap-authoring-factories.mjs +20 -5
  230. package/assets/codemods/transforms/v0.6.0/__tests__/next-codemods.test.mjs +47 -0
  231. package/assets/codemods/transforms/v0.6.0/rename-resizable-pixel-bounds.mjs +57 -10
  232. package/assets/codemods/transforms/v0.6.4/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
  233. package/assets/codemods/transforms/v0.6.4/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
  234. package/assets/codemods/transforms/v0.6.4/index.mjs +31 -0
  235. package/assets/codemods/transforms/v0.6.4/migrate-native-picker-to-presentation.mjs +148 -0
  236. package/assets/codemods/transforms/v0.6.4/migrate-theme-catalog-to-descriptors.mjs +141 -0
  237. package/assets/docs/README.md +12 -1
  238. package/assets/docs/authoring.doc.mjs +14 -0
  239. package/assets/docs/browser-support.doc.mjs +11 -11
  240. package/assets/docs/color.doc.mjs +8 -2
  241. package/assets/docs/elevation.doc.mjs +6 -4
  242. package/assets/docs/getting-started.doc.mjs +6 -17
  243. package/assets/docs/icons.doc.mjs +2 -21
  244. package/assets/docs/illustrations.doc.mjs +7 -15
  245. package/assets/docs/internationalization.doc.mjs +7 -5
  246. package/assets/docs/layout.doc.dense.mjs +132 -84
  247. package/assets/docs/layout.doc.mjs +134 -78
  248. package/assets/docs/migration.doc.mjs +19 -21
  249. package/assets/docs/motion.doc.mjs +16 -3
  250. package/assets/docs/principles.doc.dense.mjs +5 -5
  251. package/assets/docs/principles.doc.mjs +14 -6
  252. package/assets/docs/principles.doc.zh.mjs +6 -6
  253. package/assets/docs/shape.doc.mjs +8 -3
  254. package/assets/docs/spacing.doc.mjs +7 -2
  255. package/assets/docs/styling-libraries.doc.mjs +10 -6
  256. package/assets/docs/styling.doc.mjs +22 -26
  257. package/assets/docs/theme.doc.dense.mjs +58 -18
  258. package/assets/docs/theme.doc.mjs +60 -50
  259. package/assets/docs/theme.doc.zh.mjs +9 -8
  260. package/assets/docs/tokens.doc.dense.mjs +2 -2
  261. package/assets/docs/tokens.doc.mjs +390 -9
  262. package/assets/docs/tokens.doc.zh.mjs +2 -2
  263. package/assets/docs/tree/add-a-component.doc.mjs +75 -0
  264. package/assets/docs/tree/add-a-theme.doc.mjs +85 -0
  265. package/assets/docs/tree/add-a-topic.doc.mjs +144 -0
  266. package/assets/docs/tree/agent-guidance.doc.mjs +138 -0
  267. package/assets/docs/tree/api.doc.mjs +30 -0
  268. package/assets/docs/tree/block-template.doc.mjs +130 -0
  269. package/assets/docs/tree/build-the-template.doc.mjs +28 -0
  270. package/assets/docs/tree/building-blocks.doc.mjs +46 -0
  271. package/assets/docs/tree/check-your-docs.doc.mjs +137 -0
  272. package/assets/docs/tree/checks.doc.mjs +119 -0
  273. package/assets/docs/tree/cli.doc.mjs +23 -0
  274. package/assets/docs/tree/codemods.doc.mjs +147 -0
  275. package/assets/docs/tree/commands.doc.mjs +25 -0
  276. package/assets/docs/tree/component-family.doc.mjs +113 -0
  277. package/assets/docs/tree/component-imports.doc.mjs +69 -0
  278. package/assets/docs/tree/component-lookups.doc.mjs +149 -0
  279. package/assets/docs/tree/components.doc.mjs +23 -0
  280. package/assets/docs/tree/configuration.doc.mjs +23 -0
  281. package/assets/docs/tree/debug-and-gap-reports.doc.mjs +182 -0
  282. package/assets/docs/tree/define-the-theme.doc.mjs +118 -0
  283. package/assets/docs/tree/describe-the-component.doc.mjs +57 -0
  284. package/assets/docs/tree/docs.doc.mjs +21 -0
  285. package/assets/docs/tree/document-the-template.doc.mjs +28 -0
  286. package/assets/docs/tree/document-the-theme.doc.mjs +68 -0
  287. package/assets/docs/tree/export-template-assets.doc.mjs +147 -0
  288. package/assets/docs/tree/extend-or-replace.doc.mjs +103 -0
  289. package/assets/docs/tree/fonts-and-assets.doc.mjs +106 -0
  290. package/assets/docs/tree/generate-a-palette.doc.mjs +66 -0
  291. package/assets/docs/tree/grade-template-with-agent.doc.mjs +105 -0
  292. package/assets/docs/tree/help.doc.mjs +16 -0
  293. package/assets/docs/tree/integrations.doc.mjs +40 -0
  294. package/assets/docs/tree/links.doc.mjs +98 -0
  295. package/assets/docs/tree/package-and-test.doc.mjs +32 -0
  296. package/assets/docs/tree/page-template.doc.mjs +71 -0
  297. package/assets/docs/tree/publishing.doc.mjs +111 -0
  298. package/assets/docs/tree/quick-start.doc.mjs +272 -0
  299. package/assets/docs/tree/replace-a-core-component.doc.mjs +104 -0
  300. package/assets/docs/tree/replace-a-core-template.doc.mjs +172 -0
  301. package/assets/docs/tree/sections-and-placement.doc.mjs +108 -0
  302. package/assets/docs/tree/see-it-in-an-app.doc.mjs +59 -0
  303. package/assets/docs/tree/ship.doc.mjs +16 -0
  304. package/assets/docs/tree/short-and-findable.doc.mjs +108 -0
  305. package/assets/docs/tree/single-component.doc.mjs +165 -0
  306. package/assets/docs/tree/start-a-template.doc.mjs +143 -0
  307. package/assets/docs/tree/subcomponent.doc.mjs +115 -0
  308. package/assets/docs/tree/template-assets.doc.mjs +64 -0
  309. package/assets/docs/tree/template-doc-overview.doc.mjs +109 -0
  310. package/assets/docs/tree/template-fonts.doc.mjs +102 -0
  311. package/assets/docs/tree/template-grading-rubric.doc.mjs +452 -0
  312. package/assets/docs/tree/template-icons.doc.mjs +97 -0
  313. package/assets/docs/tree/template-images-media.doc.mjs +127 -0
  314. package/assets/docs/tree/template-styles.doc.mjs +93 -0
  315. package/assets/docs/tree/templates.doc.mjs +34 -0
  316. package/assets/docs/tree/test-in-an-app.doc.mjs +115 -0
  317. package/assets/docs/tree/test-template-in-app.doc.mjs +128 -0
  318. package/assets/docs/tree/themes.doc.mjs +39 -0
  319. package/assets/docs/tree/troubleshooting.doc.mjs +149 -0
  320. package/assets/docs/tree/upgrading.doc.mjs +103 -0
  321. package/assets/docs/tree/use-a-theme-in-an-app.doc.mjs +51 -0
  322. package/assets/docs/tree/verify-packed-template.doc.mjs +77 -0
  323. package/assets/docs/tree/versioning.doc.mjs +161 -0
  324. package/assets/docs/tree/write-good-templates.doc.mjs +64 -0
  325. package/assets/docs/tree/write-the-template-file.doc.mjs +154 -0
  326. package/assets/docs/typography.doc.mjs +24 -4
  327. package/assets/docs/working-with-ai.doc.mjs +34 -26
  328. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.doc.mjs +1 -1
  329. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.tsx +1 -3
  330. package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
  331. package/assets/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.tsx +1 -1
  332. package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
  333. package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
  334. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.doc.mjs +14 -0
  335. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.tsx +61 -0
  336. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.doc.mjs +14 -0
  337. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.tsx +126 -0
  338. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.doc.mjs +15 -0
  339. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.tsx +86 -0
  340. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.doc.mjs +14 -0
  341. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.tsx +99 -0
  342. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.doc.mjs +14 -0
  343. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.tsx +122 -0
  344. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.doc.mjs +14 -0
  345. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.tsx +95 -0
  346. package/assets/templates/blocks/components/Table/TableBulkActionsTable.doc.mjs +14 -0
  347. package/assets/templates/blocks/components/Table/TableBulkActionsTable.tsx +71 -0
  348. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.doc.mjs +19 -0
  349. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.tsx +139 -0
  350. package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
  351. package/assets/templates/blocks/components/Timer/TimerFormats.doc.mjs +14 -0
  352. package/assets/templates/blocks/components/Timer/TimerFormats.tsx +34 -0
  353. package/assets/templates/blocks/components/Timer/TimerInline.doc.mjs +14 -0
  354. package/assets/templates/blocks/components/Timer/TimerInline.tsx +14 -0
  355. package/assets/templates/blocks/components/Timer/TimerShowcase.doc.mjs +13 -0
  356. package/assets/templates/blocks/components/Timer/TimerShowcase.tsx +47 -0
  357. package/assets/templates/blocks/components/Timer/TimerTypography.doc.mjs +14 -0
  358. package/assets/templates/blocks/components/Timer/TimerTypography.tsx +31 -0
  359. package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.doc.mjs +19 -3
  360. package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.tsx +383 -65
  361. package/assets/templates/pages/table-tree/page.tsx +1704 -0
  362. package/assets/templates/pages/table-tree/template.doc.mjs +12 -0
  363. package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
  364. package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
  365. package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
  366. package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
  367. package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
  368. package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
  369. package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
  370. package/authoring/_shared/contract.ts +22 -0
  371. package/authoring/codemod/codemod.doc.mjs +7 -2
  372. package/authoring/codemod/parse.d.mts +8 -8
  373. package/authoring/codemod/parse.mjs +8 -6
  374. package/authoring/codemod/type.ts +12 -0
  375. package/authoring/config/config.doc.mjs +11 -3
  376. package/authoring/config/debug-composition.test.mjs +92 -0
  377. package/authoring/config/parse.d.mts +15 -13
  378. package/authoring/config/parse.mjs +27 -8
  379. package/authoring/config/parse.test.mjs +8 -0
  380. package/authoring/config/type.ts +29 -6
  381. package/authoring/debug/debug.doc.d.mts +11 -0
  382. package/authoring/debug/debug.doc.mjs +182 -0
  383. package/authoring/debug/parse.d.mts +8 -8
  384. package/authoring/debug/parse.mjs +3 -3
  385. package/authoring/discover/discover.doc.d.mts +13 -0
  386. package/authoring/discover/discover.doc.mjs +138 -0
  387. package/authoring/discover/parse.d.mts +24 -0
  388. package/authoring/discover/parse.mjs +128 -0
  389. package/authoring/discover/parse.test.mjs +124 -0
  390. package/authoring/discover/type.ts +87 -0
  391. package/authoring/doctypes/_schema.d.mts +792 -24
  392. package/authoring/doctypes/_schema.mjs +549 -39
  393. package/authoring/doctypes/base/graph-fields.doc.d.mts +9 -0
  394. package/authoring/doctypes/base/graph-fields.doc.mjs +64 -0
  395. package/authoring/doctypes/base/type.ts +43 -0
  396. package/authoring/doctypes/command/command.doc.mjs +4 -3
  397. package/authoring/doctypes/command/parse.d.mts +2 -2
  398. package/authoring/doctypes/command/parse.mjs +1 -1
  399. package/authoring/doctypes/command/type.ts +5 -4
  400. package/authoring/doctypes/component/component.doc.mjs +12 -3
  401. package/authoring/doctypes/component/parse.d.mts +2 -2
  402. package/authoring/doctypes/component/parse.mjs +1 -1
  403. package/authoring/doctypes/component/type.ts +14 -5
  404. package/authoring/doctypes/doctypes-new.test.mjs +48 -6
  405. package/authoring/doctypes/enum/enum.doc.mjs +1 -1
  406. package/authoring/doctypes/enum/parse.d.mts +2 -2
  407. package/authoring/doctypes/enum/parse.mjs +1 -1
  408. package/authoring/doctypes/enum/type.ts +4 -2
  409. package/authoring/doctypes/function/function.doc.mjs +7 -2
  410. package/authoring/doctypes/function/parse.d.mts +2 -2
  411. package/authoring/doctypes/function/parse.mjs +1 -1
  412. package/authoring/doctypes/function/type.ts +9 -4
  413. package/authoring/doctypes/hook/hook.doc.mjs +4 -0
  414. package/authoring/doctypes/hook/parse.d.mts +2 -2
  415. package/authoring/doctypes/hook/parse.mjs +1 -1
  416. package/authoring/doctypes/hook/type.ts +5 -4
  417. package/authoring/doctypes/legacy.d.mts +8 -6
  418. package/authoring/doctypes/legacy.mjs +5 -4
  419. package/authoring/doctypes/load-contract.test.mjs +233 -0
  420. package/authoring/doctypes/namespace/namespace.doc.d.mts +9 -0
  421. package/authoring/doctypes/namespace/namespace.doc.mjs +128 -0
  422. package/authoring/doctypes/namespace/parse.d.mts +12 -0
  423. package/authoring/doctypes/namespace/parse.mjs +25 -0
  424. package/authoring/doctypes/namespace/parse.test.mjs +163 -0
  425. package/authoring/doctypes/namespace/type.ts +74 -0
  426. package/authoring/doctypes/parse.d.mts +22 -18
  427. package/authoring/doctypes/parse.mjs +22 -11
  428. package/authoring/doctypes/parse.test.mjs +77 -3
  429. package/authoring/doctypes/reference/parse.d.mts +2 -2
  430. package/authoring/doctypes/reference/parse.mjs +8 -5
  431. package/authoring/doctypes/reference/reference.doc.mjs +55 -6
  432. package/authoring/doctypes/reference/type.ts +75 -7
  433. package/authoring/doctypes/schema/parse.d.mts +2 -2
  434. package/authoring/doctypes/schema/parse.mjs +1 -1
  435. package/authoring/doctypes/schema/schema.doc.mjs +2 -2
  436. package/authoring/doctypes/schema/type.ts +4 -4
  437. package/authoring/doctypes/template/parse.d.mts +94 -1
  438. package/authoring/doctypes/template/parse.mjs +40 -2
  439. package/authoring/doctypes/template/parse.test.mjs +26 -2
  440. package/authoring/doctypes/template/template.doc.mjs +13 -3
  441. package/authoring/doctypes/template/type.ts +13 -2
  442. package/authoring/doctypes/theme/parse.d.mts +35 -0
  443. package/authoring/doctypes/theme/parse.mjs +76 -0
  444. package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
  445. package/authoring/doctypes/theme/theme.doc.mjs +79 -0
  446. package/authoring/doctypes/theme/type.ts +42 -0
  447. package/authoring/doctypes/types.ts +12 -10
  448. package/authoring/gap-report/gap-report.doc.d.mts +12 -0
  449. package/authoring/gap-report/gap-report.doc.mjs +183 -0
  450. package/authoring/gap-report/parse.d.mts +10 -10
  451. package/authoring/gap-report/parse.mjs +6 -6
  452. package/authoring/gap-report/type.ts +1 -1
  453. package/authoring/identity/identity.doc.d.mts +9 -0
  454. package/authoring/identity/identity.doc.mjs +61 -0
  455. package/authoring/identity/type.ts +132 -0
  456. package/authoring/index.d.mts +3 -0
  457. package/authoring/index.d.ts +62 -17
  458. package/authoring/index.mjs +4 -1
  459. package/authoring/integration/integration.doc.mjs +22 -13
  460. package/authoring/integration/parse.d.mts +2 -2
  461. package/authoring/integration/parse.mjs +1 -1
  462. package/authoring/integration/parse.test.mjs +10 -1
  463. package/authoring/integration/schema.d.mts +6 -4
  464. package/authoring/integration/schema.mjs +9 -3
  465. package/authoring/integration/type.ts +19 -8
  466. package/authoring/shadcn/receipt.d.mts +6 -6
  467. package/clients/cli/__tests__/cliManifest.test.ts +27 -29
  468. package/clients/cli/command-load-failure.test.mjs +83 -0
  469. package/clients/cli/commands/blog.doc.mjs +1 -1
  470. package/clients/cli/commands/blog.mjs +23 -8
  471. package/clients/cli/commands/blog.test.mjs +42 -1
  472. package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
  473. package/clients/cli/commands/build-theme.ascii-output.test.mjs +161 -0
  474. package/clients/cli/commands/build-theme.flag-docs.test.mjs +110 -0
  475. package/clients/cli/commands/build-theme.mjs +16 -50
  476. package/clients/cli/commands/build-theme.path-safety.test.mjs +86 -1
  477. package/clients/cli/commands/build-theme.variants.test.mjs +76 -0
  478. package/clients/cli/commands/build.doc.mjs +16 -8
  479. package/clients/cli/commands/build.exit-codes-doc.test.mjs +50 -0
  480. package/clients/cli/commands/build.mjs +137 -114
  481. package/clients/cli/commands/build.playbook.test.mjs +75 -0
  482. package/clients/cli/commands/build.text-fields.test.mjs +81 -0
  483. package/clients/cli/commands/component/index.mjs +153 -61
  484. package/clients/cli/commands/component-batch.test.mjs +341 -0
  485. package/clients/cli/commands/component-ownership.test.mjs +92 -3
  486. package/clients/cli/commands/component-package.test.mjs +46 -0
  487. package/clients/cli/commands/component-resolution.test.mjs +21 -0
  488. package/clients/cli/commands/component.doc.mjs +28 -10
  489. package/clients/cli/commands/component.test.mjs +19 -0
  490. package/clients/cli/commands/detail-levels.test.mjs +2 -2
  491. package/clients/cli/commands/discover.broken-integration.test.mjs +52 -5
  492. package/clients/cli/commands/discover.components-flag.test.mjs +97 -0
  493. package/clients/cli/commands/discover.doc.mjs +55 -9
  494. package/clients/cli/commands/discover.mjs +393 -118
  495. package/clients/cli/commands/discover.sources.test.mjs +267 -0
  496. package/clients/cli/commands/discover.text-projection.test.mjs +103 -0
  497. package/clients/cli/commands/docs.doc.mjs +28 -6
  498. package/clients/cli/commands/docs.mjs +295 -38
  499. package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
  500. package/clients/cli/commands/doctor-integration-docs.doc.mjs +6 -5
  501. package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
  502. package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
  503. package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
  504. package/clients/cli/commands/doctor-integration.package-json.test.mjs +53 -0
  505. package/clients/cli/commands/doctor-integration.test.mjs +143 -8
  506. package/clients/cli/commands/doctor.doc.mjs +4 -2
  507. package/clients/cli/commands/doctor.mjs +108 -37
  508. package/clients/cli/commands/doctor.test.mjs +42 -0
  509. package/clients/cli/commands/gap-report.doc.mjs +27 -15
  510. package/clients/cli/commands/gap-report.test.mjs +72 -0
  511. package/clients/cli/commands/hook/index.mjs +7 -17
  512. package/clients/cli/commands/hook.doc.mjs +1 -1
  513. package/clients/cli/commands/hook.text-projection.test.mjs +45 -0
  514. package/clients/cli/commands/init.doc.mjs +24 -10
  515. package/clients/cli/commands/init.flag-help.test.mjs +153 -0
  516. package/clients/cli/commands/integration-add.controls.test.mjs +132 -0
  517. package/clients/cli/commands/integration-add.doc.mjs +39 -13
  518. package/clients/cli/commands/integration-authoring.test.mjs +74 -19
  519. package/clients/cli/commands/integration-pack.doc.mjs +6 -10
  520. package/clients/cli/commands/integration-real-world.test.mjs +4 -10
  521. package/clients/cli/commands/integration-verify.doc.mjs +22 -0
  522. package/clients/cli/commands/integration.doc.mjs +5 -5
  523. package/clients/cli/commands/integration.mjs +75 -43
  524. package/clients/cli/commands/interactive-guard.test.mjs +101 -24
  525. package/clients/cli/commands/json-contract.test.mjs +33 -0
  526. package/clients/cli/commands/layout-check.doc.mjs +15 -4
  527. package/clients/cli/commands/layout-expand.doc.mjs +22 -5
  528. package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
  529. package/clients/cli/commands/layout.doc.mjs +3 -3
  530. package/clients/cli/commands/layout.mjs +21 -9
  531. package/clients/cli/commands/layout.path-help.test.mjs +33 -0
  532. package/clients/cli/commands/layout.stdin-cap.test.mjs +47 -0
  533. package/clients/cli/commands/layout.text-fields.test.mjs +39 -0
  534. package/clients/cli/commands/manifest.doc.mjs +2 -2
  535. package/clients/cli/commands/no-prompt-wording.test.mjs +94 -0
  536. package/clients/cli/commands/search.doc.mjs +16 -6
  537. package/clients/cli/commands/search.mjs +49 -11
  538. package/clients/cli/commands/search.test.mjs +92 -0
  539. package/clients/cli/commands/setup-nudge.test.mjs +6 -0
  540. package/clients/cli/commands/swizzle.doc.mjs +4 -3
  541. package/clients/cli/commands/swizzle.path-safety.test.mjs +42 -0
  542. package/clients/cli/commands/template.doc.mjs +53 -14
  543. package/clients/cli/commands/template.flag-help.test.mjs +117 -0
  544. package/clients/cli/commands/template.mjs +4 -91
  545. package/clients/cli/commands/template.path-help.test.mjs +40 -0
  546. package/clients/cli/commands/text-json-parity.test.mjs +725 -0
  547. package/clients/cli/commands/theme-add.doc.mjs +5 -4
  548. package/clients/cli/commands/theme-build.doc.mjs +8 -7
  549. package/clients/cli/commands/theme-list.doc.mjs +2 -2
  550. package/clients/cli/commands/theme-palette-generate.doc.mjs +12 -7
  551. package/clients/cli/commands/theme-palette-generate.test.mjs +19 -0
  552. package/clients/cli/commands/theme-palette.doc.mjs +2 -3
  553. package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
  554. package/clients/cli/commands/theme-targets.doc.mjs +3 -3
  555. package/clients/cli/commands/theme-template.behavior.test.mjs +12 -0
  556. package/clients/cli/commands/theme-template.doc.mjs +2 -2
  557. package/clients/cli/commands/theme.doc.mjs +3 -2
  558. package/clients/cli/commands/upgrade.ascii-output.test.mjs +87 -0
  559. package/clients/cli/commands/upgrade.doc.mjs +83 -12
  560. package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
  561. package/clients/cli/commands/upgrade.flag-help.test.mjs +188 -0
  562. package/clients/cli/commands/upgrade.hook-output.test.mjs +88 -0
  563. package/clients/cli/commands/upgrade.mjs +29 -7
  564. package/clients/cli/formatters/index.mjs +164 -1
  565. package/clients/cli/formatters/index.test.mjs +97 -0
  566. package/clients/cli/index.mjs +47 -34
  567. package/clients/cli/latest-version-env.test.mjs +50 -0
  568. package/clients/cli/lib/cli-error.test.mjs +7 -0
  569. package/clients/cli/lib/component-format.mjs +9 -9
  570. package/clients/cli/lib/component-format.test.mjs +1 -1
  571. package/clients/cli/lib/define-command.mjs +56 -6
  572. package/clients/cli/lib/define-command.test.mjs +54 -0
  573. package/clients/cli/lib/doc-text-ascii.test.mjs +82 -0
  574. package/clients/cli/lib/exit-codes.test.mjs +113 -0
  575. package/clients/cli/lib/hook-format.mjs +19 -10
  576. package/clients/cli/lib/json-shim.mjs +62 -16
  577. package/clients/cli/lib/json-shim.test.mjs +83 -0
  578. package/clients/cli/lib/manifest.d.ts +2 -0
  579. package/clients/cli/lib/manifest.mjs +53 -6
  580. package/clients/cli/lib/manifest.test.mjs +22 -2
  581. package/clients/cli/lib/parse-error-format.test.mjs +81 -0
  582. package/foundation/agent-docs/agent-docs.d.mts +7 -2
  583. package/foundation/agent-docs/agent-docs.mjs +83 -13
  584. package/foundation/agent-docs/agent-docs.path-safety.test.mjs +266 -4
  585. package/foundation/config/integration-debug.test.mjs +28 -3
  586. package/foundation/config/project-themes.test.mjs +11 -19
  587. package/foundation/config/project.d.mts +20 -11
  588. package/foundation/config/project.mjs +263 -91
  589. package/foundation/config/project.test.mjs +270 -21
  590. package/foundation/discovery/authoring-self-docs.d.mts +87 -0
  591. package/foundation/discovery/authoring-self-docs.mjs +237 -0
  592. package/foundation/discovery/authoring-self-docs.test.mjs +174 -0
  593. package/foundation/discovery/authoring-surface.d.mts +74 -0
  594. package/foundation/discovery/authoring-surface.mjs +525 -0
  595. package/foundation/discovery/authoring-surface.test.mjs +392 -0
  596. package/foundation/discovery/cli-self-docs.d.mts +119 -0
  597. package/foundation/discovery/cli-self-docs.mjs +504 -0
  598. package/foundation/discovery/cli-self-docs.test.mjs +395 -0
  599. package/foundation/discovery/component-discovery.d.mts +39 -1
  600. package/foundation/discovery/component-discovery.mjs +50 -1
  601. package/foundation/discovery/component-loader.d.mts +35 -38
  602. package/foundation/discovery/component-loader.mjs +53 -222
  603. package/foundation/discovery/docs-discovery.d.mts +119 -11
  604. package/foundation/discovery/docs-discovery.mjs +427 -108
  605. package/foundation/discovery/docs-discovery.test.mjs +386 -20
  606. package/foundation/discovery/docs-output-budget.d.mts +28 -0
  607. package/foundation/discovery/docs-output-budget.mjs +50 -0
  608. package/foundation/discovery/docs-section-key.d.mts +116 -0
  609. package/foundation/discovery/docs-section-key.mjs +322 -0
  610. package/foundation/discovery/docs-section-key.test.mjs +246 -0
  611. package/foundation/discovery/template-adapter.d.mts +113 -11
  612. package/foundation/discovery/template-adapter.fixture-refs.test.mjs +248 -0
  613. package/foundation/discovery/template-adapter.integration-isolation.test.mjs +94 -0
  614. package/foundation/discovery/template-adapter.mjs +774 -83
  615. package/foundation/discovery/template-adapter.test.mjs +57 -0
  616. package/foundation/discovery/template-conflict-release.d.mts +13 -0
  617. package/foundation/discovery/template-conflict-release.mjs +40 -0
  618. package/foundation/discovery/template-conflict-release.test.mjs +40 -0
  619. package/foundation/discovery/theme-discovery.d.mts +67 -7
  620. package/foundation/discovery/theme-discovery.mjs +916 -186
  621. package/foundation/discovery/theme-discovery.test.mjs +613 -219
  622. package/foundation/discovery/theming-targets.test.mjs +4 -0
  623. package/foundation/doc-compiler/bundle.d.mts +47 -0
  624. package/foundation/doc-compiler/bundle.mjs +278 -0
  625. package/foundation/doc-compiler/bundle.test.mjs +266 -0
  626. package/foundation/doc-compiler/compile.d.mts +343 -0
  627. package/foundation/doc-compiler/compile.mjs +558 -0
  628. package/foundation/doc-compiler/diagnostics.d.mts +126 -0
  629. package/foundation/doc-compiler/diagnostics.mjs +305 -0
  630. package/foundation/doc-compiler/doc-compiler.test.mjs +714 -0
  631. package/foundation/doc-compiler/doc-loads.test.mjs +1643 -0
  632. package/foundation/doc-compiler/import.d.mts +24 -0
  633. package/foundation/doc-compiler/import.mjs +59 -0
  634. package/foundation/doc-compiler/inputs.d.mts +102 -0
  635. package/foundation/doc-compiler/inputs.mjs +291 -0
  636. package/foundation/doc-compiler/inputs.test.mjs +298 -0
  637. package/foundation/doc-compiler/ir.d.mts +22 -0
  638. package/foundation/doc-compiler/ir.mjs +471 -0
  639. package/foundation/doc-compiler/lenses.d.mts +36 -0
  640. package/foundation/doc-compiler/lenses.mjs +173 -0
  641. package/foundation/doc-compiler/links.d.mts +162 -0
  642. package/foundation/doc-compiler/links.mjs +294 -0
  643. package/foundation/doc-compiler/links.test.mjs +192 -0
  644. package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
  645. package/foundation/doc-compiler/overlays.d.mts +37 -0
  646. package/foundation/doc-compiler/overlays.mjs +206 -0
  647. package/foundation/doc-compiler/parse-readable.d.mts +9 -0
  648. package/foundation/doc-compiler/parse-readable.mjs +29 -0
  649. package/foundation/doc-compiler/read.d.mts +127 -0
  650. package/foundation/doc-compiler/read.mjs +325 -0
  651. package/foundation/doc-compiler/read.test.mjs +313 -0
  652. package/foundation/doc-compiler/source.d.mts +33 -0
  653. package/foundation/doc-compiler/source.mjs +128 -0
  654. package/foundation/doc-compiler/tree.d.mts +292 -0
  655. package/foundation/doc-compiler/tree.mjs +881 -0
  656. package/foundation/fs/file-protection.d.mts +33 -0
  657. package/foundation/fs/file-protection.mjs +825 -0
  658. package/foundation/fs/file-protection.test.mjs +250 -0
  659. package/foundation/fs/module-loader.d.mts +1 -0
  660. package/foundation/fs/module-loader.mjs +50 -1
  661. package/foundation/fs/module-loader.stdout.test.mjs +332 -0
  662. package/foundation/fs/path-safety.d.mts +3 -2
  663. package/foundation/fs/path-safety.mjs +49 -19
  664. package/foundation/fs/path-safety.test.mjs +50 -0
  665. package/foundation/fs/publish-file-hardlink-unavailable.test.mjs +129 -94
  666. package/foundation/identity/provider-identity.d.mts +90 -0
  667. package/foundation/identity/provider-identity.mjs +320 -0
  668. package/foundation/identity/provider-identity.test.mjs +254 -0
  669. package/foundation/identity/providers.d.mts +7 -0
  670. package/foundation/identity/providers.mjs +16 -0
  671. package/foundation/integrations/autolink.d.mts +58 -1
  672. package/foundation/integrations/autolink.mjs +143 -45
  673. package/foundation/integrations/autolink.test.mjs +1 -1
  674. package/foundation/integrations/cli-requirement.d.mts +65 -0
  675. package/foundation/integrations/cli-requirement.mjs +189 -0
  676. package/foundation/integrations/cli-requirement.test.mjs +89 -0
  677. package/foundation/integrations/contribution-fixes.d.mts +145 -0
  678. package/foundation/integrations/contribution-fixes.mjs +1284 -0
  679. package/foundation/integrations/contribution-inventory.d.mts +3 -2
  680. package/foundation/integrations/contribution-inventory.mjs +28 -25
  681. package/foundation/integrations/contribution-inventory.test.mjs +86 -27
  682. package/foundation/integrations/integration-warnings.d.mts +9 -2
  683. package/foundation/integrations/integration-warnings.mjs +52 -21
  684. package/foundation/integrations/integration-warnings.test.mjs +74 -1
  685. package/foundation/integrations/integrations.d.mts +63 -3
  686. package/foundation/integrations/integrations.mjs +122 -9
  687. package/foundation/integrations/integrations.test.mjs +415 -1
  688. package/foundation/integrations/provider-conflicts.test.mjs +125 -0
  689. package/foundation/integrations/provider-ledger.test.mjs +275 -0
  690. package/foundation/integrations/provider-resolution.d.mts +152 -0
  691. package/foundation/integrations/provider-resolution.mjs +576 -0
  692. package/foundation/integrations/provider-resolution.test.mjs +369 -0
  693. package/foundation/integrations/theme-descriptor.d.mts +8 -0
  694. package/foundation/integrations/theme-descriptor.mjs +44 -0
  695. package/foundation/integrations/validate-contributions.d.mts +2 -0
  696. package/foundation/integrations/validate-contributions.mjs +131 -29
  697. package/foundation/response/base.d.ts +8 -4
  698. package/foundation/response/batch.type.d.mts +33 -0
  699. package/foundation/response/batch.type.mjs +34 -0
  700. package/foundation/response/error-codes.d.mts +3 -1
  701. package/foundation/response/error-codes.d.ts +2 -0
  702. package/foundation/response/error-codes.doc.mjs +19 -12
  703. package/foundation/response/error-codes.mjs +8 -2
  704. package/foundation/response/error-codes.test.mjs +166 -14
  705. package/foundation/response/json-contract.test.mjs +57 -17
  706. package/foundation/response/json.d.mts +4 -2
  707. package/foundation/response/json.mjs +8 -10
  708. package/foundation/response/response-types.doc.d.mts +7 -2
  709. package/foundation/response/response-types.doc.mjs +69 -25
  710. package/foundation/response/response-types.doc.test.mjs +181 -0
  711. package/foundation/response/response.doc.mjs +12 -11
  712. package/foundation/text/string-utils.d.mts +8 -0
  713. package/foundation/text/string-utils.mjs +40 -10
  714. package/foundation/xle/expand.d.mts +2 -0
  715. package/foundation/xle/expand.mjs +4 -3
  716. package/foundation/xle/expand.test.mjs +54 -0
  717. package/foundation/xle/xle.test.mjs +13 -0
  718. package/package.json +10 -11
  719. package/api/docs/docs.test.mjs +0 -83
  720. package/api/docs/integrationDocs.test.mjs +0 -208
  721. package/api/search/search.test.mjs +0 -389
  722. package/assets/docs/cli-integrations.doc.mjs +0 -367
  723. package/assets/templates/themes/manifest.json +0 -95
  724. package/clients/cli/commands/docs.test.mjs +0 -102
  725. package/clients/cli/lib/update-check.mjs +0 -83
  726. package/clients/cli/lib/update-check.test.mjs +0 -137
  727. package/clients/cli/update-hint-commands.test.mjs +0 -54
  728. package/foundation/agent-docs/agent-docs.test.mjs +0 -1141
@@ -15,7 +15,7 @@
15
15
  */
16
16
  /**
17
17
  * Compute the files the tarball must contain for an integration's
18
- * contributions to be visible. Reads catalogs and walks directories;
18
+ * contributions to be visible. Walks descriptor-owned directories;
19
19
  * never imports or executes authored modules.
20
20
  *
21
21
  * @param {import('./integrations.mjs').LoadedIntegration} loaded
@@ -26,7 +26,7 @@ export function computeRequiredFiles(loaded: import("./integrations.mjs").Loaded
26
26
  * @typedef {object} ContributionIdentities
27
27
  * @property {{slug: string, exportName: string}[]} themes
28
28
  * @property {string[]} components
29
- * @property {{id: string, type: string, name: string}[]} templates
29
+ * @property {{id: string, type: string, name: string, replaces?: string}[]} templates
30
30
  * @property {{version: string, id: string}[]} codemods
31
31
  * @property {string[]} docs
32
32
  * @property {string[]} agentDocsAppend
@@ -127,6 +127,7 @@ export type ContributionIdentities = {
127
127
  id: string;
128
128
  type: string;
129
129
  name: string;
130
+ replaces?: string;
130
131
  }[];
131
132
  codemods: {
132
133
  version: string;
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
3
  /**
4
- * @file Contribution inventory for integration pack-check.
4
+ * @file Contribution inventory for `astryx integration verify`.
5
5
  *
6
6
  * Enumerates the files and contribution identities an integration package
7
7
  * declares, for cross-referencing against the npm tarball. The file inventory
@@ -14,8 +14,11 @@
14
14
  import * as fs from 'node:fs';
15
15
  import * as path from 'node:path';
16
16
  import {isDeepStrictEqual} from 'node:util';
17
- import {THEME_MANIFEST_BASENAME} from '../discovery/theme-discovery.mjs';
18
- import {discoverIntegrationThemes} from '../discovery/theme-discovery.mjs';
17
+ import {
18
+ discoverIntegrationThemes,
19
+ isThemeFolder,
20
+ listThemeFiles,
21
+ } from '../discovery/theme-discovery.mjs';
19
22
  import {discoverIntegrationComponents} from '../discovery/component-discovery.mjs';
20
23
  import {loadComponentDoc} from '../discovery/component-loader.mjs';
21
24
  import {discoverIntegrationTemplatesForOne} from '../discovery/template-adapter.mjs';
@@ -65,27 +68,21 @@ function rel(packageDir, file) {
65
68
 
66
69
  /** @param {string} root @param {string} pkgDir */
67
70
  function enumerateThemeFiles(root, pkgDir) {
71
+ if (!root || !fs.existsSync(root) || !fs.statSync(root).isDirectory()) {
72
+ return [];
73
+ }
74
+ // Exactly what `theme add` copies: each theme folder's files, including
75
+ // tests and fixtures, but no dot entry or file npm never publishes. Files
76
+ // beside the theme folders belong to no theme.
68
77
  /** @type {string[]} */
69
78
  const files = [];
70
- const catalog = path.join(root, THEME_MANIFEST_BASENAME);
71
- if (!fs.existsSync(catalog)) return files;
72
- files.push(rel(pkgDir, catalog));
73
- try {
74
- const data = JSON.parse(fs.readFileSync(catalog, 'utf-8'));
75
- if (data?.version !== 1 || !Array.isArray(data.themes)) return files;
76
- for (const theme of data.themes) {
77
- if (typeof theme.slug !== 'string' || !Array.isArray(theme.files))
78
- continue;
79
- for (const f of theme.files) {
80
- if (typeof f === 'string') {
81
- files.push(rel(pkgDir, path.join(root, theme.slug, f)));
82
- }
83
- }
79
+ for (const entry of fs.readdirSync(root, {withFileTypes: true})) {
80
+ const full = path.join(root, entry.name);
81
+ if (entry.isDirectory() && isThemeFolder(full)) {
82
+ files.push(...listThemeFiles(full).map(file => path.join(full, file)));
84
83
  }
85
- } catch {
86
- /* Phase 1 catches structural issues */
87
84
  }
88
- return files;
85
+ return files.sort().map(file => rel(pkgDir, file));
89
86
  }
90
87
 
91
88
  /** @param {string} root @param {string} pkgDir */
@@ -158,7 +155,7 @@ const ROOT_KINDS = /** @type {const} */ ([
158
155
 
159
156
  /**
160
157
  * Compute the files the tarball must contain for an integration's
161
- * contributions to be visible. Reads catalogs and walks directories;
158
+ * contributions to be visible. Walks descriptor-owned directories;
162
159
  * never imports or executes authored modules.
163
160
  *
164
161
  * @param {import('./integrations.mjs').LoadedIntegration} loaded
@@ -192,7 +189,7 @@ export function computeRequiredFiles(loaded) {
192
189
  * @typedef {object} ContributionIdentities
193
190
  * @property {{slug: string, exportName: string}[]} themes
194
191
  * @property {string[]} components
195
- * @property {{id: string, type: string, name: string}[]} templates
192
+ * @property {{id: string, type: string, name: string, replaces?: string}[]} templates
196
193
  * @property {{version: string, id: string}[]} codemods
197
194
  * @property {string[]} docs
198
195
  * @property {string[]} agentDocsAppend
@@ -281,7 +278,12 @@ export async function collectIdentities(loaded) {
281
278
  errors.push({kind: 'templates', message: templateError.message});
282
279
  }
283
280
  identities.templates = templates
284
- .map(t => ({id: t.dirName, type: t.type, name: t.name}))
281
+ .map(t => ({
282
+ id: t.dirName,
283
+ type: t.type,
284
+ name: t.name,
285
+ ...(t.replaces == null ? {} : {replaces: t.replaces}),
286
+ }))
285
287
  .sort((a, b) => a.id.localeCompare(b.id));
286
288
  } catch (err) {
287
289
  errors.push({
@@ -312,12 +314,13 @@ export async function collectIdentities(loaded) {
312
314
 
313
315
  if (loaded.docs && fs.existsSync(loaded.docs)) {
314
316
  try {
315
- const {records, errors: docErrors} =
317
+ const {records, guides, errors: docErrors} =
316
318
  await discoverIntegrationDocs(loaded);
317
319
  for (const docError of docErrors) {
318
320
  errors.push({kind: 'docs', message: docError.message});
319
321
  }
320
- identities.docs = records.map(r => r.name).sort();
322
+ // A guide placed in the docs tree is a doc contribution too.
323
+ identities.docs = [...records, ...guides].map(r => r.name).sort();
321
324
  } catch (err) {
322
325
  errors.push({kind: 'docs', message: /** @type {Error} */ (err).message});
323
326
  }
@@ -37,30 +37,37 @@ function loaded(overrides = {}) {
37
37
 
38
38
  function writeTheme(slug, files = [`${slug}Theme.ts`]) {
39
39
  const root = path.join(tmpDir, 'themes');
40
- fs.mkdirSync(path.join(root, slug), {recursive: true});
41
- for (const f of files) {
42
- fs.writeFileSync(path.join(root, slug, f), `// ${f}\n`);
40
+ const themeDir = path.join(root, slug);
41
+ fs.mkdirSync(themeDir, {recursive: true});
42
+ for (const file of files) {
43
+ const target = path.join(themeDir, file);
44
+ fs.mkdirSync(path.dirname(target), {recursive: true});
45
+ fs.writeFileSync(target, `// ${file}\n`);
43
46
  }
44
- const catalogPath = path.join(root, 'manifest.json');
45
- let catalog = {version: 1, themes: []};
46
- if (fs.existsSync(catalogPath)) {
47
- catalog = JSON.parse(fs.readFileSync(catalogPath, 'utf-8'));
48
- }
49
- catalog.themes.push({
50
- slug,
51
- displayName: slug,
52
- description: `${slug} theme.`,
53
- maintained: true,
54
- entry: files[0],
55
- exportName: `${slug}Theme`,
56
- files,
57
- });
58
- fs.writeFileSync(catalogPath, JSON.stringify(catalog, null, 2) + '\n');
47
+ fs.writeFileSync(
48
+ path.join(themeDir, `${slug}Theme.doc.mjs`),
49
+ `/** @type {import('@astryxdesign/cli/authoring').ThemeDoc} */\nexport default {type: 'theme', name: '${slug}', displayName: '${slug}', description: '${slug} theme.', maintained: true};\n`,
50
+ );
59
51
  return root;
60
52
  }
61
53
 
54
+ const UNPUBLISHED = [
55
+ '.DS_Store',
56
+ '._oceanTheme.ts',
57
+ '.gitignore',
58
+ '.npmignore',
59
+ '.npmrc',
60
+ 'oceanTheme.ts.orig',
61
+ 'npm-debug.log',
62
+ 'palette/.DS_Store',
63
+ 'palette/npm-debug.log',
64
+ '.git/HEAD',
65
+ 'CVS/Entries',
66
+ 'node_modules/dep/index.js',
67
+ ];
68
+
62
69
  describe('computeRequiredFiles', () => {
63
- it('enumerates manifest + theme catalog files', () => {
70
+ it('enumerates each complete descriptor-owned theme directory', () => {
64
71
  const root = writeTheme('ocean', ['oceanTheme.ts', 'tokens.ts']);
65
72
  const inv = computeRequiredFiles(loaded({themes: root}));
66
73
 
@@ -69,13 +76,46 @@ describe('computeRequiredFiles', () => {
69
76
  expect(inv.roots[0].kind).toBe('themes');
70
77
  expect(inv.roots[0].files).toEqual(
71
78
  expect.arrayContaining([
72
- 'themes/manifest.json',
79
+ 'themes/ocean/oceanTheme.doc.mjs',
73
80
  'themes/ocean/oceanTheme.ts',
74
81
  'themes/ocean/tokens.ts',
75
82
  ]),
76
83
  );
77
84
  expect(inv.allFiles).toContain('astryx.integration.mjs');
78
- expect(inv.allFiles).toContain('themes/manifest.json');
85
+ expect(inv.allFiles).toContain('themes/ocean/oceanTheme.doc.mjs');
86
+ expect(inv.allFiles).not.toContain('themes/manifest.json');
87
+ });
88
+
89
+ it('requires no file npm leaves out, at any depth, and none beside the themes', () => {
90
+ const root = writeTheme('ocean', ['oceanTheme.ts', 'palette/tokens.ts']);
91
+ for (const file of [
92
+ ...UNPUBLISHED.map(name => `ocean/${name}`),
93
+ 'README.md',
94
+ 'npm-debug.log',
95
+ ]) {
96
+ fs.mkdirSync(path.dirname(path.join(root, file)), {recursive: true});
97
+ fs.writeFileSync(path.join(root, file), 'x\n');
98
+ }
99
+ expect(computeRequiredFiles(loaded({themes: root})).roots[0].files).toEqual(
100
+ [
101
+ 'themes/ocean/oceanTheme.doc.mjs',
102
+ 'themes/ocean/oceanTheme.ts',
103
+ 'themes/ocean/palette/tokens.ts',
104
+ ],
105
+ );
106
+ });
107
+
108
+ it('requires only the folders theme discovery reads', () => {
109
+ const root = writeTheme('ocean');
110
+ for (const file of ['shared/palette.ts', '.cache/state.json']) {
111
+ fs.mkdirSync(path.dirname(path.join(root, file)), {recursive: true});
112
+ fs.writeFileSync(path.join(root, file), '{}\n');
113
+ }
114
+ const inv = computeRequiredFiles(loaded({themes: root}));
115
+ expect(inv.roots[0].files).toEqual([
116
+ 'themes/ocean/oceanTheme.doc.mjs',
117
+ 'themes/ocean/oceanTheme.ts',
118
+ ]);
79
119
  });
80
120
 
81
121
  it('enumerates paired component metadata and source files', () => {
@@ -139,31 +179,31 @@ describe('computeRequiredFiles', () => {
139
179
  const root = path.join(tmpDir, 'templates');
140
180
  fs.mkdirSync(path.join(root, 'dashboard'), {recursive: true});
141
181
  fs.writeFileSync(
142
- path.join(root, 'dashboard', 'dashboard.template.mjs'),
182
+ path.join(root, 'dashboard', 'dashboard.doc.mjs'),
143
183
  '// tmpl\n',
144
184
  );
145
185
  fs.writeFileSync(path.join(root, 'dashboard', 'dashboard.tsx'), '// src\n');
146
186
  const inv = computeRequiredFiles(loaded({templates: root}));
147
187
 
148
188
  expect(inv.roots[0].files).toContain(
149
- 'templates/dashboard/dashboard.template.mjs',
189
+ 'templates/dashboard/dashboard.doc.mjs',
150
190
  );
151
191
  expect(inv.roots[0].files).toContain('templates/dashboard/dashboard.tsx');
152
192
  });
153
193
 
154
- it('enumerates legacy .doc template metadata with paired sources', () => {
194
+ it('enumerates released .template compatibility metadata with paired sources', () => {
155
195
  const root = path.join(tmpDir, 'templates');
156
196
  fs.mkdirSync(path.join(root, 'dashboard'), {recursive: true});
157
197
  fs.writeFileSync(
158
- path.join(root, 'dashboard', 'dashboard.doc.mjs'),
159
- '// legacy template\n',
198
+ path.join(root, 'dashboard', 'dashboard.template.mjs'),
199
+ '// released compatibility template\n',
160
200
  );
161
201
  fs.writeFileSync(path.join(root, 'dashboard', 'dashboard.tsx'), '// src\n');
162
202
 
163
203
  const inv = computeRequiredFiles(loaded({templates: root}));
164
204
 
165
205
  expect(inv.roots[0].files).toEqual([
166
- 'templates/dashboard/dashboard.doc.mjs',
206
+ 'templates/dashboard/dashboard.template.mjs',
167
207
  'templates/dashboard/dashboard.tsx',
168
208
  ]);
169
209
  });
@@ -264,6 +304,25 @@ describe('compareIdentities', () => {
264
304
  expect(issues[0].message).toContain('dash');
265
305
  });
266
306
 
307
+ it('errors when a packed template replaces a different target', () => {
308
+ const template = {id: 'acme-shell', type: 'page', name: 'Acme shell'};
309
+ const local = {
310
+ ...base(),
311
+ templates: [{...template, replaces: 'shell-side-nav'}],
312
+ };
313
+ const packed = {
314
+ ...base(),
315
+ templates: [{...template, replaces: 'shell-top-nav'}],
316
+ };
317
+
318
+ expect(compareIdentities(local, packed)).toEqual([
319
+ expect.objectContaining({
320
+ code: 'identity_mismatch',
321
+ message: expect.stringContaining('acme-shell'),
322
+ }),
323
+ ]);
324
+ });
325
+
267
326
  it('errors when a codemod is missing from packed', () => {
268
327
  const local = {
269
328
  ...base(),
@@ -8,10 +8,17 @@
8
8
  *
9
9
  * Warning: <pkg> has N integration issue(s). Run: astryx doctor integration validate <pkg>
10
10
  *
11
- * @param {Array<import('./integrations.mjs').LoadedIntegration>} loadedIntegrations the Project's loaded integrations
11
+ * @param {Array<import('./integrations.mjs').LoadedIntegration> | {issues: () => Promise<Array<{package: string, code: string, severity: string, message: string}>>}} source loaded integrations or their Project owner
12
12
  * @param {{json?: boolean}} [options]
13
13
  * @returns {Promise<void>}
14
14
  */
15
- export function warnOnIntegrationIssues(loadedIntegrations: Array<import("./integrations.mjs").LoadedIntegration>, { json }?: {
15
+ export function warnOnIntegrationIssues(source: Array<import("./integrations.mjs").LoadedIntegration> | {
16
+ issues: () => Promise<Array<{
17
+ package: string;
18
+ code: string;
19
+ severity: string;
20
+ message: string;
21
+ }>>;
22
+ }, { json }?: {
16
23
  json?: boolean;
17
24
  }): Promise<void>;
@@ -10,8 +10,9 @@
10
10
  * contributions or spamming per-contribution diagnostics.
11
11
  *
12
12
  * Design constraints (all enforced here):
13
- * - Reuses the Doctor integration validators (validateLoadedIntegration);
14
- * no validation logic is duplicated.
13
+ * - Reuses Project.issues() when a Project is available, so cross-package
14
+ * replacement warnings are visible; accepts loaded integrations for legacy
15
+ * internal callers and tests.
15
16
  * - Writes to STDERR only, so it never corrupts a --json stdout envelope.
16
17
  * - Suppressed entirely in --json mode.
17
18
  * - Best-effort: never throws, never changes the exit code. Broken
@@ -28,32 +29,62 @@ import {validateLoadedIntegration} from './validate-contributions.mjs';
28
29
  *
29
30
  * Warning: <pkg> has N integration issue(s). Run: astryx doctor integration validate <pkg>
30
31
  *
31
- * @param {Array<import('./integrations.mjs').LoadedIntegration>} loadedIntegrations the Project's loaded integrations
32
+ * @param {Array<import('./integrations.mjs').LoadedIntegration> | {issues: () => Promise<Array<{package: string, code: string, severity: string, message: string}>>}} source loaded integrations or their Project owner
32
33
  * @param {{json?: boolean}} [options]
33
34
  * @returns {Promise<void>}
34
35
  */
35
- export async function warnOnIntegrationIssues(loadedIntegrations, {json = false} = {}) {
36
+ export async function warnOnIntegrationIssues(source, {json = false} = {}) {
36
37
  try {
37
- // Cheap guard: only do work when integrations are actually configured.
38
38
  if (json) return;
39
- if (!Array.isArray(loadedIntegrations) || loadedIntegrations.length === 0) {
40
- return;
41
- }
42
- for (const integration of loadedIntegrations) {
43
- if (!integration || typeof integration !== 'object') continue;
44
- let issues;
45
- try {
46
- issues = await validateLoadedIntegration(integration);
47
- } catch {
48
- // Best-effort: a validator throwing must not break the host command.
49
- continue;
39
+
40
+ /** @type {Map<string, number>} */
41
+ const issueCounts = new Map();
42
+ const fromProject =
43
+ source != null &&
44
+ !Array.isArray(source) &&
45
+ typeof source.issues === 'function';
46
+
47
+ if (fromProject) {
48
+ const issues = await source.issues();
49
+ for (const issue of issues) {
50
+ // A provider-conflict issue carries the specific message that
51
+ // `doctor integration validate` would not explain. Print it directly.
52
+ if (issue.code === 'duplicate_provider') {
53
+ console.error(`Warning: ${issue.message}`);
54
+ continue;
55
+ }
56
+ issueCounts.set(
57
+ issue.package,
58
+ (issueCounts.get(issue.package) ?? 0) + 1,
59
+ );
50
60
  }
51
- if (!Array.isArray(issues) || issues.length === 0) continue;
52
- const pkg = integration.name ?? integration.__spec ?? '(integration)';
53
- // Stderr only — keeps stdout (and any --json envelope) clean.
61
+ } else if (Array.isArray(source)) {
62
+ for (const integration of source) {
63
+ if (!integration || typeof integration !== 'object') continue;
64
+ // A package set aside for a provider-ID conflict is fine in isolation,
65
+ // so `doctor integration validate` would not explain it. Say it here.
66
+ if (integration.__providerConflict) {
67
+ console.error(`Warning: ${integration.__providerConflict.message}`);
68
+ continue;
69
+ }
70
+ let issues;
71
+ try {
72
+ issues = await validateLoadedIntegration(integration);
73
+ } catch {
74
+ continue;
75
+ }
76
+ if (!Array.isArray(issues) || issues.length === 0) continue;
77
+ const pkg = integration.name ?? integration.__spec ?? '(integration)';
78
+ issueCounts.set(pkg, issues.length);
79
+ }
80
+ }
81
+
82
+ for (const [pkg, count] of issueCounts) {
83
+ const command = fromProject
84
+ ? 'astryx doctor'
85
+ : `astryx doctor integration validate ${pkg}`;
54
86
  console.error(
55
- `Warning: ${pkg} has ${issues.length} integration issue(s). ` +
56
- `Run: astryx doctor integration validate ${pkg}`,
87
+ `Warning: ${pkg} has ${count} integration issue(s). Run: ${command}`,
57
88
  );
58
89
  }
59
90
  } catch {
@@ -37,7 +37,12 @@ afterEach(() => {
37
37
  * Build a loaded-integration-shaped object. Roots are absolute (mirrors
38
38
  * loadIntegrations' resolveRoot).
39
39
  */
40
- function loaded({name = '@acme/widgets', components, templates, codemods} = {}) {
40
+ function loaded({
41
+ name = '@acme/widgets',
42
+ components,
43
+ templates,
44
+ codemods,
45
+ } = {}) {
41
46
  return {
42
47
  name,
43
48
  version: '1.0.0',
@@ -62,6 +67,25 @@ describe('warnOnIntegrationIssues', () => {
62
67
  );
63
68
  });
64
69
 
70
+ it('surfaces cross-package issues collected by Project', async () => {
71
+ const project = {
72
+ issues: async () => [
73
+ {
74
+ package: '@acme/later',
75
+ code: 'ambiguous_template_replacement',
76
+ severity: 'warning',
77
+ message: 'Later configured replacement wins.',
78
+ },
79
+ ],
80
+ };
81
+
82
+ await warnOnIntegrationIssues(project, {json: false});
83
+
84
+ expect(errLines).toEqual([
85
+ 'Warning: @acme/later has 1 integration issue(s). Run: astryx doctor',
86
+ ]);
87
+ });
88
+
65
89
  it('emits nothing in --json mode (keeps stdout/JSON clean)', async () => {
66
90
  const integration = loaded({components: 'does-not-exist'});
67
91
  await warnOnIntegrationIssues([integration], {json: true});
@@ -116,4 +140,53 @@ describe('warnOnIntegrationIssues', () => {
116
140
  ).resolves.toBeUndefined();
117
141
  expect(errLines).toHaveLength(0);
118
142
  });
143
+
144
+ it('prints the specific provider-conflict message via the array path', async () => {
145
+ const conflict = {
146
+ name: '@acme/charts',
147
+ version: '2.0.0',
148
+ __spec: '@acme/charts',
149
+ __packageDir: tmpDir,
150
+ __providerConflict: {
151
+ providerId: '@acme/lab',
152
+ claimedBy: '@acme/lab',
153
+ message:
154
+ '@acme/charts@2.0.0 and @acme/lab@1.0.0 both claim provider ID ' +
155
+ '"@acme/lab". @acme/lab@1.0.0 loads first and is used; ' +
156
+ '@acme/charts@2.0.0 contributes nothing until one package changes ' +
157
+ 'its providerId.',
158
+ },
159
+ };
160
+ await warnOnIntegrationIssues([conflict], {json: false});
161
+
162
+ expect(errLines).toHaveLength(1);
163
+ expect(errLines[0]).toBe(`Warning: ${conflict.__providerConflict.message}`);
164
+ // Must NOT print the generic validate pointer for a provider conflict.
165
+ expect(errLines[0]).not.toContain('integration issue(s)');
166
+ });
167
+
168
+ it('prints the specific provider-conflict message via the Project path', async () => {
169
+ const conflictMessage =
170
+ '@acme/charts@2.0.0 and @acme/lab@1.0.0 both claim provider ID ' +
171
+ '"@acme/lab". @acme/lab@1.0.0 loads first and is used; ' +
172
+ '@acme/charts@2.0.0 contributes nothing until one package changes ' +
173
+ 'its providerId.';
174
+ const project = {
175
+ issues: async () => [
176
+ {
177
+ package: '@acme/charts@2.0.0',
178
+ code: 'duplicate_provider',
179
+ severity: 'warning',
180
+ message: conflictMessage,
181
+ },
182
+ ],
183
+ };
184
+
185
+ await warnOnIntegrationIssues(project, {json: false});
186
+
187
+ expect(errLines).toHaveLength(1);
188
+ expect(errLines[0]).toBe(`Warning: ${conflictMessage}`);
189
+ // Must NOT print the generic validate pointer for a provider conflict.
190
+ expect(errLines[0]).not.toContain('integration issue(s)');
191
+ });
119
192
  });
@@ -1,6 +1,26 @@
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
+ * Resolve provider identity across loaded integrations, in precedence order.
6
+ *
7
+ * Artifact and document IDs are provider-scoped, so two packages cannot both
8
+ * contribute under one provider ID. The same package reached twice (an npm
9
+ * alias beside the package it aliases, with the same name and version) loads
10
+ * once. Any other later claimant, including the same package at another
11
+ * version, stays as an inert entry that carries the conflict. The package being
12
+ * authored claims its ID before precedence order is considered, because the
13
+ * source being edited is authoritative. The winner still contributes; Project
14
+ * issues, Doctor, and the per-command warning name the one set aside instead of
15
+ * dropping it without a word.
16
+ *
17
+ * The conflict pass of {@link resolveProviders}, for a list that is already
18
+ * assembled.
19
+ *
20
+ * @param {LoadedIntegration[]} integrations in precedence order
21
+ * @returns {LoadedIntegration[]}
22
+ */
23
+ export function markProviderConflicts(integrations: LoadedIntegration[]): LoadedIntegration[];
4
24
  /**
5
25
  * Return the conventional root manifest paths present in `dir`, in
6
26
  * load-precedence order. Unlike {@link resolveManifestPath} this never throws —
@@ -25,7 +45,7 @@ export function findManifestPaths(dir: string): string[];
25
45
  * @param {string} file absolute manifest path
26
46
  * @param {string} [label] used in error messages
27
47
  * @param {{fresh?: boolean}} [options]
28
- * @returns {Promise<{manifest: import('../../authoring/integration/type').AstryxIntegration, unknownKeys: string[], debug?: import('../../authoring/debug/type').DebugEventHandler, gapReport?: import('../../authoring/gap-report/type').GapReportHandler, gapReportError?: string, agentDocsError?: string}>}
48
+ * @returns {Promise<{manifest: import('../../authoring/integration/type').AstryxIntegration, unknownKeys: string[], debug?: import('../../authoring/debug/type').DebugEventHandler, gapReport?: import('../../authoring/gap-report/type').GapReportHandler, gapReportError?: string, discover?: import('../../authoring/discover/type').DiscoverSource, discoverError?: string, agentDocsError?: string}>}
29
49
  */
30
50
  export function loadManifest(file: string, label?: string, { fresh }?: {
31
51
  fresh?: boolean;
@@ -35,6 +55,8 @@ export function loadManifest(file: string, label?: string, { fresh }?: {
35
55
  debug?: import("../../authoring/debug/type").DebugEventHandler;
36
56
  gapReport?: import("../../authoring/gap-report/type").GapReportHandler;
37
57
  gapReportError?: string;
58
+ discover?: import("../../authoring/discover/type").DiscoverSource;
59
+ discoverError?: string;
38
60
  agentDocsError?: string;
39
61
  }>;
40
62
  /**
@@ -75,12 +97,15 @@ export function loadLocalIntegration(packageDir: string, { fresh }?: {
75
97
  * Load configured integrations.
76
98
  *
77
99
  * @param {string[]} [specs] package names
78
- * @param {{cwd?: string, fresh?: boolean}} [options]
100
+ * @param {{cwd?: string, fresh?: boolean, resolveProviders?: boolean}} [options]
101
+ * `resolveProviders: false` leaves provider identity to a caller that
102
+ * resolves it once over a larger set (Project.load)
79
103
  * @returns {Promise<LoadedIntegration[]>}
80
104
  */
81
- export function loadIntegrations(specs?: string[], { cwd, fresh }?: {
105
+ export function loadIntegrations(specs?: string[], { cwd, fresh, resolveProviders }?: {
82
106
  cwd?: string;
83
107
  fresh?: boolean;
108
+ resolveProviders?: boolean;
84
109
  }): Promise<LoadedIntegration[]>;
85
110
  /**
86
111
  * A fully-resolved, loaded integration. Identity (`name`, `version`) comes from
@@ -89,6 +114,10 @@ export function loadIntegrations(specs?: string[], { cwd, fresh }?: {
89
114
  * are internal bookkeeping used by Doctor integration validation and Project.
90
115
  * @typedef {object} LoadedIntegration
91
116
  * @property {string} name
117
+ * @property {import('../../authoring/identity/type').ProviderId} [providerId]
118
+ * normalized stable provider identity; absent only for a legacy unnamed local
119
+ * package. Unique among contributing integrations: a later claimant is kept
120
+ * inert with `__providerConflict` (see {@link markProviderConflicts})
92
121
  * @property {string} [version]
93
122
  * @property {string} [components]
94
123
  * @property {string} [templates]
@@ -107,6 +136,10 @@ export function loadIntegrations(specs?: string[], { cwd, fresh }?: {
107
136
  * @property {string} __manifestFile
108
137
  * @property {string} [__loadError] set when the manifest failed to load/validate;
109
138
  * such an integration contributes nothing and is surfaced via Project.issues()
139
+ * @property {{providerId: import('../../authoring/identity/type').ProviderId, claimedBy: string, message: string}} [__providerConflict]
140
+ * set on a package whose provider ID an earlier-loaded package already
141
+ * claims; it contributes nothing and is reported as a `duplicate_provider`
142
+ * warning
110
143
  * @property {string[]} [__unknownKeys] manifest keys this CLI does not know —
111
144
  * surfaced as a warning; the rest of the manifest still contributes
112
145
  * @property {boolean} [__autolinked] loaded because the project declares the
@@ -123,6 +156,9 @@ export function loadIntegrations(specs?: string[], { cwd, fresh }?: {
123
156
  * validated package-owned handler from the `gapReport` NAMED export.
124
157
  * @property {string} [__gapReportError] isolated named-handler validation error.
125
158
  * Named exports are not manifest keys — see {@link loadManifest}.
159
+ * @property {import('../../authoring/discover/type').DiscoverSource} [__discover]
160
+ * validated catalog source from the `discover` NAMED export.
161
+ * @property {string} [__discoverError] isolated discover-source validation error.
126
162
  */
127
163
  /** Conventional manifest basenames, in load-precedence order. */
128
164
  export const MANIFEST_BASENAMES: string[];
@@ -134,6 +170,12 @@ export const MANIFEST_BASENAMES: string[];
134
170
  */
135
171
  export type LoadedIntegration = {
136
172
  name: string;
173
+ /**
174
+ * normalized stable provider identity; absent only for a legacy unnamed local
175
+ * package. Unique among contributing integrations: a later claimant is kept
176
+ * inert with `__providerConflict` (see {@link markProviderConflicts})
177
+ */
178
+ providerId?: import("../../authoring/identity/type").ProviderId | undefined;
137
179
  version?: string | undefined;
138
180
  components?: string | undefined;
139
181
  templates?: string | undefined;
@@ -163,6 +205,16 @@ export type LoadedIntegration = {
163
205
  * such an integration contributes nothing and is surfaced via Project.issues()
164
206
  */
165
207
  __loadError?: string | undefined;
208
+ /**
209
+ * set on a package whose provider ID an earlier-loaded package already
210
+ * claims; it contributes nothing and is reported as a `duplicate_provider`
211
+ * warning
212
+ */
213
+ __providerConflict?: {
214
+ providerId: import("../../authoring/identity/type").ProviderId;
215
+ claimedBy: string;
216
+ message: string;
217
+ } | undefined;
166
218
  /**
167
219
  * manifest keys this CLI does not know —
168
220
  * surfaced as a warning; the rest of the manifest still contributes
@@ -198,4 +250,12 @@ export type LoadedIntegration = {
198
250
  * Named exports are not manifest keys — see {@link loadManifest}.
199
251
  */
200
252
  __gapReportError?: string | undefined;
253
+ /**
254
+ * validated catalog source from the `discover` NAMED export.
255
+ */
256
+ __discover?: import("../../authoring/discover/type").DiscoverSource | undefined;
257
+ /**
258
+ * isolated discover-source validation error.
259
+ */
260
+ __discoverError?: string | undefined;
201
261
  };