@canonical/pragma-cli 0.33.0 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (892) hide show
  1. package/README.md +153 -30
  2. package/dist/.build-ok +0 -0
  3. package/dist/package.json +83 -0
  4. package/dist/pragma.conf.js +814 -0
  5. package/dist/pragma.conf.js.map +1 -0
  6. package/dist/src/bin.js +356 -0
  7. package/dist/src/bin.js.map +1 -0
  8. package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
  9. package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
  10. package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
  11. package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
  12. package/dist/src/capabilities/capabilities/catalog.js +130 -0
  13. package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
  14. package/dist/src/capabilities/capabilities/hints.js +195 -0
  15. package/dist/src/capabilities/capabilities/hints.js.map +1 -0
  16. package/dist/src/capabilities/capabilities/index.js +11 -0
  17. package/dist/src/capabilities/capabilities/index.js.map +1 -0
  18. package/dist/src/capabilities/capabilities/types.js +11 -0
  19. package/dist/src/capabilities/capabilities/types.js.map +1 -0
  20. package/dist/src/capabilities/colophon/collectColophon.js +83 -0
  21. package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
  22. package/dist/src/capabilities/colophon/colophon.render.js +59 -0
  23. package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
  24. package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
  25. package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
  26. package/dist/src/capabilities/colophon/index.js +5 -0
  27. package/dist/src/capabilities/colophon/index.js.map +1 -0
  28. package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
  29. package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
  30. package/dist/src/capabilities/colophon/types.js +10 -0
  31. package/dist/src/capabilities/colophon/types.js.map +1 -0
  32. package/dist/src/capabilities/config/collectConfigShow.js +59 -0
  33. package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
  34. package/dist/src/capabilities/config/field.render.js +22 -0
  35. package/dist/src/capabilities/config/field.render.js.map +1 -0
  36. package/dist/src/capabilities/config/fields.js +46 -0
  37. package/dist/src/capabilities/config/fields.js.map +1 -0
  38. package/dist/src/capabilities/config/get.verb.js +61 -0
  39. package/dist/src/capabilities/config/get.verb.js.map +1 -0
  40. package/dist/src/capabilities/config/index.js +5 -0
  41. package/dist/src/capabilities/config/index.js.map +1 -0
  42. package/dist/src/capabilities/config/runField.js +59 -0
  43. package/dist/src/capabilities/config/runField.js.map +1 -0
  44. package/dist/src/capabilities/config/runGet.js +28 -0
  45. package/dist/src/capabilities/config/runGet.js.map +1 -0
  46. package/dist/src/capabilities/config/runSet.js +53 -0
  47. package/dist/src/capabilities/config/runSet.js.map +1 -0
  48. package/dist/src/capabilities/config/set.verb.js +66 -0
  49. package/dist/src/capabilities/config/set.verb.js.map +1 -0
  50. package/dist/src/capabilities/config/show.render.js +84 -0
  51. package/dist/src/capabilities/config/show.render.js.map +1 -0
  52. package/dist/src/capabilities/config/show.verb.js +44 -0
  53. package/dist/src/capabilities/config/show.verb.js.map +1 -0
  54. package/dist/src/capabilities/config/types.js +5 -0
  55. package/dist/src/capabilities/config/types.js.map +1 -0
  56. package/dist/src/capabilities/config/unset.verb.js +49 -0
  57. package/dist/src/capabilities/config/unset.verb.js.map +1 -0
  58. package/dist/src/capabilities/create/cliProjection.js +195 -0
  59. package/dist/src/capabilities/create/cliProjection.js.map +1 -0
  60. package/dist/src/capabilities/create/constants.js +47 -0
  61. package/dist/src/capabilities/create/constants.js.map +1 -0
  62. package/dist/src/capabilities/create/create.render.js +100 -0
  63. package/dist/src/capabilities/create/create.render.js.map +1 -0
  64. package/dist/src/capabilities/create/create.verb.js +438 -0
  65. package/dist/src/capabilities/create/create.verb.js.map +1 -0
  66. package/dist/src/capabilities/create/createHelp.js +47 -0
  67. package/dist/src/capabilities/create/createHelp.js.map +1 -0
  68. package/dist/src/capabilities/create/createSurface.generated.js +394 -0
  69. package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
  70. package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
  71. package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
  72. package/dist/src/capabilities/create/index.js +18 -0
  73. package/dist/src/capabilities/create/index.js.map +1 -0
  74. package/dist/src/capabilities/create/messages.js +16 -0
  75. package/dist/src/capabilities/create/messages.js.map +1 -0
  76. package/dist/src/capabilities/create/mount.js +293 -0
  77. package/dist/src/capabilities/create/mount.js.map +1 -0
  78. package/dist/src/capabilities/create/pathJail.js +65 -0
  79. package/dist/src/capabilities/create/pathJail.js.map +1 -0
  80. package/dist/src/capabilities/create/pickGenerator.js +53 -0
  81. package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
  82. package/dist/src/capabilities/create/types.js +2 -0
  83. package/dist/src/capabilities/create/types.js.map +1 -0
  84. package/dist/src/capabilities/distribution.js +40 -0
  85. package/dist/src/capabilities/distribution.js.map +1 -0
  86. package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
  87. package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
  88. package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
  89. package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
  90. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +92 -0
  91. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
  92. package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
  93. package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
  94. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
  95. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
  96. package/dist/src/capabilities/doctor/checks/index.js +27 -0
  97. package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
  98. package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
  99. package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
  100. package/dist/src/capabilities/doctor/checks/targetHealth.js +205 -0
  101. package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
  102. package/dist/src/capabilities/doctor/doctor.render.js +185 -0
  103. package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
  104. package/dist/src/capabilities/doctor/doctor.verb.js +45 -0
  105. package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
  106. package/dist/src/capabilities/doctor/index.js +5 -0
  107. package/dist/src/capabilities/doctor/index.js.map +1 -0
  108. package/dist/src/capabilities/doctor/runChecks.js +83 -0
  109. package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
  110. package/dist/src/capabilities/doctor/types.js +5 -0
  111. package/dist/src/capabilities/doctor/types.js.map +1 -0
  112. package/dist/src/capabilities/graph/index.js +19 -0
  113. package/dist/src/capabilities/graph/index.js.map +1 -0
  114. package/dist/src/capabilities/graph/inspect.render.js +76 -0
  115. package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
  116. package/dist/src/capabilities/graph/inspect.verb.js +53 -0
  117. package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
  118. package/dist/src/capabilities/graph/query.render.js +73 -0
  119. package/dist/src/capabilities/graph/query.render.js.map +1 -0
  120. package/dist/src/capabilities/graph/query.verb.js +49 -0
  121. package/dist/src/capabilities/graph/query.verb.js.map +1 -0
  122. package/dist/src/capabilities/graph/runQuery.js +41 -0
  123. package/dist/src/capabilities/graph/runQuery.js.map +1 -0
  124. package/dist/src/capabilities/index.js +56 -0
  125. package/dist/src/capabilities/index.js.map +1 -0
  126. package/dist/src/capabilities/info/collectInfo.js +66 -0
  127. package/dist/src/capabilities/info/collectInfo.js.map +1 -0
  128. package/dist/src/capabilities/info/index.js +5 -0
  129. package/dist/src/capabilities/info/index.js.map +1 -0
  130. package/dist/src/capabilities/info/info.render.js +53 -0
  131. package/dist/src/capabilities/info/info.render.js.map +1 -0
  132. package/dist/src/capabilities/info/info.verb.js +42 -0
  133. package/dist/src/capabilities/info/info.verb.js.map +1 -0
  134. package/dist/src/capabilities/info/types.js +5 -0
  135. package/dist/src/capabilities/info/types.js.map +1 -0
  136. package/dist/src/capabilities/meta/complete.verb.js +43 -0
  137. package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
  138. package/dist/src/capabilities/meta/index.js +13 -0
  139. package/dist/src/capabilities/meta/index.js.map +1 -0
  140. package/dist/src/capabilities/meta/mcp.verb.js +34 -0
  141. package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
  142. package/dist/src/capabilities/ontology/index.js +21 -0
  143. package/dist/src/capabilities/ontology/index.js.map +1 -0
  144. package/dist/src/capabilities/ontology/queries.js +123 -0
  145. package/dist/src/capabilities/ontology/queries.js.map +1 -0
  146. package/dist/src/capabilities/ontology/render.js +66 -0
  147. package/dist/src/capabilities/ontology/render.js.map +1 -0
  148. package/dist/src/capabilities/ontology/verbs.js +181 -0
  149. package/dist/src/capabilities/ontology/verbs.js.map +1 -0
  150. package/dist/src/capabilities/prompt/index.js +16 -0
  151. package/dist/src/capabilities/prompt/index.js.map +1 -0
  152. package/dist/src/capabilities/prompt/prompt.render.js +78 -0
  153. package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
  154. package/dist/src/capabilities/prompt/types.js +10 -0
  155. package/dist/src/capabilities/prompt/types.js.map +1 -0
  156. package/dist/src/capabilities/prompt/verbs.js +93 -0
  157. package/dist/src/capabilities/prompt/verbs.js.map +1 -0
  158. package/dist/src/capabilities/resources/index.js +10 -0
  159. package/dist/src/capabilities/resources/index.js.map +1 -0
  160. package/dist/src/capabilities/resources/provider.js +423 -0
  161. package/dist/src/capabilities/resources/provider.js.map +1 -0
  162. package/dist/src/capabilities/setup/buildPlan.js +168 -0
  163. package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
  164. package/dist/src/capabilities/setup/index.js +5 -0
  165. package/dist/src/capabilities/setup/index.js.map +1 -0
  166. package/dist/src/capabilities/setup/mode.js +53 -0
  167. package/dist/src/capabilities/setup/mode.js.map +1 -0
  168. package/dist/src/capabilities/setup/operations/index.js +39 -0
  169. package/dist/src/capabilities/setup/operations/index.js.map +1 -0
  170. package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
  171. package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
  172. package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
  173. package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
  174. package/dist/src/capabilities/setup/operations/setupGenerator.js +343 -0
  175. package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
  176. package/dist/src/capabilities/setup/operations/setupLsp.js +277 -0
  177. package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
  178. package/dist/src/capabilities/setup/operations/setupMcp.js +207 -0
  179. package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
  180. package/dist/src/capabilities/setup/operations/setupSkills.js +316 -0
  181. package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
  182. package/dist/src/capabilities/setup/plan.js +128 -0
  183. package/dist/src/capabilities/setup/plan.js.map +1 -0
  184. package/dist/src/capabilities/setup/plan.render.js +193 -0
  185. package/dist/src/capabilities/setup/plan.render.js.map +1 -0
  186. package/dist/src/capabilities/setup/setup.render.js +54 -0
  187. package/dist/src/capabilities/setup/setup.render.js.map +1 -0
  188. package/dist/src/capabilities/setup/setup.verb.js +334 -0
  189. package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
  190. package/dist/src/capabilities/setup/shell.js +196 -0
  191. package/dist/src/capabilities/setup/shell.js.map +1 -0
  192. package/dist/src/capabilities/setup/targets.js +263 -0
  193. package/dist/src/capabilities/setup/targets.js.map +1 -0
  194. package/dist/src/capabilities/setup/types.js +5 -0
  195. package/dist/src/capabilities/setup/types.js.map +1 -0
  196. package/dist/src/capabilities/shared/assertExecOk.js +137 -0
  197. package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
  198. package/dist/src/capabilities/shared/bands.js +16 -0
  199. package/dist/src/capabilities/shared/bands.js.map +1 -0
  200. package/dist/src/capabilities/shared/index.js +26 -0
  201. package/dist/src/capabilities/shared/index.js.map +1 -0
  202. package/dist/src/capabilities/shared/packageManager.js +103 -0
  203. package/dist/src/capabilities/shared/packageManager.js.map +1 -0
  204. package/dist/src/capabilities/shared/registry.js +55 -0
  205. package/dist/src/capabilities/shared/registry.js.map +1 -0
  206. package/dist/src/capabilities/skill/discover.js +195 -0
  207. package/dist/src/capabilities/skill/discover.js.map +1 -0
  208. package/dist/src/capabilities/skill/index.js +10 -0
  209. package/dist/src/capabilities/skill/index.js.map +1 -0
  210. package/dist/src/capabilities/skill/render.js +49 -0
  211. package/dist/src/capabilities/skill/render.js.map +1 -0
  212. package/dist/src/capabilities/skill/verbs.js +83 -0
  213. package/dist/src/capabilities/skill/verbs.js.map +1 -0
  214. package/dist/src/capabilities/sources/collectStatus.js +103 -0
  215. package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
  216. package/dist/src/capabilities/sources/index.js +13 -0
  217. package/dist/src/capabilities/sources/index.js.map +1 -0
  218. package/dist/src/capabilities/sources/installSkills.js +167 -0
  219. package/dist/src/capabilities/sources/installSkills.js.map +1 -0
  220. package/dist/src/capabilities/sources/runUpdate.js +394 -0
  221. package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
  222. package/dist/src/capabilities/sources/status.render.js +64 -0
  223. package/dist/src/capabilities/sources/status.render.js.map +1 -0
  224. package/dist/src/capabilities/sources/status.verb.js +40 -0
  225. package/dist/src/capabilities/sources/status.verb.js.map +1 -0
  226. package/dist/src/capabilities/sources/types.js +6 -0
  227. package/dist/src/capabilities/sources/types.js.map +1 -0
  228. package/dist/src/capabilities/sources/update.render.js +34 -0
  229. package/dist/src/capabilities/sources/update.render.js.map +1 -0
  230. package/dist/src/capabilities/sources/update.verb.js +55 -0
  231. package/dist/src/capabilities/sources/update.verb.js.map +1 -0
  232. package/dist/src/capabilities/upgrade/index.js +5 -0
  233. package/dist/src/capabilities/upgrade/index.js.map +1 -0
  234. package/dist/src/capabilities/upgrade/runUpgrade.js +99 -0
  235. package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
  236. package/dist/src/capabilities/upgrade/types.js +5 -0
  237. package/dist/src/capabilities/upgrade/types.js.map +1 -0
  238. package/dist/src/capabilities/upgrade/upgrade.render.js +44 -0
  239. package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
  240. package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
  241. package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
  242. package/dist/src/capabilities/version/index.js +10 -0
  243. package/dist/src/capabilities/version/index.js.map +1 -0
  244. package/dist/src/capabilities/version/version.verb.js +36 -0
  245. package/dist/src/capabilities/version/version.verb.js.map +1 -0
  246. package/dist/src/constants.js +82 -0
  247. package/dist/src/constants.js.map +1 -0
  248. package/dist/src/index.js +12 -0
  249. package/dist/src/index.js.map +1 -0
  250. package/dist/src/kernel/completion/complete.js +66 -0
  251. package/dist/src/kernel/completion/complete.js.map +1 -0
  252. package/dist/src/kernel/completion/emitScripts.js +92 -0
  253. package/dist/src/kernel/completion/emitScripts.js.map +1 -0
  254. package/dist/src/kernel/completion/entitySource.js +285 -0
  255. package/dist/src/kernel/completion/entitySource.js.map +1 -0
  256. package/dist/src/kernel/completion/index.js +14 -0
  257. package/dist/src/kernel/completion/index.js.map +1 -0
  258. package/dist/src/kernel/completion/model.js +301 -0
  259. package/dist/src/kernel/completion/model.js.map +1 -0
  260. package/dist/src/kernel/completion/parse.js +253 -0
  261. package/dist/src/kernel/completion/parse.js.map +1 -0
  262. package/dist/src/kernel/completion/rank.js +101 -0
  263. package/dist/src/kernel/completion/rank.js.map +1 -0
  264. package/dist/src/kernel/completion/resolve.js +100 -0
  265. package/dist/src/kernel/completion/resolve.js.map +1 -0
  266. package/dist/src/kernel/completion/templates/bash.js +209 -0
  267. package/dist/src/kernel/completion/templates/bash.js.map +1 -0
  268. package/dist/src/kernel/completion/templates/fish.js +214 -0
  269. package/dist/src/kernel/completion/templates/fish.js.map +1 -0
  270. package/dist/src/kernel/completion/templates/index.js +23 -0
  271. package/dist/src/kernel/completion/templates/index.js.map +1 -0
  272. package/dist/src/kernel/completion/templates/shared.js +98 -0
  273. package/dist/src/kernel/completion/templates/shared.js.map +1 -0
  274. package/dist/src/kernel/completion/templates/zsh.js +201 -0
  275. package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
  276. package/dist/src/kernel/completion/types.js +13 -0
  277. package/dist/src/kernel/completion/types.js.map +1 -0
  278. package/dist/src/kernel/config/defaults.js +17 -0
  279. package/dist/src/kernel/config/defaults.js.map +1 -0
  280. package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
  281. package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
  282. package/dist/src/kernel/config/findProjectConfig.js +43 -0
  283. package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
  284. package/dist/src/kernel/config/firstRun.js +34 -0
  285. package/dist/src/kernel/config/firstRun.js.map +1 -0
  286. package/dist/src/kernel/config/globalConfig.js +79 -0
  287. package/dist/src/kernel/config/globalConfig.js.map +1 -0
  288. package/dist/src/kernel/config/index.js +16 -0
  289. package/dist/src/kernel/config/index.js.map +1 -0
  290. package/dist/src/kernel/config/paths.js +35 -0
  291. package/dist/src/kernel/config/paths.js.map +1 -0
  292. package/dist/src/kernel/config/readConfig.js +78 -0
  293. package/dist/src/kernel/config/readConfig.js.map +1 -0
  294. package/dist/src/kernel/config/schema.js +130 -0
  295. package/dist/src/kernel/config/schema.js.map +1 -0
  296. package/dist/src/kernel/config/types.js +19 -0
  297. package/dist/src/kernel/config/types.js.map +1 -0
  298. package/dist/src/kernel/config/writeConfigField.js +59 -0
  299. package/dist/src/kernel/config/writeConfigField.js.map +1 -0
  300. package/dist/src/kernel/copy.js +43 -0
  301. package/dist/src/kernel/copy.js.map +1 -0
  302. package/dist/src/kernel/error/PragmaError.js +149 -0
  303. package/dist/src/kernel/error/PragmaError.js.map +1 -0
  304. package/dist/src/kernel/error/constants.js +40 -0
  305. package/dist/src/kernel/error/constants.js.map +1 -0
  306. package/dist/src/kernel/error/fromTaskError.js +96 -0
  307. package/dist/src/kernel/error/fromTaskError.js.map +1 -0
  308. package/dist/src/kernel/error/index.js +13 -0
  309. package/dist/src/kernel/error/index.js.map +1 -0
  310. package/dist/src/kernel/error/recovery.js +52 -0
  311. package/dist/src/kernel/error/recovery.js.map +1 -0
  312. package/dist/src/kernel/error/renderError.js +115 -0
  313. package/dist/src/kernel/error/renderError.js.map +1 -0
  314. package/dist/src/kernel/error/serialize.js +25 -0
  315. package/dist/src/kernel/error/serialize.js.map +1 -0
  316. package/dist/src/kernel/error/types.js +9 -0
  317. package/dist/src/kernel/error/types.js.map +1 -0
  318. package/dist/src/kernel/index.js +25 -0
  319. package/dist/src/kernel/index.js.map +1 -0
  320. package/dist/src/kernel/packs/collect.js +187 -0
  321. package/dist/src/kernel/packs/collect.js.map +1 -0
  322. package/dist/src/kernel/packs/compile.js +304 -0
  323. package/dist/src/kernel/packs/compile.js.map +1 -0
  324. package/dist/src/kernel/packs/disclosure.js +76 -0
  325. package/dist/src/kernel/packs/disclosure.js.map +1 -0
  326. package/dist/src/kernel/packs/glob.js +38 -0
  327. package/dist/src/kernel/packs/glob.js.map +1 -0
  328. package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
  329. package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
  330. package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
  331. package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
  332. package/dist/src/kernel/packs/graphql/index.js +20 -0
  333. package/dist/src/kernel/packs/graphql/index.js.map +1 -0
  334. package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
  335. package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
  336. package/dist/src/kernel/packs/index.js +34 -0
  337. package/dist/src/kernel/packs/index.js.map +1 -0
  338. package/dist/src/kernel/packs/iri.js +110 -0
  339. package/dist/src/kernel/packs/iri.js.map +1 -0
  340. package/dist/src/kernel/packs/renderPack.js +129 -0
  341. package/dist/src/kernel/packs/renderPack.js.map +1 -0
  342. package/dist/src/kernel/packs/resolveEntity.js +223 -0
  343. package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
  344. package/dist/src/kernel/packs/runBodies.js +87 -0
  345. package/dist/src/kernel/packs/runBodies.js.map +1 -0
  346. package/dist/src/kernel/packs/sample.js +56 -0
  347. package/dist/src/kernel/packs/sample.js.map +1 -0
  348. package/dist/src/kernel/packs/schema.js +369 -0
  349. package/dist/src/kernel/packs/schema.js.map +1 -0
  350. package/dist/src/kernel/packs/sparql/applyFilters.js +68 -0
  351. package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
  352. package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
  353. package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
  354. package/dist/src/kernel/packs/sparql/buildLookupQuery.js +217 -0
  355. package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
  356. package/dist/src/kernel/packs/sparql/escape.js +21 -0
  357. package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
  358. package/dist/src/kernel/packs/sparql/index.js +31 -0
  359. package/dist/src/kernel/packs/sparql/index.js.map +1 -0
  360. package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
  361. package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
  362. package/dist/src/kernel/packs/types.js +30 -0
  363. package/dist/src/kernel/packs/types.js.map +1 -0
  364. package/dist/src/kernel/packs/uniqueness.js +30 -0
  365. package/dist/src/kernel/packs/uniqueness.js.map +1 -0
  366. package/dist/src/kernel/project/cli/buildProgram.js +263 -0
  367. package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
  368. package/dist/src/kernel/project/cli/constants.js +27 -0
  369. package/dist/src/kernel/project/cli/constants.js.map +1 -0
  370. package/dist/src/kernel/project/cli/dispatch.js +420 -0
  371. package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
  372. package/dist/src/kernel/project/cli/exitCodes.js +66 -0
  373. package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
  374. package/dist/src/kernel/project/cli/globalFlags.js +216 -0
  375. package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
  376. package/dist/src/kernel/project/cli/helpFormat.js +59 -0
  377. package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
  378. package/dist/src/kernel/project/cli/index.js +14 -0
  379. package/dist/src/kernel/project/cli/index.js.map +1 -0
  380. package/dist/src/kernel/project/cli/rootHelp.js +197 -0
  381. package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
  382. package/dist/src/kernel/project/cli/suggest.js +75 -0
  383. package/dist/src/kernel/project/cli/suggest.js.map +1 -0
  384. package/dist/src/kernel/project/cli/suggestNames.js +96 -0
  385. package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
  386. package/dist/src/kernel/project/cli/verbHelp.js +131 -0
  387. package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
  388. package/dist/src/kernel/project/mcp/buildServer.js +67 -0
  389. package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
  390. package/dist/src/kernel/project/mcp/envelope.js +37 -0
  391. package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
  392. package/dist/src/kernel/project/mcp/index.js +8 -0
  393. package/dist/src/kernel/project/mcp/index.js.map +1 -0
  394. package/dist/src/kernel/project/mcp/instructions.js +44 -0
  395. package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
  396. package/dist/src/kernel/project/mcp/mcpError.js +42 -0
  397. package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
  398. package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
  399. package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
  400. package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
  401. package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
  402. package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
  403. package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
  404. package/dist/src/kernel/project/mcp/registerVerb.js +300 -0
  405. package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
  406. package/dist/src/kernel/project/mcp/serve.js +35 -0
  407. package/dist/src/kernel/project/mcp/serve.js.map +1 -0
  408. package/dist/src/kernel/render/compactUri.js +24 -0
  409. package/dist/src/kernel/render/compactUri.js.map +1 -0
  410. package/dist/src/kernel/render/contracts.js +10 -0
  411. package/dist/src/kernel/render/contracts.js.map +1 -0
  412. package/dist/src/kernel/render/disclosure.js +34 -0
  413. package/dist/src/kernel/render/disclosure.js.map +1 -0
  414. package/dist/src/kernel/render/envelope.js +30 -0
  415. package/dist/src/kernel/render/envelope.js.map +1 -0
  416. package/dist/src/kernel/render/formatters.js +27 -0
  417. package/dist/src/kernel/render/formatters.js.map +1 -0
  418. package/dist/src/kernel/render/index.js +15 -0
  419. package/dist/src/kernel/render/index.js.map +1 -0
  420. package/dist/src/kernel/render/prefixes.js +46 -0
  421. package/dist/src/kernel/render/prefixes.js.map +1 -0
  422. package/dist/src/kernel/render/renderers.js +468 -0
  423. package/dist/src/kernel/render/renderers.js.map +1 -0
  424. package/dist/src/kernel/render/style.js +85 -0
  425. package/dist/src/kernel/render/style.js.map +1 -0
  426. package/dist/src/kernel/render/turtle.js +194 -0
  427. package/dist/src/kernel/render/turtle.js.map +1 -0
  428. package/dist/src/kernel/render/writeStdout.js +43 -0
  429. package/dist/src/kernel/render/writeStdout.js.map +1 -0
  430. package/dist/src/kernel/runtime/boot.js +49 -0
  431. package/dist/src/kernel/runtime/boot.js.map +1 -0
  432. package/dist/src/kernel/runtime/facade.js +39 -0
  433. package/dist/src/kernel/runtime/facade.js.map +1 -0
  434. package/dist/src/kernel/runtime/graphpack/build.js +122 -0
  435. package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
  436. package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
  437. package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
  438. package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
  439. package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
  440. package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
  441. package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
  442. package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
  443. package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
  444. package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
  445. package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
  446. package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
  447. package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
  448. package/dist/src/kernel/runtime/graphpack/index.js +11 -0
  449. package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
  450. package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
  451. package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
  452. package/dist/src/kernel/runtime/graphpack/read.js +92 -0
  453. package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
  454. package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
  455. package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
  456. package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
  457. package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
  458. package/dist/src/kernel/runtime/graphpack/types.js +55 -0
  459. package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
  460. package/dist/src/kernel/runtime/index.js +8 -0
  461. package/dist/src/kernel/runtime/index.js.map +1 -0
  462. package/dist/src/kernel/runtime/loadSession.js +34 -0
  463. package/dist/src/kernel/runtime/loadSession.js.map +1 -0
  464. package/dist/src/kernel/runtime/paths.js +78 -0
  465. package/dist/src/kernel/runtime/paths.js.map +1 -0
  466. package/dist/src/kernel/runtime/probe.js +37 -0
  467. package/dist/src/kernel/runtime/probe.js.map +1 -0
  468. package/dist/src/kernel/runtime/readEntity.js +363 -0
  469. package/dist/src/kernel/runtime/readEntity.js.map +1 -0
  470. package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
  471. package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
  472. package/dist/src/kernel/runtime/refs/index.js +29 -0
  473. package/dist/src/kernel/runtime/refs/index.js.map +1 -0
  474. package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
  475. package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
  476. package/dist/src/kernel/runtime/refs/resolve.js +332 -0
  477. package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
  478. package/dist/src/kernel/runtime/resolveSources.js +62 -0
  479. package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
  480. package/dist/src/kernel/runtime/store.js +75 -0
  481. package/dist/src/kernel/runtime/store.js.map +1 -0
  482. package/dist/src/kernel/runtime/storeReadiness.js +51 -0
  483. package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
  484. package/dist/src/kernel/runtime/types.js +11 -0
  485. package/dist/src/kernel/runtime/types.js.map +1 -0
  486. package/dist/src/kernel/spec/asVerb.js +21 -0
  487. package/dist/src/kernel/spec/asVerb.js.map +1 -0
  488. package/dist/src/kernel/spec/emitReference.js +578 -0
  489. package/dist/src/kernel/spec/emitReference.js.map +1 -0
  490. package/dist/src/kernel/spec/emitSurface.js +202 -0
  491. package/dist/src/kernel/spec/emitSurface.js.map +1 -0
  492. package/dist/src/kernel/spec/index.js +11 -0
  493. package/dist/src/kernel/spec/index.js.map +1 -0
  494. package/dist/src/kernel/spec/surfaceConformance.js +103 -0
  495. package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
  496. package/dist/src/kernel/spec/types.js +14 -0
  497. package/dist/src/kernel/spec/types.js.map +1 -0
  498. package/dist/src/kernel/spec/validate.js +110 -0
  499. package/dist/src/kernel/spec/validate.js.map +1 -0
  500. package/dist/src/kernel/vocabulary.js +97 -0
  501. package/dist/src/kernel/vocabulary.js.map +1 -0
  502. package/dist/src/types.js +11 -0
  503. package/dist/src/types.js.map +1 -0
  504. package/package.json +25 -24
  505. package/pragma.conf.ts +853 -0
  506. package/src/bin.ts +276 -82
  507. package/src/capabilities/block.parity.test.ts +253 -0
  508. package/src/capabilities/capabilities/capabilities.render.ts +4 -3
  509. package/src/capabilities/capabilities/capabilities.verb.ts +32 -14
  510. package/src/capabilities/capabilities/catalog.ts +20 -12
  511. package/src/capabilities/capabilities/hints.ts +43 -24
  512. package/src/capabilities/capabilities/index.ts +1 -1
  513. package/src/capabilities/colophon/collectColophon.ts +50 -24
  514. package/src/capabilities/colophon/colophon.render.ts +25 -1
  515. package/src/capabilities/colophon/colophon.test.ts +42 -21
  516. package/src/capabilities/colophon/colophon.verb.ts +9 -5
  517. package/src/capabilities/colophon/types.ts +16 -7
  518. package/src/capabilities/config/collectConfigShow.test.ts +58 -0
  519. package/src/capabilities/config/collectConfigShow.ts +43 -6
  520. package/src/capabilities/config/field.render.ts +4 -5
  521. package/src/capabilities/config/fields.ts +17 -37
  522. package/src/capabilities/config/get.verb.ts +70 -0
  523. package/src/capabilities/config/getUnset.test.ts +264 -0
  524. package/src/capabilities/config/index.ts +5 -1
  525. package/src/capabilities/config/runField.ts +40 -22
  526. package/src/capabilities/config/runGet.ts +34 -0
  527. package/src/capabilities/config/runSet.ts +35 -9
  528. package/src/capabilities/config/set.test.ts +48 -14
  529. package/src/capabilities/config/set.verb.ts +14 -9
  530. package/src/capabilities/config/show.render.test.ts +77 -5
  531. package/src/capabilities/config/show.render.ts +8 -13
  532. package/src/capabilities/config/show.verb.ts +13 -9
  533. package/src/capabilities/config/types.ts +26 -4
  534. package/src/capabilities/config/unset.verb.ts +58 -0
  535. package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
  536. package/src/capabilities/create/byteEquality.test.ts +95 -103
  537. package/src/capabilities/create/cliProjection.ts +227 -0
  538. package/src/capabilities/create/constants.ts +50 -0
  539. package/src/capabilities/create/create.mcp.test.ts +91 -7
  540. package/src/capabilities/create/create.render.ts +71 -7
  541. package/src/capabilities/create/create.test.ts +523 -162
  542. package/src/capabilities/create/create.verb.ts +361 -321
  543. package/src/capabilities/create/createGrammar.test.ts +865 -0
  544. package/src/capabilities/create/createHelp.ts +71 -0
  545. package/src/capabilities/create/createSurface.generated.ts +400 -0
  546. package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
  547. package/src/capabilities/create/cwdJail.test.ts +24 -5
  548. package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
  549. package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
  550. package/src/capabilities/create/index.ts +9 -14
  551. package/src/capabilities/create/messages.ts +18 -0
  552. package/src/capabilities/create/mount.ts +391 -0
  553. package/src/capabilities/create/pathJail.test.ts +90 -0
  554. package/src/capabilities/create/pathJail.ts +8 -5
  555. package/src/capabilities/create/pickGenerator.ts +40 -46
  556. package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
  557. package/src/capabilities/create/types.ts +29 -5
  558. package/src/capabilities/{standard/parity.test.ts → distribution.parity.test.ts} +24 -14
  559. package/src/capabilities/distribution.test.ts +122 -0
  560. package/src/capabilities/distribution.ts +54 -0
  561. package/src/capabilities/doctor/checks/checkKeStore.ts +9 -7
  562. package/src/capabilities/doctor/checks/checkPackageRefs.ts +82 -46
  563. package/src/capabilities/doctor/checks/checkPragmaVersion.ts +5 -4
  564. package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +125 -30
  565. package/src/capabilities/doctor/checks/checkShellCompletions.ts +113 -27
  566. package/src/capabilities/doctor/checks/index.ts +27 -0
  567. package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
  568. package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
  569. package/src/capabilities/doctor/checks/targetHealth.ts +274 -0
  570. package/src/capabilities/doctor/doctor.render.test.ts +24 -13
  571. package/src/capabilities/doctor/doctor.render.ts +45 -20
  572. package/src/capabilities/doctor/doctor.test.ts +158 -40
  573. package/src/capabilities/doctor/doctor.verb.ts +9 -5
  574. package/src/capabilities/doctor/runChecks.ts +65 -66
  575. package/src/capabilities/doctor/types.ts +21 -5
  576. package/src/capabilities/emptyRecovery.test.ts +44 -22
  577. package/src/capabilities/graph/examples.exec.test.ts +107 -0
  578. package/src/capabilities/graph/index.ts +1 -1
  579. package/src/capabilities/graph/inspect.render.ts +70 -22
  580. package/src/capabilities/graph/inspect.test.ts +260 -5
  581. package/src/capabilities/graph/inspect.verb.ts +18 -5
  582. package/src/capabilities/graph/query.render.ts +15 -3
  583. package/src/capabilities/graph/query.verb.ts +5 -4
  584. package/src/capabilities/graph/runQuery.ts +9 -7
  585. package/src/capabilities/index.ts +25 -19
  586. package/src/capabilities/info/collectInfo.ts +15 -10
  587. package/src/capabilities/info/info.render.ts +4 -3
  588. package/src/capabilities/info/info.verb.ts +4 -3
  589. package/src/capabilities/lazy.test.ts +125 -2
  590. package/src/capabilities/meta/complete.verb.ts +1 -1
  591. package/src/capabilities/meta/index.ts +1 -1
  592. package/src/capabilities/meta/mcp.verb.ts +10 -8
  593. package/src/capabilities/ontology/index.ts +15 -11
  594. package/src/capabilities/ontology/ontology.test.ts +6 -55
  595. package/src/capabilities/ontology/queries.ts +2 -2
  596. package/src/capabilities/ontology/render.ts +3 -4
  597. package/src/capabilities/ontology/verbs.ts +42 -83
  598. package/src/capabilities/prompt/index.ts +2 -2
  599. package/src/capabilities/prompt/prompt.render.ts +6 -2
  600. package/src/capabilities/prompt/prompt.test.ts +12 -6
  601. package/src/capabilities/prompt/types.ts +1 -1
  602. package/src/capabilities/prompt/verbs.ts +26 -14
  603. package/src/capabilities/reference.test.ts +63 -0
  604. package/src/capabilities/resources/provider.ts +367 -91
  605. package/src/capabilities/resources/resources.test.ts +411 -59
  606. package/src/capabilities/setup/buildPlan.ts +236 -0
  607. package/src/capabilities/setup/index.ts +7 -7
  608. package/src/capabilities/setup/mode.ts +74 -0
  609. package/src/capabilities/setup/operations/index.ts +74 -0
  610. package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
  611. package/src/capabilities/setup/operations/setupConfig.ts +124 -0
  612. package/src/capabilities/setup/operations/setupGenerator.ts +397 -320
  613. package/src/capabilities/setup/operations/setupLsp.ts +329 -68
  614. package/src/capabilities/setup/operations/setupMcp.ts +137 -97
  615. package/src/capabilities/setup/operations/setupSkills.ts +336 -108
  616. package/src/capabilities/setup/plan.render.ts +241 -0
  617. package/src/capabilities/setup/plan.ts +236 -0
  618. package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
  619. package/src/capabilities/setup/setup.render.test.ts +281 -73
  620. package/src/capabilities/setup/setup.render.ts +45 -77
  621. package/src/capabilities/setup/setup.test.ts +972 -209
  622. package/src/capabilities/setup/setup.verb.ts +233 -74
  623. package/src/capabilities/setup/shell.test.ts +86 -0
  624. package/src/capabilities/setup/shell.ts +166 -14
  625. package/src/capabilities/setup/targets.ts +367 -0
  626. package/src/capabilities/setup/types.ts +18 -57
  627. package/src/capabilities/shared/assertExecOk.ts +68 -10
  628. package/src/capabilities/shared/index.ts +32 -0
  629. package/src/capabilities/shared/packageManager.test.ts +55 -0
  630. package/src/capabilities/shared/packageManager.ts +62 -6
  631. package/src/capabilities/skill/discover.ts +47 -9
  632. package/src/capabilities/skill/index.ts +1 -1
  633. package/src/capabilities/skill/render.ts +14 -14
  634. package/src/capabilities/skill/skill.test.ts +7 -5
  635. package/src/capabilities/skill/verbs.ts +9 -10
  636. package/src/capabilities/sources/collectStatus.ts +61 -51
  637. package/src/capabilities/sources/index.ts +2 -2
  638. package/src/capabilities/sources/installSkills.ts +86 -9
  639. package/src/capabilities/sources/runUpdate.ts +164 -141
  640. package/src/capabilities/sources/sources.test.ts +265 -119
  641. package/src/capabilities/sources/status.render.test.ts +53 -24
  642. package/src/capabilities/sources/status.render.ts +25 -30
  643. package/src/capabilities/sources/status.verb.ts +16 -9
  644. package/src/capabilities/sources/types.ts +18 -25
  645. package/src/capabilities/sources/update.render.ts +10 -3
  646. package/src/capabilities/sources/update.verb.ts +13 -24
  647. package/src/capabilities/surface.test.ts +165 -25
  648. package/src/capabilities/tier.parity.test.ts +144 -0
  649. package/src/capabilities/upgrade/runUpgrade.ts +8 -8
  650. package/src/capabilities/upgrade/upgrade.render.ts +4 -5
  651. package/src/capabilities/upgrade/upgrade.test.ts +3 -3
  652. package/src/capabilities/upgrade/upgrade.verb.ts +8 -4
  653. package/src/capabilities/version/index.ts +12 -0
  654. package/src/capabilities/version/version.test.ts +66 -0
  655. package/src/capabilities/version/version.verb.ts +39 -0
  656. package/src/constants.test.ts +8 -6
  657. package/src/constants.ts +78 -22
  658. package/src/identity.test.ts +348 -0
  659. package/src/index.ts +2 -2
  660. package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +20 -15
  661. package/src/kernel/completion/complete.test.ts +12 -2
  662. package/src/kernel/completion/complete.ts +1 -1
  663. package/src/kernel/completion/emitScripts.test.ts +1 -1
  664. package/src/kernel/completion/emitScripts.ts +5 -3
  665. package/src/kernel/completion/entitySource.test.ts +185 -41
  666. package/src/kernel/completion/entitySource.ts +133 -110
  667. package/src/kernel/completion/model.test.ts +165 -13
  668. package/src/kernel/completion/model.ts +105 -14
  669. package/src/kernel/completion/parse.test.ts +4 -7
  670. package/src/kernel/completion/parse.ts +15 -0
  671. package/src/kernel/completion/resolve.test.ts +0 -1
  672. package/src/kernel/completion/safety.test.ts +104 -50
  673. package/src/kernel/completion/shellDrive.test.ts +611 -0
  674. package/src/kernel/completion/templates/bash.ts +7 -2
  675. package/src/kernel/completion/templates/fish.ts +28 -6
  676. package/src/kernel/completion/templates/index.ts +23 -0
  677. package/src/kernel/completion/types.ts +10 -3
  678. package/src/kernel/config/defaults.test.ts +108 -0
  679. package/src/kernel/config/defaults.ts +13 -23
  680. package/src/kernel/config/evaluateProjectConfig.ts +33 -11
  681. package/src/kernel/config/findProjectConfig.ts +4 -3
  682. package/src/kernel/config/firstRun.test.ts +44 -38
  683. package/src/kernel/config/firstRun.ts +24 -81
  684. package/src/kernel/config/globalConfig.ts +2 -2
  685. package/src/kernel/config/index.ts +5 -6
  686. package/src/kernel/config/paths.ts +17 -17
  687. package/src/kernel/config/readConfig.test.ts +246 -7
  688. package/src/kernel/config/readConfig.ts +8 -8
  689. package/src/kernel/config/schema.test.ts +50 -0
  690. package/src/kernel/config/schema.ts +100 -11
  691. package/src/kernel/config/types.ts +75 -19
  692. package/src/kernel/copy.test.ts +483 -0
  693. package/src/kernel/copy.ts +54 -0
  694. package/src/kernel/error/PragmaError.test.ts +6 -3
  695. package/src/kernel/error/PragmaError.ts +4 -2
  696. package/src/kernel/error/constants.ts +7 -4
  697. package/src/kernel/error/fromTaskError.ts +28 -6
  698. package/src/kernel/error/index.ts +1 -1
  699. package/src/kernel/error/recovery.test.ts +22 -45
  700. package/src/kernel/error/recovery.ts +36 -27
  701. package/src/kernel/error/renderError.ts +42 -1
  702. package/src/kernel/error/types.ts +25 -4
  703. package/src/kernel/index.ts +26 -0
  704. package/src/kernel/packs/collect.test.ts +195 -11
  705. package/src/kernel/packs/collect.ts +212 -61
  706. package/src/kernel/packs/compile.test.ts +293 -8
  707. package/src/kernel/packs/compile.ts +108 -15
  708. package/src/kernel/packs/disclosure.test.ts +5 -2
  709. package/src/kernel/packs/disclosure.ts +2 -2
  710. package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
  711. package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +13 -13
  712. package/src/kernel/packs/graphql/index.ts +20 -0
  713. package/src/kernel/packs/graphqlSource.test.ts +6 -3
  714. package/src/kernel/packs/index.ts +40 -0
  715. package/src/kernel/packs/iri.test.ts +73 -0
  716. package/src/kernel/packs/iri.ts +70 -20
  717. package/src/kernel/packs/renderPack.ts +28 -7
  718. package/src/kernel/packs/resolveEntity.test.ts +213 -0
  719. package/src/kernel/packs/resolveEntity.ts +132 -34
  720. package/src/kernel/packs/runBodies.ts +16 -16
  721. package/src/kernel/packs/sample.ts +1 -1
  722. package/src/kernel/packs/schema.ts +114 -11
  723. package/src/kernel/packs/sparql/applyFilters.ts +16 -17
  724. package/src/kernel/packs/sparql/buildLookupQuery.ts +75 -3
  725. package/src/kernel/packs/sparql/index.ts +37 -0
  726. package/src/kernel/packs/sparql/runSelect.test.ts +104 -10
  727. package/src/kernel/packs/sparql/runSelect.ts +75 -37
  728. package/src/kernel/packs/toolDescription.test.ts +52 -5
  729. package/src/kernel/packs/types.ts +52 -4
  730. package/src/kernel/packs/uniqueness.ts +5 -5
  731. package/src/kernel/project/cli/buildProgram.test.ts +157 -17
  732. package/src/kernel/project/cli/buildProgram.ts +77 -18
  733. package/src/kernel/project/cli/constants.ts +34 -0
  734. package/src/kernel/project/cli/dispatch.test.ts +227 -3
  735. package/src/kernel/project/cli/dispatch.ts +250 -48
  736. package/src/kernel/project/cli/exitCodes.ts +1 -1
  737. package/src/kernel/project/cli/globalFlags.test.ts +117 -1
  738. package/src/kernel/project/cli/globalFlags.ts +130 -30
  739. package/src/kernel/project/cli/helpFormat.ts +14 -1
  740. package/src/kernel/project/cli/rootHelp.ts +140 -111
  741. package/src/kernel/project/cli/suggest.test.ts +33 -1
  742. package/src/kernel/project/cli/suggest.ts +25 -1
  743. package/src/kernel/project/cli/verbHelp.test.ts +30 -0
  744. package/src/kernel/project/cli/verbHelp.ts +23 -7
  745. package/src/kernel/project/mcp/buildServer.ts +18 -10
  746. package/src/kernel/project/mcp/envelope.ts +2 -2
  747. package/src/kernel/project/mcp/instructions.ts +12 -7
  748. package/src/kernel/project/mcp/mcpError.ts +1 -1
  749. package/src/kernel/project/mcp/parity.test.ts +42 -1
  750. package/src/kernel/project/mcp/prompts/index.ts +37 -0
  751. package/src/kernel/project/mcp/prompts/prompts.test.ts +120 -5
  752. package/src/kernel/project/mcp/prompts/provider.ts +22 -8
  753. package/src/kernel/project/mcp/prompts/source.ts +69 -68
  754. package/src/kernel/project/mcp/registerVerb.ts +56 -11
  755. package/src/kernel/project/mcp/serve.ts +13 -5
  756. package/src/kernel/project/mcp/toolDescriptions.test.ts +6 -2
  757. package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
  758. package/src/kernel/render/contracts.ts +21 -0
  759. package/src/kernel/render/disclosure.ts +4 -2
  760. package/src/kernel/render/envelope.ts +2 -3
  761. package/src/kernel/render/formatters.ts +1 -1
  762. package/src/kernel/render/prefixes.test.ts +36 -0
  763. package/src/kernel/render/prefixes.ts +40 -13
  764. package/src/kernel/render/renderers.test.ts +244 -7
  765. package/src/kernel/render/renderers.ts +222 -20
  766. package/src/kernel/render/style.test.ts +75 -24
  767. package/src/kernel/render/style.ts +31 -1
  768. package/src/kernel/render/turtle.ts +222 -0
  769. package/src/kernel/runtime/graphpack/build.ts +29 -3
  770. package/src/kernel/runtime/graphpack/buildIndex.test.ts +46 -0
  771. package/src/kernel/runtime/graphpack/buildIndex.ts +53 -18
  772. package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +5 -5
  773. package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +3 -3
  774. package/src/kernel/runtime/graphpack/embedded/pack.stories.generated.ts +3 -0
  775. package/src/kernel/runtime/graphpack/embedded.ts +39 -13
  776. package/src/kernel/runtime/graphpack/graphpack.test.ts +205 -5
  777. package/src/kernel/runtime/graphpack/hash.ts +3 -2
  778. package/src/kernel/runtime/graphpack/index.ts +1 -1
  779. package/src/kernel/runtime/graphpack/manifest.ts +114 -12
  780. package/src/kernel/runtime/graphpack/read.ts +5 -11
  781. package/src/kernel/runtime/graphpack/schemas.ts +74 -0
  782. package/src/kernel/runtime/graphpack/stories.ts +84 -0
  783. package/src/kernel/runtime/graphpack/types.ts +61 -48
  784. package/src/kernel/runtime/loadSession.ts +1 -1
  785. package/src/kernel/runtime/paths.ts +64 -15
  786. package/src/kernel/runtime/probe.test.ts +8 -4
  787. package/src/kernel/runtime/probe.ts +6 -6
  788. package/src/kernel/runtime/readEntity.ts +477 -32
  789. package/src/kernel/runtime/refs/gitOps.ts +1 -19
  790. package/src/kernel/runtime/refs/index.ts +39 -0
  791. package/src/kernel/runtime/refs/parseRef.ts +8 -8
  792. package/src/kernel/runtime/refs/resolve.ts +82 -66
  793. package/src/kernel/runtime/resolveSources.test.ts +63 -24
  794. package/src/kernel/runtime/resolveSources.ts +36 -25
  795. package/src/kernel/runtime/storeReadiness.ts +10 -10
  796. package/src/kernel/runtime/storeless.test.ts +1 -1
  797. package/src/kernel/runtime/types.ts +15 -1
  798. package/src/kernel/runtime/wasmEmbed.test.ts +56 -55
  799. package/src/kernel/spec/emitReference.test.ts +3 -3
  800. package/src/kernel/spec/emitReference.ts +242 -34
  801. package/src/kernel/spec/emitSurface.ts +57 -11
  802. package/src/kernel/spec/surfaceConformance.test.ts +4 -2
  803. package/src/kernel/spec/surfaceConformance.ts +8 -0
  804. package/src/kernel/spec/types.ts +277 -13
  805. package/src/kernel/spec/validate.ts +2 -1
  806. package/src/kernel/vocabulary.test.ts +164 -0
  807. package/src/kernel/vocabulary.ts +146 -0
  808. package/src/testing/PARITY_GAPS.ts +8 -2
  809. package/src/testing/behavioral/README.md +3 -3
  810. package/src/testing/behavioral/completion.test.ts +19 -6
  811. package/src/testing/behavioral/docExamples.test.ts +14 -0
  812. package/src/testing/behavioral/errorMatrix.mcp.test.ts +6 -5
  813. package/src/testing/behavioral/errorMatrix.storeless.test.ts +1 -1
  814. package/src/testing/behavioral/exitCodes.e2e.test.ts +6 -5
  815. package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
  816. package/src/testing/behavioral/harness.foundation.test.ts +14 -5
  817. package/src/testing/behavioral/journeys.cli.test.ts +117 -76
  818. package/src/testing/behavioral/journeys.defaultPack.test.ts +88 -182
  819. package/src/testing/behavioral/journeys.firstInstall.test.ts +167 -0
  820. package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
  821. package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
  822. package/src/testing/behavioral/journeys.mcpLifecycle.mcp.test.ts +9 -6
  823. package/src/testing/behavioral/journeys.packageStories.test.ts +188 -0
  824. package/src/testing/behavioral/liveReadSurface.ts +4 -3
  825. package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
  826. package/src/testing/behavioral/mcpSurface.test.ts +10 -5
  827. package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
  828. package/src/testing/behavioral/staleCommands.test.ts +10 -0
  829. package/src/testing/eval/__snapshots__/eval.test.ts.snap +7 -7
  830. package/src/testing/eval/cases/assembly.ts +13 -6
  831. package/src/testing/eval/cases/effectful.ts +28 -15
  832. package/src/testing/eval/cases/readNouns.ts +22 -20
  833. package/src/testing/eval/cases/stable.ts +5 -1
  834. package/src/testing/eval/eval.test.ts +7 -1
  835. package/src/testing/fixtures/blockGraph.ts +79 -0
  836. package/src/testing/fixtures/fixtureCapability.ts +45 -1
  837. package/src/testing/fixtures/graph/canonical.ts +94 -5
  838. package/src/testing/fixtures/graph/defaultPack.ts +7 -6
  839. package/src/testing/fixtures/graph/owlExport.ts +7 -5
  840. package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
  841. package/src/testing/helpers/fixtureGraph.ts +33 -16
  842. package/src/testing/helpers/packRuntime.ts +2 -3
  843. package/src/testing/helpers/projectCli.ts +2 -1
  844. package/src/testing/helpers/projectMcp.ts +38 -6
  845. package/src/testing/helpers/runCli.ts +35 -18
  846. package/src/testing/perf/budgets.test.ts +24 -9
  847. package/src/testing/perf/budgets.ts +76 -12
  848. package/src/testing/perf/codegen.test.ts +126 -0
  849. package/src/testing/perf/globalSetup.test.ts +286 -0
  850. package/src/testing/perf/globalSetup.ts +611 -14
  851. package/src/testing/perf/measure.test.ts +38 -0
  852. package/src/testing/perf/measure.ts +23 -4
  853. package/src/testing/setupXdgIsolation.ts +81 -21
  854. package/src/testing/tempRoot.globalSetup.ts +122 -0
  855. package/src/types.ts +2 -2
  856. package/dist/pragma +0 -0
  857. package/src/capabilities/block/blockList.test.ts +0 -79
  858. package/src/capabilities/block/blockList.verb.ts +0 -163
  859. package/src/capabilities/block/index.ts +0 -25
  860. package/src/capabilities/block/pack.ts +0 -166
  861. package/src/capabilities/block/parity.test.ts +0 -187
  862. package/src/capabilities/block/tierChain.ts +0 -78
  863. package/src/capabilities/colophon/pragmaColophon.ts +0 -66
  864. package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -152
  865. package/src/capabilities/create/templates.embedded.generated.ts +0 -53
  866. package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -41
  867. package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
  868. package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -67
  869. package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -60
  870. package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
  871. package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
  872. package/src/capabilities/modifier/index.ts +0 -15
  873. package/src/capabilities/modifier/pack.ts +0 -64
  874. package/src/capabilities/standard/index.ts +0 -18
  875. package/src/capabilities/standard/pack.ts +0 -128
  876. package/src/capabilities/tier/index.ts +0 -19
  877. package/src/capabilities/tier/lookup.render.test.ts +0 -72
  878. package/src/capabilities/tier/lookup.render.ts +0 -59
  879. package/src/capabilities/tier/lookup.test.ts +0 -83
  880. package/src/capabilities/tier/lookup.verb.ts +0 -44
  881. package/src/capabilities/tier/pack.ts +0 -28
  882. package/src/capabilities/tier/runLookup.ts +0 -87
  883. package/src/capabilities/token/addConfig.render.ts +0 -27
  884. package/src/capabilities/token/addConfig.test.ts +0 -62
  885. package/src/capabilities/token/addConfig.verb.ts +0 -40
  886. package/src/capabilities/token/index.ts +0 -19
  887. package/src/capabilities/token/pack.ts +0 -58
  888. package/src/capabilities/token/runAddConfig.ts +0 -95
  889. package/src/kernel/completion/bashDrive.test.ts +0 -73
  890. package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
  891. package/src/kernel/runtime/graphpack/embedded/sample.ttl +0 -39
  892. package/src/kernel/runtime/lock.ts +0 -90
@@ -0,0 +1,110 @@
1
+ /**
2
+ * IRI utilities for pack lookups addressed by prefixed name or absolute IRI.
3
+ *
4
+ * `resolveUri` expands a prefixed name through the store's merged prefix map (a
5
+ * registered prefix always wins; a foreign absolute IRI passes through);
6
+ * `isEmbeddableIri` is the stricter `scheme://…` shape a resolved IRI must match
7
+ * before it can be interpolated into a generated `<iri>` query token.
8
+ */
9
+ import { cliRecovery, PragmaError } from "../error/index.js";
10
+ /** Characters not allowed inside a SPARQL `<IRI>`. */
11
+ const UNSAFE_IRI_PATTERN = /[<>"{}|\\^`\s]/;
12
+ /** A general absolute IRI: `scheme://…` (http, https, …) or a `urn:` opaque IRI. */
13
+ const ABSOLUTE_IRI_PATTERN = /^(?:[A-Za-z][A-Za-z0-9+.-]*:\/\/|urn:)\S/i;
14
+ /** The embeddable-IRI shape: an authority-bearing `scheme://…` with no IRI-breakers. */
15
+ const EMBEDDABLE_IRI_PATTERN = /^[A-Za-z][\w+.-]*:\/\/[^<>"\s]+$/;
16
+ /** Whether a resolved IRI is safe to embed as a `<iri>` query token. */
17
+ export function isEmbeddableIri(value) {
18
+ return EMBEDDABLE_IRI_PATTERN.test(value);
19
+ }
20
+ /**
21
+ * Resolve a prefixed or absolute URI to its full form.
22
+ *
23
+ * A value that fails to resolve and carries a `%` is retried once decoded, so a
24
+ * client that percent-encodes the URI it addresses (`ds%3AComponent`) is served
25
+ * rather than rejected. Every diagnostic names the value the CALLER supplied —
26
+ * the safety check runs on the expansion, but nobody typed the expansion.
27
+ *
28
+ * @param uri - A full or prefixed URI string.
29
+ * @param prefixes - The store's merged prefix→namespace map.
30
+ * @returns The fully expanded URI.
31
+ * @throws PragmaError INVALID_INPUT when the format is invalid or the prefix is unknown.
32
+ */
33
+ export function resolveUri(uri, prefixes) {
34
+ const direct = tryResolveUri(uri, prefixes);
35
+ if (typeof direct === "string")
36
+ return direct;
37
+ const decoded = uri.includes("%") ? decodeOnce(uri) : undefined;
38
+ if (decoded !== undefined && decoded !== uri) {
39
+ const viaDecoded = tryResolveUri(decoded, prefixes);
40
+ if (typeof viaDecoded === "string")
41
+ return viaDecoded;
42
+ }
43
+ // Report the input as given, never the decoded or expanded form.
44
+ throw direct;
45
+ }
46
+ /**
47
+ * One resolution attempt: the expanded IRI, or the error describing `uri`.
48
+ *
49
+ * @param uri - The candidate URI, as the caller wrote it.
50
+ * @param prefixes - The store's merged prefix→namespace map.
51
+ * @returns The expanded IRI on success, else the PragmaError to report.
52
+ */
53
+ function tryResolveUri(uri, prefixes) {
54
+ const colonIdx = uri.indexOf(":");
55
+ if (colonIdx === -1) {
56
+ return PragmaError.invalidInput("uri", uri, {
57
+ recovery: {
58
+ message: 'Use a prefixed URI (e.g. "prefix:name") or a full URI.',
59
+ },
60
+ });
61
+ }
62
+ const prefix = uri.slice(0, colonIdx);
63
+ const namespace = prefixes[prefix];
64
+ if (namespace !== undefined) {
65
+ const resolved = `${namespace}${uri.slice(colonIdx + 1)}`;
66
+ return unsafeIriError(uri, resolved) ?? resolved;
67
+ }
68
+ if (ABSOLUTE_IRI_PATTERN.test(uri)) {
69
+ return unsafeIriError(uri, uri) ?? uri;
70
+ }
71
+ return PragmaError.invalidInput("prefix", prefix, {
72
+ validOptions: Object.keys(prefixes),
73
+ recovery: cliRecovery("ontology list", "List known ontology prefixes.", {
74
+ tool: "ontology_list",
75
+ }),
76
+ });
77
+ }
78
+ /**
79
+ * Guard the EXPANSION, name the INPUT: the check is on the IRI that would reach
80
+ * a query, the message is about the value the caller actually typed.
81
+ *
82
+ * @param input - The URI as the caller wrote it.
83
+ * @param resolved - The expanded IRI the check runs against.
84
+ * @returns The error when `resolved` carries IRI-breaking characters, else undefined.
85
+ */
86
+ function unsafeIriError(input, resolved) {
87
+ if (!UNSAFE_IRI_PATTERN.test(resolved))
88
+ return undefined;
89
+ return PragmaError.invalidInput("uri", input, {
90
+ recovery: { message: "URI contains characters not allowed in IRIs." },
91
+ });
92
+ }
93
+ /**
94
+ * Percent-decode a value, tolerating malformed encodings.
95
+ *
96
+ * `decodeURIComponent` throws `URIError` on a stray `%` — a decode ATTEMPT must
97
+ * never turn a reportable input error into a crash.
98
+ *
99
+ * @param value - The possibly percent-encoded value.
100
+ * @returns The decoded value, or undefined when it cannot be decoded.
101
+ */
102
+ function decodeOnce(value) {
103
+ try {
104
+ return decodeURIComponent(value);
105
+ }
106
+ catch {
107
+ return undefined;
108
+ }
109
+ }
110
+ //# sourceMappingURL=iri.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iri.js","sourceRoot":"","sources":["../../../../src/kernel/packs/iri.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Project a pack definition onto PR1 render option bags and the three-mode
3
+ * {@link Formatters} each compiled verb carries.
4
+ *
5
+ * List rows, looked-up entities, and sample exemplars all render through the
6
+ * shared generic renderers with a baked prefix map (display compaction only —
7
+ * the fetch layer already resolved full IRIs). The formatters are pure and
8
+ * zod-free, built once at compile time; the run body decides WHAT data reaches
9
+ * them (disclosure gates the fetch), never HOW it is laid out.
10
+ */
11
+ import { BIN_NAME, RECOVERY_CLI_PREFIX } from "../../constants.js";
12
+ import { compactUri } from "../render/index.js";
13
+ import { renderListEmptyNotice, renderListLlm, renderListPlain, renderLookupLlm, renderLookupPlain, } from "../render/renderers.js";
14
+ /**
15
+ * The default empty-state hint when a pack authors no `emptyRecovery`: an empty
16
+ * list on a BUILT store (a cold store would have failed with STORE_UNAVAILABLE
17
+ * first) means "nothing matched", so point at both possible fixes.
18
+ */
19
+ const DEFAULT_EMPTY_HINT = `Build the store with \`${BIN_NAME} sources update\`, or broaden the filter or channel.`;
20
+ /** Build the list formatters for a list-shaped verb (list or an extra verb). */
21
+ export function listFormatters(shape, meta) {
22
+ const columns = shape.columns.map((column) => ({
23
+ key: column.field,
24
+ label: column.label ?? column.field,
25
+ }));
26
+ // Zero results is a calm success, not an error (see runBodies.makeListRun):
27
+ // render a non-blank message, exit 0, JSON stays []. A pack's authored
28
+ // `emptyRecovery` becomes the hint; otherwise the generic build/broaden hint.
29
+ const emptyHint = shape.emptyRecovery
30
+ ? `${shape.emptyRecovery.message}${shape.emptyRecovery.cli
31
+ ? ` Run \`${RECOVERY_CLI_PREFIX}${shape.emptyRecovery.cli}\`.`
32
+ : ""}`
33
+ : DEFAULT_EMPTY_HINT;
34
+ const options = {
35
+ heading: meta.heading,
36
+ columns,
37
+ prefixes: meta.prefixes,
38
+ emptyMessage: `No ${meta.noun} entries found.`,
39
+ emptyHint,
40
+ };
41
+ return {
42
+ plain: (rows, context) => renderListPlain(rows, options, context),
43
+ llm: (rows) => renderListLlm(rows, options),
44
+ json: (rows) => JSON.stringify(rows, null, 2),
45
+ // Zero rows: the dispatcher routes this to stderr (exit 0) so the plain
46
+ // stdout stream stays pure data; llm/json keep their own empty shapes.
47
+ emptyNotice: (rows) => rows.length === 0 ? renderListEmptyNotice(options) : undefined,
48
+ };
49
+ }
50
+ /** Build the shared per-entity render options for a lookup (reused by sample). */
51
+ export function lookupOptions(lookup, prefixes) {
52
+ const fields = (lookup.fields ?? []).map((field) => ({
53
+ label: field.label ?? field.name,
54
+ value: (entity) => entity[field.name],
55
+ }));
56
+ const flatSections = (lookup.sections ?? []).map((section) => ({
57
+ key: section.name,
58
+ heading: section.label ?? section.name,
59
+ kind: section.kind ?? "field",
60
+ }));
61
+ const expandSections = (lookup.expand ?? []).map((expand) => ({
62
+ key: expand.name,
63
+ heading: expand.heading ?? expand.name,
64
+ kind: expand.kind ?? "list",
65
+ ...(expand.showWhenEmpty ? { showWhenEmpty: true } : {}),
66
+ }));
67
+ return {
68
+ // An entity reached by IRI need not carry a `by` value, so the IRI is a
69
+ // real title, not a fallback nobody hits — and it is titled in the form the
70
+ // user addressed it with, not the expanded one they never typed.
71
+ title: (entity) => scalar(entity.name) ?? compactScalar(entity.uri, prefixes) ?? "(unnamed)",
72
+ fields,
73
+ sections: [...flatSections, ...expandSections],
74
+ prefixes,
75
+ };
76
+ }
77
+ /** Build the lookup formatters (renders every resolved entity, then any errors). */
78
+ export function lookupFormatters(lookup, prefixes) {
79
+ const options = lookupOptions(lookup, prefixes);
80
+ return {
81
+ plain: (output) => renderOutput(output, (entity) => renderLookupPlain(entity, options)),
82
+ llm: (output) => renderOutput(output, (entity) => renderLookupLlm(entity, options), "llm"),
83
+ json: (output) => JSON.stringify(output, null, 2),
84
+ };
85
+ }
86
+ /** Build the sample formatters (renders each exemplar, then the follow-ups). */
87
+ export function sampleFormatters(lookup, noun, prefixes) {
88
+ const options = lookupOptions(lookup, prefixes);
89
+ return {
90
+ plain: (data) => {
91
+ const body = data.samples
92
+ .map((entity) => renderLookupPlain(entity, options))
93
+ .join("\n\n");
94
+ const steps = data.nextSteps.map((step) => ` - ${step}`).join("\n");
95
+ return `${noun} sample (${data.samples.length} of ${data.totalCount})\n\n${body}${steps ? `\n\nNext steps:\n${steps}` : ""}`.trimEnd();
96
+ },
97
+ llm: (data) => {
98
+ const body = data.samples
99
+ .map((entity) => renderLookupLlm(entity, options))
100
+ .join("\n\n");
101
+ const steps = data.nextSteps.map((step) => `- ${step}`).join("\n");
102
+ return `## ${capitalize(noun)} sample (${data.samples.length} of ${data.totalCount})\n\n${body}${steps ? `\n\n### Next steps\n${steps}` : ""}`.trimEnd();
103
+ },
104
+ json: (data) => JSON.stringify(data, null, 2),
105
+ };
106
+ }
107
+ /** Render each result entity, appending a compact note for any error entries. */
108
+ function renderOutput(output, render, mode = "plain") {
109
+ const bodies = output.results.map(render);
110
+ if (output.errors.length > 0) {
111
+ const bullet = mode === "llm" ? "- " : " ";
112
+ const lines = output.errors.map((error) => `${bullet}${error.query}: ${error.message}`);
113
+ bodies.push(`${mode === "llm" ? "### Not found" : "Not found:"}\n${lines.join("\n")}`);
114
+ }
115
+ return bodies.join("\n\n").trimEnd();
116
+ }
117
+ /** Return a value only when it is a scalar string (expands hold arrays). */
118
+ function scalar(value) {
119
+ return typeof value === "string" ? value : undefined;
120
+ }
121
+ /** A scalar URI in its prefixed display form, or undefined when it is neither. */
122
+ function compactScalar(value, prefixes) {
123
+ const uri = scalar(value);
124
+ return uri === undefined ? undefined : compactUri(uri, prefixes);
125
+ }
126
+ function capitalize(value) {
127
+ return value.charAt(0).toUpperCase() + value.slice(1);
128
+ }
129
+ //# sourceMappingURL=renderPack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderPack.js","sourceRoot":"","sources":["../../../../src/kernel/packs/renderPack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAQnE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AA0BhC;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,0BAA0B,QAAQ,sDAAsD,CAAC;AAEpH,gFAAgF;AAChF,MAAM,UAAU,cAAc,CAC5B,KAAe,EACf,IAAgB;IAEhB,MAAM,OAAO,GAAyB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACnE,GAAG,EAAE,MAAM,CAAC,KAAK;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK;KACpC,CAAC,CAAC,CAAC;IACJ,4EAA4E;IAC5E,uEAAuE;IACvE,8EAA8E;IAC9E,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa;QACnC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,GAC5B,KAAK,CAAC,aAAa,CAAC,GAAG;YACrB,CAAC,CAAC,UAAU,mBAAmB,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,KAAK;YAC9D,CAAC,CAAC,EACN,EAAE;QACJ,CAAC,CAAC,kBAAkB,CAAC;IACvB,MAAM,OAAO,GAA+B;QAC1C,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO;QACP,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,YAAY,EAAE,MAAM,IAAI,CAAC,IAAI,iBAAiB;QAC9C,SAAS;KACV,CAAC;IACF,OAAO;QACL,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC;QACjE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;QAC3C,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,wEAAwE;QACxE,uEAAuE;QACvE,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CACpB,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;KACjE,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,aAAa,CAC3B,MAAkB,EAClB,QAA0C;IAE1C,MAAM,MAAM,GAA8B,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CACjE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACV,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI;QAChC,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;KACtC,CAAC,CACH,CAAC;IACF,MAAM,YAAY,GAA6B,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CACxE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACZ,GAAG,EAAE,OAAO,CAAC,IAAI;QACjB,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI;QACtC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO;KAC9B,CAAC,CACH,CAAC;IACF,MAAM,cAAc,GAA6B,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CACxE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACX,GAAG,EAAE,MAAM,CAAC,IAAI;QAChB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI;QACtC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM;QAC3B,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzD,CAAC,CACH,CAAC;IACF,OAAO;QACL,wEAAwE;QACxE,4EAA4E;QAC5E,iEAAiE;QACjE,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAChB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,WAAW;QAC3E,MAAM;QACN,QAAQ,EAAE,CAAC,GAAG,YAAY,EAAE,GAAG,cAAc,CAAC;QAC9C,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,gBAAgB,CAC9B,MAAkB,EAClB,QAA0C;IAE1C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChD,OAAO;QACL,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAChB,YAAY,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACtE,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CACd,YAAY,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC;QAC3E,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,gBAAgB,CAC9B,MAAkB,EAClB,IAAY,EACZ,QAA0C;IAE1C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChD,OAAO;QACL,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;YACd,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;iBACtB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;iBACnD,IAAI,CAAC,MAAM,CAAC,CAAC;YAChB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrE,OAAO,GAAG,IAAI,YAAY,IAAI,CAAC,OAAO,CAAC,MAAM,OAAO,IAAI,CAAC,UAAU,QAAQ,IAAI,GAC7E,KAAK,CAAC,CAAC,CAAC,oBAAoB,KAAK,EAAE,CAAC,CAAC,CAAC,EACxC,EAAE,CAAC,OAAO,EAAE,CAAC;QACf,CAAC;QACD,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;YACZ,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;iBACtB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;iBACjD,IAAI,CAAC,MAAM,CAAC,CAAC;YAChB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnE,OAAO,MAAM,UAAU,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,MAAM,OAAO,IAAI,CAAC,UAAU,QAAQ,IAAI,GAC5F,KAAK,CAAC,CAAC,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAC,CAAC,EAC3C,EAAE,CAAC,OAAO,EAAE,CAAC;QACf,CAAC;QACD,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,SAAS,YAAY,CACnB,MAAoB,EACpB,MAAsC,EACtC,OAAwB,OAAO;IAE/B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAC7B,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,EAAE,CACvD,CAAC;QACF,MAAM,CAAC,IAAI,CACT,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1E,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;AACvC,CAAC;AAED,4EAA4E;AAC5E,SAAS,MAAM,CACb,KAAmD;IAEnD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,kFAAkF;AAClF,SAAS,aAAa,CACpB,KAAmD,EACnD,QAA0C;IAE1C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * Look up one or more pack entities by name, prefixed name, absolute IRI, or
3
+ * glob, via the fetch strategy the pack declares.
4
+ *
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
+ * GraphQL document (`graphql`). One poisoned query never discards the batch —
9
+ * per-query failures are collected as structured error entries.
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
+ *
19
+ * Reached only behind a dynamic import from the lookup run body, so its imports
20
+ * (including the GraphQL path) stay off the storeless fast path.
21
+ */
22
+ import { cliRecovery, PragmaError } from "../error/index.js";
23
+ import { suggestNames } from "../project/cli/suggestNames.js";
24
+ import { compactUri } from "../render/index.js";
25
+ import { activeExpands } from "./disclosure.js";
26
+ import { expandGlob, isGlobPattern } from "./glob.js";
27
+ import { fetchGraphqlLookup } from "./graphql/fetchGraphqlLookup.js";
28
+ import { isEmbeddableIri, resolveUri } from "./iri.js";
29
+ import { buildExpandQuery, buildIriResolveQuery, buildLookupByIriQuery, buildLookupIrisQuery, buildLookupNamesQuery, buildLookupQuery, buildNameResolveQuery, } from "./sparql/buildLookupQuery.js";
30
+ import { runSelect } from "./sparql/runSelect.js";
31
+ /**
32
+ * Resolve a batch of lookup queries, collecting per-query failures.
33
+ *
34
+ * @throws PragmaError INVALID_INPUT when the batch is empty.
35
+ */
36
+ export async function resolveLookup(rt, lookup, noun, queries, source, prefixes, level) {
37
+ if (queries.length === 0) {
38
+ throw PragmaError.invalidInput("names", "(empty)", {
39
+ recovery: cliRecovery(`${noun} list`, `List available ${noun} entries.`, {
40
+ tool: `${noun}_list`,
41
+ }),
42
+ });
43
+ }
44
+ const expanded = await expandQueries(rt, lookup, noun, source, queries, prefixes);
45
+ const results = [];
46
+ const errors = [...expanded.globErrors];
47
+ const settled = await Promise.allSettled(expanded.names.map((query) => lookupOne(rt, lookup, noun, query, source, prefixes, level)));
48
+ for (const [index, outcome] of settled.entries()) {
49
+ const query = expanded.names[index];
50
+ if (query === undefined)
51
+ continue;
52
+ if (outcome.status === "fulfilled") {
53
+ results.push(outcome.value);
54
+ continue;
55
+ }
56
+ const error = outcome.reason;
57
+ if (error instanceof PragmaError) {
58
+ errors.push({
59
+ query,
60
+ code: error.code,
61
+ message: error.message,
62
+ ...(error.suggestions.length > 0
63
+ ? { suggestions: error.suggestions }
64
+ : {}),
65
+ });
66
+ }
67
+ else {
68
+ errors.push({
69
+ query,
70
+ code: "INTERNAL_ERROR",
71
+ message: `Internal error: ${error instanceof Error ? error.message : String(error)}`,
72
+ });
73
+ }
74
+ }
75
+ return { results, errors };
76
+ }
77
+ /**
78
+ * Expand glob queries against the population their own shape addresses;
79
+ * literals pass through.
80
+ *
81
+ * A name glob expands over the `by` values, an IRI glob over the entity IRIs —
82
+ * the same split {@link buildResolveQuery} makes, because a glob is just a
83
+ * lookup argument with a `*` in it. Expanding an IRI pattern over names was why
84
+ * `ds:global.component.but*` matched nothing on any pack while shell completion
85
+ * offered nothing BUT those IRIs. Each population is fetched at most once, and
86
+ * only when a glob of that shape is actually present.
87
+ */
88
+ async function expandQueries(rt, lookup, noun, source, queries, prefixes) {
89
+ if (!queries.some(isGlobPattern))
90
+ return { names: [...queries], globErrors: [] };
91
+ const globs = queries.filter(isGlobPattern);
92
+ const byIri = globs.some(looksLikeIri)
93
+ ? await listEntityIriSpellings(rt, lookup, source, prefixes)
94
+ : new Map();
95
+ const byName = globs.some((glob) => !looksLikeIri(glob))
96
+ ? await listEntityNames(rt, lookup, source)
97
+ : [];
98
+ const names = [];
99
+ const globErrors = [];
100
+ for (const query of queries) {
101
+ if (!isGlobPattern(query)) {
102
+ names.push(query);
103
+ continue;
104
+ }
105
+ // An IRI glob expands over every spelling, then collapses to the entity:
106
+ // matching `ds:button` and its absolute twin must not list it twice.
107
+ const matches = looksLikeIri(query)
108
+ ? [
109
+ ...new Set(expandGlob(query, [...byIri.keys()]).map((spelling) => byIri.get(spelling) ?? spelling)),
110
+ ]
111
+ : expandGlob(query, byName);
112
+ if (matches.length === 0) {
113
+ globErrors.push({
114
+ query,
115
+ code: "EMPTY_RESULTS",
116
+ message: `No ${noun} entries matching "${query}".`,
117
+ });
118
+ }
119
+ else {
120
+ names.push(...matches);
121
+ }
122
+ }
123
+ return { names, globErrors };
124
+ }
125
+ /** Look up one entity, dispatching to the pack's declared fetch source. */
126
+ async function lookupOne(rt, lookup, noun, query, source, prefixes, level) {
127
+ const graphqlSourced = lookup.source === "graphql";
128
+ const rows = await runSelect(rt, buildResolveQuery(lookup, query, prefixes, level), source);
129
+ const base = rows.at(0);
130
+ if (!base?.uri) {
131
+ const candidates = await listEntityNames(rt, lookup, source);
132
+ throw PragmaError.notFound(noun, query, {
133
+ suggestions: suggestNames(query, candidates),
134
+ recovery: cliRecovery(`${noun} list`, `List available ${noun} entries.`, {
135
+ tool: `${noun}_list`,
136
+ }),
137
+ });
138
+ }
139
+ if (graphqlSourced) {
140
+ return fetchGraphqlLookup(rt, lookup, base.uri, base.name ?? query,
141
+ // The GraphQL lane's only use of the source is CONFIG_ERROR attribution,
142
+ // which is right for any origin — so it takes the label, not provenance.
143
+ source.label, prefixes, level);
144
+ }
145
+ const entity = { ...base };
146
+ for (const expand of activeExpands(lookup, level)) {
147
+ entity[expand.name] = (await runSelect(rt, buildExpandQuery(expand, base.uri), source));
148
+ }
149
+ return entity;
150
+ }
151
+ /**
152
+ * Build the resolve SELECT for one lookup argument: shape first, source second.
153
+ *
154
+ * The four cells of that 2×2 are the whole dispatch. A graphql-sourced pack
155
+ * resolves to an IRI and fetches everything else through its document, so both
156
+ * of its queries are the minimal `?uri ?name` pair; a sparql-sourced pack reads
157
+ * its fields in the same SELECT, so both of its queries carry the level-gated
158
+ * projection.
159
+ */
160
+ function buildResolveQuery(lookup, query, prefixes, level) {
161
+ const graphqlSourced = lookup.source === "graphql";
162
+ if (!looksLikeIri(query)) {
163
+ return graphqlSourced
164
+ ? buildNameResolveQuery(lookup, query)
165
+ : buildLookupQuery(lookup, query, level);
166
+ }
167
+ const resolved = resolveUri(query, prefixes);
168
+ if (!isEmbeddableIri(resolved)) {
169
+ throw PragmaError.invalidInput("name", query, {
170
+ recovery: {
171
+ message: "Use an absolute IRI (https://…), a prefixed name (prefix:local), or a plain entity name.",
172
+ },
173
+ });
174
+ }
175
+ return graphqlSourced
176
+ ? buildIriResolveQuery(lookup, resolved)
177
+ : buildLookupByIriQuery(lookup, resolved, level);
178
+ }
179
+ /** Whether a lookup query addresses an entity by IRI or prefixed name. */
180
+ function looksLikeIri(query) {
181
+ return (query.startsWith("http://") ||
182
+ query.startsWith("https://") ||
183
+ // Neither an IRI nor a SPARQL prefixed name may contain whitespace, so a
184
+ // colon in a spaced string is part of a plain entity name — e.g. the
185
+ // concept "Foundations: Grid" — not a prefix separator.
186
+ (query.includes(":") && !/\s/.test(query)));
187
+ }
188
+ /**
189
+ * Every SPELLING an IRI-shaped glob may be written against, mapped to the one
190
+ * entity it addresses.
191
+ *
192
+ * An entity under a registered prefix has two legal spellings — the compact
193
+ * `ds:button` shell completion offers, and the absolute
194
+ * `https://ds.canonical.com/button` a user pastes from a browser. Both resolve
195
+ * to the same entity in a literal lookup, so a glob must expand over both;
196
+ * offering only the compact form made `https://ds.canonical.com/but*` return
197
+ * EMPTY_RESULTS while the literal IRI it generalises succeeded.
198
+ *
199
+ * The map is spelling → CANONICAL IRI precisely so a pattern that matches an
200
+ * entity under both spellings still yields it once. Matching over a flat list
201
+ * of both would render the entity twice, which is why the previous shape
202
+ * offered only one.
203
+ */
204
+ async function listEntityIriSpellings(rt, lookup, source, prefixes) {
205
+ const rows = await runSelect(rt, buildLookupIrisQuery(lookup), source);
206
+ const spellings = new Map();
207
+ for (const row of rows) {
208
+ const uri = row.uri ?? "";
209
+ if (uri === "")
210
+ continue;
211
+ spellings.set(uri, uri);
212
+ const compact = compactUri(uri, prefixes);
213
+ if (compact !== uri)
214
+ spellings.set(compact, uri);
215
+ }
216
+ return spellings;
217
+ }
218
+ /** List every entity name the lookup can address (miss suggestions + sample/glob). */
219
+ export async function listEntityNames(rt, lookup, source) {
220
+ const rows = await runSelect(rt, buildLookupNamesQuery(lookup), source);
221
+ return rows.map((row) => row.name ?? "").filter((name) => name !== "");
222
+ }
223
+ //# sourceMappingURL=resolveEntity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveEntity.js","sourceRoot":"","sources":["../../../../src/kernel/packs/resolveEntity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * The shared run bodies a compiled pack verb closes over.
3
+ *
4
+ * Each factory returns a `VerbSpec.run` closure. Reads are plain async: the list
5
+ * body runs the pack's SELECT then applies post-query filters/search; the lookup
6
+ * body resolves names → IRIs and fetches per the declared source, gated by the
7
+ * resolved disclosure level; the sample body draws N random entities at the
8
+ * highest level. All store access is through the runtime facade (lazy), so these
9
+ * factories carry no heavy static import.
10
+ */
11
+ import { cliRecovery, PragmaError } from "../error/index.js";
12
+ import { resolvePackDetail } from "./disclosure.js";
13
+ import { listEntityNames, resolveLookup, } from "./resolveEntity.js";
14
+ import { parseSampleCount, pickRandom } from "./sample.js";
15
+ import { applyPackFilters } from "./sparql/applyFilters.js";
16
+ import { applyPackSearch } from "./sparql/applySearch.js";
17
+ import { runSelect } from "./sparql/runSelect.js";
18
+ /** The highest canonical level — sample fetches everything for shape discovery. */
19
+ const HIGHEST_LEVEL = "detailed";
20
+ /**
21
+ * Build the run body for a list-shaped verb (`list` or an extra verb).
22
+ *
23
+ * Zero rows is a plain empty list — a SUCCESS, not an error. It returns `[]`
24
+ * (JSON stays `[]`, exit 0); the formatter turns the emptiness into a non-blank
25
+ * message (a pack's `emptyRecovery` becomes that message's hint). Routing zero
26
+ * results through EMPTY_RESULTS would map to exit 1 and break the uniform
27
+ * `ok:true` list contract, so the run body never throws on emptiness.
28
+ */
29
+ export function makeListRun(shape, meta) {
30
+ return async (params, rt) => applyPackSearch(applyPackFilters(await runSelect(rt, shape.query, meta.source), shape.filters, params), shape.search, params);
31
+ }
32
+ /** Build the run body for a lookup verb (variadic names → resolved entities). */
33
+ export function makeLookupRun(lookup, noun, source, prefixes) {
34
+ return async (params, rt) => {
35
+ const names = readNames(params);
36
+ const level = await resolvePackDetail(rt, lookup.disclosure);
37
+ const output = await resolveLookup(rt, lookup, noun, names, source, prefixes, level);
38
+ // A total miss (single or all-miss) exits non-zero; a partial batch renders
39
+ // the results it found and notes the misses.
40
+ if (output.results.length === 0 && output.errors.length > 0) {
41
+ const first = output.errors[0];
42
+ if (first) {
43
+ throw new PragmaError({
44
+ code: first.code,
45
+ message: first.message,
46
+ suggestions: first.suggestions ? [...first.suggestions] : undefined,
47
+ recovery: cliRecovery(`${noun} list`, `List available ${noun} entries.`, { tool: `${noun}_list` }),
48
+ });
49
+ }
50
+ }
51
+ return output;
52
+ };
53
+ }
54
+ /** Build the run body for a sample verb (N random entities at the highest level). */
55
+ export function makeSampleRun(lookup, noun, source, prefixes, defaultCount) {
56
+ return async (params, rt) => {
57
+ const count = parseSampleCount(params.count ?? defaultCount);
58
+ const names = await listEntityNames(rt, lookup, source);
59
+ // An empty population is a clean EMPTY_RESULTS (nothing to sample), not the
60
+ // "(empty)" INVALID_INPUT resolveLookup would raise on a zero-length batch.
61
+ if (names.length === 0) {
62
+ throw PragmaError.emptyResults(noun, {
63
+ message: `No ${noun} entries to sample.`,
64
+ recovery: cliRecovery(`${noun} list`, `List available ${noun} entries.`, { tool: `${noun}_list` }),
65
+ });
66
+ }
67
+ const selected = pickRandom(names, count);
68
+ const output = await resolveLookup(rt, lookup, noun, selected, source, prefixes, HIGHEST_LEVEL);
69
+ return {
70
+ samples: output.results,
71
+ totalCount: names.length,
72
+ nextSteps: [
73
+ `These are ${output.results.length} of ${names.length} total ${noun} entries.`,
74
+ `Use ${noun}_lookup to inspect specific entries by name.`,
75
+ `Use ${noun}_list to browse all entries.`,
76
+ ],
77
+ };
78
+ };
79
+ }
80
+ /** Read the variadic `name` positional as a string array. */
81
+ function readNames(params) {
82
+ const raw = params.name;
83
+ if (Array.isArray(raw))
84
+ return raw.filter((n) => typeof n === "string");
85
+ return typeof raw === "string" ? [raw] : [];
86
+ }
87
+ //# sourceMappingURL=runBodies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runBodies.js","sourceRoot":"","sources":["../../../../src/kernel/packs/runBodies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Sample-count parsing and uniform random selection for the `sample` verb.
3
+ *
4
+ * Ported from the v1 shared helpers: a missing count falls back to the default,
5
+ * a non-integer is rejected as invalid input, and a valid integer is clamped to
6
+ * the supported 1–5 range. Selection is a Fisher-Yates partial shuffle.
7
+ */
8
+ import { PragmaError } from "../error/index.js";
9
+ /** Smallest number of samples the `sample` verb returns. */
10
+ export const MIN_SAMPLE_COUNT = 1;
11
+ /** Largest number of samples the `sample` verb returns. */
12
+ export const MAX_SAMPLE_COUNT = 5;
13
+ /** Number of samples returned when the count is omitted. */
14
+ export const DEFAULT_SAMPLE_COUNT = 2;
15
+ /** The default sample count a lookup declares, or the built-in default. */
16
+ export function sampleDefaultCount(lookup) {
17
+ const sample = lookup.sample;
18
+ if (sample && sample !== true && typeof sample.count === "number") {
19
+ return sample.count;
20
+ }
21
+ return DEFAULT_SAMPLE_COUNT;
22
+ }
23
+ /**
24
+ * Resolve the raw `count` arg into a clamped sample count.
25
+ *
26
+ * @throws PragmaError INVALID_INPUT when `raw` is present but not an integer.
27
+ */
28
+ export function parseSampleCount(raw) {
29
+ if (raw === undefined || raw === null || raw === "") {
30
+ return DEFAULT_SAMPLE_COUNT;
31
+ }
32
+ const text = String(raw).trim();
33
+ if (!/^-?\d+$/.test(text)) {
34
+ throw PragmaError.invalidInput("count", String(raw), {
35
+ recovery: {
36
+ message: `Provide an integer between ${MIN_SAMPLE_COUNT} and ${MAX_SAMPLE_COUNT}.`,
37
+ },
38
+ });
39
+ }
40
+ return Math.max(MIN_SAMPLE_COUNT, Math.min(MAX_SAMPLE_COUNT, Number(text)));
41
+ }
42
+ /** Pick `count` random items without replacement (Fisher-Yates partial shuffle). */
43
+ export function pickRandom(arr, count) {
44
+ const n = Math.min(count, arr.length);
45
+ if (n === 0)
46
+ return [];
47
+ const copy = [...arr];
48
+ for (let i = 0; i < n; i++) {
49
+ const j = i + Math.floor(Math.random() * (copy.length - i));
50
+ const tmp = copy[i];
51
+ copy[i] = copy[j];
52
+ copy[j] = tmp;
53
+ }
54
+ return copy.slice(0, n);
55
+ }
56
+ //# sourceMappingURL=sample.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sample.js","sourceRoot":"","sources":["../../../../src/kernel/packs/sample.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,4DAA4D;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,2DAA2D;AAC3D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAEtC,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,MAAkB;IACnD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,IAAI,MAAM,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAClE,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QACpD,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE;YACnD,QAAQ,EAAE;gBACR,OAAO,EAAE,8BAA8B,gBAAgB,QAAQ,gBAAgB,GAAG;aACnF;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,UAAU,CAAI,GAAiB,EAAE,KAAa;IAC5D,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAM,CAAC;QACzB,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAM,CAAC;QACvB,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1B,CAAC"}