@canonical/pragma-cli 0.34.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 (798) 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 +20 -22
  505. package/pragma.conf.ts +249 -60
  506. package/src/bin.ts +267 -82
  507. package/src/capabilities/block.parity.test.ts +6 -3
  508. package/src/capabilities/capabilities/capabilities.render.ts +1 -1
  509. package/src/capabilities/capabilities/capabilities.verb.ts +1 -1
  510. package/src/capabilities/capabilities/catalog.ts +3 -3
  511. package/src/capabilities/capabilities/hints.ts +32 -7
  512. package/src/capabilities/capabilities/index.ts +1 -1
  513. package/src/capabilities/colophon/collectColophon.ts +35 -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 +4 -4
  517. package/src/capabilities/config/collectConfigShow.test.ts +1 -0
  518. package/src/capabilities/config/collectConfigShow.ts +3 -3
  519. package/src/capabilities/config/field.render.ts +4 -5
  520. package/src/capabilities/config/fields.ts +17 -10
  521. package/src/capabilities/config/get.verb.ts +70 -0
  522. package/src/capabilities/config/getUnset.test.ts +264 -0
  523. package/src/capabilities/config/index.ts +5 -1
  524. package/src/capabilities/config/runField.ts +40 -22
  525. package/src/capabilities/config/runGet.ts +34 -0
  526. package/src/capabilities/config/runSet.ts +35 -9
  527. package/src/capabilities/config/set.test.ts +48 -14
  528. package/src/capabilities/config/set.verb.ts +8 -7
  529. package/src/capabilities/config/show.render.ts +1 -1
  530. package/src/capabilities/config/show.verb.ts +9 -6
  531. package/src/capabilities/config/types.ts +18 -4
  532. package/src/capabilities/config/unset.verb.ts +58 -0
  533. package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
  534. package/src/capabilities/create/byteEquality.test.ts +25 -11
  535. package/src/capabilities/create/cliProjection.ts +227 -0
  536. package/src/capabilities/create/constants.ts +36 -61
  537. package/src/capabilities/create/create.mcp.test.ts +89 -5
  538. package/src/capabilities/create/create.render.ts +71 -7
  539. package/src/capabilities/create/create.test.ts +433 -219
  540. package/src/capabilities/create/create.verb.ts +297 -328
  541. package/src/capabilities/create/createGrammar.test.ts +865 -0
  542. package/src/capabilities/create/createHelp.ts +71 -0
  543. package/src/capabilities/create/createSurface.generated.ts +400 -0
  544. package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
  545. package/src/capabilities/create/cwdJail.test.ts +24 -5
  546. package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
  547. package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
  548. package/src/capabilities/create/index.ts +7 -4
  549. package/src/capabilities/create/messages.ts +18 -0
  550. package/src/capabilities/create/mount.ts +391 -0
  551. package/src/capabilities/create/pathJail.test.ts +90 -0
  552. package/src/capabilities/create/pathJail.ts +8 -5
  553. package/src/capabilities/create/pickGenerator.ts +23 -35
  554. package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
  555. package/src/capabilities/create/types.ts +20 -0
  556. package/src/capabilities/distribution.test.ts +3 -1
  557. package/src/capabilities/distribution.ts +10 -15
  558. package/src/capabilities/doctor/checks/checkKeStore.ts +7 -5
  559. package/src/capabilities/doctor/checks/checkPackageRefs.ts +6 -4
  560. package/src/capabilities/doctor/checks/checkPragmaVersion.ts +2 -2
  561. package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +72 -27
  562. package/src/capabilities/doctor/checks/checkShellCompletions.ts +59 -13
  563. package/src/capabilities/doctor/checks/index.ts +27 -0
  564. package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
  565. package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
  566. package/src/capabilities/doctor/checks/targetHealth.ts +274 -0
  567. package/src/capabilities/doctor/doctor.render.test.ts +18 -7
  568. package/src/capabilities/doctor/doctor.render.ts +43 -19
  569. package/src/capabilities/doctor/doctor.test.ts +123 -34
  570. package/src/capabilities/doctor/doctor.verb.ts +3 -3
  571. package/src/capabilities/doctor/runChecks.ts +62 -63
  572. package/src/capabilities/doctor/types.ts +20 -4
  573. package/src/capabilities/emptyRecovery.test.ts +13 -8
  574. package/src/capabilities/graph/examples.exec.test.ts +107 -0
  575. package/src/capabilities/graph/index.ts +1 -1
  576. package/src/capabilities/graph/inspect.render.ts +70 -22
  577. package/src/capabilities/graph/inspect.test.ts +260 -5
  578. package/src/capabilities/graph/inspect.verb.ts +18 -6
  579. package/src/capabilities/graph/query.render.ts +15 -3
  580. package/src/capabilities/graph/query.verb.ts +3 -3
  581. package/src/capabilities/graph/runQuery.ts +2 -3
  582. package/src/capabilities/index.ts +3 -1
  583. package/src/capabilities/info/collectInfo.ts +5 -4
  584. package/src/capabilities/info/info.render.ts +1 -1
  585. package/src/capabilities/info/info.verb.ts +1 -1
  586. package/src/capabilities/lazy.test.ts +32 -0
  587. package/src/capabilities/meta/complete.verb.ts +1 -1
  588. package/src/capabilities/meta/index.ts +1 -1
  589. package/src/capabilities/meta/mcp.verb.ts +10 -8
  590. package/src/capabilities/ontology/index.ts +15 -11
  591. package/src/capabilities/ontology/ontology.test.ts +6 -55
  592. package/src/capabilities/ontology/queries.ts +2 -2
  593. package/src/capabilities/ontology/render.ts +3 -4
  594. package/src/capabilities/ontology/verbs.ts +27 -68
  595. package/src/capabilities/prompt/index.ts +2 -2
  596. package/src/capabilities/prompt/prompt.render.ts +6 -2
  597. package/src/capabilities/prompt/types.ts +1 -1
  598. package/src/capabilities/prompt/verbs.ts +4 -5
  599. package/src/capabilities/reference.test.ts +63 -0
  600. package/src/capabilities/resources/provider.ts +342 -85
  601. package/src/capabilities/resources/resources.test.ts +355 -59
  602. package/src/capabilities/setup/buildPlan.ts +236 -0
  603. package/src/capabilities/setup/index.ts +7 -7
  604. package/src/capabilities/setup/mode.ts +74 -0
  605. package/src/capabilities/setup/operations/index.ts +74 -0
  606. package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
  607. package/src/capabilities/setup/operations/setupConfig.ts +124 -0
  608. package/src/capabilities/setup/operations/setupGenerator.ts +396 -326
  609. package/src/capabilities/setup/operations/setupLsp.ts +329 -68
  610. package/src/capabilities/setup/operations/setupMcp.ts +137 -97
  611. package/src/capabilities/setup/operations/setupSkills.ts +336 -108
  612. package/src/capabilities/setup/plan.render.ts +241 -0
  613. package/src/capabilities/setup/plan.ts +236 -0
  614. package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
  615. package/src/capabilities/setup/setup.render.test.ts +281 -73
  616. package/src/capabilities/setup/setup.render.ts +45 -77
  617. package/src/capabilities/setup/setup.test.ts +972 -209
  618. package/src/capabilities/setup/setup.verb.ts +223 -71
  619. package/src/capabilities/setup/shell.test.ts +86 -0
  620. package/src/capabilities/setup/shell.ts +137 -11
  621. package/src/capabilities/setup/targets.ts +367 -0
  622. package/src/capabilities/setup/types.ts +18 -57
  623. package/src/capabilities/shared/assertExecOk.ts +68 -10
  624. package/src/capabilities/shared/index.ts +32 -0
  625. package/src/capabilities/shared/packageManager.test.ts +55 -0
  626. package/src/capabilities/shared/packageManager.ts +62 -6
  627. package/src/capabilities/skill/discover.ts +37 -5
  628. package/src/capabilities/skill/index.ts +1 -1
  629. package/src/capabilities/skill/render.ts +10 -9
  630. package/src/capabilities/skill/skill.test.ts +7 -5
  631. package/src/capabilities/skill/verbs.ts +3 -4
  632. package/src/capabilities/sources/collectStatus.ts +7 -2
  633. package/src/capabilities/sources/index.ts +1 -1
  634. package/src/capabilities/sources/installSkills.ts +84 -7
  635. package/src/capabilities/sources/runUpdate.ts +53 -21
  636. package/src/capabilities/sources/sources.test.ts +154 -2
  637. package/src/capabilities/sources/status.render.ts +1 -1
  638. package/src/capabilities/sources/status.verb.ts +1 -1
  639. package/src/capabilities/sources/update.render.ts +1 -1
  640. package/src/capabilities/sources/update.verb.ts +1 -1
  641. package/src/capabilities/surface.test.ts +134 -17
  642. package/src/capabilities/upgrade/runUpgrade.ts +8 -8
  643. package/src/capabilities/upgrade/upgrade.render.ts +4 -5
  644. package/src/capabilities/upgrade/upgrade.test.ts +3 -3
  645. package/src/capabilities/upgrade/upgrade.verb.ts +1 -1
  646. package/src/capabilities/version/index.ts +12 -0
  647. package/src/capabilities/version/version.test.ts +66 -0
  648. package/src/capabilities/version/version.verb.ts +39 -0
  649. package/src/constants.ts +31 -1
  650. package/src/identity.test.ts +40 -25
  651. package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +15 -13
  652. package/src/kernel/completion/complete.test.ts +12 -2
  653. package/src/kernel/completion/complete.ts +1 -1
  654. package/src/kernel/completion/emitScripts.ts +1 -1
  655. package/src/kernel/completion/entitySource.test.ts +1 -1
  656. package/src/kernel/completion/entitySource.ts +21 -8
  657. package/src/kernel/completion/model.test.ts +164 -12
  658. package/src/kernel/completion/model.ts +94 -14
  659. package/src/kernel/completion/parse.test.ts +4 -7
  660. package/src/kernel/completion/parse.ts +15 -0
  661. package/src/kernel/completion/resolve.test.ts +0 -1
  662. package/src/kernel/completion/safety.test.ts +34 -26
  663. package/src/kernel/completion/shellDrive.test.ts +28 -9
  664. package/src/kernel/completion/templates/bash.ts +7 -2
  665. package/src/kernel/completion/templates/index.ts +23 -0
  666. package/src/kernel/completion/types.ts +7 -0
  667. package/src/kernel/config/defaults.test.ts +25 -2
  668. package/src/kernel/config/defaults.ts +4 -3
  669. package/src/kernel/config/evaluateProjectConfig.ts +31 -8
  670. package/src/kernel/config/firstRun.test.ts +44 -38
  671. package/src/kernel/config/firstRun.ts +24 -88
  672. package/src/kernel/config/index.ts +1 -1
  673. package/src/kernel/config/readConfig.test.ts +6 -3
  674. package/src/kernel/config/readConfig.ts +1 -1
  675. package/src/kernel/config/schema.ts +3 -1
  676. package/src/kernel/config/types.ts +3 -1
  677. package/src/kernel/copy.test.ts +34 -4
  678. package/src/kernel/copy.ts +54 -0
  679. package/src/kernel/error/PragmaError.test.ts +5 -2
  680. package/src/kernel/error/PragmaError.ts +4 -2
  681. package/src/kernel/error/constants.ts +7 -5
  682. package/src/kernel/error/fromTaskError.ts +28 -6
  683. package/src/kernel/error/recovery.ts +14 -0
  684. package/src/kernel/error/renderError.ts +42 -1
  685. package/src/kernel/error/types.ts +21 -1
  686. package/src/kernel/index.ts +26 -0
  687. package/src/kernel/packs/collect.ts +12 -16
  688. package/src/kernel/packs/compile.test.ts +130 -1
  689. package/src/kernel/packs/compile.ts +93 -3
  690. package/src/kernel/packs/disclosure.ts +2 -2
  691. package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
  692. package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +3 -4
  693. package/src/kernel/packs/graphql/index.ts +20 -0
  694. package/src/kernel/packs/index.ts +40 -0
  695. package/src/kernel/packs/iri.test.ts +73 -0
  696. package/src/kernel/packs/iri.ts +66 -14
  697. package/src/kernel/packs/renderPack.ts +24 -5
  698. package/src/kernel/packs/resolveEntity.test.ts +213 -0
  699. package/src/kernel/packs/resolveEntity.ts +112 -18
  700. package/src/kernel/packs/runBodies.ts +2 -3
  701. package/src/kernel/packs/sample.ts +1 -1
  702. package/src/kernel/packs/schema.ts +18 -1
  703. package/src/kernel/packs/sparql/applyFilters.ts +16 -17
  704. package/src/kernel/packs/sparql/buildLookupQuery.ts +75 -3
  705. package/src/kernel/packs/sparql/index.ts +37 -0
  706. package/src/kernel/packs/sparql/runSelect.test.ts +1 -1
  707. package/src/kernel/packs/sparql/runSelect.ts +3 -4
  708. package/src/kernel/packs/toolDescription.test.ts +42 -3
  709. package/src/kernel/packs/types.ts +13 -0
  710. package/src/kernel/packs/uniqueness.ts +1 -1
  711. package/src/kernel/project/cli/buildProgram.test.ts +147 -12
  712. package/src/kernel/project/cli/buildProgram.ts +77 -18
  713. package/src/kernel/project/cli/constants.ts +34 -0
  714. package/src/kernel/project/cli/dispatch.test.ts +160 -3
  715. package/src/kernel/project/cli/dispatch.ts +222 -42
  716. package/src/kernel/project/cli/exitCodes.ts +1 -1
  717. package/src/kernel/project/cli/globalFlags.test.ts +117 -1
  718. package/src/kernel/project/cli/globalFlags.ts +130 -30
  719. package/src/kernel/project/cli/helpFormat.ts +13 -0
  720. package/src/kernel/project/cli/rootHelp.ts +41 -12
  721. package/src/kernel/project/cli/suggest.test.ts +33 -1
  722. package/src/kernel/project/cli/suggest.ts +25 -1
  723. package/src/kernel/project/cli/verbHelp.test.ts +30 -0
  724. package/src/kernel/project/cli/verbHelp.ts +23 -7
  725. package/src/kernel/project/mcp/buildServer.ts +7 -4
  726. package/src/kernel/project/mcp/envelope.ts +2 -2
  727. package/src/kernel/project/mcp/instructions.ts +2 -2
  728. package/src/kernel/project/mcp/mcpError.ts +1 -1
  729. package/src/kernel/project/mcp/parity.test.ts +5 -2
  730. package/src/kernel/project/mcp/prompts/index.ts +37 -0
  731. package/src/kernel/project/mcp/prompts/source.ts +2 -2
  732. package/src/kernel/project/mcp/registerVerb.ts +35 -9
  733. package/src/kernel/project/mcp/serve.ts +2 -2
  734. package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
  735. package/src/kernel/render/contracts.ts +21 -0
  736. package/src/kernel/render/envelope.ts +2 -3
  737. package/src/kernel/render/formatters.ts +1 -1
  738. package/src/kernel/render/renderers.test.ts +243 -6
  739. package/src/kernel/render/renderers.ts +222 -20
  740. package/src/kernel/render/style.test.ts +75 -24
  741. package/src/kernel/render/style.ts +31 -1
  742. package/src/kernel/render/turtle.ts +222 -0
  743. package/src/kernel/runtime/graphpack/buildIndex.ts +1 -1
  744. package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +3 -3
  745. package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +1 -1
  746. package/src/kernel/runtime/graphpack/embedded.ts +3 -3
  747. package/src/kernel/runtime/graphpack/manifest.ts +1 -1
  748. package/src/kernel/runtime/graphpack/read.ts +1 -2
  749. package/src/kernel/runtime/loadSession.ts +1 -1
  750. package/src/kernel/runtime/probe.ts +6 -6
  751. package/src/kernel/runtime/readEntity.ts +472 -28
  752. package/src/kernel/runtime/refs/index.ts +39 -0
  753. package/src/kernel/runtime/refs/parseRef.ts +2 -2
  754. package/src/kernel/runtime/refs/resolve.ts +4 -4
  755. package/src/kernel/runtime/storeReadiness.ts +1 -2
  756. package/src/kernel/runtime/types.ts +15 -1
  757. package/src/kernel/runtime/wasmEmbed.test.ts +37 -39
  758. package/src/kernel/spec/emitReference.ts +105 -30
  759. package/src/kernel/spec/emitSurface.ts +48 -6
  760. package/src/kernel/spec/surfaceConformance.test.ts +4 -2
  761. package/src/kernel/spec/types.ts +248 -4
  762. package/src/testing/behavioral/docExamples.test.ts +14 -0
  763. package/src/testing/behavioral/errorMatrix.mcp.test.ts +2 -2
  764. package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
  765. package/src/testing/behavioral/journeys.cli.test.ts +1 -1
  766. package/src/testing/behavioral/journeys.defaultPack.test.ts +7 -7
  767. package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
  768. package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
  769. package/src/testing/behavioral/journeys.packageStories.test.ts +4 -4
  770. package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
  771. package/src/testing/behavioral/mcpSurface.test.ts +1 -1
  772. package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
  773. package/src/testing/eval/cases/effectful.ts +3 -2
  774. package/src/testing/fixtures/blockGraph.ts +79 -0
  775. package/src/testing/fixtures/graph/canonical.ts +88 -2
  776. package/src/testing/fixtures/graph/defaultPack.ts +1 -1
  777. package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
  778. package/src/testing/helpers/projectMcp.ts +32 -6
  779. package/src/testing/helpers/runCli.ts +35 -18
  780. package/src/testing/perf/budgets.test.ts +20 -9
  781. package/src/testing/perf/budgets.ts +58 -9
  782. package/src/testing/perf/codegen.test.ts +126 -0
  783. package/src/testing/perf/globalSetup.test.ts +286 -0
  784. package/src/testing/perf/globalSetup.ts +505 -23
  785. package/src/testing/perf/measure.test.ts +38 -0
  786. package/src/testing/perf/measure.ts +23 -4
  787. package/src/testing/setupXdgIsolation.ts +81 -21
  788. package/src/testing/tempRoot.globalSetup.ts +122 -0
  789. package/dist/pragma +0 -0
  790. package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -189
  791. package/src/capabilities/create/templates.embedded.generated.ts +0 -28
  792. package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -42
  793. package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
  794. package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -68
  795. package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -61
  796. package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
  797. package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
  798. package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
@@ -7,15 +7,15 @@
7
7
  */
8
8
 
9
9
  import chalk from "chalk";
10
- import type { Formatters } from "../../kernel/spec/types.js";
11
- import { PRAGMA_PACKAGE } from "../shared/registry.js";
10
+ import type { Formatters } from "../../kernel/spec/index.js";
11
+ import { PRAGMA_PACKAGE } from "../shared/index.js";
12
12
  import type { UpgradeData } from "./types.js";
13
13
 
14
14
  export const upgradeFormatters: Formatters<UpgradeData> = {
15
15
  plain(data) {
16
16
  const lines = [`Installed via: ${data.pm}`];
17
17
  if (data.offline) {
18
- lines.push("Could not reach the registry — try again later.");
18
+ lines.push("Cannot reach the registry — try again later.");
19
19
  return lines.join("\n");
20
20
  }
21
21
  if (data.alreadyLatest) {
@@ -40,8 +40,7 @@ export const upgradeFormatters: Formatters<UpgradeData> = {
40
40
  },
41
41
 
42
42
  llm(data) {
43
- if (data.offline)
44
- return "Upgrade check failed: could not reach the registry.";
43
+ if (data.offline) return "Upgrade check failed: cannot reach the registry.";
45
44
  if (data.alreadyLatest) {
46
45
  return `Already at the latest version (${data.current}).`;
47
46
  }
@@ -199,10 +199,10 @@ describe("assertExecOk — the exec-exitCode guard", () => {
199
199
  }
200
200
  const err = asPragmaError(thrown);
201
201
  // A denied `npm i -g` is user-fixable, NOT a bug — so it must not tell the
202
- // user to "please report this issue" (that is INTERNAL_ERROR's recovery).
202
+ // user to "report this issue" (that is INTERNAL_ERROR's recovery).
203
203
  expect(err.code).toBe("UNSUPPORTED");
204
204
  expect(err.recovery?.message).not.toContain("report this issue");
205
- expect(err.recovery?.message).toMatch(/permissions or network/i);
205
+ expect(err.recovery?.message).toMatch(/elevated privileges/i);
206
206
  // Surfaces the command + exit code + the captured stderr (trimmed).
207
207
  expect(err.message).toContain("npm i -g @canonical/pragma-cli");
208
208
  expect(err.message).toContain("code 13");
@@ -276,7 +276,7 @@ describe("upgrade — a failed exec maps to an actionable runtime error (exit 1)
276
276
 
277
277
  it("a missing-binary spawn (ENOENT) at a guarded site is a named UNSUPPORTED, not INTERNAL_ERROR", async () => {
278
278
  // The same wrapper `runUpgrade`/`setupLsp` apply: a spawn ENOENT REJECTS the
279
- // exec, which used to collapse to INTERNAL_ERROR ("please report this issue").
279
+ // exec, which used to collapse to INTERNAL_ERROR ("report this issue").
280
280
  // `guardMissingBinary` names it instead.
281
281
  const thrown = await runToError(
282
282
  failVerbWith((_p, rt) =>
@@ -16,7 +16,7 @@
16
16
  import type { Task } from "@canonical/task";
17
17
  import { BIN_NAME } from "../../constants.js";
18
18
  import { asVerb } from "../../kernel/spec/asVerb.js";
19
- import type { CapabilityModule, VerbSpec } from "../../kernel/spec/types.js";
19
+ import type { CapabilityModule, VerbSpec } from "../../kernel/spec/index.js";
20
20
  import type { UpgradeData } from "./types.js";
21
21
  import { upgradeFormatters } from "./upgrade.render.js";
22
22
 
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The `version` capability barrel — the command form of `--version`.
3
+ */
4
+
5
+ import type { CapabilityModule } from "../../kernel/spec/index.js";
6
+ import { versionVerbSpec } from "./version.verb.js";
7
+
8
+ /** The `version` capability module. */
9
+ export const versionModule: CapabilityModule = {
10
+ name: "version",
11
+ verbs: [versionVerbSpec],
12
+ };
@@ -0,0 +1,66 @@
1
+ /**
2
+ * `pragma version` — the command form of `--version`.
3
+ *
4
+ * The verb exists because users type it; the ONLY thing worth pinning is that
5
+ * it is not a second answer to the same question. The process-boundary cell
6
+ * compares the two spellings byte for byte through the shipped entry, so a
7
+ * change to either one that does not change the other reddens here. The rest
8
+ * pins the covenant slice and the storeless, tool-free shape.
9
+ */
10
+
11
+ import { describe, expect, it } from "vitest";
12
+ import { VERSION } from "../../constants.js";
13
+ import { executeVerb } from "../../kernel/project/cli/dispatch.js";
14
+ import { bootRuntime } from "../../kernel/runtime/boot.js";
15
+ import type { GlobalFlags } from "../../kernel/runtime/types.js";
16
+ import { emitVerb } from "../../kernel/spec/emitSurface.js";
17
+ import { runCli } from "../../testing/helpers/runCli.js";
18
+ import { versionModule } from "./index.js";
19
+
20
+ const FLAGS: GlobalFlags = {
21
+ llm: false,
22
+ autoLlm: false,
23
+ format: "plain",
24
+ verbose: false,
25
+ };
26
+ const REAL = { dryRun: false, undo: false, yes: false };
27
+ const versionVerb = versionModule.verbs[0];
28
+
29
+ describe("version — covenant-exact emission (PROTECTED)", () => {
30
+ it("emits a no-argument self-verb with NO tool", () => {
31
+ // The version already rides `info` and the MCP handshake's serverInfo, so
32
+ // a tool here would be a third way to ask one question.
33
+ expect(emitVerb(versionVerb)).toEqual({ v: "version", mcp: false });
34
+ });
35
+ });
36
+
37
+ describe("version — one value, two spellings of the same read", () => {
38
+ it("prints the version and never boots the store", async () => {
39
+ const rt = bootRuntime(FLAGS, process.cwd());
40
+ const outcome = await executeVerb(versionVerb, {}, REAL, rt);
41
+ expect(outcome.stdout).toBe(`${VERSION}\n`);
42
+ expect(outcome.exitCode).toBe(0);
43
+ expect(rt.store.booted).toBe(false);
44
+ });
45
+
46
+ it("json carries the value under a named field, not a bare scalar", async () => {
47
+ const outcome = await executeVerb(
48
+ versionVerb,
49
+ {},
50
+ REAL,
51
+ bootRuntime({ ...FLAGS, format: "json" }, process.cwd()),
52
+ );
53
+ expect(JSON.parse(outcome.stdout ?? "").data).toEqual({
54
+ version: VERSION,
55
+ });
56
+ });
57
+
58
+ it("the verb and the flag print the SAME bytes through the shipped entry", () => {
59
+ const fromVerb = runCli(["version"]);
60
+ const fromFlag = runCli(["--version"]);
61
+ expect(fromVerb.exitCode).toBe(0);
62
+ expect(fromFlag.exitCode).toBe(0);
63
+ expect(fromVerb.stdout).toBe(fromFlag.stdout);
64
+ expect(fromVerb.stdout).toBe(`${VERSION}\n`);
65
+ });
66
+ });
@@ -0,0 +1,39 @@
1
+ /**
2
+ * `pragma version` — the command form of `--version`.
3
+ *
4
+ * Users type it reflexively, so it exists and prints exactly the bytes the
5
+ * flag prints: the bare semver on stdout, storeless, no store or network
6
+ * touched. Withheld from MCP — the version already rides `info` and the
7
+ * server handshake's `serverInfo`.
8
+ */
9
+
10
+ import { BIN_NAME, VERSION } from "../../constants.js";
11
+ import { asVerb } from "../../kernel/spec/asVerb.js";
12
+ import type { VerbSpec } from "../../kernel/spec/index.js";
13
+
14
+ const versionVerb: VerbSpec<Record<string, unknown>, string> = {
15
+ path: ["version"],
16
+ summary: "Print the CLI version.",
17
+ doc: "Prints the version `--version` prints — one value, two spellings of the same read.",
18
+ params: [],
19
+ output: {
20
+ formatters: {
21
+ plain: (version) => version,
22
+ llm: (version) => version,
23
+ json: (version) => JSON.stringify({ version }),
24
+ },
25
+ },
26
+ examples: [{ cmd: `${BIN_NAME} version` }],
27
+ capability: {
28
+ needsStore: false,
29
+ mutates: false,
30
+ mcp: {
31
+ expose: false,
32
+ reason: "the version rides `info` and the MCP handshake's serverInfo",
33
+ },
34
+ },
35
+ run: async () => VERSION,
36
+ };
37
+
38
+ /** The `version` verb. */
39
+ export const versionVerbSpec = asVerb(versionVerb);
package/src/constants.ts CHANGED
@@ -17,6 +17,7 @@
17
17
 
18
18
  import pkg from "../package.json" with { type: "json" };
19
19
  import identity from "../pragma.conf.js";
20
+ import type { RawConfig } from "./kernel/config/types.js";
20
21
  import { DETAIL_LEVELS, type DetailLevel } from "./kernel/config/types.js";
21
22
 
22
23
  /** CLI binary name — the distribution's `name`. */
@@ -64,12 +65,40 @@ const RECOVERY_CLI_PREFIX = `${identity.name} `;
64
65
  /** The output formats the renderer selects between (`llm` = condensed Markdown). */
65
66
  const OUTPUT_FORMATS = ["plain", "llm", "json"] as const;
66
67
 
67
- /** A selected output format. `--format text` is normalised to `plain`. */
68
+ /**
69
+ * A selected output format. The set is CLOSED — no alias normalises into it,
70
+ * so a `--format` value outside {@link OUTPUT_FORMATS} is rejected at the
71
+ * entry point rather than quietly becoming `plain`.
72
+ */
68
73
  type OutputFormat = (typeof OUTPUT_FORMATS)[number];
69
74
 
70
75
  /** Default detail level when neither flag, config, nor spec pins one. */
71
76
  const DEFAULT_DETAIL_LEVEL: DetailLevel = "standard";
72
77
 
78
+ /**
79
+ * The wordmark `--help` opens with, as raw ASCII-art lines.
80
+ *
81
+ * PROJECTED from the distribution config, exactly like {@link BIN_NAME} and
82
+ * {@link PROGRAM_DESCRIPTION} — a wordmark spells a name, so it is identity, and
83
+ * `kernel/copy.test.ts` forbids any kernel string from naming the distribution.
84
+ * Authoring the art here would have branded a fork's front door with someone
85
+ * else's logo; declaring it as data means a fork ships its own or none.
86
+ *
87
+ * Lines rather than one string because the art contains a backtick and
88
+ * backslashes: a template literal would need every one of them escaped, which is
89
+ * how a character gets lost the next time someone edits it.
90
+ */
91
+ // Read through the DECLARED type, not the literal's inferred one. The
92
+ // distribution config is `satisfies RawConfig`, which narrows to exactly the
93
+ // keys that file writes — so `identity.logo` does not typecheck in a fork that
94
+ // omits the field, which is precisely the fork this feature promises a bare
95
+ // header. The assignment (not a cast) is what `satisfies` already guarantees,
96
+ // and it makes every OPTIONAL field readable here. The other constants keep
97
+ // reading `identity` directly, so their literal types are untouched.
98
+ const declared: RawConfig = identity;
99
+
100
+ const PROGRAM_LOGO: readonly string[] = declared.logo ?? [];
101
+
73
102
  export type { DetailLevel, OutputFormat };
74
103
  export {
75
104
  BIN_NAME,
@@ -79,6 +108,7 @@ export {
79
108
  MCP_SERVER_NAME,
80
109
  OUTPUT_FORMATS,
81
110
  PROGRAM_DESCRIPTION,
111
+ PROGRAM_LOGO,
82
112
  PROJECT_CONFIG_FILENAME,
83
113
  RECOVERY_CLI_PREFIX,
84
114
  VERSION,
@@ -112,15 +112,24 @@ describe("identity projection — a fork changes values, not code (PROTECTED)",
112
112
  const { upgradeModule } = await import("./capabilities/upgrade/index.js");
113
113
  const { colophonModule } = await import("./capabilities/colophon/index.js");
114
114
 
115
- const help = formatRootHelp(BIN_NAME, PROGRAM_DESCRIPTION, [
116
- dishList,
117
- ...configModule.verbs,
118
- ...upgradeModule.verbs,
119
- ...colophonModule.verbs,
120
- ]);
115
+ const help = formatRootHelp(
116
+ BIN_NAME,
117
+ PROGRAM_DESCRIPTION,
118
+ [
119
+ dishList,
120
+ ...configModule.verbs,
121
+ ...upgradeModule.verbs,
122
+ ...colophonModule.verbs,
123
+ ],
124
+ "9.9.9",
125
+ "https://recipes.test/issues",
126
+ );
121
127
 
122
128
  expect(help).not.toMatch(THIS_DISTRIBUTION);
123
- expect(help).toMatch(/^recipes — Explore the recipe graph$/m);
129
+ // The fork's own name and its own version — the header stamps the build
130
+ // exactly as `--version` reports it, and neither half names this
131
+ // distribution.
132
+ expect(help).toMatch(/^recipes v9\.9\.9 — Explore the recipe graph$/m);
124
133
  // The pack noun leads the page untitled, and the blurb is not repeated as
125
134
  // a heading three lines under the header that already carries it.
126
135
  expect(help).toMatch(/^Usage: recipes .*\n\n {2}dish\b/m);
@@ -151,29 +160,28 @@ describe("identity projection — a fork changes values, not code (PROTECTED)",
151
160
  expect(text.startsWith("recipes — Explore the recipe graph (")).toBe(true);
152
161
  });
153
162
 
154
- it("greets a first-time user with the fork's issues URL and config file", async () => {
163
+ it("hints at a first-time user in the fork's own name", async () => {
155
164
  process.env.XDG_CONFIG_HOME = mkdtempSync(join(tmpdir(), "identity-"));
156
- const { ensureFirstRun } = await import("./kernel/config/firstRun.js");
165
+ const { setupHintLines } = await import("./kernel/config/firstRun.js");
157
166
  const { globalConfigPath } = await import("./kernel/config/paths.js");
158
167
 
159
- const lines: string[] = [];
160
- await ensureFirstRun((line) => lines.push(line));
161
- const greeting = lines.join("\n");
168
+ const hint = setupHintLines().join("\n");
162
169
 
163
- // Nothing is masked: the resolved config path is IN the greeting, so the
164
- // XDG namespace has to follow the fork's name too or this assertion fails.
165
- expect(greeting).not.toMatch(THIS_DISTRIBUTION);
166
- expect(greeting).toContain(globalConfigPath());
170
+ // The hint names the fork's issues URL and its own setup command; the XDG
171
+ // namespace has to follow the fork's name too or the path assertion fails.
172
+ expect(hint).not.toMatch(THIS_DISTRIBUTION);
167
173
  expect(globalConfigPath()).toContain("/recipes/");
168
- expect(greeting).toContain("https://example.invalid/recipes/issues");
169
- expect(greeting).toContain("`recipes.config.ts`");
174
+ expect(hint).toContain("https://example.invalid/recipes/issues");
175
+ expect(hint).toContain("recipes setup");
170
176
  });
171
177
 
172
178
  it("narrates the colophon the fork declares, titled with the fork's name", async () => {
173
179
  // The toolchain colophon is DECLARED content (`pragma.conf.ts#colophon`),
174
180
  // not authored code: the collector must render the fork's declaration
175
- // under the fork's own name. With no packs declared, the fork's whole
176
- // colophon is its own story. `kind: "pragma"` is asserted AS the literal:
181
+ // under the fork's own name. This is also where the FALLBACK is pinned —
182
+ // the toolchain's own section prints when no pack tells a domain story,
183
+ // and a fork with no packs is the distribution that has none.
184
+ // `kind: "pragma"` is asserted AS the literal:
177
185
  // it is the frozen JSON discriminant every distribution serves (wire
178
186
  // compatibility, like the resource scheme), deliberately NOT derived.
179
187
  process.env.XDG_CONFIG_HOME = mkdtempSync(join(tmpdir(), "identity-"));
@@ -246,11 +254,17 @@ describe("identity projection — a fork changes values, not code (PROTECTED)",
246
254
  const { pragmaMcpEntry } = await import(
247
255
  "./capabilities/setup/operations/setupMcp.js"
248
256
  );
249
- expect(pragmaMcpEntry("/work")).toEqual({
257
+ expect(pragmaMcpEntry("/work", "project")).toEqual({
250
258
  command: "recipes",
251
- args: ["mcp"],
259
+ args: ["mcp", "serve"],
252
260
  cwd: "/work",
253
261
  });
262
+ // The global band omits `cwd` (a per-user server is not project-pinned)
263
+ // but still runs the fork's own binary.
264
+ expect(pragmaMcpEntry("/work", "global")).toEqual({
265
+ command: "recipes",
266
+ args: ["mcp", "serve"],
267
+ });
254
268
  });
255
269
 
256
270
  it("generates a reference that never names this distribution", async () => {
@@ -263,9 +277,10 @@ describe("identity projection — a fork changes values, not code (PROTECTED)",
263
277
  // ONE exemption, the same one the MCP orientation case above makes and for
264
278
  // the same reason: the `pragma:` resource scheme is covenant-frozen PROTOCOL
265
279
  // identity (`surface.v2.json`), inherited by a fork along with the
266
- // `pragma/box` and `pragma/instanceCount` `_meta` keys it travels with, and
267
- // `tools.md` reports it truthfully. Masked from the emitted surface, not by
268
- // a literal, so a leak the kernel authored itself still fails here.
280
+ // `pragma/box`, `pragma/instanceCount` and `pragma/type` `_meta` keys it
281
+ // travels with, and `tools.md` reports it truthfully. Masked from the
282
+ // emitted surface, not by a literal, so a leak the kernel authored itself
283
+ // still fails here.
269
284
  const { emitReference } = await import("./kernel/spec/emitReference.js");
270
285
  const { emitSurface } = await import("./kernel/spec/emitSurface.js");
271
286
  const { capabilities } = await import("./capabilities/index.js");
@@ -65,21 +65,21 @@ _pragma() {
65
65
  # flag names
66
66
  if [[ "$cur" == -* ]]; then
67
67
  case "$noun/$verb" in
68
- block/get) COMPREPLY=($(compgen -W "--view --out --with-meta --note --format --verbose --detail --help" -- "$cur")); return ;;
69
- block/list) COMPREPLY=($(compgen -W "--tags --format --verbose --detail --help" -- "$cur")); return ;;
70
- block/remove) COMPREPLY=($(compgen -W "--dry-run --undo --yes --format --verbose --detail --help" -- "$cur")); return ;;
68
+ block/get) COMPREPLY=($(compgen -W "--view --out --with-meta --note --format --verbose --detail --no-headers --quiet --help" -- "$cur")); return ;;
69
+ block/list) COMPREPLY=($(compgen -W "--tags --format --verbose --detail --no-headers --quiet --help" -- "$cur")); return ;;
70
+ block/remove) COMPREPLY=($(compgen -W "--dry-run --undo --yes --format --verbose --detail --no-headers --quiet --help" -- "$cur")); return ;;
71
71
  esac
72
72
  if [ -z "$noun" ]; then
73
- COMPREPLY=($(compgen -W "--format --verbose --detail --help --version" -- "$cur"))
73
+ COMPREPLY=($(compgen -W "--format --verbose --detail --no-headers --quiet --help --version" -- "$cur"))
74
74
  else
75
- COMPREPLY=($(compgen -W "--format --verbose --detail --help" -- "$cur"))
75
+ COMPREPLY=($(compgen -W "--format --verbose --detail --no-headers --quiet --help" -- "$cur"))
76
76
  fi
77
77
  return
78
78
  fi
79
79
 
80
80
  # nouns
81
81
  if [ -z "$noun" ]; then
82
- COMPREPLY=($(compgen -W "block mcp standard status" -- "$cur"))
82
+ COMPREPLY=($(compgen -W "block standard status" -- "$cur"))
83
83
  return
84
84
  fi
85
85
 
@@ -172,12 +172,14 @@ end
172
172
  complete -c pragma -f
173
173
 
174
174
  # nouns
175
- complete -c pragma -n "__pragma_at ''" -a "block mcp standard status"
175
+ complete -c pragma -n "__pragma_at ''" -a "block standard status"
176
176
 
177
177
  # global flags
178
178
  complete -c pragma -l format -x -a "plain llm json"
179
179
  complete -c pragma -l verbose
180
180
  complete -c pragma -l detail -x -a "summary standard detailed"
181
+ complete -c pragma -l no-headers
182
+ complete -c pragma -l quiet
181
183
  complete -c pragma -l help
182
184
  complete -c pragma -n "__pragma_at ''" -l version
183
185
 
@@ -277,21 +279,21 @@ _pragma() {
277
279
  # flag names
278
280
  if [[ "$cur" == -* ]]; then
279
281
  case "$noun/$verb" in
280
- block/get) compadd -- --view --out --with-meta --note --format --verbose --detail --help; return 0 ;;
281
- block/list) compadd -- --tags --format --verbose --detail --help; return 0 ;;
282
- block/remove) compadd -- --dry-run --undo --yes --format --verbose --detail --help; return 0 ;;
282
+ block/get) compadd -- --view --out --with-meta --note --format --verbose --detail --no-headers --quiet --help; return 0 ;;
283
+ block/list) compadd -- --tags --format --verbose --detail --no-headers --quiet --help; return 0 ;;
284
+ block/remove) compadd -- --dry-run --undo --yes --format --verbose --detail --no-headers --quiet --help; return 0 ;;
283
285
  esac
284
286
  if [[ -z "$noun" ]]; then
285
- compadd -- --format --verbose --detail --help --version
287
+ compadd -- --format --verbose --detail --no-headers --quiet --help --version
286
288
  else
287
- compadd -- --format --verbose --detail --help
289
+ compadd -- --format --verbose --detail --no-headers --quiet --help
288
290
  fi
289
291
  return 0
290
292
  fi
291
293
 
292
294
  # nouns
293
295
  if [[ -z "$noun" ]]; then
294
- compadd -- block mcp standard status
296
+ compadd -- block standard status
295
297
  return 0
296
298
  fi
297
299
 
@@ -16,15 +16,24 @@ describe("runComplete — the __complete pipeline", () => {
16
16
  it("resolves against the live capabilities (storeless static matches)", async () => {
17
17
  await expect(runComplete(["co"], capabilities)).resolves.toEqual([
18
18
  "colophon",
19
+ "concept",
19
20
  "config",
20
21
  ]);
21
22
  // The live `config` sub-verbs, prefix-filtered and sorted by the resolver.
22
- // AV-228 B3 retired the per-field tier/channel/detail verbs, leaving set + show.
23
+ // AV-228 B3 retired the per-field tier/channel/detail verbs; the family is
24
+ // now the four jobs — read all, read one, write one, clear one.
23
25
  await expect(runComplete(["config", ""], capabilities)).resolves.toEqual([
26
+ "get",
24
27
  "set",
25
28
  "show",
29
+ "unset",
26
30
  ]);
27
31
  await expect(runComplete(["mc"], capabilities)).resolves.toEqual(["mcp"]);
32
+ // The server entry completes from its own spec — it used to be injected
33
+ // into the model because the bin served it without one.
34
+ await expect(runComplete(["mcp", ""], capabilities)).resolves.toEqual([
35
+ "serve",
36
+ ]);
28
37
  await expect(runComplete(["--d"], capabilities)).resolves.toEqual([
29
38
  "--detail",
30
39
  ]);
@@ -38,6 +47,7 @@ describe("runComplete — the __complete pipeline", () => {
38
47
  it("strips a leading bin name", async () => {
39
48
  await expect(runComplete(["pragma", "co"], capabilities)).resolves.toEqual([
40
49
  "colophon",
50
+ "concept",
41
51
  "config",
42
52
  ]);
43
53
  });
@@ -93,7 +103,7 @@ describe("runComplete — never-throw guard (PROTECTED)", () => {
93
103
  await runComplete(["co"], capabilities);
94
104
  const lines = write.mock.calls.map((call) => String(call[0]));
95
105
  expect(lines.join("")).toMatch(
96
- /\[complete\] context=noun partial="co" candidates=2 in \d+(\.\d+)?ms/,
106
+ /\[complete\] context=noun partial="co" candidates=3 in \d+(\.\d+)?ms/,
97
107
  );
98
108
  });
99
109
  });
@@ -30,7 +30,7 @@
30
30
  * whole grammar is testable through this one function.
31
31
  */
32
32
 
33
- import type { CapabilityModule } from "../spec/types.js";
33
+ import type { CapabilityModule } from "../spec/index.js";
34
34
  import { emptyNameSource } from "./entitySource.js";
35
35
  import { buildCompletionModel } from "./model.js";
36
36
  import { parseWords } from "./parse.js";
@@ -28,7 +28,7 @@
28
28
  */
29
29
 
30
30
  import { BIN_NAME } from "../../constants.js";
31
- import type { CapabilityModule } from "../spec/types.js";
31
+ import type { CapabilityModule } from "../spec/index.js";
32
32
  import { assertSafeToken, buildCompletionModel } from "./model.js";
33
33
  import { bashScript } from "./templates/bash.js";
34
34
  import { fishScript } from "./templates/fish.js";
@@ -313,7 +313,7 @@ describe("the storeless fast path implements the pointer half", () => {
313
313
  // and would pass with the config file deleted. The read half refusing is
314
314
  // what makes this directory a configured-but-unbuilt project rather than a
315
315
  // fresh install. (`doctor` says so too, in the same words: verified against
316
- // the compiled binary, where `block list` raises STORE_UNAVAILABLE while
316
+ // a cold install, where `block list` raises STORE_UNAVAILABLE while
317
317
  // this same completion still answers.)
318
318
  //
319
319
  // If a later change gives the fast path a config-free way to see
@@ -33,11 +33,13 @@
33
33
  * - The embedded fallback is read from `pack.index.generated` — its OWN
34
34
  * generated module (only the index string) — so the storeless `__complete`
35
35
  * path never EVALUATES the n-quads/schema/manifest strings that live in
36
- * `pack.generated`. It does not avoid parsing them: `bun build --compile`
37
- * emits one script, so the whole embed is parsed at process start on every
38
- * invocation (~+25 ms here, measured on `--version` against a toy-embed
39
- * binary; BUDGETS.md records it). What the split buys is that a completion
40
- * never allocates the 1.87 MB.
36
+ * `pack.generated`. Under the compiled binary it did not avoid PARSING them
37
+ * either — one emitted script meant the whole embed was parsed at process
38
+ * start on every invocation (~+25 ms, measured on `--version`; BUDGETS.md
39
+ * records it), and the split bought only that a completion never allocated
40
+ * the 1.87 MB. Shipping per-module output changed that: `pack.generated` is
41
+ * a separate module the fast path never imports, so it is no longer parsed
42
+ * at all there. The split now buys both.
41
43
  * - The active pack is resolved through `kernel/runtime/paths` — a LEAF module
42
44
  * (node builtins only) that shares the pointer read with `resolveSources`.
43
45
  * `resolveSources` itself is unreachable from here: it pulls the graphpack
@@ -62,7 +64,7 @@ import { discoverSkills } from "../../capabilities/skill/discover.js";
62
64
  // Inlined embedded index — its OWN generated module (only the index string), so
63
65
  // the storeless `__complete` path never pulls the n-quads/schema/manifest
64
66
  // strings that live in `pack.generated.ts`.
65
- import { DEFAULT_PREFIX_MAP } from "../render/prefixes.js";
67
+ import { DEFAULT_PREFIX_MAP } from "../render/index.js";
66
68
  import { indexJson as EMBEDDED_INDEX_JSON } from "../runtime/graphpack/embedded/pack.index.generated.js";
67
69
  import type { PackIndex, PackIndexEntity } from "../runtime/graphpack/types.js";
68
70
  import { packDir, readActivePack } from "../runtime/paths.js";
@@ -156,8 +158,19 @@ function loadActiveIndex(cwd: string): PackIndex | undefined {
156
158
  : readIndexFile(packDir(contentHash));
157
159
  }
158
160
 
159
- /** Whether an entity matches a prefixed type filter (primary type or any type). */
160
- function matchesType(entity: PackIndexEntity, type: string): boolean {
161
+ /**
162
+ * Whether an entity matches a prefixed type filter (primary type or any type).
163
+ *
164
+ * Exported because the MCP resource listing addresses the index by the SAME
165
+ * vocabulary a completion source does (`McpListableRef` reuses
166
+ * `CompletionSourceRef`'s fields), and "which entities is this type?" must be
167
+ * ONE rule — two would let a type list entities its completion refuses.
168
+ *
169
+ * @param entity - The indexed entity to test.
170
+ * @param type - A prefixed type filter; empty matches every entity.
171
+ * @returns Whether the entity carries that type.
172
+ */
173
+ export function matchesType(entity: PackIndexEntity, type: string): boolean {
161
174
  if (!type) return true;
162
175
  if (entity.type === type) return true;
163
176
  return Array.isArray(entity.types) && entity.types.includes(type);