@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
@@ -6,6 +6,14 @@
6
6
  * user-supplied names are always escaped SPARQL string literals, and level-gated
7
7
  * fields below the active level are excluded from the projection (fetch-gating).
8
8
  * Matching on the `by` property is exact and case-insensitive.
9
+ *
10
+ * Every name-addressed resolve is TOTALLY ORDERED before its `LIMIT 1`. A name
11
+ * can recur across tiers, and an unordered `LIMIT 1` hands the tie to the
12
+ * store's enumeration order — a different answer on a different machine, or
13
+ * after a repack. `ORDER BY STR(?uri)` is a total, engine-independent order over
14
+ * a variable that is always bound (`?uri` carries the `by` triple), so it needs
15
+ * no unbound-value sentinel. It fixes WHICH answer is arbitrary, not WHETHER:
16
+ * declaring a precedence between tiers is an ontology change, tracked separately.
9
17
  */
10
18
 
11
19
  import { activeExpands, activeFields } from "../disclosure.js";
@@ -74,12 +82,32 @@ export function buildLookupQuery(
74
82
  body,
75
83
  ` FILTER (LCASE(STR(?name)) = LCASE("${escapeSparqlString(name)}"))`,
76
84
  "}",
85
+ "ORDER BY STR(?uri)",
77
86
  "LIMIT 1",
78
87
  ]
79
88
  .filter((line) => line !== "")
80
89
  .join("\n");
81
90
  }
82
91
 
92
+ /**
93
+ * The `?name` clause for an IRI-addressed form.
94
+ *
95
+ * An IRI names the entity by itself, so the `by` value is a LABEL to project,
96
+ * not the thing that identifies it — and a class constraint is already a
97
+ * sufficient existence check. Requiring the `by` triple here made every entity
98
+ * that carries no name unaddressable by any means at all: 131 of the 144 live
99
+ * code standards have no `cs:name` (their displayed name is synthesized from the
100
+ * IRI by the list story), and shell completion offers their IRIs. So the triple
101
+ * is OPTIONAL wherever a class constraint can vouch for the entity, and
102
+ * REQUIRED only for a lookup that declares no `type`/`types` — where it is the
103
+ * one thing standing between a typo'd IRI and an empty entity.
104
+ */
105
+ function iriNameClause(lookup: PackLookup): string {
106
+ const named = `?uri ${formatTerm(lookup.by)} ?name .`;
107
+ const constrained = Boolean(lookup.type ?? lookup.types?.length);
108
+ return constrained ? ` OPTIONAL { ${named} }` : ` ${named}`;
109
+ }
110
+
83
111
  /**
84
112
  * Build the SELECT retrieving one entity addressed directly by IRI.
85
113
  *
@@ -102,7 +130,7 @@ export function buildLookupByIriQuery(
102
130
  return [
103
131
  header,
104
132
  ` BIND(<${iri}> AS ?uri)`,
105
- ` ?uri ${formatTerm(lookup.by)} ?name .`,
133
+ iriNameClause(lookup),
106
134
  body,
107
135
  "}",
108
136
  "LIMIT 1",
@@ -127,13 +155,51 @@ export function buildNameResolveQuery(
127
155
  buildTypeConstraint(lookup).trimEnd(),
128
156
  ` FILTER (LCASE(STR(?name)) = LCASE("${escapeSparqlString(name)}"))`,
129
157
  "}",
130
- // Names can recur across tiers; LIMIT 1 takes the store's first match.
158
+ "ORDER BY STR(?uri)",
159
+ "LIMIT 1",
160
+ ]
161
+ .filter((line) => line !== "")
162
+ .join("\n");
163
+ }
164
+
165
+ /**
166
+ * Build the minimal IRI→entity resolve for a graphql-sourced lookup: the mirror
167
+ * of {@link buildNameResolveQuery} for the other argument shape.
168
+ *
169
+ * The GraphQL lane fetches by IRI, so this exists to ANSWER ONE QUESTION — does
170
+ * the pack's class constraint vouch for this entity? — and to pick up a display
171
+ * name if there is one. Injection-safe by construction: `iri` is already
172
+ * resolved and validated against the embeddable-IRI shape by the caller.
173
+ */
174
+ export function buildIriResolveQuery(lookup: PackLookup, iri: string): string {
175
+ return [
176
+ "SELECT ?uri ?name WHERE {",
177
+ ` BIND(<${iri}> AS ?uri)`,
178
+ iriNameClause(lookup),
179
+ buildTypeConstraint(lookup).trimEnd(),
180
+ "}",
131
181
  "LIMIT 1",
132
182
  ]
133
183
  .filter((line) => line !== "")
134
184
  .join("\n");
135
185
  }
136
186
 
187
+ /** Build the SELECT listing every entity IRI a lookup can address (IRI globs). */
188
+ export function buildLookupIrisQuery(lookup: PackLookup): string {
189
+ const constraint = buildTypeConstraint(lookup).trimEnd();
190
+ return [
191
+ "SELECT DISTINCT ?uri WHERE {",
192
+ // A pack that constrains by class is asking about its class; one that does
193
+ // not has only the `by` triple to bound the scan, so it keeps that bound
194
+ // (and, like the name population, addresses only entities that carry one).
195
+ constraint !== "" ? constraint : ` ?uri ${formatTerm(lookup.by)} ?name .`,
196
+ "}",
197
+ "ORDER BY STR(?uri)",
198
+ ]
199
+ .filter((line) => line !== "")
200
+ .join("\n");
201
+ }
202
+
137
203
  /**
138
204
  * Build the sub-SELECT retrieving one expand's child rows for a resolved entity.
139
205
  *
@@ -166,7 +232,13 @@ export function buildExpandQuery(
166
232
  /** Build the SELECT listing all entity names — lookup-miss suggestions. */
167
233
  export function buildLookupNamesQuery(lookup: PackLookup): string {
168
234
  return [
169
- "SELECT ?name WHERE {",
235
+ // DISTINCT: this population feeds miss-suggestions and glob expansion, and
236
+ // a name that several entities share is one CANDIDATE, not several. Without
237
+ // it a glob matching such a name expanded to it once per entity carrying
238
+ // it, and `lookup` then resolved each copy to the same winner — so
239
+ // `block lookup 'Butt*'` listed one Button twice while the other Button
240
+ // never appeared at all.
241
+ "SELECT DISTINCT ?name WHERE {",
170
242
  ` ?uri ${formatTerm(lookup.by)} ?name .`,
171
243
  buildTypeConstraint(lookup).trimEnd(),
172
244
  "}",
@@ -0,0 +1,37 @@
1
+ /**
2
+ * The SPARQL path — every generated read a pack story performs, and the two
3
+ * row operations that must NOT be generated.
4
+ *
5
+ * The domain is organised around one invariant: user input never reaches query
6
+ * text. The query builders compose only from validated pack terms and escaped
7
+ * literals, so a name a user typed becomes a SPARQL string literal or nothing;
8
+ * `runSelect` is the single choke point every one of those trusted queries
9
+ * goes through, which is what makes "a generated query failed" distinguishable
10
+ * from "the user's own `graph query` failed". Filtering and search then run as
11
+ * predicates over the resolved ROWS rather than as clauses in the query —
12
+ * which is why they live in this domain despite touching no SPARQL at all:
13
+ * they are the operations that would otherwise be tempting to express as query
14
+ * text, and keeping them here keeps the temptation answered.
15
+ *
16
+ * The escaping primitives stay internal. They are how the builders keep that
17
+ * invariant, not a service for composing query text elsewhere — a caller with
18
+ * the escaper is a caller who can build an unvalidated query, which is exactly
19
+ * the shape this domain exists to prevent.
20
+ *
21
+ * Two names re-exported by `buildLookupQuery.ts` for its own callers'
22
+ * convenience — the disclosure-level field and expand selectors — are also
23
+ * omitted. They belong to `kernel/packs/disclosure.ts`; laundering them
24
+ * through here would make this domain look like their owner and freeze a
25
+ * pass-through that has no reason to be permanent.
26
+ */
27
+
28
+ export { applyPackFilters } from "./applyFilters.js";
29
+ export { applyPackSearch } from "./applySearch.js";
30
+ export {
31
+ buildExpandQuery,
32
+ buildLookupByIriQuery,
33
+ buildLookupNamesQuery,
34
+ buildLookupQuery,
35
+ buildNameResolveQuery,
36
+ } from "./buildLookupQuery.js";
37
+ export { runSelect } from "./runSelect.js";
@@ -1,18 +1,32 @@
1
1
  /**
2
2
  * `runSelect` — the single choke point for every TRUSTED, generated SPARQL read.
3
3
  *
4
- * Pins the unseeded-store remap: a generated pack query only references the
5
- * pack's own `ds:`/`cs:` prefixes, so a "Prefix not found" from the facade means
6
- * the store was never built — an actionable STORE_UNAVAILABLE, NOT a raw error
7
- * collapsing to INTERNAL_ERROR ("please report this issue"). The recovery carries
8
- * BOTH the CLI command (`pragma sources update`) and the MCP tool an agent calls
9
- * (`sources_update`), so either surface can recover.
4
+ * Pins the remap: a generated query is composed from declared and pack-authored
5
+ * terms, never from user input, so a "Prefix not found" from the facade means
6
+ * the store cannot answer this read — an actionable error, NOT a raw one
7
+ * collapsing to INTERNAL_ERROR ("report this issue").
8
+ *
9
+ * WHICH actionable error is the story's provenance to decide, which is the
10
+ * second thing pinned here. A DISTRIBUTION story keeps STORE_UNAVAILABLE and its
11
+ * recovery, carrying BOTH the CLI command (`pragma sources update`) and the MCP
12
+ * tool an agent calls (`sources_update`), so either surface can recover. A
13
+ * CONFIG or PACKAGE story gets CONFIG_ERROR naming the story instead: its author
14
+ * named a prefix nothing binds, and `sources update` cannot conjure a term.
10
15
  */
11
16
 
12
17
  import { describe, expect, it } from "vitest";
13
18
  import type { PragmaRuntime } from "../../runtime/types.js";
19
+ import { distributionSource, type StorySource } from "../types.js";
14
20
  import { runSelect } from "./runSelect.js";
15
21
 
22
+ /** A story declared by a package (a third party's own file). */
23
+ const PACKAGE: StorySource = {
24
+ label: "@acme/recipes/stories/recipe.json",
25
+ origin: "package",
26
+ };
27
+ /** A story declared in the user's config. */
28
+ const CONFIG: StorySource = { label: "config", origin: "config" };
29
+
16
30
  /** A runtime whose query facade throws the given error for every SPARQL call. */
17
31
  function throwingRuntime(error: unknown): Pick<PragmaRuntime, "query"> {
18
32
  return {
@@ -35,14 +49,14 @@ function selectRuntime(
35
49
  };
36
50
  }
37
51
 
38
- describe("runSelect — unseeded-store remap (ROOT A)", () => {
52
+ describe("runSelect — unanswerable-store remap (ROOT A)", () => {
39
53
  it("remaps a 'Prefix not found' to STORE_UNAVAILABLE with CLI + MCP recovery", async () => {
40
54
  let caught: unknown;
41
55
  try {
42
56
  await runSelect(
43
57
  throwingRuntime(new Error("Prefix not found: ds")),
44
58
  "SELECT ?x WHERE { ?x a ds:Thing }",
45
- "block",
59
+ distributionSource("block"),
46
60
  );
47
61
  } catch (error) {
48
62
  caught = error;
@@ -50,6 +64,12 @@ describe("runSelect — unseeded-store remap (ROOT A)", () => {
50
64
 
51
65
  // The whole point: it is NOT an unclassified INTERNAL_ERROR.
52
66
  expect(caught).toMatchObject({ code: "STORE_UNAVAILABLE" });
67
+ // …and it claims only what it knows. The same failure reaches a store that
68
+ // IS built, from a pack whose vocabulary is simply different, so the
69
+ // message must not tell that user their store is unbuilt.
70
+ expect((caught as { message: string }).message).toContain(
71
+ "not built from a pack that defines every term",
72
+ );
53
73
  const recovery = (caught as { recovery?: Record<string, unknown> })
54
74
  .recovery;
55
75
  expect(recovery?.cli).toBe("pragma sources update");
@@ -61,7 +81,11 @@ describe("runSelect — unseeded-store remap (ROOT A)", () => {
61
81
  const boom = new Error("some other engine failure");
62
82
  let caught: unknown;
63
83
  try {
64
- await runSelect(throwingRuntime(boom), "SELECT ?x WHERE {}", "block");
84
+ await runSelect(
85
+ throwingRuntime(boom),
86
+ "SELECT ?x WHERE {}",
87
+ distributionSource("block"),
88
+ );
65
89
  } catch (error) {
66
90
  caught = error;
67
91
  }
@@ -73,8 +97,78 @@ describe("runSelect — unseeded-store remap (ROOT A)", () => {
73
97
  const rows = await runSelect(
74
98
  selectRuntime([{ name: "Button" }, { name: "Card" }]),
75
99
  "SELECT ?name WHERE { ?x ds:name ?name }",
76
- "block",
100
+ distributionSource("block"),
77
101
  );
78
102
  expect(rows).toEqual([{ name: "Button" }, { name: "Card" }]);
79
103
  });
80
104
  });
105
+
106
+ describe("runSelect — an unbound prefix is diagnosed by PROVENANCE", () => {
107
+ const unbound = (): Error => new Error("Prefix not found: acme");
108
+
109
+ for (const source of [PACKAGE, CONFIG]) {
110
+ it(`a ${source.origin} story gets CONFIG_ERROR naming the story`, async () => {
111
+ // `sources update` cannot help an author who named a prefix nothing
112
+ // binds — no amount of building conjures a term. Telling them to run it
113
+ // (as this path used to) sends them round a loop that cannot terminate.
114
+ // `buildIndex` already treats the same condition as the ordinary
115
+ // third-party case; the query path used to escalate it.
116
+ let caught: unknown;
117
+ try {
118
+ await runSelect(
119
+ throwingRuntime(unbound()),
120
+ "SELECT ?x WHERE { ?x a acme:Thing }",
121
+ source,
122
+ );
123
+ } catch (error) {
124
+ caught = error;
125
+ }
126
+ expect(caught).toMatchObject({ code: "CONFIG_ERROR" });
127
+ const { message } = caught as { message: string };
128
+ // It names the story, so the author knows which file to fix.
129
+ expect(message).toContain(source.label);
130
+ expect(message).toContain("does not bind");
131
+ // And it does NOT send them to the lever that cannot help.
132
+ expect(message).not.toContain("sources update");
133
+ expect(
134
+ (caught as { recovery?: { cli?: string } }).recovery?.cli,
135
+ ).toBeUndefined();
136
+ });
137
+ }
138
+
139
+ it("the distribution's own story keeps STORE_UNAVAILABLE", async () => {
140
+ // Unchanged, and the reason is real: the distribution's stories ship with
141
+ // the packs that bind their terms, so an unbound prefix there means nothing
142
+ // is built yet — which `sources update` does fix.
143
+ let caught: unknown;
144
+ try {
145
+ await runSelect(
146
+ throwingRuntime(unbound()),
147
+ "SELECT ?x WHERE { ?x a ds:Thing }",
148
+ distributionSource("pragma.conf.ts"),
149
+ );
150
+ } catch (error) {
151
+ caught = error;
152
+ }
153
+ expect(caught).toMatchObject({ code: "STORE_UNAVAILABLE" });
154
+ expect((caught as { recovery?: { cli?: string } }).recovery?.cli).toBe(
155
+ "pragma sources update",
156
+ );
157
+ });
158
+
159
+ it("a non-SELECT still names the story on every origin", async () => {
160
+ const askRuntime = {
161
+ query: {
162
+ sparql: async () => ({ type: "ask", boolean: true }),
163
+ } as unknown as PragmaRuntime["query"],
164
+ };
165
+ for (const source of [PACKAGE, CONFIG, distributionSource("block")]) {
166
+ await expect(
167
+ runSelect(askRuntime, "ASK { ?x ?y ?z }", source),
168
+ ).rejects.toMatchObject({
169
+ code: "CONFIG_ERROR",
170
+ message: expect.stringContaining(source.label),
171
+ });
172
+ }
173
+ });
174
+ });
@@ -10,18 +10,27 @@
10
10
  * (`graph query`) goes through the facade directly and stays INVALID_INPUT.
11
11
  */
12
12
 
13
- import { RECOVERY_CLI_PREFIX } from "../../../constants.js";
14
- import { PragmaError } from "../../error/PragmaError.js";
15
- import { cliRecovery } from "../../error/recovery.js";
16
- import type { PragmaRuntime } from "../../runtime/types.js";
17
- import type { PackRow } from "../types.js";
13
+ import { cliRecovery, PragmaError } from "../../error/index.js";
14
+ import type { PragmaRuntime } from "../../runtime/index.js";
15
+ import type { PackRow, StorySource } from "../types.js";
18
16
 
19
17
  /**
20
18
  * True when a trusted, generated query failed because the store does not know a
21
- * prefix it used. A generated pack query only references the pack's own
22
- * ontology prefixes (`ds:`/`cs:`), so a "prefix not found" means the store is
23
- * unseeded — the fresh-install embedded fallback carries no design-system
24
- * ontology — rather than a query bug.
19
+ * prefix it used. Generated queries are composed from terms the distribution
20
+ * declares and from a pack's own story text, never from user input — so an
21
+ * unknown prefix is never a query bug. It means this store was not built from a
22
+ * pack that binds that term: most often nothing was built at all, and otherwise
23
+ * a store built from a pack whose vocabulary is simply different.
24
+ *
25
+ * For a DISTRIBUTION story both are answered by the same lever
26
+ * (`sources update`), so both are remapped to it; the message says which claim
27
+ * it is actually making, and does NOT assert the store is unbuilt. Widening the
28
+ * detection any further would start hiding query bugs, which is the failure this
29
+ * whole choke point exists to prevent.
30
+ *
31
+ * A story from a package or a user's config is a different diagnosis, which is
32
+ * why {@link runSelect} now takes the query's provenance: see
33
+ * {@link unboundPrefixError}.
25
34
  */
26
35
  function isUnseededStoreError(error: unknown): boolean {
27
36
  const message = error instanceof Error ? error.message : String(error);
@@ -29,33 +38,60 @@ function isUnseededStoreError(error: unknown): boolean {
29
38
  }
30
39
 
31
40
  /**
32
- * Run the facade query, remapping an unseeded-store failure. A generated pack
33
- * query hitting an unknown prefix means the store was never built for this
34
- * design system (the first thing a fresh install hits) — surface the actionable
35
- * STORE_UNAVAILABLE with the canonical `pragma sources update` recovery instead
36
- * of a raw SPARQL "Prefix not found" wrapped as INTERNAL_ERROR ("please report
37
- * this issue"). Returns the inferred facade result type, so this module stays
38
- * clear of a static `@canonical/ke` import (the lazy-dispatch guard).
41
+ * The error for a generated query naming a prefix the graph does not bind,
42
+ * diagnosed by WHO declared the story.
43
+ *
44
+ * A distribution story ships with the packs that bind its terms, so the honest
45
+ * reading is "nothing is built yet" (or "what is built came from a pack with a
46
+ * different vocabulary") — both fixed by `sources update`, so it keeps today's
47
+ * STORE_UNAVAILABLE and that recovery.
48
+ *
49
+ * A config or package story is the author's own: they named a prefix the graph
50
+ * does not bind, and `sources update` cannot help them — `buildIndex` already
51
+ * treats the same condition as the ordinary third-party case and degrades
52
+ * gracefully, while this path escalated it. It is a CONFIG_ERROR naming the
53
+ * story, which is the module's own precedent for a declaration that cannot be
54
+ * served (ruling R3).
55
+ */
56
+ function unboundPrefixError(source: StorySource): PragmaError {
57
+ if (source.origin !== "distribution") {
58
+ return PragmaError.configError(
59
+ `Story query in ${source.label} uses a prefix the graph does not bind. ` +
60
+ `Declare it under \`prefixes\`, or use a term the configured packs define.`,
61
+ );
62
+ }
63
+ return PragmaError.storeUnavailable(
64
+ "The local store was not built from a pack that defines every term this read uses.",
65
+ {
66
+ recovery: cliRecovery(
67
+ "sources update",
68
+ "Build the local store from the configured packs.",
69
+ // An agent recovers by calling the tool, then retrying (PR9 C1 cold-
70
+ // store retry makes the post-update retry succeed).
71
+ { tool: "sources_update" },
72
+ ),
73
+ },
74
+ );
75
+ }
76
+
77
+ /**
78
+ * Run the facade query, remapping a store that cannot answer it. A generated
79
+ * query hitting an unknown prefix surfaces an actionable error — chosen by the
80
+ * story's provenance, see {@link unboundPrefixError} — instead of a raw SPARQL
81
+ * "Prefix not found" wrapped as INTERNAL_ERROR ("report this issue").
82
+ * Returns the inferred facade result type, so this module stays clear of a
83
+ * static `@canonical/ke` import (the lazy-dispatch guard).
39
84
  */
40
- async function queryOrRemap(rt: Pick<PragmaRuntime, "query">, query: string) {
85
+ async function queryOrRemap(
86
+ rt: Pick<PragmaRuntime, "query">,
87
+ query: string,
88
+ source: StorySource,
89
+ ) {
41
90
  try {
42
91
  return await rt.query.sparql(query);
43
92
  } catch (error) {
44
93
  if (error instanceof PragmaError) throw error;
45
- if (isUnseededStoreError(error)) {
46
- throw PragmaError.storeUnavailable(
47
- "The store has not been built for this project yet.",
48
- {
49
- recovery: cliRecovery(
50
- `${RECOVERY_CLI_PREFIX}sources update`,
51
- "Build the local store from the configured design-system packages.",
52
- // An agent recovers by calling the tool, then retrying (PR9 C1 cold-
53
- // store retry makes the post-update retry succeed).
54
- { tool: "sources_update" },
55
- ),
56
- },
57
- );
58
- }
94
+ if (isUnseededStoreError(error)) throw unboundPrefixError(source);
59
95
  throw error;
60
96
  }
61
97
  }
@@ -63,21 +99,23 @@ async function queryOrRemap(rt: Pick<PragmaRuntime, "query">, query: string) {
63
99
  /**
64
100
  * @param rt - The runtime (its query facade over the lazy store).
65
101
  * @param query - SPARQL SELECT text (prefixes auto-applied by the store).
66
- * @param source - The pack source, for error attribution.
102
+ * @param source - The story's provenance: its label for attribution, and the
103
+ * layer that declared it, which decides how an unbound prefix is diagnosed.
67
104
  * @returns One record per row, keyed by SELECT variable name.
68
- * @throws PragmaError CONFIG_ERROR when the query is not a SELECT;
69
- * STORE_UNAVAILABLE (exit 3) when the store is unseeded.
105
+ * @throws PragmaError CONFIG_ERROR when the query is not a SELECT, or when a
106
+ * config/package story names a prefix the graph does not bind;
107
+ * STORE_UNAVAILABLE (exit 3) when a distribution story finds one.
70
108
  * @note Impure — queries the store through the facade.
71
109
  */
72
110
  export async function runSelect(
73
111
  rt: Pick<PragmaRuntime, "query">,
74
112
  query: string,
75
- source: string,
113
+ source: StorySource,
76
114
  ): Promise<PackRow[]> {
77
- const result = await queryOrRemap(rt, query);
115
+ const result = await queryOrRemap(rt, query, source);
78
116
  if (result.type !== "select") {
79
117
  throw PragmaError.configError(
80
- `Story query in ${source} must be a SELECT (got ${result.type}).`,
118
+ `Story query in ${source.label} must be a SELECT (got ${result.type}).`,
81
119
  );
82
120
  }
83
121
  return result.bindings as PackRow[];
@@ -13,12 +13,20 @@
13
13
  */
14
14
 
15
15
  import { describe, expect, it } from "vitest";
16
- import { standardModule } from "../../capabilities/standard/index.js";
17
- import { tokenModule } from "../../capabilities/token/index.js";
16
+ import { storyModules } from "../../capabilities/distribution.js";
18
17
  import { projectMcp } from "../../testing/helpers/projectMcp.js";
19
18
  import { formatVerbHelp } from "../project/cli/verbHelp.js";
20
19
  import type { VerbSpec } from "../spec/types.js";
21
20
 
21
+ const standardModule = storyModules.get("standard");
22
+ if (!standardModule) {
23
+ throw new Error('pragma.conf.ts declares no story for "standard"');
24
+ }
25
+ const tokenModule = storyModules.get("token");
26
+ if (!tokenModule) {
27
+ throw new Error('pragma.conf.ts declares no story for "token"');
28
+ }
29
+
22
30
  const verb = (
23
31
  module: { verbs: readonly VerbSpec[] },
24
32
  label: string,
@@ -39,9 +47,7 @@ describe("pack toolDescription wiring (PROTECTED)", () => {
39
47
  "Get type and theme values for one or more design tokens by name.",
40
48
  );
41
49
  // The authored MCP tool-call example survives on the MCP surface.
42
- expect(desc).toContain(
43
- 'Example: token_lookup { names: ["color.primary"] }',
44
- );
50
+ expect(desc).toContain('Example: token_lookup { name: ["color.primary"] }');
45
51
  });
46
52
 
47
53
  it("routes the definition-level toolDescription to the MCP list tool", async () => {
@@ -79,3 +85,44 @@ describe("pack toolDescription wiring (PROTECTED)", () => {
79
85
  expect(listHelp).not.toContain("token_list {");
80
86
  });
81
87
  });
88
+
89
+ describe("a tool-call example names a parameter the tool ACCEPTS (PROTECTED)", () => {
90
+ // Four `*_lookup` descriptions taught agents `{ names: [...] }` while every
91
+ // schema required `name`. An agent copying the example — which is what an
92
+ // example is for — got `-32602 Invalid arguments`, and the description is
93
+ // the only instruction it has. Prose that contradicts the schema beside it
94
+ // is worse than no prose: it is a documented wrong answer.
95
+ it("every `Example: tool { key: … }` uses a declared property", async () => {
96
+ const mcp = await projectMcp([...storyModules.values()]);
97
+ try {
98
+ const tools = await mcp.listTools();
99
+ const offenders: string[] = [];
100
+
101
+ for (const tool of tools) {
102
+ const example = /Example:\s*\w+\s*\{\s*([A-Za-z_$][\w$]*)\s*:/.exec(
103
+ tool.description ?? "",
104
+ );
105
+ const key = example?.[1];
106
+ if (key === undefined) continue; // No call example to check.
107
+ const properties = Object.keys(
108
+ (tool.inputSchema as { properties?: Record<string, unknown> })
109
+ ?.properties ?? {},
110
+ );
111
+ if (!properties.includes(key)) {
112
+ offenders.push(
113
+ `${tool.name}: example says \`${key}\`, schema declares ${properties.join(", ")}`,
114
+ );
115
+ }
116
+ }
117
+
118
+ expect(offenders).toEqual([]);
119
+ // Guard against a vacuous pass: some tool must actually carry an example.
120
+ expect(
121
+ tools.filter((t) => /Example:\s*\w+\s*\{/.test(t.description ?? ""))
122
+ .length,
123
+ ).toBeGreaterThan(0);
124
+ } finally {
125
+ await mcp.cleanup();
126
+ }
127
+ });
128
+ });
@@ -170,7 +170,11 @@ export interface PackSearch {
170
170
  export interface PackEmptyRecovery {
171
171
  /** Human-readable cause + fix (e.g. which packages provide the data). */
172
172
  readonly message: string;
173
- /** Runnable pragma command fixing the emptiness (rendered on the CLI). */
173
+ /**
174
+ * The command that fixes the emptiness, WITHOUT the binary name
175
+ * (`sources update`). The consuming distribution's renderer prepends its own
176
+ * name, so a story stays portable across distributions.
177
+ */
174
178
  readonly cli?: string;
175
179
  }
176
180
 
@@ -263,6 +267,19 @@ export interface PackLookup {
263
267
  * VALUES constraint on the name resolve. Mutually exclusive with `type`.
264
268
  */
265
269
  readonly types?: readonly string[];
270
+ /**
271
+ * Relative importance per addressed type, prefixed type → 0–1 (unlisted types
272
+ * default to 1). Editorial judgement about which of a noun's classes matters
273
+ * most, declared as DATA rather than frozen into the kernel — it feeds the MCP
274
+ * listing's `annotations.priority` AND breaks ties in URI-completion ranking,
275
+ * so a `ds:Subcomponent` at 0.6 sinks below every component at equal match.
276
+ *
277
+ * A separate map rather than an entry shape on `types` so `types` keeps its
278
+ * flat `readonly string[]` form and the addition is non-breaking. A key naming
279
+ * a type the lookup does not address is REJECTED, not ignored: a silent no-op
280
+ * is how a weight that never applied survives review.
281
+ */
282
+ readonly weights?: Readonly<Record<string, number>>;
266
283
  /**
267
284
  * GraphQL type or interface the generated document's inline fragment targets
268
285
  * (`source: "graphql"` only). Defaults to the local name of `type`; required
@@ -312,8 +329,8 @@ export interface PackDefinition {
312
329
  /** MCP tool description (defaults to the CLI description). */
313
330
  readonly toolDescription?: string;
314
331
  /**
315
- * The list story. Optional so a pack can serve only the lookup verb of a noun
316
- * whose list stays hand-written (e.g. `block`). At least one of `list`/`lookup`
332
+ * The list story. Optional so a pack can serve a noun that is addressable but
333
+ * not enumerable — a lookup with no list. At least one of `list`/`lookup`
317
334
  * must be declared.
318
335
  */
319
336
  readonly list?: PackList;
@@ -331,7 +348,38 @@ export interface PackDefinition {
331
348
 
332
349
  /** A validated pack definition paired with where it was declared. */
333
350
  export interface PackEntry {
334
- /** Where the definition was declared (config path, package file, or bundled). */
351
+ /** The package story file it came from, e.g. `@acme/recipes/stories/recipe.json`. */
335
352
  readonly source: string;
336
353
  readonly definition: PackDefinition;
337
354
  }
355
+
356
+ /**
357
+ * Which layer declared a story. The label alone cannot answer this — a label is
358
+ * free text for a human — and the difference changes what a failure MEANS.
359
+ *
360
+ * A generated query that names a prefix the graph does not bind is, from a
361
+ * `distribution` story, almost always an unbuilt store: the distribution's own
362
+ * stories and its packs ship together, so the terms exist as soon as anything is
363
+ * built. From a `config` or `package` story it is the opposite: the author named
364
+ * a prefix nothing binds, and no amount of building will conjure it. One is
365
+ * STORE_UNAVAILABLE with a `sources update` recovery, the other a CONFIG_ERROR
366
+ * naming the story — and telling them apart needs this at the failure site.
367
+ */
368
+ export type StoryOrigin = "distribution" | "config" | "package";
369
+
370
+ /**
371
+ * A story's provenance, threaded from where it was declared down to the query
372
+ * that runs on its behalf.
373
+ */
374
+ export interface StorySource {
375
+ /** Human-readable location, used verbatim in diagnostics. */
376
+ readonly label: string;
377
+ /** The layer that declared it. */
378
+ readonly origin: StoryOrigin;
379
+ }
380
+
381
+ /** A story the distribution itself declares (`pragma.conf.ts` and its kin). */
382
+ export const distributionSource = (label: string): StorySource => ({
383
+ label,
384
+ origin: "distribution",
385
+ });
@@ -2,13 +2,13 @@
2
2
  * Plain `(noun, verb)` uniqueness across compiled verbs.
3
3
  *
4
4
  * Replaces the old reserved-verb / derive-reserved machinery: every verb the
5
- * projectors see — authored, bundled-pack, or dynamic-pack — must own a distinct
6
- * `(noun, verb)` key. Precedence (config > package > bundled) is resolved by
7
- * NOUN before this runs, so a surviving collision here is a real conflict (a
8
- * dynamic pack claiming an authored noun's verb), reported with both sources.
5
+ * projectors see — authored, distribution-declared, or dynamic — must own a
6
+ * distinct `(noun, verb)` key. Precedence (config > package > distribution) is
7
+ * resolved by NOUN before this runs, so a surviving collision here is a real
8
+ * conflict, reported with both sources.
9
9
  */
10
10
 
11
- import type { VerbSpec } from "../spec/types.js";
11
+ import type { VerbSpec } from "../spec/index.js";
12
12
 
13
13
  /** The `(noun, verb)` key for a verb path (`["standard","list"]` → `standard list`). */
14
14
  export function verbKey(path: readonly [string, string?]): string {