@canonical/pragma-cli 0.34.0 → 0.36.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 (832) hide show
  1. package/README.md +153 -30
  2. package/bundled-skills/add-standard/SKILL.md +338 -0
  3. package/bundled-skills/adoption-a1-styles/SKILL.md +269 -0
  4. package/bundled-skills/adoption-a2-components/SKILL.md +291 -0
  5. package/bundled-skills/adoption-a3-forms/SKILL.md +260 -0
  6. package/bundled-skills/anatomy-author/ANATOMY_DSL_SPEC.md +406 -0
  7. package/bundled-skills/anatomy-author/SKILL.md +1226 -0
  8. package/bundled-skills/design-auditor/SKILL.md +455 -0
  9. package/bundled-skills/implement-component/SKILL.md +333 -0
  10. package/bundled-skills/specify-component/SKILL.md +331 -0
  11. package/bundled-skills/specify-pattern/SKILL.md +292 -0
  12. package/dist/.build-ok +0 -0
  13. package/dist/package.json +84 -0
  14. package/dist/pragma.conf.js +1016 -0
  15. package/dist/pragma.conf.js.map +1 -0
  16. package/dist/src/bin.js +356 -0
  17. package/dist/src/bin.js.map +1 -0
  18. package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
  19. package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
  20. package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
  21. package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
  22. package/dist/src/capabilities/capabilities/catalog.js +130 -0
  23. package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
  24. package/dist/src/capabilities/capabilities/hints.js +195 -0
  25. package/dist/src/capabilities/capabilities/hints.js.map +1 -0
  26. package/dist/src/capabilities/capabilities/index.js +11 -0
  27. package/dist/src/capabilities/capabilities/index.js.map +1 -0
  28. package/dist/src/capabilities/capabilities/types.js +11 -0
  29. package/dist/src/capabilities/capabilities/types.js.map +1 -0
  30. package/dist/src/capabilities/colophon/collectColophon.js +83 -0
  31. package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
  32. package/dist/src/capabilities/colophon/colophon.render.js +59 -0
  33. package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
  34. package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
  35. package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
  36. package/dist/src/capabilities/colophon/index.js +5 -0
  37. package/dist/src/capabilities/colophon/index.js.map +1 -0
  38. package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
  39. package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
  40. package/dist/src/capabilities/colophon/types.js +10 -0
  41. package/dist/src/capabilities/colophon/types.js.map +1 -0
  42. package/dist/src/capabilities/config/collectConfigShow.js +59 -0
  43. package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
  44. package/dist/src/capabilities/config/field.render.js +22 -0
  45. package/dist/src/capabilities/config/field.render.js.map +1 -0
  46. package/dist/src/capabilities/config/fields.js +46 -0
  47. package/dist/src/capabilities/config/fields.js.map +1 -0
  48. package/dist/src/capabilities/config/get.verb.js +61 -0
  49. package/dist/src/capabilities/config/get.verb.js.map +1 -0
  50. package/dist/src/capabilities/config/index.js +5 -0
  51. package/dist/src/capabilities/config/index.js.map +1 -0
  52. package/dist/src/capabilities/config/runField.js +59 -0
  53. package/dist/src/capabilities/config/runField.js.map +1 -0
  54. package/dist/src/capabilities/config/runGet.js +28 -0
  55. package/dist/src/capabilities/config/runGet.js.map +1 -0
  56. package/dist/src/capabilities/config/runSet.js +53 -0
  57. package/dist/src/capabilities/config/runSet.js.map +1 -0
  58. package/dist/src/capabilities/config/set.verb.js +66 -0
  59. package/dist/src/capabilities/config/set.verb.js.map +1 -0
  60. package/dist/src/capabilities/config/show.render.js +84 -0
  61. package/dist/src/capabilities/config/show.render.js.map +1 -0
  62. package/dist/src/capabilities/config/show.verb.js +44 -0
  63. package/dist/src/capabilities/config/show.verb.js.map +1 -0
  64. package/dist/src/capabilities/config/types.js +5 -0
  65. package/dist/src/capabilities/config/types.js.map +1 -0
  66. package/dist/src/capabilities/config/unset.verb.js +49 -0
  67. package/dist/src/capabilities/config/unset.verb.js.map +1 -0
  68. package/dist/src/capabilities/create/cliProjection.js +195 -0
  69. package/dist/src/capabilities/create/cliProjection.js.map +1 -0
  70. package/dist/src/capabilities/create/constants.js +47 -0
  71. package/dist/src/capabilities/create/constants.js.map +1 -0
  72. package/dist/src/capabilities/create/create.render.js +100 -0
  73. package/dist/src/capabilities/create/create.render.js.map +1 -0
  74. package/dist/src/capabilities/create/create.verb.js +438 -0
  75. package/dist/src/capabilities/create/create.verb.js.map +1 -0
  76. package/dist/src/capabilities/create/createHelp.js +47 -0
  77. package/dist/src/capabilities/create/createHelp.js.map +1 -0
  78. package/dist/src/capabilities/create/createSurface.generated.js +394 -0
  79. package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
  80. package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
  81. package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
  82. package/dist/src/capabilities/create/index.js +18 -0
  83. package/dist/src/capabilities/create/index.js.map +1 -0
  84. package/dist/src/capabilities/create/messages.js +16 -0
  85. package/dist/src/capabilities/create/messages.js.map +1 -0
  86. package/dist/src/capabilities/create/mount.js +294 -0
  87. package/dist/src/capabilities/create/mount.js.map +1 -0
  88. package/dist/src/capabilities/create/pathJail.js +65 -0
  89. package/dist/src/capabilities/create/pathJail.js.map +1 -0
  90. package/dist/src/capabilities/create/pickGenerator.js +53 -0
  91. package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
  92. package/dist/src/capabilities/create/types.js +2 -0
  93. package/dist/src/capabilities/create/types.js.map +1 -0
  94. package/dist/src/capabilities/distribution.js +40 -0
  95. package/dist/src/capabilities/distribution.js.map +1 -0
  96. package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
  97. package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
  98. package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
  99. package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
  100. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +148 -0
  101. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
  102. package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
  103. package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
  104. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
  105. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
  106. package/dist/src/capabilities/doctor/checks/harnessInventory.js +195 -0
  107. package/dist/src/capabilities/doctor/checks/harnessInventory.js.map +1 -0
  108. package/dist/src/capabilities/doctor/checks/index.js +27 -0
  109. package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
  110. package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
  111. package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
  112. package/dist/src/capabilities/doctor/checks/targetHealth.js +349 -0
  113. package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
  114. package/dist/src/capabilities/doctor/doctor.render.js +164 -0
  115. package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
  116. package/dist/src/capabilities/doctor/doctor.verb.js +49 -0
  117. package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
  118. package/dist/src/capabilities/doctor/index.js +5 -0
  119. package/dist/src/capabilities/doctor/index.js.map +1 -0
  120. package/dist/src/capabilities/doctor/runChecks.js +86 -0
  121. package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
  122. package/dist/src/capabilities/doctor/types.js +5 -0
  123. package/dist/src/capabilities/doctor/types.js.map +1 -0
  124. package/dist/src/capabilities/graph/index.js +19 -0
  125. package/dist/src/capabilities/graph/index.js.map +1 -0
  126. package/dist/src/capabilities/graph/inspect.render.js +76 -0
  127. package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
  128. package/dist/src/capabilities/graph/inspect.verb.js +53 -0
  129. package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
  130. package/dist/src/capabilities/graph/query.render.js +73 -0
  131. package/dist/src/capabilities/graph/query.render.js.map +1 -0
  132. package/dist/src/capabilities/graph/query.verb.js +49 -0
  133. package/dist/src/capabilities/graph/query.verb.js.map +1 -0
  134. package/dist/src/capabilities/graph/runQuery.js +41 -0
  135. package/dist/src/capabilities/graph/runQuery.js.map +1 -0
  136. package/dist/src/capabilities/index.js +56 -0
  137. package/dist/src/capabilities/index.js.map +1 -0
  138. package/dist/src/capabilities/info/collectInfo.js +72 -0
  139. package/dist/src/capabilities/info/collectInfo.js.map +1 -0
  140. package/dist/src/capabilities/info/index.js +5 -0
  141. package/dist/src/capabilities/info/index.js.map +1 -0
  142. package/dist/src/capabilities/info/info.render.js +57 -0
  143. package/dist/src/capabilities/info/info.render.js.map +1 -0
  144. package/dist/src/capabilities/info/info.verb.js +42 -0
  145. package/dist/src/capabilities/info/info.verb.js.map +1 -0
  146. package/dist/src/capabilities/info/types.js +5 -0
  147. package/dist/src/capabilities/info/types.js.map +1 -0
  148. package/dist/src/capabilities/meta/complete.verb.js +43 -0
  149. package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
  150. package/dist/src/capabilities/meta/index.js +13 -0
  151. package/dist/src/capabilities/meta/index.js.map +1 -0
  152. package/dist/src/capabilities/meta/mcp.verb.js +34 -0
  153. package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
  154. package/dist/src/capabilities/ontology/index.js +21 -0
  155. package/dist/src/capabilities/ontology/index.js.map +1 -0
  156. package/dist/src/capabilities/ontology/queries.js +123 -0
  157. package/dist/src/capabilities/ontology/queries.js.map +1 -0
  158. package/dist/src/capabilities/ontology/render.js +66 -0
  159. package/dist/src/capabilities/ontology/render.js.map +1 -0
  160. package/dist/src/capabilities/ontology/verbs.js +181 -0
  161. package/dist/src/capabilities/ontology/verbs.js.map +1 -0
  162. package/dist/src/capabilities/prompt/index.js +16 -0
  163. package/dist/src/capabilities/prompt/index.js.map +1 -0
  164. package/dist/src/capabilities/prompt/prompt.render.js +78 -0
  165. package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
  166. package/dist/src/capabilities/prompt/types.js +10 -0
  167. package/dist/src/capabilities/prompt/types.js.map +1 -0
  168. package/dist/src/capabilities/prompt/verbs.js +93 -0
  169. package/dist/src/capabilities/prompt/verbs.js.map +1 -0
  170. package/dist/src/capabilities/resources/index.js +10 -0
  171. package/dist/src/capabilities/resources/index.js.map +1 -0
  172. package/dist/src/capabilities/resources/provider.js +423 -0
  173. package/dist/src/capabilities/resources/provider.js.map +1 -0
  174. package/dist/src/capabilities/setup/buildPlan.js +172 -0
  175. package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
  176. package/dist/src/capabilities/setup/index.js +5 -0
  177. package/dist/src/capabilities/setup/index.js.map +1 -0
  178. package/dist/src/capabilities/setup/mode.js +53 -0
  179. package/dist/src/capabilities/setup/mode.js.map +1 -0
  180. package/dist/src/capabilities/setup/operations/index.js +39 -0
  181. package/dist/src/capabilities/setup/operations/index.js.map +1 -0
  182. package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
  183. package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
  184. package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
  185. package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
  186. package/dist/src/capabilities/setup/operations/setupGenerator.js +390 -0
  187. package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
  188. package/dist/src/capabilities/setup/operations/setupLsp.js +329 -0
  189. package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
  190. package/dist/src/capabilities/setup/operations/setupMcp.js +253 -0
  191. package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
  192. package/dist/src/capabilities/setup/operations/setupSkills.js +594 -0
  193. package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
  194. package/dist/src/capabilities/setup/plan.js +128 -0
  195. package/dist/src/capabilities/setup/plan.js.map +1 -0
  196. package/dist/src/capabilities/setup/plan.render.js +271 -0
  197. package/dist/src/capabilities/setup/plan.render.js.map +1 -0
  198. package/dist/src/capabilities/setup/setup.render.js +54 -0
  199. package/dist/src/capabilities/setup/setup.render.js.map +1 -0
  200. package/dist/src/capabilities/setup/setup.verb.js +387 -0
  201. package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
  202. package/dist/src/capabilities/setup/shell.js +196 -0
  203. package/dist/src/capabilities/setup/shell.js.map +1 -0
  204. package/dist/src/capabilities/setup/targets.js +328 -0
  205. package/dist/src/capabilities/setup/targets.js.map +1 -0
  206. package/dist/src/capabilities/setup/types.js +5 -0
  207. package/dist/src/capabilities/setup/types.js.map +1 -0
  208. package/dist/src/capabilities/shared/assertExecOk.js +137 -0
  209. package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
  210. package/dist/src/capabilities/shared/index.js +27 -0
  211. package/dist/src/capabilities/shared/index.js.map +1 -0
  212. package/dist/src/capabilities/shared/packageManager.js +349 -0
  213. package/dist/src/capabilities/shared/packageManager.js.map +1 -0
  214. package/dist/src/capabilities/shared/registry.js +55 -0
  215. package/dist/src/capabilities/shared/registry.js.map +1 -0
  216. package/dist/src/capabilities/skill/discover.js +281 -0
  217. package/dist/src/capabilities/skill/discover.js.map +1 -0
  218. package/dist/src/capabilities/skill/index.js +10 -0
  219. package/dist/src/capabilities/skill/index.js.map +1 -0
  220. package/dist/src/capabilities/skill/render.js +49 -0
  221. package/dist/src/capabilities/skill/render.js.map +1 -0
  222. package/dist/src/capabilities/skill/verbs.js +83 -0
  223. package/dist/src/capabilities/skill/verbs.js.map +1 -0
  224. package/dist/src/capabilities/sources/collectStatus.js +103 -0
  225. package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
  226. package/dist/src/capabilities/sources/index.js +13 -0
  227. package/dist/src/capabilities/sources/index.js.map +1 -0
  228. package/dist/src/capabilities/sources/installSkills.js +309 -0
  229. package/dist/src/capabilities/sources/installSkills.js.map +1 -0
  230. package/dist/src/capabilities/sources/runUpdate.js +460 -0
  231. package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
  232. package/dist/src/capabilities/sources/status.render.js +64 -0
  233. package/dist/src/capabilities/sources/status.render.js.map +1 -0
  234. package/dist/src/capabilities/sources/status.verb.js +40 -0
  235. package/dist/src/capabilities/sources/status.verb.js.map +1 -0
  236. package/dist/src/capabilities/sources/types.js +6 -0
  237. package/dist/src/capabilities/sources/types.js.map +1 -0
  238. package/dist/src/capabilities/sources/update.render.js +34 -0
  239. package/dist/src/capabilities/sources/update.render.js.map +1 -0
  240. package/dist/src/capabilities/sources/update.verb.js +55 -0
  241. package/dist/src/capabilities/sources/update.verb.js.map +1 -0
  242. package/dist/src/capabilities/upgrade/index.js +5 -0
  243. package/dist/src/capabilities/upgrade/index.js.map +1 -0
  244. package/dist/src/capabilities/upgrade/runUpgrade.js +135 -0
  245. package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
  246. package/dist/src/capabilities/upgrade/types.js +5 -0
  247. package/dist/src/capabilities/upgrade/types.js.map +1 -0
  248. package/dist/src/capabilities/upgrade/upgrade.render.js +52 -0
  249. package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
  250. package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
  251. package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
  252. package/dist/src/capabilities/version/index.js +10 -0
  253. package/dist/src/capabilities/version/index.js.map +1 -0
  254. package/dist/src/capabilities/version/version.verb.js +36 -0
  255. package/dist/src/capabilities/version/version.verb.js.map +1 -0
  256. package/dist/src/constants.js +87 -0
  257. package/dist/src/constants.js.map +1 -0
  258. package/dist/src/index.js +12 -0
  259. package/dist/src/index.js.map +1 -0
  260. package/dist/src/kernel/completion/complete.js +66 -0
  261. package/dist/src/kernel/completion/complete.js.map +1 -0
  262. package/dist/src/kernel/completion/emitScripts.js +92 -0
  263. package/dist/src/kernel/completion/emitScripts.js.map +1 -0
  264. package/dist/src/kernel/completion/entitySource.js +285 -0
  265. package/dist/src/kernel/completion/entitySource.js.map +1 -0
  266. package/dist/src/kernel/completion/index.js +14 -0
  267. package/dist/src/kernel/completion/index.js.map +1 -0
  268. package/dist/src/kernel/completion/model.js +301 -0
  269. package/dist/src/kernel/completion/model.js.map +1 -0
  270. package/dist/src/kernel/completion/parse.js +253 -0
  271. package/dist/src/kernel/completion/parse.js.map +1 -0
  272. package/dist/src/kernel/completion/rank.js +101 -0
  273. package/dist/src/kernel/completion/rank.js.map +1 -0
  274. package/dist/src/kernel/completion/resolve.js +100 -0
  275. package/dist/src/kernel/completion/resolve.js.map +1 -0
  276. package/dist/src/kernel/completion/templates/bash.js +209 -0
  277. package/dist/src/kernel/completion/templates/bash.js.map +1 -0
  278. package/dist/src/kernel/completion/templates/fish.js +214 -0
  279. package/dist/src/kernel/completion/templates/fish.js.map +1 -0
  280. package/dist/src/kernel/completion/templates/index.js +23 -0
  281. package/dist/src/kernel/completion/templates/index.js.map +1 -0
  282. package/dist/src/kernel/completion/templates/shared.js +98 -0
  283. package/dist/src/kernel/completion/templates/shared.js.map +1 -0
  284. package/dist/src/kernel/completion/templates/zsh.js +201 -0
  285. package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
  286. package/dist/src/kernel/completion/types.js +13 -0
  287. package/dist/src/kernel/completion/types.js.map +1 -0
  288. package/dist/src/kernel/config/defaults.js +17 -0
  289. package/dist/src/kernel/config/defaults.js.map +1 -0
  290. package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
  291. package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
  292. package/dist/src/kernel/config/findProjectConfig.js +43 -0
  293. package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
  294. package/dist/src/kernel/config/firstRun.js +34 -0
  295. package/dist/src/kernel/config/firstRun.js.map +1 -0
  296. package/dist/src/kernel/config/globalConfig.js +79 -0
  297. package/dist/src/kernel/config/globalConfig.js.map +1 -0
  298. package/dist/src/kernel/config/index.js +16 -0
  299. package/dist/src/kernel/config/index.js.map +1 -0
  300. package/dist/src/kernel/config/paths.js +35 -0
  301. package/dist/src/kernel/config/paths.js.map +1 -0
  302. package/dist/src/kernel/config/readConfig.js +78 -0
  303. package/dist/src/kernel/config/readConfig.js.map +1 -0
  304. package/dist/src/kernel/config/schema.js +130 -0
  305. package/dist/src/kernel/config/schema.js.map +1 -0
  306. package/dist/src/kernel/config/types.js +19 -0
  307. package/dist/src/kernel/config/types.js.map +1 -0
  308. package/dist/src/kernel/config/writeConfigField.js +59 -0
  309. package/dist/src/kernel/config/writeConfigField.js.map +1 -0
  310. package/dist/src/kernel/copy.js +43 -0
  311. package/dist/src/kernel/copy.js.map +1 -0
  312. package/dist/src/kernel/error/PragmaError.js +149 -0
  313. package/dist/src/kernel/error/PragmaError.js.map +1 -0
  314. package/dist/src/kernel/error/constants.js +40 -0
  315. package/dist/src/kernel/error/constants.js.map +1 -0
  316. package/dist/src/kernel/error/fromTaskError.js +96 -0
  317. package/dist/src/kernel/error/fromTaskError.js.map +1 -0
  318. package/dist/src/kernel/error/index.js +13 -0
  319. package/dist/src/kernel/error/index.js.map +1 -0
  320. package/dist/src/kernel/error/recovery.js +52 -0
  321. package/dist/src/kernel/error/recovery.js.map +1 -0
  322. package/dist/src/kernel/error/renderError.js +115 -0
  323. package/dist/src/kernel/error/renderError.js.map +1 -0
  324. package/dist/src/kernel/error/serialize.js +25 -0
  325. package/dist/src/kernel/error/serialize.js.map +1 -0
  326. package/dist/src/kernel/error/types.js +9 -0
  327. package/dist/src/kernel/error/types.js.map +1 -0
  328. package/dist/src/kernel/index.js +34 -0
  329. package/dist/src/kernel/index.js.map +1 -0
  330. package/dist/src/kernel/interactivity.js +68 -0
  331. package/dist/src/kernel/interactivity.js.map +1 -0
  332. package/dist/src/kernel/packs/collect.js +187 -0
  333. package/dist/src/kernel/packs/collect.js.map +1 -0
  334. package/dist/src/kernel/packs/compile.js +304 -0
  335. package/dist/src/kernel/packs/compile.js.map +1 -0
  336. package/dist/src/kernel/packs/disclosure.js +76 -0
  337. package/dist/src/kernel/packs/disclosure.js.map +1 -0
  338. package/dist/src/kernel/packs/glob.js +38 -0
  339. package/dist/src/kernel/packs/glob.js.map +1 -0
  340. package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
  341. package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
  342. package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
  343. package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
  344. package/dist/src/kernel/packs/graphql/index.js +20 -0
  345. package/dist/src/kernel/packs/graphql/index.js.map +1 -0
  346. package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
  347. package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
  348. package/dist/src/kernel/packs/index.js +34 -0
  349. package/dist/src/kernel/packs/index.js.map +1 -0
  350. package/dist/src/kernel/packs/iri.js +110 -0
  351. package/dist/src/kernel/packs/iri.js.map +1 -0
  352. package/dist/src/kernel/packs/renderPack.js +129 -0
  353. package/dist/src/kernel/packs/renderPack.js.map +1 -0
  354. package/dist/src/kernel/packs/resolveEntity.js +274 -0
  355. package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
  356. package/dist/src/kernel/packs/runBodies.js +140 -0
  357. package/dist/src/kernel/packs/runBodies.js.map +1 -0
  358. package/dist/src/kernel/packs/sample.js +56 -0
  359. package/dist/src/kernel/packs/sample.js.map +1 -0
  360. package/dist/src/kernel/packs/schema.js +421 -0
  361. package/dist/src/kernel/packs/schema.js.map +1 -0
  362. package/dist/src/kernel/packs/sparql/applyFilters.js +167 -0
  363. package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
  364. package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
  365. package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
  366. package/dist/src/kernel/packs/sparql/buildLookupQuery.js +480 -0
  367. package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
  368. package/dist/src/kernel/packs/sparql/escape.js +21 -0
  369. package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
  370. package/dist/src/kernel/packs/sparql/index.js +31 -0
  371. package/dist/src/kernel/packs/sparql/index.js.map +1 -0
  372. package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
  373. package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
  374. package/dist/src/kernel/packs/types.js +30 -0
  375. package/dist/src/kernel/packs/types.js.map +1 -0
  376. package/dist/src/kernel/packs/uniqueness.js +30 -0
  377. package/dist/src/kernel/packs/uniqueness.js.map +1 -0
  378. package/dist/src/kernel/project/cli/buildProgram.js +263 -0
  379. package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
  380. package/dist/src/kernel/project/cli/constants.js +27 -0
  381. package/dist/src/kernel/project/cli/constants.js.map +1 -0
  382. package/dist/src/kernel/project/cli/dispatch.js +420 -0
  383. package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
  384. package/dist/src/kernel/project/cli/exitCodes.js +66 -0
  385. package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
  386. package/dist/src/kernel/project/cli/globalFlags.js +219 -0
  387. package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
  388. package/dist/src/kernel/project/cli/helpFormat.js +58 -0
  389. package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
  390. package/dist/src/kernel/project/cli/index.js +14 -0
  391. package/dist/src/kernel/project/cli/index.js.map +1 -0
  392. package/dist/src/kernel/project/cli/rootHelp.js +227 -0
  393. package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
  394. package/dist/src/kernel/project/cli/suggest.js +75 -0
  395. package/dist/src/kernel/project/cli/suggest.js.map +1 -0
  396. package/dist/src/kernel/project/cli/suggestNames.js +96 -0
  397. package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
  398. package/dist/src/kernel/project/cli/verbHelp.js +131 -0
  399. package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
  400. package/dist/src/kernel/project/mcp/buildServer.js +67 -0
  401. package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
  402. package/dist/src/kernel/project/mcp/envelope.js +37 -0
  403. package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
  404. package/dist/src/kernel/project/mcp/index.js +8 -0
  405. package/dist/src/kernel/project/mcp/index.js.map +1 -0
  406. package/dist/src/kernel/project/mcp/instructions.js +44 -0
  407. package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
  408. package/dist/src/kernel/project/mcp/mcpError.js +42 -0
  409. package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
  410. package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
  411. package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
  412. package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
  413. package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
  414. package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
  415. package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
  416. package/dist/src/kernel/project/mcp/registerVerb.js +315 -0
  417. package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
  418. package/dist/src/kernel/project/mcp/serve.js +35 -0
  419. package/dist/src/kernel/project/mcp/serve.js.map +1 -0
  420. package/dist/src/kernel/render/compactUri.js +24 -0
  421. package/dist/src/kernel/render/compactUri.js.map +1 -0
  422. package/dist/src/kernel/render/contracts.js +10 -0
  423. package/dist/src/kernel/render/contracts.js.map +1 -0
  424. package/dist/src/kernel/render/disclosure.js +34 -0
  425. package/dist/src/kernel/render/disclosure.js.map +1 -0
  426. package/dist/src/kernel/render/envelope.js +30 -0
  427. package/dist/src/kernel/render/envelope.js.map +1 -0
  428. package/dist/src/kernel/render/formatters.js +27 -0
  429. package/dist/src/kernel/render/formatters.js.map +1 -0
  430. package/dist/src/kernel/render/index.js +15 -0
  431. package/dist/src/kernel/render/index.js.map +1 -0
  432. package/dist/src/kernel/render/prefixes.js +46 -0
  433. package/dist/src/kernel/render/prefixes.js.map +1 -0
  434. package/dist/src/kernel/render/renderers.js +468 -0
  435. package/dist/src/kernel/render/renderers.js.map +1 -0
  436. package/dist/src/kernel/render/style.js +105 -0
  437. package/dist/src/kernel/render/style.js.map +1 -0
  438. package/dist/src/kernel/render/turtle.js +194 -0
  439. package/dist/src/kernel/render/turtle.js.map +1 -0
  440. package/dist/src/kernel/render/vocabulary.js +174 -0
  441. package/dist/src/kernel/render/vocabulary.js.map +1 -0
  442. package/dist/src/kernel/render/writeStdout.js +43 -0
  443. package/dist/src/kernel/render/writeStdout.js.map +1 -0
  444. package/dist/src/kernel/runtime/boot.js +49 -0
  445. package/dist/src/kernel/runtime/boot.js.map +1 -0
  446. package/dist/src/kernel/runtime/facade.js +39 -0
  447. package/dist/src/kernel/runtime/facade.js.map +1 -0
  448. package/dist/src/kernel/runtime/graphpack/build.js +122 -0
  449. package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
  450. package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
  451. package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
  452. package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
  453. package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
  454. package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
  455. package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
  456. package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
  457. package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
  458. package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
  459. package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
  460. package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
  461. package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
  462. package/dist/src/kernel/runtime/graphpack/index.js +11 -0
  463. package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
  464. package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
  465. package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
  466. package/dist/src/kernel/runtime/graphpack/read.js +92 -0
  467. package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
  468. package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
  469. package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
  470. package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
  471. package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
  472. package/dist/src/kernel/runtime/graphpack/types.js +55 -0
  473. package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
  474. package/dist/src/kernel/runtime/index.js +8 -0
  475. package/dist/src/kernel/runtime/index.js.map +1 -0
  476. package/dist/src/kernel/runtime/loadSession.js +34 -0
  477. package/dist/src/kernel/runtime/loadSession.js.map +1 -0
  478. package/dist/src/kernel/runtime/paths.js +78 -0
  479. package/dist/src/kernel/runtime/paths.js.map +1 -0
  480. package/dist/src/kernel/runtime/probe.js +37 -0
  481. package/dist/src/kernel/runtime/probe.js.map +1 -0
  482. package/dist/src/kernel/runtime/readEntity.js +363 -0
  483. package/dist/src/kernel/runtime/readEntity.js.map +1 -0
  484. package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
  485. package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
  486. package/dist/src/kernel/runtime/refs/index.js +29 -0
  487. package/dist/src/kernel/runtime/refs/index.js.map +1 -0
  488. package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
  489. package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
  490. package/dist/src/kernel/runtime/refs/resolve.js +332 -0
  491. package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
  492. package/dist/src/kernel/runtime/resolveSources.js +62 -0
  493. package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
  494. package/dist/src/kernel/runtime/store.js +75 -0
  495. package/dist/src/kernel/runtime/store.js.map +1 -0
  496. package/dist/src/kernel/runtime/storeReadiness.js +51 -0
  497. package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
  498. package/dist/src/kernel/runtime/types.js +11 -0
  499. package/dist/src/kernel/runtime/types.js.map +1 -0
  500. package/dist/src/kernel/spec/asVerb.js +21 -0
  501. package/dist/src/kernel/spec/asVerb.js.map +1 -0
  502. package/dist/src/kernel/spec/emitReference.js +578 -0
  503. package/dist/src/kernel/spec/emitReference.js.map +1 -0
  504. package/dist/src/kernel/spec/emitSurface.js +202 -0
  505. package/dist/src/kernel/spec/emitSurface.js.map +1 -0
  506. package/dist/src/kernel/spec/index.js +11 -0
  507. package/dist/src/kernel/spec/index.js.map +1 -0
  508. package/dist/src/kernel/spec/surfaceConformance.js +103 -0
  509. package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
  510. package/dist/src/kernel/spec/types.js +14 -0
  511. package/dist/src/kernel/spec/types.js.map +1 -0
  512. package/dist/src/kernel/spec/validate.js +110 -0
  513. package/dist/src/kernel/spec/validate.js.map +1 -0
  514. package/dist/src/kernel/vocabulary.js +97 -0
  515. package/dist/src/kernel/vocabulary.js.map +1 -0
  516. package/dist/src/types.js +11 -0
  517. package/dist/src/types.js.map +1 -0
  518. package/package.json +22 -23
  519. package/pragma.conf.ts +486 -90
  520. package/src/bin.ts +274 -82
  521. package/src/capabilities/block.parity.test.ts +29 -12
  522. package/src/capabilities/block.shipped.exec.test.ts +282 -0
  523. package/src/capabilities/block.tierRank.exec.test.ts +300 -0
  524. package/src/capabilities/capabilities/capabilities.render.ts +1 -1
  525. package/src/capabilities/capabilities/capabilities.verb.ts +1 -1
  526. package/src/capabilities/capabilities/catalog.ts +3 -3
  527. package/src/capabilities/capabilities/hints.ts +32 -7
  528. package/src/capabilities/capabilities/index.ts +1 -1
  529. package/src/capabilities/colophon/collectColophon.ts +35 -24
  530. package/src/capabilities/colophon/colophon.render.ts +24 -1
  531. package/src/capabilities/colophon/colophon.test.ts +42 -21
  532. package/src/capabilities/colophon/colophon.verb.ts +4 -4
  533. package/src/capabilities/config/collectConfigShow.test.ts +1 -0
  534. package/src/capabilities/config/collectConfigShow.ts +3 -3
  535. package/src/capabilities/config/field.render.ts +4 -5
  536. package/src/capabilities/config/fields.ts +17 -10
  537. package/src/capabilities/config/get.verb.ts +70 -0
  538. package/src/capabilities/config/getUnset.test.ts +264 -0
  539. package/src/capabilities/config/index.ts +5 -1
  540. package/src/capabilities/config/runField.ts +40 -22
  541. package/src/capabilities/config/runGet.ts +34 -0
  542. package/src/capabilities/config/runSet.ts +35 -9
  543. package/src/capabilities/config/set.test.ts +48 -14
  544. package/src/capabilities/config/set.verb.ts +8 -7
  545. package/src/capabilities/config/show.render.ts +1 -1
  546. package/src/capabilities/config/show.verb.ts +9 -6
  547. package/src/capabilities/config/types.ts +18 -4
  548. package/src/capabilities/config/unset.verb.ts +58 -0
  549. package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
  550. package/src/capabilities/create/byteEquality.test.ts +25 -11
  551. package/src/capabilities/create/cliProjection.ts +227 -0
  552. package/src/capabilities/create/constants.ts +36 -61
  553. package/src/capabilities/create/create.mcp.test.ts +89 -5
  554. package/src/capabilities/create/create.render.ts +71 -7
  555. package/src/capabilities/create/create.test.ts +433 -219
  556. package/src/capabilities/create/create.verb.ts +297 -328
  557. package/src/capabilities/create/createGrammar.test.ts +865 -0
  558. package/src/capabilities/create/createHelp.ts +71 -0
  559. package/src/capabilities/create/createSurface.generated.ts +400 -0
  560. package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
  561. package/src/capabilities/create/cwdJail.test.ts +24 -5
  562. package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
  563. package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
  564. package/src/capabilities/create/index.ts +7 -4
  565. package/src/capabilities/create/messages.ts +18 -0
  566. package/src/capabilities/create/mount.ts +391 -0
  567. package/src/capabilities/create/pathJail.test.ts +90 -0
  568. package/src/capabilities/create/pathJail.ts +8 -5
  569. package/src/capabilities/create/pickGenerator.ts +23 -35
  570. package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
  571. package/src/capabilities/create/types.ts +20 -0
  572. package/src/capabilities/distribution.parity.test.ts +4 -0
  573. package/src/capabilities/distribution.test.ts +3 -1
  574. package/src/capabilities/distribution.ts +10 -15
  575. package/src/capabilities/doctor/checks/checkKeStore.ts +7 -5
  576. package/src/capabilities/doctor/checks/checkPackageRefs.ts +75 -8
  577. package/src/capabilities/doctor/checks/checkPragmaVersion.ts +2 -2
  578. package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +76 -29
  579. package/src/capabilities/doctor/checks/checkShellCompletions.ts +63 -17
  580. package/src/capabilities/doctor/checks/harnessInventory.test.ts +219 -0
  581. package/src/capabilities/doctor/checks/harnessInventory.ts +298 -0
  582. package/src/capabilities/doctor/checks/index.ts +27 -0
  583. package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
  584. package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
  585. package/src/capabilities/doctor/checks/targetHealth.ts +444 -0
  586. package/src/capabilities/doctor/doctor.render.test.ts +125 -38
  587. package/src/capabilities/doctor/doctor.render.ts +74 -74
  588. package/src/capabilities/doctor/doctor.test.ts +338 -37
  589. package/src/capabilities/doctor/doctor.verb.ts +8 -3
  590. package/src/capabilities/doctor/runChecks.ts +65 -63
  591. package/src/capabilities/doctor/types.ts +22 -15
  592. package/src/capabilities/emptyRecovery.test.ts +21 -8
  593. package/src/capabilities/graph/examples.exec.test.ts +107 -0
  594. package/src/capabilities/graph/index.ts +1 -1
  595. package/src/capabilities/graph/inspect.render.ts +70 -22
  596. package/src/capabilities/graph/inspect.test.ts +260 -5
  597. package/src/capabilities/graph/inspect.verb.ts +18 -6
  598. package/src/capabilities/graph/query.render.ts +15 -3
  599. package/src/capabilities/graph/query.verb.ts +3 -3
  600. package/src/capabilities/graph/runQuery.ts +2 -3
  601. package/src/capabilities/index.ts +3 -1
  602. package/src/capabilities/info/collectInfo.ts +13 -5
  603. package/src/capabilities/info/info.render.ts +7 -3
  604. package/src/capabilities/info/info.test.ts +37 -1
  605. package/src/capabilities/info/info.verb.ts +1 -1
  606. package/src/capabilities/info/types.ts +10 -2
  607. package/src/capabilities/lazy.test.ts +32 -0
  608. package/src/capabilities/meta/complete.verb.ts +1 -1
  609. package/src/capabilities/meta/index.ts +1 -1
  610. package/src/capabilities/meta/mcp.verb.ts +10 -8
  611. package/src/capabilities/ontology/index.ts +15 -11
  612. package/src/capabilities/ontology/ontology.test.ts +6 -55
  613. package/src/capabilities/ontology/queries.ts +2 -2
  614. package/src/capabilities/ontology/render.ts +3 -4
  615. package/src/capabilities/ontology/verbs.ts +27 -68
  616. package/src/capabilities/prompt/index.ts +2 -2
  617. package/src/capabilities/prompt/prompt.render.ts +6 -2
  618. package/src/capabilities/prompt/types.ts +1 -1
  619. package/src/capabilities/prompt/verbs.ts +4 -5
  620. package/src/capabilities/reference.test.ts +63 -0
  621. package/src/capabilities/renderVocabularySync.test.ts +82 -0
  622. package/src/capabilities/resources/provider.ts +342 -85
  623. package/src/capabilities/resources/resources.test.ts +355 -59
  624. package/src/capabilities/scopeTypeSync.test.ts +29 -15
  625. package/src/capabilities/setup/buildPlan.ts +240 -0
  626. package/src/capabilities/setup/index.ts +7 -7
  627. package/src/capabilities/setup/mode.ts +74 -0
  628. package/src/capabilities/setup/operations/index.ts +79 -0
  629. package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
  630. package/src/capabilities/setup/operations/setupConfig.ts +124 -0
  631. package/src/capabilities/setup/operations/setupGenerator.ts +478 -334
  632. package/src/capabilities/setup/operations/setupLsp.ts +420 -67
  633. package/src/capabilities/setup/operations/setupMcp.ts +238 -127
  634. package/src/capabilities/setup/operations/setupSkills.ts +667 -105
  635. package/src/capabilities/setup/plan.render.ts +336 -0
  636. package/src/capabilities/setup/plan.ts +241 -0
  637. package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
  638. package/src/capabilities/setup/setup.render.test.ts +297 -75
  639. package/src/capabilities/setup/setup.render.ts +45 -77
  640. package/src/capabilities/setup/setup.test.ts +1819 -225
  641. package/src/capabilities/setup/setup.verb.ts +288 -78
  642. package/src/capabilities/setup/shell.test.ts +86 -0
  643. package/src/capabilities/setup/shell.ts +137 -11
  644. package/src/capabilities/setup/targets.ts +435 -0
  645. package/src/capabilities/setup/types.ts +23 -70
  646. package/src/capabilities/shared/assertExecOk.ts +68 -10
  647. package/src/capabilities/shared/index.ts +43 -0
  648. package/src/capabilities/shared/packageManager.test.ts +470 -0
  649. package/src/capabilities/shared/packageManager.ts +425 -34
  650. package/src/capabilities/skill/bundledSkills.test.ts +347 -0
  651. package/src/capabilities/skill/discover.ts +131 -10
  652. package/src/capabilities/skill/index.ts +1 -1
  653. package/src/capabilities/skill/render.ts +10 -9
  654. package/src/capabilities/skill/skill.test.ts +22 -7
  655. package/src/capabilities/skill/verbs.ts +3 -4
  656. package/src/capabilities/sources/collectStatus.ts +7 -2
  657. package/src/capabilities/sources/index.ts +1 -1
  658. package/src/capabilities/sources/installSkills.ts +265 -10
  659. package/src/capabilities/sources/runUpdate.ts +131 -23
  660. package/src/capabilities/sources/sources.test.ts +382 -2
  661. package/src/capabilities/sources/status.render.ts +1 -1
  662. package/src/capabilities/sources/status.verb.ts +1 -1
  663. package/src/capabilities/sources/update.render.ts +1 -1
  664. package/src/capabilities/sources/update.verb.ts +4 -4
  665. package/src/capabilities/surface.test.ts +136 -19
  666. package/src/capabilities/upgrade/runUpgrade.ts +53 -14
  667. package/src/capabilities/upgrade/types.ts +10 -2
  668. package/src/capabilities/upgrade/upgrade.render.ts +13 -7
  669. package/src/capabilities/upgrade/upgrade.test.ts +75 -3
  670. package/src/capabilities/upgrade/upgrade.verb.ts +1 -1
  671. package/src/capabilities/version/index.ts +12 -0
  672. package/src/capabilities/version/version.test.ts +66 -0
  673. package/src/capabilities/version/version.verb.ts +39 -0
  674. package/src/constants.ts +36 -1
  675. package/src/identity.test.ts +57 -29
  676. package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +15 -13
  677. package/src/kernel/completion/complete.test.ts +12 -2
  678. package/src/kernel/completion/complete.ts +1 -1
  679. package/src/kernel/completion/emitScripts.ts +1 -1
  680. package/src/kernel/completion/entitySource.test.ts +16 -3
  681. package/src/kernel/completion/entitySource.ts +21 -8
  682. package/src/kernel/completion/model.test.ts +164 -12
  683. package/src/kernel/completion/model.ts +94 -14
  684. package/src/kernel/completion/parse.test.ts +4 -7
  685. package/src/kernel/completion/parse.ts +15 -0
  686. package/src/kernel/completion/resolve.test.ts +0 -1
  687. package/src/kernel/completion/safety.test.ts +50 -35
  688. package/src/kernel/completion/shellDrive.test.ts +28 -9
  689. package/src/kernel/completion/templates/bash.ts +7 -2
  690. package/src/kernel/completion/templates/index.ts +23 -0
  691. package/src/kernel/completion/types.ts +7 -0
  692. package/src/kernel/config/defaults.test.ts +27 -3
  693. package/src/kernel/config/defaults.ts +4 -3
  694. package/src/kernel/config/evaluateProjectConfig.ts +31 -8
  695. package/src/kernel/config/firstRun.test.ts +44 -38
  696. package/src/kernel/config/firstRun.ts +24 -88
  697. package/src/kernel/config/index.ts +1 -1
  698. package/src/kernel/config/readConfig.test.ts +6 -3
  699. package/src/kernel/config/readConfig.ts +1 -1
  700. package/src/kernel/config/schema.ts +3 -1
  701. package/src/kernel/config/types.ts +3 -1
  702. package/src/kernel/copy.test.ts +34 -4
  703. package/src/kernel/copy.ts +54 -0
  704. package/src/kernel/error/PragmaError.test.ts +5 -2
  705. package/src/kernel/error/PragmaError.ts +4 -2
  706. package/src/kernel/error/constants.ts +7 -5
  707. package/src/kernel/error/fromTaskError.ts +28 -6
  708. package/src/kernel/error/recovery.ts +14 -0
  709. package/src/kernel/error/renderError.ts +42 -1
  710. package/src/kernel/error/types.ts +21 -1
  711. package/src/kernel/index.ts +35 -0
  712. package/src/kernel/interactivity.test.ts +76 -0
  713. package/src/kernel/interactivity.ts +69 -0
  714. package/src/kernel/packs/collect.ts +12 -16
  715. package/src/kernel/packs/compile.test.ts +222 -1
  716. package/src/kernel/packs/compile.ts +93 -3
  717. package/src/kernel/packs/disclosure.ts +2 -2
  718. package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
  719. package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +3 -4
  720. package/src/kernel/packs/graphql/index.ts +20 -0
  721. package/src/kernel/packs/index.ts +40 -0
  722. package/src/kernel/packs/iri.test.ts +73 -0
  723. package/src/kernel/packs/iri.ts +66 -14
  724. package/src/kernel/packs/renderPack.ts +25 -6
  725. package/src/kernel/packs/resolveEntity.test.ts +274 -0
  726. package/src/kernel/packs/resolveEntity.ts +200 -42
  727. package/src/kernel/packs/runBodies.ts +86 -22
  728. package/src/kernel/packs/sample.ts +1 -1
  729. package/src/kernel/packs/schema.ts +78 -5
  730. package/src/kernel/packs/sparql/applyFilters.ts +136 -16
  731. package/src/kernel/packs/sparql/buildLookupQuery.test.ts +290 -0
  732. package/src/kernel/packs/sparql/buildLookupQuery.ts +367 -17
  733. package/src/kernel/packs/sparql/index.ts +37 -0
  734. package/src/kernel/packs/sparql/runSelect.test.ts +1 -1
  735. package/src/kernel/packs/sparql/runSelect.ts +3 -4
  736. package/src/kernel/packs/toolDescription.test.ts +77 -4
  737. package/src/kernel/packs/types.ts +136 -0
  738. package/src/kernel/packs/uniqueness.ts +1 -1
  739. package/src/kernel/project/cli/buildProgram.test.ts +218 -12
  740. package/src/kernel/project/cli/buildProgram.ts +84 -18
  741. package/src/kernel/project/cli/constants.ts +34 -0
  742. package/src/kernel/project/cli/dispatch.test.ts +160 -2
  743. package/src/kernel/project/cli/dispatch.ts +226 -45
  744. package/src/kernel/project/cli/exitCodes.ts +1 -1
  745. package/src/kernel/project/cli/globalFlags.test.ts +117 -1
  746. package/src/kernel/project/cli/globalFlags.ts +134 -31
  747. package/src/kernel/project/cli/helpFormat.ts +14 -2
  748. package/src/kernel/project/cli/rootHelp.ts +74 -12
  749. package/src/kernel/project/cli/suggest.test.ts +33 -1
  750. package/src/kernel/project/cli/suggest.ts +25 -1
  751. package/src/kernel/project/cli/verbHelp.test.ts +30 -0
  752. package/src/kernel/project/cli/verbHelp.ts +23 -7
  753. package/src/kernel/project/mcp/buildServer.ts +7 -4
  754. package/src/kernel/project/mcp/envelope.ts +2 -2
  755. package/src/kernel/project/mcp/instructions.ts +2 -2
  756. package/src/kernel/project/mcp/mcpError.ts +1 -1
  757. package/src/kernel/project/mcp/parity.test.ts +5 -2
  758. package/src/kernel/project/mcp/prompts/index.ts +37 -0
  759. package/src/kernel/project/mcp/prompts/source.ts +2 -2
  760. package/src/kernel/project/mcp/registerVerb.ts +55 -10
  761. package/src/kernel/project/mcp/serve.ts +2 -2
  762. package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
  763. package/src/kernel/render/contracts.ts +21 -0
  764. package/src/kernel/render/envelope.ts +2 -3
  765. package/src/kernel/render/formatters.ts +1 -1
  766. package/src/kernel/render/renderers.test.ts +243 -6
  767. package/src/kernel/render/renderers.ts +222 -20
  768. package/src/kernel/render/style.test.ts +75 -24
  769. package/src/kernel/render/style.ts +59 -6
  770. package/src/kernel/render/turtle.ts +222 -0
  771. package/src/kernel/render/vocabulary.ts +276 -0
  772. package/src/kernel/runtime/graphpack/buildIndex.ts +1 -1
  773. package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +3 -3
  774. package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +1 -1
  775. package/src/kernel/runtime/graphpack/embedded.ts +3 -3
  776. package/src/kernel/runtime/graphpack/manifest.ts +1 -1
  777. package/src/kernel/runtime/graphpack/read.ts +1 -2
  778. package/src/kernel/runtime/loadSession.ts +1 -1
  779. package/src/kernel/runtime/probe.ts +6 -6
  780. package/src/kernel/runtime/readEntity.ts +472 -28
  781. package/src/kernel/runtime/refs/index.ts +39 -0
  782. package/src/kernel/runtime/refs/parseRef.ts +2 -2
  783. package/src/kernel/runtime/refs/resolve.ts +4 -4
  784. package/src/kernel/runtime/storeReadiness.ts +1 -2
  785. package/src/kernel/runtime/types.ts +15 -1
  786. package/src/kernel/runtime/wasmEmbed.test.ts +37 -39
  787. package/src/kernel/spec/emitReference.ts +105 -30
  788. package/src/kernel/spec/emitSurface.ts +48 -6
  789. package/src/kernel/spec/surfaceConformance.test.ts +4 -2
  790. package/src/kernel/spec/types.ts +277 -4
  791. package/src/testing/PARITY_GAPS.ts +9 -3
  792. package/src/testing/behavioral/docExamples.test.ts +16 -0
  793. package/src/testing/behavioral/errorMatrix.mcp.test.ts +112 -9
  794. package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
  795. package/src/testing/behavioral/journeys.cli.test.ts +1 -1
  796. package/src/testing/behavioral/journeys.defaultPack.test.ts +7 -7
  797. package/src/testing/behavioral/journeys.firstInstall.test.ts +7 -2
  798. package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
  799. package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
  800. package/src/testing/behavioral/journeys.packageStories.test.ts +10 -7
  801. package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
  802. package/src/testing/behavioral/mcpSurface.test.ts +1 -1
  803. package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
  804. package/src/testing/eval/__snapshots__/eval.test.ts.snap +26 -1
  805. package/src/testing/eval/cases/effectful.ts +3 -2
  806. package/src/testing/eval/cases/readNouns.ts +245 -9
  807. package/src/testing/fixtures/blockGraph.ts +104 -10
  808. package/src/testing/fixtures/graph/canonical.ts +182 -13
  809. package/src/testing/fixtures/graph/defaultPack.ts +1 -1
  810. package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
  811. package/src/testing/helpers/projectMcp.ts +32 -6
  812. package/src/testing/helpers/runCli.ts +35 -18
  813. package/src/testing/perf/budgets.test.ts +20 -9
  814. package/src/testing/perf/budgets.ts +58 -9
  815. package/src/testing/perf/codegen.test.ts +126 -0
  816. package/src/testing/perf/globalSetup.test.ts +286 -0
  817. package/src/testing/perf/globalSetup.ts +505 -23
  818. package/src/testing/perf/measure.test.ts +38 -0
  819. package/src/testing/perf/measure.ts +23 -4
  820. package/src/testing/setupXdgIsolation.ts +81 -21
  821. package/src/testing/tempRoot.globalSetup.ts +122 -0
  822. package/dist/pragma +0 -0
  823. package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -189
  824. package/src/capabilities/create/templates.embedded.generated.ts +0 -28
  825. package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -42
  826. package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
  827. package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -68
  828. package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -61
  829. package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
  830. package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
  831. package/src/capabilities/shared/bands.ts +0 -16
  832. 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,138 @@ 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(
208
+ BIN_NAME,
209
+ PROGRAM_DESCRIPTION,
210
+ live,
211
+ VERSION,
212
+ ISSUES_URL,
213
+ globalFlags,
214
+ )}\n`,
128
215
  );
216
+ // The front door is a read, so it is where the un-set-up hint belongs: the
217
+ // machine's state is the presence of the global config, and nothing is
218
+ // written to discover it.
219
+ const { setupHintLines } = await import("./kernel/config/firstRun.js");
220
+ const hint = setupHintLines();
221
+ if (hint.length > 0) process.stderr.write(`\n${hint.join("\n")}\n`);
129
222
  return;
130
223
  }
131
224
 
@@ -143,10 +236,12 @@ async function main(): Promise<void> {
143
236
  );
144
237
  const effective = await loadEffectiveModules(capabilities, process.cwd());
145
238
  modules = effective.modules;
146
- for (const problem of effective.problems) {
147
- process.stderr.write(
148
- `Ignored story ${problem.source}: ${problem.message}\n`,
149
- );
239
+ if (globalFlags.quiet !== true) {
240
+ for (const problem of effective.problems) {
241
+ process.stderr.write(
242
+ `Ignored story ${problem.source}: ${problem.message}\n`,
243
+ );
244
+ }
150
245
  }
151
246
  } catch (error) {
152
247
  await renderStartupError(error, globalFlags.format === "json");
@@ -155,11 +250,31 @@ async function main(): Promise<void> {
155
250
  }
156
251
  const verbs = modules.flatMap((module) => [...module.verbs]);
157
252
 
253
+ // Module-owned noun mounts (CapabilityModule.cliProjection), keyed by the
254
+ // module's noun. A module's verbs all share their noun, so the module name
255
+ // is that noun for every module that declares a mount.
256
+ const mounts = new Map(
257
+ modules.flatMap((module) =>
258
+ module.cliProjection
259
+ ? [[module.name, module.cliProjection] as const]
260
+ : [],
261
+ ),
262
+ );
263
+
264
+ // A mount may defer its registration machinery behind `prepare()` (the
265
+ // fast paths import the projection hook without ever mounting) — resolve
266
+ // every deferred import before the tree is built, alongside the program
267
+ // builder's own deferred load.
268
+ const [{ buildProgram }] = await Promise.all([
269
+ import("./kernel/project/cli/buildProgram.js"),
270
+ ...[...mounts.values()].map((projection) => projection.prepare?.()),
271
+ ]);
158
272
  const program = buildProgram(verbs, {
159
273
  globalFlags,
160
274
  programName: BIN_NAME,
161
275
  description: PROGRAM_DESCRIPTION,
162
276
  version: VERSION,
277
+ mounts,
163
278
  });
164
279
  // Silence Commander's default stderr writer on EVERY command, not just the
165
280
  // root — otherwise a bad subcommand/option prints Commander's raw `error: …`
@@ -169,10 +284,30 @@ async function main(): Promise<void> {
169
284
  try {
170
285
  await program.parseAsync(args, { from: "user" });
171
286
  } catch (error) {
172
- await handleProgramError(error, argv, globalFlags.format === "json", verbs);
287
+ await handleProgramError(error, argv, globalFlags.format, verbs);
173
288
  }
174
289
  }
175
290
 
291
+ /**
292
+ * Reject an invalid global-flag value before dispatch: one renderer for the
293
+ * `--format`/`--detail` guards, so every validated global value flag fails
294
+ * with the same invalid-input shape and its valid list.
295
+ */
296
+ async function rejectGlobalValue(
297
+ name: string,
298
+ value: string,
299
+ validOptions: readonly string[],
300
+ jsonMode: boolean,
301
+ ): Promise<void> {
302
+ const { PragmaError } = await import("./kernel/error/PragmaError.js");
303
+ await renderStartupError(
304
+ PragmaError.invalidInput(name, value, {
305
+ validOptions: [...validOptions],
306
+ }),
307
+ jsonMode,
308
+ );
309
+ }
310
+
176
311
  /**
177
312
  * Render a startup error (e.g. an invalid config story pack) before the command
178
313
  * tree is built, mapping it to stderr + an exit code — the same envelope
@@ -216,7 +351,7 @@ function silenceCommanderErrors(command: Command): void {
216
351
  async function handleProgramError(
217
352
  error: unknown,
218
353
  argv: readonly string[],
219
- jsonMode: boolean,
354
+ format: import("./constants.js").OutputFormat,
220
355
  verbs: import("./kernel/spec/types.js").VerbSpec[],
221
356
  ): Promise<void> {
222
357
  const { CommanderError } = await import("commander");
@@ -224,16 +359,66 @@ async function handleProgramError(
224
359
  if (error instanceof CommanderError) {
225
360
  if (
226
361
  error.code === "commander.helpDisplayed" ||
227
- error.code === "commander.version" ||
228
- error.code === "commander.help"
362
+ error.code === "commander.version"
229
363
  ) {
230
364
  process.exitCode = 0;
231
365
  return;
232
366
  }
233
- if (error.code === "commander.unknownCommand") {
234
- const { nounVerbMap, resolveUnknownCommand } = await import(
235
- "./kernel/project/cli/suggest.js"
367
+ if (error.code === "commander.help") {
368
+ // Respect the help error's OWN exit code: `help({ error: true })` — a
369
+ // bare namespace with children, help written to stderr — carries 1;
370
+ // a stdout help carries 0.
371
+ process.exitCode = error.exitCode;
372
+ return;
373
+ }
374
+
375
+ // A parse failure whose argv still speaks a retired module grammar gets
376
+ // that module's designed migration error (the module authors the text;
377
+ // the kernel only routes). Currently: `create component --framework`
378
+ // (R1) — scoped to the ONE command that ever had the flag, so
379
+ // `create package --framework …` keeps its honest unknown-option error
380
+ // instead of a migration message about a grammar it never spoke — and
381
+ // scoped to the pre-terminator span: after `--` the spelling is an
382
+ // operand, not the retired flag, so the real parse error stands.
383
+ const { selectScanSpan, stripGlobalFlags } = await import(
384
+ "./kernel/project/cli/globalFlags.js"
385
+ );
386
+ const strippedArgs = stripGlobalFlags(argv);
387
+ const strippedPositionals = strippedArgs.filter(
388
+ (arg) => !arg.startsWith("-"),
389
+ );
390
+ if (
391
+ strippedPositionals[0] === "create" &&
392
+ strippedPositionals[1] === "component" &&
393
+ selectScanSpan(strippedArgs).some(
394
+ (arg) => arg === "--framework" || arg.startsWith("--framework="),
395
+ )
396
+ ) {
397
+ const [
398
+ { FRAMEWORK_FLAG_ERROR },
399
+ { PragmaError },
400
+ { renderErrorForFormat },
401
+ ] = await Promise.all([
402
+ import("./capabilities/create/messages.js"),
403
+ import("./kernel/error/PragmaError.js"),
404
+ import("./kernel/error/renderError.js"),
405
+ ]);
406
+ // Explicit --format json/llm envelope (the kernel's one gate+renderer
407
+ // decision); plain keeps the designed raw line.
408
+ const rendered = renderErrorForFormat(
409
+ new PragmaError({
410
+ code: "INVALID_INPUT",
411
+ message: FRAMEWORK_FLAG_ERROR.replace(/^error:\s*/i, ""),
412
+ }),
413
+ format,
236
414
  );
415
+ process.stderr.write(`${rendered ?? FRAMEWORK_FLAG_ERROR}\n`);
416
+ process.exitCode = 2;
417
+ return;
418
+ }
419
+ if (error.code === "commander.unknownCommand") {
420
+ const { curatedSuggestions, nounVerbMap, resolveUnknownCommand } =
421
+ await import("./kernel/project/cli/suggest.js");
237
422
  const { stripGlobalFlags } = await import(
238
423
  "./kernel/project/cli/globalFlags.js"
239
424
  );
@@ -244,24 +429,28 @@ async function handleProgramError(
244
429
  if (unknown) {
245
430
  // Route through the same PragmaError + renderers as every other error,
246
431
  // so the plain path gets the `Error:` prefix and the shared "Did you
247
- // mean?" list instead of a second, inline rendering.
432
+ // mean?" list instead of a second, inline rendering — and an explicit
433
+ // machine format gets the same envelope every other usage error
434
+ // emits (the kernel's one gate+renderer decision; plain and json
435
+ // bytes unchanged by construction).
248
436
  const [
249
437
  { PragmaError },
250
- { renderErrorPlain, renderErrorJson },
438
+ { renderErrorForFormat, renderErrorPlain },
251
439
  { suggestNames },
252
440
  ] = await Promise.all([
253
441
  import("./kernel/error/PragmaError.js"),
254
442
  import("./kernel/error/renderError.js"),
255
443
  import("./kernel/project/cli/suggestNames.js"),
256
444
  ]);
257
- const suggestions = suggestNames(unknown.token, [
258
- ...unknown.candidates,
259
- ]);
445
+ const curated = curatedSuggestions(unknown.token);
446
+ const suggestions = curated
447
+ ? [...curated]
448
+ : suggestNames(unknown.token, [...unknown.candidates]);
260
449
  const unknownError = PragmaError.unknownVerb(unknown.token, {
261
450
  suggestions,
262
451
  });
263
452
  process.stderr.write(
264
- `${jsonMode ? renderErrorJson(unknownError) : renderErrorPlain(unknownError)}\n`,
453
+ `${renderErrorForFormat(unknownError, format) ?? renderErrorPlain(unknownError)}\n`,
265
454
  );
266
455
  }
267
456
  process.exitCode = 2;
@@ -269,19 +458,22 @@ async function handleProgramError(
269
458
  }
270
459
 
271
460
  // 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
- }
461
+ // an explicit --format json/llm these route through the same error
462
+ // envelope agents parse (the kernel's one gate+renderer decision — the
463
+ // llm half used to split this one taxonomy class: an excess positional
464
+ // enveloped while an unknown option stayed raw prose).
465
+ const [{ PragmaError }, { renderErrorForFormat }] = await Promise.all([
466
+ import("./kernel/error/PragmaError.js"),
467
+ import("./kernel/error/renderError.js"),
468
+ ]);
469
+ const rendered = renderErrorForFormat(
470
+ new PragmaError({
471
+ code: "INVALID_INPUT",
472
+ message: error.message.replace(/^error:\s*/i, ""),
473
+ }),
474
+ format,
475
+ );
476
+ process.stderr.write(`${rendered ?? error.message}\n`);
285
477
  process.exitCode = 2;
286
478
  return;
287
479
  }
@@ -302,7 +494,7 @@ async function handleProgramError(
302
494
  error instanceof Error ? error.message : String(error),
303
495
  );
304
496
  process.stderr.write(
305
- `${jsonMode ? renderErrorJson(pragmaError) : renderErrorPlain(pragmaError)}\n`,
497
+ `${format === "json" ? renderErrorJson(pragmaError) : renderErrorPlain(pragmaError)}\n`,
306
498
  );
307
499
  process.exitCode = mapExitCode(pragmaError.code);
308
500
  }
@@ -17,8 +17,11 @@
17
17
  * deleted `capabilities/block/parity.test.ts`. Button and Modal resolve with
18
18
  * the same content a direct SPARQL oracle returns (summary, guidance,
19
19
  * anatomy, tier, modifier families with values, properties, subcomponents).
20
- * The fixture DECLARES whenToUse/whenNotToUse (which the live graph superseded
21
- * with ds:usage), so those sections are exercised here.
20
+ * The fixture declares the usage narrative the way the live graph does — one
21
+ * `ds:usage` literal — so what is exercised here is the path a real install
22
+ * takes. It formerly declared the retired whenToUse/whenNotToUse pair, and
23
+ * that divergence is exactly why this suite could assert a "### When to use"
24
+ * heading no install had rendered in months.
22
25
  */
23
26
 
24
27
  import { afterAll, beforeAll, describe, expect, it } from "vitest";
@@ -138,9 +141,12 @@ ds:Component a owl:Class .
138
141
  try {
139
142
  const rows = (await verb("list").run({}, emptyRt)) as PackRow[];
140
143
  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");
144
+ // The same semantics, on the empty-state seam: the calm message + its
145
+ // runnable hint now reach the user via stderr (`notice`), keeping
146
+ // plain stdout pure data.
147
+ const notice = verb("list").output.formatters.notice?.(rows);
148
+ expect(notice).toContain("No blocks in the store.");
149
+ expect(notice).toContain("pragma sources update");
144
150
  } finally {
145
151
  (await emptyRt.store.get()).store.dispose();
146
152
  }
@@ -156,10 +162,7 @@ describe("block lookup — Button content parity (GraphQL, detailed)", () => {
156
162
 
157
163
  // Guidance + anatomy sections — each cross-checked against the graph.
158
164
  expect(button.summary).toBe(await oracle(`${DS}button`, "ds:summary"));
159
- expect(button.whenToUse).toBe(await oracle(`${DS}button`, "ds:whenToUse"));
160
- expect(button.whenNotToUse).toBe(
161
- await oracle(`${DS}button`, "ds:whenNotToUse"),
162
- );
165
+ expect(button.usage).toBe(await oracle(`${DS}button`, "ds:usage"));
163
166
  expect(button.guidelines).toBe(
164
167
  await oracle(`${DS}button`, "ds:guidelines"),
165
168
  );
@@ -197,7 +200,13 @@ describe("block lookup — Button content parity (GraphQL, detailed)", () => {
197
200
  const out = (await verb("lookup").run({ name: ["Button"] }, rt)) as never;
198
201
  const llm = verb("lookup").output.formatters.llm(out);
199
202
  expect(llm).toContain("## Button");
200
- expect(llm).toContain("### When to use");
203
+ expect(llm).toContain("### Usage");
204
+ // The usage literal's OWN headings are demoted below the section heading
205
+ // they now live under, so `### When to use` renders as a CHILD of Usage
206
+ // rather than a sibling that reads as an empty section.
207
+ expect(llm).toContain("#### When to use");
208
+ expect(llm).toContain("#### When not to use");
209
+ expect(llm).not.toContain("\n### When to use\n");
201
210
  expect(llm).toContain("### Anatomy (DSL)");
202
211
  expect(llm).toContain("### Modifier Families");
203
212
  expect(llm).toContain("primary");
@@ -210,7 +219,15 @@ describe("block lookup — Modal content parity (GraphQL, detailed)", () => {
210
219
  expect(modal.uri).toBe(`${DS}modal`);
211
220
  expect(modal.name).toBe("Modal");
212
221
  expect(modal.summary).toBe(await oracle(`${DS}modal`, "ds:summary"));
213
- expect(modal.whenToUse).toBe(await oracle(`${DS}modal`, "ds:whenToUse"));
222
+ // Modal asserts an EMPTY `ds:usage` — the shape 138 of the 264 live blocks
223
+ // have. It resolves (parity with the oracle) and renders NOTHING: an empty
224
+ // literal must not print a bare "### Usage" heading with no body under it.
225
+ expect(modal.usage).toBe(await oracle(`${DS}modal`, "ds:usage"));
226
+ expect(modal.usage).toBe("");
227
+ const modalLlm = verb("lookup").output.formatters.llm(
228
+ (await verb("lookup").run({ name: ["Modal"] }, rt)) as never,
229
+ );
230
+ expect(modalLlm).not.toContain("### Usage");
214
231
  const families = modal.modifierFamilies as {
215
232
  name: string;
216
233
  values?: string[];
@@ -234,7 +251,7 @@ describe("block lookup — disclosure trims to the base view at summary", () =>
234
251
  const button = out.results.at(0) as Record<string, unknown>;
235
252
  expect(button.name).toBe("Button");
236
253
  expect(button.summary).toBeDefined();
237
- expect(button.whenToUse).toBeUndefined();
254
+ expect(button.usage).toBeUndefined();
238
255
  expect(button.anatomyDsl).toBeUndefined();
239
256
  expect(button.modifierFamilies).toBeUndefined();
240
257
  expect(button.figmaLink).toBeUndefined();