@canonical/pragma-cli 0.34.0 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (798) hide show
  1. package/README.md +153 -30
  2. package/dist/.build-ok +0 -0
  3. package/dist/package.json +83 -0
  4. package/dist/pragma.conf.js +814 -0
  5. package/dist/pragma.conf.js.map +1 -0
  6. package/dist/src/bin.js +356 -0
  7. package/dist/src/bin.js.map +1 -0
  8. package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
  9. package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
  10. package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
  11. package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
  12. package/dist/src/capabilities/capabilities/catalog.js +130 -0
  13. package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
  14. package/dist/src/capabilities/capabilities/hints.js +195 -0
  15. package/dist/src/capabilities/capabilities/hints.js.map +1 -0
  16. package/dist/src/capabilities/capabilities/index.js +11 -0
  17. package/dist/src/capabilities/capabilities/index.js.map +1 -0
  18. package/dist/src/capabilities/capabilities/types.js +11 -0
  19. package/dist/src/capabilities/capabilities/types.js.map +1 -0
  20. package/dist/src/capabilities/colophon/collectColophon.js +83 -0
  21. package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
  22. package/dist/src/capabilities/colophon/colophon.render.js +59 -0
  23. package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
  24. package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
  25. package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
  26. package/dist/src/capabilities/colophon/index.js +5 -0
  27. package/dist/src/capabilities/colophon/index.js.map +1 -0
  28. package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
  29. package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
  30. package/dist/src/capabilities/colophon/types.js +10 -0
  31. package/dist/src/capabilities/colophon/types.js.map +1 -0
  32. package/dist/src/capabilities/config/collectConfigShow.js +59 -0
  33. package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
  34. package/dist/src/capabilities/config/field.render.js +22 -0
  35. package/dist/src/capabilities/config/field.render.js.map +1 -0
  36. package/dist/src/capabilities/config/fields.js +46 -0
  37. package/dist/src/capabilities/config/fields.js.map +1 -0
  38. package/dist/src/capabilities/config/get.verb.js +61 -0
  39. package/dist/src/capabilities/config/get.verb.js.map +1 -0
  40. package/dist/src/capabilities/config/index.js +5 -0
  41. package/dist/src/capabilities/config/index.js.map +1 -0
  42. package/dist/src/capabilities/config/runField.js +59 -0
  43. package/dist/src/capabilities/config/runField.js.map +1 -0
  44. package/dist/src/capabilities/config/runGet.js +28 -0
  45. package/dist/src/capabilities/config/runGet.js.map +1 -0
  46. package/dist/src/capabilities/config/runSet.js +53 -0
  47. package/dist/src/capabilities/config/runSet.js.map +1 -0
  48. package/dist/src/capabilities/config/set.verb.js +66 -0
  49. package/dist/src/capabilities/config/set.verb.js.map +1 -0
  50. package/dist/src/capabilities/config/show.render.js +84 -0
  51. package/dist/src/capabilities/config/show.render.js.map +1 -0
  52. package/dist/src/capabilities/config/show.verb.js +44 -0
  53. package/dist/src/capabilities/config/show.verb.js.map +1 -0
  54. package/dist/src/capabilities/config/types.js +5 -0
  55. package/dist/src/capabilities/config/types.js.map +1 -0
  56. package/dist/src/capabilities/config/unset.verb.js +49 -0
  57. package/dist/src/capabilities/config/unset.verb.js.map +1 -0
  58. package/dist/src/capabilities/create/cliProjection.js +195 -0
  59. package/dist/src/capabilities/create/cliProjection.js.map +1 -0
  60. package/dist/src/capabilities/create/constants.js +47 -0
  61. package/dist/src/capabilities/create/constants.js.map +1 -0
  62. package/dist/src/capabilities/create/create.render.js +100 -0
  63. package/dist/src/capabilities/create/create.render.js.map +1 -0
  64. package/dist/src/capabilities/create/create.verb.js +438 -0
  65. package/dist/src/capabilities/create/create.verb.js.map +1 -0
  66. package/dist/src/capabilities/create/createHelp.js +47 -0
  67. package/dist/src/capabilities/create/createHelp.js.map +1 -0
  68. package/dist/src/capabilities/create/createSurface.generated.js +394 -0
  69. package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
  70. package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
  71. package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
  72. package/dist/src/capabilities/create/index.js +18 -0
  73. package/dist/src/capabilities/create/index.js.map +1 -0
  74. package/dist/src/capabilities/create/messages.js +16 -0
  75. package/dist/src/capabilities/create/messages.js.map +1 -0
  76. package/dist/src/capabilities/create/mount.js +293 -0
  77. package/dist/src/capabilities/create/mount.js.map +1 -0
  78. package/dist/src/capabilities/create/pathJail.js +65 -0
  79. package/dist/src/capabilities/create/pathJail.js.map +1 -0
  80. package/dist/src/capabilities/create/pickGenerator.js +53 -0
  81. package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
  82. package/dist/src/capabilities/create/types.js +2 -0
  83. package/dist/src/capabilities/create/types.js.map +1 -0
  84. package/dist/src/capabilities/distribution.js +40 -0
  85. package/dist/src/capabilities/distribution.js.map +1 -0
  86. package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
  87. package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
  88. package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
  89. package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
  90. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +92 -0
  91. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
  92. package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
  93. package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
  94. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
  95. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
  96. package/dist/src/capabilities/doctor/checks/index.js +27 -0
  97. package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
  98. package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
  99. package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
  100. package/dist/src/capabilities/doctor/checks/targetHealth.js +205 -0
  101. package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
  102. package/dist/src/capabilities/doctor/doctor.render.js +185 -0
  103. package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
  104. package/dist/src/capabilities/doctor/doctor.verb.js +45 -0
  105. package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
  106. package/dist/src/capabilities/doctor/index.js +5 -0
  107. package/dist/src/capabilities/doctor/index.js.map +1 -0
  108. package/dist/src/capabilities/doctor/runChecks.js +83 -0
  109. package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
  110. package/dist/src/capabilities/doctor/types.js +5 -0
  111. package/dist/src/capabilities/doctor/types.js.map +1 -0
  112. package/dist/src/capabilities/graph/index.js +19 -0
  113. package/dist/src/capabilities/graph/index.js.map +1 -0
  114. package/dist/src/capabilities/graph/inspect.render.js +76 -0
  115. package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
  116. package/dist/src/capabilities/graph/inspect.verb.js +53 -0
  117. package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
  118. package/dist/src/capabilities/graph/query.render.js +73 -0
  119. package/dist/src/capabilities/graph/query.render.js.map +1 -0
  120. package/dist/src/capabilities/graph/query.verb.js +49 -0
  121. package/dist/src/capabilities/graph/query.verb.js.map +1 -0
  122. package/dist/src/capabilities/graph/runQuery.js +41 -0
  123. package/dist/src/capabilities/graph/runQuery.js.map +1 -0
  124. package/dist/src/capabilities/index.js +56 -0
  125. package/dist/src/capabilities/index.js.map +1 -0
  126. package/dist/src/capabilities/info/collectInfo.js +66 -0
  127. package/dist/src/capabilities/info/collectInfo.js.map +1 -0
  128. package/dist/src/capabilities/info/index.js +5 -0
  129. package/dist/src/capabilities/info/index.js.map +1 -0
  130. package/dist/src/capabilities/info/info.render.js +53 -0
  131. package/dist/src/capabilities/info/info.render.js.map +1 -0
  132. package/dist/src/capabilities/info/info.verb.js +42 -0
  133. package/dist/src/capabilities/info/info.verb.js.map +1 -0
  134. package/dist/src/capabilities/info/types.js +5 -0
  135. package/dist/src/capabilities/info/types.js.map +1 -0
  136. package/dist/src/capabilities/meta/complete.verb.js +43 -0
  137. package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
  138. package/dist/src/capabilities/meta/index.js +13 -0
  139. package/dist/src/capabilities/meta/index.js.map +1 -0
  140. package/dist/src/capabilities/meta/mcp.verb.js +34 -0
  141. package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
  142. package/dist/src/capabilities/ontology/index.js +21 -0
  143. package/dist/src/capabilities/ontology/index.js.map +1 -0
  144. package/dist/src/capabilities/ontology/queries.js +123 -0
  145. package/dist/src/capabilities/ontology/queries.js.map +1 -0
  146. package/dist/src/capabilities/ontology/render.js +66 -0
  147. package/dist/src/capabilities/ontology/render.js.map +1 -0
  148. package/dist/src/capabilities/ontology/verbs.js +181 -0
  149. package/dist/src/capabilities/ontology/verbs.js.map +1 -0
  150. package/dist/src/capabilities/prompt/index.js +16 -0
  151. package/dist/src/capabilities/prompt/index.js.map +1 -0
  152. package/dist/src/capabilities/prompt/prompt.render.js +78 -0
  153. package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
  154. package/dist/src/capabilities/prompt/types.js +10 -0
  155. package/dist/src/capabilities/prompt/types.js.map +1 -0
  156. package/dist/src/capabilities/prompt/verbs.js +93 -0
  157. package/dist/src/capabilities/prompt/verbs.js.map +1 -0
  158. package/dist/src/capabilities/resources/index.js +10 -0
  159. package/dist/src/capabilities/resources/index.js.map +1 -0
  160. package/dist/src/capabilities/resources/provider.js +423 -0
  161. package/dist/src/capabilities/resources/provider.js.map +1 -0
  162. package/dist/src/capabilities/setup/buildPlan.js +168 -0
  163. package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
  164. package/dist/src/capabilities/setup/index.js +5 -0
  165. package/dist/src/capabilities/setup/index.js.map +1 -0
  166. package/dist/src/capabilities/setup/mode.js +53 -0
  167. package/dist/src/capabilities/setup/mode.js.map +1 -0
  168. package/dist/src/capabilities/setup/operations/index.js +39 -0
  169. package/dist/src/capabilities/setup/operations/index.js.map +1 -0
  170. package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
  171. package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
  172. package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
  173. package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
  174. package/dist/src/capabilities/setup/operations/setupGenerator.js +343 -0
  175. package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
  176. package/dist/src/capabilities/setup/operations/setupLsp.js +277 -0
  177. package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
  178. package/dist/src/capabilities/setup/operations/setupMcp.js +207 -0
  179. package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
  180. package/dist/src/capabilities/setup/operations/setupSkills.js +316 -0
  181. package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
  182. package/dist/src/capabilities/setup/plan.js +128 -0
  183. package/dist/src/capabilities/setup/plan.js.map +1 -0
  184. package/dist/src/capabilities/setup/plan.render.js +193 -0
  185. package/dist/src/capabilities/setup/plan.render.js.map +1 -0
  186. package/dist/src/capabilities/setup/setup.render.js +54 -0
  187. package/dist/src/capabilities/setup/setup.render.js.map +1 -0
  188. package/dist/src/capabilities/setup/setup.verb.js +334 -0
  189. package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
  190. package/dist/src/capabilities/setup/shell.js +196 -0
  191. package/dist/src/capabilities/setup/shell.js.map +1 -0
  192. package/dist/src/capabilities/setup/targets.js +263 -0
  193. package/dist/src/capabilities/setup/targets.js.map +1 -0
  194. package/dist/src/capabilities/setup/types.js +5 -0
  195. package/dist/src/capabilities/setup/types.js.map +1 -0
  196. package/dist/src/capabilities/shared/assertExecOk.js +137 -0
  197. package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
  198. package/dist/src/capabilities/shared/bands.js +16 -0
  199. package/dist/src/capabilities/shared/bands.js.map +1 -0
  200. package/dist/src/capabilities/shared/index.js +26 -0
  201. package/dist/src/capabilities/shared/index.js.map +1 -0
  202. package/dist/src/capabilities/shared/packageManager.js +103 -0
  203. package/dist/src/capabilities/shared/packageManager.js.map +1 -0
  204. package/dist/src/capabilities/shared/registry.js +55 -0
  205. package/dist/src/capabilities/shared/registry.js.map +1 -0
  206. package/dist/src/capabilities/skill/discover.js +195 -0
  207. package/dist/src/capabilities/skill/discover.js.map +1 -0
  208. package/dist/src/capabilities/skill/index.js +10 -0
  209. package/dist/src/capabilities/skill/index.js.map +1 -0
  210. package/dist/src/capabilities/skill/render.js +49 -0
  211. package/dist/src/capabilities/skill/render.js.map +1 -0
  212. package/dist/src/capabilities/skill/verbs.js +83 -0
  213. package/dist/src/capabilities/skill/verbs.js.map +1 -0
  214. package/dist/src/capabilities/sources/collectStatus.js +103 -0
  215. package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
  216. package/dist/src/capabilities/sources/index.js +13 -0
  217. package/dist/src/capabilities/sources/index.js.map +1 -0
  218. package/dist/src/capabilities/sources/installSkills.js +167 -0
  219. package/dist/src/capabilities/sources/installSkills.js.map +1 -0
  220. package/dist/src/capabilities/sources/runUpdate.js +394 -0
  221. package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
  222. package/dist/src/capabilities/sources/status.render.js +64 -0
  223. package/dist/src/capabilities/sources/status.render.js.map +1 -0
  224. package/dist/src/capabilities/sources/status.verb.js +40 -0
  225. package/dist/src/capabilities/sources/status.verb.js.map +1 -0
  226. package/dist/src/capabilities/sources/types.js +6 -0
  227. package/dist/src/capabilities/sources/types.js.map +1 -0
  228. package/dist/src/capabilities/sources/update.render.js +34 -0
  229. package/dist/src/capabilities/sources/update.render.js.map +1 -0
  230. package/dist/src/capabilities/sources/update.verb.js +55 -0
  231. package/dist/src/capabilities/sources/update.verb.js.map +1 -0
  232. package/dist/src/capabilities/upgrade/index.js +5 -0
  233. package/dist/src/capabilities/upgrade/index.js.map +1 -0
  234. package/dist/src/capabilities/upgrade/runUpgrade.js +99 -0
  235. package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
  236. package/dist/src/capabilities/upgrade/types.js +5 -0
  237. package/dist/src/capabilities/upgrade/types.js.map +1 -0
  238. package/dist/src/capabilities/upgrade/upgrade.render.js +44 -0
  239. package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
  240. package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
  241. package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
  242. package/dist/src/capabilities/version/index.js +10 -0
  243. package/dist/src/capabilities/version/index.js.map +1 -0
  244. package/dist/src/capabilities/version/version.verb.js +36 -0
  245. package/dist/src/capabilities/version/version.verb.js.map +1 -0
  246. package/dist/src/constants.js +82 -0
  247. package/dist/src/constants.js.map +1 -0
  248. package/dist/src/index.js +12 -0
  249. package/dist/src/index.js.map +1 -0
  250. package/dist/src/kernel/completion/complete.js +66 -0
  251. package/dist/src/kernel/completion/complete.js.map +1 -0
  252. package/dist/src/kernel/completion/emitScripts.js +92 -0
  253. package/dist/src/kernel/completion/emitScripts.js.map +1 -0
  254. package/dist/src/kernel/completion/entitySource.js +285 -0
  255. package/dist/src/kernel/completion/entitySource.js.map +1 -0
  256. package/dist/src/kernel/completion/index.js +14 -0
  257. package/dist/src/kernel/completion/index.js.map +1 -0
  258. package/dist/src/kernel/completion/model.js +301 -0
  259. package/dist/src/kernel/completion/model.js.map +1 -0
  260. package/dist/src/kernel/completion/parse.js +253 -0
  261. package/dist/src/kernel/completion/parse.js.map +1 -0
  262. package/dist/src/kernel/completion/rank.js +101 -0
  263. package/dist/src/kernel/completion/rank.js.map +1 -0
  264. package/dist/src/kernel/completion/resolve.js +100 -0
  265. package/dist/src/kernel/completion/resolve.js.map +1 -0
  266. package/dist/src/kernel/completion/templates/bash.js +209 -0
  267. package/dist/src/kernel/completion/templates/bash.js.map +1 -0
  268. package/dist/src/kernel/completion/templates/fish.js +214 -0
  269. package/dist/src/kernel/completion/templates/fish.js.map +1 -0
  270. package/dist/src/kernel/completion/templates/index.js +23 -0
  271. package/dist/src/kernel/completion/templates/index.js.map +1 -0
  272. package/dist/src/kernel/completion/templates/shared.js +98 -0
  273. package/dist/src/kernel/completion/templates/shared.js.map +1 -0
  274. package/dist/src/kernel/completion/templates/zsh.js +201 -0
  275. package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
  276. package/dist/src/kernel/completion/types.js +13 -0
  277. package/dist/src/kernel/completion/types.js.map +1 -0
  278. package/dist/src/kernel/config/defaults.js +17 -0
  279. package/dist/src/kernel/config/defaults.js.map +1 -0
  280. package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
  281. package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
  282. package/dist/src/kernel/config/findProjectConfig.js +43 -0
  283. package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
  284. package/dist/src/kernel/config/firstRun.js +34 -0
  285. package/dist/src/kernel/config/firstRun.js.map +1 -0
  286. package/dist/src/kernel/config/globalConfig.js +79 -0
  287. package/dist/src/kernel/config/globalConfig.js.map +1 -0
  288. package/dist/src/kernel/config/index.js +16 -0
  289. package/dist/src/kernel/config/index.js.map +1 -0
  290. package/dist/src/kernel/config/paths.js +35 -0
  291. package/dist/src/kernel/config/paths.js.map +1 -0
  292. package/dist/src/kernel/config/readConfig.js +78 -0
  293. package/dist/src/kernel/config/readConfig.js.map +1 -0
  294. package/dist/src/kernel/config/schema.js +130 -0
  295. package/dist/src/kernel/config/schema.js.map +1 -0
  296. package/dist/src/kernel/config/types.js +19 -0
  297. package/dist/src/kernel/config/types.js.map +1 -0
  298. package/dist/src/kernel/config/writeConfigField.js +59 -0
  299. package/dist/src/kernel/config/writeConfigField.js.map +1 -0
  300. package/dist/src/kernel/copy.js +43 -0
  301. package/dist/src/kernel/copy.js.map +1 -0
  302. package/dist/src/kernel/error/PragmaError.js +149 -0
  303. package/dist/src/kernel/error/PragmaError.js.map +1 -0
  304. package/dist/src/kernel/error/constants.js +40 -0
  305. package/dist/src/kernel/error/constants.js.map +1 -0
  306. package/dist/src/kernel/error/fromTaskError.js +96 -0
  307. package/dist/src/kernel/error/fromTaskError.js.map +1 -0
  308. package/dist/src/kernel/error/index.js +13 -0
  309. package/dist/src/kernel/error/index.js.map +1 -0
  310. package/dist/src/kernel/error/recovery.js +52 -0
  311. package/dist/src/kernel/error/recovery.js.map +1 -0
  312. package/dist/src/kernel/error/renderError.js +115 -0
  313. package/dist/src/kernel/error/renderError.js.map +1 -0
  314. package/dist/src/kernel/error/serialize.js +25 -0
  315. package/dist/src/kernel/error/serialize.js.map +1 -0
  316. package/dist/src/kernel/error/types.js +9 -0
  317. package/dist/src/kernel/error/types.js.map +1 -0
  318. package/dist/src/kernel/index.js +25 -0
  319. package/dist/src/kernel/index.js.map +1 -0
  320. package/dist/src/kernel/packs/collect.js +187 -0
  321. package/dist/src/kernel/packs/collect.js.map +1 -0
  322. package/dist/src/kernel/packs/compile.js +304 -0
  323. package/dist/src/kernel/packs/compile.js.map +1 -0
  324. package/dist/src/kernel/packs/disclosure.js +76 -0
  325. package/dist/src/kernel/packs/disclosure.js.map +1 -0
  326. package/dist/src/kernel/packs/glob.js +38 -0
  327. package/dist/src/kernel/packs/glob.js.map +1 -0
  328. package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
  329. package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
  330. package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
  331. package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
  332. package/dist/src/kernel/packs/graphql/index.js +20 -0
  333. package/dist/src/kernel/packs/graphql/index.js.map +1 -0
  334. package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
  335. package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
  336. package/dist/src/kernel/packs/index.js +34 -0
  337. package/dist/src/kernel/packs/index.js.map +1 -0
  338. package/dist/src/kernel/packs/iri.js +110 -0
  339. package/dist/src/kernel/packs/iri.js.map +1 -0
  340. package/dist/src/kernel/packs/renderPack.js +129 -0
  341. package/dist/src/kernel/packs/renderPack.js.map +1 -0
  342. package/dist/src/kernel/packs/resolveEntity.js +223 -0
  343. package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
  344. package/dist/src/kernel/packs/runBodies.js +87 -0
  345. package/dist/src/kernel/packs/runBodies.js.map +1 -0
  346. package/dist/src/kernel/packs/sample.js +56 -0
  347. package/dist/src/kernel/packs/sample.js.map +1 -0
  348. package/dist/src/kernel/packs/schema.js +369 -0
  349. package/dist/src/kernel/packs/schema.js.map +1 -0
  350. package/dist/src/kernel/packs/sparql/applyFilters.js +68 -0
  351. package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
  352. package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
  353. package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
  354. package/dist/src/kernel/packs/sparql/buildLookupQuery.js +217 -0
  355. package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
  356. package/dist/src/kernel/packs/sparql/escape.js +21 -0
  357. package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
  358. package/dist/src/kernel/packs/sparql/index.js +31 -0
  359. package/dist/src/kernel/packs/sparql/index.js.map +1 -0
  360. package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
  361. package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
  362. package/dist/src/kernel/packs/types.js +30 -0
  363. package/dist/src/kernel/packs/types.js.map +1 -0
  364. package/dist/src/kernel/packs/uniqueness.js +30 -0
  365. package/dist/src/kernel/packs/uniqueness.js.map +1 -0
  366. package/dist/src/kernel/project/cli/buildProgram.js +263 -0
  367. package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
  368. package/dist/src/kernel/project/cli/constants.js +27 -0
  369. package/dist/src/kernel/project/cli/constants.js.map +1 -0
  370. package/dist/src/kernel/project/cli/dispatch.js +420 -0
  371. package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
  372. package/dist/src/kernel/project/cli/exitCodes.js +66 -0
  373. package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
  374. package/dist/src/kernel/project/cli/globalFlags.js +216 -0
  375. package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
  376. package/dist/src/kernel/project/cli/helpFormat.js +59 -0
  377. package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
  378. package/dist/src/kernel/project/cli/index.js +14 -0
  379. package/dist/src/kernel/project/cli/index.js.map +1 -0
  380. package/dist/src/kernel/project/cli/rootHelp.js +197 -0
  381. package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
  382. package/dist/src/kernel/project/cli/suggest.js +75 -0
  383. package/dist/src/kernel/project/cli/suggest.js.map +1 -0
  384. package/dist/src/kernel/project/cli/suggestNames.js +96 -0
  385. package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
  386. package/dist/src/kernel/project/cli/verbHelp.js +131 -0
  387. package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
  388. package/dist/src/kernel/project/mcp/buildServer.js +67 -0
  389. package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
  390. package/dist/src/kernel/project/mcp/envelope.js +37 -0
  391. package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
  392. package/dist/src/kernel/project/mcp/index.js +8 -0
  393. package/dist/src/kernel/project/mcp/index.js.map +1 -0
  394. package/dist/src/kernel/project/mcp/instructions.js +44 -0
  395. package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
  396. package/dist/src/kernel/project/mcp/mcpError.js +42 -0
  397. package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
  398. package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
  399. package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
  400. package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
  401. package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
  402. package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
  403. package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
  404. package/dist/src/kernel/project/mcp/registerVerb.js +300 -0
  405. package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
  406. package/dist/src/kernel/project/mcp/serve.js +35 -0
  407. package/dist/src/kernel/project/mcp/serve.js.map +1 -0
  408. package/dist/src/kernel/render/compactUri.js +24 -0
  409. package/dist/src/kernel/render/compactUri.js.map +1 -0
  410. package/dist/src/kernel/render/contracts.js +10 -0
  411. package/dist/src/kernel/render/contracts.js.map +1 -0
  412. package/dist/src/kernel/render/disclosure.js +34 -0
  413. package/dist/src/kernel/render/disclosure.js.map +1 -0
  414. package/dist/src/kernel/render/envelope.js +30 -0
  415. package/dist/src/kernel/render/envelope.js.map +1 -0
  416. package/dist/src/kernel/render/formatters.js +27 -0
  417. package/dist/src/kernel/render/formatters.js.map +1 -0
  418. package/dist/src/kernel/render/index.js +15 -0
  419. package/dist/src/kernel/render/index.js.map +1 -0
  420. package/dist/src/kernel/render/prefixes.js +46 -0
  421. package/dist/src/kernel/render/prefixes.js.map +1 -0
  422. package/dist/src/kernel/render/renderers.js +468 -0
  423. package/dist/src/kernel/render/renderers.js.map +1 -0
  424. package/dist/src/kernel/render/style.js +85 -0
  425. package/dist/src/kernel/render/style.js.map +1 -0
  426. package/dist/src/kernel/render/turtle.js +194 -0
  427. package/dist/src/kernel/render/turtle.js.map +1 -0
  428. package/dist/src/kernel/render/writeStdout.js +43 -0
  429. package/dist/src/kernel/render/writeStdout.js.map +1 -0
  430. package/dist/src/kernel/runtime/boot.js +49 -0
  431. package/dist/src/kernel/runtime/boot.js.map +1 -0
  432. package/dist/src/kernel/runtime/facade.js +39 -0
  433. package/dist/src/kernel/runtime/facade.js.map +1 -0
  434. package/dist/src/kernel/runtime/graphpack/build.js +122 -0
  435. package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
  436. package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
  437. package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
  438. package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
  439. package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
  440. package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
  441. package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
  442. package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
  443. package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
  444. package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
  445. package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
  446. package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
  447. package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
  448. package/dist/src/kernel/runtime/graphpack/index.js +11 -0
  449. package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
  450. package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
  451. package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
  452. package/dist/src/kernel/runtime/graphpack/read.js +92 -0
  453. package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
  454. package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
  455. package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
  456. package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
  457. package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
  458. package/dist/src/kernel/runtime/graphpack/types.js +55 -0
  459. package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
  460. package/dist/src/kernel/runtime/index.js +8 -0
  461. package/dist/src/kernel/runtime/index.js.map +1 -0
  462. package/dist/src/kernel/runtime/loadSession.js +34 -0
  463. package/dist/src/kernel/runtime/loadSession.js.map +1 -0
  464. package/dist/src/kernel/runtime/paths.js +78 -0
  465. package/dist/src/kernel/runtime/paths.js.map +1 -0
  466. package/dist/src/kernel/runtime/probe.js +37 -0
  467. package/dist/src/kernel/runtime/probe.js.map +1 -0
  468. package/dist/src/kernel/runtime/readEntity.js +363 -0
  469. package/dist/src/kernel/runtime/readEntity.js.map +1 -0
  470. package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
  471. package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
  472. package/dist/src/kernel/runtime/refs/index.js +29 -0
  473. package/dist/src/kernel/runtime/refs/index.js.map +1 -0
  474. package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
  475. package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
  476. package/dist/src/kernel/runtime/refs/resolve.js +332 -0
  477. package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
  478. package/dist/src/kernel/runtime/resolveSources.js +62 -0
  479. package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
  480. package/dist/src/kernel/runtime/store.js +75 -0
  481. package/dist/src/kernel/runtime/store.js.map +1 -0
  482. package/dist/src/kernel/runtime/storeReadiness.js +51 -0
  483. package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
  484. package/dist/src/kernel/runtime/types.js +11 -0
  485. package/dist/src/kernel/runtime/types.js.map +1 -0
  486. package/dist/src/kernel/spec/asVerb.js +21 -0
  487. package/dist/src/kernel/spec/asVerb.js.map +1 -0
  488. package/dist/src/kernel/spec/emitReference.js +578 -0
  489. package/dist/src/kernel/spec/emitReference.js.map +1 -0
  490. package/dist/src/kernel/spec/emitSurface.js +202 -0
  491. package/dist/src/kernel/spec/emitSurface.js.map +1 -0
  492. package/dist/src/kernel/spec/index.js +11 -0
  493. package/dist/src/kernel/spec/index.js.map +1 -0
  494. package/dist/src/kernel/spec/surfaceConformance.js +103 -0
  495. package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
  496. package/dist/src/kernel/spec/types.js +14 -0
  497. package/dist/src/kernel/spec/types.js.map +1 -0
  498. package/dist/src/kernel/spec/validate.js +110 -0
  499. package/dist/src/kernel/spec/validate.js.map +1 -0
  500. package/dist/src/kernel/vocabulary.js +97 -0
  501. package/dist/src/kernel/vocabulary.js.map +1 -0
  502. package/dist/src/types.js +11 -0
  503. package/dist/src/types.js.map +1 -0
  504. package/package.json +20 -22
  505. package/pragma.conf.ts +249 -60
  506. package/src/bin.ts +267 -82
  507. package/src/capabilities/block.parity.test.ts +6 -3
  508. package/src/capabilities/capabilities/capabilities.render.ts +1 -1
  509. package/src/capabilities/capabilities/capabilities.verb.ts +1 -1
  510. package/src/capabilities/capabilities/catalog.ts +3 -3
  511. package/src/capabilities/capabilities/hints.ts +32 -7
  512. package/src/capabilities/capabilities/index.ts +1 -1
  513. package/src/capabilities/colophon/collectColophon.ts +35 -24
  514. package/src/capabilities/colophon/colophon.render.ts +25 -1
  515. package/src/capabilities/colophon/colophon.test.ts +42 -21
  516. package/src/capabilities/colophon/colophon.verb.ts +4 -4
  517. package/src/capabilities/config/collectConfigShow.test.ts +1 -0
  518. package/src/capabilities/config/collectConfigShow.ts +3 -3
  519. package/src/capabilities/config/field.render.ts +4 -5
  520. package/src/capabilities/config/fields.ts +17 -10
  521. package/src/capabilities/config/get.verb.ts +70 -0
  522. package/src/capabilities/config/getUnset.test.ts +264 -0
  523. package/src/capabilities/config/index.ts +5 -1
  524. package/src/capabilities/config/runField.ts +40 -22
  525. package/src/capabilities/config/runGet.ts +34 -0
  526. package/src/capabilities/config/runSet.ts +35 -9
  527. package/src/capabilities/config/set.test.ts +48 -14
  528. package/src/capabilities/config/set.verb.ts +8 -7
  529. package/src/capabilities/config/show.render.ts +1 -1
  530. package/src/capabilities/config/show.verb.ts +9 -6
  531. package/src/capabilities/config/types.ts +18 -4
  532. package/src/capabilities/config/unset.verb.ts +58 -0
  533. package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
  534. package/src/capabilities/create/byteEquality.test.ts +25 -11
  535. package/src/capabilities/create/cliProjection.ts +227 -0
  536. package/src/capabilities/create/constants.ts +36 -61
  537. package/src/capabilities/create/create.mcp.test.ts +89 -5
  538. package/src/capabilities/create/create.render.ts +71 -7
  539. package/src/capabilities/create/create.test.ts +433 -219
  540. package/src/capabilities/create/create.verb.ts +297 -328
  541. package/src/capabilities/create/createGrammar.test.ts +865 -0
  542. package/src/capabilities/create/createHelp.ts +71 -0
  543. package/src/capabilities/create/createSurface.generated.ts +400 -0
  544. package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
  545. package/src/capabilities/create/cwdJail.test.ts +24 -5
  546. package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
  547. package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
  548. package/src/capabilities/create/index.ts +7 -4
  549. package/src/capabilities/create/messages.ts +18 -0
  550. package/src/capabilities/create/mount.ts +391 -0
  551. package/src/capabilities/create/pathJail.test.ts +90 -0
  552. package/src/capabilities/create/pathJail.ts +8 -5
  553. package/src/capabilities/create/pickGenerator.ts +23 -35
  554. package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
  555. package/src/capabilities/create/types.ts +20 -0
  556. package/src/capabilities/distribution.test.ts +3 -1
  557. package/src/capabilities/distribution.ts +10 -15
  558. package/src/capabilities/doctor/checks/checkKeStore.ts +7 -5
  559. package/src/capabilities/doctor/checks/checkPackageRefs.ts +6 -4
  560. package/src/capabilities/doctor/checks/checkPragmaVersion.ts +2 -2
  561. package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +72 -27
  562. package/src/capabilities/doctor/checks/checkShellCompletions.ts +59 -13
  563. package/src/capabilities/doctor/checks/index.ts +27 -0
  564. package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
  565. package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
  566. package/src/capabilities/doctor/checks/targetHealth.ts +274 -0
  567. package/src/capabilities/doctor/doctor.render.test.ts +18 -7
  568. package/src/capabilities/doctor/doctor.render.ts +43 -19
  569. package/src/capabilities/doctor/doctor.test.ts +123 -34
  570. package/src/capabilities/doctor/doctor.verb.ts +3 -3
  571. package/src/capabilities/doctor/runChecks.ts +62 -63
  572. package/src/capabilities/doctor/types.ts +20 -4
  573. package/src/capabilities/emptyRecovery.test.ts +13 -8
  574. package/src/capabilities/graph/examples.exec.test.ts +107 -0
  575. package/src/capabilities/graph/index.ts +1 -1
  576. package/src/capabilities/graph/inspect.render.ts +70 -22
  577. package/src/capabilities/graph/inspect.test.ts +260 -5
  578. package/src/capabilities/graph/inspect.verb.ts +18 -6
  579. package/src/capabilities/graph/query.render.ts +15 -3
  580. package/src/capabilities/graph/query.verb.ts +3 -3
  581. package/src/capabilities/graph/runQuery.ts +2 -3
  582. package/src/capabilities/index.ts +3 -1
  583. package/src/capabilities/info/collectInfo.ts +5 -4
  584. package/src/capabilities/info/info.render.ts +1 -1
  585. package/src/capabilities/info/info.verb.ts +1 -1
  586. package/src/capabilities/lazy.test.ts +32 -0
  587. package/src/capabilities/meta/complete.verb.ts +1 -1
  588. package/src/capabilities/meta/index.ts +1 -1
  589. package/src/capabilities/meta/mcp.verb.ts +10 -8
  590. package/src/capabilities/ontology/index.ts +15 -11
  591. package/src/capabilities/ontology/ontology.test.ts +6 -55
  592. package/src/capabilities/ontology/queries.ts +2 -2
  593. package/src/capabilities/ontology/render.ts +3 -4
  594. package/src/capabilities/ontology/verbs.ts +27 -68
  595. package/src/capabilities/prompt/index.ts +2 -2
  596. package/src/capabilities/prompt/prompt.render.ts +6 -2
  597. package/src/capabilities/prompt/types.ts +1 -1
  598. package/src/capabilities/prompt/verbs.ts +4 -5
  599. package/src/capabilities/reference.test.ts +63 -0
  600. package/src/capabilities/resources/provider.ts +342 -85
  601. package/src/capabilities/resources/resources.test.ts +355 -59
  602. package/src/capabilities/setup/buildPlan.ts +236 -0
  603. package/src/capabilities/setup/index.ts +7 -7
  604. package/src/capabilities/setup/mode.ts +74 -0
  605. package/src/capabilities/setup/operations/index.ts +74 -0
  606. package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
  607. package/src/capabilities/setup/operations/setupConfig.ts +124 -0
  608. package/src/capabilities/setup/operations/setupGenerator.ts +396 -326
  609. package/src/capabilities/setup/operations/setupLsp.ts +329 -68
  610. package/src/capabilities/setup/operations/setupMcp.ts +137 -97
  611. package/src/capabilities/setup/operations/setupSkills.ts +336 -108
  612. package/src/capabilities/setup/plan.render.ts +241 -0
  613. package/src/capabilities/setup/plan.ts +236 -0
  614. package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
  615. package/src/capabilities/setup/setup.render.test.ts +281 -73
  616. package/src/capabilities/setup/setup.render.ts +45 -77
  617. package/src/capabilities/setup/setup.test.ts +972 -209
  618. package/src/capabilities/setup/setup.verb.ts +223 -71
  619. package/src/capabilities/setup/shell.test.ts +86 -0
  620. package/src/capabilities/setup/shell.ts +137 -11
  621. package/src/capabilities/setup/targets.ts +367 -0
  622. package/src/capabilities/setup/types.ts +18 -57
  623. package/src/capabilities/shared/assertExecOk.ts +68 -10
  624. package/src/capabilities/shared/index.ts +32 -0
  625. package/src/capabilities/shared/packageManager.test.ts +55 -0
  626. package/src/capabilities/shared/packageManager.ts +62 -6
  627. package/src/capabilities/skill/discover.ts +37 -5
  628. package/src/capabilities/skill/index.ts +1 -1
  629. package/src/capabilities/skill/render.ts +10 -9
  630. package/src/capabilities/skill/skill.test.ts +7 -5
  631. package/src/capabilities/skill/verbs.ts +3 -4
  632. package/src/capabilities/sources/collectStatus.ts +7 -2
  633. package/src/capabilities/sources/index.ts +1 -1
  634. package/src/capabilities/sources/installSkills.ts +84 -7
  635. package/src/capabilities/sources/runUpdate.ts +53 -21
  636. package/src/capabilities/sources/sources.test.ts +154 -2
  637. package/src/capabilities/sources/status.render.ts +1 -1
  638. package/src/capabilities/sources/status.verb.ts +1 -1
  639. package/src/capabilities/sources/update.render.ts +1 -1
  640. package/src/capabilities/sources/update.verb.ts +1 -1
  641. package/src/capabilities/surface.test.ts +134 -17
  642. package/src/capabilities/upgrade/runUpgrade.ts +8 -8
  643. package/src/capabilities/upgrade/upgrade.render.ts +4 -5
  644. package/src/capabilities/upgrade/upgrade.test.ts +3 -3
  645. package/src/capabilities/upgrade/upgrade.verb.ts +1 -1
  646. package/src/capabilities/version/index.ts +12 -0
  647. package/src/capabilities/version/version.test.ts +66 -0
  648. package/src/capabilities/version/version.verb.ts +39 -0
  649. package/src/constants.ts +31 -1
  650. package/src/identity.test.ts +40 -25
  651. package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +15 -13
  652. package/src/kernel/completion/complete.test.ts +12 -2
  653. package/src/kernel/completion/complete.ts +1 -1
  654. package/src/kernel/completion/emitScripts.ts +1 -1
  655. package/src/kernel/completion/entitySource.test.ts +1 -1
  656. package/src/kernel/completion/entitySource.ts +21 -8
  657. package/src/kernel/completion/model.test.ts +164 -12
  658. package/src/kernel/completion/model.ts +94 -14
  659. package/src/kernel/completion/parse.test.ts +4 -7
  660. package/src/kernel/completion/parse.ts +15 -0
  661. package/src/kernel/completion/resolve.test.ts +0 -1
  662. package/src/kernel/completion/safety.test.ts +34 -26
  663. package/src/kernel/completion/shellDrive.test.ts +28 -9
  664. package/src/kernel/completion/templates/bash.ts +7 -2
  665. package/src/kernel/completion/templates/index.ts +23 -0
  666. package/src/kernel/completion/types.ts +7 -0
  667. package/src/kernel/config/defaults.test.ts +25 -2
  668. package/src/kernel/config/defaults.ts +4 -3
  669. package/src/kernel/config/evaluateProjectConfig.ts +31 -8
  670. package/src/kernel/config/firstRun.test.ts +44 -38
  671. package/src/kernel/config/firstRun.ts +24 -88
  672. package/src/kernel/config/index.ts +1 -1
  673. package/src/kernel/config/readConfig.test.ts +6 -3
  674. package/src/kernel/config/readConfig.ts +1 -1
  675. package/src/kernel/config/schema.ts +3 -1
  676. package/src/kernel/config/types.ts +3 -1
  677. package/src/kernel/copy.test.ts +34 -4
  678. package/src/kernel/copy.ts +54 -0
  679. package/src/kernel/error/PragmaError.test.ts +5 -2
  680. package/src/kernel/error/PragmaError.ts +4 -2
  681. package/src/kernel/error/constants.ts +7 -5
  682. package/src/kernel/error/fromTaskError.ts +28 -6
  683. package/src/kernel/error/recovery.ts +14 -0
  684. package/src/kernel/error/renderError.ts +42 -1
  685. package/src/kernel/error/types.ts +21 -1
  686. package/src/kernel/index.ts +26 -0
  687. package/src/kernel/packs/collect.ts +12 -16
  688. package/src/kernel/packs/compile.test.ts +130 -1
  689. package/src/kernel/packs/compile.ts +93 -3
  690. package/src/kernel/packs/disclosure.ts +2 -2
  691. package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
  692. package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +3 -4
  693. package/src/kernel/packs/graphql/index.ts +20 -0
  694. package/src/kernel/packs/index.ts +40 -0
  695. package/src/kernel/packs/iri.test.ts +73 -0
  696. package/src/kernel/packs/iri.ts +66 -14
  697. package/src/kernel/packs/renderPack.ts +24 -5
  698. package/src/kernel/packs/resolveEntity.test.ts +213 -0
  699. package/src/kernel/packs/resolveEntity.ts +112 -18
  700. package/src/kernel/packs/runBodies.ts +2 -3
  701. package/src/kernel/packs/sample.ts +1 -1
  702. package/src/kernel/packs/schema.ts +18 -1
  703. package/src/kernel/packs/sparql/applyFilters.ts +16 -17
  704. package/src/kernel/packs/sparql/buildLookupQuery.ts +75 -3
  705. package/src/kernel/packs/sparql/index.ts +37 -0
  706. package/src/kernel/packs/sparql/runSelect.test.ts +1 -1
  707. package/src/kernel/packs/sparql/runSelect.ts +3 -4
  708. package/src/kernel/packs/toolDescription.test.ts +42 -3
  709. package/src/kernel/packs/types.ts +13 -0
  710. package/src/kernel/packs/uniqueness.ts +1 -1
  711. package/src/kernel/project/cli/buildProgram.test.ts +147 -12
  712. package/src/kernel/project/cli/buildProgram.ts +77 -18
  713. package/src/kernel/project/cli/constants.ts +34 -0
  714. package/src/kernel/project/cli/dispatch.test.ts +160 -3
  715. package/src/kernel/project/cli/dispatch.ts +222 -42
  716. package/src/kernel/project/cli/exitCodes.ts +1 -1
  717. package/src/kernel/project/cli/globalFlags.test.ts +117 -1
  718. package/src/kernel/project/cli/globalFlags.ts +130 -30
  719. package/src/kernel/project/cli/helpFormat.ts +13 -0
  720. package/src/kernel/project/cli/rootHelp.ts +41 -12
  721. package/src/kernel/project/cli/suggest.test.ts +33 -1
  722. package/src/kernel/project/cli/suggest.ts +25 -1
  723. package/src/kernel/project/cli/verbHelp.test.ts +30 -0
  724. package/src/kernel/project/cli/verbHelp.ts +23 -7
  725. package/src/kernel/project/mcp/buildServer.ts +7 -4
  726. package/src/kernel/project/mcp/envelope.ts +2 -2
  727. package/src/kernel/project/mcp/instructions.ts +2 -2
  728. package/src/kernel/project/mcp/mcpError.ts +1 -1
  729. package/src/kernel/project/mcp/parity.test.ts +5 -2
  730. package/src/kernel/project/mcp/prompts/index.ts +37 -0
  731. package/src/kernel/project/mcp/prompts/source.ts +2 -2
  732. package/src/kernel/project/mcp/registerVerb.ts +35 -9
  733. package/src/kernel/project/mcp/serve.ts +2 -2
  734. package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
  735. package/src/kernel/render/contracts.ts +21 -0
  736. package/src/kernel/render/envelope.ts +2 -3
  737. package/src/kernel/render/formatters.ts +1 -1
  738. package/src/kernel/render/renderers.test.ts +243 -6
  739. package/src/kernel/render/renderers.ts +222 -20
  740. package/src/kernel/render/style.test.ts +75 -24
  741. package/src/kernel/render/style.ts +31 -1
  742. package/src/kernel/render/turtle.ts +222 -0
  743. package/src/kernel/runtime/graphpack/buildIndex.ts +1 -1
  744. package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +3 -3
  745. package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +1 -1
  746. package/src/kernel/runtime/graphpack/embedded.ts +3 -3
  747. package/src/kernel/runtime/graphpack/manifest.ts +1 -1
  748. package/src/kernel/runtime/graphpack/read.ts +1 -2
  749. package/src/kernel/runtime/loadSession.ts +1 -1
  750. package/src/kernel/runtime/probe.ts +6 -6
  751. package/src/kernel/runtime/readEntity.ts +472 -28
  752. package/src/kernel/runtime/refs/index.ts +39 -0
  753. package/src/kernel/runtime/refs/parseRef.ts +2 -2
  754. package/src/kernel/runtime/refs/resolve.ts +4 -4
  755. package/src/kernel/runtime/storeReadiness.ts +1 -2
  756. package/src/kernel/runtime/types.ts +15 -1
  757. package/src/kernel/runtime/wasmEmbed.test.ts +37 -39
  758. package/src/kernel/spec/emitReference.ts +105 -30
  759. package/src/kernel/spec/emitSurface.ts +48 -6
  760. package/src/kernel/spec/surfaceConformance.test.ts +4 -2
  761. package/src/kernel/spec/types.ts +248 -4
  762. package/src/testing/behavioral/docExamples.test.ts +14 -0
  763. package/src/testing/behavioral/errorMatrix.mcp.test.ts +2 -2
  764. package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
  765. package/src/testing/behavioral/journeys.cli.test.ts +1 -1
  766. package/src/testing/behavioral/journeys.defaultPack.test.ts +7 -7
  767. package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
  768. package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
  769. package/src/testing/behavioral/journeys.packageStories.test.ts +4 -4
  770. package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
  771. package/src/testing/behavioral/mcpSurface.test.ts +1 -1
  772. package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
  773. package/src/testing/eval/cases/effectful.ts +3 -2
  774. package/src/testing/fixtures/blockGraph.ts +79 -0
  775. package/src/testing/fixtures/graph/canonical.ts +88 -2
  776. package/src/testing/fixtures/graph/defaultPack.ts +1 -1
  777. package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
  778. package/src/testing/helpers/projectMcp.ts +32 -6
  779. package/src/testing/helpers/runCli.ts +35 -18
  780. package/src/testing/perf/budgets.test.ts +20 -9
  781. package/src/testing/perf/budgets.ts +58 -9
  782. package/src/testing/perf/codegen.test.ts +126 -0
  783. package/src/testing/perf/globalSetup.test.ts +286 -0
  784. package/src/testing/perf/globalSetup.ts +505 -23
  785. package/src/testing/perf/measure.test.ts +38 -0
  786. package/src/testing/perf/measure.ts +23 -4
  787. package/src/testing/setupXdgIsolation.ts +81 -21
  788. package/src/testing/tempRoot.globalSetup.ts +122 -0
  789. package/dist/pragma +0 -0
  790. package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -189
  791. package/src/capabilities/create/templates.embedded.generated.ts +0 -28
  792. package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -42
  793. package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
  794. package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -68
  795. package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -61
  796. package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
  797. package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
  798. package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
@@ -2,27 +2,37 @@
2
2
  * Look up one or more pack entities by name, prefixed name, absolute IRI, or
3
3
  * glob, via the fetch strategy the pack declares.
4
4
  *
5
- * The name→URI resolve is ALWAYS generated SPARQL (an escaped literal or a
6
- * validated `<iri>` BIND) regardless of `source`; from the resolved IRI, values
7
- * are fetched either through more generated SELECTs (`sparql`) or one generated
5
+ * The resolve is ALWAYS generated SPARQL (an escaped literal or a validated
6
+ * `<iri>` BIND) regardless of `source`; from the resolved IRI, values are
7
+ * fetched either through more generated SELECTs (`sparql`) or one generated
8
8
  * GraphQL document (`graphql`). One poisoned query never discards the batch —
9
9
  * per-query failures are collected as structured error entries.
10
10
  *
11
+ * WHICH query is chosen is decided by the ARGUMENT'S SHAPE first and the pack's
12
+ * `source` second, and both dispatches live here. Getting that order wrong is
13
+ * not a style question: it is what made an IRI reach a name FILTER on every
14
+ * graphql-sourced pack, and what left an IRI-shaped glob expanding against a
15
+ * population of names. The shape a user typed is a fact about the argument; the
16
+ * fetch strategy is a fact about the pack, and it cannot change what the
17
+ * argument means.
18
+ *
11
19
  * Reached only behind a dynamic import from the lookup run body, so its imports
12
20
  * (including the GraphQL path) stay off the storeless fast path.
13
21
  */
14
22
 
15
- import { PragmaError } from "../error/PragmaError.js";
16
- import { cliRecovery } from "../error/recovery.js";
23
+ import { cliRecovery, PragmaError } from "../error/index.js";
17
24
  import { suggestNames } from "../project/cli/suggestNames.js";
18
- import type { PragmaRuntime } from "../runtime/types.js";
25
+ import { compactUri } from "../render/index.js";
26
+ import type { PragmaRuntime } from "../runtime/index.js";
19
27
  import { activeExpands } from "./disclosure.js";
20
28
  import { expandGlob, isGlobPattern } from "./glob.js";
21
29
  import { fetchGraphqlLookup } from "./graphql/fetchGraphqlLookup.js";
22
30
  import { isEmbeddableIri, resolveUri } from "./iri.js";
23
31
  import {
24
32
  buildExpandQuery,
33
+ buildIriResolveQuery,
25
34
  buildLookupByIriQuery,
35
+ buildLookupIrisQuery,
26
36
  buildLookupNamesQuery,
27
37
  buildLookupQuery,
28
38
  buildNameResolveQuery,
@@ -74,7 +84,14 @@ export async function resolveLookup(
74
84
  });
75
85
  }
76
86
 
77
- const expanded = await expandQueries(rt, lookup, noun, source, queries);
87
+ const expanded = await expandQueries(
88
+ rt,
89
+ lookup,
90
+ noun,
91
+ source,
92
+ queries,
93
+ prefixes,
94
+ );
78
95
  const results: PackEntity[] = [];
79
96
  const errors: LookupError[] = [...expanded.globErrors];
80
97
  const settled = await Promise.allSettled(
@@ -110,17 +127,34 @@ export async function resolveLookup(
110
127
  return { results, errors };
111
128
  }
112
129
 
113
- /** Expand glob queries against the entity name list; literals pass through. */
130
+ /**
131
+ * Expand glob queries against the population their own shape addresses;
132
+ * literals pass through.
133
+ *
134
+ * A name glob expands over the `by` values, an IRI glob over the entity IRIs —
135
+ * the same split {@link buildResolveQuery} makes, because a glob is just a
136
+ * lookup argument with a `*` in it. Expanding an IRI pattern over names was why
137
+ * `ds:global.component.but*` matched nothing on any pack while shell completion
138
+ * offered nothing BUT those IRIs. Each population is fetched at most once, and
139
+ * only when a glob of that shape is actually present.
140
+ */
114
141
  async function expandQueries(
115
142
  rt: LookupRuntime,
116
143
  lookup: PackLookup,
117
144
  noun: string,
118
145
  source: StorySource,
119
146
  queries: readonly string[],
147
+ prefixes: Readonly<Record<string, string>>,
120
148
  ): Promise<{ names: string[]; globErrors: LookupError[] }> {
121
149
  if (!queries.some(isGlobPattern))
122
150
  return { names: [...queries], globErrors: [] };
123
- const allNames = await listEntityNames(rt, lookup, source);
151
+ const globs = queries.filter(isGlobPattern);
152
+ const byIri = globs.some(looksLikeIri)
153
+ ? await listEntityIriSpellings(rt, lookup, source, prefixes)
154
+ : new Map<string, string>();
155
+ const byName = globs.some((glob) => !looksLikeIri(glob))
156
+ ? await listEntityNames(rt, lookup, source)
157
+ : [];
124
158
  const names: string[] = [];
125
159
  const globErrors: LookupError[] = [];
126
160
  for (const query of queries) {
@@ -128,7 +162,17 @@ async function expandQueries(
128
162
  names.push(query);
129
163
  continue;
130
164
  }
131
- const matches = expandGlob(query, allNames);
165
+ // An IRI glob expands over every spelling, then collapses to the entity:
166
+ // matching `ds:button` and its absolute twin must not list it twice.
167
+ const matches = looksLikeIri(query)
168
+ ? [
169
+ ...new Set(
170
+ expandGlob(query, [...byIri.keys()]).map(
171
+ (spelling) => byIri.get(spelling) ?? spelling,
172
+ ),
173
+ ),
174
+ ]
175
+ : expandGlob(query, byName);
132
176
  if (matches.length === 0) {
133
177
  globErrors.push({
134
178
  query,
@@ -155,9 +199,7 @@ async function lookupOne(
155
199
  const graphqlSourced = lookup.source === "graphql";
156
200
  const rows = await runSelect(
157
201
  rt,
158
- graphqlSourced
159
- ? buildNameResolveQuery(lookup, query)
160
- : buildEntityQuery(lookup, query, prefixes, level),
202
+ buildResolveQuery(lookup, query, prefixes, level),
161
203
  source,
162
204
  );
163
205
  const base = rows.at(0);
@@ -196,14 +238,27 @@ async function lookupOne(
196
238
  return entity;
197
239
  }
198
240
 
199
- /** Build the base entity SELECT for the SPARQL path (name or IRI form). */
200
- function buildEntityQuery(
241
+ /**
242
+ * Build the resolve SELECT for one lookup argument: shape first, source second.
243
+ *
244
+ * The four cells of that 2×2 are the whole dispatch. A graphql-sourced pack
245
+ * resolves to an IRI and fetches everything else through its document, so both
246
+ * of its queries are the minimal `?uri ?name` pair; a sparql-sourced pack reads
247
+ * its fields in the same SELECT, so both of its queries carry the level-gated
248
+ * projection.
249
+ */
250
+ function buildResolveQuery(
201
251
  lookup: PackLookup,
202
252
  query: string,
203
253
  prefixes: Readonly<Record<string, string>>,
204
254
  level: string | undefined,
205
255
  ): string {
206
- if (!looksLikeIri(query)) return buildLookupQuery(lookup, query, level);
256
+ const graphqlSourced = lookup.source === "graphql";
257
+ if (!looksLikeIri(query)) {
258
+ return graphqlSourced
259
+ ? buildNameResolveQuery(lookup, query)
260
+ : buildLookupQuery(lookup, query, level);
261
+ }
207
262
  const resolved = resolveUri(query, prefixes);
208
263
  if (!isEmbeddableIri(resolved)) {
209
264
  throw PragmaError.invalidInput("name", query, {
@@ -213,7 +268,9 @@ function buildEntityQuery(
213
268
  },
214
269
  });
215
270
  }
216
- return buildLookupByIriQuery(lookup, resolved, level);
271
+ return graphqlSourced
272
+ ? buildIriResolveQuery(lookup, resolved)
273
+ : buildLookupByIriQuery(lookup, resolved, level);
217
274
  }
218
275
 
219
276
  /** Whether a lookup query addresses an entity by IRI or prefixed name. */
@@ -221,10 +278,47 @@ function looksLikeIri(query: string): boolean {
221
278
  return (
222
279
  query.startsWith("http://") ||
223
280
  query.startsWith("https://") ||
224
- query.includes(":")
281
+ // Neither an IRI nor a SPARQL prefixed name may contain whitespace, so a
282
+ // colon in a spaced string is part of a plain entity name — e.g. the
283
+ // concept "Foundations: Grid" — not a prefix separator.
284
+ (query.includes(":") && !/\s/.test(query))
225
285
  );
226
286
  }
227
287
 
288
+ /**
289
+ * Every SPELLING an IRI-shaped glob may be written against, mapped to the one
290
+ * entity it addresses.
291
+ *
292
+ * An entity under a registered prefix has two legal spellings — the compact
293
+ * `ds:button` shell completion offers, and the absolute
294
+ * `https://ds.canonical.com/button` a user pastes from a browser. Both resolve
295
+ * to the same entity in a literal lookup, so a glob must expand over both;
296
+ * offering only the compact form made `https://ds.canonical.com/but*` return
297
+ * EMPTY_RESULTS while the literal IRI it generalises succeeded.
298
+ *
299
+ * The map is spelling → CANONICAL IRI precisely so a pattern that matches an
300
+ * entity under both spellings still yields it once. Matching over a flat list
301
+ * of both would render the entity twice, which is why the previous shape
302
+ * offered only one.
303
+ */
304
+ async function listEntityIriSpellings(
305
+ rt: LookupRuntime,
306
+ lookup: PackLookup,
307
+ source: StorySource,
308
+ prefixes: Readonly<Record<string, string>>,
309
+ ): Promise<Map<string, string>> {
310
+ const rows = await runSelect(rt, buildLookupIrisQuery(lookup), source);
311
+ const spellings = new Map<string, string>();
312
+ for (const row of rows) {
313
+ const uri = row.uri ?? "";
314
+ if (uri === "") continue;
315
+ spellings.set(uri, uri);
316
+ const compact = compactUri(uri, prefixes);
317
+ if (compact !== uri) spellings.set(compact, uri);
318
+ }
319
+ return spellings;
320
+ }
321
+
228
322
  /** List every entity name the lookup can address (miss suggestions + sample/glob). */
229
323
  export async function listEntityNames(
230
324
  rt: LookupRuntime,
@@ -9,9 +9,8 @@
9
9
  * factories carry no heavy static import.
10
10
  */
11
11
 
12
- import { PragmaError } from "../error/PragmaError.js";
13
- import { cliRecovery } from "../error/recovery.js";
14
- import type { PragmaRuntime } from "../runtime/types.js";
12
+ import { cliRecovery, PragmaError } from "../error/index.js";
13
+ import type { PragmaRuntime } from "../runtime/index.js";
15
14
  import { resolvePackDetail } from "./disclosure.js";
16
15
  import type { SampleOutput } from "./renderPack.js";
17
16
  import {
@@ -6,7 +6,7 @@
6
6
  * the supported 1–5 range. Selection is a Fisher-Yates partial shuffle.
7
7
  */
8
8
 
9
- import { PragmaError } from "../error/PragmaError.js";
9
+ import { PragmaError } from "../error/index.js";
10
10
  import type { PackLookup } from "./types.js";
11
11
 
12
12
  /** Smallest number of samples the `sample` verb returns. */
@@ -18,7 +18,7 @@
18
18
 
19
19
  import { z } from "zod";
20
20
  import { DETAIL_LEVELS, RECOVERY_CLI_PREFIX } from "../../constants.js";
21
- import { PragmaError } from "../error/PragmaError.js";
21
+ import { PragmaError } from "../error/index.js";
22
22
  import type { PackDefinition } from "./types.js";
23
23
 
24
24
  const NOUN_PATTERN = /^[a-z][a-z0-9-]*$/;
@@ -212,6 +212,7 @@ const lookupSchema = z
212
212
  description: z.string().optional(),
213
213
  toolDescription: z.string().optional(),
214
214
  types: z.array(term).min(1).optional(),
215
+ weights: z.record(term, z.number().min(0).max(1)).optional(),
215
216
  graphqlType: graphqlName.optional(),
216
217
  fields: z.array(fieldSchema).min(1).optional(),
217
218
  sections: z.array(sectionSchema).min(1).optional(),
@@ -332,6 +333,22 @@ function refineLookup(
332
333
  });
333
334
  }
334
335
 
336
+ // A weight naming a type the lookup does not address can never apply. Reject
337
+ // it rather than ignore it — a silent no-op is how a stale weight survives a
338
+ // rename (the type moves, the weight stays, and nothing says so).
339
+ const addressed = new Set<string>(
340
+ lookup.types ?? (lookup.type ? [lookup.type] : []),
341
+ );
342
+ for (const named of Object.keys(lookup.weights ?? {})) {
343
+ if (!addressed.has(named)) {
344
+ ctx.addIssue({
345
+ code: z.ZodIssueCode.custom,
346
+ message: `"lookup.weights" names "${named}", which is not in "lookup.type"/"lookup.types".`,
347
+ path: ["lookup", "weights"],
348
+ });
349
+ }
350
+ }
351
+
335
352
  if (source === "graphql" && !lookup.graphqlType && !lookup.type) {
336
353
  ctx.addIssue({
337
354
  code: z.ZodIssueCode.custom,
@@ -6,10 +6,11 @@
6
6
  * preserved. With declared `values` the input is canonicalized against the set
7
7
  * (NFC, case-insensitive) and rows are matched case-insensitively; without them
8
8
  * the input is a free term matched the same way. A row lacking the variable never
9
- * matches. Several filters combine conjunctively.
9
+ * matches. Several filters combine conjunctively; several values for one
10
+ * filter (a repeated flag) combine as a union.
10
11
  */
11
12
 
12
- import { PragmaError } from "../../error/PragmaError.js";
13
+ import { PragmaError } from "../../error/index.js";
13
14
  import type { PackFilter, PackRow } from "../types.js";
14
15
 
15
16
  /**
@@ -29,23 +30,21 @@ export function applyPackFilters(
29
30
  for (const filter of filters ?? []) {
30
31
  const provided = params[filter.param];
31
32
  if (provided === undefined) continue;
33
+ // A repeated CLI flag accumulates into an array; MCP args stay scalar.
34
+ // Several values for ONE filter are a union (a row matches any of them);
35
+ // several filters still combine conjunctively.
36
+ const occurrences = Array.isArray(provided) ? provided : [provided];
37
+ if (occurrences.length === 0) continue;
32
38
  const values = filter.values;
33
- if (values === undefined) {
34
- const term = requireStringValue(provided, filter).toLowerCase();
35
- result = result.filter(
36
- (row) => row[filter.variable]?.normalize("NFC").toLowerCase() === term,
37
- );
38
- continue;
39
- }
40
- const canonical = canonicalizeFilterValue(
41
- provided,
42
- filter,
43
- values,
44
- ).toLowerCase();
45
- result = result.filter(
46
- (row) =>
47
- row[filter.variable]?.normalize("NFC").toLowerCase() === canonical,
39
+ const terms = occurrences.map((occurrence) =>
40
+ values === undefined
41
+ ? requireStringValue(occurrence, filter).toLowerCase()
42
+ : canonicalizeFilterValue(occurrence, filter, values).toLowerCase(),
48
43
  );
44
+ result = result.filter((row) => {
45
+ const cell = row[filter.variable]?.normalize("NFC").toLowerCase();
46
+ return cell !== undefined && terms.includes(cell);
47
+ });
49
48
  }
50
49
  return result;
51
50
  }
@@ -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";
@@ -4,7 +4,7 @@
4
4
  * Pins the remap: a generated query is composed from declared and pack-authored
5
5
  * terms, never from user input, so a "Prefix not found" from the facade means
6
6
  * the store cannot answer this read — an actionable error, NOT a raw one
7
- * collapsing to INTERNAL_ERROR ("please report this issue").
7
+ * collapsing to INTERNAL_ERROR ("report this issue").
8
8
  *
9
9
  * WHICH actionable error is the story's provenance to decide, which is the
10
10
  * second thing pinned here. A DISTRIBUTION story keeps STORE_UNAVAILABLE and its
@@ -10,9 +10,8 @@
10
10
  * (`graph query`) goes through the facade directly and stays INVALID_INPUT.
11
11
  */
12
12
 
13
- import { PragmaError } from "../../error/PragmaError.js";
14
- import { cliRecovery } from "../../error/recovery.js";
15
- import type { PragmaRuntime } from "../../runtime/types.js";
13
+ import { cliRecovery, PragmaError } from "../../error/index.js";
14
+ import type { PragmaRuntime } from "../../runtime/index.js";
16
15
  import type { PackRow, StorySource } from "../types.js";
17
16
 
18
17
  /**
@@ -79,7 +78,7 @@ function unboundPrefixError(source: StorySource): PragmaError {
79
78
  * Run the facade query, remapping a store that cannot answer it. A generated
80
79
  * query hitting an unknown prefix surfaces an actionable error — chosen by the
81
80
  * story's provenance, see {@link unboundPrefixError} — instead of a raw SPARQL
82
- * "Prefix not found" wrapped as INTERNAL_ERROR ("please report this issue").
81
+ * "Prefix not found" wrapped as INTERNAL_ERROR ("report this issue").
83
82
  * Returns the inferred facade result type, so this module stays clear of a
84
83
  * static `@canonical/ke` import (the lazy-dispatch guard).
85
84
  */
@@ -47,9 +47,7 @@ describe("pack toolDescription wiring (PROTECTED)", () => {
47
47
  "Get type and theme values for one or more design tokens by name.",
48
48
  );
49
49
  // The authored MCP tool-call example survives on the MCP surface.
50
- expect(desc).toContain(
51
- 'Example: token_lookup { names: ["color.primary"] }',
52
- );
50
+ expect(desc).toContain('Example: token_lookup { name: ["color.primary"] }');
53
51
  });
54
52
 
55
53
  it("routes the definition-level toolDescription to the MCP list tool", async () => {
@@ -87,3 +85,44 @@ describe("pack toolDescription wiring (PROTECTED)", () => {
87
85
  expect(listHelp).not.toContain("token_list {");
88
86
  });
89
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
+ });
@@ -267,6 +267,19 @@ export interface PackLookup {
267
267
  * VALUES constraint on the name resolve. Mutually exclusive with `type`.
268
268
  */
269
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>>;
270
283
  /**
271
284
  * GraphQL type or interface the generated document's inline fragment targets
272
285
  * (`source: "graphql"` only). Defaults to the local name of `type`; required
@@ -8,7 +8,7 @@
8
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 {