@canonical/pragma-cli 0.33.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 (892) 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 +25 -24
  505. package/pragma.conf.ts +853 -0
  506. package/src/bin.ts +276 -82
  507. package/src/capabilities/block.parity.test.ts +253 -0
  508. package/src/capabilities/capabilities/capabilities.render.ts +4 -3
  509. package/src/capabilities/capabilities/capabilities.verb.ts +32 -14
  510. package/src/capabilities/capabilities/catalog.ts +20 -12
  511. package/src/capabilities/capabilities/hints.ts +43 -24
  512. package/src/capabilities/capabilities/index.ts +1 -1
  513. package/src/capabilities/colophon/collectColophon.ts +50 -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 +9 -5
  517. package/src/capabilities/colophon/types.ts +16 -7
  518. package/src/capabilities/config/collectConfigShow.test.ts +58 -0
  519. package/src/capabilities/config/collectConfigShow.ts +43 -6
  520. package/src/capabilities/config/field.render.ts +4 -5
  521. package/src/capabilities/config/fields.ts +17 -37
  522. package/src/capabilities/config/get.verb.ts +70 -0
  523. package/src/capabilities/config/getUnset.test.ts +264 -0
  524. package/src/capabilities/config/index.ts +5 -1
  525. package/src/capabilities/config/runField.ts +40 -22
  526. package/src/capabilities/config/runGet.ts +34 -0
  527. package/src/capabilities/config/runSet.ts +35 -9
  528. package/src/capabilities/config/set.test.ts +48 -14
  529. package/src/capabilities/config/set.verb.ts +14 -9
  530. package/src/capabilities/config/show.render.test.ts +77 -5
  531. package/src/capabilities/config/show.render.ts +8 -13
  532. package/src/capabilities/config/show.verb.ts +13 -9
  533. package/src/capabilities/config/types.ts +26 -4
  534. package/src/capabilities/config/unset.verb.ts +58 -0
  535. package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
  536. package/src/capabilities/create/byteEquality.test.ts +95 -103
  537. package/src/capabilities/create/cliProjection.ts +227 -0
  538. package/src/capabilities/create/constants.ts +50 -0
  539. package/src/capabilities/create/create.mcp.test.ts +91 -7
  540. package/src/capabilities/create/create.render.ts +71 -7
  541. package/src/capabilities/create/create.test.ts +523 -162
  542. package/src/capabilities/create/create.verb.ts +361 -321
  543. package/src/capabilities/create/createGrammar.test.ts +865 -0
  544. package/src/capabilities/create/createHelp.ts +71 -0
  545. package/src/capabilities/create/createSurface.generated.ts +400 -0
  546. package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
  547. package/src/capabilities/create/cwdJail.test.ts +24 -5
  548. package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
  549. package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
  550. package/src/capabilities/create/index.ts +9 -14
  551. package/src/capabilities/create/messages.ts +18 -0
  552. package/src/capabilities/create/mount.ts +391 -0
  553. package/src/capabilities/create/pathJail.test.ts +90 -0
  554. package/src/capabilities/create/pathJail.ts +8 -5
  555. package/src/capabilities/create/pickGenerator.ts +40 -46
  556. package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
  557. package/src/capabilities/create/types.ts +29 -5
  558. package/src/capabilities/{standard/parity.test.ts → distribution.parity.test.ts} +24 -14
  559. package/src/capabilities/distribution.test.ts +122 -0
  560. package/src/capabilities/distribution.ts +54 -0
  561. package/src/capabilities/doctor/checks/checkKeStore.ts +9 -7
  562. package/src/capabilities/doctor/checks/checkPackageRefs.ts +82 -46
  563. package/src/capabilities/doctor/checks/checkPragmaVersion.ts +5 -4
  564. package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +125 -30
  565. package/src/capabilities/doctor/checks/checkShellCompletions.ts +113 -27
  566. package/src/capabilities/doctor/checks/index.ts +27 -0
  567. package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
  568. package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
  569. package/src/capabilities/doctor/checks/targetHealth.ts +274 -0
  570. package/src/capabilities/doctor/doctor.render.test.ts +24 -13
  571. package/src/capabilities/doctor/doctor.render.ts +45 -20
  572. package/src/capabilities/doctor/doctor.test.ts +158 -40
  573. package/src/capabilities/doctor/doctor.verb.ts +9 -5
  574. package/src/capabilities/doctor/runChecks.ts +65 -66
  575. package/src/capabilities/doctor/types.ts +21 -5
  576. package/src/capabilities/emptyRecovery.test.ts +44 -22
  577. package/src/capabilities/graph/examples.exec.test.ts +107 -0
  578. package/src/capabilities/graph/index.ts +1 -1
  579. package/src/capabilities/graph/inspect.render.ts +70 -22
  580. package/src/capabilities/graph/inspect.test.ts +260 -5
  581. package/src/capabilities/graph/inspect.verb.ts +18 -5
  582. package/src/capabilities/graph/query.render.ts +15 -3
  583. package/src/capabilities/graph/query.verb.ts +5 -4
  584. package/src/capabilities/graph/runQuery.ts +9 -7
  585. package/src/capabilities/index.ts +25 -19
  586. package/src/capabilities/info/collectInfo.ts +15 -10
  587. package/src/capabilities/info/info.render.ts +4 -3
  588. package/src/capabilities/info/info.verb.ts +4 -3
  589. package/src/capabilities/lazy.test.ts +125 -2
  590. package/src/capabilities/meta/complete.verb.ts +1 -1
  591. package/src/capabilities/meta/index.ts +1 -1
  592. package/src/capabilities/meta/mcp.verb.ts +10 -8
  593. package/src/capabilities/ontology/index.ts +15 -11
  594. package/src/capabilities/ontology/ontology.test.ts +6 -55
  595. package/src/capabilities/ontology/queries.ts +2 -2
  596. package/src/capabilities/ontology/render.ts +3 -4
  597. package/src/capabilities/ontology/verbs.ts +42 -83
  598. package/src/capabilities/prompt/index.ts +2 -2
  599. package/src/capabilities/prompt/prompt.render.ts +6 -2
  600. package/src/capabilities/prompt/prompt.test.ts +12 -6
  601. package/src/capabilities/prompt/types.ts +1 -1
  602. package/src/capabilities/prompt/verbs.ts +26 -14
  603. package/src/capabilities/reference.test.ts +63 -0
  604. package/src/capabilities/resources/provider.ts +367 -91
  605. package/src/capabilities/resources/resources.test.ts +411 -59
  606. package/src/capabilities/setup/buildPlan.ts +236 -0
  607. package/src/capabilities/setup/index.ts +7 -7
  608. package/src/capabilities/setup/mode.ts +74 -0
  609. package/src/capabilities/setup/operations/index.ts +74 -0
  610. package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
  611. package/src/capabilities/setup/operations/setupConfig.ts +124 -0
  612. package/src/capabilities/setup/operations/setupGenerator.ts +397 -320
  613. package/src/capabilities/setup/operations/setupLsp.ts +329 -68
  614. package/src/capabilities/setup/operations/setupMcp.ts +137 -97
  615. package/src/capabilities/setup/operations/setupSkills.ts +336 -108
  616. package/src/capabilities/setup/plan.render.ts +241 -0
  617. package/src/capabilities/setup/plan.ts +236 -0
  618. package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
  619. package/src/capabilities/setup/setup.render.test.ts +281 -73
  620. package/src/capabilities/setup/setup.render.ts +45 -77
  621. package/src/capabilities/setup/setup.test.ts +972 -209
  622. package/src/capabilities/setup/setup.verb.ts +233 -74
  623. package/src/capabilities/setup/shell.test.ts +86 -0
  624. package/src/capabilities/setup/shell.ts +166 -14
  625. package/src/capabilities/setup/targets.ts +367 -0
  626. package/src/capabilities/setup/types.ts +18 -57
  627. package/src/capabilities/shared/assertExecOk.ts +68 -10
  628. package/src/capabilities/shared/index.ts +32 -0
  629. package/src/capabilities/shared/packageManager.test.ts +55 -0
  630. package/src/capabilities/shared/packageManager.ts +62 -6
  631. package/src/capabilities/skill/discover.ts +47 -9
  632. package/src/capabilities/skill/index.ts +1 -1
  633. package/src/capabilities/skill/render.ts +14 -14
  634. package/src/capabilities/skill/skill.test.ts +7 -5
  635. package/src/capabilities/skill/verbs.ts +9 -10
  636. package/src/capabilities/sources/collectStatus.ts +61 -51
  637. package/src/capabilities/sources/index.ts +2 -2
  638. package/src/capabilities/sources/installSkills.ts +86 -9
  639. package/src/capabilities/sources/runUpdate.ts +164 -141
  640. package/src/capabilities/sources/sources.test.ts +265 -119
  641. package/src/capabilities/sources/status.render.test.ts +53 -24
  642. package/src/capabilities/sources/status.render.ts +25 -30
  643. package/src/capabilities/sources/status.verb.ts +16 -9
  644. package/src/capabilities/sources/types.ts +18 -25
  645. package/src/capabilities/sources/update.render.ts +10 -3
  646. package/src/capabilities/sources/update.verb.ts +13 -24
  647. package/src/capabilities/surface.test.ts +165 -25
  648. package/src/capabilities/tier.parity.test.ts +144 -0
  649. package/src/capabilities/upgrade/runUpgrade.ts +8 -8
  650. package/src/capabilities/upgrade/upgrade.render.ts +4 -5
  651. package/src/capabilities/upgrade/upgrade.test.ts +3 -3
  652. package/src/capabilities/upgrade/upgrade.verb.ts +8 -4
  653. package/src/capabilities/version/index.ts +12 -0
  654. package/src/capabilities/version/version.test.ts +66 -0
  655. package/src/capabilities/version/version.verb.ts +39 -0
  656. package/src/constants.test.ts +8 -6
  657. package/src/constants.ts +78 -22
  658. package/src/identity.test.ts +348 -0
  659. package/src/index.ts +2 -2
  660. package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +20 -15
  661. package/src/kernel/completion/complete.test.ts +12 -2
  662. package/src/kernel/completion/complete.ts +1 -1
  663. package/src/kernel/completion/emitScripts.test.ts +1 -1
  664. package/src/kernel/completion/emitScripts.ts +5 -3
  665. package/src/kernel/completion/entitySource.test.ts +185 -41
  666. package/src/kernel/completion/entitySource.ts +133 -110
  667. package/src/kernel/completion/model.test.ts +165 -13
  668. package/src/kernel/completion/model.ts +105 -14
  669. package/src/kernel/completion/parse.test.ts +4 -7
  670. package/src/kernel/completion/parse.ts +15 -0
  671. package/src/kernel/completion/resolve.test.ts +0 -1
  672. package/src/kernel/completion/safety.test.ts +104 -50
  673. package/src/kernel/completion/shellDrive.test.ts +611 -0
  674. package/src/kernel/completion/templates/bash.ts +7 -2
  675. package/src/kernel/completion/templates/fish.ts +28 -6
  676. package/src/kernel/completion/templates/index.ts +23 -0
  677. package/src/kernel/completion/types.ts +10 -3
  678. package/src/kernel/config/defaults.test.ts +108 -0
  679. package/src/kernel/config/defaults.ts +13 -23
  680. package/src/kernel/config/evaluateProjectConfig.ts +33 -11
  681. package/src/kernel/config/findProjectConfig.ts +4 -3
  682. package/src/kernel/config/firstRun.test.ts +44 -38
  683. package/src/kernel/config/firstRun.ts +24 -81
  684. package/src/kernel/config/globalConfig.ts +2 -2
  685. package/src/kernel/config/index.ts +5 -6
  686. package/src/kernel/config/paths.ts +17 -17
  687. package/src/kernel/config/readConfig.test.ts +246 -7
  688. package/src/kernel/config/readConfig.ts +8 -8
  689. package/src/kernel/config/schema.test.ts +50 -0
  690. package/src/kernel/config/schema.ts +100 -11
  691. package/src/kernel/config/types.ts +75 -19
  692. package/src/kernel/copy.test.ts +483 -0
  693. package/src/kernel/copy.ts +54 -0
  694. package/src/kernel/error/PragmaError.test.ts +6 -3
  695. package/src/kernel/error/PragmaError.ts +4 -2
  696. package/src/kernel/error/constants.ts +7 -4
  697. package/src/kernel/error/fromTaskError.ts +28 -6
  698. package/src/kernel/error/index.ts +1 -1
  699. package/src/kernel/error/recovery.test.ts +22 -45
  700. package/src/kernel/error/recovery.ts +36 -27
  701. package/src/kernel/error/renderError.ts +42 -1
  702. package/src/kernel/error/types.ts +25 -4
  703. package/src/kernel/index.ts +26 -0
  704. package/src/kernel/packs/collect.test.ts +195 -11
  705. package/src/kernel/packs/collect.ts +212 -61
  706. package/src/kernel/packs/compile.test.ts +293 -8
  707. package/src/kernel/packs/compile.ts +108 -15
  708. package/src/kernel/packs/disclosure.test.ts +5 -2
  709. package/src/kernel/packs/disclosure.ts +2 -2
  710. package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
  711. package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +13 -13
  712. package/src/kernel/packs/graphql/index.ts +20 -0
  713. package/src/kernel/packs/graphqlSource.test.ts +6 -3
  714. package/src/kernel/packs/index.ts +40 -0
  715. package/src/kernel/packs/iri.test.ts +73 -0
  716. package/src/kernel/packs/iri.ts +70 -20
  717. package/src/kernel/packs/renderPack.ts +28 -7
  718. package/src/kernel/packs/resolveEntity.test.ts +213 -0
  719. package/src/kernel/packs/resolveEntity.ts +132 -34
  720. package/src/kernel/packs/runBodies.ts +16 -16
  721. package/src/kernel/packs/sample.ts +1 -1
  722. package/src/kernel/packs/schema.ts +114 -11
  723. package/src/kernel/packs/sparql/applyFilters.ts +16 -17
  724. package/src/kernel/packs/sparql/buildLookupQuery.ts +75 -3
  725. package/src/kernel/packs/sparql/index.ts +37 -0
  726. package/src/kernel/packs/sparql/runSelect.test.ts +104 -10
  727. package/src/kernel/packs/sparql/runSelect.ts +75 -37
  728. package/src/kernel/packs/toolDescription.test.ts +52 -5
  729. package/src/kernel/packs/types.ts +52 -4
  730. package/src/kernel/packs/uniqueness.ts +5 -5
  731. package/src/kernel/project/cli/buildProgram.test.ts +157 -17
  732. package/src/kernel/project/cli/buildProgram.ts +77 -18
  733. package/src/kernel/project/cli/constants.ts +34 -0
  734. package/src/kernel/project/cli/dispatch.test.ts +227 -3
  735. package/src/kernel/project/cli/dispatch.ts +250 -48
  736. package/src/kernel/project/cli/exitCodes.ts +1 -1
  737. package/src/kernel/project/cli/globalFlags.test.ts +117 -1
  738. package/src/kernel/project/cli/globalFlags.ts +130 -30
  739. package/src/kernel/project/cli/helpFormat.ts +14 -1
  740. package/src/kernel/project/cli/rootHelp.ts +140 -111
  741. package/src/kernel/project/cli/suggest.test.ts +33 -1
  742. package/src/kernel/project/cli/suggest.ts +25 -1
  743. package/src/kernel/project/cli/verbHelp.test.ts +30 -0
  744. package/src/kernel/project/cli/verbHelp.ts +23 -7
  745. package/src/kernel/project/mcp/buildServer.ts +18 -10
  746. package/src/kernel/project/mcp/envelope.ts +2 -2
  747. package/src/kernel/project/mcp/instructions.ts +12 -7
  748. package/src/kernel/project/mcp/mcpError.ts +1 -1
  749. package/src/kernel/project/mcp/parity.test.ts +42 -1
  750. package/src/kernel/project/mcp/prompts/index.ts +37 -0
  751. package/src/kernel/project/mcp/prompts/prompts.test.ts +120 -5
  752. package/src/kernel/project/mcp/prompts/provider.ts +22 -8
  753. package/src/kernel/project/mcp/prompts/source.ts +69 -68
  754. package/src/kernel/project/mcp/registerVerb.ts +56 -11
  755. package/src/kernel/project/mcp/serve.ts +13 -5
  756. package/src/kernel/project/mcp/toolDescriptions.test.ts +6 -2
  757. package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
  758. package/src/kernel/render/contracts.ts +21 -0
  759. package/src/kernel/render/disclosure.ts +4 -2
  760. package/src/kernel/render/envelope.ts +2 -3
  761. package/src/kernel/render/formatters.ts +1 -1
  762. package/src/kernel/render/prefixes.test.ts +36 -0
  763. package/src/kernel/render/prefixes.ts +40 -13
  764. package/src/kernel/render/renderers.test.ts +244 -7
  765. package/src/kernel/render/renderers.ts +222 -20
  766. package/src/kernel/render/style.test.ts +75 -24
  767. package/src/kernel/render/style.ts +31 -1
  768. package/src/kernel/render/turtle.ts +222 -0
  769. package/src/kernel/runtime/graphpack/build.ts +29 -3
  770. package/src/kernel/runtime/graphpack/buildIndex.test.ts +46 -0
  771. package/src/kernel/runtime/graphpack/buildIndex.ts +53 -18
  772. package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +5 -5
  773. package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +3 -3
  774. package/src/kernel/runtime/graphpack/embedded/pack.stories.generated.ts +3 -0
  775. package/src/kernel/runtime/graphpack/embedded.ts +39 -13
  776. package/src/kernel/runtime/graphpack/graphpack.test.ts +205 -5
  777. package/src/kernel/runtime/graphpack/hash.ts +3 -2
  778. package/src/kernel/runtime/graphpack/index.ts +1 -1
  779. package/src/kernel/runtime/graphpack/manifest.ts +114 -12
  780. package/src/kernel/runtime/graphpack/read.ts +5 -11
  781. package/src/kernel/runtime/graphpack/schemas.ts +74 -0
  782. package/src/kernel/runtime/graphpack/stories.ts +84 -0
  783. package/src/kernel/runtime/graphpack/types.ts +61 -48
  784. package/src/kernel/runtime/loadSession.ts +1 -1
  785. package/src/kernel/runtime/paths.ts +64 -15
  786. package/src/kernel/runtime/probe.test.ts +8 -4
  787. package/src/kernel/runtime/probe.ts +6 -6
  788. package/src/kernel/runtime/readEntity.ts +477 -32
  789. package/src/kernel/runtime/refs/gitOps.ts +1 -19
  790. package/src/kernel/runtime/refs/index.ts +39 -0
  791. package/src/kernel/runtime/refs/parseRef.ts +8 -8
  792. package/src/kernel/runtime/refs/resolve.ts +82 -66
  793. package/src/kernel/runtime/resolveSources.test.ts +63 -24
  794. package/src/kernel/runtime/resolveSources.ts +36 -25
  795. package/src/kernel/runtime/storeReadiness.ts +10 -10
  796. package/src/kernel/runtime/storeless.test.ts +1 -1
  797. package/src/kernel/runtime/types.ts +15 -1
  798. package/src/kernel/runtime/wasmEmbed.test.ts +56 -55
  799. package/src/kernel/spec/emitReference.test.ts +3 -3
  800. package/src/kernel/spec/emitReference.ts +242 -34
  801. package/src/kernel/spec/emitSurface.ts +57 -11
  802. package/src/kernel/spec/surfaceConformance.test.ts +4 -2
  803. package/src/kernel/spec/surfaceConformance.ts +8 -0
  804. package/src/kernel/spec/types.ts +277 -13
  805. package/src/kernel/spec/validate.ts +2 -1
  806. package/src/kernel/vocabulary.test.ts +164 -0
  807. package/src/kernel/vocabulary.ts +146 -0
  808. package/src/testing/PARITY_GAPS.ts +8 -2
  809. package/src/testing/behavioral/README.md +3 -3
  810. package/src/testing/behavioral/completion.test.ts +19 -6
  811. package/src/testing/behavioral/docExamples.test.ts +14 -0
  812. package/src/testing/behavioral/errorMatrix.mcp.test.ts +6 -5
  813. package/src/testing/behavioral/errorMatrix.storeless.test.ts +1 -1
  814. package/src/testing/behavioral/exitCodes.e2e.test.ts +6 -5
  815. package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
  816. package/src/testing/behavioral/harness.foundation.test.ts +14 -5
  817. package/src/testing/behavioral/journeys.cli.test.ts +117 -76
  818. package/src/testing/behavioral/journeys.defaultPack.test.ts +88 -182
  819. package/src/testing/behavioral/journeys.firstInstall.test.ts +167 -0
  820. package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
  821. package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
  822. package/src/testing/behavioral/journeys.mcpLifecycle.mcp.test.ts +9 -6
  823. package/src/testing/behavioral/journeys.packageStories.test.ts +188 -0
  824. package/src/testing/behavioral/liveReadSurface.ts +4 -3
  825. package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
  826. package/src/testing/behavioral/mcpSurface.test.ts +10 -5
  827. package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
  828. package/src/testing/behavioral/staleCommands.test.ts +10 -0
  829. package/src/testing/eval/__snapshots__/eval.test.ts.snap +7 -7
  830. package/src/testing/eval/cases/assembly.ts +13 -6
  831. package/src/testing/eval/cases/effectful.ts +28 -15
  832. package/src/testing/eval/cases/readNouns.ts +22 -20
  833. package/src/testing/eval/cases/stable.ts +5 -1
  834. package/src/testing/eval/eval.test.ts +7 -1
  835. package/src/testing/fixtures/blockGraph.ts +79 -0
  836. package/src/testing/fixtures/fixtureCapability.ts +45 -1
  837. package/src/testing/fixtures/graph/canonical.ts +94 -5
  838. package/src/testing/fixtures/graph/defaultPack.ts +7 -6
  839. package/src/testing/fixtures/graph/owlExport.ts +7 -5
  840. package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
  841. package/src/testing/helpers/fixtureGraph.ts +33 -16
  842. package/src/testing/helpers/packRuntime.ts +2 -3
  843. package/src/testing/helpers/projectCli.ts +2 -1
  844. package/src/testing/helpers/projectMcp.ts +38 -6
  845. package/src/testing/helpers/runCli.ts +35 -18
  846. package/src/testing/perf/budgets.test.ts +24 -9
  847. package/src/testing/perf/budgets.ts +76 -12
  848. package/src/testing/perf/codegen.test.ts +126 -0
  849. package/src/testing/perf/globalSetup.test.ts +286 -0
  850. package/src/testing/perf/globalSetup.ts +611 -14
  851. package/src/testing/perf/measure.test.ts +38 -0
  852. package/src/testing/perf/measure.ts +23 -4
  853. package/src/testing/setupXdgIsolation.ts +81 -21
  854. package/src/testing/tempRoot.globalSetup.ts +122 -0
  855. package/src/types.ts +2 -2
  856. package/dist/pragma +0 -0
  857. package/src/capabilities/block/blockList.test.ts +0 -79
  858. package/src/capabilities/block/blockList.verb.ts +0 -163
  859. package/src/capabilities/block/index.ts +0 -25
  860. package/src/capabilities/block/pack.ts +0 -166
  861. package/src/capabilities/block/parity.test.ts +0 -187
  862. package/src/capabilities/block/tierChain.ts +0 -78
  863. package/src/capabilities/colophon/pragmaColophon.ts +0 -66
  864. package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -152
  865. package/src/capabilities/create/templates.embedded.generated.ts +0 -53
  866. package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -41
  867. package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
  868. package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -67
  869. package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -60
  870. package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
  871. package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
  872. package/src/capabilities/modifier/index.ts +0 -15
  873. package/src/capabilities/modifier/pack.ts +0 -64
  874. package/src/capabilities/standard/index.ts +0 -18
  875. package/src/capabilities/standard/pack.ts +0 -128
  876. package/src/capabilities/tier/index.ts +0 -19
  877. package/src/capabilities/tier/lookup.render.test.ts +0 -72
  878. package/src/capabilities/tier/lookup.render.ts +0 -59
  879. package/src/capabilities/tier/lookup.test.ts +0 -83
  880. package/src/capabilities/tier/lookup.verb.ts +0 -44
  881. package/src/capabilities/tier/pack.ts +0 -28
  882. package/src/capabilities/tier/runLookup.ts +0 -87
  883. package/src/capabilities/token/addConfig.render.ts +0 -27
  884. package/src/capabilities/token/addConfig.test.ts +0 -62
  885. package/src/capabilities/token/addConfig.verb.ts +0 -40
  886. package/src/capabilities/token/index.ts +0 -19
  887. package/src/capabilities/token/pack.ts +0 -58
  888. package/src/capabilities/token/runAddConfig.ts +0 -95
  889. package/src/kernel/completion/bashDrive.test.ts +0 -73
  890. package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
  891. package/src/kernel/runtime/graphpack/embedded/sample.ttl +0 -39
  892. package/src/kernel/runtime/lock.ts +0 -90
@@ -0,0 +1,164 @@
1
+ /**
2
+ * PROTECTED — the shipped-entry `create` guard.
3
+ *
4
+ * Spawns the EMITTED entry the published package points at
5
+ * (`node dist/src/bin.js`) and asserts every `create` noun writes a tree
6
+ * BYTE-IDENTICAL to a source run of the same generator (`bun src/bin.ts …`).
7
+ * The source run is the reference: it reads the `.ejs` templates from disk with
8
+ * no indirection.
9
+ *
10
+ * WHAT THIS REPLACES. Until the distribution stopped shipping a
11
+ * `bun build --compile` executable, this guard covered `create component` only,
12
+ * and its sibling describe pinned the REFUSAL of `create package` /
13
+ * `create application`: those generators call `template({ source })`, summon-core
14
+ * fell through to `readFile(options.source)`, and inside the binary's virtual
15
+ * filesystem that died with `ENOENT … /$bunfs/templates/package.json.ejs` after
16
+ * `mkdir` had already run — a half-made package on the user's disk. The gate
17
+ * existed to turn that crash into a clean refusal.
18
+ *
19
+ * There is no virtual filesystem now. Every generator's templates are real
20
+ * files under its own package, so all three nouns run from the shipped entry and
21
+ * all three are asserted here. THE REFUSAL CASES ARE GONE ON PURPOSE: a test
22
+ * asserting `create package` refuses would now be asserting a defect.
23
+ *
24
+ * The svelte + lit cases stay load-bearing: `types.ts.ejs` / `index.ts.ejs` /
25
+ * `styles.css.ejs` / `stories.ts.ejs` exist in react/, svelte/ AND lit/, so a
26
+ * basename-matching regression could emit the WRONG framework's file. A wrong
27
+ * file differs from the source run → red here.
28
+ */
29
+
30
+ import { execFileSync, spawnSync } from "node:child_process";
31
+ import { mkdtempSync, readdirSync, readFileSync } from "node:fs";
32
+ import { tmpdir } from "node:os";
33
+ import { dirname, join, resolve } from "node:path";
34
+ import { fileURLToPath } from "node:url";
35
+ import { describe, expect, it } from "vitest";
36
+
37
+ const here = dirname(fileURLToPath(import.meta.url));
38
+ const repoRoot = resolve(here, "../../../../../..");
39
+ const cliNextDir = join(repoRoot, "packages/cli/pragma");
40
+ const sourceEntry = join(cliNextDir, "src/bin.ts");
41
+ const shippedEntry = join(cliNextDir, "dist/src/bin.js");
42
+ const freshCwd = (): string => mkdtempSync(join(tmpdir(), "pragma-shipped-"));
43
+
44
+ // `dist/` is provisioned by `testing/perf/globalSetup.ts`, which re-emits it
45
+ // whenever it is missing or older than `src/**`, `scripts/**`, `pragma.conf.ts`
46
+ // or `package.json` — so these tests exercise the current emit without a second
47
+ // `beforeAll` writing `dist/` in place while another worker is spawning it.
48
+
49
+ /** Read a directory tree into a sorted map of relative path → contents. */
50
+ function snapshot(dir: string): Map<string, string> {
51
+ const out = new Map<string, string>();
52
+ const walk = (d: string, base: string): void => {
53
+ for (const entry of readdirSync(d, { withFileTypes: true }).sort((a, b) =>
54
+ a.name.localeCompare(b.name),
55
+ )) {
56
+ const rel = base ? `${base}/${entry.name}` : entry.name;
57
+ if (entry.isDirectory()) walk(join(d, entry.name), rel);
58
+ else out.set(rel, readFileSync(join(d, entry.name), "utf-8"));
59
+ }
60
+ };
61
+ walk(dir, "");
62
+ return out;
63
+ }
64
+
65
+ /**
66
+ * The create invocations under guard — a LITERAL table, deliberately not derived
67
+ * from `create`'s own declaration, so dropping a noun from the surface turns
68
+ * this red rather than silently shrinking the guard.
69
+ *
70
+ * No case installs dependencies (`runInstall` defaults false), so every tree is
71
+ * generator output alone and byte-comparable.
72
+ */
73
+ const CASES: ReadonlyArray<{ label: string; args: readonly string[] }> = [
74
+ ...(["react", "svelte", "lit"] as const).map((framework) => ({
75
+ label: `component ${framework}`,
76
+ // The framework is a PATH SEGMENT, not a flag — `create` mirrors summon's
77
+ // own tree (`summon component react <path>`), so the two CLIs take the
78
+ // same argv.
79
+ args: ["create", "component", framework, "src/components/Widget", "--yes"],
80
+ })),
81
+ {
82
+ label: "package",
83
+ args: ["create", "package", "--name", "@canonical/probe", "--yes"],
84
+ },
85
+ {
86
+ label: "application",
87
+ // `react` is a path segment here too — the declared binding is
88
+ // `application/react`, and the tree mirrors summon's.
89
+ args: ["create", "application", "react", "probeapp", "--yes"],
90
+ },
91
+ ];
92
+
93
+ /** Run one create invocation in its own cwd and snapshot what it wrote. */
94
+ function create(
95
+ command: string,
96
+ prefix: readonly string[],
97
+ args: readonly string[],
98
+ ): Map<string, string> {
99
+ const dir = freshCwd();
100
+ execFileSync(command, [...prefix, ...args], { cwd: dir, stdio: "pipe" });
101
+ return snapshot(dir);
102
+ }
103
+
104
+ describe("shipped pragma create (PROTECTED)", () => {
105
+ for (const { label, args } of CASES) {
106
+ it(`${label}: shipped entry ≡ source run, byte-for-byte`, () => {
107
+ // (1) The shipped entry, exactly as a consumer's `pragma` runs it.
108
+ const shipped = create(process.execPath, [shippedEntry], args);
109
+ // (2) A source run — the reference output.
110
+ const source = create("bun", [sourceEntry], args);
111
+
112
+ // Wrote something. Before the distribution stopped shipping a compiled
113
+ // binary, `package` and `application` wrote NOTHING here — they refused.
114
+ expect(shipped.size).toBeGreaterThan(0);
115
+ // Same file set …
116
+ expect([...shipped.keys()].sort()).toEqual([...source.keys()].sort());
117
+ // … and byte-identical contents.
118
+ for (const [path, content] of shipped) {
119
+ expect(source.get(path), `content of ${path}`).toBe(content);
120
+ }
121
+ }, 180_000);
122
+ }
123
+ });
124
+
125
+ /**
126
+ * PROTECTED — the shipped-entry READ guard (U1-orig).
127
+ *
128
+ * A READ command (`block list`, `--help`) never calls a generator's
129
+ * `generate()`, so — with the generators loading their templates LAZILY on first
130
+ * `generate()` rather than at module-eval — it must never touch a `.ejs` at all.
131
+ * This is the exact gap the create-only smoke above missed: the component
132
+ * generators used to load templates via a top-level `await`, so a READ crashed
133
+ * with `Template not found`. The lazy load makes a READ template-free, and this
134
+ * pins it at the process boundary where an eager load would resurface.
135
+ */
136
+ describe("shipped pragma READ smoke (PROTECTED)", () => {
137
+ // A cold store cleanly reports STORE_UNAVAILABLE (exit 3); `--help` never needs
138
+ // a store (exit 0). Both fully exercise startup + dispatch — the phase where an
139
+ // eager generator template load would have crashed — without a store or writes.
140
+ const READS: ReadonlyArray<{
141
+ args: readonly string[];
142
+ okExit: readonly number[];
143
+ }> = [
144
+ { args: ["block", "list"], okExit: [0, 3] },
145
+ { args: ["--help"], okExit: [0] },
146
+ ];
147
+
148
+ for (const { args, okExit } of READS) {
149
+ it(`\`${args.join(" ")}\` runs without a Template-not-found crash`, () => {
150
+ const result = spawnSync(process.execPath, [shippedEntry, ...args], {
151
+ cwd: freshCwd(),
152
+ stdio: "pipe",
153
+ encoding: "utf-8",
154
+ });
155
+ const output = `${result.stdout ?? ""}${result.stderr ?? ""}`;
156
+ // The exact crash the lazy-template fix closes.
157
+ expect(output).not.toMatch(/Template not found/);
158
+ // Nor does it collapse to the internal-bug path (the crash's other tell).
159
+ expect(output).not.toMatch(/Internal error/);
160
+ // It reaches a clean dispatch outcome, not an uncaught startup crash.
161
+ expect(okExit).toContain(result.status);
162
+ }, 30_000);
163
+ }
164
+ });
@@ -1,8 +1,32 @@
1
+ import type { CREATE_GENERATORS } from "./constants.js";
2
+
1
3
  /**
2
- * Create-capability types with NO summon-core / generator import, so a module
3
- * that only needs `CreateKind` (e.g. `create.verb`) does not drag
4
- * `pickGenerator` — and its heavy generator imports — into the static graph.
4
+ * The `create` nouns — one per declared generator binding (path capped at two
5
+ * segments). Derived from {@link CREATE_GENERATORS} so the union cannot drift
6
+ * from the bindings.
7
+ *
8
+ * Deliberately free of any summon-core / generator import, so a module that only
9
+ * needs this type (e.g. `create.verb`) does not drag `pickGenerator` — and its
10
+ * heavy generator imports — into the static graph.
5
11
  */
12
+ export type CreateKind = keyof typeof CREATE_GENERATORS;
6
13
 
7
- /** The three `create` nouns (path capped at two segments). */
8
- export type CreateKind = "component" | "package" | "application";
14
+ /**
15
+ * The REGISTERED CLI spelling of one generator prompt, baked into
16
+ * `createSurface.generated.ts` at build time (the build derives it with the
17
+ * same summon-core helpers the mount registers through). Consumers that need
18
+ * only the spelling — completion tokens, the reference's usage lines — read
19
+ * this baked record instead of calling the projection, which keeps the
20
+ * `--help`/`__complete` fast paths free of the registration machinery.
21
+ */
22
+ export interface PromptCliSyntax {
23
+ /**
24
+ * The registered flag token (`--component-path`; a default-true confirm
25
+ * registers ONLY its `--no-<kebab>` form).
26
+ */
27
+ readonly flag: string;
28
+ /** Whether the registered flag takes a value (`--styles` does not). */
29
+ readonly takesValue: boolean;
30
+ /** The prompt name's kebab-case CLI spelling (`componentPath` → `component-path`). */
31
+ readonly kebabName: string;
32
+ }
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Standard-noun semantic parity (PROTECTED) — the bundled `standard` pack over a
3
- * code-standards fixture graph.
2
+ * Standard-noun semantic parity (PROTECTED) — the `standard` story
3
+ * `pragma.conf.ts` declares, over a code-standards fixture graph.
4
4
  *
5
5
  * The hand-written standard domain is gone, so parity is asserted directly
6
6
  * against the graph: every standard is reachable through list/lookup/categories/
@@ -10,16 +10,22 @@
10
10
  */
11
11
 
12
12
  import { afterAll, beforeAll, describe, expect, it } from "vitest";
13
- import { compilePack } from "../../kernel/packs/compile.js";
14
- import type { LookupOutput } from "../../kernel/packs/resolveEntity.js";
15
- import { parsePackDefinition } from "../../kernel/packs/schema.js";
16
- import type { PackRow } from "../../kernel/packs/types.js";
17
- import { verbKey } from "../../kernel/packs/uniqueness.js";
18
- import { DEFAULT_PREFIX_MAP } from "../../kernel/render/prefixes.js";
19
- import type { PragmaRuntime } from "../../kernel/runtime/types.js";
20
- import type { VerbSpec } from "../../kernel/spec/types.js";
21
- import { buildFixtureRuntime } from "../../testing/helpers/packRuntime.js";
22
- import { standardPack } from "./pack.js";
13
+ import { compilePack } from "../kernel/packs/compile.js";
14
+ import type { LookupOutput } from "../kernel/packs/resolveEntity.js";
15
+ import { parsePackDefinition } from "../kernel/packs/schema.js";
16
+ import type { PackRow } from "../kernel/packs/types.js";
17
+ import { distributionSource } from "../kernel/packs/types.js";
18
+ import { verbKey } from "../kernel/packs/uniqueness.js";
19
+ import { DEFAULT_PREFIX_MAP } from "../kernel/render/prefixes.js";
20
+ import type { PragmaRuntime } from "../kernel/runtime/types.js";
21
+ import type { VerbSpec } from "../kernel/spec/types.js";
22
+ import { buildFixtureRuntime } from "../testing/helpers/packRuntime.js";
23
+ import { declaredStories } from "./distribution.js";
24
+
25
+ const standardPack = declaredStories.get("standard");
26
+ if (!standardPack) {
27
+ throw new Error('pragma.conf.ts declares no story for "standard"');
28
+ }
23
29
 
24
30
  const CS = "http://pragma.canonical.com/codestandards#";
25
31
  const PREFIXES = {
@@ -72,7 +78,11 @@ cs:code.function.purity a cs:CodeStandard ;
72
78
  `;
73
79
 
74
80
  const verbs = () =>
75
- compilePack(standardPack, "bundled:standard", DEFAULT_PREFIX_MAP);
81
+ compilePack(
82
+ standardPack,
83
+ distributionSource("pragma.conf.ts"),
84
+ DEFAULT_PREFIX_MAP,
85
+ );
76
86
  const verb = (label: string) =>
77
87
  verbs().find((v) => verbKey(v.path) === `standard ${label}`) as VerbSpec;
78
88
 
@@ -98,7 +108,7 @@ async function lookupAt(
98
108
  return out.results.at(0) as Record<string, unknown>;
99
109
  }
100
110
 
101
- describe("standard pack definition (PROTECTED)", () => {
111
+ describe("standard story definition (PROTECTED)", () => {
102
112
  it("round-trips as declarative JSON and validates", () => {
103
113
  expect(
104
114
  parsePackDefinition(JSON.parse(JSON.stringify(standardPack)), "t"),
@@ -0,0 +1,122 @@
1
+ /**
2
+ * The distribution's own declared read stories (PROTECTED).
3
+ *
4
+ * `pragma.conf.ts` is hand-authored data that the TypeScript compiler checks
5
+ * against `PackDefinition`; `kernel/packs/schema.ts` is an independently written
6
+ * zod grammar that every config- and package-declared story must pass. Nothing
7
+ * forced the two to agree until the distribution started coming through the same
8
+ * door — and the first thing that comparison found was `sample.fixedCount`,
9
+ * documented and used by three of these five stories yet missing from the
10
+ * `.strict()` sample schema, which made any third-party story declaring it die
11
+ * with a fatal CONFIG_ERROR. Round-tripping ALL five is what keeps that shut.
12
+ */
13
+
14
+ import { describe, expect, it } from "vitest";
15
+ import { compilePack } from "../kernel/packs/compile.js";
16
+ import { parsePackDefinition } from "../kernel/packs/schema.js";
17
+ import { DEFAULT_PREFIX_MAP } from "../kernel/render/prefixes.js";
18
+ import type { VerbSpec } from "../kernel/spec/types.js";
19
+ import { VOCABULARY } from "../kernel/vocabulary.js";
20
+ import { declaredStories, storyModules } from "./distribution.js";
21
+ import { capabilities } from "./index.js";
22
+
23
+ /** A verb's DECLARED shape — everything but the closures a compile mints fresh. */
24
+ function declaredShape(verb: VerbSpec): Record<string, unknown> {
25
+ return {
26
+ path: verb.path.join(" "),
27
+ summary: verb.summary,
28
+ doc: verb.doc,
29
+ params: verb.params,
30
+ capability: verb.capability,
31
+ examples: verb.examples,
32
+ };
33
+ }
34
+
35
+ describe("the distribution's declared stories (PROTECTED)", () => {
36
+ it("declares exactly the seven domain nouns", () => {
37
+ // Every domain noun is now nothing BUT its story (L-OPEN-9), so a renamed
38
+ // or dropped noun deletes a whole command rather than shrinking one — it
39
+ // must fail HERE.
40
+ expect([...declaredStories.keys()].sort()).toEqual([
41
+ "block",
42
+ "concept",
43
+ "implementation",
44
+ "modifier",
45
+ "standard",
46
+ "tier",
47
+ "token",
48
+ ]);
49
+ });
50
+
51
+ it.each([
52
+ ...declaredStories.keys(),
53
+ ])("the %s story validates against the pack grammar, unchanged", (noun) => {
54
+ const story = declaredStories.get(noun);
55
+ expect(
56
+ parsePackDefinition(JSON.parse(JSON.stringify(story)), "pragma.conf.ts"),
57
+ ).toEqual(story);
58
+ });
59
+
60
+ it("every declared noun reaches the registry as an overridable module", () => {
61
+ for (const noun of declaredStories.keys()) {
62
+ const module = capabilities.find((entry) => entry.name === noun);
63
+ expect(module, `no capability module for "${noun}"`).toBeDefined();
64
+ // `story: true` is what lets a project's own story REPLACE it at
65
+ // dispatch; without it the noun would be treated as authored CLI.
66
+ expect(module?.story).toBe(true);
67
+ expect(module?.verbs.length).toBeGreaterThan(0);
68
+ }
69
+ });
70
+
71
+ it("ZERO hand-written data commands: a registered noun IS its compiled story", () => {
72
+ // The machine form of L-OPEN-9's end state — "a fork defines its entire
73
+ // read surface in pragma.conf.ts". Prose can go stale; this cannot. Every
74
+ // declared noun's REGISTERED module (what the CLI, the MCP server and the
75
+ // generated reference all project) must be verb-for-verb what recompiling
76
+ // its story alone produces. Re-introducing a composite — an authored module
77
+ // that prepends or appends a hand-written verb beside the story, which is
78
+ // exactly how `block`, `token` and `tier` used to be built — fails here,
79
+ // whatever the docblocks say.
80
+ for (const [noun, story] of declaredStories) {
81
+ const registered = capabilities.find((entry) => entry.name === noun);
82
+ const compiled = compilePack(story, "pragma.conf.ts", DEFAULT_PREFIX_MAP);
83
+ // Two halves, because a spec carries closures a fresh compile cannot
84
+ // reproduce by identity. (1) SHAPE: recompiling the story alone must
85
+ // yield the same verbs, declared the same way — an extra verb or an extra
86
+ // flag beside the story fails here.
87
+ expect(
88
+ registered?.verbs.map(declaredShape),
89
+ `"${noun}" registers verbs its story does not declare`,
90
+ ).toEqual(compiled.map(declaredShape));
91
+ // (2) IDENTITY: each registered verb must BE the compiled story's verb
92
+ // object, not a look-alike. A composite module — the `[...story.verbs,
93
+ // handWrittenVerb]` shape `block`, `token` and `tier` used to be built
94
+ // with — constructs new objects, so it cannot pass this even if its
95
+ // shapes happen to match.
96
+ const fromStory = storyModules.get(noun)?.verbs ?? [];
97
+ expect(registered?.verbs.length).toBe(fromStory.length);
98
+ registered?.verbs.forEach((verb, index) => {
99
+ expect(verb, `"${noun}" verb ${index} is not the story's`).toBe(
100
+ fromStory[index],
101
+ );
102
+ });
103
+ }
104
+ });
105
+
106
+ it("the tier story is internally coherent, and coherent with the vocabulary", () => {
107
+ // Both tier verbs are declared data now (L-OPEN-9), so the noun can no
108
+ // longer disagree with ITSELF in code — but the list query spells its
109
+ // class and property literally (`pragma.conf.ts` is inert data and imports
110
+ // nothing) while the lookup declares them as fields, and the vocabulary
111
+ // declares the addressing property once more for the index builder. This
112
+ // holds all three to one class and one property, so a candidate that
113
+ // completes still resolves and the index projects the names the lookup
114
+ // matches.
115
+ const story = declaredStories.get("tier");
116
+ const query = story?.list?.query ?? "";
117
+ expect(story?.lookup?.type).toBe("ds:Tier");
118
+ expect(query).toContain(`a ${story?.lookup?.type}`);
119
+ expect(story?.lookup?.by).toBe(VOCABULARY.altName);
120
+ expect(query).toContain(`${VOCABULARY.altName} ?name`);
121
+ });
122
+ });
@@ -0,0 +1,54 @@
1
+ /**
2
+ * The distribution's own read stories, compiled at module load.
3
+ *
4
+ * `pragma.conf.ts` declares them on the packs that supply them; this is the ONE
5
+ * place those declarations become capabilities. They come through the SAME door
6
+ * a third-party story does — {@link compileStoryModule} — so the mechanism the CLI
7
+ * offers forks is the mechanism the CLI itself runs on.
8
+ *
9
+ * They are compiled STATICALLY rather than merged at dispatch on purpose: the
10
+ * `--help` / `__complete` fast paths read the static capability set, and
11
+ * `surface/surface.v2.json` freezes the emitted surface, so a noun that only
12
+ * arrived at dispatch would vanish from help and completion on a fresh install.
13
+ * That is affordable because this module is zod-free and pure — `pragma.conf.ts`
14
+ * is inert data and the compiler builds specs without touching the store.
15
+ *
16
+ * Config- and package-declared stories still OVERRIDE these at dispatch; the
17
+ * `story` marker on each module is what tells `assembleEffectiveModules` which
18
+ * modules may be replaced.
19
+ */
20
+
21
+ import conf from "../../pragma.conf.js";
22
+ import { compileStoryModule } from "../kernel/packs/compile.js";
23
+ import {
24
+ distributionSource,
25
+ type PackDefinition,
26
+ } from "../kernel/packs/types.js";
27
+ import { DEFAULT_PREFIX_MAP } from "../kernel/render/index.js";
28
+ import type { CapabilityModule } from "../kernel/spec/index.js";
29
+
30
+ /** The read stories `pragma.conf.ts` declares on its packs, by noun. */
31
+ export const declaredStories: ReadonlyMap<string, PackDefinition> = new Map(
32
+ conf.packs
33
+ .flatMap((pack) => pack.stories ?? [])
34
+ .map((story): readonly [string, PackDefinition] => [story.noun, story]),
35
+ );
36
+
37
+ /**
38
+ * Those stories compiled to capability modules, by noun.
39
+ *
40
+ * `capabilities/index.ts` appends every module no authored one claims — and
41
+ * since L-OPEN-9 that is every one of them: no data noun is authored, so a
42
+ * declared story IS the whole noun. `distribution.test.ts` holds that shut by
43
+ * asserting each registered module's verbs deep-equal its compiled story's.
44
+ */
45
+ export const storyModules: ReadonlyMap<string, CapabilityModule> = new Map(
46
+ [...declaredStories].map(([noun, story]) => [
47
+ noun,
48
+ compileStoryModule(
49
+ story,
50
+ distributionSource("pragma.conf.ts"),
51
+ DEFAULT_PREFIX_MAP,
52
+ ),
53
+ ]),
54
+ );
@@ -1,9 +1,12 @@
1
+ import { BIN_NAME } from "../../../constants.js";
1
2
  import { entityTotal } from "../../../kernel/completion/entitySource.js";
2
- import type { PragmaRuntime } from "../../../kernel/runtime/types.js";
3
+ import type { PragmaRuntime } from "../../../kernel/runtime/index.js";
3
4
  import type { CheckResult } from "../types.js";
4
5
 
5
6
  /**
6
- * Check that the ke store boots, reporting the entity total and boot time.
7
+ * Check that the local store boots, reporting the entity total and boot time.
8
+ * The check is NAMED "store" in the report — the same word every other surface
9
+ * uses for it; the ke library it boots through is an implementation detail.
7
10
  *
8
11
  * This is the ONE check that touches the store — it boots the shared lazy store
9
12
  * inside a try/catch, so doctor stays storeless-by-default at the dispatch level
@@ -23,17 +26,16 @@ export async function checkKeStore(rt: PragmaRuntime): Promise<CheckResult> {
23
26
  const total = entityTotal(session.index);
24
27
  const elapsed = Math.round(performance.now() - start);
25
28
  return {
26
- name: "ke store",
29
+ name: "store",
27
30
  status: "pass",
28
31
  detail: `${total.toLocaleString()} entities in ${elapsed}ms`,
29
32
  };
30
33
  } catch {
31
34
  return {
32
- name: "ke store",
35
+ name: "store",
33
36
  status: "fail",
34
- detail: "failed to boot",
35
- remedy:
36
- "Ensure design-system packages are installed and run `pragma sources update`.",
37
+ detail: "cannot boot",
38
+ remedy: `Ensure design-system packs are configured and run \`${BIN_NAME} sources update\`.`,
37
39
  };
38
40
  }
39
41
  }
@@ -1,73 +1,109 @@
1
1
  /**
2
- * Doctor check: report how each configured semantic package resolves.
2
+ * Doctor check: report which pack answers this project's reads.
3
3
  *
4
- * ADAPTED for v2: the old local>git>bundled loader chain is retired — resolution
5
- * now flows through `sources update` into `pragma.lock.json` + the cached pack.
6
- * This check reads the lock (which packages resolved) and the storeless pack
7
- * index (the entity total), never booting the store. An absent lock with
8
- * configured packages is the "run `sources update`" case.
4
+ * It switches on the ONE boot decision ({@link resolveSources}) rather than
5
+ * re-deriving it from config, so doctor can never call an install healthy that
6
+ * every read would fail. That is the whole point of the check: a project that
7
+ * configured its own packs and never built them reports `fail` with the update
8
+ * remedy — not a pass listing the distribution's packs it is not reading.
9
+ * Storeless throughout: the pointer, the manifest, and the entity index are
10
+ * read off disk, never through a store session.
11
+ *
12
+ * It also names every read story that pack carries but cannot use. Those are
13
+ * DROPPED at dispatch rather than thrown (a third-party story must never break
14
+ * a command), so doctor is where the user finds out — and it goes through the
15
+ * same `validateStories` the dispatch path uses, so the two can never disagree.
9
16
  */
10
17
 
18
+ import { BIN_NAME } from "../../../constants.js";
11
19
  import {
12
20
  entityTotal,
13
21
  readPackIndex,
14
22
  } from "../../../kernel/completion/entitySource.js";
15
- import type { PackageEntry } from "../../../kernel/config/types.js";
16
- import { readLock } from "../../../kernel/runtime/lock.js";
17
- import type { PragmaRuntime } from "../../../kernel/runtime/types.js";
23
+ import { validateStories } from "../../../kernel/packs/index.js";
24
+ import {
25
+ embeddedManifest,
26
+ readManifest,
27
+ } from "../../../kernel/runtime/graphpack/index.js";
28
+ import { activeStories } from "../../../kernel/runtime/graphpack/stories.js";
29
+ import type { PragmaRuntime } from "../../../kernel/runtime/index.js";
30
+ import type { SourcesDecision } from "../../../kernel/runtime/resolveSources.js";
31
+ import { resolveSources } from "../../../kernel/runtime/resolveSources.js";
18
32
  import type { CheckItem, CheckResult } from "../types.js";
19
33
 
20
- const entryName = (entry: PackageEntry): string =>
21
- typeof entry === "string" ? entry : entry.name;
34
+ /**
35
+ * The stories the answering pack carries but cannot use, as check items.
36
+ *
37
+ * The registry is reached through a RUNTIME dynamic import (as
38
+ * `collectColophon` does) so the static `capabilities/index → doctorModule →
39
+ * checkPackageRefs → capabilities/index` cycle can never form.
40
+ *
41
+ * @param decision - The boot decision the check already resolved.
42
+ * @returns One failing item per ignored story, in declaration order.
43
+ * @note Impure — reads the answering pack's `stories.json`.
44
+ */
45
+ async function ignoredStoryItems(
46
+ decision: SourcesDecision,
47
+ ): Promise<CheckItem[]> {
48
+ const { capabilities } = await import("../../index.js");
49
+ const { problems } = validateStories(activeStories(decision), capabilities);
50
+ return problems.map((problem) => ({
51
+ label: problem.source,
52
+ detail: problem.message,
53
+ status: "fail" as const,
54
+ }));
55
+ }
56
+
57
+ /** ` · N story/ies ignored` for a headline, or nothing when all are usable. */
58
+ function ignoredSuffix(items: readonly CheckItem[]): string {
59
+ if (items.length === 0) return "";
60
+ return ` · ${items.length} ${items.length === 1 ? "story" : "stories"} ignored`;
61
+ }
22
62
 
23
63
  /**
24
- * Report package resolution status against the lock and the entity total.
64
+ * Report which pack answers reads, its provenance, and its entity total.
25
65
  *
26
66
  * @param rt - The per-invocation runtime.
27
- * @returns A CheckResult with a per-package breakdown.
28
- * @note Impure — reads config, the lock, and the pack index from disk.
67
+ * @returns A CheckResult naming the answering pack, or the failure to build one.
68
+ * @note Impure — reads config, the active-pack pointer, and the pack index.
29
69
  */
30
70
  export async function checkPackageRefs(
31
71
  rt: PragmaRuntime,
32
72
  ): Promise<CheckResult> {
33
- const entries = (await rt.loadConfig()).config.packages ?? [];
34
- const lock = readLock(rt.cwd);
35
- const index = readPackIndex(rt.cwd);
36
- const totalEntities = index ? entityTotal(index) : 0;
73
+ const decision = resolveSources(await rt.loadConfig(), rt.cwd);
74
+ // The display says "packs" (config declarations); the file/function keep
75
+ // "Package" (npm/git resolution vocabulary).
76
+ const name = "pack refs";
37
77
 
38
- if (entries.length === 0) {
78
+ if (decision.kind === "unavailable") {
39
79
  return {
40
- name: "package refs",
41
- status: "pass",
42
- detail: `no packages configured — the embedded pack answers reads (${totalEntities.toLocaleString()} entities)`,
80
+ name,
81
+ status: "fail",
82
+ detail: decision.reason,
83
+ remedy: `${BIN_NAME} sources update`,
43
84
  };
44
85
  }
45
86
 
46
- const items: CheckItem[] = [];
47
- let unresolved = 0;
48
- for (const entry of entries) {
49
- const name = entryName(entry);
50
- const packEntry = lock?.packs.find((pack) => pack.name === name);
51
- if (packEntry) {
52
- items.push({
53
- label: name,
54
- status: "pass",
55
- detail: `resolved ${packEntry.resolved}`,
56
- });
57
- } else {
58
- items.push({ label: name, status: "fail", detail: "not in the lock" });
59
- unresolved += 1;
60
- }
87
+ const index = readPackIndex(decision);
88
+ const entities = (index ? entityTotal(index) : 0).toLocaleString();
89
+ // The pack DOES answer reads, so the check itself passes; the ignored stories
90
+ // are failing sub-items under it. (A `warn` status would ripple through the
91
+ // renderer and the DoctorData counts to buy an icon.)
92
+ const items = await ignoredStoryItems(decision);
93
+ const suffix = ignoredSuffix(items);
94
+ if (decision.kind === "embedded") {
95
+ return {
96
+ name,
97
+ status: "pass",
98
+ detail: `embedded snapshot @ ${embeddedManifest().sourceRef} — ${entities} entities${suffix} · \`${BIN_NAME} sources update\` to build from the configured packs`,
99
+ ...(items.length > 0 ? { items } : {}),
100
+ };
61
101
  }
62
-
63
- const ok = lock !== undefined && unresolved === 0;
102
+ const manifest = readManifest(decision.dir);
64
103
  return {
65
- name: "package refs",
66
- status: ok ? "pass" : "fail",
67
- detail: ok
68
- ? `${entries.length} package(s) resolved · ${totalEntities.toLocaleString()} entities`
69
- : `${unresolved} of ${entries.length} package(s) not resolved`,
70
- items,
71
- ...(ok ? {} : { remedy: "pragma sources update" }),
104
+ name,
105
+ status: "pass",
106
+ detail: `${manifest?.sourceRef ?? decision.contentHash.slice(0, 12)} — ${entities} entities, built ${manifest?.createdAt ?? "?"}${suffix}`,
107
+ ...(items.length > 0 ? { items } : {}),
72
108
  };
73
109
  }