@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
@@ -2,7 +2,11 @@
2
2
  * Data shapes for `pragma config show`.
3
3
  */
4
4
 
5
- import type { ConfigOrigins, PragmaConfig } from "../../kernel/config/types.js";
5
+ import type {
6
+ ConfigOrigin,
7
+ ConfigOrigins,
8
+ PragmaConfig,
9
+ } from "../../kernel/config/types.js";
6
10
 
7
11
  /** The resolved configuration plus per-field provenance and layer locations. */
8
12
  export interface ConfigShowData {
@@ -22,14 +26,24 @@ export interface ConfigShowData {
22
26
  readonly globalExists: boolean;
23
27
  }
24
28
 
25
- /** The outcome of a `config <field>` setter (set, or reset via sentinel). */
29
+ /** The outcome of a config write (`set` writes a value, `unset` clears one). */
26
30
  export interface ConfigFieldResult {
27
31
  /** The config field written (`tier` / `channel` / `detail`). */
28
32
  readonly field: string;
29
- /** The value written, or absent when the field was reset (removed). */
33
+ /** The value written, or absent when the field was cleared (removed). */
30
34
  readonly value?: string;
31
35
  /** The global config file the write landed in. */
32
36
  readonly path: string;
33
- /** True when a reset sentinel removed the field rather than setting a value. */
37
+ /** True when `unset` removed the field rather than setting a value. */
34
38
  readonly reset: boolean;
35
39
  }
40
+
41
+ /** The payload of `config get <key>` — one resolved value with provenance. */
42
+ export interface ConfigGetData {
43
+ /** The config field read (`tier` / `channel` / `detail`). */
44
+ readonly field: string;
45
+ /** The effective value after layering, absent when the field is unset. */
46
+ readonly value?: unknown;
47
+ /** The layer that supplied the value (`default` / `global` / `project`). */
48
+ readonly source: ConfigOrigin;
49
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * `config unset <key>` — clear one config field.
3
+ *
4
+ * Clearing is a COMMAND, not a magic value: `config set` refuses the values
5
+ * that used to double as clear-markers, and this verb owns the job. Removes
6
+ * the field from the global layer so the built-in default (or a project
7
+ * config) applies again; project configs are authored by hand and never
8
+ * written here.
9
+ */
10
+
11
+ import type { Task } from "@canonical/task";
12
+ import { BIN_NAME } from "../../constants.js";
13
+ import { asVerb } from "../../kernel/spec/asVerb.js";
14
+ import type { VerbSpec } from "../../kernel/spec/index.js";
15
+ import { configFieldFormatters } from "./field.render.js";
16
+ import { CONFIG_FIELDS } from "./fields.js";
17
+ import type { ConfigFieldResult } from "./types.js";
18
+
19
+ /** The clearable field names — the `<key>` enum, in covenant order. */
20
+ const CONFIG_KEYS = CONFIG_FIELDS.map((field) => field.field);
21
+
22
+ const unsetVerb: VerbSpec<Record<string, unknown>, ConfigFieldResult> = {
23
+ path: ["config", "unset"],
24
+ summary: "Clear a config field by name.",
25
+ doc: "Removes a field from the global config so the built-in default (or a project config) applies again. The counterpart of `config set` — setting writes a value, unsetting removes one; no value doubles as a remove-marker.",
26
+ params: [
27
+ {
28
+ kind: "enum",
29
+ name: "key",
30
+ doc: "The config field to clear.",
31
+ values: CONFIG_KEYS,
32
+ required: true,
33
+ positional: true,
34
+ },
35
+ ],
36
+ output: { formatters: configFieldFormatters },
37
+ examples: [
38
+ { cmd: `${BIN_NAME} config unset tier`, note: "read the full graph again" },
39
+ { cmd: `${BIN_NAME} config unset channel` },
40
+ ],
41
+ capability: {
42
+ needsStore: false,
43
+ mutates: true,
44
+ mcp: {
45
+ expose: true,
46
+ annotations: { readOnlyHint: false, openWorldHint: false },
47
+ },
48
+ },
49
+ // Lazily import the write body (off the fast path); the `Task` arm is the
50
+ // same honest cast `config set` uses.
51
+ run: (params) =>
52
+ import("./runSet.js").then((m) =>
53
+ m.runUnset(params),
54
+ ) as unknown as Task<ConfigFieldResult>,
55
+ };
56
+
57
+ /** The `config unset` verb. */
58
+ export const configUnsetVerb = asVerb(unsetVerb);
@@ -48,9 +48,8 @@ describe("cross-binary byte-equality (PROTECTED)", () => {
48
48
  pragmaBin,
49
49
  "create",
50
50
  "component",
51
- "src/components/Button",
52
- "--framework",
53
51
  "react",
52
+ "src/components/Button",
54
53
  "--yes",
55
54
  ],
56
55
  { cwd: pragmaDir, stdio: "pipe" },
@@ -66,7 +65,7 @@ import { pickGenerator } from ${JSON.stringify(`file://${pickGen}`)};
66
65
  import { execute, autoPrompt, runGeneratorTask, createGeneratorStamp, createStampOnEffectStart } from ${JSON.stringify(`file://${summonCore}`)};
67
66
  const dir = process.argv[2];
68
67
  const answers = { componentPath: "src/components/Button", withStyles: true, withStories: true, withSsrTests: true };
69
- const gen = pickGenerator("component", { framework: "react" });
68
+ const gen = pickGenerator("component/react");
70
69
  await runGeneratorTask(execute(gen, { prompt: autoPrompt(answers), params: answers }), {
71
70
  cwd: dir,
72
71
  promptHandler: autoPrompt(answers),
@@ -36,6 +36,7 @@ import { executeVerb } from "../../kernel/project/cli/dispatch.js";
36
36
  import { bootRuntime } from "../../kernel/runtime/boot.js";
37
37
  import type { GlobalFlags } from "../../kernel/runtime/types.js";
38
38
  import type { VerbSpec } from "../../kernel/spec/types.js";
39
+ import { blankCanonicalRanges } from "../../testing/helpers/blankCanonicalRanges.js";
39
40
  import { createVerbs } from "./create.verb.js";
40
41
  import type { CreateKind } from "./types.js";
41
42
 
@@ -82,8 +83,16 @@ async function produceSummon(
82
83
  answers: Readonly<Record<string, unknown>>,
83
84
  ): Promise<TreeSnapshot> {
84
85
  const { pickGenerator } = await import("./pickGenerator.js");
86
+ // pickGenerator is keyed by FULL COMMAND PATH now; this surface still
87
+ // thinks in kind+framework, so map first (exactly as runCreate does).
88
+ const commandPath =
89
+ kind === "component"
90
+ ? `component/${framework}`
91
+ : kind === "package"
92
+ ? "package"
93
+ : "application/react";
85
94
  return produceReference({
86
- generator: pickGenerator(kind, { framework }),
95
+ generator: pickGenerator(commandPath),
87
96
  answers,
88
97
  });
89
98
  }
@@ -156,16 +165,13 @@ const cases: Case[] = [
156
165
  fixture: "application",
157
166
  kind: "application",
158
167
  framework: "",
159
- // The pragma path receives the CLI `--with-X` params (AV-228 B8); the shared
160
- // fixture carries the generator's bare prompt names. runCreate's boundary
161
- // remap (`withSsr` -> `ssr`, ...) makes both produce the identical tree —
162
- // which is exactly what this case exists to prove.
168
+ // The prompt names ARE the param names now (the B8 alias seam is gone):
169
+ // the pragma path takes the generator's own `forms`/`relay` (ssr/router
170
+ // are always-on facts, no longer prompts).
163
171
  params: {
164
172
  appPath: "my-app",
165
- withSsr: true,
166
- withRouter: true,
167
- withForms: true,
168
- withRelay: false,
173
+ forms: true,
174
+ relay: false,
169
175
  runInstall: false,
170
176
  },
171
177
  },
@@ -186,12 +192,20 @@ describe("byte-equality goldens — pragma create \u2261 the conformance referen
186
192
  (entry) => entry.name === testCase.fixture,
187
193
  );
188
194
  if (!shared) throw new Error(`no fixture "${testCase.fixture}"`);
189
- const pragma = await producePragma(testCase.kind, testCase.params);
190
- const reference = await produceSummon(
195
+ let pragma = await producePragma(testCase.kind, testCase.params);
196
+ let reference = await produceSummon(
191
197
  testCase.kind,
192
198
  testCase.framework,
193
199
  shared.answers,
194
200
  );
201
+ // Two independent `npm view` resolutions feed the application tree
202
+ // (one per producer); blank the @canonical/* ranges identically so an
203
+ // asymmetric registry outcome cannot red this template-surface cell —
204
+ // range truth lives in the offline subprocess cells.
205
+ if (testCase.kind === "application") {
206
+ pragma = blankCanonicalRanges(pragma);
207
+ reference = blankCanonicalRanges(reference);
208
+ }
195
209
  expect(pragma.size).toBeGreaterThan(0);
196
210
  const diff = diffTrees(pragma, reference);
197
211
  expect(
@@ -0,0 +1,227 @@
1
+ /**
2
+ * The `create` module's CLI projection hook — the LIGHT half of the mount.
3
+ *
4
+ * This module is on the capabilities barrel, so `--help` and `__complete`
5
+ * import it on every spawn; it must therefore carry only what those paths
6
+ * actually read: the completion surface and the reference syntax, both
7
+ * derived from the build-time projection (`createSurface.generated.ts`) —
8
+ * the registered flag/positional spellings are BAKED there
9
+ * (`CREATE_CLI_SYNTAX`), so nothing here calls the projection to re-derive a
10
+ * token. The registration machinery itself — summon-core's Commander adapter,
11
+ * the interaction decisions, Commander — lives in `mount.ts` behind the
12
+ * dynamic import `prepare()` performs, which only a caller about to build the
13
+ * command tree ever awaits. The lazy-graph guard in `lazy.test.ts` pins this
14
+ * boundary.
15
+ */
16
+
17
+ import type { ProjectedPrompt } from "@canonical/summon-core/projection";
18
+ import { BIN_NAME } from "../../constants.js";
19
+ import type {
20
+ CliMountHost,
21
+ CliProjection,
22
+ CompletionChildFlag,
23
+ CompletionChildSpec,
24
+ ReferenceCliSyntax,
25
+ VerbSpec,
26
+ } from "../../kernel/spec/types.js";
27
+ import { CREATE_GENERATORS } from "./constants.js";
28
+ import {
29
+ CREATE_CLI_SYNTAX,
30
+ CREATE_SURFACE,
31
+ } from "./createSurface.generated.js";
32
+ import type { CreateKind, PromptCliSyntax } from "./types.js";
33
+
34
+ /** Build the mount (the module-level CLI projection hook). */
35
+ export function createCliProjection(): CliProjection {
36
+ // The registration import is DEFERRED to `prepare()`: only the one caller
37
+ // that actually builds the command tree (the bin, before `buildProgram`)
38
+ // pays for summon-core's adapter and Commander — never the
39
+ // `--help`/`__complete` barrel import. `mount` stays synchronous for
40
+ // `buildProgram` and throws when the step was skipped, so the coupling
41
+ // fails loudly instead of registering an empty subtree.
42
+ let mountCreateTree: typeof import("./mount.js").mountCreateTree | undefined;
43
+ return {
44
+ prepare: async (): Promise<void> => {
45
+ ({ mountCreateTree } = await import("./mount.js"));
46
+ },
47
+ mount: (parent, host: CliMountHost): void => {
48
+ if (!mountCreateTree) {
49
+ throw new Error(
50
+ "create mount used before prepare() — await CliProjection.prepare() before buildProgram",
51
+ );
52
+ }
53
+ mountCreateTree(parent, host);
54
+ },
55
+ completionChildren,
56
+ referenceIntro: REFERENCE_INTRO,
57
+ referenceSyntax,
58
+ };
59
+ }
60
+
61
+ /**
62
+ * The baked registered spelling for a prompt, from the first declared path
63
+ * that carries it (a prompt's spelling derives from its own shape, so every
64
+ * declaring path bakes the same tokens).
65
+ */
66
+ function syntaxFor(
67
+ paths: readonly string[],
68
+ promptName: string,
69
+ ): PromptCliSyntax {
70
+ for (const commandPath of paths) {
71
+ const syntax = CREATE_CLI_SYNTAX[commandPath]?.[promptName];
72
+ if (syntax) return syntax;
73
+ }
74
+ throw new Error(
75
+ `createSurface.generated.ts bakes no CLI syntax for prompt "${promptName}" — rerun the build`,
76
+ );
77
+ }
78
+
79
+ /** The leaves' prompts, unioned by first-seen name (the binding param order). */
80
+ function unionPrompts(paths: readonly string[]): ProjectedPrompt[] {
81
+ const seen = new Set<string>();
82
+ const union: ProjectedPrompt[] = [];
83
+ for (const commandPath of paths) {
84
+ for (const prompt of CREATE_SURFACE[commandPath]?.prompts ?? []) {
85
+ if (seen.has(prompt.name)) continue;
86
+ seen.add(prompt.name);
87
+ union.push(prompt);
88
+ }
89
+ }
90
+ return union;
91
+ }
92
+
93
+ /**
94
+ * The REGISTERED reference syntax for one binding verb (the mounted spelling
95
+ * the generated reference prints): the usage line carries the real tree
96
+ * segment (`create application react …`, `<framework>` for the multi-leaf
97
+ * binding — its values live in the Args table) and the registered kebab
98
+ * positional, which is also handed over as the per-param positional token so
99
+ * the Arguments table prints the SAME spelling; each flag token is the one
100
+ * the mount actually registers (a default-true confirm registers ONLY its
101
+ * `--no-` form), read from the BAKED syntax the build derived with the same
102
+ * flag-shape authority the mount registers through. Reached only through
103
+ * {@link createCliProjection} — one seam, THREE consumers, all speaking
104
+ * registration: the kernel's reference emitter (the reference pins read the
105
+ * committed pages it produced), `emitSurface` (the covenant's mounted-noun
106
+ * flag + positional tokens, L-CIS-2), and the `docExamples` gate's
107
+ * valid-token vocabulary. A change of meaning here moves all three together —
108
+ * the covenant conformance and derivation-tie cells in surface.test.ts are
109
+ * the tripwire.
110
+ */
111
+ function referenceSyntax(
112
+ verbPath: VerbSpec["path"],
113
+ ): ReferenceCliSyntax | undefined {
114
+ const kind = verbPath[1] as CreateKind | undefined;
115
+ const binding = kind ? CREATE_GENERATORS[kind] : undefined;
116
+ if (verbPath[0] !== "create" || !binding) return undefined;
117
+ const paths = binding.paths as readonly string[];
118
+ const first = paths[0] as string;
119
+
120
+ const tokens: string[] = ["create", kind as string];
121
+ if (paths.length > 1) tokens.push("<framework>");
122
+ else if (first.includes("/")) tokens.push(first.split("/")[1] as string);
123
+ const prompts = unionPrompts(paths);
124
+ const positional = prompts.find((prompt) => prompt.positional === true);
125
+ const positionalTokens: Record<string, string> = {};
126
+ if (positional) {
127
+ const token = `[${syntaxFor(paths, positional.name).kebabName}]`;
128
+ tokens.push(token);
129
+ positionalTokens[positional.name] = token;
130
+ }
131
+ tokens.push("[options]");
132
+
133
+ const flagTokens: Record<string, string> = {};
134
+ for (const prompt of prompts) {
135
+ if (prompt.positional === true) continue;
136
+ flagTokens[prompt.name] = syntaxFor(paths, prompt.name).flag;
137
+ }
138
+ return { usage: tokens.join(" "), flagTokens, positionalTokens };
139
+ }
140
+
141
+ /**
142
+ * One leaf's completion node, derived from its projected prompts. EVERY
143
+ * prompt is a flag — `addPromptOptions` registers positional prompts as
144
+ * options too (`--component-path` is as real as `--no-with-styles`), the
145
+ * positional argument being an additional spelling, not a replacement.
146
+ */
147
+ function leafChild(label: string, commandPath: string): CompletionChildSpec {
148
+ const surface = CREATE_SURFACE[commandPath];
149
+ const prompts = surface?.prompts ?? [];
150
+ return {
151
+ label,
152
+ flags: prompts.map((prompt) => promptFlag(commandPath, prompt)),
153
+ positionals: prompts
154
+ .filter((prompt) => prompt.positional === true)
155
+ .map((prompt) => ({
156
+ name: prompt.name,
157
+ required: false,
158
+ files: /(path|dir)$/i.test(prompt.name),
159
+ })),
160
+ };
161
+ }
162
+
163
+ /** A prompt's completion flag: the REGISTERED token (`--no-` for default-true). */
164
+ function promptFlag(
165
+ commandPath: string,
166
+ prompt: ProjectedPrompt,
167
+ ): CompletionChildFlag {
168
+ const syntax = syntaxFor([commandPath], prompt.name);
169
+ return {
170
+ flag: syntax.flag,
171
+ takesValue: syntax.takesValue,
172
+ ...(prompt.type === "select" && prompt.choices && prompt.choices.length > 0
173
+ ? { values: prompt.choices.map((choice) => choice.value) }
174
+ : {}),
175
+ };
176
+ }
177
+
178
+ /**
179
+ * The completion surface per verb label: leaves carry their prompt-derived
180
+ * flags in their REGISTERED spelling; a namespace node offers its segment
181
+ * values at position 0, the shared leaf positional after it, and the leaf
182
+ * children for the dynamic tier's precise walk — but NO prompt flags of its
183
+ * own: Commander registers those on the leaves, so a pre-segment offer
184
+ * (`create component --use-ts-stories svelte`) completes an ordering the
185
+ * CLI rejects as an unknown option.
186
+ */
187
+ function completionChildren(): Readonly<Record<string, CompletionChildSpec>> {
188
+ const record: Record<string, CompletionChildSpec> = {};
189
+ for (const [kind, binding] of Object.entries(CREATE_GENERATORS)) {
190
+ const paths = binding.paths as readonly string[];
191
+ const first = paths[0] as string;
192
+ if (paths.length === 1 && !first.includes("/")) {
193
+ record[kind] = leafChild(kind, first);
194
+ continue;
195
+ }
196
+ const children = paths.map((commandPath) =>
197
+ leafChild(commandPath.split("/")[1] as string, commandPath),
198
+ );
199
+ // The shared tail: every declared leaf carries the same positional shape.
200
+ const tail = children[0]?.positionals ?? [];
201
+ record[kind] = {
202
+ label: kind,
203
+ flags: [],
204
+ positionals: [
205
+ {
206
+ name: "framework",
207
+ required: true,
208
+ values: children.map((child) => child.label),
209
+ },
210
+ ...tail,
211
+ ],
212
+ children,
213
+ };
214
+ }
215
+ return record;
216
+ }
217
+
218
+ /** The generated-reference intro under the `create` heading (the pointer). */
219
+ const REFERENCE_INTRO =
220
+ "The `create` surface is a PROJECTION of the summon generator tree: " +
221
+ `\`${BIN_NAME} create <path...>\` ≡ \`summon <path...>\` over the declared bindings — ` +
222
+ "same grammar, same flags, same wizard, byte-identical trees. Tree segments are " +
223
+ "subcommands (`create component react|svelte|lit`, `create application react`), and " +
224
+ "every flag derives from the generators' own prompts (a default-on confirm registers " +
225
+ "only its `--no-` form). The contract is EXECUTED, not written down: " +
226
+ "`crossCli.subprocess.test.ts` runs both CLIs over the same argv and compares " +
227
+ "what they emit.";
@@ -1,75 +1,50 @@
1
1
  /**
2
- * The generator bindings the `create` surface exposes — the one list the
3
- * surface's mechanical copies derive from: the `CreateKind` union (`types.ts`),
4
- * the `--framework` enum and the compiled-binary gate (`create.verb.ts`), the
5
- * generator lookup (`pickGenerator.ts`), and the template roots the bundler
6
- * embeds (`scripts/build.ts`). Prose is NOT derived: the verb summaries below
7
- * `createVerbs` and `capabilities/hints.ts` still name the frameworks by hand.
2
+ * The command-path ALLOWLIST of the `create` surface — the one list the
3
+ * surface's mechanical copies derive from: the `CreateKind` union
4
+ * (`types.ts`) and the generator lookup (`pickGenerator.ts`). Prose is NOT
5
+ * derived: the verb summaries in `create.verb.ts` and
6
+ * `capabilities/hints.ts` still name the frameworks by hand.
8
7
  *
9
8
  * This table is the SINGLE authoring point for which generator packages the
10
- * distribution ships: it binds each `create` noun to the generator-map key it
11
- * runs, and — for the one generator whose templates the binary carries — to
12
- * the package `scripts/build.ts` harvests them from. (A parallel `generators`
13
- * CONFIG field once declared the same packages; it was validated, layered and
14
- * read by nothing, and was removed under the L-OPEN-1 ruling — the config
15
- * validator now rejects it loudly.) The binding is hand-written because
16
- * neither half can be discovered:
17
- * - surfacing a noun also needs a hand-written prompt mirror, path param and
18
- * examples in `create.verb.ts`, so the surface is a deliberate SUBSET —
19
- * `@canonical/summon-application` ships `application/react`, `domain`, `route`
20
- * and `wrapper`, and `create` exposes one of them;
21
- * - `bun build --compile` bundles only statically analysable import specifiers,
22
- * so a shipped binary can never `import(name)` a declared package (measured:
23
- * `Cannot find module '@canonical/summon-component' from '/$bunfs/root/…'`).
24
- * `pickGenerator` must import all three statically.
9
+ * distribution ships: it binds each `create` noun to the command PATHS it
10
+ * runs (the generator-map keys, `component/react` … `application/react`).
11
+ * Templates are NOT this package's concern — each generator package ships
12
+ * its own under its `dist/esm` tree and loads them itself. The binding is
13
+ * hand-written because it cannot be discovered:
14
+ * - surfacing a noun also needs prose and examples in `create.verb.ts`, so
15
+ * the surface is a deliberate SUBSET — `@canonical/summon-application`
16
+ * ships `application/react`, `domain`, `route` and `wrapper`, and `create`
17
+ * exposes one of them;
18
+ * - `pickGenerator` imports all three generators STATICALLY. A computed
19
+ * `import(name)` is opaque to every bundler and analyser; the historical
20
+ * cost was measured under `bun build --compile`, which left the
21
+ * generators out of the artifact entirely.
25
22
  *
26
- * `create.test.ts` pins what is checkable: every binding resolves to the
27
- * generator it names, and the embedded manifest carries only the templates of
28
- * the binding that reads through it.
23
+ * Every declared path RUNS from a published install. `create.test.ts` pins
24
+ * what is checkable: every declared path resolves to a generator whose
25
+ * `meta.name` equals the path.
29
26
  *
30
- * Deliberately free of any import: `create.verb.ts` reads this on the `--help` /
31
- * `__complete` fast path (`capabilities/lazy.test.ts`).
27
+ * Deliberately free of any import: `create.verb.ts` reads this on the
28
+ * `--help` / `__complete` fast path (`capabilities/lazy.test.ts`).
32
29
  */
33
30
  export const CREATE_GENERATORS = {
34
31
  component: {
35
- /**
36
- * The declaring package: `scripts/build.ts` harvests its `.ejs` for the
37
- * binary.
38
- */
39
- name: "@canonical/summon-component",
40
- /** `--framework <f>` runs `component/<f>`; the FIRST is the enum default. */
41
- frameworks: ["react", "svelte", "lit"],
42
- /**
43
- * Runs from the compiled binary: this generator routes every template read
44
- * through `loadTemplateSync` and passes `content:` into `template()`, so the
45
- * embedded manifest serves it. That — not the templates' file extensions —
46
- * is the property that decides it, and it is a fact about the GENERATOR's
47
- * source, not about what this build chooses to embed.
48
- */
49
- readsEmbeddedTemplates: true,
32
+ /** The command paths this binding runs (generator-map keys). */
33
+ paths: ["component/react", "component/svelte", "component/lit"],
50
34
  },
51
35
  package: {
52
- /** The generator-map key `create package` runs. */
53
- key: "package",
54
- /**
55
- * NOT runnable from the compiled binary: this generator calls
56
- * `template({ source })` with no `content:`, so summon-core falls through to
57
- * `readFile(options.source)`. Measured against a real `dist/pragma` with the
58
- * gate lifted: `ENOENT: no such file or directory, open
59
- * '/$bunfs/templates/package.json.ejs'`, after `mkdir` had already created
60
- * `my-lib/` and `my-lib/src/` — a half-made package left on disk. A
61
- * `--dry-run` exits 0 without reading a template, so it does NOT test this.
62
- */
63
- readsEmbeddedTemplates: false,
36
+ paths: ["package"],
64
37
  },
65
38
  application: {
66
- /** The generator-map key `create application` runs. */
67
- key: "application/react",
68
- /**
69
- * NOT runnable from the compiled binary — same cause as `package` (measured:
70
- * `ENOENT … '/$bunfs/root/templates/package.json.ejs'`, after the app
71
- * directory was created). It also `copy()`s non-`.ejs` assets.
72
- */
73
- readsEmbeddedTemplates: false,
39
+ paths: ["application/react"],
74
40
  },
75
41
  } as const;
42
+
43
+ /**
44
+ * The component frameworks, DERIVED from the declared tree segments — the
45
+ * second path segment of each `component/<framework>` binding.
46
+ */
47
+ export const COMPONENT_FRAMEWORKS: readonly string[] =
48
+ CREATE_GENERATORS.component.paths.map(
49
+ (commandPath) => commandPath.split("/")[1] as string,
50
+ );
@@ -51,6 +51,46 @@ describe("create over MCP (PROTECTED)", () => {
51
51
  expect(component?.annotations?.destructiveHint).toBe(false);
52
52
  });
53
53
 
54
+ it("schemas DERIVE from the prompts: framework is a required enum with no default; application args are the bare prompt names (L-CIS)", async () => {
55
+ const dir = freshCwd();
56
+ const mcp = await projectMcp([createModule], dir);
57
+ cleanup = mcp.cleanup;
58
+ const tools = await mcp.listTools();
59
+
60
+ const component = tools.find((t) => t.name === "create_component");
61
+ const componentSchema = component?.inputSchema as {
62
+ properties?: Record<string, { enum?: string[]; default?: unknown }>;
63
+ required?: string[];
64
+ };
65
+ // The framework enum derives from the tree segments — REQUIRED, no default.
66
+ expect(componentSchema.properties?.framework?.enum).toEqual([
67
+ "react",
68
+ "svelte",
69
+ "lit",
70
+ ]);
71
+ expect(componentSchema.properties?.framework?.default).toBeUndefined();
72
+ expect(componentSchema.required ?? []).toContain("framework");
73
+ // The svelte-only prompt joins the union.
74
+ expect(Object.keys(componentSchema.properties ?? {})).toContain(
75
+ "useTsStories",
76
+ );
77
+
78
+ const application = tools.find((t) => t.name === "create_application");
79
+ const applicationSchema = application?.inputSchema as {
80
+ properties?: Record<string, unknown>;
81
+ };
82
+ const names = Object.keys(applicationSchema.properties ?? {});
83
+ // The B8 --with-X aliases are gone: prompt names ARE the arg names — and
84
+ // ssr/router are gone WITH their prompts (always-on facts, not questions).
85
+ expect(names).toEqual(
86
+ expect.arrayContaining(["appPath", "forms", "relay", "runInstall"]),
87
+ );
88
+ expect(names).not.toContain("withSsr");
89
+ expect(names).not.toContain("withRelay");
90
+ expect(names).not.toContain("ssr");
91
+ expect(names).not.toContain("router");
92
+ });
93
+
54
94
  it("plan-first: no confirm → a plan, no files written", async () => {
55
95
  const dir = freshCwd();
56
96
  const prev = process.cwd();
@@ -76,6 +116,44 @@ describe("create over MCP (PROTECTED)", () => {
76
116
  }
77
117
  });
78
118
 
119
+ it("the plan payload is the FILTERED plan, not the interpreter transcript", async () => {
120
+ // This payload is read by an LLM on a token budget. Every internal probe
121
+ // and every repeat of the output directory spent tokens burying the real
122
+ // artifacts, so the rows pass the shared `visiblePlanEffects` filter — the
123
+ // same one the CLI preview applies — and stay `describeEffect` strings,
124
+ // which is what makes them comparable to the CLI's own `--format json`
125
+ // plan rather than to its terminal rendering.
126
+ const dir = freshCwd();
127
+ const prev = process.cwd();
128
+ process.chdir(dir);
129
+ try {
130
+ const mcp = await projectMcp([createModule], dir);
131
+ cleanup = mcp.cleanup;
132
+ const result = await mcp.callTool("create_component", {
133
+ framework: "react",
134
+ componentPath: "Button",
135
+ withStyles: false,
136
+ withStories: false,
137
+ withSsrTests: false,
138
+ });
139
+ const plan = (result.data as { plan: string[] }).plan;
140
+ const body = plan.join("\n");
141
+ // The interpreter's own bookkeeping is gone: no existence probes, and
142
+ // no debug commentary (this run is not verbose).
143
+ expect(body).not.toContain("Check exists:");
144
+ expect(body).not.toContain("Log [debug]");
145
+ // The output directory is planned ONCE, however many files it holds.
146
+ expect(plan.filter((line) => line.startsWith("Created "))).toEqual([
147
+ "Created Button/",
148
+ ]);
149
+ // What the generator meant to say survives; what it whispered does not.
150
+ expect(plan.at(-1)).toContain("Log [info]: ");
151
+ expect(readdirSync(dir)).toEqual([]); // nothing written
152
+ } finally {
153
+ process.chdir(prev);
154
+ }
155
+ });
156
+
79
157
  it("confirm: true → runs for real and writes files", async () => {
80
158
  const dir = freshCwd();
81
159
  const prev = process.cwd();
@@ -126,12 +204,18 @@ describe("create over MCP (PROTECTED)", () => {
126
204
  withSsrTests: false,
127
205
  },
128
206
  { dryRun: true, undo: false, yes: false },
129
- bootRuntime(FLAGS, dir),
207
+ bootRuntime({ ...FLAGS, format: "json" }, dir),
130
208
  );
131
- // Every planned effect line appears in the CLI dry-run preview too.
132
- for (const line of mcpPlan) {
133
- expect(cliOutcome.stdout ?? "").toContain(line);
134
- }
209
+ // The two STRUCTURED surfaces carry one plan, string for string. They
210
+ // are compared against each other rather than against the terminal
211
+ // rendering, which is deliberately a different shape: a person reads
212
+ // kind-columned rows, a machine reads the described effects.
213
+ const cliPlan = (
214
+ JSON.parse(cliOutcome.stdout as string) as {
215
+ data: { plan: string[] };
216
+ }
217
+ ).data.plan;
218
+ expect(mcpPlan).toEqual(cliPlan);
135
219
  } finally {
136
220
  process.chdir(prev);
137
221
  }