@canonical/pragma-cli 0.34.0 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (832) hide show
  1. package/README.md +153 -30
  2. package/bundled-skills/add-standard/SKILL.md +338 -0
  3. package/bundled-skills/adoption-a1-styles/SKILL.md +269 -0
  4. package/bundled-skills/adoption-a2-components/SKILL.md +291 -0
  5. package/bundled-skills/adoption-a3-forms/SKILL.md +260 -0
  6. package/bundled-skills/anatomy-author/ANATOMY_DSL_SPEC.md +406 -0
  7. package/bundled-skills/anatomy-author/SKILL.md +1226 -0
  8. package/bundled-skills/design-auditor/SKILL.md +455 -0
  9. package/bundled-skills/implement-component/SKILL.md +333 -0
  10. package/bundled-skills/specify-component/SKILL.md +331 -0
  11. package/bundled-skills/specify-pattern/SKILL.md +292 -0
  12. package/dist/.build-ok +0 -0
  13. package/dist/package.json +84 -0
  14. package/dist/pragma.conf.js +1016 -0
  15. package/dist/pragma.conf.js.map +1 -0
  16. package/dist/src/bin.js +356 -0
  17. package/dist/src/bin.js.map +1 -0
  18. package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
  19. package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
  20. package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
  21. package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
  22. package/dist/src/capabilities/capabilities/catalog.js +130 -0
  23. package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
  24. package/dist/src/capabilities/capabilities/hints.js +195 -0
  25. package/dist/src/capabilities/capabilities/hints.js.map +1 -0
  26. package/dist/src/capabilities/capabilities/index.js +11 -0
  27. package/dist/src/capabilities/capabilities/index.js.map +1 -0
  28. package/dist/src/capabilities/capabilities/types.js +11 -0
  29. package/dist/src/capabilities/capabilities/types.js.map +1 -0
  30. package/dist/src/capabilities/colophon/collectColophon.js +83 -0
  31. package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
  32. package/dist/src/capabilities/colophon/colophon.render.js +59 -0
  33. package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
  34. package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
  35. package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
  36. package/dist/src/capabilities/colophon/index.js +5 -0
  37. package/dist/src/capabilities/colophon/index.js.map +1 -0
  38. package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
  39. package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
  40. package/dist/src/capabilities/colophon/types.js +10 -0
  41. package/dist/src/capabilities/colophon/types.js.map +1 -0
  42. package/dist/src/capabilities/config/collectConfigShow.js +59 -0
  43. package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
  44. package/dist/src/capabilities/config/field.render.js +22 -0
  45. package/dist/src/capabilities/config/field.render.js.map +1 -0
  46. package/dist/src/capabilities/config/fields.js +46 -0
  47. package/dist/src/capabilities/config/fields.js.map +1 -0
  48. package/dist/src/capabilities/config/get.verb.js +61 -0
  49. package/dist/src/capabilities/config/get.verb.js.map +1 -0
  50. package/dist/src/capabilities/config/index.js +5 -0
  51. package/dist/src/capabilities/config/index.js.map +1 -0
  52. package/dist/src/capabilities/config/runField.js +59 -0
  53. package/dist/src/capabilities/config/runField.js.map +1 -0
  54. package/dist/src/capabilities/config/runGet.js +28 -0
  55. package/dist/src/capabilities/config/runGet.js.map +1 -0
  56. package/dist/src/capabilities/config/runSet.js +53 -0
  57. package/dist/src/capabilities/config/runSet.js.map +1 -0
  58. package/dist/src/capabilities/config/set.verb.js +66 -0
  59. package/dist/src/capabilities/config/set.verb.js.map +1 -0
  60. package/dist/src/capabilities/config/show.render.js +84 -0
  61. package/dist/src/capabilities/config/show.render.js.map +1 -0
  62. package/dist/src/capabilities/config/show.verb.js +44 -0
  63. package/dist/src/capabilities/config/show.verb.js.map +1 -0
  64. package/dist/src/capabilities/config/types.js +5 -0
  65. package/dist/src/capabilities/config/types.js.map +1 -0
  66. package/dist/src/capabilities/config/unset.verb.js +49 -0
  67. package/dist/src/capabilities/config/unset.verb.js.map +1 -0
  68. package/dist/src/capabilities/create/cliProjection.js +195 -0
  69. package/dist/src/capabilities/create/cliProjection.js.map +1 -0
  70. package/dist/src/capabilities/create/constants.js +47 -0
  71. package/dist/src/capabilities/create/constants.js.map +1 -0
  72. package/dist/src/capabilities/create/create.render.js +100 -0
  73. package/dist/src/capabilities/create/create.render.js.map +1 -0
  74. package/dist/src/capabilities/create/create.verb.js +438 -0
  75. package/dist/src/capabilities/create/create.verb.js.map +1 -0
  76. package/dist/src/capabilities/create/createHelp.js +47 -0
  77. package/dist/src/capabilities/create/createHelp.js.map +1 -0
  78. package/dist/src/capabilities/create/createSurface.generated.js +394 -0
  79. package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
  80. package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
  81. package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
  82. package/dist/src/capabilities/create/index.js +18 -0
  83. package/dist/src/capabilities/create/index.js.map +1 -0
  84. package/dist/src/capabilities/create/messages.js +16 -0
  85. package/dist/src/capabilities/create/messages.js.map +1 -0
  86. package/dist/src/capabilities/create/mount.js +294 -0
  87. package/dist/src/capabilities/create/mount.js.map +1 -0
  88. package/dist/src/capabilities/create/pathJail.js +65 -0
  89. package/dist/src/capabilities/create/pathJail.js.map +1 -0
  90. package/dist/src/capabilities/create/pickGenerator.js +53 -0
  91. package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
  92. package/dist/src/capabilities/create/types.js +2 -0
  93. package/dist/src/capabilities/create/types.js.map +1 -0
  94. package/dist/src/capabilities/distribution.js +40 -0
  95. package/dist/src/capabilities/distribution.js.map +1 -0
  96. package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
  97. package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
  98. package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
  99. package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
  100. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +148 -0
  101. package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
  102. package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
  103. package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
  104. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
  105. package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
  106. package/dist/src/capabilities/doctor/checks/harnessInventory.js +195 -0
  107. package/dist/src/capabilities/doctor/checks/harnessInventory.js.map +1 -0
  108. package/dist/src/capabilities/doctor/checks/index.js +27 -0
  109. package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
  110. package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
  111. package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
  112. package/dist/src/capabilities/doctor/checks/targetHealth.js +349 -0
  113. package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
  114. package/dist/src/capabilities/doctor/doctor.render.js +164 -0
  115. package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
  116. package/dist/src/capabilities/doctor/doctor.verb.js +49 -0
  117. package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
  118. package/dist/src/capabilities/doctor/index.js +5 -0
  119. package/dist/src/capabilities/doctor/index.js.map +1 -0
  120. package/dist/src/capabilities/doctor/runChecks.js +86 -0
  121. package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
  122. package/dist/src/capabilities/doctor/types.js +5 -0
  123. package/dist/src/capabilities/doctor/types.js.map +1 -0
  124. package/dist/src/capabilities/graph/index.js +19 -0
  125. package/dist/src/capabilities/graph/index.js.map +1 -0
  126. package/dist/src/capabilities/graph/inspect.render.js +76 -0
  127. package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
  128. package/dist/src/capabilities/graph/inspect.verb.js +53 -0
  129. package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
  130. package/dist/src/capabilities/graph/query.render.js +73 -0
  131. package/dist/src/capabilities/graph/query.render.js.map +1 -0
  132. package/dist/src/capabilities/graph/query.verb.js +49 -0
  133. package/dist/src/capabilities/graph/query.verb.js.map +1 -0
  134. package/dist/src/capabilities/graph/runQuery.js +41 -0
  135. package/dist/src/capabilities/graph/runQuery.js.map +1 -0
  136. package/dist/src/capabilities/index.js +56 -0
  137. package/dist/src/capabilities/index.js.map +1 -0
  138. package/dist/src/capabilities/info/collectInfo.js +72 -0
  139. package/dist/src/capabilities/info/collectInfo.js.map +1 -0
  140. package/dist/src/capabilities/info/index.js +5 -0
  141. package/dist/src/capabilities/info/index.js.map +1 -0
  142. package/dist/src/capabilities/info/info.render.js +57 -0
  143. package/dist/src/capabilities/info/info.render.js.map +1 -0
  144. package/dist/src/capabilities/info/info.verb.js +42 -0
  145. package/dist/src/capabilities/info/info.verb.js.map +1 -0
  146. package/dist/src/capabilities/info/types.js +5 -0
  147. package/dist/src/capabilities/info/types.js.map +1 -0
  148. package/dist/src/capabilities/meta/complete.verb.js +43 -0
  149. package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
  150. package/dist/src/capabilities/meta/index.js +13 -0
  151. package/dist/src/capabilities/meta/index.js.map +1 -0
  152. package/dist/src/capabilities/meta/mcp.verb.js +34 -0
  153. package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
  154. package/dist/src/capabilities/ontology/index.js +21 -0
  155. package/dist/src/capabilities/ontology/index.js.map +1 -0
  156. package/dist/src/capabilities/ontology/queries.js +123 -0
  157. package/dist/src/capabilities/ontology/queries.js.map +1 -0
  158. package/dist/src/capabilities/ontology/render.js +66 -0
  159. package/dist/src/capabilities/ontology/render.js.map +1 -0
  160. package/dist/src/capabilities/ontology/verbs.js +181 -0
  161. package/dist/src/capabilities/ontology/verbs.js.map +1 -0
  162. package/dist/src/capabilities/prompt/index.js +16 -0
  163. package/dist/src/capabilities/prompt/index.js.map +1 -0
  164. package/dist/src/capabilities/prompt/prompt.render.js +78 -0
  165. package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
  166. package/dist/src/capabilities/prompt/types.js +10 -0
  167. package/dist/src/capabilities/prompt/types.js.map +1 -0
  168. package/dist/src/capabilities/prompt/verbs.js +93 -0
  169. package/dist/src/capabilities/prompt/verbs.js.map +1 -0
  170. package/dist/src/capabilities/resources/index.js +10 -0
  171. package/dist/src/capabilities/resources/index.js.map +1 -0
  172. package/dist/src/capabilities/resources/provider.js +423 -0
  173. package/dist/src/capabilities/resources/provider.js.map +1 -0
  174. package/dist/src/capabilities/setup/buildPlan.js +172 -0
  175. package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
  176. package/dist/src/capabilities/setup/index.js +5 -0
  177. package/dist/src/capabilities/setup/index.js.map +1 -0
  178. package/dist/src/capabilities/setup/mode.js +53 -0
  179. package/dist/src/capabilities/setup/mode.js.map +1 -0
  180. package/dist/src/capabilities/setup/operations/index.js +39 -0
  181. package/dist/src/capabilities/setup/operations/index.js.map +1 -0
  182. package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
  183. package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
  184. package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
  185. package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
  186. package/dist/src/capabilities/setup/operations/setupGenerator.js +390 -0
  187. package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
  188. package/dist/src/capabilities/setup/operations/setupLsp.js +329 -0
  189. package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
  190. package/dist/src/capabilities/setup/operations/setupMcp.js +253 -0
  191. package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
  192. package/dist/src/capabilities/setup/operations/setupSkills.js +594 -0
  193. package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
  194. package/dist/src/capabilities/setup/plan.js +128 -0
  195. package/dist/src/capabilities/setup/plan.js.map +1 -0
  196. package/dist/src/capabilities/setup/plan.render.js +271 -0
  197. package/dist/src/capabilities/setup/plan.render.js.map +1 -0
  198. package/dist/src/capabilities/setup/setup.render.js +54 -0
  199. package/dist/src/capabilities/setup/setup.render.js.map +1 -0
  200. package/dist/src/capabilities/setup/setup.verb.js +387 -0
  201. package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
  202. package/dist/src/capabilities/setup/shell.js +196 -0
  203. package/dist/src/capabilities/setup/shell.js.map +1 -0
  204. package/dist/src/capabilities/setup/targets.js +328 -0
  205. package/dist/src/capabilities/setup/targets.js.map +1 -0
  206. package/dist/src/capabilities/setup/types.js +5 -0
  207. package/dist/src/capabilities/setup/types.js.map +1 -0
  208. package/dist/src/capabilities/shared/assertExecOk.js +137 -0
  209. package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
  210. package/dist/src/capabilities/shared/index.js +27 -0
  211. package/dist/src/capabilities/shared/index.js.map +1 -0
  212. package/dist/src/capabilities/shared/packageManager.js +349 -0
  213. package/dist/src/capabilities/shared/packageManager.js.map +1 -0
  214. package/dist/src/capabilities/shared/registry.js +55 -0
  215. package/dist/src/capabilities/shared/registry.js.map +1 -0
  216. package/dist/src/capabilities/skill/discover.js +281 -0
  217. package/dist/src/capabilities/skill/discover.js.map +1 -0
  218. package/dist/src/capabilities/skill/index.js +10 -0
  219. package/dist/src/capabilities/skill/index.js.map +1 -0
  220. package/dist/src/capabilities/skill/render.js +49 -0
  221. package/dist/src/capabilities/skill/render.js.map +1 -0
  222. package/dist/src/capabilities/skill/verbs.js +83 -0
  223. package/dist/src/capabilities/skill/verbs.js.map +1 -0
  224. package/dist/src/capabilities/sources/collectStatus.js +103 -0
  225. package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
  226. package/dist/src/capabilities/sources/index.js +13 -0
  227. package/dist/src/capabilities/sources/index.js.map +1 -0
  228. package/dist/src/capabilities/sources/installSkills.js +309 -0
  229. package/dist/src/capabilities/sources/installSkills.js.map +1 -0
  230. package/dist/src/capabilities/sources/runUpdate.js +460 -0
  231. package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
  232. package/dist/src/capabilities/sources/status.render.js +64 -0
  233. package/dist/src/capabilities/sources/status.render.js.map +1 -0
  234. package/dist/src/capabilities/sources/status.verb.js +40 -0
  235. package/dist/src/capabilities/sources/status.verb.js.map +1 -0
  236. package/dist/src/capabilities/sources/types.js +6 -0
  237. package/dist/src/capabilities/sources/types.js.map +1 -0
  238. package/dist/src/capabilities/sources/update.render.js +34 -0
  239. package/dist/src/capabilities/sources/update.render.js.map +1 -0
  240. package/dist/src/capabilities/sources/update.verb.js +55 -0
  241. package/dist/src/capabilities/sources/update.verb.js.map +1 -0
  242. package/dist/src/capabilities/upgrade/index.js +5 -0
  243. package/dist/src/capabilities/upgrade/index.js.map +1 -0
  244. package/dist/src/capabilities/upgrade/runUpgrade.js +135 -0
  245. package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
  246. package/dist/src/capabilities/upgrade/types.js +5 -0
  247. package/dist/src/capabilities/upgrade/types.js.map +1 -0
  248. package/dist/src/capabilities/upgrade/upgrade.render.js +52 -0
  249. package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
  250. package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
  251. package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
  252. package/dist/src/capabilities/version/index.js +10 -0
  253. package/dist/src/capabilities/version/index.js.map +1 -0
  254. package/dist/src/capabilities/version/version.verb.js +36 -0
  255. package/dist/src/capabilities/version/version.verb.js.map +1 -0
  256. package/dist/src/constants.js +87 -0
  257. package/dist/src/constants.js.map +1 -0
  258. package/dist/src/index.js +12 -0
  259. package/dist/src/index.js.map +1 -0
  260. package/dist/src/kernel/completion/complete.js +66 -0
  261. package/dist/src/kernel/completion/complete.js.map +1 -0
  262. package/dist/src/kernel/completion/emitScripts.js +92 -0
  263. package/dist/src/kernel/completion/emitScripts.js.map +1 -0
  264. package/dist/src/kernel/completion/entitySource.js +285 -0
  265. package/dist/src/kernel/completion/entitySource.js.map +1 -0
  266. package/dist/src/kernel/completion/index.js +14 -0
  267. package/dist/src/kernel/completion/index.js.map +1 -0
  268. package/dist/src/kernel/completion/model.js +301 -0
  269. package/dist/src/kernel/completion/model.js.map +1 -0
  270. package/dist/src/kernel/completion/parse.js +253 -0
  271. package/dist/src/kernel/completion/parse.js.map +1 -0
  272. package/dist/src/kernel/completion/rank.js +101 -0
  273. package/dist/src/kernel/completion/rank.js.map +1 -0
  274. package/dist/src/kernel/completion/resolve.js +100 -0
  275. package/dist/src/kernel/completion/resolve.js.map +1 -0
  276. package/dist/src/kernel/completion/templates/bash.js +209 -0
  277. package/dist/src/kernel/completion/templates/bash.js.map +1 -0
  278. package/dist/src/kernel/completion/templates/fish.js +214 -0
  279. package/dist/src/kernel/completion/templates/fish.js.map +1 -0
  280. package/dist/src/kernel/completion/templates/index.js +23 -0
  281. package/dist/src/kernel/completion/templates/index.js.map +1 -0
  282. package/dist/src/kernel/completion/templates/shared.js +98 -0
  283. package/dist/src/kernel/completion/templates/shared.js.map +1 -0
  284. package/dist/src/kernel/completion/templates/zsh.js +201 -0
  285. package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
  286. package/dist/src/kernel/completion/types.js +13 -0
  287. package/dist/src/kernel/completion/types.js.map +1 -0
  288. package/dist/src/kernel/config/defaults.js +17 -0
  289. package/dist/src/kernel/config/defaults.js.map +1 -0
  290. package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
  291. package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
  292. package/dist/src/kernel/config/findProjectConfig.js +43 -0
  293. package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
  294. package/dist/src/kernel/config/firstRun.js +34 -0
  295. package/dist/src/kernel/config/firstRun.js.map +1 -0
  296. package/dist/src/kernel/config/globalConfig.js +79 -0
  297. package/dist/src/kernel/config/globalConfig.js.map +1 -0
  298. package/dist/src/kernel/config/index.js +16 -0
  299. package/dist/src/kernel/config/index.js.map +1 -0
  300. package/dist/src/kernel/config/paths.js +35 -0
  301. package/dist/src/kernel/config/paths.js.map +1 -0
  302. package/dist/src/kernel/config/readConfig.js +78 -0
  303. package/dist/src/kernel/config/readConfig.js.map +1 -0
  304. package/dist/src/kernel/config/schema.js +130 -0
  305. package/dist/src/kernel/config/schema.js.map +1 -0
  306. package/dist/src/kernel/config/types.js +19 -0
  307. package/dist/src/kernel/config/types.js.map +1 -0
  308. package/dist/src/kernel/config/writeConfigField.js +59 -0
  309. package/dist/src/kernel/config/writeConfigField.js.map +1 -0
  310. package/dist/src/kernel/copy.js +43 -0
  311. package/dist/src/kernel/copy.js.map +1 -0
  312. package/dist/src/kernel/error/PragmaError.js +149 -0
  313. package/dist/src/kernel/error/PragmaError.js.map +1 -0
  314. package/dist/src/kernel/error/constants.js +40 -0
  315. package/dist/src/kernel/error/constants.js.map +1 -0
  316. package/dist/src/kernel/error/fromTaskError.js +96 -0
  317. package/dist/src/kernel/error/fromTaskError.js.map +1 -0
  318. package/dist/src/kernel/error/index.js +13 -0
  319. package/dist/src/kernel/error/index.js.map +1 -0
  320. package/dist/src/kernel/error/recovery.js +52 -0
  321. package/dist/src/kernel/error/recovery.js.map +1 -0
  322. package/dist/src/kernel/error/renderError.js +115 -0
  323. package/dist/src/kernel/error/renderError.js.map +1 -0
  324. package/dist/src/kernel/error/serialize.js +25 -0
  325. package/dist/src/kernel/error/serialize.js.map +1 -0
  326. package/dist/src/kernel/error/types.js +9 -0
  327. package/dist/src/kernel/error/types.js.map +1 -0
  328. package/dist/src/kernel/index.js +34 -0
  329. package/dist/src/kernel/index.js.map +1 -0
  330. package/dist/src/kernel/interactivity.js +68 -0
  331. package/dist/src/kernel/interactivity.js.map +1 -0
  332. package/dist/src/kernel/packs/collect.js +187 -0
  333. package/dist/src/kernel/packs/collect.js.map +1 -0
  334. package/dist/src/kernel/packs/compile.js +304 -0
  335. package/dist/src/kernel/packs/compile.js.map +1 -0
  336. package/dist/src/kernel/packs/disclosure.js +76 -0
  337. package/dist/src/kernel/packs/disclosure.js.map +1 -0
  338. package/dist/src/kernel/packs/glob.js +38 -0
  339. package/dist/src/kernel/packs/glob.js.map +1 -0
  340. package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
  341. package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
  342. package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
  343. package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
  344. package/dist/src/kernel/packs/graphql/index.js +20 -0
  345. package/dist/src/kernel/packs/graphql/index.js.map +1 -0
  346. package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
  347. package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
  348. package/dist/src/kernel/packs/index.js +34 -0
  349. package/dist/src/kernel/packs/index.js.map +1 -0
  350. package/dist/src/kernel/packs/iri.js +110 -0
  351. package/dist/src/kernel/packs/iri.js.map +1 -0
  352. package/dist/src/kernel/packs/renderPack.js +129 -0
  353. package/dist/src/kernel/packs/renderPack.js.map +1 -0
  354. package/dist/src/kernel/packs/resolveEntity.js +274 -0
  355. package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
  356. package/dist/src/kernel/packs/runBodies.js +140 -0
  357. package/dist/src/kernel/packs/runBodies.js.map +1 -0
  358. package/dist/src/kernel/packs/sample.js +56 -0
  359. package/dist/src/kernel/packs/sample.js.map +1 -0
  360. package/dist/src/kernel/packs/schema.js +421 -0
  361. package/dist/src/kernel/packs/schema.js.map +1 -0
  362. package/dist/src/kernel/packs/sparql/applyFilters.js +167 -0
  363. package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
  364. package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
  365. package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
  366. package/dist/src/kernel/packs/sparql/buildLookupQuery.js +480 -0
  367. package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
  368. package/dist/src/kernel/packs/sparql/escape.js +21 -0
  369. package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
  370. package/dist/src/kernel/packs/sparql/index.js +31 -0
  371. package/dist/src/kernel/packs/sparql/index.js.map +1 -0
  372. package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
  373. package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
  374. package/dist/src/kernel/packs/types.js +30 -0
  375. package/dist/src/kernel/packs/types.js.map +1 -0
  376. package/dist/src/kernel/packs/uniqueness.js +30 -0
  377. package/dist/src/kernel/packs/uniqueness.js.map +1 -0
  378. package/dist/src/kernel/project/cli/buildProgram.js +263 -0
  379. package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
  380. package/dist/src/kernel/project/cli/constants.js +27 -0
  381. package/dist/src/kernel/project/cli/constants.js.map +1 -0
  382. package/dist/src/kernel/project/cli/dispatch.js +420 -0
  383. package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
  384. package/dist/src/kernel/project/cli/exitCodes.js +66 -0
  385. package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
  386. package/dist/src/kernel/project/cli/globalFlags.js +219 -0
  387. package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
  388. package/dist/src/kernel/project/cli/helpFormat.js +58 -0
  389. package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
  390. package/dist/src/kernel/project/cli/index.js +14 -0
  391. package/dist/src/kernel/project/cli/index.js.map +1 -0
  392. package/dist/src/kernel/project/cli/rootHelp.js +227 -0
  393. package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
  394. package/dist/src/kernel/project/cli/suggest.js +75 -0
  395. package/dist/src/kernel/project/cli/suggest.js.map +1 -0
  396. package/dist/src/kernel/project/cli/suggestNames.js +96 -0
  397. package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
  398. package/dist/src/kernel/project/cli/verbHelp.js +131 -0
  399. package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
  400. package/dist/src/kernel/project/mcp/buildServer.js +67 -0
  401. package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
  402. package/dist/src/kernel/project/mcp/envelope.js +37 -0
  403. package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
  404. package/dist/src/kernel/project/mcp/index.js +8 -0
  405. package/dist/src/kernel/project/mcp/index.js.map +1 -0
  406. package/dist/src/kernel/project/mcp/instructions.js +44 -0
  407. package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
  408. package/dist/src/kernel/project/mcp/mcpError.js +42 -0
  409. package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
  410. package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
  411. package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
  412. package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
  413. package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
  414. package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
  415. package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
  416. package/dist/src/kernel/project/mcp/registerVerb.js +315 -0
  417. package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
  418. package/dist/src/kernel/project/mcp/serve.js +35 -0
  419. package/dist/src/kernel/project/mcp/serve.js.map +1 -0
  420. package/dist/src/kernel/render/compactUri.js +24 -0
  421. package/dist/src/kernel/render/compactUri.js.map +1 -0
  422. package/dist/src/kernel/render/contracts.js +10 -0
  423. package/dist/src/kernel/render/contracts.js.map +1 -0
  424. package/dist/src/kernel/render/disclosure.js +34 -0
  425. package/dist/src/kernel/render/disclosure.js.map +1 -0
  426. package/dist/src/kernel/render/envelope.js +30 -0
  427. package/dist/src/kernel/render/envelope.js.map +1 -0
  428. package/dist/src/kernel/render/formatters.js +27 -0
  429. package/dist/src/kernel/render/formatters.js.map +1 -0
  430. package/dist/src/kernel/render/index.js +15 -0
  431. package/dist/src/kernel/render/index.js.map +1 -0
  432. package/dist/src/kernel/render/prefixes.js +46 -0
  433. package/dist/src/kernel/render/prefixes.js.map +1 -0
  434. package/dist/src/kernel/render/renderers.js +468 -0
  435. package/dist/src/kernel/render/renderers.js.map +1 -0
  436. package/dist/src/kernel/render/style.js +105 -0
  437. package/dist/src/kernel/render/style.js.map +1 -0
  438. package/dist/src/kernel/render/turtle.js +194 -0
  439. package/dist/src/kernel/render/turtle.js.map +1 -0
  440. package/dist/src/kernel/render/vocabulary.js +174 -0
  441. package/dist/src/kernel/render/vocabulary.js.map +1 -0
  442. package/dist/src/kernel/render/writeStdout.js +43 -0
  443. package/dist/src/kernel/render/writeStdout.js.map +1 -0
  444. package/dist/src/kernel/runtime/boot.js +49 -0
  445. package/dist/src/kernel/runtime/boot.js.map +1 -0
  446. package/dist/src/kernel/runtime/facade.js +39 -0
  447. package/dist/src/kernel/runtime/facade.js.map +1 -0
  448. package/dist/src/kernel/runtime/graphpack/build.js +122 -0
  449. package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
  450. package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
  451. package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
  452. package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
  453. package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
  454. package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
  455. package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
  456. package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
  457. package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
  458. package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
  459. package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
  460. package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
  461. package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
  462. package/dist/src/kernel/runtime/graphpack/index.js +11 -0
  463. package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
  464. package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
  465. package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
  466. package/dist/src/kernel/runtime/graphpack/read.js +92 -0
  467. package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
  468. package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
  469. package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
  470. package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
  471. package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
  472. package/dist/src/kernel/runtime/graphpack/types.js +55 -0
  473. package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
  474. package/dist/src/kernel/runtime/index.js +8 -0
  475. package/dist/src/kernel/runtime/index.js.map +1 -0
  476. package/dist/src/kernel/runtime/loadSession.js +34 -0
  477. package/dist/src/kernel/runtime/loadSession.js.map +1 -0
  478. package/dist/src/kernel/runtime/paths.js +78 -0
  479. package/dist/src/kernel/runtime/paths.js.map +1 -0
  480. package/dist/src/kernel/runtime/probe.js +37 -0
  481. package/dist/src/kernel/runtime/probe.js.map +1 -0
  482. package/dist/src/kernel/runtime/readEntity.js +363 -0
  483. package/dist/src/kernel/runtime/readEntity.js.map +1 -0
  484. package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
  485. package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
  486. package/dist/src/kernel/runtime/refs/index.js +29 -0
  487. package/dist/src/kernel/runtime/refs/index.js.map +1 -0
  488. package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
  489. package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
  490. package/dist/src/kernel/runtime/refs/resolve.js +332 -0
  491. package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
  492. package/dist/src/kernel/runtime/resolveSources.js +62 -0
  493. package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
  494. package/dist/src/kernel/runtime/store.js +75 -0
  495. package/dist/src/kernel/runtime/store.js.map +1 -0
  496. package/dist/src/kernel/runtime/storeReadiness.js +51 -0
  497. package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
  498. package/dist/src/kernel/runtime/types.js +11 -0
  499. package/dist/src/kernel/runtime/types.js.map +1 -0
  500. package/dist/src/kernel/spec/asVerb.js +21 -0
  501. package/dist/src/kernel/spec/asVerb.js.map +1 -0
  502. package/dist/src/kernel/spec/emitReference.js +578 -0
  503. package/dist/src/kernel/spec/emitReference.js.map +1 -0
  504. package/dist/src/kernel/spec/emitSurface.js +202 -0
  505. package/dist/src/kernel/spec/emitSurface.js.map +1 -0
  506. package/dist/src/kernel/spec/index.js +11 -0
  507. package/dist/src/kernel/spec/index.js.map +1 -0
  508. package/dist/src/kernel/spec/surfaceConformance.js +103 -0
  509. package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
  510. package/dist/src/kernel/spec/types.js +14 -0
  511. package/dist/src/kernel/spec/types.js.map +1 -0
  512. package/dist/src/kernel/spec/validate.js +110 -0
  513. package/dist/src/kernel/spec/validate.js.map +1 -0
  514. package/dist/src/kernel/vocabulary.js +97 -0
  515. package/dist/src/kernel/vocabulary.js.map +1 -0
  516. package/dist/src/types.js +11 -0
  517. package/dist/src/types.js.map +1 -0
  518. package/package.json +22 -23
  519. package/pragma.conf.ts +486 -90
  520. package/src/bin.ts +274 -82
  521. package/src/capabilities/block.parity.test.ts +29 -12
  522. package/src/capabilities/block.shipped.exec.test.ts +282 -0
  523. package/src/capabilities/block.tierRank.exec.test.ts +300 -0
  524. package/src/capabilities/capabilities/capabilities.render.ts +1 -1
  525. package/src/capabilities/capabilities/capabilities.verb.ts +1 -1
  526. package/src/capabilities/capabilities/catalog.ts +3 -3
  527. package/src/capabilities/capabilities/hints.ts +32 -7
  528. package/src/capabilities/capabilities/index.ts +1 -1
  529. package/src/capabilities/colophon/collectColophon.ts +35 -24
  530. package/src/capabilities/colophon/colophon.render.ts +24 -1
  531. package/src/capabilities/colophon/colophon.test.ts +42 -21
  532. package/src/capabilities/colophon/colophon.verb.ts +4 -4
  533. package/src/capabilities/config/collectConfigShow.test.ts +1 -0
  534. package/src/capabilities/config/collectConfigShow.ts +3 -3
  535. package/src/capabilities/config/field.render.ts +4 -5
  536. package/src/capabilities/config/fields.ts +17 -10
  537. package/src/capabilities/config/get.verb.ts +70 -0
  538. package/src/capabilities/config/getUnset.test.ts +264 -0
  539. package/src/capabilities/config/index.ts +5 -1
  540. package/src/capabilities/config/runField.ts +40 -22
  541. package/src/capabilities/config/runGet.ts +34 -0
  542. package/src/capabilities/config/runSet.ts +35 -9
  543. package/src/capabilities/config/set.test.ts +48 -14
  544. package/src/capabilities/config/set.verb.ts +8 -7
  545. package/src/capabilities/config/show.render.ts +1 -1
  546. package/src/capabilities/config/show.verb.ts +9 -6
  547. package/src/capabilities/config/types.ts +18 -4
  548. package/src/capabilities/config/unset.verb.ts +58 -0
  549. package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
  550. package/src/capabilities/create/byteEquality.test.ts +25 -11
  551. package/src/capabilities/create/cliProjection.ts +227 -0
  552. package/src/capabilities/create/constants.ts +36 -61
  553. package/src/capabilities/create/create.mcp.test.ts +89 -5
  554. package/src/capabilities/create/create.render.ts +71 -7
  555. package/src/capabilities/create/create.test.ts +433 -219
  556. package/src/capabilities/create/create.verb.ts +297 -328
  557. package/src/capabilities/create/createGrammar.test.ts +865 -0
  558. package/src/capabilities/create/createHelp.ts +71 -0
  559. package/src/capabilities/create/createSurface.generated.ts +400 -0
  560. package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
  561. package/src/capabilities/create/cwdJail.test.ts +24 -5
  562. package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
  563. package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
  564. package/src/capabilities/create/index.ts +7 -4
  565. package/src/capabilities/create/messages.ts +18 -0
  566. package/src/capabilities/create/mount.ts +391 -0
  567. package/src/capabilities/create/pathJail.test.ts +90 -0
  568. package/src/capabilities/create/pathJail.ts +8 -5
  569. package/src/capabilities/create/pickGenerator.ts +23 -35
  570. package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
  571. package/src/capabilities/create/types.ts +20 -0
  572. package/src/capabilities/distribution.parity.test.ts +4 -0
  573. package/src/capabilities/distribution.test.ts +3 -1
  574. package/src/capabilities/distribution.ts +10 -15
  575. package/src/capabilities/doctor/checks/checkKeStore.ts +7 -5
  576. package/src/capabilities/doctor/checks/checkPackageRefs.ts +75 -8
  577. package/src/capabilities/doctor/checks/checkPragmaVersion.ts +2 -2
  578. package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +76 -29
  579. package/src/capabilities/doctor/checks/checkShellCompletions.ts +63 -17
  580. package/src/capabilities/doctor/checks/harnessInventory.test.ts +219 -0
  581. package/src/capabilities/doctor/checks/harnessInventory.ts +298 -0
  582. package/src/capabilities/doctor/checks/index.ts +27 -0
  583. package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
  584. package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
  585. package/src/capabilities/doctor/checks/targetHealth.ts +444 -0
  586. package/src/capabilities/doctor/doctor.render.test.ts +125 -38
  587. package/src/capabilities/doctor/doctor.render.ts +74 -74
  588. package/src/capabilities/doctor/doctor.test.ts +338 -37
  589. package/src/capabilities/doctor/doctor.verb.ts +8 -3
  590. package/src/capabilities/doctor/runChecks.ts +65 -63
  591. package/src/capabilities/doctor/types.ts +22 -15
  592. package/src/capabilities/emptyRecovery.test.ts +21 -8
  593. package/src/capabilities/graph/examples.exec.test.ts +107 -0
  594. package/src/capabilities/graph/index.ts +1 -1
  595. package/src/capabilities/graph/inspect.render.ts +70 -22
  596. package/src/capabilities/graph/inspect.test.ts +260 -5
  597. package/src/capabilities/graph/inspect.verb.ts +18 -6
  598. package/src/capabilities/graph/query.render.ts +15 -3
  599. package/src/capabilities/graph/query.verb.ts +3 -3
  600. package/src/capabilities/graph/runQuery.ts +2 -3
  601. package/src/capabilities/index.ts +3 -1
  602. package/src/capabilities/info/collectInfo.ts +13 -5
  603. package/src/capabilities/info/info.render.ts +7 -3
  604. package/src/capabilities/info/info.test.ts +37 -1
  605. package/src/capabilities/info/info.verb.ts +1 -1
  606. package/src/capabilities/info/types.ts +10 -2
  607. package/src/capabilities/lazy.test.ts +32 -0
  608. package/src/capabilities/meta/complete.verb.ts +1 -1
  609. package/src/capabilities/meta/index.ts +1 -1
  610. package/src/capabilities/meta/mcp.verb.ts +10 -8
  611. package/src/capabilities/ontology/index.ts +15 -11
  612. package/src/capabilities/ontology/ontology.test.ts +6 -55
  613. package/src/capabilities/ontology/queries.ts +2 -2
  614. package/src/capabilities/ontology/render.ts +3 -4
  615. package/src/capabilities/ontology/verbs.ts +27 -68
  616. package/src/capabilities/prompt/index.ts +2 -2
  617. package/src/capabilities/prompt/prompt.render.ts +6 -2
  618. package/src/capabilities/prompt/types.ts +1 -1
  619. package/src/capabilities/prompt/verbs.ts +4 -5
  620. package/src/capabilities/reference.test.ts +63 -0
  621. package/src/capabilities/renderVocabularySync.test.ts +82 -0
  622. package/src/capabilities/resources/provider.ts +342 -85
  623. package/src/capabilities/resources/resources.test.ts +355 -59
  624. package/src/capabilities/scopeTypeSync.test.ts +29 -15
  625. package/src/capabilities/setup/buildPlan.ts +240 -0
  626. package/src/capabilities/setup/index.ts +7 -7
  627. package/src/capabilities/setup/mode.ts +74 -0
  628. package/src/capabilities/setup/operations/index.ts +79 -0
  629. package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
  630. package/src/capabilities/setup/operations/setupConfig.ts +124 -0
  631. package/src/capabilities/setup/operations/setupGenerator.ts +478 -334
  632. package/src/capabilities/setup/operations/setupLsp.ts +420 -67
  633. package/src/capabilities/setup/operations/setupMcp.ts +238 -127
  634. package/src/capabilities/setup/operations/setupSkills.ts +667 -105
  635. package/src/capabilities/setup/plan.render.ts +336 -0
  636. package/src/capabilities/setup/plan.ts +241 -0
  637. package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
  638. package/src/capabilities/setup/setup.render.test.ts +297 -75
  639. package/src/capabilities/setup/setup.render.ts +45 -77
  640. package/src/capabilities/setup/setup.test.ts +1819 -225
  641. package/src/capabilities/setup/setup.verb.ts +288 -78
  642. package/src/capabilities/setup/shell.test.ts +86 -0
  643. package/src/capabilities/setup/shell.ts +137 -11
  644. package/src/capabilities/setup/targets.ts +435 -0
  645. package/src/capabilities/setup/types.ts +23 -70
  646. package/src/capabilities/shared/assertExecOk.ts +68 -10
  647. package/src/capabilities/shared/index.ts +43 -0
  648. package/src/capabilities/shared/packageManager.test.ts +470 -0
  649. package/src/capabilities/shared/packageManager.ts +425 -34
  650. package/src/capabilities/skill/bundledSkills.test.ts +347 -0
  651. package/src/capabilities/skill/discover.ts +131 -10
  652. package/src/capabilities/skill/index.ts +1 -1
  653. package/src/capabilities/skill/render.ts +10 -9
  654. package/src/capabilities/skill/skill.test.ts +22 -7
  655. package/src/capabilities/skill/verbs.ts +3 -4
  656. package/src/capabilities/sources/collectStatus.ts +7 -2
  657. package/src/capabilities/sources/index.ts +1 -1
  658. package/src/capabilities/sources/installSkills.ts +265 -10
  659. package/src/capabilities/sources/runUpdate.ts +131 -23
  660. package/src/capabilities/sources/sources.test.ts +382 -2
  661. package/src/capabilities/sources/status.render.ts +1 -1
  662. package/src/capabilities/sources/status.verb.ts +1 -1
  663. package/src/capabilities/sources/update.render.ts +1 -1
  664. package/src/capabilities/sources/update.verb.ts +4 -4
  665. package/src/capabilities/surface.test.ts +136 -19
  666. package/src/capabilities/upgrade/runUpgrade.ts +53 -14
  667. package/src/capabilities/upgrade/types.ts +10 -2
  668. package/src/capabilities/upgrade/upgrade.render.ts +13 -7
  669. package/src/capabilities/upgrade/upgrade.test.ts +75 -3
  670. package/src/capabilities/upgrade/upgrade.verb.ts +1 -1
  671. package/src/capabilities/version/index.ts +12 -0
  672. package/src/capabilities/version/version.test.ts +66 -0
  673. package/src/capabilities/version/version.verb.ts +39 -0
  674. package/src/constants.ts +36 -1
  675. package/src/identity.test.ts +57 -29
  676. package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +15 -13
  677. package/src/kernel/completion/complete.test.ts +12 -2
  678. package/src/kernel/completion/complete.ts +1 -1
  679. package/src/kernel/completion/emitScripts.ts +1 -1
  680. package/src/kernel/completion/entitySource.test.ts +16 -3
  681. package/src/kernel/completion/entitySource.ts +21 -8
  682. package/src/kernel/completion/model.test.ts +164 -12
  683. package/src/kernel/completion/model.ts +94 -14
  684. package/src/kernel/completion/parse.test.ts +4 -7
  685. package/src/kernel/completion/parse.ts +15 -0
  686. package/src/kernel/completion/resolve.test.ts +0 -1
  687. package/src/kernel/completion/safety.test.ts +50 -35
  688. package/src/kernel/completion/shellDrive.test.ts +28 -9
  689. package/src/kernel/completion/templates/bash.ts +7 -2
  690. package/src/kernel/completion/templates/index.ts +23 -0
  691. package/src/kernel/completion/types.ts +7 -0
  692. package/src/kernel/config/defaults.test.ts +27 -3
  693. package/src/kernel/config/defaults.ts +4 -3
  694. package/src/kernel/config/evaluateProjectConfig.ts +31 -8
  695. package/src/kernel/config/firstRun.test.ts +44 -38
  696. package/src/kernel/config/firstRun.ts +24 -88
  697. package/src/kernel/config/index.ts +1 -1
  698. package/src/kernel/config/readConfig.test.ts +6 -3
  699. package/src/kernel/config/readConfig.ts +1 -1
  700. package/src/kernel/config/schema.ts +3 -1
  701. package/src/kernel/config/types.ts +3 -1
  702. package/src/kernel/copy.test.ts +34 -4
  703. package/src/kernel/copy.ts +54 -0
  704. package/src/kernel/error/PragmaError.test.ts +5 -2
  705. package/src/kernel/error/PragmaError.ts +4 -2
  706. package/src/kernel/error/constants.ts +7 -5
  707. package/src/kernel/error/fromTaskError.ts +28 -6
  708. package/src/kernel/error/recovery.ts +14 -0
  709. package/src/kernel/error/renderError.ts +42 -1
  710. package/src/kernel/error/types.ts +21 -1
  711. package/src/kernel/index.ts +35 -0
  712. package/src/kernel/interactivity.test.ts +76 -0
  713. package/src/kernel/interactivity.ts +69 -0
  714. package/src/kernel/packs/collect.ts +12 -16
  715. package/src/kernel/packs/compile.test.ts +222 -1
  716. package/src/kernel/packs/compile.ts +93 -3
  717. package/src/kernel/packs/disclosure.ts +2 -2
  718. package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
  719. package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +3 -4
  720. package/src/kernel/packs/graphql/index.ts +20 -0
  721. package/src/kernel/packs/index.ts +40 -0
  722. package/src/kernel/packs/iri.test.ts +73 -0
  723. package/src/kernel/packs/iri.ts +66 -14
  724. package/src/kernel/packs/renderPack.ts +25 -6
  725. package/src/kernel/packs/resolveEntity.test.ts +274 -0
  726. package/src/kernel/packs/resolveEntity.ts +200 -42
  727. package/src/kernel/packs/runBodies.ts +86 -22
  728. package/src/kernel/packs/sample.ts +1 -1
  729. package/src/kernel/packs/schema.ts +78 -5
  730. package/src/kernel/packs/sparql/applyFilters.ts +136 -16
  731. package/src/kernel/packs/sparql/buildLookupQuery.test.ts +290 -0
  732. package/src/kernel/packs/sparql/buildLookupQuery.ts +367 -17
  733. package/src/kernel/packs/sparql/index.ts +37 -0
  734. package/src/kernel/packs/sparql/runSelect.test.ts +1 -1
  735. package/src/kernel/packs/sparql/runSelect.ts +3 -4
  736. package/src/kernel/packs/toolDescription.test.ts +77 -4
  737. package/src/kernel/packs/types.ts +136 -0
  738. package/src/kernel/packs/uniqueness.ts +1 -1
  739. package/src/kernel/project/cli/buildProgram.test.ts +218 -12
  740. package/src/kernel/project/cli/buildProgram.ts +84 -18
  741. package/src/kernel/project/cli/constants.ts +34 -0
  742. package/src/kernel/project/cli/dispatch.test.ts +160 -2
  743. package/src/kernel/project/cli/dispatch.ts +226 -45
  744. package/src/kernel/project/cli/exitCodes.ts +1 -1
  745. package/src/kernel/project/cli/globalFlags.test.ts +117 -1
  746. package/src/kernel/project/cli/globalFlags.ts +134 -31
  747. package/src/kernel/project/cli/helpFormat.ts +14 -2
  748. package/src/kernel/project/cli/rootHelp.ts +74 -12
  749. package/src/kernel/project/cli/suggest.test.ts +33 -1
  750. package/src/kernel/project/cli/suggest.ts +25 -1
  751. package/src/kernel/project/cli/verbHelp.test.ts +30 -0
  752. package/src/kernel/project/cli/verbHelp.ts +23 -7
  753. package/src/kernel/project/mcp/buildServer.ts +7 -4
  754. package/src/kernel/project/mcp/envelope.ts +2 -2
  755. package/src/kernel/project/mcp/instructions.ts +2 -2
  756. package/src/kernel/project/mcp/mcpError.ts +1 -1
  757. package/src/kernel/project/mcp/parity.test.ts +5 -2
  758. package/src/kernel/project/mcp/prompts/index.ts +37 -0
  759. package/src/kernel/project/mcp/prompts/source.ts +2 -2
  760. package/src/kernel/project/mcp/registerVerb.ts +55 -10
  761. package/src/kernel/project/mcp/serve.ts +2 -2
  762. package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
  763. package/src/kernel/render/contracts.ts +21 -0
  764. package/src/kernel/render/envelope.ts +2 -3
  765. package/src/kernel/render/formatters.ts +1 -1
  766. package/src/kernel/render/renderers.test.ts +243 -6
  767. package/src/kernel/render/renderers.ts +222 -20
  768. package/src/kernel/render/style.test.ts +75 -24
  769. package/src/kernel/render/style.ts +59 -6
  770. package/src/kernel/render/turtle.ts +222 -0
  771. package/src/kernel/render/vocabulary.ts +276 -0
  772. package/src/kernel/runtime/graphpack/buildIndex.ts +1 -1
  773. package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +3 -3
  774. package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +1 -1
  775. package/src/kernel/runtime/graphpack/embedded.ts +3 -3
  776. package/src/kernel/runtime/graphpack/manifest.ts +1 -1
  777. package/src/kernel/runtime/graphpack/read.ts +1 -2
  778. package/src/kernel/runtime/loadSession.ts +1 -1
  779. package/src/kernel/runtime/probe.ts +6 -6
  780. package/src/kernel/runtime/readEntity.ts +472 -28
  781. package/src/kernel/runtime/refs/index.ts +39 -0
  782. package/src/kernel/runtime/refs/parseRef.ts +2 -2
  783. package/src/kernel/runtime/refs/resolve.ts +4 -4
  784. package/src/kernel/runtime/storeReadiness.ts +1 -2
  785. package/src/kernel/runtime/types.ts +15 -1
  786. package/src/kernel/runtime/wasmEmbed.test.ts +37 -39
  787. package/src/kernel/spec/emitReference.ts +105 -30
  788. package/src/kernel/spec/emitSurface.ts +48 -6
  789. package/src/kernel/spec/surfaceConformance.test.ts +4 -2
  790. package/src/kernel/spec/types.ts +277 -4
  791. package/src/testing/PARITY_GAPS.ts +9 -3
  792. package/src/testing/behavioral/docExamples.test.ts +16 -0
  793. package/src/testing/behavioral/errorMatrix.mcp.test.ts +112 -9
  794. package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
  795. package/src/testing/behavioral/journeys.cli.test.ts +1 -1
  796. package/src/testing/behavioral/journeys.defaultPack.test.ts +7 -7
  797. package/src/testing/behavioral/journeys.firstInstall.test.ts +7 -2
  798. package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
  799. package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
  800. package/src/testing/behavioral/journeys.packageStories.test.ts +10 -7
  801. package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
  802. package/src/testing/behavioral/mcpSurface.test.ts +1 -1
  803. package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
  804. package/src/testing/eval/__snapshots__/eval.test.ts.snap +26 -1
  805. package/src/testing/eval/cases/effectful.ts +3 -2
  806. package/src/testing/eval/cases/readNouns.ts +245 -9
  807. package/src/testing/fixtures/blockGraph.ts +104 -10
  808. package/src/testing/fixtures/graph/canonical.ts +182 -13
  809. package/src/testing/fixtures/graph/defaultPack.ts +1 -1
  810. package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
  811. package/src/testing/helpers/projectMcp.ts +32 -6
  812. package/src/testing/helpers/runCli.ts +35 -18
  813. package/src/testing/perf/budgets.test.ts +20 -9
  814. package/src/testing/perf/budgets.ts +58 -9
  815. package/src/testing/perf/codegen.test.ts +126 -0
  816. package/src/testing/perf/globalSetup.test.ts +286 -0
  817. package/src/testing/perf/globalSetup.ts +505 -23
  818. package/src/testing/perf/measure.test.ts +38 -0
  819. package/src/testing/perf/measure.ts +23 -4
  820. package/src/testing/setupXdgIsolation.ts +81 -21
  821. package/src/testing/tempRoot.globalSetup.ts +122 -0
  822. package/dist/pragma +0 -0
  823. package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -189
  824. package/src/capabilities/create/templates.embedded.generated.ts +0 -28
  825. package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -42
  826. package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
  827. package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -68
  828. package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -61
  829. package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
  830. package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
  831. package/src/capabilities/shared/bands.ts +0 -16
  832. package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Terminal-styling seam for the human (TTY) output path.
3
+ *
4
+ * The condensed/agent (`llm`) and JSON paths are byte-frozen contracts; only an
5
+ * interactive terminal earns color and alignment. A {@link RenderStyle} carries
6
+ * that decision as data so a pure renderer can consult it without reading the
7
+ * process itself: {@link defaultStyle} probes chalk's own TTY/env detection (the
8
+ * same signal the help system leans on), so piped / redirected / MCP output —
9
+ * where `enabled` is false — renders byte-for-byte as before, while an attended
10
+ * terminal renders with `enabled: true`. Passing an explicit style keeps the
11
+ * beautified renderers deterministically testable in both modes.
12
+ */
13
+ import chalk from "chalk";
14
+ import { stdoutIsCaptured } from "../interactivity.js";
15
+ /** The identity styler — every function returns its input unchanged. */
16
+ const PLAIN_STYLE = {
17
+ enabled: false,
18
+ bold: (text) => text,
19
+ dim: (text) => text,
20
+ cyan: (text) => text,
21
+ green: (text) => text,
22
+ yellow: (text) => text,
23
+ red: (text) => text,
24
+ };
25
+ /**
26
+ * Build a {@link RenderStyle} for a known color decision.
27
+ *
28
+ * @param enabled - True to colorize + align via chalk; false for the identity
29
+ * styler (byte-identical to the pre-beautify plain output).
30
+ * @returns A style whose functions color, or pass through, accordingly.
31
+ */
32
+ export function styleFor(enabled) {
33
+ if (!enabled)
34
+ return PLAIN_STYLE;
35
+ return {
36
+ enabled: true,
37
+ bold: (text) => chalk.bold(text),
38
+ dim: (text) => chalk.dim(text),
39
+ cyan: (text) => chalk.cyan(text),
40
+ green: (text) => chalk.green(text),
41
+ yellow: (text) => chalk.yellow(text),
42
+ red: (text) => chalk.red(text),
43
+ };
44
+ }
45
+ /**
46
+ * Whether the environment forbids color outright.
47
+ *
48
+ * `NO_COLOR` is honored when PRESENT AND NON-EMPTY, whatever its value — an
49
+ * empty assignment is explicitly not a request to disable (no-color.org). The
50
+ * value is never parsed: `NO_COLOR=0` still disables, which surprises people
51
+ * and is nonetheless what the convention says.
52
+ *
53
+ * @param env - The environment to read.
54
+ * @returns True when color must not be emitted.
55
+ */
56
+ export function forbidsColor(env) {
57
+ const value = env.NO_COLOR;
58
+ return value !== undefined && value !== "";
59
+ }
60
+ // Applied to the SHARED chalk instance at module load, not inside
61
+ // `defaultStyle()`, because three modules reach for `chalk` directly rather
62
+ // than through `RenderStyle` — help formatting, upgrade and the colophon's
63
+ // Markdown renderer. Gating only the style seam would leave every one of them
64
+ // still emitting escapes. Zeroing the level once covers them by construction,
65
+ // including any site added later.
66
+ //
67
+ // This used to be delegated to chalk, and the delegation was silent: the
68
+ // vendored `supports-color` this version ships handles `FORCE_COLOR` and has no
69
+ // `NO_COLOR` branch at all, so the flag did nothing while the code asserted it
70
+ // worked.
71
+ if (forbidsColor(process.env))
72
+ chalk.level = 0;
73
+ /**
74
+ * Whether stdout may carry color: an attended terminal AND a usable chalk
75
+ * level (zeroed by the module-load check above under `NO_COLOR`).
76
+ *
77
+ * The third question of the interactivity vocabulary (`kernel/interactivity.ts`
78
+ * holds the other two, and its docblock says why this one lives here: it needs
79
+ * `chalk`, and that module is on the flag-parsing fast path). Both signals are
80
+ * required — `supports-color` enables color off a TTY in CI, which would paint
81
+ * escapes into a redirected stream every byte-comparison then has to strip.
82
+ *
83
+ * @returns True on a color-capable terminal.
84
+ * @note Impure — reads stdout's capture state and chalk's color level.
85
+ */
86
+ export function canColor() {
87
+ return !stdoutIsCaptured() && chalk.level > 0;
88
+ }
89
+ /**
90
+ * The active style for this process's stdout.
91
+ *
92
+ * Both signals, asked as one named question ({@link canColor}): stdout must be
93
+ * an attended TTY, so piped / redirected / MCP output stays byte-stable even
94
+ * where `supports-color` fires off a TTY (CI sets `GITHUB_ACTIONS`, which chalk
95
+ * honors); AND chalk must report a usable color level, which the module-load
96
+ * check above forces to zero under `NO_COLOR`.
97
+ *
98
+ * @returns A colorizing style on a color-capable TTY, else the identity styler.
99
+ * @note Impure — {@link canColor} reads stdout's capture state and chalk's
100
+ * color level.
101
+ */
102
+ export function defaultStyle() {
103
+ return styleFor(canColor());
104
+ }
105
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../../../../src/kernel/render/style.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAoBvD,wEAAwE;AACxE,MAAM,WAAW,GAAgB;IAC/B,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI;IACpB,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI;IACnB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI;IACpB,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI;IACrB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI;IACtB,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI;CACpB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,IAAI,CAAC,OAAO;QAAE,OAAO,WAAW,CAAC;IACjC,OAAO;QACL,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAChC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QAC9B,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAChC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QAClC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;QACpC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,GAAsB;IACjD,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC3B,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC;AAC7C,CAAC;AAED,kEAAkE;AAClE,4EAA4E;AAC5E,2EAA2E;AAC3E,8EAA8E;AAC9E,8EAA8E;AAC9E,kCAAkC;AAClC,EAAE;AACF,yEAAyE;AACzE,gFAAgF;AAChF,+EAA+E;AAC/E,UAAU;AACV,IAAI,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;IAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AAE/C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,QAAQ;IACtB,OAAO,CAAC,gBAAgB,EAAE,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,194 @@
1
+ /**
2
+ * Serialize an entity's neighbourhood as Turtle — the dense form of the read.
3
+ *
4
+ * The JSON projection is faithful but expensive: one named node costs about 95
5
+ * bytes of wrapper to convey thirteen characters, and that overhead is paid per
6
+ * term. Measured on one button, structure alone was ~6.1 KB of a 15.8 KB read.
7
+ * Turtle spends the prefixes ONCE and then writes each term as itself.
8
+ *
9
+ * It is not merely shorter — it is the shape this data already has:
10
+ *
11
+ * - IRI versus literal is SYNTAX (`ds:Foo` against `"Foo"`), which is the whole
12
+ * thing the typed-term projection had to carry a `termType` field to say.
13
+ * - A blank node is `[ … ]` inline, which is exactly the record the reader
14
+ * assembles by hand for the JSON form.
15
+ * - Datatypes and language tags are native (`"x"@en`, `"2026-02-20"^^xsd:date`).
16
+ * - An inbound edge is just a triple written the other way round. The whole
17
+ * `InboundGroup` structure exists only because JSON cannot point an arrow
18
+ * backwards.
19
+ *
20
+ * Counts, samples and truncations ride as `#` comments. That is not a fallback:
21
+ * a comment is the one place a serialization can say something ABOUT the data
22
+ * without asserting it as data, and a reader — human or model — takes it the
23
+ * same way.
24
+ *
25
+ * Pure: it reads only the projection it is handed, so the same neighbourhood
26
+ * always renders the same bytes.
27
+ */
28
+ /** Characters that must be escaped inside a single-line Turtle literal. */
29
+ const ESCAPES = {
30
+ "\\": "\\\\",
31
+ '"': '\\"',
32
+ "\n": "\\n",
33
+ "\r": "\\r",
34
+ "\t": "\\t",
35
+ };
36
+ /** Whether a literal is better served by a triple-quoted long string. */
37
+ function isMultiline(value) {
38
+ return value.includes("\n");
39
+ }
40
+ /** Escape a literal for the single-line `"…"` form. */
41
+ function escapeShort(value) {
42
+ return value.replace(/[\\"\n\r\t]/g, (char) => ESCAPES[char] ?? char);
43
+ }
44
+ /**
45
+ * Escape a literal for the `"""…"""` form.
46
+ *
47
+ * Only backslashes and a trailing/tripled quote need attention there — newlines
48
+ * are the entire point of the form and must survive untouched, which is what
49
+ * keeps an embedded YAML or Markdown body readable rather than turning it into
50
+ * one `\n`-riddled line.
51
+ */
52
+ function escapeLong(value) {
53
+ return (value
54
+ .replace(/\\/g, "\\\\")
55
+ .replace(/"""/g, '\\"\\"\\"')
56
+ // A value ENDING in a quote would run straight into the closing delimiter
57
+ // and produce four quotes, which no parser reads as intended. Truncation
58
+ // makes this reachable on ordinary prose, not just on hostile input.
59
+ .replace(/"$/, '\\"'));
60
+ }
61
+ /**
62
+ * Write a name that may or may not have compacted.
63
+ *
64
+ * `compactUri` returns its input UNCHANGED when no namespace matches, so a
65
+ * datatype or predicate outside the prefix map arrived here as a bare absolute
66
+ * IRI and was emitted raw — producing `"x"^^http://example.com/type`, which no
67
+ * parser accepts. A prefixed name goes through as-is; anything else is wrapped.
68
+ */
69
+ function asName(value) {
70
+ return /^[A-Za-z][\w.-]*:[^/]/.test(value) && !value.includes("://")
71
+ ? value
72
+ : `<${value}>`;
73
+ }
74
+ /** Render one term in Turtle: a prefixed name, an `<iri>`, or a literal. */
75
+ function renderTerm(term) {
76
+ if (term.termType === "NamedNode") {
77
+ return term.prefixed ?? `<${term.value}>`;
78
+ }
79
+ if (term.termType === "BlankNode") {
80
+ // A bare `[]` — the label is store-local and re-minted on every load, so
81
+ // writing it would publish an identifier that means nothing on the next read.
82
+ return "[]";
83
+ }
84
+ const body = isMultiline(term.value)
85
+ ? `"""${escapeLong(term.value)}"""`
86
+ : `"${escapeShort(term.value)}"`;
87
+ // Direction is RDF 1.2's `@lang--dir`; it only ever accompanies a language.
88
+ if (term.language) {
89
+ return `${body}@${term.language}${term.direction ? `--${term.direction}` : ""}`;
90
+ }
91
+ if (term.datatype)
92
+ return `${body}^^${asName(term.datatype)}`;
93
+ return body;
94
+ }
95
+ /**
96
+ * `# ds:guidelines — 5,814 chars, showing 400` — states a preview as a preview.
97
+ *
98
+ * On its OWN line ABOVE the triple, never trailing it: a Turtle comment runs to
99
+ * end of line, so a note placed after the object swallows the `;` or `.` that
100
+ * terminates the statement and silently breaks the document.
101
+ */
102
+ function truncationNote(predicate, term) {
103
+ if (!term.truncated || term.length === undefined)
104
+ return undefined;
105
+ const total = term.length.toLocaleString("en-US");
106
+ return ` # ${predicate} — ${total} chars, showing ${term.value.length}`;
107
+ }
108
+ /** Render one inlined blank node as a Turtle `[ … ]` record. */
109
+ function renderNested(record) {
110
+ const fields = Object.entries(record).map(([field, value]) => {
111
+ // `type` was hoisted out of the record body on the way in; `a` is Turtle's
112
+ // own shorthand for it, so it goes back exactly where it came from.
113
+ const predicate = field === "type" ? "a" : asName(field);
114
+ return `${predicate} ${renderTerm(value)}`;
115
+ });
116
+ return `[ ${fields.join(" ; ")} ]`;
117
+ }
118
+ /** The prefixes a rendering actually uses, so the header declares no more. */
119
+ function usedPrefixes(text, prefixes) {
120
+ return Object.entries(prefixes)
121
+ .filter(([prefix]) => new RegExp(`\\b${prefix}:`).test(text))
122
+ .sort(([a], [b]) => a.localeCompare(b))
123
+ .map(([prefix, namespace]) => `@prefix ${prefix}: <${namespace}> .`);
124
+ }
125
+ /** `# rdf:type — 330 total, sample of 5` and the triples under it. */
126
+ function renderInbound(subject, group) {
127
+ const predicate = renderTerm(group.predicate);
128
+ const total = group.count.toLocaleString("en-US");
129
+ // An empty `subjects` means two different things, and conflating them told a
130
+ // lie: at `summary` EVERY group is empty because the level exhibits none, so
131
+ // claiming "none individually addressable" there libelled perfectly nameable
132
+ // subjects. Only a level that WOULD have shown exemplars can conclude that
133
+ // none exist.
134
+ const exhibits = group.exhibits ?? 0;
135
+ const note = exhibits > 0 && group.subjects.length === 0 && group.count > 0
136
+ ? `# ${predicate} — ${total} total, none individually addressable; use the noun's list verb`
137
+ : group.sampled
138
+ ? `# ${predicate} — ${total} total, sample of ${group.subjects.length}; use the noun's list verb for the full set`
139
+ : group.truncated
140
+ ? `# ${predicate} — ${total} total, showing ${group.subjects.length}`
141
+ : `# ${predicate} — ${total}`;
142
+ return [
143
+ note,
144
+ ...group.subjects.map((s) => `${renderTerm(s)} ${predicate} ${subject} .`),
145
+ ];
146
+ }
147
+ /**
148
+ * Render an entity's neighbourhood as a Turtle document.
149
+ *
150
+ * @param result - The neighbourhood projection to serialize.
151
+ * @param prefixes - The store's merged prefix map, for the `@prefix` header.
152
+ * @returns A Turtle document: header, the subject's own triples, its inlined
153
+ * blank nodes, then the edges pointing at it.
154
+ */
155
+ export function toTurtle(result, prefixes) {
156
+ const subject = result.prefixed ?? `<${result.uri}>`;
157
+ const body = [];
158
+ // The subject's own triples, one predicate per line.
159
+ const predicates = [];
160
+ for (const group of result.groups) {
161
+ const predicate = renderTerm(group.predicate);
162
+ // Blank objects are written as their inlined records instead, so they are
163
+ // skipped here — emitting both would assert the same edge twice.
164
+ const objects = group.objects.filter((o) => o.termType !== "BlankNode");
165
+ if (objects.length === 0)
166
+ continue;
167
+ const keyword = predicate === "rdf:type" ? "a" : predicate;
168
+ // Notes are folded INTO the element, above its statement, so the `;` the
169
+ // join appends always lands on the statement line. Pushed as siblings they
170
+ // would each take a separator of their own — into a comment, which runs to
171
+ // end of line and eats it.
172
+ const notes = objects
173
+ .map((o) => truncationNote(keyword, o))
174
+ .filter((n) => n !== undefined);
175
+ const rendered = objects.map(renderTerm).join(", ");
176
+ predicates.push([...notes, ` ${keyword} ${rendered}`].join("\n"));
177
+ }
178
+ for (const [via, records] of Object.entries(result.nested)) {
179
+ predicates.push(` ${via}\n ${records.map(renderNested).join(",\n ")}`);
180
+ }
181
+ if (predicates.length > 0) {
182
+ body.push(`${subject}\n${predicates.join(" ;\n")} .`);
183
+ }
184
+ if (result.inbound.length > 0) {
185
+ body.push("", "# ── referenced by ──");
186
+ for (const group of result.inbound) {
187
+ body.push(...renderInbound(subject, group));
188
+ }
189
+ }
190
+ const text = body.join("\n");
191
+ const header = usedPrefixes(text, prefixes);
192
+ return [...header, "", text].join("\n").trimEnd();
193
+ }
194
+ //# sourceMappingURL=turtle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turtle.js","sourceRoot":"","sources":["../../../../src/kernel/render/turtle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * The rendering vocabulary — the ONE place a state and the word for it meet.
3
+ *
4
+ * `doctor` reports states, `setup` plans and applies them, and both speak to
5
+ * the same reader about the same machine. For as long as each surface spelled
6
+ * the states itself — three glyph tables, two scope-label maps, two indent
7
+ * constants — the type layer and the copy layer were free to disagree, and a
8
+ * copy pass could rename a scope in every sentence while the model underneath
9
+ * kept the old word. This module ends that freedom: the statuses, their
10
+ * glyphs, the scope names, and the shared layout markers are each defined
11
+ * once, here, and every renderer reads them.
12
+ *
13
+ * The SCOPES are **global** and **local project**, chosen because they are the
14
+ * words the user already typed: `--global` and `--local`. Reading `Local
15
+ * project` above a row whose fix is `pragma setup mcp --local` is the whole
16
+ * point — the report names the flag that repairs it. (Earlier these surfaces
17
+ * said MACHINE/PROJECT, and later "global band"/"project band": a third and a
18
+ * fourth term for the same two things, and "band" is a word nobody outside
19
+ * this repository has ever used for a config scope. The type layer carried
20
+ * "band" longest — `ScopeBand`, `PlanRow.band`, a `bands.ts` — and the render
21
+ * tests now guard against either spelling coming back.)
22
+ *
23
+ * The GLYPHS are one small alphabet with fixed meanings, so the same mark
24
+ * never says two things: `✓` is work done or verified, `✗` is a real fault,
25
+ * `◇` is available-but-not-set-up, `○` is inert (nothing to act on), and `·`
26
+ * is neutral punctuation — a sub-item bullet, or a row that never ran. Doctor
27
+ * and setup map their own status tiers onto that alphabet below, which is what
28
+ * keeps a failed setup row and a failed doctor row — the same finding seen
29
+ * twice — wearing the same mark.
30
+ *
31
+ * This is the RENDERING vocabulary; the graph-domain vocabulary a distribution
32
+ * declares (`kernel/vocabulary.ts`) is a different thing with the same good
33
+ * reason for existing. Like the rest of `kernel/render/`, this module is
34
+ * statically reachable from the `--help`/`__complete` fast paths, so it
35
+ * imports NOTHING — it is inert data plus two pure one-line functions.
36
+ */
37
+ /** The user-facing display label for each of the two config scopes. */
38
+ export const SCOPE_LABELS = {
39
+ global: "Global",
40
+ project: "Local project",
41
+ };
42
+ /**
43
+ * The scope phrase in running text — the lowercase form of
44
+ * {@link SCOPE_LABELS}, plus the word for "both". Authored here rather than
45
+ * lowercased at the call site so a reader grepping for either spelling lands
46
+ * in one file.
47
+ */
48
+ export const SCOPE_PHRASES = {
49
+ global: "global",
50
+ project: "local project",
51
+ both: "global and local project",
52
+ };
53
+ // =============================================================================
54
+ // The glyph alphabet
55
+ // =============================================================================
56
+ /**
57
+ * The five marks, by meaning. Uncolored — every glyph is tinted at render
58
+ * time, never baked at module load. `summon-core`'s Ink wizard renders the
59
+ * same `success`/`failure` marks for the same meanings; the two packages
60
+ * cannot share this module (the dependency runs the other way, and the
61
+ * fast-path covenants forbid the import), so `renderVocabularySync.test.ts`
62
+ * pins the two alphabets to byte equality instead.
63
+ */
64
+ export const GLYPHS = {
65
+ /** Work done, or a state verified healthy. */
66
+ success: "✓",
67
+ /** A real fault — something set up that no longer works, or a failed row. */
68
+ failure: "✗",
69
+ /** Detected and installable, but not set up — an invitation, not a fault. */
70
+ available: "◇",
71
+ /** Inert: nothing to act on here, and nothing wrong either. */
72
+ inert: "○",
73
+ /** Neutral punctuation — a sub-item bullet, or a row that never ran. */
74
+ neutral: "·",
75
+ };
76
+ /** The arrow in front of an inline instruction (`↳ fix: …`). */
77
+ export const FIX_ARROW = "↳";
78
+ /** The bullet a check's indented sub-items carry. */
79
+ export const SUB_BULLET = GLYPHS.neutral;
80
+ /**
81
+ * The marker for a row that carries NO outcome — one the user deselected, so
82
+ * it was neither done nor skipped-for-cause. It must not be a ✓: a green check
83
+ * against work that never ran is the same lie the old recap told when it
84
+ * reported "Setup complete" over a target it had dropped.
85
+ */
86
+ export const NOT_RUN_GLYPH = GLYPHS.neutral;
87
+ // =============================================================================
88
+ // Indents
89
+ // =============================================================================
90
+ /** One indent step — every list body row starts two spaces in. */
91
+ export const INDENT = " ";
92
+ /**
93
+ * The indent that aligns a check's sub-lines under its name: the row's own
94
+ * {@link INDENT}, plus one glyph column, plus the two-space gap after it.
95
+ */
96
+ export const SUB_INDENT = " ";
97
+ /**
98
+ * Each check status's mark. `available` gets its own glyph, distinct from ✗:
99
+ * an opt-in integration that is not set up is not a fault, and rendering it as
100
+ * one would train users to ignore the failure count. The glyph pairs with the
101
+ * word in the tally, so the distinction survives with color stripped.
102
+ */
103
+ export const CHECK_GLYPHS = {
104
+ pass: GLYPHS.success,
105
+ fail: GLYPHS.failure,
106
+ available: GLYPHS.available,
107
+ skip: GLYPHS.inert,
108
+ };
109
+ /**
110
+ * The word in front of a check row's instruction, chosen by what the row IS.
111
+ *
112
+ * A `fail` and an `available` are things to repair or switch on, so they read
113
+ * `fix`. A `skip` is neither — nothing is wrong and nothing is off; the row
114
+ * simply has nothing to act on yet — so labelling its instruction `fix` would
115
+ * be the same "a skip is a fault" reading the `available` glyph exists to
116
+ * prevent. It reads `next`, which is what the line actually is.
117
+ */
118
+ export const checkRemedyWord = (status) => status === "skip" ? "next" : "fix";
119
+ /**
120
+ * Each outcome's mark. The three ways work can be complete — `done`, `noop`
121
+ * (already current), `removed` — all read ✓; the two ways a row can stand
122
+ * aside — `kept`, `skipped` — read the inert ○; only `failed` earns ✗.
123
+ */
124
+ export const OUTCOME_GLYPHS = {
125
+ done: GLYPHS.success,
126
+ noop: GLYPHS.success,
127
+ removed: GLYPHS.success,
128
+ kept: GLYPHS.inert,
129
+ skipped: GLYPHS.inert,
130
+ failed: GLYPHS.failure,
131
+ };
132
+ /**
133
+ * The word in front of a row outcome's instruction — `fix` for a row that
134
+ * failed, `next` for one that skipped. Same rule as {@link checkRemedyWord}: a
135
+ * skip is not a fault, and labelling its instruction as a repair is what
136
+ * teaches a reader to treat skips as failures.
137
+ */
138
+ export const outcomeRemedyWord = (status) => status === "failed" ? "fix" : "next";
139
+ /**
140
+ * The display label for an install source, e.g. `npm (global)`, `bun link
141
+ * (development checkout)`, `npx (ephemeral)`, `unknown (node runtime)`. The
142
+ * `via` word is the manager/runner/runtime name the detector resolved —
143
+ * absent only for a `workspace`/`linked` install whose manager could not be
144
+ * told, which then reads as the bare state.
145
+ */
146
+ export const installSourceLabel = (kind, via) => {
147
+ switch (kind) {
148
+ case "global":
149
+ return `${via} (global)`;
150
+ case "workspace":
151
+ return via ? `${via} (local project)` : "local project dependency";
152
+ case "linked":
153
+ return via
154
+ ? `${via} link (development checkout)`
155
+ : "linked (development checkout)";
156
+ case "ephemeral":
157
+ return `${via} (ephemeral)`;
158
+ case "unknown":
159
+ return `unknown (${via} runtime)`;
160
+ }
161
+ };
162
+ /**
163
+ * What each command-less install state says when a newer release exists —
164
+ * honest guidance in place of a command that would be wrong to run. The
165
+ * `linked` sentence is the load-bearing one: it replaces the `npm i -g` that
166
+ * would clobber the development link.
167
+ */
168
+ export const INSTALL_UPDATE_GUIDANCE = {
169
+ workspace: "Installed as a project dependency — update it through the project's package.json.",
170
+ linked: "Linked development checkout — update it from its source tree, or unlink it before installing a release.",
171
+ ephemeral: "Ephemeral run — invoke it again with an explicit @latest version to pick up the newest release.",
172
+ unknown: "The install method cannot be determined — update it the same way it was installed.",
173
+ };
174
+ //# sourceMappingURL=vocabulary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vocabulary.js","sourceRoot":"","sources":["../../../../src/kernel/render/vocabulary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Chunked stdout writer.
3
+ *
4
+ * Bun's runtime can segfault when a single very large string is written to
5
+ * stdout in one call; writing in ≤4 KiB pieces avoids it. Every command's final
6
+ * output goes through {@link writeStdout} so large list/graph payloads stay safe.
7
+ * Ported from the v1 `writeChunked` guard.
8
+ *
9
+ * The text is encoded to a UTF-8 `Buffer` first and sliced on byte boundaries.
10
+ * Slicing the *string* by UTF-16 unit could split an astral character's
11
+ * surrogate pair, leaving a lone surrogate that encodes to U+FFFD and corrupts
12
+ * the output; splitting raw UTF-8 bytes across writes is lossless — the
13
+ * consumer concatenates them.
14
+ */
15
+ /** Maximum bytes written per `stream.write` call. */
16
+ const CHUNK_SIZE = 4096;
17
+ /**
18
+ * Write a string to a writable stream in ≤{@link CHUNK_SIZE}-byte slices.
19
+ *
20
+ * @param stream - The destination writable stream.
21
+ * @param text - The full string to write.
22
+ * @note Impure — writes to the stream.
23
+ */
24
+ export function writeChunked(stream, text) {
25
+ const buffer = Buffer.from(text, "utf8");
26
+ if (buffer.length <= CHUNK_SIZE) {
27
+ stream.write(buffer);
28
+ return;
29
+ }
30
+ for (let offset = 0; offset < buffer.length; offset += CHUNK_SIZE) {
31
+ stream.write(buffer.subarray(offset, offset + CHUNK_SIZE));
32
+ }
33
+ }
34
+ /**
35
+ * Write a string to stdout, chunked, appending no newline.
36
+ *
37
+ * @param text - The string to write.
38
+ * @note Impure — writes to `process.stdout`.
39
+ */
40
+ export function writeStdout(text) {
41
+ writeChunked(process.stdout, text);
42
+ }
43
+ //# sourceMappingURL=writeStdout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeStdout.js","sourceRoot":"","sources":["../../../../src/kernel/render/writeStdout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,qDAAqD;AACrD,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,MAA6B,EAC7B,IAAY;IAEZ,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzC,IAAI,MAAM,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,UAAU,EAAE,CAAC;QAClE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Build the per-invocation {@link PragmaRuntime}.
3
+ *
4
+ * The runtime stays cheap and storeless to construct: `store` is a lazy handle
5
+ * (nothing boots until a `needsStore` verb calls `store.get()`), `query` is the
6
+ * facade over it, and `loadConfig` memoizes the layered-config read behind a
7
+ * dynamic import so the config reader (and its zod) never lands on the
8
+ * `--help`/`__complete` fast path. No eager I/O happens here — a storeless verb
9
+ * that only reads `globalFlags`/`cwd` touches neither the store nor config.
10
+ *
11
+ * The store's boot reads config through `loadConfig`, so the two memos are
12
+ * coupled: `store.invalidate()` (called by the MCP projector after a real
13
+ * mutation) also clears `configPromise` via the `onInvalidate` hook, so a
14
+ * re-boot re-reads config from disk instead of reusing a stale layer. On a
15
+ * long-lived MCP server that is what makes a `config_set` visible to the next
16
+ * read tool; on a one-shot CLI nothing calls `invalidate`, so it never fires.
17
+ */
18
+ import { VERSION } from "../../constants.js";
19
+ import { createQueryFacade } from "./facade.js";
20
+ import { createLazyStore } from "./store.js";
21
+ /**
22
+ * Assemble a runtime for one CLI or MCP invocation.
23
+ *
24
+ * @param globalFlags - The parsed global flags for this invocation.
25
+ * @param cwd - The directory to resolve project state against (defaults to the
26
+ * process working directory).
27
+ * @returns The runtime handed to every verb `run`.
28
+ * @note Impure by default — reads `process.cwd()` unless `cwd` is provided; the
29
+ * store/config handles it exposes do their own I/O only when used.
30
+ */
31
+ export function bootRuntime(globalFlags, cwd = process.cwd()) {
32
+ let configPromise;
33
+ const loadConfig = () => {
34
+ configPromise ??= import("../config/readConfig.js").then((module) => module.readConfig(cwd));
35
+ return configPromise;
36
+ };
37
+ const store = createLazyStore({
38
+ cwd,
39
+ loadConfig,
40
+ // Invalidating the store must also drop the config memo its boot depends on,
41
+ // so a re-boot after a mutation re-reads config from disk (never stale).
42
+ onInvalidate: () => {
43
+ configPromise = undefined;
44
+ },
45
+ });
46
+ const query = createQueryFacade(store);
47
+ return { cwd, version: VERSION, globalFlags, loadConfig, store, query };
48
+ }
49
+ //# sourceMappingURL=boot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boot.js","sourceRoot":"","sources":["../../../../src/kernel/runtime/boot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CACzB,WAAwB,EACxB,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,IAAI,aAAgD,CAAC;IACrD,MAAM,UAAU,GAAG,GAA0B,EAAE;QAC7C,aAAa,KAAK,MAAM,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAClE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CACvB,CAAC;QACF,OAAO,aAAa,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,eAAe,CAAC;QAC5B,GAAG;QACH,UAAU;QACV,6EAA6E;QAC7E,yEAAyE;QACzE,YAAY,EAAE,GAAG,EAAE;YACjB,aAAa,GAAG,SAAS,CAAC;QAC5B,CAAC;KACF,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAEvC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * The query facade — the typed spine over the lazy store.
3
+ *
4
+ * `graphql` is the default surface: it executes a document against the pack's
5
+ * precompiled schema via ke-graphql's in-process `executeLocal` (no HTTP, no
6
+ * serialization). `sparql` is the escape hatch: a raw query against the store,
7
+ * auto-prefixed by ke from the pack's prefix map. Both boot the store lazily on
8
+ * first use through the same memoized `LazyStore.get()`. ke-graphql is
9
+ * dynamic-imported so this module carries no static import of the heavy
10
+ * runtime; the ke/graphql types are referenced inline.
11
+ */
12
+ /**
13
+ * Build the query facade over a lazy store.
14
+ *
15
+ * @param store - The lazy store to query through.
16
+ * @returns The `{ graphql, sparql }` facade.
17
+ */
18
+ export function createQueryFacade(store) {
19
+ return {
20
+ async graphql(document, variables) {
21
+ const session = await store.get();
22
+ const { executeLocal } = await import("@canonical/ke-graphql");
23
+ const result = await executeLocal({
24
+ schema: session.schema,
25
+ source: document,
26
+ variableValues: variables ?? undefined,
27
+ contextValue: session.createContext(session.store),
28
+ });
29
+ // Our packs compile without @defer/@stream, so this is always a plain
30
+ // ExecutionResult (never an incremental stream).
31
+ return result;
32
+ },
33
+ async sparql(text) {
34
+ const session = await store.get();
35
+ return session.store.query(text);
36
+ },
37
+ };
38
+ }
39
+ //# sourceMappingURL=facade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facade.js","sourceRoot":"","sources":["../../../../src/kernel/runtime/facade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAgB;IAChD,OAAO;QACL,KAAK,CAAC,OAAO,CACX,QAAgB,EAChB,SAA0C;YAE1C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC;YAClC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;gBAChC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,MAAM,EAAE,QAAQ;gBAChB,cAAc,EAAE,SAAS,IAAI,SAAS;gBACtC,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC;aACnD,CAAC,CAAC;YACH,sEAAsE;YACtE,iDAAiD;YACjD,OAAO,MAA2C,CAAC;QACrD,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,IAAY;YACvB,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC;YAClC,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAa,CAEvC,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}