@canonical/pragma-cli 0.30.0 → 0.32.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 (1083) hide show
  1. package/dist/pragma +0 -0
  2. package/package.json +27 -40
  3. package/src/bin.ts +292 -11
  4. package/src/capabilities/block/blockList.verb.ts +150 -0
  5. package/src/capabilities/block/index.ts +25 -0
  6. package/src/capabilities/block/pack.ts +155 -0
  7. package/src/capabilities/block/parity.test.ts +180 -0
  8. package/src/capabilities/block/tierChain.ts +78 -0
  9. package/src/capabilities/capabilities/capabilities.render.ts +89 -0
  10. package/src/capabilities/capabilities/capabilities.test.ts +131 -0
  11. package/src/capabilities/capabilities/capabilities.verb.ts +48 -0
  12. package/src/capabilities/capabilities/catalog.ts +144 -0
  13. package/src/capabilities/capabilities/hints.ts +221 -0
  14. package/src/capabilities/capabilities/index.ts +13 -0
  15. package/src/capabilities/capabilities/types.ts +58 -0
  16. package/src/capabilities/colophon/collectColophon.ts +68 -0
  17. package/src/capabilities/colophon/colophon.render.test.ts +87 -0
  18. package/src/capabilities/colophon/colophon.render.ts +38 -0
  19. package/src/capabilities/colophon/colophon.test.ts +241 -0
  20. package/src/capabilities/colophon/colophon.verb.ts +41 -0
  21. package/src/capabilities/colophon/index.ts +6 -0
  22. package/src/capabilities/colophon/markdownTerminal.test.ts +50 -0
  23. package/src/capabilities/colophon/markdownTerminal.ts +85 -0
  24. package/src/capabilities/colophon/pragmaColophon.ts +66 -0
  25. package/src/capabilities/colophon/types.ts +29 -0
  26. package/src/capabilities/config/collectConfigShow.ts +32 -0
  27. package/src/capabilities/config/field.render.ts +28 -0
  28. package/src/capabilities/config/field.test.ts +188 -0
  29. package/src/capabilities/config/fields.ts +152 -0
  30. package/src/capabilities/config/index.ts +6 -0
  31. package/src/capabilities/config/runField.ts +59 -0
  32. package/src/capabilities/config/runSet.ts +38 -0
  33. package/src/capabilities/config/set.test.ts +207 -0
  34. package/src/capabilities/config/set.verb.ts +70 -0
  35. package/src/capabilities/config/show.render.ts +61 -0
  36. package/src/capabilities/config/show.verb.ts +45 -0
  37. package/src/capabilities/config/types.ts +27 -0
  38. package/src/capabilities/create/byteEquality.subprocess.test.ts +88 -0
  39. package/src/capabilities/create/byteEquality.test.ts +222 -0
  40. package/src/capabilities/create/compiledCreate.subprocess.test.ts +152 -0
  41. package/src/capabilities/create/create.mcp.test.ts +139 -0
  42. package/src/capabilities/create/create.render.ts +50 -0
  43. package/src/capabilities/create/create.test.ts +403 -0
  44. package/src/capabilities/create/create.verb.ts +435 -0
  45. package/src/capabilities/create/cwdJail.test.ts +129 -0
  46. package/src/capabilities/create/generatorToVerbSpec.ts +111 -0
  47. package/src/capabilities/create/index.ts +25 -0
  48. package/src/capabilities/create/pathJail.ts +73 -0
  49. package/src/capabilities/create/pickGenerator.ts +63 -0
  50. package/src/capabilities/create/templates.embedded.generated.ts +53 -0
  51. package/src/capabilities/create/types.ts +8 -0
  52. package/src/capabilities/doctor/checks/checkConfigFile.ts +41 -0
  53. package/src/capabilities/doctor/checks/checkKeStore.ts +39 -0
  54. package/src/capabilities/doctor/checks/checkMcpCommands.ts +108 -0
  55. package/src/capabilities/doctor/checks/checkMcpConfigured.ts +61 -0
  56. package/src/capabilities/doctor/checks/checkNodeVersion.ts +25 -0
  57. package/src/capabilities/doctor/checks/checkPackageRefs.ts +73 -0
  58. package/src/capabilities/doctor/checks/checkPragmaVersion.ts +22 -0
  59. package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +111 -0
  60. package/src/capabilities/doctor/checks/checkShellCompletions.ts +131 -0
  61. package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +60 -0
  62. package/src/capabilities/doctor/doctor.render.ts +116 -0
  63. package/src/capabilities/doctor/doctor.test.ts +179 -0
  64. package/src/capabilities/doctor/doctor.verb.ts +46 -0
  65. package/src/capabilities/doctor/index.ts +6 -0
  66. package/src/capabilities/doctor/runChecks.ts +76 -0
  67. package/src/capabilities/doctor/types.ts +41 -0
  68. package/src/capabilities/emptyRecovery.test.ts +112 -0
  69. package/src/capabilities/graph/index.ts +21 -0
  70. package/src/capabilities/graph/inspect.render.ts +38 -0
  71. package/src/capabilities/graph/inspect.test.ts +80 -0
  72. package/src/capabilities/graph/inspect.verb.ts +51 -0
  73. package/src/capabilities/graph/query.render.ts +77 -0
  74. package/src/capabilities/graph/query.test.ts +156 -0
  75. package/src/capabilities/graph/query.verb.ts +58 -0
  76. package/src/capabilities/graph/runQuery.ts +49 -0
  77. package/src/capabilities/index.ts +54 -0
  78. package/src/capabilities/info/collectInfo.ts +76 -0
  79. package/src/capabilities/info/index.ts +6 -0
  80. package/src/capabilities/info/info.render.ts +72 -0
  81. package/src/capabilities/info/info.test.ts +127 -0
  82. package/src/capabilities/info/info.verb.ts +46 -0
  83. package/src/capabilities/info/types.ts +42 -0
  84. package/src/capabilities/lazy.test.ts +89 -0
  85. package/src/capabilities/meta/complete.verb.ts +52 -0
  86. package/src/capabilities/meta/index.ts +15 -0
  87. package/src/capabilities/meta/mcp.verb.ts +35 -0
  88. package/src/capabilities/modifier/index.ts +15 -0
  89. package/src/capabilities/modifier/pack.ts +64 -0
  90. package/src/capabilities/ontology/index.ts +12 -0
  91. package/src/capabilities/ontology/ontology.test.ts +94 -0
  92. package/src/capabilities/ontology/queries.ts +197 -0
  93. package/src/capabilities/ontology/render.ts +87 -0
  94. package/src/capabilities/ontology/verbs.ts +170 -0
  95. package/src/capabilities/prompt/index.ts +18 -0
  96. package/src/capabilities/prompt/prompt.render.ts +70 -0
  97. package/src/capabilities/prompt/prompt.test.ts +119 -0
  98. package/src/capabilities/prompt/types.ts +30 -0
  99. package/src/capabilities/prompt/verbs.ts +93 -0
  100. package/src/capabilities/resources/index.ts +15 -0
  101. package/src/capabilities/resources/provider.ts +231 -0
  102. package/src/capabilities/resources/resources.test.ts +114 -0
  103. package/src/capabilities/roundtrip.test.ts +107 -0
  104. package/src/capabilities/setup/index.ts +6 -0
  105. package/src/capabilities/setup/operations/setupCompletions.ts +108 -0
  106. package/src/capabilities/setup/operations/setupGenerator.ts +307 -0
  107. package/src/capabilities/setup/operations/setupLsp.ts +61 -0
  108. package/src/capabilities/setup/operations/setupMcp.ts +85 -0
  109. package/src/capabilities/setup/operations/setupSkills.ts +199 -0
  110. package/src/capabilities/setup/setup.render.ts +49 -0
  111. package/src/capabilities/setup/setup.test.ts +351 -0
  112. package/src/capabilities/setup/setup.verb.ts +209 -0
  113. package/src/capabilities/setup/shell.ts +85 -0
  114. package/src/capabilities/setup/types.ts +42 -0
  115. package/src/capabilities/shared/assertExecOk.ts +106 -0
  116. package/src/capabilities/shared/packageManager.ts +62 -0
  117. package/src/capabilities/shared/registry.ts +70 -0
  118. package/src/capabilities/skill/discover.ts +178 -0
  119. package/src/capabilities/skill/index.ts +12 -0
  120. package/src/capabilities/skill/render.ts +60 -0
  121. package/src/capabilities/skill/skill.test.ts +142 -0
  122. package/src/capabilities/skill/verbs.ts +100 -0
  123. package/src/capabilities/sources/collectStatus.ts +87 -0
  124. package/src/capabilities/sources/index.ts +15 -0
  125. package/src/capabilities/sources/installSkills.ts +124 -0
  126. package/src/capabilities/sources/runUpdate.ts +407 -0
  127. package/src/capabilities/sources/sources.test.ts +642 -0
  128. package/src/capabilities/sources/status.render.ts +56 -0
  129. package/src/capabilities/sources/status.verb.ts +42 -0
  130. package/src/capabilities/sources/types.ts +51 -0
  131. package/src/capabilities/sources/update.render.ts +35 -0
  132. package/src/capabilities/sources/update.verb.ts +76 -0
  133. package/src/capabilities/standard/index.ts +18 -0
  134. package/src/capabilities/standard/pack.ts +128 -0
  135. package/src/capabilities/standard/parity.test.ts +208 -0
  136. package/src/capabilities/surface.test.ts +208 -0
  137. package/src/capabilities/tier/index.ts +19 -0
  138. package/src/capabilities/tier/lookup.render.ts +34 -0
  139. package/src/capabilities/tier/lookup.test.ts +68 -0
  140. package/src/capabilities/tier/lookup.verb.ts +44 -0
  141. package/src/capabilities/tier/pack.ts +28 -0
  142. package/src/capabilities/tier/runLookup.ts +59 -0
  143. package/src/capabilities/token/addConfig.render.ts +27 -0
  144. package/src/capabilities/token/addConfig.test.ts +62 -0
  145. package/src/capabilities/token/addConfig.verb.ts +40 -0
  146. package/src/capabilities/token/index.ts +19 -0
  147. package/src/capabilities/token/pack.ts +58 -0
  148. package/src/capabilities/token/runAddConfig.ts +95 -0
  149. package/src/capabilities/upgrade/index.ts +6 -0
  150. package/src/capabilities/upgrade/runUpgrade.ts +119 -0
  151. package/src/capabilities/upgrade/types.ts +21 -0
  152. package/src/capabilities/upgrade/upgrade.render.ts +55 -0
  153. package/src/capabilities/upgrade/upgrade.test.ts +372 -0
  154. package/src/capabilities/upgrade/upgrade.verb.ts +56 -0
  155. package/src/constants.test.ts +33 -0
  156. package/src/constants.ts +38 -68
  157. package/src/index.ts +27 -134
  158. package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +340 -0
  159. package/src/kernel/completion/bashDrive.test.ts +73 -0
  160. package/src/kernel/completion/complete.test.ts +101 -0
  161. package/src/kernel/completion/complete.ts +77 -0
  162. package/src/kernel/completion/emitScripts.test.ts +173 -0
  163. package/src/kernel/completion/emitScripts.ts +122 -0
  164. package/src/kernel/completion/entitySource.test.ts +198 -0
  165. package/src/kernel/completion/entitySource.ts +269 -0
  166. package/src/kernel/completion/index.ts +42 -0
  167. package/src/kernel/completion/model.test.ts +405 -0
  168. package/src/kernel/completion/model.ts +259 -0
  169. package/src/kernel/completion/parse.test.ts +338 -0
  170. package/src/kernel/completion/parse.ts +294 -0
  171. package/src/kernel/completion/rank.test.ts +100 -0
  172. package/src/kernel/completion/rank.ts +118 -0
  173. package/src/kernel/completion/resolve.test.ts +204 -0
  174. package/src/kernel/completion/resolve.ts +133 -0
  175. package/src/kernel/completion/safety.test.ts +374 -0
  176. package/src/kernel/completion/templates/bash.ts +249 -0
  177. package/src/kernel/completion/templates/fish.ts +245 -0
  178. package/src/kernel/completion/templates/shared.ts +134 -0
  179. package/src/kernel/completion/templates/zsh.ts +246 -0
  180. package/src/kernel/completion/types.ts +153 -0
  181. package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +11 -0
  182. package/src/kernel/config/defaults.ts +28 -0
  183. package/src/kernel/config/evaluateProjectConfig.ts +119 -0
  184. package/src/kernel/config/findProjectConfig.ts +45 -0
  185. package/src/kernel/config/firstRun.test.ts +60 -0
  186. package/src/kernel/config/firstRun.ts +91 -0
  187. package/src/kernel/config/globalConfig.ts +94 -0
  188. package/src/kernel/config/index.ts +35 -0
  189. package/src/kernel/config/paths.ts +39 -0
  190. package/src/kernel/config/readConfig.test.ts +245 -0
  191. package/src/kernel/config/readConfig.ts +94 -0
  192. package/src/kernel/config/schema.ts +56 -0
  193. package/src/kernel/config/types.ts +106 -0
  194. package/src/kernel/config/writeConfigField.ts +82 -0
  195. package/src/kernel/error/PragmaError.test.ts +119 -0
  196. package/src/kernel/error/PragmaError.ts +182 -0
  197. package/src/kernel/error/constants.ts +38 -0
  198. package/src/kernel/error/fromTaskError.test.ts +83 -0
  199. package/src/kernel/error/fromTaskError.ts +80 -0
  200. package/src/kernel/error/index.ts +23 -0
  201. package/src/kernel/error/recovery.test.ts +60 -0
  202. package/src/kernel/error/recovery.ts +49 -0
  203. package/src/kernel/error/renderError.ts +101 -0
  204. package/src/kernel/error/serialize.ts +28 -0
  205. package/src/kernel/error/types.ts +62 -0
  206. package/src/kernel/packs/collect.test.ts +138 -0
  207. package/src/kernel/packs/collect.ts +108 -0
  208. package/src/kernel/packs/compile.test.ts +229 -0
  209. package/src/kernel/packs/compile.ts +315 -0
  210. package/src/kernel/packs/disclosure.test.ts +200 -0
  211. package/src/kernel/packs/disclosure.ts +98 -0
  212. package/src/kernel/packs/glob.ts +39 -0
  213. package/src/kernel/packs/graphql/buildLookupDocument.ts +397 -0
  214. package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +217 -0
  215. package/src/kernel/packs/graphql/nameMap.ts +67 -0
  216. package/src/kernel/packs/graphqlSource.test.ts +383 -0
  217. package/src/kernel/packs/iri.ts +78 -0
  218. package/src/kernel/packs/renderPack.ts +196 -0
  219. package/src/kernel/packs/resolveEntity.ts +232 -0
  220. package/src/kernel/packs/runBodies.ts +157 -0
  221. package/src/kernel/packs/sample.ts +60 -0
  222. package/src/kernel/packs/schema.ts +328 -0
  223. package/src/kernel/packs/sparql/applyFilters.ts +83 -0
  224. package/src/kernel/packs/sparql/applySearch.ts +33 -0
  225. package/src/kernel/packs/sparql/buildLookupQuery.ts +180 -0
  226. package/src/kernel/packs/sparql/escape.ts +22 -0
  227. package/src/kernel/packs/sparql/runSelect.test.ts +80 -0
  228. package/src/kernel/packs/sparql/runSelect.ts +84 -0
  229. package/src/kernel/packs/toolDescription.test.ts +81 -0
  230. package/src/kernel/packs/types.ts +337 -0
  231. package/src/kernel/packs/uniqueness.ts +35 -0
  232. package/src/kernel/project/cli/buildProgram.test.ts +387 -0
  233. package/src/kernel/project/cli/buildProgram.ts +280 -0
  234. package/src/kernel/project/cli/dispatch.test.ts +288 -0
  235. package/src/kernel/project/cli/dispatch.ts +334 -0
  236. package/src/kernel/project/cli/exitCodes.test.ts +59 -0
  237. package/src/kernel/project/cli/exitCodes.ts +68 -0
  238. package/src/kernel/project/cli/globalFlags.test.ts +99 -0
  239. package/src/kernel/project/cli/globalFlags.ts +149 -0
  240. package/src/kernel/project/cli/helpFormat.ts +58 -0
  241. package/src/kernel/project/cli/index.ts +21 -0
  242. package/src/kernel/project/cli/interactionSeam.test.ts +99 -0
  243. package/src/kernel/project/cli/rootHelp.ts +218 -0
  244. package/src/kernel/project/cli/suggest.test.ts +54 -0
  245. package/src/kernel/project/cli/suggest.ts +67 -0
  246. package/src/kernel/project/cli/suggestNames.ts +122 -0
  247. package/src/kernel/project/cli/verbHelp.test.ts +138 -0
  248. package/src/kernel/project/cli/verbHelp.ts +144 -0
  249. package/src/kernel/project/mcp/buildServer.ts +70 -0
  250. package/src/kernel/project/mcp/envelope.ts +44 -0
  251. package/src/kernel/project/mcp/index.ts +8 -0
  252. package/src/kernel/project/mcp/instructions.ts +48 -0
  253. package/src/kernel/project/mcp/parity.test.ts +72 -0
  254. package/src/kernel/project/mcp/prompts/prompts.test.ts +96 -0
  255. package/src/kernel/project/mcp/prompts/provider.ts +74 -0
  256. package/src/kernel/project/mcp/prompts/source.ts +194 -0
  257. package/src/kernel/project/mcp/registerVerb.test.ts +238 -0
  258. package/src/kernel/project/mcp/registerVerb.ts +296 -0
  259. package/src/kernel/project/mcp/serve.ts +34 -0
  260. package/src/kernel/project/mcp/toolDescriptions.test.ts +80 -0
  261. package/src/kernel/render/__snapshots__/renderers.test.ts.snap +127 -0
  262. package/src/kernel/render/compactUri.ts +25 -0
  263. package/src/kernel/render/contracts.ts +72 -0
  264. package/src/kernel/render/disclosure.ts +44 -0
  265. package/src/kernel/render/envelope.ts +50 -0
  266. package/src/kernel/render/formatters.ts +30 -0
  267. package/src/kernel/render/index.ts +30 -0
  268. package/src/kernel/render/prefixes.ts +21 -0
  269. package/src/kernel/render/renderers.test.ts +171 -0
  270. package/src/kernel/render/renderers.ts +429 -0
  271. package/src/kernel/render/writeStdout.test.ts +43 -0
  272. package/src/kernel/render/writeStdout.ts +49 -0
  273. package/src/kernel/runtime/boot.test.ts +69 -0
  274. package/src/kernel/runtime/boot.ts +59 -0
  275. package/src/kernel/runtime/facade.test.ts +125 -0
  276. package/src/kernel/runtime/facade.ts +47 -0
  277. package/src/kernel/runtime/graphpack/build.ts +148 -0
  278. package/src/kernel/runtime/graphpack/buildIndex.ts +229 -0
  279. package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +8 -0
  280. package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +4 -0
  281. package/src/kernel/runtime/graphpack/embedded/sample.ttl +39 -0
  282. package/src/kernel/runtime/graphpack/embedded.ts +70 -0
  283. package/src/kernel/runtime/graphpack/graphpack.test.ts +153 -0
  284. package/src/kernel/runtime/graphpack/hash.ts +46 -0
  285. package/src/kernel/runtime/graphpack/index.ts +21 -0
  286. package/src/kernel/runtime/graphpack/manifest.ts +55 -0
  287. package/src/kernel/runtime/graphpack/read.ts +102 -0
  288. package/src/kernel/runtime/graphpack/types.ts +111 -0
  289. package/src/kernel/runtime/index.ts +15 -0
  290. package/src/kernel/runtime/loadSession.ts +56 -0
  291. package/src/kernel/runtime/lock.ts +90 -0
  292. package/src/kernel/runtime/paths.ts +37 -0
  293. package/src/kernel/runtime/probe.test.ts +16 -0
  294. package/src/kernel/runtime/probe.ts +39 -0
  295. package/src/kernel/runtime/readEntity.ts +83 -0
  296. package/src/kernel/runtime/refs/gitOps.ts +88 -0
  297. package/src/kernel/runtime/refs/parseRef.test.ts +34 -0
  298. package/src/kernel/runtime/refs/parseRef.ts +103 -0
  299. package/src/kernel/runtime/refs/resolve.ts +320 -0
  300. package/src/kernel/runtime/resolveSources.test.ts +154 -0
  301. package/src/kernel/runtime/resolveSources.ts +66 -0
  302. package/src/kernel/runtime/store.test.ts +94 -0
  303. package/src/kernel/runtime/store.ts +90 -0
  304. package/src/kernel/runtime/storeless.test.ts +86 -0
  305. package/src/kernel/runtime/types.ts +210 -0
  306. package/src/kernel/runtime/wasmEmbed.test.ts +142 -0
  307. package/src/kernel/spec/asVerb.ts +23 -0
  308. package/src/kernel/spec/emitSurface.test.ts +65 -0
  309. package/src/kernel/spec/emitSurface.ts +223 -0
  310. package/src/kernel/spec/index.ts +34 -0
  311. package/src/kernel/spec/surfaceConformance.test.ts +94 -0
  312. package/src/kernel/spec/surfaceConformance.ts +135 -0
  313. package/src/kernel/spec/types.ts +233 -0
  314. package/src/kernel/spec/validate.test.ts +81 -0
  315. package/src/kernel/spec/validate.ts +125 -0
  316. package/src/testing/PARITY_GAPS.test.ts +32 -0
  317. package/src/testing/PARITY_GAPS.ts +179 -0
  318. package/src/testing/behavioral/README.md +164 -0
  319. package/src/testing/behavioral/agentSession.mcp.test.ts +160 -0
  320. package/src/testing/behavioral/autoLlm.e2e.test.ts +44 -0
  321. package/src/testing/behavioral/completion.test.ts +132 -0
  322. package/src/testing/behavioral/disclosure.test.ts +103 -0
  323. package/src/testing/behavioral/errorMatrix.mcp.test.ts +120 -0
  324. package/src/testing/behavioral/errorMatrix.storeless.test.ts +123 -0
  325. package/src/testing/behavioral/exitCodes.e2e.test.ts +53 -0
  326. package/src/testing/behavioral/firstRun.e2e.test.ts +40 -0
  327. package/src/testing/behavioral/harness.foundation.test.ts +136 -0
  328. package/src/testing/behavioral/journeys.cli.test.ts +129 -0
  329. package/src/testing/behavioral/liveReadSurface.ts +80 -0
  330. package/src/testing/behavioral/mcpServe.e2e.test.ts +21 -0
  331. package/src/testing/behavioral/mcpSurface.test.ts +139 -0
  332. package/src/testing/behavioral/parity.test.ts +224 -0
  333. package/src/testing/behavioral/rootCli.e2e.test.ts +62 -0
  334. package/src/testing/eval/__snapshots__/eval.test.ts.snap +201 -0
  335. package/src/testing/eval/cases/assembly.ts +195 -0
  336. package/src/testing/eval/cases/effectful.ts +245 -0
  337. package/src/testing/eval/cases/readNouns.ts +232 -0
  338. package/src/testing/eval/cases/stable.ts +163 -0
  339. package/src/testing/eval/eval.test.ts +74 -0
  340. package/src/testing/eval/harness.ts +91 -0
  341. package/src/testing/eval/report.ts +58 -0
  342. package/src/testing/fixtures/blockGraph.ts +112 -0
  343. package/src/testing/fixtures/completionFixture.ts +239 -0
  344. package/src/testing/fixtures/fixtureCapability.ts +175 -0
  345. package/src/testing/fixtures/graph/canonical.ts +184 -0
  346. package/src/testing/fixtures/packs/recipe.ts +78 -0
  347. package/src/testing/helpers/fixtureGraph.ts +148 -0
  348. package/src/testing/helpers/golden.ts +45 -0
  349. package/src/testing/helpers/packRuntime.ts +118 -0
  350. package/src/testing/helpers/parity.ts +86 -0
  351. package/src/testing/helpers/projectCli.ts +35 -0
  352. package/src/testing/helpers/projectMcp.ts +145 -0
  353. package/src/testing/helpers/runCli.ts +128 -0
  354. package/src/testing/perf/budgets.test.ts +164 -0
  355. package/src/testing/perf/budgets.ts +37 -0
  356. package/src/testing/perf/globalSetup.ts +30 -0
  357. package/src/testing/perf/measure.ts +97 -0
  358. package/src/testing/setupXdgIsolation.ts +17 -5
  359. package/src/types.ts +42 -0
  360. package/README.md +0 -429
  361. package/src/bin.test.ts +0 -54
  362. package/src/compile-validation.runner.ts +0 -137
  363. package/src/compile-validation.ts +0 -191
  364. package/src/completions/computeSocketPath.test.ts +0 -26
  365. package/src/completions/computeSocketPath.ts +0 -16
  366. package/src/completions/constants.ts +0 -18
  367. package/src/completions/handleQuery.test.ts +0 -93
  368. package/src/completions/handleQuery.ts +0 -30
  369. package/src/completions/index.ts +0 -14
  370. package/src/completions/queryCompletions.test.ts +0 -100
  371. package/src/completions/queryCompletions.ts +0 -61
  372. package/src/completions/querySocket.test.ts +0 -70
  373. package/src/completions/querySocket.ts +0 -44
  374. package/src/completions/startCompletionsServer.test.ts +0 -74
  375. package/src/completions/startCompletionsServer.ts +0 -75
  376. package/src/completions/startCompletionsServer.unit.test.ts +0 -131
  377. package/src/completions/waitForSocket.test.ts +0 -27
  378. package/src/completions/waitForSocket.ts +0 -27
  379. package/src/config/configExists.ts +0 -14
  380. package/src/config/defaultConfig.test.ts +0 -33
  381. package/src/config/defaultConfig.ts +0 -59
  382. package/src/config/defaults.json +0 -17
  383. package/src/config/findProjectConfigPath.test.ts +0 -53
  384. package/src/config/findProjectConfigPath.ts +0 -36
  385. package/src/config/index.ts +0 -21
  386. package/src/config/mergeConfigFileUpdate.ts +0 -58
  387. package/src/config/parseConfigValues.ts +0 -215
  388. package/src/config/readConfig.test.ts +0 -395
  389. package/src/config/readConfig.ts +0 -21
  390. package/src/config/readConfigLayers.test.ts +0 -107
  391. package/src/config/readConfigLayers.ts +0 -115
  392. package/src/config/resolveConfigPath.test.ts +0 -20
  393. package/src/config/resolveConfigPath.ts +0 -11
  394. package/src/config/resolveGlobalConfigPath.ts +0 -13
  395. package/src/config/resolveWriteConfigPath.test.ts +0 -53
  396. package/src/config/resolveWriteConfigPath.ts +0 -31
  397. package/src/config/types.ts +0 -121
  398. package/src/config/writeConfig.ts +0 -37
  399. package/src/domains/block/blockConfig.ts +0 -97
  400. package/src/domains/block/commands/index.ts +0 -5
  401. package/src/domains/block/commands/list.test.ts +0 -111
  402. package/src/domains/block/commands/list.ts +0 -11
  403. package/src/domains/block/commands/lookup.test.ts +0 -187
  404. package/src/domains/block/commands/lookup.ts +0 -14
  405. package/src/domains/block/commands/sample.ts +0 -55
  406. package/src/domains/block/formatters/index.ts +0 -5
  407. package/src/domains/block/formatters/list.test.ts +0 -107
  408. package/src/domains/block/formatters/list.ts +0 -50
  409. package/src/domains/block/formatters/lookup.test.ts +0 -318
  410. package/src/domains/block/formatters/lookup.ts +0 -149
  411. package/src/domains/block/formatters/sample.ts +0 -21
  412. package/src/domains/block/formatters/types.ts +0 -16
  413. package/src/domains/block/helpers/index.ts +0 -4
  414. package/src/domains/block/helpers/resolveAspects.test.ts +0 -64
  415. package/src/domains/block/helpers/resolveAspects.ts +0 -35
  416. package/src/domains/block/index.ts +0 -25
  417. package/src/domains/block/mcp/index.ts +0 -2
  418. package/src/domains/block/mcp/specs.ts +0 -67
  419. package/src/domains/block/operations/index.ts +0 -5
  420. package/src/domains/block/operations/list.test.ts +0 -80
  421. package/src/domains/block/operations/list.ts +0 -72
  422. package/src/domains/block/operations/lookup.test.ts +0 -129
  423. package/src/domains/block/operations/lookup.ts +0 -446
  424. package/src/domains/block/operations/sample.ts +0 -41
  425. package/src/domains/block/orchestration/blockEmptyError.test.ts +0 -26
  426. package/src/domains/block/orchestration/blockEmptyError.ts +0 -19
  427. package/src/domains/block/orchestration/buildBlockFilters.ts +0 -12
  428. package/src/domains/block/orchestration/enrichBlocks.ts +0 -41
  429. package/src/domains/block/orchestration/index.ts +0 -5
  430. package/src/domains/block/orchestration/resolveBlockList.ts +0 -39
  431. package/src/domains/block/orchestration/resolveBlockLookup.ts +0 -35
  432. package/src/domains/block/stories.test.ts +0 -28
  433. package/src/domains/block/stories.ts +0 -254
  434. package/src/domains/block/types.ts +0 -30
  435. package/src/domains/config/commands/channel.test.ts +0 -112
  436. package/src/domains/config/commands/channel.ts +0 -86
  437. package/src/domains/config/commands/configScope.ts +0 -46
  438. package/src/domains/config/commands/framework.test.ts +0 -105
  439. package/src/domains/config/commands/framework.ts +0 -91
  440. package/src/domains/config/commands/index.ts +0 -6
  441. package/src/domains/config/commands/show.test.ts +0 -61
  442. package/src/domains/config/commands/show.ts +0 -11
  443. package/src/domains/config/commands/tier.test.ts +0 -95
  444. package/src/domains/config/commands/tier.ts +0 -84
  445. package/src/domains/config/commands/trace.test.ts +0 -165
  446. package/src/domains/config/commands/trace.ts +0 -83
  447. package/src/domains/config/formatters/channel.test.ts +0 -70
  448. package/src/domains/config/formatters/channel.ts +0 -37
  449. package/src/domains/config/formatters/framework.ts +0 -37
  450. package/src/domains/config/formatters/index.ts +0 -6
  451. package/src/domains/config/formatters/show.test.ts +0 -153
  452. package/src/domains/config/formatters/show.ts +0 -89
  453. package/src/domains/config/formatters/tier.test.ts +0 -86
  454. package/src/domains/config/formatters/tier.ts +0 -48
  455. package/src/domains/config/formatters/trace.ts +0 -28
  456. package/src/domains/config/index.ts +0 -36
  457. package/src/domains/config/mcp/index.ts +0 -2
  458. package/src/domains/config/mcp/specs.ts +0 -100
  459. package/src/domains/config/operations/index.ts +0 -6
  460. package/src/domains/config/operations/show.test.ts +0 -78
  461. package/src/domains/config/operations/show.ts +0 -48
  462. package/src/domains/config/operations/types.ts +0 -20
  463. package/src/domains/config/operations/validateChannel.test.ts +0 -36
  464. package/src/domains/config/operations/validateChannel.ts +0 -24
  465. package/src/domains/config/operations/validateFramework.ts +0 -24
  466. package/src/domains/config/operations/validateTier.test.ts +0 -56
  467. package/src/domains/config/operations/validateTier.ts +0 -35
  468. package/src/domains/config/stories.ts +0 -42
  469. package/src/domains/config/tasks/index.ts +0 -6
  470. package/src/domains/config/tasks/setChannel.ts +0 -21
  471. package/src/domains/config/tasks/setFramework.ts +0 -21
  472. package/src/domains/config/tasks/setTier.ts +0 -20
  473. package/src/domains/config/tasks/setTrace.ts +0 -20
  474. package/src/domains/config/tasks/writeConfigField.ts +0 -41
  475. package/src/domains/create/commands/component.test.ts +0 -166
  476. package/src/domains/create/commands/component.ts +0 -123
  477. package/src/domains/create/commands/index.ts +0 -3
  478. package/src/domains/create/commands/package.test.ts +0 -35
  479. package/src/domains/create/commands/package.ts +0 -21
  480. package/src/domains/create/generators.ts +0 -8
  481. package/src/domains/create/index.ts +0 -15
  482. package/src/domains/create/mcp/index.ts +0 -2
  483. package/src/domains/create/mcp/specs.ts +0 -168
  484. package/src/domains/doctor/commands/doctor.test.ts +0 -75
  485. package/src/domains/doctor/commands/doctor.ts +0 -43
  486. package/src/domains/doctor/commands/index.ts +0 -2
  487. package/src/domains/doctor/formatters/doctor.test.ts +0 -117
  488. package/src/domains/doctor/formatters/doctor.ts +0 -84
  489. package/src/domains/doctor/formatters/index.ts +0 -2
  490. package/src/domains/doctor/index.ts +0 -9
  491. package/src/domains/doctor/mcp/index.ts +0 -2
  492. package/src/domains/doctor/mcp/specs.ts +0 -41
  493. package/src/domains/doctor/operations/checks/checkConfigFile.ts +0 -42
  494. package/src/domains/doctor/operations/checks/checkKeStore.ts +0 -38
  495. package/src/domains/doctor/operations/checks/checkMcpCommands.ts +0 -130
  496. package/src/domains/doctor/operations/checks/checkMcpConfigured.ts +0 -65
  497. package/src/domains/doctor/operations/checks/checkNodeVersion.ts +0 -25
  498. package/src/domains/doctor/operations/checks/checkPackageRefs.ts +0 -58
  499. package/src/domains/doctor/operations/checks/checkPragmaVersion.ts +0 -20
  500. package/src/domains/doctor/operations/checks/checkShellCompletions.ts +0 -42
  501. package/src/domains/doctor/operations/checks/checkSkillsSymlinked.ts +0 -64
  502. package/src/domains/doctor/operations/checks/index.ts +0 -10
  503. package/src/domains/doctor/operations/checks.test.ts +0 -305
  504. package/src/domains/doctor/operations/index.ts +0 -3
  505. package/src/domains/doctor/operations/runChecks.test.ts +0 -176
  506. package/src/domains/doctor/operations/runChecks.ts +0 -78
  507. package/src/domains/doctor/operations/types.ts +0 -20
  508. package/src/domains/graph/commands/index.ts +0 -4
  509. package/src/domains/graph/commands/inspect.test.ts +0 -94
  510. package/src/domains/graph/commands/inspect.ts +0 -63
  511. package/src/domains/graph/commands/query.test.ts +0 -92
  512. package/src/domains/graph/commands/query.ts +0 -60
  513. package/src/domains/graph/formatters/index.ts +0 -4
  514. package/src/domains/graph/formatters/inspect.ts +0 -50
  515. package/src/domains/graph/formatters/query.ts +0 -37
  516. package/src/domains/graph/helpers/index.ts +0 -3
  517. package/src/domains/graph/helpers/resolveUri.test.ts +0 -50
  518. package/src/domains/graph/helpers/resolveUri.ts +0 -77
  519. package/src/domains/graph/index.ts +0 -22
  520. package/src/domains/graph/mcp/index.ts +0 -2
  521. package/src/domains/graph/mcp/specs.ts +0 -82
  522. package/src/domains/graph/operations/executeQuery.test.ts +0 -68
  523. package/src/domains/graph/operations/executeQuery.ts +0 -32
  524. package/src/domains/graph/operations/index.ts +0 -4
  525. package/src/domains/graph/operations/inspectUri.test.ts +0 -101
  526. package/src/domains/graph/operations/inspectUri.ts +0 -64
  527. package/src/domains/graphql/commands/build.test.ts +0 -196
  528. package/src/domains/graphql/commands/build.ts +0 -117
  529. package/src/domains/graphql/commands/check.test.ts +0 -141
  530. package/src/domains/graphql/commands/check.ts +0 -81
  531. package/src/domains/graphql/commands/index.ts +0 -5
  532. package/src/domains/graphql/commands/serve.test.ts +0 -40
  533. package/src/domains/graphql/commands/serve.ts +0 -131
  534. package/src/domains/graphql/constants.ts +0 -10
  535. package/src/domains/graphql/formatters/index.ts +0 -3
  536. package/src/domains/graphql/formatters/report.ts +0 -78
  537. package/src/domains/graphql/helpers/gatherSources.test.ts +0 -92
  538. package/src/domains/graphql/helpers/gatherSources.ts +0 -58
  539. package/src/domains/graphql/helpers/index.ts +0 -6
  540. package/src/domains/graphql/helpers/parsePrefixes.test.ts +0 -44
  541. package/src/domains/graphql/helpers/parsePrefixes.ts +0 -38
  542. package/src/domains/graphql/helpers/resolveSourceFiles.test.ts +0 -56
  543. package/src/domains/graphql/helpers/resolveSourceFiles.ts +0 -45
  544. package/src/domains/graphql/helpers/routeGraphql.test.ts +0 -43
  545. package/src/domains/graphql/helpers/routeGraphql.ts +0 -28
  546. package/src/domains/graphql/index.ts +0 -24
  547. package/src/domains/graphql/operations/compileSchema.test.ts +0 -95
  548. package/src/domains/graphql/operations/compileSchema.ts +0 -107
  549. package/src/domains/graphql/operations/createSchemaServer.test.ts +0 -50
  550. package/src/domains/graphql/operations/createSchemaServer.ts +0 -75
  551. package/src/domains/graphql/operations/index.ts +0 -12
  552. package/src/domains/graphql/types.ts +0 -29
  553. package/src/domains/info/commands/index.ts +0 -4
  554. package/src/domains/info/commands/info.test.ts +0 -88
  555. package/src/domains/info/commands/info.ts +0 -47
  556. package/src/domains/info/commands/upgrade.test.ts +0 -183
  557. package/src/domains/info/commands/upgrade.ts +0 -153
  558. package/src/domains/info/constants.test.ts +0 -22
  559. package/src/domains/info/constants.ts +0 -15
  560. package/src/domains/info/formatters/index.ts +0 -8
  561. package/src/domains/info/formatters/info.test.ts +0 -207
  562. package/src/domains/info/formatters/info.ts +0 -131
  563. package/src/domains/info/formatters/upgrade.test.ts +0 -133
  564. package/src/domains/info/formatters/upgrade.ts +0 -68
  565. package/src/domains/info/index.ts +0 -9
  566. package/src/domains/info/mcp/index.ts +0 -2
  567. package/src/domains/info/mcp/specs.ts +0 -65
  568. package/src/domains/info/operations/checkRegistryVersion.test.ts +0 -124
  569. package/src/domains/info/operations/checkRegistryVersion.ts +0 -45
  570. package/src/domains/info/operations/collectInfo.test.ts +0 -122
  571. package/src/domains/info/operations/collectInfo.ts +0 -94
  572. package/src/domains/info/operations/collectStoreSummary.test.ts +0 -61
  573. package/src/domains/info/operations/collectStoreSummary.ts +0 -42
  574. package/src/domains/info/operations/index.ts +0 -5
  575. package/src/domains/info/types.test-d.ts +0 -35
  576. package/src/domains/info/types.ts +0 -54
  577. package/src/domains/llm/capabilities.test.ts +0 -91
  578. package/src/domains/llm/commands/capabilities.ts +0 -28
  579. package/src/domains/llm/commands/index.ts +0 -4
  580. package/src/domains/llm/commands/llm.ts +0 -37
  581. package/src/domains/llm/data/commandReference.ts +0 -97
  582. package/src/domains/llm/data/decisionTrees.ts +0 -50
  583. package/src/domains/llm/data/index.ts +0 -6
  584. package/src/domains/llm/data/toolCatalog.ts +0 -190
  585. package/src/domains/llm/formatters/capabilities.ts +0 -50
  586. package/src/domains/llm/formatters/index.ts +0 -4
  587. package/src/domains/llm/formatters/orientation.ts +0 -53
  588. package/src/domains/llm/index.ts +0 -9
  589. package/src/domains/llm/llmCommand.test.ts +0 -93
  590. package/src/domains/llm/mcp/index.ts +0 -2
  591. package/src/domains/llm/mcp/specs.ts +0 -94
  592. package/src/domains/llm/operations/collectContext.ts +0 -47
  593. package/src/domains/llm/operations/index.ts +0 -3
  594. package/src/domains/llm/types.ts +0 -72
  595. package/src/domains/modifier/commands/index.ts +0 -5
  596. package/src/domains/modifier/commands/list.test.ts +0 -57
  597. package/src/domains/modifier/commands/list.ts +0 -9
  598. package/src/domains/modifier/commands/lookup.test.ts +0 -91
  599. package/src/domains/modifier/commands/lookup.ts +0 -14
  600. package/src/domains/modifier/commands/sample.ts +0 -53
  601. package/src/domains/modifier/formatters/index.ts +0 -8
  602. package/src/domains/modifier/formatters/list.test.ts +0 -38
  603. package/src/domains/modifier/formatters/list.ts +0 -22
  604. package/src/domains/modifier/formatters/lookup.test.ts +0 -33
  605. package/src/domains/modifier/formatters/lookup.ts +0 -50
  606. package/src/domains/modifier/formatters/sample.ts +0 -15
  607. package/src/domains/modifier/index.ts +0 -27
  608. package/src/domains/modifier/mcp/index.ts +0 -2
  609. package/src/domains/modifier/mcp/specs.ts +0 -65
  610. package/src/domains/modifier/modifierConfig.ts +0 -36
  611. package/src/domains/modifier/operations/index.ts +0 -5
  612. package/src/domains/modifier/operations/list.test.ts +0 -39
  613. package/src/domains/modifier/operations/list.ts +0 -41
  614. package/src/domains/modifier/operations/lookup.test.ts +0 -37
  615. package/src/domains/modifier/operations/lookup.ts +0 -67
  616. package/src/domains/modifier/operations/sample.ts +0 -32
  617. package/src/domains/modifier/orchestration/index.ts +0 -3
  618. package/src/domains/modifier/orchestration/modifierEmptyError.test.ts +0 -26
  619. package/src/domains/modifier/orchestration/modifierEmptyError.ts +0 -15
  620. package/src/domains/modifier/orchestration/resolveModifierList.ts +0 -16
  621. package/src/domains/modifier/orchestration/resolveModifierLookup.ts +0 -33
  622. package/src/domains/modifier/stories.test.ts +0 -20
  623. package/src/domains/modifier/stories.ts +0 -77
  624. package/src/domains/modifier/types.ts +0 -5
  625. package/src/domains/ontology/commands/index.ts +0 -4
  626. package/src/domains/ontology/commands/list.test.ts +0 -82
  627. package/src/domains/ontology/commands/list.ts +0 -11
  628. package/src/domains/ontology/commands/show.test.ts +0 -103
  629. package/src/domains/ontology/commands/show.ts +0 -14
  630. package/src/domains/ontology/formatters/index.ts +0 -4
  631. package/src/domains/ontology/formatters/list.ts +0 -39
  632. package/src/domains/ontology/formatters/show.ts +0 -105
  633. package/src/domains/ontology/helpers/findNamespace.ts +0 -23
  634. package/src/domains/ontology/helpers/index.ts +0 -7
  635. package/src/domains/ontology/helpers/queryClasses.ts +0 -50
  636. package/src/domains/ontology/helpers/queryProperties.ts +0 -57
  637. package/src/domains/ontology/helpers/resolvePrefix.ts +0 -45
  638. package/src/domains/ontology/index.ts +0 -26
  639. package/src/domains/ontology/mcp/index.ts +0 -2
  640. package/src/domains/ontology/mcp/specs.ts +0 -16
  641. package/src/domains/ontology/operations/index.ts +0 -5
  642. package/src/domains/ontology/operations/listOntologies.test.ts +0 -45
  643. package/src/domains/ontology/operations/listOntologies.ts +0 -101
  644. package/src/domains/ontology/operations/showOntology.test.ts +0 -65
  645. package/src/domains/ontology/operations/showOntology.ts +0 -41
  646. package/src/domains/ontology/operations/showOntologyRaw.test.ts +0 -39
  647. package/src/domains/ontology/operations/showOntologyRaw.ts +0 -50
  648. package/src/domains/ontology/stories.test.ts +0 -36
  649. package/src/domains/ontology/stories.ts +0 -108
  650. package/src/domains/refs/commands/updateRefs.ts +0 -52
  651. package/src/domains/refs/formatters/updateRefs.ts +0 -27
  652. package/src/domains/refs/index.ts +0 -27
  653. package/src/domains/refs/operations/gitOps.test.ts +0 -155
  654. package/src/domains/refs/operations/gitOps.ts +0 -92
  655. package/src/domains/refs/operations/index.ts +0 -10
  656. package/src/domains/refs/operations/parseRef.test.ts +0 -157
  657. package/src/domains/refs/operations/parseRef.ts +0 -114
  658. package/src/domains/refs/operations/paths.test.ts +0 -98
  659. package/src/domains/refs/operations/paths.ts +0 -91
  660. package/src/domains/refs/operations/readGlobalRefs.test.ts +0 -63
  661. package/src/domains/refs/operations/readGlobalRefs.ts +0 -37
  662. package/src/domains/refs/operations/updateRefs.test.ts +0 -167
  663. package/src/domains/refs/operations/updateRefs.ts +0 -181
  664. package/src/domains/setup/commands/all.ts +0 -58
  665. package/src/domains/setup/commands/completions.ts +0 -85
  666. package/src/domains/setup/commands/entrypoints.test.ts +0 -170
  667. package/src/domains/setup/commands/index.ts +0 -6
  668. package/src/domains/setup/commands/lsp.ts +0 -49
  669. package/src/domains/setup/commands/mcp.ts +0 -119
  670. package/src/domains/setup/commands/skills.test.ts +0 -68
  671. package/src/domains/setup/commands/skills.ts +0 -110
  672. package/src/domains/setup/formatters/index.ts +0 -2
  673. package/src/domains/setup/formatters/skills.test.ts +0 -103
  674. package/src/domains/setup/formatters/skills.ts +0 -112
  675. package/src/domains/setup/formatters/types.ts +0 -7
  676. package/src/domains/setup/helpers/completionScripts.test.ts +0 -58
  677. package/src/domains/setup/helpers/completionScripts.ts +0 -92
  678. package/src/domains/setup/helpers/constants.ts +0 -2
  679. package/src/domains/setup/helpers/detectShell.test.ts +0 -48
  680. package/src/domains/setup/helpers/detectShell.ts +0 -20
  681. package/src/domains/setup/helpers/index.ts +0 -12
  682. package/src/domains/setup/helpers/runSetupTask.test.ts +0 -277
  683. package/src/domains/setup/helpers/runSetupTask.ts +0 -221
  684. package/src/domains/setup/index.ts +0 -33
  685. package/src/domains/setup/operations/index.ts +0 -6
  686. package/src/domains/setup/operations/setupAll.test.ts +0 -48
  687. package/src/domains/setup/operations/setupAll.ts +0 -41
  688. package/src/domains/setup/operations/setupCompletions.test.ts +0 -94
  689. package/src/domains/setup/operations/setupCompletions.ts +0 -54
  690. package/src/domains/setup/operations/setupLsp.test.ts +0 -29
  691. package/src/domains/setup/operations/setupLsp.ts +0 -17
  692. package/src/domains/setup/operations/setupMcp.test.ts +0 -120
  693. package/src/domains/setup/operations/setupMcp.ts +0 -108
  694. package/src/domains/setup/operations/setupSkills.test.ts +0 -191
  695. package/src/domains/setup/operations/setupSkills.ts +0 -160
  696. package/src/domains/setup/types.ts +0 -18
  697. package/src/domains/shared/ToolSpec.ts +0 -49
  698. package/src/domains/shared/bootStore.ts +0 -135
  699. package/src/domains/shared/buildQuery.ts +0 -18
  700. package/src/domains/shared/compactUri.test.ts +0 -32
  701. package/src/domains/shared/compactUri.ts +0 -21
  702. package/src/domains/shared/context.ts +0 -16
  703. package/src/domains/shared/contracts.ts +0 -164
  704. package/src/domains/shared/createInteractivePromptSession.test.ts +0 -439
  705. package/src/domains/shared/createInteractivePromptSession.ts +0 -236
  706. package/src/domains/shared/emptyErrorRecovery.test.ts +0 -109
  707. package/src/domains/shared/extractLocalName.test.ts +0 -21
  708. package/src/domains/shared/extractLocalName.ts +0 -14
  709. package/src/domains/shared/filters/buildChannelFilter.test.ts +0 -52
  710. package/src/domains/shared/filters/buildChannelFilter.ts +0 -41
  711. package/src/domains/shared/filters/buildFilterConfig.ts +0 -15
  712. package/src/domains/shared/filters/buildFilters.test.ts +0 -33
  713. package/src/domains/shared/filters/buildFilters.ts +0 -30
  714. package/src/domains/shared/filters/buildTierFilter.test.ts +0 -78
  715. package/src/domains/shared/filters/buildTierFilter.ts +0 -69
  716. package/src/domains/shared/filters/describeFilters.ts +0 -14
  717. package/src/domains/shared/filters/index.ts +0 -10
  718. package/src/domains/shared/formatters.ts +0 -82
  719. package/src/domains/shared/loaders/bundledLoader.test.ts +0 -248
  720. package/src/domains/shared/loaders/bundledLoader.ts +0 -206
  721. package/src/domains/shared/loaders/gitLoader.ts +0 -31
  722. package/src/domains/shared/loaders/index.ts +0 -9
  723. package/src/domains/shared/loaders/localLoader.ts +0 -87
  724. package/src/domains/shared/loaders/readPackageDir.ts +0 -147
  725. package/src/domains/shared/loaders/storyAssetsPlugin.test.ts +0 -84
  726. package/src/domains/shared/loaders/storyAssetsPlugin.ts +0 -46
  727. package/src/domains/shared/lookupMany.test.ts +0 -120
  728. package/src/domains/shared/lookupMany.ts +0 -85
  729. package/src/domains/shared/mergeAndParseRefs.test.ts +0 -89
  730. package/src/domains/shared/mergeAndParseRefs.ts +0 -44
  731. package/src/domains/shared/namespaces.ts +0 -18
  732. package/src/domains/shared/packages.ts +0 -20
  733. package/src/domains/shared/pickRandom.ts +0 -22
  734. package/src/domains/shared/prefixes.ts +0 -37
  735. package/src/domains/shared/renderers.ts +0 -410
  736. package/src/domains/shared/resolveConfiguredGraphs.test.ts +0 -27
  737. package/src/domains/shared/resolveConfiguredGraphs.ts +0 -41
  738. package/src/domains/shared/runtime.ts +0 -61
  739. package/src/domains/shared/sampleFormatters.ts +0 -47
  740. package/src/domains/shared/semanticPackage.ts +0 -112
  741. package/src/domains/shared/stories/compileLookupCommand.test.ts +0 -145
  742. package/src/domains/shared/stories/compileLookupCommand.ts +0 -100
  743. package/src/domains/shared/stories/compileLookupTool.test.ts +0 -105
  744. package/src/domains/shared/stories/compileLookupTool.ts +0 -96
  745. package/src/domains/shared/stories/compileReadCommand.test.ts +0 -121
  746. package/src/domains/shared/stories/compileReadCommand.ts +0 -48
  747. package/src/domains/shared/stories/compileReadTool.test.ts +0 -64
  748. package/src/domains/shared/stories/compileReadTool.ts +0 -38
  749. package/src/domains/shared/stories/condense.test.ts +0 -18
  750. package/src/domains/shared/stories/condense.ts +0 -15
  751. package/src/domains/shared/stories/index.ts +0 -20
  752. package/src/domains/shared/stories/normalizeNames.test.ts +0 -20
  753. package/src/domains/shared/stories/normalizeNames.ts +0 -22
  754. package/src/domains/shared/stories/pack/applyPackFilters.test.ts +0 -102
  755. package/src/domains/shared/stories/pack/applyPackFilters.ts +0 -76
  756. package/src/domains/shared/stories/pack/buildLookupQuery.test.ts +0 -51
  757. package/src/domains/shared/stories/pack/buildLookupQuery.ts +0 -80
  758. package/src/domains/shared/stories/pack/collectPackStories.test.ts +0 -108
  759. package/src/domains/shared/stories/pack/collectPackStories.ts +0 -76
  760. package/src/domains/shared/stories/pack/compilePackCommands.ts +0 -40
  761. package/src/domains/shared/stories/pack/compilePackStories.test.ts +0 -146
  762. package/src/domains/shared/stories/pack/compilePackStories.ts +0 -253
  763. package/src/domains/shared/stories/pack/compilePackToolSpecs.ts +0 -43
  764. package/src/domains/shared/stories/pack/index.ts +0 -28
  765. package/src/domains/shared/stories/pack/runSelectQuery.ts +0 -31
  766. package/src/domains/shared/stories/pack/standardParity.test.ts +0 -308
  767. package/src/domains/shared/stories/pack/types.ts +0 -104
  768. package/src/domains/shared/stories/pack/validateStoryPackDefinition.test.ts +0 -240
  769. package/src/domains/shared/stories/pack/validateStoryPackDefinition.ts +0 -408
  770. package/src/domains/shared/stories/projectCliParameters.test.ts +0 -59
  771. package/src/domains/shared/stories/projectCliParameters.ts +0 -57
  772. package/src/domains/shared/stories/projectToolParams.test.ts +0 -50
  773. package/src/domains/shared/stories/projectToolParams.ts +0 -32
  774. package/src/domains/shared/stories/requirePragmaContext.test.ts +0 -23
  775. package/src/domains/shared/stories/requirePragmaContext.ts +0 -23
  776. package/src/domains/shared/stories/resolveLookupDetailed.test.ts +0 -57
  777. package/src/domains/shared/stories/resolveLookupDetailed.ts +0 -27
  778. package/src/domains/shared/stories/types.ts +0 -171
  779. package/src/domains/shared/suggestions/detectCrossDomain.test.ts +0 -43
  780. package/src/domains/shared/suggestions/detectCrossDomain.ts +0 -116
  781. package/src/domains/shared/suggestions/expandGlob.test.ts +0 -92
  782. package/src/domains/shared/suggestions/expandGlob.ts +0 -52
  783. package/src/domains/shared/suggestions/expandLookupQueries.ts +0 -57
  784. package/src/domains/shared/suggestions/index.ts +0 -7
  785. package/src/domains/shared/suggestions/listDomainNames.ts +0 -61
  786. package/src/domains/shared/suggestions/suggestNames.test.ts +0 -70
  787. package/src/domains/shared/suggestions/suggestNames.ts +0 -130
  788. package/src/domains/shared/types/block.ts +0 -107
  789. package/src/domains/shared/types/common.ts +0 -33
  790. package/src/domains/shared/types/graph.ts +0 -17
  791. package/src/domains/shared/types/index.ts +0 -50
  792. package/src/domains/shared/types/modifier.ts +0 -22
  793. package/src/domains/shared/types/ontology.ts +0 -50
  794. package/src/domains/shared/types/runtime.ts +0 -24
  795. package/src/domains/shared/types/sample.ts +0 -17
  796. package/src/domains/shared/types/standard.ts +0 -64
  797. package/src/domains/shared/types/tier.ts +0 -15
  798. package/src/domains/shared/types/token.ts +0 -30
  799. package/src/domains/skill/commands/index.ts +0 -4
  800. package/src/domains/skill/commands/list.test.ts +0 -115
  801. package/src/domains/skill/commands/list.ts +0 -11
  802. package/src/domains/skill/commands/lookup.test.ts +0 -118
  803. package/src/domains/skill/commands/lookup.ts +0 -14
  804. package/src/domains/skill/formatters/index.ts +0 -3
  805. package/src/domains/skill/formatters/list.test.ts +0 -140
  806. package/src/domains/skill/formatters/list.ts +0 -119
  807. package/src/domains/skill/formatters/lookup.test.ts +0 -46
  808. package/src/domains/skill/formatters/lookup.ts +0 -57
  809. package/src/domains/skill/formatters/types.ts +0 -8
  810. package/src/domains/skill/helpers/index.ts +0 -6
  811. package/src/domains/skill/helpers/parseFrontmatter.test.ts +0 -122
  812. package/src/domains/skill/helpers/parseFrontmatter.ts +0 -112
  813. package/src/domains/skill/helpers/resolveSkillSources.ts +0 -70
  814. package/src/domains/skill/index.ts +0 -23
  815. package/src/domains/skill/mcp/index.ts +0 -2
  816. package/src/domains/skill/mcp/specs.ts +0 -19
  817. package/src/domains/skill/operations/discover.test.ts +0 -176
  818. package/src/domains/skill/operations/discover.ts +0 -59
  819. package/src/domains/skill/operations/index.ts +0 -5
  820. package/src/domains/skill/operations/list.test.ts +0 -76
  821. package/src/domains/skill/operations/list.ts +0 -47
  822. package/src/domains/skill/operations/lookup.test.ts +0 -91
  823. package/src/domains/skill/operations/lookup.ts +0 -70
  824. package/src/domains/skill/stories.test.ts +0 -43
  825. package/src/domains/skill/stories.ts +0 -103
  826. package/src/domains/skill/types.ts +0 -33
  827. package/src/domains/standard/commands/categories.test.ts +0 -70
  828. package/src/domains/standard/commands/categories.ts +0 -48
  829. package/src/domains/standard/commands/index.ts +0 -6
  830. package/src/domains/standard/commands/list.test.ts +0 -105
  831. package/src/domains/standard/commands/list.ts +0 -11
  832. package/src/domains/standard/commands/lookup.test.ts +0 -135
  833. package/src/domains/standard/commands/lookup.ts +0 -14
  834. package/src/domains/standard/commands/sample.ts +0 -57
  835. package/src/domains/standard/formatters/categories.test.ts +0 -44
  836. package/src/domains/standard/formatters/categories.ts +0 -38
  837. package/src/domains/standard/formatters/index.ts +0 -10
  838. package/src/domains/standard/formatters/list.test.ts +0 -169
  839. package/src/domains/standard/formatters/list.ts +0 -184
  840. package/src/domains/standard/formatters/lookup.test.ts +0 -95
  841. package/src/domains/standard/formatters/lookup.ts +0 -101
  842. package/src/domains/standard/formatters/sample.ts +0 -15
  843. package/src/domains/standard/formatters/types.ts +0 -31
  844. package/src/domains/standard/index.ts +0 -40
  845. package/src/domains/standard/mcp/index.ts +0 -2
  846. package/src/domains/standard/mcp/specs.ts +0 -89
  847. package/src/domains/standard/operations/categories.test.ts +0 -61
  848. package/src/domains/standard/operations/categories.ts +0 -38
  849. package/src/domains/standard/operations/index.ts +0 -6
  850. package/src/domains/standard/operations/list.test.ts +0 -75
  851. package/src/domains/standard/operations/list.ts +0 -64
  852. package/src/domains/standard/operations/lookup.test.ts +0 -58
  853. package/src/domains/standard/operations/lookup.ts +0 -151
  854. package/src/domains/standard/operations/sample.ts +0 -35
  855. package/src/domains/standard/orchestration/buildStandardFilters.ts +0 -11
  856. package/src/domains/standard/orchestration/index.ts +0 -4
  857. package/src/domains/standard/orchestration/resolveStandardList.ts +0 -45
  858. package/src/domains/standard/orchestration/resolveStandardLookup.ts +0 -33
  859. package/src/domains/standard/orchestration/standardEmptyError.test.ts +0 -33
  860. package/src/domains/standard/orchestration/standardEmptyError.ts +0 -29
  861. package/src/domains/standard/standardConfig.ts +0 -42
  862. package/src/domains/standard/stories.test.ts +0 -24
  863. package/src/domains/standard/stories.ts +0 -151
  864. package/src/domains/standard/types.ts +0 -15
  865. package/src/domains/tier/commands/index.ts +0 -3
  866. package/src/domains/tier/commands/list.test.ts +0 -67
  867. package/src/domains/tier/commands/list.ts +0 -9
  868. package/src/domains/tier/formatters/index.ts +0 -3
  869. package/src/domains/tier/formatters/list.test.ts +0 -33
  870. package/src/domains/tier/formatters/list.ts +0 -45
  871. package/src/domains/tier/index.ts +0 -17
  872. package/src/domains/tier/mcp/index.ts +0 -2
  873. package/src/domains/tier/mcp/specs.ts +0 -12
  874. package/src/domains/tier/operations/index.ts +0 -3
  875. package/src/domains/tier/operations/list.test.ts +0 -32
  876. package/src/domains/tier/operations/list.ts +0 -33
  877. package/src/domains/tier/stories.test.ts +0 -22
  878. package/src/domains/tier/stories.ts +0 -52
  879. package/src/domains/token/commands/add-config.test.ts +0 -68
  880. package/src/domains/token/commands/add-config.ts +0 -62
  881. package/src/domains/token/commands/index.ts +0 -6
  882. package/src/domains/token/commands/list.test.ts +0 -82
  883. package/src/domains/token/commands/list.ts +0 -54
  884. package/src/domains/token/commands/lookup.test.ts +0 -125
  885. package/src/domains/token/commands/lookup.ts +0 -95
  886. package/src/domains/token/commands/sample.ts +0 -53
  887. package/src/domains/token/formatters/index.ts +0 -8
  888. package/src/domains/token/formatters/list.test.ts +0 -37
  889. package/src/domains/token/formatters/list.ts +0 -24
  890. package/src/domains/token/formatters/lookup.test.ts +0 -61
  891. package/src/domains/token/formatters/lookup.ts +0 -107
  892. package/src/domains/token/formatters/sample.ts +0 -16
  893. package/src/domains/token/index.ts +0 -40
  894. package/src/domains/token/mcp/index.ts +0 -2
  895. package/src/domains/token/mcp/specs.ts +0 -195
  896. package/src/domains/token/operations/add-config.test.ts +0 -68
  897. package/src/domains/token/operations/add-config.ts +0 -61
  898. package/src/domains/token/operations/index.ts +0 -8
  899. package/src/domains/token/operations/list.test.ts +0 -50
  900. package/src/domains/token/operations/list.ts +0 -52
  901. package/src/domains/token/operations/lookup.test.ts +0 -42
  902. package/src/domains/token/operations/lookup.ts +0 -75
  903. package/src/domains/token/operations/sample.ts +0 -32
  904. package/src/domains/token/orchestration/index.ts +0 -3
  905. package/src/domains/token/orchestration/resolveTokenList.ts +0 -17
  906. package/src/domains/token/orchestration/resolveTokenLookup.ts +0 -33
  907. package/src/domains/token/orchestration/tokenEmptyError.test.ts +0 -33
  908. package/src/domains/token/orchestration/tokenEmptyError.ts +0 -20
  909. package/src/domains/token/tokenConfig.ts +0 -38
  910. package/src/domains/token/types.ts +0 -6
  911. package/src/domains/trace/commands/clear.ts +0 -71
  912. package/src/domains/trace/commands/index.ts +0 -5
  913. package/src/domains/trace/commands/sessions.ts +0 -32
  914. package/src/domains/trace/commands/show.ts +0 -145
  915. package/src/domains/trace/formatters/index.ts +0 -9
  916. package/src/domains/trace/formatters/sessions.ts +0 -80
  917. package/src/domains/trace/formatters/show.ts +0 -122
  918. package/src/domains/trace/index.ts +0 -17
  919. package/src/domains/trace/operations/index.ts +0 -8
  920. package/src/domains/trace/operations/listSessions.test.ts +0 -55
  921. package/src/domains/trace/operations/listSessions.ts +0 -52
  922. package/src/domains/trace/operations/readTraceLog.test.ts +0 -100
  923. package/src/domains/trace/operations/readTraceLog.ts +0 -104
  924. package/src/domains/trace/tracePlugin.test.ts +0 -171
  925. package/src/domains/trace/tracePlugin.ts +0 -159
  926. package/src/domains/trace/types.ts +0 -65
  927. package/src/embedWasm.ts +0 -42
  928. package/src/error/PragmaError.test.ts +0 -121
  929. package/src/error/PragmaError.ts +0 -177
  930. package/src/error/constants.ts +0 -12
  931. package/src/error/index.ts +0 -4
  932. package/src/error/types.ts +0 -55
  933. package/src/mcp/createMcpServer.test.ts +0 -41
  934. package/src/mcp/createMcpServer.ts +0 -53
  935. package/src/mcp/error/buildRecovery.test.ts +0 -37
  936. package/src/mcp/error/buildRecovery.ts +0 -17
  937. package/src/mcp/error/index.ts +0 -12
  938. package/src/mcp/error/serializeError.test.ts +0 -121
  939. package/src/mcp/error/serializeError.ts +0 -31
  940. package/src/mcp/error/serializeErrorPayload.test.ts +0 -38
  941. package/src/mcp/error/serializeErrorPayload.ts +0 -34
  942. package/src/mcp/error/types.ts +0 -59
  943. package/src/mcp/index.ts +0 -15
  944. package/src/mcp/registerResources.test.ts +0 -566
  945. package/src/mcp/registerResources.ts +0 -9
  946. package/src/mcp/resources/buildGraphIndex.ts +0 -167
  947. package/src/mcp/resources/buildResourceList.test.ts +0 -97
  948. package/src/mcp/resources/buildResourceList.ts +0 -176
  949. package/src/mcp/resources/classifyEntity.test.ts +0 -40
  950. package/src/mcp/resources/classifyEntity.ts +0 -27
  951. package/src/mcp/resources/constants.ts +0 -105
  952. package/src/mcp/resources/displayPredicates.ts +0 -62
  953. package/src/mcp/resources/pickFirstValue.test.ts +0 -29
  954. package/src/mcp/resources/pickFirstValue.ts +0 -26
  955. package/src/mcp/resources/pickPrimaryType.test.ts +0 -41
  956. package/src/mcp/resources/pickPrimaryType.ts +0 -26
  957. package/src/mcp/resources/rankUriCompletions.test.ts +0 -52
  958. package/src/mcp/resources/rankUriCompletions.ts +0 -64
  959. package/src/mcp/resources/readEntity.ts +0 -169
  960. package/src/mcp/resources/registerResources.ts +0 -126
  961. package/src/mcp/resources/types.ts +0 -128
  962. package/src/mcp/runMcpServer.test.ts +0 -66
  963. package/src/mcp/runMcpServer.ts +0 -24
  964. package/src/mcp/tools/index.ts +0 -66
  965. package/src/mcp/tools/registerFromSpec.ts +0 -97
  966. package/src/mcp/tools/registerTools.test.ts +0 -1201
  967. package/src/mcp/types.ts +0 -66
  968. package/src/mcp/utils/estimateTokens.test.ts +0 -14
  969. package/src/mcp/utils/estimateTokens.ts +0 -9
  970. package/src/mcp/utils/index.ts +0 -11
  971. package/src/mcp/utils/wrapTool.test.ts +0 -109
  972. package/src/mcp/utils/wrapTool.ts +0 -81
  973. package/src/package-manager/constants.ts +0 -29
  974. package/src/package-manager/detectInstallSource.test.ts +0 -23
  975. package/src/package-manager/detectInstallSource.ts +0 -111
  976. package/src/package-manager/detectLocalInstall.test.ts +0 -16
  977. package/src/package-manager/detectLocalInstall.ts +0 -43
  978. package/src/package-manager/detectPackageManager.test.ts +0 -81
  979. package/src/package-manager/detectPackageManager.ts +0 -30
  980. package/src/package-manager/index.ts +0 -6
  981. package/src/package-manager/types.ts +0 -10
  982. package/src/pipeline/collectCommands.test.ts +0 -37
  983. package/src/pipeline/collectCommands.ts +0 -60
  984. package/src/pipeline/constants.ts +0 -14
  985. package/src/pipeline/createProgram.test.ts +0 -112
  986. package/src/pipeline/createProgram.ts +0 -89
  987. package/src/pipeline/formatTerminal.test.ts +0 -43
  988. package/src/pipeline/formatTerminal.ts +0 -53
  989. package/src/pipeline/index.ts +0 -22
  990. package/src/pipeline/mapExitCode.test.ts +0 -41
  991. package/src/pipeline/mapExitCode.ts +0 -12
  992. package/src/pipeline/parseGlobalFlags.test.ts +0 -92
  993. package/src/pipeline/parseGlobalFlags.ts +0 -46
  994. package/src/pipeline/renderError.test.ts +0 -151
  995. package/src/pipeline/renderError.ts +0 -129
  996. package/src/pipeline/resolveCommandKind.test.ts +0 -68
  997. package/src/pipeline/resolveCommandKind.ts +0 -78
  998. package/src/pipeline/runCli.orchestration.test.ts +0 -419
  999. package/src/pipeline/runCli.test.ts +0 -70
  1000. package/src/pipeline/runCli.ts +0 -268
  1001. package/src/pipeline/types.ts +0 -17
  1002. package/src/testing/cli.ts +0 -43
  1003. package/src/testing/createTestMcpClient.ts +0 -68
  1004. package/src/testing/dsFixtures.ts +0 -506
  1005. package/src/testing/fixtures/canonical-config.json +0 -4
  1006. package/src/testing/fixtures/canonical.ttl +0 -437
  1007. package/src/testing/fixtures/filtered-config.json +0 -4
  1008. package/src/testing/fixtures.ts +0 -34
  1009. package/src/testing/graphqlFixtures.ts +0 -72
  1010. package/src/testing/helpers/assertParity.ts +0 -28
  1011. package/src/testing/helpers/createTestMcpClient.ts +0 -40
  1012. package/src/testing/helpers/createTestRuntime.ts +0 -67
  1013. package/src/testing/index.ts +0 -25
  1014. package/src/testing/integration/__snapshots__/executor-golden.test.ts.snap +0 -1207
  1015. package/src/testing/integration/agent-session.test.ts +0 -148
  1016. package/src/testing/integration/boot.test.ts +0 -105
  1017. package/src/testing/integration/cli-user-stories.test.ts +0 -198
  1018. package/src/testing/integration/cross-binary-byte-equality.test.ts +0 -129
  1019. package/src/testing/integration/edge-cases.test.ts +0 -263
  1020. package/src/testing/integration/executor-execution.test.ts +0 -101
  1021. package/src/testing/integration/executor-golden.test.ts +0 -145
  1022. package/src/testing/integration/mcp-surface.test.ts +0 -580
  1023. package/src/testing/integration/parity.test.ts +0 -547
  1024. package/src/testing/regression/0001-skill-discovery-granularity.test.ts +0 -71
  1025. package/src/testing/standardParityFixtures.ts +0 -92
  1026. package/src/testing/store.ts +0 -39
  1027. package/src/testing/storyFixtures.ts +0 -63
  1028. package/src/testing/types.ts +0 -20
  1029. package/src/tui/components/BulletList/BulletList.tsx +0 -46
  1030. package/src/tui/components/BulletList/index.ts +0 -2
  1031. package/src/tui/components/BulletList/types.ts +0 -6
  1032. package/src/tui/components/Card/Card.tsx +0 -73
  1033. package/src/tui/components/Card/index.ts +0 -1
  1034. package/src/tui/components/Card/types.ts +0 -12
  1035. package/src/tui/components/CodeBlock/CodeBlock.tsx +0 -37
  1036. package/src/tui/components/CodeBlock/index.ts +0 -2
  1037. package/src/tui/components/CodeBlock/types.ts +0 -6
  1038. package/src/tui/components/DataRow/DataRow.tsx +0 -80
  1039. package/src/tui/components/DataRow/index.ts +0 -2
  1040. package/src/tui/components/DataRow/types.ts +0 -14
  1041. package/src/tui/components/FieldRow/FieldRow.tsx +0 -24
  1042. package/src/tui/components/FieldRow/index.ts +0 -2
  1043. package/src/tui/components/FieldRow/types.ts +0 -10
  1044. package/src/tui/components/HeaderRow/HeaderRow.tsx +0 -32
  1045. package/src/tui/components/HeaderRow/index.ts +0 -2
  1046. package/src/tui/components/HeaderRow/types.ts +0 -8
  1047. package/src/tui/components/MarkdownText/MarkdownText.tsx +0 -19
  1048. package/src/tui/components/MarkdownText/index.ts +0 -2
  1049. package/src/tui/components/MarkdownText/types.ts +0 -4
  1050. package/src/tui/components/MiniTable/MiniTable.tsx +0 -82
  1051. package/src/tui/components/MiniTable/index.ts +0 -2
  1052. package/src/tui/components/MiniTable/types.ts +0 -6
  1053. package/src/tui/components/SectionRenderer/SectionRenderer.tsx +0 -91
  1054. package/src/tui/components/SectionRenderer/index.ts +0 -2
  1055. package/src/tui/components/SectionRenderer/types.ts +0 -15
  1056. package/src/tui/components/TreeView/TreeView.tsx +0 -84
  1057. package/src/tui/components/TreeView/index.ts +0 -2
  1058. package/src/tui/components/TreeView/types.ts +0 -6
  1059. package/src/tui/components/index.ts +0 -19
  1060. package/src/tui/constants.ts +0 -39
  1061. package/src/tui/createListView.ts +0 -23
  1062. package/src/tui/createLookupView.ts +0 -26
  1063. package/src/tui/helpers/computeWidths.ts +0 -53
  1064. package/src/tui/helpers/fitColumns.ts +0 -33
  1065. package/src/tui/helpers/formatMarkdown.ts +0 -19
  1066. package/src/tui/helpers/getTerminalSize.ts +0 -16
  1067. package/src/tui/helpers/index.ts +0 -6
  1068. package/src/tui/helpers/syntaxColor.ts +0 -67
  1069. package/src/tui/helpers/truncateText.ts +0 -12
  1070. package/src/tui/hooks/index.ts +0 -3
  1071. package/src/tui/hooks/types.ts +0 -7
  1072. package/src/tui/hooks/useAutoExit.ts +0 -17
  1073. package/src/tui/hooks/useTerminalSize.ts +0 -19
  1074. package/src/tui/index.ts +0 -15
  1075. package/src/tui/renderInk.tsx +0 -18
  1076. package/src/tui/types.ts +0 -12
  1077. package/src/tui/views/ListView/ListView.tsx +0 -104
  1078. package/src/tui/views/ListView/index.ts +0 -2
  1079. package/src/tui/views/ListView/types.ts +0 -14
  1080. package/src/tui/views/LookupView/LookupView.tsx +0 -244
  1081. package/src/tui/views/LookupView/index.ts +0 -2
  1082. package/src/tui/views/LookupView/types.ts +0 -16
  1083. package/src/tui/views/index.ts +0 -4
@@ -0,0 +1,387 @@
1
+ import chalk from "chalk";
2
+ import { afterAll, describe, expect, it, vi } from "vitest";
3
+ import { VERSION } from "../../../constants.js";
4
+ import { fixtureModule } from "../../../testing/fixtures/fixtureCapability.js";
5
+ import { projectCli } from "../../../testing/helpers/projectCli.js";
6
+ import type { CapabilityModule, VerbSpec } from "../../spec/types.js";
7
+ import { formatRootHelp } from "./rootHelp.js";
8
+
9
+ // Root/noun/verb help styling (helpFormat.ts) routes through chalk, whose
10
+ // `supports-color` enables color when GITHUB_ACTIONS is set — even off a TTY —
11
+ // so CI would paint ANSI into these plain goldens and the bare-noun `--help`
12
+ // comparison. Pin the level to 0 for deterministic, color-free renders (the same
13
+ // guard colophon.render.test.ts / verbHelp.test.ts use). Module scope so the
14
+ // collection-time formatRootHelp() call below renders plain too.
15
+ const prevChalkLevel = chalk.level;
16
+ chalk.level = 0;
17
+ afterAll(() => {
18
+ chalk.level = prevChalkLevel;
19
+ });
20
+
21
+ /** A minimal verb under an arbitrary path, for help-grouping tests. */
22
+ function makeVerb(path: [string, string?]): VerbSpec {
23
+ return {
24
+ path,
25
+ summary: `${path.filter(Boolean).join(" ")} summary`,
26
+ params: [],
27
+ output: {
28
+ formatters: {
29
+ plain: (d) => String(d),
30
+ llm: (d) => String(d),
31
+ json: (d) => JSON.stringify(d),
32
+ },
33
+ },
34
+ capability: { needsStore: false, mutates: false, mcp: { expose: true } },
35
+ run: async () => null,
36
+ };
37
+ }
38
+
39
+ describe("buildProgram — flags", () => {
40
+ const program = projectCli([fixtureModule]);
41
+ const widget = program.commands.find((c) => c.name() === "widget");
42
+ const make = widget?.commands.find((c) => c.name() === "make");
43
+ const list = widget?.commands.find((c) => c.name() === "list");
44
+
45
+ it("registers a camelCase flag in kebab form", () => {
46
+ expect(make?.options.map((o) => o.long)).toContain("--with-history");
47
+ });
48
+
49
+ it("auto-injects --dry-run/--undo/--yes onto a mutating verb", () => {
50
+ expect(make?.options.map((o) => o.long)).toEqual(
51
+ expect.arrayContaining(["--dry-run", "--undo", "--yes"]),
52
+ );
53
+ });
54
+
55
+ it("does not inject mutation flags onto a read verb", () => {
56
+ expect(list?.options.map((o) => o.long)).not.toContain("--dry-run");
57
+ });
58
+
59
+ it("carries the positional into the command usage", () => {
60
+ expect(make?.usage()).toContain("<name>");
61
+ });
62
+ });
63
+
64
+ describe("buildProgram — early exits", () => {
65
+ it("throws commander.version for --version, writing the version", async () => {
66
+ const program = projectCli([fixtureModule]);
67
+ const writes: string[] = [];
68
+ const spy = vi
69
+ .spyOn(process.stdout, "write")
70
+ .mockImplementation((chunk: string | Uint8Array) => {
71
+ writes.push(String(chunk));
72
+ return true;
73
+ });
74
+ await expect(
75
+ program.parseAsync(["--version"], { from: "user" }),
76
+ ).rejects.toMatchObject({ code: "commander.version" });
77
+ spy.mockRestore();
78
+ expect(writes.join("")).toContain(VERSION);
79
+ });
80
+
81
+ it("throws commander.helpDisplayed for --help", async () => {
82
+ const program = projectCli([fixtureModule]);
83
+ const spy = vi
84
+ .spyOn(process.stdout, "write")
85
+ .mockImplementation(() => true);
86
+ await expect(
87
+ program.parseAsync(["--help"], { from: "user" }),
88
+ ).rejects.toMatchObject({ code: "commander.helpDisplayed" });
89
+ spy.mockRestore();
90
+ });
91
+
92
+ it("throws commander.unknownCommand for an unknown noun", async () => {
93
+ const program = projectCli([fixtureModule]);
94
+ const spy = vi
95
+ .spyOn(process.stderr, "write")
96
+ .mockImplementation(() => true);
97
+ await expect(
98
+ program.parseAsync(["widgt"], { from: "user" }),
99
+ ).rejects.toMatchObject({ code: "commander.unknownCommand" });
100
+ spy.mockRestore();
101
+ });
102
+ });
103
+
104
+ describe("buildProgram — lazy dispatch", () => {
105
+ it("does not evaluate a verb's run body while building the tree", () => {
106
+ const boom: CapabilityModule = {
107
+ name: "boom",
108
+ verbs: [
109
+ {
110
+ path: ["boom", "go"],
111
+ summary: "Explodes if its run body is invoked at build time.",
112
+ params: [],
113
+ output: {
114
+ formatters: {
115
+ plain: (d) => String(d),
116
+ llm: (d) => String(d),
117
+ json: (d) => JSON.stringify(d),
118
+ },
119
+ },
120
+ capability: {
121
+ needsStore: false,
122
+ mutates: false,
123
+ mcp: { expose: false, reason: "test" },
124
+ },
125
+ run: () => {
126
+ throw new Error("run body evaluated during build");
127
+ },
128
+ },
129
+ ],
130
+ };
131
+ expect(() => projectCli([boom])).not.toThrow();
132
+ });
133
+ });
134
+
135
+ /** A read verb whose run body renders a distinguishable marker, for routing. */
136
+ function recordingVerb(path: [string, string?], marker: string): VerbSpec {
137
+ return {
138
+ path,
139
+ summary: `${path.filter(Boolean).join(" ")} summary`,
140
+ params: [],
141
+ output: {
142
+ formatters: {
143
+ plain: () => marker,
144
+ llm: () => marker,
145
+ json: () => JSON.stringify({ marker }),
146
+ },
147
+ },
148
+ capability: { needsStore: false, mutates: false, mcp: { expose: true } },
149
+ run: async () => marker,
150
+ };
151
+ }
152
+
153
+ /** A mutating self-verb, to prove mutation flags land on the noun parent. */
154
+ function mutatingSelfVerb(noun: string): VerbSpec {
155
+ return {
156
+ path: [noun],
157
+ summary: `${noun} summary`,
158
+ params: [],
159
+ output: {
160
+ formatters: {
161
+ plain: () => noun,
162
+ llm: () => noun,
163
+ json: () => JSON.stringify({ noun }),
164
+ },
165
+ },
166
+ capability: { needsStore: false, mutates: true, mcp: { expose: true } },
167
+ // A mutation returns a Task; a bare no-op is enough for structural checks.
168
+ run: () => ({ _tag: "Pure", value: noun }) as never,
169
+ };
170
+ }
171
+
172
+ describe("buildProgram — mixed self+sub-verb noun (setup shape)", () => {
173
+ /** A noun that is BOTH directly runnable and has sub-verbs — setup's shape. */
174
+ const mixed: CapabilityModule = {
175
+ name: "kitish",
176
+ verbs: [
177
+ recordingVerb(["kit"], "SELF"),
178
+ recordingVerb(["kit", "mcp"], "SUB_MCP"),
179
+ recordingVerb(["kit", "skills"], "SUB_SKILLS"),
180
+ ],
181
+ };
182
+
183
+ it("registers the noun parent exactly once", () => {
184
+ const program = projectCli([mixed]);
185
+ const kits = program.commands.filter((c) => c.name() === "kit");
186
+ expect(kits).toHaveLength(1);
187
+ const kit = kits[0];
188
+ expect(kit?.commands.map((c) => c.name()).sort()).toEqual([
189
+ "mcp",
190
+ "skills",
191
+ ]);
192
+ });
193
+
194
+ it("`kit` (bare) dispatches the self-verb", async () => {
195
+ const program = projectCli([mixed]);
196
+ const writes: string[] = [];
197
+ const spy = vi
198
+ .spyOn(process.stdout, "write")
199
+ .mockImplementation((chunk: string | Uint8Array) => {
200
+ writes.push(String(chunk));
201
+ return true;
202
+ });
203
+ await program.parseAsync(["kit"], { from: "user" });
204
+ spy.mockRestore();
205
+ expect(writes.join("")).toContain("SELF");
206
+ expect(writes.join("")).not.toContain("SUB_");
207
+ });
208
+
209
+ it("`kit mcp` dispatches the sub-verb, not the self-verb", async () => {
210
+ const program = projectCli([mixed]);
211
+ const writes: string[] = [];
212
+ const spy = vi
213
+ .spyOn(process.stdout, "write")
214
+ .mockImplementation((chunk: string | Uint8Array) => {
215
+ writes.push(String(chunk));
216
+ return true;
217
+ });
218
+ await program.parseAsync(["kit", "mcp"], { from: "user" });
219
+ spy.mockRestore();
220
+ expect(writes.join("")).toContain("SUB_MCP");
221
+ expect(writes.join("")).not.toContain("SELF");
222
+ });
223
+
224
+ it("carries a mutating self-verb's mutation flags onto the noun parent", () => {
225
+ const module: CapabilityModule = {
226
+ name: "kit2ish",
227
+ verbs: [mutatingSelfVerb("kit2"), recordingVerb(["kit2", "one"], "ONE")],
228
+ };
229
+ const program = projectCli([module]);
230
+ const kit2 = program.commands.find((c) => c.name() === "kit2");
231
+ expect(kit2?.options.map((o) => o.long)).toEqual(
232
+ expect.arrayContaining(["--dry-run", "--undo", "--yes"]),
233
+ );
234
+ // The sub-verb is still reachable under the same parent.
235
+ expect(kit2?.commands.map((c) => c.name())).toContain("one");
236
+ });
237
+
238
+ it("throws at build time when a mixed-noun self-verb declares a positional", () => {
239
+ // The documented invariant, now enforced: a self-verb sharing a noun with
240
+ // sub-verbs must have NO positional (else `<noun> <sub>` would shadow the
241
+ // positional value and Commander would silently drop it from the model).
242
+ const selfWithPositional: VerbSpec = {
243
+ path: ["kit3"],
244
+ summary: "kit3 summary",
245
+ params: [
246
+ {
247
+ kind: "string",
248
+ name: "target",
249
+ doc: "a positional",
250
+ positional: true,
251
+ },
252
+ ],
253
+ output: {
254
+ formatters: { plain: () => "", llm: () => "", json: () => "{}" },
255
+ },
256
+ capability: { needsStore: false, mutates: false, mcp: { expose: true } },
257
+ run: async () => null,
258
+ };
259
+ const module: CapabilityModule = {
260
+ name: "kit3ish",
261
+ verbs: [selfWithPositional, recordingVerb(["kit3", "one"], "ONE")],
262
+ };
263
+ expect(() => projectCli([module])).toThrow(/must have no positional/);
264
+ });
265
+ });
266
+
267
+ describe("buildProgram — sub-verb-only noun invoked bare (U2)", () => {
268
+ /** A noun with ONLY sub-verbs and no self-verb — block/config/… shape. */
269
+ const subOnly: CapabilityModule = {
270
+ name: "gadgetish",
271
+ verbs: [
272
+ recordingVerb(["gadget", "list"], "GADGET_LIST"),
273
+ recordingVerb(["gadget", "show"], "GADGET_SHOW"),
274
+ ],
275
+ };
276
+
277
+ /** Parse `argv`, capturing everything written to stdout and any thrown exit. */
278
+ async function run(argv: string[]): Promise<{ out: string; threw: unknown }> {
279
+ const program = projectCli([subOnly]);
280
+ const writes: string[] = [];
281
+ const spy = vi
282
+ .spyOn(process.stdout, "write")
283
+ .mockImplementation((chunk: string | Uint8Array) => {
284
+ writes.push(String(chunk));
285
+ return true;
286
+ });
287
+ let threw: unknown;
288
+ try {
289
+ await program.parseAsync(argv, { from: "user" });
290
+ } catch (error) {
291
+ threw = error;
292
+ } finally {
293
+ spy.mockRestore();
294
+ }
295
+ return { out: writes.join(""), threw };
296
+ }
297
+
298
+ it("`gadget` (bare) prints the SAME page as `gadget --help`, exit 0", async () => {
299
+ const bare = await run(["gadget"]);
300
+ const help = await run(["gadget", "--help"]);
301
+
302
+ // The bare action returns normally (exit 0) — it never throws the way
303
+ // `--help` does (commander.helpDisplayed).
304
+ expect(bare.threw).toBeUndefined();
305
+ expect(bare.out).toContain("Usage: pragma gadget <verb> [flags]");
306
+ expect(bare.out).toContain("list");
307
+ expect(bare.out).toContain("show");
308
+ // Byte-for-byte identical to the designed `--help` page.
309
+ expect(bare.out).toBe(help.out);
310
+ });
311
+
312
+ it("`gadget list` still routes to the sub-verb, not the bare-help action", async () => {
313
+ const routed = await run(["gadget", "list"]);
314
+ expect(routed.out).toContain("GADGET_LIST");
315
+ expect(routed.out).not.toContain("Usage: pragma gadget <verb>");
316
+ });
317
+
318
+ it("`gadget bogus` re-raises unknownCommand so the bin can suggest a verb", async () => {
319
+ // The regression guard: the bare-help action must NOT swallow an
320
+ // unrecognized sub-verb into a generic "too many arguments" — it re-raises
321
+ // the same commander.unknownCommand the suggester routes on.
322
+ const bogus = await run(["gadget", "bogus"]);
323
+ expect(bogus.out).not.toContain("Usage: pragma gadget <verb>");
324
+ expect((bogus.threw as { code?: string })?.code).toBe(
325
+ "commander.unknownCommand",
326
+ );
327
+ });
328
+ });
329
+
330
+ describe("formatRootHelp — grouping", () => {
331
+ const help = formatRootHelp("pragma", "pragma test", [
332
+ makeVerb(["info"]),
333
+ makeVerb(["config", "show"]),
334
+ makeVerb(["block", "list"]),
335
+ ]);
336
+
337
+ it("shows the task-oriented section titles for live nouns", () => {
338
+ expect(help).toContain("Explore the design system");
339
+ expect(help).toContain("Set up & maintain");
340
+ });
341
+
342
+ it("lists the live nouns and always-available mcp", () => {
343
+ expect(help).toContain("block");
344
+ expect(help).toContain("config");
345
+ expect(help).toContain("info");
346
+ expect(help).toContain("mcp");
347
+ });
348
+
349
+ it("drops nouns that are not present", () => {
350
+ expect(help).not.toContain("token");
351
+ expect(help).not.toContain("graphql");
352
+ });
353
+
354
+ it("shows the global flags block", () => {
355
+ expect(help).toContain("Global flags");
356
+ expect(help).toContain("--llm");
357
+ expect(help).toContain("--detail <level>");
358
+ });
359
+
360
+ it("renders the unified root page (restyle golden)", () => {
361
+ expect(help).toMatchInlineSnapshot(`
362
+ "pragma — pragma test
363
+
364
+ Usage: pragma <command> [subcommand] [flags]
365
+
366
+ Explore the design system
367
+ block Inspect components & patterns and their anatomy
368
+
369
+ Set up & maintain
370
+ config Read and write pragma configuration
371
+ info Show version, config, and update status
372
+
373
+ For AI agents
374
+ mcp Start the MCP server over stdio
375
+
376
+ Global flags
377
+ --llm Condensed Markdown output for agents
378
+ --format <json|plain> Select output format
379
+ --detail <level> Progressive-disclosure level (summary, standard, detailed)
380
+ --verbose Diagnostic output on stderr
381
+ --help Show help (works on any command)
382
+ --version Show the CLI version
383
+
384
+ Run \`pragma <command> --help\` for details, or \`pragma capabilities\` to get oriented."
385
+ `);
386
+ });
387
+ });
@@ -0,0 +1,280 @@
1
+ /**
2
+ * Build the Commander program from the grammar.
3
+ *
4
+ * Reads only the declarative fields of each {@link VerbSpec} — path, params,
5
+ * summary, capability — never a run body, so constructing the tree stays on the
6
+ * fast path and imports no verb implementations (the actions dynamic-dispatch
7
+ * lazily). Verbs are grouped by noun: a self-verb (`["info"]`) attaches to the
8
+ * root, sub-verbs (`["config","show"]`) hang under a noun parent. Positionals
9
+ * become usage tokens, other params become kebab flags, and a mutating verb
10
+ * gains the auto-injected `--dry-run` / `--undo` / `--yes` flags. Ported from
11
+ * the v1 cli-core `registerAll`, retargeted at the grammar.
12
+ */
13
+
14
+ import { Command, Option } from "commander";
15
+ import { BIN_NAME, PROGRAM_DESCRIPTION, VERSION } from "../../../constants.js";
16
+ import type { GlobalFlags } from "../../runtime/types.js";
17
+ import { kebabCase } from "../../spec/emitSurface.js";
18
+ import type { ParamSpec, VerbSpec } from "../../spec/types.js";
19
+ import { dispatch } from "./dispatch.js";
20
+ import { formatRootHelp } from "./rootHelp.js";
21
+ import { formatNounHelp, formatVerbHelp } from "./verbHelp.js";
22
+
23
+ /** Options controlling the built program. */
24
+ export interface BuildProgramOptions {
25
+ /** Global flags for this invocation, closed over by every verb action. */
26
+ readonly globalFlags: GlobalFlags;
27
+ /** Binary name (defaults to `pragma`). */
28
+ readonly programName?: string;
29
+ /** Program description shown in root help. */
30
+ readonly description?: string;
31
+ /** Version string for `--version`. */
32
+ readonly version?: string;
33
+ }
34
+
35
+ /** The positional usage token for a param (`<name>` / `[name]`, variadic `...`). */
36
+ function positionalToken(param: ParamSpec): string {
37
+ const variadic = param.kind === "string[]" ? "..." : "";
38
+ return param.required
39
+ ? `<${param.name}${variadic}>`
40
+ : `[${param.name}${variadic}]`;
41
+ }
42
+
43
+ /** The Commander flag spec for a non-positional param. */
44
+ function flagSpec(param: ParamSpec): string {
45
+ const flag = `--${kebabCase(param.name)}`;
46
+ if (param.kind === "boolean") return flag;
47
+ if (param.kind === "string[]") return `${flag} <values...>`;
48
+ return `${flag} <value>`;
49
+ }
50
+
51
+ /** Install designed help for a command, suppressing Commander's auto-help. */
52
+ function useDesignedHelp(command: Command, text: () => string): void {
53
+ command.configureHelp({ formatHelp: () => "" });
54
+ command.addHelpText("beforeAll", (ctx) =>
55
+ ctx.command === command ? `${text()}\n` : "",
56
+ );
57
+ }
58
+
59
+ /** Register a verb's flags (plus mutation flags) onto its Commander command. */
60
+ function registerParams(command: Command, verb: VerbSpec): void {
61
+ for (const param of verb.params) {
62
+ if (param.positional) continue;
63
+ const spec = flagSpec(param);
64
+ if (param.kind === "enum") {
65
+ const option = new Option(spec, param.doc).choices([...param.values]);
66
+ if (param.default !== undefined) option.default(param.default);
67
+ command.addOption(option);
68
+ } else if ("default" in param && param.default !== undefined) {
69
+ command.option(spec, param.doc, param.default as string | boolean);
70
+ } else {
71
+ command.option(spec, param.doc);
72
+ }
73
+ }
74
+
75
+ if (verb.capability.mutates) {
76
+ command.option("--dry-run", "Preview effects without applying them");
77
+ command.option("--undo", "Reverse a previous run of this command");
78
+ command.option("--yes", "Apply without an interactive confirmation");
79
+ }
80
+ }
81
+
82
+ /** Split Commander's variadic action args into positionals and options. */
83
+ function splitActionArgs(actionArgs: readonly unknown[]): {
84
+ positionals: string[];
85
+ opts: Record<string, unknown>;
86
+ } {
87
+ const positionals: string[] = [];
88
+ let opts: Record<string, unknown> = {};
89
+ for (const arg of actionArgs) {
90
+ if (typeof arg === "string") {
91
+ positionals.push(arg);
92
+ } else if (Array.isArray(arg)) {
93
+ positionals.push(
94
+ ...arg.filter((value): value is string => typeof value === "string"),
95
+ );
96
+ } else if (arg instanceof Command) {
97
+ // The trailing Command instance — skip.
98
+ } else if (typeof arg === "object" && arg !== null) {
99
+ opts = arg as Record<string, unknown>;
100
+ }
101
+ }
102
+ return { positionals, opts };
103
+ }
104
+
105
+ /** Attach one verb as a leaf command under `parent`. */
106
+ function attachVerb(
107
+ parent: Command,
108
+ verb: VerbSpec,
109
+ name: string,
110
+ programName: string,
111
+ globalFlags: GlobalFlags,
112
+ ): void {
113
+ const positionals = verb.params.filter((p) => p.positional);
114
+ const suffix = positionals.map(positionalToken).join(" ");
115
+ const fullName = suffix ? `${name} ${suffix}` : name;
116
+
117
+ const command = parent.command(fullName).description(verb.summary);
118
+ command.enablePositionalOptions();
119
+ useDesignedHelp(command, () => formatVerbHelp(programName, verb));
120
+ registerParams(command, verb);
121
+
122
+ command.action(async (...actionArgs: unknown[]) => {
123
+ const { positionals: positionalArgs, opts } = splitActionArgs(actionArgs);
124
+ await dispatch(verb, positionalArgs, opts, globalFlags);
125
+ });
126
+ }
127
+
128
+ /**
129
+ * Attach a noun that has sub-verbs, creating its parent command exactly once.
130
+ *
131
+ * When the noun also has a SELF-verb (`["setup"]`), the parent command doubles
132
+ * as that verb — it carries the self-verb's own params/mutation flags and
133
+ * `.action()` AND hosts the sub-commands, so `pragma setup` runs the self-verb
134
+ * while `pragma setup mcp` routes to the sub. Commander resolves a registered
135
+ * sub-command name before the parent's action, so the two never collide — but
136
+ * only because the one covenant noun shaped this way (`setup`) has NO positional
137
+ * on its self-verb, so `<noun> <sub>` can never be read as a positional value.
138
+ * A noun with only sub-verbs keeps a plain, action-less group parent.
139
+ *
140
+ * @param program - The root program.
141
+ * @param noun - The noun to attach.
142
+ * @param selfVerb - The self-verb (`path.length === 1`), if the noun has one.
143
+ * @param subVerbs - The noun's sub-verbs (`path.length > 1`).
144
+ * @param programName - The binary name shown in help.
145
+ * @param globalFlags - Global flags closed over by every action.
146
+ * @param live - All non-hidden verbs, for noun-level help.
147
+ */
148
+ function attachNounGroup(
149
+ program: Command,
150
+ noun: string,
151
+ selfVerb: VerbSpec | undefined,
152
+ subVerbs: readonly VerbSpec[],
153
+ programName: string,
154
+ globalFlags: GlobalFlags,
155
+ live: readonly VerbSpec[],
156
+ ): void {
157
+ const parent = program.command(noun);
158
+ parent.enablePositionalOptions();
159
+ useDesignedHelp(parent, () => formatNounHelp(programName, noun, live));
160
+
161
+ if (selfVerb) {
162
+ // A mixed noun (self-verb + sub-verbs) MUST have no positional on its
163
+ // self-verb: Commander resolves a registered sub-command name before the
164
+ // parent action, so a positional would be shadowed by `<noun> <sub>` and
165
+ // silently dropped from the parent's model. Enforce the invariant the
166
+ // JSDoc above documents, turning a latent footgun into a build-time error.
167
+ const positional = selfVerb.params.find((param) => param.positional);
168
+ if (positional) {
169
+ throw new Error(
170
+ `buildProgram: mixed noun "${noun}" self-verb declares positional ` +
171
+ `"${positional.name}"; a mixed noun's self-verb must have no ` +
172
+ "positional (it collides with sub-verb routing).",
173
+ );
174
+ }
175
+ parent.description(selfVerb.summary);
176
+ registerParams(parent, selfVerb);
177
+ parent.action(async (...actionArgs: unknown[]) => {
178
+ const { positionals: positionalArgs, opts } = splitActionArgs(actionArgs);
179
+ await dispatch(selfVerb, positionalArgs, opts, globalFlags);
180
+ });
181
+ } else {
182
+ parent.description(`${noun} commands`);
183
+ // A sub-verb-only noun invoked bare (`pragma block`) prints its own help
184
+ // and exits 0 — byte-for-byte the `pragma block --help` page, because it
185
+ // runs the SAME Commander help machinery `--help` runs (`outputHelp`),
186
+ // minus the `helpDisplayed` throw, so it returns 0. Commander resolves a
187
+ // registered sub-command name BEFORE the parent action (the invariant the
188
+ // mixed-noun path above relies on), so `pragma block list` still routes to
189
+ // the sub-verb; only the bare noun reaches this action.
190
+ //
191
+ // An UNRECOGNIZED sub-verb (`pragma block bogus`) must keep its "Did you
192
+ // mean?" suggestion. Adding an action turns Commander's default
193
+ // unknown-command error into a generic "too many arguments" (the action
194
+ // declares no positional), so we opt into excess args and re-raise the
195
+ // SAME `unknownCommand` error the bin's suggester already routes on — the
196
+ // bin re-derives the offending token from argv, so its message is cosmetic.
197
+ parent.allowExcessArguments(true);
198
+ parent.action(async () => {
199
+ // The unrecognized sub-verb lands in `parent.args` (excess operands), not
200
+ // as a declared action parameter, since the parent declares none.
201
+ const excess = parent.args[0];
202
+ if (excess !== undefined) {
203
+ const { CommanderError } = await import("commander");
204
+ throw new CommanderError(
205
+ 2,
206
+ "commander.unknownCommand",
207
+ `error: unknown command '${excess}'`,
208
+ );
209
+ }
210
+ parent.outputHelp();
211
+ });
212
+ }
213
+
214
+ for (const verb of subVerbs) {
215
+ attachVerb(parent, verb, verb.path[1] as string, programName, globalFlags);
216
+ }
217
+ }
218
+
219
+ /**
220
+ * Build the Commander program for a set of verbs.
221
+ *
222
+ * @param verbs - The verbs to project (hidden verbs are excluded).
223
+ * @param options - Global flags and program metadata.
224
+ * @returns The configured program, ready for `parseAsync`.
225
+ */
226
+ export function buildProgram(
227
+ verbs: readonly VerbSpec[],
228
+ options: BuildProgramOptions,
229
+ ): Command {
230
+ const programName = options.programName ?? BIN_NAME;
231
+ const description = options.description ?? PROGRAM_DESCRIPTION;
232
+ const version = options.version ?? VERSION;
233
+ const live = verbs.filter((verb) => !verb.hidden);
234
+
235
+ const program = new Command();
236
+ program.name(programName).description(description);
237
+ program.version(version, "-v, --version");
238
+ program.enablePositionalOptions();
239
+ program.exitOverride();
240
+ useDesignedHelp(program, () =>
241
+ formatRootHelp(programName, description, live),
242
+ );
243
+
244
+ const groups = new Map<string, VerbSpec[]>();
245
+ for (const verb of live) {
246
+ const noun = verb.path[0];
247
+ const bucket = groups.get(noun) ?? [];
248
+ bucket.push(verb);
249
+ groups.set(noun, bucket);
250
+ }
251
+
252
+ for (const [noun, bucket] of groups) {
253
+ const selfVerbs = bucket.filter((v) => v.path.length === 1);
254
+ const subVerbs = bucket.filter((v) => v.path.length > 1);
255
+
256
+ // Pure self-verb noun(s) — attach each leaf directly to the root, as before.
257
+ if (subVerbs.length === 0) {
258
+ for (const verb of selfVerbs) {
259
+ attachVerb(program, verb, noun, programName, options.globalFlags);
260
+ }
261
+ continue;
262
+ }
263
+
264
+ // Has sub-verbs (and, for the mixed noun `setup`, also a self-verb): the
265
+ // noun parent is created ONCE. A pre-fold buildProgram registered
266
+ // `program.command(noun)` twice for such a noun (self leaf + sub parent) —
267
+ // Commander then saw a duplicate `setup` command.
268
+ attachNounGroup(
269
+ program,
270
+ noun,
271
+ selfVerbs[0],
272
+ subVerbs,
273
+ programName,
274
+ options.globalFlags,
275
+ live,
276
+ );
277
+ }
278
+
279
+ return program;
280
+ }