@canonical/pragma-cli 0.34.0 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (798) hide show
  1. package/README.md +153 -30
  2. package/dist/.build-ok +0 -0
  3. package/dist/package.json +83 -0
  4. package/dist/pragma.conf.js +814 -0
  5. package/dist/pragma.conf.js.map +1 -0
  6. package/dist/src/bin.js +356 -0
  7. package/dist/src/bin.js.map +1 -0
  8. package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
  9. package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
  10. package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
  11. package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
  12. package/dist/src/capabilities/capabilities/catalog.js +130 -0
  13. package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
  14. package/dist/src/capabilities/capabilities/hints.js +195 -0
  15. package/dist/src/capabilities/capabilities/hints.js.map +1 -0
  16. package/dist/src/capabilities/capabilities/index.js +11 -0
  17. package/dist/src/capabilities/capabilities/index.js.map +1 -0
  18. package/dist/src/capabilities/capabilities/types.js +11 -0
  19. package/dist/src/capabilities/capabilities/types.js.map +1 -0
  20. package/dist/src/capabilities/colophon/collectColophon.js +83 -0
  21. package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
  22. package/dist/src/capabilities/colophon/colophon.render.js +59 -0
  23. package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
  24. package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
  25. package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
  26. package/dist/src/capabilities/colophon/index.js +5 -0
  27. package/dist/src/capabilities/colophon/index.js.map +1 -0
  28. package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
  29. package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
  30. package/dist/src/capabilities/colophon/types.js +10 -0
  31. package/dist/src/capabilities/colophon/types.js.map +1 -0
  32. package/dist/src/capabilities/config/collectConfigShow.js +59 -0
  33. package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
  34. package/dist/src/capabilities/config/field.render.js +22 -0
  35. package/dist/src/capabilities/config/field.render.js.map +1 -0
  36. package/dist/src/capabilities/config/fields.js +46 -0
  37. package/dist/src/capabilities/config/fields.js.map +1 -0
  38. package/dist/src/capabilities/config/get.verb.js +61 -0
  39. package/dist/src/capabilities/config/get.verb.js.map +1 -0
  40. package/dist/src/capabilities/config/index.js +5 -0
  41. package/dist/src/capabilities/config/index.js.map +1 -0
  42. package/dist/src/capabilities/config/runField.js +59 -0
  43. package/dist/src/capabilities/config/runField.js.map +1 -0
  44. package/dist/src/capabilities/config/runGet.js +28 -0
  45. package/dist/src/capabilities/config/runGet.js.map +1 -0
  46. package/dist/src/capabilities/config/runSet.js +53 -0
  47. package/dist/src/capabilities/config/runSet.js.map +1 -0
  48. package/dist/src/capabilities/config/set.verb.js +66 -0
  49. package/dist/src/capabilities/config/set.verb.js.map +1 -0
  50. package/dist/src/capabilities/config/show.render.js +84 -0
  51. package/dist/src/capabilities/config/show.render.js.map +1 -0
  52. package/dist/src/capabilities/config/show.verb.js +44 -0
  53. package/dist/src/capabilities/config/show.verb.js.map +1 -0
  54. package/dist/src/capabilities/config/types.js +5 -0
  55. package/dist/src/capabilities/config/types.js.map +1 -0
  56. package/dist/src/capabilities/config/unset.verb.js +49 -0
  57. package/dist/src/capabilities/config/unset.verb.js.map +1 -0
  58. package/dist/src/capabilities/create/cliProjection.js +195 -0
  59. package/dist/src/capabilities/create/cliProjection.js.map +1 -0
  60. package/dist/src/capabilities/create/constants.js +47 -0
  61. package/dist/src/capabilities/create/constants.js.map +1 -0
  62. package/dist/src/capabilities/create/create.render.js +100 -0
  63. package/dist/src/capabilities/create/create.render.js.map +1 -0
  64. package/dist/src/capabilities/create/create.verb.js +438 -0
  65. package/dist/src/capabilities/create/create.verb.js.map +1 -0
  66. package/dist/src/capabilities/create/createHelp.js +47 -0
  67. package/dist/src/capabilities/create/createHelp.js.map +1 -0
  68. package/dist/src/capabilities/create/createSurface.generated.js +394 -0
  69. package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
  70. package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
  71. package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
  72. package/dist/src/capabilities/create/index.js +18 -0
  73. package/dist/src/capabilities/create/index.js.map +1 -0
  74. package/dist/src/capabilities/create/messages.js +16 -0
  75. package/dist/src/capabilities/create/messages.js.map +1 -0
  76. package/dist/src/capabilities/create/mount.js +293 -0
  77. package/dist/src/capabilities/create/mount.js.map +1 -0
  78. package/dist/src/capabilities/create/pathJail.js +65 -0
  79. package/dist/src/capabilities/create/pathJail.js.map +1 -0
  80. package/dist/src/capabilities/create/pickGenerator.js +53 -0
  81. package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
  82. package/dist/src/capabilities/create/types.js +2 -0
  83. package/dist/src/capabilities/create/types.js.map +1 -0
  84. package/dist/src/capabilities/distribution.js +40 -0
  85. package/dist/src/capabilities/distribution.js.map +1 -0
  86. package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
  87. package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
  88. package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
  89. package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
  90. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +92 -0
  91. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
  92. package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
  93. package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
  94. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
  95. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
  96. package/dist/src/capabilities/doctor/checks/index.js +27 -0
  97. package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
  98. package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
  99. package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
  100. package/dist/src/capabilities/doctor/checks/targetHealth.js +205 -0
  101. package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
  102. package/dist/src/capabilities/doctor/doctor.render.js +185 -0
  103. package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
  104. package/dist/src/capabilities/doctor/doctor.verb.js +45 -0
  105. package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
  106. package/dist/src/capabilities/doctor/index.js +5 -0
  107. package/dist/src/capabilities/doctor/index.js.map +1 -0
  108. package/dist/src/capabilities/doctor/runChecks.js +83 -0
  109. package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
  110. package/dist/src/capabilities/doctor/types.js +5 -0
  111. package/dist/src/capabilities/doctor/types.js.map +1 -0
  112. package/dist/src/capabilities/graph/index.js +19 -0
  113. package/dist/src/capabilities/graph/index.js.map +1 -0
  114. package/dist/src/capabilities/graph/inspect.render.js +76 -0
  115. package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
  116. package/dist/src/capabilities/graph/inspect.verb.js +53 -0
  117. package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
  118. package/dist/src/capabilities/graph/query.render.js +73 -0
  119. package/dist/src/capabilities/graph/query.render.js.map +1 -0
  120. package/dist/src/capabilities/graph/query.verb.js +49 -0
  121. package/dist/src/capabilities/graph/query.verb.js.map +1 -0
  122. package/dist/src/capabilities/graph/runQuery.js +41 -0
  123. package/dist/src/capabilities/graph/runQuery.js.map +1 -0
  124. package/dist/src/capabilities/index.js +56 -0
  125. package/dist/src/capabilities/index.js.map +1 -0
  126. package/dist/src/capabilities/info/collectInfo.js +66 -0
  127. package/dist/src/capabilities/info/collectInfo.js.map +1 -0
  128. package/dist/src/capabilities/info/index.js +5 -0
  129. package/dist/src/capabilities/info/index.js.map +1 -0
  130. package/dist/src/capabilities/info/info.render.js +53 -0
  131. package/dist/src/capabilities/info/info.render.js.map +1 -0
  132. package/dist/src/capabilities/info/info.verb.js +42 -0
  133. package/dist/src/capabilities/info/info.verb.js.map +1 -0
  134. package/dist/src/capabilities/info/types.js +5 -0
  135. package/dist/src/capabilities/info/types.js.map +1 -0
  136. package/dist/src/capabilities/meta/complete.verb.js +43 -0
  137. package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
  138. package/dist/src/capabilities/meta/index.js +13 -0
  139. package/dist/src/capabilities/meta/index.js.map +1 -0
  140. package/dist/src/capabilities/meta/mcp.verb.js +34 -0
  141. package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
  142. package/dist/src/capabilities/ontology/index.js +21 -0
  143. package/dist/src/capabilities/ontology/index.js.map +1 -0
  144. package/dist/src/capabilities/ontology/queries.js +123 -0
  145. package/dist/src/capabilities/ontology/queries.js.map +1 -0
  146. package/dist/src/capabilities/ontology/render.js +66 -0
  147. package/dist/src/capabilities/ontology/render.js.map +1 -0
  148. package/dist/src/capabilities/ontology/verbs.js +181 -0
  149. package/dist/src/capabilities/ontology/verbs.js.map +1 -0
  150. package/dist/src/capabilities/prompt/index.js +16 -0
  151. package/dist/src/capabilities/prompt/index.js.map +1 -0
  152. package/dist/src/capabilities/prompt/prompt.render.js +78 -0
  153. package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
  154. package/dist/src/capabilities/prompt/types.js +10 -0
  155. package/dist/src/capabilities/prompt/types.js.map +1 -0
  156. package/dist/src/capabilities/prompt/verbs.js +93 -0
  157. package/dist/src/capabilities/prompt/verbs.js.map +1 -0
  158. package/dist/src/capabilities/resources/index.js +10 -0
  159. package/dist/src/capabilities/resources/index.js.map +1 -0
  160. package/dist/src/capabilities/resources/provider.js +423 -0
  161. package/dist/src/capabilities/resources/provider.js.map +1 -0
  162. package/dist/src/capabilities/setup/buildPlan.js +168 -0
  163. package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
  164. package/dist/src/capabilities/setup/index.js +5 -0
  165. package/dist/src/capabilities/setup/index.js.map +1 -0
  166. package/dist/src/capabilities/setup/mode.js +53 -0
  167. package/dist/src/capabilities/setup/mode.js.map +1 -0
  168. package/dist/src/capabilities/setup/operations/index.js +39 -0
  169. package/dist/src/capabilities/setup/operations/index.js.map +1 -0
  170. package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
  171. package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
  172. package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
  173. package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
  174. package/dist/src/capabilities/setup/operations/setupGenerator.js +343 -0
  175. package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
  176. package/dist/src/capabilities/setup/operations/setupLsp.js +277 -0
  177. package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
  178. package/dist/src/capabilities/setup/operations/setupMcp.js +207 -0
  179. package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
  180. package/dist/src/capabilities/setup/operations/setupSkills.js +316 -0
  181. package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
  182. package/dist/src/capabilities/setup/plan.js +128 -0
  183. package/dist/src/capabilities/setup/plan.js.map +1 -0
  184. package/dist/src/capabilities/setup/plan.render.js +193 -0
  185. package/dist/src/capabilities/setup/plan.render.js.map +1 -0
  186. package/dist/src/capabilities/setup/setup.render.js +54 -0
  187. package/dist/src/capabilities/setup/setup.render.js.map +1 -0
  188. package/dist/src/capabilities/setup/setup.verb.js +334 -0
  189. package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
  190. package/dist/src/capabilities/setup/shell.js +196 -0
  191. package/dist/src/capabilities/setup/shell.js.map +1 -0
  192. package/dist/src/capabilities/setup/targets.js +263 -0
  193. package/dist/src/capabilities/setup/targets.js.map +1 -0
  194. package/dist/src/capabilities/setup/types.js +5 -0
  195. package/dist/src/capabilities/setup/types.js.map +1 -0
  196. package/dist/src/capabilities/shared/assertExecOk.js +137 -0
  197. package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
  198. package/dist/src/capabilities/shared/bands.js +16 -0
  199. package/dist/src/capabilities/shared/bands.js.map +1 -0
  200. package/dist/src/capabilities/shared/index.js +26 -0
  201. package/dist/src/capabilities/shared/index.js.map +1 -0
  202. package/dist/src/capabilities/shared/packageManager.js +103 -0
  203. package/dist/src/capabilities/shared/packageManager.js.map +1 -0
  204. package/dist/src/capabilities/shared/registry.js +55 -0
  205. package/dist/src/capabilities/shared/registry.js.map +1 -0
  206. package/dist/src/capabilities/skill/discover.js +195 -0
  207. package/dist/src/capabilities/skill/discover.js.map +1 -0
  208. package/dist/src/capabilities/skill/index.js +10 -0
  209. package/dist/src/capabilities/skill/index.js.map +1 -0
  210. package/dist/src/capabilities/skill/render.js +49 -0
  211. package/dist/src/capabilities/skill/render.js.map +1 -0
  212. package/dist/src/capabilities/skill/verbs.js +83 -0
  213. package/dist/src/capabilities/skill/verbs.js.map +1 -0
  214. package/dist/src/capabilities/sources/collectStatus.js +103 -0
  215. package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
  216. package/dist/src/capabilities/sources/index.js +13 -0
  217. package/dist/src/capabilities/sources/index.js.map +1 -0
  218. package/dist/src/capabilities/sources/installSkills.js +167 -0
  219. package/dist/src/capabilities/sources/installSkills.js.map +1 -0
  220. package/dist/src/capabilities/sources/runUpdate.js +394 -0
  221. package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
  222. package/dist/src/capabilities/sources/status.render.js +64 -0
  223. package/dist/src/capabilities/sources/status.render.js.map +1 -0
  224. package/dist/src/capabilities/sources/status.verb.js +40 -0
  225. package/dist/src/capabilities/sources/status.verb.js.map +1 -0
  226. package/dist/src/capabilities/sources/types.js +6 -0
  227. package/dist/src/capabilities/sources/types.js.map +1 -0
  228. package/dist/src/capabilities/sources/update.render.js +34 -0
  229. package/dist/src/capabilities/sources/update.render.js.map +1 -0
  230. package/dist/src/capabilities/sources/update.verb.js +55 -0
  231. package/dist/src/capabilities/sources/update.verb.js.map +1 -0
  232. package/dist/src/capabilities/upgrade/index.js +5 -0
  233. package/dist/src/capabilities/upgrade/index.js.map +1 -0
  234. package/dist/src/capabilities/upgrade/runUpgrade.js +99 -0
  235. package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
  236. package/dist/src/capabilities/upgrade/types.js +5 -0
  237. package/dist/src/capabilities/upgrade/types.js.map +1 -0
  238. package/dist/src/capabilities/upgrade/upgrade.render.js +44 -0
  239. package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
  240. package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
  241. package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
  242. package/dist/src/capabilities/version/index.js +10 -0
  243. package/dist/src/capabilities/version/index.js.map +1 -0
  244. package/dist/src/capabilities/version/version.verb.js +36 -0
  245. package/dist/src/capabilities/version/version.verb.js.map +1 -0
  246. package/dist/src/constants.js +82 -0
  247. package/dist/src/constants.js.map +1 -0
  248. package/dist/src/index.js +12 -0
  249. package/dist/src/index.js.map +1 -0
  250. package/dist/src/kernel/completion/complete.js +66 -0
  251. package/dist/src/kernel/completion/complete.js.map +1 -0
  252. package/dist/src/kernel/completion/emitScripts.js +92 -0
  253. package/dist/src/kernel/completion/emitScripts.js.map +1 -0
  254. package/dist/src/kernel/completion/entitySource.js +285 -0
  255. package/dist/src/kernel/completion/entitySource.js.map +1 -0
  256. package/dist/src/kernel/completion/index.js +14 -0
  257. package/dist/src/kernel/completion/index.js.map +1 -0
  258. package/dist/src/kernel/completion/model.js +301 -0
  259. package/dist/src/kernel/completion/model.js.map +1 -0
  260. package/dist/src/kernel/completion/parse.js +253 -0
  261. package/dist/src/kernel/completion/parse.js.map +1 -0
  262. package/dist/src/kernel/completion/rank.js +101 -0
  263. package/dist/src/kernel/completion/rank.js.map +1 -0
  264. package/dist/src/kernel/completion/resolve.js +100 -0
  265. package/dist/src/kernel/completion/resolve.js.map +1 -0
  266. package/dist/src/kernel/completion/templates/bash.js +209 -0
  267. package/dist/src/kernel/completion/templates/bash.js.map +1 -0
  268. package/dist/src/kernel/completion/templates/fish.js +214 -0
  269. package/dist/src/kernel/completion/templates/fish.js.map +1 -0
  270. package/dist/src/kernel/completion/templates/index.js +23 -0
  271. package/dist/src/kernel/completion/templates/index.js.map +1 -0
  272. package/dist/src/kernel/completion/templates/shared.js +98 -0
  273. package/dist/src/kernel/completion/templates/shared.js.map +1 -0
  274. package/dist/src/kernel/completion/templates/zsh.js +201 -0
  275. package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
  276. package/dist/src/kernel/completion/types.js +13 -0
  277. package/dist/src/kernel/completion/types.js.map +1 -0
  278. package/dist/src/kernel/config/defaults.js +17 -0
  279. package/dist/src/kernel/config/defaults.js.map +1 -0
  280. package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
  281. package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
  282. package/dist/src/kernel/config/findProjectConfig.js +43 -0
  283. package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
  284. package/dist/src/kernel/config/firstRun.js +34 -0
  285. package/dist/src/kernel/config/firstRun.js.map +1 -0
  286. package/dist/src/kernel/config/globalConfig.js +79 -0
  287. package/dist/src/kernel/config/globalConfig.js.map +1 -0
  288. package/dist/src/kernel/config/index.js +16 -0
  289. package/dist/src/kernel/config/index.js.map +1 -0
  290. package/dist/src/kernel/config/paths.js +35 -0
  291. package/dist/src/kernel/config/paths.js.map +1 -0
  292. package/dist/src/kernel/config/readConfig.js +78 -0
  293. package/dist/src/kernel/config/readConfig.js.map +1 -0
  294. package/dist/src/kernel/config/schema.js +130 -0
  295. package/dist/src/kernel/config/schema.js.map +1 -0
  296. package/dist/src/kernel/config/types.js +19 -0
  297. package/dist/src/kernel/config/types.js.map +1 -0
  298. package/dist/src/kernel/config/writeConfigField.js +59 -0
  299. package/dist/src/kernel/config/writeConfigField.js.map +1 -0
  300. package/dist/src/kernel/copy.js +43 -0
  301. package/dist/src/kernel/copy.js.map +1 -0
  302. package/dist/src/kernel/error/PragmaError.js +149 -0
  303. package/dist/src/kernel/error/PragmaError.js.map +1 -0
  304. package/dist/src/kernel/error/constants.js +40 -0
  305. package/dist/src/kernel/error/constants.js.map +1 -0
  306. package/dist/src/kernel/error/fromTaskError.js +96 -0
  307. package/dist/src/kernel/error/fromTaskError.js.map +1 -0
  308. package/dist/src/kernel/error/index.js +13 -0
  309. package/dist/src/kernel/error/index.js.map +1 -0
  310. package/dist/src/kernel/error/recovery.js +52 -0
  311. package/dist/src/kernel/error/recovery.js.map +1 -0
  312. package/dist/src/kernel/error/renderError.js +115 -0
  313. package/dist/src/kernel/error/renderError.js.map +1 -0
  314. package/dist/src/kernel/error/serialize.js +25 -0
  315. package/dist/src/kernel/error/serialize.js.map +1 -0
  316. package/dist/src/kernel/error/types.js +9 -0
  317. package/dist/src/kernel/error/types.js.map +1 -0
  318. package/dist/src/kernel/index.js +25 -0
  319. package/dist/src/kernel/index.js.map +1 -0
  320. package/dist/src/kernel/packs/collect.js +187 -0
  321. package/dist/src/kernel/packs/collect.js.map +1 -0
  322. package/dist/src/kernel/packs/compile.js +304 -0
  323. package/dist/src/kernel/packs/compile.js.map +1 -0
  324. package/dist/src/kernel/packs/disclosure.js +76 -0
  325. package/dist/src/kernel/packs/disclosure.js.map +1 -0
  326. package/dist/src/kernel/packs/glob.js +38 -0
  327. package/dist/src/kernel/packs/glob.js.map +1 -0
  328. package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
  329. package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
  330. package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
  331. package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
  332. package/dist/src/kernel/packs/graphql/index.js +20 -0
  333. package/dist/src/kernel/packs/graphql/index.js.map +1 -0
  334. package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
  335. package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
  336. package/dist/src/kernel/packs/index.js +34 -0
  337. package/dist/src/kernel/packs/index.js.map +1 -0
  338. package/dist/src/kernel/packs/iri.js +110 -0
  339. package/dist/src/kernel/packs/iri.js.map +1 -0
  340. package/dist/src/kernel/packs/renderPack.js +129 -0
  341. package/dist/src/kernel/packs/renderPack.js.map +1 -0
  342. package/dist/src/kernel/packs/resolveEntity.js +223 -0
  343. package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
  344. package/dist/src/kernel/packs/runBodies.js +87 -0
  345. package/dist/src/kernel/packs/runBodies.js.map +1 -0
  346. package/dist/src/kernel/packs/sample.js +56 -0
  347. package/dist/src/kernel/packs/sample.js.map +1 -0
  348. package/dist/src/kernel/packs/schema.js +369 -0
  349. package/dist/src/kernel/packs/schema.js.map +1 -0
  350. package/dist/src/kernel/packs/sparql/applyFilters.js +68 -0
  351. package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
  352. package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
  353. package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
  354. package/dist/src/kernel/packs/sparql/buildLookupQuery.js +217 -0
  355. package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
  356. package/dist/src/kernel/packs/sparql/escape.js +21 -0
  357. package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
  358. package/dist/src/kernel/packs/sparql/index.js +31 -0
  359. package/dist/src/kernel/packs/sparql/index.js.map +1 -0
  360. package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
  361. package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
  362. package/dist/src/kernel/packs/types.js +30 -0
  363. package/dist/src/kernel/packs/types.js.map +1 -0
  364. package/dist/src/kernel/packs/uniqueness.js +30 -0
  365. package/dist/src/kernel/packs/uniqueness.js.map +1 -0
  366. package/dist/src/kernel/project/cli/buildProgram.js +263 -0
  367. package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
  368. package/dist/src/kernel/project/cli/constants.js +27 -0
  369. package/dist/src/kernel/project/cli/constants.js.map +1 -0
  370. package/dist/src/kernel/project/cli/dispatch.js +420 -0
  371. package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
  372. package/dist/src/kernel/project/cli/exitCodes.js +66 -0
  373. package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
  374. package/dist/src/kernel/project/cli/globalFlags.js +216 -0
  375. package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
  376. package/dist/src/kernel/project/cli/helpFormat.js +59 -0
  377. package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
  378. package/dist/src/kernel/project/cli/index.js +14 -0
  379. package/dist/src/kernel/project/cli/index.js.map +1 -0
  380. package/dist/src/kernel/project/cli/rootHelp.js +197 -0
  381. package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
  382. package/dist/src/kernel/project/cli/suggest.js +75 -0
  383. package/dist/src/kernel/project/cli/suggest.js.map +1 -0
  384. package/dist/src/kernel/project/cli/suggestNames.js +96 -0
  385. package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
  386. package/dist/src/kernel/project/cli/verbHelp.js +131 -0
  387. package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
  388. package/dist/src/kernel/project/mcp/buildServer.js +67 -0
  389. package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
  390. package/dist/src/kernel/project/mcp/envelope.js +37 -0
  391. package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
  392. package/dist/src/kernel/project/mcp/index.js +8 -0
  393. package/dist/src/kernel/project/mcp/index.js.map +1 -0
  394. package/dist/src/kernel/project/mcp/instructions.js +44 -0
  395. package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
  396. package/dist/src/kernel/project/mcp/mcpError.js +42 -0
  397. package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
  398. package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
  399. package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
  400. package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
  401. package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
  402. package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
  403. package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
  404. package/dist/src/kernel/project/mcp/registerVerb.js +300 -0
  405. package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
  406. package/dist/src/kernel/project/mcp/serve.js +35 -0
  407. package/dist/src/kernel/project/mcp/serve.js.map +1 -0
  408. package/dist/src/kernel/render/compactUri.js +24 -0
  409. package/dist/src/kernel/render/compactUri.js.map +1 -0
  410. package/dist/src/kernel/render/contracts.js +10 -0
  411. package/dist/src/kernel/render/contracts.js.map +1 -0
  412. package/dist/src/kernel/render/disclosure.js +34 -0
  413. package/dist/src/kernel/render/disclosure.js.map +1 -0
  414. package/dist/src/kernel/render/envelope.js +30 -0
  415. package/dist/src/kernel/render/envelope.js.map +1 -0
  416. package/dist/src/kernel/render/formatters.js +27 -0
  417. package/dist/src/kernel/render/formatters.js.map +1 -0
  418. package/dist/src/kernel/render/index.js +15 -0
  419. package/dist/src/kernel/render/index.js.map +1 -0
  420. package/dist/src/kernel/render/prefixes.js +46 -0
  421. package/dist/src/kernel/render/prefixes.js.map +1 -0
  422. package/dist/src/kernel/render/renderers.js +468 -0
  423. package/dist/src/kernel/render/renderers.js.map +1 -0
  424. package/dist/src/kernel/render/style.js +85 -0
  425. package/dist/src/kernel/render/style.js.map +1 -0
  426. package/dist/src/kernel/render/turtle.js +194 -0
  427. package/dist/src/kernel/render/turtle.js.map +1 -0
  428. package/dist/src/kernel/render/writeStdout.js +43 -0
  429. package/dist/src/kernel/render/writeStdout.js.map +1 -0
  430. package/dist/src/kernel/runtime/boot.js +49 -0
  431. package/dist/src/kernel/runtime/boot.js.map +1 -0
  432. package/dist/src/kernel/runtime/facade.js +39 -0
  433. package/dist/src/kernel/runtime/facade.js.map +1 -0
  434. package/dist/src/kernel/runtime/graphpack/build.js +122 -0
  435. package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
  436. package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
  437. package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
  438. package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
  439. package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
  440. package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
  441. package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
  442. package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
  443. package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
  444. package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
  445. package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
  446. package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
  447. package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
  448. package/dist/src/kernel/runtime/graphpack/index.js +11 -0
  449. package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
  450. package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
  451. package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
  452. package/dist/src/kernel/runtime/graphpack/read.js +92 -0
  453. package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
  454. package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
  455. package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
  456. package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
  457. package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
  458. package/dist/src/kernel/runtime/graphpack/types.js +55 -0
  459. package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
  460. package/dist/src/kernel/runtime/index.js +8 -0
  461. package/dist/src/kernel/runtime/index.js.map +1 -0
  462. package/dist/src/kernel/runtime/loadSession.js +34 -0
  463. package/dist/src/kernel/runtime/loadSession.js.map +1 -0
  464. package/dist/src/kernel/runtime/paths.js +78 -0
  465. package/dist/src/kernel/runtime/paths.js.map +1 -0
  466. package/dist/src/kernel/runtime/probe.js +37 -0
  467. package/dist/src/kernel/runtime/probe.js.map +1 -0
  468. package/dist/src/kernel/runtime/readEntity.js +363 -0
  469. package/dist/src/kernel/runtime/readEntity.js.map +1 -0
  470. package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
  471. package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
  472. package/dist/src/kernel/runtime/refs/index.js +29 -0
  473. package/dist/src/kernel/runtime/refs/index.js.map +1 -0
  474. package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
  475. package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
  476. package/dist/src/kernel/runtime/refs/resolve.js +332 -0
  477. package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
  478. package/dist/src/kernel/runtime/resolveSources.js +62 -0
  479. package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
  480. package/dist/src/kernel/runtime/store.js +75 -0
  481. package/dist/src/kernel/runtime/store.js.map +1 -0
  482. package/dist/src/kernel/runtime/storeReadiness.js +51 -0
  483. package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
  484. package/dist/src/kernel/runtime/types.js +11 -0
  485. package/dist/src/kernel/runtime/types.js.map +1 -0
  486. package/dist/src/kernel/spec/asVerb.js +21 -0
  487. package/dist/src/kernel/spec/asVerb.js.map +1 -0
  488. package/dist/src/kernel/spec/emitReference.js +578 -0
  489. package/dist/src/kernel/spec/emitReference.js.map +1 -0
  490. package/dist/src/kernel/spec/emitSurface.js +202 -0
  491. package/dist/src/kernel/spec/emitSurface.js.map +1 -0
  492. package/dist/src/kernel/spec/index.js +11 -0
  493. package/dist/src/kernel/spec/index.js.map +1 -0
  494. package/dist/src/kernel/spec/surfaceConformance.js +103 -0
  495. package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
  496. package/dist/src/kernel/spec/types.js +14 -0
  497. package/dist/src/kernel/spec/types.js.map +1 -0
  498. package/dist/src/kernel/spec/validate.js +110 -0
  499. package/dist/src/kernel/spec/validate.js.map +1 -0
  500. package/dist/src/kernel/vocabulary.js +97 -0
  501. package/dist/src/kernel/vocabulary.js.map +1 -0
  502. package/dist/src/types.js +11 -0
  503. package/dist/src/types.js.map +1 -0
  504. package/package.json +20 -22
  505. package/pragma.conf.ts +249 -60
  506. package/src/bin.ts +267 -82
  507. package/src/capabilities/block.parity.test.ts +6 -3
  508. package/src/capabilities/capabilities/capabilities.render.ts +1 -1
  509. package/src/capabilities/capabilities/capabilities.verb.ts +1 -1
  510. package/src/capabilities/capabilities/catalog.ts +3 -3
  511. package/src/capabilities/capabilities/hints.ts +32 -7
  512. package/src/capabilities/capabilities/index.ts +1 -1
  513. package/src/capabilities/colophon/collectColophon.ts +35 -24
  514. package/src/capabilities/colophon/colophon.render.ts +25 -1
  515. package/src/capabilities/colophon/colophon.test.ts +42 -21
  516. package/src/capabilities/colophon/colophon.verb.ts +4 -4
  517. package/src/capabilities/config/collectConfigShow.test.ts +1 -0
  518. package/src/capabilities/config/collectConfigShow.ts +3 -3
  519. package/src/capabilities/config/field.render.ts +4 -5
  520. package/src/capabilities/config/fields.ts +17 -10
  521. package/src/capabilities/config/get.verb.ts +70 -0
  522. package/src/capabilities/config/getUnset.test.ts +264 -0
  523. package/src/capabilities/config/index.ts +5 -1
  524. package/src/capabilities/config/runField.ts +40 -22
  525. package/src/capabilities/config/runGet.ts +34 -0
  526. package/src/capabilities/config/runSet.ts +35 -9
  527. package/src/capabilities/config/set.test.ts +48 -14
  528. package/src/capabilities/config/set.verb.ts +8 -7
  529. package/src/capabilities/config/show.render.ts +1 -1
  530. package/src/capabilities/config/show.verb.ts +9 -6
  531. package/src/capabilities/config/types.ts +18 -4
  532. package/src/capabilities/config/unset.verb.ts +58 -0
  533. package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
  534. package/src/capabilities/create/byteEquality.test.ts +25 -11
  535. package/src/capabilities/create/cliProjection.ts +227 -0
  536. package/src/capabilities/create/constants.ts +36 -61
  537. package/src/capabilities/create/create.mcp.test.ts +89 -5
  538. package/src/capabilities/create/create.render.ts +71 -7
  539. package/src/capabilities/create/create.test.ts +433 -219
  540. package/src/capabilities/create/create.verb.ts +297 -328
  541. package/src/capabilities/create/createGrammar.test.ts +865 -0
  542. package/src/capabilities/create/createHelp.ts +71 -0
  543. package/src/capabilities/create/createSurface.generated.ts +400 -0
  544. package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
  545. package/src/capabilities/create/cwdJail.test.ts +24 -5
  546. package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
  547. package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
  548. package/src/capabilities/create/index.ts +7 -4
  549. package/src/capabilities/create/messages.ts +18 -0
  550. package/src/capabilities/create/mount.ts +391 -0
  551. package/src/capabilities/create/pathJail.test.ts +90 -0
  552. package/src/capabilities/create/pathJail.ts +8 -5
  553. package/src/capabilities/create/pickGenerator.ts +23 -35
  554. package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
  555. package/src/capabilities/create/types.ts +20 -0
  556. package/src/capabilities/distribution.test.ts +3 -1
  557. package/src/capabilities/distribution.ts +10 -15
  558. package/src/capabilities/doctor/checks/checkKeStore.ts +7 -5
  559. package/src/capabilities/doctor/checks/checkPackageRefs.ts +6 -4
  560. package/src/capabilities/doctor/checks/checkPragmaVersion.ts +2 -2
  561. package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +72 -27
  562. package/src/capabilities/doctor/checks/checkShellCompletions.ts +59 -13
  563. package/src/capabilities/doctor/checks/index.ts +27 -0
  564. package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
  565. package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
  566. package/src/capabilities/doctor/checks/targetHealth.ts +274 -0
  567. package/src/capabilities/doctor/doctor.render.test.ts +18 -7
  568. package/src/capabilities/doctor/doctor.render.ts +43 -19
  569. package/src/capabilities/doctor/doctor.test.ts +123 -34
  570. package/src/capabilities/doctor/doctor.verb.ts +3 -3
  571. package/src/capabilities/doctor/runChecks.ts +62 -63
  572. package/src/capabilities/doctor/types.ts +20 -4
  573. package/src/capabilities/emptyRecovery.test.ts +13 -8
  574. package/src/capabilities/graph/examples.exec.test.ts +107 -0
  575. package/src/capabilities/graph/index.ts +1 -1
  576. package/src/capabilities/graph/inspect.render.ts +70 -22
  577. package/src/capabilities/graph/inspect.test.ts +260 -5
  578. package/src/capabilities/graph/inspect.verb.ts +18 -6
  579. package/src/capabilities/graph/query.render.ts +15 -3
  580. package/src/capabilities/graph/query.verb.ts +3 -3
  581. package/src/capabilities/graph/runQuery.ts +2 -3
  582. package/src/capabilities/index.ts +3 -1
  583. package/src/capabilities/info/collectInfo.ts +5 -4
  584. package/src/capabilities/info/info.render.ts +1 -1
  585. package/src/capabilities/info/info.verb.ts +1 -1
  586. package/src/capabilities/lazy.test.ts +32 -0
  587. package/src/capabilities/meta/complete.verb.ts +1 -1
  588. package/src/capabilities/meta/index.ts +1 -1
  589. package/src/capabilities/meta/mcp.verb.ts +10 -8
  590. package/src/capabilities/ontology/index.ts +15 -11
  591. package/src/capabilities/ontology/ontology.test.ts +6 -55
  592. package/src/capabilities/ontology/queries.ts +2 -2
  593. package/src/capabilities/ontology/render.ts +3 -4
  594. package/src/capabilities/ontology/verbs.ts +27 -68
  595. package/src/capabilities/prompt/index.ts +2 -2
  596. package/src/capabilities/prompt/prompt.render.ts +6 -2
  597. package/src/capabilities/prompt/types.ts +1 -1
  598. package/src/capabilities/prompt/verbs.ts +4 -5
  599. package/src/capabilities/reference.test.ts +63 -0
  600. package/src/capabilities/resources/provider.ts +342 -85
  601. package/src/capabilities/resources/resources.test.ts +355 -59
  602. package/src/capabilities/setup/buildPlan.ts +236 -0
  603. package/src/capabilities/setup/index.ts +7 -7
  604. package/src/capabilities/setup/mode.ts +74 -0
  605. package/src/capabilities/setup/operations/index.ts +74 -0
  606. package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
  607. package/src/capabilities/setup/operations/setupConfig.ts +124 -0
  608. package/src/capabilities/setup/operations/setupGenerator.ts +396 -326
  609. package/src/capabilities/setup/operations/setupLsp.ts +329 -68
  610. package/src/capabilities/setup/operations/setupMcp.ts +137 -97
  611. package/src/capabilities/setup/operations/setupSkills.ts +336 -108
  612. package/src/capabilities/setup/plan.render.ts +241 -0
  613. package/src/capabilities/setup/plan.ts +236 -0
  614. package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
  615. package/src/capabilities/setup/setup.render.test.ts +281 -73
  616. package/src/capabilities/setup/setup.render.ts +45 -77
  617. package/src/capabilities/setup/setup.test.ts +972 -209
  618. package/src/capabilities/setup/setup.verb.ts +223 -71
  619. package/src/capabilities/setup/shell.test.ts +86 -0
  620. package/src/capabilities/setup/shell.ts +137 -11
  621. package/src/capabilities/setup/targets.ts +367 -0
  622. package/src/capabilities/setup/types.ts +18 -57
  623. package/src/capabilities/shared/assertExecOk.ts +68 -10
  624. package/src/capabilities/shared/index.ts +32 -0
  625. package/src/capabilities/shared/packageManager.test.ts +55 -0
  626. package/src/capabilities/shared/packageManager.ts +62 -6
  627. package/src/capabilities/skill/discover.ts +37 -5
  628. package/src/capabilities/skill/index.ts +1 -1
  629. package/src/capabilities/skill/render.ts +10 -9
  630. package/src/capabilities/skill/skill.test.ts +7 -5
  631. package/src/capabilities/skill/verbs.ts +3 -4
  632. package/src/capabilities/sources/collectStatus.ts +7 -2
  633. package/src/capabilities/sources/index.ts +1 -1
  634. package/src/capabilities/sources/installSkills.ts +84 -7
  635. package/src/capabilities/sources/runUpdate.ts +53 -21
  636. package/src/capabilities/sources/sources.test.ts +154 -2
  637. package/src/capabilities/sources/status.render.ts +1 -1
  638. package/src/capabilities/sources/status.verb.ts +1 -1
  639. package/src/capabilities/sources/update.render.ts +1 -1
  640. package/src/capabilities/sources/update.verb.ts +1 -1
  641. package/src/capabilities/surface.test.ts +134 -17
  642. package/src/capabilities/upgrade/runUpgrade.ts +8 -8
  643. package/src/capabilities/upgrade/upgrade.render.ts +4 -5
  644. package/src/capabilities/upgrade/upgrade.test.ts +3 -3
  645. package/src/capabilities/upgrade/upgrade.verb.ts +1 -1
  646. package/src/capabilities/version/index.ts +12 -0
  647. package/src/capabilities/version/version.test.ts +66 -0
  648. package/src/capabilities/version/version.verb.ts +39 -0
  649. package/src/constants.ts +31 -1
  650. package/src/identity.test.ts +40 -25
  651. package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +15 -13
  652. package/src/kernel/completion/complete.test.ts +12 -2
  653. package/src/kernel/completion/complete.ts +1 -1
  654. package/src/kernel/completion/emitScripts.ts +1 -1
  655. package/src/kernel/completion/entitySource.test.ts +1 -1
  656. package/src/kernel/completion/entitySource.ts +21 -8
  657. package/src/kernel/completion/model.test.ts +164 -12
  658. package/src/kernel/completion/model.ts +94 -14
  659. package/src/kernel/completion/parse.test.ts +4 -7
  660. package/src/kernel/completion/parse.ts +15 -0
  661. package/src/kernel/completion/resolve.test.ts +0 -1
  662. package/src/kernel/completion/safety.test.ts +34 -26
  663. package/src/kernel/completion/shellDrive.test.ts +28 -9
  664. package/src/kernel/completion/templates/bash.ts +7 -2
  665. package/src/kernel/completion/templates/index.ts +23 -0
  666. package/src/kernel/completion/types.ts +7 -0
  667. package/src/kernel/config/defaults.test.ts +25 -2
  668. package/src/kernel/config/defaults.ts +4 -3
  669. package/src/kernel/config/evaluateProjectConfig.ts +31 -8
  670. package/src/kernel/config/firstRun.test.ts +44 -38
  671. package/src/kernel/config/firstRun.ts +24 -88
  672. package/src/kernel/config/index.ts +1 -1
  673. package/src/kernel/config/readConfig.test.ts +6 -3
  674. package/src/kernel/config/readConfig.ts +1 -1
  675. package/src/kernel/config/schema.ts +3 -1
  676. package/src/kernel/config/types.ts +3 -1
  677. package/src/kernel/copy.test.ts +34 -4
  678. package/src/kernel/copy.ts +54 -0
  679. package/src/kernel/error/PragmaError.test.ts +5 -2
  680. package/src/kernel/error/PragmaError.ts +4 -2
  681. package/src/kernel/error/constants.ts +7 -5
  682. package/src/kernel/error/fromTaskError.ts +28 -6
  683. package/src/kernel/error/recovery.ts +14 -0
  684. package/src/kernel/error/renderError.ts +42 -1
  685. package/src/kernel/error/types.ts +21 -1
  686. package/src/kernel/index.ts +26 -0
  687. package/src/kernel/packs/collect.ts +12 -16
  688. package/src/kernel/packs/compile.test.ts +130 -1
  689. package/src/kernel/packs/compile.ts +93 -3
  690. package/src/kernel/packs/disclosure.ts +2 -2
  691. package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
  692. package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +3 -4
  693. package/src/kernel/packs/graphql/index.ts +20 -0
  694. package/src/kernel/packs/index.ts +40 -0
  695. package/src/kernel/packs/iri.test.ts +73 -0
  696. package/src/kernel/packs/iri.ts +66 -14
  697. package/src/kernel/packs/renderPack.ts +24 -5
  698. package/src/kernel/packs/resolveEntity.test.ts +213 -0
  699. package/src/kernel/packs/resolveEntity.ts +112 -18
  700. package/src/kernel/packs/runBodies.ts +2 -3
  701. package/src/kernel/packs/sample.ts +1 -1
  702. package/src/kernel/packs/schema.ts +18 -1
  703. package/src/kernel/packs/sparql/applyFilters.ts +16 -17
  704. package/src/kernel/packs/sparql/buildLookupQuery.ts +75 -3
  705. package/src/kernel/packs/sparql/index.ts +37 -0
  706. package/src/kernel/packs/sparql/runSelect.test.ts +1 -1
  707. package/src/kernel/packs/sparql/runSelect.ts +3 -4
  708. package/src/kernel/packs/toolDescription.test.ts +42 -3
  709. package/src/kernel/packs/types.ts +13 -0
  710. package/src/kernel/packs/uniqueness.ts +1 -1
  711. package/src/kernel/project/cli/buildProgram.test.ts +147 -12
  712. package/src/kernel/project/cli/buildProgram.ts +77 -18
  713. package/src/kernel/project/cli/constants.ts +34 -0
  714. package/src/kernel/project/cli/dispatch.test.ts +160 -3
  715. package/src/kernel/project/cli/dispatch.ts +222 -42
  716. package/src/kernel/project/cli/exitCodes.ts +1 -1
  717. package/src/kernel/project/cli/globalFlags.test.ts +117 -1
  718. package/src/kernel/project/cli/globalFlags.ts +130 -30
  719. package/src/kernel/project/cli/helpFormat.ts +13 -0
  720. package/src/kernel/project/cli/rootHelp.ts +41 -12
  721. package/src/kernel/project/cli/suggest.test.ts +33 -1
  722. package/src/kernel/project/cli/suggest.ts +25 -1
  723. package/src/kernel/project/cli/verbHelp.test.ts +30 -0
  724. package/src/kernel/project/cli/verbHelp.ts +23 -7
  725. package/src/kernel/project/mcp/buildServer.ts +7 -4
  726. package/src/kernel/project/mcp/envelope.ts +2 -2
  727. package/src/kernel/project/mcp/instructions.ts +2 -2
  728. package/src/kernel/project/mcp/mcpError.ts +1 -1
  729. package/src/kernel/project/mcp/parity.test.ts +5 -2
  730. package/src/kernel/project/mcp/prompts/index.ts +37 -0
  731. package/src/kernel/project/mcp/prompts/source.ts +2 -2
  732. package/src/kernel/project/mcp/registerVerb.ts +35 -9
  733. package/src/kernel/project/mcp/serve.ts +2 -2
  734. package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
  735. package/src/kernel/render/contracts.ts +21 -0
  736. package/src/kernel/render/envelope.ts +2 -3
  737. package/src/kernel/render/formatters.ts +1 -1
  738. package/src/kernel/render/renderers.test.ts +243 -6
  739. package/src/kernel/render/renderers.ts +222 -20
  740. package/src/kernel/render/style.test.ts +75 -24
  741. package/src/kernel/render/style.ts +31 -1
  742. package/src/kernel/render/turtle.ts +222 -0
  743. package/src/kernel/runtime/graphpack/buildIndex.ts +1 -1
  744. package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +3 -3
  745. package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +1 -1
  746. package/src/kernel/runtime/graphpack/embedded.ts +3 -3
  747. package/src/kernel/runtime/graphpack/manifest.ts +1 -1
  748. package/src/kernel/runtime/graphpack/read.ts +1 -2
  749. package/src/kernel/runtime/loadSession.ts +1 -1
  750. package/src/kernel/runtime/probe.ts +6 -6
  751. package/src/kernel/runtime/readEntity.ts +472 -28
  752. package/src/kernel/runtime/refs/index.ts +39 -0
  753. package/src/kernel/runtime/refs/parseRef.ts +2 -2
  754. package/src/kernel/runtime/refs/resolve.ts +4 -4
  755. package/src/kernel/runtime/storeReadiness.ts +1 -2
  756. package/src/kernel/runtime/types.ts +15 -1
  757. package/src/kernel/runtime/wasmEmbed.test.ts +37 -39
  758. package/src/kernel/spec/emitReference.ts +105 -30
  759. package/src/kernel/spec/emitSurface.ts +48 -6
  760. package/src/kernel/spec/surfaceConformance.test.ts +4 -2
  761. package/src/kernel/spec/types.ts +248 -4
  762. package/src/testing/behavioral/docExamples.test.ts +14 -0
  763. package/src/testing/behavioral/errorMatrix.mcp.test.ts +2 -2
  764. package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
  765. package/src/testing/behavioral/journeys.cli.test.ts +1 -1
  766. package/src/testing/behavioral/journeys.defaultPack.test.ts +7 -7
  767. package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
  768. package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
  769. package/src/testing/behavioral/journeys.packageStories.test.ts +4 -4
  770. package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
  771. package/src/testing/behavioral/mcpSurface.test.ts +1 -1
  772. package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
  773. package/src/testing/eval/cases/effectful.ts +3 -2
  774. package/src/testing/fixtures/blockGraph.ts +79 -0
  775. package/src/testing/fixtures/graph/canonical.ts +88 -2
  776. package/src/testing/fixtures/graph/defaultPack.ts +1 -1
  777. package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
  778. package/src/testing/helpers/projectMcp.ts +32 -6
  779. package/src/testing/helpers/runCli.ts +35 -18
  780. package/src/testing/perf/budgets.test.ts +20 -9
  781. package/src/testing/perf/budgets.ts +58 -9
  782. package/src/testing/perf/codegen.test.ts +126 -0
  783. package/src/testing/perf/globalSetup.test.ts +286 -0
  784. package/src/testing/perf/globalSetup.ts +505 -23
  785. package/src/testing/perf/measure.test.ts +38 -0
  786. package/src/testing/perf/measure.ts +23 -4
  787. package/src/testing/setupXdgIsolation.ts +81 -21
  788. package/src/testing/tempRoot.globalSetup.ts +122 -0
  789. package/dist/pragma +0 -0
  790. package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -189
  791. package/src/capabilities/create/templates.embedded.generated.ts +0 -28
  792. package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -42
  793. package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
  794. package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -68
  795. package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -61
  796. package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
  797. package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
  798. package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
@@ -33,10 +33,9 @@ function moduleWith(overrides: Partial<VerbSpec>): CapabilityModule {
33
33
  }
34
34
 
35
35
  describe("buildCompletionModel — structure", () => {
36
- it("collects nouns sorted, injecting the bin-served mcp", () => {
36
+ it("collects nouns sorted, from the declared verbs alone", () => {
37
37
  expect(model.nouns.map((n) => n.noun)).toEqual([
38
38
  "block",
39
- "mcp",
40
39
  "standard",
41
40
  "status",
42
41
  ]);
@@ -62,17 +61,12 @@ describe("buildCompletionModel — structure", () => {
62
61
  expect(status?.verbs).toEqual([]);
63
62
  });
64
63
 
65
- it("injects mcp as a bare self-verb noun with nothing to offer", () => {
66
- const mcp = findNoun(model, "mcp");
67
- expect(mcp?.selfVerb).toEqual({
68
- label: "mcp",
69
- mutates: false,
70
- flags: [],
71
- positionals: [],
72
- });
73
- });
64
+ it("offers the mcp noun from its declared verb, with no self-verb", () => {
65
+ // The noun used to be conjured here because the bin served it without a
66
+ // spec; nothing is conjured now, so a module that declares no mcp verb
67
+ // gets no mcp noun.
68
+ expect(findNoun(model, "mcp")).toBeUndefined();
74
69
 
75
- it("does not inject mcp when a live mcp noun exists", () => {
76
70
  const withMcp = buildCompletionModel([
77
71
  moduleWith({ path: ["mcp", "serve"] }),
78
72
  ]);
@@ -121,6 +115,38 @@ describe("buildCompletionModel — flags and sources", () => {
121
115
  });
122
116
  });
123
117
 
118
+ it("marks a spec-declared repeatable string/enum flag repeatable", () => {
119
+ // `string[]` is not the only accumulating shape: a compiled pack marks
120
+ // every declared filter `repeatable`, so `--category css --category git`
121
+ // is the union. Reading the kind alone de-offered the flag after its
122
+ // first use, which is exactly when repetition becomes offerable.
123
+ const repeatables = buildCompletionModel([
124
+ moduleWith({
125
+ params: [
126
+ {
127
+ kind: "enum",
128
+ name: "category",
129
+ doc: "Filter by category.",
130
+ values: ["css", "git"],
131
+ repeatable: true,
132
+ },
133
+ {
134
+ kind: "string",
135
+ name: "search",
136
+ doc: "Free text.",
137
+ repeatable: true,
138
+ },
139
+ { kind: "string", name: "note", doc: "Once only." },
140
+ ],
141
+ }),
142
+ ]);
143
+ const thing = findNoun(repeatables, "thing")?.selfVerb;
144
+ const flagOf = (flag: string) => thing?.flags.find((f) => f.flag === flag);
145
+ expect(flagOf("--category")?.repeatable).toBe(true);
146
+ expect(flagOf("--search")?.repeatable).toBe(true);
147
+ expect(flagOf("--note")?.repeatable).toBe(false);
148
+ });
149
+
124
150
  it("resolves name positionals with required/variadic markers", () => {
125
151
  expect(get?.positionals).toEqual([
126
152
  {
@@ -270,6 +296,11 @@ describe("buildCompletionModel — flags and sources", () => {
270
296
  kind: "values",
271
297
  values: ["summary", "standard", "detailed"],
272
298
  });
299
+ // Every flag the global parser accepts is offered — a flag the surface
300
+ // advertises but completion omits is invisible at the TAB that would
301
+ // teach it.
302
+ expect(flags["--no-headers"]).toMatchObject({ takesValue: false });
303
+ expect(flags["--quiet"]).toMatchObject({ takesValue: false });
273
304
  expect(flags["--llm"]).toBeUndefined();
274
305
  expect(flags["--version"]?.rootOnly).toBe(true);
275
306
  expect(flags["--help"]?.rootOnly).toBeUndefined();
@@ -350,6 +381,22 @@ function expectAgreement(
350
381
  .filter((noun) => noun !== "mcp" || surfaceNouns.includes("mcp"));
351
382
  expect(modelNouns).toEqual(surfaceNouns);
352
383
 
384
+ // A module-owned mount REPLACES its verbs' completion surface with the
385
+ // flags/positionals the mounted tree actually registers, so agreement for
386
+ // those verbs is asserted against the module's declared projection data —
387
+ // not the covenant-facing surface flags (which record binding param names).
388
+ const mountedByNoun = new Map<
389
+ string,
390
+ Readonly<Record<string, import("../spec/types.js").CompletionChildSpec>>
391
+ >();
392
+ for (const module of modules) {
393
+ if (!module.cliProjection) continue;
394
+ const children = module.cliProjection.completionChildren();
395
+ for (const verb of module.verbs) {
396
+ mountedByNoun.set(verb.path[0], children);
397
+ }
398
+ }
399
+
353
400
  for (const noun of surfaceNouns) {
354
401
  const nounEntry = findNoun(completionModel, noun);
355
402
  expect(nounEntry).toBeDefined();
@@ -362,6 +409,7 @@ function expectAgreement(
362
409
  ].sort();
363
410
  expect(modelLabels).toEqual(surfaceVerbs.map((v) => v.v).sort());
364
411
 
412
+ const mounted = mountedByNoun.get(noun);
365
413
  for (const surfaceVerb of surfaceVerbs) {
366
414
  const modelVerb: VerbEntry | undefined =
367
415
  nounEntry.selfVerb?.label === surfaceVerb.v
@@ -370,6 +418,26 @@ function expectAgreement(
370
418
  expect(modelVerb).toBeDefined();
371
419
  if (!modelVerb) continue;
372
420
 
421
+ const mountedSpec = mounted?.[surfaceVerb.v];
422
+ if (mountedSpec) {
423
+ expect(modelVerb.flags.map((f) => f.flag)).toEqual(
424
+ mountedSpec.flags.map((f) => f.flag),
425
+ );
426
+ expect(modelVerb.positionals.map((p) => p.name)).toEqual(
427
+ mountedSpec.positionals.map((p) => p.name),
428
+ );
429
+ expect((modelVerb.children ?? []).map((c) => c.label)).toEqual(
430
+ (mountedSpec.children ?? []).map((c) => c.label),
431
+ );
432
+ // A namespace node (children) never mutates for completion: the
433
+ // mounted tree registers the mutation trio on runnable leaves only.
434
+ const isNamespace = (mountedSpec.children ?? []).length > 0;
435
+ expect(modelVerb.mutates).toBe(
436
+ !isNamespace && surfaceVerb.mutates === true,
437
+ );
438
+ continue;
439
+ }
440
+
373
441
  expect(modelVerb.flags.map((f) => f.flag)).toEqual(
374
442
  surfaceVerb.flags ?? [],
375
443
  );
@@ -393,6 +461,90 @@ describe("projection agreement with emitSurface (PROTECTED)", () => {
393
461
  });
394
462
  });
395
463
 
464
+ describe("mounted create completion — literal candidate pins (PROTECTED)", () => {
465
+ // The mounted-tree branch of the agreement describe compares the model to
466
+ // completionChildren() — the same call the model was BUILT from, so it can
467
+ // never catch that surface going wrong (a garbage projection satisfies
468
+ // it). These pins are the INDEPENDENT source: literal candidate sets
469
+ // through the real resolver, shellDrive noun-tier style — the segment
470
+ // descent (parse.ts children walk) and a leaf's registered flags.
471
+
472
+ it("segment tier: `create component <TAB>` offers exactly the framework segments", async () => {
473
+ const { runComplete } = await import("./complete.js");
474
+ expect(
475
+ await runComplete(["create", "component", ""], capabilities),
476
+ ).toEqual(["lit", "react", "svelte"]);
477
+ expect(
478
+ await runComplete(["create", "application", ""], capabilities),
479
+ ).toEqual(["react"]);
480
+ });
481
+
482
+ it("namespace flag tier: `create component --<TAB>` offers NO leaf prompt or mutation flags", async () => {
483
+ const { runComplete } = await import("./complete.js");
484
+ // Prompt AND mutation flags are registered on the LEAVES; a pre-segment
485
+ // offer completes orderings Commander rejects (`create component
486
+ // --use-ts-stories svelte` and `create component --dry-run react` both
487
+ // exit 2 as unknown options). Until a framework segment is typed, only
488
+ // the global tier is offered.
489
+ expect(
490
+ await runComplete(["create", "component", "--"], capabilities),
491
+ ).toEqual([
492
+ "--detail",
493
+ "--format",
494
+ "--help",
495
+ "--no-headers",
496
+ "--quiet",
497
+ "--verbose",
498
+ ]);
499
+ });
500
+
501
+ it("leaf flag tier: `create component react --<TAB>` offers the REGISTERED flags", async () => {
502
+ const { runComplete } = await import("./complete.js");
503
+ // The leaf's prompt-derived flags in their registered spelling (--no-
504
+ // forms for default-true confirms, --component-path for the positional
505
+ // prompt — addPromptOptions registers EVERY prompt as an option), the
506
+ // mutation trio, and the root globals — as literals, so dropping the
507
+ // framework positional's values or a leaf prompt flag goes red instead
508
+ // of silently green.
509
+ expect(
510
+ await runComplete(["create", "component", "react", "--"], capabilities),
511
+ ).toEqual([
512
+ "--component-path",
513
+ "--detail",
514
+ "--dry-run",
515
+ "--format",
516
+ "--help",
517
+ "--no-headers",
518
+ "--no-with-ssr-tests",
519
+ "--no-with-stories",
520
+ "--no-with-styles",
521
+ "--quiet",
522
+ "--undo",
523
+ "--verbose",
524
+ "--yes",
525
+ ]);
526
+ // Svelte's leaf carries its own extra flag — per-leaf, not unioned.
527
+ expect(
528
+ await runComplete(["create", "component", "svelte", "--"], capabilities),
529
+ ).toEqual([
530
+ "--component-path",
531
+ "--detail",
532
+ "--dry-run",
533
+ "--format",
534
+ "--help",
535
+ "--no-headers",
536
+ "--no-with-ssr-tests",
537
+ "--no-with-stories",
538
+ "--no-with-styles",
539
+ "--quiet",
540
+ "--undo",
541
+ "--use-ts-stories",
542
+ "--verbose",
543
+ "--yes",
544
+ ]);
545
+ });
546
+ });
547
+
396
548
  /** Regression pin: ParamSpec.complete stays optional on every param kind. */
397
549
  it("accepts params without a complete field", () => {
398
550
  const params: ParamSpec[] = [
@@ -25,8 +25,13 @@
25
25
  */
26
26
 
27
27
  import { DETAIL_LEVELS, OUTPUT_FORMATS } from "../../constants.js";
28
- import { kebabCase, verbLabel } from "../spec/emitSurface.js";
29
- import type { CapabilityModule, ParamSpec, VerbSpec } from "../spec/types.js";
28
+ import { kebabCase, verbLabel } from "../spec/index.js";
29
+ import type {
30
+ CapabilityModule,
31
+ CompletionChildSpec,
32
+ ParamSpec,
33
+ VerbSpec,
34
+ } from "../spec/types.js";
30
35
  import type {
31
36
  CompletionModel,
32
37
  CompletionSource,
@@ -85,6 +90,13 @@ const GLOBAL_FLAGS: readonly FlagEntry[] = [
85
90
  repeatable: false,
86
91
  source: { kind: "values", values: DETAIL_LEVELS },
87
92
  },
93
+ {
94
+ flag: "--no-headers",
95
+ takesValue: false,
96
+ repeatable: false,
97
+ source: none(),
98
+ },
99
+ { flag: "--quiet", takesValue: false, repeatable: false, source: none() },
88
100
  { flag: "--help", takesValue: false, repeatable: false, source: none() },
89
101
  {
90
102
  flag: "--version",
@@ -181,7 +193,12 @@ function toVerbEntry(verb: VerbSpec): VerbEntry {
181
193
  flags.push({
182
194
  flag: `--${name}`,
183
195
  takesValue: param.kind !== "boolean",
184
- repeatable: param.kind === "string[]",
196
+ // Two grammars accumulate, so two shapes are repeatable: a `string[]`
197
+ // flag (`--tag a --tag b`) and any `string`/`enum` param the spec
198
+ // marks `repeatable` — the form compiled packs give every declared
199
+ // filter. Reading only the kind de-offered a filter after its first
200
+ // use, hiding the repetition the parser had just started honouring.
201
+ repeatable: param.kind === "string[]" || param.repeatable === true,
185
202
  source,
186
203
  });
187
204
  }
@@ -190,18 +207,73 @@ function toVerbEntry(verb: VerbSpec): VerbEntry {
190
207
  return { label, mutates: verb.capability.mutates, flags, positionals };
191
208
  }
192
209
 
193
- /** An empty self-verb entry (used for the injected `mcp` noun). */
194
- function bareSelfVerb(label: string): VerbEntry {
195
- return { label, mutates: false, flags: [], positionals: [] };
210
+ /**
211
+ * Convert one module-declared completion node (a mounted subtree's static
212
+ * data) into a verb entry, asserting every inlinable token's safety exactly
213
+ * as spec-derived entries are asserted. `mutates` is the owning verb's
214
+ * mutability, applied only to the LEAVES (see the namespace note below).
215
+ */
216
+ function toMountedEntry(
217
+ spec: CompletionChildSpec,
218
+ mutates: boolean,
219
+ where: string,
220
+ ): VerbEntry {
221
+ assertSafeToken(spec.label, `${where} label`);
222
+ const flags: FlagEntry[] = spec.flags.map((flag) => {
223
+ const name = flag.flag.replace(/^--?/, "");
224
+ assertSafeToken(name, `${where} flag "${flag.flag}"`);
225
+ const source: CompletionSource = flag.values
226
+ ? { kind: "values", values: flag.values }
227
+ : none();
228
+ assertSafeSource(source, `${where} flag "${flag.flag}"`);
229
+ return {
230
+ flag: flag.flag,
231
+ takesValue: flag.takesValue,
232
+ repeatable: false,
233
+ source,
234
+ };
235
+ });
236
+ const positionals: PositionalEntry[] = spec.positionals.map((positional) => {
237
+ const source: CompletionSource = positional.values
238
+ ? { kind: "values", values: positional.values }
239
+ : positional.files
240
+ ? { kind: "files" }
241
+ : none();
242
+ assertSafeSource(source, `${where} positional "${positional.name}"`);
243
+ return {
244
+ name: positional.name,
245
+ required: positional.required,
246
+ variadic: false,
247
+ source,
248
+ };
249
+ });
250
+ const children =
251
+ spec.children && spec.children.length > 0
252
+ ? spec.children.map((child) =>
253
+ toMountedEntry(child, mutates, `${where}/${child.label}`),
254
+ )
255
+ : undefined;
256
+ return {
257
+ label: spec.label,
258
+ // A node with children is a NAMESPACE, not a runnable command:
259
+ // `registerGeneratorCommands` adds the host mutation trio to runnable
260
+ // LEAVES only, so a mutating namespace would offer `--dry-run`/`--undo`/
261
+ // `--yes` BEFORE the framework segment — an ordering the CLI rejects as
262
+ // an unknown option. The verb's mutability descends to the leaves.
263
+ mutates: children ? false : mutates,
264
+ flags,
265
+ positionals,
266
+ ...(children ? { children } : {}),
267
+ };
196
268
  }
197
269
 
198
270
  /**
199
271
  * Derive the completion model from the capability modules.
200
272
  *
201
273
  * Hidden verbs are excluded (matching `emitSurface` and `buildProgram`).
202
- * The bin-served `mcp` entry is injected so `pragma mc<Tab>` completes it,
203
- * matching the root help.
204
- * TODO(spec): drop the injection when `mcp` lands as a real (non-hidden) spec.
274
+ * Every noun in the model comes from a declared verb — `mcp` used to be
275
+ * injected here because the bin served it without a spec, and it now declares
276
+ * `mcp serve` like any other pair.
205
277
  *
206
278
  * @param modules - The capability modules.
207
279
  * @returns The completion model, nouns and verbs sorted.
@@ -225,12 +297,24 @@ export function buildCompletionModel(
225
297
  };
226
298
 
227
299
  for (const module of modules) {
300
+ // A module-owned mount REPLACES its verbs' completion surface: the flags
301
+ // the mounted tree actually registers (e.g. a default-on confirm's
302
+ // `--no-` form), the segment positionals, and the child walk — declared
303
+ // as static data by the module, converted and safety-asserted here.
304
+ const mountedChildren = module.cliProjection?.completionChildren();
228
305
  for (const verb of module.verbs) {
229
306
  if (verb.hidden) continue;
230
307
  const noun = verb.path[0];
231
308
  assertSafeToken(noun, `noun "${noun}"`);
232
309
  const bucket = bucketFor(noun);
233
- const entry = toVerbEntry(verb);
310
+ const mountedSpec = mountedChildren?.[verbLabel(verb.path)];
311
+ const entry = mountedSpec
312
+ ? toMountedEntry(
313
+ mountedSpec,
314
+ verb.capability.mutates,
315
+ `mounted "${verb.path.join(" ")}"`,
316
+ )
317
+ : toVerbEntry(verb);
234
318
  if (verb.path[1] === undefined) {
235
319
  bucket.selfVerb = entry;
236
320
  } else {
@@ -239,10 +323,6 @@ export function buildCompletionModel(
239
323
  }
240
324
  }
241
325
 
242
- if (!byNoun.has("mcp")) {
243
- byNoun.set("mcp", { selfVerb: bareSelfVerb("mcp"), verbs: [] });
244
- }
245
-
246
326
  const nouns: NounEntry[] = [...byNoun.entries()]
247
327
  .map(([noun, bucket]) => ({
248
328
  noun,
@@ -86,6 +86,8 @@ describe("parseWords — flag names (PROTECTED)", () => {
86
86
  "--format",
87
87
  "--verbose",
88
88
  "--detail",
89
+ "--no-headers",
90
+ "--quiet",
89
91
  "--help",
90
92
  "--version",
91
93
  ]);
@@ -107,6 +109,8 @@ describe("parseWords — flag names (PROTECTED)", () => {
107
109
  "--format",
108
110
  "--verbose",
109
111
  "--detail",
112
+ "--no-headers",
113
+ "--quiet",
110
114
  "--help",
111
115
  ]);
112
116
  });
@@ -326,11 +330,4 @@ describe("parseWords — self-verb nouns (PROTECTED)", () => {
326
330
  reason: "positionals exhausted",
327
331
  });
328
332
  });
329
-
330
- it("the injected mcp noun completes but offers nothing after", () => {
331
- expect(parse(["mcp", ""]).context).toEqual({
332
- kind: "nothing",
333
- reason: "positionals exhausted",
334
- });
335
- });
336
333
  });
@@ -137,6 +137,21 @@ function scanCommandWord(
137
137
  return;
138
138
  }
139
139
 
140
+ // A verb with segment children (a mounted subtree): the word resolves
141
+ // against the children BEFORE positional counting — a match descends, so
142
+ // deeper flags/positionals are the child's own; a non-match is terminal.
143
+ const resolved = knownVerb(state);
144
+ if (resolved?.children && resolved.children.length > 0) {
145
+ const child = resolved.children.find((entry) => entry.label === word);
146
+ if (child) {
147
+ state.verb = child;
148
+ state.positionalsSeen = 0;
149
+ return;
150
+ }
151
+ state.verb = "unknown";
152
+ return;
153
+ }
154
+
140
155
  state.positionalsSeen += 1;
141
156
  }
142
157
 
@@ -42,7 +42,6 @@ describe("resolveRequest — structural contexts (PROTECTED)", () => {
42
42
  await expect(complete(["blo"])).resolves.toEqual(["block"]);
43
43
  await expect(complete([""])).resolves.toEqual([
44
44
  "block",
45
- "mcp",
46
45
  "standard",
47
46
  "status",
48
47
  ]);
@@ -319,7 +319,7 @@ describe("storeless guarantee (PROTECTED)", () => {
319
319
 
320
320
  // prefixes: `ds` is in the default display map, so it comes back for `d`.
321
321
  await expect(
322
- runComplete(["ontology", "show", "d"], capabilities, env),
322
+ runComplete(["ontology", "lookup", "d"], capabilities, env),
323
323
  ).resolves.toContain("ds");
324
324
 
325
325
  // index (derived, no field): the tier lookup is a declared pack lookup
@@ -345,14 +345,14 @@ describe("storeless guarantee (PROTECTED)", () => {
345
345
  });
346
346
 
347
347
  it("the spawned __complete fast path answers without touching any state", () => {
348
- // The perf globalSetup guarantees dist/pragma exists.
348
+ // The perf globalSetup guarantees the emitted `dist/` exists.
349
349
  // A FRESH INSTALL, reproduced: nothing is inherited from this process's
350
350
  // environment, the cwd holds no config, and $HOME plus all three XDG roots
351
- // are empty temps. Anything the binary answers here it answered from
351
+ // are empty temps. Anything the entry answers here it answered from
352
352
  // itself. (The suite before this inherited `...process.env`, so it could
353
353
  // not tell a compiled-in answer from an ambient one.)
354
- const binary = fileURLToPath(
355
- new URL("../../../dist/pragma", import.meta.url),
354
+ const entry = fileURLToPath(
355
+ new URL("../../../dist/src/bin.js", import.meta.url),
356
356
  );
357
357
  const home = mkdtempSync(join(tmpdir(), "pragma-storeless-home-"));
358
358
  const xdgConfig = mkdtempSync(join(tmpdir(), "pragma-storeless-cfg-"));
@@ -366,23 +366,27 @@ describe("storeless guarantee (PROTECTED)", () => {
366
366
  XDG_CACHE_HOME: xdgCache,
367
367
  };
368
368
 
369
- const nouns = spawnSync(binary, ["__complete", "--", "co"], {
370
- encoding: "utf-8",
371
- cwd: emptyCwd,
372
- env,
373
- });
369
+ const nouns = spawnSync(
370
+ process.execPath,
371
+ [entry, "__complete", "--", "co"],
372
+ {
373
+ encoding: "utf-8",
374
+ cwd: emptyCwd,
375
+ env,
376
+ },
377
+ );
374
378
  expect(nouns.status).toBe(0);
375
- expect(nouns.stdout).toBe("colophon\nconfig\n");
379
+ expect(nouns.stdout).toBe("colophon\nconcept\nconfig\n");
376
380
  expect(nouns.stderr).toBe("");
377
381
 
378
382
  // The headline guarantee of the embedded pack: a user who has installed
379
- // the binary and nothing else gets ENTITY candidates on the first TAB.
380
- // Every other pin on the embedded index runs in-process, where a bundler
381
- // change that made `pack.index.generated.ts` unreachable FROM THE BINARY
382
- // would leave the whole suite green.
383
+ // the shipped entry and nothing else gets ENTITY candidates on the first TAB.
384
+ // Every other pin on the embedded index runs in-process, where an emit
385
+ // change that made `pack.index.generated.ts` unreachable FROM THE SHIPPED
386
+ // ENTRY would leave the whole suite green.
383
387
  const entities = spawnSync(
384
- binary,
385
- ["__complete", "--", "block", "lookup", "ds:global.component.but"],
388
+ process.execPath,
389
+ [entry, "__complete", "--", "block", "lookup", "ds:global.component.but"],
386
390
  { encoding: "utf-8", cwd: emptyCwd, env },
387
391
  );
388
392
  expect(entities.status).toBe(0);
@@ -402,17 +406,21 @@ describe("storeless guarantee (PROTECTED)", () => {
402
406
  });
403
407
 
404
408
  it("the spawned fast path emits zero bytes for zero candidates, exit 0", () => {
405
- const binary = fileURLToPath(
406
- new URL("../../../dist/pragma", import.meta.url),
409
+ const entry = fileURLToPath(
410
+ new URL("../../../dist/src/bin.js", import.meta.url),
407
411
  );
408
- const result = spawnSync(binary, ["__complete", "--", "bogus", ""], {
409
- encoding: "utf-8",
410
- env: {
411
- ...process.env,
412
- XDG_CONFIG_HOME: mkdtempSync(join(tmpdir(), "pragma-zb-cfg-")),
413
- XDG_STATE_HOME: mkdtempSync(join(tmpdir(), "pragma-zb-state-")),
412
+ const result = spawnSync(
413
+ process.execPath,
414
+ [entry, "__complete", "--", "bogus", ""],
415
+ {
416
+ encoding: "utf-8",
417
+ env: {
418
+ ...process.env,
419
+ XDG_CONFIG_HOME: mkdtempSync(join(tmpdir(), "pragma-zb-cfg-")),
420
+ XDG_STATE_HOME: mkdtempSync(join(tmpdir(), "pragma-zb-state-")),
421
+ },
414
422
  },
415
- });
423
+ );
416
424
  expect(result.status).toBe(0);
417
425
  expect(result.stdout).toBe("");
418
426
  expect(result.stderr).toBe("");
@@ -50,9 +50,11 @@ import { emitScripts } from "./emitScripts.js";
50
50
  * scripts; the live bash script offers the live grammar's structure with
51
51
  * zero process exec; it hands `__complete` a literal argv and offers back
52
52
  * what it answers; it honours the `minChars` gate. The bash describes are
53
- * deliberately NOT gated on a `hasShell` probe — the package pins
54
- * `os: ["linux"]`, so a machine with no usable bash should fail this file
55
- * loudly rather than skip it and report nothing.
53
+ * deliberately NOT gated on a `hasShell` probe — CI runs linux with a modern
54
+ * bash, so a machine with no usable bash should fail this file loudly
55
+ * rather than skip it and report nothing. (The package no longer pins
56
+ * `os: ["linux"]`; run on a bash-3.2 macOS box this fails loudly, which is
57
+ * the intended signal — see `templates/bash.ts` on the mapfile floor.)
56
58
  * - **By execution only where the shell is installed:** the same guarantees
57
59
  * for zsh and fish. Those describes `skipIf` the shell is absent, which
58
60
  * includes this development box and, today, CI — so on those machines they
@@ -319,7 +321,7 @@ const STRUCTURE = [
319
321
  at: "pragma co",
320
322
  words: ["pragma", "co"],
321
323
  cword: 1,
322
- offers: ["colophon", "config"],
324
+ offers: ["colophon", "concept", "config"],
323
325
  },
324
326
  {
325
327
  at: "pragma block <TAB>",
@@ -331,7 +333,7 @@ const STRUCTURE = [
331
333
  at: "pragma setup <TAB>",
332
334
  words: ["pragma", "setup", ""],
333
335
  cword: 2,
334
- offers: ["completions", "lsp", "mcp", "skills"],
336
+ offers: ["completions", "config", "lsp", "mcp", "skills"],
335
337
  },
336
338
  {
337
339
  at: "pragma create <TAB>",
@@ -349,7 +351,14 @@ const STRUCTURE = [
349
351
  at: "pragma block lookup --<TAB>",
350
352
  words: ["pragma", "block", "lookup", "--"],
351
353
  cword: 3,
352
- offers: ["--detail", "--format", "--help", "--verbose"],
354
+ offers: [
355
+ "--detail",
356
+ "--format",
357
+ "--help",
358
+ "--no-headers",
359
+ "--quiet",
360
+ "--verbose",
361
+ ],
353
362
  },
354
363
  ] as const;
355
364
 
@@ -362,10 +371,12 @@ const NOUNS = [
362
371
  "block",
363
372
  "capabilities",
364
373
  "colophon",
374
+ "concept",
365
375
  "config",
366
376
  "create",
367
377
  "doctor",
368
378
  "graph",
379
+ "implementation",
369
380
  "info",
370
381
  "mcp",
371
382
  "modifier",
@@ -378,6 +389,7 @@ const NOUNS = [
378
389
  "tier",
379
390
  "token",
380
391
  "upgrade",
392
+ "version",
381
393
  ] as const;
382
394
 
383
395
  describe("generated bash — the live grammar's script", () => {
@@ -524,11 +536,11 @@ describe.skipIf(!hasShell("fish"))(
524
536
  });
525
537
 
526
538
  it.each([
527
- { line: "pragma co", offers: ["colophon", "config"] },
539
+ { line: "pragma co", offers: ["colophon", "concept", "config"] },
528
540
  { line: "pragma block ", offers: ["list", "lookup", "sample"] },
529
541
  {
530
542
  line: "pragma setup ",
531
- offers: ["completions", "lsp", "mcp", "skills"],
543
+ offers: ["completions", "config", "lsp", "mcp", "skills"],
532
544
  },
533
545
  {
534
546
  line: "pragma create ",
@@ -572,7 +584,14 @@ describe.skipIf(!hasShell("fish"))(
572
584
  const { reply, calls } = driveFish(live.fish, "pragma block lookup --");
573
585
  expect(calls).toEqual([]);
574
586
  expect(reply.sort()).toEqual(
575
- ["--detail", "--format", "--help", "--verbose"].sort(),
587
+ [
588
+ "--detail",
589
+ "--format",
590
+ "--help",
591
+ "--no-headers",
592
+ "--quiet",
593
+ "--verbose",
594
+ ].sort(),
576
595
  );
577
596
  });
578
597
 
@@ -1,7 +1,12 @@
1
1
  // biome-ignore-all lint/suspicious/noTemplateCurlyInString: bash parameter expansions, not JS templates
2
2
  /**
3
- * The bash completion script (static tier). Requires bash >= 4 (mapfile);
4
- * the package pins os:["linux"], where that floor holds.
3
+ * The bash completion script (static tier). Requires bash >= 4 for `mapfile`.
4
+ * That floor is NOT guaranteed by the platform any more: the package dropped
5
+ * its `os: ["linux"]` pin when it stopped shipping a linux-x64 executable, and
6
+ * macOS still ships bash 3.2, which has no `mapfile`. `setup completions`
7
+ * writes this script wherever it is asked to; on such a machine the user's
8
+ * remedy is a newer bash (zsh and fish are unaffected and are the platform
9
+ * defaults there).
5
10
  *
6
11
  * Structure — nouns, verbs, flag names, enum values — is inlined into
7
12
  * generator-validated LITERAL `compgen -W` tables (never a variable, never