@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,11 +1,14 @@
1
1
  /**
2
2
  * Collect the `colophon` payload — the verb's run body (lazily imported).
3
3
  *
4
- * STORELESS: it reads the layered config (memoized) and resolves the EFFECTIVE
5
- * capability modules exactly as a real command would, so a config story that
6
- * overrides a bundled pack is reflected here — "active domain" is expressed the
7
- * way the rest of the CLI expresses it. It never boots the triple store, so the
8
- * storeless-guarantee spy still sees `store.booted === false`.
4
+ * STORELESS: it resolves the EFFECTIVE capability modules exactly as a real
5
+ * command would — through `loadEffectiveModules`, so a story declared by a
6
+ * PACKAGE the active pack carries surfaces its colophon here too, not only a
7
+ * config-declared one. It never boots the triple store, so the
8
+ * storeless-guarantee spy still sees `store.booted === false`. The static
9
+ * import of the validated distribution config (`config/defaults.js`) is safe
10
+ * here because this module sits behind the verb's dynamic `import()` — it
11
+ * never lands on the `--help`/`__complete` fast path.
9
12
  *
10
13
  * The registry is reached through a RUNTIME dynamic `import("../index.js")`
11
14
  * inside this async body — never a static import — so the static
@@ -13,46 +16,57 @@
13
16
  * into a static import.
14
17
  */
15
18
 
16
- import type { PragmaRuntime } from "../../kernel/runtime/types.js";
17
- import type { CapabilityModule } from "../../kernel/spec/types.js";
18
- import { PRAGMA_COLOPHON, PRAGMA_COLOPHON_SUMMARY } from "./pragmaColophon.js";
19
+ import { BIN_NAME } from "../../constants.js";
20
+ import distribution from "../../kernel/config/defaults.js";
21
+ import type { PragmaRuntime } from "../../kernel/runtime/index.js";
22
+ import type { CapabilityModule } from "../../kernel/spec/index.js";
19
23
  import type { ColophonData, ColophonSection } from "./types.js";
20
24
 
21
25
  /**
22
26
  * Assemble the colophon data for the current runtime.
23
27
  *
28
+ * THE DOMAIN'S STORY WINS. A colophon answers "what am I working with", and
29
+ * once a domain is configured the answer is the domain — so the domain
30
+ * sections are the whole output, and the toolchain's own section does not
31
+ * ride in front of them. The toolchain section is the answer only when no
32
+ * domain has one: a fresh install, or a distribution that ships no story.
33
+ * Reading it the other way round put a paragraph about this program's
34
+ * architecture above the thing the user actually asked about, every time.
35
+ *
36
+ * Neither section is authored here. The toolchain half is the distribution
37
+ * config's `colophon` field (narrative plus condensed summary), rendered under
38
+ * the distribution's own name — a fork edits its config, never this module —
39
+ * and the domain half is each active pack's declared `colophon`. The
40
+ * `kind: "pragma"` value is a frozen JSON discriminant (wire compatibility),
41
+ * not the distribution's name.
42
+ *
43
+ * With neither declared, the payload is empty and the formatter's empty state
44
+ * says so, rather than the command printing nothing and leaving the reader to
45
+ * guess whether that is an answer or a failure.
46
+ *
24
47
  * @param runtime - The per-invocation runtime.
25
- * @returns The storeless colophon payload: pragma's section, then each active
26
- * pack/domain that declares a `colophon`.
48
+ * @returns The storeless colophon payload: every active pack/domain that
49
+ * declares a `colophon`, or the distribution's own section when none does.
27
50
  * @note Impure — reads the config layers (never boots the store).
28
51
  */
29
52
  export async function collectColophon(
30
53
  runtime: PragmaRuntime,
31
54
  ): Promise<ColophonData> {
32
- const sections: ColophonSection[] = [
33
- {
34
- kind: "pragma",
35
- title: "pragma",
36
- markdown: PRAGMA_COLOPHON,
37
- summary: PRAGMA_COLOPHON_SUMMARY,
38
- source: "built-in",
39
- },
40
- ];
41
-
42
- const { assembleEffectiveModules } = await import(
55
+ const { loadEffectiveModules } = await import(
43
56
  "../../kernel/packs/collect.js"
44
57
  );
45
58
  const { capabilities } = await import("../index.js");
46
59
 
47
60
  let modules: readonly CapabilityModule[] = capabilities;
48
61
  try {
49
- const layers = await runtime.loadConfig();
50
- modules = assembleEffectiveModules(capabilities, layers);
62
+ modules = (await loadEffectiveModules(capabilities, runtime.cwd)).modules;
51
63
  } catch {
52
64
  // A bad config story is surfaced by the real commands; the colophon degrades
53
- // to the static (bundled) modules rather than failing the narrative.
65
+ // to the static modules rather than failing the narrative. (A bad PACKAGE
66
+ // story never throws — it is dropped and reported by doctor.)
54
67
  }
55
68
 
69
+ const sections: ColophonSection[] = [];
56
70
  for (const module of modules) {
57
71
  if (module.colophon) {
58
72
  sections.push({
@@ -64,5 +78,17 @@ export async function collectColophon(
64
78
  }
65
79
  }
66
80
 
81
+ if (sections.length === 0 && distribution.colophon) {
82
+ sections.push({
83
+ kind: "pragma",
84
+ title: BIN_NAME,
85
+ markdown: distribution.colophon.markdown,
86
+ ...(distribution.colophon.summary === undefined
87
+ ? {}
88
+ : { summary: distribution.colophon.summary }),
89
+ source: "built-in",
90
+ });
91
+ }
92
+
67
93
  return { sections };
68
94
  }
@@ -7,13 +7,28 @@
7
7
  * The section title is composed as an H1 (`# <title>`) and fed through the ONE
8
8
  * styler, so all heading styling lives in a single place and the authored body
9
9
  * (which carries no leading H1) is never double-titled.
10
+ *
11
+ * The formatters render whatever sections the collector hands them and decide
12
+ * nothing about which sections exist — that choice (the domain's story, or the
13
+ * toolchain's when no domain tells one) belongs to the collector, and keeping
14
+ * it there is what lets these stay pure.
10
15
  */
11
16
 
17
+ import { BIN_NAME } from "../../constants.js";
12
18
  import { defaultStyle, type RenderStyle } from "../../kernel/render/style.js";
13
- import type { Formatters } from "../../kernel/spec/types.js";
19
+ import type { Formatters } from "../../kernel/spec/index.js";
14
20
  import { renderMarkdownToTerminal } from "./markdownTerminal.js";
15
21
  import type { ColophonData, ColophonSection } from "./types.js";
16
22
 
23
+ /**
24
+ * The zero-section empty state: nothing declares a colophon — no active pack,
25
+ * and no story from the distribution itself. Blank output would read as a
26
+ * broken command, so say what is missing and name the command that fixes it.
27
+ * Like every empty state it goes to stderr with exit 0 (a calm success), so a
28
+ * script reading stdout still reads nothing.
29
+ */
30
+ const EMPTY_NOTICE = `No colophon declared. A colophon comes from an active pack — build the store with \`${BIN_NAME} sources update\`.`;
31
+
17
32
  /** Render one section (title as H1 + body) as styled terminal Markdown. */
18
33
  function plainSection(section: ColophonSection, style: RenderStyle): string {
19
34
  return renderMarkdownToTerminal(
@@ -38,10 +53,19 @@ export const colophonFormatters: Formatters<ColophonData> = {
38
53
  },
39
54
 
40
55
  llm(data) {
56
+ // llm returns before the dispatcher's empty-state routing, so the
57
+ // condensed form carries its own zero-section line (the same shape the
58
+ // other empty states use) rather than handing an agent zero bytes.
59
+ if (data.sections.length === 0) return `_${EMPTY_NOTICE}_`;
41
60
  return data.sections.map(llmSection).join("\n\n");
42
61
  },
43
62
 
44
63
  json(data) {
45
64
  return JSON.stringify(data);
46
65
  },
66
+
67
+ // Zero sections: the dispatcher routes this to stderr (exit 0) so plain
68
+ // stdout stays empty; llm/json keep their own empty shapes.
69
+ emptyNotice: (data) =>
70
+ data.sections.length === 0 ? EMPTY_NOTICE : undefined,
47
71
  };
@@ -2,11 +2,14 @@
2
2
  * `pragma colophon` — the storeless, pack-extensible toolchain colophon (PR10).
3
3
  *
4
4
  * Pins the covenant-exact emitted slice (`{ v:"colophon", mcp:"colophon" }`),
5
- * proves the collector is storeless and combines pragma's built-in section with
6
- * the active pack's (the bundled `block` design-system colophon), exercises the
7
- * three formatter modes + `--format` precedence, holds CLI-json ≡ MCP
8
- * parity, and checks the pack-grammar accepts a `colophon` field (rejecting a
9
- * non-string).
5
+ * proves the collector is storeless and prints the ACTIVE DOMAIN's colophon
6
+ * (the bundled `block` design-system story) with no toolchain section in front
7
+ * of it, pins the empty state for a distribution and packs that declare none,
8
+ * exercises the three formatter modes + `--format` precedence, holds CLI-json
9
+ * ≡ MCP parity, and checks the pack-grammar accepts a `colophon` field
10
+ * (rejecting a non-string). The fallback — the toolchain's own section when no
11
+ * pack tells a story — is pinned where a story-less distribution exists:
12
+ * `identity.test.ts`'s fork.
10
13
  */
11
14
 
12
15
  import { mkdtempSync, readFileSync, rmSync } from "node:fs";
@@ -116,24 +119,42 @@ describe("colophon — storeless collector (PROTECTED)", () => {
116
119
  });
117
120
  });
118
121
 
119
- describe("colophon — combined content (pragma + active domain)", () => {
120
- it("leads with pragma's built-in section", async () => {
121
- const data = await collectColophon(bootRuntime(FLAGS, tmpCwd()));
122
- const first = data.sections[0];
123
- expect(first?.kind).toBe("pragma");
124
- expect(first?.title).toBe("pragma");
125
- expect(first?.source).toBe("built-in");
126
- expect(first?.markdown.length).toBeGreaterThan(0);
127
- expect(first?.summary?.length).toBeGreaterThan(0);
128
- });
129
-
130
- it("appends the bundled design-system (block) domain section", async () => {
122
+ describe("colophon — the configured domain's story, and only that", () => {
123
+ it("prints the bundled design-system (block) domain section", async () => {
131
124
  const data = await collectColophon(bootRuntime(FLAGS, tmpCwd()));
132
125
  const block = data.sections.find((section) => section.title === "block");
133
126
  expect(block?.kind).toBe("pack");
134
127
  expect(block?.source).toBe("pack:block");
135
128
  expect(block?.markdown).toContain("knowledge graph");
136
129
  });
130
+
131
+ it("does NOT prepend the toolchain's own section when a domain has one", async () => {
132
+ // A configured reader asked about the domain. The paragraph about how this
133
+ // program is built is not an answer to that, and it used to arrive first.
134
+ const data = await collectColophon(bootRuntime(FLAGS, tmpCwd()));
135
+ // Guard the vacuous pass: `every` over nothing is true, and "no sections"
136
+ // is a different outcome than "only domain sections".
137
+ expect(data.sections.length).toBeGreaterThan(0);
138
+ expect(data.sections.every((section) => section.kind === "pack")).toBe(
139
+ true,
140
+ );
141
+ });
142
+
143
+ it("says so, on stderr, when nothing declares a colophon", () => {
144
+ // The collector can only reach this with neither a pack story nor a
145
+ // distribution one; the formatter is where the state is expressible, so
146
+ // the empty state is pinned here — bare stdout, guidance on stderr.
147
+ const empty: ColophonData = { sections: [] };
148
+ expect(colophonFormatters.plain(empty)).toBe("");
149
+ const notice = colophonFormatters.emptyNotice?.(empty);
150
+ expect(notice).toContain("No colophon declared");
151
+ expect(notice).toContain("sources update");
152
+ // llm returns before the dispatcher's stderr routing, so it says the same
153
+ // thing in its own body rather than emitting nothing.
154
+ expect(colophonFormatters.llm(empty)).toContain("No colophon declared");
155
+ // A populated payload has nothing to be calm about.
156
+ expect(colophonFormatters.emptyNotice?.(FIXTURE)).toBeUndefined();
157
+ });
137
158
  });
138
159
 
139
160
  describe("colophon — formatter modes", () => {
@@ -167,7 +188,7 @@ describe("colophon — formatter modes", () => {
167
188
  );
168
189
  const envelope = JSON.parse(outcome.stdout as string);
169
190
  expect(envelope.ok).toBe(true);
170
- expect((envelope.data as ColophonData).sections[0]?.kind).toBe("pragma");
191
+ expect((envelope.data as ColophonData).sections[0]?.kind).toBe("pack");
171
192
  });
172
193
 
173
194
  it("--format llm selects the condensed Markdown form", async () => {
@@ -177,12 +198,12 @@ describe("colophon — formatter modes", () => {
177
198
  NO_MUT,
178
199
  bootRuntime(FLAGS_LLM, tmpCwd()),
179
200
  );
180
- expect(outcome.stdout).toContain("## pragma");
201
+ expect(outcome.stdout).toContain("## block");
181
202
  });
182
203
  });
183
204
 
184
205
  describe("colophon — MCP parity", () => {
185
- it("projects a read-only `colophon` tool that returns the pragma section", async () => {
206
+ it("projects a read-only `colophon` tool that returns the domain section", async () => {
186
207
  const cwd = tmpCwd();
187
208
  const mcp = await projectMcp([colophonModule], cwd);
188
209
  const tool = (await mcp.listTools()).find((t) => t.name === "colophon");
@@ -195,7 +216,7 @@ describe("colophon — MCP parity", () => {
195
216
  openWorldHint: false,
196
217
  });
197
218
  expect(envelope.ok).toBe(true);
198
- expect((envelope.data as ColophonData).sections[0]?.kind).toBe("pragma");
219
+ expect((envelope.data as ColophonData).sections[0]?.kind).toBe("pack");
199
220
  });
200
221
 
201
222
  it("CLI --format json ≡ MCP colophon (same envelope)", async () => {
@@ -7,21 +7,25 @@
7
7
  * `infoVerb` / `doctorVerb` / `capabilitiesVerb`.
8
8
  */
9
9
 
10
+ import { BIN_NAME } from "../../constants.js";
10
11
  import { asVerb } from "../../kernel/spec/asVerb.js";
11
- import type { CapabilityModule, VerbSpec } from "../../kernel/spec/types.js";
12
+ import type { CapabilityModule, VerbSpec } from "../../kernel/spec/index.js";
12
13
  import { colophonFormatters } from "./colophon.render.js";
13
14
  import type { ColophonData } from "./types.js";
14
15
 
15
16
  const colophonVerb: VerbSpec<Record<string, unknown>, ColophonData> = {
16
17
  path: ["colophon"],
17
- summary: "Narrate how pragma and the active domain are made.",
18
- doc: "Storeless — a colophon for the toolchain. Prints pragma's own story (the effect monad, one-grammar-many-projections, the render/LLM-output model, storeless modularity, and the domain-as-data pack model) followed by the active pack's domain colophon. Also available as a condensed Markdown narration for agents, or as a structured JSON projection of the sections.",
18
+ summary: "Narrate how the active domain is made.",
19
+ doc: `Storeless — the colophon each active pack declares for its domain. With no pack telling a story, it prints the one ${BIN_NAME} declares for itself instead; with neither, it says so. Also available as a condensed Markdown narration for agents, or as a structured JSON projection of the sections.`,
19
20
  params: [],
20
21
  output: { formatters: colophonFormatters },
21
22
  examples: [
22
- { cmd: "pragma colophon", note: "the toolchain + active domain story" },
23
23
  {
24
- cmd: "pragma colophon --format llm",
24
+ cmd: `${BIN_NAME} colophon`,
25
+ note: "the active domain's story",
26
+ },
27
+ {
28
+ cmd: `${BIN_NAME} colophon --format llm`,
25
29
  note: "condensed Markdown for agents",
26
30
  },
27
31
  ],
@@ -2,28 +2,37 @@
2
2
  * Data shapes for `pragma colophon`.
3
3
  *
4
4
  * A colophon (the printer's end-note on how a book is made) for the toolchain:
5
- * one section narrating how pragma itself is built, followed by one section per
6
- * active pack/domain that declares a `colophon`. Storeless and read-only.
5
+ * one section narrating how the distribution itself is built — declared in its
6
+ * config, not authored in code — followed by one section per active pack/domain
7
+ * that declares a `colophon`. Storeless and read-only.
7
8
  */
8
9
 
9
- /** One colophon section — pragma's own, or an active pack's domain story. */
10
+ /** One colophon section — the distribution's own, or an active pack's story. */
10
11
  export interface ColophonSection {
11
- /** Whether this is pragma's built-in section or an active pack's. */
12
+ /**
13
+ * Whether this is the distribution's declared section or an active pack's.
14
+ * `"pragma"` is a FROZEN JSON-visible discriminant (wire compatibility, like
15
+ * the `pragma:` resource scheme) — it does not track the distribution's
16
+ * name; a fork's own section still carries `kind: "pragma"`.
17
+ */
12
18
  readonly kind: "pragma" | "pack";
13
- /** Section heading — `"pragma"`, or the pack's noun/name. */
19
+ /** Section heading — the distribution's name, or the pack's noun/name. */
14
20
  readonly title: string;
15
21
  /**
16
22
  * The authored Markdown BODY (no leading H1 — the renderer supplies the
17
23
  * heading from {@link title}, so a section is never double-titled).
18
24
  */
19
25
  readonly markdown: string;
20
- /** Optional condensed body for `--format llm` (pragma supplies one). */
26
+ /** Optional condensed body for `--format llm` (the declaration's `summary`). */
21
27
  readonly summary?: string;
22
28
  /** Provenance: `"built-in"`, or `"pack:<name>"`. */
23
29
  readonly source?: string;
24
30
  }
25
31
 
26
- /** The full `colophon` payload: pragma's section first, then active packs'. */
32
+ /**
33
+ * The full `colophon` payload: the distribution's declared section first (when
34
+ * its config declares one), then active packs'.
35
+ */
27
36
  export interface ColophonData {
28
37
  readonly sections: readonly ColophonSection[];
29
38
  }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * `config show` payload projection — declared story BODIES never ship.
3
+ *
4
+ * MCP returns the JSON formatter's output verbatim, so anything in this payload
5
+ * is tokens in every `config_show` tool call. The distribution declares five
6
+ * read stories on its packs, whose bodies are SPARQL; carried through, they take
7
+ * the payload from ~1.3 KB to ~11 KB — larger than `capabilities`, the discovery
8
+ * tool, for the least useful content in the surface.
9
+ */
10
+
11
+ import { mkdtempSync } from "node:fs";
12
+ import { tmpdir } from "node:os";
13
+ import { join } from "node:path";
14
+ import { describe, expect, it } from "vitest";
15
+ import { bootRuntime } from "../../kernel/runtime/boot.js";
16
+ import type { GlobalFlags } from "../../kernel/runtime/types.js";
17
+ import { collectConfigShow } from "./collectConfigShow.js";
18
+
19
+ const FLAGS: GlobalFlags = {
20
+ llm: false,
21
+ autoLlm: false,
22
+ format: "json",
23
+ verbose: false,
24
+ };
25
+
26
+ describe("config show payload", () => {
27
+ it("names the declared packs but carries no story bodies", async () => {
28
+ const cwd = mkdtempSync(join(tmpdir(), "pragma-config-show-"));
29
+ const data = await collectConfigShow(bootRuntime(FLAGS, cwd));
30
+
31
+ // The pack declarations themselves are still fully reported…
32
+ expect(
33
+ data.config.packs?.map((pack) =>
34
+ typeof pack === "string" ? pack : pack.name,
35
+ ),
36
+ ).toEqual([
37
+ "@canonical/design-system",
38
+ "@canonical/anatomy-dsl",
39
+ "@canonical/code-standards",
40
+ "@canonical/ds-implementations",
41
+ ]);
42
+ for (const pack of data.config.packs ?? []) {
43
+ expect(
44
+ typeof pack === "string" ? undefined : pack.stories,
45
+ ).toBeUndefined();
46
+ }
47
+ expect(data.config.stories).toBeUndefined();
48
+
49
+ // …and provenance stays honest: the payload still says where they came from.
50
+ expect(data.origins.packs).toBe("default");
51
+ expect(data.origins.stories).toBe("default");
52
+
53
+ // The sharp end: no query text reaches the agent surface.
54
+ const payload = JSON.stringify(data);
55
+ expect(payload).not.toContain("SELECT ?");
56
+ expect(payload.length).toBeLessThan(3000);
57
+ });
58
+ });
@@ -1,15 +1,52 @@
1
1
  /**
2
2
  * Collect the `config show` payload — the verb's run body (lazily imported).
3
3
  *
4
- * Storeless: read the layered config and pass it through with its provenance.
5
- * Dynamic-imported by the spec so building the tree never pulls the config
6
- * reader (or zod) onto the fast path.
4
+ * Storeless: read the layered config and pass it through with its provenance,
5
+ * minus the declared story BODIES (see {@link withoutStoryBodies}). Dynamic-
6
+ * imported by the spec so building the tree never pulls the config reader (or
7
+ * zod) onto the fast path.
7
8
  */
8
9
 
9
- import { readConfig } from "../../kernel/config/readConfig.js";
10
- import type { PragmaRuntime } from "../../kernel/runtime/types.js";
10
+ import type {
11
+ PackDeclaration,
12
+ PragmaConfig,
13
+ } from "../../kernel/config/index.js";
14
+ import { readConfig } from "../../kernel/config/index.js";
15
+ import type { PragmaRuntime } from "../../kernel/runtime/index.js";
11
16
  import type { ConfigShowData } from "./types.js";
12
17
 
18
+ /** A pack declaration with any declared story bodies dropped. */
19
+ function nameAndSourceOnly(pack: PackDeclaration): PackDeclaration {
20
+ if (typeof pack === "string") return pack;
21
+ return {
22
+ name: pack.name,
23
+ ...(pack.source === undefined ? {} : { source: pack.source }),
24
+ };
25
+ }
26
+
27
+ /**
28
+ * The effective config with declared story BODIES dropped — `packs` entries keep
29
+ * `{ name, source }`, and the top-level `stories` array is omitted.
30
+ *
31
+ * A PROJECTION of the payload, not a hiding of config: `origins` still reports
32
+ * where `packs` and `stories` came from, the plain and llm renders already print
33
+ * pack NAMES only, and `pragma capabilities` lists the verbs the stories
34
+ * produce. It exists because the bodies are SPARQL — the distribution's own five
35
+ * stories take `config show --format json` from 1.3 KB to 11 KB, and MCP returns
36
+ * the JSON formatter's output, so every `config_show` tool call would carry
37
+ * ~2.7k tokens of query text: the largest payload in the surface, for its least
38
+ * useful content.
39
+ */
40
+ function withoutStoryBodies(config: PragmaConfig): PragmaConfig {
41
+ const { stories, ...rest } = config;
42
+ return {
43
+ ...rest,
44
+ ...(config.packs === undefined
45
+ ? {}
46
+ : { packs: config.packs.map(nameAndSourceOnly) }),
47
+ };
48
+ }
49
+
13
50
  /**
14
51
  * Assemble the resolved config with provenance for the current runtime.
15
52
  *
@@ -22,7 +59,7 @@ export async function collectConfigShow(
22
59
  ): Promise<ConfigShowData> {
23
60
  const layers = await readConfig(runtime.cwd);
24
61
  return {
25
- config: layers.config,
62
+ config: withoutStoryBodies(layers.config),
26
63
  origins: layers.origins,
27
64
  ...(layers.project.path ? { projectConfigPath: layers.project.path } : {}),
28
65
  globalConfigPath: layers.global.path,
@@ -1,12 +1,11 @@
1
1
  /**
2
- * Formatters for a `config <field>` setter — plain, llm, json (no ink).
2
+ * Formatters for the config writers (`set` and `unset`) — plain, llm, json.
3
3
  *
4
- * One shared formatter across all three setters (the field-table pattern): a
5
- * set reports the value and the file it landed in; a reset reports the removed
6
- * field.
4
+ * One shared formatter (the field-table pattern): a set reports the value and
5
+ * the file it landed in; an unset reports the removed field.
7
6
  */
8
7
 
9
- import type { Formatters } from "../../kernel/spec/types.js";
8
+ import type { Formatters } from "../../kernel/spec/index.js";
10
9
  import type { ConfigFieldResult } from "./types.js";
11
10
 
12
11
  export const configFieldFormatters: Formatters<ConfigFieldResult> = {
@@ -2,8 +2,8 @@
2
2
  * The config field table — one declarative row per writable field. Since AV-228
3
3
  * B3 retired the per-field `config tier`/`channel`/`detail` verbs, this table no
4
4
  * longer emits verbs of its own: it is the shared source of truth that drives
5
- * `config set <key> <value>` (via `runSet` → `runField`), giving `set` its
6
- * `<key>` enum, per-field reset sentinels, enum validation, and positional
5
+ * `config set <key> <value>` and `config get`/`config unset` (via `runSet` →
6
+ * `runField`), giving each its `<key>` enum, enum validation, and positional
7
7
  * shaping for free.
8
8
  */
9
9
 
@@ -21,61 +21,41 @@ export interface ConfigFieldSpec {
21
21
  readonly kind: "string" | "enum";
22
22
  /** The allowed values for an enum field. */
23
23
  readonly values?: readonly string[];
24
- /** One-line field summary. */
25
- readonly summary: string;
26
- /** Extended help doc. */
27
- readonly doc: string;
28
- /** Reserved values that REMOVE the field instead of setting it. */
29
- readonly resetSentinel?: readonly string[];
30
- /** Field help examples. */
31
- readonly examples: readonly { cmd: string; note?: string }[];
32
24
  }
33
25
 
34
26
  /**
35
- * The three writable fields. Only `tier` (a free string with a meaningful
36
- * "no value") carries reset sentinels; `channel`/`detail` reset by setting
37
- * their default (`normal`/`standard`). The migration path for the retired
38
- * field-verbs is `config set <field> <value>` (e.g. `config set tier apps/lxd`,
39
- * `config set tier none` to clear it).
27
+ * Values `config set` refuses for a FREE-STRING field: clearing a field is a
28
+ * command (`config unset <key>`), not a magic value — a value spelled `none`
29
+ * conflated "remove the field" with "set it to the string none". They stay
30
+ * reserved (rather than becoming writable) so the strings cannot silently
31
+ * change meaning; the rejection names `unset` as the owner of the job.
32
+ */
33
+ export const RESERVED_CLEAR_VALUES: readonly string[] = [
34
+ "none",
35
+ "default",
36
+ "-",
37
+ ];
38
+
39
+ /**
40
+ * The three writable fields. `channel`/`detail` are fixed enums;
41
+ * `tier` is a free string, cleared with `config unset tier`.
40
42
  */
41
43
  export const CONFIG_FIELDS: readonly ConfigFieldSpec[] = [
42
44
  {
43
45
  field: "tier",
44
46
  positional: "path",
45
47
  kind: "string",
46
- resetSentinel: ["none", "default", "-"],
47
- summary: "Set the active design-system tier.",
48
- doc: "Writes the `tier` field to the global config. Pass `none`, `default`, or `-` to clear it. Written to the global layer only — project configs are authored by hand.",
49
- examples: [
50
- {
51
- cmd: "pragma config set tier apps/lxd",
52
- note: "scope reads to a tier",
53
- },
54
- { cmd: "pragma config set tier none", note: "clear the tier" },
55
- ],
56
48
  },
57
49
  {
58
50
  field: "channel",
59
51
  positional: "name",
60
52
  kind: "enum",
61
53
  values: CHANNELS,
62
- summary: "Set the release channel controlling component visibility.",
63
- doc: "Writes the `channel` field to the global config. Reset by setting the default, `normal`.",
64
- examples: [
65
- { cmd: "pragma config set channel experimental" },
66
- { cmd: "pragma config set channel normal", note: "back to the default" },
67
- ],
68
54
  },
69
55
  {
70
56
  field: "detail",
71
57
  positional: "level",
72
58
  kind: "enum",
73
59
  values: DETAIL_LEVELS,
74
- summary: "Set the default progressive-disclosure level.",
75
- doc: "Writes the `detail` field to the global config. Reset by setting the default, `standard`.",
76
- examples: [
77
- { cmd: "pragma config set detail detailed" },
78
- { cmd: "pragma config set detail standard", note: "back to the default" },
79
- ],
80
60
  },
81
61
  ];
@@ -0,0 +1,70 @@
1
+ /**
2
+ * `config get <key>` — read ONE resolved config value, scriptably.
3
+ *
4
+ * `config show` dumps everything with provenance; scripting one value out of
5
+ * it needed `--format json` plus a JSON tool. `get` prints the bare resolved
6
+ * value on stdout (an unset field prints nothing, exit 0), so shell
7
+ * substitution works directly; the json form carries the field, the value,
8
+ * and the layer that supplied it.
9
+ *
10
+ * The plain and llm forms are the SAME bare value, which is the one place in
11
+ * the grammar where those two forms may not differ: `TIER=$(… config get
12
+ * tier)` pipes stdout, and a pipe auto-selects llm, so a decorated llm line
13
+ * would put backticks and a provenance clause into the variable the command
14
+ * exists to fill. Provenance has a home already — `--format json` here, and
15
+ * `config show` for the whole picture.
16
+ */
17
+
18
+ import { BIN_NAME } from "../../constants.js";
19
+ import { asVerb } from "../../kernel/spec/asVerb.js";
20
+ import type { Formatters, VerbSpec } from "../../kernel/spec/index.js";
21
+ import { CONFIG_FIELDS } from "./fields.js";
22
+ import type { ConfigGetData } from "./types.js";
23
+
24
+ /** The readable field names — the `<key>` enum, in covenant order. */
25
+ const CONFIG_KEYS = CONFIG_FIELDS.map((field) => field.field);
26
+
27
+ /** The bare value, or nothing at all when the field is unset. */
28
+ const bareValue = (data: ConfigGetData): string =>
29
+ data.value === undefined ? "" : String(data.value);
30
+
31
+ const configGetFormatters: Formatters<ConfigGetData> = {
32
+ // The bare value IS the contract: `TIER=$(pragma config get tier)`.
33
+ plain: bareValue,
34
+ llm: bareValue,
35
+ json: (data) => JSON.stringify(data),
36
+ };
37
+
38
+ const getVerb: VerbSpec<Record<string, unknown>, ConfigGetData> = {
39
+ path: ["config", "get"],
40
+ summary: "Print one resolved config value.",
41
+ doc: "Reads the effective value of a single field after layering — built-in defaults, the global config, and the nearest project config. Prints the bare value (nothing when the field is unset), so the output substitutes directly into a shell.",
42
+ params: [
43
+ {
44
+ kind: "enum",
45
+ name: "key",
46
+ doc: "The config field to read.",
47
+ values: CONFIG_KEYS,
48
+ required: true,
49
+ positional: true,
50
+ },
51
+ ],
52
+ output: { formatters: configGetFormatters },
53
+ examples: [
54
+ { cmd: `${BIN_NAME} config get tier` },
55
+ { cmd: `${BIN_NAME} config get channel --format json` },
56
+ ],
57
+ capability: {
58
+ needsStore: false,
59
+ mutates: false,
60
+ mcp: {
61
+ expose: true,
62
+ annotations: { readOnlyHint: true, openWorldHint: false },
63
+ },
64
+ },
65
+ run: (params, runtime) =>
66
+ import("./runGet.js").then((m) => m.runGet(params, runtime)),
67
+ };
68
+
69
+ /** The `config get` verb. */
70
+ export const configGetVerb = asVerb(getVerb);