@canonical/pragma-cli 0.29.0 → 0.31.0

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 (410) hide show
  1. package/README.md +128 -47
  2. package/dist/pragma +0 -0
  3. package/package.json +15 -13
  4. package/src/completions/constants.ts +7 -0
  5. package/src/completions/handleQuery.test.ts +32 -0
  6. package/src/completions/handleQuery.ts +20 -1
  7. package/src/completions/queryCompletions.test.ts +5 -0
  8. package/src/completions/queryCompletions.ts +17 -3
  9. package/src/completions/querySocket.test.ts +31 -0
  10. package/src/completions/querySocket.ts +36 -9
  11. package/src/config/defaultConfig.test.ts +33 -0
  12. package/src/config/defaultConfig.ts +59 -0
  13. package/src/config/defaults.json +17 -0
  14. package/src/config/findProjectConfigPath.test.ts +53 -0
  15. package/src/config/findProjectConfigPath.ts +36 -0
  16. package/src/config/index.ts +17 -2
  17. package/src/config/mergeConfigFileUpdate.ts +58 -0
  18. package/src/config/parseConfigValues.ts +217 -0
  19. package/src/config/readConfig.test.ts +104 -13
  20. package/src/config/readConfig.ts +12 -153
  21. package/src/config/readConfigLayers.test.ts +109 -0
  22. package/src/config/readConfigLayers.ts +118 -0
  23. package/src/config/resolveGlobalConfigPath.ts +13 -0
  24. package/src/config/resolveWriteConfigPath.test.ts +53 -0
  25. package/src/config/resolveWriteConfigPath.ts +31 -0
  26. package/src/config/types.ts +83 -1
  27. package/src/config/writeConfig.ts +25 -55
  28. package/src/constants.ts +3 -1
  29. package/src/domains/block/commands/list.ts +5 -90
  30. package/src/domains/block/commands/lookup.ts +8 -167
  31. package/src/domains/block/commands/sample.ts +2 -1
  32. package/src/domains/block/formatters/list.test.ts +3 -3
  33. package/src/domains/block/formatters/lookup.test.ts +5 -5
  34. package/src/domains/block/mcp/specs.ts +16 -196
  35. package/src/domains/block/orchestration/enrichBlocks.ts +6 -3
  36. package/src/domains/block/orchestration/resolveBlockLookup.ts +2 -1
  37. package/src/domains/block/stories.test.ts +28 -0
  38. package/src/domains/block/stories.ts +260 -0
  39. package/src/domains/config/commands/channel.test.ts +30 -3
  40. package/src/domains/config/commands/channel.ts +25 -8
  41. package/src/domains/config/commands/configScope.ts +46 -0
  42. package/src/domains/config/commands/framework.test.ts +32 -1
  43. package/src/domains/config/commands/framework.ts +26 -8
  44. package/src/domains/config/commands/show.ts +5 -45
  45. package/src/domains/config/commands/tier.test.ts +20 -2
  46. package/src/domains/config/commands/tier.ts +25 -8
  47. package/src/domains/config/commands/trace.test.ts +19 -2
  48. package/src/domains/config/commands/trace.ts +6 -3
  49. package/src/domains/config/formatters/channel.test.ts +20 -6
  50. package/src/domains/config/formatters/channel.ts +14 -11
  51. package/src/domains/config/formatters/framework.ts +14 -11
  52. package/src/domains/config/formatters/show.test.ts +27 -0
  53. package/src/domains/config/formatters/show.ts +27 -4
  54. package/src/domains/config/formatters/tier.test.ts +26 -10
  55. package/src/domains/config/formatters/tier.ts +19 -11
  56. package/src/domains/config/formatters/trace.ts +7 -7
  57. package/src/domains/config/mcp/specs.ts +33 -53
  58. package/src/domains/config/operations/show.test.ts +18 -0
  59. package/src/domains/config/operations/show.ts +7 -1
  60. package/src/domains/config/operations/types.ts +7 -0
  61. package/src/domains/config/operations/validateTier.test.ts +9 -0
  62. package/src/domains/config/operations/validateTier.ts +10 -2
  63. package/src/domains/config/stories.ts +42 -0
  64. package/src/domains/config/tasks/index.ts +1 -0
  65. package/src/domains/config/tasks/setChannel.ts +13 -28
  66. package/src/domains/config/tasks/setFramework.ts +11 -30
  67. package/src/domains/config/tasks/setTier.ts +10 -29
  68. package/src/domains/config/tasks/setTrace.ts +10 -28
  69. package/src/domains/config/tasks/writeConfigField.ts +41 -0
  70. package/src/domains/create/generatorPack/bundled.ts +49 -0
  71. package/src/domains/create/generatorPack/compileGeneratorPack.test.ts +159 -0
  72. package/src/domains/create/generatorPack/compileGeneratorPack.ts +312 -0
  73. package/src/domains/create/index.ts +13 -7
  74. package/src/domains/create/mcp/specs.ts +6 -161
  75. package/src/domains/create/renderGeneratorUi.test.ts +103 -0
  76. package/src/domains/create/renderGeneratorUi.ts +65 -0
  77. package/src/domains/doctor/formatters/doctor.test.ts +50 -2
  78. package/src/domains/doctor/formatters/doctor.ts +90 -38
  79. package/src/domains/doctor/operations/checks/checkConfigFile.ts +19 -5
  80. package/src/domains/doctor/operations/checks/checkMcpCommands.ts +133 -0
  81. package/src/domains/doctor/operations/checks/checkMcpConfigured.ts +1 -1
  82. package/src/domains/doctor/operations/checks/checkPackageRefs.ts +32 -26
  83. package/src/domains/doctor/operations/checks/checkSkillsSymlinked.ts +1 -1
  84. package/src/domains/doctor/operations/checks/index.ts +1 -0
  85. package/src/domains/doctor/operations/checks.test.ts +160 -7
  86. package/src/domains/doctor/operations/runChecks.test.ts +15 -6
  87. package/src/domains/doctor/operations/runChecks.ts +2 -0
  88. package/src/domains/doctor/operations/types.ts +23 -1
  89. package/src/domains/graph/commands/inspect.test.ts +2 -2
  90. package/src/domains/graph/commands/query.test.ts +5 -3
  91. package/src/domains/graph/formatters/inspect.ts +7 -7
  92. package/src/domains/graph/formatters/query.test.ts +87 -0
  93. package/src/domains/graph/formatters/query.ts +42 -5
  94. package/src/domains/graph/helpers/resolveUri.test.ts +50 -0
  95. package/src/domains/graph/helpers/resolveUri.ts +28 -21
  96. package/src/domains/graph/operations/inspectUri.test.ts +5 -5
  97. package/src/domains/graphql/commands/build.test.ts +5 -3
  98. package/src/domains/graphql/commands/build.ts +8 -16
  99. package/src/domains/graphql/commands/check.test.ts +5 -3
  100. package/src/domains/graphql/commands/check.ts +7 -13
  101. package/src/domains/graphql/commands/index.ts +1 -0
  102. package/src/domains/graphql/commands/serve.test.ts +46 -0
  103. package/src/domains/graphql/commands/serve.ts +141 -0
  104. package/src/domains/graphql/constants.ts +10 -0
  105. package/src/domains/graphql/helpers/gatherSources.test.ts +92 -0
  106. package/src/domains/graphql/helpers/gatherSources.ts +58 -0
  107. package/src/domains/graphql/helpers/index.ts +2 -0
  108. package/src/domains/graphql/helpers/parsePrefixes.test.ts +3 -3
  109. package/src/domains/graphql/helpers/parsePrefixes.ts +3 -3
  110. package/src/domains/graphql/helpers/resolveSourceFiles.test.ts +9 -0
  111. package/src/domains/graphql/helpers/resolveSourceFiles.ts +24 -3
  112. package/src/domains/graphql/helpers/routeGraphql.test.ts +43 -0
  113. package/src/domains/graphql/helpers/routeGraphql.ts +28 -0
  114. package/src/domains/graphql/index.ts +9 -6
  115. package/src/domains/graphql/operations/compileSchema.test.ts +23 -47
  116. package/src/domains/graphql/operations/compileSchema.ts +23 -25
  117. package/src/domains/graphql/operations/createSchemaServer.test.ts +50 -0
  118. package/src/domains/graphql/operations/createSchemaServer.ts +75 -0
  119. package/src/domains/graphql/operations/ensureSchemaArtifact.test.ts +167 -0
  120. package/src/domains/graphql/operations/ensureSchemaArtifact.ts +178 -0
  121. package/src/domains/graphql/operations/index.ts +10 -0
  122. package/src/domains/info/formatters/upgrade.test.ts +7 -4
  123. package/src/domains/info/formatters/upgrade.ts +3 -1
  124. package/src/domains/info/operations/collectEntityCounts.test.ts +156 -0
  125. package/src/domains/info/operations/collectEntityCounts.ts +123 -0
  126. package/src/domains/info/operations/collectInfo.test.ts +14 -3
  127. package/src/domains/info/operations/collectInfo.ts +12 -15
  128. package/src/domains/info/operations/index.ts +1 -0
  129. package/src/domains/info/types.ts +13 -0
  130. package/src/domains/llm/capabilities.test.ts +24 -4
  131. package/src/domains/llm/commands/capabilities.ts +12 -3
  132. package/src/domains/llm/commands/llm.ts +5 -1
  133. package/src/domains/llm/data/commandReference.ts +20 -11
  134. package/src/domains/llm/data/decisionTrees.ts +10 -5
  135. package/src/domains/llm/data/toolCatalog.ts +55 -18
  136. package/src/domains/llm/formatters/orientation.ts +5 -1
  137. package/src/domains/llm/llmCommand.test.ts +11 -3
  138. package/src/domains/llm/mcp/specs.ts +3 -4
  139. package/src/domains/llm/operations/collectContext.test.ts +64 -0
  140. package/src/domains/llm/operations/collectContext.ts +7 -17
  141. package/src/domains/modifier/commands/list.ts +5 -38
  142. package/src/domains/modifier/commands/lookup.ts +8 -79
  143. package/src/domains/modifier/commands/sample.ts +2 -1
  144. package/src/domains/modifier/mcp/specs.ts +15 -94
  145. package/src/domains/modifier/operations/lookup.ts +5 -3
  146. package/src/domains/modifier/orchestration/resolveModifierLookup.ts +2 -1
  147. package/src/domains/modifier/stories.test.ts +20 -0
  148. package/src/domains/modifier/stories.ts +86 -0
  149. package/src/domains/ontology/commands/list.test.ts +5 -3
  150. package/src/domains/ontology/commands/list.ts +5 -58
  151. package/src/domains/ontology/commands/show.test.ts +85 -9
  152. package/src/domains/ontology/commands/show.ts +6 -58
  153. package/src/domains/ontology/formatters/index.ts +1 -0
  154. package/src/domains/ontology/formatters/list.ts +37 -12
  155. package/src/domains/ontology/formatters/show.ts +361 -64
  156. package/src/domains/ontology/helpers/buildClassTree.ts +89 -0
  157. package/src/domains/ontology/helpers/completeClassNames.ts +43 -0
  158. package/src/domains/ontology/helpers/expandOntologyIris.ts +79 -0
  159. package/src/domains/ontology/helpers/index.ts +14 -0
  160. package/src/domains/ontology/helpers/queryClasses.ts +32 -16
  161. package/src/domains/ontology/helpers/queryProperties.ts +39 -6
  162. package/src/domains/ontology/helpers/queryTboxFacts.ts +160 -0
  163. package/src/domains/ontology/mcp/specs.ts +7 -84
  164. package/src/domains/ontology/operations/listOntologies.test.ts +80 -3
  165. package/src/domains/ontology/operations/listOntologies.ts +126 -30
  166. package/src/domains/ontology/operations/showOntology.test.ts +131 -12
  167. package/src/domains/ontology/operations/showOntology.ts +289 -7
  168. package/src/domains/ontology/operations/showOntologyRaw.test.ts +4 -2
  169. package/src/domains/ontology/stories.test.ts +36 -0
  170. package/src/domains/ontology/stories.ts +153 -0
  171. package/src/domains/refs/operations/updateRefs.ts +2 -38
  172. package/src/domains/setup/commands/index.ts +1 -0
  173. package/src/domains/setup/commands/setup.ts +70 -0
  174. package/src/domains/setup/commands/skills.test.ts +6 -2
  175. package/src/domains/setup/commands/skills.ts +6 -2
  176. package/src/domains/setup/helpers/runSetupTask.test.ts +148 -150
  177. package/src/domains/setup/helpers/runSetupTask.ts +62 -70
  178. package/src/domains/setup/index.ts +7 -3
  179. package/src/domains/setup/operations/setupLsp.test.ts +3 -2
  180. package/src/domains/setup/operations/setupLsp.ts +7 -2
  181. package/src/domains/setup/operations/setupMcp.test.ts +6 -1
  182. package/src/domains/shared/bootStore.bareCore.test.ts +63 -0
  183. package/src/domains/shared/bootStore.test.ts +82 -0
  184. package/src/domains/shared/bootStore.ts +57 -18
  185. package/src/domains/shared/compactUri.test.ts +11 -0
  186. package/src/domains/shared/compactUri.ts +10 -5
  187. package/src/domains/shared/context.ts +2 -2
  188. package/src/domains/shared/contracts.ts +11 -0
  189. package/src/domains/shared/createInteractivePromptSession.test.ts +439 -0
  190. package/src/domains/shared/createInteractivePromptSession.ts +236 -0
  191. package/src/domains/shared/emptyErrorRecovery.test.ts +23 -26
  192. package/src/domains/shared/extractLocalName.test.ts +3 -3
  193. package/src/domains/shared/formatters.ts +23 -2
  194. package/src/domains/shared/listTiers.ts +40 -0
  195. package/src/domains/shared/loaders/bundledLoader.test.ts +248 -0
  196. package/src/domains/shared/loaders/bundledLoader.ts +158 -12
  197. package/src/domains/shared/loaders/gitLoader.ts +1 -2
  198. package/src/domains/shared/loaders/index.ts +4 -1
  199. package/src/domains/shared/loaders/localLoader.ts +2 -4
  200. package/src/domains/shared/loaders/readPackageDir.test.ts +58 -0
  201. package/src/domains/shared/loaders/readPackageDir.ts +82 -9
  202. package/src/domains/shared/loaders/storyAssetsPlugin.test.ts +84 -0
  203. package/src/domains/shared/loaders/storyAssetsPlugin.ts +46 -0
  204. package/src/domains/shared/lookupMany.test.ts +135 -0
  205. package/src/domains/shared/lookupMany.ts +50 -2
  206. package/src/domains/shared/mergeAndParseRefs.test.ts +89 -0
  207. package/src/domains/shared/mergeAndParseRefs.ts +44 -0
  208. package/src/domains/shared/namespaces.ts +13 -5
  209. package/src/domains/shared/packages.ts +10 -17
  210. package/src/domains/shared/parseSampleCount.test.ts +47 -0
  211. package/src/domains/shared/parseSampleCount.ts +45 -0
  212. package/src/domains/shared/prefixes.test.ts +211 -0
  213. package/src/domains/shared/prefixes.ts +182 -15
  214. package/src/domains/shared/renderers.ts +5 -5
  215. package/src/domains/shared/resolveConfiguredGraphs.test.ts +27 -0
  216. package/src/domains/shared/resolveConfiguredGraphs.ts +41 -0
  217. package/src/domains/shared/resolveLookupExitCode.test.ts +48 -0
  218. package/src/domains/shared/resolveLookupExitCode.ts +42 -0
  219. package/src/domains/shared/runtime.ts +4 -63
  220. package/src/domains/shared/semanticPackage.test.ts +89 -0
  221. package/src/domains/shared/semanticPackage.ts +34 -3
  222. package/src/domains/shared/stories/compileLookupCommand.test.ts +145 -0
  223. package/src/domains/shared/stories/compileLookupCommand.ts +102 -0
  224. package/src/domains/shared/stories/compileLookupTool.test.ts +105 -0
  225. package/src/domains/shared/stories/compileLookupTool.ts +96 -0
  226. package/src/domains/shared/stories/compileReadCommand.test.ts +121 -0
  227. package/src/domains/shared/stories/compileReadCommand.ts +48 -0
  228. package/src/domains/shared/stories/compileReadTool.test.ts +64 -0
  229. package/src/domains/shared/stories/compileReadTool.ts +38 -0
  230. package/src/domains/shared/stories/condense.test.ts +18 -0
  231. package/src/domains/shared/stories/condense.ts +15 -0
  232. package/src/domains/shared/stories/index.ts +20 -0
  233. package/src/domains/shared/stories/normalizeNames.test.ts +20 -0
  234. package/src/domains/shared/stories/normalizeNames.ts +22 -0
  235. package/src/domains/shared/stories/pack/applyPackFilters.test.ts +151 -0
  236. package/src/domains/shared/stories/pack/applyPackFilters.ts +111 -0
  237. package/src/domains/shared/stories/pack/applyPackSearch.test.ts +57 -0
  238. package/src/domains/shared/stories/pack/applyPackSearch.ts +41 -0
  239. package/src/domains/shared/stories/pack/buildLookupQuery.test.ts +81 -0
  240. package/src/domains/shared/stories/pack/buildLookupQuery.ts +154 -0
  241. package/src/domains/shared/stories/pack/bundled/index.ts +23 -0
  242. package/src/domains/shared/stories/pack/bundled/standardPack.ts +164 -0
  243. package/src/domains/shared/stories/pack/bundled/tierPack.ts +50 -0
  244. package/src/domains/shared/stories/pack/collectPackStories.test.ts +406 -0
  245. package/src/domains/shared/stories/pack/collectPackStories.ts +158 -0
  246. package/src/domains/shared/stories/pack/compilePackCommands.ts +50 -0
  247. package/src/domains/shared/stories/pack/compilePackStories.test.ts +751 -0
  248. package/src/domains/shared/stories/pack/compilePackStories.ts +724 -0
  249. package/src/domains/shared/stories/pack/compilePackToolSpecs.ts +55 -0
  250. package/src/domains/shared/stories/pack/index.ts +42 -0
  251. package/src/domains/shared/stories/pack/reservedVerbs.test.ts +213 -0
  252. package/src/domains/shared/stories/pack/reservedVerbs.ts +170 -0
  253. package/src/domains/shared/stories/pack/runSelectQuery.ts +31 -0
  254. package/src/domains/shared/stories/pack/standardParity.test.ts +381 -0
  255. package/src/domains/shared/stories/pack/types.ts +224 -0
  256. package/src/domains/shared/stories/pack/validateStoryPackDefinition.test.ts +742 -0
  257. package/src/domains/shared/stories/pack/validateStoryPackDefinition.ts +859 -0
  258. package/src/domains/shared/stories/projectCliParameters.test.ts +59 -0
  259. package/src/domains/shared/stories/projectCliParameters.ts +57 -0
  260. package/src/domains/shared/stories/projectToolParams.test.ts +50 -0
  261. package/src/domains/shared/stories/projectToolParams.ts +32 -0
  262. package/src/domains/shared/stories/requirePragmaContext.test.ts +23 -0
  263. package/src/domains/shared/stories/requirePragmaContext.ts +23 -0
  264. package/src/domains/shared/stories/resolveLookupDetailed.test.ts +57 -0
  265. package/src/domains/shared/stories/resolveLookupDetailed.ts +27 -0
  266. package/src/domains/shared/stories/types.ts +179 -0
  267. package/src/domains/shared/suggestions/expandGlob.ts +1 -0
  268. package/src/domains/shared/suggestions/suggestNames.ts +43 -10
  269. package/src/domains/shared/types/index.ts +5 -9
  270. package/src/domains/shared/types/ontology.ts +119 -24
  271. package/src/domains/shared/types/standard.ts +9 -52
  272. package/src/domains/skill/commands/index.ts +3 -1
  273. package/src/domains/skill/commands/list.test.ts +6 -2
  274. package/src/domains/skill/commands/list.ts +5 -63
  275. package/src/domains/skill/commands/lookup.test.ts +118 -0
  276. package/src/domains/skill/commands/lookup.ts +14 -0
  277. package/src/domains/skill/formatters/index.ts +1 -0
  278. package/src/domains/skill/formatters/lookup.test.ts +46 -0
  279. package/src/domains/skill/formatters/lookup.ts +57 -0
  280. package/src/domains/skill/helpers/resolveSkillSources.ts +0 -1
  281. package/src/domains/skill/index.ts +7 -3
  282. package/src/domains/skill/mcp/specs.ts +10 -29
  283. package/src/domains/skill/operations/discover.test.ts +61 -30
  284. package/src/domains/skill/operations/discover.ts +28 -37
  285. package/src/domains/skill/operations/index.ts +2 -1
  286. package/src/domains/skill/operations/list.test.ts +15 -7
  287. package/src/domains/skill/operations/lookup.test.ts +91 -0
  288. package/src/domains/skill/operations/lookup.ts +70 -0
  289. package/src/domains/skill/stories.test.ts +43 -0
  290. package/src/domains/skill/stories.ts +103 -0
  291. package/src/domains/skill/types.ts +8 -0
  292. package/src/domains/token/commands/lookup.test.ts +8 -0
  293. package/src/domains/token/commands/lookup.ts +12 -0
  294. package/src/domains/token/commands/sample.ts +2 -1
  295. package/src/domains/token/featureFlag.ts +17 -0
  296. package/src/domains/token/index.ts +5 -0
  297. package/src/domains/token/mcp/specs.ts +18 -2
  298. package/src/domains/token/orchestration/resolveTokenLookup.ts +2 -1
  299. package/src/domains/trace/commands/resolveTraceLimit.test.ts +31 -0
  300. package/src/domains/trace/commands/show.ts +30 -4
  301. package/src/domains/trace/tracePlugin.test.ts +1 -1
  302. package/src/index.ts +1 -13
  303. package/src/mcp/registerResources.test.ts +382 -74
  304. package/src/mcp/registerResources.ts +5 -348
  305. package/src/mcp/resources/buildGraphIndex.ts +167 -0
  306. package/src/mcp/resources/buildResourceList.test.ts +97 -0
  307. package/src/mcp/resources/buildResourceList.ts +176 -0
  308. package/src/mcp/resources/classifyEntity.test.ts +40 -0
  309. package/src/mcp/resources/classifyEntity.ts +27 -0
  310. package/src/mcp/resources/constants.ts +105 -0
  311. package/src/mcp/resources/displayPredicates.ts +62 -0
  312. package/src/mcp/resources/pickFirstValue.test.ts +29 -0
  313. package/src/mcp/resources/pickFirstValue.ts +26 -0
  314. package/src/mcp/resources/pickPrimaryType.test.ts +41 -0
  315. package/src/mcp/resources/pickPrimaryType.ts +26 -0
  316. package/src/mcp/resources/rankUriCompletions.test.ts +52 -0
  317. package/src/mcp/resources/rankUriCompletions.ts +64 -0
  318. package/src/mcp/resources/readEntity.ts +169 -0
  319. package/src/mcp/resources/registerResources.ts +126 -0
  320. package/src/mcp/resources/types.ts +128 -0
  321. package/src/mcp/tools/index.ts +22 -5
  322. package/src/mcp/tools/registerTools.test.ts +167 -34
  323. package/src/mcp/types.ts +4 -0
  324. package/src/pipeline/collectCommands.test.ts +151 -1
  325. package/src/pipeline/collectCommands.ts +35 -13
  326. package/src/pipeline/createProgram.test.ts +5 -1
  327. package/src/pipeline/createProgram.ts +2 -2
  328. package/src/pipeline/firstRun.test.ts +80 -0
  329. package/src/pipeline/firstRun.ts +99 -0
  330. package/src/pipeline/parseGlobalFlags.test.ts +102 -1
  331. package/src/pipeline/parseGlobalFlags.ts +98 -9
  332. package/src/pipeline/resolveCommandKind.test.ts +12 -0
  333. package/src/pipeline/resolveCommandKind.ts +4 -0
  334. package/src/pipeline/rootHelp.test.ts +87 -0
  335. package/src/pipeline/rootHelp.ts +265 -0
  336. package/src/pipeline/runCli.orchestration.test.ts +28 -12
  337. package/src/pipeline/runCli.test.ts +17 -4
  338. package/src/pipeline/runCli.ts +202 -25
  339. package/src/testing/cli.ts +30 -2
  340. package/src/testing/createTestMcpClient.ts +4 -1
  341. package/src/testing/dsFixtures.ts +21 -4
  342. package/src/testing/index.ts +7 -0
  343. package/src/testing/integration/__snapshots__/executor-golden.test.ts.snap +1207 -0
  344. package/src/testing/integration/cli-user-stories.test.ts +63 -0
  345. package/src/testing/integration/cross-binary-byte-equality.test.ts +129 -0
  346. package/src/testing/integration/edge-cases.test.ts +62 -50
  347. package/src/testing/integration/executor-execution.test.ts +103 -0
  348. package/src/testing/integration/executor-golden.test.ts +145 -0
  349. package/src/testing/integration/mcp-surface.test.ts +40 -15
  350. package/src/testing/integration/parity.test.ts +136 -82
  351. package/src/testing/regression/0001-skill-discovery-granularity.test.ts +71 -0
  352. package/src/testing/setupXdgIsolation.ts +26 -0
  353. package/src/testing/standardParityFixtures.ts +35 -0
  354. package/src/testing/store.ts +4 -4
  355. package/src/testing/storyFixtures.ts +63 -0
  356. package/src/domains/create/commands/component.test.ts +0 -166
  357. package/src/domains/create/commands/component.ts +0 -123
  358. package/src/domains/create/commands/index.ts +0 -3
  359. package/src/domains/create/commands/package.test.ts +0 -35
  360. package/src/domains/create/commands/package.ts +0 -21
  361. package/src/domains/create/generators.ts +0 -8
  362. package/src/domains/standard/commands/categories.test.ts +0 -70
  363. package/src/domains/standard/commands/categories.ts +0 -48
  364. package/src/domains/standard/commands/index.ts +0 -6
  365. package/src/domains/standard/commands/list.test.ts +0 -105
  366. package/src/domains/standard/commands/list.ts +0 -90
  367. package/src/domains/standard/commands/lookup.test.ts +0 -135
  368. package/src/domains/standard/commands/lookup.ts +0 -99
  369. package/src/domains/standard/commands/sample.ts +0 -57
  370. package/src/domains/standard/formatters/categories.test.ts +0 -44
  371. package/src/domains/standard/formatters/categories.ts +0 -38
  372. package/src/domains/standard/formatters/index.ts +0 -10
  373. package/src/domains/standard/formatters/list.test.ts +0 -169
  374. package/src/domains/standard/formatters/list.ts +0 -184
  375. package/src/domains/standard/formatters/lookup.test.ts +0 -95
  376. package/src/domains/standard/formatters/lookup.ts +0 -101
  377. package/src/domains/standard/formatters/sample.ts +0 -15
  378. package/src/domains/standard/formatters/types.ts +0 -31
  379. package/src/domains/standard/index.ts +0 -40
  380. package/src/domains/standard/mcp/index.ts +0 -2
  381. package/src/domains/standard/mcp/specs.ts +0 -244
  382. package/src/domains/standard/operations/categories.test.ts +0 -61
  383. package/src/domains/standard/operations/categories.ts +0 -38
  384. package/src/domains/standard/operations/index.ts +0 -6
  385. package/src/domains/standard/operations/list.test.ts +0 -75
  386. package/src/domains/standard/operations/list.ts +0 -64
  387. package/src/domains/standard/operations/lookup.test.ts +0 -58
  388. package/src/domains/standard/operations/lookup.ts +0 -151
  389. package/src/domains/standard/operations/sample.ts +0 -35
  390. package/src/domains/standard/orchestration/buildStandardFilters.ts +0 -11
  391. package/src/domains/standard/orchestration/index.ts +0 -4
  392. package/src/domains/standard/orchestration/resolveStandardList.ts +0 -45
  393. package/src/domains/standard/orchestration/resolveStandardLookup.ts +0 -32
  394. package/src/domains/standard/orchestration/standardEmptyError.test.ts +0 -33
  395. package/src/domains/standard/orchestration/standardEmptyError.ts +0 -29
  396. package/src/domains/standard/standardConfig.ts +0 -42
  397. package/src/domains/standard/types.ts +0 -15
  398. package/src/domains/tier/commands/index.ts +0 -3
  399. package/src/domains/tier/commands/list.test.ts +0 -67
  400. package/src/domains/tier/commands/list.ts +0 -59
  401. package/src/domains/tier/formatters/index.ts +0 -3
  402. package/src/domains/tier/formatters/list.test.ts +0 -33
  403. package/src/domains/tier/formatters/list.ts +0 -45
  404. package/src/domains/tier/index.ts +0 -17
  405. package/src/domains/tier/mcp/index.ts +0 -2
  406. package/src/domains/tier/mcp/specs.ts +0 -38
  407. package/src/domains/tier/operations/index.ts +0 -3
  408. package/src/domains/tier/operations/list.test.ts +0 -32
  409. package/src/domains/tier/operations/list.ts +0 -33
  410. package/src/pipeline/runInteractiveCommand.ts +0 -198
@@ -0,0 +1,31 @@
1
+ import findProjectConfigPath from "./findProjectConfigPath.js";
2
+ import resolveConfigPath from "./resolveConfigPath.js";
3
+ import resolveGlobalConfigPath from "./resolveGlobalConfigPath.js";
4
+ import type { ConfigScope } from "./types.js";
5
+
6
+ /**
7
+ * Resolve which config file a write should target.
8
+ *
9
+ * An explicit scope wins: `"local"` targets `<cwd>/pragma.config.json`,
10
+ * `"global"` targets the XDG file. Otherwise the nearest existing project
11
+ * file up the tree is updated in place, and when none exists the write
12
+ * goes to the global file — pragma is global-first: an unconfigured
13
+ * directory should not sprout a project file as a side effect.
14
+ *
15
+ * @param cwd - Directory the project layer is resolved from.
16
+ * @param scope - Optional explicit target layer.
17
+ * @returns Absolute path of the config file to write.
18
+ * @note Impure — probes the filesystem for the nearest project file.
19
+ */
20
+ export default function resolveWriteConfigPath(
21
+ cwd: string,
22
+ scope?: ConfigScope,
23
+ ): string {
24
+ if (scope === "local") {
25
+ return resolveConfigPath(cwd);
26
+ }
27
+ if (scope === "global") {
28
+ return resolveGlobalConfigPath();
29
+ }
30
+ return findProjectConfigPath(cwd) ?? resolveGlobalConfigPath();
31
+ }
@@ -7,6 +7,7 @@
7
7
 
8
8
  import type { Channel, Framework } from "../constants.js";
9
9
  import type { RawPackageEntry } from "../domains/refs/operations/parseRef.js";
10
+ import type { StoryPackDefinition } from "../domains/shared/stories/pack/types.js";
10
11
 
11
12
  /** Parsed contents of pragma.config.json. */
12
13
  interface PragmaConfig {
@@ -27,6 +28,22 @@ interface PragmaConfig {
27
28
  * only — no behaviour reads it yet; reserved for future framework defaulting.
28
29
  */
29
30
  framework?: Framework | undefined;
31
+ /**
32
+ * Declarative read stories compiled into CLI commands and MCP tools at
33
+ * boot.
34
+ * @experimental Story packs (v0) are experimental — the format may change.
35
+ */
36
+ stories?: ReadonlyArray<StoryPackDefinition> | undefined;
37
+ /**
38
+ * Additional namespace prefixes merged over the built-in prefix map —
39
+ * registered on the store (usable in queries) and used for display.
40
+ */
41
+ prefixes?: Readonly<Record<string, string>> | undefined;
42
+ /**
43
+ * Default progressive-disclosure level for disclosure-capable commands
44
+ * (e.g. `"digest"`, `"detailed"`). An explicit `--detail` flag overrides it.
45
+ */
46
+ detail?: string | undefined;
30
47
  }
31
48
 
32
49
  /** Partial update payload for writing config changes. */
@@ -43,4 +60,69 @@ interface ConfigUpdate {
43
60
  framework?: Framework | undefined;
44
61
  }
45
62
 
46
- export type { ConfigUpdate, PragmaConfig };
63
+ /**
64
+ * Values a single config file declares. A key is present only when the
65
+ * file sets it — presence drives which layer wins during merging.
66
+ */
67
+ interface ConfigFileValues {
68
+ readonly tier?: string;
69
+ readonly channel?: Channel;
70
+ readonly packages?: ReadonlyArray<RawPackageEntry>;
71
+ readonly trace?: boolean;
72
+ readonly framework?: Framework;
73
+ readonly stories?: ReadonlyArray<StoryPackDefinition>;
74
+ readonly prefixes?: Readonly<Record<string, string>>;
75
+ readonly detail?: string;
76
+ }
77
+
78
+ /** Which config layer supplied an effective field value. */
79
+ type ConfigOrigin = "default" | "global" | "project";
80
+
81
+ /** Per-field provenance for the effective merged config. */
82
+ interface ConfigOrigins {
83
+ readonly tier: ConfigOrigin;
84
+ readonly channel: ConfigOrigin;
85
+ readonly packages: ConfigOrigin;
86
+ readonly trace: ConfigOrigin;
87
+ readonly framework: ConfigOrigin;
88
+ readonly stories: ConfigOrigin;
89
+ readonly prefixes: ConfigOrigin;
90
+ readonly detail: ConfigOrigin;
91
+ }
92
+
93
+ /** A resolved config file layer. */
94
+ interface ConfigLayer {
95
+ /** Absolute path of the layer's config file (existing or would-be). */
96
+ readonly path: string;
97
+ /** Whether the file exists and was readable. */
98
+ readonly exists: boolean;
99
+ }
100
+
101
+ /** Layered config resolution result with per-field provenance. */
102
+ interface ConfigLayers {
103
+ /** The effective merged configuration (defaults < global < project). */
104
+ readonly config: PragmaConfig;
105
+ /** Which layer supplied each effective field. */
106
+ readonly origins: ConfigOrigins;
107
+ /** The global XDG layer (`$XDG_CONFIG_HOME/pragma/config.json`). */
108
+ readonly global: ConfigLayer;
109
+ /**
110
+ * The project layer: the nearest `pragma.config.json` up the tree, or
111
+ * the would-be path at `cwd` when none exists.
112
+ */
113
+ readonly project: ConfigLayer;
114
+ }
115
+
116
+ /** Target layer selector for config writes. */
117
+ type ConfigScope = "global" | "local";
118
+
119
+ export type {
120
+ ConfigFileValues,
121
+ ConfigLayer,
122
+ ConfigLayers,
123
+ ConfigOrigin,
124
+ ConfigOrigins,
125
+ ConfigScope,
126
+ ConfigUpdate,
127
+ PragmaConfig,
128
+ };
@@ -1,67 +1,37 @@
1
- import { readFileSync, renameSync, writeFileSync } from "node:fs";
2
- import resolveConfigPath from "./resolveConfigPath.js";
3
- import type { ConfigUpdate } from "./types.js";
1
+ import { mkdirSync, renameSync, writeFileSync } from "node:fs";
2
+ import { dirname } from "node:path";
3
+ import mergeConfigFileUpdate from "./mergeConfigFileUpdate.js";
4
+ import resolveWriteConfigPath from "./resolveWriteConfigPath.js";
5
+ import type { ConfigScope, ConfigUpdate } from "./types.js";
4
6
 
5
7
  /**
6
- * Write config updates to pragma.config.json.
8
+ * Write config updates to the resolved target layer.
7
9
  *
8
- * Merges updates into existing JSON. A field set to `undefined` removes it.
9
- * Creates the file if it doesn't exist.
10
+ * The target follows the global-first write rule (see
11
+ * `resolveWriteConfigPath`): an explicit scope wins, else the nearest
12
+ * existing project file, else the global XDG file. Merges updates into
13
+ * that file's own contents — a field set to `undefined` removes it —
14
+ * creating the file (and its directory) if needed, atomically via a
15
+ * temp file rename.
10
16
  *
11
- * @param cwd - Directory containing (or to contain) pragma.config.json.
17
+ * @param cwd - Directory the project layer is resolved from.
12
18
  * @param update - Fields to set or remove.
19
+ * @param scope - Optional explicit target layer (`"global"` | `"local"`).
20
+ * @returns Absolute path of the file that was written.
13
21
  *
14
22
  * @note Impure — writes to the filesystem.
15
23
  */
16
- export default function writeConfig(cwd: string, update: ConfigUpdate): void {
17
- const configPath = resolveConfigPath(cwd);
24
+ export default function writeConfig(
25
+ cwd: string,
26
+ update: ConfigUpdate,
27
+ scope?: ConfigScope,
28
+ ): string {
29
+ const configPath = resolveWriteConfigPath(cwd, scope);
18
30
  const tempPath = `${configPath}.tmp`;
31
+ const content = mergeConfigFileUpdate(configPath, update);
19
32
 
20
- let existing: Record<string, unknown> = {};
21
- try {
22
- const raw = readFileSync(configPath, "utf-8");
23
- existing = JSON.parse(raw) as Record<string, unknown>;
24
- } catch (err: unknown) {
25
- // Only swallow "file not found" — surface parse or permission errors.
26
- const isNotFound =
27
- err instanceof Error &&
28
- "code" in err &&
29
- (err as NodeJS.ErrnoException).code === "ENOENT";
30
- if (!isNotFound) {
31
- throw err;
32
- }
33
- }
34
-
35
- if (update.tier !== undefined) {
36
- existing.tier = update.tier;
37
- } else if ("tier" in update) {
38
- delete existing.tier;
39
- }
40
-
41
- if (update.channel !== undefined) {
42
- existing.channel = update.channel;
43
- } else if ("channel" in update) {
44
- delete existing.channel;
45
- }
46
-
47
- if (update.packages !== undefined) {
48
- existing.packages = update.packages;
49
- } else if ("packages" in update) {
50
- delete existing.packages;
51
- }
52
-
53
- if (update.trace !== undefined) {
54
- existing.trace = update.trace;
55
- } else if ("trace" in update) {
56
- delete existing.trace;
57
- }
58
-
59
- if (update.framework !== undefined) {
60
- existing.framework = update.framework;
61
- } else if ("framework" in update) {
62
- delete existing.framework;
63
- }
64
-
65
- writeFileSync(tempPath, `${JSON.stringify(existing, null, 2)}\n`);
33
+ mkdirSync(dirname(configPath), { recursive: true });
34
+ writeFileSync(tempPath, content);
66
35
  renameSync(tempPath, configPath);
36
+ return configPath;
67
37
  }
package/src/constants.ts CHANGED
@@ -7,7 +7,9 @@
7
7
  */
8
8
 
9
9
  import pkg from "../package.json" with { type: "json" };
10
- import { PREFIX_MAP } from "./domains/shared/prefixes.js";
10
+ // DEFAULT_PREFIX_MAP carries the transitional DS prefixes (ds/cs) this map
11
+ // still keys on; remove in P4 when DS prefixes ship from their packages.
12
+ import { DEFAULT_PREFIX_MAP as PREFIX_MAP } from "./domains/shared/prefixes.js";
11
13
 
12
14
  /** CLI program name used in help text and error messages. */
13
15
  const PROGRAM_NAME = "pragma";
@@ -1,96 +1,11 @@
1
- /**
2
- * Wires the `pragma block list` CLI command.
3
- *
4
- * Lists all blocks visible under the current tier and channel filters.
5
- * Supports progressive disclosure via `--digest` and `--detailed` flags,
6
- * and an `--all-tiers` flag to widen the search.
7
- */
8
-
9
- import {
10
- type CommandDefinition,
11
- type CommandResult,
12
- createOutputResult,
13
- } from "@canonical/cli-core";
14
- import { createListView } from "#tui";
1
+ import type { CommandDefinition } from "@canonical/cli-core";
15
2
  import type { PragmaContext } from "../../shared/context.js";
16
- import type { ColumnDef } from "../../shared/contracts.js";
17
- import { selectFormatter } from "../../shared/formatters.js";
18
- import { blockConfig } from "../blockConfig.js";
19
- import { listFormatters } from "../formatters/index.js";
20
- import { resolveBlockList } from "../orchestration/index.js";
3
+ import { compileReadCommand } from "../../shared/stories/index.js";
4
+ import { blockListStory } from "../stories.js";
21
5
 
6
+ /** Wire the `pragma block list` CLI command from the block list story. */
22
7
  export default function buildListCommand(
23
8
  ctx: PragmaContext,
24
9
  ): CommandDefinition {
25
- return {
26
- path: ["block", "list"],
27
- description: "List blocks in the design system",
28
- parameters: [
29
- {
30
- name: "allTiers",
31
- description: "Show blocks from all tiers",
32
- type: "boolean",
33
- default: false,
34
- },
35
- {
36
- name: "digest",
37
- description: "Show enriched summary with implementations",
38
- type: "boolean",
39
- default: false,
40
- },
41
- {
42
- name: "detailed",
43
- description: "Show full details for each block",
44
- type: "boolean",
45
- default: false,
46
- },
47
- ],
48
- meta: {
49
- examples: [
50
- "pragma block list",
51
- "pragma block list --all-tiers",
52
- "pragma block list --digest",
53
- "pragma block list --detailed",
54
- "pragma block list --llm",
55
- "pragma block list --format json",
56
- ],
57
- },
58
- execute: async (
59
- params: Record<string, unknown>,
60
- ): Promise<CommandResult> => {
61
- const contract = await resolveBlockList(ctx, {
62
- allTiers: params.allTiers === true,
63
- digest: params.digest === true,
64
- detailed: params.detailed === true,
65
- });
66
-
67
- return createOutputResult(contract.result.items, {
68
- plain: selectFormatter(ctx, listFormatters),
69
- ink: (data) =>
70
- createListView({
71
- heading: "Blocks",
72
- domain: "block",
73
- items: data,
74
- columns: reorderColumns(blockConfig.listColumns, [
75
- "name",
76
- "type",
77
- "tier",
78
- "modifiers",
79
- "uri",
80
- ]),
81
- }),
82
- });
83
- },
84
- };
85
- }
86
-
87
- function reorderColumns<T>(
88
- columns: readonly ColumnDef<T>[],
89
- order: readonly string[],
90
- ): readonly ColumnDef<T>[] {
91
- const byKey = new Map(columns.map((col) => [col.key, col]));
92
- return order.flatMap((key) => {
93
- const col = byKey.get(key as keyof T & string);
94
- return col ? [col] : [];
95
- });
10
+ return compileReadCommand(ctx, blockListStory);
96
11
  }
@@ -1,173 +1,14 @@
1
- /**
2
- * Wires the `pragma block lookup <name-or-uri...>` CLI command.
3
- *
4
- * Accepts a positional block name or IRI and optional aspect flags (anatomy,
5
- * modifiers, tokens, implementations). Delegates to {@link lookupBlock} for
6
- * data retrieval and {@link lookupFormatters} for output rendering.
7
- */
8
-
9
- import {
10
- type CommandDefinition,
11
- type CommandResult,
12
- createOutputResult,
13
- } from "@canonical/cli-core";
14
- import { PragmaError } from "#error";
15
- import { createLookupView } from "#tui";
1
+ import type { CommandDefinition } from "@canonical/cli-core";
16
2
  import type { PragmaContext } from "../../shared/context.js";
17
- import type { LookupResult } from "../../shared/contracts.js";
18
- import { renderLookupResults } from "../../shared/formatters.js";
19
- import type { BlockDetailed } from "../../shared/types/index.js";
20
- import { createLookupOptions, lookupFormatters } from "../formatters/index.js";
21
- import { resolveAspects } from "../helpers/index.js";
22
- import { listBlocks } from "../operations/index.js";
23
- import {
24
- buildBlockFilters,
25
- resolveBlockLookup,
26
- } from "../orchestration/index.js";
27
- import type { AspectFlags } from "../types.js";
28
-
29
- interface BlockLookupOutput {
30
- readonly result: LookupResult<BlockDetailed>;
31
- readonly detailed: boolean;
32
- readonly aspects: AspectFlags;
33
- }
3
+ import { compileLookupCommand } from "../../shared/stories/index.js";
4
+ import { blockLookupStory } from "../stories.js";
34
5
 
6
+ /**
7
+ * Wire the `pragma block lookup <name-or-uri...>` CLI command from the
8
+ * block lookup story.
9
+ */
35
10
  export default function buildLookupCommand(
36
11
  ctx: PragmaContext,
37
12
  ): CommandDefinition {
38
- return {
39
- path: ["block", "lookup"],
40
- description: "Look up block details",
41
- parameters: [
42
- {
43
- name: "names",
44
- description: "Block names or IRIs",
45
- type: "multiselect",
46
- positional: true,
47
- required: true,
48
- complete: async (partial: string) => {
49
- const all = await listBlocks(ctx.store, ctx.config);
50
- return all
51
- .map((c) => c.name)
52
- .filter((n) => n.toLowerCase().startsWith(partial.toLowerCase()));
53
- },
54
- },
55
- {
56
- name: "detailed",
57
- description:
58
- "Show full details including anatomy, modifiers, tokens, and implementations",
59
- type: "boolean",
60
- default: false,
61
- },
62
- {
63
- name: "anatomy",
64
- description: "Show anatomy tree",
65
- type: "boolean",
66
- default: false,
67
- },
68
- {
69
- name: "modifiers",
70
- description: "Show modifier values",
71
- type: "boolean",
72
- default: false,
73
- },
74
- {
75
- name: "tokens",
76
- description: "Show token references",
77
- type: "boolean",
78
- default: false,
79
- },
80
- {
81
- name: "implementations",
82
- description: "Show implementation paths",
83
- type: "boolean",
84
- default: false,
85
- },
86
- ],
87
- parameterGroups: {
88
- "Aspect filters": ["anatomy", "modifiers", "tokens", "implementations"],
89
- },
90
- meta: {
91
- examples: [
92
- "pragma block lookup Button",
93
- "pragma block lookup Button Card",
94
- "pragma block lookup Button --detailed",
95
- "pragma block lookup Button --anatomy --modifiers",
96
- "pragma block lookup Button --detailed --llm",
97
- "pragma block lookup ds:global.component.button",
98
- ],
99
- },
100
- execute: async (
101
- params: Record<string, unknown>,
102
- ): Promise<CommandResult> => {
103
- const names = normalizeNames(params.names, params.name);
104
- if (names.length === 0) {
105
- throw PragmaError.invalidInput("names", "(empty)", {
106
- recovery: {
107
- message: "List available blocks.",
108
- cli: "pragma block list",
109
- mcp: { tool: "block_list" },
110
- },
111
- });
112
- }
113
-
114
- const detailed = params.detailed === true;
115
- const aspectInput: Partial<AspectFlags> = {
116
- anatomy: params.anatomy === true,
117
- modifiers: params.modifiers === true,
118
- tokens: params.tokens === true,
119
- implementations: params.implementations === true,
120
- };
121
-
122
- const isAspectSelected =
123
- aspectInput.anatomy ||
124
- aspectInput.modifiers ||
125
- aspectInput.tokens ||
126
- aspectInput.implementations;
127
- const showDetailed = detailed || (isAspectSelected ?? false);
128
- const aspects = resolveAspects(aspectInput);
129
-
130
- const contract = await resolveBlockLookup(
131
- ctx.store,
132
- names,
133
- buildBlockFilters(ctx),
134
- );
135
-
136
- return createOutputResult<BlockLookupOutput>(
137
- { result: contract.result, detailed: showDetailed, aspects },
138
- {
139
- plain: ({ result, detailed: isDetailed, aspects: selectedAspects }) =>
140
- renderLookupResults({
141
- ctx,
142
- result,
143
- formatters: lookupFormatters,
144
- mapResult: (block) => ({
145
- block,
146
- detailed: isDetailed,
147
- aspects: selectedAspects,
148
- }),
149
- }),
150
- ink: ({ result, detailed: isDetailed, aspects: selectedAspects }) =>
151
- createLookupView({
152
- results: result.results,
153
- errors: result.errors,
154
- domain: "block",
155
- options: createLookupOptions(isDetailed, selectedAspects),
156
- }),
157
- },
158
- );
159
- },
160
- };
161
- }
162
-
163
- function normalizeNames(names: unknown, legacyName?: unknown): string[] {
164
- if (Array.isArray(names)) {
165
- return names.filter(
166
- (name): name is string => typeof name === "string" && name.length > 0,
167
- );
168
- }
169
- if (typeof legacyName === "string" && legacyName.length > 0) {
170
- return [legacyName];
171
- }
172
- return [];
13
+ return compileLookupCommand(ctx, blockLookupStory);
173
14
  }
@@ -11,6 +11,7 @@ import {
11
11
  } from "@canonical/cli-core";
12
12
  import type { PragmaContext } from "../../shared/context.js";
13
13
  import { selectFormatter } from "../../shared/formatters.js";
14
+ import parseSampleCount from "../../shared/parseSampleCount.js";
14
15
  import type { BlockDetailed, SampleOutput } from "../../shared/types/index.js";
15
16
  import { sampleFormatters } from "../formatters/index.js";
16
17
  import { sampleBlocks } from "../operations/index.js";
@@ -38,7 +39,7 @@ export default function sampleCommand(ctx: PragmaContext): CommandDefinition {
38
39
  examples: ["pragma block sample", "pragma block sample --count 3"],
39
40
  },
40
41
  async execute(params) {
41
- const count = Number(params.count ?? 2);
42
+ const count = parseSampleCount(params.count);
42
43
  const filters = buildBlockFilters(ctx);
43
44
  const result = await sampleBlocks(ctx.store, filters, count);
44
45
 
@@ -1,11 +1,11 @@
1
1
  import type { URI } from "@canonical/ke";
2
2
  import { describe, expect, it } from "vitest";
3
- import { PREFIX_MAP } from "../../shared/prefixes.js";
3
+ import { DEFAULT_PREFIX_MAP } from "../../shared/prefixes.js";
4
4
  import type { BlockSummary } from "../../shared/types/index.js";
5
5
  import formatters from "./list.js";
6
6
 
7
7
  const BUTTON: BlockSummary = {
8
- uri: `${PREFIX_MAP.ds}button` as URI,
8
+ uri: `${DEFAULT_PREFIX_MAP.ds}button` as URI,
9
9
  name: "Button",
10
10
  tier: "global",
11
11
  modifiers: ["importance", "density"],
@@ -18,7 +18,7 @@ const BUTTON: BlockSummary = {
18
18
  };
19
19
 
20
20
  const CARD: BlockSummary = {
21
- uri: `${PREFIX_MAP.ds}card` as URI,
21
+ uri: `${DEFAULT_PREFIX_MAP.ds}card` as URI,
22
22
  name: "Card",
23
23
  tier: "global",
24
24
  modifiers: [],
@@ -1,12 +1,12 @@
1
1
  import type { URI } from "@canonical/ke";
2
2
  import { describe, expect, it } from "vitest";
3
- import { PREFIX_MAP } from "../../shared/prefixes.js";
3
+ import { DEFAULT_PREFIX_MAP } from "../../shared/prefixes.js";
4
4
  import type { BlockDetailed } from "../../shared/types/index.js";
5
5
  import type { AspectFlags } from "../types.js";
6
6
  import formatters from "./lookup.js";
7
7
 
8
8
  const BUTTON_DETAILED: BlockDetailed = {
9
- uri: `${PREFIX_MAP.ds}global.component.button` as URI,
9
+ uri: `${DEFAULT_PREFIX_MAP.ds}global.component.button` as URI,
10
10
  name: "Button",
11
11
  type: "component",
12
12
  tier: "global",
@@ -40,7 +40,7 @@ const BUTTON_DETAILED: BlockDetailed = {
40
40
  ],
41
41
  modifierFamilies: [
42
42
  {
43
- uri: `${PREFIX_MAP.ds}modifier_family.importance` as URI,
43
+ uri: `${DEFAULT_PREFIX_MAP.ds}modifier_family.importance` as URI,
44
44
  name: "importance",
45
45
  values: ["default", "primary", "secondary"],
46
46
  },
@@ -56,7 +56,7 @@ const BUTTON_DETAILED: BlockDetailed = {
56
56
  ],
57
57
  subcomponents: [
58
58
  {
59
- uri: `${PREFIX_MAP.ds}global.subcomponent.button.icon` as URI,
59
+ uri: `${DEFAULT_PREFIX_MAP.ds}global.subcomponent.button.icon` as URI,
60
60
  name: "Button Icon",
61
61
  },
62
62
  ],
@@ -65,7 +65,7 @@ const BUTTON_DETAILED: BlockDetailed = {
65
65
  ],
66
66
  tokens: [
67
67
  {
68
- uri: `${PREFIX_MAP.ds}token.color.primary` as URI,
68
+ uri: `${DEFAULT_PREFIX_MAP.ds}token.color.primary` as URI,
69
69
  name: "color.primary",
70
70
  },
71
71
  ],