@canonical/pragma-cli 0.33.0 → 0.35.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 (892) hide show
  1. package/README.md +153 -30
  2. package/dist/.build-ok +0 -0
  3. package/dist/package.json +83 -0
  4. package/dist/pragma.conf.js +814 -0
  5. package/dist/pragma.conf.js.map +1 -0
  6. package/dist/src/bin.js +356 -0
  7. package/dist/src/bin.js.map +1 -0
  8. package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
  9. package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
  10. package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
  11. package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
  12. package/dist/src/capabilities/capabilities/catalog.js +130 -0
  13. package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
  14. package/dist/src/capabilities/capabilities/hints.js +195 -0
  15. package/dist/src/capabilities/capabilities/hints.js.map +1 -0
  16. package/dist/src/capabilities/capabilities/index.js +11 -0
  17. package/dist/src/capabilities/capabilities/index.js.map +1 -0
  18. package/dist/src/capabilities/capabilities/types.js +11 -0
  19. package/dist/src/capabilities/capabilities/types.js.map +1 -0
  20. package/dist/src/capabilities/colophon/collectColophon.js +83 -0
  21. package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
  22. package/dist/src/capabilities/colophon/colophon.render.js +59 -0
  23. package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
  24. package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
  25. package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
  26. package/dist/src/capabilities/colophon/index.js +5 -0
  27. package/dist/src/capabilities/colophon/index.js.map +1 -0
  28. package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
  29. package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
  30. package/dist/src/capabilities/colophon/types.js +10 -0
  31. package/dist/src/capabilities/colophon/types.js.map +1 -0
  32. package/dist/src/capabilities/config/collectConfigShow.js +59 -0
  33. package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
  34. package/dist/src/capabilities/config/field.render.js +22 -0
  35. package/dist/src/capabilities/config/field.render.js.map +1 -0
  36. package/dist/src/capabilities/config/fields.js +46 -0
  37. package/dist/src/capabilities/config/fields.js.map +1 -0
  38. package/dist/src/capabilities/config/get.verb.js +61 -0
  39. package/dist/src/capabilities/config/get.verb.js.map +1 -0
  40. package/dist/src/capabilities/config/index.js +5 -0
  41. package/dist/src/capabilities/config/index.js.map +1 -0
  42. package/dist/src/capabilities/config/runField.js +59 -0
  43. package/dist/src/capabilities/config/runField.js.map +1 -0
  44. package/dist/src/capabilities/config/runGet.js +28 -0
  45. package/dist/src/capabilities/config/runGet.js.map +1 -0
  46. package/dist/src/capabilities/config/runSet.js +53 -0
  47. package/dist/src/capabilities/config/runSet.js.map +1 -0
  48. package/dist/src/capabilities/config/set.verb.js +66 -0
  49. package/dist/src/capabilities/config/set.verb.js.map +1 -0
  50. package/dist/src/capabilities/config/show.render.js +84 -0
  51. package/dist/src/capabilities/config/show.render.js.map +1 -0
  52. package/dist/src/capabilities/config/show.verb.js +44 -0
  53. package/dist/src/capabilities/config/show.verb.js.map +1 -0
  54. package/dist/src/capabilities/config/types.js +5 -0
  55. package/dist/src/capabilities/config/types.js.map +1 -0
  56. package/dist/src/capabilities/config/unset.verb.js +49 -0
  57. package/dist/src/capabilities/config/unset.verb.js.map +1 -0
  58. package/dist/src/capabilities/create/cliProjection.js +195 -0
  59. package/dist/src/capabilities/create/cliProjection.js.map +1 -0
  60. package/dist/src/capabilities/create/constants.js +47 -0
  61. package/dist/src/capabilities/create/constants.js.map +1 -0
  62. package/dist/src/capabilities/create/create.render.js +100 -0
  63. package/dist/src/capabilities/create/create.render.js.map +1 -0
  64. package/dist/src/capabilities/create/create.verb.js +438 -0
  65. package/dist/src/capabilities/create/create.verb.js.map +1 -0
  66. package/dist/src/capabilities/create/createHelp.js +47 -0
  67. package/dist/src/capabilities/create/createHelp.js.map +1 -0
  68. package/dist/src/capabilities/create/createSurface.generated.js +394 -0
  69. package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
  70. package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
  71. package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
  72. package/dist/src/capabilities/create/index.js +18 -0
  73. package/dist/src/capabilities/create/index.js.map +1 -0
  74. package/dist/src/capabilities/create/messages.js +16 -0
  75. package/dist/src/capabilities/create/messages.js.map +1 -0
  76. package/dist/src/capabilities/create/mount.js +293 -0
  77. package/dist/src/capabilities/create/mount.js.map +1 -0
  78. package/dist/src/capabilities/create/pathJail.js +65 -0
  79. package/dist/src/capabilities/create/pathJail.js.map +1 -0
  80. package/dist/src/capabilities/create/pickGenerator.js +53 -0
  81. package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
  82. package/dist/src/capabilities/create/types.js +2 -0
  83. package/dist/src/capabilities/create/types.js.map +1 -0
  84. package/dist/src/capabilities/distribution.js +40 -0
  85. package/dist/src/capabilities/distribution.js.map +1 -0
  86. package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
  87. package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
  88. package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
  89. package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
  90. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +92 -0
  91. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
  92. package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
  93. package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
  94. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
  95. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
  96. package/dist/src/capabilities/doctor/checks/index.js +27 -0
  97. package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
  98. package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
  99. package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
  100. package/dist/src/capabilities/doctor/checks/targetHealth.js +205 -0
  101. package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
  102. package/dist/src/capabilities/doctor/doctor.render.js +185 -0
  103. package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
  104. package/dist/src/capabilities/doctor/doctor.verb.js +45 -0
  105. package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
  106. package/dist/src/capabilities/doctor/index.js +5 -0
  107. package/dist/src/capabilities/doctor/index.js.map +1 -0
  108. package/dist/src/capabilities/doctor/runChecks.js +83 -0
  109. package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
  110. package/dist/src/capabilities/doctor/types.js +5 -0
  111. package/dist/src/capabilities/doctor/types.js.map +1 -0
  112. package/dist/src/capabilities/graph/index.js +19 -0
  113. package/dist/src/capabilities/graph/index.js.map +1 -0
  114. package/dist/src/capabilities/graph/inspect.render.js +76 -0
  115. package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
  116. package/dist/src/capabilities/graph/inspect.verb.js +53 -0
  117. package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
  118. package/dist/src/capabilities/graph/query.render.js +73 -0
  119. package/dist/src/capabilities/graph/query.render.js.map +1 -0
  120. package/dist/src/capabilities/graph/query.verb.js +49 -0
  121. package/dist/src/capabilities/graph/query.verb.js.map +1 -0
  122. package/dist/src/capabilities/graph/runQuery.js +41 -0
  123. package/dist/src/capabilities/graph/runQuery.js.map +1 -0
  124. package/dist/src/capabilities/index.js +56 -0
  125. package/dist/src/capabilities/index.js.map +1 -0
  126. package/dist/src/capabilities/info/collectInfo.js +66 -0
  127. package/dist/src/capabilities/info/collectInfo.js.map +1 -0
  128. package/dist/src/capabilities/info/index.js +5 -0
  129. package/dist/src/capabilities/info/index.js.map +1 -0
  130. package/dist/src/capabilities/info/info.render.js +53 -0
  131. package/dist/src/capabilities/info/info.render.js.map +1 -0
  132. package/dist/src/capabilities/info/info.verb.js +42 -0
  133. package/dist/src/capabilities/info/info.verb.js.map +1 -0
  134. package/dist/src/capabilities/info/types.js +5 -0
  135. package/dist/src/capabilities/info/types.js.map +1 -0
  136. package/dist/src/capabilities/meta/complete.verb.js +43 -0
  137. package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
  138. package/dist/src/capabilities/meta/index.js +13 -0
  139. package/dist/src/capabilities/meta/index.js.map +1 -0
  140. package/dist/src/capabilities/meta/mcp.verb.js +34 -0
  141. package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
  142. package/dist/src/capabilities/ontology/index.js +21 -0
  143. package/dist/src/capabilities/ontology/index.js.map +1 -0
  144. package/dist/src/capabilities/ontology/queries.js +123 -0
  145. package/dist/src/capabilities/ontology/queries.js.map +1 -0
  146. package/dist/src/capabilities/ontology/render.js +66 -0
  147. package/dist/src/capabilities/ontology/render.js.map +1 -0
  148. package/dist/src/capabilities/ontology/verbs.js +181 -0
  149. package/dist/src/capabilities/ontology/verbs.js.map +1 -0
  150. package/dist/src/capabilities/prompt/index.js +16 -0
  151. package/dist/src/capabilities/prompt/index.js.map +1 -0
  152. package/dist/src/capabilities/prompt/prompt.render.js +78 -0
  153. package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
  154. package/dist/src/capabilities/prompt/types.js +10 -0
  155. package/dist/src/capabilities/prompt/types.js.map +1 -0
  156. package/dist/src/capabilities/prompt/verbs.js +93 -0
  157. package/dist/src/capabilities/prompt/verbs.js.map +1 -0
  158. package/dist/src/capabilities/resources/index.js +10 -0
  159. package/dist/src/capabilities/resources/index.js.map +1 -0
  160. package/dist/src/capabilities/resources/provider.js +423 -0
  161. package/dist/src/capabilities/resources/provider.js.map +1 -0
  162. package/dist/src/capabilities/setup/buildPlan.js +168 -0
  163. package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
  164. package/dist/src/capabilities/setup/index.js +5 -0
  165. package/dist/src/capabilities/setup/index.js.map +1 -0
  166. package/dist/src/capabilities/setup/mode.js +53 -0
  167. package/dist/src/capabilities/setup/mode.js.map +1 -0
  168. package/dist/src/capabilities/setup/operations/index.js +39 -0
  169. package/dist/src/capabilities/setup/operations/index.js.map +1 -0
  170. package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
  171. package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
  172. package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
  173. package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
  174. package/dist/src/capabilities/setup/operations/setupGenerator.js +343 -0
  175. package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
  176. package/dist/src/capabilities/setup/operations/setupLsp.js +277 -0
  177. package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
  178. package/dist/src/capabilities/setup/operations/setupMcp.js +207 -0
  179. package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
  180. package/dist/src/capabilities/setup/operations/setupSkills.js +316 -0
  181. package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
  182. package/dist/src/capabilities/setup/plan.js +128 -0
  183. package/dist/src/capabilities/setup/plan.js.map +1 -0
  184. package/dist/src/capabilities/setup/plan.render.js +193 -0
  185. package/dist/src/capabilities/setup/plan.render.js.map +1 -0
  186. package/dist/src/capabilities/setup/setup.render.js +54 -0
  187. package/dist/src/capabilities/setup/setup.render.js.map +1 -0
  188. package/dist/src/capabilities/setup/setup.verb.js +334 -0
  189. package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
  190. package/dist/src/capabilities/setup/shell.js +196 -0
  191. package/dist/src/capabilities/setup/shell.js.map +1 -0
  192. package/dist/src/capabilities/setup/targets.js +263 -0
  193. package/dist/src/capabilities/setup/targets.js.map +1 -0
  194. package/dist/src/capabilities/setup/types.js +5 -0
  195. package/dist/src/capabilities/setup/types.js.map +1 -0
  196. package/dist/src/capabilities/shared/assertExecOk.js +137 -0
  197. package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
  198. package/dist/src/capabilities/shared/bands.js +16 -0
  199. package/dist/src/capabilities/shared/bands.js.map +1 -0
  200. package/dist/src/capabilities/shared/index.js +26 -0
  201. package/dist/src/capabilities/shared/index.js.map +1 -0
  202. package/dist/src/capabilities/shared/packageManager.js +103 -0
  203. package/dist/src/capabilities/shared/packageManager.js.map +1 -0
  204. package/dist/src/capabilities/shared/registry.js +55 -0
  205. package/dist/src/capabilities/shared/registry.js.map +1 -0
  206. package/dist/src/capabilities/skill/discover.js +195 -0
  207. package/dist/src/capabilities/skill/discover.js.map +1 -0
  208. package/dist/src/capabilities/skill/index.js +10 -0
  209. package/dist/src/capabilities/skill/index.js.map +1 -0
  210. package/dist/src/capabilities/skill/render.js +49 -0
  211. package/dist/src/capabilities/skill/render.js.map +1 -0
  212. package/dist/src/capabilities/skill/verbs.js +83 -0
  213. package/dist/src/capabilities/skill/verbs.js.map +1 -0
  214. package/dist/src/capabilities/sources/collectStatus.js +103 -0
  215. package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
  216. package/dist/src/capabilities/sources/index.js +13 -0
  217. package/dist/src/capabilities/sources/index.js.map +1 -0
  218. package/dist/src/capabilities/sources/installSkills.js +167 -0
  219. package/dist/src/capabilities/sources/installSkills.js.map +1 -0
  220. package/dist/src/capabilities/sources/runUpdate.js +394 -0
  221. package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
  222. package/dist/src/capabilities/sources/status.render.js +64 -0
  223. package/dist/src/capabilities/sources/status.render.js.map +1 -0
  224. package/dist/src/capabilities/sources/status.verb.js +40 -0
  225. package/dist/src/capabilities/sources/status.verb.js.map +1 -0
  226. package/dist/src/capabilities/sources/types.js +6 -0
  227. package/dist/src/capabilities/sources/types.js.map +1 -0
  228. package/dist/src/capabilities/sources/update.render.js +34 -0
  229. package/dist/src/capabilities/sources/update.render.js.map +1 -0
  230. package/dist/src/capabilities/sources/update.verb.js +55 -0
  231. package/dist/src/capabilities/sources/update.verb.js.map +1 -0
  232. package/dist/src/capabilities/upgrade/index.js +5 -0
  233. package/dist/src/capabilities/upgrade/index.js.map +1 -0
  234. package/dist/src/capabilities/upgrade/runUpgrade.js +99 -0
  235. package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
  236. package/dist/src/capabilities/upgrade/types.js +5 -0
  237. package/dist/src/capabilities/upgrade/types.js.map +1 -0
  238. package/dist/src/capabilities/upgrade/upgrade.render.js +44 -0
  239. package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
  240. package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
  241. package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
  242. package/dist/src/capabilities/version/index.js +10 -0
  243. package/dist/src/capabilities/version/index.js.map +1 -0
  244. package/dist/src/capabilities/version/version.verb.js +36 -0
  245. package/dist/src/capabilities/version/version.verb.js.map +1 -0
  246. package/dist/src/constants.js +82 -0
  247. package/dist/src/constants.js.map +1 -0
  248. package/dist/src/index.js +12 -0
  249. package/dist/src/index.js.map +1 -0
  250. package/dist/src/kernel/completion/complete.js +66 -0
  251. package/dist/src/kernel/completion/complete.js.map +1 -0
  252. package/dist/src/kernel/completion/emitScripts.js +92 -0
  253. package/dist/src/kernel/completion/emitScripts.js.map +1 -0
  254. package/dist/src/kernel/completion/entitySource.js +285 -0
  255. package/dist/src/kernel/completion/entitySource.js.map +1 -0
  256. package/dist/src/kernel/completion/index.js +14 -0
  257. package/dist/src/kernel/completion/index.js.map +1 -0
  258. package/dist/src/kernel/completion/model.js +301 -0
  259. package/dist/src/kernel/completion/model.js.map +1 -0
  260. package/dist/src/kernel/completion/parse.js +253 -0
  261. package/dist/src/kernel/completion/parse.js.map +1 -0
  262. package/dist/src/kernel/completion/rank.js +101 -0
  263. package/dist/src/kernel/completion/rank.js.map +1 -0
  264. package/dist/src/kernel/completion/resolve.js +100 -0
  265. package/dist/src/kernel/completion/resolve.js.map +1 -0
  266. package/dist/src/kernel/completion/templates/bash.js +209 -0
  267. package/dist/src/kernel/completion/templates/bash.js.map +1 -0
  268. package/dist/src/kernel/completion/templates/fish.js +214 -0
  269. package/dist/src/kernel/completion/templates/fish.js.map +1 -0
  270. package/dist/src/kernel/completion/templates/index.js +23 -0
  271. package/dist/src/kernel/completion/templates/index.js.map +1 -0
  272. package/dist/src/kernel/completion/templates/shared.js +98 -0
  273. package/dist/src/kernel/completion/templates/shared.js.map +1 -0
  274. package/dist/src/kernel/completion/templates/zsh.js +201 -0
  275. package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
  276. package/dist/src/kernel/completion/types.js +13 -0
  277. package/dist/src/kernel/completion/types.js.map +1 -0
  278. package/dist/src/kernel/config/defaults.js +17 -0
  279. package/dist/src/kernel/config/defaults.js.map +1 -0
  280. package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
  281. package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
  282. package/dist/src/kernel/config/findProjectConfig.js +43 -0
  283. package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
  284. package/dist/src/kernel/config/firstRun.js +34 -0
  285. package/dist/src/kernel/config/firstRun.js.map +1 -0
  286. package/dist/src/kernel/config/globalConfig.js +79 -0
  287. package/dist/src/kernel/config/globalConfig.js.map +1 -0
  288. package/dist/src/kernel/config/index.js +16 -0
  289. package/dist/src/kernel/config/index.js.map +1 -0
  290. package/dist/src/kernel/config/paths.js +35 -0
  291. package/dist/src/kernel/config/paths.js.map +1 -0
  292. package/dist/src/kernel/config/readConfig.js +78 -0
  293. package/dist/src/kernel/config/readConfig.js.map +1 -0
  294. package/dist/src/kernel/config/schema.js +130 -0
  295. package/dist/src/kernel/config/schema.js.map +1 -0
  296. package/dist/src/kernel/config/types.js +19 -0
  297. package/dist/src/kernel/config/types.js.map +1 -0
  298. package/dist/src/kernel/config/writeConfigField.js +59 -0
  299. package/dist/src/kernel/config/writeConfigField.js.map +1 -0
  300. package/dist/src/kernel/copy.js +43 -0
  301. package/dist/src/kernel/copy.js.map +1 -0
  302. package/dist/src/kernel/error/PragmaError.js +149 -0
  303. package/dist/src/kernel/error/PragmaError.js.map +1 -0
  304. package/dist/src/kernel/error/constants.js +40 -0
  305. package/dist/src/kernel/error/constants.js.map +1 -0
  306. package/dist/src/kernel/error/fromTaskError.js +96 -0
  307. package/dist/src/kernel/error/fromTaskError.js.map +1 -0
  308. package/dist/src/kernel/error/index.js +13 -0
  309. package/dist/src/kernel/error/index.js.map +1 -0
  310. package/dist/src/kernel/error/recovery.js +52 -0
  311. package/dist/src/kernel/error/recovery.js.map +1 -0
  312. package/dist/src/kernel/error/renderError.js +115 -0
  313. package/dist/src/kernel/error/renderError.js.map +1 -0
  314. package/dist/src/kernel/error/serialize.js +25 -0
  315. package/dist/src/kernel/error/serialize.js.map +1 -0
  316. package/dist/src/kernel/error/types.js +9 -0
  317. package/dist/src/kernel/error/types.js.map +1 -0
  318. package/dist/src/kernel/index.js +25 -0
  319. package/dist/src/kernel/index.js.map +1 -0
  320. package/dist/src/kernel/packs/collect.js +187 -0
  321. package/dist/src/kernel/packs/collect.js.map +1 -0
  322. package/dist/src/kernel/packs/compile.js +304 -0
  323. package/dist/src/kernel/packs/compile.js.map +1 -0
  324. package/dist/src/kernel/packs/disclosure.js +76 -0
  325. package/dist/src/kernel/packs/disclosure.js.map +1 -0
  326. package/dist/src/kernel/packs/glob.js +38 -0
  327. package/dist/src/kernel/packs/glob.js.map +1 -0
  328. package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
  329. package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
  330. package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
  331. package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
  332. package/dist/src/kernel/packs/graphql/index.js +20 -0
  333. package/dist/src/kernel/packs/graphql/index.js.map +1 -0
  334. package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
  335. package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
  336. package/dist/src/kernel/packs/index.js +34 -0
  337. package/dist/src/kernel/packs/index.js.map +1 -0
  338. package/dist/src/kernel/packs/iri.js +110 -0
  339. package/dist/src/kernel/packs/iri.js.map +1 -0
  340. package/dist/src/kernel/packs/renderPack.js +129 -0
  341. package/dist/src/kernel/packs/renderPack.js.map +1 -0
  342. package/dist/src/kernel/packs/resolveEntity.js +223 -0
  343. package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
  344. package/dist/src/kernel/packs/runBodies.js +87 -0
  345. package/dist/src/kernel/packs/runBodies.js.map +1 -0
  346. package/dist/src/kernel/packs/sample.js +56 -0
  347. package/dist/src/kernel/packs/sample.js.map +1 -0
  348. package/dist/src/kernel/packs/schema.js +369 -0
  349. package/dist/src/kernel/packs/schema.js.map +1 -0
  350. package/dist/src/kernel/packs/sparql/applyFilters.js +68 -0
  351. package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
  352. package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
  353. package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
  354. package/dist/src/kernel/packs/sparql/buildLookupQuery.js +217 -0
  355. package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
  356. package/dist/src/kernel/packs/sparql/escape.js +21 -0
  357. package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
  358. package/dist/src/kernel/packs/sparql/index.js +31 -0
  359. package/dist/src/kernel/packs/sparql/index.js.map +1 -0
  360. package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
  361. package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
  362. package/dist/src/kernel/packs/types.js +30 -0
  363. package/dist/src/kernel/packs/types.js.map +1 -0
  364. package/dist/src/kernel/packs/uniqueness.js +30 -0
  365. package/dist/src/kernel/packs/uniqueness.js.map +1 -0
  366. package/dist/src/kernel/project/cli/buildProgram.js +263 -0
  367. package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
  368. package/dist/src/kernel/project/cli/constants.js +27 -0
  369. package/dist/src/kernel/project/cli/constants.js.map +1 -0
  370. package/dist/src/kernel/project/cli/dispatch.js +420 -0
  371. package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
  372. package/dist/src/kernel/project/cli/exitCodes.js +66 -0
  373. package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
  374. package/dist/src/kernel/project/cli/globalFlags.js +216 -0
  375. package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
  376. package/dist/src/kernel/project/cli/helpFormat.js +59 -0
  377. package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
  378. package/dist/src/kernel/project/cli/index.js +14 -0
  379. package/dist/src/kernel/project/cli/index.js.map +1 -0
  380. package/dist/src/kernel/project/cli/rootHelp.js +197 -0
  381. package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
  382. package/dist/src/kernel/project/cli/suggest.js +75 -0
  383. package/dist/src/kernel/project/cli/suggest.js.map +1 -0
  384. package/dist/src/kernel/project/cli/suggestNames.js +96 -0
  385. package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
  386. package/dist/src/kernel/project/cli/verbHelp.js +131 -0
  387. package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
  388. package/dist/src/kernel/project/mcp/buildServer.js +67 -0
  389. package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
  390. package/dist/src/kernel/project/mcp/envelope.js +37 -0
  391. package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
  392. package/dist/src/kernel/project/mcp/index.js +8 -0
  393. package/dist/src/kernel/project/mcp/index.js.map +1 -0
  394. package/dist/src/kernel/project/mcp/instructions.js +44 -0
  395. package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
  396. package/dist/src/kernel/project/mcp/mcpError.js +42 -0
  397. package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
  398. package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
  399. package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
  400. package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
  401. package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
  402. package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
  403. package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
  404. package/dist/src/kernel/project/mcp/registerVerb.js +300 -0
  405. package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
  406. package/dist/src/kernel/project/mcp/serve.js +35 -0
  407. package/dist/src/kernel/project/mcp/serve.js.map +1 -0
  408. package/dist/src/kernel/render/compactUri.js +24 -0
  409. package/dist/src/kernel/render/compactUri.js.map +1 -0
  410. package/dist/src/kernel/render/contracts.js +10 -0
  411. package/dist/src/kernel/render/contracts.js.map +1 -0
  412. package/dist/src/kernel/render/disclosure.js +34 -0
  413. package/dist/src/kernel/render/disclosure.js.map +1 -0
  414. package/dist/src/kernel/render/envelope.js +30 -0
  415. package/dist/src/kernel/render/envelope.js.map +1 -0
  416. package/dist/src/kernel/render/formatters.js +27 -0
  417. package/dist/src/kernel/render/formatters.js.map +1 -0
  418. package/dist/src/kernel/render/index.js +15 -0
  419. package/dist/src/kernel/render/index.js.map +1 -0
  420. package/dist/src/kernel/render/prefixes.js +46 -0
  421. package/dist/src/kernel/render/prefixes.js.map +1 -0
  422. package/dist/src/kernel/render/renderers.js +468 -0
  423. package/dist/src/kernel/render/renderers.js.map +1 -0
  424. package/dist/src/kernel/render/style.js +85 -0
  425. package/dist/src/kernel/render/style.js.map +1 -0
  426. package/dist/src/kernel/render/turtle.js +194 -0
  427. package/dist/src/kernel/render/turtle.js.map +1 -0
  428. package/dist/src/kernel/render/writeStdout.js +43 -0
  429. package/dist/src/kernel/render/writeStdout.js.map +1 -0
  430. package/dist/src/kernel/runtime/boot.js +49 -0
  431. package/dist/src/kernel/runtime/boot.js.map +1 -0
  432. package/dist/src/kernel/runtime/facade.js +39 -0
  433. package/dist/src/kernel/runtime/facade.js.map +1 -0
  434. package/dist/src/kernel/runtime/graphpack/build.js +122 -0
  435. package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
  436. package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
  437. package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
  438. package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
  439. package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
  440. package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
  441. package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
  442. package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
  443. package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
  444. package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
  445. package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
  446. package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
  447. package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
  448. package/dist/src/kernel/runtime/graphpack/index.js +11 -0
  449. package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
  450. package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
  451. package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
  452. package/dist/src/kernel/runtime/graphpack/read.js +92 -0
  453. package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
  454. package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
  455. package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
  456. package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
  457. package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
  458. package/dist/src/kernel/runtime/graphpack/types.js +55 -0
  459. package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
  460. package/dist/src/kernel/runtime/index.js +8 -0
  461. package/dist/src/kernel/runtime/index.js.map +1 -0
  462. package/dist/src/kernel/runtime/loadSession.js +34 -0
  463. package/dist/src/kernel/runtime/loadSession.js.map +1 -0
  464. package/dist/src/kernel/runtime/paths.js +78 -0
  465. package/dist/src/kernel/runtime/paths.js.map +1 -0
  466. package/dist/src/kernel/runtime/probe.js +37 -0
  467. package/dist/src/kernel/runtime/probe.js.map +1 -0
  468. package/dist/src/kernel/runtime/readEntity.js +363 -0
  469. package/dist/src/kernel/runtime/readEntity.js.map +1 -0
  470. package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
  471. package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
  472. package/dist/src/kernel/runtime/refs/index.js +29 -0
  473. package/dist/src/kernel/runtime/refs/index.js.map +1 -0
  474. package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
  475. package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
  476. package/dist/src/kernel/runtime/refs/resolve.js +332 -0
  477. package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
  478. package/dist/src/kernel/runtime/resolveSources.js +62 -0
  479. package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
  480. package/dist/src/kernel/runtime/store.js +75 -0
  481. package/dist/src/kernel/runtime/store.js.map +1 -0
  482. package/dist/src/kernel/runtime/storeReadiness.js +51 -0
  483. package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
  484. package/dist/src/kernel/runtime/types.js +11 -0
  485. package/dist/src/kernel/runtime/types.js.map +1 -0
  486. package/dist/src/kernel/spec/asVerb.js +21 -0
  487. package/dist/src/kernel/spec/asVerb.js.map +1 -0
  488. package/dist/src/kernel/spec/emitReference.js +578 -0
  489. package/dist/src/kernel/spec/emitReference.js.map +1 -0
  490. package/dist/src/kernel/spec/emitSurface.js +202 -0
  491. package/dist/src/kernel/spec/emitSurface.js.map +1 -0
  492. package/dist/src/kernel/spec/index.js +11 -0
  493. package/dist/src/kernel/spec/index.js.map +1 -0
  494. package/dist/src/kernel/spec/surfaceConformance.js +103 -0
  495. package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
  496. package/dist/src/kernel/spec/types.js +14 -0
  497. package/dist/src/kernel/spec/types.js.map +1 -0
  498. package/dist/src/kernel/spec/validate.js +110 -0
  499. package/dist/src/kernel/spec/validate.js.map +1 -0
  500. package/dist/src/kernel/vocabulary.js +97 -0
  501. package/dist/src/kernel/vocabulary.js.map +1 -0
  502. package/dist/src/types.js +11 -0
  503. package/dist/src/types.js.map +1 -0
  504. package/package.json +25 -24
  505. package/pragma.conf.ts +853 -0
  506. package/src/bin.ts +276 -82
  507. package/src/capabilities/block.parity.test.ts +253 -0
  508. package/src/capabilities/capabilities/capabilities.render.ts +4 -3
  509. package/src/capabilities/capabilities/capabilities.verb.ts +32 -14
  510. package/src/capabilities/capabilities/catalog.ts +20 -12
  511. package/src/capabilities/capabilities/hints.ts +43 -24
  512. package/src/capabilities/capabilities/index.ts +1 -1
  513. package/src/capabilities/colophon/collectColophon.ts +50 -24
  514. package/src/capabilities/colophon/colophon.render.ts +25 -1
  515. package/src/capabilities/colophon/colophon.test.ts +42 -21
  516. package/src/capabilities/colophon/colophon.verb.ts +9 -5
  517. package/src/capabilities/colophon/types.ts +16 -7
  518. package/src/capabilities/config/collectConfigShow.test.ts +58 -0
  519. package/src/capabilities/config/collectConfigShow.ts +43 -6
  520. package/src/capabilities/config/field.render.ts +4 -5
  521. package/src/capabilities/config/fields.ts +17 -37
  522. package/src/capabilities/config/get.verb.ts +70 -0
  523. package/src/capabilities/config/getUnset.test.ts +264 -0
  524. package/src/capabilities/config/index.ts +5 -1
  525. package/src/capabilities/config/runField.ts +40 -22
  526. package/src/capabilities/config/runGet.ts +34 -0
  527. package/src/capabilities/config/runSet.ts +35 -9
  528. package/src/capabilities/config/set.test.ts +48 -14
  529. package/src/capabilities/config/set.verb.ts +14 -9
  530. package/src/capabilities/config/show.render.test.ts +77 -5
  531. package/src/capabilities/config/show.render.ts +8 -13
  532. package/src/capabilities/config/show.verb.ts +13 -9
  533. package/src/capabilities/config/types.ts +26 -4
  534. package/src/capabilities/config/unset.verb.ts +58 -0
  535. package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
  536. package/src/capabilities/create/byteEquality.test.ts +95 -103
  537. package/src/capabilities/create/cliProjection.ts +227 -0
  538. package/src/capabilities/create/constants.ts +50 -0
  539. package/src/capabilities/create/create.mcp.test.ts +91 -7
  540. package/src/capabilities/create/create.render.ts +71 -7
  541. package/src/capabilities/create/create.test.ts +523 -162
  542. package/src/capabilities/create/create.verb.ts +361 -321
  543. package/src/capabilities/create/createGrammar.test.ts +865 -0
  544. package/src/capabilities/create/createHelp.ts +71 -0
  545. package/src/capabilities/create/createSurface.generated.ts +400 -0
  546. package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
  547. package/src/capabilities/create/cwdJail.test.ts +24 -5
  548. package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
  549. package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
  550. package/src/capabilities/create/index.ts +9 -14
  551. package/src/capabilities/create/messages.ts +18 -0
  552. package/src/capabilities/create/mount.ts +391 -0
  553. package/src/capabilities/create/pathJail.test.ts +90 -0
  554. package/src/capabilities/create/pathJail.ts +8 -5
  555. package/src/capabilities/create/pickGenerator.ts +40 -46
  556. package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
  557. package/src/capabilities/create/types.ts +29 -5
  558. package/src/capabilities/{standard/parity.test.ts → distribution.parity.test.ts} +24 -14
  559. package/src/capabilities/distribution.test.ts +122 -0
  560. package/src/capabilities/distribution.ts +54 -0
  561. package/src/capabilities/doctor/checks/checkKeStore.ts +9 -7
  562. package/src/capabilities/doctor/checks/checkPackageRefs.ts +82 -46
  563. package/src/capabilities/doctor/checks/checkPragmaVersion.ts +5 -4
  564. package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +125 -30
  565. package/src/capabilities/doctor/checks/checkShellCompletions.ts +113 -27
  566. package/src/capabilities/doctor/checks/index.ts +27 -0
  567. package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
  568. package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
  569. package/src/capabilities/doctor/checks/targetHealth.ts +274 -0
  570. package/src/capabilities/doctor/doctor.render.test.ts +24 -13
  571. package/src/capabilities/doctor/doctor.render.ts +45 -20
  572. package/src/capabilities/doctor/doctor.test.ts +158 -40
  573. package/src/capabilities/doctor/doctor.verb.ts +9 -5
  574. package/src/capabilities/doctor/runChecks.ts +65 -66
  575. package/src/capabilities/doctor/types.ts +21 -5
  576. package/src/capabilities/emptyRecovery.test.ts +44 -22
  577. package/src/capabilities/graph/examples.exec.test.ts +107 -0
  578. package/src/capabilities/graph/index.ts +1 -1
  579. package/src/capabilities/graph/inspect.render.ts +70 -22
  580. package/src/capabilities/graph/inspect.test.ts +260 -5
  581. package/src/capabilities/graph/inspect.verb.ts +18 -5
  582. package/src/capabilities/graph/query.render.ts +15 -3
  583. package/src/capabilities/graph/query.verb.ts +5 -4
  584. package/src/capabilities/graph/runQuery.ts +9 -7
  585. package/src/capabilities/index.ts +25 -19
  586. package/src/capabilities/info/collectInfo.ts +15 -10
  587. package/src/capabilities/info/info.render.ts +4 -3
  588. package/src/capabilities/info/info.verb.ts +4 -3
  589. package/src/capabilities/lazy.test.ts +125 -2
  590. package/src/capabilities/meta/complete.verb.ts +1 -1
  591. package/src/capabilities/meta/index.ts +1 -1
  592. package/src/capabilities/meta/mcp.verb.ts +10 -8
  593. package/src/capabilities/ontology/index.ts +15 -11
  594. package/src/capabilities/ontology/ontology.test.ts +6 -55
  595. package/src/capabilities/ontology/queries.ts +2 -2
  596. package/src/capabilities/ontology/render.ts +3 -4
  597. package/src/capabilities/ontology/verbs.ts +42 -83
  598. package/src/capabilities/prompt/index.ts +2 -2
  599. package/src/capabilities/prompt/prompt.render.ts +6 -2
  600. package/src/capabilities/prompt/prompt.test.ts +12 -6
  601. package/src/capabilities/prompt/types.ts +1 -1
  602. package/src/capabilities/prompt/verbs.ts +26 -14
  603. package/src/capabilities/reference.test.ts +63 -0
  604. package/src/capabilities/resources/provider.ts +367 -91
  605. package/src/capabilities/resources/resources.test.ts +411 -59
  606. package/src/capabilities/setup/buildPlan.ts +236 -0
  607. package/src/capabilities/setup/index.ts +7 -7
  608. package/src/capabilities/setup/mode.ts +74 -0
  609. package/src/capabilities/setup/operations/index.ts +74 -0
  610. package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
  611. package/src/capabilities/setup/operations/setupConfig.ts +124 -0
  612. package/src/capabilities/setup/operations/setupGenerator.ts +397 -320
  613. package/src/capabilities/setup/operations/setupLsp.ts +329 -68
  614. package/src/capabilities/setup/operations/setupMcp.ts +137 -97
  615. package/src/capabilities/setup/operations/setupSkills.ts +336 -108
  616. package/src/capabilities/setup/plan.render.ts +241 -0
  617. package/src/capabilities/setup/plan.ts +236 -0
  618. package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
  619. package/src/capabilities/setup/setup.render.test.ts +281 -73
  620. package/src/capabilities/setup/setup.render.ts +45 -77
  621. package/src/capabilities/setup/setup.test.ts +972 -209
  622. package/src/capabilities/setup/setup.verb.ts +233 -74
  623. package/src/capabilities/setup/shell.test.ts +86 -0
  624. package/src/capabilities/setup/shell.ts +166 -14
  625. package/src/capabilities/setup/targets.ts +367 -0
  626. package/src/capabilities/setup/types.ts +18 -57
  627. package/src/capabilities/shared/assertExecOk.ts +68 -10
  628. package/src/capabilities/shared/index.ts +32 -0
  629. package/src/capabilities/shared/packageManager.test.ts +55 -0
  630. package/src/capabilities/shared/packageManager.ts +62 -6
  631. package/src/capabilities/skill/discover.ts +47 -9
  632. package/src/capabilities/skill/index.ts +1 -1
  633. package/src/capabilities/skill/render.ts +14 -14
  634. package/src/capabilities/skill/skill.test.ts +7 -5
  635. package/src/capabilities/skill/verbs.ts +9 -10
  636. package/src/capabilities/sources/collectStatus.ts +61 -51
  637. package/src/capabilities/sources/index.ts +2 -2
  638. package/src/capabilities/sources/installSkills.ts +86 -9
  639. package/src/capabilities/sources/runUpdate.ts +164 -141
  640. package/src/capabilities/sources/sources.test.ts +265 -119
  641. package/src/capabilities/sources/status.render.test.ts +53 -24
  642. package/src/capabilities/sources/status.render.ts +25 -30
  643. package/src/capabilities/sources/status.verb.ts +16 -9
  644. package/src/capabilities/sources/types.ts +18 -25
  645. package/src/capabilities/sources/update.render.ts +10 -3
  646. package/src/capabilities/sources/update.verb.ts +13 -24
  647. package/src/capabilities/surface.test.ts +165 -25
  648. package/src/capabilities/tier.parity.test.ts +144 -0
  649. package/src/capabilities/upgrade/runUpgrade.ts +8 -8
  650. package/src/capabilities/upgrade/upgrade.render.ts +4 -5
  651. package/src/capabilities/upgrade/upgrade.test.ts +3 -3
  652. package/src/capabilities/upgrade/upgrade.verb.ts +8 -4
  653. package/src/capabilities/version/index.ts +12 -0
  654. package/src/capabilities/version/version.test.ts +66 -0
  655. package/src/capabilities/version/version.verb.ts +39 -0
  656. package/src/constants.test.ts +8 -6
  657. package/src/constants.ts +78 -22
  658. package/src/identity.test.ts +348 -0
  659. package/src/index.ts +2 -2
  660. package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +20 -15
  661. package/src/kernel/completion/complete.test.ts +12 -2
  662. package/src/kernel/completion/complete.ts +1 -1
  663. package/src/kernel/completion/emitScripts.test.ts +1 -1
  664. package/src/kernel/completion/emitScripts.ts +5 -3
  665. package/src/kernel/completion/entitySource.test.ts +185 -41
  666. package/src/kernel/completion/entitySource.ts +133 -110
  667. package/src/kernel/completion/model.test.ts +165 -13
  668. package/src/kernel/completion/model.ts +105 -14
  669. package/src/kernel/completion/parse.test.ts +4 -7
  670. package/src/kernel/completion/parse.ts +15 -0
  671. package/src/kernel/completion/resolve.test.ts +0 -1
  672. package/src/kernel/completion/safety.test.ts +104 -50
  673. package/src/kernel/completion/shellDrive.test.ts +611 -0
  674. package/src/kernel/completion/templates/bash.ts +7 -2
  675. package/src/kernel/completion/templates/fish.ts +28 -6
  676. package/src/kernel/completion/templates/index.ts +23 -0
  677. package/src/kernel/completion/types.ts +10 -3
  678. package/src/kernel/config/defaults.test.ts +108 -0
  679. package/src/kernel/config/defaults.ts +13 -23
  680. package/src/kernel/config/evaluateProjectConfig.ts +33 -11
  681. package/src/kernel/config/findProjectConfig.ts +4 -3
  682. package/src/kernel/config/firstRun.test.ts +44 -38
  683. package/src/kernel/config/firstRun.ts +24 -81
  684. package/src/kernel/config/globalConfig.ts +2 -2
  685. package/src/kernel/config/index.ts +5 -6
  686. package/src/kernel/config/paths.ts +17 -17
  687. package/src/kernel/config/readConfig.test.ts +246 -7
  688. package/src/kernel/config/readConfig.ts +8 -8
  689. package/src/kernel/config/schema.test.ts +50 -0
  690. package/src/kernel/config/schema.ts +100 -11
  691. package/src/kernel/config/types.ts +75 -19
  692. package/src/kernel/copy.test.ts +483 -0
  693. package/src/kernel/copy.ts +54 -0
  694. package/src/kernel/error/PragmaError.test.ts +6 -3
  695. package/src/kernel/error/PragmaError.ts +4 -2
  696. package/src/kernel/error/constants.ts +7 -4
  697. package/src/kernel/error/fromTaskError.ts +28 -6
  698. package/src/kernel/error/index.ts +1 -1
  699. package/src/kernel/error/recovery.test.ts +22 -45
  700. package/src/kernel/error/recovery.ts +36 -27
  701. package/src/kernel/error/renderError.ts +42 -1
  702. package/src/kernel/error/types.ts +25 -4
  703. package/src/kernel/index.ts +26 -0
  704. package/src/kernel/packs/collect.test.ts +195 -11
  705. package/src/kernel/packs/collect.ts +212 -61
  706. package/src/kernel/packs/compile.test.ts +293 -8
  707. package/src/kernel/packs/compile.ts +108 -15
  708. package/src/kernel/packs/disclosure.test.ts +5 -2
  709. package/src/kernel/packs/disclosure.ts +2 -2
  710. package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
  711. package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +13 -13
  712. package/src/kernel/packs/graphql/index.ts +20 -0
  713. package/src/kernel/packs/graphqlSource.test.ts +6 -3
  714. package/src/kernel/packs/index.ts +40 -0
  715. package/src/kernel/packs/iri.test.ts +73 -0
  716. package/src/kernel/packs/iri.ts +70 -20
  717. package/src/kernel/packs/renderPack.ts +28 -7
  718. package/src/kernel/packs/resolveEntity.test.ts +213 -0
  719. package/src/kernel/packs/resolveEntity.ts +132 -34
  720. package/src/kernel/packs/runBodies.ts +16 -16
  721. package/src/kernel/packs/sample.ts +1 -1
  722. package/src/kernel/packs/schema.ts +114 -11
  723. package/src/kernel/packs/sparql/applyFilters.ts +16 -17
  724. package/src/kernel/packs/sparql/buildLookupQuery.ts +75 -3
  725. package/src/kernel/packs/sparql/index.ts +37 -0
  726. package/src/kernel/packs/sparql/runSelect.test.ts +104 -10
  727. package/src/kernel/packs/sparql/runSelect.ts +75 -37
  728. package/src/kernel/packs/toolDescription.test.ts +52 -5
  729. package/src/kernel/packs/types.ts +52 -4
  730. package/src/kernel/packs/uniqueness.ts +5 -5
  731. package/src/kernel/project/cli/buildProgram.test.ts +157 -17
  732. package/src/kernel/project/cli/buildProgram.ts +77 -18
  733. package/src/kernel/project/cli/constants.ts +34 -0
  734. package/src/kernel/project/cli/dispatch.test.ts +227 -3
  735. package/src/kernel/project/cli/dispatch.ts +250 -48
  736. package/src/kernel/project/cli/exitCodes.ts +1 -1
  737. package/src/kernel/project/cli/globalFlags.test.ts +117 -1
  738. package/src/kernel/project/cli/globalFlags.ts +130 -30
  739. package/src/kernel/project/cli/helpFormat.ts +14 -1
  740. package/src/kernel/project/cli/rootHelp.ts +140 -111
  741. package/src/kernel/project/cli/suggest.test.ts +33 -1
  742. package/src/kernel/project/cli/suggest.ts +25 -1
  743. package/src/kernel/project/cli/verbHelp.test.ts +30 -0
  744. package/src/kernel/project/cli/verbHelp.ts +23 -7
  745. package/src/kernel/project/mcp/buildServer.ts +18 -10
  746. package/src/kernel/project/mcp/envelope.ts +2 -2
  747. package/src/kernel/project/mcp/instructions.ts +12 -7
  748. package/src/kernel/project/mcp/mcpError.ts +1 -1
  749. package/src/kernel/project/mcp/parity.test.ts +42 -1
  750. package/src/kernel/project/mcp/prompts/index.ts +37 -0
  751. package/src/kernel/project/mcp/prompts/prompts.test.ts +120 -5
  752. package/src/kernel/project/mcp/prompts/provider.ts +22 -8
  753. package/src/kernel/project/mcp/prompts/source.ts +69 -68
  754. package/src/kernel/project/mcp/registerVerb.ts +56 -11
  755. package/src/kernel/project/mcp/serve.ts +13 -5
  756. package/src/kernel/project/mcp/toolDescriptions.test.ts +6 -2
  757. package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
  758. package/src/kernel/render/contracts.ts +21 -0
  759. package/src/kernel/render/disclosure.ts +4 -2
  760. package/src/kernel/render/envelope.ts +2 -3
  761. package/src/kernel/render/formatters.ts +1 -1
  762. package/src/kernel/render/prefixes.test.ts +36 -0
  763. package/src/kernel/render/prefixes.ts +40 -13
  764. package/src/kernel/render/renderers.test.ts +244 -7
  765. package/src/kernel/render/renderers.ts +222 -20
  766. package/src/kernel/render/style.test.ts +75 -24
  767. package/src/kernel/render/style.ts +31 -1
  768. package/src/kernel/render/turtle.ts +222 -0
  769. package/src/kernel/runtime/graphpack/build.ts +29 -3
  770. package/src/kernel/runtime/graphpack/buildIndex.test.ts +46 -0
  771. package/src/kernel/runtime/graphpack/buildIndex.ts +53 -18
  772. package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +5 -5
  773. package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +3 -3
  774. package/src/kernel/runtime/graphpack/embedded/pack.stories.generated.ts +3 -0
  775. package/src/kernel/runtime/graphpack/embedded.ts +39 -13
  776. package/src/kernel/runtime/graphpack/graphpack.test.ts +205 -5
  777. package/src/kernel/runtime/graphpack/hash.ts +3 -2
  778. package/src/kernel/runtime/graphpack/index.ts +1 -1
  779. package/src/kernel/runtime/graphpack/manifest.ts +114 -12
  780. package/src/kernel/runtime/graphpack/read.ts +5 -11
  781. package/src/kernel/runtime/graphpack/schemas.ts +74 -0
  782. package/src/kernel/runtime/graphpack/stories.ts +84 -0
  783. package/src/kernel/runtime/graphpack/types.ts +61 -48
  784. package/src/kernel/runtime/loadSession.ts +1 -1
  785. package/src/kernel/runtime/paths.ts +64 -15
  786. package/src/kernel/runtime/probe.test.ts +8 -4
  787. package/src/kernel/runtime/probe.ts +6 -6
  788. package/src/kernel/runtime/readEntity.ts +477 -32
  789. package/src/kernel/runtime/refs/gitOps.ts +1 -19
  790. package/src/kernel/runtime/refs/index.ts +39 -0
  791. package/src/kernel/runtime/refs/parseRef.ts +8 -8
  792. package/src/kernel/runtime/refs/resolve.ts +82 -66
  793. package/src/kernel/runtime/resolveSources.test.ts +63 -24
  794. package/src/kernel/runtime/resolveSources.ts +36 -25
  795. package/src/kernel/runtime/storeReadiness.ts +10 -10
  796. package/src/kernel/runtime/storeless.test.ts +1 -1
  797. package/src/kernel/runtime/types.ts +15 -1
  798. package/src/kernel/runtime/wasmEmbed.test.ts +56 -55
  799. package/src/kernel/spec/emitReference.test.ts +3 -3
  800. package/src/kernel/spec/emitReference.ts +242 -34
  801. package/src/kernel/spec/emitSurface.ts +57 -11
  802. package/src/kernel/spec/surfaceConformance.test.ts +4 -2
  803. package/src/kernel/spec/surfaceConformance.ts +8 -0
  804. package/src/kernel/spec/types.ts +277 -13
  805. package/src/kernel/spec/validate.ts +2 -1
  806. package/src/kernel/vocabulary.test.ts +164 -0
  807. package/src/kernel/vocabulary.ts +146 -0
  808. package/src/testing/PARITY_GAPS.ts +8 -2
  809. package/src/testing/behavioral/README.md +3 -3
  810. package/src/testing/behavioral/completion.test.ts +19 -6
  811. package/src/testing/behavioral/docExamples.test.ts +14 -0
  812. package/src/testing/behavioral/errorMatrix.mcp.test.ts +6 -5
  813. package/src/testing/behavioral/errorMatrix.storeless.test.ts +1 -1
  814. package/src/testing/behavioral/exitCodes.e2e.test.ts +6 -5
  815. package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
  816. package/src/testing/behavioral/harness.foundation.test.ts +14 -5
  817. package/src/testing/behavioral/journeys.cli.test.ts +117 -76
  818. package/src/testing/behavioral/journeys.defaultPack.test.ts +88 -182
  819. package/src/testing/behavioral/journeys.firstInstall.test.ts +167 -0
  820. package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
  821. package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
  822. package/src/testing/behavioral/journeys.mcpLifecycle.mcp.test.ts +9 -6
  823. package/src/testing/behavioral/journeys.packageStories.test.ts +188 -0
  824. package/src/testing/behavioral/liveReadSurface.ts +4 -3
  825. package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
  826. package/src/testing/behavioral/mcpSurface.test.ts +10 -5
  827. package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
  828. package/src/testing/behavioral/staleCommands.test.ts +10 -0
  829. package/src/testing/eval/__snapshots__/eval.test.ts.snap +7 -7
  830. package/src/testing/eval/cases/assembly.ts +13 -6
  831. package/src/testing/eval/cases/effectful.ts +28 -15
  832. package/src/testing/eval/cases/readNouns.ts +22 -20
  833. package/src/testing/eval/cases/stable.ts +5 -1
  834. package/src/testing/eval/eval.test.ts +7 -1
  835. package/src/testing/fixtures/blockGraph.ts +79 -0
  836. package/src/testing/fixtures/fixtureCapability.ts +45 -1
  837. package/src/testing/fixtures/graph/canonical.ts +94 -5
  838. package/src/testing/fixtures/graph/defaultPack.ts +7 -6
  839. package/src/testing/fixtures/graph/owlExport.ts +7 -5
  840. package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
  841. package/src/testing/helpers/fixtureGraph.ts +33 -16
  842. package/src/testing/helpers/packRuntime.ts +2 -3
  843. package/src/testing/helpers/projectCli.ts +2 -1
  844. package/src/testing/helpers/projectMcp.ts +38 -6
  845. package/src/testing/helpers/runCli.ts +35 -18
  846. package/src/testing/perf/budgets.test.ts +24 -9
  847. package/src/testing/perf/budgets.ts +76 -12
  848. package/src/testing/perf/codegen.test.ts +126 -0
  849. package/src/testing/perf/globalSetup.test.ts +286 -0
  850. package/src/testing/perf/globalSetup.ts +611 -14
  851. package/src/testing/perf/measure.test.ts +38 -0
  852. package/src/testing/perf/measure.ts +23 -4
  853. package/src/testing/setupXdgIsolation.ts +81 -21
  854. package/src/testing/tempRoot.globalSetup.ts +122 -0
  855. package/src/types.ts +2 -2
  856. package/dist/pragma +0 -0
  857. package/src/capabilities/block/blockList.test.ts +0 -79
  858. package/src/capabilities/block/blockList.verb.ts +0 -163
  859. package/src/capabilities/block/index.ts +0 -25
  860. package/src/capabilities/block/pack.ts +0 -166
  861. package/src/capabilities/block/parity.test.ts +0 -187
  862. package/src/capabilities/block/tierChain.ts +0 -78
  863. package/src/capabilities/colophon/pragmaColophon.ts +0 -66
  864. package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -152
  865. package/src/capabilities/create/templates.embedded.generated.ts +0 -53
  866. package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -41
  867. package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
  868. package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -67
  869. package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -60
  870. package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
  871. package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
  872. package/src/capabilities/modifier/index.ts +0 -15
  873. package/src/capabilities/modifier/pack.ts +0 -64
  874. package/src/capabilities/standard/index.ts +0 -18
  875. package/src/capabilities/standard/pack.ts +0 -128
  876. package/src/capabilities/tier/index.ts +0 -19
  877. package/src/capabilities/tier/lookup.render.test.ts +0 -72
  878. package/src/capabilities/tier/lookup.render.ts +0 -59
  879. package/src/capabilities/tier/lookup.test.ts +0 -83
  880. package/src/capabilities/tier/lookup.verb.ts +0 -44
  881. package/src/capabilities/tier/pack.ts +0 -28
  882. package/src/capabilities/tier/runLookup.ts +0 -87
  883. package/src/capabilities/token/addConfig.render.ts +0 -27
  884. package/src/capabilities/token/addConfig.test.ts +0 -62
  885. package/src/capabilities/token/addConfig.verb.ts +0 -40
  886. package/src/capabilities/token/index.ts +0 -19
  887. package/src/capabilities/token/pack.ts +0 -58
  888. package/src/capabilities/token/runAddConfig.ts +0 -95
  889. package/src/kernel/completion/bashDrive.test.ts +0 -73
  890. package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
  891. package/src/kernel/runtime/graphpack/embedded/sample.ttl +0 -39
  892. package/src/kernel/runtime/lock.ts +0 -90
@@ -1,6 +1,8 @@
1
1
  import { describe, expect, it } from "vitest";
2
2
  import { type RenderStyle, styleFor } from "../../kernel/render/style.js";
3
- import { renderConfigShowPlain } from "./show.render.js";
3
+ import { emitReference } from "../../kernel/spec/emitReference.js";
4
+ import { capabilities } from "../index.js";
5
+ import { configShowFormatters, renderConfigShowPlain } from "./show.render.js";
4
6
  import type { ConfigShowData } from "./types.js";
5
7
 
6
8
  const DATA: ConfigShowData = {
@@ -8,16 +10,15 @@ const DATA: ConfigShowData = {
8
10
  tier: "apps/lxd",
9
11
  channel: "normal",
10
12
  detail: "standard",
11
- packages: ["@canonical/ds"],
13
+ packs: ["@canonical/ds"],
12
14
  },
13
15
  origins: {
14
16
  tier: "project",
15
17
  channel: "default",
16
18
  detail: "default",
17
- packages: "global",
19
+ packs: "global",
18
20
  stories: "default",
19
21
  prefixes: "default",
20
- prompts: "default",
21
22
  },
22
23
  globalConfigPath: "/home/u/.config/pragma/config.json",
23
24
  projectConfigPath: "/repo/pragma.config.ts",
@@ -42,7 +43,7 @@ describe("renderConfigShowPlain", () => {
42
43
  "tier: apps/lxd [project]",
43
44
  "channel: normal",
44
45
  "detail: standard",
45
- "packages: @canonical/ds [global]",
46
+ "packs: @canonical/ds [global]",
46
47
  "global config: /home/u/.config/pragma/config.json",
47
48
  "project config: /repo/pragma.config.ts",
48
49
  ].join("\n"),
@@ -62,4 +63,75 @@ describe("renderConfigShowPlain", () => {
62
63
  );
63
64
  expect(out).not.toContain("<d> [default]</d>");
64
65
  });
66
+
67
+ it("renders absent optional fields as (none)", () => {
68
+ const bare: ConfigShowData = {
69
+ config: { channel: "normal" },
70
+ origins: {
71
+ tier: "default",
72
+ channel: "default",
73
+ detail: "default",
74
+ packs: "default",
75
+ stories: "default",
76
+ prefixes: "default",
77
+ },
78
+ globalConfigPath: "/home/u/.config/pragma/config.json",
79
+ projectExists: false,
80
+ globalExists: false,
81
+ };
82
+
83
+ const out = renderConfigShowPlain(bare, styleFor(false));
84
+
85
+ expect(out).toContain("tier: (none)");
86
+ expect(out).toContain("packs: (none)");
87
+ expect(out).toContain("project config: (not found)");
88
+ });
89
+ });
90
+
91
+ describe("configShowFormatters.llm", () => {
92
+ it("renders the layered rows with origin markers", () => {
93
+ const out = configShowFormatters.llm(DATA);
94
+
95
+ expect(out).toContain("- **Tier:** apps/lxd [project]");
96
+ expect(out).toContain("- **Packs:** @canonical/ds [global]");
97
+ });
98
+
99
+ it("reports no identity row, in either form", () => {
100
+ // Identity is read statically from `pragma.conf.ts`; reporting a layer for
101
+ // it was reporting a provenance the kernel does not honour. Both renderers
102
+ // are asserted, because they list their rows independently.
103
+ for (const out of [
104
+ renderConfigShowPlain(DATA, styleFor(false)),
105
+ configShowFormatters.llm(DATA),
106
+ ]) {
107
+ for (const field of ["name", "help", "colophon", "issues"]) {
108
+ expect(out.toLowerCase()).not.toContain(`${field}:`);
109
+ }
110
+ }
111
+ });
112
+ });
113
+
114
+ describe("the generated configuration reference", () => {
115
+ it("names exactly the fields this renderer reports with a layer", () => {
116
+ // The page and the renderer are written independently — the page is kernel
117
+ // prose, the renderer a capability — and the page's account of the renderer
118
+ // was wrong in both directions: it claimed every field but `completion`
119
+ // carried a printed provenance, while `prefixes`, `stories` and the four
120
+ // distribution-only fields do not, and it claimed `completion` was not
121
+ // printed, while `--format json` carries it.
122
+ //
123
+ // DERIVED from the real formatter: the field rows are the ones before the
124
+ // two PATH rows, which are not fields at all. Adding a row here without
125
+ // saying so on the page, or naming a field there this renderer drops, fails.
126
+ const printed = renderConfigShowPlain(DATA, styleFor(false))
127
+ .split("\n")
128
+ .map((line) => line.slice(0, line.indexOf(":")));
129
+ const fields = printed.slice(0, printed.indexOf("global config"));
130
+ expect(fields.length).toBeGreaterThan(0);
131
+
132
+ const page = emitReference(capabilities).get("config.md") ?? "";
133
+ expect(page).toContain(
134
+ `${fields.map((field) => `\`${field}\``).join(", ")} — those and only those —`,
135
+ );
136
+ });
65
137
  });
@@ -8,7 +8,7 @@
8
8
 
9
9
  import type { ConfigOrigin } from "../../kernel/config/types.js";
10
10
  import { defaultStyle, type RenderStyle } from "../../kernel/render/style.js";
11
- import type { Formatters } from "../../kernel/spec/types.js";
11
+ import type { Formatters } from "../../kernel/spec/index.js";
12
12
  import type { ConfigShowData } from "./types.js";
13
13
 
14
14
  /** A `[layer]` marker for values a config file supplied (blank for defaults). */
@@ -16,10 +16,9 @@ function originMarker(origin: ConfigOrigin): string {
16
16
  return origin === "default" ? "" : ` [${origin}]`;
17
17
  }
18
18
 
19
- /** Summarize the `packages` list as a comma-separated set of names. */
20
- function packageNames(data: ConfigShowData): string {
21
- const packages = data.config.packages ?? [];
22
- const names = packages.map((entry) =>
19
+ /** Summarize a list of named entries as a comma-separated set of names. */
20
+ function entryNames(entries: readonly (string | { name: string })[]): string {
21
+ const names = entries.map((entry) =>
23
22
  typeof entry === "string" ? entry : entry.name,
24
23
  );
25
24
  return names.length > 0 ? names.join(", ") : "(none)";
@@ -32,14 +31,10 @@ type ConfigRow = readonly [label: string, value: string, marker: string];
32
31
  function configRows(data: ConfigShowData): readonly ConfigRow[] {
33
32
  const { config, origins } = data;
34
33
  return [
35
- [
36
- "tier",
37
- config.tier ?? "(none — all tiers visible)",
38
- originMarker(origins.tier),
39
- ],
34
+ ["tier", config.tier ?? "(none)", originMarker(origins.tier)],
40
35
  ["channel", config.channel, originMarker(origins.channel)],
41
36
  ["detail", config.detail ?? "standard", originMarker(origins.detail)],
42
- ["packages", packageNames(data), originMarker(origins.packages)],
37
+ ["packs", entryNames(config.packs ?? []), originMarker(origins.packs)],
43
38
  [
44
39
  "global config",
45
40
  `${data.globalConfigPath}${data.globalExists ? "" : " (not found)"}`,
@@ -89,10 +84,10 @@ export const configShowFormatters: Formatters<ConfigShowData> = {
89
84
  const lines = [
90
85
  "## Configuration",
91
86
  "",
92
- `- **Tier:** ${config.tier ?? "none (all tiers)"}${originMarker(origins.tier)}`,
87
+ `- **Tier:** ${config.tier ?? "none"}${originMarker(origins.tier)}`,
93
88
  `- **Channel:** ${config.channel}${originMarker(origins.channel)}`,
94
89
  `- **Detail:** ${config.detail ?? "standard"}${originMarker(origins.detail)}`,
95
- `- **Packages:** ${packageNames(data)}${originMarker(origins.packages)}`,
90
+ `- **Packs:** ${entryNames(config.packs ?? [])}${originMarker(origins.packs)}`,
96
91
  `- **Global config:** \`${data.globalConfigPath}\``,
97
92
  ];
98
93
  if (data.projectConfigPath) {
@@ -5,21 +5,24 @@
5
5
  * later PR — this ships only the reader.
6
6
  */
7
7
 
8
+ import { BIN_NAME, PROJECT_CONFIG_FILENAME } from "../../constants.js";
8
9
  import { asVerb } from "../../kernel/spec/asVerb.js";
9
- import type { CapabilityModule, VerbSpec } from "../../kernel/spec/types.js";
10
+ import type { CapabilityModule, VerbSpec } from "../../kernel/spec/index.js";
11
+ import { configGetVerb } from "./get.verb.js";
10
12
  import { configSetVerb } from "./set.verb.js";
11
13
  import { configShowFormatters } from "./show.render.js";
12
14
  import type { ConfigShowData } from "./types.js";
15
+ import { configUnsetVerb } from "./unset.verb.js";
13
16
 
14
17
  const showVerb: VerbSpec<Record<string, unknown>, ConfigShowData> = {
15
18
  path: ["config", "show"],
16
19
  summary: "Show the resolved config and per-field provenance.",
17
- doc: "Merges built-in defaults, the global XDG config, and the nearest pragma.config.ts, marking which layer supplied each value.",
20
+ doc: `Merges built-in defaults, the global XDG config, and the nearest ${PROJECT_CONFIG_FILENAME}, marking which layer supplied each value.`,
18
21
  params: [],
19
22
  output: { formatters: configShowFormatters },
20
23
  examples: [
21
- { cmd: "pragma config show" },
22
- { cmd: "pragma config show --format json" },
24
+ { cmd: `${BIN_NAME} config show` },
25
+ { cmd: `${BIN_NAME} config show --format json` },
23
26
  ],
24
27
  capability: {
25
28
  needsStore: false,
@@ -34,12 +37,13 @@ const showVerb: VerbSpec<Record<string, unknown>, ConfigShowData> = {
34
37
  };
35
38
 
36
39
  /**
37
- * The `config` capability module: the `show` reader (PR1) and the one-command
38
- * `set <key> <value>` setter (PR9), emitted in covenant order. The per-field
39
- * `tier`/`channel`/`detail` verbs were retired in favour of `config set`
40
- * (AV-228 B3).
40
+ * The `config` capability module, emitted in covenant order: the `show`
41
+ * reader, the `get <key>` single-value reader, the `set <key> <value>`
42
+ * writer, and the `unset <key>` clearer. The per-field `tier`/`channel`/
43
+ * `detail` verbs were retired in favour of `config set` (AV-228 B3);
44
+ * clearing moved from a magic `set` value to its own verb.
41
45
  */
42
46
  export const configModule: CapabilityModule = {
43
47
  name: "config",
44
- verbs: [asVerb(showVerb), configSetVerb],
48
+ verbs: [asVerb(showVerb), configGetVerb, configSetVerb, configUnsetVerb],
45
49
  };
@@ -2,10 +2,22 @@
2
2
  * Data shapes for `pragma config show`.
3
3
  */
4
4
 
5
- import type { ConfigOrigins, PragmaConfig } from "../../kernel/config/types.js";
5
+ import type {
6
+ ConfigOrigin,
7
+ ConfigOrigins,
8
+ PragmaConfig,
9
+ } from "../../kernel/config/types.js";
6
10
 
7
11
  /** The resolved configuration plus per-field provenance and layer locations. */
8
12
  export interface ConfigShowData {
13
+ /**
14
+ * The effective config, MINUS declared story bodies: `packs` entries carry
15
+ * `{ name, source }` only and the top-level `stories` array is omitted. The
16
+ * bodies are SPARQL, and MCP returns the JSON formatter's output verbatim, so
17
+ * carrying them would put ~2.7k tokens of query text in every `config_show`
18
+ * call. `origins` still reports where `packs`/`stories` came from, and
19
+ * `pragma capabilities` lists the verbs those stories produce.
20
+ */
9
21
  readonly config: PragmaConfig;
10
22
  readonly origins: ConfigOrigins;
11
23
  readonly projectConfigPath?: string;
@@ -14,14 +26,24 @@ export interface ConfigShowData {
14
26
  readonly globalExists: boolean;
15
27
  }
16
28
 
17
- /** The outcome of a `config <field>` setter (set, or reset via sentinel). */
29
+ /** The outcome of a config write (`set` writes a value, `unset` clears one). */
18
30
  export interface ConfigFieldResult {
19
31
  /** The config field written (`tier` / `channel` / `detail`). */
20
32
  readonly field: string;
21
- /** The value written, or absent when the field was reset (removed). */
33
+ /** The value written, or absent when the field was cleared (removed). */
22
34
  readonly value?: string;
23
35
  /** The global config file the write landed in. */
24
36
  readonly path: string;
25
- /** True when a reset sentinel removed the field rather than setting a value. */
37
+ /** True when `unset` removed the field rather than setting a value. */
26
38
  readonly reset: boolean;
27
39
  }
40
+
41
+ /** The payload of `config get <key>` — one resolved value with provenance. */
42
+ export interface ConfigGetData {
43
+ /** The config field read (`tier` / `channel` / `detail`). */
44
+ readonly field: string;
45
+ /** The effective value after layering, absent when the field is unset. */
46
+ readonly value?: unknown;
47
+ /** The layer that supplied the value (`default` / `global` / `project`). */
48
+ readonly source: ConfigOrigin;
49
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * `config unset <key>` — clear one config field.
3
+ *
4
+ * Clearing is a COMMAND, not a magic value: `config set` refuses the values
5
+ * that used to double as clear-markers, and this verb owns the job. Removes
6
+ * the field from the global layer so the built-in default (or a project
7
+ * config) applies again; project configs are authored by hand and never
8
+ * written here.
9
+ */
10
+
11
+ import type { Task } from "@canonical/task";
12
+ import { BIN_NAME } from "../../constants.js";
13
+ import { asVerb } from "../../kernel/spec/asVerb.js";
14
+ import type { VerbSpec } from "../../kernel/spec/index.js";
15
+ import { configFieldFormatters } from "./field.render.js";
16
+ import { CONFIG_FIELDS } from "./fields.js";
17
+ import type { ConfigFieldResult } from "./types.js";
18
+
19
+ /** The clearable field names — the `<key>` enum, in covenant order. */
20
+ const CONFIG_KEYS = CONFIG_FIELDS.map((field) => field.field);
21
+
22
+ const unsetVerb: VerbSpec<Record<string, unknown>, ConfigFieldResult> = {
23
+ path: ["config", "unset"],
24
+ summary: "Clear a config field by name.",
25
+ doc: "Removes a field from the global config so the built-in default (or a project config) applies again. The counterpart of `config set` — setting writes a value, unsetting removes one; no value doubles as a remove-marker.",
26
+ params: [
27
+ {
28
+ kind: "enum",
29
+ name: "key",
30
+ doc: "The config field to clear.",
31
+ values: CONFIG_KEYS,
32
+ required: true,
33
+ positional: true,
34
+ },
35
+ ],
36
+ output: { formatters: configFieldFormatters },
37
+ examples: [
38
+ { cmd: `${BIN_NAME} config unset tier`, note: "read the full graph again" },
39
+ { cmd: `${BIN_NAME} config unset channel` },
40
+ ],
41
+ capability: {
42
+ needsStore: false,
43
+ mutates: true,
44
+ mcp: {
45
+ expose: true,
46
+ annotations: { readOnlyHint: false, openWorldHint: false },
47
+ },
48
+ },
49
+ // Lazily import the write body (off the fast path); the `Task` arm is the
50
+ // same honest cast `config set` uses.
51
+ run: (params) =>
52
+ import("./runSet.js").then((m) =>
53
+ m.runUnset(params),
54
+ ) as unknown as Task<ConfigFieldResult>,
55
+ };
56
+
57
+ /** The `config unset` verb. */
58
+ export const configUnsetVerb = asVerb(unsetVerb);
@@ -48,9 +48,8 @@ describe("cross-binary byte-equality (PROTECTED)", () => {
48
48
  pragmaBin,
49
49
  "create",
50
50
  "component",
51
- "src/components/Button",
52
- "--framework",
53
51
  "react",
52
+ "src/components/Button",
54
53
  "--yes",
55
54
  ],
56
55
  { cwd: pragmaDir, stdio: "pipe" },
@@ -66,7 +65,7 @@ import { pickGenerator } from ${JSON.stringify(`file://${pickGen}`)};
66
65
  import { execute, autoPrompt, runGeneratorTask, createGeneratorStamp, createStampOnEffectStart } from ${JSON.stringify(`file://${summonCore}`)};
67
66
  const dir = process.argv[2];
68
67
  const answers = { componentPath: "src/components/Button", withStyles: true, withStories: true, withSsrTests: true };
69
- const gen = pickGenerator("component", { framework: "react" });
68
+ const gen = pickGenerator("component/react");
70
69
  await runGeneratorTask(execute(gen, { prompt: autoPrompt(answers), params: answers }), {
71
70
  cwd: dir,
72
71
  promptHandler: autoPrompt(answers),
@@ -1,29 +1,43 @@
1
1
  /**
2
- * PROTECTED — the permanent seam contract: every `create` tree is produced TWO
3
- * ways and diffed byte-for-byte (path set + contents, incl. the "Generated by"
4
- * stamp): (1) `pragma create <verb> --yes` through the kernel dispatcher, and
5
- * (2) summon-core `execute` with `autoPrompt`, run through `runGeneratorTask` +
6
- * the shared stamp — the summon bin's path. They match because both derive the
7
- * StampConfig from `createGeneratorStamp` (displayName + version) and run the
8
- * SAME `generator.generate` with the SAME answers.
2
+ * PROTECTED — pragma's side of the byte-equality seam contract: every `create`
3
+ * tree is produced TWO ways and diffed byte-for-byte (path set + contents, incl.
4
+ * the "Generated by" stamp): (1) `pragma create <verb> --yes` through the kernel
5
+ * dispatcher, and (2) the REFERENCE — summon-core `execute` with `autoPrompt`,
6
+ * run through `runGeneratorTask` + the shared stamp. They match because both
7
+ * derive the StampConfig from `createGeneratorStamp` (displayName + version) and
8
+ * run the SAME `generator.generate` with the SAME answers.
9
+ *
10
+ * The reference producer, the tree snapshot/diff, and the answer sets are NOT
11
+ * defined here any more: they are `@canonical/summon-core/testing`, the named
12
+ * conformance suite both bins run (L-OPEN-10). This file supplies what only
13
+ * pragma can — its kernel dispatch path, and the mapping from a fixture's
14
+ * logical generator id to the bundled generator plus the CLI param names the
15
+ * `create` verbs take. No new package edge: pragma already depends on
16
+ * summon-core, and never on the summon bin.
9
17
  *
10
18
  * Five generators are covered: component × {react, svelte, lit}, package, and
11
19
  * application. A cross-binary subprocess guard lives in byteEquality.subprocess.test.ts.
12
20
  */
13
21
 
14
- import { mkdtempSync, readdirSync, readFileSync } from "node:fs";
22
+ import { mkdtempSync } from "node:fs";
15
23
  import { tmpdir } from "node:os";
16
24
  import { join } from "node:path";
25
+ import {
26
+ CONFORMANCE_FIXTURES,
27
+ diffTrees,
28
+ formatTreeDiff,
29
+ isIdentical,
30
+ produceReference,
31
+ snapshotTree,
32
+ type TreeSnapshot,
33
+ } from "@canonical/summon-core/testing";
17
34
  import { describe, expect, it } from "vitest";
18
35
  import { executeVerb } from "../../kernel/project/cli/dispatch.js";
19
36
  import { bootRuntime } from "../../kernel/runtime/boot.js";
20
37
  import type { GlobalFlags } from "../../kernel/runtime/types.js";
21
38
  import type { VerbSpec } from "../../kernel/spec/types.js";
22
- import {
23
- createApplicationVerb,
24
- createComponentVerb,
25
- createPackageVerb,
26
- } from "./create.verb.js";
39
+ import { blankCanonicalRanges } from "../../testing/helpers/blankCanonicalRanges.js";
40
+ import { createVerbs } from "./create.verb.js";
27
41
  import type { CreateKind } from "./types.js";
28
42
 
29
43
  const FLAGS: GlobalFlags = {
@@ -34,39 +48,17 @@ const FLAGS: GlobalFlags = {
34
48
  };
35
49
  const freshCwd = (): string => mkdtempSync(join(tmpdir(), "pragma-golden-"));
36
50
 
37
- /** Read a directory tree into a sorted map of relative path → contents. */
38
- function snapshot(dir: string): Map<string, string> {
39
- const out = new Map<string, string>();
40
- const walk = (d: string, base: string): void => {
41
- for (const entry of readdirSync(d, { withFileTypes: true }).sort((a, b) =>
42
- a.name.localeCompare(b.name),
43
- )) {
44
- const rel = base ? `${base}/${entry.name}` : entry.name;
45
- if (entry.isDirectory()) walk(join(d, entry.name), rel);
46
- else out.set(rel, readFileSync(join(d, entry.name), "utf-8"));
47
- }
48
- };
49
- walk(dir, "");
50
- return out;
51
- }
52
-
53
- const verbFor: Record<CreateKind, VerbSpec> = {
54
- component: createComponentVerb as VerbSpec,
55
- package: createPackageVerb as VerbSpec,
56
- application: createApplicationVerb as VerbSpec,
57
- };
58
-
59
51
  /** Producer (1): the full pragma kernel path — dispatcher runs the create verb. */
60
52
  async function producePragma(
61
53
  kind: CreateKind,
62
54
  params: Record<string, unknown>,
63
- ): Promise<Map<string, string>> {
55
+ ): Promise<TreeSnapshot> {
64
56
  const dir = freshCwd();
65
57
  const prev = process.cwd();
66
58
  process.chdir(dir);
67
59
  try {
68
60
  const outcome = await executeVerb(
69
- verbFor[kind],
61
+ createVerbs[kind] as VerbSpec,
70
62
  params,
71
63
  { dryRun: false, undo: false, yes: true },
72
64
  bootRuntime(FLAGS, dir),
@@ -75,44 +67,46 @@ async function producePragma(
75
67
  } finally {
76
68
  process.chdir(prev);
77
69
  }
78
- return snapshot(dir);
70
+ return snapshotTree(dir);
79
71
  }
80
72
 
81
- /** Producer (2): summon-core execute + autoPrompt + the shared stamp core. */
73
+ /**
74
+ * Producer (2): the shared conformance REFERENCE, over pragma's own generator.
75
+ *
76
+ * The fixture names its generator logically; `pickGenerator` is what turns that
77
+ * into the bundled definition. The suite never imports a generator itself —
78
+ * summon-core sits below both bins.
79
+ */
82
80
  async function produceSummon(
83
81
  kind: CreateKind,
84
82
  framework: string,
85
- answers: Record<string, unknown>,
86
- ): Promise<Map<string, string>> {
83
+ answers: Readonly<Record<string, unknown>>,
84
+ ): Promise<TreeSnapshot> {
87
85
  const { pickGenerator } = await import("./pickGenerator.js");
88
- const {
89
- execute,
90
- autoPrompt,
91
- runGeneratorTask,
92
- createGeneratorStamp,
93
- createStampOnEffectStart,
94
- } = await import("@canonical/summon-core");
95
- const generator = pickGenerator(kind, { framework });
96
- const dir = freshCwd();
97
- await runGeneratorTask(
98
- execute(generator, { prompt: autoPrompt(answers), params: answers }),
99
- {
100
- cwd: dir,
101
- promptHandler: autoPrompt(answers),
102
- onEffectStart: createStampOnEffectStart(createGeneratorStamp(generator)),
103
- onLog: () => {},
104
- },
105
- );
106
- return snapshot(dir);
86
+ // pickGenerator is keyed by FULL COMMAND PATH now; this surface still
87
+ // thinks in kind+framework, so map first (exactly as runCreate does).
88
+ const commandPath =
89
+ kind === "component"
90
+ ? `component/${framework}`
91
+ : kind === "package"
92
+ ? "package"
93
+ : "application/react";
94
+ return produceReference({
95
+ generator: pickGenerator(commandPath),
96
+ answers,
97
+ });
107
98
  }
108
99
 
109
- /** One golden case: the create-verb params, and the equivalent summon answers. */
100
+ /**
101
+ * One golden case: the shared fixture, plus what only pragma knows — which
102
+ * bundled generator the fixture's id names, and the CLI param names the create
103
+ * verb takes for the same answers.
104
+ */
110
105
  interface Case {
111
- readonly name: string;
106
+ readonly fixture: string;
112
107
  readonly kind: CreateKind;
113
108
  readonly framework: string;
114
109
  readonly params: Record<string, unknown>;
115
- readonly answers: Record<string, unknown>;
116
110
  }
117
111
 
118
112
  const componentAnswers = {
@@ -123,7 +117,7 @@ const componentAnswers = {
123
117
 
124
118
  const cases: Case[] = [
125
119
  {
126
- name: "component/react",
120
+ fixture: "component/react",
127
121
  kind: "component",
128
122
  framework: "react",
129
123
  params: {
@@ -131,10 +125,9 @@ const cases: Case[] = [
131
125
  componentPath: "src/components/Button",
132
126
  ...componentAnswers,
133
127
  },
134
- answers: { componentPath: "src/components/Button", ...componentAnswers },
135
128
  },
136
129
  {
137
- name: "component/svelte",
130
+ fixture: "component/svelte",
138
131
  kind: "component",
139
132
  framework: "svelte",
140
133
  params: {
@@ -142,10 +135,9 @@ const cases: Case[] = [
142
135
  componentPath: "src/lib/Button",
143
136
  ...componentAnswers,
144
137
  },
145
- answers: { componentPath: "src/lib/Button", ...componentAnswers },
146
138
  },
147
139
  {
148
- name: "component/lit",
140
+ fixture: "component/lit",
149
141
  kind: "component",
150
142
  framework: "lit",
151
143
  params: {
@@ -153,10 +145,9 @@ const cases: Case[] = [
153
145
  componentPath: "src/lib/Button",
154
146
  ...componentAnswers,
155
147
  },
156
- answers: { componentPath: "src/lib/Button", ...componentAnswers },
157
148
  },
158
149
  {
159
- name: "package",
150
+ fixture: "package",
160
151
  kind: "package",
161
152
  framework: "",
162
153
  params: {
@@ -169,36 +160,16 @@ const cases: Case[] = [
169
160
  withPrTemplate: false,
170
161
  runInstall: false,
171
162
  },
172
- answers: {
173
- name: "@canonical/my-lib",
174
- type: "library",
175
- description: "A library.",
176
- withReact: false,
177
- withStorybook: false,
178
- withCli: false,
179
- withPrTemplate: false,
180
- runInstall: false,
181
- },
182
163
  },
183
164
  {
184
- name: "application",
165
+ fixture: "application",
185
166
  kind: "application",
186
167
  framework: "",
187
- // The pragma path receives the CLI `--with-X` params (AV-228 B8); the summon
188
- // path receives the generator's bare prompt names. runCreate's boundary remap
189
- // (`withSsr` -> `ssr`, ...) makes both produce the byte-identical tree.
168
+ // The prompt names ARE the param names now (the B8 alias seam is gone):
169
+ // the pragma path takes the generator's own `forms`/`relay` (ssr/router
170
+ // are always-on facts, no longer prompts).
190
171
  params: {
191
172
  appPath: "my-app",
192
- withSsr: true,
193
- withRouter: true,
194
- withForms: true,
195
- withRelay: false,
196
- runInstall: false,
197
- },
198
- answers: {
199
- appPath: "my-app",
200
- ssr: true,
201
- router: true,
202
173
  forms: true,
203
174
  relay: false,
204
175
  runInstall: false,
@@ -206,20 +177,41 @@ const cases: Case[] = [
206
177
  },
207
178
  ];
208
179
 
209
- describe("byte-equality goldens — pragma create ≡ summon execute (PROTECTED)", () => {
180
+ describe("byte-equality goldens — pragma create \u2261 the conformance reference (PROTECTED)", () => {
181
+ it("covers every shared conformance fixture", () => {
182
+ // The suite's fixture list is the contract; a fixture added there and not
183
+ // wired here would silently go unchecked on pragma's side.
184
+ expect(cases.map((entry) => entry.fixture)).toEqual(
185
+ CONFORMANCE_FIXTURES.map((entry) => entry.name),
186
+ );
187
+ });
188
+
210
189
  for (const testCase of cases) {
211
- it(`${testCase.name}: both producers write byte-identical trees`, async () => {
212
- const pragma = await producePragma(testCase.kind, testCase.params);
213
- const summon = await produceSummon(
190
+ it(`${testCase.fixture}: the kernel path matches the reference byte for byte`, async () => {
191
+ const shared = CONFORMANCE_FIXTURES.find(
192
+ (entry) => entry.name === testCase.fixture,
193
+ );
194
+ if (!shared) throw new Error(`no fixture "${testCase.fixture}"`);
195
+ let pragma = await producePragma(testCase.kind, testCase.params);
196
+ let reference = await produceSummon(
214
197
  testCase.kind,
215
198
  testCase.framework,
216
- testCase.answers,
199
+ shared.answers,
217
200
  );
218
- expect(pragma.size).toBeGreaterThan(0);
219
- expect([...pragma.keys()].sort()).toEqual([...summon.keys()].sort());
220
- for (const [path, content] of pragma) {
221
- expect(summon.get(path), `content of ${path}`).toBe(content);
201
+ // Two independent `npm view` resolutions feed the application tree
202
+ // (one per producer); blank the @canonical/* ranges identically so an
203
+ // asymmetric registry outcome cannot red this template-surface cell —
204
+ // range truth lives in the offline subprocess cells.
205
+ if (testCase.kind === "application") {
206
+ pragma = blankCanonicalRanges(pragma);
207
+ reference = blankCanonicalRanges(reference);
222
208
  }
209
+ expect(pragma.size).toBeGreaterThan(0);
210
+ const diff = diffTrees(pragma, reference);
211
+ expect(
212
+ isIdentical(diff),
213
+ formatTreeDiff(diff, "pragma create", "the conformance reference"),
214
+ ).toBe(true);
223
215
  });
224
216
  }
225
217
  });