@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,27 +1,44 @@
1
1
  /**
2
- * The ONE source of truth for prompt entities — read TWO ways from ONE KG type
3
- * (`ds:Prompt`), so the native MCP `prompts/*` surface and the covenant
4
- * `prompt_list`/`prompt_lookup` content tools never diverge.
2
+ * The ONE source of truth for prompt entities — read TWO ways from ONE KG type,
3
+ * so the native MCP `prompts/*` surface and the covenant `prompt_list`/
4
+ * `prompt_lookup` content tools never diverge.
5
5
  *
6
- * A `ds:Prompt` is authored as:
7
- * ds:prompt.x a ds:Prompt ;
8
- * rdfs:label "x" ; # the prompt NAME (indexed → storeless list)
9
- * rdfs:comment "…" ; # the description (indexed)
10
- * ds:promptBody "…" ; # the template body (store-backed)
11
- * ds:promptArgument [ ds:argName "a" ; rdfs:comment "…" ; ds:argRequired true ] .
6
+ * The type and its four properties are DECLARED by the distribution
7
+ * (`kernel/vocabulary.ts`), not named here — this module knows the shape of a
8
+ * prompt, not whose prompt it is. With `<type>`/`<body>`/`<argument>`/
9
+ * `<argName>`/`<argRequired>` standing for the declared terms, a prompt entity
10
+ * is authored as:
11
+ *
12
+ * ex:prompt.x a <type> ;
13
+ * rdfs:label "x" ; # the prompt NAME (indexed → storeless list)
14
+ * rdfs:comment "…" ; # the description (indexed)
15
+ * <body> "…" ; # the template body (store-backed)
16
+ * <argument> [ <argName> "a" ; rdfs:comment "…" ; <argRequired> true ] .
12
17
  *
13
18
  * Listing is STORELESS (over the pack index — `label`/`description` are indexed),
14
19
  * so `prompts/list` and native discovery cost nothing until a `get`. A `get`
15
- * (body + arguments) is STORE-BACKED through the SPARQL facade — identical
16
- * laziness to the resource browser (list storeless, read store-backed). An empty
17
- * or missing index yields zero prompts (never a store boot on the list path).
20
+ * (body + arguments) is STORE-BACKED through `runSelect` — identical laziness to
21
+ * the resource browser (list storeless, read store-backed). An empty or missing
22
+ * index yields zero prompts (never a store boot on the list path).
23
+ *
24
+ * The store-backed reads route through `runSelect` and DO NOT catch. A cold
25
+ * store is already refused upstream — the tools are `needsStore`, and the native
26
+ * provider calls `guardStore()` first — so a swallowed failure here could only
27
+ * ever hide a real one, reporting a broken query as an empty graph. `runSelect`
28
+ * classifies an unbound prefix as STORE_UNAVAILABLE with its `sources update`
29
+ * recovery and lets everything else propagate.
18
30
  */
19
31
 
20
32
  import { readPackIndex } from "../../../completion/entitySource.js";
21
- import type { PragmaRuntime } from "../../../runtime/types.js";
33
+ import { runSelect } from "../../../packs/sparql/index.js";
34
+ import type { PackRow } from "../../../packs/types.js";
35
+ import { distributionSource } from "../../../packs/types.js";
36
+ import type { PragmaRuntime } from "../../../runtime/index.js";
37
+ import type { SourcesDecision } from "../../../runtime/resolveSources.js";
38
+ import { VOCABULARY } from "../../../vocabulary.js";
22
39
 
23
- /** The KG type (prefixed) every prompt entity carries. */
24
- export const PROMPT_TYPE = "ds:Prompt";
40
+ /** The declared prompt terms this module reads the graph with. */
41
+ const PROMPT = VOCABULARY.prompt;
25
42
 
26
43
  /** One declared argument of a prompt template. */
27
44
  export interface PromptArgument {
@@ -42,27 +59,29 @@ export interface PromptEntry extends PromptSummary {
42
59
  readonly arguments: readonly PromptArgument[];
43
60
  }
44
61
 
45
- /** Whether an index entity is a `ds:Prompt` (primary type or any type). */
62
+ /** Whether an index entity carries the prompt type (primary type or any type). */
46
63
  function isPromptEntity(entity: {
47
64
  type: string;
48
65
  types?: readonly string[];
49
66
  }): boolean {
50
67
  return (
51
- entity.type === PROMPT_TYPE ||
52
- (Array.isArray(entity.types) && entity.types.includes(PROMPT_TYPE))
68
+ entity.type === PROMPT.type ||
69
+ (Array.isArray(entity.types) && entity.types.includes(PROMPT.type))
53
70
  );
54
71
  }
55
72
 
56
73
  /**
57
- * List prompt summaries STORELESSLY from the active pack index. Returns `[]`
58
- * when no index is reachable or the index carries no prompts — never boots the
59
- * store.
74
+ * List prompt summaries STORELESSLY from the index of the pack the boot decision
75
+ * names. Returns `[]` when no index is reachable (including an unavailable
76
+ * store) or the index carries no prompts — never boots the store.
60
77
  *
61
- * @param rt - The per-invocation runtime (for `cwd`).
78
+ * @param decision - The boot decision from `resolveSources`.
62
79
  * @returns Prompt summaries (name from the entity label, sorted by name).
63
80
  */
64
- export function listPromptSummaries(rt: PragmaRuntime): PromptSummary[] {
65
- const index = readPackIndex(rt.cwd);
81
+ export function listPromptSummaries(
82
+ decision: SourcesDecision,
83
+ ): PromptSummary[] {
84
+ const index = readPackIndex(decision);
66
85
  if (!index || !Array.isArray(index.entities)) return [];
67
86
  const summaries: PromptSummary[] = [];
68
87
  for (const entity of index.entities) {
@@ -76,21 +95,6 @@ export function listPromptSummaries(rt: PragmaRuntime): PromptSummary[] {
76
95
  return summaries.sort((a, b) => a.name.localeCompare(b.name));
77
96
  }
78
97
 
79
- /**
80
- * Rows the prompt SELECT returns (one per argument; body repeats). The facade's
81
- * SELECT bindings are keyed by variable name with PLAIN string values (an
82
- * unbound OPTIONAL variable is simply absent) — the same shape `runSelect`
83
- * consumes.
84
- */
85
- interface PromptRow {
86
- readonly name?: string;
87
- readonly description?: string;
88
- readonly body?: string;
89
- readonly argName?: string;
90
- readonly argDescription?: string;
91
- readonly argRequired?: string;
92
- }
93
-
94
98
  /** The SPARQL that materializes prompts (all, or one when `label` is bound). */
95
99
  function promptQuery(labelFilter?: string): string {
96
100
  const filter = labelFilter
@@ -98,24 +102,28 @@ function promptQuery(labelFilter?: string): string {
98
102
  : "";
99
103
  return [
100
104
  "SELECT ?name ?description ?body ?argName ?argDescription ?argRequired WHERE {",
101
- " ?prompt a ds:Prompt ;",
105
+ ` ?prompt a ${PROMPT.type} ;`,
102
106
  " rdfs:label ?name .",
103
107
  filter,
104
108
  " OPTIONAL { ?prompt rdfs:comment ?description }",
105
- " OPTIONAL { ?prompt ds:promptBody ?body }",
109
+ ` OPTIONAL { ?prompt ${PROMPT.body} ?body }`,
106
110
  " OPTIONAL {",
107
- " ?prompt ds:promptArgument ?arg .",
108
- " ?arg ds:argName ?argName .",
111
+ ` ?prompt ${PROMPT.argument} ?arg .`,
112
+ ` ?arg ${PROMPT.argName} ?argName .`,
109
113
  " OPTIONAL { ?arg rdfs:comment ?argDescription }",
110
- " OPTIONAL { ?arg ds:argRequired ?argRequired }",
114
+ ` OPTIONAL { ?arg ${PROMPT.argRequired} ?argRequired }`,
111
115
  " }",
112
116
  "}",
113
117
  "ORDER BY ?name ?argName",
114
118
  ].join("\n");
115
119
  }
116
120
 
117
- /** Fold SELECT rows (one per argument) into distinct {@link PromptEntry}s. */
118
- function foldPromptRows(rows: readonly PromptRow[]): PromptEntry[] {
121
+ /**
122
+ * Fold SELECT rows (one per argument; the body repeats) into distinct
123
+ * {@link PromptEntry}s. Rows are keyed by SELECT variable name with plain string
124
+ * values, and an unbound OPTIONAL variable is simply absent.
125
+ */
126
+ function foldPromptRows(rows: readonly PackRow[]): PromptEntry[] {
119
127
  const byName = new Map<
120
128
  string,
121
129
  { description?: string; body: string; args: Map<string, PromptArgument> }
@@ -151,27 +159,19 @@ function foldPromptRows(rows: readonly PromptRow[]): PromptEntry[] {
151
159
  .sort((a, b) => a.name.localeCompare(b.name));
152
160
  }
153
161
 
154
- /** Extract the SELECT binding rows from a facade query result. */
155
- function selectRows(result: unknown): PromptRow[] {
156
- const typed = result as { type?: string; bindings?: unknown };
157
- if (typed.type !== "select" || !Array.isArray(typed.bindings)) return [];
158
- return typed.bindings as PromptRow[];
159
- }
160
-
161
162
  /**
162
- * Read every prompt entity STORE-BACKED (body + arguments). Boots the store via
163
- * the SPARQL facade; returns `[]` on any query failure (graceful degradation).
163
+ * Read every prompt entity STORE-BACKED (body + arguments).
164
164
  *
165
165
  * @param rt - The per-invocation runtime.
166
166
  * @returns The materialized prompt entries, sorted by name.
167
+ * @throws PragmaError STORE_UNAVAILABLE when the store cannot answer; any other
168
+ * query failure propagates, so a broken read is never an empty graph.
169
+ * @note Impure — boots the store through `runSelect`.
167
170
  */
168
171
  export async function readPrompts(rt: PragmaRuntime): Promise<PromptEntry[]> {
169
- try {
170
- const result = await rt.query.sparql(promptQuery());
171
- return foldPromptRows(selectRows(result));
172
- } catch {
173
- return [];
174
- }
172
+ return foldPromptRows(
173
+ await runSelect(rt, promptQuery(), distributionSource("prompt")),
174
+ );
175
175
  }
176
176
 
177
177
  /**
@@ -179,16 +179,17 @@ export async function readPrompts(rt: PragmaRuntime): Promise<PromptEntry[]> {
179
179
  *
180
180
  * @param rt - The per-invocation runtime.
181
181
  * @param name - The prompt name (its `rdfs:label`).
182
- * @returns The materialized prompt, or `undefined` when not found.
182
+ * @returns The materialized prompt, or `undefined` when the graph has no such
183
+ * prompt — a genuine miss, never a failed read.
184
+ * @throws PragmaError STORE_UNAVAILABLE when the store cannot answer; any other
185
+ * query failure propagates.
186
+ * @note Impure — boots the store through `runSelect`.
183
187
  */
184
188
  export async function readPrompt(
185
189
  rt: PragmaRuntime,
186
190
  name: string,
187
191
  ): Promise<PromptEntry | undefined> {
188
- try {
189
- const result = await rt.query.sparql(promptQuery(name));
190
- return foldPromptRows(selectRows(result))[0];
191
- } catch {
192
- return undefined;
193
- }
192
+ return foldPromptRows(
193
+ await runSelect(rt, promptQuery(name), distributionSource("prompt")),
194
+ ).at(0);
194
195
  }
@@ -7,21 +7,23 @@
7
7
  * capability, and a mutating verb gains the plan-first `confirm` flow: without
8
8
  * `confirm`, the verb's `Task` is dry-run and a plan is returned
9
9
  * (`{ planOnly: true, confirmRequired: true }`); with `confirm: true`, it runs
10
- * for real.
10
+ * for real. That plan is rendered through the SAME shared effect formatter the
11
+ * CLI preview uses, so the agent-facing and human-facing surfaces describe one
12
+ * plan rather than two views of it.
11
13
  */
12
14
 
13
15
  import { statSync } from "node:fs";
14
16
  import { isAbsolute } from "node:path";
15
- import { describeEffect, dryRun, type Task } from "@canonical/task";
16
- import { runTask } from "@canonical/task/node";
17
+ import { describeEffect, type Task } from "@canonical/task";
18
+ import { runPreview, runTask } from "@canonical/task/node";
17
19
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
18
20
  import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
19
21
  import { z } from "zod";
20
22
  import { asPragmaError } from "../../error/fromTaskError.js";
21
- import { PragmaError } from "../../error/PragmaError.js";
23
+ import { PragmaError } from "../../error/index.js";
22
24
  import type { InteractionRuntime, PragmaRuntime } from "../../runtime/types.js";
23
- import { toolName } from "../../spec/emitSurface.js";
24
- import type { McpAnnotations, ParamSpec, VerbSpec } from "../../spec/types.js";
25
+ import type { McpAnnotations, ParamSpec, VerbSpec } from "../../spec/index.js";
26
+ import { toolName } from "../../spec/index.js";
25
27
  import { toolError, toolSuccess } from "./envelope.js";
26
28
 
27
29
  /**
@@ -190,7 +192,7 @@ function mutateHandler(verb: VerbSpec, runtime: PragmaRuntime) {
190
192
  const mutationRuntime: PragmaRuntime = {
191
193
  ...runtime,
192
194
  cwd: effectiveCwd,
193
- mutation: { preview },
195
+ mutation: { preview, undo: false },
194
196
  interaction,
195
197
  };
196
198
  const task = await Promise.resolve(
@@ -199,10 +201,53 @@ function mutateHandler(verb: VerbSpec, runtime: PragmaRuntime) {
199
201
  | Promise<Task<unknown>>,
200
202
  );
201
203
  if (preview) {
202
- const plan = dryRun(task)
203
- .effects.filter((effect) => effect._tag !== "Prompt")
204
- .map(describeEffect);
205
- return toolSuccess({ plan }, { planOnly: true, confirmRequired: true });
204
+ // The HONEST preview (PR7), the same interpreter `--dry-run` uses:
205
+ // reads are real, writes are recorded and never executed. A tool call
206
+ // whose confirmed run would fail now returns that error instead of a
207
+ // confident plan, so plan-first predicts rather than reassures.
208
+ //
209
+ // NO `onLog`: a preview that PERFORMS an effect is not a preview of
210
+ // that effect, and the recorded `Log`s are already about to be listed.
211
+ // The interpreter prints nothing of its own when it is absent.
212
+ const previewExec = mutationRuntime.exec ?? {};
213
+ try {
214
+ const { effects } = await runPreview(task, {
215
+ cwd: previewExec.cwd,
216
+ onEffectStart: previewExec.onEffectStart,
217
+ });
218
+ // This payload is read by an LLM on a token budget, so it carries
219
+ // the plan a person is shown rather than the interpreter's
220
+ // transcript: the same `visiblePlanEffects` filter the CLI preview
221
+ // applies, from the same module. Without it every internal
222
+ // `Check exists:` and every repeat of the output directory spent
223
+ // tokens burying the real artifacts.
224
+ //
225
+ // The FILTER is what the surfaces share; the ROW FORMAT is not.
226
+ // These strings are structured data, so they stay `describeEffect` —
227
+ // the description `@canonical/task` gives its own effects, which
228
+ // carries byte counts, has no terminal chrome, and cannot embed an
229
+ // ANSI escape however the editor that spawned this server configured
230
+ // colour. That also lets the CLI's `--format json` plan and this one
231
+ // be compared string for string, which is the A6 invariant.
232
+ //
233
+ // Loaded lazily, and from the LIGHT `/format` subpath: the kernel
234
+ // keeps summon-core proper (and React) off its static import graph.
235
+ const { visiblePlanEffects } = await import(
236
+ "@canonical/summon-core/format"
237
+ );
238
+ const plan = visiblePlanEffects(
239
+ effects,
240
+ runtime.globalFlags.verbose === true,
241
+ ).map(describeEffect);
242
+ return toolSuccess(
243
+ { plan },
244
+ { planOnly: true, confirmRequired: true },
245
+ );
246
+ } finally {
247
+ // No `store.invalidate()`: a preview cannot have changed disk. Only
248
+ // the verb's own teardown (e.g. an interactive session) runs here.
249
+ await previewExec.dispose?.();
250
+ }
206
251
  }
207
252
  // Real execution: spread the verb's runner options (prompt handler,
208
253
  // stamping) into the interpreter; run teardown afterwards.
@@ -8,15 +8,16 @@
8
8
  */
9
9
 
10
10
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
11
- import { loadEffectiveModules } from "../../packs/collect.js";
12
- import type { CapabilityModule } from "../../spec/types.js";
11
+ import { loadEffectiveModules } from "../../packs/index.js";
12
+ import type { CapabilityModule } from "../../spec/index.js";
13
13
  import { buildServer } from "./buildServer.js";
14
14
 
15
15
  /**
16
16
  * Build the MCP server and serve it over stdio until the transport closes.
17
17
  *
18
- * The server is a real invocation (not a fast path), so it merges config-declared
19
- * story packs into the static capabilities before projecting the tool surface.
18
+ * The server is a real invocation (not a fast path), so it merges the package-
19
+ * and config-declared story packs into the static capabilities before projecting
20
+ * the tool surface.
20
21
  *
21
22
  * @param modules - The static capability modules to project.
22
23
  * @param cwd - The working directory for the server's runtime.
@@ -28,7 +29,14 @@ export async function serveMcp(
28
29
  ): Promise<void> {
29
30
  const dir = cwd ?? process.cwd();
30
31
  const effective = await loadEffectiveModules(modules, dir);
31
- const server = await buildServer(effective, dir);
32
+ // stderr only — the stdio transport owns stdout, so naming an unusable
33
+ // package story here is safe and reaches the host's server log.
34
+ for (const problem of effective.problems) {
35
+ process.stderr.write(
36
+ `Ignored story ${problem.source}: ${problem.message}\n`,
37
+ );
38
+ }
39
+ const server = await buildServer(effective.modules, dir);
32
40
  const transport = new StdioServerTransport();
33
41
  await server.connect(transport);
34
42
  }
@@ -2,7 +2,7 @@
2
2
  * MCP tool descriptions carry NO CLI-syntax leaks (a PR8 doc→MCP residue).
3
3
  *
4
4
  * A verb's `doc` doubles as its MCP tool description (`registerVerb`), so a doc
5
- * authored in CLI terms leaks flags an agent can't use — `--all-tiers`,
5
+ * authored in CLI terms leaks flags an agent can't use — `--category`,
6
6
  * `--dry-run`/`--yes`, or a `pragma …` shell command — into the agent-facing
7
7
  * catalog. Tool descriptions are NOT frozen in the covenant, so this is the guard
8
8
  * against the leak (and its recurrence). Storeless: listing tools never boots the
@@ -68,7 +68,11 @@ describe("MCP tool descriptions — no CLI-syntax leaks (doc→MCP residue)", ()
68
68
  const byName = new Map(
69
69
  descriptions.map((tool) => [tool.name, tool.description]),
70
70
  );
71
- expect(byName.get("block_list")).not.toContain("--all-tiers");
71
+ // `block_list` was the original leak site (`--all-tiers`); L-OPEN-9 removed
72
+ // the flag AND made the description declared content (`toolDescription` in
73
+ // pragma.conf.ts), so the guard widens to "no CLI flag of any name" — the
74
+ // failure mode a re-authored story description could reintroduce.
75
+ expect(byName.get("block_list")).not.toMatch(/--[a-z]/);
72
76
  expect(byName.get("graph_query")).not.toContain("pragma ontology list");
73
77
  expect(byName.get("setup")).not.toMatch(/--dry-run|--yes/);
74
78
  expect(byName.get("upgrade")).not.toContain("--dry-run");
@@ -47,8 +47,9 @@ exports[`render matrix (list/lookup/empty × plain/llm/json × detail) > renders
47
47
 
48
48
  - \`ds:Button\` — **Button** component | Primary action
49
49
  - \`ds:Card\` — **Card** pattern",
50
- "plain": "ds:Button Button component Primary action
51
- ds:Card Card pattern",
50
+ "plain": "URI NAME KIND NOTE
51
+ ds:Button Button component Primary action
52
+ ds:Card Card pattern -",
52
53
  },
53
54
  "lookup": {
54
55
  "json": "{"uri":"https://ds.canonical.com/Button","name":"Button","kind":"component","note":"Primary action"}",
@@ -82,7 +83,8 @@ Note:
82
83
 
83
84
  - **Button** component
84
85
  - **Card** pattern",
85
- "plain": "Button component
86
+ "plain": "NAME KIND
87
+ Button component
86
88
  Card pattern",
87
89
  },
88
90
  "lookup": {
@@ -109,7 +111,8 @@ Card pattern",
109
111
 
110
112
  - **Button**
111
113
  - **Card**",
112
- "plain": "Button
114
+ "plain": "NAME
115
+ Button
113
116
  Card",
114
117
  },
115
118
  "lookup": {
@@ -7,6 +7,27 @@
7
7
  * option bags and hand them to {@link renderers}.
8
8
  */
9
9
 
10
+ /**
11
+ * Presentation context the dispatcher threads into a verb's PLAIN formatter.
12
+ *
13
+ * Only list-shaped formatters read it: the header row is a plain-table
14
+ * concern (`llm` is the byte-frozen agent contract, `json` the envelope), so
15
+ * rather than a second formatter family the plain formatter takes this
16
+ * optional second argument. Absent context reads as an interactive terminal
17
+ * with headers on — the shape every pre-existing caller assumed.
18
+ */
19
+ export interface RenderContext {
20
+ /** False when `--no-headers` suppressed the list header row. */
21
+ readonly headers: boolean;
22
+ /**
23
+ * Whether stdout is an interactive terminal. A piped plain EMPTY list
24
+ * prints its header row as a zero-record table so field-splitting
25
+ * consumers stay well-formed; a terminal prints nothing (the empty notice
26
+ * goes to stderr).
27
+ */
28
+ readonly stdoutIsTty: boolean;
29
+ }
30
+
10
31
  /** A single column in a list rendering. */
11
32
  export interface ColumnDef<T> {
12
33
  readonly key: keyof T & string;
@@ -4,8 +4,10 @@
4
4
  * A verb renders at one of {@link DETAIL_LEVELS}. The effective level is chosen
5
5
  * from four sources, most specific first: the `--detail` flag, the resolved
6
6
  * config's `detail`, the verb's own `disclosure.default`, and finally the
7
- * built-in `"standard"`. Unknown values (a stale config, a typo) fall back to
8
- * the default rather than erroring, so output never fails on disclosure.
7
+ * built-in `"standard"`. Every source is validated upstream (the flag by
8
+ * `readDetail`, the config field by `z.enum` at load, a spec default by the
9
+ * pack grammar), so the fall-back here is a last belt against a source added
10
+ * later without validation — output never fails on disclosure.
9
11
  */
10
12
 
11
13
  import {
@@ -8,9 +8,8 @@
8
8
  * pair — is what makes CLI-JSON and MCP output provably identical.
9
9
  */
10
10
 
11
- import type { PragmaError } from "../error/PragmaError.js";
12
- import { serializeError } from "../error/serialize.js";
13
- import type { ErrorPayload } from "../error/types.js";
11
+ import type { ErrorPayload, PragmaError } from "../error/index.js";
12
+ import { serializeError } from "../error/index.js";
14
13
 
15
14
  /** The success envelope: an agent branches on `ok` before reading `data`. */
16
15
  export interface SuccessEnvelope {
@@ -10,7 +10,7 @@
10
10
  */
11
11
 
12
12
  import type { GlobalFlags } from "../runtime/types.js";
13
- import type { Formatters } from "../spec/types.js";
13
+ import type { Formatters } from "../spec/index.js";
14
14
 
15
15
  /**
16
16
  * Pick the formatter for the active output mode.
@@ -0,0 +1,36 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { embeddedManifest } from "../runtime/graphpack/embedded.js";
3
+ import { DEFAULT_PREFIX_MAP } from "./prefixes.js";
4
+
5
+ describe("DEFAULT_PREFIX_MAP", () => {
6
+ it("is the standard RDF vocabulary plus the distribution's declared namespaces", () => {
7
+ // A literal pin, not a re-derivation: the point is that editing
8
+ // `pragma.conf.ts`'s `prefixes` is what moves this map, and that the
9
+ // standard half stays kernel-owned. A reviewer reads the values here.
10
+ expect(DEFAULT_PREFIX_MAP).toEqual({
11
+ rdfs: "http://www.w3.org/2000/01/rdf-schema#",
12
+ owl: "http://www.w3.org/2002/07/owl#",
13
+ skos: "http://www.w3.org/2004/02/skos/core#",
14
+ ds: "https://ds.canonical.com/",
15
+ cs: "http://pragma.canonical.com/codestandards#",
16
+ });
17
+ });
18
+
19
+ it("binds every prefix to the same IRI the shipped pack does", () => {
20
+ // Two independently produced maps: this compiled-in constant, and the
21
+ // committed embedded artifact's harvested manifest. Neither derives the
22
+ // other, so agreement is a real claim.
23
+ //
24
+ // It is also the guard against a silent bundler skip. `scripts/bundle.ts`
25
+ // writes nothing when the content hash matches, and that hash covers pack
26
+ // SOURCES only — so declaring a namespace in `pragma.conf.ts` cannot, by
27
+ // itself, make the shipped pack bind it. Without this test that mismatch
28
+ // shows up as entities compacting to nothing; with it, it fails here.
29
+ const shipped = embeddedManifest().prefixes;
30
+ for (const [prefix, namespace] of Object.entries(DEFAULT_PREFIX_MAP)) {
31
+ expect(shipped[prefix], `pack binding for \`${prefix}:\``).toBe(
32
+ namespace,
33
+ );
34
+ }
35
+ });
36
+ });
@@ -1,21 +1,48 @@
1
1
  /**
2
- * The default display-compaction prefix set.
2
+ * The compiled-in prefix map — the CLI's prefixed↔full translation table.
3
3
  *
4
- * A minimal port of the v1 prefix map: only the namespaces the renderers use
5
- * to compact IRIs in output. The store's query prefix map (which layers in
6
- * package- and config-declared prefixes) is a store concern and joins when the
7
- * first store-backed capability lands — this display set is intentionally
8
- * small and static so the render layer stays store-free.
4
+ * NOT only display compaction, despite the name this module used to carry.
5
+ * Three readers make it behavioural, and every one of them predates any store:
6
+ * - `render/compactUri.ts` shortens IRIs for output.
7
+ * - `packs/iri.ts#resolveUri` expands a user-typed prefixed name into the IRI a
8
+ * generated SPARQL read filters on, so a namespace missing here makes
9
+ * `<noun> lookup <prefix>:<local>` fail with "Invalid prefix".
10
+ * - `packs/graphql/fetchGraphqlLookup.ts#expandPrefixed` expands the prefixed
11
+ * values a GraphQL lookup returns, so a namespace missing here silently
12
+ * leaks the *unexpanded* token into a field documented as a full IRI.
13
+ *
14
+ * Two halves, one map. The W3C namespaces below are universal vocabulary, so
15
+ * the kernel names them. The DOMAIN namespaces are the distribution's, so they
16
+ * are read from `pragma.conf.ts`'s `prefixes` — the same declaration that pins
17
+ * what `sources update` builds the store with, so what the CLI compacts and
18
+ * what the graph is indexed under cannot drift apart. `render/prefixes.test.ts`
19
+ * pins that agreement against the shipped pack's own manifest.
20
+ *
21
+ * The asymmetry, stated plainly: a PROJECT layer's `prefixes` reach the pack it
22
+ * builds — hence that pack's store session and index — but never this map. This
23
+ * is a compiled-in presentation default, read on the storeless `--help`/
24
+ * `__complete` fast path where no config layer is reachable at all.
9
25
  */
10
26
 
11
- /**
12
- * Namespaces compacted in list/lookup output. Keys are the prefixes shown to
13
- * the user (`ds:Button`); values are the absolute namespace IRIs matched.
14
- */
15
- export const DEFAULT_PREFIX_MAP: Readonly<Record<string, string>> = {
16
- ds: "https://ds.canonical.com/",
17
- cs: "http://pragma.canonical.com/codestandards#",
27
+ import conf from "../../../pragma.conf.js";
28
+
29
+ /** Standard RDF vocabulary — the same IRIs in every graph, domain or not. */
30
+ const STANDARD_PREFIXES: Readonly<Record<string, string>> = {
18
31
  rdfs: "http://www.w3.org/2000/01/rdf-schema#",
19
32
  owl: "http://www.w3.org/2002/07/owl#",
20
33
  skos: "http://www.w3.org/2004/02/skos/core#",
21
34
  };
35
+
36
+ /**
37
+ * Namespaces compacted and expanded across the CLI. Keys are the prefixes shown
38
+ * to the user (`rdfs:label`); values are the absolute namespace IRIs matched.
39
+ *
40
+ * The standard half is spread LAST so it wins a collision: `rdfs` means the
41
+ * same thing in every graph, and the kernel hardcodes those IRIs elsewhere
42
+ * (`buildIndex`'s label predicates, the prompt SELECT), so letting a
43
+ * declaration rebind them here would split one prefix across two meanings.
44
+ */
45
+ export const DEFAULT_PREFIX_MAP: Readonly<Record<string, string>> = {
46
+ ...conf.prefixes,
47
+ ...STANDARD_PREFIXES,
48
+ };