@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
@@ -1,1201 +0,0 @@
1
- import {
2
- existsSync,
3
- mkdtempSync,
4
- readFileSync,
5
- rmSync,
6
- writeFileSync,
7
- } from "node:fs";
8
- import { tmpdir } from "node:os";
9
- import { join } from "node:path";
10
- import type { Client } from "@modelcontextprotocol/sdk/client/index.js";
11
- import { afterAll, beforeAll, describe, expect, it } from "vitest";
12
- import {
13
- createTestMcpClient,
14
- RECIPE_PREFIXES,
15
- RECIPE_STORY,
16
- RECIPE_TTL,
17
- } from "#testing";
18
- import type { McpErrorPayload } from "../types.js";
19
-
20
- let client: Client;
21
- let cleanup: () => Promise<void>;
22
-
23
- beforeAll(async () => {
24
- const result = await createTestMcpClient();
25
- client = result.client;
26
- cleanup = result.cleanup;
27
- });
28
-
29
- afterAll(async () => {
30
- await cleanup();
31
- });
32
-
33
- /**
34
- * Parse the envelope from a tool response.
35
- * Returns the full envelope object (with `ok`, `data`, `meta`, etc.).
36
- */
37
- function parseEnvelope(
38
- result: Record<string, unknown>,
39
- ): Record<string, unknown> {
40
- const content = result.content as unknown[];
41
- const first = content[0] as { type: string; text: string };
42
- expect(first.type).toBe("text");
43
- return JSON.parse(first.text) as Record<string, unknown>;
44
- }
45
-
46
- /**
47
- * Extract the `data` field from a success envelope.
48
- */
49
- function parseData(result: Record<string, unknown>): unknown {
50
- const envelope = parseEnvelope(result);
51
- expect(envelope.ok).toBe(true);
52
- return envelope.data;
53
- }
54
-
55
- // =============================================================================
56
- // Tool listing
57
- // =============================================================================
58
-
59
- describe("tool listing", () => {
60
- it("registers 30 tools", async () => {
61
- const { tools } = await client.listTools();
62
- expect(tools).toHaveLength(30);
63
- });
64
-
65
- it("all tools have descriptions", async () => {
66
- const { tools } = await client.listTools();
67
- for (const tool of tools) {
68
- expect(tool.description).toBeTruthy();
69
- }
70
- });
71
-
72
- it("includes expected tool names", async () => {
73
- const { tools } = await client.listTools();
74
- const names = tools.map((t) => t.name);
75
- // Existing tools
76
- expect(names).toContain("block_list");
77
- expect(names).toContain("block_lookup");
78
- expect(names).toContain("standard_list");
79
- expect(names).toContain("standard_lookup");
80
- expect(names).toContain("standard_categories");
81
- expect(names).toContain("modifier_list");
82
- expect(names).toContain("modifier_lookup");
83
- expect(names).toContain("token_list");
84
- expect(names).toContain("token_lookup");
85
- expect(names).toContain("tier_list");
86
- expect(names).toContain("config_show");
87
- expect(names).toContain("config_tier");
88
- expect(names).toContain("config_channel");
89
- expect(names).toContain("tokens_add_config");
90
- expect(names).toContain("create_component");
91
- expect(names).toContain("create_package");
92
- expect(names).toContain("llm");
93
- // New tools (Group C)
94
- expect(names).toContain("ontology_list");
95
- expect(names).toContain("ontology_show");
96
- expect(names).toContain("graph_query");
97
- expect(names).toContain("graph_inspect");
98
- expect(names).toContain("skill_list");
99
- expect(names).toContain("doctor");
100
- expect(names).toContain("info");
101
- expect(names).toContain("capabilities");
102
- // Sample tools
103
- expect(names).toContain("block_sample");
104
- expect(names).toContain("standard_sample");
105
- expect(names).toContain("token_sample");
106
- expect(names).toContain("modifier_sample");
107
- });
108
-
109
- it("no tool names contain pragma_ prefix", async () => {
110
- const { tools } = await client.listTools();
111
- for (const tool of tools) {
112
- expect(tool.name).not.toMatch(/^pragma_/);
113
- }
114
- });
115
- });
116
-
117
- // =============================================================================
118
- // Envelope shape
119
- // =============================================================================
120
-
121
- describe("envelope shape", () => {
122
- it("success response has ok: true, data, and meta", async () => {
123
- const result = await client.callTool({
124
- name: "block_list",
125
- arguments: {},
126
- });
127
- const envelope = parseEnvelope(result);
128
- expect(envelope.ok).toBe(true);
129
- expect(envelope).toHaveProperty("data");
130
- expect(envelope).toHaveProperty("meta");
131
- });
132
-
133
- it("error response has ok: false and error object", async () => {
134
- const result = await client.callTool({
135
- name: "config_channel",
136
- arguments: { value: "beta" },
137
- });
138
- expect(result.isError).toBe(true);
139
- const envelope = parseEnvelope(result);
140
- expect(envelope.ok).toBe(false);
141
- expect(envelope).toHaveProperty("error");
142
- const error = envelope.error as Record<string, unknown>;
143
- expect(error).toHaveProperty("code");
144
- expect(error).toHaveProperty("message");
145
- });
146
-
147
- it("list operations include count in meta", async () => {
148
- const result = await client.callTool({
149
- name: "block_list",
150
- arguments: {},
151
- });
152
- const envelope = parseEnvelope(result);
153
- const meta = envelope.meta as Record<string, unknown>;
154
- expect(typeof meta.count).toBe("number");
155
- });
156
-
157
- it("list operations include filters in meta", async () => {
158
- const result = await client.callTool({
159
- name: "block_list",
160
- arguments: {},
161
- });
162
- const envelope = parseEnvelope(result);
163
- const meta = envelope.meta as Record<string, unknown>;
164
- expect(meta.filters).toBeDefined();
165
- const filters = meta.filters as Record<string, string>;
166
- expect(filters.channel).toBe("normal");
167
- });
168
- });
169
-
170
- // =============================================================================
171
- // Block tools
172
- // =============================================================================
173
-
174
- describe("block_list", () => {
175
- it("returns blocks", async () => {
176
- const result = await client.callTool({
177
- name: "block_list",
178
- arguments: {},
179
- });
180
- const data = parseData(result) as unknown[];
181
- expect(data.length).toBeGreaterThan(0);
182
- const names = data.map((c) => (c as { name: string }).name);
183
- expect(names).toContain("Button");
184
- expect(names).toContain("Card");
185
- });
186
-
187
- it("allTiers widens tier filter without changing channel", async () => {
188
- const restricted = await createTestMcpClient({
189
- config: { tier: "global", channel: "normal" },
190
- });
191
- try {
192
- const without = await restricted.client.callTool({
193
- name: "block_list",
194
- arguments: {},
195
- });
196
- const withoutNames = (parseData(without) as { name: string }[]).map(
197
- (c) => c.name,
198
- );
199
- expect(withoutNames).not.toContain("LXD Panel");
200
-
201
- const withAll = await restricted.client.callTool({
202
- name: "block_list",
203
- arguments: { allTiers: true },
204
- });
205
- const withAllNames = (parseData(withAll) as { name: string }[]).map(
206
- (c) => c.name,
207
- );
208
- expect(withAllNames).toContain("LXD Panel");
209
- expect(withAllNames).not.toContain("Beta Widget");
210
- } finally {
211
- await restricted.cleanup();
212
- }
213
- });
214
- });
215
-
216
- describe("block_lookup", () => {
217
- it("returns detailed block data by default", async () => {
218
- const result = await client.callTool({
219
- name: "block_lookup",
220
- arguments: { names: ["Button"] },
221
- });
222
- const data = parseData(result) as {
223
- results: Record<string, unknown>[];
224
- };
225
- expect(data.results[0]?.name).toBe("Button");
226
- expect(data.results[0]).toHaveProperty("modifierValues");
227
- expect(data.results[0]).toHaveProperty("implementationPaths");
228
- expect(data.results[0]).toHaveProperty("tokens");
229
- });
230
-
231
- it("returns summary when detailed=false", async () => {
232
- const result = await client.callTool({
233
- name: "block_lookup",
234
- arguments: { names: ["Button"], detailed: false },
235
- });
236
- const data = parseData(result) as {
237
- results: Record<string, unknown>[];
238
- };
239
- expect(data.results[0]?.name).toBe("Button");
240
- expect(data.results[0]).not.toHaveProperty("modifierValues");
241
- expect(data.results[0]).not.toHaveProperty("implementationPaths");
242
- });
243
-
244
- it("returns structured per-query errors for unknown blocks", async () => {
245
- const result = await client.callTool({
246
- name: "block_lookup",
247
- arguments: { names: ["NonExistent"] },
248
- });
249
- const data = parseData(result) as {
250
- results: unknown[];
251
- errors: { code: string; query: string }[];
252
- };
253
- expect(data.results).toHaveLength(0);
254
- expect(data.errors[0]?.code).toBe("ENTITY_NOT_FOUND");
255
- expect(data.errors[0]?.query).toBe("NonExistent");
256
- });
257
- });
258
-
259
- // =============================================================================
260
- // Standard tools
261
- // =============================================================================
262
-
263
- describe("standard_list", () => {
264
- it("returns standards", async () => {
265
- const result = await client.callTool({
266
- name: "standard_list",
267
- arguments: {},
268
- });
269
- const data = parseData(result) as unknown[];
270
- expect(data.length).toBeGreaterThan(0);
271
- });
272
-
273
- it("filters by category", async () => {
274
- const all = await client.callTool({
275
- name: "standard_list",
276
- arguments: {},
277
- });
278
- const allData = parseData(all) as { category: string }[];
279
- const categories = [...new Set(allData.map((s) => s.category))];
280
-
281
- const firstCategory = categories[0];
282
- if (firstCategory) {
283
- const filtered = await client.callTool({
284
- name: "standard_list",
285
- arguments: { category: firstCategory },
286
- });
287
- const filteredData = parseData(filtered) as { category: string }[];
288
- expect(filteredData.length).toBeGreaterThan(0);
289
- expect(
290
- filteredData.every(
291
- (s) => s.category.toLowerCase() === firstCategory.toLowerCase(),
292
- ),
293
- ).toBe(true);
294
- }
295
- });
296
-
297
- it("filters by search term", async () => {
298
- const result = await client.callTool({
299
- name: "standard_list",
300
- arguments: { search: "function" },
301
- });
302
- const data = parseData(result) as { name: string; description: string }[];
303
- for (const item of data) {
304
- const matches =
305
- item.name.toLowerCase().includes("function") ||
306
- item.description.toLowerCase().includes("function");
307
- expect(matches).toBe(true);
308
- }
309
- });
310
- });
311
-
312
- describe("standard_lookup", () => {
313
- it("returns detailed standard by default", async () => {
314
- const list = await client.callTool({
315
- name: "standard_list",
316
- arguments: {},
317
- });
318
- const standards = parseData(list) as { name: string }[];
319
- expect(standards.length).toBeGreaterThan(0);
320
- const standardName = standards[0]?.name ?? "";
321
-
322
- const result = await client.callTool({
323
- name: "standard_lookup",
324
- arguments: { names: [standardName] },
325
- });
326
- const data = parseData(result) as {
327
- results: Record<string, unknown>[];
328
- };
329
- expect(data.results[0]?.name).toBe(standardName);
330
- expect(data.results[0]).toHaveProperty("dos");
331
- expect(data.results[0]).toHaveProperty("donts");
332
- });
333
-
334
- it("returns summary when detailed=false", async () => {
335
- const list = await client.callTool({
336
- name: "standard_list",
337
- arguments: {},
338
- });
339
- const standards = parseData(list) as { name: string }[];
340
- const standardName = standards[0]?.name ?? "";
341
-
342
- const result = await client.callTool({
343
- name: "standard_lookup",
344
- arguments: { names: [standardName], detailed: false },
345
- });
346
- const data = parseData(result) as {
347
- results: Record<string, unknown>[];
348
- };
349
- expect(data.results[0]).not.toHaveProperty("dos");
350
- expect(data.results[0]).not.toHaveProperty("donts");
351
- });
352
-
353
- it("returns per-query errors for unknown standard", async () => {
354
- const result = await client.callTool({
355
- name: "standard_lookup",
356
- arguments: { names: ["nonexistent/standard"] },
357
- });
358
- const data = parseData(result) as {
359
- errors: { code: string }[];
360
- };
361
- expect(data.errors[0]?.code).toBe("ENTITY_NOT_FOUND");
362
- });
363
- });
364
-
365
- describe("standard_categories", () => {
366
- it("returns categories", async () => {
367
- const result = await client.callTool({
368
- name: "standard_categories",
369
- arguments: {},
370
- });
371
- const data = parseData(result) as string[];
372
- expect(data.length).toBeGreaterThan(0);
373
- });
374
- });
375
-
376
- // =============================================================================
377
- // Modifier tools
378
- // =============================================================================
379
-
380
- describe("modifier_list", () => {
381
- it("returns modifier families", async () => {
382
- const result = await client.callTool({
383
- name: "modifier_list",
384
- arguments: {},
385
- });
386
- const data = parseData(result) as { name: string; values: string[] }[];
387
- expect(data.length).toBeGreaterThan(0);
388
- const names = data.map((m) => m.name);
389
- expect(names).toContain("importance");
390
- });
391
- });
392
-
393
- describe("modifier_lookup", () => {
394
- it("returns modifier values", async () => {
395
- const result = await client.callTool({
396
- name: "modifier_lookup",
397
- arguments: { names: ["importance"] },
398
- });
399
- const data = parseData(result) as {
400
- results: { name: string; values: string[] }[];
401
- };
402
- expect(data.results[0]?.name).toBe("importance");
403
- expect(data.results[0]?.values).toContain("primary");
404
- });
405
-
406
- it("returns per-query errors for unknown modifier", async () => {
407
- const result = await client.callTool({
408
- name: "modifier_lookup",
409
- arguments: { names: ["nonexistent"] },
410
- });
411
- const data = parseData(result) as {
412
- errors: { code: string }[];
413
- };
414
- expect(data.errors[0]?.code).toBe("ENTITY_NOT_FOUND");
415
- });
416
- });
417
-
418
- // =============================================================================
419
- // Token tools
420
- // =============================================================================
421
-
422
- describe("token_list", () => {
423
- it("returns tokens", async () => {
424
- const result = await client.callTool({
425
- name: "token_list",
426
- arguments: {},
427
- });
428
- const data = parseData(result) as { name: string }[];
429
- expect(data.length).toBeGreaterThan(0);
430
- });
431
- });
432
-
433
- describe("token_lookup", () => {
434
- it("returns token with theme values", async () => {
435
- const result = await client.callTool({
436
- name: "token_lookup",
437
- arguments: { names: ["color.primary"] },
438
- });
439
- const data = parseData(result) as {
440
- results: {
441
- name: string;
442
- values: { theme: string; value: string }[];
443
- }[];
444
- };
445
- expect(data.results[0]?.name).toBe("color.primary");
446
- expect((data.results[0]?.values ?? []).length).toBeGreaterThan(0);
447
- });
448
-
449
- it("returns per-query errors for unknown token", async () => {
450
- const result = await client.callTool({
451
- name: "token_lookup",
452
- arguments: { names: ["nonexistent.token"] },
453
- });
454
- const data = parseData(result) as {
455
- errors: { code: string }[];
456
- };
457
- expect(data.errors[0]?.code).toBe("ENTITY_NOT_FOUND");
458
- });
459
- });
460
-
461
- // =============================================================================
462
- // Tier tools
463
- // =============================================================================
464
-
465
- describe("tier_list", () => {
466
- it("returns tiers", async () => {
467
- const result = await client.callTool({
468
- name: "tier_list",
469
- arguments: {},
470
- });
471
- const data = parseData(result) as { path: string }[];
472
- expect(data.length).toBeGreaterThan(0);
473
- const paths = data.map((t) => t.path);
474
- expect(paths).toContain("global");
475
- });
476
- });
477
-
478
- // =============================================================================
479
- // Config tools
480
- // =============================================================================
481
-
482
- describe("config_show", () => {
483
- it("returns config", async () => {
484
- const result = await client.callTool({
485
- name: "config_show",
486
- arguments: {},
487
- });
488
- const data = parseData(result) as {
489
- tier: string | undefined;
490
- channel: string;
491
- tierChain: string[];
492
- includedReleases: string[];
493
- };
494
- expect(data.channel).toBe("normal");
495
- expect(data.tier).toBeUndefined();
496
- expect(data.tierChain).toEqual([]);
497
- expect(data.includedReleases).toContain("stable");
498
- });
499
-
500
- it("returns condensed config text", async () => {
501
- const result = await client.callTool({
502
- name: "config_show",
503
- arguments: { condensed: true },
504
- });
505
- const envelope = parseEnvelope(result);
506
- expect(envelope.ok).toBe(true);
507
- expect(envelope.condensed).toBe(true);
508
- expect(typeof envelope.text).toBe("string");
509
- expect(envelope.text as string).toContain("Configuration");
510
- });
511
- });
512
-
513
- describe("config_tier", () => {
514
- it("sets, queries, and resets tier in workspace config", async () => {
515
- const dir = mkdtempSync(join(tmpdir(), "pragma-mcp-tier-"));
516
- // Seed a project file so global-first writes stay in this workspace.
517
- writeFileSync(join(dir, "pragma.config.json"), "{}");
518
-
519
- try {
520
- const scoped = await createTestMcpClient({ cwd: dir });
521
-
522
- try {
523
- const setResult = await scoped.client.callTool({
524
- name: "config_tier",
525
- arguments: { path: "global" },
526
- });
527
- expect(parseData(setResult)).toMatchObject({
528
- tier: "global",
529
- action: "set",
530
- });
531
-
532
- const queryResult = await scoped.client.callTool({
533
- name: "config_tier",
534
- arguments: {},
535
- });
536
- expect(parseData(queryResult)).toEqual({
537
- tier: "global",
538
- action: "query",
539
- });
540
-
541
- const resetResult = await scoped.client.callTool({
542
- name: "config_tier",
543
- arguments: { reset: true },
544
- });
545
- expect(parseData(resetResult)).toMatchObject({
546
- tier: null,
547
- action: "reset",
548
- });
549
-
550
- const queriedAfterReset = await scoped.client.callTool({
551
- name: "config_tier",
552
- arguments: {},
553
- });
554
- expect(parseData(queriedAfterReset)).toEqual({
555
- tier: null,
556
- action: "query",
557
- });
558
- } finally {
559
- await scoped.cleanup();
560
- }
561
- } finally {
562
- rmSync(dir, { recursive: true, force: true });
563
- }
564
- });
565
- });
566
-
567
- describe("config_channel", () => {
568
- it("sets, queries, and resets channel in workspace config", async () => {
569
- const dir = mkdtempSync(join(tmpdir(), "pragma-mcp-channel-"));
570
- // Seed a project file so global-first writes stay in this workspace.
571
- writeFileSync(join(dir, "pragma.config.json"), "{}");
572
-
573
- try {
574
- const scoped = await createTestMcpClient({ cwd: dir });
575
-
576
- try {
577
- const setResult = await scoped.client.callTool({
578
- name: "config_channel",
579
- arguments: { value: "experimental" },
580
- });
581
- expect(parseData(setResult)).toMatchObject({
582
- channel: "experimental",
583
- action: "set",
584
- });
585
-
586
- const queryResult = await scoped.client.callTool({
587
- name: "config_channel",
588
- arguments: {},
589
- });
590
- expect(parseData(queryResult)).toEqual({
591
- channel: "experimental",
592
- action: "query",
593
- });
594
-
595
- const resetResult = await scoped.client.callTool({
596
- name: "config_channel",
597
- arguments: { reset: true },
598
- });
599
- expect(parseData(resetResult)).toMatchObject({
600
- channel: "normal",
601
- action: "reset",
602
- });
603
- } finally {
604
- await scoped.cleanup();
605
- }
606
- } finally {
607
- rmSync(dir, { recursive: true, force: true });
608
- }
609
- });
610
-
611
- it("returns an error for invalid channel input", async () => {
612
- const result = await client.callTool({
613
- name: "config_channel",
614
- arguments: { value: "beta" },
615
- });
616
- expect(result.isError).toBe(true);
617
- const envelope = parseEnvelope(result);
618
- const error = envelope.error as McpErrorPayload;
619
- expect(error.code).toBe("INVALID_INPUT");
620
- });
621
- });
622
-
623
- describe("tokens_add_config", () => {
624
- it("writes a token config file and reports its path", async () => {
625
- const dir = mkdtempSync(join(tmpdir(), "pragma-mcp-token-config-"));
626
-
627
- try {
628
- const scoped = await createTestMcpClient({ cwd: dir });
629
-
630
- try {
631
- const result = await scoped.client.callTool({
632
- name: "tokens_add_config",
633
- arguments: {},
634
- });
635
- const data = parseData(result) as {
636
- configPath: string;
637
- tokenSources: string[];
638
- installHint: string;
639
- };
640
- expect(data.configPath).toBe(join(dir, "tokens.config.mjs"));
641
- expect(data.tokenSources).toContain(
642
- "node_modules/@canonical/ds-global/tokens/**/*.json",
643
- );
644
- expect(data.installHint).toContain("@canonical/terrazzo-lsp");
645
- expect(existsSync(data.configPath)).toBe(true);
646
- } finally {
647
- await scoped.cleanup();
648
- }
649
- } finally {
650
- rmSync(dir, { recursive: true, force: true });
651
- }
652
- });
653
-
654
- it("returns recovery metadata when config already exists", async () => {
655
- const dir = mkdtempSync(join(tmpdir(), "pragma-mcp-token-existing-"));
656
- const configPath = join(dir, "tokens.config.mjs");
657
-
658
- try {
659
- writeFileSync(configPath, "// existing\n", "utf-8");
660
- const scoped = await createTestMcpClient({ cwd: dir });
661
-
662
- try {
663
- const result = await scoped.client.callTool({
664
- name: "tokens_add_config",
665
- arguments: {},
666
- });
667
- expect(result.isError).toBe(true);
668
- const envelope = parseEnvelope(result);
669
- const error = envelope.error as McpErrorPayload;
670
- expect(error.code).toBe("INVALID_INPUT");
671
- expect(error.recovery?.tool).toBe("tokens_add_config");
672
- expect(error.recovery?.params).toEqual({ force: true });
673
- } finally {
674
- await scoped.cleanup();
675
- }
676
- } finally {
677
- rmSync(dir, { recursive: true, force: true });
678
- }
679
- });
680
-
681
- it("overwrites an existing config when force=true", async () => {
682
- const dir = mkdtempSync(join(tmpdir(), "pragma-mcp-token-force-"));
683
- const configPath = join(dir, "tokens.config.mjs");
684
-
685
- try {
686
- writeFileSync(configPath, "// existing\n", "utf-8");
687
- const scoped = await createTestMcpClient({ cwd: dir });
688
-
689
- try {
690
- const result = await scoped.client.callTool({
691
- name: "tokens_add_config",
692
- arguments: { force: true },
693
- });
694
- const data = parseData(result) as { configPath: string };
695
- expect(data.configPath).toBe(configPath);
696
- expect(readFileSync(configPath, "utf-8")).toContain(
697
- 'import { defineConfig } from "@canonical/terrazzo";',
698
- );
699
- } finally {
700
- await scoped.cleanup();
701
- }
702
- } finally {
703
- rmSync(dir, { recursive: true, force: true });
704
- }
705
- });
706
- });
707
-
708
- // =============================================================================
709
- // Generator tools (D14 — mutating)
710
- // =============================================================================
711
-
712
- describe("create_component", () => {
713
- it("returns JSON generation plan for react", async () => {
714
- const result = await client.callTool({
715
- name: "create_component",
716
- arguments: {
717
- framework: "react",
718
- componentPath: "src/components/Button",
719
- },
720
- });
721
- expect(result.isError).toBeFalsy();
722
- const data = parseData(result) as Record<string, unknown>;
723
- expect(data.generator).toBeDefined();
724
- expect((data.generator as { name: string }).name).toBe("component/react");
725
- expect(Array.isArray(data.plan)).toBe(true);
726
- });
727
-
728
- it("returns JSON generation plan for svelte", async () => {
729
- const result = await client.callTool({
730
- name: "create_component",
731
- arguments: {
732
- framework: "svelte",
733
- componentPath: "src/lib/components/Toggle",
734
- },
735
- });
736
- expect(result.isError).toBeFalsy();
737
- const data = parseData(result) as Record<string, unknown>;
738
- expect((data.generator as { name: string }).name).toBe("component/svelte");
739
- });
740
-
741
- it("returns error for invalid framework", async () => {
742
- const result = await client.callTool({
743
- name: "create_component",
744
- arguments: {
745
- framework: "angular",
746
- componentPath: "src/components/Button",
747
- },
748
- });
749
- expect(result.isError).toBe(true);
750
- });
751
- });
752
-
753
- describe("create_package", () => {
754
- it("returns JSON generation plan", async () => {
755
- const result = await client.callTool({
756
- name: "create_package",
757
- arguments: {
758
- name: "@canonical/test-pkg",
759
- type: "tool-ts",
760
- },
761
- });
762
- expect(result.isError).toBeFalsy();
763
- const data = parseData(result) as Record<string, unknown>;
764
- expect((data.generator as { name: string }).name).toBe("package");
765
- expect(Array.isArray(data.plan)).toBe(true);
766
- });
767
- });
768
-
769
- // =============================================================================
770
- // LLM Orientation
771
- // =============================================================================
772
-
773
- describe("llm", () => {
774
- it("returns orientation data with context, trees, and commands", async () => {
775
- const result = await client.callTool({
776
- name: "llm",
777
- arguments: {},
778
- });
779
- const data = parseData(result) as {
780
- context: { counts: Record<string, number>; namespaces: string[] };
781
- decisionTrees: { intent: string }[];
782
- commandReference: { command: string }[];
783
- };
784
- expect(data.context.counts.blocks).toBeGreaterThan(0);
785
- expect(data.context.counts.standards).toBeGreaterThan(0);
786
- expect(data.context.namespaces.length).toBeGreaterThan(0);
787
- expect(data.decisionTrees).toHaveLength(5);
788
- expect(data.commandReference.length).toBeGreaterThan(0);
789
- });
790
- });
791
-
792
- // =============================================================================
793
- // Error handling
794
- // =============================================================================
795
-
796
- describe("error handling", () => {
797
- it("all entity-not-found errors include recovery objects", async () => {
798
- const notFoundCalls = [
799
- { name: "block_lookup", arguments: { names: ["X"] } },
800
- { name: "modifier_lookup", arguments: { names: ["X"] } },
801
- { name: "token_lookup", arguments: { names: ["X"] } },
802
- { name: "standard_lookup", arguments: { names: ["X"] } },
803
- ] as const;
804
-
805
- for (const call of notFoundCalls) {
806
- const result = await client.callTool(call);
807
- const data = parseData(result) as {
808
- errors: { code: string }[];
809
- };
810
- expect(data.errors[0]?.code).toBe("ENTITY_NOT_FOUND");
811
- }
812
- });
813
- });
814
-
815
- // =============================================================================
816
- // Ontology tools
817
- // =============================================================================
818
-
819
- describe("ontology_list", () => {
820
- it("returns ontologies", async () => {
821
- const result = await client.callTool({
822
- name: "ontology_list",
823
- arguments: {},
824
- });
825
- const data = parseData(result) as { prefix: string }[];
826
- expect(data.length).toBeGreaterThan(0);
827
- });
828
-
829
- it("returns error envelope shape on failure", async () => {
830
- // ontology_list should always succeed with loaded data,
831
- // so we just verify the success shape has meta.count
832
- const result = await client.callTool({
833
- name: "ontology_list",
834
- arguments: {},
835
- });
836
- const envelope = parseEnvelope(result);
837
- const meta = envelope.meta as Record<string, unknown>;
838
- expect(typeof meta.count).toBe("number");
839
- });
840
- });
841
-
842
- describe("ontology_show", () => {
843
- it("returns ontology details for a valid prefix", async () => {
844
- const result = await client.callTool({
845
- name: "ontology_show",
846
- arguments: { prefix: "ds" },
847
- });
848
- const data = parseData(result) as {
849
- prefix: string;
850
- classes: unknown[];
851
- properties: unknown[];
852
- };
853
- expect(data.prefix).toBe("ds");
854
- expect(data.classes.length).toBeGreaterThan(0);
855
- });
856
-
857
- it("returns error for unknown prefix", async () => {
858
- const result = await client.callTool({
859
- name: "ontology_show",
860
- arguments: { prefix: "nonexistent" },
861
- });
862
- expect(result.isError).toBe(true);
863
- const envelope = parseEnvelope(result);
864
- expect(envelope.ok).toBe(false);
865
- });
866
-
867
- it("returns condensed ontology details", async () => {
868
- const result = await client.callTool({
869
- name: "ontology_show",
870
- arguments: { prefix: "ds", condensed: true },
871
- });
872
- const envelope = parseEnvelope(result);
873
- expect(envelope.ok).toBe(true);
874
- expect(envelope.condensed).toBe(true);
875
- expect(envelope.text).toEqual(expect.stringContaining("## ds:"));
876
- });
877
- });
878
-
879
- // =============================================================================
880
- // Graph tools
881
- // =============================================================================
882
-
883
- describe("graph_query", () => {
884
- it("executes a SPARQL query", async () => {
885
- const result = await client.callTool({
886
- name: "graph_query",
887
- arguments: { sparql: "SELECT ?s WHERE { ?s ?p ?o } LIMIT 1" },
888
- });
889
- const data = parseData(result) as Record<string, unknown>;
890
- expect(data).toBeDefined();
891
- });
892
-
893
- it("returns error for invalid SPARQL", async () => {
894
- const result = await client.callTool({
895
- name: "graph_query",
896
- arguments: { sparql: "NOT VALID SPARQL" },
897
- });
898
- expect(result.isError).toBe(true);
899
- });
900
-
901
- it("returns condensed graph query output", async () => {
902
- const result = await client.callTool({
903
- name: "graph_query",
904
- arguments: {
905
- sparql: "SELECT ?s WHERE { ?s ?p ?o } LIMIT 1",
906
- condensed: true,
907
- },
908
- });
909
- const envelope = parseEnvelope(result);
910
- expect(envelope.ok).toBe(true);
911
- expect(envelope.condensed).toBe(true);
912
- expect(envelope.text).toEqual(expect.stringContaining("bindings"));
913
- });
914
- });
915
-
916
- describe("graph_inspect", () => {
917
- it("inspects a valid URI", async () => {
918
- // First get a valid URI from the graph
919
- const queryResult = await client.callTool({
920
- name: "graph_query",
921
- arguments: { sparql: "SELECT ?s WHERE { ?s ?p ?o } LIMIT 1" },
922
- });
923
- const queryData = parseData(queryResult) as {
924
- type: string;
925
- bindings: { s?: string }[];
926
- };
927
- const validUri = queryData.bindings[0]?.s;
928
- expect(validUri).toBeDefined();
929
- if (!validUri) {
930
- throw new Error("Expected a valid URI");
931
- }
932
-
933
- const result = await client.callTool({
934
- name: "graph_inspect",
935
- arguments: { uri: validUri },
936
- });
937
- const data = parseData(result) as {
938
- uri: string;
939
- groups: { predicate: string; objects: string[] }[];
940
- };
941
- expect(data.uri).toBeDefined();
942
- expect(data.groups.length).toBeGreaterThan(0);
943
- });
944
-
945
- it("returns error for unknown URI", async () => {
946
- const result = await client.callTool({
947
- name: "graph_inspect",
948
- arguments: { uri: "https://example.com/nonexistent" },
949
- });
950
- expect(result.isError).toBe(true);
951
- });
952
-
953
- it("returns condensed graph inspection output", async () => {
954
- const queryResult = await client.callTool({
955
- name: "graph_query",
956
- arguments: { sparql: "SELECT ?s WHERE { ?s ?p ?o } LIMIT 1" },
957
- });
958
- const queryData = parseData(queryResult) as {
959
- bindings: { s?: string }[];
960
- };
961
- const validUri = queryData.bindings[0]?.s;
962
- expect(validUri).toBeDefined();
963
- if (!validUri) {
964
- throw new Error("Expected a valid URI");
965
- }
966
-
967
- const result = await client.callTool({
968
- name: "graph_inspect",
969
- arguments: { uri: validUri, condensed: true },
970
- });
971
- const envelope = parseEnvelope(result);
972
- expect(envelope.ok).toBe(true);
973
- expect(envelope.condensed).toBe(true);
974
- expect(envelope.text).toEqual(expect.stringContaining("## "));
975
- });
976
- });
977
-
978
- // =============================================================================
979
- // Skill tools
980
- // =============================================================================
981
-
982
- describe("story-pack tools", () => {
983
- it("registers <noun>_list and <noun>_lookup from a stories config", async () => {
984
- const scoped = await createTestMcpClient({
985
- ttl: RECIPE_TTL,
986
- config: {
987
- tier: undefined,
988
- channel: "normal",
989
- stories: [RECIPE_STORY],
990
- prefixes: RECIPE_PREFIXES,
991
- },
992
- });
993
-
994
- try {
995
- const tools = (await scoped.client.listTools()).tools.map(
996
- (tool) => tool.name,
997
- );
998
- expect(tools).toHaveLength(32);
999
- expect(tools).toContain("recipe_list");
1000
- expect(tools).toContain("recipe_lookup");
1001
-
1002
- const listResult = await scoped.client.callTool({
1003
- name: "recipe_list",
1004
- arguments: {},
1005
- });
1006
- const rows = parseData(listResult) as { name: string }[];
1007
- expect(rows.map((row) => row.name)).toEqual(["Gazpacho", "Pancakes"]);
1008
-
1009
- const lookupResult = await scoped.client.callTool({
1010
- name: "recipe_lookup",
1011
- arguments: { names: ["pancakes"] },
1012
- });
1013
- const data = parseData(lookupResult) as {
1014
- results: { name: string; instructions: string }[];
1015
- };
1016
- expect(data.results.at(0)?.name).toBe("Pancakes");
1017
- expect(data.results.at(0)?.instructions).toBe("Mix, fry, flip.");
1018
- } finally {
1019
- await scoped.cleanup();
1020
- }
1021
- });
1022
- });
1023
-
1024
- describe("skill_list", () => {
1025
- it("returns skills data", async () => {
1026
- const result = await client.callTool({
1027
- name: "skill_list",
1028
- arguments: {},
1029
- });
1030
- const data = parseData(result) as {
1031
- skills: unknown[];
1032
- sources: unknown[];
1033
- };
1034
- expect(data).toHaveProperty("skills");
1035
- expect(data).toHaveProperty("sources");
1036
- });
1037
- });
1038
-
1039
- // =============================================================================
1040
- // Doctor tool
1041
- // =============================================================================
1042
-
1043
- describe("doctor", () => {
1044
- it("returns health check results", async () => {
1045
- const result = await client.callTool({
1046
- name: "doctor",
1047
- arguments: {},
1048
- });
1049
- const data = parseData(result) as {
1050
- checks: { name: string; status: string }[];
1051
- passed: number;
1052
- failed: number;
1053
- };
1054
- expect(data.checks.length).toBeGreaterThan(0);
1055
- expect(typeof data.passed).toBe("number");
1056
- });
1057
- });
1058
-
1059
- // =============================================================================
1060
- // Info tool
1061
- // =============================================================================
1062
-
1063
- describe("info", () => {
1064
- it("returns pragma info", async () => {
1065
- const result = await client.callTool({
1066
- name: "info",
1067
- arguments: {},
1068
- });
1069
- const data = parseData(result) as {
1070
- version: string;
1071
- channel: string;
1072
- store: { tripleCount: number } | null;
1073
- };
1074
- expect(data.version).toBeDefined();
1075
- expect(data.store).toBeDefined();
1076
- expect(data.store?.tripleCount).toBeGreaterThan(0);
1077
- });
1078
- });
1079
-
1080
- // =============================================================================
1081
- // Capabilities tool
1082
- // =============================================================================
1083
-
1084
- describe("capabilities", () => {
1085
- it("returns enriched tool catalog with counts", async () => {
1086
- const result = await client.callTool({
1087
- name: "capabilities",
1088
- arguments: {},
1089
- });
1090
- const data = parseData(result) as {
1091
- version: string;
1092
- conventions: Record<string, string>;
1093
- discovery_sequence: { stage: number; tool: string; purpose: string }[];
1094
- tools: { name: string; category: string; use_when: string }[];
1095
- counts: {
1096
- total: number;
1097
- read: number;
1098
- write: number;
1099
- orientation: number;
1100
- diagnostic: number;
1101
- };
1102
- limits: Record<string, unknown>;
1103
- };
1104
- const toolNames = data.tools.map((t) => t.name);
1105
- expect(toolNames).toContain("block_list");
1106
- expect(toolNames).toContain("capabilities");
1107
- expect(data.tools.every((t) => t.use_when.length > 0)).toBe(true);
1108
- expect(data.counts.total).toBe(30);
1109
- expect(data.counts.read).toBeGreaterThan(0);
1110
- expect(data.counts.write).toBe(5);
1111
- expect(data.counts.orientation).toBe(2);
1112
- expect(data.counts.diagnostic).toBe(2);
1113
- expect(data.version).toBeDefined();
1114
- expect(data.conventions).toBeDefined();
1115
- expect(data.discovery_sequence.length).toBe(3);
1116
- expect(data.limits).toBeDefined();
1117
- });
1118
- });
1119
-
1120
- // =============================================================================
1121
- // Condensed responses
1122
- // =============================================================================
1123
-
1124
- describe("condensed parameter", () => {
1125
- it("block_list returns condensed text", async () => {
1126
- const result = await client.callTool({
1127
- name: "block_list",
1128
- arguments: { condensed: true },
1129
- });
1130
- const envelope = parseEnvelope(result);
1131
- expect(envelope.ok).toBe(true);
1132
- expect(envelope.condensed).toBe(true);
1133
- expect(typeof envelope.text).toBe("string");
1134
- expect(typeof envelope.tokens).toBe("string");
1135
- expect(envelope).not.toHaveProperty("data");
1136
- });
1137
-
1138
- it("standard_list returns condensed text", async () => {
1139
- const result = await client.callTool({
1140
- name: "standard_list",
1141
- arguments: { condensed: true },
1142
- });
1143
- const envelope = parseEnvelope(result);
1144
- expect(envelope.ok).toBe(true);
1145
- expect(envelope.condensed).toBe(true);
1146
- expect(typeof envelope.text).toBe("string");
1147
- });
1148
-
1149
- it("tier_list returns condensed text", async () => {
1150
- const result = await client.callTool({
1151
- name: "tier_list",
1152
- arguments: { condensed: true },
1153
- });
1154
- const envelope = parseEnvelope(result);
1155
- expect(envelope.ok).toBe(true);
1156
- expect(envelope.condensed).toBe(true);
1157
- });
1158
-
1159
- it("doctor returns condensed text", async () => {
1160
- const result = await client.callTool({
1161
- name: "doctor",
1162
- arguments: { condensed: true },
1163
- });
1164
- const envelope = parseEnvelope(result);
1165
- expect(envelope.ok).toBe(true);
1166
- expect(envelope.condensed).toBe(true);
1167
- expect(typeof envelope.text).toBe("string");
1168
- });
1169
-
1170
- it("info returns condensed text", async () => {
1171
- const result = await client.callTool({
1172
- name: "info",
1173
- arguments: { condensed: true },
1174
- });
1175
- const envelope = parseEnvelope(result);
1176
- expect(envelope.ok).toBe(true);
1177
- expect(envelope.condensed).toBe(true);
1178
- });
1179
-
1180
- it("ontology_list returns condensed text", async () => {
1181
- const result = await client.callTool({
1182
- name: "ontology_list",
1183
- arguments: { condensed: true },
1184
- });
1185
- const envelope = parseEnvelope(result);
1186
- expect(envelope.ok).toBe(true);
1187
- expect(envelope.condensed).toBe(true);
1188
- expect((envelope.text as string).length).toBeGreaterThan(0);
1189
- });
1190
-
1191
- it("token_lookup returns condensed text", async () => {
1192
- const result = await client.callTool({
1193
- name: "token_lookup",
1194
- arguments: { names: ["color.primary"], condensed: true },
1195
- });
1196
- const envelope = parseEnvelope(result);
1197
- expect(envelope.ok).toBe(true);
1198
- expect(envelope.condensed).toBe(true);
1199
- expect(typeof envelope.text).toBe("string");
1200
- });
1201
- });