@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
@@ -1,6 +1,8 @@
1
1
  import { describe, expect, it } from "vitest";
2
2
  import {
3
+ findValuedVerbose,
3
4
  parseGlobalFlags,
5
+ readRawDetail,
4
6
  readRawFormat,
5
7
  stripGlobalFlags,
6
8
  } from "./globalFlags.js";
@@ -30,7 +32,7 @@ describe("parseGlobalFlags", () => {
30
32
  expect(parseGlobalFlags(["--format=json"], TTY).format).toBe("json");
31
33
  });
32
34
 
33
- it("renames --format text to plain", () => {
35
+ it("maps an unrecognized --format value to plain (the bin rejects it first)", () => {
34
36
  expect(parseGlobalFlags(["--format", "text"], PIPE).format).toBe("plain");
35
37
  });
36
38
 
@@ -68,6 +70,55 @@ describe("parseGlobalFlags", () => {
68
70
  it("reads --verbose", () => {
69
71
  expect(parseGlobalFlags(["--verbose"], TTY).verbose).toBe(true);
70
72
  });
73
+
74
+ it("reports the raw --detail value for validation, including valueless", () => {
75
+ expect(readRawDetail(["--detail", "detailed"])).toBe("detailed");
76
+ expect(readRawDetail(["--detail=bogus"])).toBe("bogus");
77
+ // "" so a valueless flag is rejected, never silently defaulted.
78
+ expect(readRawDetail(["--detail", "--category"])).toBe("");
79
+ expect(readRawDetail(["block", "list"])).toBeUndefined();
80
+ // Past the terminator it is data, not a flag of this program.
81
+ expect(readRawDetail(["lookup", "--", "--detail=x"])).toBeUndefined();
82
+ });
83
+
84
+ it("finds a valued --verbose token so the bin can reject it", () => {
85
+ expect(findValuedVerbose(["--verbose=true"])).toBe("--verbose=true");
86
+ expect(findValuedVerbose(["--verbose"])).toBeUndefined();
87
+ expect(findValuedVerbose(["lookup", "--", "--verbose=x"])).toBeUndefined();
88
+ });
89
+
90
+ it("reads --no-headers anywhere and strips it before Commander", () => {
91
+ expect(parseGlobalFlags(["--no-headers"], TTY).noHeaders).toBe(true);
92
+ expect(
93
+ parseGlobalFlags(["block", "list", "--no-headers"], TTY).noHeaders,
94
+ ).toBe(true);
95
+ expect(parseGlobalFlags(["block", "list"], TTY).noHeaders).toBeUndefined();
96
+ expect(stripGlobalFlags(["block", "list", "--no-headers"])).toEqual([
97
+ "block",
98
+ "list",
99
+ ]);
100
+ // Past the terminator it is the user's data, not this program's flag.
101
+ expect(
102
+ parseGlobalFlags(["block", "lookup", "--", "--no-headers"], TTY)
103
+ .noHeaders,
104
+ ).toBeUndefined();
105
+ });
106
+
107
+ it("reads --quiet anywhere and strips it before Commander", () => {
108
+ expect(parseGlobalFlags(["--quiet"], TTY).quiet).toBe(true);
109
+ expect(parseGlobalFlags(["sources", "update", "--quiet"], TTY).quiet).toBe(
110
+ true,
111
+ );
112
+ expect(parseGlobalFlags(["sources", "update"], TTY).quiet).toBeUndefined();
113
+ expect(stripGlobalFlags(["sources", "update", "--quiet"])).toEqual([
114
+ "sources",
115
+ "update",
116
+ ]);
117
+ // Past the terminator it is the user's data, not this program's flag.
118
+ expect(
119
+ parseGlobalFlags(["graph", "query", "--", "--quiet"], TTY).quiet,
120
+ ).toBeUndefined();
121
+ });
71
122
  });
72
123
 
73
124
  describe("stripGlobalFlags", () => {
@@ -105,3 +156,68 @@ describe("readRawFormat", () => {
105
156
  expect(readRawFormat(["block", "list"])).toBeUndefined();
106
157
  });
107
158
  });
159
+
160
+ describe("the option terminator bounds every scan (PROTECTED)", () => {
161
+ // `--` means the rest is the user's data. A scanner that ignored it would
162
+ // both misread a flag and STRIP it, so a lookup for a block literally named
163
+ // `--format` would lose its own argument and change how the error rendered.
164
+ it("does not read a flag that appears after `--`", () => {
165
+ expect(readRawFormat(["block", "lookup", "--", "--format", "json"])).toBe(
166
+ undefined,
167
+ );
168
+ expect(
169
+ parseGlobalFlags(["block", "lookup", "--", "--verbose"], TTY).verbose,
170
+ ).toBe(false);
171
+ expect(
172
+ parseGlobalFlags(["block", "lookup", "--", "--detail", "detailed"], TTY)
173
+ .detail,
174
+ ).toBe(undefined);
175
+ });
176
+
177
+ it("hands everything from `--` onward through untouched", () => {
178
+ expect(
179
+ stripGlobalFlags(["block", "lookup", "--", "--format", "json"]),
180
+ ).toEqual(["block", "lookup", "--", "--format", "json"]);
181
+ });
182
+
183
+ it("still reads a flag that appears before `--`", () => {
184
+ expect(
185
+ readRawFormat(["--format", "json", "block", "lookup", "--", "x"]),
186
+ ).toBe("json");
187
+ expect(
188
+ stripGlobalFlags(["--format", "json", "block", "lookup", "--", "x"]),
189
+ ).toEqual(["block", "lookup", "--", "x"]);
190
+ });
191
+ });
192
+
193
+ describe("a flag's value is never another flag (PROTECTED)", () => {
194
+ // The defect this pins: a valueless `--detail` consumed the NEXT flag as its
195
+ // value and stripped it, so `--detail --category css` silently answered over
196
+ // the whole set instead of the filtered one — a wrong answer, no diagnostic.
197
+ it("leaves a following flag standing when the value is absent", () => {
198
+ expect(
199
+ stripGlobalFlags(["standard", "list", "--detail", "--category", "css"]),
200
+ ).toEqual(["standard", "list", "--category", "css"]);
201
+ });
202
+
203
+ it("reports no detail for a valueless --detail", () => {
204
+ expect(
205
+ parseGlobalFlags(["standard", "list", "--detail", "--category"], TTY)
206
+ .detail,
207
+ ).toBe(undefined);
208
+ });
209
+
210
+ it("still consumes a real value", () => {
211
+ expect(
212
+ stripGlobalFlags(["standard", "list", "--detail", "summary"]),
213
+ ).toEqual(["standard", "list"]);
214
+ expect(
215
+ parseGlobalFlags(["standard", "list", "--detail", "summary"], TTY).detail,
216
+ ).toBe("summary");
217
+ });
218
+
219
+ it("reports a valueless --format as empty so the caller rejects it", () => {
220
+ // `""`, not `undefined` — `undefined` would fall through to the default.
221
+ expect(readRawFormat(["--format", "--verbose"])).toBe("");
222
+ });
223
+ });
@@ -1,18 +1,63 @@
1
1
  /**
2
2
  * Global-flag pre-parsing, ahead of Commander.
3
3
  *
4
- * `--format`, `--verbose`, and `--detail` may appear anywhere on the line, so
4
+ * `--format`, `--verbose`, `--no-headers`, and `--detail` may appear anywhere on the line, so
5
5
  * they are scanned and stripped before Commander sees argv — otherwise
6
6
  * `enablePositionalOptions()` scoping would reject a flag placed after a verb.
7
+ *
8
+ * ANYWHERE STOPS AT `--`. Everything after the option terminator is the user's
9
+ * data, not this program's flags: `block lookup -- --format` looks up a block
10
+ * literally named `--format`. Commander honours the terminator on its own, so
11
+ * a scan here that ignored it would parse — and strip — tokens Commander was
12
+ * about to hand through verbatim.
13
+ *
14
+ * A FLAG'S VALUE IS NEVER ANOTHER FLAG. `--detail --category css` supplies no
15
+ * detail; it is a valueless `--detail` followed by a separate flag. Reading the
16
+ * next token unconditionally would consume `--category` as the value and strip
17
+ * it, so the filter would vanish and the command would answer over the whole
18
+ * set instead — a wrong answer with no diagnostic.
7
19
  * Ported from the v1 `parseGlobalFlags`, with two v2 changes: a new `--detail`
8
- * flag and the `--format text` value renamed to `plain` (the kernel's
9
- * {@link OutputFormat}). The dedicated `--llm` flag was folded into
10
- * `--format llm`, leaving auto-detection as the sole implicit trigger. Both the
11
- * space (`--format json`) and equals (`--format=json`) forms are recognized.
20
+ * flag and the `--format text` value replaced by `plain` (the kernel's
21
+ * {@link OutputFormat}) — `text` is not accepted; the bin rejects it with the
22
+ * valid list. The dedicated `--llm` flag was folded into `--format llm`,
23
+ * leaving auto-detection as the sole implicit trigger. Both the space
24
+ * (`--format json`) and equals (`--format=json`) forms are recognized.
12
25
  */
13
26
 
14
27
  import { DETAIL_LEVELS, type DetailLevel } from "../../../constants.js";
15
- import type { GlobalFlags } from "../../runtime/types.js";
28
+ import { stdoutIsCaptured } from "../../interactivity.js";
29
+ import type { GlobalFlags } from "../../runtime/index.js";
30
+
31
+ /** The end-of-options separator: nothing after it is a flag of this program. */
32
+ const OPTION_TERMINATOR = "--";
33
+
34
+ /**
35
+ * The span of argv this program's flags may occupy — everything before the
36
+ * option terminator, or all of argv when there is none. Exported for the
37
+ * bin's retired-flag detection: a retired spelling AFTER the terminator is
38
+ * an operand, not a flag, and must not trigger a migration message.
39
+ *
40
+ * @param argv - The user's arguments.
41
+ * @returns The scannable span; the same array when no terminator is present.
42
+ */
43
+ export function selectScanSpan(argv: readonly string[]): readonly string[] {
44
+ const terminator = argv.indexOf(OPTION_TERMINATOR);
45
+ return terminator === -1 ? argv : argv.slice(0, terminator);
46
+ }
47
+
48
+ /**
49
+ * Whether a token can serve as a flag's value.
50
+ *
51
+ * A token starting with `-` is the next flag, not this one's value. Shared by
52
+ * every reader below so the space form cannot swallow a sibling flag at one
53
+ * call site while guarding against it at another.
54
+ *
55
+ * @param token - The token following a flag, if any.
56
+ * @returns True when the token is a value rather than another flag.
57
+ */
58
+ function isFlagValue(token: string | undefined): token is string {
59
+ return token !== undefined && !token.startsWith("-");
60
+ }
16
61
 
17
62
  /**
18
63
  * Read a `--flag`'s value, accepting both `--flag value` and `--flag=value`.
@@ -25,35 +70,74 @@ function readFlagValue(
25
70
  argv: readonly string[],
26
71
  flag: string,
27
72
  ): string | undefined {
73
+ const span = selectScanSpan(argv);
28
74
  const equalsPrefix = `${flag}=`;
29
- const equalsArg = argv.find((arg) => arg.startsWith(equalsPrefix));
75
+ const equalsArg = span.find((arg) => arg.startsWith(equalsPrefix));
30
76
  if (equalsArg !== undefined) {
31
77
  return equalsArg.slice(equalsPrefix.length);
32
78
  }
33
- const spaceIndex = argv.indexOf(flag);
34
- return spaceIndex === -1 ? undefined : argv[spaceIndex + 1];
79
+ const spaceIndex = span.indexOf(flag);
80
+ if (spaceIndex === -1) return undefined;
81
+ const value = span.at(spaceIndex + 1);
82
+ return isFlagValue(value) ? value : undefined;
35
83
  }
36
84
 
37
85
  /**
38
- * Read the raw `--format` value exactly as typed, for validation.
86
+ * Read a value flag's raw value exactly as typed, for validation.
39
87
  *
40
88
  * Unlike {@link parseGlobalFlags} this does not normalize — the caller decides
41
- * how to reject an unknown value. A bare `--format` with no following value is
89
+ * how to reject an unknown value. A bare flag with no following value is
42
90
  * reported as `""` (not `undefined`) so it is rejected rather than silently
43
- * falling through.
91
+ * falling through. One reader for every validated global value flag, so a
92
+ * guard applied to one cannot silently miss its siblings.
44
93
  *
45
94
  * @param argv - Raw argv (the user's arguments).
46
- * @returns The raw value, `""` for a valueless `--format`, or `undefined`.
95
+ * @param flag - The flag including leading dashes (e.g. `--format`).
96
+ * @returns The raw value, `""` for a valueless flag, or `undefined`.
47
97
  */
48
- export function readRawFormat(argv: readonly string[]): string | undefined {
49
- const equalsArg = argv.find((arg) => arg.startsWith("--format="));
50
- if (equalsArg !== undefined) return equalsArg.slice("--format=".length);
98
+ function readRawFlag(
99
+ argv: readonly string[],
100
+ flag: string,
101
+ ): string | undefined {
102
+ const span = selectScanSpan(argv);
103
+ const equalsPrefix = `${flag}=`;
104
+ const equalsArg = span.find((arg) => arg.startsWith(equalsPrefix));
105
+ if (equalsArg !== undefined) return equalsArg.slice(equalsPrefix.length);
51
106
 
52
- const spaceIndex = argv.indexOf("--format");
107
+ const spaceIndex = span.indexOf(flag);
53
108
  if (spaceIndex === -1) return undefined;
54
109
 
55
- const value = argv[spaceIndex + 1];
56
- return value !== undefined && !value.startsWith("-") ? value : "";
110
+ // `""` rather than `undefined`: a valueless flag must be REJECTED by the
111
+ // caller, not fall through to the default.
112
+ const value = span.at(spaceIndex + 1);
113
+ return isFlagValue(value) ? value : "";
114
+ }
115
+
116
+ /** The raw `--format` value as typed (see {@link readRawFlag}). */
117
+ export function readRawFormat(argv: readonly string[]): string | undefined {
118
+ return readRawFlag(argv, "--format");
119
+ }
120
+
121
+ /**
122
+ * The raw `--detail` value as typed (see {@link readRawFlag}). Validated by
123
+ * the bin exactly as `--format` is — an unrecognized level used to be
124
+ * dropped silently, which is the same defect class as a filter that
125
+ * evaporates: wrong output with no diagnostic.
126
+ */
127
+ export function readRawDetail(argv: readonly string[]): string | undefined {
128
+ return readRawFlag(argv, "--detail");
129
+ }
130
+
131
+ /**
132
+ * The `--verbose=<x>` token, if present. `--verbose` takes no value — one
133
+ * flag, one spelling — and the program must not accept-and-ignore a second
134
+ * one: the bin rejects the token this finds.
135
+ *
136
+ * @param argv - Raw argv (the user's arguments).
137
+ * @returns The offending token, or `undefined`.
138
+ */
139
+ export function findValuedVerbose(argv: readonly string[]): string | undefined {
140
+ return selectScanSpan(argv).find((arg) => arg.startsWith("--verbose="));
57
141
  }
58
142
 
59
143
  /**
@@ -70,7 +154,9 @@ export interface OutputEnvironment {
70
154
  /** Read the real stdout/env output environment. @note Impure — reads process. */
71
155
  function readOutputEnvironment(): OutputEnvironment {
72
156
  return {
73
- isTty: process.stdout.isTTY === true,
157
+ // The OUTPUT-SHAPE question, on stdout — not the prompting one. A run whose
158
+ // stdout is captured may still have a terminal to prompt on (`canPrompt`).
159
+ isTty: !stdoutIsCaptured(),
74
160
  noAutoLlm: Boolean(process.env.PRAGMA_NO_AUTO_LLM),
75
161
  };
76
162
  }
@@ -108,11 +194,18 @@ export function parseGlobalFlags(
108
194
  const formatRequested = rawFormat !== undefined;
109
195
  const autoLlm = !formatRequested && !env.isTty && !env.noAutoLlm;
110
196
  const detail = readDetail(argv);
197
+ const span = selectScanSpan(argv);
111
198
  return {
112
199
  llm: format === "llm" || autoLlm,
113
200
  autoLlm,
114
201
  format,
115
- verbose: argv.includes("--verbose"),
202
+ verbose: span.includes("--verbose"),
203
+ // `--no-headers` suppresses the plain-table header row; it is global so
204
+ // every list-shaped verb honors one spelling.
205
+ ...(span.includes("--no-headers") ? { noHeaders: true } : {}),
206
+ // `--quiet` silences success/progress (the report seam, interpreter logs,
207
+ // onboarding, calm notices) while error rendering stays untouched.
208
+ ...(span.includes("--quiet") ? { quiet: true } : {}),
116
209
  ...(detail !== undefined ? { detail } : {}),
117
210
  };
118
211
  }
@@ -122,7 +215,8 @@ export function parseGlobalFlags(
122
215
  *
123
216
  * Since {@link parseGlobalFlags} pre-parses these, they are dropped so they do
124
217
  * not collide with Commander's positional scoping, letting the user place them
125
- * anywhere on the line.
218
+ * anywhere on the line — anywhere before the option terminator, which this
219
+ * stops at and hands through whole.
126
220
  *
127
221
  * @param argv - The user's arguments.
128
222
  * @returns A new array with global flags stripped.
@@ -130,20 +224,29 @@ export function parseGlobalFlags(
130
224
  export function stripGlobalFlags(argv: readonly string[]): string[] {
131
225
  const result: string[] = [];
132
226
  for (let i = 0; i < argv.length; i++) {
133
- const arg = argv[i];
134
- if (arg === "--verbose") continue;
135
- if (
136
- arg?.startsWith("--format=") ||
137
- arg?.startsWith("--verbose=") ||
138
- arg?.startsWith("--detail=")
139
- ) {
227
+ const arg = argv.at(i);
228
+ if (arg === undefined) continue;
229
+
230
+ // Past the terminator nothing is ours: hand the remainder over untouched,
231
+ // terminator included, so Commander still sees where options end.
232
+ if (arg === OPTION_TERMINATOR) {
233
+ result.push(...argv.slice(i));
234
+ return result;
235
+ }
236
+
237
+ if (arg === "--verbose" || arg === "--no-headers" || arg === "--quiet") {
238
+ continue;
239
+ }
240
+ if (arg.startsWith("--format=") || arg.startsWith("--detail=")) {
140
241
  continue;
141
242
  }
142
243
  if (arg === "--format" || arg === "--detail") {
143
- i += 1; // skip the space-form value too
244
+ // Skip the value ONLY when the next token is one. A valueless flag before
245
+ // another flag must leave that flag standing.
246
+ if (isFlagValue(argv.at(i + 1))) i += 1;
144
247
  continue;
145
248
  }
146
- result.push(arg as string);
249
+ result.push(arg);
147
250
  }
148
251
  return result;
149
252
  }
@@ -11,9 +11,8 @@
11
11
  */
12
12
 
13
13
  import chalk from "chalk";
14
+ import { INDENT } from "../../render/vocabulary.js";
14
15
 
15
- /** Two-space indent for every list body row. */
16
- const INDENT = " ";
17
16
  /** Two-space gap between a term column and its description. */
18
17
  const GAP = " ";
19
18
 
@@ -32,6 +31,19 @@ export function helpTerm(text: string): string {
32
31
  return chalk.cyan(text);
33
32
  }
34
33
 
34
+ /**
35
+ * The wordmark's colour.
36
+ *
37
+ * `yellow` is a PALETTE slot, not a fixed hue: the 16-colour ANSI palette has no
38
+ * orange, and this slot is the one terminal themes render as orange — Ubuntu's
39
+ * among them. Naming the slot rather than a 256-colour or truecolour orange is
40
+ * what lets the wordmark follow the user's own theme instead of fighting it, and
41
+ * keeps it legible on light backgrounds where a hardcoded orange would not be.
42
+ */
43
+ export function helpLogo(text: string): string {
44
+ return chalk.yellow(text);
45
+ }
46
+
35
47
  /** The `Usage:` line: a dim label followed by the given command shape. */
36
48
  export function helpUsage(body: string): string {
37
49
  return `${chalk.dim("Usage:")} ${body}`;
@@ -10,11 +10,14 @@
10
10
  * never heard of still surfaces.
11
11
  */
12
12
 
13
- import type { VerbSpec } from "../../spec/types.js";
13
+ import { PROGRAM_LOGO } from "../../../constants.js";
14
+ import type { GlobalFlags } from "../../runtime/index.js";
15
+ import type { VerbSpec } from "../../spec/index.js";
14
16
  import {
15
17
  helpColumns,
16
18
  helpDim,
17
19
  helpHeading,
20
+ helpLogo,
18
21
  helpTerm,
19
22
  helpUsage,
20
23
  } from "./helpFormat.js";
@@ -79,6 +82,7 @@ function buildKernelGroups(programName: string): readonly HelpGroup[] {
79
82
  summary: `Read and write ${programName} configuration`,
80
83
  },
81
84
  { noun: "info", summary: "Show version, config, and update status" },
85
+ { noun: "version", summary: "Print the CLI version" },
82
86
  {
83
87
  noun: "upgrade",
84
88
  summary: `Upgrade the ${programName} CLI to the latest version`,
@@ -92,14 +96,16 @@ function buildKernelGroups(programName: string): readonly HelpGroup[] {
92
96
  noun: "capabilities",
93
97
  summary: "Discover conventions, tools, and the discovery sequence",
94
98
  },
95
- {
96
- noun: "colophon",
97
- summary: `Read how ${programName} and the active domain are made`,
98
- },
99
+ // A colophon is the note at the back of a book: the typeface, the
100
+ // press, the paper. Nothing depends on it, which is the point — so
101
+ // this line does not argue for it. Every other summary in this column
102
+ // promises work done; this one just invites you to look.
103
+ { noun: "colophon", summary: "Read the credits" },
99
104
  { noun: "skill", summary: "Browse agent skills from the active packs" },
100
105
  { noun: "prompt", summary: "Browse reusable prompt templates" },
101
- // The one noun with no verb to speak for it (the bin special-cases it),
102
- // so its summary is hand-written rather than derived.
106
+ // Curated for PLACEMENT, not for existence: `mcp serve` is an
107
+ // ordinary verb like every other, and this group is where a reader
108
+ // looks for it.
103
109
  { noun: "mcp", summary: "Start the MCP server over stdio" },
104
110
  ],
105
111
  },
@@ -127,23 +133,53 @@ function summarizeNoun(noun: string, verbs: readonly VerbSpec[]): string {
127
133
  return (first?.summary ?? `${noun} commands`).replace(/\.$/, "");
128
134
  }
129
135
 
136
+ /**
137
+ * Whether this reader is worth spending the wordmark on.
138
+ *
139
+ * An AUDIENCE question, not a data question: the art is 11 lines and ~200
140
+ * tokens — roughly a third of what `--help` costs an agent — and it says
141
+ * nothing an agent can act on. Both captured shapes are excluded:
142
+ * `llm` (requested, or inferred from a non-interactive stdout — the shape an
143
+ * agent captures) and `json`. `--format plain` therefore keeps the art even
144
+ * down a pipe, and `--format llm` drops it even on a terminal: explicit beats
145
+ * inference, the same inferred-vs-explicit split `renderErrorForFormat` uses.
146
+ *
147
+ * The DECISION is passed in as data — both call sites already hold the parsed
148
+ * flags — so this module still reads no `process` state and stays testable.
149
+ *
150
+ * @param flags - The invocation's global flags.
151
+ * @returns `true` when a human is reading and the wordmark should print.
152
+ */
153
+ function wordmarkSuitsReader(flags: GlobalFlags): boolean {
154
+ return flags.llm !== true && flags.format !== "json";
155
+ }
156
+
130
157
  /**
131
158
  * Build the curated root help string.
132
159
  *
133
160
  * @param programName - The CLI binary name (the distribution's `name`).
134
161
  * @param description - The program description shown in the header.
135
162
  * @param verbs - All registered verbs, used to derive the live noun set.
163
+ * @param issuesUrl - Where the preview notice sends feedback; the
164
+ * distribution's own, so a fork points at its own tracker.
165
+ * @param version - The version to stamp on the header. Passed in rather than
166
+ * read here so it is the SAME string `--version` prints: `buildProgram`
167
+ * resolves `options.version ?? VERSION`, and a host that overrides one must
168
+ * not be able to leave the other saying something else.
169
+ * @param globalFlags - The invocation's global flags, read only to decide who
170
+ * is reading (see {@link wordmarkSuitsReader}). Passed rather than probed: the
171
+ * help layer must not learn to read `process`.
136
172
  * @returns The formatted, colorized help text.
137
173
  */
138
174
  export function formatRootHelp(
139
175
  programName: string,
140
176
  description: string,
141
177
  verbs: readonly VerbSpec[],
178
+ version: string,
179
+ issuesUrl: string,
180
+ globalFlags: GlobalFlags,
142
181
  ): string {
143
182
  const present = nounsFrom(verbs);
144
- // `mcp` is served by the bin's special-case, not a projected verb, but is
145
- // always available — surface it so the front door is complete.
146
- present.add("mcp");
147
183
  const kernel = buildKernelGroups(programName);
148
184
  const curated = new Set(kernel.flatMap((g) => g.nouns.map((n) => n.noun)));
149
185
 
@@ -171,7 +207,31 @@ export function formatRootHelp(
171
207
  );
172
208
 
173
209
  const lines: string[] = [
174
- `${helpHeading(programName)} — ${description}`,
210
+ // The wordmark leads when the distribution declares one AND a human is
211
+ // reading it. A fork ships its own art or none, so its front door is never
212
+ // branded with someone else's; and a captured run drops the art entirely
213
+ // rather than charging an agent ~200 tokens for a picture of the name it
214
+ // just typed (see `wordmarkSuitsReader`). The LINES go, not their colour:
215
+ // chalk already emits no escapes off a TTY, so dimming would save nobody
216
+ // anything.
217
+ ...(PROGRAM_LOGO.length > 0 && wordmarkSuitsReader(globalFlags)
218
+ ? [...PROGRAM_LOGO.map(helpLogo), ""]
219
+ : []),
220
+ // `<name> v<version> — <blurb>`, the spelling `info` and `capabilities`
221
+ // already use, so the front door names the build the same way every other
222
+ // surface does. Dimmed: it answers "which build am I on" for someone who
223
+ // is already here, and must not compete with the name.
224
+ `${helpHeading(programName)} ${helpDim(`v${version}`)} — ${description}`,
225
+ "",
226
+ // The preview notice. Dimmed and directly under the header, because it
227
+ // qualifies what the reader has just been told the tool IS — a version
228
+ // number alone does not say "expect this to move".
229
+ //
230
+ // The URL is the distribution's declared `issuesUrl`, never a literal:
231
+ // `kernel/copy.test.ts` forbids the kernel naming a distribution, and a
232
+ // fork inviting feedback to someone else's tracker would be worse than a
233
+ // missing line. It is passed in for the same reason `version` is.
234
+ helpDim(`This is a preview version. Issues and suggestions: ${issuesUrl}`),
175
235
  "",
176
236
  helpUsage(
177
237
  `${programName} ${helpTerm("<command>")} ${helpDim("[subcommand] [flags]")}`,
@@ -203,7 +263,9 @@ export function formatRootHelp(
203
263
  "--detail <level>",
204
264
  "Progressive-disclosure level (summary, standard, detailed)",
205
265
  ],
206
- ["--verbose", "Diagnostic output on stderr"],
266
+ ["--no-headers", "Hide the table header row in plain output"],
267
+ ["--quiet", "Suppress success and progress output (errors still print)"],
268
+ ["--verbose", "Diagnostic output on stderr (sources update)"],
207
269
  ["--help", "Show help (works on any command)"],
208
270
  ["--version", "Show the CLI version"],
209
271
  ];
@@ -1,6 +1,11 @@
1
1
  import { describe, expect, it } from "vitest";
2
+ import { capabilities } from "../../../capabilities/index.js";
2
3
  import { fixtureModule } from "../../../testing/fixtures/fixtureCapability.js";
3
- import { nounVerbMap, resolveUnknownCommand } from "./suggest.js";
4
+ import {
5
+ curatedSuggestions,
6
+ nounVerbMap,
7
+ resolveUnknownCommand,
8
+ } from "./suggest.js";
4
9
  import { suggestNames } from "./suggestNames.js";
5
10
 
6
11
  const verbs = [...fixtureModule.verbs];
@@ -36,6 +41,33 @@ describe("resolveUnknownCommand", () => {
36
41
  });
37
42
  });
38
43
 
44
+ describe("curatedSuggestions", () => {
45
+ it("answers the conventional spelling with the commands that own the job", () => {
46
+ // `status` is nowhere near `info` or `doctor` textually, so edit distance
47
+ // can never offer them. The table is the answer for a token whose JOB
48
+ // exists here under other names — and it stays a suggestion: `status` is
49
+ // not a command, because `info` already is.
50
+ expect(curatedSuggestions("status")).toEqual(["info", "doctor"]);
51
+ });
52
+
53
+ it("has nothing to say about a plain typo — that is ranking's job", () => {
54
+ expect(curatedSuggestions("infoo")).toBeUndefined();
55
+ expect(curatedSuggestions("")).toBeUndefined();
56
+ });
57
+
58
+ it("never names a command the program does not have", () => {
59
+ // A curated entry that outlived its target would send a confused user at
60
+ // nothing. Check every suggestion against the LIVE registry, so renaming
61
+ // `info` reddens here instead of shipping a dead hint.
62
+ const live = new Set(
63
+ capabilities.flatMap((m) => m.verbs.map((v) => v.path[0])),
64
+ );
65
+ for (const suggestion of curatedSuggestions("status") ?? []) {
66
+ expect(live.has(suggestion)).toBe(true);
67
+ }
68
+ });
69
+ });
70
+
39
71
  describe("suggestNames", () => {
40
72
  it("ranks prefix matches ahead of edit-distance matches", () => {
41
73
  expect(suggestNames("con", ["config", "connect", "block"])).toEqual([
@@ -10,7 +10,31 @@
10
10
  * internals leak into the suggester.
11
11
  */
12
12
 
13
- import type { VerbSpec } from "../../spec/types.js";
13
+ import type { VerbSpec } from "../../spec/index.js";
14
+
15
+ /**
16
+ * Curated suggestions for a token whose JOB exists under other names. Edit
17
+ * distance cannot rank these — `status` is nowhere near `info` textually —
18
+ * but a user typing the conventional spelling deserves the commands that own
19
+ * the job here, not the nearest-looking noun. Consulted before fuzzy ranking;
20
+ * adding a second spelling as a real command is the one thing this table must
21
+ * never become.
22
+ */
23
+ const CURATED_SUGGESTIONS: Readonly<Record<string, readonly string[]>> = {
24
+ status: ["info", "doctor"],
25
+ };
26
+
27
+ /**
28
+ * The curated suggestions for an unknown token, if any.
29
+ *
30
+ * @param token - The unresolved command token.
31
+ * @returns The commands that own the token's job, or `undefined`.
32
+ */
33
+ export function curatedSuggestions(
34
+ token: string,
35
+ ): readonly string[] | undefined {
36
+ return CURATED_SUGGESTIONS[token];
37
+ }
14
38
 
15
39
  /** An unresolved token and the sibling names to rank it against. */
16
40
  export interface UnknownCommand {