@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
@@ -2,32 +2,48 @@
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";
23
+ import { cliRecovery, PragmaError } from "../error/index.js";
16
24
  import { suggestNames } from "../project/cli/suggestNames.js";
17
- import type { PragmaRuntime } from "../runtime/types.js";
25
+ import { compactUri } from "../render/index.js";
26
+ import type { PragmaRuntime } from "../runtime/index.js";
18
27
  import { activeExpands } from "./disclosure.js";
19
28
  import { expandGlob, isGlobPattern } from "./glob.js";
20
29
  import { fetchGraphqlLookup } from "./graphql/fetchGraphqlLookup.js";
21
30
  import { isEmbeddableIri, resolveUri } from "./iri.js";
22
31
  import {
23
32
  buildExpandQuery,
33
+ buildIriResolveQuery,
24
34
  buildLookupByIriQuery,
35
+ buildLookupIrisQuery,
25
36
  buildLookupNamesQuery,
26
37
  buildLookupQuery,
27
38
  buildNameResolveQuery,
28
39
  } from "./sparql/buildLookupQuery.js";
29
40
  import { runSelect } from "./sparql/runSelect.js";
30
- import type { PackChildRow, PackEntity, PackLookup } from "./types.js";
41
+ import type {
42
+ PackChildRow,
43
+ PackEntity,
44
+ PackLookup,
45
+ StorySource,
46
+ } from "./types.js";
31
47
 
32
48
  /** A structured per-query lookup failure (never rejects the whole batch). */
33
49
  export interface LookupError {
@@ -56,21 +72,26 @@ export async function resolveLookup(
56
72
  lookup: PackLookup,
57
73
  noun: string,
58
74
  queries: readonly string[],
59
- source: string,
75
+ source: StorySource,
60
76
  prefixes: Readonly<Record<string, string>>,
61
77
  level: string | undefined,
62
78
  ): Promise<LookupOutput> {
63
79
  if (queries.length === 0) {
64
80
  throw PragmaError.invalidInput("names", "(empty)", {
65
- recovery: {
66
- message: `List available ${noun} entries.`,
67
- cli: `pragma ${noun} list`,
68
- mcp: { tool: `${noun}_list` },
69
- },
81
+ recovery: cliRecovery(`${noun} list`, `List available ${noun} entries.`, {
82
+ tool: `${noun}_list`,
83
+ }),
70
84
  });
71
85
  }
72
86
 
73
- 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
+ );
74
95
  const results: PackEntity[] = [];
75
96
  const errors: LookupError[] = [...expanded.globErrors];
76
97
  const settled = await Promise.allSettled(
@@ -106,17 +127,34 @@ export async function resolveLookup(
106
127
  return { results, errors };
107
128
  }
108
129
 
109
- /** 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
+ */
110
141
  async function expandQueries(
111
142
  rt: LookupRuntime,
112
143
  lookup: PackLookup,
113
144
  noun: string,
114
- source: string,
145
+ source: StorySource,
115
146
  queries: readonly string[],
147
+ prefixes: Readonly<Record<string, string>>,
116
148
  ): Promise<{ names: string[]; globErrors: LookupError[] }> {
117
149
  if (!queries.some(isGlobPattern))
118
150
  return { names: [...queries], globErrors: [] };
119
- 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
+ : [];
120
158
  const names: string[] = [];
121
159
  const globErrors: LookupError[] = [];
122
160
  for (const query of queries) {
@@ -124,7 +162,17 @@ async function expandQueries(
124
162
  names.push(query);
125
163
  continue;
126
164
  }
127
- 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);
128
176
  if (matches.length === 0) {
129
177
  globErrors.push({
130
178
  query,
@@ -144,16 +192,14 @@ async function lookupOne(
144
192
  lookup: PackLookup,
145
193
  noun: string,
146
194
  query: string,
147
- source: string,
195
+ source: StorySource,
148
196
  prefixes: Readonly<Record<string, string>>,
149
197
  level: string | undefined,
150
198
  ): Promise<PackEntity> {
151
199
  const graphqlSourced = lookup.source === "graphql";
152
200
  const rows = await runSelect(
153
201
  rt,
154
- graphqlSourced
155
- ? buildNameResolveQuery(lookup, query)
156
- : buildEntityQuery(lookup, query, prefixes, level),
202
+ buildResolveQuery(lookup, query, prefixes, level),
157
203
  source,
158
204
  );
159
205
  const base = rows.at(0);
@@ -161,11 +207,9 @@ async function lookupOne(
161
207
  const candidates = await listEntityNames(rt, lookup, source);
162
208
  throw PragmaError.notFound(noun, query, {
163
209
  suggestions: suggestNames(query, candidates),
164
- recovery: {
165
- message: `List available ${noun} entries.`,
166
- cli: `pragma ${noun} list`,
167
- mcp: { tool: `${noun}_list` },
168
- },
210
+ recovery: cliRecovery(`${noun} list`, `List available ${noun} entries.`, {
211
+ tool: `${noun}_list`,
212
+ }),
169
213
  });
170
214
  }
171
215
 
@@ -175,7 +219,9 @@ async function lookupOne(
175
219
  lookup,
176
220
  base.uri,
177
221
  base.name ?? query,
178
- source,
222
+ // The GraphQL lane's only use of the source is CONFIG_ERROR attribution,
223
+ // which is right for any origin — so it takes the label, not provenance.
224
+ source.label,
179
225
  prefixes,
180
226
  level,
181
227
  );
@@ -192,24 +238,39 @@ async function lookupOne(
192
238
  return entity;
193
239
  }
194
240
 
195
- /** Build the base entity SELECT for the SPARQL path (name or IRI form). */
196
- 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(
197
251
  lookup: PackLookup,
198
252
  query: string,
199
253
  prefixes: Readonly<Record<string, string>>,
200
254
  level: string | undefined,
201
255
  ): string {
202
- 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
+ }
203
262
  const resolved = resolveUri(query, prefixes);
204
263
  if (!isEmbeddableIri(resolved)) {
205
264
  throw PragmaError.invalidInput("name", query, {
206
265
  recovery: {
207
266
  message:
208
- "Use an absolute IRI (https://…), a prefixed name (ds:thing), or a plain entity name.",
267
+ "Use an absolute IRI (https://…), a prefixed name (prefix:local), or a plain entity name.",
209
268
  },
210
269
  });
211
270
  }
212
- return buildLookupByIriQuery(lookup, resolved, level);
271
+ return graphqlSourced
272
+ ? buildIriResolveQuery(lookup, resolved)
273
+ : buildLookupByIriQuery(lookup, resolved, level);
213
274
  }
214
275
 
215
276
  /** Whether a lookup query addresses an entity by IRI or prefixed name. */
@@ -217,15 +278,52 @@ function looksLikeIri(query: string): boolean {
217
278
  return (
218
279
  query.startsWith("http://") ||
219
280
  query.startsWith("https://") ||
220
- 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))
221
285
  );
222
286
  }
223
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
+
224
322
  /** List every entity name the lookup can address (miss suggestions + sample/glob). */
225
323
  export async function listEntityNames(
226
324
  rt: LookupRuntime,
227
325
  lookup: PackLookup,
228
- source: string,
326
+ source: StorySource,
229
327
  ): Promise<string[]> {
230
328
  const rows = await runSelect(rt, buildLookupNamesQuery(lookup), source);
231
329
  return rows.map((row) => row.name ?? "").filter((name) => name !== "");
@@ -9,8 +9,8 @@
9
9
  * factories carry no heavy static import.
10
10
  */
11
11
 
12
- import { PragmaError } from "../error/PragmaError.js";
13
- import type { PragmaRuntime } from "../runtime/types.js";
12
+ import { cliRecovery, PragmaError } from "../error/index.js";
13
+ import type { PragmaRuntime } from "../runtime/index.js";
14
14
  import { resolvePackDetail } from "./disclosure.js";
15
15
  import type { SampleOutput } from "./renderPack.js";
16
16
  import {
@@ -22,14 +22,14 @@ import { parseSampleCount, pickRandom } from "./sample.js";
22
22
  import { applyPackFilters } from "./sparql/applyFilters.js";
23
23
  import { applyPackSearch } from "./sparql/applySearch.js";
24
24
  import { runSelect } from "./sparql/runSelect.js";
25
- import type { PackList, PackLookup, PackRow } from "./types.js";
25
+ import type { PackList, PackLookup, PackRow, StorySource } from "./types.js";
26
26
 
27
27
  /** The highest canonical level — sample fetches everything for shape discovery. */
28
28
  const HIGHEST_LEVEL = "detailed";
29
29
 
30
30
  /** Facts a list-shaped run body needs beyond its `shape`. */
31
31
  export interface ListRunMeta {
32
- readonly source: string;
32
+ readonly source: StorySource;
33
33
  }
34
34
 
35
35
  /**
@@ -61,7 +61,7 @@ export function makeListRun(
61
61
  export function makeLookupRun(
62
62
  lookup: PackLookup,
63
63
  noun: string,
64
- source: string,
64
+ source: StorySource,
65
65
  prefixes: Readonly<Record<string, string>>,
66
66
  ): (
67
67
  params: Record<string, unknown>,
@@ -88,11 +88,11 @@ export function makeLookupRun(
88
88
  code: first.code as PragmaError["code"],
89
89
  message: first.message,
90
90
  suggestions: first.suggestions ? [...first.suggestions] : undefined,
91
- recovery: {
92
- message: `List available ${noun} entries.`,
93
- cli: `pragma ${noun} list`,
94
- mcp: { tool: `${noun}_list` },
95
- },
91
+ recovery: cliRecovery(
92
+ `${noun} list`,
93
+ `List available ${noun} entries.`,
94
+ { tool: `${noun}_list` },
95
+ ),
96
96
  });
97
97
  }
98
98
  }
@@ -104,7 +104,7 @@ export function makeLookupRun(
104
104
  export function makeSampleRun(
105
105
  lookup: PackLookup,
106
106
  noun: string,
107
- source: string,
107
+ source: StorySource,
108
108
  prefixes: Readonly<Record<string, string>>,
109
109
  defaultCount: number,
110
110
  ): (
@@ -119,11 +119,11 @@ export function makeSampleRun(
119
119
  if (names.length === 0) {
120
120
  throw PragmaError.emptyResults(noun, {
121
121
  message: `No ${noun} entries to sample.`,
122
- recovery: {
123
- message: `List available ${noun} entries.`,
124
- cli: `pragma ${noun} list`,
125
- mcp: { tool: `${noun}_list` },
126
- },
122
+ recovery: cliRecovery(
123
+ `${noun} list`,
124
+ `List available ${noun} entries.`,
125
+ { tool: `${noun}_list` },
126
+ ),
127
127
  });
128
128
  }
129
129
  const selected = pickRandom(names, count);
@@ -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. */
@@ -5,26 +5,38 @@
5
5
  * refinements that encode the source rule (§3): `type` XOR `types`, a
6
6
  * graphql-sourced lookup names its fragment target, SPARQL expands stay
7
7
  * single-hop, GraphQL fields reject property paths, and every disclosure `level`
8
- * names a declared canonical level.
8
+ * names a declared canonical level. Two more refinements make the definition
9
+ * COMPILABLE, not merely well-shaped: distinct compiled verb names and distinct
10
+ * filter params (see {@link refineVerbNames} / {@link refineFilterParams}).
9
11
  *
10
12
  * zod lives here and ONLY here in the pack layer, imported lazily (never on the
11
- * `--help`/`__complete` fast path). Bundled packs are authored in-repo and typed
12
- * by TypeScript, so `collect` skips validation for them (per-source skip); this
13
- * runs for config/package packs and in tests.
13
+ * `--help`/`__complete` fast path). The distribution's own stories are compiled
14
+ * statically by `capabilities/distribution.ts` and never revalidated at dispatch
15
+ * (`collect.projectStoryTiers`'s default-origin carve-out); this runs for config-
16
+ * and package-declared stories, and in `distribution.test.ts`'s round-trip.
14
17
  */
15
18
 
16
19
  import { z } from "zod";
17
- import { DETAIL_LEVELS } from "../../constants.js";
18
- import { PragmaError } from "../error/PragmaError.js";
20
+ import { DETAIL_LEVELS, RECOVERY_CLI_PREFIX } from "../../constants.js";
21
+ import { PragmaError } from "../error/index.js";
19
22
  import type { PackDefinition } from "./types.js";
20
23
 
21
24
  const NOUN_PATTERN = /^[a-z][a-z0-9-]*$/;
25
+ /** Message for {@link NOUN_PATTERN} — third-party authors never see the regex. */
26
+ const NOUN_MESSAGE = 'must be lowercase kebab-case, e.g. "design-token"';
22
27
  const FILTER_PARAM_PATTERN = /^[a-z][a-z0-9]*$/;
23
28
  const FIELD_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;
24
29
  const GRAPHQL_NAME_PATTERN = /^[_A-Za-z][_0-9A-Za-z]*$/;
25
- /** A prefixed name (`ds:Thing`), a property path of them, or an absolute IRI. */
30
+ /**
31
+ * A prefixed name (`ds:Thing`), a property path of them, or an absolute IRI.
32
+ * Each path segment may carry the SPARQL inverse marker (`^ds:tier`) — the
33
+ * contract (`types.ts`) admits "prefixed name, IRI, or path", and an inverse
34
+ * step IS a property path, so rejecting it here was a schema bug, not a
35
+ * grammar decision (L-OPEN-9: the tier story's `blocks` expand reads
36
+ * `^ds:tier`).
37
+ */
26
38
  const TERM_PATTERN =
27
- /^(?:[A-Za-z][A-Za-z0-9+.-]*:\/\/[^<>"\s]+|[A-Za-z][\w-]*:[^/<>"\s]+(?:\/[A-Za-z][\w-]*:[^/<>"\s]+)*)$/;
39
+ /^(?:[A-Za-z][A-Za-z0-9+.-]*:\/\/[^<>"\s]+|\^?[A-Za-z][\w-]*:[^/<>"\s]+(?:\/\^?[A-Za-z][\w-]*:[^/<>"\s]+)*)$/;
28
40
 
29
41
  /** Params a filter/verb may not claim (they are the shared read vocabulary). */
30
42
  const RESERVED_PARAMS = new Set(["search", "detail", "name", "count"]);
@@ -59,9 +71,18 @@ const searchSchema = z
59
71
  const emptyRecoverySchema = z
60
72
  .object({
61
73
  message: z.string().min(1),
74
+ // The command WITHOUT a binary name — the renderer prepends the CONSUMING
75
+ // distribution's. A story is portable only if it does not name a binary, so
76
+ // the old prefixed form is rejected rather than accepted and doubled. Named
77
+ // loudly, in the `packages` → `packs` tradition, because a third-party pack
78
+ // written against the old grammar is data, not a typo.
62
79
  cli: z
63
80
  .string()
64
- .startsWith("pragma ", 'emptyRecovery.cli must be a "pragma " command')
81
+ .min(1)
82
+ .refine(
83
+ (value) => !value.startsWith(RECOVERY_CLI_PREFIX),
84
+ `emptyRecovery.cli is now the command WITHOUT the binary name — write "sources update", not "${RECOVERY_CLI_PREFIX}sources update"`,
85
+ )
65
86
  .optional(),
66
87
  })
67
88
  .strict();
@@ -78,7 +99,7 @@ const listSchema = z.object(listShape).strict();
78
99
  const verbSchema = z
79
100
  .object({
80
101
  ...listShape,
81
- verb: z.string().regex(NOUN_PATTERN),
102
+ verb: z.string().regex(NOUN_PATTERN, NOUN_MESSAGE),
82
103
  description: z.string().optional(),
83
104
  toolDescription: z.string().optional(),
84
105
  })
@@ -168,6 +189,7 @@ const sampleSchema = z.union([
168
189
  z
169
190
  .object({
170
191
  count: z.number().int().min(1).max(5).optional(),
192
+ fixedCount: z.boolean().optional(),
171
193
  description: z.string().optional(),
172
194
  toolDescription: z.string().optional(),
173
195
  })
@@ -190,6 +212,7 @@ const lookupSchema = z
190
212
  description: z.string().optional(),
191
213
  toolDescription: z.string().optional(),
192
214
  types: z.array(term).min(1).optional(),
215
+ weights: z.record(term, z.number().min(0).max(1)).optional(),
193
216
  graphqlType: graphqlName.optional(),
194
217
  fields: z.array(fieldSchema).min(1).optional(),
195
218
  sections: z.array(sectionSchema).min(1).optional(),
@@ -202,7 +225,7 @@ const lookupSchema = z
202
225
 
203
226
  const definitionSchema = z
204
227
  .object({
205
- noun: z.string().regex(NOUN_PATTERN),
228
+ noun: z.string().regex(NOUN_PATTERN, NOUN_MESSAGE),
206
229
  description: z.string().optional(),
207
230
  toolDescription: z.string().optional(),
208
231
  list: listSchema.optional(),
@@ -228,9 +251,73 @@ const definitionSchema = z
228
251
  path: ["list", "query"],
229
252
  });
230
253
  }
254
+ refineVerbNames(def, ctx);
255
+ if (def.list) refineFilterParams(def.list.filters, ["list"], ctx);
256
+ for (const [index, verb] of (def.verbs ?? []).entries()) {
257
+ refineFilterParams(verb.filters, ["verbs", index], ctx);
258
+ }
231
259
  if (def.lookup) refineLookup(def.lookup, ctx);
232
260
  });
233
261
 
262
+ /**
263
+ * The compiled `(noun, verb)` keys must be distinct.
264
+ *
265
+ * `compilePack` emits `list`, then each `verbs[].verb`, then `lookup` and
266
+ * `sample`. A repeat there survives the grammar into `assembleEffectiveModules`,
267
+ * where `assertUniqueVerbs` throws — and package stories reach dispatch before
268
+ * the command tree exists, so that throw would fail EVERY command, `doctor` and
269
+ * `sources update` included. The collision is a property of the definition, so
270
+ * the grammar is where it is caught.
271
+ */
272
+ function refineVerbNames(
273
+ def: {
274
+ list?: unknown;
275
+ verbs?: readonly { verb: string }[];
276
+ lookup?: unknown;
277
+ },
278
+ ctx: z.RefinementCtx,
279
+ ): void {
280
+ const emitted = new Set<string>(def.list ? ["list"] : []);
281
+ if (def.lookup) {
282
+ emitted.add("lookup");
283
+ if ((def.lookup as { sample?: unknown }).sample) emitted.add("sample");
284
+ }
285
+ const seen = new Set<string>();
286
+ for (const [index, verb] of (def.verbs ?? []).entries()) {
287
+ if (emitted.has(verb.verb) || seen.has(verb.verb)) {
288
+ ctx.addIssue({
289
+ code: z.ZodIssueCode.custom,
290
+ message: `verb "${verb.verb}" is already compiled by this pack — every verb must be distinct.`,
291
+ path: ["verbs", index, "verb"],
292
+ });
293
+ }
294
+ seen.add(verb.verb);
295
+ }
296
+ }
297
+
298
+ /**
299
+ * Filter params project to CLI options, so a repeat inside one list shape makes
300
+ * Commander refuse to register the second `--<param>` — outside every error
301
+ * envelope the CLI owns.
302
+ */
303
+ function refineFilterParams(
304
+ filters: readonly { param: string }[] | undefined,
305
+ path: readonly (string | number)[],
306
+ ctx: z.RefinementCtx,
307
+ ): void {
308
+ const seen = new Set<string>();
309
+ for (const [index, filter] of (filters ?? []).entries()) {
310
+ if (seen.has(filter.param)) {
311
+ ctx.addIssue({
312
+ code: z.ZodIssueCode.custom,
313
+ message: `filter param "${filter.param}" is declared twice.`,
314
+ path: [...path, "filters", index, "param"],
315
+ });
316
+ }
317
+ seen.add(filter.param);
318
+ }
319
+ }
320
+
234
321
  /** Cross-field lookup rules — the source rule (§3, F8). */
235
322
  function refineLookup(
236
323
  lookup: z.infer<typeof lookupSchema>,
@@ -246,6 +333,22 @@ function refineLookup(
246
333
  });
247
334
  }
248
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
+
249
352
  if (source === "graphql" && !lookup.graphqlType && !lookup.type) {
250
353
  ctx.addIssue({
251
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
  }