@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
package/src/bin.ts CHANGED
@@ -1,9 +1,9 @@
1
- #!/usr/bin/env bun
1
+ #!/usr/bin/env node
2
2
  /**
3
3
  * CLI entry point for `pragma` (v2 kernel).
4
4
  *
5
5
  * The composition root. Ordered early exits keep the hot paths minimal and
6
- * side-effect-free: `mcp` serves over stdio (D9); `__complete` resolves
6
+ * side-effect-free: `mcp serve` serves over stdio (D9); `__complete` resolves
7
7
  * completions storelessly *before* first-run so the greeting never leaks into a
8
8
  * shell buffer; `--version` prints and exits. Otherwise: parse global flags,
9
9
  * reject a bad `--format`, run first-run onboarding, then build the Commander
@@ -14,13 +14,39 @@
14
14
  */
15
15
 
16
16
  import type { Command } from "commander";
17
- import { BIN_NAME, PROGRAM_DESCRIPTION, VERSION } from "./constants.js";
17
+ import {
18
+ BIN_NAME,
19
+ DETAIL_LEVELS,
20
+ ISSUES_URL,
21
+ PROGRAM_DESCRIPTION,
22
+ VERSION,
23
+ } from "./constants.js";
24
+
25
+ /**
26
+ * The flags a bare invocation answers itself. `--version` returns earlier; the
27
+ * help form falls through to the front door, which IS its answer — so the
28
+ * unknown-flag guard must not mistake it for a typo. One spelling per flag:
29
+ * no `-h`/`-v` shorts exist anywhere on the surface.
30
+ */
31
+ const ROOT_FLAGS = new Set(["--help", "--version"]);
18
32
 
19
33
  async function main(): Promise<void> {
20
34
  const argv = process.argv.slice(2);
21
35
 
22
- // 1. MCP server entry (D9) — `pragma mcp` serves over stdio.
23
- if (argv[0] === "mcp") {
36
+ // 1. MCP server entry (D9) — `pragma mcp serve` serves over stdio.
37
+ // The exit is NARROW on purpose: argv must be EXACTLY those two tokens.
38
+ // The server's startup has to stay minimal and stdio-pure (no first-run
39
+ // banner, no config read, nothing on stdout but JSON-RPC), which is what
40
+ // this shortcut buys — but the noun itself is ordinary grammar, so
41
+ // `pragma mcp`, `pragma mcp --help` and `pragma mcp serve --help` fall
42
+ // through to the same help machinery every other noun uses, and root
43
+ // help's promise that `--help` works on any command becomes true.
44
+ // Matching on a PREFIX would extend that purity budget to malformed argv
45
+ // it was never bought for: `mcp serve extra` would serve instead of
46
+ // letting Commander reject the excess argument, and `mcp serve --version`
47
+ // would serve instead of answering the global flag. Anything suffixed
48
+ // falls through to the ordinary grammar, which owns both jobs.
49
+ if (argv.length === 2 && argv[0] === "mcp" && argv[1] === "serve") {
24
50
  const [{ serveMcp }, { capabilities }] = await Promise.all([
25
51
  import("./kernel/project/mcp/serve.js"),
26
52
  import("./capabilities/index.js"),
@@ -29,7 +55,8 @@ async function main(): Promise<void> {
29
55
  return;
30
56
  }
31
57
 
32
- // 2. Completion resolver — storeless, before first-run so no banner leaks.
58
+ // 2. Completion resolver — storeless, and reached before anything that could
59
+ // print, so a completion request is never polluted by a hint.
33
60
  // Protocol: `pragma __complete -- <words…>`; the first `--` is framing
34
61
  // (tolerated absent) and is stripped here so a later bare `--` stays the
35
62
  // user's end-of-options. Candidates go to stdout newline-delimited (zero
@@ -60,72 +87,131 @@ async function main(): Promise<void> {
60
87
  return;
61
88
  }
62
89
 
63
- const { parseGlobalFlags, readRawFormat, stripGlobalFlags } = await import(
64
- "./kernel/project/cli/globalFlags.js"
65
- );
90
+ const {
91
+ findValuedVerbose,
92
+ parseGlobalFlags,
93
+ readRawDetail,
94
+ readRawFormat,
95
+ stripGlobalFlags,
96
+ } = await import("./kernel/project/cli/globalFlags.js");
66
97
  const globalFlags = parseGlobalFlags(argv);
67
98
 
68
99
  // 3. `--version` is global — print and exit wherever it appears.
69
- if (argv.some((arg) => arg === "--version" || arg === "-v")) {
100
+ if (argv.some((arg) => arg === "--version")) {
70
101
  process.stdout.write(`${VERSION}\n`);
71
102
  return;
72
103
  }
73
104
 
74
- // 4. Reject an unknown `--format` early (help still prints regardless).
75
- const explicitHelp = argv.some((arg) => arg === "--help" || arg === "-h");
76
- const rawFormat = readRawFormat(argv);
77
- if (
78
- !explicitHelp &&
79
- rawFormat !== undefined &&
80
- !["plain", "llm", "json", "text"].includes(rawFormat)
81
- ) {
82
- const [
83
- { PragmaError },
84
- { renderErrorPlain, renderErrorJson },
85
- { mapExitCode },
86
- ] = await Promise.all([
87
- import("./kernel/error/PragmaError.js"),
88
- import("./kernel/error/renderError.js"),
89
- import("./kernel/project/cli/exitCodes.js"),
90
- ]);
91
- const error = PragmaError.invalidInput("format", rawFormat, {
92
- validOptions: ["plain", "llm", "json"],
93
- });
94
- const rendered =
95
- globalFlags.format === "json"
96
- ? renderErrorJson(error)
97
- : renderErrorPlain(error);
98
- process.stderr.write(`${rendered}\n`);
99
- process.exitCode = mapExitCode(error.code);
100
- return;
101
- }
102
-
103
- // 5. First-run onboarding (stderr-only, failure-tolerant). Skipped on the
104
- // side-effect-free help path — `--help` here; `mcp`, `__complete`, and
105
- // `--version` already returned above — so help never seeds state.
105
+ // 4. Reject a bad global-flag value early (help still prints regardless):
106
+ // an unknown `--format`, an unrecognized `--detail` level (which used to
107
+ // be dropped silently — the same defect class as a filter that
108
+ // evaporates), and a valued `--verbose=<x>` (the flag takes no value;
109
+ // accepting-and-ignoring one would be a silent no-op).
110
+ const explicitHelp = argv.some((arg) => arg === "--help");
111
+ const jsonMode = globalFlags.format === "json";
106
112
  if (!explicitHelp) {
107
- const { ensureFirstRun } = await import("./kernel/config/firstRun.js");
108
- await ensureFirstRun();
113
+ const rawFormat = readRawFormat(argv);
114
+ if (
115
+ rawFormat !== undefined &&
116
+ !["plain", "llm", "json"].includes(rawFormat)
117
+ ) {
118
+ await rejectGlobalValue(
119
+ "format",
120
+ rawFormat,
121
+ ["plain", "llm", "json"],
122
+ jsonMode,
123
+ );
124
+ return;
125
+ }
126
+ const rawDetail = readRawDetail(argv);
127
+ if (
128
+ rawDetail !== undefined &&
129
+ !(DETAIL_LEVELS as readonly string[]).includes(rawDetail)
130
+ ) {
131
+ await rejectGlobalValue(
132
+ "detail",
133
+ rawDetail,
134
+ [...DETAIL_LEVELS],
135
+ jsonMode,
136
+ );
137
+ return;
138
+ }
139
+ const valuedVerbose = findValuedVerbose(argv);
140
+ if (valuedVerbose !== undefined) {
141
+ const { PragmaError } = await import("./kernel/error/PragmaError.js");
142
+ await renderStartupError(
143
+ new PragmaError({
144
+ code: "INVALID_INPUT",
145
+ message: `\`--verbose\` takes no value; \`${valuedVerbose}\` is not a flag of this program.`,
146
+ recovery: { message: "Use `--verbose` on its own." },
147
+ }),
148
+ jsonMode,
149
+ );
150
+ return;
151
+ }
109
152
  }
110
153
 
111
- // 6. Build the command tree.
112
- const [{ buildProgram }, { capabilities }] = await Promise.all([
113
- import("./kernel/project/cli/buildProgram.js"),
114
- import("./capabilities/index.js"),
115
- ]);
154
+ // 5. Load the capability registry — the command tree's data. Commander and
155
+ // the program builder are NOT loaded yet: the bare-invocation branch
156
+ // below answers `--help` and the front door from the registry alone, so
157
+ // the help fast path never pays for the parser it will not run.
158
+ const { capabilities } = await import("./capabilities/index.js");
116
159
  const args = stripGlobalFlags(argv);
117
160
 
118
- // 7. A bare invocation (no command token — argv empty or only global flags)
161
+ // 6. A bare invocation (no command token — argv empty or only global flags)
119
162
  // prints the curated front door instead of exiting silently. Uses the
120
163
  // static capabilities — the front door never reads config or stories.
121
164
  if (!args.some((arg) => !arg.startsWith("-"))) {
165
+ // `args` is argv with the global flags already stripped, so a token still
166
+ // starting with `-` here is a flag this program does not have — EXCEPT the
167
+ // two the front door itself answers, which reach this branch by design.
168
+ // Commander rejects unknown flags below the root; without this the ROOT
169
+ // answered a typo with the front door and exit 0, so `pragma --detial
170
+ // standard` read as success.
171
+ const unknownFlag = args.find(
172
+ (arg) => arg.startsWith("-") && !ROOT_FLAGS.has(arg),
173
+ );
174
+ if (unknownFlag !== undefined) {
175
+ const [
176
+ { PragmaError },
177
+ { renderErrorPlain, renderErrorJson },
178
+ { mapExitCode },
179
+ ] = await Promise.all([
180
+ import("./kernel/error/PragmaError.js"),
181
+ import("./kernel/error/renderError.js"),
182
+ import("./kernel/project/cli/exitCodes.js"),
183
+ ]);
184
+ const error = new PragmaError({
185
+ code: "INVALID_INPUT",
186
+ message: `Unknown option "${unknownFlag}".`,
187
+ recovery: {
188
+ message: "Run with `--help` to see the available options.",
189
+ },
190
+ });
191
+ process.stderr.write(
192
+ `${
193
+ globalFlags.format === "json"
194
+ ? renderErrorJson(error)
195
+ : renderErrorPlain(error)
196
+ }\n`,
197
+ );
198
+ process.exitCode = mapExitCode(error.code);
199
+ return;
200
+ }
201
+
122
202
  const { formatRootHelp } = await import("./kernel/project/cli/rootHelp.js");
123
203
  const live = capabilities
124
204
  .flatMap((module) => [...module.verbs])
125
205
  .filter((verb) => !verb.hidden);
126
206
  process.stdout.write(
127
- `${formatRootHelp(BIN_NAME, PROGRAM_DESCRIPTION, live)}\n`,
207
+ `${formatRootHelp(BIN_NAME, PROGRAM_DESCRIPTION, live, VERSION, ISSUES_URL)}\n`,
128
208
  );
209
+ // The front door is a read, so it is where the un-set-up hint belongs: the
210
+ // machine's state is the presence of the global config, and nothing is
211
+ // written to discover it.
212
+ const { setupHintLines } = await import("./kernel/config/firstRun.js");
213
+ const hint = setupHintLines();
214
+ if (hint.length > 0) process.stderr.write(`\n${hint.join("\n")}\n`);
129
215
  return;
130
216
  }
131
217
 
@@ -143,10 +229,12 @@ async function main(): Promise<void> {
143
229
  );
144
230
  const effective = await loadEffectiveModules(capabilities, process.cwd());
145
231
  modules = effective.modules;
146
- for (const problem of effective.problems) {
147
- process.stderr.write(
148
- `Ignored story ${problem.source}: ${problem.message}\n`,
149
- );
232
+ if (globalFlags.quiet !== true) {
233
+ for (const problem of effective.problems) {
234
+ process.stderr.write(
235
+ `Ignored story ${problem.source}: ${problem.message}\n`,
236
+ );
237
+ }
150
238
  }
151
239
  } catch (error) {
152
240
  await renderStartupError(error, globalFlags.format === "json");
@@ -155,11 +243,31 @@ async function main(): Promise<void> {
155
243
  }
156
244
  const verbs = modules.flatMap((module) => [...module.verbs]);
157
245
 
246
+ // Module-owned noun mounts (CapabilityModule.cliProjection), keyed by the
247
+ // module's noun. A module's verbs all share their noun, so the module name
248
+ // is that noun for every module that declares a mount.
249
+ const mounts = new Map(
250
+ modules.flatMap((module) =>
251
+ module.cliProjection
252
+ ? [[module.name, module.cliProjection] as const]
253
+ : [],
254
+ ),
255
+ );
256
+
257
+ // A mount may defer its registration machinery behind `prepare()` (the
258
+ // fast paths import the projection hook without ever mounting) — resolve
259
+ // every deferred import before the tree is built, alongside the program
260
+ // builder's own deferred load.
261
+ const [{ buildProgram }] = await Promise.all([
262
+ import("./kernel/project/cli/buildProgram.js"),
263
+ ...[...mounts.values()].map((projection) => projection.prepare?.()),
264
+ ]);
158
265
  const program = buildProgram(verbs, {
159
266
  globalFlags,
160
267
  programName: BIN_NAME,
161
268
  description: PROGRAM_DESCRIPTION,
162
269
  version: VERSION,
270
+ mounts,
163
271
  });
164
272
  // Silence Commander's default stderr writer on EVERY command, not just the
165
273
  // root — otherwise a bad subcommand/option prints Commander's raw `error: …`
@@ -169,10 +277,30 @@ async function main(): Promise<void> {
169
277
  try {
170
278
  await program.parseAsync(args, { from: "user" });
171
279
  } catch (error) {
172
- await handleProgramError(error, argv, globalFlags.format === "json", verbs);
280
+ await handleProgramError(error, argv, globalFlags.format, verbs);
173
281
  }
174
282
  }
175
283
 
284
+ /**
285
+ * Reject an invalid global-flag value before dispatch: one renderer for the
286
+ * `--format`/`--detail` guards, so every validated global value flag fails
287
+ * with the same invalid-input shape and its valid list.
288
+ */
289
+ async function rejectGlobalValue(
290
+ name: string,
291
+ value: string,
292
+ validOptions: readonly string[],
293
+ jsonMode: boolean,
294
+ ): Promise<void> {
295
+ const { PragmaError } = await import("./kernel/error/PragmaError.js");
296
+ await renderStartupError(
297
+ PragmaError.invalidInput(name, value, {
298
+ validOptions: [...validOptions],
299
+ }),
300
+ jsonMode,
301
+ );
302
+ }
303
+
176
304
  /**
177
305
  * Render a startup error (e.g. an invalid config story pack) before the command
178
306
  * tree is built, mapping it to stderr + an exit code — the same envelope
@@ -216,7 +344,7 @@ function silenceCommanderErrors(command: Command): void {
216
344
  async function handleProgramError(
217
345
  error: unknown,
218
346
  argv: readonly string[],
219
- jsonMode: boolean,
347
+ format: import("./constants.js").OutputFormat,
220
348
  verbs: import("./kernel/spec/types.js").VerbSpec[],
221
349
  ): Promise<void> {
222
350
  const { CommanderError } = await import("commander");
@@ -224,16 +352,66 @@ async function handleProgramError(
224
352
  if (error instanceof CommanderError) {
225
353
  if (
226
354
  error.code === "commander.helpDisplayed" ||
227
- error.code === "commander.version" ||
228
- error.code === "commander.help"
355
+ error.code === "commander.version"
229
356
  ) {
230
357
  process.exitCode = 0;
231
358
  return;
232
359
  }
233
- if (error.code === "commander.unknownCommand") {
234
- const { nounVerbMap, resolveUnknownCommand } = await import(
235
- "./kernel/project/cli/suggest.js"
360
+ if (error.code === "commander.help") {
361
+ // Respect the help error's OWN exit code: `help({ error: true })` — a
362
+ // bare namespace with children, help written to stderr — carries 1;
363
+ // a stdout help carries 0.
364
+ process.exitCode = error.exitCode;
365
+ return;
366
+ }
367
+
368
+ // A parse failure whose argv still speaks a retired module grammar gets
369
+ // that module's designed migration error (the module authors the text;
370
+ // the kernel only routes). Currently: `create component --framework`
371
+ // (R1) — scoped to the ONE command that ever had the flag, so
372
+ // `create package --framework …` keeps its honest unknown-option error
373
+ // instead of a migration message about a grammar it never spoke — and
374
+ // scoped to the pre-terminator span: after `--` the spelling is an
375
+ // operand, not the retired flag, so the real parse error stands.
376
+ const { selectScanSpan, stripGlobalFlags } = await import(
377
+ "./kernel/project/cli/globalFlags.js"
378
+ );
379
+ const strippedArgs = stripGlobalFlags(argv);
380
+ const strippedPositionals = strippedArgs.filter(
381
+ (arg) => !arg.startsWith("-"),
382
+ );
383
+ if (
384
+ strippedPositionals[0] === "create" &&
385
+ strippedPositionals[1] === "component" &&
386
+ selectScanSpan(strippedArgs).some(
387
+ (arg) => arg === "--framework" || arg.startsWith("--framework="),
388
+ )
389
+ ) {
390
+ const [
391
+ { FRAMEWORK_FLAG_ERROR },
392
+ { PragmaError },
393
+ { renderErrorForFormat },
394
+ ] = await Promise.all([
395
+ import("./capabilities/create/messages.js"),
396
+ import("./kernel/error/PragmaError.js"),
397
+ import("./kernel/error/renderError.js"),
398
+ ]);
399
+ // Explicit --format json/llm envelope (the kernel's one gate+renderer
400
+ // decision); plain keeps the designed raw line.
401
+ const rendered = renderErrorForFormat(
402
+ new PragmaError({
403
+ code: "INVALID_INPUT",
404
+ message: FRAMEWORK_FLAG_ERROR.replace(/^error:\s*/i, ""),
405
+ }),
406
+ format,
236
407
  );
408
+ process.stderr.write(`${rendered ?? FRAMEWORK_FLAG_ERROR}\n`);
409
+ process.exitCode = 2;
410
+ return;
411
+ }
412
+ if (error.code === "commander.unknownCommand") {
413
+ const { curatedSuggestions, nounVerbMap, resolveUnknownCommand } =
414
+ await import("./kernel/project/cli/suggest.js");
237
415
  const { stripGlobalFlags } = await import(
238
416
  "./kernel/project/cli/globalFlags.js"
239
417
  );
@@ -244,24 +422,28 @@ async function handleProgramError(
244
422
  if (unknown) {
245
423
  // Route through the same PragmaError + renderers as every other error,
246
424
  // so the plain path gets the `Error:` prefix and the shared "Did you
247
- // mean?" list instead of a second, inline rendering.
425
+ // mean?" list instead of a second, inline rendering — and an explicit
426
+ // machine format gets the same envelope every other usage error
427
+ // emits (the kernel's one gate+renderer decision; plain and json
428
+ // bytes unchanged by construction).
248
429
  const [
249
430
  { PragmaError },
250
- { renderErrorPlain, renderErrorJson },
431
+ { renderErrorForFormat, renderErrorPlain },
251
432
  { suggestNames },
252
433
  ] = await Promise.all([
253
434
  import("./kernel/error/PragmaError.js"),
254
435
  import("./kernel/error/renderError.js"),
255
436
  import("./kernel/project/cli/suggestNames.js"),
256
437
  ]);
257
- const suggestions = suggestNames(unknown.token, [
258
- ...unknown.candidates,
259
- ]);
438
+ const curated = curatedSuggestions(unknown.token);
439
+ const suggestions = curated
440
+ ? [...curated]
441
+ : suggestNames(unknown.token, [...unknown.candidates]);
260
442
  const unknownError = PragmaError.unknownVerb(unknown.token, {
261
443
  suggestions,
262
444
  });
263
445
  process.stderr.write(
264
- `${jsonMode ? renderErrorJson(unknownError) : renderErrorPlain(unknownError)}\n`,
446
+ `${renderErrorForFormat(unknownError, format) ?? renderErrorPlain(unknownError)}\n`,
265
447
  );
266
448
  }
267
449
  process.exitCode = 2;
@@ -269,19 +451,22 @@ async function handleProgramError(
269
451
  }
270
452
 
271
453
  // Other usage errors (missing argument, unknown option, bad choice). Under
272
- // --format json these route through the same error envelope agents parse.
273
- if (jsonMode) {
274
- const [{ PragmaError }, { renderErrorJson }] = await Promise.all([
275
- import("./kernel/error/PragmaError.js"),
276
- import("./kernel/error/renderError.js"),
277
- ]);
278
- const message = error.message.replace(/^error:\s*/i, "");
279
- process.stderr.write(
280
- `${renderErrorJson(new PragmaError({ code: "INVALID_INPUT", message }))}\n`,
281
- );
282
- } else {
283
- process.stderr.write(`${error.message}\n`);
284
- }
454
+ // an explicit --format json/llm these route through the same error
455
+ // envelope agents parse (the kernel's one gate+renderer decision — the
456
+ // llm half used to split this one taxonomy class: an excess positional
457
+ // enveloped while an unknown option stayed raw prose).
458
+ const [{ PragmaError }, { renderErrorForFormat }] = await Promise.all([
459
+ import("./kernel/error/PragmaError.js"),
460
+ import("./kernel/error/renderError.js"),
461
+ ]);
462
+ const rendered = renderErrorForFormat(
463
+ new PragmaError({
464
+ code: "INVALID_INPUT",
465
+ message: error.message.replace(/^error:\s*/i, ""),
466
+ }),
467
+ format,
468
+ );
469
+ process.stderr.write(`${rendered ?? error.message}\n`);
285
470
  process.exitCode = 2;
286
471
  return;
287
472
  }
@@ -302,7 +487,7 @@ async function handleProgramError(
302
487
  error instanceof Error ? error.message : String(error),
303
488
  );
304
489
  process.stderr.write(
305
- `${jsonMode ? renderErrorJson(pragmaError) : renderErrorPlain(pragmaError)}\n`,
490
+ `${format === "json" ? renderErrorJson(pragmaError) : renderErrorPlain(pragmaError)}\n`,
306
491
  );
307
492
  process.exitCode = mapExitCode(pragmaError.code);
308
493
  }
@@ -138,9 +138,12 @@ ds:Component a owl:Class .
138
138
  try {
139
139
  const rows = (await verb("list").run({}, emptyRt)) as PackRow[];
140
140
  expect(rows).toEqual([]);
141
- const plain = verb("list").output.formatters.plain(rows);
142
- expect(plain).toContain("No blocks in the store.");
143
- expect(plain).toContain("pragma sources update");
141
+ // The same semantics, on the empty-state seam: the calm message + its
142
+ // runnable hint now reach the user via stderr (`emptyNotice`), keeping
143
+ // plain stdout pure data.
144
+ const notice = verb("list").output.formatters.emptyNotice?.(rows);
145
+ expect(notice).toContain("No blocks in the store.");
146
+ expect(notice).toContain("pragma sources update");
144
147
  } finally {
145
148
  (await emptyRt.store.get()).store.dispose();
146
149
  }
@@ -7,7 +7,7 @@
7
7
  */
8
8
 
9
9
  import { BIN_NAME } from "../../constants.js";
10
- import type { Formatters } from "../../kernel/spec/types.js";
10
+ import type { Formatters } from "../../kernel/spec/index.js";
11
11
  import type { CapabilitiesData, ToolCategory } from "./types.js";
12
12
 
13
13
  /** Category display order for grouped tool listings. */
@@ -23,7 +23,7 @@
23
23
 
24
24
  import { BIN_NAME } from "../../constants.js";
25
25
  import { asVerb } from "../../kernel/spec/asVerb.js";
26
- import type { VerbSpec } from "../../kernel/spec/types.js";
26
+ import type { VerbSpec } from "../../kernel/spec/index.js";
27
27
  import { capabilitiesFormatters } from "./capabilities.render.js";
28
28
  import type { CapabilitiesData } from "./types.js";
29
29
 
@@ -15,8 +15,8 @@
15
15
  */
16
16
 
17
17
  import { BIN_NAME, PROGRAM_DESCRIPTION, VERSION } from "../../constants.js";
18
- import { emitSurface } from "../../kernel/spec/emitSurface.js";
19
- import type { CapabilityModule } from "../../kernel/spec/types.js";
18
+ import type { CapabilityModule } from "../../kernel/spec/index.js";
19
+ import { emitSurface } from "../../kernel/spec/index.js";
20
20
  import { TOOL_HINTS } from "./hints.js";
21
21
  import type {
22
22
  CapabilitiesData,
@@ -91,7 +91,7 @@ export function buildDiscoverySequence(
91
91
  stage: 2,
92
92
  tool: "sources_status",
93
93
  purpose:
94
- "See which pack is answering. A fresh install answers reads from the snapshot embedded in the binary and needs no build; only an `unavailable` status requires sources_update (confirm: true), which is a project that declared its own packs and has not built them.",
94
+ "See which pack is answering. A fresh install answers reads from the snapshot shipped with the CLI and needs no build; only an `unavailable` status requires sources_update (confirm: true), which is a project that declared its own packs and has not built them.",
95
95
  },
96
96
  {
97
97
  stage: 3,
@@ -58,7 +58,13 @@ export const TOOL_HINTS: Record<string, ToolHint> = {
58
58
  },
59
59
  colophon: {
60
60
  category: "read",
61
- use_when: `Understanding how ${BIN_NAME} and the active domain are built — the toolchain + domain colophon, for onboarding or a demo`,
61
+ use_when:
62
+ "Understanding how the active domain is built — its declared colophon, for onboarding or a demo",
63
+ },
64
+ config_get: {
65
+ category: "read",
66
+ use_when:
67
+ "Reading ONE config field's effective value and the layer it came from — the single-value form of config_show",
62
68
  },
63
69
  config_show: {
64
70
  category: "read",
@@ -99,11 +105,6 @@ export const TOOL_HINTS: Record<string, ToolHint> = {
99
105
  use_when:
100
106
  "Exploring the full schema of a namespace by name — classes, properties, and hierarchy",
101
107
  },
102
- ontology_show: {
103
- category: "read",
104
- use_when:
105
- "Deprecated alias of ontology_lookup — exploring a namespace's schema (prefer ontology_lookup)",
106
- },
107
108
  prompt_list: {
108
109
  category: "read",
109
110
  use_when: "Browsing the workflow prompt templates the active graph offers",
@@ -115,7 +116,7 @@ export const TOOL_HINTS: Record<string, ToolHint> = {
115
116
  },
116
117
  skill_list: {
117
118
  category: "read",
118
- use_when: "Discovering agent skills provided by installed packages",
119
+ use_when: "Discovering agent skills provided by installed packs",
119
120
  },
120
121
  skill_lookup: {
121
122
  category: "read",
@@ -141,6 +142,25 @@ export const TOOL_HINTS: Record<string, ToolHint> = {
141
142
  category: "read",
142
143
  use_when: "Discovering which standard categories exist before filtering",
143
144
  },
145
+ concept_list: {
146
+ category: "read",
147
+ use_when:
148
+ "Browsing long-form design-system concepts (foundations, how-to guides, decision guides)",
149
+ },
150
+ concept_lookup: {
151
+ category: "read",
152
+ use_when: "Reading a concept's full Markdown documentation by name or IRI",
153
+ },
154
+ implementation_list: {
155
+ category: "read",
156
+ use_when:
157
+ "Finding which library implements a block, on which platform, and where its source lives",
158
+ },
159
+ implementation_libraries: {
160
+ category: "read",
161
+ use_when:
162
+ "Discovering which implementation libraries exist, and how much of the design system each covers",
163
+ },
144
164
  standard_sample: {
145
165
  category: "read",
146
166
  use_when:
@@ -176,6 +196,11 @@ export const TOOL_HINTS: Record<string, ToolHint> = {
176
196
  use_when:
177
197
  "Setting any config field by name — tier, channel, or detail (e.g. `config set tier apps/lxd`)",
178
198
  },
199
+ config_unset: {
200
+ category: "write",
201
+ use_when:
202
+ 'Clearing a config field so the built-in default applies again — no value means "remove", this tool does',
203
+ },
179
204
  create_component: {
180
205
  category: "write",
181
206
  use_when: "Scaffolding a new component (React, Svelte, or Lit)",
@@ -3,7 +3,7 @@
3
3
  * that replaces the retired `llm` tool.
4
4
  */
5
5
 
6
- import type { CapabilityModule } from "../../kernel/spec/types.js";
6
+ import type { CapabilityModule } from "../../kernel/spec/index.js";
7
7
  import { capabilitiesSelfVerb } from "./capabilities.verb.js";
8
8
 
9
9
  /** The `capabilities` capability module (a single storeless self-verb). */