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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (397) hide show
  1. package/README.md +38 -15
  2. package/api/blog/blog.doc.mjs +1 -0
  3. package/api/build/_adapter.d.mts +50 -0
  4. package/api/build/_adapter.mjs +60 -0
  5. package/api/build/build.doc.mjs +14 -7
  6. package/api/build/build.test.mjs +184 -6
  7. package/api/build/build.type.d.mts +57 -2
  8. package/api/build/build.type.mjs +30 -7
  9. package/api/build/help/help.d.mts +4 -0
  10. package/api/build/help/help.mjs +24 -11
  11. package/api/build/kit/kit.d.mts +4 -1
  12. package/api/build/kit/kit.mjs +165 -49
  13. package/api/build/kit/rank.d.mts +44 -0
  14. package/api/build/kit/rank.mjs +432 -0
  15. package/api/build/kit/rank.test.mjs +196 -0
  16. package/api/component/_adapter.d.mts +6 -12
  17. package/api/component/_adapter.mjs +20 -10
  18. package/api/component/component.doc.mjs +1 -0
  19. package/api/component/component.mjs +60 -12
  20. package/api/component/list/list.mjs +3 -2
  21. package/api/discover/discover.doc.mjs +1 -0
  22. package/api/docs/_adapter.d.mts +252 -34
  23. package/api/docs/_adapter.mjs +923 -132
  24. package/api/docs/detail/detail.mjs +11 -3
  25. package/api/docs/detail/section/section.mjs +24 -13
  26. package/api/docs/detail/section/section.test.mjs +15 -6
  27. package/api/docs/docs.d.mts +5 -3
  28. package/api/docs/docs.doc.mjs +39 -17
  29. package/api/docs/docs.mjs +44 -8
  30. package/api/docs/docs.test.mjs +158 -4
  31. package/api/docs/docs.type.d.mts +181 -2
  32. package/api/docs/docs.type.mjs +117 -3
  33. package/api/docs/index/index.mjs +11 -3
  34. package/api/docs/index/index.test.mjs +1 -1
  35. package/api/docs/integration-tree.test.mjs +555 -0
  36. package/api/docs/integrationDocs.test.mjs +14 -14
  37. package/api/docs/list/list.mjs +28 -12
  38. package/api/docs/node/node.d.mts +43 -0
  39. package/api/docs/node/node.mjs +192 -0
  40. package/api/docs/reference-blocks.test.mjs +406 -0
  41. package/api/doctor/doctor.d.mts +54 -4
  42. package/api/doctor/doctor.doc.mjs +1 -0
  43. package/api/doctor/doctor.mjs +331 -16
  44. package/api/doctor/doctor.test.mjs +420 -7
  45. package/api/gap-report/gap-report.doc.mjs +1 -0
  46. package/api/hook/_adapter.mjs +19 -5
  47. package/api/hook/hook.doc.mjs +1 -0
  48. package/api/hook/list/list.d.mts +1 -1
  49. package/api/hook/list/list.mjs +69 -17
  50. package/api/index.d.mts +1 -1
  51. package/api/index.mjs +1 -0
  52. package/api/init/init.doc.mjs +2 -1
  53. package/api/integration/add-contribution.d.mts +2 -1
  54. package/api/integration/add-contribution.mjs +114 -12
  55. package/api/integration/add-contribution.test.mjs +174 -3
  56. package/api/integration/add-theme.mjs +34 -64
  57. package/api/integration/add-theme.test.mjs +105 -21
  58. package/api/integration/authoring-checks.mjs +138 -28
  59. package/api/integration/authoring-checks.test.mjs +179 -7
  60. package/api/integration/authoring-checks.type.mjs +6 -1
  61. package/api/integration/integration-authoring.type.d.mts +2 -0
  62. package/api/integration/integration-authoring.type.mjs +2 -0
  63. package/api/integration/integration-block-exports.test.mjs +10 -6
  64. package/api/integration/integrationAdd.doc.mjs +7 -0
  65. package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
  66. package/api/integration/integrationAddCodemod.doc.mjs +1 -0
  67. package/api/integration/integrationAddComponent.doc.mjs +1 -0
  68. package/api/integration/integrationAddDoc.doc.mjs +8 -1
  69. package/api/integration/integrationAddTemplate.doc.mjs +1 -0
  70. package/api/integration/integrationAddTheme.doc.mjs +6 -5
  71. package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
  72. package/api/integration/integrationDocConflicts.doc.mjs +2 -1
  73. package/api/integration/integrationPackCheck.doc.mjs +2 -1
  74. package/api/integration/integrationTemplateConflicts.doc.d.mts +3 -0
  75. package/api/integration/integrationTemplateConflicts.doc.mjs +4 -0
  76. package/api/integration/pack-check.mjs +34 -0
  77. package/api/integration/pack-check.test.mjs +138 -47
  78. package/api/integration/pack-check.type.d.mts +26 -2
  79. package/api/integration/pack-check.type.mjs +14 -1
  80. package/api/integration/summarizeIssues.doc.mjs +1 -0
  81. package/api/integration/template-conflict-compatibility.test.mjs +73 -0
  82. package/api/integration/validate-integration-fixes.test.mjs +1389 -0
  83. package/api/integration/validate-integration.mjs +50 -102
  84. package/api/integration/validate-integration.test.mjs +88 -26
  85. package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
  86. package/api/integration/validateIntegration.doc.mjs +2 -1
  87. package/api/json/assertResponse.doc.mjs +1 -0
  88. package/api/json/index.ts +2 -0
  89. package/api/json/isError.doc.mjs +1 -0
  90. package/api/json/parseResponse.doc.mjs +1 -0
  91. package/api/layout/_adapter.mjs +20 -5
  92. package/api/layout/layoutCheck.doc.mjs +1 -0
  93. package/api/layout/layoutExpand.doc.mjs +1 -0
  94. package/api/layout/layoutGrammar.doc.mjs +1 -0
  95. package/api/search/search.d.mts +59 -1
  96. package/api/search/search.doc.mjs +5 -3
  97. package/api/search/search.mjs +458 -77
  98. package/api/search/search.test.mjs +91 -2
  99. package/api/search/search.type.d.mts +13 -1
  100. package/api/search/search.type.mjs +4 -1
  101. package/api/swizzle/swizzle.doc.mjs +1 -0
  102. package/api/template/list/list.mjs +1 -0
  103. package/api/template/table-floating-bulk-actions.test.mjs +66 -0
  104. package/api/template/template-integration.test.mjs +1072 -3
  105. package/api/template/template-suffix.test.mjs +41 -21
  106. package/api/template/template.doc.mjs +28 -7
  107. package/api/template/template.mjs +45 -8
  108. package/api/template/template.type.d.mts +6 -8
  109. package/api/template/template.type.mjs +3 -2
  110. package/api/theme/_adapter.d.mts +2 -3
  111. package/api/theme/_adapter.mjs +4 -5
  112. package/api/theme/add/add.binary.test.mjs +10 -17
  113. package/api/theme/add/add.test.mjs +14 -1
  114. package/api/theme/generateTonalPalette.doc.mjs +1 -0
  115. package/api/theme/integration-themes.test.mjs +39 -28
  116. package/api/theme/list/list.test.mjs +19 -20
  117. package/api/theme/listThemes.doc.mjs +6 -5
  118. package/api/theme/template/template.test.mjs +5 -0
  119. package/api/theme/themeAdd.doc.mjs +4 -3
  120. package/api/theme/themeBuild.doc.mjs +1 -0
  121. package/api/theme/themeList.doc.mjs +6 -3
  122. package/api/theme/themeListAvailable.doc.mjs +5 -3
  123. package/api/theme/themePaletteGenerate.doc.mjs +1 -0
  124. package/api/theme/themeTargets.doc.mjs +1 -0
  125. package/api/theme/themeTemplate.doc.mjs +2 -1
  126. package/api/upgrade/_adapter.d.mts +32 -5
  127. package/api/upgrade/_adapter.mjs +97 -69
  128. package/api/upgrade/provider-agreement.test.mjs +152 -0
  129. package/api/upgrade/run/run.mjs +356 -59
  130. package/api/upgrade/upgrade.doc.mjs +6 -1
  131. package/api/upgrade/upgrade.type.d.mts +34 -0
  132. package/api/upgrade/upgrade.type.mjs +15 -0
  133. package/assets/codemods/__tests__/runner.test.mjs +330 -8
  134. package/assets/codemods/integration-discovery.mjs +8 -2
  135. package/assets/codemods/integration-discovery.test.mjs +15 -0
  136. package/assets/codemods/integration-runner.mjs +56 -4
  137. package/assets/codemods/integration-runner.protection.test.mjs +153 -0
  138. package/assets/codemods/run-codemod.mjs +177 -34
  139. package/assets/codemods/runner.mjs +350 -102
  140. package/assets/codemods/transforms/next/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
  141. package/assets/codemods/transforms/next/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
  142. package/assets/codemods/transforms/next/index.mjs +19 -1
  143. package/assets/codemods/transforms/next/migrate-native-picker-to-presentation.mjs +148 -0
  144. package/assets/codemods/transforms/next/migrate-theme-catalog-to-descriptors.mjs +141 -0
  145. package/assets/docs/getting-started.doc.mjs +2 -2
  146. package/assets/docs/layout.doc.dense.mjs +2 -2
  147. package/assets/docs/layout.doc.mjs +1 -1
  148. package/assets/docs/principles.doc.mjs +6 -6
  149. package/assets/docs/styling-libraries.doc.mjs +3 -3
  150. package/assets/docs/styling.doc.mjs +4 -4
  151. package/assets/docs/theme.doc.mjs +5 -5
  152. package/assets/docs/tokens.doc.mjs +1 -1
  153. package/assets/docs/tree/api.doc.mjs +30 -0
  154. package/assets/docs/tree/cli.doc.mjs +23 -0
  155. package/assets/docs/tree/commands.doc.mjs +25 -0
  156. package/assets/docs/{cli-integrations.doc.mjs → tree/integrations.doc.mjs} +66 -38
  157. package/assets/docs/tree/integrations.test.mjs +62 -0
  158. package/assets/docs/tree/writing-docs.doc.mjs +286 -0
  159. package/assets/docs/working-with-ai.doc.mjs +3 -3
  160. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.doc.mjs +1 -1
  161. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.tsx +1 -3
  162. package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
  163. package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
  164. package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
  165. package/assets/templates/blocks/components/Table/TableBulkActionsTable.doc.mjs +14 -0
  166. package/assets/templates/blocks/components/Table/TableBulkActionsTable.tsx +71 -0
  167. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.doc.mjs +19 -0
  168. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.tsx +139 -0
  169. package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
  170. package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
  171. package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
  172. package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
  173. package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
  174. package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
  175. package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
  176. package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
  177. package/authoring/codemod/codemod.doc.mjs +1 -1
  178. package/authoring/codemod/type.ts +12 -0
  179. package/authoring/config/config.doc.mjs +1 -1
  180. package/authoring/debug/debug.doc.d.mts +11 -0
  181. package/authoring/debug/debug.doc.mjs +182 -0
  182. package/authoring/debug/parse.d.mts +3 -3
  183. package/authoring/doctypes/_schema.d.mts +119 -117
  184. package/authoring/doctypes/_schema.mjs +54 -3
  185. package/authoring/doctypes/base/graph-fields.doc.mjs +8 -6
  186. package/authoring/doctypes/base/type.ts +6 -5
  187. package/authoring/doctypes/command/command.doc.mjs +1 -1
  188. package/authoring/doctypes/command/type.ts +2 -2
  189. package/authoring/doctypes/component/type.ts +2 -2
  190. package/authoring/doctypes/doctypes-new.test.mjs +48 -6
  191. package/authoring/doctypes/enum/enum.doc.mjs +1 -1
  192. package/authoring/doctypes/enum/type.ts +1 -1
  193. package/authoring/doctypes/function/function.doc.mjs +3 -2
  194. package/authoring/doctypes/function/type.ts +3 -2
  195. package/authoring/doctypes/hook/type.ts +2 -2
  196. package/authoring/doctypes/load-contract.test.mjs +28 -2
  197. package/authoring/doctypes/namespace/namespace.doc.mjs +6 -10
  198. package/authoring/doctypes/namespace/parse.test.mjs +23 -25
  199. package/authoring/doctypes/namespace/type.ts +5 -2
  200. package/authoring/doctypes/parse.d.mts +4 -2
  201. package/authoring/doctypes/parse.mjs +10 -5
  202. package/authoring/doctypes/reference/reference.doc.mjs +35 -6
  203. package/authoring/doctypes/reference/type.ts +30 -13
  204. package/authoring/doctypes/schema/schema.doc.mjs +1 -1
  205. package/authoring/doctypes/schema/type.ts +1 -2
  206. package/authoring/doctypes/template/parse.d.mts +2 -0
  207. package/authoring/doctypes/template/parse.mjs +4 -0
  208. package/authoring/doctypes/template/parse.test.mjs +18 -0
  209. package/authoring/doctypes/template/template.doc.mjs +9 -3
  210. package/authoring/doctypes/template/type.ts +8 -0
  211. package/authoring/doctypes/theme/parse.d.mts +35 -0
  212. package/authoring/doctypes/theme/parse.mjs +76 -0
  213. package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
  214. package/authoring/doctypes/theme/theme.doc.mjs +79 -0
  215. package/authoring/doctypes/theme/type.ts +42 -0
  216. package/authoring/doctypes/types.ts +2 -1
  217. package/authoring/gap-report/gap-report.doc.d.mts +12 -0
  218. package/authoring/gap-report/gap-report.doc.mjs +183 -0
  219. package/authoring/identity/identity.doc.mjs +2 -2
  220. package/authoring/index.d.mts +1 -0
  221. package/authoring/index.d.ts +7 -4
  222. package/authoring/index.mjs +2 -1
  223. package/authoring/integration/integration.doc.mjs +2 -2
  224. package/authoring/integration/type.ts +4 -10
  225. package/clients/cli/__tests__/cliManifest.test.ts +27 -29
  226. package/clients/cli/commands/blog.doc.mjs +1 -1
  227. package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
  228. package/clients/cli/commands/build-theme.mjs +11 -45
  229. package/clients/cli/commands/build.doc.mjs +12 -7
  230. package/clients/cli/commands/build.mjs +105 -67
  231. package/clients/cli/commands/build.text-fields.test.mjs +41 -0
  232. package/clients/cli/commands/component/index.mjs +1 -1
  233. package/clients/cli/commands/component-ownership.test.mjs +3 -3
  234. package/clients/cli/commands/component.doc.mjs +1 -1
  235. package/clients/cli/commands/discover.broken-integration.test.mjs +7 -8
  236. package/clients/cli/commands/discover.doc.mjs +1 -1
  237. package/clients/cli/commands/discover.mjs +1 -1
  238. package/clients/cli/commands/docs.doc.mjs +21 -9
  239. package/clients/cli/commands/docs.mjs +184 -70
  240. package/clients/cli/commands/docs.test.mjs +120 -16
  241. package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
  242. package/clients/cli/commands/doctor-integration-docs.doc.mjs +3 -3
  243. package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
  244. package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
  245. package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
  246. package/clients/cli/commands/doctor-integration.test.mjs +90 -8
  247. package/clients/cli/commands/doctor.doc.mjs +1 -1
  248. package/clients/cli/commands/doctor.mjs +53 -16
  249. package/clients/cli/commands/gap-report.doc.mjs +1 -1
  250. package/clients/cli/commands/hook.doc.mjs +1 -1
  251. package/clients/cli/commands/init.doc.mjs +1 -1
  252. package/clients/cli/commands/integration-add.controls.test.mjs +1 -1
  253. package/clients/cli/commands/integration-add.doc.mjs +11 -1
  254. package/clients/cli/commands/integration-pack.doc.mjs +1 -1
  255. package/clients/cli/commands/integration-real-world.test.mjs +3 -9
  256. package/clients/cli/commands/integration.doc.mjs +1 -1
  257. package/clients/cli/commands/integration.mjs +1 -0
  258. package/clients/cli/commands/layout-check.doc.mjs +1 -1
  259. package/clients/cli/commands/layout-expand.doc.mjs +1 -1
  260. package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
  261. package/clients/cli/commands/layout.doc.mjs +1 -1
  262. package/clients/cli/commands/manifest.doc.mjs +1 -1
  263. package/clients/cli/commands/search.doc.mjs +1 -1
  264. package/clients/cli/commands/search.mjs +11 -2
  265. package/clients/cli/commands/setup-nudge.test.mjs +6 -0
  266. package/clients/cli/commands/swizzle.doc.mjs +1 -1
  267. package/clients/cli/commands/template.doc.mjs +24 -7
  268. package/clients/cli/commands/template.mjs +4 -91
  269. package/clients/cli/commands/text-json-parity.test.mjs +719 -0
  270. package/clients/cli/commands/theme-add.doc.mjs +2 -2
  271. package/clients/cli/commands/theme-build.doc.mjs +1 -1
  272. package/clients/cli/commands/theme-list.doc.mjs +2 -2
  273. package/clients/cli/commands/theme-palette-generate.doc.mjs +3 -3
  274. package/clients/cli/commands/theme-palette.doc.mjs +1 -1
  275. package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
  276. package/clients/cli/commands/theme-targets.doc.mjs +1 -1
  277. package/clients/cli/commands/theme-template.doc.mjs +1 -1
  278. package/clients/cli/commands/theme.doc.mjs +1 -1
  279. package/clients/cli/commands/upgrade.doc.mjs +3 -2
  280. package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
  281. package/clients/cli/commands/upgrade.mjs +29 -7
  282. package/clients/cli/formatters/index.mjs +2 -0
  283. package/clients/cli/formatters/index.test.mjs +6 -0
  284. package/clients/cli/index.mjs +8 -0
  285. package/clients/cli/lib/hook-format.mjs +14 -5
  286. package/clients/cli/lib/manifest.mjs +9 -2
  287. package/foundation/agent-docs/agent-docs.d.mts +3 -2
  288. package/foundation/agent-docs/agent-docs.mjs +13 -9
  289. package/foundation/agent-docs/agent-docs.test.mjs +19 -1
  290. package/foundation/config/project-themes.test.mjs +11 -19
  291. package/foundation/config/project.d.mts +20 -11
  292. package/foundation/config/project.mjs +123 -80
  293. package/foundation/config/project.test.mjs +144 -21
  294. package/foundation/discovery/authoring-self-docs.d.mts +18 -0
  295. package/foundation/discovery/authoring-self-docs.mjs +37 -15
  296. package/foundation/discovery/authoring-self-docs.test.mjs +25 -9
  297. package/foundation/discovery/authoring-surface.d.mts +74 -0
  298. package/foundation/discovery/authoring-surface.mjs +525 -0
  299. package/foundation/discovery/authoring-surface.test.mjs +392 -0
  300. package/foundation/discovery/cli-self-docs.d.mts +119 -0
  301. package/foundation/discovery/cli-self-docs.mjs +490 -0
  302. package/foundation/discovery/cli-self-docs.test.mjs +375 -0
  303. package/foundation/discovery/component-discovery.d.mts +38 -0
  304. package/foundation/discovery/component-discovery.mjs +48 -0
  305. package/foundation/discovery/component-loader.d.mts +35 -38
  306. package/foundation/discovery/component-loader.mjs +53 -222
  307. package/foundation/discovery/docs-discovery.d.mts +112 -11
  308. package/foundation/discovery/docs-discovery.mjs +231 -36
  309. package/foundation/discovery/docs-discovery.test.mjs +111 -32
  310. package/foundation/discovery/docs-output-budget.d.mts +2 -2
  311. package/foundation/discovery/docs-output-budget.mjs +1 -1
  312. package/foundation/discovery/docs-section-key.d.mts +28 -10
  313. package/foundation/discovery/docs-section-key.mjs +134 -33
  314. package/foundation/discovery/docs-section-key.test.mjs +41 -19
  315. package/foundation/discovery/template-adapter.d.mts +99 -6
  316. package/foundation/discovery/template-adapter.mjs +480 -57
  317. package/foundation/discovery/template-adapter.test.mjs +57 -0
  318. package/foundation/discovery/template-conflict-release.d.mts +13 -0
  319. package/foundation/discovery/template-conflict-release.mjs +40 -0
  320. package/foundation/discovery/template-conflict-release.test.mjs +40 -0
  321. package/foundation/discovery/theme-discovery.d.mts +67 -7
  322. package/foundation/discovery/theme-discovery.mjs +916 -186
  323. package/foundation/discovery/theme-discovery.test.mjs +613 -219
  324. package/foundation/doc-compiler/bundle.d.mts +47 -0
  325. package/foundation/doc-compiler/bundle.mjs +278 -0
  326. package/foundation/doc-compiler/bundle.test.mjs +266 -0
  327. package/foundation/doc-compiler/compile.d.mts +220 -39
  328. package/foundation/doc-compiler/compile.mjs +311 -15
  329. package/foundation/doc-compiler/diagnostics.d.mts +126 -0
  330. package/foundation/doc-compiler/diagnostics.mjs +305 -0
  331. package/foundation/doc-compiler/doc-compiler.test.mjs +28 -1
  332. package/foundation/doc-compiler/doc-loads.test.mjs +1642 -0
  333. package/foundation/doc-compiler/import.d.mts +24 -0
  334. package/foundation/doc-compiler/import.mjs +59 -0
  335. package/foundation/doc-compiler/inputs.d.mts +102 -0
  336. package/foundation/doc-compiler/inputs.mjs +291 -0
  337. package/foundation/doc-compiler/inputs.test.mjs +299 -0
  338. package/foundation/doc-compiler/ir.d.mts +13 -0
  339. package/foundation/doc-compiler/ir.mjs +196 -12
  340. package/foundation/doc-compiler/lenses.d.mts +8 -5
  341. package/foundation/doc-compiler/lenses.mjs +50 -4
  342. package/foundation/doc-compiler/links.d.mts +162 -0
  343. package/foundation/doc-compiler/links.mjs +294 -0
  344. package/foundation/doc-compiler/links.test.mjs +192 -0
  345. package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
  346. package/foundation/doc-compiler/overlays.d.mts +37 -0
  347. package/foundation/doc-compiler/overlays.mjs +206 -0
  348. package/foundation/doc-compiler/parse-readable.d.mts +9 -0
  349. package/foundation/doc-compiler/parse-readable.mjs +29 -0
  350. package/foundation/doc-compiler/read.d.mts +127 -0
  351. package/foundation/doc-compiler/read.mjs +325 -0
  352. package/foundation/doc-compiler/read.test.mjs +313 -0
  353. package/foundation/doc-compiler/source.d.mts +33 -0
  354. package/foundation/doc-compiler/source.mjs +128 -0
  355. package/foundation/doc-compiler/tree.d.mts +288 -0
  356. package/foundation/doc-compiler/tree.mjs +876 -0
  357. package/foundation/doc-compiler/tree.test.mjs +598 -0
  358. package/foundation/fs/file-protection.d.mts +33 -0
  359. package/foundation/fs/file-protection.mjs +825 -0
  360. package/foundation/fs/file-protection.test.mjs +250 -0
  361. package/foundation/integrations/autolink.d.mts +58 -1
  362. package/foundation/integrations/autolink.mjs +143 -57
  363. package/foundation/integrations/autolink.test.mjs +1 -1
  364. package/foundation/integrations/cli-requirement.d.mts +45 -0
  365. package/foundation/integrations/cli-requirement.mjs +154 -0
  366. package/foundation/integrations/cli-requirement.test.mjs +84 -0
  367. package/foundation/integrations/contribution-fixes.d.mts +145 -0
  368. package/foundation/integrations/contribution-fixes.mjs +1284 -0
  369. package/foundation/integrations/contribution-inventory.d.mts +3 -2
  370. package/foundation/integrations/contribution-inventory.mjs +27 -24
  371. package/foundation/integrations/contribution-inventory.test.mjs +86 -27
  372. package/foundation/integrations/integration-warnings.d.mts +9 -2
  373. package/foundation/integrations/integration-warnings.mjs +51 -26
  374. package/foundation/integrations/integration-warnings.test.mjs +74 -1
  375. package/foundation/integrations/integrations.d.mts +3 -0
  376. package/foundation/integrations/integrations.mjs +11 -97
  377. package/foundation/integrations/provider-ledger.test.mjs +275 -0
  378. package/foundation/integrations/provider-resolution.d.mts +152 -0
  379. package/foundation/integrations/provider-resolution.mjs +576 -0
  380. package/foundation/integrations/provider-resolution.test.mjs +369 -0
  381. package/foundation/integrations/theme-descriptor.d.mts +8 -0
  382. package/foundation/integrations/theme-descriptor.mjs +44 -0
  383. package/foundation/integrations/validate-contributions.mjs +121 -29
  384. package/foundation/response/error-codes.d.mts +3 -1
  385. package/foundation/response/error-codes.d.ts +2 -0
  386. package/foundation/response/error-codes.doc.mjs +12 -2
  387. package/foundation/response/error-codes.mjs +7 -1
  388. package/foundation/response/error-codes.test.mjs +55 -11
  389. package/foundation/response/response-types.doc.d.mts +5 -1
  390. package/foundation/response/response-types.doc.mjs +20 -11
  391. package/foundation/response/response.doc.mjs +1 -1
  392. package/foundation/text/string-utils.d.mts +8 -0
  393. package/foundation/text/string-utils.mjs +40 -10
  394. package/foundation/xle/expand.mjs +1 -1
  395. package/foundation/xle/xle.test.mjs +13 -0
  396. package/package.json +10 -9
  397. package/assets/templates/themes/manifest.json +0 -95
@@ -7,8 +7,8 @@ export const doc = {
7
7
  type: 'command',
8
8
  name: 'doctor integration docs',
9
9
  displayName: 'astryx doctor integration docs',
10
- namespace: 'cli',
11
- summary: 'Classify integration doc overlaps with Core topics',
10
+ namespace: 'cli/commands',
11
+ summary: 'Check an integration\'s docs: the docs tree they add, every link, and overlaps with Core topics',
12
12
  description:
13
13
  'Reports intentional Core topic replacements and extensions as information. ' +
14
14
  'A same-name topic without `replaces` or `extends` is an accidental conflict ' +
@@ -32,7 +32,7 @@ export const doc = {
32
32
  ],
33
33
  exitCodes: [
34
34
  {code: 0, when: 'all Core overlaps are explicitly declared or no overlap exists'},
35
- {code: 1, when: 'an overlap is accidental or the integration docs are invalid'},
35
+ {code: 1, when: 'an overlap is accidental, a doc is invalid, a namespace or placement fails, or a reference block cannot include what it names. A link that names no doc is a warning, and does not change the exit code'},
36
36
  ],
37
37
  related: ['doctor integration validate', 'docs'],
38
38
  };
@@ -9,13 +9,14 @@ export const doc = {
9
9
  type: 'command',
10
10
  name: 'doctor integration templates',
11
11
  displayName: 'astryx doctor integration templates',
12
- namespace: 'cli',
13
- summary: 'Warn when integration template ids conflict with Core',
12
+ namespace: 'cli/commands',
13
+ summary: 'Validate integration template replacements and Core id overlaps',
14
14
  description:
15
- 'Compares one local or installed integration with the built-in Core page and ' +
16
- 'block template ids. A conflict is allowed and exits successfully, but the ' +
17
- 'report recommends renaming and gives the exact --package command required ' +
18
- 'to select the integration template when the overlap is intentional.',
15
+ 'Validates one local or installed integration against the built-in Core page ' +
16
+ 'and block template ids. Intentional replacements are informational and name ' +
17
+ 'the command for selecting the Core original. Missing targets, ambiguous ' +
18
+ 'replacements, and invalid declarations are errors; undeclared same-id overlaps ' +
19
+ 'remain warnings that require package selection.',
19
20
  fn: 'integrationTemplateConflicts',
20
21
  args: [
21
22
  {
@@ -37,8 +38,14 @@ export const doc = {
37
38
  },
38
39
  ],
39
40
  exitCodes: [
40
- {code: 0, when: 'the check completed; template conflicts are warnings'},
41
- {code: 1, when: 'the integration or one of its templates is invalid'},
41
+ {
42
+ code: 0,
43
+ when: 'replacement declarations are valid; undeclared id conflicts are warnings',
44
+ },
45
+ {
46
+ code: 1,
47
+ when: 'the integration, a template, or a replacement declaration is invalid',
48
+ },
42
49
  ],
43
50
  related: ['doctor integration validate', 'template'],
44
51
  };
@@ -9,7 +9,7 @@ export const doc = {
9
9
  type: 'command',
10
10
  name: 'doctor integration validate',
11
11
  displayName: 'astryx doctor integration validate',
12
- namespace: 'cli',
12
+ namespace: 'cli/commands',
13
13
  summary: 'Validate an integration manifest and its contributions',
14
14
  description:
15
15
  'Validates one integration at a time: the local package rooted at cwd, or an ' +
@@ -9,7 +9,7 @@ export const doc = {
9
9
  type: 'command',
10
10
  name: 'doctor integration',
11
11
  displayName: 'astryx doctor integration',
12
- namespace: 'cli',
12
+ namespace: 'cli/commands',
13
13
  summary: 'Check an integration package while authoring it',
14
14
  description:
15
15
  'The integration-authoring diagnostics group. Validate a manifest and all ' +
@@ -2,9 +2,16 @@
2
2
 
3
3
  /**
4
4
  * @file Command-level coverage for `astryx doctor integration` authoring checks.
5
+ * @input Integration fixtures and the post-0.7 conflict projection.
6
+ * @output Assertions for human and typed command responses.
7
+ * @position CLI adapter coverage; 0.6.x API shape is verified separately.
5
8
  */
6
9
 
7
10
  import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest';
11
+
12
+ vi.mock('../../../foundation/discovery/template-conflict-release.mjs', () => ({
13
+ expandedTemplateConflictSchemaActive: () => true,
14
+ }));
8
15
  import * as fs from 'node:fs';
9
16
  import * as path from 'node:path';
10
17
  import {Command} from 'commander';
@@ -31,6 +38,8 @@ function writeIntegration({
31
38
  id,
32
39
  name = 'Integration template',
33
40
  missingRoot = false,
41
+ replacements,
42
+ type = 'page',
34
43
  }) {
35
44
  fs.writeFileSync(
36
45
  path.join(tmpDir, 'package.json'),
@@ -44,8 +53,8 @@ function writeIntegration({
44
53
  const stem = path.join(tmpDir, 'templates', id);
45
54
  fs.mkdirSync(path.dirname(stem), {recursive: true});
46
55
  fs.writeFileSync(
47
- `${stem}.template.mjs`,
48
- `export default {type: 'page', name: ${JSON.stringify(name)}, description: 'fixture'};\n`,
56
+ `${stem}.doc.mjs`,
57
+ `export default {type: '${type}', name: ${JSON.stringify(name)}, description: 'fixture'${replacements?.[id] == null ? '' : `, replaces: ${JSON.stringify(replacements[id])}`}};\n`,
49
58
  );
50
59
  fs.writeFileSync(
51
60
  `${stem}.tsx`,
@@ -124,7 +133,12 @@ describe('doctor integration — command', () => {
124
133
  return true;
125
134
  });
126
135
 
127
- await createProgram().parseAsync(['node', 'astryx', 'doctor', 'integration']);
136
+ await createProgram().parseAsync([
137
+ 'node',
138
+ 'astryx',
139
+ 'doctor',
140
+ 'integration',
141
+ ]);
128
142
 
129
143
  const output = writes.join('');
130
144
  expect(output).toContain('validate [package]');
@@ -136,7 +150,9 @@ describe('doctor integration — command', () => {
136
150
 
137
151
  it('explains the optional package argument in every leaf help', () => {
138
152
  const program = createProgram();
139
- const doctor = program.commands.find(command => command.name() === 'doctor');
153
+ const doctor = program.commands.find(
154
+ command => command.name() === 'doctor',
155
+ );
140
156
  const integration = doctor?.commands.find(
141
157
  command => command.name() === 'integration',
142
158
  );
@@ -152,7 +168,10 @@ describe('doctor integration — command', () => {
152
168
  });
153
169
 
154
170
  it('templates explains how to check an installed package when no local manifest exists', async () => {
155
- fs.writeFileSync(path.join(tmpDir, 'package.json'), JSON.stringify({name: 'plain'}));
171
+ fs.writeFileSync(
172
+ path.join(tmpDir, 'package.json'),
173
+ JSON.stringify({name: 'plain'}),
174
+ );
156
175
  process.chdir(tmpDir);
157
176
 
158
177
  await createProgram().parseAsync([
@@ -239,6 +258,71 @@ describe('doctor integration — command', () => {
239
258
  expect(process.exitCode).toBeUndefined();
240
259
  });
241
260
 
261
+ it('templates reports an intentional replacement and the Core-original command', async () => {
262
+ const core = (await discoverCoreTemplates()).find(
263
+ template => template.type === 'page',
264
+ );
265
+ expect(core).toBeDefined();
266
+ writeIntegration({
267
+ id: 'acme-app-shell',
268
+ type: core.type,
269
+ replacements: {'acme-app-shell': core.dirName},
270
+ });
271
+ process.chdir(tmpDir);
272
+
273
+ await createProgram().parseAsync([
274
+ 'node',
275
+ 'astryx',
276
+ '--json',
277
+ 'doctor',
278
+ 'integration',
279
+ 'templates',
280
+ ]);
281
+
282
+ const parsed = JSON.parse(logCalls.join('\n'));
283
+ expect(parsed.data.issues).toEqual([]);
284
+ expect(parsed.data.conflicts).toEqual([
285
+ expect.objectContaining({
286
+ id: 'acme-app-shell',
287
+ relationship: 'replaces',
288
+ replaces: core.dirName,
289
+ severity: 'info',
290
+ }),
291
+ ]);
292
+ expect(parsed.data.conflicts[0].command).toContain(
293
+ `--package @astryxdesign/core`,
294
+ );
295
+ expect(process.exitCode).toBeUndefined();
296
+ });
297
+
298
+ it('templates exits 1 for a missing replacement target', async () => {
299
+ writeIntegration({
300
+ id: 'acme-app-shell',
301
+ replacements: {'acme-app-shell': 'missing-core-shell'},
302
+ });
303
+ process.chdir(tmpDir);
304
+
305
+ await createProgram().parseAsync([
306
+ 'node',
307
+ 'astryx',
308
+ '--json',
309
+ 'doctor',
310
+ 'integration',
311
+ 'templates',
312
+ ]);
313
+
314
+ const parsed = JSON.parse(logCalls.join('\n'));
315
+ expect(parsed.data.issues).toEqual(
316
+ expect.arrayContaining([
317
+ expect.objectContaining({
318
+ code: 'missing_template_replacement_target',
319
+ severity: 'error',
320
+ }),
321
+ ]),
322
+ );
323
+ expect(process.exitCode).toBe(1);
324
+ });
325
+
242
326
  it('templates exits 1 when structural errors prevent a trustworthy check', async () => {
243
327
  writeIntegration({missingRoot: true});
244
328
  process.chdir(tmpDir);
@@ -278,9 +362,7 @@ describe('doctor integration — command', () => {
278
362
  const output = logCalls.join('\n');
279
363
  expect(output).toContain('[warn]');
280
364
  expect(output).toContain(core.name);
281
- expect(output).toContain(
282
- `component ${core.name} --package @acme/widgets`,
283
- );
365
+ expect(output).toContain(`component ${core.name} --package @acme/widgets`);
284
366
  expect(process.exitCode).toBeUndefined();
285
367
  });
286
368
 
@@ -12,7 +12,7 @@ export const doc = {
12
12
  type: 'command',
13
13
  name: 'doctor',
14
14
  displayName: 'astryx doctor',
15
- namespace: 'cli',
15
+ namespace: 'cli/commands',
16
16
  summary: 'Diagnose Astryx projects and integration packages',
17
17
  description:
18
18
  'Runs read-only project health diagnostics by default: Node version, @astryxdesign/core ' +
@@ -3,7 +3,12 @@
3
3
  /**
4
4
  * @file `astryx doctor` project health and integration-authoring diagnostics.
5
5
  * Human output uses plain stable tokens; every leaf also has a typed JSON
6
- * response. Exit 1 means a check found an error, while warnings remain exit 0.
6
+ * response. Template-conflict fields follow the package release boundary.
7
+ * Exit 1 means a check found an error, while warnings remain exit 0.
8
+ *
9
+ * @input Typed Doctor and integration-authoring API responses.
10
+ * @output Human-readable records or pass-through typed JSON.
11
+ * @position CLI presentation adapter for project and integration health.
7
12
  */
8
13
 
9
14
  import {runChecks} from '../../../api/doctor/doctor.mjs';
@@ -125,25 +130,41 @@ function printTemplateConflicts(data) {
125
130
  ),
126
131
  ...issueBlocks(data.issues),
127
132
  ];
128
- if (data.conflicts.length === 0) {
133
+ if (data.conflicts.length === 0 && data.issues.length === 0) {
129
134
  output.push(text('[ok] No template ids conflict with Core.'));
130
- } else {
135
+ } else if (data.conflicts.length > 0) {
136
+ const expanded = data.conflicts.some(
137
+ conflict => 'relationship' in conflict,
138
+ );
131
139
  output.push(
132
140
  records(data.conflicts, {
133
- fields: [
134
- 'severity',
135
- 'id',
136
- 'integrationPackage',
137
- 'integrationType',
138
- 'integrationName',
139
- 'message',
140
- 'command',
141
- ],
141
+ fields: expanded
142
+ ? [
143
+ 'severity',
144
+ 'relationship',
145
+ 'id',
146
+ 'replaces',
147
+ 'integrationPackage',
148
+ 'integrationType',
149
+ 'integrationName',
150
+ 'message',
151
+ 'command',
152
+ ]
153
+ : [
154
+ 'severity',
155
+ 'id',
156
+ 'integrationPackage',
157
+ 'integrationType',
158
+ 'integrationName',
159
+ 'message',
160
+ 'command',
161
+ ],
142
162
  format: {severity: statusToken},
143
163
  }),
144
164
  text(
145
- `${data.conflicts.length} Core template conflict(s). ` +
146
- 'Renaming is recommended but optional; keep the package-qualified command if the overlap is intentional.',
165
+ expanded
166
+ ? `${data.conflicts.length} Core template relationship(s).`
167
+ : `${data.conflicts.length} Core template conflict(s). Renaming is recommended but optional; keep the package-qualified command if the overlap is intentional.`,
147
168
  ),
148
169
  );
149
170
  }
@@ -165,7 +186,13 @@ function printComponentConflicts(data) {
165
186
  } else {
166
187
  output.push(
167
188
  records(data.conflicts, {
168
- fields: ['severity', 'name', 'integrationPackage', 'message', 'command'],
189
+ fields: [
190
+ 'severity',
191
+ 'name',
192
+ 'integrationPackage',
193
+ 'message',
194
+ 'command',
195
+ ],
169
196
  format: {severity: statusToken},
170
197
  }),
171
198
  text(
@@ -187,6 +214,15 @@ function printDocConflicts(data) {
187
214
  ),
188
215
  ...issueBlocks(data.issues),
189
216
  ];
217
+ if (
218
+ !data.issues.some(
219
+ issue => issue.severity === 'error' || issue.code === 'invalid_doc_graph',
220
+ )
221
+ ) {
222
+ output.push(
223
+ text('[ok] The docs tree and every link in these docs check out.'),
224
+ );
225
+ }
190
226
  if (data.findings.length === 0) {
191
227
  output.push(text('[ok] No doc topics overlap with Core.'));
192
228
  } else {
@@ -272,7 +308,8 @@ async function runAuthoringCheck(program, pkg, kind) {
272
308
  const structuralErrors = summarizeIssues(result.data.issues).errors;
273
309
  const docErrors =
274
310
  result.type === 'integration.doc-conflicts'
275
- ? result.data.findings.filter(finding => finding.severity === 'error').length
311
+ ? result.data.findings.filter(finding => finding.severity === 'error')
312
+ .length
276
313
  : 0;
277
314
  if (structuralErrors > 0 || docErrors > 0) process.exitCode = 1;
278
315
  return NO_RESULT_SET;
@@ -10,7 +10,7 @@ export const doc = {
10
10
  type: 'command',
11
11
  name: 'gap-report',
12
12
  displayName: 'astryx gap-report',
13
- namespace: 'cli',
13
+ namespace: 'cli/commands',
14
14
  summary: 'Route a design-system gap to its owning package',
15
15
  description:
16
16
  'Reports a missing component, variant, layout, styling, accessibility, API, or documentation capability. The command selects an explicit package first, then a unique component owner, then Core. The report fans out to every effective handler: project config first, then each loaded integration in config order. Public handlers require --confirm-public per handler; internal handlers always run. A handler failure is isolated and does not prevent later handlers.',
@@ -12,7 +12,7 @@ export const doc = {
12
12
  type: 'command',
13
13
  name: 'hook',
14
14
  displayName: 'astryx hook',
15
- namespace: 'cli',
15
+ namespace: 'cli/commands',
16
16
  summary: 'List hooks or print hook docs',
17
17
  description:
18
18
  'Resolves a hook by name and prints its authored doc, or lists the catalog grouped ' +
@@ -12,7 +12,7 @@ export const doc = {
12
12
  type: 'command',
13
13
  name: 'init',
14
14
  displayName: 'astryx init',
15
- namespace: 'cli',
15
+ namespace: 'cli/commands',
16
16
  summary: 'Initialize the design system in your project',
17
17
  description:
18
18
  'Non-interactive project setup (no prompts, so it behaves the same for humans, ' +
@@ -126,7 +126,7 @@ describe('integration add control definitions', () => {
126
126
  );
127
127
  expect(page.status).toBe(0);
128
128
  expect(
129
- fs.readFileSync(path.join(tmpDir, 'templates', 'acme-page.template.mjs'), 'utf-8'),
129
+ fs.readFileSync(path.join(tmpDir, 'templates', 'acme-page.doc.mjs'), 'utf-8'),
130
130
  ).toContain("type: 'page'");
131
131
  });
132
132
  });
@@ -5,7 +5,7 @@ export const doc = {
5
5
  type: 'command',
6
6
  name: 'integration add',
7
7
  displayName: 'astryx integration add',
8
- namespace: 'cli',
8
+ namespace: 'cli/commands',
9
9
  summary: 'Add one working contribution to an integration package',
10
10
  description:
11
11
  'Writes the complete minimum shape the selected contribution needs, creates the integration manifest on first use, declares the root only after a valid contribution exists, and verifies the result through the same discovery contract the packed-package check uses.',
@@ -50,6 +50,12 @@ export const doc = {
50
50
  description:
51
51
  'Existing doc topic this one extends (letters, digits, _ and -); only valid for doc and not with --replaces',
52
52
  },
53
+ {
54
+ flag: '--parent <namespace>',
55
+ param: 'options.parent',
56
+ description:
57
+ "Namespace of this package to place the doc in, as a guide in its `guides` slot; writes the namespace doc when it is missing, and declares the CLI that reads it as an optional `@astryxdesign/cli` peer. Only valid for doc, and not with --replaces or --extends",
58
+ },
53
59
  {
54
60
  flag: '--to <version>',
55
61
  param: 'options.to',
@@ -79,6 +85,10 @@ export const doc = {
79
85
  label: 'Extend a doc topic',
80
86
  cli: 'astryx integration add doc acme-theming --extends theme',
81
87
  },
88
+ {
89
+ label: 'Add a guide to the package\'s own docs section',
90
+ cli: 'astryx integration add doc deploying --parent acme',
91
+ },
82
92
  {
83
93
  label: 'Add a codemod',
84
94
  cli: 'astryx integration add codemod rename-widget --to 1.2.0',
@@ -5,7 +5,7 @@ export const doc = {
5
5
  type: 'command',
6
6
  name: 'integration pack',
7
7
  displayName: 'astryx integration pack',
8
- namespace: 'cli',
8
+ namespace: 'cli/commands',
9
9
  summary: 'Prove the packed integration is what consumers receive',
10
10
  description:
11
11
  'Runs the package lifecycle, packs with npm, checks every required contribution file against the real tarball, extracts it into a scratch consumer, and compares the local and packed contribution inventories through one shared contract.',
@@ -201,13 +201,6 @@ export const oceanTheme = defineTheme({
201
201
  });
202
202
  `,
203
203
  );
204
- const catalogFile = path.join(providerDir, 'themes', 'manifest.json');
205
- const catalog = JSON.parse(fs.readFileSync(catalogFile, 'utf-8'));
206
- catalog.themes[0].files.push(
207
- 'tokens/ocean.palette.ts',
208
- 'tokens/ocean.palette.receipt.json',
209
- );
210
- writeJson(catalogFile, catalog);
211
204
 
212
205
  const providerPackage = JSON.parse(
213
206
  fs.readFileSync(path.join(providerDir, 'package.json'), 'utf-8'),
@@ -464,8 +457,9 @@ export const oceanTheme = defineTheme({
464
457
  outputDir: target,
465
458
  files: [
466
459
  'oceanTheme.ts',
467
- 'tokens/ocean.palette.ts',
460
+ 'oceanTheme.doc.mjs',
468
461
  'tokens/ocean.palette.receipt.json',
462
+ 'tokens/ocean.palette.ts',
469
463
  ],
470
464
  },
471
465
  });
@@ -612,7 +606,7 @@ export const oceanTheme = defineTheme({
612
606
  expect(corruptedInstall.status).not.toBe(0);
613
607
  expect(parseEnvelope(corruptedInstall.stdout)).toMatchObject({
614
608
  code: 'ERR_THEME_INVALID',
615
- error: expect.stringContaining('ocean.palette.ts'),
609
+ error: expect.stringContaining('./tokens/ocean.palette'),
616
610
  });
617
611
  }, 120_000);
618
612
  });
@@ -5,7 +5,7 @@ export const doc = {
5
5
  type: 'command',
6
6
  name: 'integration',
7
7
  displayName: 'astryx integration',
8
- namespace: 'cli',
8
+ namespace: 'cli/commands',
9
9
  summary: 'Author and verify an Astryx integration package',
10
10
  description:
11
11
  'Add contributions that are valid on arrival, then prove the packed package exposes the same contributions a consumer will receive.',
@@ -58,6 +58,7 @@ export function registerIntegration(program) {
58
58
  templateType: options.type,
59
59
  replaces: options.replaces,
60
60
  extends: options.extends,
61
+ parent: options.parent,
61
62
  to: options.to,
62
63
  });
63
64
  } catch (error) {
@@ -13,7 +13,7 @@ export const doc = {
13
13
  type: 'command',
14
14
  name: 'layout check',
15
15
  displayName: 'astryx layout check',
16
- namespace: 'cli',
16
+ namespace: 'cli/commands',
17
17
  summary:
18
18
  'Validate a layout expression and echo canonical compact/outline forms',
19
19
  description:
@@ -13,7 +13,7 @@ export const doc = {
13
13
  type: 'command',
14
14
  name: 'layout expand',
15
15
  displayName: 'astryx layout expand',
16
- namespace: 'cli',
16
+ namespace: 'cli/commands',
17
17
  summary: 'Expand a layout expression into validated XDS TSX',
18
18
  description:
19
19
  'Parses and validates a compressed XLE/XLO expression, then expands it into ' +
@@ -13,7 +13,7 @@ export const doc = {
13
13
  type: 'command',
14
14
  name: 'layout grammar',
15
15
  displayName: 'astryx layout grammar',
16
- namespace: 'cli',
16
+ namespace: 'cli/commands',
17
17
  summary:
18
18
  'Print the XLE/XLO cheatsheet (alias table generated from this branch)',
19
19
  description:
@@ -12,7 +12,7 @@ export const doc = {
12
12
  type: 'command',
13
13
  name: 'layout',
14
14
  displayName: 'astryx layout',
15
- namespace: 'cli',
15
+ namespace: 'cli/commands',
16
16
  summary: 'Generate XDS layouts from compressed expressions (XLE/XLO)',
17
17
  description:
18
18
  'The layout command group. Running astryx layout with no subcommand prints the ' +
@@ -12,7 +12,7 @@ export const doc = {
12
12
  type: 'command',
13
13
  name: 'manifest',
14
14
  displayName: 'astryx manifest',
15
- namespace: 'cli',
15
+ namespace: 'cli/commands',
16
16
  summary: 'Print the full CLI capability manifest (use with --json).',
17
17
  description:
18
18
  'Emits the complete CLI surface: every command with its arguments, options, ' +
@@ -12,7 +12,7 @@ export const doc = {
12
12
  type: 'command',
13
13
  name: 'search',
14
14
  displayName: 'astryx search',
15
- namespace: 'cli',
15
+ namespace: 'cli/commands',
16
16
  summary: 'Search components, hooks, docs, and templates in one ranked list',
17
17
  description:
18
18
  'Terminal front-end to search(): prints one ranked, greppable list across ' +
@@ -49,7 +49,7 @@ export function registerSearch(program) {
49
49
 
50
50
  try {
51
51
  const project = await Project.load(process.cwd());
52
- await warnOnIntegrationIssues(project.loadedIntegrations, {json});
52
+ await warnOnIntegrationIssues(project, {json});
53
53
  } catch {
54
54
  // Never let the nudge break the command.
55
55
  }
@@ -115,7 +115,9 @@ export function registerSearch(program) {
115
115
  const fields = options.verbose
116
116
  ? [
117
117
  'name',
118
+ 'section',
118
119
  'domain',
120
+ 'package',
119
121
  'title',
120
122
  'displayName',
121
123
  'kind',
@@ -124,16 +126,20 @@ export function registerSearch(program) {
124
126
  'import',
125
127
  'description',
126
128
  'command',
129
+ 'parent',
127
130
  ]
128
131
  : [
129
132
  'name',
133
+ 'section',
130
134
  'domain',
135
+ 'package',
131
136
  'title',
132
137
  'displayName',
133
138
  'kind',
134
139
  'import',
135
140
  'description',
136
141
  'command',
142
+ 'parent',
137
143
  ];
138
144
 
139
145
  // The heading mirrors the JSON: `matchCount` is what matched, and the
@@ -145,7 +151,10 @@ export function registerSearch(program) {
145
151
  ? `Results for "${q}" (${results.length} of ${matchCount})`
146
152
  : `Results for "${q}" (${results.length})`,
147
153
  ),
148
- records(results, {fields, format: {command: formatCliCommand}}),
154
+ records(results, {
155
+ fields,
156
+ format: {command: formatCliCommand, parent: formatCliCommand},
157
+ }),
149
158
  );
150
159
  return answered;
151
160
  },
@@ -89,6 +89,12 @@ describe('enforcement layer 3 — per-command setup nudge', () => {
89
89
  expect((await runCli(['docs', 'tokens'], tmp)).stderr).not.toMatch(NUDGE);
90
90
  });
91
91
 
92
+ it('is quiet in an integration package, which is not an app', async () => {
93
+ asProject();
94
+ write('astryx.integration.mjs', 'export default {};\n');
95
+ expect((await runCli(['docs', 'tokens'], tmp)).stderr).not.toMatch(NUDGE);
96
+ });
97
+
92
98
  it('does not nudge for the installer command itself', async () => {
93
99
  asProject();
94
100
  expect((await runCli(['init'], tmp)).stderr).not.toMatch(NUDGE);
@@ -12,7 +12,7 @@ export const doc = {
12
12
  type: 'command',
13
13
  name: 'swizzle',
14
14
  displayName: 'astryx swizzle',
15
- namespace: 'cli',
15
+ namespace: 'cli/commands',
16
16
  summary: 'Copy component source for customization',
17
17
  description:
18
18
  "Ejects a component's source from the resolved @astryxdesign/core (or its owning " +