@canonical/pragma-cli 0.34.0 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (798) hide show
  1. package/README.md +153 -30
  2. package/dist/.build-ok +0 -0
  3. package/dist/package.json +83 -0
  4. package/dist/pragma.conf.js +814 -0
  5. package/dist/pragma.conf.js.map +1 -0
  6. package/dist/src/bin.js +356 -0
  7. package/dist/src/bin.js.map +1 -0
  8. package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
  9. package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
  10. package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
  11. package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
  12. package/dist/src/capabilities/capabilities/catalog.js +130 -0
  13. package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
  14. package/dist/src/capabilities/capabilities/hints.js +195 -0
  15. package/dist/src/capabilities/capabilities/hints.js.map +1 -0
  16. package/dist/src/capabilities/capabilities/index.js +11 -0
  17. package/dist/src/capabilities/capabilities/index.js.map +1 -0
  18. package/dist/src/capabilities/capabilities/types.js +11 -0
  19. package/dist/src/capabilities/capabilities/types.js.map +1 -0
  20. package/dist/src/capabilities/colophon/collectColophon.js +83 -0
  21. package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
  22. package/dist/src/capabilities/colophon/colophon.render.js +59 -0
  23. package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
  24. package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
  25. package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
  26. package/dist/src/capabilities/colophon/index.js +5 -0
  27. package/dist/src/capabilities/colophon/index.js.map +1 -0
  28. package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
  29. package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
  30. package/dist/src/capabilities/colophon/types.js +10 -0
  31. package/dist/src/capabilities/colophon/types.js.map +1 -0
  32. package/dist/src/capabilities/config/collectConfigShow.js +59 -0
  33. package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
  34. package/dist/src/capabilities/config/field.render.js +22 -0
  35. package/dist/src/capabilities/config/field.render.js.map +1 -0
  36. package/dist/src/capabilities/config/fields.js +46 -0
  37. package/dist/src/capabilities/config/fields.js.map +1 -0
  38. package/dist/src/capabilities/config/get.verb.js +61 -0
  39. package/dist/src/capabilities/config/get.verb.js.map +1 -0
  40. package/dist/src/capabilities/config/index.js +5 -0
  41. package/dist/src/capabilities/config/index.js.map +1 -0
  42. package/dist/src/capabilities/config/runField.js +59 -0
  43. package/dist/src/capabilities/config/runField.js.map +1 -0
  44. package/dist/src/capabilities/config/runGet.js +28 -0
  45. package/dist/src/capabilities/config/runGet.js.map +1 -0
  46. package/dist/src/capabilities/config/runSet.js +53 -0
  47. package/dist/src/capabilities/config/runSet.js.map +1 -0
  48. package/dist/src/capabilities/config/set.verb.js +66 -0
  49. package/dist/src/capabilities/config/set.verb.js.map +1 -0
  50. package/dist/src/capabilities/config/show.render.js +84 -0
  51. package/dist/src/capabilities/config/show.render.js.map +1 -0
  52. package/dist/src/capabilities/config/show.verb.js +44 -0
  53. package/dist/src/capabilities/config/show.verb.js.map +1 -0
  54. package/dist/src/capabilities/config/types.js +5 -0
  55. package/dist/src/capabilities/config/types.js.map +1 -0
  56. package/dist/src/capabilities/config/unset.verb.js +49 -0
  57. package/dist/src/capabilities/config/unset.verb.js.map +1 -0
  58. package/dist/src/capabilities/create/cliProjection.js +195 -0
  59. package/dist/src/capabilities/create/cliProjection.js.map +1 -0
  60. package/dist/src/capabilities/create/constants.js +47 -0
  61. package/dist/src/capabilities/create/constants.js.map +1 -0
  62. package/dist/src/capabilities/create/create.render.js +100 -0
  63. package/dist/src/capabilities/create/create.render.js.map +1 -0
  64. package/dist/src/capabilities/create/create.verb.js +438 -0
  65. package/dist/src/capabilities/create/create.verb.js.map +1 -0
  66. package/dist/src/capabilities/create/createHelp.js +47 -0
  67. package/dist/src/capabilities/create/createHelp.js.map +1 -0
  68. package/dist/src/capabilities/create/createSurface.generated.js +394 -0
  69. package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
  70. package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
  71. package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
  72. package/dist/src/capabilities/create/index.js +18 -0
  73. package/dist/src/capabilities/create/index.js.map +1 -0
  74. package/dist/src/capabilities/create/messages.js +16 -0
  75. package/dist/src/capabilities/create/messages.js.map +1 -0
  76. package/dist/src/capabilities/create/mount.js +293 -0
  77. package/dist/src/capabilities/create/mount.js.map +1 -0
  78. package/dist/src/capabilities/create/pathJail.js +65 -0
  79. package/dist/src/capabilities/create/pathJail.js.map +1 -0
  80. package/dist/src/capabilities/create/pickGenerator.js +53 -0
  81. package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
  82. package/dist/src/capabilities/create/types.js +2 -0
  83. package/dist/src/capabilities/create/types.js.map +1 -0
  84. package/dist/src/capabilities/distribution.js +40 -0
  85. package/dist/src/capabilities/distribution.js.map +1 -0
  86. package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
  87. package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
  88. package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
  89. package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
  90. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +92 -0
  91. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
  92. package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
  93. package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
  94. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
  95. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
  96. package/dist/src/capabilities/doctor/checks/index.js +27 -0
  97. package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
  98. package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
  99. package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
  100. package/dist/src/capabilities/doctor/checks/targetHealth.js +205 -0
  101. package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
  102. package/dist/src/capabilities/doctor/doctor.render.js +185 -0
  103. package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
  104. package/dist/src/capabilities/doctor/doctor.verb.js +45 -0
  105. package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
  106. package/dist/src/capabilities/doctor/index.js +5 -0
  107. package/dist/src/capabilities/doctor/index.js.map +1 -0
  108. package/dist/src/capabilities/doctor/runChecks.js +83 -0
  109. package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
  110. package/dist/src/capabilities/doctor/types.js +5 -0
  111. package/dist/src/capabilities/doctor/types.js.map +1 -0
  112. package/dist/src/capabilities/graph/index.js +19 -0
  113. package/dist/src/capabilities/graph/index.js.map +1 -0
  114. package/dist/src/capabilities/graph/inspect.render.js +76 -0
  115. package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
  116. package/dist/src/capabilities/graph/inspect.verb.js +53 -0
  117. package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
  118. package/dist/src/capabilities/graph/query.render.js +73 -0
  119. package/dist/src/capabilities/graph/query.render.js.map +1 -0
  120. package/dist/src/capabilities/graph/query.verb.js +49 -0
  121. package/dist/src/capabilities/graph/query.verb.js.map +1 -0
  122. package/dist/src/capabilities/graph/runQuery.js +41 -0
  123. package/dist/src/capabilities/graph/runQuery.js.map +1 -0
  124. package/dist/src/capabilities/index.js +56 -0
  125. package/dist/src/capabilities/index.js.map +1 -0
  126. package/dist/src/capabilities/info/collectInfo.js +66 -0
  127. package/dist/src/capabilities/info/collectInfo.js.map +1 -0
  128. package/dist/src/capabilities/info/index.js +5 -0
  129. package/dist/src/capabilities/info/index.js.map +1 -0
  130. package/dist/src/capabilities/info/info.render.js +53 -0
  131. package/dist/src/capabilities/info/info.render.js.map +1 -0
  132. package/dist/src/capabilities/info/info.verb.js +42 -0
  133. package/dist/src/capabilities/info/info.verb.js.map +1 -0
  134. package/dist/src/capabilities/info/types.js +5 -0
  135. package/dist/src/capabilities/info/types.js.map +1 -0
  136. package/dist/src/capabilities/meta/complete.verb.js +43 -0
  137. package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
  138. package/dist/src/capabilities/meta/index.js +13 -0
  139. package/dist/src/capabilities/meta/index.js.map +1 -0
  140. package/dist/src/capabilities/meta/mcp.verb.js +34 -0
  141. package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
  142. package/dist/src/capabilities/ontology/index.js +21 -0
  143. package/dist/src/capabilities/ontology/index.js.map +1 -0
  144. package/dist/src/capabilities/ontology/queries.js +123 -0
  145. package/dist/src/capabilities/ontology/queries.js.map +1 -0
  146. package/dist/src/capabilities/ontology/render.js +66 -0
  147. package/dist/src/capabilities/ontology/render.js.map +1 -0
  148. package/dist/src/capabilities/ontology/verbs.js +181 -0
  149. package/dist/src/capabilities/ontology/verbs.js.map +1 -0
  150. package/dist/src/capabilities/prompt/index.js +16 -0
  151. package/dist/src/capabilities/prompt/index.js.map +1 -0
  152. package/dist/src/capabilities/prompt/prompt.render.js +78 -0
  153. package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
  154. package/dist/src/capabilities/prompt/types.js +10 -0
  155. package/dist/src/capabilities/prompt/types.js.map +1 -0
  156. package/dist/src/capabilities/prompt/verbs.js +93 -0
  157. package/dist/src/capabilities/prompt/verbs.js.map +1 -0
  158. package/dist/src/capabilities/resources/index.js +10 -0
  159. package/dist/src/capabilities/resources/index.js.map +1 -0
  160. package/dist/src/capabilities/resources/provider.js +423 -0
  161. package/dist/src/capabilities/resources/provider.js.map +1 -0
  162. package/dist/src/capabilities/setup/buildPlan.js +168 -0
  163. package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
  164. package/dist/src/capabilities/setup/index.js +5 -0
  165. package/dist/src/capabilities/setup/index.js.map +1 -0
  166. package/dist/src/capabilities/setup/mode.js +53 -0
  167. package/dist/src/capabilities/setup/mode.js.map +1 -0
  168. package/dist/src/capabilities/setup/operations/index.js +39 -0
  169. package/dist/src/capabilities/setup/operations/index.js.map +1 -0
  170. package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
  171. package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
  172. package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
  173. package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
  174. package/dist/src/capabilities/setup/operations/setupGenerator.js +343 -0
  175. package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
  176. package/dist/src/capabilities/setup/operations/setupLsp.js +277 -0
  177. package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
  178. package/dist/src/capabilities/setup/operations/setupMcp.js +207 -0
  179. package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
  180. package/dist/src/capabilities/setup/operations/setupSkills.js +316 -0
  181. package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
  182. package/dist/src/capabilities/setup/plan.js +128 -0
  183. package/dist/src/capabilities/setup/plan.js.map +1 -0
  184. package/dist/src/capabilities/setup/plan.render.js +193 -0
  185. package/dist/src/capabilities/setup/plan.render.js.map +1 -0
  186. package/dist/src/capabilities/setup/setup.render.js +54 -0
  187. package/dist/src/capabilities/setup/setup.render.js.map +1 -0
  188. package/dist/src/capabilities/setup/setup.verb.js +334 -0
  189. package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
  190. package/dist/src/capabilities/setup/shell.js +196 -0
  191. package/dist/src/capabilities/setup/shell.js.map +1 -0
  192. package/dist/src/capabilities/setup/targets.js +263 -0
  193. package/dist/src/capabilities/setup/targets.js.map +1 -0
  194. package/dist/src/capabilities/setup/types.js +5 -0
  195. package/dist/src/capabilities/setup/types.js.map +1 -0
  196. package/dist/src/capabilities/shared/assertExecOk.js +137 -0
  197. package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
  198. package/dist/src/capabilities/shared/bands.js +16 -0
  199. package/dist/src/capabilities/shared/bands.js.map +1 -0
  200. package/dist/src/capabilities/shared/index.js +26 -0
  201. package/dist/src/capabilities/shared/index.js.map +1 -0
  202. package/dist/src/capabilities/shared/packageManager.js +103 -0
  203. package/dist/src/capabilities/shared/packageManager.js.map +1 -0
  204. package/dist/src/capabilities/shared/registry.js +55 -0
  205. package/dist/src/capabilities/shared/registry.js.map +1 -0
  206. package/dist/src/capabilities/skill/discover.js +195 -0
  207. package/dist/src/capabilities/skill/discover.js.map +1 -0
  208. package/dist/src/capabilities/skill/index.js +10 -0
  209. package/dist/src/capabilities/skill/index.js.map +1 -0
  210. package/dist/src/capabilities/skill/render.js +49 -0
  211. package/dist/src/capabilities/skill/render.js.map +1 -0
  212. package/dist/src/capabilities/skill/verbs.js +83 -0
  213. package/dist/src/capabilities/skill/verbs.js.map +1 -0
  214. package/dist/src/capabilities/sources/collectStatus.js +103 -0
  215. package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
  216. package/dist/src/capabilities/sources/index.js +13 -0
  217. package/dist/src/capabilities/sources/index.js.map +1 -0
  218. package/dist/src/capabilities/sources/installSkills.js +167 -0
  219. package/dist/src/capabilities/sources/installSkills.js.map +1 -0
  220. package/dist/src/capabilities/sources/runUpdate.js +394 -0
  221. package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
  222. package/dist/src/capabilities/sources/status.render.js +64 -0
  223. package/dist/src/capabilities/sources/status.render.js.map +1 -0
  224. package/dist/src/capabilities/sources/status.verb.js +40 -0
  225. package/dist/src/capabilities/sources/status.verb.js.map +1 -0
  226. package/dist/src/capabilities/sources/types.js +6 -0
  227. package/dist/src/capabilities/sources/types.js.map +1 -0
  228. package/dist/src/capabilities/sources/update.render.js +34 -0
  229. package/dist/src/capabilities/sources/update.render.js.map +1 -0
  230. package/dist/src/capabilities/sources/update.verb.js +55 -0
  231. package/dist/src/capabilities/sources/update.verb.js.map +1 -0
  232. package/dist/src/capabilities/upgrade/index.js +5 -0
  233. package/dist/src/capabilities/upgrade/index.js.map +1 -0
  234. package/dist/src/capabilities/upgrade/runUpgrade.js +99 -0
  235. package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
  236. package/dist/src/capabilities/upgrade/types.js +5 -0
  237. package/dist/src/capabilities/upgrade/types.js.map +1 -0
  238. package/dist/src/capabilities/upgrade/upgrade.render.js +44 -0
  239. package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
  240. package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
  241. package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
  242. package/dist/src/capabilities/version/index.js +10 -0
  243. package/dist/src/capabilities/version/index.js.map +1 -0
  244. package/dist/src/capabilities/version/version.verb.js +36 -0
  245. package/dist/src/capabilities/version/version.verb.js.map +1 -0
  246. package/dist/src/constants.js +82 -0
  247. package/dist/src/constants.js.map +1 -0
  248. package/dist/src/index.js +12 -0
  249. package/dist/src/index.js.map +1 -0
  250. package/dist/src/kernel/completion/complete.js +66 -0
  251. package/dist/src/kernel/completion/complete.js.map +1 -0
  252. package/dist/src/kernel/completion/emitScripts.js +92 -0
  253. package/dist/src/kernel/completion/emitScripts.js.map +1 -0
  254. package/dist/src/kernel/completion/entitySource.js +285 -0
  255. package/dist/src/kernel/completion/entitySource.js.map +1 -0
  256. package/dist/src/kernel/completion/index.js +14 -0
  257. package/dist/src/kernel/completion/index.js.map +1 -0
  258. package/dist/src/kernel/completion/model.js +301 -0
  259. package/dist/src/kernel/completion/model.js.map +1 -0
  260. package/dist/src/kernel/completion/parse.js +253 -0
  261. package/dist/src/kernel/completion/parse.js.map +1 -0
  262. package/dist/src/kernel/completion/rank.js +101 -0
  263. package/dist/src/kernel/completion/rank.js.map +1 -0
  264. package/dist/src/kernel/completion/resolve.js +100 -0
  265. package/dist/src/kernel/completion/resolve.js.map +1 -0
  266. package/dist/src/kernel/completion/templates/bash.js +209 -0
  267. package/dist/src/kernel/completion/templates/bash.js.map +1 -0
  268. package/dist/src/kernel/completion/templates/fish.js +214 -0
  269. package/dist/src/kernel/completion/templates/fish.js.map +1 -0
  270. package/dist/src/kernel/completion/templates/index.js +23 -0
  271. package/dist/src/kernel/completion/templates/index.js.map +1 -0
  272. package/dist/src/kernel/completion/templates/shared.js +98 -0
  273. package/dist/src/kernel/completion/templates/shared.js.map +1 -0
  274. package/dist/src/kernel/completion/templates/zsh.js +201 -0
  275. package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
  276. package/dist/src/kernel/completion/types.js +13 -0
  277. package/dist/src/kernel/completion/types.js.map +1 -0
  278. package/dist/src/kernel/config/defaults.js +17 -0
  279. package/dist/src/kernel/config/defaults.js.map +1 -0
  280. package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
  281. package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
  282. package/dist/src/kernel/config/findProjectConfig.js +43 -0
  283. package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
  284. package/dist/src/kernel/config/firstRun.js +34 -0
  285. package/dist/src/kernel/config/firstRun.js.map +1 -0
  286. package/dist/src/kernel/config/globalConfig.js +79 -0
  287. package/dist/src/kernel/config/globalConfig.js.map +1 -0
  288. package/dist/src/kernel/config/index.js +16 -0
  289. package/dist/src/kernel/config/index.js.map +1 -0
  290. package/dist/src/kernel/config/paths.js +35 -0
  291. package/dist/src/kernel/config/paths.js.map +1 -0
  292. package/dist/src/kernel/config/readConfig.js +78 -0
  293. package/dist/src/kernel/config/readConfig.js.map +1 -0
  294. package/dist/src/kernel/config/schema.js +130 -0
  295. package/dist/src/kernel/config/schema.js.map +1 -0
  296. package/dist/src/kernel/config/types.js +19 -0
  297. package/dist/src/kernel/config/types.js.map +1 -0
  298. package/dist/src/kernel/config/writeConfigField.js +59 -0
  299. package/dist/src/kernel/config/writeConfigField.js.map +1 -0
  300. package/dist/src/kernel/copy.js +43 -0
  301. package/dist/src/kernel/copy.js.map +1 -0
  302. package/dist/src/kernel/error/PragmaError.js +149 -0
  303. package/dist/src/kernel/error/PragmaError.js.map +1 -0
  304. package/dist/src/kernel/error/constants.js +40 -0
  305. package/dist/src/kernel/error/constants.js.map +1 -0
  306. package/dist/src/kernel/error/fromTaskError.js +96 -0
  307. package/dist/src/kernel/error/fromTaskError.js.map +1 -0
  308. package/dist/src/kernel/error/index.js +13 -0
  309. package/dist/src/kernel/error/index.js.map +1 -0
  310. package/dist/src/kernel/error/recovery.js +52 -0
  311. package/dist/src/kernel/error/recovery.js.map +1 -0
  312. package/dist/src/kernel/error/renderError.js +115 -0
  313. package/dist/src/kernel/error/renderError.js.map +1 -0
  314. package/dist/src/kernel/error/serialize.js +25 -0
  315. package/dist/src/kernel/error/serialize.js.map +1 -0
  316. package/dist/src/kernel/error/types.js +9 -0
  317. package/dist/src/kernel/error/types.js.map +1 -0
  318. package/dist/src/kernel/index.js +25 -0
  319. package/dist/src/kernel/index.js.map +1 -0
  320. package/dist/src/kernel/packs/collect.js +187 -0
  321. package/dist/src/kernel/packs/collect.js.map +1 -0
  322. package/dist/src/kernel/packs/compile.js +304 -0
  323. package/dist/src/kernel/packs/compile.js.map +1 -0
  324. package/dist/src/kernel/packs/disclosure.js +76 -0
  325. package/dist/src/kernel/packs/disclosure.js.map +1 -0
  326. package/dist/src/kernel/packs/glob.js +38 -0
  327. package/dist/src/kernel/packs/glob.js.map +1 -0
  328. package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
  329. package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
  330. package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
  331. package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
  332. package/dist/src/kernel/packs/graphql/index.js +20 -0
  333. package/dist/src/kernel/packs/graphql/index.js.map +1 -0
  334. package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
  335. package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
  336. package/dist/src/kernel/packs/index.js +34 -0
  337. package/dist/src/kernel/packs/index.js.map +1 -0
  338. package/dist/src/kernel/packs/iri.js +110 -0
  339. package/dist/src/kernel/packs/iri.js.map +1 -0
  340. package/dist/src/kernel/packs/renderPack.js +129 -0
  341. package/dist/src/kernel/packs/renderPack.js.map +1 -0
  342. package/dist/src/kernel/packs/resolveEntity.js +223 -0
  343. package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
  344. package/dist/src/kernel/packs/runBodies.js +87 -0
  345. package/dist/src/kernel/packs/runBodies.js.map +1 -0
  346. package/dist/src/kernel/packs/sample.js +56 -0
  347. package/dist/src/kernel/packs/sample.js.map +1 -0
  348. package/dist/src/kernel/packs/schema.js +369 -0
  349. package/dist/src/kernel/packs/schema.js.map +1 -0
  350. package/dist/src/kernel/packs/sparql/applyFilters.js +68 -0
  351. package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
  352. package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
  353. package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
  354. package/dist/src/kernel/packs/sparql/buildLookupQuery.js +217 -0
  355. package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
  356. package/dist/src/kernel/packs/sparql/escape.js +21 -0
  357. package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
  358. package/dist/src/kernel/packs/sparql/index.js +31 -0
  359. package/dist/src/kernel/packs/sparql/index.js.map +1 -0
  360. package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
  361. package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
  362. package/dist/src/kernel/packs/types.js +30 -0
  363. package/dist/src/kernel/packs/types.js.map +1 -0
  364. package/dist/src/kernel/packs/uniqueness.js +30 -0
  365. package/dist/src/kernel/packs/uniqueness.js.map +1 -0
  366. package/dist/src/kernel/project/cli/buildProgram.js +263 -0
  367. package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
  368. package/dist/src/kernel/project/cli/constants.js +27 -0
  369. package/dist/src/kernel/project/cli/constants.js.map +1 -0
  370. package/dist/src/kernel/project/cli/dispatch.js +420 -0
  371. package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
  372. package/dist/src/kernel/project/cli/exitCodes.js +66 -0
  373. package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
  374. package/dist/src/kernel/project/cli/globalFlags.js +216 -0
  375. package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
  376. package/dist/src/kernel/project/cli/helpFormat.js +59 -0
  377. package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
  378. package/dist/src/kernel/project/cli/index.js +14 -0
  379. package/dist/src/kernel/project/cli/index.js.map +1 -0
  380. package/dist/src/kernel/project/cli/rootHelp.js +197 -0
  381. package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
  382. package/dist/src/kernel/project/cli/suggest.js +75 -0
  383. package/dist/src/kernel/project/cli/suggest.js.map +1 -0
  384. package/dist/src/kernel/project/cli/suggestNames.js +96 -0
  385. package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
  386. package/dist/src/kernel/project/cli/verbHelp.js +131 -0
  387. package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
  388. package/dist/src/kernel/project/mcp/buildServer.js +67 -0
  389. package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
  390. package/dist/src/kernel/project/mcp/envelope.js +37 -0
  391. package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
  392. package/dist/src/kernel/project/mcp/index.js +8 -0
  393. package/dist/src/kernel/project/mcp/index.js.map +1 -0
  394. package/dist/src/kernel/project/mcp/instructions.js +44 -0
  395. package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
  396. package/dist/src/kernel/project/mcp/mcpError.js +42 -0
  397. package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
  398. package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
  399. package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
  400. package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
  401. package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
  402. package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
  403. package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
  404. package/dist/src/kernel/project/mcp/registerVerb.js +300 -0
  405. package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
  406. package/dist/src/kernel/project/mcp/serve.js +35 -0
  407. package/dist/src/kernel/project/mcp/serve.js.map +1 -0
  408. package/dist/src/kernel/render/compactUri.js +24 -0
  409. package/dist/src/kernel/render/compactUri.js.map +1 -0
  410. package/dist/src/kernel/render/contracts.js +10 -0
  411. package/dist/src/kernel/render/contracts.js.map +1 -0
  412. package/dist/src/kernel/render/disclosure.js +34 -0
  413. package/dist/src/kernel/render/disclosure.js.map +1 -0
  414. package/dist/src/kernel/render/envelope.js +30 -0
  415. package/dist/src/kernel/render/envelope.js.map +1 -0
  416. package/dist/src/kernel/render/formatters.js +27 -0
  417. package/dist/src/kernel/render/formatters.js.map +1 -0
  418. package/dist/src/kernel/render/index.js +15 -0
  419. package/dist/src/kernel/render/index.js.map +1 -0
  420. package/dist/src/kernel/render/prefixes.js +46 -0
  421. package/dist/src/kernel/render/prefixes.js.map +1 -0
  422. package/dist/src/kernel/render/renderers.js +468 -0
  423. package/dist/src/kernel/render/renderers.js.map +1 -0
  424. package/dist/src/kernel/render/style.js +85 -0
  425. package/dist/src/kernel/render/style.js.map +1 -0
  426. package/dist/src/kernel/render/turtle.js +194 -0
  427. package/dist/src/kernel/render/turtle.js.map +1 -0
  428. package/dist/src/kernel/render/writeStdout.js +43 -0
  429. package/dist/src/kernel/render/writeStdout.js.map +1 -0
  430. package/dist/src/kernel/runtime/boot.js +49 -0
  431. package/dist/src/kernel/runtime/boot.js.map +1 -0
  432. package/dist/src/kernel/runtime/facade.js +39 -0
  433. package/dist/src/kernel/runtime/facade.js.map +1 -0
  434. package/dist/src/kernel/runtime/graphpack/build.js +122 -0
  435. package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
  436. package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
  437. package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
  438. package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
  439. package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
  440. package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
  441. package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
  442. package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
  443. package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
  444. package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
  445. package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
  446. package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
  447. package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
  448. package/dist/src/kernel/runtime/graphpack/index.js +11 -0
  449. package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
  450. package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
  451. package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
  452. package/dist/src/kernel/runtime/graphpack/read.js +92 -0
  453. package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
  454. package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
  455. package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
  456. package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
  457. package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
  458. package/dist/src/kernel/runtime/graphpack/types.js +55 -0
  459. package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
  460. package/dist/src/kernel/runtime/index.js +8 -0
  461. package/dist/src/kernel/runtime/index.js.map +1 -0
  462. package/dist/src/kernel/runtime/loadSession.js +34 -0
  463. package/dist/src/kernel/runtime/loadSession.js.map +1 -0
  464. package/dist/src/kernel/runtime/paths.js +78 -0
  465. package/dist/src/kernel/runtime/paths.js.map +1 -0
  466. package/dist/src/kernel/runtime/probe.js +37 -0
  467. package/dist/src/kernel/runtime/probe.js.map +1 -0
  468. package/dist/src/kernel/runtime/readEntity.js +363 -0
  469. package/dist/src/kernel/runtime/readEntity.js.map +1 -0
  470. package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
  471. package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
  472. package/dist/src/kernel/runtime/refs/index.js +29 -0
  473. package/dist/src/kernel/runtime/refs/index.js.map +1 -0
  474. package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
  475. package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
  476. package/dist/src/kernel/runtime/refs/resolve.js +332 -0
  477. package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
  478. package/dist/src/kernel/runtime/resolveSources.js +62 -0
  479. package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
  480. package/dist/src/kernel/runtime/store.js +75 -0
  481. package/dist/src/kernel/runtime/store.js.map +1 -0
  482. package/dist/src/kernel/runtime/storeReadiness.js +51 -0
  483. package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
  484. package/dist/src/kernel/runtime/types.js +11 -0
  485. package/dist/src/kernel/runtime/types.js.map +1 -0
  486. package/dist/src/kernel/spec/asVerb.js +21 -0
  487. package/dist/src/kernel/spec/asVerb.js.map +1 -0
  488. package/dist/src/kernel/spec/emitReference.js +578 -0
  489. package/dist/src/kernel/spec/emitReference.js.map +1 -0
  490. package/dist/src/kernel/spec/emitSurface.js +202 -0
  491. package/dist/src/kernel/spec/emitSurface.js.map +1 -0
  492. package/dist/src/kernel/spec/index.js +11 -0
  493. package/dist/src/kernel/spec/index.js.map +1 -0
  494. package/dist/src/kernel/spec/surfaceConformance.js +103 -0
  495. package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
  496. package/dist/src/kernel/spec/types.js +14 -0
  497. package/dist/src/kernel/spec/types.js.map +1 -0
  498. package/dist/src/kernel/spec/validate.js +110 -0
  499. package/dist/src/kernel/spec/validate.js.map +1 -0
  500. package/dist/src/kernel/vocabulary.js +97 -0
  501. package/dist/src/kernel/vocabulary.js.map +1 -0
  502. package/dist/src/types.js +11 -0
  503. package/dist/src/types.js.map +1 -0
  504. package/package.json +20 -22
  505. package/pragma.conf.ts +249 -60
  506. package/src/bin.ts +267 -82
  507. package/src/capabilities/block.parity.test.ts +6 -3
  508. package/src/capabilities/capabilities/capabilities.render.ts +1 -1
  509. package/src/capabilities/capabilities/capabilities.verb.ts +1 -1
  510. package/src/capabilities/capabilities/catalog.ts +3 -3
  511. package/src/capabilities/capabilities/hints.ts +32 -7
  512. package/src/capabilities/capabilities/index.ts +1 -1
  513. package/src/capabilities/colophon/collectColophon.ts +35 -24
  514. package/src/capabilities/colophon/colophon.render.ts +25 -1
  515. package/src/capabilities/colophon/colophon.test.ts +42 -21
  516. package/src/capabilities/colophon/colophon.verb.ts +4 -4
  517. package/src/capabilities/config/collectConfigShow.test.ts +1 -0
  518. package/src/capabilities/config/collectConfigShow.ts +3 -3
  519. package/src/capabilities/config/field.render.ts +4 -5
  520. package/src/capabilities/config/fields.ts +17 -10
  521. package/src/capabilities/config/get.verb.ts +70 -0
  522. package/src/capabilities/config/getUnset.test.ts +264 -0
  523. package/src/capabilities/config/index.ts +5 -1
  524. package/src/capabilities/config/runField.ts +40 -22
  525. package/src/capabilities/config/runGet.ts +34 -0
  526. package/src/capabilities/config/runSet.ts +35 -9
  527. package/src/capabilities/config/set.test.ts +48 -14
  528. package/src/capabilities/config/set.verb.ts +8 -7
  529. package/src/capabilities/config/show.render.ts +1 -1
  530. package/src/capabilities/config/show.verb.ts +9 -6
  531. package/src/capabilities/config/types.ts +18 -4
  532. package/src/capabilities/config/unset.verb.ts +58 -0
  533. package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
  534. package/src/capabilities/create/byteEquality.test.ts +25 -11
  535. package/src/capabilities/create/cliProjection.ts +227 -0
  536. package/src/capabilities/create/constants.ts +36 -61
  537. package/src/capabilities/create/create.mcp.test.ts +89 -5
  538. package/src/capabilities/create/create.render.ts +71 -7
  539. package/src/capabilities/create/create.test.ts +433 -219
  540. package/src/capabilities/create/create.verb.ts +297 -328
  541. package/src/capabilities/create/createGrammar.test.ts +865 -0
  542. package/src/capabilities/create/createHelp.ts +71 -0
  543. package/src/capabilities/create/createSurface.generated.ts +400 -0
  544. package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
  545. package/src/capabilities/create/cwdJail.test.ts +24 -5
  546. package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
  547. package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
  548. package/src/capabilities/create/index.ts +7 -4
  549. package/src/capabilities/create/messages.ts +18 -0
  550. package/src/capabilities/create/mount.ts +391 -0
  551. package/src/capabilities/create/pathJail.test.ts +90 -0
  552. package/src/capabilities/create/pathJail.ts +8 -5
  553. package/src/capabilities/create/pickGenerator.ts +23 -35
  554. package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
  555. package/src/capabilities/create/types.ts +20 -0
  556. package/src/capabilities/distribution.test.ts +3 -1
  557. package/src/capabilities/distribution.ts +10 -15
  558. package/src/capabilities/doctor/checks/checkKeStore.ts +7 -5
  559. package/src/capabilities/doctor/checks/checkPackageRefs.ts +6 -4
  560. package/src/capabilities/doctor/checks/checkPragmaVersion.ts +2 -2
  561. package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +72 -27
  562. package/src/capabilities/doctor/checks/checkShellCompletions.ts +59 -13
  563. package/src/capabilities/doctor/checks/index.ts +27 -0
  564. package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
  565. package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
  566. package/src/capabilities/doctor/checks/targetHealth.ts +274 -0
  567. package/src/capabilities/doctor/doctor.render.test.ts +18 -7
  568. package/src/capabilities/doctor/doctor.render.ts +43 -19
  569. package/src/capabilities/doctor/doctor.test.ts +123 -34
  570. package/src/capabilities/doctor/doctor.verb.ts +3 -3
  571. package/src/capabilities/doctor/runChecks.ts +62 -63
  572. package/src/capabilities/doctor/types.ts +20 -4
  573. package/src/capabilities/emptyRecovery.test.ts +13 -8
  574. package/src/capabilities/graph/examples.exec.test.ts +107 -0
  575. package/src/capabilities/graph/index.ts +1 -1
  576. package/src/capabilities/graph/inspect.render.ts +70 -22
  577. package/src/capabilities/graph/inspect.test.ts +260 -5
  578. package/src/capabilities/graph/inspect.verb.ts +18 -6
  579. package/src/capabilities/graph/query.render.ts +15 -3
  580. package/src/capabilities/graph/query.verb.ts +3 -3
  581. package/src/capabilities/graph/runQuery.ts +2 -3
  582. package/src/capabilities/index.ts +3 -1
  583. package/src/capabilities/info/collectInfo.ts +5 -4
  584. package/src/capabilities/info/info.render.ts +1 -1
  585. package/src/capabilities/info/info.verb.ts +1 -1
  586. package/src/capabilities/lazy.test.ts +32 -0
  587. package/src/capabilities/meta/complete.verb.ts +1 -1
  588. package/src/capabilities/meta/index.ts +1 -1
  589. package/src/capabilities/meta/mcp.verb.ts +10 -8
  590. package/src/capabilities/ontology/index.ts +15 -11
  591. package/src/capabilities/ontology/ontology.test.ts +6 -55
  592. package/src/capabilities/ontology/queries.ts +2 -2
  593. package/src/capabilities/ontology/render.ts +3 -4
  594. package/src/capabilities/ontology/verbs.ts +27 -68
  595. package/src/capabilities/prompt/index.ts +2 -2
  596. package/src/capabilities/prompt/prompt.render.ts +6 -2
  597. package/src/capabilities/prompt/types.ts +1 -1
  598. package/src/capabilities/prompt/verbs.ts +4 -5
  599. package/src/capabilities/reference.test.ts +63 -0
  600. package/src/capabilities/resources/provider.ts +342 -85
  601. package/src/capabilities/resources/resources.test.ts +355 -59
  602. package/src/capabilities/setup/buildPlan.ts +236 -0
  603. package/src/capabilities/setup/index.ts +7 -7
  604. package/src/capabilities/setup/mode.ts +74 -0
  605. package/src/capabilities/setup/operations/index.ts +74 -0
  606. package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
  607. package/src/capabilities/setup/operations/setupConfig.ts +124 -0
  608. package/src/capabilities/setup/operations/setupGenerator.ts +396 -326
  609. package/src/capabilities/setup/operations/setupLsp.ts +329 -68
  610. package/src/capabilities/setup/operations/setupMcp.ts +137 -97
  611. package/src/capabilities/setup/operations/setupSkills.ts +336 -108
  612. package/src/capabilities/setup/plan.render.ts +241 -0
  613. package/src/capabilities/setup/plan.ts +236 -0
  614. package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
  615. package/src/capabilities/setup/setup.render.test.ts +281 -73
  616. package/src/capabilities/setup/setup.render.ts +45 -77
  617. package/src/capabilities/setup/setup.test.ts +972 -209
  618. package/src/capabilities/setup/setup.verb.ts +223 -71
  619. package/src/capabilities/setup/shell.test.ts +86 -0
  620. package/src/capabilities/setup/shell.ts +137 -11
  621. package/src/capabilities/setup/targets.ts +367 -0
  622. package/src/capabilities/setup/types.ts +18 -57
  623. package/src/capabilities/shared/assertExecOk.ts +68 -10
  624. package/src/capabilities/shared/index.ts +32 -0
  625. package/src/capabilities/shared/packageManager.test.ts +55 -0
  626. package/src/capabilities/shared/packageManager.ts +62 -6
  627. package/src/capabilities/skill/discover.ts +37 -5
  628. package/src/capabilities/skill/index.ts +1 -1
  629. package/src/capabilities/skill/render.ts +10 -9
  630. package/src/capabilities/skill/skill.test.ts +7 -5
  631. package/src/capabilities/skill/verbs.ts +3 -4
  632. package/src/capabilities/sources/collectStatus.ts +7 -2
  633. package/src/capabilities/sources/index.ts +1 -1
  634. package/src/capabilities/sources/installSkills.ts +84 -7
  635. package/src/capabilities/sources/runUpdate.ts +53 -21
  636. package/src/capabilities/sources/sources.test.ts +154 -2
  637. package/src/capabilities/sources/status.render.ts +1 -1
  638. package/src/capabilities/sources/status.verb.ts +1 -1
  639. package/src/capabilities/sources/update.render.ts +1 -1
  640. package/src/capabilities/sources/update.verb.ts +1 -1
  641. package/src/capabilities/surface.test.ts +134 -17
  642. package/src/capabilities/upgrade/runUpgrade.ts +8 -8
  643. package/src/capabilities/upgrade/upgrade.render.ts +4 -5
  644. package/src/capabilities/upgrade/upgrade.test.ts +3 -3
  645. package/src/capabilities/upgrade/upgrade.verb.ts +1 -1
  646. package/src/capabilities/version/index.ts +12 -0
  647. package/src/capabilities/version/version.test.ts +66 -0
  648. package/src/capabilities/version/version.verb.ts +39 -0
  649. package/src/constants.ts +31 -1
  650. package/src/identity.test.ts +40 -25
  651. package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +15 -13
  652. package/src/kernel/completion/complete.test.ts +12 -2
  653. package/src/kernel/completion/complete.ts +1 -1
  654. package/src/kernel/completion/emitScripts.ts +1 -1
  655. package/src/kernel/completion/entitySource.test.ts +1 -1
  656. package/src/kernel/completion/entitySource.ts +21 -8
  657. package/src/kernel/completion/model.test.ts +164 -12
  658. package/src/kernel/completion/model.ts +94 -14
  659. package/src/kernel/completion/parse.test.ts +4 -7
  660. package/src/kernel/completion/parse.ts +15 -0
  661. package/src/kernel/completion/resolve.test.ts +0 -1
  662. package/src/kernel/completion/safety.test.ts +34 -26
  663. package/src/kernel/completion/shellDrive.test.ts +28 -9
  664. package/src/kernel/completion/templates/bash.ts +7 -2
  665. package/src/kernel/completion/templates/index.ts +23 -0
  666. package/src/kernel/completion/types.ts +7 -0
  667. package/src/kernel/config/defaults.test.ts +25 -2
  668. package/src/kernel/config/defaults.ts +4 -3
  669. package/src/kernel/config/evaluateProjectConfig.ts +31 -8
  670. package/src/kernel/config/firstRun.test.ts +44 -38
  671. package/src/kernel/config/firstRun.ts +24 -88
  672. package/src/kernel/config/index.ts +1 -1
  673. package/src/kernel/config/readConfig.test.ts +6 -3
  674. package/src/kernel/config/readConfig.ts +1 -1
  675. package/src/kernel/config/schema.ts +3 -1
  676. package/src/kernel/config/types.ts +3 -1
  677. package/src/kernel/copy.test.ts +34 -4
  678. package/src/kernel/copy.ts +54 -0
  679. package/src/kernel/error/PragmaError.test.ts +5 -2
  680. package/src/kernel/error/PragmaError.ts +4 -2
  681. package/src/kernel/error/constants.ts +7 -5
  682. package/src/kernel/error/fromTaskError.ts +28 -6
  683. package/src/kernel/error/recovery.ts +14 -0
  684. package/src/kernel/error/renderError.ts +42 -1
  685. package/src/kernel/error/types.ts +21 -1
  686. package/src/kernel/index.ts +26 -0
  687. package/src/kernel/packs/collect.ts +12 -16
  688. package/src/kernel/packs/compile.test.ts +130 -1
  689. package/src/kernel/packs/compile.ts +93 -3
  690. package/src/kernel/packs/disclosure.ts +2 -2
  691. package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
  692. package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +3 -4
  693. package/src/kernel/packs/graphql/index.ts +20 -0
  694. package/src/kernel/packs/index.ts +40 -0
  695. package/src/kernel/packs/iri.test.ts +73 -0
  696. package/src/kernel/packs/iri.ts +66 -14
  697. package/src/kernel/packs/renderPack.ts +24 -5
  698. package/src/kernel/packs/resolveEntity.test.ts +213 -0
  699. package/src/kernel/packs/resolveEntity.ts +112 -18
  700. package/src/kernel/packs/runBodies.ts +2 -3
  701. package/src/kernel/packs/sample.ts +1 -1
  702. package/src/kernel/packs/schema.ts +18 -1
  703. package/src/kernel/packs/sparql/applyFilters.ts +16 -17
  704. package/src/kernel/packs/sparql/buildLookupQuery.ts +75 -3
  705. package/src/kernel/packs/sparql/index.ts +37 -0
  706. package/src/kernel/packs/sparql/runSelect.test.ts +1 -1
  707. package/src/kernel/packs/sparql/runSelect.ts +3 -4
  708. package/src/kernel/packs/toolDescription.test.ts +42 -3
  709. package/src/kernel/packs/types.ts +13 -0
  710. package/src/kernel/packs/uniqueness.ts +1 -1
  711. package/src/kernel/project/cli/buildProgram.test.ts +147 -12
  712. package/src/kernel/project/cli/buildProgram.ts +77 -18
  713. package/src/kernel/project/cli/constants.ts +34 -0
  714. package/src/kernel/project/cli/dispatch.test.ts +160 -3
  715. package/src/kernel/project/cli/dispatch.ts +222 -42
  716. package/src/kernel/project/cli/exitCodes.ts +1 -1
  717. package/src/kernel/project/cli/globalFlags.test.ts +117 -1
  718. package/src/kernel/project/cli/globalFlags.ts +130 -30
  719. package/src/kernel/project/cli/helpFormat.ts +13 -0
  720. package/src/kernel/project/cli/rootHelp.ts +41 -12
  721. package/src/kernel/project/cli/suggest.test.ts +33 -1
  722. package/src/kernel/project/cli/suggest.ts +25 -1
  723. package/src/kernel/project/cli/verbHelp.test.ts +30 -0
  724. package/src/kernel/project/cli/verbHelp.ts +23 -7
  725. package/src/kernel/project/mcp/buildServer.ts +7 -4
  726. package/src/kernel/project/mcp/envelope.ts +2 -2
  727. package/src/kernel/project/mcp/instructions.ts +2 -2
  728. package/src/kernel/project/mcp/mcpError.ts +1 -1
  729. package/src/kernel/project/mcp/parity.test.ts +5 -2
  730. package/src/kernel/project/mcp/prompts/index.ts +37 -0
  731. package/src/kernel/project/mcp/prompts/source.ts +2 -2
  732. package/src/kernel/project/mcp/registerVerb.ts +35 -9
  733. package/src/kernel/project/mcp/serve.ts +2 -2
  734. package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
  735. package/src/kernel/render/contracts.ts +21 -0
  736. package/src/kernel/render/envelope.ts +2 -3
  737. package/src/kernel/render/formatters.ts +1 -1
  738. package/src/kernel/render/renderers.test.ts +243 -6
  739. package/src/kernel/render/renderers.ts +222 -20
  740. package/src/kernel/render/style.test.ts +75 -24
  741. package/src/kernel/render/style.ts +31 -1
  742. package/src/kernel/render/turtle.ts +222 -0
  743. package/src/kernel/runtime/graphpack/buildIndex.ts +1 -1
  744. package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +3 -3
  745. package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +1 -1
  746. package/src/kernel/runtime/graphpack/embedded.ts +3 -3
  747. package/src/kernel/runtime/graphpack/manifest.ts +1 -1
  748. package/src/kernel/runtime/graphpack/read.ts +1 -2
  749. package/src/kernel/runtime/loadSession.ts +1 -1
  750. package/src/kernel/runtime/probe.ts +6 -6
  751. package/src/kernel/runtime/readEntity.ts +472 -28
  752. package/src/kernel/runtime/refs/index.ts +39 -0
  753. package/src/kernel/runtime/refs/parseRef.ts +2 -2
  754. package/src/kernel/runtime/refs/resolve.ts +4 -4
  755. package/src/kernel/runtime/storeReadiness.ts +1 -2
  756. package/src/kernel/runtime/types.ts +15 -1
  757. package/src/kernel/runtime/wasmEmbed.test.ts +37 -39
  758. package/src/kernel/spec/emitReference.ts +105 -30
  759. package/src/kernel/spec/emitSurface.ts +48 -6
  760. package/src/kernel/spec/surfaceConformance.test.ts +4 -2
  761. package/src/kernel/spec/types.ts +248 -4
  762. package/src/testing/behavioral/docExamples.test.ts +14 -0
  763. package/src/testing/behavioral/errorMatrix.mcp.test.ts +2 -2
  764. package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
  765. package/src/testing/behavioral/journeys.cli.test.ts +1 -1
  766. package/src/testing/behavioral/journeys.defaultPack.test.ts +7 -7
  767. package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
  768. package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
  769. package/src/testing/behavioral/journeys.packageStories.test.ts +4 -4
  770. package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
  771. package/src/testing/behavioral/mcpSurface.test.ts +1 -1
  772. package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
  773. package/src/testing/eval/cases/effectful.ts +3 -2
  774. package/src/testing/fixtures/blockGraph.ts +79 -0
  775. package/src/testing/fixtures/graph/canonical.ts +88 -2
  776. package/src/testing/fixtures/graph/defaultPack.ts +1 -1
  777. package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
  778. package/src/testing/helpers/projectMcp.ts +32 -6
  779. package/src/testing/helpers/runCli.ts +35 -18
  780. package/src/testing/perf/budgets.test.ts +20 -9
  781. package/src/testing/perf/budgets.ts +58 -9
  782. package/src/testing/perf/codegen.test.ts +126 -0
  783. package/src/testing/perf/globalSetup.test.ts +286 -0
  784. package/src/testing/perf/globalSetup.ts +505 -23
  785. package/src/testing/perf/measure.test.ts +38 -0
  786. package/src/testing/perf/measure.ts +23 -4
  787. package/src/testing/setupXdgIsolation.ts +81 -21
  788. package/src/testing/tempRoot.globalSetup.ts +122 -0
  789. package/dist/pragma +0 -0
  790. package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -189
  791. package/src/capabilities/create/templates.embedded.generated.ts +0 -28
  792. package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -42
  793. package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
  794. package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -68
  795. package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -61
  796. package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
  797. package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
  798. package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
@@ -1,38 +1,86 @@
1
1
  /**
2
- * Formatters for `graph inspect` — predicate/object groups, prefix-compacted.
2
+ * Formatters for `graph inspect` — the entity's neighbourhood in three shapes.
3
+ *
4
+ * Terms arrive ALREADY compacted and named: the reader does it against the
5
+ * store's own merged prefix map, which is the map the graph was actually built
6
+ * with, so these formatters neither carry a prefix map nor re-derive one. They
7
+ * choose between the forms the reader supplies and nothing more.
3
8
  */
4
9
 
5
- import { compactUri } from "../../kernel/render/compactUri.js";
6
- import { DEFAULT_PREFIX_MAP } from "../../kernel/render/prefixes.js";
7
- import type { InspectResult } from "../../kernel/runtime/readEntity.js";
8
- import type { Formatters } from "../../kernel/spec/types.js";
10
+ import { toTurtle } from "../../kernel/render/turtle.js";
11
+ import type {
12
+ InboundGroup,
13
+ InspectResult,
14
+ ReadTerm,
15
+ } from "../../kernel/runtime/readEntity.js";
16
+ import type { Formatters } from "../../kernel/spec/index.js";
9
17
 
10
- const compact = (value: string): string =>
11
- compactUri(value, DEFAULT_PREFIX_MAP);
18
+ /** The short form of a term: prefixed when there is one, else the raw value. */
19
+ const short = (term: ReadTerm): string => term.prefixed ?? term.value;
20
+
21
+ /** A term as a reader should see it — short form, with its name when known. */
22
+ const named = (term: ReadTerm): string =>
23
+ term.title ? `${short(term)} (${term.title})` : short(term);
24
+
25
+ /**
26
+ * `predicate (330, sample of 5)` — the count is the truth, the list is not.
27
+ *
28
+ * A roster and a truncated relation read differently on purpose: "sample of"
29
+ * tells a reader that paging will not produce the rest and the noun's list verb
30
+ * is where the full set lives, where "showing" invites them to ask for more.
31
+ */
32
+ function inboundHeading(group: InboundGroup): string {
33
+ if (group.sampled) {
34
+ return `${short(group.predicate)} (${group.count}, sample of ${group.subjects.length})`;
35
+ }
36
+ const suffix = group.truncated
37
+ ? `${group.count}, showing ${group.subjects.length}`
38
+ : `${group.count}`;
39
+ return `${short(group.predicate)} (${suffix})`;
40
+ }
12
41
 
13
42
  export const inspectFormatters: Formatters<InspectResult> = {
14
43
  plain(data) {
15
44
  const title = data.label
16
- ? `${compact(data.uri)} — ${data.label}`
17
- : compact(data.uri);
45
+ ? `${short({ termType: "NamedNode", value: data.uri, ...(data.prefixed ? { prefixed: data.prefixed } : {}) })} — ${data.label}`
46
+ : (data.prefixed ?? data.uri);
18
47
  const lines = [title, "═".repeat(Math.max(title.length, 24)), ""];
19
48
  for (const group of data.groups) {
20
- lines.push(` ${compact(group.predicate)}:`);
21
- for (const object of group.objects) lines.push(` ${compact(object)}`);
49
+ lines.push(` ${short(group.predicate)}:`);
50
+ for (const object of group.objects) lines.push(` ${named(object)}`);
22
51
  }
23
- return lines.join("\n").trimEnd();
24
- },
25
- llm(data) {
26
- const lines = [
27
- `## ${compact(data.uri)}${data.label ? ` — ${data.label}` : ""}`,
28
- "",
29
- ];
30
- for (const group of data.groups) {
31
- lines.push(
32
- `- **${compact(group.predicate)}**: ${group.objects.map(compact).join(", ")}`,
33
- );
52
+ for (const [via, rows] of Object.entries(data.nested)) {
53
+ lines.push("", ` ${via}:`);
54
+ for (const row of rows) {
55
+ // Values are TERMS; `String(term)` rendered every nested field as
56
+ // `[object Object]`, which made the whole plain-format record unreadable.
57
+ const fields = Object.entries(row)
58
+ .map(([key, value]) => `${key}=${named(value)}`)
59
+ .join(" ");
60
+ lines.push(` ${fields}`);
61
+ }
62
+ }
63
+ if (data.inbound.length > 0) {
64
+ lines.push("", " Referenced by:");
65
+ for (const group of data.inbound) {
66
+ lines.push(` ${inboundHeading(group)}`);
67
+ for (const subject of group.subjects) {
68
+ lines.push(` ${named(subject)}`);
69
+ }
70
+ }
34
71
  }
35
72
  return lines.join("\n").trimEnd();
36
73
  },
74
+ /**
75
+ * The agent-facing format IS Turtle — same bytes the `pragma:{+uri}` resource
76
+ * read serves, which is what keeps the mirror contract meaningful now that the
77
+ * two are no longer both JSON. Measured on one button: 15.8 KB of JSON against
78
+ * 4.5 KB of Turtle for the same neighbourhood.
79
+ *
80
+ * `prefixes` comes from the reader, not from this formatter: it compacted the
81
+ * terms against the store's own merged map, so re-deriving a map here could
82
+ * only disagree with the names already in the payload.
83
+ */
84
+ llm: (data) => toTurtle(data, data.prefixes),
37
85
  json: (data) => JSON.stringify(data, null, 2),
38
86
  };
@@ -41,13 +41,185 @@ describe("graph inspect", () => {
41
41
  rt,
42
42
  )) as InspectResult;
43
43
  expect(result.uri).toBe(`${DS}button`);
44
+ expect(result.prefixed).toBe("ds:button");
44
45
  const rdfType = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type";
45
- const typeGroup = result.groups.find((g) => g.predicate === rdfType);
46
- expect(typeGroup?.objects).toContain(`${DS}Component`);
47
- const summary = result.groups.find((g) => g.predicate === `${DS}summary`);
48
- expect(summary?.objects[0]).toBe(
49
- "Primary action trigger with optional icon and label.",
46
+ const typeGroup = result.groups.find((g) => g.predicate.value === rdfType);
47
+ // The object is a NamedNode, so it compacts and stays addressable.
48
+ expect(typeGroup?.objects[0]).toMatchObject({
49
+ termType: "NamedNode",
50
+ value: `${DS}Component`,
51
+ prefixed: "ds:Component",
52
+ });
53
+ const summary = result.groups.find(
54
+ (g) => g.predicate.value === `${DS}summary`,
50
55
  );
56
+ expect(summary?.objects[0]).toMatchObject({
57
+ termType: "Literal",
58
+ value: "Primary action trigger with optional icon and label.",
59
+ });
60
+ });
61
+
62
+ it("never compacts a literal, only a named node", async () => {
63
+ // The lossy string view could not tell these apart, so a literal whose text
64
+ // began with a namespace IRI was rewritten into something that read back as
65
+ // an IRI. Reading ke's term view is what closes that: `ds:figmaLink` here
66
+ // holds a STRING that starts with the `ds:` namespace.
67
+ const result = (await inspectVerb.run(
68
+ { uri: "ds:literalTrap" },
69
+ rt,
70
+ )) as InspectResult;
71
+ const trap = result.groups.find(
72
+ (g) => g.predicate.value === `${DS}figmaLink`,
73
+ );
74
+ expect(trap?.objects[0]?.termType).toBe("Literal");
75
+ expect(trap?.objects[0]?.value).toBe(`${DS}not-an-iri`);
76
+ expect(trap?.objects[0]?.prefixed).toBeUndefined();
77
+ });
78
+
79
+ it("carries inbound relations with a true count, capped by detail", async () => {
80
+ // `ds:button.icon` is the OBJECT of `ds:hasSubcomponent` — the relation
81
+ // lives on the other side of the arrow, so a subject-only read could never
82
+ // surface who holds this subcomponent.
83
+ const result = (await inspectVerb.run(
84
+ { uri: "ds:button.icon" },
85
+ rt,
86
+ )) as InspectResult;
87
+ const held = result.inbound.find(
88
+ (g) => g.predicate.value === `${DS}hasSubcomponent`,
89
+ );
90
+ expect(held?.count).toBeGreaterThan(0);
91
+ expect(held?.subjects[0]?.prefixed).toBe("ds:button");
92
+ });
93
+
94
+ it("inlines blank nodes as records rather than dead handles", async () => {
95
+ const result = (await inspectVerb.run(
96
+ { uri: "ds:blankHolder" },
97
+ rt,
98
+ )) as InspectResult;
99
+ // The blank object itself is marked unreachable...
100
+ const via = result.groups.find(
101
+ (g) => g.predicate.value === `${DS}changeLog`,
102
+ );
103
+ expect(via?.objects[0]).toMatchObject({
104
+ termType: "BlankNode",
105
+ addressable: false,
106
+ });
107
+ // ...and its content is served as records instead. Asserted as a SET: the
108
+ // order is content-derived (see the next case), never the input order.
109
+ // Record VALUES are terms, not strings: a record's members are as much part
110
+ // of the graph as the subject's own, and flattening them would reintroduce
111
+ // the IRI-versus-literal ambiguity the term projection exists to close.
112
+ const changes = result.nested["ds:changeLog"] ?? [];
113
+ expect(changes).toHaveLength(2);
114
+ expect(changes.map((row) => row["ds:changeType"]?.value).sort()).toEqual([
115
+ "decision",
116
+ "revision",
117
+ ]);
118
+ expect(changes[0]?.["ds:changeType"]?.termType).toBe("Literal");
119
+ // `rdf:type` is hoisted to `type` rather than repeated as a field, and stays
120
+ // a NamedNode — so the Turtle serializer can write it back as `a ds:X`.
121
+ expect(changes[0]?.type).toMatchObject({
122
+ termType: "NamedNode",
123
+ prefixed: "ds:ChangeLogEntry",
124
+ });
125
+ });
126
+
127
+ it("counts every inbound edge at summary while listing none", async () => {
128
+ // The cap is what keeps a hub read bounded — this graph's worst is 335
129
+ // inbound edges. `count` must stay the TRUE total at every level: a sample
130
+ // silently passing for the whole set is how "1 implementation" becomes a
131
+ // wrong answer. `ds:global` is the tier both fixture blocks point at.
132
+ const summary = await buildFixtureRuntime({
133
+ ttl: BLOCK_TTL,
134
+ prefixes: BLOCK_PREFIXES,
135
+ detail: "summary",
136
+ });
137
+ const result = (await inspectVerb.run(
138
+ { uri: "ds:global" },
139
+ summary.rt,
140
+ )) as InspectResult;
141
+ (await summary.rt.store.get()).store.dispose();
142
+
143
+ const tier = result.inbound.find((g) => g.predicate.value === `${DS}tier`);
144
+ expect(result.detail).toBe("summary");
145
+ expect(tier?.count).toBe(2);
146
+ expect(tier?.subjects).toEqual([]);
147
+ expect(tier?.truncated).toBe(true);
148
+ // Blank-node inlining is skipped at summary — it is the expensive half.
149
+ expect(result.nested).toEqual({});
150
+ });
151
+
152
+ it("samples a roster instead of listing it, keeping the count exact", async () => {
153
+ // A relation and a roster are not the same kind of edge. `ds:tier` here
154
+ // fans in 22 deep — past the threshold — so the read shows exemplars and
155
+ // says so, rather than paging a list verb's job through a resource read.
156
+ // Listing rosters cost a `detailed` read 19.5 KB on one class of the real
157
+ // graph and 20.9 KB on one tier.
158
+ const detailed = await buildFixtureRuntime({
159
+ ttl: BLOCK_TTL,
160
+ prefixes: BLOCK_PREFIXES,
161
+ detail: "detailed",
162
+ });
163
+ const result = (await inspectVerb.run(
164
+ { uri: "ds:rosterHub" },
165
+ detailed.rt,
166
+ )) as InspectResult;
167
+ (await detailed.rt.store.get()).store.dispose();
168
+
169
+ const roster = result.inbound.find(
170
+ (g) => g.predicate.value === `${DS}tier`,
171
+ );
172
+ expect(roster?.count).toBe(22);
173
+ expect(roster?.sampled).toBe(true);
174
+ expect(roster?.truncated).toBe(true);
175
+ // Exemplars, not a page — far fewer than the 22 a listed relation would show.
176
+ expect(roster?.subjects.length).toBeLessThan(10);
177
+ expect(roster?.subjects.length).toBeGreaterThan(0);
178
+ });
179
+
180
+ it("lists a narrow relation in full, unsampled", async () => {
181
+ // The counterpart: `ds:hasSubcomponent` fans in once, so every subject is
182
+ // part of the answer and none of this bounding applies.
183
+ const result = (await inspectVerb.run(
184
+ { uri: "ds:button.icon" },
185
+ rt,
186
+ )) as InspectResult;
187
+ const held = result.inbound.find(
188
+ (g) => g.predicate.value === `${DS}hasSubcomponent`,
189
+ );
190
+ expect(held?.sampled).toBeUndefined();
191
+ expect(held?.truncated).toBeUndefined();
192
+ expect(held?.subjects).toHaveLength(held?.count ?? 0);
193
+ });
194
+
195
+ it("resolves the level from config when no flag is given", async () => {
196
+ // A resource read carries no params, so config is the level it lands on.
197
+ const configured = await buildFixtureRuntime({
198
+ ttl: BLOCK_TTL,
199
+ prefixes: BLOCK_PREFIXES,
200
+ configDetail: "summary",
201
+ detailOrigin: "project",
202
+ });
203
+ const result = (await inspectVerb.run(
204
+ { uri: "ds:global" },
205
+ configured.rt,
206
+ )) as InspectResult;
207
+ (await configured.rt.store.get()).store.dispose();
208
+ expect(result.detail).toBe("summary");
209
+ });
210
+
211
+ it("orders nested records by content, not by blank-node label", async () => {
212
+ // Oxigraph re-mints blank-node labels on every load, so ordering by them
213
+ // made two reads of the same unchanged entity disagree.
214
+ const first = (await inspectVerb.run(
215
+ { uri: "ds:blankHolder" },
216
+ rt,
217
+ )) as InspectResult;
218
+ const second = (await inspectVerb.run(
219
+ { uri: "ds:blankHolder" },
220
+ rt,
221
+ )) as InspectResult;
222
+ expect(first.nested).toEqual(second.nested);
51
223
  });
52
224
 
53
225
  it("resolves an absolute IRI to the same result", async () => {
@@ -78,3 +250,86 @@ describe("graph inspect", () => {
78
250
  ).rejects.toMatchObject({ code: "INVALID_INPUT" });
79
251
  });
80
252
  });
253
+
254
+ describe("bounds and losslessness the review surfaced", () => {
255
+ it("counts EVERY inbound predicate exactly, whatever the exemplar bound", async () => {
256
+ // One capped query answered counting and exhibiting at once, and answered
257
+ // neither: a single LIMIT applies to the whole ordered result, so the first
258
+ // predicate to fill it under-reported its own count AND every predicate
259
+ // after it vanished — while `count` promised the true total. The roster hub
260
+ // here fans in 22 deep, well past what any level exhibits.
261
+ const result = (await inspectVerb.run(
262
+ { uri: "ds:rosterHub" },
263
+ rt,
264
+ )) as InspectResult;
265
+ const roster = result.inbound.find(
266
+ (g) => g.predicate.value === `${DS}tier`,
267
+ );
268
+ expect(roster?.count).toBe(22);
269
+ // Counted in full, exhibited in part — the two are now separate questions.
270
+ expect(roster?.subjects.length).toBeLessThan(22);
271
+ // And the quiet neighbour survives the noisy one. Under the single capped
272
+ // query, a predicate ordered after one that filled the limit was dropped
273
+ // from the answer entirely.
274
+ const quiet = result.inbound.find(
275
+ (g) => g.predicate.value === `${DS}hasSubcomponent`,
276
+ );
277
+ expect(quiet?.count).toBe(1);
278
+ expect(quiet?.subjects[0]?.prefixed).toBe("ds:probe.quiet");
279
+ });
280
+
281
+ it("keeps a blank node reachable from two predicates under both", async () => {
282
+ // Keyed by node alone, whichever `via` arrived first won and the second
283
+ // edge disappeared — and Turtle filters the ordinary blank object out too,
284
+ // so nothing was left to notice the loss by.
285
+ const result = (await inspectVerb.run(
286
+ { uri: "ds:doubleLinked" },
287
+ rt,
288
+ )) as InspectResult;
289
+ expect(result.nested["ds:changeLog"]).toHaveLength(1);
290
+ expect(result.nested["ds:usageNote"]).toHaveLength(1);
291
+ });
292
+
293
+ it("says nothing about addressability at a level that exhibits none", async () => {
294
+ // At `summary` EVERY group is empty because the level shows no exemplars.
295
+ // Concluding "none individually addressable" there libels subjects that are
296
+ // perfectly nameable, so the group records what it WOULD have shown.
297
+ const summary = await buildFixtureRuntime({
298
+ ttl: BLOCK_TTL,
299
+ prefixes: BLOCK_PREFIXES,
300
+ detail: "summary",
301
+ });
302
+ const result = (await inspectVerb.run(
303
+ { uri: "ds:global" },
304
+ summary.rt,
305
+ )) as InspectResult;
306
+ (await summary.rt.store.get()).store.dispose();
307
+ const tier = result.inbound.find((g) => g.predicate.value === `${DS}tier`);
308
+ expect(tier?.exhibits).toBe(0);
309
+ expect(tier?.count).toBeGreaterThan(0);
310
+ });
311
+
312
+ it("carries the prefix map the payload was compacted against", async () => {
313
+ // A renderer that re-derives it from named nodes misses any prefix used
314
+ // only by the subject, a nested record key, or a literal datatype — and
315
+ // then emits compact names with no matching `@prefix`, i.e. invalid Turtle.
316
+ const result = (await inspectVerb.run(
317
+ { uri: "ds:button" },
318
+ rt,
319
+ )) as InspectResult;
320
+ expect(result.prefixes.ds).toBe(DS);
321
+ });
322
+
323
+ it("keeps an RDF 1.2 literal direction rather than flattening it", async () => {
324
+ const result = (await inspectVerb.run(
325
+ { uri: "ds:directional" },
326
+ rt,
327
+ )) as InspectResult;
328
+ const label = result.groups.find((g) => g.predicate.value === `${DS}name`);
329
+ expect(label?.objects[0]).toMatchObject({
330
+ termType: "Literal",
331
+ language: "ar",
332
+ direction: "rtl",
333
+ });
334
+ });
335
+ });
@@ -8,19 +8,23 @@
8
8
  * name or absolute IRI addresses the subject exactly.
9
9
  */
10
10
 
11
- import { BIN_NAME } from "../../constants.js";
11
+ import {
12
+ BIN_NAME,
13
+ DEFAULT_DETAIL_LEVEL,
14
+ DETAIL_LEVELS,
15
+ } from "../../constants.js";
16
+ import type { PragmaRuntime } from "../../kernel/runtime/index.js";
12
17
  import type { InspectResult } from "../../kernel/runtime/readEntity.js";
13
18
  import { readEntity } from "../../kernel/runtime/readEntity.js";
14
- import type { PragmaRuntime } from "../../kernel/runtime/types.js";
15
19
  import { asVerb } from "../../kernel/spec/asVerb.js";
16
- import type { VerbSpec } from "../../kernel/spec/types.js";
20
+ import type { VerbSpec } from "../../kernel/spec/index.js";
17
21
  import { inspectFormatters } from "./inspect.render.js";
18
22
 
19
23
  const inspectVerb: VerbSpec<Record<string, unknown>, InspectResult> = {
20
24
  path: ["graph", "inspect"],
21
25
  summary:
22
26
  "Show every triple where a URI is the subject, grouped by predicate.",
23
- doc: "Inspect one entity: all predicate/object pairs asserted on the subject. Address it by prefixed name (ds:button) or absolute IRI.",
27
+ doc: "Inspect one entity: all predicate/object pairs asserted on the subject. Address it by prefixed name (ds:global.component.button) or absolute IRI.",
24
28
  params: [
25
29
  {
26
30
  kind: "string",
@@ -32,9 +36,17 @@ const inspectVerb: VerbSpec<Record<string, unknown>, InspectResult> = {
32
36
  },
33
37
  ],
34
38
  output: { formatters: inspectFormatters },
39
+ // The read is BOUNDED by disclosure — inbound exemplars and literal previews
40
+ // both widen with the level — so the verb must declare the ladder it honours.
41
+ // Without this the CLI `--detail` flag has nothing to validate against and the
42
+ // MCP projector injects no `detail` argument at all, so the documented knob
43
+ // was one an agent could not actually reach.
44
+ disclosure: { levels: [...DETAIL_LEVELS], default: DEFAULT_DETAIL_LEVEL },
35
45
  examples: [
36
- { cmd: `${BIN_NAME} graph inspect ds:button` },
37
- { cmd: `${BIN_NAME} graph inspect https://ds.canonical.com/button` },
46
+ { cmd: `${BIN_NAME} graph inspect ds:global.component.button` },
47
+ {
48
+ cmd: `${BIN_NAME} graph inspect https://ds.canonical.com/global.component.button`,
49
+ },
38
50
  ],
39
51
  capability: {
40
52
  needsStore: true,
@@ -9,7 +9,7 @@
9
9
  * - json: the serialized {@link QueryResult}.
10
10
  */
11
11
 
12
- import type { Formatters } from "../../kernel/spec/types.js";
12
+ import type { Formatters } from "../../kernel/spec/index.js";
13
13
 
14
14
  // Inline `import("…")` type (no `from`) — keeps the ke types off the static
15
15
  // import graph the lazy-dispatch probe walks (see query.verb.ts).
@@ -36,9 +36,21 @@ function formatTriples(
36
36
  }
37
37
 
38
38
  export const queryFormatters: Formatters<QueryResult> = {
39
+ // Zero rows/triples: plain stdout stays empty — the notice is
40
+ // `emptyNotice`, routed to stderr (exit 0) by the dispatcher so a pipe
41
+ // reads no prose. ASK always has a result and never goes empty.
42
+ emptyNotice(result) {
43
+ if (result.type === "select" && result.bindings.length === 0) {
44
+ return "No results.";
45
+ }
46
+ if (result.type === "construct" && result.triples.length === 0) {
47
+ return "No triples.";
48
+ }
49
+ return undefined;
50
+ },
39
51
  plain(result) {
40
52
  if (result.type === "select") {
41
- if (result.bindings.length === 0) return "No results.";
53
+ if (result.bindings.length === 0) return "";
42
54
  const cols = Object.keys(result.bindings[0] ?? {});
43
55
  const rows = result.bindings.map((b) =>
44
56
  cols.map((c) => b[c] ?? "").join("\t"),
@@ -48,7 +60,7 @@ export const queryFormatters: Formatters<QueryResult> = {
48
60
  if (result.type === "ask") {
49
61
  return `ASK: ${String(result.result)}`;
50
62
  }
51
- return formatTriples(result.triples);
63
+ return result.triples.length === 0 ? "" : formatTriples(result.triples);
52
64
  },
53
65
 
54
66
  llm(result) {
@@ -10,9 +10,9 @@
10
10
  */
11
11
 
12
12
  import { BIN_NAME } from "../../constants.js";
13
- import type { PragmaRuntime } from "../../kernel/runtime/types.js";
13
+ import type { PragmaRuntime } from "../../kernel/runtime/index.js";
14
14
  import { asVerb } from "../../kernel/spec/asVerb.js";
15
- import type { VerbSpec } from "../../kernel/spec/types.js";
15
+ import type { VerbSpec } from "../../kernel/spec/index.js";
16
16
  import { queryFormatters } from "./query.render.js";
17
17
 
18
18
  // Inline `import("…")` type (no `from`) so the ke types stay OFF the static
@@ -40,7 +40,7 @@ const queryVerb: VerbSpec<Record<string, unknown>, QueryResult> = {
40
40
  note: "list every component subject",
41
41
  },
42
42
  {
43
- cmd: `${BIN_NAME} graph query "ASK { ds:button a ds:Component }" --format json`,
43
+ cmd: `${BIN_NAME} graph query "ASK { <https://ds.canonical.com/global.component.button> a ds:Component }" --format json`,
44
44
  },
45
45
  ],
46
46
  capability: {
@@ -10,9 +10,8 @@
10
10
  */
11
11
 
12
12
  import type { QueryResult } from "@canonical/ke";
13
- import { PragmaError } from "../../kernel/error/PragmaError.js";
14
- import { cliRecovery } from "../../kernel/error/recovery.js";
15
- import type { PragmaRuntime } from "../../kernel/runtime/types.js";
13
+ import { cliRecovery, PragmaError } from "../../kernel/error/index.js";
14
+ import type { PragmaRuntime } from "../../kernel/runtime/index.js";
16
15
 
17
16
  /**
18
17
  * Execute a raw SPARQL query against the booted store.
@@ -14,7 +14,7 @@
14
14
  * `--help`/`__complete` fast paths stay free of the config reader and zod.
15
15
  */
16
16
 
17
- import type { CapabilityModule } from "../kernel/spec/types.js";
17
+ import type { CapabilityModule } from "../kernel/spec/index.js";
18
18
  import { capabilitiesModule } from "./capabilities/index.js";
19
19
  import { colophonModule } from "./colophon/index.js";
20
20
  import { configModule } from "./config/index.js";
@@ -30,10 +30,12 @@ import { setupModule } from "./setup/index.js";
30
30
  import { skillModule } from "./skill/index.js";
31
31
  import { sourcesModule } from "./sources/index.js";
32
32
  import { upgradeModule } from "./upgrade/index.js";
33
+ import { versionModule } from "./version/index.js";
33
34
 
34
35
  /** The modules with hand-written code, in authoring order. */
35
36
  const authored: readonly CapabilityModule[] = [
36
37
  infoModule,
38
+ versionModule,
37
39
  configModule,
38
40
  createModule,
39
41
  sourcesModule,
@@ -18,14 +18,15 @@ import {
18
18
  entityTotal,
19
19
  readPackIndex,
20
20
  } from "../../kernel/completion/entitySource.js";
21
- import { readConfig } from "../../kernel/config/readConfig.js";
21
+ import { readConfig } from "../../kernel/config/index.js";
22
+ import type { PragmaRuntime } from "../../kernel/runtime/index.js";
22
23
  import { resolveSources } from "../../kernel/runtime/resolveSources.js";
23
- import type { PragmaRuntime } from "../../kernel/runtime/types.js";
24
24
  import {
25
+ checkRegistryVersion,
25
26
  detectInstallSource,
27
+ PRAGMA_PACKAGE,
26
28
  pmUpdateCommand,
27
- } from "../shared/packageManager.js";
28
- import { checkRegistryVersion, PRAGMA_PACKAGE } from "../shared/registry.js";
29
+ } from "../shared/index.js";
29
30
  import type { InfoData, InfoUpdate } from "./types.js";
30
31
 
31
32
  /**
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { BIN_NAME } from "../../constants.js";
6
6
  import type { ConfigOrigin } from "../../kernel/config/types.js";
7
- import type { Formatters } from "../../kernel/spec/types.js";
7
+ import type { Formatters } from "../../kernel/spec/index.js";
8
8
  import type { InfoData } from "./types.js";
9
9
 
10
10
  /** A `[layer]` marker for values a config file supplied (blank for defaults). */
@@ -8,7 +8,7 @@
8
8
 
9
9
  import { BIN_NAME } from "../../constants.js";
10
10
  import { asVerb } from "../../kernel/spec/asVerb.js";
11
- import type { CapabilityModule, VerbSpec } from "../../kernel/spec/types.js";
11
+ import type { CapabilityModule, VerbSpec } from "../../kernel/spec/index.js";
12
12
  import { infoFormatters } from "./info.render.js";
13
13
  import type { InfoData } from "./types.js";
14
14
 
@@ -140,6 +140,38 @@ describe("lazy dispatch — module-graph probe (PROTECTED)", () => {
140
140
  }
141
141
  });
142
142
 
143
+ // The create surface's registration machinery — summon-core's projection
144
+ // helpers, its Commander adapter, and Commander itself — must stay behind
145
+ // the mount's dynamic import: `--help` and `__complete` both import this
146
+ // barrel and neither registers a single create command, so an eager edge
147
+ // here taxes every fast-path spawn for work only a dispatched `create`
148
+ // invocation performs. The registered flag/positional spellings the fast
149
+ // paths DO need (completion tokens, reference syntax) are baked into
150
+ // `createSurface.generated.ts` at build time, so nothing on this graph has
151
+ // to call the projection to learn them. Type-only imports are allowed —
152
+ // they are erased — which is why this walks import STATEMENTS rather than
153
+ // grepping for the specifier.
154
+ it("capabilities/index pulls no summon-core projection, adapter, or commander value import (PROTECTED)", () => {
155
+ const banned = [/^@canonical\/summon-core\/projection/, /^commander$/];
156
+ const graph = staticImportGraph(resolve(here, "index.ts"));
157
+ const pkgRoot = resolve(here, "..", "..");
158
+ // Anchored to line start so the word "import" inside a docblock cannot
159
+ // open a match that swallows prose down to the next real specifier.
160
+ const importRe = /^import\s+([^;]*?)from\s*["']([^"']+)["']/gm;
161
+ const offenders: string[] = [];
162
+ for (const file of graph) {
163
+ const source = readFileSync(file, "utf-8");
164
+ for (const match of source.matchAll(importRe)) {
165
+ const clause = match[1] as string;
166
+ const specifier = match[2] as string;
167
+ if (!banned.some((re) => re.test(specifier))) continue;
168
+ if (/^type\s/.test(clause.trim())) continue;
169
+ offenders.push(`${relative(pkgRoot, file)} → ${specifier}`);
170
+ }
171
+ }
172
+ expect(offenders).toEqual([]);
173
+ });
174
+
143
175
  it("NO module on that graph statically imports zod (PROTECTED)", () => {
144
176
  // This used to pin an exact set of one — `graphpack/types.ts`, reached via
145
177
  // `resolveSources` → `packIsComplete` → `readManifest` → `manifestSchema
@@ -10,7 +10,7 @@
10
10
  * Storeless: the entity tier reads the index off disk, never booting the store.
11
11
  */
12
12
 
13
- import type { VerbSpec } from "../../kernel/spec/types.js";
13
+ import type { VerbSpec } from "../../kernel/spec/index.js";
14
14
 
15
15
  /** The `__complete` verb spec. */
16
16
  export const completeVerb: VerbSpec<Record<string, unknown>, string[]> = {
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  import { asVerb } from "../../kernel/spec/asVerb.js";
7
- import type { CapabilityModule } from "../../kernel/spec/types.js";
7
+ import type { CapabilityModule } from "../../kernel/spec/index.js";
8
8
  import { completeVerb } from "./complete.verb.js";
9
9
  import { mcpVerb } from "./mcp.verb.js";
10
10