@canonical/pragma-cli 0.38.0 → 0.42.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 (365) hide show
  1. package/README.md +3 -3
  2. package/dist/package.json +16 -16
  3. package/dist/pragma.conf.js +273 -176
  4. package/dist/pragma.conf.js.map +1 -1
  5. package/dist/src/capabilities/capabilities/capabilities.verb.js +2 -0
  6. package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -1
  7. package/dist/src/capabilities/capabilities/catalog.js +47 -51
  8. package/dist/src/capabilities/capabilities/catalog.js.map +1 -1
  9. package/dist/src/capabilities/capabilities/index.js +2 -0
  10. package/dist/src/capabilities/capabilities/index.js.map +1 -1
  11. package/dist/src/capabilities/capabilities/types.js +5 -5
  12. package/dist/src/capabilities/colophon/colophon.render.js +7 -4
  13. package/dist/src/capabilities/colophon/colophon.render.js.map +1 -1
  14. package/dist/src/capabilities/colophon/colophon.verb.js +1 -0
  15. package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -1
  16. package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -1
  17. package/dist/src/capabilities/config/get.verb.js +2 -0
  18. package/dist/src/capabilities/config/get.verb.js.map +1 -1
  19. package/dist/src/capabilities/config/runField.js +2 -2
  20. package/dist/src/capabilities/config/runField.js.map +1 -1
  21. package/dist/src/capabilities/config/set.verb.js +2 -0
  22. package/dist/src/capabilities/config/set.verb.js.map +1 -1
  23. package/dist/src/capabilities/config/show.render.js.map +1 -1
  24. package/dist/src/capabilities/config/show.verb.js +1 -0
  25. package/dist/src/capabilities/config/show.verb.js.map +1 -1
  26. package/dist/src/capabilities/config/unset.verb.js +2 -0
  27. package/dist/src/capabilities/config/unset.verb.js.map +1 -1
  28. package/dist/src/capabilities/create/constants.js +8 -5
  29. package/dist/src/capabilities/create/constants.js.map +1 -1
  30. package/dist/src/capabilities/create/create.render.js.map +1 -1
  31. package/dist/src/capabilities/create/create.verb.js +36 -7
  32. package/dist/src/capabilities/create/create.verb.js.map +1 -1
  33. package/dist/src/capabilities/create/createSurface.generated.js +22 -0
  34. package/dist/src/capabilities/create/createSurface.generated.js.map +1 -1
  35. package/dist/src/capabilities/create/index.js +1 -1
  36. package/dist/src/capabilities/create/pickGenerator.js +1 -0
  37. package/dist/src/capabilities/create/pickGenerator.js.map +1 -1
  38. package/dist/src/capabilities/distribution.js +3 -1
  39. package/dist/src/capabilities/distribution.js.map +1 -1
  40. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +10 -2
  41. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -1
  42. package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -1
  43. package/dist/src/capabilities/doctor/doctor.verb.js +2 -0
  44. package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -1
  45. package/dist/src/capabilities/graph/connect.verb.js +2 -0
  46. package/dist/src/capabilities/graph/connect.verb.js.map +1 -1
  47. package/dist/src/capabilities/graph/inspect.render.js +7 -1
  48. package/dist/src/capabilities/graph/inspect.render.js.map +1 -1
  49. package/dist/src/capabilities/graph/inspect.verb.js +2 -0
  50. package/dist/src/capabilities/graph/inspect.verb.js.map +1 -1
  51. package/dist/src/capabilities/graph/query.render.js +37 -5
  52. package/dist/src/capabilities/graph/query.render.js.map +1 -1
  53. package/dist/src/capabilities/graph/query.verb.js +2 -0
  54. package/dist/src/capabilities/graph/query.verb.js.map +1 -1
  55. package/dist/src/capabilities/graph/queryText.js +28 -0
  56. package/dist/src/capabilities/graph/queryText.js.map +1 -1
  57. package/dist/src/capabilities/graph/runConnect.js +3 -3
  58. package/dist/src/capabilities/graph/runConnect.js.map +1 -1
  59. package/dist/src/capabilities/graph/runQuery.js +8 -6
  60. package/dist/src/capabilities/graph/runQuery.js.map +1 -1
  61. package/dist/src/capabilities/info/info.verb.js +2 -0
  62. package/dist/src/capabilities/info/info.verb.js.map +1 -1
  63. package/dist/src/capabilities/meta/mcp.verb.js +1 -0
  64. package/dist/src/capabilities/meta/mcp.verb.js.map +1 -1
  65. package/dist/src/capabilities/ontology/verbs.js +7 -10
  66. package/dist/src/capabilities/ontology/verbs.js.map +1 -1
  67. package/dist/src/capabilities/prompt/verbs.js +5 -4
  68. package/dist/src/capabilities/prompt/verbs.js.map +1 -1
  69. package/dist/src/capabilities/resources/provider.js +6 -3
  70. package/dist/src/capabilities/resources/provider.js.map +1 -1
  71. package/dist/src/capabilities/setup/operations/writability.js.map +1 -1
  72. package/dist/src/capabilities/setup/plan.render.js.map +1 -1
  73. package/dist/src/capabilities/setup/setup.verb.js +13 -5
  74. package/dist/src/capabilities/setup/setup.verb.js.map +1 -1
  75. package/dist/src/capabilities/shared/calls.js +16 -0
  76. package/dist/src/capabilities/shared/calls.js.map +1 -0
  77. package/dist/src/capabilities/shared/packageManager.js.map +1 -1
  78. package/dist/src/capabilities/skill/discover.js.map +1 -1
  79. package/dist/src/capabilities/skill/render.js +7 -5
  80. package/dist/src/capabilities/skill/render.js.map +1 -1
  81. package/dist/src/capabilities/skill/verbs.js +5 -4
  82. package/dist/src/capabilities/skill/verbs.js.map +1 -1
  83. package/dist/src/capabilities/sources/collectStatus.js +6 -1
  84. package/dist/src/capabilities/sources/collectStatus.js.map +1 -1
  85. package/dist/src/capabilities/sources/index.js +4 -3
  86. package/dist/src/capabilities/sources/index.js.map +1 -1
  87. package/dist/src/capabilities/sources/reset.render.js +37 -0
  88. package/dist/src/capabilities/sources/reset.render.js.map +1 -0
  89. package/dist/src/capabilities/sources/reset.verb.js +51 -0
  90. package/dist/src/capabilities/sources/reset.verb.js.map +1 -0
  91. package/dist/src/capabilities/sources/runReset.js +59 -0
  92. package/dist/src/capabilities/sources/runReset.js.map +1 -0
  93. package/dist/src/capabilities/sources/runUpdate.js +7 -6
  94. package/dist/src/capabilities/sources/runUpdate.js.map +1 -1
  95. package/dist/src/capabilities/sources/status.render.js +24 -8
  96. package/dist/src/capabilities/sources/status.render.js.map +1 -1
  97. package/dist/src/capabilities/sources/status.verb.js +1 -0
  98. package/dist/src/capabilities/sources/status.verb.js.map +1 -1
  99. package/dist/src/capabilities/sources/update.verb.js +2 -0
  100. package/dist/src/capabilities/sources/update.verb.js.map +1 -1
  101. package/dist/src/capabilities/upgrade/upgrade.verb.js +1 -0
  102. package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -1
  103. package/dist/src/capabilities/version/version.verb.js +1 -0
  104. package/dist/src/capabilities/version/version.verb.js.map +1 -1
  105. package/dist/src/constants.js +4 -3
  106. package/dist/src/constants.js.map +1 -1
  107. package/dist/src/kernel/completion/complete.js.map +1 -1
  108. package/dist/src/kernel/completion/emitScripts.js.map +1 -1
  109. package/dist/src/kernel/completion/parse.js.map +1 -1
  110. package/dist/src/kernel/completion/rank.js.map +1 -1
  111. package/dist/src/kernel/completion/resolve.js.map +1 -1
  112. package/dist/src/kernel/config/readConfig.js.map +1 -1
  113. package/dist/src/kernel/error/PragmaError.js.map +1 -1
  114. package/dist/src/kernel/error/index.js +1 -1
  115. package/dist/src/kernel/error/index.js.map +1 -1
  116. package/dist/src/kernel/error/recovery.js +24 -42
  117. package/dist/src/kernel/error/recovery.js.map +1 -1
  118. package/dist/src/kernel/packs/collect.js +123 -9
  119. package/dist/src/kernel/packs/collect.js.map +1 -1
  120. package/dist/src/kernel/packs/compile.js +74 -15
  121. package/dist/src/kernel/packs/compile.js.map +1 -1
  122. package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +3 -3
  123. package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -1
  124. package/dist/src/kernel/packs/iri.js +2 -4
  125. package/dist/src/kernel/packs/iri.js.map +1 -1
  126. package/dist/src/kernel/packs/renderPack.js +90 -50
  127. package/dist/src/kernel/packs/renderPack.js.map +1 -1
  128. package/dist/src/kernel/packs/resolveEntity.js +202 -90
  129. package/dist/src/kernel/packs/resolveEntity.js.map +1 -1
  130. package/dist/src/kernel/packs/runBodies.js +89 -30
  131. package/dist/src/kernel/packs/runBodies.js.map +1 -1
  132. package/dist/src/kernel/packs/schema.js +66 -12
  133. package/dist/src/kernel/packs/schema.js.map +1 -1
  134. package/dist/src/kernel/packs/sparql/buildListQuery.js +80 -13
  135. package/dist/src/kernel/packs/sparql/buildListQuery.js.map +1 -1
  136. package/dist/src/kernel/packs/sparql/buildLookupQuery.js +41 -13
  137. package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -1
  138. package/dist/src/kernel/packs/sparql/filterValues.js +32 -23
  139. package/dist/src/kernel/packs/sparql/filterValues.js.map +1 -1
  140. package/dist/src/kernel/packs/sparql/runSelect.js +3 -5
  141. package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -1
  142. package/dist/src/kernel/packs/storyRules.js +31 -4
  143. package/dist/src/kernel/packs/storyRules.js.map +1 -1
  144. package/dist/src/kernel/packs/tierScope.js +3 -3
  145. package/dist/src/kernel/packs/tierScope.js.map +1 -1
  146. package/dist/src/kernel/packs/types.js +4 -0
  147. package/dist/src/kernel/packs/types.js.map +1 -1
  148. package/dist/src/kernel/project/cli/buildProgram.js +4 -0
  149. package/dist/src/kernel/project/cli/buildProgram.js.map +1 -1
  150. package/dist/src/kernel/project/cli/dispatch.js +32 -8
  151. package/dist/src/kernel/project/cli/dispatch.js.map +1 -1
  152. package/dist/src/kernel/project/cli/globalFlags.js.map +1 -1
  153. package/dist/src/kernel/project/cli/suggestNames.js +44 -1
  154. package/dist/src/kernel/project/cli/suggestNames.js.map +1 -1
  155. package/dist/src/kernel/project/cli/verbHelp.js +17 -18
  156. package/dist/src/kernel/project/cli/verbHelp.js.map +1 -1
  157. package/dist/src/kernel/project/mcp/buildServer.js +11 -4
  158. package/dist/src/kernel/project/mcp/buildServer.js.map +1 -1
  159. package/dist/src/kernel/project/mcp/envelope.js +3 -2
  160. package/dist/src/kernel/project/mcp/envelope.js.map +1 -1
  161. package/dist/src/kernel/project/mcp/instructions.js +101 -31
  162. package/dist/src/kernel/project/mcp/instructions.js.map +1 -1
  163. package/dist/src/kernel/project/mcp/registerVerb.js +59 -23
  164. package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -1
  165. package/dist/src/kernel/render/envelope.js.map +1 -1
  166. package/dist/src/kernel/render/renderers.js +3 -3
  167. package/dist/src/kernel/render/renderers.js.map +1 -1
  168. package/dist/src/kernel/render/turtle.js +21 -4
  169. package/dist/src/kernel/render/turtle.js.map +1 -1
  170. package/dist/src/kernel/runtime/boot.js.map +1 -1
  171. package/dist/src/kernel/runtime/graphpack/build.js +54 -1
  172. package/dist/src/kernel/runtime/graphpack/build.js.map +1 -1
  173. package/dist/src/kernel/runtime/graphpack/manifest.js +14 -0
  174. package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -1
  175. package/dist/src/kernel/runtime/graphpack/read.js +3 -5
  176. package/dist/src/kernel/runtime/graphpack/read.js.map +1 -1
  177. package/dist/src/kernel/runtime/graphpack/schemas.js +1 -0
  178. package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -1
  179. package/dist/src/kernel/runtime/loadSession.js +8 -1
  180. package/dist/src/kernel/runtime/loadSession.js.map +1 -1
  181. package/dist/src/kernel/runtime/packVersion.js +75 -0
  182. package/dist/src/kernel/runtime/packVersion.js.map +1 -0
  183. package/dist/src/kernel/runtime/readEntity.js +43 -4
  184. package/dist/src/kernel/runtime/readEntity.js.map +1 -1
  185. package/dist/src/kernel/runtime/refs/resolve.js.map +1 -1
  186. package/dist/src/kernel/runtime/resolveSources.js +61 -9
  187. package/dist/src/kernel/runtime/resolveSources.js.map +1 -1
  188. package/dist/src/kernel/runtime/storeReadiness.js +3 -2
  189. package/dist/src/kernel/runtime/storeReadiness.js.map +1 -1
  190. package/dist/src/kernel/spec/call.js +167 -0
  191. package/dist/src/kernel/spec/call.js.map +1 -0
  192. package/dist/src/kernel/spec/emitReference.js +9 -13
  193. package/dist/src/kernel/spec/emitReference.js.map +1 -1
  194. package/dist/src/kernel/spec/emitSurface.js +8 -1
  195. package/dist/src/kernel/spec/emitSurface.js.map +1 -1
  196. package/dist/src/kernel/spec/guidance.js +63 -0
  197. package/dist/src/kernel/spec/guidance.js.map +1 -0
  198. package/dist/src/kernel/spec/wireType.js +36 -0
  199. package/dist/src/kernel/spec/wireType.js.map +1 -0
  200. package/package.json +16 -16
  201. package/pragma.conf.ts +294 -177
  202. package/src/capabilities/block.parity.test.ts +1 -1
  203. package/src/capabilities/callRule.test.ts +147 -0
  204. package/src/capabilities/capabilities/capabilities.test.ts +47 -19
  205. package/src/capabilities/capabilities/capabilities.verb.ts +2 -0
  206. package/src/capabilities/capabilities/catalog.ts +60 -55
  207. package/src/capabilities/capabilities/index.ts +2 -0
  208. package/src/capabilities/capabilities/types.ts +16 -19
  209. package/src/capabilities/colophon/colophon.render.ts +9 -5
  210. package/src/capabilities/colophon/colophon.verb.ts +1 -0
  211. package/src/capabilities/config/get.verb.ts +2 -0
  212. package/src/capabilities/config/runField.ts +3 -3
  213. package/src/capabilities/config/set.verb.ts +3 -0
  214. package/src/capabilities/config/show.verb.ts +2 -0
  215. package/src/capabilities/config/unset.verb.ts +2 -0
  216. package/src/capabilities/create/constants.ts +8 -5
  217. package/src/capabilities/create/create.mcp.test.ts +173 -1
  218. package/src/capabilities/create/create.test.ts +4 -2
  219. package/src/capabilities/create/create.verb.ts +45 -3
  220. package/src/capabilities/create/createGrammar.test.ts +41 -5
  221. package/src/capabilities/create/createSurface.generated.ts +22 -0
  222. package/src/capabilities/create/crossCli.subprocess.test.ts +53 -14
  223. package/src/capabilities/create/index.ts +1 -1
  224. package/src/capabilities/create/pickGenerator.ts +1 -0
  225. package/src/capabilities/create/shippedCreate.subprocess.test.ts +28 -7
  226. package/src/capabilities/distribution.test.ts +6 -3
  227. package/src/capabilities/distribution.ts +6 -0
  228. package/src/capabilities/doctor/checks/checkPackageRefs.ts +14 -2
  229. package/src/capabilities/doctor/doctor.test.ts +38 -1
  230. package/src/capabilities/doctor/doctor.verb.ts +2 -0
  231. package/src/capabilities/emptyRecovery.test.ts +5 -0
  232. package/src/capabilities/graph/connect.verb.ts +2 -0
  233. package/src/capabilities/graph/inspect.render.ts +9 -1
  234. package/src/capabilities/graph/inspect.test.ts +73 -0
  235. package/src/capabilities/graph/inspect.verb.ts +2 -0
  236. package/src/capabilities/graph/query.render.test.ts +35 -0
  237. package/src/capabilities/graph/query.render.ts +45 -7
  238. package/src/capabilities/graph/query.shipped.exec.test.ts +44 -0
  239. package/src/capabilities/graph/query.verb.ts +2 -0
  240. package/src/capabilities/graph/queryText.test.ts +55 -1
  241. package/src/capabilities/graph/queryText.ts +47 -0
  242. package/src/capabilities/graph/runConnect.ts +4 -5
  243. package/src/capabilities/graph/runQuery.ts +23 -9
  244. package/src/capabilities/info/info.verb.ts +2 -0
  245. package/src/capabilities/links.shipped.exec.test.ts +398 -0
  246. package/src/capabilities/listBudget.shipped.exec.test.ts +2 -2
  247. package/src/capabilities/listLookup.shipped.exec.test.ts +122 -13
  248. package/src/capabilities/listQuery.shipped.exec.test.ts +39 -16
  249. package/src/capabilities/lookupBudget.shipped.exec.test.ts +208 -0
  250. package/src/capabilities/meta/mcp.verb.ts +2 -0
  251. package/src/capabilities/ontology/ontology.test.ts +24 -0
  252. package/src/capabilities/ontology/verbs.ts +16 -12
  253. package/src/capabilities/prompt/verbs.ts +10 -4
  254. package/src/capabilities/resources/provider.ts +7 -3
  255. package/src/capabilities/resources/resources.test.ts +2 -1
  256. package/src/capabilities/setup/setup.verb.ts +16 -0
  257. package/src/capabilities/shared/calls.ts +20 -0
  258. package/src/capabilities/skill/render.ts +9 -6
  259. package/src/capabilities/skill/verbs.ts +8 -4
  260. package/src/capabilities/sources/collectStatus.ts +6 -1
  261. package/src/capabilities/sources/index.ts +4 -3
  262. package/src/capabilities/sources/reset.render.test.ts +33 -0
  263. package/src/capabilities/sources/reset.render.ts +43 -0
  264. package/src/capabilities/sources/reset.verb.ts +59 -0
  265. package/src/capabilities/sources/runReset.ts +65 -0
  266. package/src/capabilities/sources/runUpdate.ts +12 -11
  267. package/src/capabilities/sources/sources.test.ts +158 -3
  268. package/src/capabilities/sources/status.render.test.ts +63 -1
  269. package/src/capabilities/sources/status.render.ts +25 -8
  270. package/src/capabilities/sources/status.verb.ts +2 -0
  271. package/src/capabilities/sources/types.ts +26 -0
  272. package/src/capabilities/sources/update.verb.ts +3 -0
  273. package/src/capabilities/surface.test.ts +29 -4
  274. package/src/capabilities/token.parity.test.ts +3 -2
  275. package/src/capabilities/tokenGraph.shipped.exec.test.ts +14 -2
  276. package/src/capabilities/upgrade/upgrade.verb.ts +1 -0
  277. package/src/capabilities/variable.parity.test.ts +2 -1
  278. package/src/capabilities/version/version.verb.ts +1 -0
  279. package/src/capabilities/wireContract.test.ts +110 -0
  280. package/src/constants.ts +4 -3
  281. package/src/kernel/completion/shellDrive.test.ts +2 -2
  282. package/src/kernel/copy.test.ts +1 -1
  283. package/src/kernel/error/PragmaError.test.ts +7 -3
  284. package/src/kernel/error/index.ts +1 -1
  285. package/src/kernel/error/recovery.test.ts +52 -18
  286. package/src/kernel/error/recovery.ts +25 -46
  287. package/src/kernel/error/types.ts +1 -1
  288. package/src/kernel/packs/collect.test.ts +79 -0
  289. package/src/kernel/packs/collect.ts +151 -11
  290. package/src/kernel/packs/compile.test.ts +107 -10
  291. package/src/kernel/packs/compile.ts +100 -11
  292. package/src/kernel/packs/filteredEmpty.test.ts +22 -5
  293. package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +5 -6
  294. package/src/kernel/packs/graphqlSource.test.ts +42 -0
  295. package/src/kernel/packs/iri.ts +5 -4
  296. package/src/kernel/packs/listNotice.test.ts +1 -1
  297. package/src/kernel/packs/nounLink.test.ts +385 -0
  298. package/src/kernel/packs/renderPack.ts +137 -57
  299. package/src/kernel/packs/resolveEntity.test.ts +170 -1
  300. package/src/kernel/packs/resolveEntity.ts +281 -101
  301. package/src/kernel/packs/runBodies.ts +133 -31
  302. package/src/kernel/packs/schema.ts +77 -12
  303. package/src/kernel/packs/sparql/buildListQuery.test.ts +78 -1
  304. package/src/kernel/packs/sparql/buildListQuery.ts +106 -16
  305. package/src/kernel/packs/sparql/buildLookupQuery.ts +44 -13
  306. package/src/kernel/packs/sparql/filterValues.test.ts +36 -4
  307. package/src/kernel/packs/sparql/filterValues.ts +50 -31
  308. package/src/kernel/packs/sparql/runSelect.ts +4 -6
  309. package/src/kernel/packs/storyRules.ts +37 -4
  310. package/src/kernel/packs/tierScope.test.ts +120 -6
  311. package/src/kernel/packs/tierScope.ts +5 -7
  312. package/src/kernel/packs/toolDescription.test.ts +59 -74
  313. package/src/kernel/packs/types.ts +93 -11
  314. package/src/kernel/project/cli/buildProgram.ts +4 -0
  315. package/src/kernel/project/cli/dispatch.ts +34 -8
  316. package/src/kernel/project/cli/suggest.test.ts +77 -0
  317. package/src/kernel/project/cli/suggestNames.ts +47 -1
  318. package/src/kernel/project/cli/verbHelp.ts +16 -19
  319. package/src/kernel/project/mcp/buildServer.ts +15 -4
  320. package/src/kernel/project/mcp/envelope.ts +3 -2
  321. package/src/kernel/project/mcp/instructions.ts +123 -35
  322. package/src/kernel/project/mcp/prompts/prompts.test.ts +136 -20
  323. package/src/kernel/project/mcp/registerVerb.test.ts +28 -0
  324. package/src/kernel/project/mcp/registerVerb.ts +67 -29
  325. package/src/kernel/render/__snapshots__/renderers.test.ts.snap +1 -1
  326. package/src/kernel/render/renderers.test.ts +2 -2
  327. package/src/kernel/render/renderers.ts +3 -3
  328. package/src/kernel/render/turtle.ts +24 -4
  329. package/src/kernel/runtime/graphpack/build.ts +58 -1
  330. package/src/kernel/runtime/graphpack/graphpack.test.ts +20 -0
  331. package/src/kernel/runtime/graphpack/manifest.ts +15 -0
  332. package/src/kernel/runtime/graphpack/read.ts +4 -6
  333. package/src/kernel/runtime/graphpack/schemas.ts +1 -0
  334. package/src/kernel/runtime/graphpack/types.ts +13 -0
  335. package/src/kernel/runtime/loadSession.ts +8 -1
  336. package/src/kernel/runtime/packVersion.test.ts +61 -0
  337. package/src/kernel/runtime/packVersion.ts +84 -0
  338. package/src/kernel/runtime/readEntity.ts +61 -6
  339. package/src/kernel/runtime/resolveSources.test.ts +90 -7
  340. package/src/kernel/runtime/resolveSources.ts +91 -10
  341. package/src/kernel/runtime/storeReadiness.ts +4 -4
  342. package/src/kernel/runtime/types.ts +12 -0
  343. package/src/kernel/spec/call.test.ts +95 -0
  344. package/src/kernel/spec/call.ts +186 -0
  345. package/src/kernel/spec/emitReference.ts +9 -13
  346. package/src/kernel/spec/emitSurface.ts +9 -1
  347. package/src/kernel/spec/guidance.test.ts +49 -0
  348. package/src/kernel/spec/guidance.ts +68 -0
  349. package/src/kernel/spec/index.ts +4 -0
  350. package/src/kernel/spec/surfaceConformance.test.ts +2 -2
  351. package/src/kernel/spec/types.ts +64 -7
  352. package/src/kernel/spec/wireType.ts +53 -0
  353. package/src/testing/behavioral/README.md +1 -1
  354. package/src/testing/behavioral/errorMatrix.mcp.test.ts +2 -1
  355. package/src/testing/behavioral/journeys.firstInstall.test.ts +72 -2
  356. package/src/testing/behavioral/parity.test.ts +40 -0
  357. package/src/testing/eval/__snapshots__/eval.test.ts.snap +1 -1
  358. package/src/testing/eval/cases/assembly.ts +4 -3
  359. package/src/testing/eval/cases/stable.ts +2 -3
  360. package/src/testing/helpers/callSchema.ts +40 -0
  361. package/src/testing/helpers/parity.ts +35 -2
  362. package/src/testing/setupCallChecking.ts +30 -0
  363. package/dist/src/capabilities/capabilities/hints.js +0 -223
  364. package/dist/src/capabilities/capabilities/hints.js.map +0 -1
  365. package/src/capabilities/capabilities/hints.ts +0 -266
@@ -19,8 +19,8 @@
19
19
  * Reached only behind a dynamic import from the lookup run body, so its imports
20
20
  * (including the GraphQL path) stay off the storeless fast path.
21
21
  */
22
- import { cliRecovery, PragmaError } from "../error/index.js";
23
- import { suggestNames } from "../project/cli/suggestNames.js";
22
+ import { callRecovery, PragmaError } from "../error/index.js";
23
+ import { MAX_SUGGESTIONS, suggestNames } from "../project/cli/suggestNames.js";
24
24
  import { compactUri } from "../render/index.js";
25
25
  import { activeExpands } from "./disclosure.js";
26
26
  import { expandGlob, isGlobPattern } from "./glob.js";
@@ -28,36 +28,65 @@ import { fetchGraphqlLookup } from "./graphql/fetchGraphqlLookup.js";
28
28
  import { isEmbeddableIri, resolveUri } from "./iri.js";
29
29
  import { buildExpandQuery, buildIriResolveQuery, buildLookupByIriQuery, buildLookupIrisQuery, buildLookupNamesQuery, buildLookupQuery, buildNameResolveQuery, SCOPE_TIER_VARIABLE, } from "./sparql/buildLookupQuery.js";
30
30
  import { runSelect } from "./sparql/runSelect.js";
31
+ import { localName } from "./tierScope.js";
31
32
  import { expandIsSparql, } from "./types.js";
33
+ /**
34
+ * The most entities the patterns of ONE lookup may expand to (derivation in
35
+ * BUDGETS.md). Literal arguments are never counted or cut.
36
+ */
37
+ export const GLOB_EXPANSION_CAP = 50;
38
+ /**
39
+ * Point a missed name at the noun's list — when it has one. A story may declare
40
+ * a lookup alone, and a recovery naming a `list` that does not exist is a dead
41
+ * end dressed as a way out.
42
+ */
43
+ export function listRecovery(noun, hasList) {
44
+ return hasList
45
+ ? callRecovery({ verb: `${noun} list` }, `List available ${noun} entries.`)
46
+ : { message: `Check the name: ${noun} entries cannot be listed.` };
47
+ }
32
48
  /**
33
49
  * Resolve a batch of lookup queries, collecting per-query failures.
34
50
  *
35
51
  * @throws PragmaError INVALID_INPUT when the batch is empty.
36
52
  */
37
- export async function resolveLookup(rt, lookup, noun, queries, source, prefixes, level, scope) {
53
+ export async function resolveLookup(rt, lookup, noun, queries, source, prefixes, level, hasList, scope) {
38
54
  if (queries.length === 0) {
39
55
  throw PragmaError.invalidInput("names", "(empty)", {
40
- recovery: cliRecovery(`${noun} list`, `List available ${noun} entries.`, {
41
- tool: `${noun}_list`,
42
- // A concrete, valid argument bag rather than a bare tool name: an
43
- // agent can call the recovery as written instead of guessing one.
44
- params: {},
45
- }),
56
+ recovery: listRecovery(noun, hasList),
46
57
  });
47
58
  }
48
- const expanded = await expandQueries(rt, lookup, noun, source, queries, prefixes);
59
+ // Read at most once per call, however many patterns and misses need it.
60
+ let pool;
61
+ const addressable = () => {
62
+ pool ??= listAddressable(rt, lookup, source, prefixes, scope?.via);
63
+ return pool;
64
+ };
65
+ const expanded = await expandQueries(noun, queries, addressable, scope);
49
66
  const results = [];
50
67
  const errors = [...expanded.globErrors];
51
- const outOfScope = [];
52
- const settled = await Promise.allSettled(expanded.names.map((query) => lookupOne(rt, lookup, noun, query, source, prefixes, level, scope)));
68
+ const outOfScope = [...expanded.outOfScope];
69
+ // Two arguments may reach one entity by different routes — a name pattern
70
+ // and an IRI pattern, a name and that entity's own IRI. It is answered once.
71
+ const answered = new Set();
72
+ const settled = await Promise.allSettled(expanded.names.map((query) => lookupOne(rt, lookup, noun, query, source, prefixes, level, addressable, scope)));
53
73
  for (const [index, outcome] of settled.entries()) {
54
74
  const query = expanded.names[index];
55
75
  if (query === undefined)
56
76
  continue;
57
77
  if (outcome.status === "fulfilled") {
58
- results.push(...outcome.value.entities);
59
- if (outcome.value.outOfScope)
60
- outOfScope.push(outcome.value.outOfScope);
78
+ for (const entity of outcome.value.entities) {
79
+ const uri = String(entity.uri);
80
+ if (answered.has(uri))
81
+ continue;
82
+ answered.add(uri);
83
+ results.push(entity);
84
+ }
85
+ const fallback = outcome.value.outOfScope;
86
+ const key = (answer) => `${answer.query.toLowerCase()}|${answer.tiers.join()}`;
87
+ if (fallback && !outOfScope.some((a) => key(a) === key(fallback))) {
88
+ outOfScope.push(fallback);
89
+ }
61
90
  continue;
62
91
  }
63
92
  const error = outcome.reason;
@@ -83,55 +112,150 @@ export async function resolveLookup(rt, lookup, noun, queries, source, prefixes,
83
112
  results,
84
113
  errors,
85
114
  ...(outOfScope.length > 0 ? { outOfScope } : {}),
115
+ ...(expanded.total === undefined
116
+ ? {}
117
+ : {
118
+ truncated: true,
119
+ total: expanded.total,
120
+ ...(expanded.elsewhere ? { elsewhere: expanded.elsewhere } : {}),
121
+ ...(level ? { detail: level } : {}),
122
+ }),
86
123
  };
87
124
  }
88
125
  /**
89
- * Expand glob queries against the population their own shape addresses;
90
- * literals pass through.
126
+ * The IRIs of every entity the given lookup arguments reach — the resolve
127
+ * alone, with nothing fetched. Each is read as {@link resolveLookup} reads a
128
+ * literal argument (a name, a prefixed IRI, an absolute IRI; never a pattern),
129
+ * under no tier scope: a name reaches its entity in every tier.
130
+ *
131
+ * @returns The distinct IRIs; none when the store holds no entity of the noun.
132
+ * @throws PragmaError INVALID_INPUT naming every argument that reaches nothing,
133
+ * with the suggestions a lookup miss offers; when an argument is empty; or
134
+ * when an IRI-shaped argument cannot be embedded in a query.
135
+ */
136
+ export async function resolveEntityIris(rt, lookup, noun, queries, source, prefixes) {
137
+ const blank = queries.find((query) => query.trim() === "");
138
+ if (blank !== undefined) {
139
+ throw PragmaError.invalidInput(noun, "(empty)", {
140
+ recovery: { message: `Give a ${noun} name or IRI.` },
141
+ });
142
+ }
143
+ const iris = new Set();
144
+ const missed = [];
145
+ // The graphql-sourced resolve is the bare `?uri ?name` pair: no field read.
146
+ const bare = { ...lookup, source: "graphql" };
147
+ for (const query of queries) {
148
+ const rows = await runSelect(rt, buildResolveQuery(bare, query, prefixes, undefined), source);
149
+ if (rows.length === 0)
150
+ missed.push(query);
151
+ for (const row of firstRowPerEntity(rows))
152
+ iris.add(String(row.uri));
153
+ }
154
+ if (missed.length === 0)
155
+ return [...iris];
156
+ const pool = listAddressable(rt, lookup, source, prefixes, undefined);
157
+ if ((await pool).length === 0)
158
+ return [];
159
+ const suggestions = await Promise.all(missed.map((query) => suggestForMiss(() => pool, query)));
160
+ throw new PragmaError({
161
+ code: "INVALID_INPUT",
162
+ message: `No ${noun} is named "${missed.join('", "')}".`,
163
+ // Interleaved, so every miss gets a share of the slots.
164
+ suggestions: [
165
+ ...new Set(suggestions
166
+ .flatMap((list, miss) => list.map((name, rank) => ({ name, rank, miss })))
167
+ .sort((a, b) => a.rank - b.rank || a.miss - b.miss)
168
+ .map((entry) => entry.name)),
169
+ ].slice(0, MAX_SUGGESTIONS),
170
+ });
171
+ }
172
+ /**
173
+ * Expand glob queries to the ENTITIES they reach; literals pass through.
91
174
  *
92
- * A name glob expands over the `by` values, an IRI glob over the entity IRIs —
93
- * the same split {@link buildResolveQuery} makes, because a glob is just a
94
- * lookup argument with a `*` in it. Expanding an IRI pattern over names was why
95
- * `ds:global.component.but*` matched nothing on any pack while shell completion
96
- * offered nothing BUT those IRIs. Each population is fetched at most once, and
97
- * only when a glob of that shape is actually present.
175
+ * An IRI-shaped glob is matched against both spellings of an IRI, a prefix-less
176
+ * one against names and IRI local names. Matches are keyed by entity, so two
177
+ * routes to one entity count once. Under a tier scope the in-scope matches come
178
+ * first and an out-of-scope namesake of one is dropped, as a name lookup would;
179
+ * the cap is applied after that, over a deterministic order.
98
180
  */
99
- async function expandQueries(rt, lookup, noun, source, queries, prefixes) {
100
- if (!queries.some(isGlobPattern))
101
- return { names: [...queries], globErrors: [] };
181
+ async function expandQueries(noun, queries, addressable, scope) {
182
+ const literals = [...new Set(queries.filter((q) => !isGlobPattern(q)))];
102
183
  const globs = queries.filter(isGlobPattern);
103
- const byIri = globs.some(looksLikeIri)
104
- ? await listEntityIriSpellings(rt, lookup, source, prefixes)
105
- : new Map();
106
- const byName = globs.some((glob) => !looksLikeIri(glob))
107
- ? await listEntityNames(rt, lookup, source)
108
- : [];
109
- const names = [];
184
+ if (globs.length === 0) {
185
+ return { names: literals, globErrors: [], outOfScope: [] };
186
+ }
187
+ const pool = await addressable();
110
188
  const globErrors = [];
111
- for (const query of queries) {
112
- if (!isGlobPattern(query)) {
113
- names.push(query);
114
- continue;
115
- }
116
- // An IRI glob expands over every spelling, then collapses to the entity:
117
- // matching `ds:button` and its absolute twin must not list it twice.
118
- const matches = looksLikeIri(query)
119
- ? [
120
- ...new Set(expandGlob(query, [...byIri.keys()]).map((spelling) => byIri.get(spelling) ?? spelling)),
121
- ]
122
- : expandGlob(query, byName);
123
- if (matches.length === 0) {
189
+ const matched = new Map();
190
+ const inScope = (entity) => !scope || entity.tier === undefined || scope.tiers.includes(entity.tier);
191
+ for (const glob of globs) {
192
+ const forms = (entity) => looksLikeIri(glob)
193
+ ? [entity.uri, entity.compact]
194
+ : [entity.name ?? "", entity.local];
195
+ const hits = new Set(expandGlob(glob, pool.flatMap(forms)));
196
+ const entities = pool.filter((entity) => forms(entity).some((form) => hits.has(form)));
197
+ if (entities.length === 0) {
124
198
  globErrors.push({
125
- query,
199
+ query: glob,
126
200
  code: "EMPTY_RESULTS",
127
- message: `No ${noun} entries matching "${query}".`,
201
+ message: `No ${noun} entries matching "${glob}".`,
128
202
  });
129
203
  }
130
- else {
131
- names.push(...matches);
204
+ for (const entity of entities) {
205
+ // An entity in two tiers is in scope when either row is.
206
+ const known = matched.get(entity.uri);
207
+ if (!known || (!inScope(known) && inScope(entity))) {
208
+ matched.set(entity.uri, entity);
209
+ }
132
210
  }
133
211
  }
134
- return { names, globErrors };
212
+ const label = (entity) => entity.name ?? entity.compact;
213
+ const scoped = new Set([...matched.values()].filter(inScope).map((e) => label(e).toLowerCase()));
214
+ const ordered = [...matched.values()]
215
+ .filter((e) => inScope(e) || !scoped.has(label(e).toLowerCase()))
216
+ .sort((a, b) => Number(!inScope(a)) - Number(!inScope(b)) ||
217
+ label(a).localeCompare(label(b)) ||
218
+ a.uri.localeCompare(b.uri));
219
+ const kept = ordered.slice(0, GLOB_EXPANSION_CAP);
220
+ const within = ordered.filter(inScope).length;
221
+ return {
222
+ names: [...literals, ...kept.map((entity) => entity.compact)],
223
+ globErrors,
224
+ outOfScope: kept
225
+ .filter((entity) => !inScope(entity))
226
+ .map((entity) => ({
227
+ query: label(entity),
228
+ tiers: [scopeTierName(entity.tier ?? "")],
229
+ scope: scope?.label ?? "",
230
+ })),
231
+ ...(ordered.length <= kept.length
232
+ ? {}
233
+ : within > kept.length
234
+ ? { total: within, elsewhere: ordered.length - within }
235
+ : { total: ordered.length }),
236
+ };
237
+ }
238
+ /**
239
+ * What to offer for an argument that reached nothing: near names, and the
240
+ * prefixed IRI of an entity whose local name is what was typed (exact match
241
+ * first). A bare local name is not an address; the miss names the form that is.
242
+ */
243
+ async function suggestForMiss(addressable, query) {
244
+ const pool = await addressable();
245
+ const names = [...new Set(pool.flatMap((e) => (e.name ? [e.name] : [])))];
246
+ const taken = new Set(names.map((name) => name.trim().toLowerCase()));
247
+ const byLocal = new Map();
248
+ for (const entity of pool) {
249
+ const key = entity.local.toLowerCase();
250
+ if (taken.has(key))
251
+ continue;
252
+ byLocal.set(key, [
253
+ ...new Set([...(byLocal.get(key) ?? []), entity.compact]),
254
+ ]);
255
+ }
256
+ const exact = byLocal.get(query.trim().toLowerCase()) ?? [];
257
+ const ranked = suggestNames(query, [...names, ...byLocal.keys()]).flatMap((candidate) => byLocal.get(candidate) ?? [candidate]);
258
+ return [...new Set([...exact, ...ranked])].slice(0, MAX_SUGGESTIONS);
135
259
  }
136
260
  /**
137
261
  * Look up every entity a lookup argument reaches, dispatching to the pack's
@@ -162,20 +286,13 @@ async function expandQueries(rt, lookup, noun, source, queries, prefixes) {
162
286
  * that has always been true and `LIMIT 1` merely hid it. Without the collapse
163
287
  * one entity would report itself as several.
164
288
  */
165
- async function lookupOne(rt, lookup, noun, query, source, prefixes, level, scope) {
289
+ async function lookupOne(rt, lookup, noun, query, source, prefixes, level, addressable, scope) {
166
290
  const graphqlSourced = lookup.source === "graphql";
167
291
  const rows = await runSelect(rt, buildResolveQuery(lookup, query, prefixes, level, scope), source);
168
292
  const resolved = firstRowPerEntity(rows);
169
293
  if (resolved.length === 0) {
170
- const candidates = await listEntityNames(rt, lookup, source);
171
294
  throw PragmaError.notFound(noun, query, {
172
- suggestions: suggestNames(query, candidates),
173
- recovery: cliRecovery(`${noun} list`, `List available ${noun} entries.`, {
174
- tool: `${noun}_list`,
175
- // A concrete, valid argument bag rather than a bare tool name: an
176
- // agent can call the recovery as written instead of guessing one.
177
- params: {},
178
- }),
295
+ suggestions: await suggestForMiss(addressable, query),
179
296
  });
180
297
  }
181
298
  const chosen = applyScope(resolved, query, scope);
@@ -271,7 +388,8 @@ async function addSparqlExpands(rt, lookup, entity, source, level) {
271
388
  for (const expand of activeExpands(lookup, level)) {
272
389
  if (!expandIsSparql(lookup, expand))
273
390
  continue;
274
- entity[expand.name] = (await runSelect(rt, buildExpandQuery(expand, String(entity.uri), lookup), source,
391
+ const many = expand.select.flatMap((field) => "many" in field && field.many ? [field.name] : []);
392
+ const rows = (await runSelect(rt, buildExpandQuery(expand, String(entity.uri), lookup), source,
275
393
  // A section whose vocabulary this store does not bind renders EMPTY
276
394
  // rather than taking the whole entity down with it — see
277
395
  // `RunSelectOptions.degradeOnUnboundPrefix`. The block lookup's tokens
@@ -279,6 +397,13 @@ async function addSparqlExpands(rt, lookup, entity, source, level) {
279
397
  // without that pack does not bind, and every other section of that
280
398
  // block is still perfectly answerable.
281
399
  { degradeOnUnboundPrefix: true }));
400
+ // An aggregate has no order of its own; a `many` cell is sorted here.
401
+ entity[expand.name] = rows.map((row) => ({
402
+ ...row,
403
+ ...Object.fromEntries(many
404
+ .filter((name) => row[name] !== undefined)
405
+ .map((name) => [name, (row[name] ?? "").split(" ").sort().join(" ")])),
406
+ }));
282
407
  }
283
408
  return entity;
284
409
  }
@@ -335,35 +460,22 @@ function looksLikeIri(query) {
335
460
  // concept "Foundations: Grid" — not a prefix separator.
336
461
  (query.includes(":") && !/\s/.test(query)));
337
462
  }
338
- /**
339
- * Every SPELLING an IRI-shaped glob may be written against, mapped to the one
340
- * entity it addresses.
341
- *
342
- * An entity under a registered prefix has two legal spellings — the compact
343
- * `ds:button` shell completion offers, and the absolute
344
- * `https://ds.canonical.com/button` a user pastes from a browser. Both resolve
345
- * to the same entity in a literal lookup, so a glob must expand over both;
346
- * offering only the compact form made `https://ds.canonical.com/but*` return
347
- * EMPTY_RESULTS while the literal IRI it generalises succeeded.
348
- *
349
- * The map is spelling → CANONICAL IRI precisely so a pattern that matches an
350
- * entity under both spellings still yields it once. Matching over a flat list
351
- * of both would render the entity twice, which is why the previous shape
352
- * offered only one.
353
- */
354
- async function listEntityIriSpellings(rt, lookup, source, prefixes) {
355
- const rows = await runSelect(rt, buildLookupIrisQuery(lookup), source);
356
- const spellings = new Map();
357
- for (const row of rows) {
358
- const uri = row.uri ?? "";
359
- if (uri === "")
360
- continue;
361
- spellings.set(uri, uri);
362
- const compact = compactUri(uri, prefixes);
363
- if (compact !== uri)
364
- spellings.set(compact, uri);
365
- }
366
- return spellings;
463
+ /** List every entity the lookup can address by IRI. */
464
+ async function listAddressable(rt, lookup, source, prefixes, via) {
465
+ const rows = await runSelect(rt, buildLookupIrisQuery(lookup, via), source);
466
+ return rows
467
+ .filter((row) => (row.uri ?? "") !== "")
468
+ .map((row) => {
469
+ const uri = row.uri;
470
+ const tier = row[SCOPE_TIER_VARIABLE];
471
+ return {
472
+ uri,
473
+ compact: compactUri(uri, prefixes),
474
+ local: localName(uri),
475
+ ...(row.name ? { name: row.name } : {}),
476
+ ...(tier ? { tier } : {}),
477
+ };
478
+ });
367
479
  }
368
480
  /** List every entity name the lookup can address (miss suggestions + sample/glob). */
369
481
  export async function listEntityNames(rt, lookup, source) {
@@ -1 +1 @@
1
- {"version":3,"file":"resolveEntity.js","sourceRoot":"","sources":["../../../../src/kernel/packs/resolveEntity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolveEntity.js","sourceRoot":"","sources":["../../../../src/kernel/packs/resolveEntity.ts"],"names":[],"mappings":"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"}
@@ -9,35 +9,20 @@
9
9
  * entities at the highest level. All store access is through the runtime facade
10
10
  * (lazy), so these factories carry no heavy static import.
11
11
  */
12
- import { cliRecovery, PragmaError } from "../error/index.js";
12
+ import { PragmaError } from "../error/index.js";
13
13
  import { encodeCursor, pageFingerprint, readCursor } from "./cursor.js";
14
14
  import { resolvePackDetail } from "./disclosure.js";
15
15
  import { readLimit } from "./paging.js";
16
- import { listEntityNames, resolveLookup, } from "./resolveEntity.js";
16
+ import { listEntityNames, listRecovery, resolveEntityIris, resolveLookup, } from "./resolveEntity.js";
17
17
  import { parseSampleCount, pickRandom } from "./sample.js";
18
- import { buildListQuery } from "./sparql/buildListQuery.js";
18
+ import { buildListQuery, buildTierCountQuery, } from "./sparql/buildListQuery.js";
19
19
  import { resolveFilterPredicates, } from "./sparql/filterValues.js";
20
20
  import { runSelect } from "./sparql/runSelect.js";
21
21
  import { readSearchTerm } from "./sparql/searchTerm.js";
22
- import { resolveReadScope, scopeIris, scopeLabel, } from "./tierScope.js";
23
- import { ENTITY_VARIABLE, } from "./types.js";
22
+ import { localName, resolveReadScope, scopeIris, scopeLabel, } from "./tierScope.js";
23
+ import { ENTITY_VARIABLE, UNTIERED_KEY, } from "./types.js";
24
24
  /** The highest canonical level — sample fetches everything for shape discovery. */
25
25
  const HIGHEST_LEVEL = "detailed";
26
- /**
27
- * The recovery every lookup-shaped miss carries: browse the noun's list.
28
- *
29
- * `mcp.params` is populated rather than left off. A bare tool NAME is only half
30
- * an instruction to an agent — it still has to guess an argument bag, and a
31
- * guess that misses returns `-32602 Invalid arguments`, which reads like the
32
- * recovery itself was wrong. `{}` is the concrete, valid call: every compiled
33
- * list verb's params are optional, so the recovery is now copy-pasteable.
34
- */
35
- function listRecovery(noun) {
36
- return cliRecovery(`${noun} list`, `List available ${noun} entries.`, {
37
- tool: `${noun}_list`,
38
- params: {},
39
- });
40
- }
41
26
  /**
42
27
  * Build the run body for a list-shaped verb (`list` or an extra verb).
43
28
  *
@@ -57,7 +42,15 @@ function listRecovery(noun) {
57
42
  export function makeListRun(shape, meta) {
58
43
  return async (params, rt) => {
59
44
  const vocabularies = await readFilterVocabularies(rt, shape.filters, params, meta.source);
60
- const predicates = resolveFilterPredicates(shape.filters, params, vocabularies, meta.source.label);
45
+ const predicates = [
46
+ ...resolveFilterPredicates(shape.filters?.filter((filter) => filter.noun === undefined), params, vocabularies, meta.source.label),
47
+ ...(await resolveNounPredicates(rt, shape.filters, params, meta)),
48
+ ];
49
+ // Left out of the rows: over the shipped pack the IRIs a noun filter
50
+ // constrains took the largest list past its payload budget (108 KB).
51
+ const omit = (shape.filters ?? [])
52
+ .flatMap((filter) => (filter.entity ? [filter.entity] : []))
53
+ .filter((name) => !shape.columns.some((column) => column.field === name));
61
54
  const search = readSearchTerm(shape.search, params);
62
55
  const scope = await resolveReadScope(rt, meta.tierScope, params.tier, meta.source);
63
56
  // The scope as the query builder takes it, or nothing: a story with no
@@ -84,14 +77,22 @@ export function makeListRun(shape, meta) {
84
77
  ...(listScope ? [JSON.stringify(tiers)] : []),
85
78
  ]);
86
79
  const offset = readCursor(params.after, fingerprint);
87
- const rows = await runSelect(rt, buildListQuery({
80
+ const read = {
88
81
  query: shape.query,
89
82
  predicates,
90
83
  ...(search ? { search } : {}),
84
+ label: meta.source.label,
85
+ };
86
+ const rows = await runSelect(rt, buildListQuery({
87
+ ...read,
91
88
  ...(listScope ? { scope: listScope } : {}),
89
+ omit,
92
90
  window: { limit: limit + 1, offset },
93
- label: meta.source.label,
94
91
  }), meta.source);
92
+ // First page only, and never the reason a list fails.
93
+ const counts = scope?.kind === "tiers" && listScope && params.after === undefined
94
+ ? await readTierCounts(rt, { ...read, scope: listScope }, meta.source).catch(() => undefined)
95
+ : undefined;
95
96
  const hasMore = rows.length > limit;
96
97
  const applied = appliedFilters(shape, params, search?.term, scope);
97
98
  return {
@@ -101,12 +102,37 @@ export function makeListRun(shape, meta) {
101
102
  : {}),
102
103
  ...(applied.length > 0 ? { filters: applied } : {}),
103
104
  ...(scope?.kind === "tiers"
104
- ? { scope: { tiers: scope.tiers.map((tier) => tier.local) } }
105
+ ? {
106
+ scope: {
107
+ tiers: scope.tiers.map((tier) => tier.local),
108
+ ...(counts ? { counts } : {}),
109
+ },
110
+ }
105
111
  : {}),
106
112
  limit,
107
113
  };
108
114
  };
109
115
  }
116
+ /**
117
+ * Count the whole filtered answer's rows per tier: every in-scope tier (0 when
118
+ * it holds none), then the out-of-scope tiers that hold some, then
119
+ * {@link UNTIERED_KEY} when any row's entity is in no tier.
120
+ */
121
+ async function readTierCounts(rt, read, source) {
122
+ const query = buildTierCountQuery(read);
123
+ const byIri = query.read(await runSelect(rt, query.text, source));
124
+ const inScope = read.scope.tiers.map((iri) => [localName(iri), byIri.get(iri) ?? 0]);
125
+ const outside = [...byIri]
126
+ .filter(([iri]) => iri !== "" && !read.scope.tiers.includes(iri))
127
+ .map(([iri, count]) => [localName(iri), count])
128
+ .sort(([a], [b]) => a.localeCompare(b));
129
+ const untiered = byIri.get("");
130
+ return Object.fromEntries([
131
+ ...inScope,
132
+ ...outside,
133
+ ...(untiered ? [[UNTIERED_KEY, untiered]] : []),
134
+ ]);
135
+ }
110
136
  /**
111
137
  * The filters this read was narrowed by, in the spelling the caller used.
112
138
  *
@@ -184,6 +210,39 @@ async function readFilterVocabularies(rt, filters, params, source) {
184
210
  }
185
211
  return resolved;
186
212
  }
213
+ /**
214
+ * Turn the values a caller supplied for each NOUN filter into a constraint on
215
+ * the entities they name.
216
+ *
217
+ * @returns One `"iri"` predicate per noun filter the caller used, over the
218
+ * IRIs its values reached. Against a store holding none of that noun's
219
+ * entities the predicate names no IRI and the list answers empty.
220
+ * @throws PragmaError INVALID_INPUT when a value reaches no entity of the noun;
221
+ * CONFIG_ERROR when no story known to this one declares a lookup for it.
222
+ */
223
+ async function resolveNounPredicates(rt, filters, params, meta) {
224
+ const predicates = [];
225
+ for (const filter of filters ?? []) {
226
+ const provided = params[filter.param];
227
+ if (!filter.noun || !filter.entity || provided === undefined)
228
+ continue;
229
+ const occurrences = Array.isArray(provided) ? provided : [provided];
230
+ if (occurrences.length === 0)
231
+ continue;
232
+ const lookup = meta.nouns?.(filter.noun);
233
+ if (!lookup) {
234
+ throw PragmaError.configError(`Filter "--${filter.param}" in ${meta.source.label} names the noun "${filter.noun}", and no story declares a lookup for it.`);
235
+ }
236
+ const terms = await resolveEntityIris(rt, lookup, filter.noun, occurrences.map((value) => String(value).trim().normalize("NFC")), meta.source, meta.prefixes);
237
+ predicates.push({
238
+ variable: filter.entity,
239
+ match: "iri",
240
+ terms,
241
+ ...(filter.via ? { via: filter.via } : {}),
242
+ });
243
+ }
244
+ return predicates;
245
+ }
187
246
  /**
188
247
  * Build the run body for a lookup verb (variadic names → resolved entities).
189
248
  *
@@ -194,12 +253,12 @@ async function readFilterVocabularies(rt, filters, params, source) {
194
253
  * back rather than answering "no such block" about a block that exists
195
254
  * ({@link ./resolveEntity.applyScope}).
196
255
  */
197
- export function makeLookupRun(lookup, noun, source, prefixes, tierScope) {
256
+ export function makeLookupRun(lookup, noun, source, prefixes, hasList, tierScope) {
198
257
  return async (params, rt) => {
199
258
  const names = readNames(params);
200
259
  const level = await resolvePackDetail(rt, lookup.disclosure);
201
260
  const scope = await resolveReadScope(rt, tierScope, params.tier, source);
202
- const output = await resolveLookup(rt, lookup, noun, names, source, prefixes, level, lookupScope(tierScope, scope));
261
+ const output = await resolveLookup(rt, lookup, noun, names, source, prefixes, level, hasList, lookupScope(tierScope, scope));
203
262
  // A total miss (single or all-miss) exits non-zero; a partial batch renders
204
263
  // the results it found and notes the misses.
205
264
  if (output.results.length === 0 && output.errors.length > 0) {
@@ -209,7 +268,7 @@ export function makeLookupRun(lookup, noun, source, prefixes, tierScope) {
209
268
  code: first.code,
210
269
  message: first.message,
211
270
  suggestions: first.suggestions ? [...first.suggestions] : undefined,
212
- recovery: listRecovery(noun),
271
+ recovery: listRecovery(noun, hasList),
213
272
  });
214
273
  }
215
274
  }
@@ -243,7 +302,7 @@ function lookupScope(declaration, scope) {
243
302
  * the draw pool depend on a setting, so two agents reading the same store would
244
303
  * see different exemplars for reasons neither asked about.
245
304
  */
246
- export function makeSampleRun(lookup, noun, source, prefixes, defaultCount) {
305
+ export function makeSampleRun(lookup, noun, source, prefixes, defaultCount, hasList) {
247
306
  return async (params, rt) => {
248
307
  const count = parseSampleCount(params.count ?? defaultCount);
249
308
  const names = await listEntityNames(rt, lookup, source);
@@ -252,11 +311,11 @@ export function makeSampleRun(lookup, noun, source, prefixes, defaultCount) {
252
311
  if (names.length === 0) {
253
312
  throw PragmaError.emptyResults(noun, {
254
313
  message: `No ${noun} entries to sample.`,
255
- recovery: listRecovery(noun),
314
+ recovery: listRecovery(noun, hasList),
256
315
  });
257
316
  }
258
317
  const selected = pickRandom(names, count);
259
- const output = await resolveLookup(rt, lookup, noun, selected, source, prefixes, HIGHEST_LEVEL);
318
+ const output = await resolveLookup(rt, lookup, noun, selected, source, prefixes, HIGHEST_LEVEL, hasList);
260
319
  return {
261
320
  samples: output.results,
262
321
  totalCount: names.length,