@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,18 +1,62 @@
1
1
  /**
2
2
  * Global-flag pre-parsing, ahead of Commander.
3
3
  *
4
- * `--format`, `--verbose`, and `--detail` may appear anywhere on the line, so
4
+ * `--format`, `--verbose`, `--no-headers`, and `--detail` may appear anywhere on the line, so
5
5
  * they are scanned and stripped before Commander sees argv — otherwise
6
6
  * `enablePositionalOptions()` scoping would reject a flag placed after a verb.
7
+ *
8
+ * ANYWHERE STOPS AT `--`. Everything after the option terminator is the user's
9
+ * data, not this program's flags: `block lookup -- --format` looks up a block
10
+ * literally named `--format`. Commander honours the terminator on its own, so
11
+ * a scan here that ignored it would parse — and strip — tokens Commander was
12
+ * about to hand through verbatim.
13
+ *
14
+ * A FLAG'S VALUE IS NEVER ANOTHER FLAG. `--detail --category css` supplies no
15
+ * detail; it is a valueless `--detail` followed by a separate flag. Reading the
16
+ * next token unconditionally would consume `--category` as the value and strip
17
+ * it, so the filter would vanish and the command would answer over the whole
18
+ * set instead — a wrong answer with no diagnostic.
7
19
  * Ported from the v1 `parseGlobalFlags`, with two v2 changes: a new `--detail`
8
- * flag and the `--format text` value renamed to `plain` (the kernel's
9
- * {@link OutputFormat}). The dedicated `--llm` flag was folded into
10
- * `--format llm`, leaving auto-detection as the sole implicit trigger. Both the
11
- * space (`--format json`) and equals (`--format=json`) forms are recognized.
20
+ * flag and the `--format text` value replaced by `plain` (the kernel's
21
+ * {@link OutputFormat}) — `text` is not accepted; the bin rejects it with the
22
+ * valid list. The dedicated `--llm` flag was folded into `--format llm`,
23
+ * leaving auto-detection as the sole implicit trigger. Both the space
24
+ * (`--format json`) and equals (`--format=json`) forms are recognized.
12
25
  */
13
26
 
14
27
  import { DETAIL_LEVELS, type DetailLevel } from "../../../constants.js";
15
- import type { GlobalFlags } from "../../runtime/types.js";
28
+ import type { GlobalFlags } from "../../runtime/index.js";
29
+
30
+ /** The end-of-options separator: nothing after it is a flag of this program. */
31
+ const OPTION_TERMINATOR = "--";
32
+
33
+ /**
34
+ * The span of argv this program's flags may occupy — everything before the
35
+ * option terminator, or all of argv when there is none. Exported for the
36
+ * bin's retired-flag detection: a retired spelling AFTER the terminator is
37
+ * an operand, not a flag, and must not trigger a migration message.
38
+ *
39
+ * @param argv - The user's arguments.
40
+ * @returns The scannable span; the same array when no terminator is present.
41
+ */
42
+ export function selectScanSpan(argv: readonly string[]): readonly string[] {
43
+ const terminator = argv.indexOf(OPTION_TERMINATOR);
44
+ return terminator === -1 ? argv : argv.slice(0, terminator);
45
+ }
46
+
47
+ /**
48
+ * Whether a token can serve as a flag's value.
49
+ *
50
+ * A token starting with `-` is the next flag, not this one's value. Shared by
51
+ * every reader below so the space form cannot swallow a sibling flag at one
52
+ * call site while guarding against it at another.
53
+ *
54
+ * @param token - The token following a flag, if any.
55
+ * @returns True when the token is a value rather than another flag.
56
+ */
57
+ function isFlagValue(token: string | undefined): token is string {
58
+ return token !== undefined && !token.startsWith("-");
59
+ }
16
60
 
17
61
  /**
18
62
  * Read a `--flag`'s value, accepting both `--flag value` and `--flag=value`.
@@ -25,35 +69,74 @@ function readFlagValue(
25
69
  argv: readonly string[],
26
70
  flag: string,
27
71
  ): string | undefined {
72
+ const span = selectScanSpan(argv);
28
73
  const equalsPrefix = `${flag}=`;
29
- const equalsArg = argv.find((arg) => arg.startsWith(equalsPrefix));
74
+ const equalsArg = span.find((arg) => arg.startsWith(equalsPrefix));
30
75
  if (equalsArg !== undefined) {
31
76
  return equalsArg.slice(equalsPrefix.length);
32
77
  }
33
- const spaceIndex = argv.indexOf(flag);
34
- return spaceIndex === -1 ? undefined : argv[spaceIndex + 1];
78
+ const spaceIndex = span.indexOf(flag);
79
+ if (spaceIndex === -1) return undefined;
80
+ const value = span.at(spaceIndex + 1);
81
+ return isFlagValue(value) ? value : undefined;
35
82
  }
36
83
 
37
84
  /**
38
- * Read the raw `--format` value exactly as typed, for validation.
85
+ * Read a value flag's raw value exactly as typed, for validation.
39
86
  *
40
87
  * Unlike {@link parseGlobalFlags} this does not normalize — the caller decides
41
- * how to reject an unknown value. A bare `--format` with no following value is
88
+ * how to reject an unknown value. A bare flag with no following value is
42
89
  * reported as `""` (not `undefined`) so it is rejected rather than silently
43
- * falling through.
90
+ * falling through. One reader for every validated global value flag, so a
91
+ * guard applied to one cannot silently miss its siblings.
44
92
  *
45
93
  * @param argv - Raw argv (the user's arguments).
46
- * @returns The raw value, `""` for a valueless `--format`, or `undefined`.
94
+ * @param flag - The flag including leading dashes (e.g. `--format`).
95
+ * @returns The raw value, `""` for a valueless flag, or `undefined`.
47
96
  */
48
- export function readRawFormat(argv: readonly string[]): string | undefined {
49
- const equalsArg = argv.find((arg) => arg.startsWith("--format="));
50
- if (equalsArg !== undefined) return equalsArg.slice("--format=".length);
97
+ function readRawFlag(
98
+ argv: readonly string[],
99
+ flag: string,
100
+ ): string | undefined {
101
+ const span = selectScanSpan(argv);
102
+ const equalsPrefix = `${flag}=`;
103
+ const equalsArg = span.find((arg) => arg.startsWith(equalsPrefix));
104
+ if (equalsArg !== undefined) return equalsArg.slice(equalsPrefix.length);
51
105
 
52
- const spaceIndex = argv.indexOf("--format");
106
+ const spaceIndex = span.indexOf(flag);
53
107
  if (spaceIndex === -1) return undefined;
54
108
 
55
- const value = argv[spaceIndex + 1];
56
- return value !== undefined && !value.startsWith("-") ? value : "";
109
+ // `""` rather than `undefined`: a valueless flag must be REJECTED by the
110
+ // caller, not fall through to the default.
111
+ const value = span.at(spaceIndex + 1);
112
+ return isFlagValue(value) ? value : "";
113
+ }
114
+
115
+ /** The raw `--format` value as typed (see {@link readRawFlag}). */
116
+ export function readRawFormat(argv: readonly string[]): string | undefined {
117
+ return readRawFlag(argv, "--format");
118
+ }
119
+
120
+ /**
121
+ * The raw `--detail` value as typed (see {@link readRawFlag}). Validated by
122
+ * the bin exactly as `--format` is — an unrecognized level used to be
123
+ * dropped silently, which is the same defect class as a filter that
124
+ * evaporates: wrong output with no diagnostic.
125
+ */
126
+ export function readRawDetail(argv: readonly string[]): string | undefined {
127
+ return readRawFlag(argv, "--detail");
128
+ }
129
+
130
+ /**
131
+ * The `--verbose=<x>` token, if present. `--verbose` takes no value — one
132
+ * flag, one spelling — and the program must not accept-and-ignore a second
133
+ * one: the bin rejects the token this finds.
134
+ *
135
+ * @param argv - Raw argv (the user's arguments).
136
+ * @returns The offending token, or `undefined`.
137
+ */
138
+ export function findValuedVerbose(argv: readonly string[]): string | undefined {
139
+ return selectScanSpan(argv).find((arg) => arg.startsWith("--verbose="));
57
140
  }
58
141
 
59
142
  /**
@@ -108,11 +191,18 @@ export function parseGlobalFlags(
108
191
  const formatRequested = rawFormat !== undefined;
109
192
  const autoLlm = !formatRequested && !env.isTty && !env.noAutoLlm;
110
193
  const detail = readDetail(argv);
194
+ const span = selectScanSpan(argv);
111
195
  return {
112
196
  llm: format === "llm" || autoLlm,
113
197
  autoLlm,
114
198
  format,
115
- verbose: argv.includes("--verbose"),
199
+ verbose: span.includes("--verbose"),
200
+ // `--no-headers` suppresses the plain-table header row; it is global so
201
+ // every list-shaped verb honors one spelling.
202
+ ...(span.includes("--no-headers") ? { noHeaders: true } : {}),
203
+ // `--quiet` silences success/progress (the report seam, interpreter logs,
204
+ // onboarding, calm notices) while error rendering stays untouched.
205
+ ...(span.includes("--quiet") ? { quiet: true } : {}),
116
206
  ...(detail !== undefined ? { detail } : {}),
117
207
  };
118
208
  }
@@ -122,7 +212,8 @@ export function parseGlobalFlags(
122
212
  *
123
213
  * Since {@link parseGlobalFlags} pre-parses these, they are dropped so they do
124
214
  * not collide with Commander's positional scoping, letting the user place them
125
- * anywhere on the line.
215
+ * anywhere on the line — anywhere before the option terminator, which this
216
+ * stops at and hands through whole.
126
217
  *
127
218
  * @param argv - The user's arguments.
128
219
  * @returns A new array with global flags stripped.
@@ -130,20 +221,29 @@ export function parseGlobalFlags(
130
221
  export function stripGlobalFlags(argv: readonly string[]): string[] {
131
222
  const result: string[] = [];
132
223
  for (let i = 0; i < argv.length; i++) {
133
- const arg = argv[i];
134
- if (arg === "--verbose") continue;
135
- if (
136
- arg?.startsWith("--format=") ||
137
- arg?.startsWith("--verbose=") ||
138
- arg?.startsWith("--detail=")
139
- ) {
224
+ const arg = argv.at(i);
225
+ if (arg === undefined) continue;
226
+
227
+ // Past the terminator nothing is ours: hand the remainder over untouched,
228
+ // terminator included, so Commander still sees where options end.
229
+ if (arg === OPTION_TERMINATOR) {
230
+ result.push(...argv.slice(i));
231
+ return result;
232
+ }
233
+
234
+ if (arg === "--verbose" || arg === "--no-headers" || arg === "--quiet") {
235
+ continue;
236
+ }
237
+ if (arg.startsWith("--format=") || arg.startsWith("--detail=")) {
140
238
  continue;
141
239
  }
142
240
  if (arg === "--format" || arg === "--detail") {
143
- i += 1; // skip the space-form value too
241
+ // Skip the value ONLY when the next token is one. A valueless flag before
242
+ // another flag must leave that flag standing.
243
+ if (isFlagValue(argv.at(i + 1))) i += 1;
144
244
  continue;
145
245
  }
146
- result.push(arg as string);
246
+ result.push(arg);
147
247
  }
148
248
  return result;
149
249
  }
@@ -32,6 +32,19 @@ export function helpTerm(text: string): string {
32
32
  return chalk.cyan(text);
33
33
  }
34
34
 
35
+ /**
36
+ * The wordmark's colour.
37
+ *
38
+ * `yellow` is a PALETTE slot, not a fixed hue: the 16-colour ANSI palette has no
39
+ * orange, and this slot is the one terminal themes render as orange — Ubuntu's
40
+ * among them. Naming the slot rather than a 256-colour or truecolour orange is
41
+ * what lets the wordmark follow the user's own theme instead of fighting it, and
42
+ * keeps it legible on light backgrounds where a hardcoded orange would not be.
43
+ */
44
+ export function helpLogo(text: string): string {
45
+ return chalk.yellow(text);
46
+ }
47
+
35
48
  /** The `Usage:` line: a dim label followed by the given command shape. */
36
49
  export function helpUsage(body: string): string {
37
50
  return `${chalk.dim("Usage:")} ${body}`;
@@ -10,11 +10,13 @@
10
10
  * never heard of still surfaces.
11
11
  */
12
12
 
13
- import type { VerbSpec } from "../../spec/types.js";
13
+ import { PROGRAM_LOGO } from "../../../constants.js";
14
+ import type { VerbSpec } from "../../spec/index.js";
14
15
  import {
15
16
  helpColumns,
16
17
  helpDim,
17
18
  helpHeading,
19
+ helpLogo,
18
20
  helpTerm,
19
21
  helpUsage,
20
22
  } from "./helpFormat.js";
@@ -79,6 +81,7 @@ function buildKernelGroups(programName: string): readonly HelpGroup[] {
79
81
  summary: `Read and write ${programName} configuration`,
80
82
  },
81
83
  { noun: "info", summary: "Show version, config, and update status" },
84
+ { noun: "version", summary: "Print the CLI version" },
82
85
  {
83
86
  noun: "upgrade",
84
87
  summary: `Upgrade the ${programName} CLI to the latest version`,
@@ -92,14 +95,16 @@ function buildKernelGroups(programName: string): readonly HelpGroup[] {
92
95
  noun: "capabilities",
93
96
  summary: "Discover conventions, tools, and the discovery sequence",
94
97
  },
95
- {
96
- noun: "colophon",
97
- summary: `Read how ${programName} and the active domain are made`,
98
- },
98
+ // A colophon is the note at the back of a book: the typeface, the
99
+ // press, the paper. Nothing depends on it, which is the point — so
100
+ // this line does not argue for it. Every other summary in this column
101
+ // promises work done; this one just invites you to look.
102
+ { noun: "colophon", summary: "Read the credits" },
99
103
  { noun: "skill", summary: "Browse agent skills from the active packs" },
100
104
  { noun: "prompt", summary: "Browse reusable prompt templates" },
101
- // The one noun with no verb to speak for it (the bin special-cases it),
102
- // so its summary is hand-written rather than derived.
105
+ // Curated for PLACEMENT, not for existence: `mcp serve` is an
106
+ // ordinary verb like every other, and this group is where a reader
107
+ // looks for it.
103
108
  { noun: "mcp", summary: "Start the MCP server over stdio" },
104
109
  ],
105
110
  },
@@ -133,17 +138,22 @@ function summarizeNoun(noun: string, verbs: readonly VerbSpec[]): string {
133
138
  * @param programName - The CLI binary name (the distribution's `name`).
134
139
  * @param description - The program description shown in the header.
135
140
  * @param verbs - All registered verbs, used to derive the live noun set.
141
+ * @param issuesUrl - Where the preview notice sends feedback; the
142
+ * distribution's own, so a fork points at its own tracker.
143
+ * @param version - The version to stamp on the header. Passed in rather than
144
+ * read here so it is the SAME string `--version` prints: `buildProgram`
145
+ * resolves `options.version ?? VERSION`, and a host that overrides one must
146
+ * not be able to leave the other saying something else.
136
147
  * @returns The formatted, colorized help text.
137
148
  */
138
149
  export function formatRootHelp(
139
150
  programName: string,
140
151
  description: string,
141
152
  verbs: readonly VerbSpec[],
153
+ version: string,
154
+ issuesUrl: string,
142
155
  ): string {
143
156
  const present = nounsFrom(verbs);
144
- // `mcp` is served by the bin's special-case, not a projected verb, but is
145
- // always available — surface it so the front door is complete.
146
- present.add("mcp");
147
157
  const kernel = buildKernelGroups(programName);
148
158
  const curated = new Set(kernel.flatMap((g) => g.nouns.map((n) => n.noun)));
149
159
 
@@ -171,7 +181,24 @@ export function formatRootHelp(
171
181
  );
172
182
 
173
183
  const lines: string[] = [
174
- `${helpHeading(programName)} — ${description}`,
184
+ // The wordmark leads when the distribution declares one. A fork ships its
185
+ // own art or none, so its front door is never branded with someone else's.
186
+ ...(PROGRAM_LOGO.length > 0 ? [...PROGRAM_LOGO.map(helpLogo), ""] : []),
187
+ // `<name> v<version> — <blurb>`, the spelling `info` and `capabilities`
188
+ // already use, so the front door names the build the same way every other
189
+ // surface does. Dimmed: it answers "which build am I on" for someone who
190
+ // is already here, and must not compete with the name.
191
+ `${helpHeading(programName)} ${helpDim(`v${version}`)} — ${description}`,
192
+ "",
193
+ // The preview notice. Dimmed and directly under the header, because it
194
+ // qualifies what the reader has just been told the tool IS — a version
195
+ // number alone does not say "expect this to move".
196
+ //
197
+ // The URL is the distribution's declared `issuesUrl`, never a literal:
198
+ // `kernel/copy.test.ts` forbids the kernel naming a distribution, and a
199
+ // fork inviting feedback to someone else's tracker would be worse than a
200
+ // missing line. It is passed in for the same reason `version` is.
201
+ helpDim(`This is a preview version. Issues and suggestions: ${issuesUrl}`),
175
202
  "",
176
203
  helpUsage(
177
204
  `${programName} ${helpTerm("<command>")} ${helpDim("[subcommand] [flags]")}`,
@@ -203,7 +230,9 @@ export function formatRootHelp(
203
230
  "--detail <level>",
204
231
  "Progressive-disclosure level (summary, standard, detailed)",
205
232
  ],
206
- ["--verbose", "Diagnostic output on stderr"],
233
+ ["--no-headers", "Hide the table header row in plain output"],
234
+ ["--quiet", "Suppress success and progress output (errors still print)"],
235
+ ["--verbose", "Diagnostic output on stderr (sources update)"],
207
236
  ["--help", "Show help (works on any command)"],
208
237
  ["--version", "Show the CLI version"],
209
238
  ];
@@ -1,6 +1,11 @@
1
1
  import { describe, expect, it } from "vitest";
2
+ import { capabilities } from "../../../capabilities/index.js";
2
3
  import { fixtureModule } from "../../../testing/fixtures/fixtureCapability.js";
3
- import { nounVerbMap, resolveUnknownCommand } from "./suggest.js";
4
+ import {
5
+ curatedSuggestions,
6
+ nounVerbMap,
7
+ resolveUnknownCommand,
8
+ } from "./suggest.js";
4
9
  import { suggestNames } from "./suggestNames.js";
5
10
 
6
11
  const verbs = [...fixtureModule.verbs];
@@ -36,6 +41,33 @@ describe("resolveUnknownCommand", () => {
36
41
  });
37
42
  });
38
43
 
44
+ describe("curatedSuggestions", () => {
45
+ it("answers the conventional spelling with the commands that own the job", () => {
46
+ // `status` is nowhere near `info` or `doctor` textually, so edit distance
47
+ // can never offer them. The table is the answer for a token whose JOB
48
+ // exists here under other names — and it stays a suggestion: `status` is
49
+ // not a command, because `info` already is.
50
+ expect(curatedSuggestions("status")).toEqual(["info", "doctor"]);
51
+ });
52
+
53
+ it("has nothing to say about a plain typo — that is ranking's job", () => {
54
+ expect(curatedSuggestions("infoo")).toBeUndefined();
55
+ expect(curatedSuggestions("")).toBeUndefined();
56
+ });
57
+
58
+ it("never names a command the program does not have", () => {
59
+ // A curated entry that outlived its target would send a confused user at
60
+ // nothing. Check every suggestion against the LIVE registry, so renaming
61
+ // `info` reddens here instead of shipping a dead hint.
62
+ const live = new Set(
63
+ capabilities.flatMap((m) => m.verbs.map((v) => v.path[0])),
64
+ );
65
+ for (const suggestion of curatedSuggestions("status") ?? []) {
66
+ expect(live.has(suggestion)).toBe(true);
67
+ }
68
+ });
69
+ });
70
+
39
71
  describe("suggestNames", () => {
40
72
  it("ranks prefix matches ahead of edit-distance matches", () => {
41
73
  expect(suggestNames("con", ["config", "connect", "block"])).toEqual([
@@ -10,7 +10,31 @@
10
10
  * internals leak into the suggester.
11
11
  */
12
12
 
13
- import type { VerbSpec } from "../../spec/types.js";
13
+ import type { VerbSpec } from "../../spec/index.js";
14
+
15
+ /**
16
+ * Curated suggestions for a token whose JOB exists under other names. Edit
17
+ * distance cannot rank these — `status` is nowhere near `info` textually —
18
+ * but a user typing the conventional spelling deserves the commands that own
19
+ * the job here, not the nearest-looking noun. Consulted before fuzzy ranking;
20
+ * adding a second spelling as a real command is the one thing this table must
21
+ * never become.
22
+ */
23
+ const CURATED_SUGGESTIONS: Readonly<Record<string, readonly string[]>> = {
24
+ status: ["info", "doctor"],
25
+ };
26
+
27
+ /**
28
+ * The curated suggestions for an unknown token, if any.
29
+ *
30
+ * @param token - The unresolved command token.
31
+ * @returns The commands that own the token's job, or `undefined`.
32
+ */
33
+ export function curatedSuggestions(
34
+ token: string,
35
+ ): readonly string[] | undefined {
36
+ return CURATED_SUGGESTIONS[token];
37
+ }
14
38
 
15
39
  /** An unresolved token and the sibling names to rank it against. */
16
40
  export interface UnknownCommand {
@@ -60,9 +60,39 @@ const selfVerb: VerbSpec = {
60
60
  run: async () => null,
61
61
  };
62
62
 
63
+ /** A mutating verb with a default-true boolean, for the injected-flag rows. */
64
+ const mutating: VerbSpec = {
65
+ path: ["thing", "make"],
66
+ summary: "Make a thing.",
67
+ params: [
68
+ {
69
+ kind: "boolean",
70
+ name: "withStyles",
71
+ doc: "Include styles.",
72
+ default: true,
73
+ },
74
+ ],
75
+ output: { formatters: passthrough },
76
+ capability: { needsStore: false, mutates: true, mcp: { expose: true } },
77
+ run: async () => null,
78
+ };
79
+
63
80
  describe("formatVerbHelp", () => {
64
81
  const help = formatVerbHelp("pragma", get);
65
82
 
83
+ it("renders every flag the command parses: negations and mutation flags", () => {
84
+ // Help derives from the same spec facts registration reads, so a page
85
+ // can never deny a flag that works.
86
+ const mutatingHelp = formatVerbHelp("pragma", mutating);
87
+ expect(mutatingHelp).toContain("--with-styles");
88
+ expect(mutatingHelp).toContain("--no-with-styles");
89
+ expect(mutatingHelp).toContain("--dry-run");
90
+ expect(mutatingHelp).toContain("--undo");
91
+ expect(mutatingHelp).toContain("--yes");
92
+ // A read verb keeps its Flags block free of mutation rows.
93
+ expect(help).not.toContain("--dry-run");
94
+ });
95
+
66
96
  it("renders the usage line with the positional", () => {
67
97
  expect(help).toContain("Usage: pragma block get <name> [flags]");
68
98
  });
@@ -8,8 +8,9 @@
8
8
  * `formatVerbHelp`, retargeted at the grammar.
9
9
  */
10
10
 
11
- import { kebabCase } from "../../spec/emitSurface.js";
12
- import type { ParamSpec, VerbSpec } from "../../spec/types.js";
11
+ import type { ParamSpec, VerbSpec } from "../../spec/index.js";
12
+ import { kebabCase } from "../../spec/index.js";
13
+ import { MUTATION_FLAG_DOCS, negationFlagDoc } from "./constants.js";
13
14
  import {
14
15
  helpColumns,
15
16
  helpDim,
@@ -73,13 +74,28 @@ export function formatVerbHelp(programName: string, verb: VerbSpec): string {
73
74
  if (cliDoc) lines.push("", cliDoc);
74
75
  }
75
76
 
76
- if (flags.length > 0) {
77
- lines.push(
78
- "",
79
- helpHeading("Flags"),
80
- ...helpColumns(flags.map((flag) => [flagDisplay(flag), flag.doc])),
77
+ // Every flag the command PARSES is rendered, from the same spec facts
78
+ // registration reads: the declared params, each default-true boolean's
79
+ // `--no-` negation, and — on a mutating verb — the auto-injected mutation
80
+ // flags. Help denying a working flag is the drift this derivation removes.
81
+ const flagRows: (readonly [string, string])[] = flags.flatMap((flag) => {
82
+ const rows: (readonly [string, string])[] = [
83
+ [flagDisplay(flag), flag.doc] as const,
84
+ ];
85
+ if (flag.kind === "boolean" && flag.default === true) {
86
+ const kebab = kebabCase(flag.name);
87
+ rows.push([`--no-${kebab}`, negationFlagDoc(kebab)] as const);
88
+ }
89
+ return rows;
90
+ });
91
+ if (verb.capability.mutates) {
92
+ flagRows.push(
93
+ ...MUTATION_FLAG_DOCS.map(({ flag, doc }) => [flag, doc] as const),
81
94
  );
82
95
  }
96
+ if (flagRows.length > 0) {
97
+ lines.push("", helpHeading("Flags"), ...helpColumns(flagRows));
98
+ }
83
99
 
84
100
  if (verb.examples && verb.examples.length > 0) {
85
101
  lines.push("", helpHeading("Examples"));
@@ -16,9 +16,9 @@
16
16
 
17
17
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
18
18
  import { MCP_SERVER_NAME, VERSION } from "../../../constants.js";
19
- import { bootRuntime } from "../../runtime/boot.js";
20
- import type { GlobalFlags } from "../../runtime/types.js";
21
- import type { CapabilityModule } from "../../spec/types.js";
19
+ import type { GlobalFlags } from "../../runtime/index.js";
20
+ import { bootRuntime } from "../../runtime/index.js";
21
+ import type { CapabilityModule } from "../../spec/index.js";
22
22
  import { buildInstructions } from "./instructions.js";
23
23
  import { registerVerb } from "./registerVerb.js";
24
24
 
@@ -66,7 +66,10 @@ export async function buildServer(
66
66
  }
67
67
  }
68
68
  // A module's optional resource surface (NOT a tool) — the `{+uri}` template.
69
- await module.mcpResources?.register(server, runtime);
69
+ // The WHOLE module set goes with it: the listing the provider installs is
70
+ // the union of every module's declared `mcpListable` slices, which the
71
+ // declaring module cannot see from where it sits.
72
+ await module.mcpResources?.register(server, runtime, modules);
70
73
  // A module's optional native prompt surface (NOT a tool) — `prompts/*`.
71
74
  await module.mcpPrompts?.register(server, runtime);
72
75
  }
@@ -9,8 +9,8 @@
9
9
  */
10
10
 
11
11
  import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
12
- import type { PragmaError } from "../../error/PragmaError.js";
13
- import { errorEnvelope, successEnvelope } from "../../render/envelope.js";
12
+ import type { PragmaError } from "../../error/index.js";
13
+ import { errorEnvelope, successEnvelope } from "../../render/index.js";
14
14
 
15
15
  /**
16
16
  * Wrap success data as an MCP tool result.
@@ -17,8 +17,8 @@ import {
17
17
  buildDiscoverySequence,
18
18
  CONVENTIONS,
19
19
  } from "../../../capabilities/capabilities/catalog.js";
20
- import { emitSurface } from "../../spec/emitSurface.js";
21
- import type { CapabilityModule } from "../../spec/types.js";
20
+ import type { CapabilityModule } from "../../spec/index.js";
21
+ import { emitSurface } from "../../spec/index.js";
22
22
 
23
23
  /** Hard ceiling on the instructions length (asserted by the protected test). */
24
24
  export const INSTRUCTIONS_MAX_CHARS = 1500;
@@ -17,7 +17,7 @@
17
17
  */
18
18
 
19
19
  import type { ErrorCode, McpError } from "@modelcontextprotocol/sdk/types.js";
20
- import type { PragmaError } from "../../error/PragmaError.js";
20
+ import type { PragmaError } from "../../error/index.js";
21
21
 
22
22
  /** The SDK error primitives a provider dynamic-imports and hands to {@link mcpErrorFrom}. */
23
23
  export interface McpErrorPrimitives {
@@ -102,9 +102,12 @@ describe("MCP plan-first is honest (PRA-104)", () => {
102
102
 
103
103
  expect(planned.ok).toBe(true);
104
104
  expect(planned.meta).toEqual({ planOnly: true, confirmRequired: true });
105
- expect((planned.data as { plan: string[] }).plan).toContain(
105
+ // The SHARED filter applies to every mutating tool and not just `create`:
106
+ // the write is named, and the `ReadFile` this verb performs first is
107
+ // internal and filtered out, so the plan is one row.
108
+ expect((planned.data as { plan: string[] }).plan).toEqual([
106
109
  `Write file: ${source}.grafted (8 bytes)`,
107
- );
110
+ ]);
108
111
  expect(readdirSync(dir)).toEqual(["present.txt"]);
109
112
  });
110
113
  });
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Prompt entities, read two ways from one graph type.
3
+ *
4
+ * A prompt lives in the graph as an entity the distribution's vocabulary
5
+ * declares, and two surfaces offer it: the native MCP `prompts/list` +
6
+ * `prompts/get` handlers, and the `prompt list` / `prompt lookup` verbs behind
7
+ * the covenant tools. The pair is the cohesion principle — the reader here is
8
+ * the ONE place either surface learns what a prompt is, so the two can never
9
+ * report a different set of prompts or a different template body for one.
10
+ *
11
+ * The barrel carries both halves, and they READ DIFFERENTLY — the distinction
12
+ * matters to anyone rerouting imports through here, so it is stated rather
13
+ * than implied.
14
+ *
15
+ * `promptProvider` is the MCP module hook. Its `prompts/list` is STORELESS:
16
+ * it projects the pack index through `listPromptSummaries`, returning `[]`
17
+ * when no index is reachable and never booting the store. Its `prompts/get`
18
+ * is store-backed. The provider is imported STATICALLY by the prompt
19
+ * capability (`capabilities/prompt/index.ts`) — what it defers is the MCP SDK
20
+ * itself, whose request schemas it reaches through a dynamic import so the SDK
21
+ * stays off the `--help`/`__complete` fast path.
22
+ *
23
+ * `readPrompts` and `readPrompt` are the reads the CLI verbs take, and BOTH
24
+ * are store-backed: they query through `runSelect` directly, not through the
25
+ * index projection. A caller that expects a listing here to be as cheap as the
26
+ * MCP one is mistaken, and a reroute that makes either reachable statically
27
+ * from the capability graph puts a store boot on the fast path.
28
+ *
29
+ * `listPromptSummaries` stays internal. It is the MCP list path's projection,
30
+ * not a shared foundation under the two exported reads, and a caller choosing
31
+ * it directly is choosing a partial prompt without the store-backed body that
32
+ * makes it usable.
33
+ */
34
+
35
+ export { promptProvider } from "./provider.js";
36
+ export type { PromptArgument, PromptEntry } from "./source.js";
37
+ export { readPrompt, readPrompts } from "./source.js";
@@ -30,11 +30,11 @@
30
30
  */
31
31
 
32
32
  import { readPackIndex } from "../../../completion/entitySource.js";
33
- import { runSelect } from "../../../packs/sparql/runSelect.js";
33
+ import { runSelect } from "../../../packs/sparql/index.js";
34
34
  import type { PackRow } from "../../../packs/types.js";
35
35
  import { distributionSource } from "../../../packs/types.js";
36
+ import type { PragmaRuntime } from "../../../runtime/index.js";
36
37
  import type { SourcesDecision } from "../../../runtime/resolveSources.js";
37
- import type { PragmaRuntime } from "../../../runtime/types.js";
38
38
  import { VOCABULARY } from "../../../vocabulary.js";
39
39
 
40
40
  /** The declared prompt terms this module reads the graph with. */