@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
@@ -1,3 +1,4 @@
1
+ import { ISSUES_URL } from "../../constants.js";
1
2
  import type { ErrorCode, PragmaErrorData, Recovery } from "./types.js";
2
3
 
3
4
  /**
@@ -168,13 +169,14 @@ class PragmaError extends Error {
168
169
  * Factory: unexpected internal failure (a bug).
169
170
  *
170
171
  * @param reason - Description of the internal error.
171
- * @returns PragmaError with code `INTERNAL_ERROR` and a "please report" hint.
172
+ * @returns PragmaError with code `INTERNAL_ERROR` and a report-this hint
173
+ * naming the issue tracker.
172
174
  */
173
175
  static internalError(reason: string): PragmaError {
174
176
  return new PragmaError({
175
177
  code: "INTERNAL_ERROR",
176
178
  message: `Internal error: ${reason}`,
177
- recovery: { message: "Please report this issue." },
179
+ recovery: { message: `Report this issue at ${ISSUES_URL}.` },
178
180
  });
179
181
  }
180
182
  }
@@ -25,11 +25,13 @@ const ERROR_CODES = [
25
25
  "CONFIG_ERROR",
26
26
  "INTERNAL_ERROR",
27
27
  // A runtime condition that is NOT a bug and NOT a usage mistake, so it must
28
- // NOT collapse to INTERNAL_ERROR's "please report this issue": a capability
29
- // genuinely unavailable in this build/environment (`create package` /
30
- // `create application` in the compiled binary, whose generators read their
31
- // templates from disk rather than through the embedded manifest —
32
- // `create component` reads through it and runs), OR an external command
28
+ // NOT collapse to INTERNAL_ERROR's "report this issue": a capability
29
+ // genuinely unavailable in this environment (`create` refusing when its
30
+ // lazily-imported generator runtime cannot be loaded at all — the
31
+ // module-not-found backstop in `capabilities/create/create.verb.ts`, which
32
+ // means the `@canonical/summon-*` dependencies could not be resolved, i.e. a
33
+ // broken or pruned install; every declared generator otherwise runs
34
+ // everywhere), OR an external command
33
35
  // that RAN and failed for a fixable environment reason (a denied global
34
36
  // `npm i -g`, a network/registry failure — see `shared/assertExecOk`). Both
35
37
  // carry an actionable recovery and map to the generic runtime exit 1.
@@ -6,7 +6,7 @@
6
6
  * `MISSING_REQUIRED_ANSWER` / `GENERATOR_INVALID_ANSWER` for absent or invalid
7
7
  * non-interactive answers. `runTask` rethrows these as a `TaskExecutionError`
8
8
  * carrying `.code`. Without a bridge the CLI/MCP boundary collapses every
9
- * non-`PragmaError` to INTERNAL_ERROR + "please report this issue" — telling a
9
+ * non-`PragmaError` to INTERNAL_ERROR + "report this issue" — telling a
10
10
  * user to file a bug for cancelling their own scaffold.
11
11
  *
12
12
  * The codes are matched as STRING LITERALS, never imported from summon-core, so
@@ -62,15 +62,37 @@ export function isInterruption(error: unknown): boolean {
62
62
  return taskErrorCode(error) === TASK_INTERRUPTED;
63
63
  }
64
64
 
65
+ /**
66
+ * The {@link PragmaError} a task failure CARRIES, if any. A task-layer failure
67
+ * raised through the failure channel (`failPragma` — so an enclosing `recover`
68
+ * such as setup's per-step isolation can catch it, which a synchronous throw
69
+ * bypasses) stores the original PragmaError as the TaskError's `cause`;
70
+ * `runTask` then wraps that TaskError in a `TaskExecutionError` whose
71
+ * `taskError` carries it. Walk both wrappers (bounded — the shapes nest at
72
+ * most a few levels) so the boundary recovers the ORIGINAL error with its
73
+ * code, message, and recovery intact.
74
+ */
75
+ function carriedPragmaError(error: unknown): PragmaError | undefined {
76
+ let current: unknown = error;
77
+ for (let depth = 0; depth < 4 && current !== undefined; depth += 1) {
78
+ if (current instanceof PragmaError) return current;
79
+ const record = current as { taskError?: unknown; cause?: unknown } | null;
80
+ current = record?.taskError ?? record?.cause;
81
+ }
82
+ return undefined;
83
+ }
84
+
65
85
  /**
66
86
  * Coerce a thrown value into a {@link PragmaError} for the CLI/MCP boundary,
67
- * bridging summon-core task-error codes: absent/invalid non-interactive answers
68
- * become INVALID_INPUT (a usage error, exit 2); a `PragmaError` passes through
69
- * unchanged; everything else stays INTERNAL_ERROR. Cancellation is handled
70
- * separately by {@link isCancellation} as a clean, non-error outcome.
87
+ * bridging summon-core task-error codes: a `PragmaError` (direct, or carried
88
+ * through the task failure channel as a TaskError `cause`) passes through
89
+ * unchanged; absent/invalid non-interactive answers become INVALID_INPUT (a
90
+ * usage error, exit 2); everything else stays INTERNAL_ERROR. Cancellation is
91
+ * handled separately by {@link isCancellation} as a clean, non-error outcome.
71
92
  */
72
93
  export function asPragmaError(error: unknown): PragmaError {
73
- if (error instanceof PragmaError) return error;
94
+ const carried = carriedPragmaError(error);
95
+ if (carried !== undefined) return carried;
74
96
  const message = error instanceof Error ? error.message : String(error);
75
97
  const code = taskErrorCode(error);
76
98
  if (code !== undefined && ANSWER_USAGE_CODES.has(code)) {
@@ -10,6 +10,20 @@
10
10
  * that were actually wrong were raw `cli:` object literals that never reached
11
11
  * this function at all. `kernel/copy.test.ts` covers those, at the position.
12
12
  *
13
+ * A THIRD authoring route is also legal and reached by NEITHER guard: a `cli`
14
+ * DERIVED from the program's own name at the call site. One site does this —
15
+ * the create mount (`capabilities/create/mount.ts`,
16
+ * `[...detail.chain, suggestion].join(" ")`), whose `chain[0]` is the root
17
+ * Commander program's name, `BIN_NAME` by wiring. It bypasses
18
+ * {@link cliRecovery}, and the position rule is structurally blind to it (it
19
+ * flags QUOTED literals containing the distribution's name, never a computed
20
+ * expression) — so D5 holds there by derivation, and the derivation is pinned
21
+ * where the value surfaces: `createGrammar.test.ts` COMPOSES its expected
22
+ * `cli` from {@link RECOVERY_CLI_PREFIX}, so a renamed root program reddens
23
+ * the cell naming the constant. (A separate `startsWith` assertion cannot
24
+ * pin it — behind an exact pin of the same value it has no reachable
25
+ * failing input.)
26
+ *
13
27
  * `kernel/packs/schema.ts` holds a user-authored pack's `emptyRecovery.cli` to
14
28
  * the same shape from the other side — it must NOT carry a prefix, because the
15
29
  * consuming distribution's renderer supplies one.
@@ -7,6 +7,7 @@
7
7
  * whichever transport they use.
8
8
  */
9
9
 
10
+ import type { OutputFormat } from "../../constants.js";
10
11
  import type { PragmaError } from "./PragmaError.js";
11
12
  import { serializeError } from "./serialize.js";
12
13
 
@@ -98,4 +99,44 @@ function renderErrorJson(error: PragmaError): string {
98
99
  return JSON.stringify({ ok: false, error: serializeError(error) });
99
100
  }
100
101
 
101
- export { renderErrorJson, renderErrorLlm, renderErrorPlain };
102
+ /**
103
+ * Render an error for an EXPLICITLY requested machine format, or decline.
104
+ *
105
+ * The ONE machine-format envelope decision for the usage-error surfaces —
106
+ * `handleProgramError`'s Commander parse failures (the unknown-command arm
107
+ * included), the create mount's projection usage-error writer, and
108
+ * `writeRefusal`: an explicit `--format json` renders the failure envelope,
109
+ * an explicit `--format llm` the condensed Markdown form, and anything else
110
+ * returns `undefined` so the caller keeps its raw default bytes.
111
+ * Auto-detected llm is excluded by construction — `parseGlobalFlags` leaves
112
+ * `format` at `"plain"` under auto-detection and records `autoLlm`
113
+ * separately — so an inferred output mode can never move the default
114
+ * (cross-CLI parity) bytes. Hoisted so the gate and the renderer pick exist
115
+ * ONCE instead of drifting per call site (they had already split: sites
116
+ * gated on json only vs json|llm, and `--format llm` enveloped some members
117
+ * of the usage-error class while siblings stayed raw). Deliberately NOT
118
+ * routed through here: the always-render sites with no raw arm to arbitrate
119
+ * — `renderStartupError`, bin.ts's bad-`--format` rejection,
120
+ * `handleProgramError`'s non-Commander fallthrough, and dispatch's
121
+ * `renderError` (which deliberately includes autoLlm for run errors) — each
122
+ * picks a PragmaError renderer directly.
123
+ *
124
+ * @param error - The structured error to render.
125
+ * @param format - The parsed global `--format` value.
126
+ * @returns The rendered string for `json`/`llm`; `undefined` for `plain`.
127
+ */
128
+ function renderErrorForFormat(
129
+ error: PragmaError,
130
+ format: OutputFormat,
131
+ ): string | undefined {
132
+ if (format === "json") return renderErrorJson(error);
133
+ if (format === "llm") return renderErrorLlm(error);
134
+ return undefined;
135
+ }
136
+
137
+ export {
138
+ renderErrorForFormat,
139
+ renderErrorJson,
140
+ renderErrorLlm,
141
+ renderErrorPlain,
142
+ };
@@ -17,7 +17,10 @@ type ErrorCode = (typeof ERROR_CODES)[number];
17
17
  * `cli` — when present — is the command as a user would type it: this
18
18
  * distribution's own bin name (`RECOVERY_CLI_PREFIX`) plus a grammar path (D5).
19
19
  * `cliRecovery` takes the path alone and prepends the prefix, so there is no
20
- * assertion to make — see the docblock on `error/recovery.ts`.
20
+ * assertion to make; the one COMPUTED producer (the create mount) derives
21
+ * the prefix from the program's own name, pinned by a test expectation
22
+ * COMPOSED from `RECOVERY_CLI_PREFIX` — the routes are enumerated in the
23
+ * docblock on `error/recovery.ts`.
21
24
  */
22
25
  interface Recovery {
23
26
  /** Human-readable recovery guidance. */
@@ -54,6 +57,23 @@ interface PragmaErrorData {
54
57
  interface ErrorPayload {
55
58
  readonly code: ErrorCode;
56
59
  readonly message: string;
60
+ /**
61
+ * Fuzzy-matched alternative names — BARE candidate tokens the caller can
62
+ * substitute for the one token it typed (a verb, a tree segment), never
63
+ * full invocations. The FUZZY tiers serialize this one convention:
64
+ * bin.ts's unknown-command tier emits the candidate name (`block`) and
65
+ * the create mount's unknown-segment tier the candidate segment
66
+ * (`react`); the corrected full command line, when one is shown, lives
67
+ * in the default prose did-you-mean rendering, not in this field. An
68
+ * excess positional is NOT a fuzzy match — its matched operand may be
69
+ * the very token its message calls unexpected, or one the message never
70
+ * names — so that producer omits this field entirely and instead ships
71
+ * the runnable corrected command as `recovery.cli` WHEN an operand
72
+ * names a sibling or child segment resolving to a declared runnable
73
+ * leaf (the prose did-you-mean condition, narrowed to runnable — a
74
+ * matched namespace keeps the prose hint but ships no recovery); with
75
+ * no runnable match the envelope carries neither optional field.
76
+ */
57
77
  readonly suggestions?: readonly string[];
58
78
  readonly recovery?: Recovery;
59
79
  readonly validOptions?: readonly string[];
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The kernel's own top-level declarations — the small set of facts that belong
3
+ * to no sub-domain because every sub-domain may need them.
4
+ *
5
+ * This is NOT a facade over the kernel. `kernel/` is a namespace of domains,
6
+ * each of which keeps its own barrel (`config/`, `render/`, `runtime/`,
7
+ * `packs/`, `error/`, `spec/`, `completion/`, `project/…`); a consumer wanting
8
+ * one of those imports that domain's barrel, not this one. What lives here is
9
+ * only what sits directly in `kernel/`, and the bar for putting a file there
10
+ * is high: it must be a declaration the kernel makes about itself rather than
11
+ * a step in any one pipeline.
12
+ *
13
+ * Today that is the declared vocabulary — the distribution's mapping from the
14
+ * roles the CLI knows (a prompt, a resource) onto the RDF terms that actually
15
+ * carry them in the active graph. It is parsed once at module load and read
16
+ * from the prompt capability, the MCP prompt source, and the pack index
17
+ * builder, none of which owns it and any of which would otherwise hardcode
18
+ * someone else's IRIs.
19
+ *
20
+ * The copy-gate rule table (`copy.ts`) deliberately stays off this barrel. It
21
+ * is reviewed data consumed by its own test and by nothing else at runtime;
22
+ * exporting it here would advertise a runtime API the gate does not have.
23
+ */
24
+
25
+ export type { DeclaredVocabulary } from "./vocabulary.js";
26
+ export { VOCABULARY } from "./vocabulary.js";
@@ -24,11 +24,11 @@
24
24
  * costs nothing on `--help`/`__complete`.
25
25
  */
26
26
 
27
- import type { ConfigLayers } from "../config/types.js";
28
- import { PragmaError } from "../error/PragmaError.js";
27
+ import type { ConfigLayers } from "../config/index.js";
28
+ import { PragmaError } from "../error/index.js";
29
29
  import type { PackStoryRecord } from "../runtime/graphpack/stories.js";
30
- import type { CapabilityModule } from "../spec/types.js";
31
- import { compilePack } from "./compile.js";
30
+ import type { CapabilityModule } from "../spec/index.js";
31
+ import { compileStoryModule } from "./compile.js";
32
32
  import { parsePackDefinition } from "./schema.js";
33
33
  import type { PackDefinition, PackEntry } from "./types.js";
34
34
  import { assertUniqueVerbs } from "./uniqueness.js";
@@ -172,16 +172,14 @@ export function assembleEffectiveModules(
172
172
  // story both on its pack and at the top level is a refinement, not an error.
173
173
  const dynamic = new Map<string, CapabilityModule>();
174
174
  for (const entry of packageStories) {
175
- dynamic.set(entry.definition.noun, {
176
- name: entry.definition.noun,
177
- story: true,
178
- verbs: compilePack(
175
+ dynamic.set(
176
+ entry.definition.noun,
177
+ compileStoryModule(
179
178
  entry.definition,
180
179
  { label: entry.source, origin: "package" },
181
180
  prefixes,
182
181
  ),
183
- colophon: entry.definition.colophon,
184
- });
182
+ );
185
183
  }
186
184
  for (const tier of tiers) {
187
185
  const seen = new Set<string>();
@@ -201,16 +199,14 @@ export function assembleEffectiveModules(
201
199
  );
202
200
  }
203
201
  seen.add(definition.noun);
204
- dynamic.set(definition.noun, {
205
- name: definition.noun,
206
- story: true,
207
- verbs: compilePack(
202
+ dynamic.set(
203
+ definition.noun,
204
+ compileStoryModule(
208
205
  definition,
209
206
  { label: "config", origin: "config" },
210
207
  prefixes,
211
208
  ),
212
- colophon: definition.colophon,
213
- });
209
+ );
214
210
  }
215
211
  }
216
212
 
@@ -11,7 +11,7 @@ import { afterAll, beforeAll, describe, expect, it } from "vitest";
11
11
  import { RECOVERY_CLI_PREFIX } from "../../constants.js";
12
12
  import { buildFixtureRuntime } from "../../testing/helpers/packRuntime.js";
13
13
  import type { PragmaRuntime } from "../runtime/types.js";
14
- import { compilePack } from "./compile.js";
14
+ import { compileListable, compilePack, compileStoryModule } from "./compile.js";
15
15
  import type { LookupOutput } from "./resolveEntity.js";
16
16
  import { parsePackDefinition } from "./schema.js";
17
17
  import type { PackDefinition, PackRow } from "./types.js";
@@ -383,3 +383,132 @@ describe("pack compiler — SPARQL fetch path (PROTECTED)", () => {
383
383
  expect(data.totalCount).toBe(2);
384
384
  });
385
385
  });
386
+
387
+ /**
388
+ * The listing a story contributes to the MCP resource surface is DERIVED from
389
+ * the types its lookup already names — the story author writes the type set
390
+ * once, for the name resolve, and the resource listing reads that same
391
+ * declaration. Nothing to keep in sync because there is nothing written twice.
392
+ */
393
+ describe("declared listing (derived from the lookup's types)", () => {
394
+ it("derives one collection per declared type, unweighted types at 1", () => {
395
+ expect(
396
+ compileListable({
397
+ noun: "gadget",
398
+ lookup: { by: "ex:name", types: ["ex:Widget", "ex:Part"] },
399
+ }),
400
+ ).toEqual({
401
+ sources: [
402
+ { type: "ex:Widget", as: "collection", weight: 1 },
403
+ { type: "ex:Part", as: "collection", weight: 1 },
404
+ ],
405
+ });
406
+ });
407
+
408
+ it("carries a declared weight onto the type it names", () => {
409
+ const listable = compileListable({
410
+ noun: "gadget",
411
+ lookup: {
412
+ by: "ex:name",
413
+ types: ["ex:Widget", "ex:Part"],
414
+ weights: { "ex:Part": 0.6 },
415
+ },
416
+ });
417
+ expect(listable?.sources.map((s) => s.weight)).toEqual([1, 0.6]);
418
+ });
419
+
420
+ it("declares nothing for a list-only noun (it addresses no class)", () => {
421
+ expect(
422
+ compileListable({ noun: "gadget", list: { query: "", columns: [] } }),
423
+ ).toBeUndefined();
424
+ });
425
+
426
+ it("carries the listing onto the compiled module, beside its verbs", () => {
427
+ const module = compileStoryModule(
428
+ { noun: "gadget", lookup: { by: "ex:name", type: "ex:Widget" } },
429
+ distributionSource("t"),
430
+ PREFIXES,
431
+ );
432
+ expect(module.story).toBe(true);
433
+ expect(module.mcpListable?.sources).toEqual([
434
+ { type: "ex:Widget", as: "collection", weight: 1 },
435
+ ]);
436
+ });
437
+ });
438
+
439
+ describe("weights validation (a weight that can never apply is rejected)", () => {
440
+ it("accepts a weight naming a type the lookup addresses", () => {
441
+ const definition = {
442
+ noun: "gadget",
443
+ lookup: {
444
+ by: "ex:name",
445
+ types: ["ex:Widget", "ex:Part"],
446
+ weights: { "ex:Part": 0.6 },
447
+ },
448
+ };
449
+ expect(parsePackDefinition(definition, "t")).toEqual(definition);
450
+ });
451
+
452
+ it("REJECTS a weight naming a type the lookup does not address", () => {
453
+ // A silent no-op is how a weight that never applied survives review: the
454
+ // type gets renamed, the weight stays pointed at the old name, and nothing
455
+ // says so — the ranking simply stops changing.
456
+ expect(() =>
457
+ parsePackDefinition(
458
+ {
459
+ noun: "gadget",
460
+ lookup: {
461
+ by: "ex:name",
462
+ types: ["ex:Widget"],
463
+ weights: { "ex:Gone": 0.6 },
464
+ },
465
+ },
466
+ "t",
467
+ ),
468
+ ).toThrow(/ex:Gone/);
469
+ });
470
+
471
+ it("REJECTS a weight outside 0–1", () => {
472
+ expect(() =>
473
+ parsePackDefinition(
474
+ {
475
+ noun: "gadget",
476
+ lookup: {
477
+ by: "ex:name",
478
+ type: "ex:Widget",
479
+ weights: { "ex:Widget": 2 },
480
+ },
481
+ },
482
+ "t",
483
+ ),
484
+ ).toThrow();
485
+ });
486
+ });
487
+
488
+ describe("compileListable — absolute IRIs reach the prefixed contract", () => {
489
+ it("compacts an absolute lookup type, and its weight key with it", () => {
490
+ // `PackLookup.type`/`types` accept a prefixed name OR an absolute IRI, but
491
+ // the listing is keyed on the index's prefixed types. Verbatim, such a story
492
+ // compiled clean and then matched no class and no weight.
493
+ const listable = compileListable({
494
+ noun: "widget",
495
+ lookup: {
496
+ by: "ds:name",
497
+ types: ["https://ds.canonical.com/Component", "ds:Pattern"],
498
+ weights: { "https://ds.canonical.com/Component": 0.4 },
499
+ },
500
+ } as PackDefinition);
501
+
502
+ expect(listable?.sources.map((s) => s.type)).toEqual([
503
+ "ds:Component",
504
+ "ds:Pattern",
505
+ ]);
506
+ // The weight followed its type through the same compaction, so it still
507
+ // applies — keying it on the raw IRI would have silently dropped it.
508
+ const component = listable?.sources.find((s) => s.type === "ds:Component");
509
+ expect(component?.weight).toBe(0.4);
510
+ expect(listable?.sources.find((s) => s.type === "ds:Pattern")?.weight).toBe(
511
+ 1,
512
+ );
513
+ });
514
+ });
@@ -15,9 +15,16 @@
15
15
  */
16
16
 
17
17
  import { BIN_NAME } from "../../constants.js";
18
- import type { PragmaRuntime } from "../runtime/types.js";
18
+ import { compactUri, DEFAULT_PREFIX_MAP } from "../render/index.js";
19
+ import type { PragmaRuntime } from "../runtime/index.js";
19
20
  import { asVerb } from "../spec/asVerb.js";
20
- import type { DisclosureSpec, ParamSpec, VerbSpec } from "../spec/types.js";
21
+ import type {
22
+ CapabilityModule,
23
+ DisclosureSpec,
24
+ McpListable,
25
+ ParamSpec,
26
+ VerbSpec,
27
+ } from "../spec/types.js";
21
28
  import {
22
29
  listFormatters,
23
30
  lookupFormatters,
@@ -107,6 +114,83 @@ export function compilePack(
107
114
  return verbs;
108
115
  }
109
116
 
117
+ /**
118
+ * Derive a story's MCP resource listing from the types its lookup addresses.
119
+ *
120
+ * ZERO new authoring: a read story ALREADY declares its type set
121
+ * (`lookup.type` / `lookup.types`) because that is what its name resolve is
122
+ * constrained by, so the slice of the index the noun contributes to the listing
123
+ * IS that declaration read a second time by a different reader — never written
124
+ * a second time by the author. Each type contributes ONE collection entry (its
125
+ * class entry, carrying the instance count); the individuals stay reachable
126
+ * through the `{+uri}` template and its autocomplete.
127
+ *
128
+ * Returns `undefined` for a story with no lookup (a list-only noun addresses no
129
+ * class, so it can name no slice).
130
+ *
131
+ * @param definition - A validated pack definition.
132
+ * @returns Its declared listing, or `undefined` when it declares no types.
133
+ */
134
+ export function compileListable(
135
+ definition: PackDefinition,
136
+ ): McpListable | undefined {
137
+ const lookup = definition.lookup;
138
+ if (!lookup) return undefined;
139
+ const types = lookup.types ?? (lookup.type ? [lookup.type] : []);
140
+ if (types.length === 0) return undefined;
141
+ // `PackLookup.type`/`types` accept a prefixed name OR an absolute IRI, but the
142
+ // listing is keyed on the index's PREFIXED types. Copied verbatim, a lookup
143
+ // legitimately constrained to `https://…/Widget` compiles clean and then
144
+ // matches no class and no weight — a story that is valid everywhere else and
145
+ // silently contributes nothing here. Compacted against the same map
146
+ // `resolveUri` expands with, so the two directions agree.
147
+ const compact = (type: string): string =>
148
+ compactUri(type, DEFAULT_PREFIX_MAP);
149
+ const weights = Object.fromEntries(
150
+ Object.entries(lookup.weights ?? {}).map(([type, weight]) => [
151
+ compact(type),
152
+ weight,
153
+ ]),
154
+ );
155
+ return {
156
+ sources: types.map(compact).map((type) => ({
157
+ type,
158
+ as: "collection" as const,
159
+ // Unlisted types weigh 1 — the default is "as important as any other",
160
+ // so a story that declares no weights needs no weights.
161
+ weight: weights[type] ?? 1,
162
+ })),
163
+ };
164
+ }
165
+
166
+ /**
167
+ * Compile a story into the capability module that carries it.
168
+ *
169
+ * The ONE place a {@link PackDefinition} becomes a {@link CapabilityModule} —
170
+ * the distribution's static stories and the dynamic (config/package) ones come
171
+ * through here alike, so a module-level projection derived from the story
172
+ * (today: {@link compileListable}) cannot reach one tier and miss the other.
173
+ *
174
+ * @param definition - A validated pack definition.
175
+ * @param source - Where the definition came from, for diagnostics.
176
+ * @param prefixes - The merged prefix map used for display compaction.
177
+ * @returns The module: the compiled verbs plus the story's module-level data.
178
+ */
179
+ export function compileStoryModule(
180
+ definition: PackDefinition,
181
+ source: StorySource,
182
+ prefixes: Readonly<Record<string, string>>,
183
+ ): CapabilityModule {
184
+ const listable = compileListable(definition);
185
+ return {
186
+ name: definition.noun,
187
+ story: true,
188
+ verbs: compilePack(definition, source, prefixes),
189
+ colophon: definition.colophon,
190
+ ...(listable ? { mcpListable: listable } : {}),
191
+ };
192
+ }
193
+
110
194
  /** Presentation facts for one compiled list-shaped verb. */
111
195
  interface ListVerbMeta {
112
196
  readonly noun: string;
@@ -287,9 +371,15 @@ function projectFilters(
287
371
  name: filter.param,
288
372
  doc,
289
373
  values: [...filter.values],
374
+ repeatable: true,
290
375
  } satisfies ParamSpec;
291
376
  }
292
- return { kind: "string", name: filter.param, doc } satisfies ParamSpec;
377
+ return {
378
+ kind: "string",
379
+ name: filter.param,
380
+ doc,
381
+ repeatable: true,
382
+ } satisfies ParamSpec;
293
383
  });
294
384
  }
295
385
 
@@ -18,8 +18,8 @@
18
18
  */
19
19
 
20
20
  import { DETAIL_LEVELS } from "../../constants.js";
21
- import { resolveDetail } from "../render/disclosure.js";
22
- import type { PragmaRuntime } from "../runtime/types.js";
21
+ import { resolveDetail } from "../render/index.js";
22
+ import type { PragmaRuntime } from "../runtime/index.js";
23
23
  import type { PackDisclosure, PackExpand, PackField } from "./types.js";
24
24
 
25
25
  /** The canonical level names, lowest → highest. */
@@ -23,7 +23,7 @@
23
23
  * stays off the storeless fast path).
24
24
  */
25
25
 
26
- import { PragmaError } from "../../error/PragmaError.js";
26
+ import { PragmaError } from "../../error/index.js";
27
27
  import { activeExpands, activeFields } from "./../sparql/buildLookupQuery.js";
28
28
  import type {
29
29
  PackExpand,
@@ -14,9 +14,8 @@
14
14
  * composed only from validated pack terms and compiled schema names.
15
15
  */
16
16
 
17
- import { PragmaError } from "../../error/PragmaError.js";
18
- import { cliRecovery } from "../../error/recovery.js";
19
- import type { PragmaRuntime } from "../../runtime/types.js";
17
+ import { cliRecovery, PragmaError } from "../../error/index.js";
18
+ import type { PragmaRuntime } from "../../runtime/index.js";
20
19
  import type { PackChildRow, PackEntity, PackLookup } from "../types.js";
21
20
  import {
22
21
  buildLookupDocument,
@@ -72,7 +71,7 @@ export async function fetchGraphqlLookup(
72
71
  // ontology). That is a runtime not-found, not an unavailable store (exit 3).
73
72
  throw new PragmaError({
74
73
  code: "ENTITY_NOT_FOUND",
75
- message: `Could not resolve <${entityUri}> — its rdf:type may be missing from the ontology.`,
74
+ message: `Cannot resolve <${entityUri}> — its rdf:type may be missing from the ontology.`,
76
75
  recovery: cliRecovery(
77
76
  `graph inspect ${entityUri}`,
78
77
  "Inspect the entity's triples to check its rdf:type.",
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The GraphQL lookup path — what a `source: "graphql"` pack story executes
3
+ * once SPARQL has resolved its name to an entity IRI.
4
+ *
5
+ * The three files here are one function split for testability, not three
6
+ * services: the naming rules derive schema field names from the RDF properties
7
+ * a pack declares, the document generator turns a lookup declaration plus
8
+ * those names into the single query to run, and the fetcher executes it and
9
+ * unwraps the Relay envelope into the same flat entity shape the SPARQL path
10
+ * produces. Only the last of those is something a caller does.
11
+ *
12
+ * So the barrel is one export, and the narrowness is the point. The document
13
+ * generator's contract is that the entity IRI travels as a query VARIABLE and
14
+ * never as interpolated text, and that a document is composed only from
15
+ * validated pack terms and compiled schema names. Handing out the generator on
16
+ * its own would hand out a way to build a document and execute it by some
17
+ * other route; handing out the fetcher hands out the guarantee with it.
18
+ */
19
+
20
+ export { fetchGraphqlLookup } from "./fetchGraphqlLookup.js";
@@ -0,0 +1,40 @@
1
+ /**
2
+ * The packs domain — declared stories become runnable verbs.
3
+ *
4
+ * One pipeline runs end to end inside this folder: a JSON pack declaration is
5
+ * parsed and validated, compiled into `VerbSpec`s, and given run bodies that
6
+ * resolve entities out of the graph and formatters that render them. The
7
+ * intermediate stages — the schema parser, the query/render/run-body builders,
8
+ * the entity resolver, the sampler, the glob expander — are steps in that
9
+ * pipeline, not services, and they stay off this barrel: a caller reaching for
10
+ * one of them is a caller reassembling the pipeline by hand, and the whole
11
+ * point of compiling a pack once is that nobody has to.
12
+ *
13
+ * What crosses the boundary is the pipeline's ends and the contracts naming
14
+ * them. `compilePack` is the entry the distribution and the config-story path
15
+ * both take. `validateStories` and `loadEffectiveModules` are the two ways
16
+ * third-party stories are admitted — the first screens records and reports
17
+ * every problem (which is how `doctor` reports a story the CLI drops rather
18
+ * than letting it vanish), the second is the full load the MCP server and the
19
+ * `capabilities` verb take. `resolvePackDetail` and `resolveUri` are the two
20
+ * decisions a pack's own reads defer to the runtime, and `verbKey` is the
21
+ * identity function every surface keys a verb by.
22
+ *
23
+ * `loadEffectiveModules` reads config and the answering pack behind DYNAMIC
24
+ * imports so a bare `--help` never pays for either; consumers reach it lazily
25
+ * today for exactly that reason, and routing it through this barrel statically
26
+ * would put the config reader back on the fast path.
27
+ */
28
+
29
+ export type { StoryProblem } from "./collect.js";
30
+ export { loadEffectiveModules, validateStories } from "./collect.js";
31
+ export { compilePack } from "./compile.js";
32
+ export { resolvePackDetail } from "./disclosure.js";
33
+ export { resolveUri } from "./iri.js";
34
+ export type {
35
+ PackDefinition,
36
+ PackRow,
37
+ StorySource,
38
+ } from "./types.js";
39
+ export { distributionSource } from "./types.js";
40
+ export { verbKey } from "./uniqueness.js";