@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
@@ -0,0 +1,206 @@
1
+ /**
2
+ * The `implementation` story's SEMANTICS, in-process through the real CLI
3
+ * dispatch path (`executeVerb`), against the canonical fixture.
4
+ *
5
+ * The generic live-surface tests call `implementation_list` with empty
6
+ * parameters and check the envelope, so they stay green whether or not the
7
+ * story means anything: the block-name join could resolve to the wrong subject,
8
+ * the IRI fallback could never fire, and `--platform` / `--library` could
9
+ * filter nothing at all. Those are the four claims the noun actually makes, so
10
+ * they are pinned here rather than left to the envelope.
11
+ *
12
+ * The join is the reason this noun exists and the reason it is worth a
13
+ * fixture-backed test: `ds:implementsBlock` points from an implementation
14
+ * collected in THIS repository at a block declared by a DIFFERENT pack, and the
15
+ * row's `block` column is the design system's own `ds:name` reached across that
16
+ * edge — not a string this repository holds anywhere.
17
+ */
18
+
19
+ import { afterAll, describe, expect, it } from "vitest";
20
+ import { storyModules } from "../../capabilities/distribution.js";
21
+ import { verbKey } from "../../kernel/packs/uniqueness.js";
22
+ import { executeVerb } from "../../kernel/project/cli/dispatch.js";
23
+ import { bootRuntime } from "../../kernel/runtime/boot.js";
24
+ import type { VerbSpec } from "../../kernel/spec/types.js";
25
+ import {
26
+ CANONICAL_CONFIG,
27
+ CANONICAL_TTL,
28
+ } from "../fixtures/graph/canonical.js";
29
+ import {
30
+ bootFixtureRuntime,
31
+ type FixtureGraph,
32
+ } from "../helpers/fixtureGraph.js";
33
+ import { JSON_FLAGS, NO_MUTATION } from "../helpers/parity.js";
34
+
35
+ const implementationModule = storyModules.get("implementation");
36
+ if (!implementationModule) {
37
+ throw new Error('pragma.conf.ts declares no story for "implementation"');
38
+ }
39
+
40
+ const verbOf = (key: string): VerbSpec =>
41
+ implementationModule.verbs.find((v) => verbKey(v.path) === key) as VerbSpec;
42
+
43
+ const listVerb = verbOf("implementation list");
44
+ const librariesVerb = verbOf("implementation libraries");
45
+
46
+ const fixtures: FixtureGraph[] = [];
47
+ afterAll(async () => {
48
+ await Promise.all(fixtures.map((f) => f.dispose()));
49
+ });
50
+
51
+ /** Boot one tracked canonical fixture, for auto-disposal. */
52
+ async function boot(): Promise<FixtureGraph> {
53
+ const fixture = await bootFixtureRuntime({
54
+ ttl: CANONICAL_TTL,
55
+ config: CANONICAL_CONFIG,
56
+ });
57
+ fixtures.push(fixture);
58
+ return fixture;
59
+ }
60
+
61
+ type Row = Record<string, string>;
62
+
63
+ async function rows(
64
+ verb: VerbSpec,
65
+ params: Record<string, unknown> = {},
66
+ ): Promise<Row[]> {
67
+ const fixture = await boot();
68
+ const out = await executeVerb(
69
+ verb,
70
+ params,
71
+ NO_MUTATION,
72
+ bootRuntime(JSON_FLAGS, fixture.cwd),
73
+ );
74
+ return JSON.parse(out.stdout as string).data as Row[];
75
+ }
76
+
77
+ /**
78
+ * What the fixture's implementation graph says, as pairs: Button is
79
+ * implemented TWICE, on two platforms, and Modal once.
80
+ */
81
+ const EVERY_PAIR = [
82
+ "Button|@canonical/react-ds-global",
83
+ "Button|@canonical/svelte-ds-global",
84
+ "Modal|@canonical/react-ds-global",
85
+ ];
86
+
87
+ const pairs = (list: Row[]): string[] =>
88
+ list.map((r) => `${r.block}|${r.library}`).sort();
89
+
90
+ describe("implementation list — the cross-pack join", () => {
91
+ it("names each block by the design system's ds:name, not by its IRI", async () => {
92
+ // `ds:implementsBlock ds:button` carries no name; `Button` exists only on
93
+ // the block node BLOCK_TTL declares. A row reading `button` here would mean
94
+ // the join silently degraded to the IRI fallback and nobody noticed.
95
+ const list = await rows(listVerb);
96
+ expect(pairs(list)).toEqual(EVERY_PAIR);
97
+ expect(list.map((r) => r.block)).not.toContain("button");
98
+ });
99
+
100
+ it("one block implemented twice yields two rows, one per library", async () => {
101
+ // The row is the EDGE, not the block: collapsing the two Button rows into
102
+ // one would answer "is this implemented?" while losing "by whom", which is
103
+ // the question the noun exists for.
104
+ const list = await rows(listVerb);
105
+ expect(list.filter((r) => r.block === "Button")).toHaveLength(2);
106
+ });
107
+
108
+ it("carries the source link and the implementation's own IRI", async () => {
109
+ const list = await rows(listVerb);
110
+ const react = list.find(
111
+ (r) => r.block === "Button" && r.platform === "react",
112
+ );
113
+ expect(react?.source).toBe("https://example.test/react/Button.tsx");
114
+ expect(react?.uri).toBe(
115
+ "https://ds.canonical.com/implementation.react-ds-global.button",
116
+ );
117
+ });
118
+
119
+ it("falls back to the IRI local name for a block the store does not declare", async () => {
120
+ // The design-system pack can be absent while this one is present — a
121
+ // `sources` config carrying only the implementation graph. The row must
122
+ // stay readable, so the fallback is exercised against an edge whose target
123
+ // is a bare IRI with no `ds:name` anywhere in the store.
124
+ const fixture = await bootFixtureRuntime({
125
+ ttl: `${CANONICAL_TTL}
126
+ ds:implementation.library.orphan-lib a ds:ImplementationLibrary ;
127
+ ds:libraryName "@canonical/orphan-lib" ;
128
+ ds:platform "react" ;
129
+ ds:hasImplementation ds:implementation.orphan-lib.unnamed .
130
+
131
+ ds:implementation.orphan-lib.unnamed a ds:ImplementationObject ;
132
+ ds:implementsBlock ds:global.component.unnamed_block ;
133
+ ds:headLink "https://example.test/orphan/Unnamed.tsx" .
134
+ `,
135
+ config: CANONICAL_CONFIG,
136
+ });
137
+ fixtures.push(fixture);
138
+ const out = await executeVerb(
139
+ listVerb,
140
+ {},
141
+ NO_MUTATION,
142
+ bootRuntime(JSON_FLAGS, fixture.cwd),
143
+ );
144
+ const list = JSON.parse(out.stdout as string).data as Row[];
145
+ const orphan = list.find((r) => r.library === "@canonical/orphan-lib");
146
+ expect(orphan?.block).toBe("global.component.unnamed_block");
147
+ });
148
+ });
149
+
150
+ describe("implementation list — the declared filters", () => {
151
+ it("--platform keeps only that platform's rows", async () => {
152
+ expect(pairs(await rows(listVerb, { platform: "svelte" }))).toEqual([
153
+ "Button|@canonical/svelte-ds-global",
154
+ ]);
155
+ });
156
+
157
+ it("--library keeps only that library's rows", async () => {
158
+ expect(
159
+ pairs(await rows(listVerb, { library: "@canonical/react-ds-global" })),
160
+ ).toEqual([
161
+ "Button|@canonical/react-ds-global",
162
+ "Modal|@canonical/react-ds-global",
163
+ ]);
164
+ });
165
+
166
+ it("--search matches the block name and the library name alike", async () => {
167
+ expect(pairs(await rows(listVerb, { search: "modal" }))).toEqual([
168
+ "Modal|@canonical/react-ds-global",
169
+ ]);
170
+ expect(pairs(await rows(listVerb, { search: "svelte" }))).toEqual([
171
+ "Button|@canonical/svelte-ds-global",
172
+ ]);
173
+ });
174
+ });
175
+
176
+ describe("implementation libraries — the library rows", () => {
177
+ it("lists every library with its platform, tier, version and block count", async () => {
178
+ const list = await rows(librariesVerb);
179
+ expect(list.map((r) => r.name).sort()).toEqual([
180
+ "@canonical/react-ds-global",
181
+ "@canonical/svelte-ds-global",
182
+ ]);
183
+ const react = list.find((r) => r.name === "@canonical/react-ds-global");
184
+ expect(react).toMatchObject({
185
+ platform: "react",
186
+ tier: "global",
187
+ version: "0.34.0",
188
+ count: "2",
189
+ });
190
+ });
191
+
192
+ it("the counts agree with the rows `implementation list` returns", async () => {
193
+ // `ds:implementationCount` is asserted by the aggregate INDEX, on the same
194
+ // subject the per-library file describes. The two files can drift apart in
195
+ // the generator, and a count that disagrees with the edges is worse than no
196
+ // count at all — so the two halves are compared rather than each pinned.
197
+ const [libraries, list] = await Promise.all([
198
+ rows(librariesVerb),
199
+ rows(listVerb),
200
+ ]);
201
+ for (const library of libraries) {
202
+ const actual = list.filter((r) => r.library === library.name).length;
203
+ expect(Number(library.count)).toBe(actual);
204
+ }
205
+ });
206
+ });
@@ -24,8 +24,8 @@
24
24
  *
25
25
  * TODO(AV-231/E4): when `node-pty` (or an equivalent PTY shim) is on the
26
26
  * devDependency set, replace each `it.todo` with a PTY-driven `it` that spawns
27
- * `dist/pragma create …` under a pty, writes the keystroke, and asserts the exit
28
- * code + "Cancelled." line. The compiled binary is already provisioned for the
27
+ * the shipped `pragma create …` under a pty, writes the keystroke, and asserts the exit
28
+ * code + "Cancelled." line. The shipped entry is already provisioned for the
29
29
  * spawn-e2e layer by `testing/perf/globalSetup.ts`.
30
30
  */
31
31
 
@@ -30,7 +30,7 @@ import { tmpdir } from "node:os";
30
30
  import { join } from "node:path";
31
31
  import { afterEach, beforeEach, describe, expect, it } from "vitest";
32
32
  import { capabilities } from "../../capabilities/index.js";
33
- import { readLock } from "../../kernel/runtime/lock.js";
33
+ import { readActivePack } from "../../kernel/runtime/paths.js";
34
34
  import { DEFAULT_PACK_TTL } from "../fixtures/graph/defaultPack.js";
35
35
  import { type McpHarness, projectMcp } from "../helpers/projectMcp.js";
36
36
 
@@ -44,7 +44,7 @@ const tempDir = (prefix: string): string => {
44
44
 
45
45
  /**
46
46
  * A COLD project directory: a `pragma.config.ts` pointing at a real file
47
- * package, but NO lock yet — so the store boots cold until `sources_update`.
47
+ * package, but nothing built yet — so the store boots cold until `sources_update`.
48
48
  */
49
49
  function coldProject(ttl: string): string {
50
50
  const pkg = tempDir("e2-pkg-");
@@ -53,7 +53,7 @@ function coldProject(ttl: string): string {
53
53
  const cwd = tempDir("e2-proj-");
54
54
  writeFileSync(
55
55
  join(cwd, "pragma.config.ts"),
56
- `export default { packages: [{ name: "default", source: "file://${pkg}" }] };\n`,
56
+ `export default { packs: [{ name: "default", source: "file://${pkg}" }] };\n`,
57
57
  );
58
58
  return cwd;
59
59
  }
@@ -83,7 +83,7 @@ describe("MCP lifecycle — cold store recovers after sources_update (E2, C1)",
83
83
  };
84
84
  expect(error.code).toBe("STORE_UNAVAILABLE");
85
85
  expect(error.recovery?.mcp?.tool).toBe("sources_update");
86
- expect(readLock(cwd)).toBeUndefined();
86
+ expect(readActivePack(cwd)).toBeUndefined();
87
87
 
88
88
  // 2) The agent runs the recovery tool for real (confirm) — it builds the pack.
89
89
  const update = await mcp.callTool("sources_update", { confirm: true });
@@ -93,7 +93,7 @@ describe("MCP lifecycle — cold store recovers after sources_update (E2, C1)",
93
93
  expect((update.data as { contentHash: string }).contentHash).toMatch(
94
94
  /^[0-9a-f]{64}$/,
95
95
  );
96
- expect(readLock(cwd)?.contentHash).toMatch(/^[0-9a-f]{64}$/);
96
+ expect(readActivePack(cwd)).toMatch(/^[0-9a-f]{64}$/);
97
97
 
98
98
  // 3) RETRY on the SAME server: the shared store was invalidated by the
99
99
  // mutation, so the memoized cold rejection is gone and the read re-boots
@@ -104,7 +104,10 @@ describe("MCP lifecycle — cold store recovers after sources_update (E2, C1)",
104
104
  const names = (warm.data as { name: string }[])
105
105
  .map((row) => row.name)
106
106
  .sort();
107
- expect(names).toEqual(["Button", "Card"]);
107
+ // The whole pack — `block_list` is the declared, unfiltered list since
108
+ // L-OPEN-9, so no channel hides Beta Badge and no tier join hides the
109
+ // untiered Orphan Widget.
110
+ expect(names).toEqual(["Beta Badge", "Button", "Card", "Orphan Widget"]);
108
111
  });
109
112
  });
110
113
 
@@ -0,0 +1,188 @@
1
+ /**
2
+ * The package tier, end to end: a noun the distribution never shipped.
3
+ *
4
+ * A package that ships `stories/*.json` and is declared as a `file:` pack
5
+ * contributes a working command to a project that declares it — resolved by
6
+ * `sources update`, hashed into the pack, written into the pack directory, read
7
+ * back storelessly at dispatch, and answered from the fixture graph. Proven both
8
+ * in-process and through the SHIPPED entry in a real subprocess.
9
+ *
10
+ * The same package also ships a malformed story and a schema-invalid one. Those
11
+ * must be DROPPED, not fatal: package stories reach dispatch before the command
12
+ * tree exists, so a throw there fails every command — including `sources update`
13
+ * and `doctor`, the only two that can recover from it. Both of those are run
14
+ * here after the bad stories are in the pack.
15
+ */
16
+
17
+ import { readFileSync } from "node:fs";
18
+ import { join } from "node:path";
19
+ import { runTask } from "@canonical/task/node";
20
+ import { afterAll, beforeAll, describe, expect, it } from "vitest";
21
+ import { runChecks } from "../../capabilities/doctor/runChecks.js";
22
+ import { capabilities } from "../../capabilities/index.js";
23
+ import { buildUpdateTask } from "../../capabilities/sources/runUpdate.js";
24
+ import { loadEffectiveModules } from "../../kernel/packs/collect.js";
25
+ import { packDir, readActivePack } from "../../kernel/runtime/paths.js";
26
+ import type { VerbSpec } from "../../kernel/spec/types.js";
27
+ import {
28
+ bootFixtureRuntime,
29
+ type FixtureGraph,
30
+ } from "../helpers/fixtureGraph.js";
31
+ import { runCli } from "../helpers/runCli.js";
32
+
33
+ const TTL = `
34
+ @prefix ex: <https://example.org/kitchen#> .
35
+ @prefix owl: <http://www.w3.org/2002/07/owl#> .
36
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
37
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
38
+
39
+ ex:Recipe a owl:Class .
40
+ ex:name a owl:DatatypeProperty ; rdfs:domain ex:Recipe ; rdfs:range xsd:string .
41
+
42
+ ex:soup a ex:Recipe ; ex:name "Soup" .
43
+ ex:stew a ex:Recipe ; ex:name "Stew" .
44
+ `;
45
+
46
+ /** A valid read story — the noun the distribution never shipped. */
47
+ const RECIPE_STORY = JSON.stringify({
48
+ noun: "recipe",
49
+ description: "List recipes.",
50
+ colophon: "Recipes are modelled as ex:Recipe individuals.",
51
+ list: {
52
+ query:
53
+ "SELECT ?uri ?name WHERE { ?uri a ex:Recipe ; ex:name ?name } ORDER BY ?name",
54
+ columns: [{ field: "uri" }, { field: "name" }],
55
+ },
56
+ });
57
+
58
+ /** Schema-invalid: a well-formed JSON document the pack grammar rejects. */
59
+ const INVALID_STORY = JSON.stringify({ noun: "Bad Noun", list: {} });
60
+
61
+ let graph: FixtureGraph;
62
+ beforeAll(async () => {
63
+ graph = await bootFixtureRuntime({
64
+ ttl: TTL,
65
+ stories: {
66
+ "recipe.json": RECIPE_STORY,
67
+ // Not JSON at all.
68
+ "broken.json": "{ this is not json",
69
+ "invalid.json": INVALID_STORY,
70
+ },
71
+ });
72
+ }, 60_000);
73
+ afterAll(async () => {
74
+ await graph.dispose();
75
+ });
76
+
77
+ describe("a package's stories reach the pack", () => {
78
+ it("sources update carries all three story files into the pack, verbatim", () => {
79
+ const hash = readActivePack(graph.cwd);
80
+ expect(hash).toBeDefined();
81
+ const carried = JSON.parse(
82
+ readFileSync(join(packDir(hash as string), "stories.json"), "utf-8"),
83
+ ) as { source: string; content: string }[];
84
+ expect(carried.map((record) => record.source)).toEqual([
85
+ "fixture/stories/broken.json",
86
+ "fixture/stories/invalid.json",
87
+ "fixture/stories/recipe.json",
88
+ ]);
89
+ expect(
90
+ carried.find((r) => r.source === "fixture/stories/recipe.json")?.content,
91
+ ).toBe(RECIPE_STORY);
92
+ });
93
+ });
94
+
95
+ describe("a package-declared noun answers reads (in-process)", () => {
96
+ it("recipe list returns rows from the package's own graph", async () => {
97
+ const { modules } = await loadEffectiveModules(capabilities, graph.cwd);
98
+ const recipe = modules.find((module) => module.name === "recipe");
99
+ expect(recipe?.story).toBe(true);
100
+ expect(recipe?.colophon).toBe(
101
+ "Recipes are modelled as ex:Recipe individuals.",
102
+ );
103
+ const list = recipe?.verbs.find(
104
+ (verb) => verb.path.join(" ") === "recipe list",
105
+ ) as VerbSpec;
106
+ const rows = (await list.run({}, graph.runtime)) as { name: string }[];
107
+ expect(rows.map((row) => row.name)).toEqual(["Soup", "Stew"]);
108
+ });
109
+
110
+ it("names the unusable stories without failing the load", async () => {
111
+ const { problems } = await loadEffectiveModules(capabilities, graph.cwd);
112
+ expect(problems.map((problem) => problem.source).sort()).toEqual([
113
+ "fixture/stories/broken.json",
114
+ "fixture/stories/invalid.json",
115
+ ]);
116
+ // Each says WHY, not just that something was wrong.
117
+ const invalid = problems.find((p) => p.source.endsWith("invalid.json"));
118
+ expect(invalid?.message).toMatch(/Invalid story/);
119
+ });
120
+ });
121
+
122
+ describe("the two recoveries still run with bad stories in the pack", () => {
123
+ it("sources update re-resolves and reports the carried story count", async () => {
124
+ const result = await runTask(await buildUpdateTask(graph.runtime));
125
+ expect(result.packs).toEqual([
126
+ {
127
+ name: "fixture",
128
+ resolved: expect.any(String),
129
+ sourceCount: 1,
130
+ storyCount: 3,
131
+ },
132
+ ]);
133
+ });
134
+
135
+ it("doctor passes `pack refs` and lists each ignored story as a failing item", async () => {
136
+ const data = await runChecks(graph.runtime);
137
+ const check = data.checks.find((entry) => entry.name === "pack refs");
138
+ // The pack DOES answer reads, so the check passes…
139
+ expect(check?.status).toBe("pass");
140
+ expect(check?.detail).toContain("2 stories ignored");
141
+ // …with the unusable stories named underneath it.
142
+ expect(check?.items?.map((item) => item.label).sort()).toEqual([
143
+ "fixture/stories/broken.json",
144
+ "fixture/stories/invalid.json",
145
+ ]);
146
+ for (const item of check?.items ?? []) expect(item.status).toBe("fail");
147
+ });
148
+ });
149
+
150
+ describe("the shipped entry answers the package's noun (subprocess)", () => {
151
+ it("pragma recipe list --format json returns the package's rows", () => {
152
+ const result = runCli(["recipe", "list", "--format", "json"], {
153
+ cwd: graph.cwd,
154
+ });
155
+ expect(result.exitCode).toBe(0);
156
+ const rows = (JSON.parse(result.stdout) as { data: { name: string }[] })
157
+ .data;
158
+ expect(rows.map((row) => row.name)).toEqual(["Soup", "Stew"]);
159
+ // The bad stories are named on stderr, never on stdout — `--format json`
160
+ // stays machine-readable.
161
+ expect(result.stderr).toContain("fixture/stories/broken.json");
162
+ expect(result.stderr).toContain("fixture/stories/invalid.json");
163
+ });
164
+
165
+ it("pragma capabilities lists the package's tools — the surface agents read", () => {
166
+ // The MCP server registers its tools from the effective modules, so a
167
+ // catalog built from the STATIC registry would omit exactly the nouns
168
+ // `tools/list` advertises. `config show` points agents here for the verbs a
169
+ // story produces; that pointer has to be true.
170
+ const result = runCli(["capabilities", "--format", "json"], {
171
+ cwd: graph.cwd,
172
+ });
173
+ expect(result.exitCode).toBe(0);
174
+ const { data } = JSON.parse(result.stdout) as {
175
+ data: { tools: { name: string }[] };
176
+ };
177
+ expect(data.tools.map((tool) => tool.name)).toContain("recipe_list");
178
+ });
179
+
180
+ it("pragma --help does NOT list recipe — the documented fast-path limit", () => {
181
+ // `--help` reads the STATIC capability set (no config, no pack read), which
182
+ // is what keeps its budget. A package-declared noun is dispatch-only.
183
+ const help = runCli(["--help"], { cwd: graph.cwd });
184
+ expect(help.exitCode).toBe(0);
185
+ expect(help.stdout).not.toContain("recipe");
186
+ // …and the command it does not advertise still runs (asserted above).
187
+ });
188
+ });
@@ -61,9 +61,10 @@ export const liveVerbs: readonly LiveVerb[] = buildLiveVerbs();
61
61
  /**
62
62
  * Read nouns' `lookup` verbs, MCP-exposed, store-backed — restricted to the
63
63
  * PACK-lookup contract (a variadic `<name...>` positional), which the B-tier
64
- * list→lookup→batch suites drive uniformly. Bespoke single-name lookups
65
- * (`tier_lookup`, `prompt_lookup`) have their own tests, so they are excluded
66
- * here structurally (by param shape, not by naming the noun — R2).
64
+ * list→lookup→batch suites drive uniformly. The one bespoke single-name lookup
65
+ * left (`prompt_lookup`) has its own tests, so it is excluded here structurally
66
+ * (by param shape, not by naming the noun — R2). `tier_lookup` joined the pack
67
+ * contract in L-OPEN-9, so it is swept here like every other declared lookup.
67
68
  */
68
69
  export const lookupVerbs: readonly LiveVerb[] = liveVerbs.filter(
69
70
  (v) =>
@@ -1,10 +1,17 @@
1
1
  /**
2
- * A7 — `pragma mcp` serve boot, observed through the real compiled binary.
2
+ * A7 — `pragma mcp serve` boot, observed through the real shipped entry.
3
3
  *
4
4
  * Replaces the old mocked-SIGINT unit test: `runCli` spawns with no `input`,
5
5
  * which gives the child an immediately-EOF stdin (verified equivalent to
6
6
  * `< /dev/null`) — the shape a host that closes the pipe on shutdown produces.
7
7
  * The server must connect and exit cleanly, not hang or crash.
8
+ *
9
+ * The other half of the contract is the one the bin's narrow short-circuit
10
+ * exists to keep honest: only the exact serve invocation serves. `pragma mcp`,
11
+ * any help form, and any argv with a token after `serve` print text or an
12
+ * error and start NO server — which is only observable across the process
13
+ * boundary, because in-process dispatch never reaches the short-circuit at
14
+ * all.
8
15
  */
9
16
 
10
17
  import { describe, expect, it } from "vitest";
@@ -12,10 +19,58 @@ import { runCli } from "../helpers/runCli.js";
12
19
 
13
20
  describe("mcp serve — stdin close boots and exits cleanly (A7, e2e)", () => {
14
21
  it("exits 0 with no output and no signal", () => {
15
- const result = runCli(["mcp"]);
22
+ const result = runCli(["mcp", "serve"]);
16
23
  expect(result.exitCode).toBe(0);
17
24
  expect(result.signal).toBeNull();
18
25
  expect(result.stdout).toBe("");
19
26
  expect(result.stderr).toBe("");
20
27
  });
21
28
  });
29
+
30
+ describe("mcp — the noun is ordinary grammar (e2e)", () => {
31
+ it("bare `mcp` prints the noun help and exits 0, serving nothing", () => {
32
+ const result = runCli(["mcp"]);
33
+ expect(result.exitCode).toBe(0);
34
+ expect(result.stdout).toContain("Usage: pragma mcp");
35
+ expect(result.stdout).toContain("serve");
36
+ // A JSON-RPC handshake would have started with `{`; help never does.
37
+ expect(result.stdout.startsWith("{")).toBe(false);
38
+ });
39
+
40
+ it("`mcp --help` prints help rather than starting the server", () => {
41
+ const result = runCli(["mcp", "--help"]);
42
+ expect(result.exitCode).toBe(0);
43
+ expect(result.stdout).toContain("serve");
44
+ });
45
+
46
+ it("`mcp serve --help` documents the verb rather than starting it", () => {
47
+ const result = runCli(["mcp", "serve", "--help"]);
48
+ expect(result.exitCode).toBe(0);
49
+ expect(result.stdout).toContain("Start the MCP server over stdio");
50
+ expect(result.stdout).toContain("Usage: pragma mcp serve");
51
+ });
52
+ });
53
+
54
+ /**
55
+ * The short-circuit matches argv EXACTLY. A prefix match would extend the
56
+ * stdio-purity budget — no flag parsing, no first-run, nothing on stdout but
57
+ * JSON-RPC — to argv the server was never asked to answer, so a suffixed line
58
+ * would serve instead of being parsed. These are the two suffixes that prove
59
+ * the fall-through: a global flag the program owns, and a stray operand.
60
+ */
61
+ describe("mcp serve — anything suffixed falls through to the grammar (e2e)", () => {
62
+ it("`mcp serve --version` answers the global flag, serving nothing", () => {
63
+ const result = runCli(["mcp", "serve", "--version"]);
64
+ expect(result.exitCode).toBe(0);
65
+ expect(result.stdout.trim()).toMatch(/^\d+\.\d+\.\d+/);
66
+ // A JSON-RPC handshake would have started with `{`; a version never does.
67
+ expect(result.stdout.startsWith("{")).toBe(false);
68
+ });
69
+
70
+ it("`mcp serve extra` is parsed, so its bad global value is rejected", () => {
71
+ const result = runCli(["mcp", "serve", "extra", "--format", "bogus"]);
72
+ expect(result.exitCode).toBe(2);
73
+ expect(result.stderr).toContain('Invalid format "bogus"');
74
+ expect(result.stdout).toBe("");
75
+ });
76
+ });
@@ -13,7 +13,7 @@
13
13
  * Representative args are built structurally: a lookup/sample's positional
14
14
  * resolves through its noun's OWN `list` (browse-then-address, same as B1); a
15
15
  * `prefix`/`uri`-named positional (the grammar's TBox/entity-inspection
16
- * convention, used today by `ontology show`/`graph inspect`) resolves from the
16
+ * convention, used today by `ontology lookup`/`graph inspect`) resolves from the
17
17
  * pack index generically, not by noun name. A mutating tool is called WITHOUT
18
18
  * `confirm` (a safe plan-only preview).
19
19
  */
@@ -21,6 +21,8 @@
21
21
  import { afterAll, beforeAll, describe, expect, it } from "vitest";
22
22
  import { capabilities } from "../../capabilities/index.js";
23
23
  import { readPackIndex } from "../../kernel/completion/entitySource.js";
24
+ import type { PackIndex } from "../../kernel/runtime/graphpack/types.js";
25
+ import { resolveSources } from "../../kernel/runtime/resolveSources.js";
24
26
  import {
25
27
  ALL_VISIBLE_CONFIG,
26
28
  CANONICAL_TTL,
@@ -41,6 +43,8 @@ let mcp: Awaited<ReturnType<typeof projectMcp>>;
41
43
  let firstNameByNoun: Map<string, string>;
42
44
  /** The registered tool list, fetched once (annotations are call-invariant). */
43
45
  let registeredTools: Awaited<ReturnType<typeof mcp.listTools>>;
46
+ /** The index of the pack the fixture's boot decision names. */
47
+ let activeIndex: PackIndex | undefined;
44
48
 
45
49
  beforeAll(async () => {
46
50
  fixture = await bootFixtureRuntime({
@@ -49,6 +53,9 @@ beforeAll(async () => {
49
53
  });
50
54
  mcp = await projectMcp(capabilities, fixture.cwd);
51
55
  registeredTools = await mcp.listTools();
56
+ activeIndex = readPackIndex(
57
+ resolveSources(await fixture.runtime.loadConfig(), fixture.cwd),
58
+ );
52
59
 
53
60
  firstNameByNoun = new Map();
54
61
  for (const v of listVerbs) {
@@ -81,15 +88,13 @@ function representativeValue(
81
88
  param: LiveVerb["spec"]["params"][number],
82
89
  ): unknown {
83
90
  if (param.name === "prefix") {
84
- const prefix = Object.keys(readPackIndex(fixture.cwd)?.prefixes ?? {}).find(
91
+ const prefix = Object.keys(activeIndex?.prefixes ?? {}).find(
85
92
  (p) => p !== "owl" && p !== "rdfs" && p !== "rdf" && p !== "xsd",
86
93
  );
87
94
  return prefix ?? "ds";
88
95
  }
89
96
  if (param.name === "uri") {
90
- const entity = readPackIndex(fixture.cwd)?.entities.find(
91
- (e) => e.box === "abox",
92
- );
97
+ const entity = activeIndex?.entities.find((e) => e.box === "abox");
93
98
  return entity?.prefixed ?? entity?.name ?? "";
94
99
  }
95
100
  // An enum positional (e.g. `config set <key>`) must
@@ -22,8 +22,32 @@ describe("--version at every level (A2, e2e)", () => {
22
22
  expect(VERSION).toMatch(/^\d+\.\d+\.\d+/);
23
23
  });
24
24
 
25
- it("-v is equivalent to --version", () => {
26
- expect(runCli(["-v"]).stdout.trim()).toBe(VERSION);
25
+ it("-v is rejected — --version is the one spelling", () => {
26
+ const result = runCli(["-v"]);
27
+ expect(result.exitCode).toBe(2);
28
+ expect(result.stderr).toContain('Unknown option "-v"');
29
+ });
30
+ });
31
+
32
+ describe("global value flags reject bad values loudly (e2e)", () => {
33
+ it("--format text is not a format", () => {
34
+ const result = runCli(["config", "show", "--format", "text"]);
35
+ expect(result.exitCode).toBe(2);
36
+ expect(result.stderr).toContain('Invalid format "text"');
37
+ expect(result.stderr).toContain("plain, llm, json");
38
+ });
39
+
40
+ it("--detail rejects an unrecognized level, naming the valid ones", () => {
41
+ const result = runCli(["config", "show", "--detail", "bogus"]);
42
+ expect(result.exitCode).toBe(2);
43
+ expect(result.stderr).toContain('Invalid detail "bogus"');
44
+ expect(result.stderr).toContain("summary, standard, detailed");
45
+ });
46
+
47
+ it("--verbose=<x> is rejected — the flag takes no value", () => {
48
+ const result = runCli(["config", "show", "--verbose=true"]);
49
+ expect(result.exitCode).toBe(2);
50
+ expect(result.stderr).toContain("`--verbose` takes no value");
27
51
  });
28
52
  });
29
53
 
@@ -51,6 +51,16 @@ const BANNED: readonly BannedPattern[] = [
51
51
  reason:
52
52
  "retired `--llm` flag (now the `--format llm` form, auto-detected when piped)",
53
53
  },
54
+ {
55
+ pattern: /--all-tiers\b/,
56
+ reason:
57
+ "retired `--all-tiers` flag (L-OPEN-9: `block list` is the declared, unfiltered story — there is no tier filter to escape)",
58
+ },
59
+ {
60
+ pattern: /\btoken[ _]add-config\b/,
61
+ reason:
62
+ "removed `token add-config` command / `token_add-config` tool (L-OPEN-9: a mutation the declared read grammar has no verb for)",
63
+ },
54
64
  ];
55
65
 
56
66
  // Every shipped doc must be free of retired vocabulary: the README plus every