@canonical/pragma-cli 0.31.0 → 0.33.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 (1091) hide show
  1. package/README.md +35 -421
  2. package/dist/pragma +0 -0
  3. package/package.json +28 -42
  4. package/src/bin.ts +292 -11
  5. package/src/capabilities/block/blockList.test.ts +79 -0
  6. package/src/capabilities/block/blockList.verb.ts +163 -0
  7. package/src/capabilities/block/index.ts +25 -0
  8. package/src/capabilities/block/pack.ts +166 -0
  9. package/src/capabilities/block/parity.test.ts +187 -0
  10. package/src/capabilities/block/tierChain.ts +78 -0
  11. package/src/capabilities/capabilities/capabilities.render.ts +89 -0
  12. package/src/capabilities/capabilities/capabilities.test.ts +140 -0
  13. package/src/capabilities/capabilities/capabilities.verb.ts +48 -0
  14. package/src/capabilities/capabilities/catalog.ts +148 -0
  15. package/src/capabilities/capabilities/hints.ts +212 -0
  16. package/src/capabilities/capabilities/index.ts +13 -0
  17. package/src/capabilities/capabilities/types.ts +60 -0
  18. package/src/capabilities/colophon/collectColophon.ts +68 -0
  19. package/src/capabilities/colophon/colophon.render.test.ts +114 -0
  20. package/src/capabilities/colophon/colophon.render.ts +47 -0
  21. package/src/capabilities/colophon/colophon.test.ts +241 -0
  22. package/src/capabilities/colophon/colophon.verb.ts +44 -0
  23. package/src/capabilities/colophon/index.ts +6 -0
  24. package/src/capabilities/colophon/markdownTerminal.test.ts +50 -0
  25. package/src/capabilities/colophon/markdownTerminal.ts +104 -0
  26. package/src/capabilities/colophon/pragmaColophon.ts +66 -0
  27. package/src/capabilities/colophon/types.ts +29 -0
  28. package/src/capabilities/config/collectConfigShow.ts +32 -0
  29. package/src/capabilities/config/field.render.ts +28 -0
  30. package/src/capabilities/config/fields.ts +81 -0
  31. package/src/capabilities/config/index.ts +6 -0
  32. package/src/capabilities/config/runField.ts +59 -0
  33. package/src/capabilities/config/runSet.ts +38 -0
  34. package/src/capabilities/config/set.test.ts +207 -0
  35. package/src/capabilities/config/set.verb.ts +70 -0
  36. package/src/capabilities/config/show.render.test.ts +65 -0
  37. package/src/capabilities/config/show.render.ts +107 -0
  38. package/src/capabilities/config/show.verb.ts +45 -0
  39. package/src/capabilities/config/types.ts +27 -0
  40. package/src/capabilities/create/byteEquality.subprocess.test.ts +88 -0
  41. package/src/capabilities/create/byteEquality.test.ts +225 -0
  42. package/src/capabilities/create/compiledCreate.subprocess.test.ts +152 -0
  43. package/src/capabilities/create/create.mcp.test.ts +139 -0
  44. package/src/capabilities/create/create.render.ts +50 -0
  45. package/src/capabilities/create/create.test.ts +432 -0
  46. package/src/capabilities/create/create.verb.ts +493 -0
  47. package/src/capabilities/create/cwdJail.test.ts +129 -0
  48. package/src/capabilities/create/generatorToVerbSpec.ts +111 -0
  49. package/src/capabilities/create/index.ts +25 -0
  50. package/src/capabilities/create/pathJail.ts +73 -0
  51. package/src/capabilities/create/pickGenerator.ts +63 -0
  52. package/src/capabilities/create/templates.embedded.generated.ts +53 -0
  53. package/src/capabilities/create/types.ts +8 -0
  54. package/src/capabilities/doctor/checks/checkConfigFile.ts +41 -0
  55. package/src/capabilities/doctor/checks/checkKeStore.ts +39 -0
  56. package/src/capabilities/doctor/checks/checkMcpCommands.ts +114 -0
  57. package/src/capabilities/doctor/checks/checkMcpConfigured.ts +67 -0
  58. package/src/capabilities/doctor/checks/checkNodeVersion.ts +25 -0
  59. package/src/capabilities/doctor/checks/checkPackageRefs.ts +73 -0
  60. package/src/capabilities/doctor/checks/checkPragmaVersion.ts +22 -0
  61. package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +111 -0
  62. package/src/capabilities/doctor/checks/checkShellCompletions.ts +131 -0
  63. package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +60 -0
  64. package/src/capabilities/doctor/checks/deriveBand.test.ts +42 -0
  65. package/src/capabilities/doctor/checks/deriveBand.ts +28 -0
  66. package/src/capabilities/doctor/doctor.render.test.ts +170 -0
  67. package/src/capabilities/doctor/doctor.render.ts +198 -0
  68. package/src/capabilities/doctor/doctor.test.ts +209 -0
  69. package/src/capabilities/doctor/doctor.verb.ts +46 -0
  70. package/src/capabilities/doctor/index.ts +6 -0
  71. package/src/capabilities/doctor/runChecks.ts +100 -0
  72. package/src/capabilities/doctor/types.ts +56 -0
  73. package/src/capabilities/emptyRecovery.test.ts +112 -0
  74. package/src/capabilities/graph/index.ts +21 -0
  75. package/src/capabilities/graph/inspect.render.ts +38 -0
  76. package/src/capabilities/graph/inspect.test.ts +80 -0
  77. package/src/capabilities/graph/inspect.verb.ts +51 -0
  78. package/src/capabilities/graph/query.render.ts +77 -0
  79. package/src/capabilities/graph/query.test.ts +156 -0
  80. package/src/capabilities/graph/query.verb.ts +58 -0
  81. package/src/capabilities/graph/runQuery.ts +49 -0
  82. package/src/capabilities/index.ts +54 -0
  83. package/src/capabilities/info/collectInfo.ts +76 -0
  84. package/src/capabilities/info/index.ts +6 -0
  85. package/src/capabilities/info/info.render.ts +72 -0
  86. package/src/capabilities/info/info.test.ts +127 -0
  87. package/src/capabilities/info/info.verb.ts +46 -0
  88. package/src/capabilities/info/types.ts +42 -0
  89. package/src/capabilities/lazy.test.ts +89 -0
  90. package/src/capabilities/meta/complete.verb.ts +52 -0
  91. package/src/capabilities/meta/index.ts +15 -0
  92. package/src/capabilities/meta/mcp.verb.ts +35 -0
  93. package/src/capabilities/modifier/index.ts +15 -0
  94. package/src/capabilities/modifier/pack.ts +64 -0
  95. package/src/capabilities/ontology/index.ts +19 -0
  96. package/src/capabilities/ontology/ontology.test.ts +246 -0
  97. package/src/capabilities/ontology/queries.ts +197 -0
  98. package/src/capabilities/ontology/render.ts +87 -0
  99. package/src/capabilities/ontology/verbs.ts +269 -0
  100. package/src/capabilities/prompt/index.ts +18 -0
  101. package/src/capabilities/prompt/prompt.render.test.ts +94 -0
  102. package/src/capabilities/prompt/prompt.render.ts +87 -0
  103. package/src/capabilities/prompt/prompt.test.ts +180 -0
  104. package/src/capabilities/prompt/types.ts +30 -0
  105. package/src/capabilities/prompt/verbs.ts +93 -0
  106. package/src/capabilities/reference.test.ts +32 -0
  107. package/src/capabilities/resources/index.ts +15 -0
  108. package/src/capabilities/resources/provider.ts +245 -0
  109. package/src/capabilities/resources/resources.test.ts +213 -0
  110. package/src/capabilities/roundtrip.test.ts +107 -0
  111. package/src/capabilities/scopeTypeSync.test.ts +37 -0
  112. package/src/capabilities/setup/index.ts +12 -0
  113. package/src/capabilities/setup/operations/setupCompletions.ts +141 -0
  114. package/src/capabilities/setup/operations/setupGenerator.ts +403 -0
  115. package/src/capabilities/setup/operations/setupLsp.ts +105 -0
  116. package/src/capabilities/setup/operations/setupMcp.ts +262 -0
  117. package/src/capabilities/setup/operations/setupSkills.ts +205 -0
  118. package/src/capabilities/setup/setup.render.test.ts +109 -0
  119. package/src/capabilities/setup/setup.render.ts +96 -0
  120. package/src/capabilities/setup/setup.test.ts +702 -0
  121. package/src/capabilities/setup/setup.verb.ts +261 -0
  122. package/src/capabilities/setup/shell.ts +85 -0
  123. package/src/capabilities/setup/types.ts +99 -0
  124. package/src/capabilities/shared/assertExecOk.ts +106 -0
  125. package/src/capabilities/shared/bands.ts +16 -0
  126. package/src/capabilities/shared/packageManager.ts +62 -0
  127. package/src/capabilities/shared/registry.ts +70 -0
  128. package/src/capabilities/skill/discover.ts +178 -0
  129. package/src/capabilities/skill/index.ts +12 -0
  130. package/src/capabilities/skill/render.ts +60 -0
  131. package/src/capabilities/skill/skill.test.ts +142 -0
  132. package/src/capabilities/skill/verbs.ts +100 -0
  133. package/src/capabilities/sources/collectStatus.ts +102 -0
  134. package/src/capabilities/sources/index.ts +15 -0
  135. package/src/capabilities/sources/installSkills.ts +124 -0
  136. package/src/capabilities/sources/runUpdate.ts +464 -0
  137. package/src/capabilities/sources/sources.test.ts +828 -0
  138. package/src/capabilities/sources/status.render.test.ts +65 -0
  139. package/src/capabilities/sources/status.render.ts +83 -0
  140. package/src/capabilities/sources/status.verb.ts +42 -0
  141. package/src/capabilities/sources/types.ts +51 -0
  142. package/src/capabilities/sources/update.render.ts +35 -0
  143. package/src/capabilities/sources/update.verb.ts +76 -0
  144. package/src/capabilities/standard/index.ts +18 -0
  145. package/src/capabilities/standard/pack.ts +128 -0
  146. package/src/capabilities/standard/parity.test.ts +208 -0
  147. package/src/capabilities/surface.test.ts +233 -0
  148. package/src/capabilities/tier/index.ts +19 -0
  149. package/src/capabilities/tier/lookup.render.test.ts +72 -0
  150. package/src/capabilities/tier/lookup.render.ts +59 -0
  151. package/src/capabilities/tier/lookup.test.ts +83 -0
  152. package/src/capabilities/tier/lookup.verb.ts +44 -0
  153. package/src/capabilities/tier/pack.ts +28 -0
  154. package/src/capabilities/tier/runLookup.ts +87 -0
  155. package/src/capabilities/token/addConfig.render.ts +27 -0
  156. package/src/capabilities/token/addConfig.test.ts +62 -0
  157. package/src/capabilities/token/addConfig.verb.ts +40 -0
  158. package/src/capabilities/token/index.ts +19 -0
  159. package/src/capabilities/token/pack.ts +58 -0
  160. package/src/capabilities/token/runAddConfig.ts +95 -0
  161. package/src/capabilities/upgrade/index.ts +6 -0
  162. package/src/capabilities/upgrade/runUpgrade.ts +119 -0
  163. package/src/capabilities/upgrade/types.ts +21 -0
  164. package/src/capabilities/upgrade/upgrade.render.ts +55 -0
  165. package/src/capabilities/upgrade/upgrade.test.ts +372 -0
  166. package/src/capabilities/upgrade/upgrade.verb.ts +56 -0
  167. package/src/constants.test.ts +33 -0
  168. package/src/constants.ts +38 -70
  169. package/src/index.ts +27 -122
  170. package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +339 -0
  171. package/src/kernel/completion/bashDrive.test.ts +73 -0
  172. package/src/kernel/completion/complete.test.ts +99 -0
  173. package/src/kernel/completion/complete.ts +77 -0
  174. package/src/kernel/completion/emitScripts.test.ts +173 -0
  175. package/src/kernel/completion/emitScripts.ts +122 -0
  176. package/src/kernel/completion/entitySource.test.ts +198 -0
  177. package/src/kernel/completion/entitySource.ts +277 -0
  178. package/src/kernel/completion/index.ts +42 -0
  179. package/src/kernel/completion/model.test.ts +405 -0
  180. package/src/kernel/completion/model.ts +258 -0
  181. package/src/kernel/completion/parse.test.ts +336 -0
  182. package/src/kernel/completion/parse.ts +294 -0
  183. package/src/kernel/completion/rank.test.ts +100 -0
  184. package/src/kernel/completion/rank.ts +118 -0
  185. package/src/kernel/completion/resolve.test.ts +204 -0
  186. package/src/kernel/completion/resolve.ts +133 -0
  187. package/src/kernel/completion/safety.test.ts +374 -0
  188. package/src/kernel/completion/templates/bash.ts +249 -0
  189. package/src/kernel/completion/templates/fish.ts +245 -0
  190. package/src/kernel/completion/templates/shared.ts +134 -0
  191. package/src/kernel/completion/templates/zsh.ts +246 -0
  192. package/src/kernel/completion/types.ts +153 -0
  193. package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +11 -0
  194. package/src/kernel/config/defaults.ts +28 -0
  195. package/src/kernel/config/evaluateProjectConfig.ts +119 -0
  196. package/src/kernel/config/findProjectConfig.ts +45 -0
  197. package/src/kernel/config/firstRun.test.ts +60 -0
  198. package/src/kernel/config/firstRun.ts +91 -0
  199. package/src/kernel/config/globalConfig.ts +94 -0
  200. package/src/kernel/config/index.ts +35 -0
  201. package/src/kernel/config/paths.ts +39 -0
  202. package/src/kernel/config/readConfig.test.ts +245 -0
  203. package/src/kernel/config/readConfig.ts +94 -0
  204. package/src/kernel/config/schema.ts +56 -0
  205. package/src/kernel/config/types.ts +106 -0
  206. package/src/kernel/config/writeConfigField.ts +82 -0
  207. package/src/kernel/error/PragmaError.test.ts +119 -0
  208. package/src/kernel/error/PragmaError.ts +182 -0
  209. package/src/kernel/error/constants.ts +38 -0
  210. package/src/kernel/error/fromTaskError.test.ts +83 -0
  211. package/src/kernel/error/fromTaskError.ts +80 -0
  212. package/src/kernel/error/index.ts +23 -0
  213. package/src/kernel/error/recovery.test.ts +60 -0
  214. package/src/kernel/error/recovery.ts +49 -0
  215. package/src/kernel/error/renderError.ts +101 -0
  216. package/src/kernel/error/serialize.ts +28 -0
  217. package/src/kernel/error/types.ts +62 -0
  218. package/src/kernel/packs/collect.test.ts +138 -0
  219. package/src/kernel/packs/collect.ts +108 -0
  220. package/src/kernel/packs/compile.test.ts +229 -0
  221. package/src/kernel/packs/compile.ts +315 -0
  222. package/src/kernel/packs/disclosure.test.ts +200 -0
  223. package/src/kernel/packs/disclosure.ts +98 -0
  224. package/src/kernel/packs/glob.ts +39 -0
  225. package/src/kernel/packs/graphql/buildLookupDocument.ts +397 -0
  226. package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +217 -0
  227. package/src/kernel/packs/graphql/nameMap.ts +67 -0
  228. package/src/kernel/packs/graphqlSource.test.ts +383 -0
  229. package/src/kernel/packs/iri.ts +78 -0
  230. package/src/kernel/packs/renderPack.ts +196 -0
  231. package/src/kernel/packs/resolveEntity.ts +232 -0
  232. package/src/kernel/packs/runBodies.ts +157 -0
  233. package/src/kernel/packs/sample.ts +60 -0
  234. package/src/kernel/packs/schema.ts +328 -0
  235. package/src/kernel/packs/sparql/applyFilters.ts +83 -0
  236. package/src/kernel/packs/sparql/applySearch.ts +33 -0
  237. package/src/kernel/packs/sparql/buildLookupQuery.ts +180 -0
  238. package/src/kernel/packs/sparql/escape.ts +22 -0
  239. package/src/kernel/packs/sparql/runSelect.test.ts +80 -0
  240. package/src/kernel/packs/sparql/runSelect.ts +84 -0
  241. package/src/kernel/packs/toolDescription.test.ts +81 -0
  242. package/src/kernel/packs/types.ts +337 -0
  243. package/src/kernel/packs/uniqueness.ts +35 -0
  244. package/src/kernel/project/cli/buildProgram.test.ts +431 -0
  245. package/src/kernel/project/cli/buildProgram.ts +291 -0
  246. package/src/kernel/project/cli/dispatch.test.ts +288 -0
  247. package/src/kernel/project/cli/dispatch.ts +334 -0
  248. package/src/kernel/project/cli/exitCodes.test.ts +59 -0
  249. package/src/kernel/project/cli/exitCodes.ts +68 -0
  250. package/src/kernel/project/cli/globalFlags.test.ts +107 -0
  251. package/src/kernel/project/cli/globalFlags.ts +149 -0
  252. package/src/kernel/project/cli/helpFormat.ts +58 -0
  253. package/src/kernel/project/cli/index.ts +21 -0
  254. package/src/kernel/project/cli/interactionSeam.test.ts +99 -0
  255. package/src/kernel/project/cli/rootHelp.ts +220 -0
  256. package/src/kernel/project/cli/suggest.test.ts +54 -0
  257. package/src/kernel/project/cli/suggest.ts +67 -0
  258. package/src/kernel/project/cli/suggestNames.ts +122 -0
  259. package/src/kernel/project/cli/verbHelp.test.ts +138 -0
  260. package/src/kernel/project/cli/verbHelp.ts +144 -0
  261. package/src/kernel/project/mcp/buildServer.ts +70 -0
  262. package/src/kernel/project/mcp/envelope.ts +44 -0
  263. package/src/kernel/project/mcp/index.ts +8 -0
  264. package/src/kernel/project/mcp/instructions.ts +48 -0
  265. package/src/kernel/project/mcp/mcpError.ts +52 -0
  266. package/src/kernel/project/mcp/parity.test.ts +72 -0
  267. package/src/kernel/project/mcp/prompts/prompts.test.ts +104 -0
  268. package/src/kernel/project/mcp/prompts/provider.ts +104 -0
  269. package/src/kernel/project/mcp/prompts/source.ts +194 -0
  270. package/src/kernel/project/mcp/registerVerb.test.ts +238 -0
  271. package/src/kernel/project/mcp/registerVerb.ts +296 -0
  272. package/src/kernel/project/mcp/serve.ts +34 -0
  273. package/src/kernel/project/mcp/toolDescriptions.test.ts +80 -0
  274. package/src/kernel/render/__snapshots__/renderers.test.ts.snap +127 -0
  275. package/src/kernel/render/compactUri.ts +25 -0
  276. package/src/kernel/render/contracts.ts +72 -0
  277. package/src/kernel/render/disclosure.ts +44 -0
  278. package/src/kernel/render/envelope.ts +50 -0
  279. package/src/kernel/render/formatters.ts +31 -0
  280. package/src/kernel/render/index.ts +30 -0
  281. package/src/kernel/render/prefixes.ts +21 -0
  282. package/src/kernel/render/renderers.test.ts +205 -0
  283. package/src/kernel/render/renderers.ts +447 -0
  284. package/src/kernel/render/style.test.ts +31 -0
  285. package/src/kernel/render/style.ts +74 -0
  286. package/src/kernel/render/writeStdout.test.ts +43 -0
  287. package/src/kernel/render/writeStdout.ts +49 -0
  288. package/src/kernel/runtime/boot.test.ts +69 -0
  289. package/src/kernel/runtime/boot.ts +59 -0
  290. package/src/kernel/runtime/facade.test.ts +125 -0
  291. package/src/kernel/runtime/facade.ts +47 -0
  292. package/src/kernel/runtime/graphpack/build.ts +176 -0
  293. package/src/kernel/runtime/graphpack/buildIndex.test.ts +103 -0
  294. package/src/kernel/runtime/graphpack/buildIndex.ts +317 -0
  295. package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +5 -0
  296. package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +3 -0
  297. package/src/kernel/runtime/graphpack/embedded/sample.ttl +39 -0
  298. package/src/kernel/runtime/graphpack/embedded.ts +70 -0
  299. package/src/kernel/runtime/graphpack/graphpack.test.ts +221 -0
  300. package/src/kernel/runtime/graphpack/hash.ts +46 -0
  301. package/src/kernel/runtime/graphpack/index.ts +21 -0
  302. package/src/kernel/runtime/graphpack/manifest.ts +55 -0
  303. package/src/kernel/runtime/graphpack/read.ts +117 -0
  304. package/src/kernel/runtime/graphpack/types.ts +125 -0
  305. package/src/kernel/runtime/index.ts +15 -0
  306. package/src/kernel/runtime/loadSession.ts +48 -0
  307. package/src/kernel/runtime/lock.ts +90 -0
  308. package/src/kernel/runtime/paths.ts +37 -0
  309. package/src/kernel/runtime/probe.test.ts +16 -0
  310. package/src/kernel/runtime/probe.ts +39 -0
  311. package/src/kernel/runtime/readEntity.ts +83 -0
  312. package/src/kernel/runtime/refs/gitOps.ts +88 -0
  313. package/src/kernel/runtime/refs/parseRef.test.ts +34 -0
  314. package/src/kernel/runtime/refs/parseRef.ts +103 -0
  315. package/src/kernel/runtime/refs/resolve.ts +380 -0
  316. package/src/kernel/runtime/resolveSources.test.ts +154 -0
  317. package/src/kernel/runtime/resolveSources.ts +66 -0
  318. package/src/kernel/runtime/store.test.ts +94 -0
  319. package/src/kernel/runtime/store.ts +90 -0
  320. package/src/kernel/runtime/storeReadiness.ts +61 -0
  321. package/src/kernel/runtime/storeless.test.ts +86 -0
  322. package/src/kernel/runtime/types.ts +210 -0
  323. package/src/kernel/runtime/wasmEmbed.test.ts +144 -0
  324. package/src/kernel/spec/asVerb.ts +23 -0
  325. package/src/kernel/spec/emitReference.test.ts +196 -0
  326. package/src/kernel/spec/emitReference.ts +491 -0
  327. package/src/kernel/spec/emitSurface.test.ts +65 -0
  328. package/src/kernel/spec/emitSurface.ts +225 -0
  329. package/src/kernel/spec/index.ts +36 -0
  330. package/src/kernel/spec/surfaceConformance.test.ts +94 -0
  331. package/src/kernel/spec/surfaceConformance.ts +135 -0
  332. package/src/kernel/spec/types.ts +233 -0
  333. package/src/kernel/spec/validate.test.ts +81 -0
  334. package/src/kernel/spec/validate.ts +125 -0
  335. package/src/testing/PARITY_GAPS.test.ts +32 -0
  336. package/src/testing/PARITY_GAPS.ts +179 -0
  337. package/src/testing/behavioral/README.md +164 -0
  338. package/src/testing/behavioral/agentSession.mcp.test.ts +160 -0
  339. package/src/testing/behavioral/autoLlm.e2e.test.ts +54 -0
  340. package/src/testing/behavioral/completion.test.ts +132 -0
  341. package/src/testing/behavioral/disclosure.test.ts +115 -0
  342. package/src/testing/behavioral/docExamples.test.ts +283 -0
  343. package/src/testing/behavioral/errorMatrix.mcp.test.ts +120 -0
  344. package/src/testing/behavioral/errorMatrix.storeless.test.ts +124 -0
  345. package/src/testing/behavioral/exitCodes.e2e.test.ts +53 -0
  346. package/src/testing/behavioral/firstRun.e2e.test.ts +40 -0
  347. package/src/testing/behavioral/harness.foundation.test.ts +136 -0
  348. package/src/testing/behavioral/journeys.cli.test.ts +131 -0
  349. package/src/testing/behavioral/journeys.defaultPack.test.ts +571 -0
  350. package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +66 -0
  351. package/src/testing/behavioral/journeys.livePack.e2e.test.ts +129 -0
  352. package/src/testing/behavioral/journeys.mcpLifecycle.mcp.test.ts +176 -0
  353. package/src/testing/behavioral/liveReadSurface.ts +80 -0
  354. package/src/testing/behavioral/mcpServe.e2e.test.ts +21 -0
  355. package/src/testing/behavioral/mcpSurface.test.ts +139 -0
  356. package/src/testing/behavioral/parity.test.ts +224 -0
  357. package/src/testing/behavioral/rootCli.e2e.test.ts +62 -0
  358. package/src/testing/behavioral/staleCommands.test.ts +76 -0
  359. package/src/testing/eval/__snapshots__/eval.test.ts.snap +201 -0
  360. package/src/testing/eval/cases/assembly.ts +195 -0
  361. package/src/testing/eval/cases/effectful.ts +248 -0
  362. package/src/testing/eval/cases/readNouns.ts +235 -0
  363. package/src/testing/eval/cases/stable.ts +163 -0
  364. package/src/testing/eval/eval.test.ts +74 -0
  365. package/src/testing/eval/harness.ts +91 -0
  366. package/src/testing/eval/report.ts +58 -0
  367. package/src/testing/fixtures/blockGraph.ts +112 -0
  368. package/src/testing/fixtures/completionFixture.ts +239 -0
  369. package/src/testing/fixtures/fixtureCapability.ts +331 -0
  370. package/src/testing/fixtures/graph/canonical.ts +184 -0
  371. package/src/testing/fixtures/graph/defaultPack.ts +178 -0
  372. package/src/testing/fixtures/graph/owlExport.ts +95 -0
  373. package/src/testing/fixtures/packs/recipe.ts +78 -0
  374. package/src/testing/helpers/extractSnippets.ts +29 -0
  375. package/src/testing/helpers/fixtureGraph.ts +148 -0
  376. package/src/testing/helpers/golden.ts +45 -0
  377. package/src/testing/helpers/packRuntime.ts +118 -0
  378. package/src/testing/helpers/parity.ts +86 -0
  379. package/src/testing/helpers/projectCli.ts +35 -0
  380. package/src/testing/helpers/projectMcp.ts +145 -0
  381. package/src/testing/helpers/runCli.ts +128 -0
  382. package/src/testing/perf/budgets.test.ts +164 -0
  383. package/src/testing/perf/budgets.ts +37 -0
  384. package/src/testing/perf/globalSetup.ts +30 -0
  385. package/src/testing/perf/measure.ts +97 -0
  386. package/src/testing/setupXdgIsolation.ts +13 -12
  387. package/src/types.ts +42 -0
  388. package/src/bin.test.ts +0 -54
  389. package/src/compile-validation.runner.ts +0 -137
  390. package/src/compile-validation.ts +0 -191
  391. package/src/completions/computeSocketPath.test.ts +0 -26
  392. package/src/completions/computeSocketPath.ts +0 -16
  393. package/src/completions/constants.ts +0 -25
  394. package/src/completions/handleQuery.test.ts +0 -125
  395. package/src/completions/handleQuery.ts +0 -49
  396. package/src/completions/index.ts +0 -14
  397. package/src/completions/queryCompletions.test.ts +0 -105
  398. package/src/completions/queryCompletions.ts +0 -75
  399. package/src/completions/querySocket.test.ts +0 -101
  400. package/src/completions/querySocket.ts +0 -71
  401. package/src/completions/startCompletionsServer.test.ts +0 -74
  402. package/src/completions/startCompletionsServer.ts +0 -75
  403. package/src/completions/startCompletionsServer.unit.test.ts +0 -131
  404. package/src/completions/waitForSocket.test.ts +0 -27
  405. package/src/completions/waitForSocket.ts +0 -27
  406. package/src/config/configExists.ts +0 -14
  407. package/src/config/defaultConfig.test.ts +0 -33
  408. package/src/config/defaultConfig.ts +0 -59
  409. package/src/config/defaults.json +0 -17
  410. package/src/config/findProjectConfigPath.test.ts +0 -53
  411. package/src/config/findProjectConfigPath.ts +0 -36
  412. package/src/config/index.ts +0 -21
  413. package/src/config/mergeConfigFileUpdate.ts +0 -58
  414. package/src/config/parseConfigValues.ts +0 -217
  415. package/src/config/readConfig.test.ts +0 -395
  416. package/src/config/readConfig.ts +0 -21
  417. package/src/config/readConfigLayers.test.ts +0 -109
  418. package/src/config/readConfigLayers.ts +0 -118
  419. package/src/config/resolveConfigPath.test.ts +0 -20
  420. package/src/config/resolveConfigPath.ts +0 -11
  421. package/src/config/resolveGlobalConfigPath.ts +0 -13
  422. package/src/config/resolveWriteConfigPath.test.ts +0 -53
  423. package/src/config/resolveWriteConfigPath.ts +0 -31
  424. package/src/config/types.ts +0 -128
  425. package/src/config/writeConfig.ts +0 -37
  426. package/src/domains/block/blockConfig.ts +0 -97
  427. package/src/domains/block/commands/index.ts +0 -5
  428. package/src/domains/block/commands/list.test.ts +0 -111
  429. package/src/domains/block/commands/list.ts +0 -11
  430. package/src/domains/block/commands/lookup.test.ts +0 -187
  431. package/src/domains/block/commands/lookup.ts +0 -14
  432. package/src/domains/block/commands/sample.ts +0 -56
  433. package/src/domains/block/formatters/index.ts +0 -5
  434. package/src/domains/block/formatters/list.test.ts +0 -107
  435. package/src/domains/block/formatters/list.ts +0 -50
  436. package/src/domains/block/formatters/lookup.test.ts +0 -318
  437. package/src/domains/block/formatters/lookup.ts +0 -149
  438. package/src/domains/block/formatters/sample.ts +0 -21
  439. package/src/domains/block/formatters/types.ts +0 -16
  440. package/src/domains/block/helpers/index.ts +0 -4
  441. package/src/domains/block/helpers/resolveAspects.test.ts +0 -64
  442. package/src/domains/block/helpers/resolveAspects.ts +0 -35
  443. package/src/domains/block/index.ts +0 -25
  444. package/src/domains/block/mcp/index.ts +0 -2
  445. package/src/domains/block/mcp/specs.ts +0 -67
  446. package/src/domains/block/operations/index.ts +0 -5
  447. package/src/domains/block/operations/list.test.ts +0 -80
  448. package/src/domains/block/operations/list.ts +0 -72
  449. package/src/domains/block/operations/lookup.test.ts +0 -129
  450. package/src/domains/block/operations/lookup.ts +0 -446
  451. package/src/domains/block/operations/sample.ts +0 -41
  452. package/src/domains/block/orchestration/blockEmptyError.test.ts +0 -26
  453. package/src/domains/block/orchestration/blockEmptyError.ts +0 -19
  454. package/src/domains/block/orchestration/buildBlockFilters.ts +0 -12
  455. package/src/domains/block/orchestration/enrichBlocks.ts +0 -44
  456. package/src/domains/block/orchestration/index.ts +0 -5
  457. package/src/domains/block/orchestration/resolveBlockList.ts +0 -39
  458. package/src/domains/block/orchestration/resolveBlockLookup.ts +0 -35
  459. package/src/domains/block/stories.test.ts +0 -28
  460. package/src/domains/block/stories.ts +0 -260
  461. package/src/domains/block/types.ts +0 -30
  462. package/src/domains/config/commands/channel.test.ts +0 -128
  463. package/src/domains/config/commands/channel.ts +0 -99
  464. package/src/domains/config/commands/configScope.ts +0 -46
  465. package/src/domains/config/commands/framework.test.ts +0 -119
  466. package/src/domains/config/commands/framework.ts +0 -103
  467. package/src/domains/config/commands/index.ts +0 -6
  468. package/src/domains/config/commands/show.test.ts +0 -61
  469. package/src/domains/config/commands/show.ts +0 -11
  470. package/src/domains/config/commands/tier.test.ts +0 -102
  471. package/src/domains/config/commands/tier.ts +0 -97
  472. package/src/domains/config/commands/trace.test.ts +0 -165
  473. package/src/domains/config/commands/trace.ts +0 -83
  474. package/src/domains/config/formatters/channel.test.ts +0 -70
  475. package/src/domains/config/formatters/channel.ts +0 -37
  476. package/src/domains/config/formatters/framework.ts +0 -37
  477. package/src/domains/config/formatters/index.ts +0 -6
  478. package/src/domains/config/formatters/show.test.ts +0 -153
  479. package/src/domains/config/formatters/show.ts +0 -89
  480. package/src/domains/config/formatters/tier.test.ts +0 -86
  481. package/src/domains/config/formatters/tier.ts +0 -48
  482. package/src/domains/config/formatters/trace.ts +0 -28
  483. package/src/domains/config/index.ts +0 -36
  484. package/src/domains/config/mcp/index.ts +0 -2
  485. package/src/domains/config/mcp/specs.ts +0 -100
  486. package/src/domains/config/operations/index.ts +0 -6
  487. package/src/domains/config/operations/show.test.ts +0 -78
  488. package/src/domains/config/operations/show.ts +0 -48
  489. package/src/domains/config/operations/types.ts +0 -20
  490. package/src/domains/config/operations/validateChannel.test.ts +0 -36
  491. package/src/domains/config/operations/validateChannel.ts +0 -24
  492. package/src/domains/config/operations/validateFramework.ts +0 -24
  493. package/src/domains/config/operations/validateTier.test.ts +0 -65
  494. package/src/domains/config/operations/validateTier.ts +0 -43
  495. package/src/domains/config/stories.ts +0 -42
  496. package/src/domains/config/tasks/index.ts +0 -6
  497. package/src/domains/config/tasks/setChannel.ts +0 -21
  498. package/src/domains/config/tasks/setFramework.ts +0 -21
  499. package/src/domains/config/tasks/setTier.ts +0 -20
  500. package/src/domains/config/tasks/setTrace.ts +0 -20
  501. package/src/domains/config/tasks/writeConfigField.ts +0 -41
  502. package/src/domains/create/generatorPack/bundled.ts +0 -49
  503. package/src/domains/create/generatorPack/compileGeneratorPack.test.ts +0 -159
  504. package/src/domains/create/generatorPack/compileGeneratorPack.ts +0 -312
  505. package/src/domains/create/index.ts +0 -21
  506. package/src/domains/create/mcp/index.ts +0 -2
  507. package/src/domains/create/mcp/specs.ts +0 -13
  508. package/src/domains/create/renderGeneratorUi.test.ts +0 -103
  509. package/src/domains/create/renderGeneratorUi.ts +0 -65
  510. package/src/domains/doctor/commands/doctor.test.ts +0 -75
  511. package/src/domains/doctor/commands/doctor.ts +0 -43
  512. package/src/domains/doctor/commands/index.ts +0 -2
  513. package/src/domains/doctor/formatters/doctor.test.ts +0 -165
  514. package/src/domains/doctor/formatters/doctor.ts +0 -136
  515. package/src/domains/doctor/formatters/index.ts +0 -2
  516. package/src/domains/doctor/index.ts +0 -9
  517. package/src/domains/doctor/mcp/index.ts +0 -2
  518. package/src/domains/doctor/mcp/specs.ts +0 -41
  519. package/src/domains/doctor/operations/checks/checkConfigFile.ts +0 -42
  520. package/src/domains/doctor/operations/checks/checkKeStore.ts +0 -38
  521. package/src/domains/doctor/operations/checks/checkMcpCommands.ts +0 -133
  522. package/src/domains/doctor/operations/checks/checkMcpConfigured.ts +0 -65
  523. package/src/domains/doctor/operations/checks/checkNodeVersion.ts +0 -25
  524. package/src/domains/doctor/operations/checks/checkPackageRefs.ts +0 -76
  525. package/src/domains/doctor/operations/checks/checkPragmaVersion.ts +0 -20
  526. package/src/domains/doctor/operations/checks/checkShellCompletions.ts +0 -42
  527. package/src/domains/doctor/operations/checks/checkSkillsSymlinked.ts +0 -64
  528. package/src/domains/doctor/operations/checks/index.ts +0 -10
  529. package/src/domains/doctor/operations/checks.test.ts +0 -307
  530. package/src/domains/doctor/operations/index.ts +0 -3
  531. package/src/domains/doctor/operations/runChecks.test.ts +0 -176
  532. package/src/domains/doctor/operations/runChecks.ts +0 -78
  533. package/src/domains/doctor/operations/types.ts +0 -42
  534. package/src/domains/graph/commands/index.ts +0 -4
  535. package/src/domains/graph/commands/inspect.test.ts +0 -94
  536. package/src/domains/graph/commands/inspect.ts +0 -63
  537. package/src/domains/graph/commands/query.test.ts +0 -94
  538. package/src/domains/graph/commands/query.ts +0 -60
  539. package/src/domains/graph/formatters/index.ts +0 -4
  540. package/src/domains/graph/formatters/inspect.ts +0 -50
  541. package/src/domains/graph/formatters/query.test.ts +0 -87
  542. package/src/domains/graph/formatters/query.ts +0 -74
  543. package/src/domains/graph/helpers/index.ts +0 -3
  544. package/src/domains/graph/helpers/resolveUri.test.ts +0 -50
  545. package/src/domains/graph/helpers/resolveUri.ts +0 -77
  546. package/src/domains/graph/index.ts +0 -22
  547. package/src/domains/graph/mcp/index.ts +0 -2
  548. package/src/domains/graph/mcp/specs.ts +0 -82
  549. package/src/domains/graph/operations/executeQuery.test.ts +0 -68
  550. package/src/domains/graph/operations/executeQuery.ts +0 -32
  551. package/src/domains/graph/operations/index.ts +0 -4
  552. package/src/domains/graph/operations/inspectUri.test.ts +0 -101
  553. package/src/domains/graph/operations/inspectUri.ts +0 -64
  554. package/src/domains/graphql/commands/build.test.ts +0 -196
  555. package/src/domains/graphql/commands/build.ts +0 -117
  556. package/src/domains/graphql/commands/check.test.ts +0 -141
  557. package/src/domains/graphql/commands/check.ts +0 -81
  558. package/src/domains/graphql/commands/index.ts +0 -5
  559. package/src/domains/graphql/commands/serve.test.ts +0 -46
  560. package/src/domains/graphql/commands/serve.ts +0 -141
  561. package/src/domains/graphql/constants.ts +0 -10
  562. package/src/domains/graphql/formatters/index.ts +0 -3
  563. package/src/domains/graphql/formatters/report.ts +0 -78
  564. package/src/domains/graphql/helpers/gatherSources.test.ts +0 -92
  565. package/src/domains/graphql/helpers/gatherSources.ts +0 -58
  566. package/src/domains/graphql/helpers/index.ts +0 -6
  567. package/src/domains/graphql/helpers/parsePrefixes.test.ts +0 -44
  568. package/src/domains/graphql/helpers/parsePrefixes.ts +0 -38
  569. package/src/domains/graphql/helpers/resolveSourceFiles.test.ts +0 -65
  570. package/src/domains/graphql/helpers/resolveSourceFiles.ts +0 -66
  571. package/src/domains/graphql/helpers/routeGraphql.test.ts +0 -43
  572. package/src/domains/graphql/helpers/routeGraphql.ts +0 -28
  573. package/src/domains/graphql/index.ts +0 -24
  574. package/src/domains/graphql/operations/compileSchema.test.ts +0 -95
  575. package/src/domains/graphql/operations/compileSchema.ts +0 -107
  576. package/src/domains/graphql/operations/createSchemaServer.test.ts +0 -50
  577. package/src/domains/graphql/operations/createSchemaServer.ts +0 -75
  578. package/src/domains/graphql/operations/ensureSchemaArtifact.test.ts +0 -167
  579. package/src/domains/graphql/operations/ensureSchemaArtifact.ts +0 -178
  580. package/src/domains/graphql/operations/index.ts +0 -17
  581. package/src/domains/graphql/types.ts +0 -29
  582. package/src/domains/info/commands/index.ts +0 -4
  583. package/src/domains/info/commands/info.test.ts +0 -88
  584. package/src/domains/info/commands/info.ts +0 -47
  585. package/src/domains/info/commands/upgrade.test.ts +0 -183
  586. package/src/domains/info/commands/upgrade.ts +0 -153
  587. package/src/domains/info/constants.test.ts +0 -22
  588. package/src/domains/info/constants.ts +0 -15
  589. package/src/domains/info/formatters/index.ts +0 -8
  590. package/src/domains/info/formatters/info.test.ts +0 -207
  591. package/src/domains/info/formatters/info.ts +0 -131
  592. package/src/domains/info/formatters/upgrade.test.ts +0 -136
  593. package/src/domains/info/formatters/upgrade.ts +0 -70
  594. package/src/domains/info/index.ts +0 -9
  595. package/src/domains/info/mcp/index.ts +0 -2
  596. package/src/domains/info/mcp/specs.ts +0 -65
  597. package/src/domains/info/operations/checkRegistryVersion.test.ts +0 -124
  598. package/src/domains/info/operations/checkRegistryVersion.ts +0 -45
  599. package/src/domains/info/operations/collectEntityCounts.test.ts +0 -156
  600. package/src/domains/info/operations/collectEntityCounts.ts +0 -123
  601. package/src/domains/info/operations/collectInfo.test.ts +0 -122
  602. package/src/domains/info/operations/collectInfo.ts +0 -94
  603. package/src/domains/info/operations/collectStoreSummary.test.ts +0 -61
  604. package/src/domains/info/operations/collectStoreSummary.ts +0 -42
  605. package/src/domains/info/operations/index.ts +0 -6
  606. package/src/domains/info/types.test-d.ts +0 -35
  607. package/src/domains/info/types.ts +0 -67
  608. package/src/domains/llm/capabilities.test.ts +0 -111
  609. package/src/domains/llm/commands/capabilities.ts +0 -37
  610. package/src/domains/llm/commands/index.ts +0 -4
  611. package/src/domains/llm/commands/llm.ts +0 -41
  612. package/src/domains/llm/data/commandReference.ts +0 -106
  613. package/src/domains/llm/data/decisionTrees.ts +0 -55
  614. package/src/domains/llm/data/index.ts +0 -6
  615. package/src/domains/llm/data/toolCatalog.ts +0 -221
  616. package/src/domains/llm/formatters/capabilities.ts +0 -50
  617. package/src/domains/llm/formatters/index.ts +0 -4
  618. package/src/domains/llm/formatters/orientation.ts +0 -57
  619. package/src/domains/llm/index.ts +0 -9
  620. package/src/domains/llm/llmCommand.test.ts +0 -101
  621. package/src/domains/llm/mcp/index.ts +0 -2
  622. package/src/domains/llm/mcp/specs.ts +0 -93
  623. package/src/domains/llm/operations/collectContext.test.ts +0 -64
  624. package/src/domains/llm/operations/collectContext.ts +0 -37
  625. package/src/domains/llm/operations/index.ts +0 -3
  626. package/src/domains/llm/types.ts +0 -72
  627. package/src/domains/modifier/commands/index.ts +0 -5
  628. package/src/domains/modifier/commands/list.test.ts +0 -57
  629. package/src/domains/modifier/commands/list.ts +0 -9
  630. package/src/domains/modifier/commands/lookup.test.ts +0 -91
  631. package/src/domains/modifier/commands/lookup.ts +0 -14
  632. package/src/domains/modifier/commands/sample.ts +0 -54
  633. package/src/domains/modifier/formatters/index.ts +0 -8
  634. package/src/domains/modifier/formatters/list.test.ts +0 -38
  635. package/src/domains/modifier/formatters/list.ts +0 -22
  636. package/src/domains/modifier/formatters/lookup.test.ts +0 -33
  637. package/src/domains/modifier/formatters/lookup.ts +0 -50
  638. package/src/domains/modifier/formatters/sample.ts +0 -15
  639. package/src/domains/modifier/index.ts +0 -27
  640. package/src/domains/modifier/mcp/index.ts +0 -2
  641. package/src/domains/modifier/mcp/specs.ts +0 -65
  642. package/src/domains/modifier/modifierConfig.ts +0 -36
  643. package/src/domains/modifier/operations/index.ts +0 -5
  644. package/src/domains/modifier/operations/list.test.ts +0 -39
  645. package/src/domains/modifier/operations/list.ts +0 -41
  646. package/src/domains/modifier/operations/lookup.test.ts +0 -37
  647. package/src/domains/modifier/operations/lookup.ts +0 -69
  648. package/src/domains/modifier/operations/sample.ts +0 -32
  649. package/src/domains/modifier/orchestration/index.ts +0 -3
  650. package/src/domains/modifier/orchestration/modifierEmptyError.test.ts +0 -26
  651. package/src/domains/modifier/orchestration/modifierEmptyError.ts +0 -15
  652. package/src/domains/modifier/orchestration/resolveModifierList.ts +0 -16
  653. package/src/domains/modifier/orchestration/resolveModifierLookup.ts +0 -33
  654. package/src/domains/modifier/stories.test.ts +0 -20
  655. package/src/domains/modifier/stories.ts +0 -86
  656. package/src/domains/modifier/types.ts +0 -5
  657. package/src/domains/ontology/commands/index.ts +0 -4
  658. package/src/domains/ontology/commands/list.test.ts +0 -84
  659. package/src/domains/ontology/commands/list.ts +0 -11
  660. package/src/domains/ontology/commands/show.test.ts +0 -179
  661. package/src/domains/ontology/commands/show.ts +0 -14
  662. package/src/domains/ontology/formatters/index.ts +0 -5
  663. package/src/domains/ontology/formatters/list.ts +0 -64
  664. package/src/domains/ontology/formatters/show.ts +0 -396
  665. package/src/domains/ontology/helpers/buildClassTree.ts +0 -89
  666. package/src/domains/ontology/helpers/completeClassNames.ts +0 -43
  667. package/src/domains/ontology/helpers/expandOntologyIris.ts +0 -79
  668. package/src/domains/ontology/helpers/findNamespace.ts +0 -23
  669. package/src/domains/ontology/helpers/index.ts +0 -21
  670. package/src/domains/ontology/helpers/queryClasses.ts +0 -66
  671. package/src/domains/ontology/helpers/queryProperties.ts +0 -90
  672. package/src/domains/ontology/helpers/queryTboxFacts.ts +0 -160
  673. package/src/domains/ontology/helpers/resolvePrefix.ts +0 -45
  674. package/src/domains/ontology/index.ts +0 -26
  675. package/src/domains/ontology/mcp/index.ts +0 -2
  676. package/src/domains/ontology/mcp/specs.ts +0 -16
  677. package/src/domains/ontology/operations/index.ts +0 -5
  678. package/src/domains/ontology/operations/listOntologies.test.ts +0 -122
  679. package/src/domains/ontology/operations/listOntologies.ts +0 -197
  680. package/src/domains/ontology/operations/showOntology.test.ts +0 -184
  681. package/src/domains/ontology/operations/showOntology.ts +0 -323
  682. package/src/domains/ontology/operations/showOntologyRaw.test.ts +0 -41
  683. package/src/domains/ontology/operations/showOntologyRaw.ts +0 -50
  684. package/src/domains/ontology/stories.test.ts +0 -36
  685. package/src/domains/ontology/stories.ts +0 -153
  686. package/src/domains/refs/commands/updateRefs.ts +0 -52
  687. package/src/domains/refs/formatters/updateRefs.ts +0 -27
  688. package/src/domains/refs/index.ts +0 -27
  689. package/src/domains/refs/operations/gitOps.test.ts +0 -155
  690. package/src/domains/refs/operations/gitOps.ts +0 -92
  691. package/src/domains/refs/operations/index.ts +0 -10
  692. package/src/domains/refs/operations/parseRef.test.ts +0 -157
  693. package/src/domains/refs/operations/parseRef.ts +0 -114
  694. package/src/domains/refs/operations/paths.test.ts +0 -98
  695. package/src/domains/refs/operations/paths.ts +0 -91
  696. package/src/domains/refs/operations/readGlobalRefs.test.ts +0 -63
  697. package/src/domains/refs/operations/readGlobalRefs.ts +0 -37
  698. package/src/domains/refs/operations/updateRefs.test.ts +0 -167
  699. package/src/domains/refs/operations/updateRefs.ts +0 -180
  700. package/src/domains/setup/commands/all.ts +0 -58
  701. package/src/domains/setup/commands/completions.ts +0 -85
  702. package/src/domains/setup/commands/entrypoints.test.ts +0 -170
  703. package/src/domains/setup/commands/index.ts +0 -7
  704. package/src/domains/setup/commands/lsp.ts +0 -49
  705. package/src/domains/setup/commands/mcp.ts +0 -119
  706. package/src/domains/setup/commands/setup.ts +0 -70
  707. package/src/domains/setup/commands/skills.test.ts +0 -68
  708. package/src/domains/setup/commands/skills.ts +0 -110
  709. package/src/domains/setup/formatters/index.ts +0 -2
  710. package/src/domains/setup/formatters/skills.test.ts +0 -103
  711. package/src/domains/setup/formatters/skills.ts +0 -112
  712. package/src/domains/setup/formatters/types.ts +0 -7
  713. package/src/domains/setup/helpers/completionScripts.test.ts +0 -58
  714. package/src/domains/setup/helpers/completionScripts.ts +0 -92
  715. package/src/domains/setup/helpers/constants.ts +0 -2
  716. package/src/domains/setup/helpers/detectShell.test.ts +0 -48
  717. package/src/domains/setup/helpers/detectShell.ts +0 -20
  718. package/src/domains/setup/helpers/index.ts +0 -12
  719. package/src/domains/setup/helpers/runSetupTask.test.ts +0 -277
  720. package/src/domains/setup/helpers/runSetupTask.ts +0 -221
  721. package/src/domains/setup/index.ts +0 -37
  722. package/src/domains/setup/operations/index.ts +0 -6
  723. package/src/domains/setup/operations/setupAll.test.ts +0 -48
  724. package/src/domains/setup/operations/setupAll.ts +0 -41
  725. package/src/domains/setup/operations/setupCompletions.test.ts +0 -94
  726. package/src/domains/setup/operations/setupCompletions.ts +0 -54
  727. package/src/domains/setup/operations/setupLsp.test.ts +0 -30
  728. package/src/domains/setup/operations/setupLsp.ts +0 -22
  729. package/src/domains/setup/operations/setupMcp.test.ts +0 -120
  730. package/src/domains/setup/operations/setupMcp.ts +0 -108
  731. package/src/domains/setup/operations/setupSkills.test.ts +0 -191
  732. package/src/domains/setup/operations/setupSkills.ts +0 -160
  733. package/src/domains/setup/types.ts +0 -18
  734. package/src/domains/shared/ToolSpec.ts +0 -49
  735. package/src/domains/shared/bootStore.bareCore.test.ts +0 -63
  736. package/src/domains/shared/bootStore.test.ts +0 -82
  737. package/src/domains/shared/bootStore.ts +0 -171
  738. package/src/domains/shared/buildQuery.ts +0 -18
  739. package/src/domains/shared/compactUri.test.ts +0 -32
  740. package/src/domains/shared/compactUri.ts +0 -21
  741. package/src/domains/shared/context.ts +0 -16
  742. package/src/domains/shared/contracts.ts +0 -164
  743. package/src/domains/shared/createInteractivePromptSession.test.ts +0 -439
  744. package/src/domains/shared/createInteractivePromptSession.ts +0 -236
  745. package/src/domains/shared/emptyErrorRecovery.test.ts +0 -106
  746. package/src/domains/shared/extractLocalName.test.ts +0 -21
  747. package/src/domains/shared/extractLocalName.ts +0 -14
  748. package/src/domains/shared/filters/buildChannelFilter.test.ts +0 -52
  749. package/src/domains/shared/filters/buildChannelFilter.ts +0 -41
  750. package/src/domains/shared/filters/buildFilterConfig.ts +0 -15
  751. package/src/domains/shared/filters/buildFilters.test.ts +0 -33
  752. package/src/domains/shared/filters/buildFilters.ts +0 -30
  753. package/src/domains/shared/filters/buildTierFilter.test.ts +0 -78
  754. package/src/domains/shared/filters/buildTierFilter.ts +0 -69
  755. package/src/domains/shared/filters/describeFilters.ts +0 -14
  756. package/src/domains/shared/filters/index.ts +0 -10
  757. package/src/domains/shared/formatters.ts +0 -103
  758. package/src/domains/shared/listTiers.ts +0 -40
  759. package/src/domains/shared/loaders/bundledLoader.test.ts +0 -248
  760. package/src/domains/shared/loaders/bundledLoader.ts +0 -254
  761. package/src/domains/shared/loaders/gitLoader.ts +0 -30
  762. package/src/domains/shared/loaders/index.ts +0 -9
  763. package/src/domains/shared/loaders/localLoader.ts +0 -71
  764. package/src/domains/shared/loaders/readPackageDir.test.ts +0 -58
  765. package/src/domains/shared/loaders/readPackageDir.ts +0 -185
  766. package/src/domains/shared/loaders/storyAssetsPlugin.test.ts +0 -84
  767. package/src/domains/shared/loaders/storyAssetsPlugin.ts +0 -46
  768. package/src/domains/shared/lookupMany.test.ts +0 -135
  769. package/src/domains/shared/lookupMany.ts +0 -101
  770. package/src/domains/shared/mergeAndParseRefs.test.ts +0 -89
  771. package/src/domains/shared/mergeAndParseRefs.ts +0 -44
  772. package/src/domains/shared/namespaces.ts +0 -26
  773. package/src/domains/shared/packages.ts +0 -20
  774. package/src/domains/shared/parseSampleCount.test.ts +0 -47
  775. package/src/domains/shared/parseSampleCount.ts +0 -45
  776. package/src/domains/shared/pickRandom.ts +0 -22
  777. package/src/domains/shared/prefixes.test.ts +0 -211
  778. package/src/domains/shared/prefixes.ts +0 -204
  779. package/src/domains/shared/renderers.ts +0 -410
  780. package/src/domains/shared/resolveConfiguredGraphs.test.ts +0 -27
  781. package/src/domains/shared/resolveConfiguredGraphs.ts +0 -41
  782. package/src/domains/shared/resolveLookupExitCode.test.ts +0 -48
  783. package/src/domains/shared/resolveLookupExitCode.ts +0 -42
  784. package/src/domains/shared/runtime.ts +0 -61
  785. package/src/domains/shared/sampleFormatters.ts +0 -47
  786. package/src/domains/shared/semanticPackage.test.ts +0 -89
  787. package/src/domains/shared/semanticPackage.ts +0 -127
  788. package/src/domains/shared/stories/compileLookupCommand.test.ts +0 -145
  789. package/src/domains/shared/stories/compileLookupCommand.ts +0 -102
  790. package/src/domains/shared/stories/compileLookupTool.test.ts +0 -105
  791. package/src/domains/shared/stories/compileLookupTool.ts +0 -96
  792. package/src/domains/shared/stories/compileReadCommand.test.ts +0 -121
  793. package/src/domains/shared/stories/compileReadCommand.ts +0 -48
  794. package/src/domains/shared/stories/compileReadTool.test.ts +0 -64
  795. package/src/domains/shared/stories/compileReadTool.ts +0 -38
  796. package/src/domains/shared/stories/condense.test.ts +0 -18
  797. package/src/domains/shared/stories/condense.ts +0 -15
  798. package/src/domains/shared/stories/index.ts +0 -20
  799. package/src/domains/shared/stories/normalizeNames.test.ts +0 -20
  800. package/src/domains/shared/stories/normalizeNames.ts +0 -22
  801. package/src/domains/shared/stories/pack/applyPackFilters.test.ts +0 -151
  802. package/src/domains/shared/stories/pack/applyPackFilters.ts +0 -111
  803. package/src/domains/shared/stories/pack/applyPackSearch.test.ts +0 -57
  804. package/src/domains/shared/stories/pack/applyPackSearch.ts +0 -41
  805. package/src/domains/shared/stories/pack/buildLookupQuery.test.ts +0 -81
  806. package/src/domains/shared/stories/pack/buildLookupQuery.ts +0 -154
  807. package/src/domains/shared/stories/pack/bundled/index.ts +0 -23
  808. package/src/domains/shared/stories/pack/bundled/standardPack.ts +0 -164
  809. package/src/domains/shared/stories/pack/bundled/tierPack.ts +0 -50
  810. package/src/domains/shared/stories/pack/collectPackStories.test.ts +0 -406
  811. package/src/domains/shared/stories/pack/collectPackStories.ts +0 -158
  812. package/src/domains/shared/stories/pack/compilePackCommands.ts +0 -50
  813. package/src/domains/shared/stories/pack/compilePackStories.test.ts +0 -751
  814. package/src/domains/shared/stories/pack/compilePackStories.ts +0 -724
  815. package/src/domains/shared/stories/pack/compilePackToolSpecs.ts +0 -55
  816. package/src/domains/shared/stories/pack/index.ts +0 -42
  817. package/src/domains/shared/stories/pack/reservedVerbs.test.ts +0 -213
  818. package/src/domains/shared/stories/pack/reservedVerbs.ts +0 -170
  819. package/src/domains/shared/stories/pack/runSelectQuery.ts +0 -31
  820. package/src/domains/shared/stories/pack/standardParity.test.ts +0 -381
  821. package/src/domains/shared/stories/pack/types.ts +0 -224
  822. package/src/domains/shared/stories/pack/validateStoryPackDefinition.test.ts +0 -742
  823. package/src/domains/shared/stories/pack/validateStoryPackDefinition.ts +0 -859
  824. package/src/domains/shared/stories/projectCliParameters.test.ts +0 -59
  825. package/src/domains/shared/stories/projectCliParameters.ts +0 -57
  826. package/src/domains/shared/stories/projectToolParams.test.ts +0 -50
  827. package/src/domains/shared/stories/projectToolParams.ts +0 -32
  828. package/src/domains/shared/stories/requirePragmaContext.test.ts +0 -23
  829. package/src/domains/shared/stories/requirePragmaContext.ts +0 -23
  830. package/src/domains/shared/stories/resolveLookupDetailed.test.ts +0 -57
  831. package/src/domains/shared/stories/resolveLookupDetailed.ts +0 -27
  832. package/src/domains/shared/stories/types.ts +0 -179
  833. package/src/domains/shared/suggestions/detectCrossDomain.test.ts +0 -43
  834. package/src/domains/shared/suggestions/detectCrossDomain.ts +0 -116
  835. package/src/domains/shared/suggestions/expandGlob.test.ts +0 -92
  836. package/src/domains/shared/suggestions/expandGlob.ts +0 -52
  837. package/src/domains/shared/suggestions/expandLookupQueries.ts +0 -57
  838. package/src/domains/shared/suggestions/index.ts +0 -7
  839. package/src/domains/shared/suggestions/listDomainNames.ts +0 -61
  840. package/src/domains/shared/suggestions/suggestNames.test.ts +0 -70
  841. package/src/domains/shared/suggestions/suggestNames.ts +0 -130
  842. package/src/domains/shared/types/block.ts +0 -107
  843. package/src/domains/shared/types/common.ts +0 -33
  844. package/src/domains/shared/types/graph.ts +0 -17
  845. package/src/domains/shared/types/index.ts +0 -46
  846. package/src/domains/shared/types/modifier.ts +0 -22
  847. package/src/domains/shared/types/ontology.ts +0 -145
  848. package/src/domains/shared/types/runtime.ts +0 -24
  849. package/src/domains/shared/types/sample.ts +0 -17
  850. package/src/domains/shared/types/standard.ts +0 -21
  851. package/src/domains/shared/types/tier.ts +0 -15
  852. package/src/domains/shared/types/token.ts +0 -30
  853. package/src/domains/skill/commands/index.ts +0 -4
  854. package/src/domains/skill/commands/list.test.ts +0 -115
  855. package/src/domains/skill/commands/list.ts +0 -11
  856. package/src/domains/skill/commands/lookup.test.ts +0 -118
  857. package/src/domains/skill/commands/lookup.ts +0 -14
  858. package/src/domains/skill/formatters/index.ts +0 -3
  859. package/src/domains/skill/formatters/list.test.ts +0 -140
  860. package/src/domains/skill/formatters/list.ts +0 -119
  861. package/src/domains/skill/formatters/lookup.test.ts +0 -46
  862. package/src/domains/skill/formatters/lookup.ts +0 -57
  863. package/src/domains/skill/formatters/types.ts +0 -8
  864. package/src/domains/skill/helpers/index.ts +0 -6
  865. package/src/domains/skill/helpers/parseFrontmatter.test.ts +0 -122
  866. package/src/domains/skill/helpers/parseFrontmatter.ts +0 -112
  867. package/src/domains/skill/helpers/resolveSkillSources.ts +0 -70
  868. package/src/domains/skill/index.ts +0 -23
  869. package/src/domains/skill/mcp/index.ts +0 -2
  870. package/src/domains/skill/mcp/specs.ts +0 -19
  871. package/src/domains/skill/operations/discover.test.ts +0 -176
  872. package/src/domains/skill/operations/discover.ts +0 -59
  873. package/src/domains/skill/operations/index.ts +0 -5
  874. package/src/domains/skill/operations/list.test.ts +0 -76
  875. package/src/domains/skill/operations/list.ts +0 -47
  876. package/src/domains/skill/operations/lookup.test.ts +0 -91
  877. package/src/domains/skill/operations/lookup.ts +0 -70
  878. package/src/domains/skill/stories.test.ts +0 -43
  879. package/src/domains/skill/stories.ts +0 -103
  880. package/src/domains/skill/types.ts +0 -33
  881. package/src/domains/token/commands/add-config.test.ts +0 -68
  882. package/src/domains/token/commands/add-config.ts +0 -62
  883. package/src/domains/token/commands/index.ts +0 -6
  884. package/src/domains/token/commands/list.test.ts +0 -82
  885. package/src/domains/token/commands/list.ts +0 -54
  886. package/src/domains/token/commands/lookup.test.ts +0 -133
  887. package/src/domains/token/commands/lookup.ts +0 -107
  888. package/src/domains/token/commands/sample.ts +0 -54
  889. package/src/domains/token/featureFlag.ts +0 -17
  890. package/src/domains/token/formatters/index.ts +0 -8
  891. package/src/domains/token/formatters/list.test.ts +0 -37
  892. package/src/domains/token/formatters/list.ts +0 -24
  893. package/src/domains/token/formatters/lookup.test.ts +0 -61
  894. package/src/domains/token/formatters/lookup.ts +0 -107
  895. package/src/domains/token/formatters/sample.ts +0 -16
  896. package/src/domains/token/index.ts +0 -45
  897. package/src/domains/token/mcp/index.ts +0 -2
  898. package/src/domains/token/mcp/specs.ts +0 -207
  899. package/src/domains/token/operations/add-config.test.ts +0 -68
  900. package/src/domains/token/operations/add-config.ts +0 -61
  901. package/src/domains/token/operations/index.ts +0 -8
  902. package/src/domains/token/operations/list.test.ts +0 -50
  903. package/src/domains/token/operations/list.ts +0 -52
  904. package/src/domains/token/operations/lookup.test.ts +0 -42
  905. package/src/domains/token/operations/lookup.ts +0 -75
  906. package/src/domains/token/operations/sample.ts +0 -32
  907. package/src/domains/token/orchestration/index.ts +0 -3
  908. package/src/domains/token/orchestration/resolveTokenList.ts +0 -17
  909. package/src/domains/token/orchestration/resolveTokenLookup.ts +0 -33
  910. package/src/domains/token/orchestration/tokenEmptyError.test.ts +0 -33
  911. package/src/domains/token/orchestration/tokenEmptyError.ts +0 -20
  912. package/src/domains/token/tokenConfig.ts +0 -38
  913. package/src/domains/token/types.ts +0 -6
  914. package/src/domains/trace/commands/clear.ts +0 -71
  915. package/src/domains/trace/commands/index.ts +0 -5
  916. package/src/domains/trace/commands/resolveTraceLimit.test.ts +0 -31
  917. package/src/domains/trace/commands/sessions.ts +0 -32
  918. package/src/domains/trace/commands/show.ts +0 -171
  919. package/src/domains/trace/formatters/index.ts +0 -9
  920. package/src/domains/trace/formatters/sessions.ts +0 -80
  921. package/src/domains/trace/formatters/show.ts +0 -122
  922. package/src/domains/trace/index.ts +0 -17
  923. package/src/domains/trace/operations/index.ts +0 -8
  924. package/src/domains/trace/operations/listSessions.test.ts +0 -55
  925. package/src/domains/trace/operations/listSessions.ts +0 -52
  926. package/src/domains/trace/operations/readTraceLog.test.ts +0 -100
  927. package/src/domains/trace/operations/readTraceLog.ts +0 -104
  928. package/src/domains/trace/tracePlugin.test.ts +0 -171
  929. package/src/domains/trace/tracePlugin.ts +0 -159
  930. package/src/domains/trace/types.ts +0 -65
  931. package/src/embedWasm.ts +0 -42
  932. package/src/error/PragmaError.test.ts +0 -121
  933. package/src/error/PragmaError.ts +0 -177
  934. package/src/error/constants.ts +0 -12
  935. package/src/error/index.ts +0 -4
  936. package/src/error/types.ts +0 -55
  937. package/src/mcp/createMcpServer.test.ts +0 -41
  938. package/src/mcp/createMcpServer.ts +0 -53
  939. package/src/mcp/error/buildRecovery.test.ts +0 -37
  940. package/src/mcp/error/buildRecovery.ts +0 -17
  941. package/src/mcp/error/index.ts +0 -12
  942. package/src/mcp/error/serializeError.test.ts +0 -121
  943. package/src/mcp/error/serializeError.ts +0 -31
  944. package/src/mcp/error/serializeErrorPayload.test.ts +0 -38
  945. package/src/mcp/error/serializeErrorPayload.ts +0 -34
  946. package/src/mcp/error/types.ts +0 -59
  947. package/src/mcp/index.ts +0 -15
  948. package/src/mcp/registerResources.test.ts +0 -566
  949. package/src/mcp/registerResources.ts +0 -9
  950. package/src/mcp/resources/buildGraphIndex.ts +0 -167
  951. package/src/mcp/resources/buildResourceList.test.ts +0 -97
  952. package/src/mcp/resources/buildResourceList.ts +0 -176
  953. package/src/mcp/resources/classifyEntity.test.ts +0 -40
  954. package/src/mcp/resources/classifyEntity.ts +0 -27
  955. package/src/mcp/resources/constants.ts +0 -105
  956. package/src/mcp/resources/displayPredicates.ts +0 -62
  957. package/src/mcp/resources/pickFirstValue.test.ts +0 -29
  958. package/src/mcp/resources/pickFirstValue.ts +0 -26
  959. package/src/mcp/resources/pickPrimaryType.test.ts +0 -41
  960. package/src/mcp/resources/pickPrimaryType.ts +0 -26
  961. package/src/mcp/resources/rankUriCompletions.test.ts +0 -52
  962. package/src/mcp/resources/rankUriCompletions.ts +0 -64
  963. package/src/mcp/resources/readEntity.ts +0 -169
  964. package/src/mcp/resources/registerResources.ts +0 -126
  965. package/src/mcp/resources/types.ts +0 -128
  966. package/src/mcp/runMcpServer.test.ts +0 -66
  967. package/src/mcp/runMcpServer.ts +0 -24
  968. package/src/mcp/tools/index.ts +0 -74
  969. package/src/mcp/tools/registerFromSpec.ts +0 -97
  970. package/src/mcp/tools/registerTools.test.ts +0 -1277
  971. package/src/mcp/types.ts +0 -66
  972. package/src/mcp/utils/estimateTokens.test.ts +0 -14
  973. package/src/mcp/utils/estimateTokens.ts +0 -9
  974. package/src/mcp/utils/index.ts +0 -11
  975. package/src/mcp/utils/wrapTool.test.ts +0 -109
  976. package/src/mcp/utils/wrapTool.ts +0 -81
  977. package/src/package-manager/constants.ts +0 -29
  978. package/src/package-manager/detectInstallSource.test.ts +0 -23
  979. package/src/package-manager/detectInstallSource.ts +0 -111
  980. package/src/package-manager/detectLocalInstall.test.ts +0 -16
  981. package/src/package-manager/detectLocalInstall.ts +0 -43
  982. package/src/package-manager/detectPackageManager.test.ts +0 -81
  983. package/src/package-manager/detectPackageManager.ts +0 -30
  984. package/src/package-manager/index.ts +0 -6
  985. package/src/package-manager/types.ts +0 -10
  986. package/src/pipeline/collectCommands.test.ts +0 -187
  987. package/src/pipeline/collectCommands.ts +0 -75
  988. package/src/pipeline/constants.ts +0 -14
  989. package/src/pipeline/createProgram.test.ts +0 -116
  990. package/src/pipeline/createProgram.ts +0 -89
  991. package/src/pipeline/firstRun.test.ts +0 -80
  992. package/src/pipeline/firstRun.ts +0 -99
  993. package/src/pipeline/formatTerminal.test.ts +0 -43
  994. package/src/pipeline/formatTerminal.ts +0 -53
  995. package/src/pipeline/index.ts +0 -22
  996. package/src/pipeline/mapExitCode.test.ts +0 -41
  997. package/src/pipeline/mapExitCode.ts +0 -12
  998. package/src/pipeline/parseGlobalFlags.test.ts +0 -193
  999. package/src/pipeline/parseGlobalFlags.ts +0 -135
  1000. package/src/pipeline/renderError.test.ts +0 -151
  1001. package/src/pipeline/renderError.ts +0 -129
  1002. package/src/pipeline/resolveCommandKind.test.ts +0 -80
  1003. package/src/pipeline/resolveCommandKind.ts +0 -82
  1004. package/src/pipeline/rootHelp.test.ts +0 -87
  1005. package/src/pipeline/rootHelp.ts +0 -265
  1006. package/src/pipeline/runCli.orchestration.test.ts +0 -435
  1007. package/src/pipeline/runCli.test.ts +0 -83
  1008. package/src/pipeline/runCli.ts +0 -411
  1009. package/src/pipeline/types.ts +0 -17
  1010. package/src/testing/cli.ts +0 -71
  1011. package/src/testing/createTestMcpClient.ts +0 -68
  1012. package/src/testing/dsFixtures.ts +0 -523
  1013. package/src/testing/fixtures/canonical-config.json +0 -4
  1014. package/src/testing/fixtures/canonical.ttl +0 -437
  1015. package/src/testing/fixtures/filtered-config.json +0 -4
  1016. package/src/testing/fixtures.ts +0 -34
  1017. package/src/testing/graphqlFixtures.ts +0 -72
  1018. package/src/testing/helpers/assertParity.ts +0 -28
  1019. package/src/testing/helpers/createTestMcpClient.ts +0 -40
  1020. package/src/testing/helpers/createTestRuntime.ts +0 -67
  1021. package/src/testing/index.ts +0 -22
  1022. package/src/testing/integration/__snapshots__/executor-golden.test.ts.snap +0 -1207
  1023. package/src/testing/integration/agent-session.test.ts +0 -148
  1024. package/src/testing/integration/boot.test.ts +0 -105
  1025. package/src/testing/integration/cli-user-stories.test.ts +0 -261
  1026. package/src/testing/integration/cross-binary-byte-equality.test.ts +0 -129
  1027. package/src/testing/integration/edge-cases.test.ts +0 -275
  1028. package/src/testing/integration/executor-execution.test.ts +0 -103
  1029. package/src/testing/integration/executor-golden.test.ts +0 -145
  1030. package/src/testing/integration/mcp-surface.test.ts +0 -605
  1031. package/src/testing/integration/parity.test.ts +0 -596
  1032. package/src/testing/regression/0001-skill-discovery-granularity.test.ts +0 -71
  1033. package/src/testing/standardParityFixtures.ts +0 -35
  1034. package/src/testing/store.ts +0 -39
  1035. package/src/testing/storyFixtures.ts +0 -63
  1036. package/src/testing/types.ts +0 -20
  1037. package/src/tui/components/BulletList/BulletList.tsx +0 -46
  1038. package/src/tui/components/BulletList/index.ts +0 -2
  1039. package/src/tui/components/BulletList/types.ts +0 -6
  1040. package/src/tui/components/Card/Card.tsx +0 -73
  1041. package/src/tui/components/Card/index.ts +0 -1
  1042. package/src/tui/components/Card/types.ts +0 -12
  1043. package/src/tui/components/CodeBlock/CodeBlock.tsx +0 -37
  1044. package/src/tui/components/CodeBlock/index.ts +0 -2
  1045. package/src/tui/components/CodeBlock/types.ts +0 -6
  1046. package/src/tui/components/DataRow/DataRow.tsx +0 -80
  1047. package/src/tui/components/DataRow/index.ts +0 -2
  1048. package/src/tui/components/DataRow/types.ts +0 -14
  1049. package/src/tui/components/FieldRow/FieldRow.tsx +0 -24
  1050. package/src/tui/components/FieldRow/index.ts +0 -2
  1051. package/src/tui/components/FieldRow/types.ts +0 -10
  1052. package/src/tui/components/HeaderRow/HeaderRow.tsx +0 -32
  1053. package/src/tui/components/HeaderRow/index.ts +0 -2
  1054. package/src/tui/components/HeaderRow/types.ts +0 -8
  1055. package/src/tui/components/MarkdownText/MarkdownText.tsx +0 -19
  1056. package/src/tui/components/MarkdownText/index.ts +0 -2
  1057. package/src/tui/components/MarkdownText/types.ts +0 -4
  1058. package/src/tui/components/MiniTable/MiniTable.tsx +0 -82
  1059. package/src/tui/components/MiniTable/index.ts +0 -2
  1060. package/src/tui/components/MiniTable/types.ts +0 -6
  1061. package/src/tui/components/SectionRenderer/SectionRenderer.tsx +0 -91
  1062. package/src/tui/components/SectionRenderer/index.ts +0 -2
  1063. package/src/tui/components/SectionRenderer/types.ts +0 -15
  1064. package/src/tui/components/TreeView/TreeView.tsx +0 -84
  1065. package/src/tui/components/TreeView/index.ts +0 -2
  1066. package/src/tui/components/TreeView/types.ts +0 -6
  1067. package/src/tui/components/index.ts +0 -19
  1068. package/src/tui/constants.ts +0 -39
  1069. package/src/tui/createListView.ts +0 -23
  1070. package/src/tui/createLookupView.ts +0 -26
  1071. package/src/tui/helpers/computeWidths.ts +0 -53
  1072. package/src/tui/helpers/fitColumns.ts +0 -33
  1073. package/src/tui/helpers/formatMarkdown.ts +0 -19
  1074. package/src/tui/helpers/getTerminalSize.ts +0 -16
  1075. package/src/tui/helpers/index.ts +0 -6
  1076. package/src/tui/helpers/syntaxColor.ts +0 -67
  1077. package/src/tui/helpers/truncateText.ts +0 -12
  1078. package/src/tui/hooks/index.ts +0 -3
  1079. package/src/tui/hooks/types.ts +0 -7
  1080. package/src/tui/hooks/useAutoExit.ts +0 -17
  1081. package/src/tui/hooks/useTerminalSize.ts +0 -19
  1082. package/src/tui/index.ts +0 -15
  1083. package/src/tui/renderInk.tsx +0 -18
  1084. package/src/tui/types.ts +0 -12
  1085. package/src/tui/views/ListView/ListView.tsx +0 -104
  1086. package/src/tui/views/ListView/index.ts +0 -2
  1087. package/src/tui/views/ListView/types.ts +0 -14
  1088. package/src/tui/views/LookupView/LookupView.tsx +0 -244
  1089. package/src/tui/views/LookupView/index.ts +0 -2
  1090. package/src/tui/views/LookupView/types.ts +0 -16
  1091. package/src/tui/views/index.ts +0 -4
@@ -1,751 +0,0 @@
1
- import type { Store } from "@canonical/ke";
2
- import { afterAll, beforeAll, describe, expect, it } from "vitest";
3
- import { PragmaError } from "#error";
4
- import {
5
- createTestStore,
6
- RECIPE_PREFIXES,
7
- RECIPE_STORY,
8
- RECIPE_TTL,
9
- } from "#testing";
10
- import { DEFAULT_PREFIX_MAP } from "../../prefixes.js";
11
- import type { PragmaRuntime } from "../../types/index.js";
12
- import compilePackStories from "./compilePackStories.js";
13
- import type { StoryPackDefinition } from "./types.js";
14
-
15
- const PREFIXES = { ...DEFAULT_PREFIX_MAP, ...RECIPE_PREFIXES };
16
-
17
- let store: Store;
18
- let cleanup: () => void;
19
- let rt: PragmaRuntime;
20
-
21
- beforeAll(async () => {
22
- const result = await createTestStore({
23
- ttl: RECIPE_TTL,
24
- prefixes: RECIPE_PREFIXES,
25
- });
26
- store = result.store;
27
- cleanup = result.cleanup;
28
- rt = { store } as PragmaRuntime;
29
- });
30
-
31
- afterAll(() => cleanup());
32
-
33
- describe("compilePackStories — list", () => {
34
- it("resolves the pack's preferred query into rows", async () => {
35
- const { list } = compilePackStories(RECIPE_STORY, "test", PREFIXES);
36
- const rows = await list.resolve(rt, {});
37
- expect(rows.map((row) => row.name)).toEqual(["Gazpacho", "Pancakes"]);
38
- expect(list.toEnvelope(rows)).toEqual({
39
- data: rows,
40
- meta: { count: 2 },
41
- });
42
- });
43
-
44
- it("renders the generic formatters with compacted prefixes", async () => {
45
- const { list } = compilePackStories(RECIPE_STORY, "test", PREFIXES);
46
- const rows = await list.resolve(rt, {});
47
- const plain = list.formatters.plain(rows);
48
- expect(plain).toContain("Pancakes");
49
- expect(plain).toContain("breakfast");
50
- const llm = list.formatters.llm(rows);
51
- expect(llm).toContain("## Recipe (2)");
52
- expect(llm).toContain("`ex:gazpacho`");
53
- expect(JSON.parse(list.formatters.json(rows))).toHaveLength(2);
54
- });
55
- });
56
-
57
- describe("compilePackStories — list filters", () => {
58
- it("projects declared filters as enum story parameters", () => {
59
- const { list } = compilePackStories(RECIPE_STORY, "test", PREFIXES);
60
- const param = list.params.at(0);
61
- expect(param?.name).toBe("category");
62
- expect(param?.type).toBe("string");
63
- expect(param?.enum).toEqual(["breakfast", "soup"]);
64
- });
65
-
66
- it("filters resolved rows by the provided value", async () => {
67
- const { list } = compilePackStories(RECIPE_STORY, "test", PREFIXES);
68
- const rows = await list.resolve(rt, { category: "soup" });
69
- expect(rows.map((row) => row.name)).toEqual(["Gazpacho"]);
70
- expect(list.toEnvelope(rows).meta).toEqual({ count: 1 });
71
- });
72
-
73
- it("canonicalizes case-insensitive input through resolve", async () => {
74
- const { list } = compilePackStories(RECIPE_STORY, "test", PREFIXES);
75
- const rows = await list.resolve(rt, { category: "SOUP" });
76
- expect(rows.map((row) => row.name)).toEqual(["Gazpacho"]);
77
- });
78
-
79
- it("rejects a value outside the declared set with INVALID_INPUT", async () => {
80
- const { list } = compilePackStories(RECIPE_STORY, "test", PREFIXES);
81
- await expect(
82
- list.resolve(rt, { category: "dinner" }),
83
- ).rejects.toMatchObject({ code: "INVALID_INPUT" });
84
- });
85
-
86
- it("mentions the first filter in the examples", () => {
87
- const { list } = compilePackStories(RECIPE_STORY, "test", PREFIXES);
88
- expect(list.examples).toContain("pragma recipe list --category breakfast");
89
- });
90
- });
91
-
92
- // Pack v1: value-free filters (data-driven value sets) and free-text search.
93
- describe("compilePackStories — value-free filters and search", () => {
94
- /** RECIPE_STORY with a value-free category filter and a name search. */
95
- const SEARCHABLE_STORY: StoryPackDefinition = {
96
- ...RECIPE_STORY,
97
- list: {
98
- ...RECIPE_STORY.list,
99
- filters: [{ param: "category", variable: "category" }],
100
- search: { variables: ["name"] },
101
- },
102
- };
103
-
104
- it("projects a value-free filter as a plain string parameter", () => {
105
- const { list } = compilePackStories(SEARCHABLE_STORY, "test", PREFIXES);
106
- const param = list.params.find((p) => p.name === "category");
107
- expect(param?.type).toBe("string");
108
- expect(param?.enum).toBeUndefined();
109
- });
110
-
111
- it("filters rows by case-insensitive equality without a declared set", async () => {
112
- const { list } = compilePackStories(SEARCHABLE_STORY, "test", PREFIXES);
113
- const rows = await list.resolve(rt, { category: "SOUP" });
114
- expect(rows.map((row) => row.name)).toEqual(["Gazpacho"]);
115
- });
116
-
117
- it("returns no rows (not an error) for an unknown filter value", async () => {
118
- const { list } = compilePackStories(SEARCHABLE_STORY, "test", PREFIXES);
119
- await expect(list.resolve(rt, { category: "dinner" })).resolves.toEqual([]);
120
- });
121
-
122
- it("projects a `search` string parameter", () => {
123
- const { list } = compilePackStories(SEARCHABLE_STORY, "test", PREFIXES);
124
- const param = list.params.find((p) => p.name === "search");
125
- expect(param?.type).toBe("string");
126
- expect(param?.description).toContain("name");
127
- });
128
-
129
- it("keeps rows whose searched variables contain the term", async () => {
130
- const { list } = compilePackStories(SEARCHABLE_STORY, "test", PREFIXES);
131
- const rows = await list.resolve(rt, { search: "gaz" });
132
- expect(rows.map((row) => row.name)).toEqual(["Gazpacho"]);
133
- });
134
-
135
- it("applies search after filters, conjunctively", async () => {
136
- const { list } = compilePackStories(SEARCHABLE_STORY, "test", PREFIXES);
137
- const rows = await list.resolve(rt, {
138
- category: "breakfast",
139
- search: "gaz",
140
- });
141
- expect(rows).toEqual([]);
142
- });
143
-
144
- it("skips the generated filter example when no filter declares values", () => {
145
- const { list } = compilePackStories(SEARCHABLE_STORY, "test", PREFIXES);
146
- expect(
147
- list.examples.some((example) => example.includes("--category")),
148
- ).toBe(false);
149
- });
150
- });
151
-
152
- // Pack v1: extra list-shaped verbs compiled through the list machinery.
153
- describe("compilePackStories — extra verbs", () => {
154
- const STORY_WITH_VERB: StoryPackDefinition = {
155
- ...RECIPE_STORY,
156
- verbs: [
157
- {
158
- verb: "categories",
159
- description: "List recipe categories",
160
- query:
161
- "SELECT ?name (COUNT(?uri) AS ?count) WHERE { ?uri a ex:Recipe ; ex:category ?name } GROUP BY ?name ORDER BY ?name",
162
- columns: [{ field: "name" }, { field: "count" }],
163
- },
164
- ],
165
- };
166
-
167
- it("compiles each declared verb into a read story on the noun", async () => {
168
- const { verbs } = compilePackStories(STORY_WITH_VERB, "test", PREFIXES);
169
- expect(verbs).toHaveLength(1);
170
- const categories = verbs.at(0);
171
- expect(categories?.noun).toBe("recipe");
172
- expect(categories?.verb).toBe("categories");
173
- expect(categories?.description).toBe("List recipe categories");
174
- const rows = await categories?.resolve(rt, {});
175
- expect(rows).toEqual([
176
- { name: "breakfast", count: "1" },
177
- { name: "soup", count: "1" },
178
- ]);
179
- expect(categories?.toEnvelope(rows ?? [])).toEqual({
180
- data: rows,
181
- meta: { count: 2 },
182
- });
183
- });
184
-
185
- it("renders extra verbs through the generic list renderer", async () => {
186
- const { verbs } = compilePackStories(STORY_WITH_VERB, "test", PREFIXES);
187
- const categories = verbs.at(0);
188
- const rows = (await categories?.resolve(rt, {})) ?? [];
189
- const llm = categories?.formatters.llm(rows) ?? "";
190
- expect(llm).toContain("## Recipe categories (2)");
191
- expect(llm).toContain("breakfast");
192
- });
193
-
194
- it("compiles no extra verbs when none are declared", () => {
195
- const { verbs } = compilePackStories(RECIPE_STORY, "test", PREFIXES);
196
- expect(verbs).toEqual([]);
197
- });
198
- });
199
-
200
- // Pack v1: the generic sample verb.
201
- describe("compilePackStories — sample", () => {
202
- const STORY_WITH_SAMPLE: StoryPackDefinition = {
203
- ...RECIPE_STORY,
204
- lookup: {
205
- // biome-ignore lint/style/noNonNullAssertion: fixture always declares lookup
206
- ...RECIPE_STORY.lookup!,
207
- sample: true,
208
- },
209
- };
210
-
211
- it("draws N entities resolved through the lookup path", async () => {
212
- const { sample } = compilePackStories(STORY_WITH_SAMPLE, "test", PREFIXES);
213
- expect(sample?.noun).toBe("recipe");
214
- expect(sample?.verb).toBe("sample");
215
- const data = await sample?.resolve(rt, { count: "2" });
216
- expect(data?.totalCount).toBe(2);
217
- expect(data?.samples.map((entity) => entity.name).sort()).toEqual([
218
- "Gazpacho",
219
- "Pancakes",
220
- ]);
221
- // Full lookup shape, not just names.
222
- expect(
223
- data?.samples.every((entity) => typeof entity.instructions === "string"),
224
- ).toBe(true);
225
- });
226
-
227
- it("clamps the requested count and rejects non-integers", async () => {
228
- const { sample } = compilePackStories(STORY_WITH_SAMPLE, "test", PREFIXES);
229
- const data = await sample?.resolve(rt, { count: "99" });
230
- expect(data?.samples.length).toBeLessThanOrEqual(5);
231
- await expect(sample?.resolve(rt, { count: "abc" })).rejects.toMatchObject({
232
- code: "INVALID_INPUT",
233
- });
234
- });
235
-
236
- it("envelopes samples with totalCount and nextSteps", async () => {
237
- const { sample } = compilePackStories(STORY_WITH_SAMPLE, "test", PREFIXES);
238
- const data = await sample?.resolve(rt, {});
239
- if (!data || !sample) throw new Error("expected sample data");
240
- const envelope = sample.toEnvelope(data);
241
- expect(envelope.meta).toEqual({ count: data.samples.length });
242
- const payload = envelope.data as {
243
- totalCount: number;
244
- nextSteps: string[];
245
- };
246
- expect(payload.totalCount).toBe(2);
247
- expect(payload.nextSteps.join(" ")).toContain("recipe_lookup");
248
- });
249
-
250
- it("renders samples via the lookup formatters under a count header", async () => {
251
- const { sample } = compilePackStories(STORY_WITH_SAMPLE, "test", PREFIXES);
252
- const data = await sample?.resolve(rt, { count: "2" });
253
- if (!data || !sample) throw new Error("expected sample data");
254
- const llm = sample.formatters.llm(sample.toOutput(data, {}));
255
- expect(llm).toContain("Showing 2 of 2 recipe entries");
256
- expect(llm).toContain("## ");
257
- });
258
-
259
- it("honors a declared default count", async () => {
260
- const configured: StoryPackDefinition = {
261
- ...RECIPE_STORY,
262
- lookup: {
263
- // biome-ignore lint/style/noNonNullAssertion: fixture always declares lookup
264
- ...RECIPE_STORY.lookup!,
265
- sample: { count: 1 },
266
- },
267
- };
268
- const { sample } = compilePackStories(configured, "test", PREFIXES);
269
- const data = await sample?.resolve(rt, {});
270
- expect(data?.samples).toHaveLength(1);
271
- });
272
-
273
- it("compiles no sample story when the capability is not declared", () => {
274
- const { sample } = compilePackStories(RECIPE_STORY, "test", PREFIXES);
275
- expect(sample).toBeUndefined();
276
- });
277
- });
278
-
279
- describe("compilePackStories — lookup", () => {
280
- it("looks an entity up by name, case-insensitively", async () => {
281
- const { lookup } = compilePackStories(RECIPE_STORY, "test", PREFIXES);
282
- const result = await lookup?.resolve(rt, ["pancakes"], {});
283
- expect(result?.results).toHaveLength(1);
284
- const entity = result?.results.at(0);
285
- expect(entity?.name).toBe("Pancakes");
286
- expect(entity?.category).toBe("breakfast");
287
- expect(entity?.instructions).toBe("Mix, fry, flip.");
288
- });
289
-
290
- it("renders fields and sections through the generic lookup renderer", async () => {
291
- const { lookup } = compilePackStories(RECIPE_STORY, "test", PREFIXES);
292
- const result = await lookup?.resolve(rt, ["Gazpacho"], {});
293
- const entity = result?.results.at(0);
294
- expect(entity).toBeDefined();
295
- if (!entity || !lookup) throw new Error("expected entity");
296
- const llm = lookup.formatters.llm(
297
- lookup.toFmtInput(entity, {
298
- surface: "cli",
299
- detailed: false,
300
- params: {},
301
- }),
302
- );
303
- expect(llm).toContain("Gazpacho");
304
- expect(llm).toContain("soup");
305
- expect(llm).toContain("Blend everything cold.");
306
- });
307
-
308
- it("collects not-found errors with ranked suggestions", async () => {
309
- const { lookup } = compilePackStories(RECIPE_STORY, "test", PREFIXES);
310
- const result = await lookup?.resolve(rt, ["Pancake"], {});
311
- expect(result?.results).toHaveLength(0);
312
- const error = result?.errors.at(0);
313
- expect(error?.code).toBe("ENTITY_NOT_FOUND");
314
- expect(error?.suggestions).toContain("Pancakes");
315
- });
316
-
317
- it("rejects empty names with a recovery hint", () => {
318
- const { lookup } = compilePackStories(RECIPE_STORY, "test", PREFIXES);
319
- expect(() => {
320
- const error = lookup?.emptyNamesError?.();
321
- if (error) throw error;
322
- }).toThrow(PragmaError);
323
- });
324
-
325
- it("completes names from the store", async () => {
326
- const { lookup } = compilePackStories(RECIPE_STORY, "test", PREFIXES);
327
- const ctx = {
328
- cwd: "/tmp",
329
- globalFlags: { llm: false, format: "text" as const, verbose: false },
330
- store,
331
- };
332
- await expect(lookup?.complete?.("pan", ctx)).resolves.toEqual(["Pancakes"]);
333
- });
334
- });
335
-
336
- // Pack v1: IRI/prefixed-name addressing and glob expansion on lookups.
337
- describe("compilePackStories — lookup by IRI and glob", () => {
338
- it("resolves an absolute IRI to the exact entity", async () => {
339
- const { lookup } = compilePackStories(RECIPE_STORY, "test", PREFIXES);
340
- const result = await lookup?.resolve(
341
- rt,
342
- ["http://example.org/recipes/pancakes"],
343
- {},
344
- );
345
- expect(result?.errors).toEqual([]);
346
- expect(result?.results.at(0)?.name).toBe("Pancakes");
347
- });
348
-
349
- it("resolves a prefixed name through the merged prefix map", async () => {
350
- const { lookup } = compilePackStories(RECIPE_STORY, "test", PREFIXES);
351
- const result = await lookup?.resolve(rt, ["ex:gazpacho"], {});
352
- expect(result?.errors).toEqual([]);
353
- expect(result?.results.at(0)?.name).toBe("Gazpacho");
354
- });
355
-
356
- it("collects an INVALID_INPUT entry for an unknown prefix", async () => {
357
- const { lookup } = compilePackStories(RECIPE_STORY, "test", PREFIXES);
358
- const result = await lookup?.resolve(rt, ["zz:nonexistent"], {});
359
- expect(result?.results).toHaveLength(0);
360
- expect(result?.errors.at(0)?.code).toBe("INVALID_INPUT");
361
- });
362
-
363
- it("collects ENTITY_NOT_FOUND for an IRI naming no entity", async () => {
364
- const { lookup } = compilePackStories(RECIPE_STORY, "test", PREFIXES);
365
- const result = await lookup?.resolve(rt, ["ex:missing"], {});
366
- expect(result?.results).toHaveLength(0);
367
- expect(result?.errors.at(0)?.code).toBe("ENTITY_NOT_FOUND");
368
- });
369
-
370
- it("expands glob queries against the entity name list", async () => {
371
- const { lookup } = compilePackStories(RECIPE_STORY, "test", PREFIXES);
372
- const result = await lookup?.resolve(rt, ["*a*"], {});
373
- expect(result?.errors).toEqual([]);
374
- expect(result?.results.map((entity) => entity.name).sort()).toEqual([
375
- "Gazpacho",
376
- "Pancakes",
377
- ]);
378
- });
379
-
380
- it("reports EMPTY_RESULTS for a glob matching nothing", async () => {
381
- const { lookup } = compilePackStories(RECIPE_STORY, "test", PREFIXES);
382
- const result = await lookup?.resolve(rt, ["Zebra*", "Pancakes"], {});
383
- expect(result?.results.at(0)?.name).toBe("Pancakes");
384
- const error = result?.errors.at(0);
385
- expect(error?.code).toBe("EMPTY_RESULTS");
386
- expect(error?.query).toBe("Zebra*");
387
- });
388
- });
389
-
390
- // ---------------------------------------------------------------------------
391
- // Pack v1: multi-valued expand projections (nested SPARQL)
392
- // ---------------------------------------------------------------------------
393
-
394
- const RECIPE_TTL_WITH_INGREDIENTS = `${RECIPE_TTL}
395
- ex:pancakes ex:ingredient [ ex:label "Flour" ; ex:amount "200g" ] .
396
- ex:pancakes ex:ingredient [ ex:label "Milk" ; ex:amount "300ml" ] .
397
- ex:gazpacho ex:ingredient [ ex:label "Tomato" ; ex:amount "1kg" ] .
398
- `;
399
-
400
- /** RECIPE_STORY with a multi-valued `ingredients` expand. */
401
- const RECIPE_STORY_WITH_EXPAND: StoryPackDefinition = {
402
- ...RECIPE_STORY,
403
- lookup: {
404
- // biome-ignore lint/style/noNonNullAssertion: fixture always declares lookup
405
- ...RECIPE_STORY.lookup!,
406
- expand: [
407
- {
408
- name: "ingredients",
409
- heading: "Ingredients",
410
- kind: "table",
411
- relation: "ex:ingredient",
412
- select: [
413
- { name: "label", property: "ex:label" },
414
- { name: "amount", property: "ex:amount" },
415
- ],
416
- },
417
- ],
418
- },
419
- };
420
-
421
- describe("compilePackStories — expand", () => {
422
- let expandStore: Store;
423
- let expandCleanup: () => void;
424
- let expandRt: PragmaRuntime;
425
-
426
- beforeAll(async () => {
427
- const result = await createTestStore({
428
- ttl: RECIPE_TTL_WITH_INGREDIENTS,
429
- prefixes: RECIPE_PREFIXES,
430
- });
431
- expandStore = result.store;
432
- expandCleanup = result.cleanup;
433
- expandRt = { store: expandStore } as PragmaRuntime;
434
- });
435
-
436
- afterAll(() => expandCleanup());
437
-
438
- it("attaches expanded child rows as an array on the entity", async () => {
439
- const { lookup } = compilePackStories(
440
- RECIPE_STORY_WITH_EXPAND,
441
- "test",
442
- PREFIXES,
443
- );
444
- const result = await lookup?.resolve(expandRt, ["Pancakes"], {});
445
- const entity = result?.results.at(0) as
446
- | { ingredients?: Array<Record<string, string>> }
447
- | undefined;
448
- expect(entity?.ingredients).toHaveLength(2);
449
- const labels = entity?.ingredients?.map((i) => i.label).sort();
450
- expect(labels).toEqual(["Flour", "Milk"]);
451
- const flour = entity?.ingredients?.find((i) => i.label === "Flour");
452
- expect(flour?.amount).toBe("200g");
453
- });
454
-
455
- it("renders the expand as a section through the generic renderer", async () => {
456
- const { lookup } = compilePackStories(
457
- RECIPE_STORY_WITH_EXPAND,
458
- "test",
459
- PREFIXES,
460
- );
461
- const result = await lookup?.resolve(expandRt, ["Pancakes"], {});
462
- const entity = result?.results.at(0);
463
- if (!entity || !lookup) throw new Error("expected entity");
464
- const llm = lookup.formatters.llm(
465
- lookup.toFmtInput(entity, { surface: "cli", detailed: true, params: {} }),
466
- );
467
- expect(llm).toContain("Ingredients");
468
- expect(llm).toContain("Flour");
469
- expect(llm).toContain("200g");
470
- });
471
-
472
- it("returns an empty array when the entity has no children", async () => {
473
- const noExpand: StoryPackDefinition = {
474
- ...RECIPE_STORY_WITH_EXPAND,
475
- lookup: {
476
- // biome-ignore lint/style/noNonNullAssertion: fixture always declares lookup
477
- ...RECIPE_STORY_WITH_EXPAND.lookup!,
478
- expand: [
479
- {
480
- name: "steps",
481
- relation: "ex:step",
482
- select: [{ name: "text", property: "ex:text" }],
483
- },
484
- ],
485
- },
486
- };
487
- const { lookup } = compilePackStories(noExpand, "test", PREFIXES);
488
- const result = await lookup?.resolve(expandRt, ["Gazpacho"], {});
489
- const entity = result?.results.at(0) as { steps?: unknown[] } | undefined;
490
- expect(entity?.steps).toEqual([]);
491
- });
492
-
493
- // -------------------------------------------------------------------------
494
- // Disclosure capability: level-gated expands + derived --detail
495
- // -------------------------------------------------------------------------
496
-
497
- /** RECIPE_STORY_WITH_EXPAND with `ingredients` gated to a "detailed" level. */
498
- const RECIPE_STORY_DISCLOSURE: StoryPackDefinition = {
499
- ...RECIPE_STORY_WITH_EXPAND,
500
- lookup: {
501
- // biome-ignore lint/style/noNonNullAssertion: fixture always declares lookup
502
- ...RECIPE_STORY_WITH_EXPAND.lookup!,
503
- expand: [
504
- {
505
- name: "ingredients",
506
- heading: "Ingredients",
507
- kind: "table",
508
- relation: "ex:ingredient",
509
- select: [
510
- { name: "label", property: "ex:label" },
511
- { name: "amount", property: "ex:amount" },
512
- ],
513
- level: "detailed",
514
- },
515
- ],
516
- disclosure: { levels: ["summary", "detailed"] },
517
- },
518
- };
519
-
520
- it("derives a `detail` param enumerated from the declared levels", () => {
521
- const { lookup } = compilePackStories(
522
- RECIPE_STORY_DISCLOSURE,
523
- "test",
524
- PREFIXES,
525
- );
526
- const param = lookup?.params?.find((p) => p.name === "detail");
527
- expect(param?.enum).toEqual(["summary", "detailed"]);
528
- });
529
-
530
- it("omits a level-gated expand at the base level (no fetch)", async () => {
531
- const { lookup } = compilePackStories(
532
- RECIPE_STORY_DISCLOSURE,
533
- "test",
534
- PREFIXES,
535
- );
536
- const result = await lookup?.resolve(expandRt, ["Pancakes"], {});
537
- const entity = result?.results.at(0) as
538
- | { ingredients?: unknown }
539
- | undefined;
540
- expect(entity?.ingredients).toBeUndefined();
541
- });
542
-
543
- it("includes a level-gated expand when --detail selects its level", async () => {
544
- const { lookup } = compilePackStories(
545
- RECIPE_STORY_DISCLOSURE,
546
- "test",
547
- PREFIXES,
548
- );
549
- const result = await lookup?.resolve(expandRt, ["Pancakes"], {
550
- detail: "detailed",
551
- });
552
- const entity = result?.results.at(0) as
553
- | { ingredients?: unknown[] }
554
- | undefined;
555
- expect(entity?.ingredients).toHaveLength(2);
556
- });
557
-
558
- it("honors the global config.detail default when no flag is passed", async () => {
559
- const { lookup } = compilePackStories(
560
- RECIPE_STORY_DISCLOSURE,
561
- "test",
562
- PREFIXES,
563
- );
564
- const configuredRt = {
565
- store: expandStore,
566
- config: { detail: "detailed" },
567
- } as PragmaRuntime;
568
- const result = await lookup?.resolve(configuredRt, ["Pancakes"], {});
569
- const entity = result?.results.at(0) as
570
- | { ingredients?: unknown[] }
571
- | undefined;
572
- expect(entity?.ingredients).toHaveLength(2);
573
- });
574
-
575
- it("lets an explicit --detail override the config default", async () => {
576
- const { lookup } = compilePackStories(
577
- RECIPE_STORY_DISCLOSURE,
578
- "test",
579
- PREFIXES,
580
- );
581
- const configuredRt = {
582
- store: expandStore,
583
- config: { detail: "detailed" },
584
- } as PragmaRuntime;
585
- const result = await lookup?.resolve(configuredRt, ["Pancakes"], {
586
- detail: "summary",
587
- });
588
- const entity = result?.results.at(0) as
589
- | { ingredients?: unknown }
590
- | undefined;
591
- expect(entity?.ingredients).toBeUndefined();
592
- });
593
-
594
- // ---------------------------------------------------------------------
595
- // Legacy disclosure alias flags + the MCP full-data default
596
- // ---------------------------------------------------------------------
597
-
598
- /** Three levels so alias precedence (highest wins) is observable. */
599
- const RECIPE_STORY_THREE_LEVELS: StoryPackDefinition = {
600
- ...RECIPE_STORY_WITH_EXPAND,
601
- lookup: {
602
- // biome-ignore lint/style/noNonNullAssertion: fixture always declares lookup
603
- ...RECIPE_STORY_WITH_EXPAND.lookup!,
604
- expand: [
605
- {
606
- name: "ingredients",
607
- relation: "ex:ingredient",
608
- select: [{ name: "label", property: "ex:label" }],
609
- level: "digest",
610
- },
611
- ],
612
- disclosure: { levels: ["summary", "digest", "detailed"] },
613
- },
614
- };
615
-
616
- it("derives a boolean alias flag per non-base level", () => {
617
- const { lookup } = compilePackStories(
618
- RECIPE_STORY_THREE_LEVELS,
619
- "test",
620
- PREFIXES,
621
- );
622
- const names = (lookup?.params ?? []).map((param) => param.name);
623
- expect(names).toEqual(["detail", "digest", "detailed"]);
624
- const digest = lookup?.params?.find((param) => param.name === "digest");
625
- expect(digest?.type).toBe("boolean");
626
- expect(digest?.default).toBe(false);
627
- });
628
-
629
- it("an alias flag implies its level", async () => {
630
- const { lookup } = compilePackStories(
631
- RECIPE_STORY_THREE_LEVELS,
632
- "test",
633
- PREFIXES,
634
- );
635
- const result = await lookup?.resolve(expandRt, ["Pancakes"], {
636
- digest: true,
637
- });
638
- const entity = result?.results.at(0) as
639
- | { ingredients?: unknown[] }
640
- | undefined;
641
- expect(entity?.ingredients).toHaveLength(2);
642
- });
643
-
644
- it("an explicit --detail beats an alias flag", async () => {
645
- const { lookup } = compilePackStories(
646
- RECIPE_STORY_THREE_LEVELS,
647
- "test",
648
- PREFIXES,
649
- );
650
- const result = await lookup?.resolve(expandRt, ["Pancakes"], {
651
- detail: "summary",
652
- detailed: true,
653
- });
654
- const entity = result?.results.at(0) as
655
- | { ingredients?: unknown }
656
- | undefined;
657
- expect(entity?.ingredients).toBeUndefined();
658
- });
659
-
660
- it("the highest requested alias level wins when several are set", async () => {
661
- /** Gate the expand at `detailed` so digest-vs-detailed is observable. */
662
- const gatedAtDetailed: StoryPackDefinition = {
663
- ...RECIPE_STORY_THREE_LEVELS,
664
- lookup: {
665
- // biome-ignore lint/style/noNonNullAssertion: fixture always declares lookup
666
- ...RECIPE_STORY_THREE_LEVELS.lookup!,
667
- expand: [
668
- {
669
- name: "ingredients",
670
- relation: "ex:ingredient",
671
- select: [{ name: "label", property: "ex:label" }],
672
- level: "detailed",
673
- },
674
- ],
675
- },
676
- };
677
- const { lookup } = compilePackStories(gatedAtDetailed, "test", PREFIXES);
678
- const result = await lookup?.resolve(expandRt, ["Pancakes"], {
679
- digest: true,
680
- detailed: true,
681
- });
682
- const entity = result?.results.at(0) as
683
- | { ingredients?: unknown[] }
684
- | undefined;
685
- expect(entity?.ingredients).toHaveLength(2);
686
- });
687
-
688
- it("an MCP call with no explicit choice gets the highest level", async () => {
689
- const { lookup } = compilePackStories(
690
- RECIPE_STORY_DISCLOSURE,
691
- "test",
692
- PREFIXES,
693
- );
694
- const result = await lookup?.resolve(
695
- expandRt,
696
- ["Pancakes"],
697
- {},
698
- {
699
- surface: "mcp",
700
- detailed: false,
701
- params: {},
702
- },
703
- );
704
- const entity = result?.results.at(0) as
705
- | { ingredients?: unknown[] }
706
- | undefined;
707
- expect(entity?.ingredients).toHaveLength(2);
708
- });
709
-
710
- it("the global config.detail outranks the MCP full-data default", async () => {
711
- // Counterpart of the CLI config.detail test above: a user-configured
712
- // global `detail: summary` must win over the MCP surface fallback.
713
- const { lookup } = compilePackStories(
714
- RECIPE_STORY_DISCLOSURE,
715
- "test",
716
- PREFIXES,
717
- );
718
- const configuredRt = {
719
- store: expandStore,
720
- config: { detail: "summary" },
721
- } as PragmaRuntime;
722
- const result = await lookup?.resolve(
723
- configuredRt,
724
- ["Pancakes"],
725
- {},
726
- { surface: "mcp", detailed: false, params: {} },
727
- );
728
- const entity = result?.results.at(0) as
729
- | { ingredients?: unknown }
730
- | undefined;
731
- expect(entity?.ingredients).toBeUndefined();
732
- });
733
-
734
- it("an MCP alias explicitly false opts down to the base level", async () => {
735
- const { lookup } = compilePackStories(
736
- RECIPE_STORY_DISCLOSURE,
737
- "test",
738
- PREFIXES,
739
- );
740
- const result = await lookup?.resolve(
741
- expandRt,
742
- ["Pancakes"],
743
- { detailed: false },
744
- { surface: "mcp", detailed: false, params: {} },
745
- );
746
- const entity = result?.results.at(0) as
747
- | { ingredients?: unknown }
748
- | undefined;
749
- expect(entity?.ingredients).toBeUndefined();
750
- });
751
- });