@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
@@ -8,12 +8,14 @@
8
8
  */
9
9
 
10
10
  import { afterAll, beforeAll, describe, expect, it } from "vitest";
11
+ import { RECOVERY_CLI_PREFIX } from "../../constants.js";
11
12
  import { buildFixtureRuntime } from "../../testing/helpers/packRuntime.js";
12
13
  import type { PragmaRuntime } from "../runtime/types.js";
13
- import { compilePack } from "./compile.js";
14
+ import { compileListable, compilePack, compileStoryModule } from "./compile.js";
14
15
  import type { LookupOutput } from "./resolveEntity.js";
15
16
  import { parsePackDefinition } from "./schema.js";
16
17
  import type { PackDefinition, PackRow } from "./types.js";
18
+ import { distributionSource } from "./types.js";
17
19
  import { assertUniqueVerbs, verbKey } from "./uniqueness.js";
18
20
 
19
21
  const PREFIXES = {
@@ -92,8 +94,33 @@ describe("pack compiler — round-trip + shape (PROTECTED, storeless)", () => {
92
94
  expect(parsePackDefinition(raw, "test:widget")).toEqual(WIDGET_PACK);
93
95
  });
94
96
 
97
+ it("round-trips a fixed-count sample — the field the no-argument samples declare", () => {
98
+ // `sample.fixedCount` is a documented grammar field (packs/types.ts) that
99
+ // three of the distribution's own stories use and the covenant freezes
100
+ // (`block sample` takes no argument). It was missing from the `.strict()`
101
+ // sample schema, so ANY config- or package-declared story using it died
102
+ // with a fatal CONFIG_ERROR before ever reaching the compiler.
103
+ const lookup = WIDGET_PACK.lookup as NonNullable<PackDefinition["lookup"]>;
104
+ const fixed: PackDefinition = {
105
+ ...WIDGET_PACK,
106
+ lookup: { ...lookup, sample: { fixedCount: true } },
107
+ };
108
+ expect(parsePackDefinition(JSON.parse(JSON.stringify(fixed)), "t")).toEqual(
109
+ fixed,
110
+ );
111
+ // …and the compiler honours it: no `[count]` positional on the sample verb.
112
+ const sample = compilePack(fixed, distributionSource("t"), PREFIXES).find(
113
+ (v) => verbKey(v.path) === "widget sample",
114
+ );
115
+ expect(sample?.params).toEqual([]);
116
+ });
117
+
95
118
  it("projects list, lookup, and sample verbs with unique keys", () => {
96
- const verbs = compilePack(WIDGET_PACK, "bundled:widget", PREFIXES);
119
+ const verbs = compilePack(
120
+ WIDGET_PACK,
121
+ distributionSource("bundled:widget"),
122
+ PREFIXES,
123
+ );
97
124
  expect(verbs.map((v) => verbKey(v.path))).toEqual([
98
125
  "widget list",
99
126
  "widget lookup",
@@ -103,7 +130,11 @@ describe("pack compiler — round-trip + shape (PROTECTED, storeless)", () => {
103
130
  });
104
131
 
105
132
  it("projects list filters as params (enum) + a search flag", () => {
106
- const [list] = compilePack(WIDGET_PACK, "bundled:widget", PREFIXES);
133
+ const [list] = compilePack(
134
+ WIDGET_PACK,
135
+ distributionSource("bundled:widget"),
136
+ PREFIXES,
137
+ );
107
138
  expect(list?.params.map((p) => p.name)).toEqual(["kind", "search"]);
108
139
  const kind = list?.params.find((p) => p.name === "kind");
109
140
  expect(kind?.kind).toBe("enum");
@@ -112,7 +143,11 @@ describe("pack compiler — round-trip + shape (PROTECTED, storeless)", () => {
112
143
  });
113
144
 
114
145
  it("projects the lookup as a variadic name-completing positional + disclosure", () => {
115
- const verbs = compilePack(WIDGET_PACK, "bundled:widget", PREFIXES);
146
+ const verbs = compilePack(
147
+ WIDGET_PACK,
148
+ distributionSource("bundled:widget"),
149
+ PREFIXES,
150
+ );
116
151
  const lookup = verbs.find((v) => verbKey(v.path) === "widget lookup");
117
152
  const name = lookup?.params.at(0);
118
153
  expect(name?.kind).toBe("string[]");
@@ -132,7 +167,7 @@ describe("pack compiler — round-trip + shape (PROTECTED, storeless)", () => {
132
167
  PackDefinition["lookup"]
133
168
  >;
134
169
  const nameParam = (def: PackDefinition) =>
135
- compilePack(def, "bundled:widget", PREFIXES)
170
+ compilePack(def, distributionSource("bundled:widget"), PREFIXES)
136
171
  .find((v) => verbKey(v.path) === "widget lookup")
137
172
  ?.params.at(0);
138
173
 
@@ -162,6 +197,125 @@ describe("pack compiler — round-trip + shape (PROTECTED, storeless)", () => {
162
197
  });
163
198
  });
164
199
 
200
+ describe("the grammar rejects what the compiler cannot build (PROTECTED)", () => {
201
+ // A definition that compiles to a duplicate `(noun, verb)` key or a duplicate
202
+ // CLI option is not merely odd — it throws out of `assembleEffectiveModules`
203
+ // or out of `buildProgram`, both of which run BEFORE the command tree exists.
204
+ // For a package-shipped story that means every command dies, `doctor` and
205
+ // `sources update` included. The collision is a property of the definition,
206
+ // so it is rejected here, where a package story degrades to a dropped file.
207
+ const listShape = {
208
+ query: "SELECT ?uri WHERE { ?uri a ex:Widget }",
209
+ columns: [{ field: "uri" }],
210
+ };
211
+ const parse = (def: unknown) => () =>
212
+ parsePackDefinition(def, "pkg/stories/widget.json");
213
+
214
+ it("rejects an extra verb that repeats list, lookup, sample, or itself", () => {
215
+ const lookup = { by: "ex:name", type: "ex:Widget", sample: true };
216
+ expect(
217
+ parse({
218
+ noun: "widget",
219
+ list: listShape,
220
+ verbs: [{ ...listShape, verb: "list" }],
221
+ }),
222
+ ).toThrow(/verb "list" is already compiled/);
223
+ expect(
224
+ parse({
225
+ noun: "widget",
226
+ lookup,
227
+ verbs: [{ ...listShape, verb: "lookup" }],
228
+ }),
229
+ ).toThrow(/verb "lookup" is already compiled/);
230
+ expect(
231
+ parse({
232
+ noun: "widget",
233
+ lookup,
234
+ verbs: [{ ...listShape, verb: "sample" }],
235
+ }),
236
+ ).toThrow(/verb "sample" is already compiled/);
237
+ expect(
238
+ parse({
239
+ noun: "widget",
240
+ list: listShape,
241
+ verbs: [
242
+ { ...listShape, verb: "categories" },
243
+ { ...listShape, verb: "categories" },
244
+ ],
245
+ }),
246
+ ).toThrow(/verb "categories" is already compiled/);
247
+ });
248
+
249
+ it("rejects a filter param declared twice, on list or on an extra verb", () => {
250
+ const twice = [
251
+ { param: "kind", variable: "uri" },
252
+ { param: "kind", variable: "uri" },
253
+ ];
254
+ expect(
255
+ parse({ noun: "widget", list: { ...listShape, filters: twice } }),
256
+ ).toThrow(/filter param "kind" is declared twice/);
257
+ expect(
258
+ parse({
259
+ noun: "widget",
260
+ list: listShape,
261
+ verbs: [{ ...listShape, verb: "categories", filters: twice }],
262
+ }),
263
+ ).toThrow(/filter param "kind" is declared twice/);
264
+ });
265
+
266
+ it("still accepts the distinct forms, and they compile to unique keys/params", () => {
267
+ const definition = parsePackDefinition(
268
+ {
269
+ noun: "widget",
270
+ list: {
271
+ ...listShape,
272
+ filters: [
273
+ { param: "kind", variable: "uri" },
274
+ { param: "tier", variable: "uri" },
275
+ ],
276
+ },
277
+ verbs: [{ ...listShape, verb: "categories" }],
278
+ lookup: { by: "ex:name", type: "ex:Widget", sample: true },
279
+ },
280
+ "pkg/stories/widget.json",
281
+ );
282
+ const verbs = compilePack(
283
+ definition,
284
+ { label: "pkg/stories/widget.json", origin: "package" },
285
+ PREFIXES,
286
+ );
287
+ expect(verbs.map((v) => verbKey(v.path))).toEqual([
288
+ "widget list",
289
+ "widget categories",
290
+ "widget lookup",
291
+ "widget sample",
292
+ ]);
293
+ expect(() => assertUniqueVerbs(verbs)).not.toThrow();
294
+ expect(verbs.at(0)?.params.map((p) => p.name)).toEqual(["kind", "tier"]);
295
+ });
296
+
297
+ it("names the shape a noun must have, not the regex", () => {
298
+ expect(parse({ noun: "Bad Noun", list: listShape })).toThrow(
299
+ /noun: must be lowercase kebab-case/,
300
+ );
301
+ });
302
+
303
+ it("rejects an emptyRecovery.cli that names a binary, and names the change", () => {
304
+ // The hint is rendered as `<consuming distribution> <cli>`, so a story
305
+ // carrying the old prefixed form would render `pragma pragma sources
306
+ // update`. Third-party packs are third-party DATA: they get an error that
307
+ // names the grammar change, not a silently doubled string.
308
+ const withCli = (cli: string) => ({
309
+ noun: "widget",
310
+ list: { ...listShape, emptyRecovery: { message: "None.", cli } },
311
+ });
312
+ expect(parse(withCli(`${RECOVERY_CLI_PREFIX}sources update`))).toThrow(
313
+ /WITHOUT the binary name/,
314
+ );
315
+ expect(parse(withCli("sources update"))).not.toThrow();
316
+ });
317
+ });
318
+
165
319
  describe("pack compiler — SPARQL fetch path (PROTECTED)", () => {
166
320
  let rt: PragmaRuntime;
167
321
 
@@ -178,9 +332,11 @@ describe("pack compiler — SPARQL fetch path (PROTECTED)", () => {
178
332
  });
179
333
 
180
334
  const run = <R>(verbLabel: string, params: Record<string, unknown>) => {
181
- const verb = compilePack(WIDGET_PACK, "bundled:widget", PREFIXES).find(
182
- (v) => verbKey(v.path) === `widget ${verbLabel}`,
183
- );
335
+ const verb = compilePack(
336
+ WIDGET_PACK,
337
+ distributionSource("bundled:widget"),
338
+ PREFIXES,
339
+ ).find((v) => verbKey(v.path) === `widget ${verbLabel}`);
184
340
  if (!verb) throw new Error(`no widget ${verbLabel}`);
185
341
  return verb.run(params, rt) as Promise<R>;
186
342
  };
@@ -227,3 +383,132 @@ describe("pack compiler — SPARQL fetch path (PROTECTED)", () => {
227
383
  expect(data.totalCount).toBe(2);
228
384
  });
229
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
+ });
@@ -7,15 +7,24 @@
7
7
  *
8
8
  * Pure, storeless spec-generation: it builds paths, params, formatters, and run
9
9
  * closures without touching the store or zod, so it runs on the
10
- * `--help`/`__complete` fast path (the bundled packs compile at import; the
11
- * dynamic merge is `collect.assembleEffectiveModules`/`loadEffectiveModules`).
10
+ * `--help`/`__complete` fast path (the distribution's declared stories compile
11
+ * at import, in `capabilities/distribution.ts`; the dynamic merge is
12
+ * `collect.assembleEffectiveModules`/`loadEffectiveModules`).
12
13
  * The heavy work is deferred into the run closures (behind the lazy runtime
13
14
  * facade).
14
15
  */
15
16
 
16
- import type { PragmaRuntime } from "../runtime/types.js";
17
+ import { BIN_NAME } from "../../constants.js";
18
+ import { compactUri, DEFAULT_PREFIX_MAP } from "../render/index.js";
19
+ import type { PragmaRuntime } from "../runtime/index.js";
17
20
  import { asVerb } from "../spec/asVerb.js";
18
- 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";
19
28
  import {
20
29
  listFormatters,
21
30
  lookupFormatters,
@@ -35,6 +44,7 @@ import type {
35
44
  PackLookup,
36
45
  PackRow,
37
46
  PackSearch,
47
+ StorySource,
38
48
  } from "./types.js";
39
49
 
40
50
  // The run bodies pull the SPARQL/GraphQL fetch layer; they are dynamic-imported
@@ -62,7 +72,7 @@ const READ_CAPABILITY = {
62
72
  */
63
73
  export function compilePack(
64
74
  definition: PackDefinition,
65
- source: string,
75
+ source: StorySource,
66
76
  prefixes: Readonly<Record<string, string>>,
67
77
  ): VerbSpec[] {
68
78
  const { noun } = definition;
@@ -104,6 +114,83 @@ export function compilePack(
104
114
  return verbs;
105
115
  }
106
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
+
107
194
  /** Presentation facts for one compiled list-shaped verb. */
108
195
  interface ListVerbMeta {
109
196
  readonly noun: string;
@@ -111,7 +198,7 @@ interface ListVerbMeta {
111
198
  readonly summary: string;
112
199
  /** The authored MCP tool description (from `toolDescription`), if any. */
113
200
  readonly doc?: string;
114
- readonly source: string;
201
+ readonly source: StorySource;
115
202
  readonly prefixes: Readonly<Record<string, string>>;
116
203
  }
117
204
 
@@ -135,17 +222,17 @@ function compileListVerb(shape: PackList, meta: ListVerbMeta): VerbSpec {
135
222
  }),
136
223
  },
137
224
  examples: [
138
- { cmd: `pragma ${meta.noun} ${meta.verb}` },
225
+ { cmd: `${BIN_NAME} ${meta.noun} ${meta.verb}` },
139
226
  ...(filterExample
140
227
  ? [
141
228
  {
142
- cmd: `pragma ${meta.noun} ${meta.verb} --${filterExample.param} ${quoteExample(
229
+ cmd: `${BIN_NAME} ${meta.noun} ${meta.verb} --${filterExample.param} ${quoteExample(
143
230
  filterExample.values?.at(0) ?? "",
144
231
  )}`,
145
232
  },
146
233
  ]
147
234
  : []),
148
- { cmd: `pragma ${meta.noun} ${meta.verb} --format llm` },
235
+ { cmd: `${BIN_NAME} ${meta.noun} ${meta.verb} --format llm` },
149
236
  ],
150
237
  capability: READ_CAPABILITY,
151
238
  run: (params: Record<string, unknown>, rt: PragmaRuntime) =>
@@ -160,7 +247,7 @@ function compileListVerb(shape: PackList, meta: ListVerbMeta): VerbSpec {
160
247
  function compileLookupVerb(
161
248
  lookup: PackLookup,
162
249
  noun: string,
163
- source: string,
250
+ source: StorySource,
164
251
  prefixes: Readonly<Record<string, string>>,
165
252
  ): VerbSpec {
166
253
  // Derive-by-default: every lookup completes its `<name>` from the pack index
@@ -197,7 +284,7 @@ function compileLookupVerb(
197
284
  ...(lookup.toolDescription ? { doc: lookup.toolDescription } : {}),
198
285
  params: [nameParam],
199
286
  output: { formatters: lookupFormatters(lookup, prefixes) },
200
- examples: [{ cmd: `pragma ${noun} lookup <name>` }],
287
+ examples: [{ cmd: `${BIN_NAME} ${noun} lookup <name>` }],
201
288
  ...(lookup.disclosure
202
289
  ? { disclosure: disclosureSpec(lookup.disclosure) }
203
290
  : {}),
@@ -214,7 +301,7 @@ function compileLookupVerb(
214
301
  function compileSampleVerb(
215
302
  lookup: PackLookup,
216
303
  noun: string,
217
- source: string,
304
+ source: StorySource,
218
305
  prefixes: Readonly<Record<string, string>>,
219
306
  ): VerbSpec {
220
307
  const defaultCount = sampleDefaultCount(lookup);
@@ -241,8 +328,8 @@ function compileSampleVerb(
241
328
  params: countParam,
242
329
  output: { formatters: sampleFormatters(lookup, noun, prefixes) },
243
330
  examples: [
244
- { cmd: `pragma ${noun} sample` },
245
- ...(config?.fixedCount ? [] : [{ cmd: `pragma ${noun} sample 3` }]),
331
+ { cmd: `${BIN_NAME} ${noun} sample` },
332
+ ...(config?.fixedCount ? [] : [{ cmd: `${BIN_NAME} ${noun} sample 3` }]),
246
333
  ],
247
334
  capability: READ_CAPABILITY,
248
335
  run: (params: Record<string, unknown>, rt: PragmaRuntime) =>
@@ -284,9 +371,15 @@ function projectFilters(
284
371
  name: filter.param,
285
372
  doc,
286
373
  values: [...filter.values],
374
+ repeatable: true,
287
375
  } satisfies ParamSpec;
288
376
  }
289
- 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;
290
383
  });
291
384
  }
292
385
 
@@ -66,13 +66,16 @@ const PACK: PackDefinition = {
66
66
  };
67
67
 
68
68
  const lookupVerb = () =>
69
- compilePack(PACK, "test:widget", PREFIXES).find(
69
+ compilePack(PACK, { label: "test:widget", origin: "package" }, PREFIXES).find(
70
70
  (v) => verbKey(v.path) === "widget lookup",
71
71
  );
72
72
 
73
73
  async function lookupAt(
74
74
  detail?: "summary" | "standard" | "detailed",
75
- config?: { configDetail: string; detailOrigin: "global" | "project" },
75
+ config?: {
76
+ configDetail: "summary" | "standard" | "detailed";
77
+ detailOrigin: "global" | "project";
78
+ },
76
79
  ): Promise<Record<string, unknown>> {
77
80
  const { rt } = await buildFixtureRuntime({
78
81
  ttl: TTL,
@@ -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,8 +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 type { PragmaRuntime } from "../../runtime/types.js";
17
+ import { cliRecovery, PragmaError } from "../../error/index.js";
18
+ import type { PragmaRuntime } from "../../runtime/index.js";
19
19
  import type { PackChildRow, PackEntity, PackLookup } from "../types.js";
20
20
  import {
21
21
  buildLookupDocument,
@@ -55,12 +55,12 @@ export async function fetchGraphqlLookup(
55
55
  .map((error) => error.message)
56
56
  .join("; ");
57
57
  throw PragmaError.storeUnavailable(`GraphQL lookup failed: ${messages}`, {
58
- recovery: {
59
- message: "Check the loaded ontology and namespaces.",
60
- // `graph inspect` needs a <uri>; `ontology list` is runnable as-is.
61
- cli: "pragma ontology list",
62
- mcp: { tool: "ontology_list" },
63
- },
58
+ // `graph inspect` needs a <uri>; `ontology list` is runnable as-is.
59
+ recovery: cliRecovery(
60
+ "ontology list",
61
+ "Check the loaded ontology and namespaces.",
62
+ { tool: "ontology_list" },
63
+ ),
64
64
  });
65
65
  }
66
66
 
@@ -71,11 +71,11 @@ export async function fetchGraphqlLookup(
71
71
  // ontology). That is a runtime not-found, not an unavailable store (exit 3).
72
72
  throw new PragmaError({
73
73
  code: "ENTITY_NOT_FOUND",
74
- message: `Could not resolve <${entityUri}> — its rdf:type may be missing from the ontology.`,
75
- recovery: {
76
- message: "Inspect the entity's triples to check its rdf:type.",
77
- cli: `pragma graph inspect ${entityUri}`,
78
- },
74
+ message: `Cannot resolve <${entityUri}> — its rdf:type may be missing from the ontology.`,
75
+ recovery: cliRecovery(
76
+ `graph inspect ${entityUri}`,
77
+ "Inspect the entity's triples to check its rdf:type.",
78
+ ),
79
79
  });
80
80
  }
81
81
 
@@ -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";