@canonical/pragma-cli 0.33.0 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (892) hide show
  1. package/README.md +153 -30
  2. package/dist/.build-ok +0 -0
  3. package/dist/package.json +83 -0
  4. package/dist/pragma.conf.js +814 -0
  5. package/dist/pragma.conf.js.map +1 -0
  6. package/dist/src/bin.js +356 -0
  7. package/dist/src/bin.js.map +1 -0
  8. package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
  9. package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
  10. package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
  11. package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
  12. package/dist/src/capabilities/capabilities/catalog.js +130 -0
  13. package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
  14. package/dist/src/capabilities/capabilities/hints.js +195 -0
  15. package/dist/src/capabilities/capabilities/hints.js.map +1 -0
  16. package/dist/src/capabilities/capabilities/index.js +11 -0
  17. package/dist/src/capabilities/capabilities/index.js.map +1 -0
  18. package/dist/src/capabilities/capabilities/types.js +11 -0
  19. package/dist/src/capabilities/capabilities/types.js.map +1 -0
  20. package/dist/src/capabilities/colophon/collectColophon.js +83 -0
  21. package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
  22. package/dist/src/capabilities/colophon/colophon.render.js +59 -0
  23. package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
  24. package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
  25. package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
  26. package/dist/src/capabilities/colophon/index.js +5 -0
  27. package/dist/src/capabilities/colophon/index.js.map +1 -0
  28. package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
  29. package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
  30. package/dist/src/capabilities/colophon/types.js +10 -0
  31. package/dist/src/capabilities/colophon/types.js.map +1 -0
  32. package/dist/src/capabilities/config/collectConfigShow.js +59 -0
  33. package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
  34. package/dist/src/capabilities/config/field.render.js +22 -0
  35. package/dist/src/capabilities/config/field.render.js.map +1 -0
  36. package/dist/src/capabilities/config/fields.js +46 -0
  37. package/dist/src/capabilities/config/fields.js.map +1 -0
  38. package/dist/src/capabilities/config/get.verb.js +61 -0
  39. package/dist/src/capabilities/config/get.verb.js.map +1 -0
  40. package/dist/src/capabilities/config/index.js +5 -0
  41. package/dist/src/capabilities/config/index.js.map +1 -0
  42. package/dist/src/capabilities/config/runField.js +59 -0
  43. package/dist/src/capabilities/config/runField.js.map +1 -0
  44. package/dist/src/capabilities/config/runGet.js +28 -0
  45. package/dist/src/capabilities/config/runGet.js.map +1 -0
  46. package/dist/src/capabilities/config/runSet.js +53 -0
  47. package/dist/src/capabilities/config/runSet.js.map +1 -0
  48. package/dist/src/capabilities/config/set.verb.js +66 -0
  49. package/dist/src/capabilities/config/set.verb.js.map +1 -0
  50. package/dist/src/capabilities/config/show.render.js +84 -0
  51. package/dist/src/capabilities/config/show.render.js.map +1 -0
  52. package/dist/src/capabilities/config/show.verb.js +44 -0
  53. package/dist/src/capabilities/config/show.verb.js.map +1 -0
  54. package/dist/src/capabilities/config/types.js +5 -0
  55. package/dist/src/capabilities/config/types.js.map +1 -0
  56. package/dist/src/capabilities/config/unset.verb.js +49 -0
  57. package/dist/src/capabilities/config/unset.verb.js.map +1 -0
  58. package/dist/src/capabilities/create/cliProjection.js +195 -0
  59. package/dist/src/capabilities/create/cliProjection.js.map +1 -0
  60. package/dist/src/capabilities/create/constants.js +47 -0
  61. package/dist/src/capabilities/create/constants.js.map +1 -0
  62. package/dist/src/capabilities/create/create.render.js +100 -0
  63. package/dist/src/capabilities/create/create.render.js.map +1 -0
  64. package/dist/src/capabilities/create/create.verb.js +438 -0
  65. package/dist/src/capabilities/create/create.verb.js.map +1 -0
  66. package/dist/src/capabilities/create/createHelp.js +47 -0
  67. package/dist/src/capabilities/create/createHelp.js.map +1 -0
  68. package/dist/src/capabilities/create/createSurface.generated.js +394 -0
  69. package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
  70. package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
  71. package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
  72. package/dist/src/capabilities/create/index.js +18 -0
  73. package/dist/src/capabilities/create/index.js.map +1 -0
  74. package/dist/src/capabilities/create/messages.js +16 -0
  75. package/dist/src/capabilities/create/messages.js.map +1 -0
  76. package/dist/src/capabilities/create/mount.js +293 -0
  77. package/dist/src/capabilities/create/mount.js.map +1 -0
  78. package/dist/src/capabilities/create/pathJail.js +65 -0
  79. package/dist/src/capabilities/create/pathJail.js.map +1 -0
  80. package/dist/src/capabilities/create/pickGenerator.js +53 -0
  81. package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
  82. package/dist/src/capabilities/create/types.js +2 -0
  83. package/dist/src/capabilities/create/types.js.map +1 -0
  84. package/dist/src/capabilities/distribution.js +40 -0
  85. package/dist/src/capabilities/distribution.js.map +1 -0
  86. package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
  87. package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
  88. package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
  89. package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
  90. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +92 -0
  91. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
  92. package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
  93. package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
  94. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
  95. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
  96. package/dist/src/capabilities/doctor/checks/index.js +27 -0
  97. package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
  98. package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
  99. package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
  100. package/dist/src/capabilities/doctor/checks/targetHealth.js +205 -0
  101. package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
  102. package/dist/src/capabilities/doctor/doctor.render.js +185 -0
  103. package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
  104. package/dist/src/capabilities/doctor/doctor.verb.js +45 -0
  105. package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
  106. package/dist/src/capabilities/doctor/index.js +5 -0
  107. package/dist/src/capabilities/doctor/index.js.map +1 -0
  108. package/dist/src/capabilities/doctor/runChecks.js +83 -0
  109. package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
  110. package/dist/src/capabilities/doctor/types.js +5 -0
  111. package/dist/src/capabilities/doctor/types.js.map +1 -0
  112. package/dist/src/capabilities/graph/index.js +19 -0
  113. package/dist/src/capabilities/graph/index.js.map +1 -0
  114. package/dist/src/capabilities/graph/inspect.render.js +76 -0
  115. package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
  116. package/dist/src/capabilities/graph/inspect.verb.js +53 -0
  117. package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
  118. package/dist/src/capabilities/graph/query.render.js +73 -0
  119. package/dist/src/capabilities/graph/query.render.js.map +1 -0
  120. package/dist/src/capabilities/graph/query.verb.js +49 -0
  121. package/dist/src/capabilities/graph/query.verb.js.map +1 -0
  122. package/dist/src/capabilities/graph/runQuery.js +41 -0
  123. package/dist/src/capabilities/graph/runQuery.js.map +1 -0
  124. package/dist/src/capabilities/index.js +56 -0
  125. package/dist/src/capabilities/index.js.map +1 -0
  126. package/dist/src/capabilities/info/collectInfo.js +66 -0
  127. package/dist/src/capabilities/info/collectInfo.js.map +1 -0
  128. package/dist/src/capabilities/info/index.js +5 -0
  129. package/dist/src/capabilities/info/index.js.map +1 -0
  130. package/dist/src/capabilities/info/info.render.js +53 -0
  131. package/dist/src/capabilities/info/info.render.js.map +1 -0
  132. package/dist/src/capabilities/info/info.verb.js +42 -0
  133. package/dist/src/capabilities/info/info.verb.js.map +1 -0
  134. package/dist/src/capabilities/info/types.js +5 -0
  135. package/dist/src/capabilities/info/types.js.map +1 -0
  136. package/dist/src/capabilities/meta/complete.verb.js +43 -0
  137. package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
  138. package/dist/src/capabilities/meta/index.js +13 -0
  139. package/dist/src/capabilities/meta/index.js.map +1 -0
  140. package/dist/src/capabilities/meta/mcp.verb.js +34 -0
  141. package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
  142. package/dist/src/capabilities/ontology/index.js +21 -0
  143. package/dist/src/capabilities/ontology/index.js.map +1 -0
  144. package/dist/src/capabilities/ontology/queries.js +123 -0
  145. package/dist/src/capabilities/ontology/queries.js.map +1 -0
  146. package/dist/src/capabilities/ontology/render.js +66 -0
  147. package/dist/src/capabilities/ontology/render.js.map +1 -0
  148. package/dist/src/capabilities/ontology/verbs.js +181 -0
  149. package/dist/src/capabilities/ontology/verbs.js.map +1 -0
  150. package/dist/src/capabilities/prompt/index.js +16 -0
  151. package/dist/src/capabilities/prompt/index.js.map +1 -0
  152. package/dist/src/capabilities/prompt/prompt.render.js +78 -0
  153. package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
  154. package/dist/src/capabilities/prompt/types.js +10 -0
  155. package/dist/src/capabilities/prompt/types.js.map +1 -0
  156. package/dist/src/capabilities/prompt/verbs.js +93 -0
  157. package/dist/src/capabilities/prompt/verbs.js.map +1 -0
  158. package/dist/src/capabilities/resources/index.js +10 -0
  159. package/dist/src/capabilities/resources/index.js.map +1 -0
  160. package/dist/src/capabilities/resources/provider.js +423 -0
  161. package/dist/src/capabilities/resources/provider.js.map +1 -0
  162. package/dist/src/capabilities/setup/buildPlan.js +168 -0
  163. package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
  164. package/dist/src/capabilities/setup/index.js +5 -0
  165. package/dist/src/capabilities/setup/index.js.map +1 -0
  166. package/dist/src/capabilities/setup/mode.js +53 -0
  167. package/dist/src/capabilities/setup/mode.js.map +1 -0
  168. package/dist/src/capabilities/setup/operations/index.js +39 -0
  169. package/dist/src/capabilities/setup/operations/index.js.map +1 -0
  170. package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
  171. package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
  172. package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
  173. package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
  174. package/dist/src/capabilities/setup/operations/setupGenerator.js +343 -0
  175. package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
  176. package/dist/src/capabilities/setup/operations/setupLsp.js +277 -0
  177. package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
  178. package/dist/src/capabilities/setup/operations/setupMcp.js +207 -0
  179. package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
  180. package/dist/src/capabilities/setup/operations/setupSkills.js +316 -0
  181. package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
  182. package/dist/src/capabilities/setup/plan.js +128 -0
  183. package/dist/src/capabilities/setup/plan.js.map +1 -0
  184. package/dist/src/capabilities/setup/plan.render.js +193 -0
  185. package/dist/src/capabilities/setup/plan.render.js.map +1 -0
  186. package/dist/src/capabilities/setup/setup.render.js +54 -0
  187. package/dist/src/capabilities/setup/setup.render.js.map +1 -0
  188. package/dist/src/capabilities/setup/setup.verb.js +334 -0
  189. package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
  190. package/dist/src/capabilities/setup/shell.js +196 -0
  191. package/dist/src/capabilities/setup/shell.js.map +1 -0
  192. package/dist/src/capabilities/setup/targets.js +263 -0
  193. package/dist/src/capabilities/setup/targets.js.map +1 -0
  194. package/dist/src/capabilities/setup/types.js +5 -0
  195. package/dist/src/capabilities/setup/types.js.map +1 -0
  196. package/dist/src/capabilities/shared/assertExecOk.js +137 -0
  197. package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
  198. package/dist/src/capabilities/shared/bands.js +16 -0
  199. package/dist/src/capabilities/shared/bands.js.map +1 -0
  200. package/dist/src/capabilities/shared/index.js +26 -0
  201. package/dist/src/capabilities/shared/index.js.map +1 -0
  202. package/dist/src/capabilities/shared/packageManager.js +103 -0
  203. package/dist/src/capabilities/shared/packageManager.js.map +1 -0
  204. package/dist/src/capabilities/shared/registry.js +55 -0
  205. package/dist/src/capabilities/shared/registry.js.map +1 -0
  206. package/dist/src/capabilities/skill/discover.js +195 -0
  207. package/dist/src/capabilities/skill/discover.js.map +1 -0
  208. package/dist/src/capabilities/skill/index.js +10 -0
  209. package/dist/src/capabilities/skill/index.js.map +1 -0
  210. package/dist/src/capabilities/skill/render.js +49 -0
  211. package/dist/src/capabilities/skill/render.js.map +1 -0
  212. package/dist/src/capabilities/skill/verbs.js +83 -0
  213. package/dist/src/capabilities/skill/verbs.js.map +1 -0
  214. package/dist/src/capabilities/sources/collectStatus.js +103 -0
  215. package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
  216. package/dist/src/capabilities/sources/index.js +13 -0
  217. package/dist/src/capabilities/sources/index.js.map +1 -0
  218. package/dist/src/capabilities/sources/installSkills.js +167 -0
  219. package/dist/src/capabilities/sources/installSkills.js.map +1 -0
  220. package/dist/src/capabilities/sources/runUpdate.js +394 -0
  221. package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
  222. package/dist/src/capabilities/sources/status.render.js +64 -0
  223. package/dist/src/capabilities/sources/status.render.js.map +1 -0
  224. package/dist/src/capabilities/sources/status.verb.js +40 -0
  225. package/dist/src/capabilities/sources/status.verb.js.map +1 -0
  226. package/dist/src/capabilities/sources/types.js +6 -0
  227. package/dist/src/capabilities/sources/types.js.map +1 -0
  228. package/dist/src/capabilities/sources/update.render.js +34 -0
  229. package/dist/src/capabilities/sources/update.render.js.map +1 -0
  230. package/dist/src/capabilities/sources/update.verb.js +55 -0
  231. package/dist/src/capabilities/sources/update.verb.js.map +1 -0
  232. package/dist/src/capabilities/upgrade/index.js +5 -0
  233. package/dist/src/capabilities/upgrade/index.js.map +1 -0
  234. package/dist/src/capabilities/upgrade/runUpgrade.js +99 -0
  235. package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
  236. package/dist/src/capabilities/upgrade/types.js +5 -0
  237. package/dist/src/capabilities/upgrade/types.js.map +1 -0
  238. package/dist/src/capabilities/upgrade/upgrade.render.js +44 -0
  239. package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
  240. package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
  241. package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
  242. package/dist/src/capabilities/version/index.js +10 -0
  243. package/dist/src/capabilities/version/index.js.map +1 -0
  244. package/dist/src/capabilities/version/version.verb.js +36 -0
  245. package/dist/src/capabilities/version/version.verb.js.map +1 -0
  246. package/dist/src/constants.js +82 -0
  247. package/dist/src/constants.js.map +1 -0
  248. package/dist/src/index.js +12 -0
  249. package/dist/src/index.js.map +1 -0
  250. package/dist/src/kernel/completion/complete.js +66 -0
  251. package/dist/src/kernel/completion/complete.js.map +1 -0
  252. package/dist/src/kernel/completion/emitScripts.js +92 -0
  253. package/dist/src/kernel/completion/emitScripts.js.map +1 -0
  254. package/dist/src/kernel/completion/entitySource.js +285 -0
  255. package/dist/src/kernel/completion/entitySource.js.map +1 -0
  256. package/dist/src/kernel/completion/index.js +14 -0
  257. package/dist/src/kernel/completion/index.js.map +1 -0
  258. package/dist/src/kernel/completion/model.js +301 -0
  259. package/dist/src/kernel/completion/model.js.map +1 -0
  260. package/dist/src/kernel/completion/parse.js +253 -0
  261. package/dist/src/kernel/completion/parse.js.map +1 -0
  262. package/dist/src/kernel/completion/rank.js +101 -0
  263. package/dist/src/kernel/completion/rank.js.map +1 -0
  264. package/dist/src/kernel/completion/resolve.js +100 -0
  265. package/dist/src/kernel/completion/resolve.js.map +1 -0
  266. package/dist/src/kernel/completion/templates/bash.js +209 -0
  267. package/dist/src/kernel/completion/templates/bash.js.map +1 -0
  268. package/dist/src/kernel/completion/templates/fish.js +214 -0
  269. package/dist/src/kernel/completion/templates/fish.js.map +1 -0
  270. package/dist/src/kernel/completion/templates/index.js +23 -0
  271. package/dist/src/kernel/completion/templates/index.js.map +1 -0
  272. package/dist/src/kernel/completion/templates/shared.js +98 -0
  273. package/dist/src/kernel/completion/templates/shared.js.map +1 -0
  274. package/dist/src/kernel/completion/templates/zsh.js +201 -0
  275. package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
  276. package/dist/src/kernel/completion/types.js +13 -0
  277. package/dist/src/kernel/completion/types.js.map +1 -0
  278. package/dist/src/kernel/config/defaults.js +17 -0
  279. package/dist/src/kernel/config/defaults.js.map +1 -0
  280. package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
  281. package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
  282. package/dist/src/kernel/config/findProjectConfig.js +43 -0
  283. package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
  284. package/dist/src/kernel/config/firstRun.js +34 -0
  285. package/dist/src/kernel/config/firstRun.js.map +1 -0
  286. package/dist/src/kernel/config/globalConfig.js +79 -0
  287. package/dist/src/kernel/config/globalConfig.js.map +1 -0
  288. package/dist/src/kernel/config/index.js +16 -0
  289. package/dist/src/kernel/config/index.js.map +1 -0
  290. package/dist/src/kernel/config/paths.js +35 -0
  291. package/dist/src/kernel/config/paths.js.map +1 -0
  292. package/dist/src/kernel/config/readConfig.js +78 -0
  293. package/dist/src/kernel/config/readConfig.js.map +1 -0
  294. package/dist/src/kernel/config/schema.js +130 -0
  295. package/dist/src/kernel/config/schema.js.map +1 -0
  296. package/dist/src/kernel/config/types.js +19 -0
  297. package/dist/src/kernel/config/types.js.map +1 -0
  298. package/dist/src/kernel/config/writeConfigField.js +59 -0
  299. package/dist/src/kernel/config/writeConfigField.js.map +1 -0
  300. package/dist/src/kernel/copy.js +43 -0
  301. package/dist/src/kernel/copy.js.map +1 -0
  302. package/dist/src/kernel/error/PragmaError.js +149 -0
  303. package/dist/src/kernel/error/PragmaError.js.map +1 -0
  304. package/dist/src/kernel/error/constants.js +40 -0
  305. package/dist/src/kernel/error/constants.js.map +1 -0
  306. package/dist/src/kernel/error/fromTaskError.js +96 -0
  307. package/dist/src/kernel/error/fromTaskError.js.map +1 -0
  308. package/dist/src/kernel/error/index.js +13 -0
  309. package/dist/src/kernel/error/index.js.map +1 -0
  310. package/dist/src/kernel/error/recovery.js +52 -0
  311. package/dist/src/kernel/error/recovery.js.map +1 -0
  312. package/dist/src/kernel/error/renderError.js +115 -0
  313. package/dist/src/kernel/error/renderError.js.map +1 -0
  314. package/dist/src/kernel/error/serialize.js +25 -0
  315. package/dist/src/kernel/error/serialize.js.map +1 -0
  316. package/dist/src/kernel/error/types.js +9 -0
  317. package/dist/src/kernel/error/types.js.map +1 -0
  318. package/dist/src/kernel/index.js +25 -0
  319. package/dist/src/kernel/index.js.map +1 -0
  320. package/dist/src/kernel/packs/collect.js +187 -0
  321. package/dist/src/kernel/packs/collect.js.map +1 -0
  322. package/dist/src/kernel/packs/compile.js +304 -0
  323. package/dist/src/kernel/packs/compile.js.map +1 -0
  324. package/dist/src/kernel/packs/disclosure.js +76 -0
  325. package/dist/src/kernel/packs/disclosure.js.map +1 -0
  326. package/dist/src/kernel/packs/glob.js +38 -0
  327. package/dist/src/kernel/packs/glob.js.map +1 -0
  328. package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
  329. package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
  330. package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
  331. package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
  332. package/dist/src/kernel/packs/graphql/index.js +20 -0
  333. package/dist/src/kernel/packs/graphql/index.js.map +1 -0
  334. package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
  335. package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
  336. package/dist/src/kernel/packs/index.js +34 -0
  337. package/dist/src/kernel/packs/index.js.map +1 -0
  338. package/dist/src/kernel/packs/iri.js +110 -0
  339. package/dist/src/kernel/packs/iri.js.map +1 -0
  340. package/dist/src/kernel/packs/renderPack.js +129 -0
  341. package/dist/src/kernel/packs/renderPack.js.map +1 -0
  342. package/dist/src/kernel/packs/resolveEntity.js +223 -0
  343. package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
  344. package/dist/src/kernel/packs/runBodies.js +87 -0
  345. package/dist/src/kernel/packs/runBodies.js.map +1 -0
  346. package/dist/src/kernel/packs/sample.js +56 -0
  347. package/dist/src/kernel/packs/sample.js.map +1 -0
  348. package/dist/src/kernel/packs/schema.js +369 -0
  349. package/dist/src/kernel/packs/schema.js.map +1 -0
  350. package/dist/src/kernel/packs/sparql/applyFilters.js +68 -0
  351. package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
  352. package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
  353. package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
  354. package/dist/src/kernel/packs/sparql/buildLookupQuery.js +217 -0
  355. package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
  356. package/dist/src/kernel/packs/sparql/escape.js +21 -0
  357. package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
  358. package/dist/src/kernel/packs/sparql/index.js +31 -0
  359. package/dist/src/kernel/packs/sparql/index.js.map +1 -0
  360. package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
  361. package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
  362. package/dist/src/kernel/packs/types.js +30 -0
  363. package/dist/src/kernel/packs/types.js.map +1 -0
  364. package/dist/src/kernel/packs/uniqueness.js +30 -0
  365. package/dist/src/kernel/packs/uniqueness.js.map +1 -0
  366. package/dist/src/kernel/project/cli/buildProgram.js +263 -0
  367. package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
  368. package/dist/src/kernel/project/cli/constants.js +27 -0
  369. package/dist/src/kernel/project/cli/constants.js.map +1 -0
  370. package/dist/src/kernel/project/cli/dispatch.js +420 -0
  371. package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
  372. package/dist/src/kernel/project/cli/exitCodes.js +66 -0
  373. package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
  374. package/dist/src/kernel/project/cli/globalFlags.js +216 -0
  375. package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
  376. package/dist/src/kernel/project/cli/helpFormat.js +59 -0
  377. package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
  378. package/dist/src/kernel/project/cli/index.js +14 -0
  379. package/dist/src/kernel/project/cli/index.js.map +1 -0
  380. package/dist/src/kernel/project/cli/rootHelp.js +197 -0
  381. package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
  382. package/dist/src/kernel/project/cli/suggest.js +75 -0
  383. package/dist/src/kernel/project/cli/suggest.js.map +1 -0
  384. package/dist/src/kernel/project/cli/suggestNames.js +96 -0
  385. package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
  386. package/dist/src/kernel/project/cli/verbHelp.js +131 -0
  387. package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
  388. package/dist/src/kernel/project/mcp/buildServer.js +67 -0
  389. package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
  390. package/dist/src/kernel/project/mcp/envelope.js +37 -0
  391. package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
  392. package/dist/src/kernel/project/mcp/index.js +8 -0
  393. package/dist/src/kernel/project/mcp/index.js.map +1 -0
  394. package/dist/src/kernel/project/mcp/instructions.js +44 -0
  395. package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
  396. package/dist/src/kernel/project/mcp/mcpError.js +42 -0
  397. package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
  398. package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
  399. package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
  400. package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
  401. package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
  402. package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
  403. package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
  404. package/dist/src/kernel/project/mcp/registerVerb.js +300 -0
  405. package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
  406. package/dist/src/kernel/project/mcp/serve.js +35 -0
  407. package/dist/src/kernel/project/mcp/serve.js.map +1 -0
  408. package/dist/src/kernel/render/compactUri.js +24 -0
  409. package/dist/src/kernel/render/compactUri.js.map +1 -0
  410. package/dist/src/kernel/render/contracts.js +10 -0
  411. package/dist/src/kernel/render/contracts.js.map +1 -0
  412. package/dist/src/kernel/render/disclosure.js +34 -0
  413. package/dist/src/kernel/render/disclosure.js.map +1 -0
  414. package/dist/src/kernel/render/envelope.js +30 -0
  415. package/dist/src/kernel/render/envelope.js.map +1 -0
  416. package/dist/src/kernel/render/formatters.js +27 -0
  417. package/dist/src/kernel/render/formatters.js.map +1 -0
  418. package/dist/src/kernel/render/index.js +15 -0
  419. package/dist/src/kernel/render/index.js.map +1 -0
  420. package/dist/src/kernel/render/prefixes.js +46 -0
  421. package/dist/src/kernel/render/prefixes.js.map +1 -0
  422. package/dist/src/kernel/render/renderers.js +468 -0
  423. package/dist/src/kernel/render/renderers.js.map +1 -0
  424. package/dist/src/kernel/render/style.js +85 -0
  425. package/dist/src/kernel/render/style.js.map +1 -0
  426. package/dist/src/kernel/render/turtle.js +194 -0
  427. package/dist/src/kernel/render/turtle.js.map +1 -0
  428. package/dist/src/kernel/render/writeStdout.js +43 -0
  429. package/dist/src/kernel/render/writeStdout.js.map +1 -0
  430. package/dist/src/kernel/runtime/boot.js +49 -0
  431. package/dist/src/kernel/runtime/boot.js.map +1 -0
  432. package/dist/src/kernel/runtime/facade.js +39 -0
  433. package/dist/src/kernel/runtime/facade.js.map +1 -0
  434. package/dist/src/kernel/runtime/graphpack/build.js +122 -0
  435. package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
  436. package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
  437. package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
  438. package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
  439. package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
  440. package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
  441. package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
  442. package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
  443. package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
  444. package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
  445. package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
  446. package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
  447. package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
  448. package/dist/src/kernel/runtime/graphpack/index.js +11 -0
  449. package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
  450. package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
  451. package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
  452. package/dist/src/kernel/runtime/graphpack/read.js +92 -0
  453. package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
  454. package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
  455. package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
  456. package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
  457. package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
  458. package/dist/src/kernel/runtime/graphpack/types.js +55 -0
  459. package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
  460. package/dist/src/kernel/runtime/index.js +8 -0
  461. package/dist/src/kernel/runtime/index.js.map +1 -0
  462. package/dist/src/kernel/runtime/loadSession.js +34 -0
  463. package/dist/src/kernel/runtime/loadSession.js.map +1 -0
  464. package/dist/src/kernel/runtime/paths.js +78 -0
  465. package/dist/src/kernel/runtime/paths.js.map +1 -0
  466. package/dist/src/kernel/runtime/probe.js +37 -0
  467. package/dist/src/kernel/runtime/probe.js.map +1 -0
  468. package/dist/src/kernel/runtime/readEntity.js +363 -0
  469. package/dist/src/kernel/runtime/readEntity.js.map +1 -0
  470. package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
  471. package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
  472. package/dist/src/kernel/runtime/refs/index.js +29 -0
  473. package/dist/src/kernel/runtime/refs/index.js.map +1 -0
  474. package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
  475. package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
  476. package/dist/src/kernel/runtime/refs/resolve.js +332 -0
  477. package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
  478. package/dist/src/kernel/runtime/resolveSources.js +62 -0
  479. package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
  480. package/dist/src/kernel/runtime/store.js +75 -0
  481. package/dist/src/kernel/runtime/store.js.map +1 -0
  482. package/dist/src/kernel/runtime/storeReadiness.js +51 -0
  483. package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
  484. package/dist/src/kernel/runtime/types.js +11 -0
  485. package/dist/src/kernel/runtime/types.js.map +1 -0
  486. package/dist/src/kernel/spec/asVerb.js +21 -0
  487. package/dist/src/kernel/spec/asVerb.js.map +1 -0
  488. package/dist/src/kernel/spec/emitReference.js +578 -0
  489. package/dist/src/kernel/spec/emitReference.js.map +1 -0
  490. package/dist/src/kernel/spec/emitSurface.js +202 -0
  491. package/dist/src/kernel/spec/emitSurface.js.map +1 -0
  492. package/dist/src/kernel/spec/index.js +11 -0
  493. package/dist/src/kernel/spec/index.js.map +1 -0
  494. package/dist/src/kernel/spec/surfaceConformance.js +103 -0
  495. package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
  496. package/dist/src/kernel/spec/types.js +14 -0
  497. package/dist/src/kernel/spec/types.js.map +1 -0
  498. package/dist/src/kernel/spec/validate.js +110 -0
  499. package/dist/src/kernel/spec/validate.js.map +1 -0
  500. package/dist/src/kernel/vocabulary.js +97 -0
  501. package/dist/src/kernel/vocabulary.js.map +1 -0
  502. package/dist/src/types.js +11 -0
  503. package/dist/src/types.js.map +1 -0
  504. package/package.json +25 -24
  505. package/pragma.conf.ts +853 -0
  506. package/src/bin.ts +276 -82
  507. package/src/capabilities/block.parity.test.ts +253 -0
  508. package/src/capabilities/capabilities/capabilities.render.ts +4 -3
  509. package/src/capabilities/capabilities/capabilities.verb.ts +32 -14
  510. package/src/capabilities/capabilities/catalog.ts +20 -12
  511. package/src/capabilities/capabilities/hints.ts +43 -24
  512. package/src/capabilities/capabilities/index.ts +1 -1
  513. package/src/capabilities/colophon/collectColophon.ts +50 -24
  514. package/src/capabilities/colophon/colophon.render.ts +25 -1
  515. package/src/capabilities/colophon/colophon.test.ts +42 -21
  516. package/src/capabilities/colophon/colophon.verb.ts +9 -5
  517. package/src/capabilities/colophon/types.ts +16 -7
  518. package/src/capabilities/config/collectConfigShow.test.ts +58 -0
  519. package/src/capabilities/config/collectConfigShow.ts +43 -6
  520. package/src/capabilities/config/field.render.ts +4 -5
  521. package/src/capabilities/config/fields.ts +17 -37
  522. package/src/capabilities/config/get.verb.ts +70 -0
  523. package/src/capabilities/config/getUnset.test.ts +264 -0
  524. package/src/capabilities/config/index.ts +5 -1
  525. package/src/capabilities/config/runField.ts +40 -22
  526. package/src/capabilities/config/runGet.ts +34 -0
  527. package/src/capabilities/config/runSet.ts +35 -9
  528. package/src/capabilities/config/set.test.ts +48 -14
  529. package/src/capabilities/config/set.verb.ts +14 -9
  530. package/src/capabilities/config/show.render.test.ts +77 -5
  531. package/src/capabilities/config/show.render.ts +8 -13
  532. package/src/capabilities/config/show.verb.ts +13 -9
  533. package/src/capabilities/config/types.ts +26 -4
  534. package/src/capabilities/config/unset.verb.ts +58 -0
  535. package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
  536. package/src/capabilities/create/byteEquality.test.ts +95 -103
  537. package/src/capabilities/create/cliProjection.ts +227 -0
  538. package/src/capabilities/create/constants.ts +50 -0
  539. package/src/capabilities/create/create.mcp.test.ts +91 -7
  540. package/src/capabilities/create/create.render.ts +71 -7
  541. package/src/capabilities/create/create.test.ts +523 -162
  542. package/src/capabilities/create/create.verb.ts +361 -321
  543. package/src/capabilities/create/createGrammar.test.ts +865 -0
  544. package/src/capabilities/create/createHelp.ts +71 -0
  545. package/src/capabilities/create/createSurface.generated.ts +400 -0
  546. package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
  547. package/src/capabilities/create/cwdJail.test.ts +24 -5
  548. package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
  549. package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
  550. package/src/capabilities/create/index.ts +9 -14
  551. package/src/capabilities/create/messages.ts +18 -0
  552. package/src/capabilities/create/mount.ts +391 -0
  553. package/src/capabilities/create/pathJail.test.ts +90 -0
  554. package/src/capabilities/create/pathJail.ts +8 -5
  555. package/src/capabilities/create/pickGenerator.ts +40 -46
  556. package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
  557. package/src/capabilities/create/types.ts +29 -5
  558. package/src/capabilities/{standard/parity.test.ts → distribution.parity.test.ts} +24 -14
  559. package/src/capabilities/distribution.test.ts +122 -0
  560. package/src/capabilities/distribution.ts +54 -0
  561. package/src/capabilities/doctor/checks/checkKeStore.ts +9 -7
  562. package/src/capabilities/doctor/checks/checkPackageRefs.ts +82 -46
  563. package/src/capabilities/doctor/checks/checkPragmaVersion.ts +5 -4
  564. package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +125 -30
  565. package/src/capabilities/doctor/checks/checkShellCompletions.ts +113 -27
  566. package/src/capabilities/doctor/checks/index.ts +27 -0
  567. package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
  568. package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
  569. package/src/capabilities/doctor/checks/targetHealth.ts +274 -0
  570. package/src/capabilities/doctor/doctor.render.test.ts +24 -13
  571. package/src/capabilities/doctor/doctor.render.ts +45 -20
  572. package/src/capabilities/doctor/doctor.test.ts +158 -40
  573. package/src/capabilities/doctor/doctor.verb.ts +9 -5
  574. package/src/capabilities/doctor/runChecks.ts +65 -66
  575. package/src/capabilities/doctor/types.ts +21 -5
  576. package/src/capabilities/emptyRecovery.test.ts +44 -22
  577. package/src/capabilities/graph/examples.exec.test.ts +107 -0
  578. package/src/capabilities/graph/index.ts +1 -1
  579. package/src/capabilities/graph/inspect.render.ts +70 -22
  580. package/src/capabilities/graph/inspect.test.ts +260 -5
  581. package/src/capabilities/graph/inspect.verb.ts +18 -5
  582. package/src/capabilities/graph/query.render.ts +15 -3
  583. package/src/capabilities/graph/query.verb.ts +5 -4
  584. package/src/capabilities/graph/runQuery.ts +9 -7
  585. package/src/capabilities/index.ts +25 -19
  586. package/src/capabilities/info/collectInfo.ts +15 -10
  587. package/src/capabilities/info/info.render.ts +4 -3
  588. package/src/capabilities/info/info.verb.ts +4 -3
  589. package/src/capabilities/lazy.test.ts +125 -2
  590. package/src/capabilities/meta/complete.verb.ts +1 -1
  591. package/src/capabilities/meta/index.ts +1 -1
  592. package/src/capabilities/meta/mcp.verb.ts +10 -8
  593. package/src/capabilities/ontology/index.ts +15 -11
  594. package/src/capabilities/ontology/ontology.test.ts +6 -55
  595. package/src/capabilities/ontology/queries.ts +2 -2
  596. package/src/capabilities/ontology/render.ts +3 -4
  597. package/src/capabilities/ontology/verbs.ts +42 -83
  598. package/src/capabilities/prompt/index.ts +2 -2
  599. package/src/capabilities/prompt/prompt.render.ts +6 -2
  600. package/src/capabilities/prompt/prompt.test.ts +12 -6
  601. package/src/capabilities/prompt/types.ts +1 -1
  602. package/src/capabilities/prompt/verbs.ts +26 -14
  603. package/src/capabilities/reference.test.ts +63 -0
  604. package/src/capabilities/resources/provider.ts +367 -91
  605. package/src/capabilities/resources/resources.test.ts +411 -59
  606. package/src/capabilities/setup/buildPlan.ts +236 -0
  607. package/src/capabilities/setup/index.ts +7 -7
  608. package/src/capabilities/setup/mode.ts +74 -0
  609. package/src/capabilities/setup/operations/index.ts +74 -0
  610. package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
  611. package/src/capabilities/setup/operations/setupConfig.ts +124 -0
  612. package/src/capabilities/setup/operations/setupGenerator.ts +397 -320
  613. package/src/capabilities/setup/operations/setupLsp.ts +329 -68
  614. package/src/capabilities/setup/operations/setupMcp.ts +137 -97
  615. package/src/capabilities/setup/operations/setupSkills.ts +336 -108
  616. package/src/capabilities/setup/plan.render.ts +241 -0
  617. package/src/capabilities/setup/plan.ts +236 -0
  618. package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
  619. package/src/capabilities/setup/setup.render.test.ts +281 -73
  620. package/src/capabilities/setup/setup.render.ts +45 -77
  621. package/src/capabilities/setup/setup.test.ts +972 -209
  622. package/src/capabilities/setup/setup.verb.ts +233 -74
  623. package/src/capabilities/setup/shell.test.ts +86 -0
  624. package/src/capabilities/setup/shell.ts +166 -14
  625. package/src/capabilities/setup/targets.ts +367 -0
  626. package/src/capabilities/setup/types.ts +18 -57
  627. package/src/capabilities/shared/assertExecOk.ts +68 -10
  628. package/src/capabilities/shared/index.ts +32 -0
  629. package/src/capabilities/shared/packageManager.test.ts +55 -0
  630. package/src/capabilities/shared/packageManager.ts +62 -6
  631. package/src/capabilities/skill/discover.ts +47 -9
  632. package/src/capabilities/skill/index.ts +1 -1
  633. package/src/capabilities/skill/render.ts +14 -14
  634. package/src/capabilities/skill/skill.test.ts +7 -5
  635. package/src/capabilities/skill/verbs.ts +9 -10
  636. package/src/capabilities/sources/collectStatus.ts +61 -51
  637. package/src/capabilities/sources/index.ts +2 -2
  638. package/src/capabilities/sources/installSkills.ts +86 -9
  639. package/src/capabilities/sources/runUpdate.ts +164 -141
  640. package/src/capabilities/sources/sources.test.ts +265 -119
  641. package/src/capabilities/sources/status.render.test.ts +53 -24
  642. package/src/capabilities/sources/status.render.ts +25 -30
  643. package/src/capabilities/sources/status.verb.ts +16 -9
  644. package/src/capabilities/sources/types.ts +18 -25
  645. package/src/capabilities/sources/update.render.ts +10 -3
  646. package/src/capabilities/sources/update.verb.ts +13 -24
  647. package/src/capabilities/surface.test.ts +165 -25
  648. package/src/capabilities/tier.parity.test.ts +144 -0
  649. package/src/capabilities/upgrade/runUpgrade.ts +8 -8
  650. package/src/capabilities/upgrade/upgrade.render.ts +4 -5
  651. package/src/capabilities/upgrade/upgrade.test.ts +3 -3
  652. package/src/capabilities/upgrade/upgrade.verb.ts +8 -4
  653. package/src/capabilities/version/index.ts +12 -0
  654. package/src/capabilities/version/version.test.ts +66 -0
  655. package/src/capabilities/version/version.verb.ts +39 -0
  656. package/src/constants.test.ts +8 -6
  657. package/src/constants.ts +78 -22
  658. package/src/identity.test.ts +348 -0
  659. package/src/index.ts +2 -2
  660. package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +20 -15
  661. package/src/kernel/completion/complete.test.ts +12 -2
  662. package/src/kernel/completion/complete.ts +1 -1
  663. package/src/kernel/completion/emitScripts.test.ts +1 -1
  664. package/src/kernel/completion/emitScripts.ts +5 -3
  665. package/src/kernel/completion/entitySource.test.ts +185 -41
  666. package/src/kernel/completion/entitySource.ts +133 -110
  667. package/src/kernel/completion/model.test.ts +165 -13
  668. package/src/kernel/completion/model.ts +105 -14
  669. package/src/kernel/completion/parse.test.ts +4 -7
  670. package/src/kernel/completion/parse.ts +15 -0
  671. package/src/kernel/completion/resolve.test.ts +0 -1
  672. package/src/kernel/completion/safety.test.ts +104 -50
  673. package/src/kernel/completion/shellDrive.test.ts +611 -0
  674. package/src/kernel/completion/templates/bash.ts +7 -2
  675. package/src/kernel/completion/templates/fish.ts +28 -6
  676. package/src/kernel/completion/templates/index.ts +23 -0
  677. package/src/kernel/completion/types.ts +10 -3
  678. package/src/kernel/config/defaults.test.ts +108 -0
  679. package/src/kernel/config/defaults.ts +13 -23
  680. package/src/kernel/config/evaluateProjectConfig.ts +33 -11
  681. package/src/kernel/config/findProjectConfig.ts +4 -3
  682. package/src/kernel/config/firstRun.test.ts +44 -38
  683. package/src/kernel/config/firstRun.ts +24 -81
  684. package/src/kernel/config/globalConfig.ts +2 -2
  685. package/src/kernel/config/index.ts +5 -6
  686. package/src/kernel/config/paths.ts +17 -17
  687. package/src/kernel/config/readConfig.test.ts +246 -7
  688. package/src/kernel/config/readConfig.ts +8 -8
  689. package/src/kernel/config/schema.test.ts +50 -0
  690. package/src/kernel/config/schema.ts +100 -11
  691. package/src/kernel/config/types.ts +75 -19
  692. package/src/kernel/copy.test.ts +483 -0
  693. package/src/kernel/copy.ts +54 -0
  694. package/src/kernel/error/PragmaError.test.ts +6 -3
  695. package/src/kernel/error/PragmaError.ts +4 -2
  696. package/src/kernel/error/constants.ts +7 -4
  697. package/src/kernel/error/fromTaskError.ts +28 -6
  698. package/src/kernel/error/index.ts +1 -1
  699. package/src/kernel/error/recovery.test.ts +22 -45
  700. package/src/kernel/error/recovery.ts +36 -27
  701. package/src/kernel/error/renderError.ts +42 -1
  702. package/src/kernel/error/types.ts +25 -4
  703. package/src/kernel/index.ts +26 -0
  704. package/src/kernel/packs/collect.test.ts +195 -11
  705. package/src/kernel/packs/collect.ts +212 -61
  706. package/src/kernel/packs/compile.test.ts +293 -8
  707. package/src/kernel/packs/compile.ts +108 -15
  708. package/src/kernel/packs/disclosure.test.ts +5 -2
  709. package/src/kernel/packs/disclosure.ts +2 -2
  710. package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
  711. package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +13 -13
  712. package/src/kernel/packs/graphql/index.ts +20 -0
  713. package/src/kernel/packs/graphqlSource.test.ts +6 -3
  714. package/src/kernel/packs/index.ts +40 -0
  715. package/src/kernel/packs/iri.test.ts +73 -0
  716. package/src/kernel/packs/iri.ts +70 -20
  717. package/src/kernel/packs/renderPack.ts +28 -7
  718. package/src/kernel/packs/resolveEntity.test.ts +213 -0
  719. package/src/kernel/packs/resolveEntity.ts +132 -34
  720. package/src/kernel/packs/runBodies.ts +16 -16
  721. package/src/kernel/packs/sample.ts +1 -1
  722. package/src/kernel/packs/schema.ts +114 -11
  723. package/src/kernel/packs/sparql/applyFilters.ts +16 -17
  724. package/src/kernel/packs/sparql/buildLookupQuery.ts +75 -3
  725. package/src/kernel/packs/sparql/index.ts +37 -0
  726. package/src/kernel/packs/sparql/runSelect.test.ts +104 -10
  727. package/src/kernel/packs/sparql/runSelect.ts +75 -37
  728. package/src/kernel/packs/toolDescription.test.ts +52 -5
  729. package/src/kernel/packs/types.ts +52 -4
  730. package/src/kernel/packs/uniqueness.ts +5 -5
  731. package/src/kernel/project/cli/buildProgram.test.ts +157 -17
  732. package/src/kernel/project/cli/buildProgram.ts +77 -18
  733. package/src/kernel/project/cli/constants.ts +34 -0
  734. package/src/kernel/project/cli/dispatch.test.ts +227 -3
  735. package/src/kernel/project/cli/dispatch.ts +250 -48
  736. package/src/kernel/project/cli/exitCodes.ts +1 -1
  737. package/src/kernel/project/cli/globalFlags.test.ts +117 -1
  738. package/src/kernel/project/cli/globalFlags.ts +130 -30
  739. package/src/kernel/project/cli/helpFormat.ts +14 -1
  740. package/src/kernel/project/cli/rootHelp.ts +140 -111
  741. package/src/kernel/project/cli/suggest.test.ts +33 -1
  742. package/src/kernel/project/cli/suggest.ts +25 -1
  743. package/src/kernel/project/cli/verbHelp.test.ts +30 -0
  744. package/src/kernel/project/cli/verbHelp.ts +23 -7
  745. package/src/kernel/project/mcp/buildServer.ts +18 -10
  746. package/src/kernel/project/mcp/envelope.ts +2 -2
  747. package/src/kernel/project/mcp/instructions.ts +12 -7
  748. package/src/kernel/project/mcp/mcpError.ts +1 -1
  749. package/src/kernel/project/mcp/parity.test.ts +42 -1
  750. package/src/kernel/project/mcp/prompts/index.ts +37 -0
  751. package/src/kernel/project/mcp/prompts/prompts.test.ts +120 -5
  752. package/src/kernel/project/mcp/prompts/provider.ts +22 -8
  753. package/src/kernel/project/mcp/prompts/source.ts +69 -68
  754. package/src/kernel/project/mcp/registerVerb.ts +56 -11
  755. package/src/kernel/project/mcp/serve.ts +13 -5
  756. package/src/kernel/project/mcp/toolDescriptions.test.ts +6 -2
  757. package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
  758. package/src/kernel/render/contracts.ts +21 -0
  759. package/src/kernel/render/disclosure.ts +4 -2
  760. package/src/kernel/render/envelope.ts +2 -3
  761. package/src/kernel/render/formatters.ts +1 -1
  762. package/src/kernel/render/prefixes.test.ts +36 -0
  763. package/src/kernel/render/prefixes.ts +40 -13
  764. package/src/kernel/render/renderers.test.ts +244 -7
  765. package/src/kernel/render/renderers.ts +222 -20
  766. package/src/kernel/render/style.test.ts +75 -24
  767. package/src/kernel/render/style.ts +31 -1
  768. package/src/kernel/render/turtle.ts +222 -0
  769. package/src/kernel/runtime/graphpack/build.ts +29 -3
  770. package/src/kernel/runtime/graphpack/buildIndex.test.ts +46 -0
  771. package/src/kernel/runtime/graphpack/buildIndex.ts +53 -18
  772. package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +5 -5
  773. package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +3 -3
  774. package/src/kernel/runtime/graphpack/embedded/pack.stories.generated.ts +3 -0
  775. package/src/kernel/runtime/graphpack/embedded.ts +39 -13
  776. package/src/kernel/runtime/graphpack/graphpack.test.ts +205 -5
  777. package/src/kernel/runtime/graphpack/hash.ts +3 -2
  778. package/src/kernel/runtime/graphpack/index.ts +1 -1
  779. package/src/kernel/runtime/graphpack/manifest.ts +114 -12
  780. package/src/kernel/runtime/graphpack/read.ts +5 -11
  781. package/src/kernel/runtime/graphpack/schemas.ts +74 -0
  782. package/src/kernel/runtime/graphpack/stories.ts +84 -0
  783. package/src/kernel/runtime/graphpack/types.ts +61 -48
  784. package/src/kernel/runtime/loadSession.ts +1 -1
  785. package/src/kernel/runtime/paths.ts +64 -15
  786. package/src/kernel/runtime/probe.test.ts +8 -4
  787. package/src/kernel/runtime/probe.ts +6 -6
  788. package/src/kernel/runtime/readEntity.ts +477 -32
  789. package/src/kernel/runtime/refs/gitOps.ts +1 -19
  790. package/src/kernel/runtime/refs/index.ts +39 -0
  791. package/src/kernel/runtime/refs/parseRef.ts +8 -8
  792. package/src/kernel/runtime/refs/resolve.ts +82 -66
  793. package/src/kernel/runtime/resolveSources.test.ts +63 -24
  794. package/src/kernel/runtime/resolveSources.ts +36 -25
  795. package/src/kernel/runtime/storeReadiness.ts +10 -10
  796. package/src/kernel/runtime/storeless.test.ts +1 -1
  797. package/src/kernel/runtime/types.ts +15 -1
  798. package/src/kernel/runtime/wasmEmbed.test.ts +56 -55
  799. package/src/kernel/spec/emitReference.test.ts +3 -3
  800. package/src/kernel/spec/emitReference.ts +242 -34
  801. package/src/kernel/spec/emitSurface.ts +57 -11
  802. package/src/kernel/spec/surfaceConformance.test.ts +4 -2
  803. package/src/kernel/spec/surfaceConformance.ts +8 -0
  804. package/src/kernel/spec/types.ts +277 -13
  805. package/src/kernel/spec/validate.ts +2 -1
  806. package/src/kernel/vocabulary.test.ts +164 -0
  807. package/src/kernel/vocabulary.ts +146 -0
  808. package/src/testing/PARITY_GAPS.ts +8 -2
  809. package/src/testing/behavioral/README.md +3 -3
  810. package/src/testing/behavioral/completion.test.ts +19 -6
  811. package/src/testing/behavioral/docExamples.test.ts +14 -0
  812. package/src/testing/behavioral/errorMatrix.mcp.test.ts +6 -5
  813. package/src/testing/behavioral/errorMatrix.storeless.test.ts +1 -1
  814. package/src/testing/behavioral/exitCodes.e2e.test.ts +6 -5
  815. package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
  816. package/src/testing/behavioral/harness.foundation.test.ts +14 -5
  817. package/src/testing/behavioral/journeys.cli.test.ts +117 -76
  818. package/src/testing/behavioral/journeys.defaultPack.test.ts +88 -182
  819. package/src/testing/behavioral/journeys.firstInstall.test.ts +167 -0
  820. package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
  821. package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
  822. package/src/testing/behavioral/journeys.mcpLifecycle.mcp.test.ts +9 -6
  823. package/src/testing/behavioral/journeys.packageStories.test.ts +188 -0
  824. package/src/testing/behavioral/liveReadSurface.ts +4 -3
  825. package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
  826. package/src/testing/behavioral/mcpSurface.test.ts +10 -5
  827. package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
  828. package/src/testing/behavioral/staleCommands.test.ts +10 -0
  829. package/src/testing/eval/__snapshots__/eval.test.ts.snap +7 -7
  830. package/src/testing/eval/cases/assembly.ts +13 -6
  831. package/src/testing/eval/cases/effectful.ts +28 -15
  832. package/src/testing/eval/cases/readNouns.ts +22 -20
  833. package/src/testing/eval/cases/stable.ts +5 -1
  834. package/src/testing/eval/eval.test.ts +7 -1
  835. package/src/testing/fixtures/blockGraph.ts +79 -0
  836. package/src/testing/fixtures/fixtureCapability.ts +45 -1
  837. package/src/testing/fixtures/graph/canonical.ts +94 -5
  838. package/src/testing/fixtures/graph/defaultPack.ts +7 -6
  839. package/src/testing/fixtures/graph/owlExport.ts +7 -5
  840. package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
  841. package/src/testing/helpers/fixtureGraph.ts +33 -16
  842. package/src/testing/helpers/packRuntime.ts +2 -3
  843. package/src/testing/helpers/projectCli.ts +2 -1
  844. package/src/testing/helpers/projectMcp.ts +38 -6
  845. package/src/testing/helpers/runCli.ts +35 -18
  846. package/src/testing/perf/budgets.test.ts +24 -9
  847. package/src/testing/perf/budgets.ts +76 -12
  848. package/src/testing/perf/codegen.test.ts +126 -0
  849. package/src/testing/perf/globalSetup.test.ts +286 -0
  850. package/src/testing/perf/globalSetup.ts +611 -14
  851. package/src/testing/perf/measure.test.ts +38 -0
  852. package/src/testing/perf/measure.ts +23 -4
  853. package/src/testing/setupXdgIsolation.ts +81 -21
  854. package/src/testing/tempRoot.globalSetup.ts +122 -0
  855. package/src/types.ts +2 -2
  856. package/dist/pragma +0 -0
  857. package/src/capabilities/block/blockList.test.ts +0 -79
  858. package/src/capabilities/block/blockList.verb.ts +0 -163
  859. package/src/capabilities/block/index.ts +0 -25
  860. package/src/capabilities/block/pack.ts +0 -166
  861. package/src/capabilities/block/parity.test.ts +0 -187
  862. package/src/capabilities/block/tierChain.ts +0 -78
  863. package/src/capabilities/colophon/pragmaColophon.ts +0 -66
  864. package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -152
  865. package/src/capabilities/create/templates.embedded.generated.ts +0 -53
  866. package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -41
  867. package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
  868. package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -67
  869. package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -60
  870. package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
  871. package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
  872. package/src/capabilities/modifier/index.ts +0 -15
  873. package/src/capabilities/modifier/pack.ts +0 -64
  874. package/src/capabilities/standard/index.ts +0 -18
  875. package/src/capabilities/standard/pack.ts +0 -128
  876. package/src/capabilities/tier/index.ts +0 -19
  877. package/src/capabilities/tier/lookup.render.test.ts +0 -72
  878. package/src/capabilities/tier/lookup.render.ts +0 -59
  879. package/src/capabilities/tier/lookup.test.ts +0 -83
  880. package/src/capabilities/tier/lookup.verb.ts +0 -44
  881. package/src/capabilities/tier/pack.ts +0 -28
  882. package/src/capabilities/tier/runLookup.ts +0 -87
  883. package/src/capabilities/token/addConfig.render.ts +0 -27
  884. package/src/capabilities/token/addConfig.test.ts +0 -62
  885. package/src/capabilities/token/addConfig.verb.ts +0 -40
  886. package/src/capabilities/token/index.ts +0 -19
  887. package/src/capabilities/token/pack.ts +0 -58
  888. package/src/capabilities/token/runAddConfig.ts +0 -95
  889. package/src/kernel/completion/bashDrive.test.ts +0 -73
  890. package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
  891. package/src/kernel/runtime/graphpack/embedded/sample.ttl +0 -39
  892. package/src/kernel/runtime/lock.ts +0 -90
@@ -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
  }
@@ -17,7 +17,7 @@ const INDENT = " ";
17
17
  /** Two-space gap between a term column and its description. */
18
18
  const GAP = " ";
19
19
 
20
- /** A bold section header (`Flags`, `Verbs`, `Explore the design system`). */
20
+ /** A bold section header (`Flags`, `Verbs`, `Set up & maintain`). */
21
21
  export function helpHeading(text: string): string {
22
22
  return chalk.bold(text);
23
23
  }
@@ -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}`;
@@ -1,19 +1,22 @@
1
1
  /**
2
- * Curated root `--help` for `pragma`.
2
+ * The curated root `--help` page.
3
3
  *
4
- * The front door is hand-curated, not auto-generated: nouns are grouped into
5
- * task-oriented sections with real one-line summaries, and each section is
6
- * reconciled against the *live* nouns (from the registered verbs) so a noun
7
- * that is not built yet is dropped and an uncatalogued one still surfaces under
8
- * "Other" rather than vanishing. Ported from the v1 root help, retargeted at
9
- * the grammar and the v2 noun set (no `llm`/`graphql`/`trace`/`tokens`).
4
+ * The kernel curates the nouns it ships — and only those. It names no domain:
5
+ * the nouns it does NOT curate lead the page untitled (the header one line up
6
+ * already carries the distribution's blurb) and describe themselves through
7
+ * their own verbs, so the front door follows the content instead of naming it.
8
+ * Every section is reconciled against the *live* nouns (from the registered
9
+ * verbs), so a noun that is not built yet is dropped and one the kernel has
10
+ * never heard of still surfaces.
10
11
  */
11
12
 
12
- import type { VerbSpec } from "../../spec/types.js";
13
+ import { PROGRAM_LOGO } from "../../../constants.js";
14
+ import type { VerbSpec } from "../../spec/index.js";
13
15
  import {
14
16
  helpColumns,
15
17
  helpDim,
16
18
  helpHeading,
19
+ helpLogo,
17
20
  helpTerm,
18
21
  helpUsage,
19
22
  } from "./helpFormat.js";
@@ -24,88 +27,89 @@ interface NounSummary {
24
27
  }
25
28
 
26
29
  interface HelpGroup {
27
- readonly title: string;
30
+ /**
31
+ * Absent for the leading uncurated group: its rows sit directly under the
32
+ * usage line, since repeating the header's blurb as a heading three lines
33
+ * below it says the same thing twice.
34
+ */
35
+ readonly title?: string;
28
36
  readonly nouns: readonly NounSummary[];
29
37
  }
30
38
 
31
39
  /**
32
- * Task-oriented grouping with curated summaries. Order is intentional: what
33
- * people reach for most (exploring, generating) comes first; agent tooling
34
- * comes last.
40
+ * The kernel's own nouns, grouped by task with curated summaries. Order is
41
+ * intentional: what people reach for most comes first; agent tooling comes last.
42
+ *
43
+ * @param programName - The CLI binary name (the distribution's `name`).
44
+ * @returns The task-oriented groups, in display order.
35
45
  */
36
- const HELP_GROUPS: readonly HelpGroup[] = [
37
- {
38
- title: "Explore the design system",
39
- nouns: [
40
- {
41
- noun: "block",
42
- summary: "Inspect components & patterns and their anatomy",
43
- },
44
- { noun: "token", summary: "Look up design tokens and their values" },
45
- { noun: "modifier", summary: "Inspect modifiers and modifier families" },
46
- { noun: "standard", summary: "Browse code standards and categories" },
47
- {
48
- noun: "ontology",
49
- summary: "Explore the loaded ontologies (classes, properties)",
50
- },
51
- { noun: "tier", summary: "List the design-system tiers" },
52
- ],
53
- },
54
- {
55
- title: "Generate code",
56
- nouns: [
57
- { noun: "create", summary: "Scaffold components, packages, and apps" },
58
- ],
59
- },
60
- {
61
- title: "Query & serve the graph",
62
- nouns: [
63
- {
64
- noun: "graph",
65
- summary: "Run SPARQL queries or inspect a URI directly",
66
- },
67
- ],
68
- },
69
- {
70
- title: "Set up & maintain",
71
- nouns: [
72
- { noun: "doctor", summary: "Check environment health" },
73
- {
74
- noun: "setup",
75
- summary: "Configure MCP, skills, completions, and the LSP",
76
- },
77
- {
78
- noun: "sources",
79
- summary: "Build and refresh the local store from packages",
80
- },
81
- { noun: "config", summary: "Read and write pragma configuration" },
82
- { noun: "info", summary: "Show version, config, and update status" },
83
- {
84
- noun: "upgrade",
85
- summary: "Upgrade the pragma CLI to the latest version",
86
- },
87
- ],
88
- },
89
- {
90
- title: "For AI agents",
91
- nouns: [
92
- {
93
- noun: "capabilities",
94
- summary: "Discover conventions, tools, and the discovery sequence",
95
- },
96
- {
97
- noun: "colophon",
98
- summary: "Read how pragma and the active domain are made",
99
- },
100
- {
101
- noun: "skill",
102
- summary: "Browse agent skills from design-system packages",
103
- },
104
- { noun: "prompt", summary: "Browse reusable prompt templates" },
105
- { noun: "mcp", summary: "Start the MCP server over stdio" },
106
- ],
107
- },
108
- ];
46
+ function buildKernelGroups(programName: string): readonly HelpGroup[] {
47
+ return [
48
+ {
49
+ title: "Generate code",
50
+ nouns: [
51
+ { noun: "create", summary: "Scaffold components, packages, and apps" },
52
+ ],
53
+ },
54
+ {
55
+ title: "Query & serve the graph",
56
+ nouns: [
57
+ {
58
+ noun: "graph",
59
+ summary: "Run SPARQL queries or inspect a URI directly",
60
+ },
61
+ {
62
+ noun: "ontology",
63
+ summary: "Explore the loaded ontologies (classes, properties)",
64
+ },
65
+ ],
66
+ },
67
+ {
68
+ title: "Set up & maintain",
69
+ nouns: [
70
+ { noun: "doctor", summary: "Check environment health" },
71
+ {
72
+ noun: "setup",
73
+ summary: "Configure MCP, skills, completions, and the LSP",
74
+ },
75
+ {
76
+ noun: "sources",
77
+ summary: "Build and refresh the local store from packs",
78
+ },
79
+ {
80
+ noun: "config",
81
+ summary: `Read and write ${programName} configuration`,
82
+ },
83
+ { noun: "info", summary: "Show version, config, and update status" },
84
+ { noun: "version", summary: "Print the CLI version" },
85
+ {
86
+ noun: "upgrade",
87
+ summary: `Upgrade the ${programName} CLI to the latest version`,
88
+ },
89
+ ],
90
+ },
91
+ {
92
+ title: "For AI agents",
93
+ nouns: [
94
+ {
95
+ noun: "capabilities",
96
+ summary: "Discover conventions, tools, and the discovery sequence",
97
+ },
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" },
103
+ { noun: "skill", summary: "Browse agent skills from the active packs" },
104
+ { noun: "prompt", summary: "Browse reusable prompt templates" },
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.
108
+ { noun: "mcp", summary: "Start the MCP server over stdio" },
109
+ ],
110
+ },
111
+ ];
112
+ }
109
113
 
110
114
  /** All distinct, non-hidden top-level nouns present in the registered verbs. */
111
115
  function nounsFrom(verbs: readonly VerbSpec[]): Set<string> {
@@ -117,50 +121,56 @@ function nounsFrom(verbs: readonly VerbSpec[]): Set<string> {
117
121
  return nouns;
118
122
  }
119
123
 
120
- /** The summary to show for an uncatalogued but live noun. */
121
- function fallbackSummary(noun: string, verbs: readonly VerbSpec[]): string {
124
+ /**
125
+ * Summarise an uncurated noun from its first live verb — which is the pack's own
126
+ * `description` whenever the pack ships a `list` (`compilePack` compiles that
127
+ * verb first). The terminal period a pack sentence carries is dropped so the
128
+ * column reads as one voice with the kernel's own fragments.
129
+ */
130
+ function summarizeNoun(noun: string, verbs: readonly VerbSpec[]): string {
122
131
  const first = verbs.find((v) => v.path[0] === noun && !v.hidden);
123
- return first?.summary ?? `${noun} commands`;
132
+ return (first?.summary ?? `${noun} commands`).replace(/\.$/, "");
124
133
  }
125
134
 
126
135
  /**
127
136
  * Build the curated root help string.
128
137
  *
129
- * @param programName - The CLI binary name (`pragma`).
138
+ * @param programName - The CLI binary name (the distribution's `name`).
130
139
  * @param description - The program description shown in the header.
131
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.
132
147
  * @returns The formatted, colorized help text.
133
148
  */
134
149
  export function formatRootHelp(
135
150
  programName: string,
136
151
  description: string,
137
152
  verbs: readonly VerbSpec[],
153
+ version: string,
154
+ issuesUrl: string,
138
155
  ): string {
139
156
  const present = nounsFrom(verbs);
140
- // `mcp` is served by the bin's special-case, not a projected verb, but is
141
- // always available — surface it so the front door is complete.
142
- present.add("mcp");
143
- const catalogued = new Set(
144
- HELP_GROUPS.flatMap((g) => g.nouns.map((n) => n.noun)),
145
- );
157
+ const kernel = buildKernelGroups(programName);
158
+ const curated = new Set(kernel.flatMap((g) => g.nouns.map((n) => n.noun)));
146
159
 
147
- const uncatalogued = [...present].filter((n) => !catalogued.has(n)).sort();
148
160
  const groups: HelpGroup[] = [
149
- ...HELP_GROUPS.map((g) => ({
161
+ // Everything the kernel's curated table does not claim — in the shipped
162
+ // binary the bundled domain packs, in a fork whatever it ships. Untitled
163
+ // and first, so the domain leads the page without the kernel naming it.
164
+ {
165
+ nouns: [...present]
166
+ .filter((n) => !curated.has(n))
167
+ .sort()
168
+ .map((noun) => ({ noun, summary: summarizeNoun(noun, verbs) })),
169
+ },
170
+ ...kernel.map((g) => ({
150
171
  ...g,
151
172
  nouns: g.nouns.filter((n) => present.has(n.noun)),
152
173
  })),
153
- ...(uncatalogued.length > 0
154
- ? [
155
- {
156
- title: "Other",
157
- nouns: uncatalogued.map((noun) => ({
158
- noun,
159
- summary: fallbackSummary(noun, verbs),
160
- })),
161
- },
162
- ]
163
- : []),
164
174
  ].filter((g) => g.nouns.length > 0);
165
175
 
166
176
  // One column width across ALL groups so the noun column aligns section to
@@ -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]")}`,
@@ -180,7 +207,7 @@ export function formatRootHelp(
180
207
  ];
181
208
 
182
209
  for (const group of groups) {
183
- lines.push(helpHeading(group.title));
210
+ if (group.title) lines.push(helpHeading(group.title));
184
211
  lines.push(
185
212
  ...helpColumns(
186
213
  group.nouns.map((n) => [n.noun, n.summary] as const),
@@ -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 {