@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,1207 +0,0 @@
1
- // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
-
3
- exports[`golden: executeGenerator — components > lit — dry-run plan 1`] = `
4
- "
5
- ├─ Info Generating Lit web component: Button
6
- ├─ Create dir src/components/Button
7
- ├─ Create file src/components/Button/Button.ts
8
- ├─ Create file src/components/Button/index.ts
9
- ├─ Create file src/components/Button/types.ts
10
- ├─ Create file src/components/Button/Button.tests.ts
11
- ├─ Create file src/components/Button/Button.stories.ts
12
- ├─ Create file src/components/Button/styles.css
13
- ├─ Create file src/components/index.ts
14
- └─ Info Created Button component at src/components/Button
15
-
16
- Dry-run complete. No files were modified.
17
- Tip: Use --show-files to see generated file contents
18
- "
19
- `;
20
-
21
- exports[`golden: executeGenerator — components > lit — json plan 1`] = `
22
- "{
23
- "generator": {
24
- "name": "component/lit",
25
- "version": "0.1.0",
26
- "description": "Generate a Lit web component with TypeScript, tests, stories, and styles"
27
- },
28
- "answers": {
29
- "componentPath": "src/components/Button",
30
- "withStyles": true,
31
- "withStories": true
32
- },
33
- "plan": [
34
- {
35
- "action": "info",
36
- "path": "Generating Lit web component: Button"
37
- },
38
- {
39
- "action": "mkdir",
40
- "path": "src/components/Button"
41
- },
42
- {
43
- "action": "create",
44
- "path": "src/components/Button/Button.ts",
45
- "lines": 25
46
- },
47
- {
48
- "action": "create",
49
- "path": "src/components/Button/index.ts",
50
- "lines": 3
51
- },
52
- {
53
- "action": "create",
54
- "path": "src/components/Button/types.ts",
55
- "lines": 7
56
- },
57
- {
58
- "action": "create",
59
- "path": "src/components/Button/Button.tests.ts",
60
- "lines": 28
61
- },
62
- {
63
- "action": "create",
64
- "path": "src/components/Button/Button.stories.ts",
65
- "lines": 18
66
- },
67
- {
68
- "action": "create",
69
- "path": "src/components/Button/styles.css",
70
- "lines": 50
71
- },
72
- {
73
- "action": "create",
74
- "path": "src/components/index.ts",
75
- "lines": 2
76
- },
77
- {
78
- "action": "info",
79
- "path": "Created Button component at src/components/Button"
80
- }
81
- ],
82
- "files": {
83
- "src/components/Button/Button.ts": "import { html, LitElement } from \\"lit\\";\\nimport { customElement } from \\"lit/decorators.js\\";\\nimport styles from \\"./styles.css\\";\\nimport type { ButtonProps } from \\"./types.js\\";\\n\\nconst componentCssClassName = \\"ds button\\";\\n\\n/**\\n * Button web component.\\n *\\n * @implements ds:global.component.button\\n */\\n@customElement(\\"ds-button\\")\\nexport default class Button extends LitElement implements ButtonProps {\\n static styles = styles;\\n\\n render() {\\n return html\`\\n <div class=\\"\${componentCssClassName}\\">\\n <slot></slot>\\n </div>\\n \`;\\n }\\n}\\n",
84
- "src/components/Button/index.ts": "export { default as Button } from \\"./Button.js\\";\\nexport type { ButtonProps } from \\"./types.js\\";\\n",
85
- "src/components/Button/types.ts": "/**\\n * Props for the Button component.\\n */\\nexport interface ButtonProps {\\n // Define props specific to Button here\\n}\\n",
86
- "src/components/Button/Button.tests.ts": "import { afterEach, beforeEach, describe, expect, it } from \\"vitest\\";\\nimport \\"./Button.js\\";\\nimport type Button from \\"./Button.js\\";\\n\\ndescribe(\\"Button component\\", () => {\\n let elem: Button;\\n\\n beforeEach(() => {\\n elem = document.createElement(\\"ds-button\\") as Button;\\n document.body.appendChild(elem);\\n });\\n\\n afterEach(() => {\\n elem.remove();\\n });\\n\\n it(\\"should render component\\", async () => {\\n await customElements.whenDefined(\\"ds-button\\");\\n\\n const container = elem.shadowRoot?.querySelector(\\".ds.button\\");\\n expect(container).toBeTruthy();\\n });\\n\\n it(\\"should have correct tag name\\", () => {\\n expect(elem.tagName.toLowerCase()).toBe(\\"ds-button\\");\\n });\\n});\\n",
87
- "src/components/Button/Button.stories.ts": "import type { Meta, StoryObj } from \\"@storybook/web-components-vite\\";\\nimport { html } from \\"lit\\";\\n\\nimport \\"./Button.js\\";\\nimport type Button from \\"./Button.js\\";\\n\\nconst meta = {\\n title: \\"Web Components/Button\\",\\n tags: [\\"autodocs\\"],\\n} satisfies Meta<Button>;\\n\\nexport default meta;\\ntype Story = StoryObj<Button>;\\n\\nexport const Default: Story = {\\n render: () => html\`<ds-button>Hello, Button!</ds-button>\`,\\n};\\n",
88
- "src/components/Button/styles.css": "/*\\n * Lit Layout Primer\\n * Delete this comment block when you're done implementing.\\n *\\n * Styles live in a shadow DOM, isolated from the page by default.\\n *\\n * Two layers:\\n *\\n * 1) :host — the outer shell, how this component presents to its parent layout.\\n * display, width, height (always apply)\\n * grid-column, grid-row, align-self, justify-self (parent must be grid/flex)\\n *\\n * 2) .ds.button — the inner shell, how this component arranges its shadow children.\\n * display: grid/flex, gap, grid-template-columns, align-items, justify-content\\n *\\n * Subgrid pattern — use when the parent defines grid tracks you want to inherit:\\n *\\n * In the parent component:\\n * .ds.parent { display: grid; grid-template-columns: repeat(4, 1fr); }\\n *\\n * In this component:\\n * :host { display: grid; grid-column: span 2; }\\n * .ds.button { display: grid; grid-template-columns: subgrid; }\\n *\\n * In this example, the parent establishes a 4-column grid.\\n * This component claims 2 of those columns and inherits their widths via subgrid.\\n *\\n * Keep in mind:\\n * - Custom elements are display: inline by default — always set display on :host.\\n * - Flex/grid rules only affect direct children of the container, not deeper descendants.\\n * - External CSS cannot pierce the shadow boundary — expose CSS custom properties for theming.\\n */\\n\\n:host {\\n /*\\n * Host controls the outer layout role.\\n * Declare component CSS variables here when needed.\\n * Variables must be on :host to be accessible inside the shadow tree.\\n *\\n * Example:\\n * --button-color-background: var(--color-background-default);\\n * --button-color-text: var(--color-text-default);\\n */\\n display: inline-flex;\\n}\\n\\n.ds.button {\\n /* Inner layout and visual styles go here. */\\n}\\n",
89
- "src/components/index.ts": "export * from \\"./Button/index.js\\";\\n"
90
- },
91
- "executeCommand": "summon component/lit --component-path src/components/Button --yes"
92
- }
93
- "
94
- `;
95
-
96
- exports[`golden: executeGenerator — components > lit — llm plan 1`] = `
97
- "# component/lit
98
-
99
- > Generate a Lit web component with TypeScript, tests, stories, and styles
100
- > v0.1.0
101
-
102
- ## Answers
103
-
104
- | Option | Value |
105
- |--------|-------|
106
- | componentPath | src/components/Button |
107
- | withStyles | true |
108
- | withStories | true |
109
-
110
- ## Plan
111
-
112
- | Action | Path | Lines |
113
- |--------|------|-------|
114
- | info | Generating Lit web component: Button | |
115
- | mkdir | src/components/Button | |
116
- | create | src/components/Button/Button.ts | 25 |
117
- | create | src/components/Button/index.ts | 3 |
118
- | create | src/components/Button/types.ts | 7 |
119
- | create | src/components/Button/Button.tests.ts | 28 |
120
- | create | src/components/Button/Button.stories.ts | 18 |
121
- | create | src/components/Button/styles.css | 50 |
122
- | create | src/components/index.ts | 2 |
123
- | info | Created Button component at src/components/Button | |
124
-
125
- ## Files
126
-
127
- ### src/components/Button/Button.ts
128
-
129
- \`\`\`ts
130
- import { html, LitElement } from "lit";
131
- import { customElement } from "lit/decorators.js";
132
- import styles from "./styles.css";
133
- import type { ButtonProps } from "./types.js";
134
-
135
- const componentCssClassName = "ds button";
136
-
137
- /**
138
- * Button web component.
139
- *
140
- * @implements ds:global.component.button
141
- */
142
- @customElement("ds-button")
143
- export default class Button extends LitElement implements ButtonProps {
144
- static styles = styles;
145
-
146
- render() {
147
- return html\`
148
- <div class="\${componentCssClassName}">
149
- <slot></slot>
150
- </div>
151
- \`;
152
- }
153
- }
154
-
155
- \`\`\`
156
-
157
- ### src/components/Button/index.ts
158
-
159
- \`\`\`ts
160
- export { default as Button } from "./Button.js";
161
- export type { ButtonProps } from "./types.js";
162
-
163
- \`\`\`
164
-
165
- ### src/components/Button/types.ts
166
-
167
- \`\`\`ts
168
- /**
169
- * Props for the Button component.
170
- */
171
- export interface ButtonProps {
172
- // Define props specific to Button here
173
- }
174
-
175
- \`\`\`
176
-
177
- ### src/components/Button/Button.tests.ts
178
-
179
- \`\`\`ts
180
- import { afterEach, beforeEach, describe, expect, it } from "vitest";
181
- import "./Button.js";
182
- import type Button from "./Button.js";
183
-
184
- describe("Button component", () => {
185
- let elem: Button;
186
-
187
- beforeEach(() => {
188
- elem = document.createElement("ds-button") as Button;
189
- document.body.appendChild(elem);
190
- });
191
-
192
- afterEach(() => {
193
- elem.remove();
194
- });
195
-
196
- it("should render component", async () => {
197
- await customElements.whenDefined("ds-button");
198
-
199
- const container = elem.shadowRoot?.querySelector(".ds.button");
200
- expect(container).toBeTruthy();
201
- });
202
-
203
- it("should have correct tag name", () => {
204
- expect(elem.tagName.toLowerCase()).toBe("ds-button");
205
- });
206
- });
207
-
208
- \`\`\`
209
-
210
- ### src/components/Button/Button.stories.ts
211
-
212
- \`\`\`ts
213
- import type { Meta, StoryObj } from "@storybook/web-components-vite";
214
- import { html } from "lit";
215
-
216
- import "./Button.js";
217
- import type Button from "./Button.js";
218
-
219
- const meta = {
220
- title: "Web Components/Button",
221
- tags: ["autodocs"],
222
- } satisfies Meta<Button>;
223
-
224
- export default meta;
225
- type Story = StoryObj<Button>;
226
-
227
- export const Default: Story = {
228
- render: () => html\`<ds-button>Hello, Button!</ds-button>\`,
229
- };
230
-
231
- \`\`\`
232
-
233
- ### src/components/Button/styles.css
234
-
235
- \`\`\`css
236
- /*
237
- * Lit Layout Primer
238
- * Delete this comment block when you're done implementing.
239
- *
240
- * Styles live in a shadow DOM, isolated from the page by default.
241
- *
242
- * Two layers:
243
- *
244
- * 1) :host — the outer shell, how this component presents to its parent layout.
245
- * display, width, height (always apply)
246
- * grid-column, grid-row, align-self, justify-self (parent must be grid/flex)
247
- *
248
- * 2) .ds.button — the inner shell, how this component arranges its shadow children.
249
- * display: grid/flex, gap, grid-template-columns, align-items, justify-content
250
- *
251
- * Subgrid pattern — use when the parent defines grid tracks you want to inherit:
252
- *
253
- * In the parent component:
254
- * .ds.parent { display: grid; grid-template-columns: repeat(4, 1fr); }
255
- *
256
- * In this component:
257
- * :host { display: grid; grid-column: span 2; }
258
- * .ds.button { display: grid; grid-template-columns: subgrid; }
259
- *
260
- * In this example, the parent establishes a 4-column grid.
261
- * This component claims 2 of those columns and inherits their widths via subgrid.
262
- *
263
- * Keep in mind:
264
- * - Custom elements are display: inline by default — always set display on :host.
265
- * - Flex/grid rules only affect direct children of the container, not deeper descendants.
266
- * - External CSS cannot pierce the shadow boundary — expose CSS custom properties for theming.
267
- */
268
-
269
- :host {
270
- /*
271
- * Host controls the outer layout role.
272
- * Declare component CSS variables here when needed.
273
- * Variables must be on :host to be accessible inside the shadow tree.
274
- *
275
- * Example:
276
- * --button-color-background: var(--color-background-default);
277
- * --button-color-text: var(--color-text-default);
278
- */
279
- display: inline-flex;
280
- }
281
-
282
- .ds.button {
283
- /* Inner layout and visual styles go here. */
284
- }
285
-
286
- \`\`\`
287
-
288
- ### src/components/index.ts
289
-
290
- \`\`\`ts
291
- export * from "./Button/index.js";
292
-
293
- \`\`\`
294
-
295
- ---
296
-
297
- Dry-run complete. No files were modified.
298
-
299
- To execute:
300
-
301
- \`\`\`sh
302
- summon component/lit --component-path src/components/Button --yes
303
- \`\`\`
304
- "
305
- `;
306
-
307
- exports[`golden: executeGenerator — components > react — dry-run plan 1`] = `
308
- "
309
- ├─ Info Generating React component: Button
310
- ├─ Create dir src/components/Button
311
- ├─ Create file src/components/Button/Button.tsx
312
- ├─ Create file src/components/Button/types.ts
313
- ├─ Create file src/components/Button/index.ts
314
- ├─ Create file src/components/Button/Button.tests.tsx
315
- ├─ Create file src/components/Button/Button.ssr.tests.tsx
316
- ├─ Create file src/components/Button/Button.stories.tsx
317
- ├─ Create file src/components/Button/styles.css
318
- ├─ Create file src/components/index.ts
319
- └─ Info Created Button component at src/components/Button
320
-
321
- Dry-run complete. No files were modified.
322
- Tip: Use --show-files to see generated file contents
323
- "
324
- `;
325
-
326
- exports[`golden: executeGenerator — components > react — json plan 1`] = `
327
- "{
328
- "generator": {
329
- "name": "component/react",
330
- "version": "0.1.0",
331
- "description": "Generate a React component with TypeScript, tests, stories, and styles"
332
- },
333
- "answers": {
334
- "componentPath": "src/components/Button",
335
- "withStyles": true,
336
- "withStories": true,
337
- "withSsrTests": true
338
- },
339
- "plan": [
340
- {
341
- "action": "info",
342
- "path": "Generating React component: Button"
343
- },
344
- {
345
- "action": "mkdir",
346
- "path": "src/components/Button"
347
- },
348
- {
349
- "action": "create",
350
- "path": "src/components/Button/Button.tsx",
351
- "lines": 26
352
- },
353
- {
354
- "action": "create",
355
- "path": "src/components/Button/types.ts",
356
- "lines": 7
357
- },
358
- {
359
- "action": "create",
360
- "path": "src/components/Button/index.ts",
361
- "lines": 3
362
- },
363
- {
364
- "action": "create",
365
- "path": "src/components/Button/Button.tests.tsx",
366
- "lines": 23
367
- },
368
- {
369
- "action": "create",
370
- "path": "src/components/Button/Button.ssr.tests.tsx",
371
- "lines": 12
372
- },
373
- {
374
- "action": "create",
375
- "path": "src/components/Button/Button.stories.tsx",
376
- "lines": 25
377
- },
378
- {
379
- "action": "create",
380
- "path": "src/components/Button/styles.css",
381
- "lines": 4
382
- },
383
- {
384
- "action": "create",
385
- "path": "src/components/index.ts",
386
- "lines": 2
387
- },
388
- {
389
- "action": "info",
390
- "path": "Created Button component at src/components/Button"
391
- }
392
- ],
393
- "files": {
394
- "src/components/Button/Button.tsx": "import type React from \\"react\\";\\nimport type { ButtonProps } from \\"./types.js\\";\\nimport \\"./styles.css\\";\\n\\nconst componentCssClassName = \\"ds button\\";\\n\\n/**\\n * Button component\\n */\\nconst Button = ({\\n\\tclassName,\\n\\tchildren,\\n\\t...props\\n}: ButtonProps): React.ReactElement => {\\n\\treturn (\\n\\t\\t<div\\n\\t\\t\\tclassName={[componentCssClassName, className].filter(Boolean).join(\\" \\")}\\n\\t\\t\\t{...props}\\n\\t\\t>\\n\\t\\t\\t{children}\\n\\t\\t</div>\\n\\t);\\n};\\n\\nexport default Button;\\n",
395
- "src/components/Button/types.ts": "import type { HTMLAttributes, ReactNode } from \\"react\\";\\n\\nexport interface ButtonProps extends HTMLAttributes<HTMLDivElement> {\\n\\t/** Content to render inside the component */\\n\\tchildren?: ReactNode;\\n}\\n",
396
- "src/components/Button/index.ts": "export { default as Button } from \\"./Button.js\\";\\nexport type * from \\"./types.js\\";\\n",
397
- "src/components/Button/Button.tests.tsx": "import { describe, expect, it } from \\"vitest\\";\\nimport { render, screen } from \\"@testing-library/react\\";\\nimport Button from \\"./Button.js\\";\\n\\ndescribe(\\"Button\\", () => {\\n\\tit(\\"renders children\\", () => {\\n\\t\\trender(<Button>Test content</Button>);\\n\\t\\texpect(screen.getByText(\\"Test content\\")).toBeInTheDocument();\\n\\t});\\n\\n\\tit(\\"applies custom className\\", () => {\\n\\t\\trender(<Button className=\\"custom-class\\">Content</Button>);\\n\\t\\tconst element = screen.getByText(\\"Content\\");\\n\\t\\texpect(element.className).toContain(\\"ds button\\");\\n\\t\\texpect(element.className).toContain(\\"custom-class\\");\\n\\t});\\n\\n\\tit(\\"passes through additional props\\", () => {\\n\\t\\trender(<Button data-testid=\\"test-component\\">Content</Button>);\\n\\t\\texpect(screen.getByTestId(\\"test-component\\")).toBeInTheDocument();\\n\\t});\\n});\\n",
398
- "src/components/Button/Button.ssr.tests.tsx": "import { describe, expect, it } from \\"vitest\\";\\nimport { renderToString } from \\"react-dom/server\\";\\nimport Button from \\"./Button.js\\";\\n\\ndescribe(\\"Button SSR\\", () => {\\n\\tit(\\"renders without hydration errors\\", () => {\\n\\t\\tconst html = renderToString(<Button>Test content</Button>);\\n\\t\\texpect(html).toContain(\\"Test content\\");\\n\\t\\texpect(html).toContain(\\"ds button\\");\\n\\t});\\n});\\n",
399
- "src/components/Button/Button.stories.tsx": "import type { Meta, StoryObj } from \\"@storybook/react-vite\\";\\nimport Button from \\"./Button.js\\";\\n\\nconst meta: Meta<typeof Button> = {\\n\\ttitle: \\"Components/Button\\",\\n\\tcomponent: Button,\\n\\ttags: [\\"autodocs\\"],\\n};\\n\\nexport default meta;\\ntype Story = StoryObj<typeof Button>;\\n\\nexport const Default: Story = {\\n\\targs: {\\n\\t\\tchildren: \\"Hello, Button!\\",\\n\\t},\\n};\\n\\nexport const WithCustomClass: Story = {\\n\\targs: {\\n\\t\\tchildren: \\"Custom styled\\",\\n\\t\\tclassName: \\"custom-class\\",\\n\\t},\\n};\\n",
400
- "src/components/Button/styles.css": ".ds.button {\\n\\t/* Component styles */\\n}\\n",
401
- "src/components/index.ts": "export * from \\"./Button/index.js\\";\\n"
402
- },
403
- "executeCommand": "summon component/react --component-path src/components/Button --yes"
404
- }
405
- "
406
- `;
407
-
408
- exports[`golden: executeGenerator — components > react — llm plan 1`] = `
409
- "# component/react
410
-
411
- > Generate a React component with TypeScript, tests, stories, and styles
412
- > v0.1.0
413
-
414
- ## Answers
415
-
416
- | Option | Value |
417
- |--------|-------|
418
- | componentPath | src/components/Button |
419
- | withStyles | true |
420
- | withStories | true |
421
- | withSsrTests | true |
422
-
423
- ## Plan
424
-
425
- | Action | Path | Lines |
426
- |--------|------|-------|
427
- | info | Generating React component: Button | |
428
- | mkdir | src/components/Button | |
429
- | create | src/components/Button/Button.tsx | 26 |
430
- | create | src/components/Button/types.ts | 7 |
431
- | create | src/components/Button/index.ts | 3 |
432
- | create | src/components/Button/Button.tests.tsx | 23 |
433
- | create | src/components/Button/Button.ssr.tests.tsx | 12 |
434
- | create | src/components/Button/Button.stories.tsx | 25 |
435
- | create | src/components/Button/styles.css | 4 |
436
- | create | src/components/index.ts | 2 |
437
- | info | Created Button component at src/components/Button | |
438
-
439
- ## Files
440
-
441
- ### src/components/Button/Button.tsx
442
-
443
- \`\`\`tsx
444
- import type React from "react";
445
- import type { ButtonProps } from "./types.js";
446
- import "./styles.css";
447
-
448
- const componentCssClassName = "ds button";
449
-
450
- /**
451
- * Button component
452
- */
453
- const Button = ({
454
- className,
455
- children,
456
- ...props
457
- }: ButtonProps): React.ReactElement => {
458
- return (
459
- <div
460
- className={[componentCssClassName, className].filter(Boolean).join(" ")}
461
- {...props}
462
- >
463
- {children}
464
- </div>
465
- );
466
- };
467
-
468
- export default Button;
469
-
470
- \`\`\`
471
-
472
- ### src/components/Button/types.ts
473
-
474
- \`\`\`ts
475
- import type { HTMLAttributes, ReactNode } from "react";
476
-
477
- export interface ButtonProps extends HTMLAttributes<HTMLDivElement> {
478
- /** Content to render inside the component */
479
- children?: ReactNode;
480
- }
481
-
482
- \`\`\`
483
-
484
- ### src/components/Button/index.ts
485
-
486
- \`\`\`ts
487
- export { default as Button } from "./Button.js";
488
- export type * from "./types.js";
489
-
490
- \`\`\`
491
-
492
- ### src/components/Button/Button.tests.tsx
493
-
494
- \`\`\`tsx
495
- import { describe, expect, it } from "vitest";
496
- import { render, screen } from "@testing-library/react";
497
- import Button from "./Button.js";
498
-
499
- describe("Button", () => {
500
- it("renders children", () => {
501
- render(<Button>Test content</Button>);
502
- expect(screen.getByText("Test content")).toBeInTheDocument();
503
- });
504
-
505
- it("applies custom className", () => {
506
- render(<Button className="custom-class">Content</Button>);
507
- const element = screen.getByText("Content");
508
- expect(element.className).toContain("ds button");
509
- expect(element.className).toContain("custom-class");
510
- });
511
-
512
- it("passes through additional props", () => {
513
- render(<Button data-testid="test-component">Content</Button>);
514
- expect(screen.getByTestId("test-component")).toBeInTheDocument();
515
- });
516
- });
517
-
518
- \`\`\`
519
-
520
- ### src/components/Button/Button.ssr.tests.tsx
521
-
522
- \`\`\`tsx
523
- import { describe, expect, it } from "vitest";
524
- import { renderToString } from "react-dom/server";
525
- import Button from "./Button.js";
526
-
527
- describe("Button SSR", () => {
528
- it("renders without hydration errors", () => {
529
- const html = renderToString(<Button>Test content</Button>);
530
- expect(html).toContain("Test content");
531
- expect(html).toContain("ds button");
532
- });
533
- });
534
-
535
- \`\`\`
536
-
537
- ### src/components/Button/Button.stories.tsx
538
-
539
- \`\`\`tsx
540
- import type { Meta, StoryObj } from "@storybook/react-vite";
541
- import Button from "./Button.js";
542
-
543
- const meta: Meta<typeof Button> = {
544
- title: "Components/Button",
545
- component: Button,
546
- tags: ["autodocs"],
547
- };
548
-
549
- export default meta;
550
- type Story = StoryObj<typeof Button>;
551
-
552
- export const Default: Story = {
553
- args: {
554
- children: "Hello, Button!",
555
- },
556
- };
557
-
558
- export const WithCustomClass: Story = {
559
- args: {
560
- children: "Custom styled",
561
- className: "custom-class",
562
- },
563
- };
564
-
565
- \`\`\`
566
-
567
- ### src/components/Button/styles.css
568
-
569
- \`\`\`css
570
- .ds.button {
571
- /* Component styles */
572
- }
573
-
574
- \`\`\`
575
-
576
- ### src/components/index.ts
577
-
578
- \`\`\`ts
579
- export * from "./Button/index.js";
580
-
581
- \`\`\`
582
-
583
- ---
584
-
585
- Dry-run complete. No files were modified.
586
-
587
- To execute:
588
-
589
- \`\`\`sh
590
- summon component/react --component-path src/components/Button --yes
591
- \`\`\`
592
- "
593
- `;
594
-
595
- exports[`golden: executeGenerator — components > svelte — dry-run plan 1`] = `
596
- "
597
- ├─ Info Generating Svelte component: Button
598
- ├─ Create dir src/components/Button
599
- ├─ Create file src/components/Button/Button.svelte
600
- ├─ Create file src/components/Button/types.ts
601
- ├─ Create file src/components/Button/index.ts
602
- ├─ Create file src/components/Button/Button.svelte.test.ts
603
- ├─ Create file src/components/Button/Button.ssr.test.ts
604
- ├─ Create file src/components/Button/Button.stories.svelte
605
- ├─ Create file src/components/Button/styles.css
606
- ├─ Create file src/components/index.ts
607
- └─ Info Created Button component at src/components/Button
608
-
609
- Dry-run complete. No files were modified.
610
- Tip: Use --show-files to see generated file contents
611
- "
612
- `;
613
-
614
- exports[`golden: executeGenerator — components > svelte — json plan 1`] = `
615
- "{
616
- "generator": {
617
- "name": "component/svelte",
618
- "version": "0.1.0",
619
- "description": "Generate a Svelte 5 component with TypeScript, tests, stories, and styles"
620
- },
621
- "answers": {
622
- "componentPath": "src/components/Button",
623
- "withStyles": true,
624
- "withStories": true,
625
- "withSsrTests": true,
626
- "useTsStories": false
627
- },
628
- "plan": [
629
- {
630
- "action": "info",
631
- "path": "Generating Svelte component: Button"
632
- },
633
- {
634
- "action": "mkdir",
635
- "path": "src/components/Button"
636
- },
637
- {
638
- "action": "create",
639
- "path": "src/components/Button/Button.svelte",
640
- "lines": 20
641
- },
642
- {
643
- "action": "create",
644
- "path": "src/components/Button/types.ts",
645
- "lines": 36
646
- },
647
- {
648
- "action": "create",
649
- "path": "src/components/Button/index.ts",
650
- "lines": 3
651
- },
652
- {
653
- "action": "create",
654
- "path": "src/components/Button/Button.svelte.test.ts",
655
- "lines": 78
656
- },
657
- {
658
- "action": "create",
659
- "path": "src/components/Button/Button.ssr.test.ts",
660
- "lines": 84
661
- },
662
- {
663
- "action": "create",
664
- "path": "src/components/Button/Button.stories.svelte",
665
- "lines": 26
666
- },
667
- {
668
- "action": "create",
669
- "path": "src/components/Button/styles.css",
670
- "lines": 4
671
- },
672
- {
673
- "action": "create",
674
- "path": "src/components/index.ts",
675
- "lines": 2
676
- },
677
- {
678
- "action": "info",
679
- "path": "Created Button component at src/components/Button"
680
- }
681
- ],
682
- "files": {
683
- "src/components/Button/Button.svelte": "<script lang=\\"ts\\">\\n\\timport type { ButtonProps } from \\"./types.js\\";\\n\\timport \\"./styles.css\\";\\n\\n\\tconst componentCssClassName = \\"ds button\\";\\n\\n\\tlet {\\n\\t\\tclass: className,\\n\\t\\tchildren,\\n\\t\\t...rest\\n\\t}: ButtonProps = $props();\\n</script>\\n\\n<div\\n\\tclass={[componentCssClassName, className]}\\n\\t{...rest}\\n>\\n\\t{@render children?.()}\\n</div>\\n",
684
- "src/components/Button/types.ts": "import type { Snippet } from \\"svelte\\";\\nimport type { SvelteHTMLElements } from \\"svelte/elements\\";\\n\\n/*\\n\\tFor components that render specific HTML elements with extended prop sets,\\n\\tmake sure to change \`\\"div\\"\` to the appropriate HTML element type.\\n*/\\ntype BaseProps = SvelteHTMLElements[\\"div\\"];\\n\\nexport interface ButtonProps extends BaseProps {\\n\\t/** Content to render inside the component */\\n\\tchildren?: Snippet;\\n\\t// Define additional props specific to Button here\\n}\\n\\n/*\\n\\t...or consider using appropriate interfaces directly exported from \`svelte/elements\`.\\n\\n\\tFor example:\\n\\t- \`HTMLButtonAttributes\` (provides \`disabled\`, \`type\`, etc.)\\n\\t- \`HTMLAnchorAttributes\` (provides \`href\`, \`target\`, etc.)\\n\\t- \`HTMLInputAttributes\` (provides \`type\`, \`checked\`, \`value\`, etc.)\\n\\t- \`HTMLFormAttributes\` (provides \`action\`, \`method\`, etc.)\\n\\n\\t\`\`\`typescript\\n\\timport type { HTMLButtonAttributes } from \\"svelte/elements\\";\\n\\n\\texport interface MyButtonProps extends HTMLButtonAttributes {\\n\\t\\t// Your custom props here\\n\\t}\\n\\t\`\`\`\\n\\n\\tSee Svelte documentation on typing wrapper components:\\n\\thttps://svelte.dev/docs/svelte/typescript#Typing-wrapper-components\\n*/\\n",
685
- "src/components/Button/index.ts": "export { default as Button } from \\"./Button.svelte\\";\\nexport type { ButtonProps } from \\"./types.js\\";\\n",
686
- "src/components/Button/Button.svelte.test.ts": "import type { Locator } from \\"@vitest/browser/context\\";\\nimport { createRawSnippet } from \\"svelte\\";\\nimport type { ComponentProps } from \\"svelte\\";\\nimport { describe, expect, it } from \\"vitest\\";\\nimport { render } from \\"vitest-browser-svelte\\";\\nimport type { RenderResult } from \\"vitest-browser-svelte\\";\\nimport Component from \\"./Button.svelte\\";\\n\\ndescribe(\\"Button component\\", () => {\\n\\tconst baseProps = {\\n\\t\\tchildren: createRawSnippet(() => ({\\n\\t\\t\\trender: () => \`<span>Button</span>\`,\\n\\t\\t})),\\n\\t} satisfies ComponentProps<typeof Component>;\\n\\n\\tit(\\"renders\\", async () => {\\n\\t\\tconst page = render(Component, { ...baseProps });\\n\\t\\tawait expect.element(componentLocator(page)).toBeInTheDocument();\\n\\t\\tawait expect.element(page.getByText(\\"Button\\")).toBeVisible();\\n\\t});\\n\\n\\tdescribe(\\"attributes\\", () => {\\n\\t\\tit.each([\\n\\t\\t\\t[\\"id\\", \\"test-id\\"],\\n\\t\\t\\t[\\"aria-label\\", \\"test-aria-label\\"],\\n\\t\\t])(\\"applies %s\\", async (attribute, expected) => {\\n\\t\\t\\tconst page = render(Component, { ...baseProps, [attribute]: expected });\\n\\t\\t\\tawait expect\\n\\t\\t\\t\\t.element(componentLocator(page))\\n\\t\\t\\t\\t.toHaveAttribute(attribute, expected);\\n\\t\\t});\\n\\n\\t\\tit(\\"applies classes\\", async () => {\\n\\t\\t\\tconst page = render(Component, { ...baseProps, class: \\"test-class\\" });\\n\\t\\t\\tawait expect.element(componentLocator(page)).toHaveClass(\\"test-class\\");\\n\\t\\t\\tawait expect.element(componentLocator(page)).toHaveClass(\\"ds\\");\\n\\t\\t\\tawait expect\\n\\t\\t\\t\\t.element(componentLocator(page))\\n\\t\\t\\t\\t.toHaveClass(\\"button\\");\\n\\t\\t});\\n\\n\\t\\tit(\\"applies style\\", async () => {\\n\\t\\t\\tconst page = render(Component, {\\n\\t\\t\\t\\t...baseProps,\\n\\t\\t\\t\\tstyle: \\"color: orange;\\",\\n\\t\\t\\t});\\n\\t\\t\\tawait expect\\n\\t\\t\\t\\t.element(componentLocator(page))\\n\\t\\t\\t\\t.toHaveStyle({ color: \\"orange\\" });\\n\\t\\t});\\n\\t});\\n});\\n\\n// Note: Prefer role/semantics-oriented ways of selecting elements (e.g., by role, label, etc.) not only for component roots but for all elements to enhance accessibility and maintainability.\\n// To select the component's root element, use one of the available [Locators](https://vitest.dev/guide/browser/locators.html).\\nfunction componentLocator(page: RenderResult<typeof Component>): Locator {\\n\\t// 1. SEMANTIC ROLES (PREFERRED) - These the most closely resemble how assistive technologies interact with your component\\n\\t// return page.getByRole(\\"link\\", { name: \\"Learn more\\" });\\n\\n\\t// 2. LABELS - To test the association between labels and form controls\\n\\t// return page.getByLabel(\\"Email address\\");\\n\\n\\t// 3. PLACEHOLDER TEXT - Useful for input fields with placeholders\\n\\t// return page.getByPlaceholder(\\"Enter your email\\");\\n\\n\\t// 4. TEXT CONTENT - Good for testing the presence of unique texts and selecting non-interactive elements\\n\\t// return page.getByText(\\"Button\\");\\n\\n\\t// 5. ALT TEXT - For images and visual elements\\n\\t// return page.getByAltText(\\"Company logo\\");\\n\\n\\t// 6. TITLE ATTRIBUTE - For elements with title tooltips\\n\\t// return page.getByTitle(\\"Close dialog\\");\\n\\n\\t// 7. TEST IDS (LAST RESORT) - When semantic options aren't available\\n\\t// return page.getByTestId(\\"button\\");\\n}\\n",
687
- "src/components/Button/Button.ssr.test.ts": "import { render } from \\"@canonical/svelte-ssr-test\\";\\nimport type { RenderResult } from \\"@canonical/svelte-ssr-test\\";\\nimport { createRawSnippet } from \\"svelte\\";\\nimport type { ComponentProps } from \\"svelte\\";\\nimport { describe, expect, it } from \\"vitest\\";\\nimport Component from \\"./Button.svelte\\";\\n\\ndescribe(\\"Button SSR\\", () => {\\n\\tconst baseProps = {\\n\\t\\tchildren: createRawSnippet(() => ({\\n\\t\\t\\trender: () => \`<span>Button</span>\`,\\n\\t\\t})),\\n\\t} satisfies ComponentProps<typeof Component>;\\n\\n\\tdescribe(\\"basics\\", () => {\\n\\t\\tit(\\"doesn't throw\\", () => {\\n\\t\\t\\texpect(() => {\\n\\t\\t\\t\\trender(Component, { props: { ...baseProps } });\\n\\t\\t\\t}).not.toThrow();\\n\\t\\t});\\n\\n\\t\\tit(\\"renders\\", () => {\\n\\t\\t\\tconst page = render(Component, { props: { ...baseProps } });\\n\\t\\t\\texpect(componentLocator(page)).toBeInstanceOf(page.window.HTMLDivElement);\\n\\t\\t});\\n\\t});\\n\\n\\tdescribe(\\"attributes\\", () => {\\n\\t\\tit.each([\\n\\t\\t\\t[\\"id\\", \\"test-id\\"],\\n\\t\\t\\t[\\"aria-label\\", \\"test-aria-label\\"],\\n\\t\\t])(\\"applies %s\\", (attribute, expected) => {\\n\\t\\t\\tconst page = render(Component, {\\n\\t\\t\\t\\tprops: { ...baseProps, [attribute]: expected },\\n\\t\\t\\t});\\n\\t\\t\\texpect(componentLocator(page).getAttribute(attribute)).toBe(expected);\\n\\t\\t});\\n\\n\\t\\tit(\\"applies classes\\", () => {\\n\\t\\t\\tconst page = render(Component, {\\n\\t\\t\\t\\tprops: { class: \\"test-class\\", ...baseProps },\\n\\t\\t\\t});\\n\\t\\t\\texpect(componentLocator(page).classList).toContain(\\"test-class\\");\\n\\t\\t\\texpect(componentLocator(page).classList).toContain(\\"ds\\");\\n\\t\\t\\texpect(componentLocator(page).classList).toContain(\\"button\\");\\n\\t\\t});\\n\\n\\t\\tit(\\"applies style\\", () => {\\n\\t\\t\\tconst page = render(Component, {\\n\\t\\t\\t\\tprops: { style: \\"color: orange;\\", ...baseProps },\\n\\t\\t\\t});\\n\\t\\t\\texpect(componentLocator(page).style.color).toBe(\\"orange\\");\\n\\t\\t});\\n\\t});\\n});\\n\\n// Note: Prefer role/semantics-oriented ways of selecting elements (e.g., by role, label, etc.) not only for component roots but for all elements to enhance accessibility and maintainability.\\n// To select the component's root element, use one of the available [Queries](https://testing-library.com/docs/queries/about/#priority).\\nfunction componentLocator(page: RenderResult): HTMLElement {\\n\\t// 1. SEMANTIC ROLES (PREFERRED) - These the most closely resemble how assistive technologies interact with your component\\n\\t// return page.getByRole(\\"link\\", { name: \\"Learn more\\" });\\n\\n\\t// 2. LABELS - To test the association between labels and form controls\\n\\t// return page.getByLabelText(\\"Email address\\");\\n\\n\\t// 3. PLACEHOLDER TEXT - Useful for input fields with placeholders\\n\\t// return page.getByPlaceholderText(\\"Enter your email\\");\\n\\n\\t// 4. TEXT CONTENT - Good for testing the presence of unique texts and selecting non-interactive elements\\n\\t// return page.getByText(\\"Button\\");\\n\\n\\t// 5. DISPLAY VALUE - For selecting form elements by their current value\\n\\t// return page.getByDisplayValue(\\"test value\\");\\n\\n\\t// 6. ALT TEXT - For images and visual elements\\n\\t// return page.getByAltText(\\"Company logo\\");\\n\\n\\t// 7. TITLE ATTRIBUTE - For elements with title tooltips\\n\\t// return page.getByTitle(\\"Close dialog\\");\\n\\n\\t// 8. TEST IDS (LAST RESORT) - When semantic options aren't available\\n\\t// return page.getByTestId(\\"button\\");\\n}\\n",
688
- "src/components/Button/Button.stories.svelte": "<script lang=\\"ts\\" module>\\n\\timport { defineMeta } from \\"@storybook/addon-svelte-csf\\";\\n\\timport Button from \\"./Button.svelte\\";\\n\\n\\tconst { Story } = defineMeta({\\n\\t\\ttitle: \\"Components/Button\\",\\n\\t\\tcomponent: Button,\\n\\t\\ttags: [\\"autodocs\\"],\\n\\t});\\n</script>\\n\\n<Story name=\\"Default\\">\\n\\tHello, Button!\\n</Story>\\n\\n<Story\\n name=\\"WithCustomClass\\"\\n args={{\\n class: \\"custom-class\\",\\n id: \\"custom-id\\",\\n style: \\"background-color: tomato;\\",\\n }}\\n>\\n\\tCustom styled\\n</Story>\\n",
689
- "src/components/Button/styles.css": ".ds.button {\\n\\t/* Component styles */\\n}\\n",
690
- "src/components/index.ts": "export * from \\"./Button/index.js\\";\\n"
691
- },
692
- "executeCommand": "summon component/svelte --component-path src/components/Button --yes"
693
- }
694
- "
695
- `;
696
-
697
- exports[`golden: executeGenerator — components > svelte — llm plan 1`] = `
698
- "# component/svelte
699
-
700
- > Generate a Svelte 5 component with TypeScript, tests, stories, and styles
701
- > v0.1.0
702
-
703
- ## Answers
704
-
705
- | Option | Value |
706
- |--------|-------|
707
- | componentPath | src/components/Button |
708
- | withStyles | true |
709
- | withStories | true |
710
- | withSsrTests | true |
711
- | useTsStories | false |
712
-
713
- ## Plan
714
-
715
- | Action | Path | Lines |
716
- |--------|------|-------|
717
- | info | Generating Svelte component: Button | |
718
- | mkdir | src/components/Button | |
719
- | create | src/components/Button/Button.svelte | 20 |
720
- | create | src/components/Button/types.ts | 36 |
721
- | create | src/components/Button/index.ts | 3 |
722
- | create | src/components/Button/Button.svelte.test.ts | 78 |
723
- | create | src/components/Button/Button.ssr.test.ts | 84 |
724
- | create | src/components/Button/Button.stories.svelte | 26 |
725
- | create | src/components/Button/styles.css | 4 |
726
- | create | src/components/index.ts | 2 |
727
- | info | Created Button component at src/components/Button | |
728
-
729
- ## Files
730
-
731
- ### src/components/Button/Button.svelte
732
-
733
- \`\`\`svelte
734
- <script lang="ts">
735
- import type { ButtonProps } from "./types.js";
736
- import "./styles.css";
737
-
738
- const componentCssClassName = "ds button";
739
-
740
- let {
741
- class: className,
742
- children,
743
- ...rest
744
- }: ButtonProps = $props();
745
- </script>
746
-
747
- <div
748
- class={[componentCssClassName, className]}
749
- {...rest}
750
- >
751
- {@render children?.()}
752
- </div>
753
-
754
- \`\`\`
755
-
756
- ### src/components/Button/types.ts
757
-
758
- \`\`\`ts
759
- import type { Snippet } from "svelte";
760
- import type { SvelteHTMLElements } from "svelte/elements";
761
-
762
- /*
763
- For components that render specific HTML elements with extended prop sets,
764
- make sure to change \`"div"\` to the appropriate HTML element type.
765
- */
766
- type BaseProps = SvelteHTMLElements["div"];
767
-
768
- export interface ButtonProps extends BaseProps {
769
- /** Content to render inside the component */
770
- children?: Snippet;
771
- // Define additional props specific to Button here
772
- }
773
-
774
- /*
775
- ...or consider using appropriate interfaces directly exported from \`svelte/elements\`.
776
-
777
- For example:
778
- - \`HTMLButtonAttributes\` (provides \`disabled\`, \`type\`, etc.)
779
- - \`HTMLAnchorAttributes\` (provides \`href\`, \`target\`, etc.)
780
- - \`HTMLInputAttributes\` (provides \`type\`, \`checked\`, \`value\`, etc.)
781
- - \`HTMLFormAttributes\` (provides \`action\`, \`method\`, etc.)
782
-
783
- \`\`\`typescript
784
- import type { HTMLButtonAttributes } from "svelte/elements";
785
-
786
- export interface MyButtonProps extends HTMLButtonAttributes {
787
- // Your custom props here
788
- }
789
- \`\`\`
790
-
791
- See Svelte documentation on typing wrapper components:
792
- https://svelte.dev/docs/svelte/typescript#Typing-wrapper-components
793
- */
794
-
795
- \`\`\`
796
-
797
- ### src/components/Button/index.ts
798
-
799
- \`\`\`ts
800
- export { default as Button } from "./Button.svelte";
801
- export type { ButtonProps } from "./types.js";
802
-
803
- \`\`\`
804
-
805
- ### src/components/Button/Button.svelte.test.ts
806
-
807
- \`\`\`ts
808
- import type { Locator } from "@vitest/browser/context";
809
- import { createRawSnippet } from "svelte";
810
- import type { ComponentProps } from "svelte";
811
- import { describe, expect, it } from "vitest";
812
- import { render } from "vitest-browser-svelte";
813
- import type { RenderResult } from "vitest-browser-svelte";
814
- import Component from "./Button.svelte";
815
-
816
- describe("Button component", () => {
817
- const baseProps = {
818
- children: createRawSnippet(() => ({
819
- render: () => \`<span>Button</span>\`,
820
- })),
821
- } satisfies ComponentProps<typeof Component>;
822
-
823
- it("renders", async () => {
824
- const page = render(Component, { ...baseProps });
825
- await expect.element(componentLocator(page)).toBeInTheDocument();
826
- await expect.element(page.getByText("Button")).toBeVisible();
827
- });
828
-
829
- describe("attributes", () => {
830
- it.each([
831
- ["id", "test-id"],
832
- ["aria-label", "test-aria-label"],
833
- ])("applies %s", async (attribute, expected) => {
834
- const page = render(Component, { ...baseProps, [attribute]: expected });
835
- await expect
836
- .element(componentLocator(page))
837
- .toHaveAttribute(attribute, expected);
838
- });
839
-
840
- it("applies classes", async () => {
841
- const page = render(Component, { ...baseProps, class: "test-class" });
842
- await expect.element(componentLocator(page)).toHaveClass("test-class");
843
- await expect.element(componentLocator(page)).toHaveClass("ds");
844
- await expect
845
- .element(componentLocator(page))
846
- .toHaveClass("button");
847
- });
848
-
849
- it("applies style", async () => {
850
- const page = render(Component, {
851
- ...baseProps,
852
- style: "color: orange;",
853
- });
854
- await expect
855
- .element(componentLocator(page))
856
- .toHaveStyle({ color: "orange" });
857
- });
858
- });
859
- });
860
-
861
- // Note: Prefer role/semantics-oriented ways of selecting elements (e.g., by role, label, etc.) not only for component roots but for all elements to enhance accessibility and maintainability.
862
- // To select the component's root element, use one of the available [Locators](https://vitest.dev/guide/browser/locators.html).
863
- function componentLocator(page: RenderResult<typeof Component>): Locator {
864
- // 1. SEMANTIC ROLES (PREFERRED) - These the most closely resemble how assistive technologies interact with your component
865
- // return page.getByRole("link", { name: "Learn more" });
866
-
867
- // 2. LABELS - To test the association between labels and form controls
868
- // return page.getByLabel("Email address");
869
-
870
- // 3. PLACEHOLDER TEXT - Useful for input fields with placeholders
871
- // return page.getByPlaceholder("Enter your email");
872
-
873
- // 4. TEXT CONTENT - Good for testing the presence of unique texts and selecting non-interactive elements
874
- // return page.getByText("Button");
875
-
876
- // 5. ALT TEXT - For images and visual elements
877
- // return page.getByAltText("Company logo");
878
-
879
- // 6. TITLE ATTRIBUTE - For elements with title tooltips
880
- // return page.getByTitle("Close dialog");
881
-
882
- // 7. TEST IDS (LAST RESORT) - When semantic options aren't available
883
- // return page.getByTestId("button");
884
- }
885
-
886
- \`\`\`
887
-
888
- ### src/components/Button/Button.ssr.test.ts
889
-
890
- \`\`\`ts
891
- import { render } from "@canonical/svelte-ssr-test";
892
- import type { RenderResult } from "@canonical/svelte-ssr-test";
893
- import { createRawSnippet } from "svelte";
894
- import type { ComponentProps } from "svelte";
895
- import { describe, expect, it } from "vitest";
896
- import Component from "./Button.svelte";
897
-
898
- describe("Button SSR", () => {
899
- const baseProps = {
900
- children: createRawSnippet(() => ({
901
- render: () => \`<span>Button</span>\`,
902
- })),
903
- } satisfies ComponentProps<typeof Component>;
904
-
905
- describe("basics", () => {
906
- it("doesn't throw", () => {
907
- expect(() => {
908
- render(Component, { props: { ...baseProps } });
909
- }).not.toThrow();
910
- });
911
-
912
- it("renders", () => {
913
- const page = render(Component, { props: { ...baseProps } });
914
- expect(componentLocator(page)).toBeInstanceOf(page.window.HTMLDivElement);
915
- });
916
- });
917
-
918
- describe("attributes", () => {
919
- it.each([
920
- ["id", "test-id"],
921
- ["aria-label", "test-aria-label"],
922
- ])("applies %s", (attribute, expected) => {
923
- const page = render(Component, {
924
- props: { ...baseProps, [attribute]: expected },
925
- });
926
- expect(componentLocator(page).getAttribute(attribute)).toBe(expected);
927
- });
928
-
929
- it("applies classes", () => {
930
- const page = render(Component, {
931
- props: { class: "test-class", ...baseProps },
932
- });
933
- expect(componentLocator(page).classList).toContain("test-class");
934
- expect(componentLocator(page).classList).toContain("ds");
935
- expect(componentLocator(page).classList).toContain("button");
936
- });
937
-
938
- it("applies style", () => {
939
- const page = render(Component, {
940
- props: { style: "color: orange;", ...baseProps },
941
- });
942
- expect(componentLocator(page).style.color).toBe("orange");
943
- });
944
- });
945
- });
946
-
947
- // Note: Prefer role/semantics-oriented ways of selecting elements (e.g., by role, label, etc.) not only for component roots but for all elements to enhance accessibility and maintainability.
948
- // To select the component's root element, use one of the available [Queries](https://testing-library.com/docs/queries/about/#priority).
949
- function componentLocator(page: RenderResult): HTMLElement {
950
- // 1. SEMANTIC ROLES (PREFERRED) - These the most closely resemble how assistive technologies interact with your component
951
- // return page.getByRole("link", { name: "Learn more" });
952
-
953
- // 2. LABELS - To test the association between labels and form controls
954
- // return page.getByLabelText("Email address");
955
-
956
- // 3. PLACEHOLDER TEXT - Useful for input fields with placeholders
957
- // return page.getByPlaceholderText("Enter your email");
958
-
959
- // 4. TEXT CONTENT - Good for testing the presence of unique texts and selecting non-interactive elements
960
- // return page.getByText("Button");
961
-
962
- // 5. DISPLAY VALUE - For selecting form elements by their current value
963
- // return page.getByDisplayValue("test value");
964
-
965
- // 6. ALT TEXT - For images and visual elements
966
- // return page.getByAltText("Company logo");
967
-
968
- // 7. TITLE ATTRIBUTE - For elements with title tooltips
969
- // return page.getByTitle("Close dialog");
970
-
971
- // 8. TEST IDS (LAST RESORT) - When semantic options aren't available
972
- // return page.getByTestId("button");
973
- }
974
-
975
- \`\`\`
976
-
977
- ### src/components/Button/Button.stories.svelte
978
-
979
- \`\`\`svelte
980
- <script lang="ts" module>
981
- import { defineMeta } from "@storybook/addon-svelte-csf";
982
- import Button from "./Button.svelte";
983
-
984
- const { Story } = defineMeta({
985
- title: "Components/Button",
986
- component: Button,
987
- tags: ["autodocs"],
988
- });
989
- </script>
990
-
991
- <Story name="Default">
992
- Hello, Button!
993
- </Story>
994
-
995
- <Story
996
- name="WithCustomClass"
997
- args={{
998
- class: "custom-class",
999
- id: "custom-id",
1000
- style: "background-color: tomato;",
1001
- }}
1002
- >
1003
- Custom styled
1004
- </Story>
1005
-
1006
- \`\`\`
1007
-
1008
- ### src/components/Button/styles.css
1009
-
1010
- \`\`\`css
1011
- .ds.button {
1012
- /* Component styles */
1013
- }
1014
-
1015
- \`\`\`
1016
-
1017
- ### src/components/index.ts
1018
-
1019
- \`\`\`ts
1020
- export * from "./Button/index.js";
1021
-
1022
- \`\`\`
1023
-
1024
- ---
1025
-
1026
- Dry-run complete. No files were modified.
1027
-
1028
- To execute:
1029
-
1030
- \`\`\`sh
1031
- summon component/svelte --component-path src/components/Button --yes
1032
- \`\`\`
1033
- "
1034
- `;
1035
-
1036
- exports[`golden: executeGenerator — package > library — dry-run plan 1`] = `
1037
- "
1038
- ├─ Info Creating package: @canonical/example
1039
- ├─ Info Type: library
1040
- ├─ Create dir example
1041
- ├─ Create dir example/src
1042
- ├─ Create file example/package.json
1043
- ├─ Create file example/tsconfig.json
1044
- ├─ Create file example/biome.json
1045
- ├─ Create file example/src/index.ts
1046
- ├─ Create file example/README.md
1047
- ├─ Info Package created at ./example
1048
- ├─ Info Running bun install...
1049
- ├─ Execute bun install
1050
- ├─ Info Dependencies installed successfully
1051
- ├─ Info
1052
- ├─ Info Next steps:
1053
- ├─ Info cd example
1054
- ├─ Info bun run check
1055
- └─ Info
1056
-
1057
- Dry-run complete. No files were modified.
1058
- Tip: Use --show-files to see generated file contents
1059
- "
1060
- `;
1061
-
1062
- exports[`golden: executeGenerator — package > library — json plan 1`] = `
1063
- "{
1064
- "generator": {
1065
- "name": "package",
1066
- "version": "0.1.0",
1067
- "description": "Generate a new npm package with proper configuration for the pragma monorepo"
1068
- },
1069
- "answers": {
1070
- "name": "@canonical/example",
1071
- "type": "library",
1072
- "description": "",
1073
- "withReact": false,
1074
- "withStorybook": false,
1075
- "withCli": false,
1076
- "withPrTemplate": false,
1077
- "runInstall": true
1078
- },
1079
- "plan": [
1080
- {
1081
- "action": "info",
1082
- "path": "Creating package: @canonical/example"
1083
- },
1084
- {
1085
- "action": "info",
1086
- "path": "Type: library"
1087
- },
1088
- {
1089
- "action": "mkdir",
1090
- "path": "example"
1091
- },
1092
- {
1093
- "action": "mkdir",
1094
- "path": "example/src"
1095
- },
1096
- {
1097
- "action": "create",
1098
- "path": "example/package.json",
1099
- "lines": 1
1100
- },
1101
- {
1102
- "action": "create",
1103
- "path": "example/tsconfig.json",
1104
- "lines": 1
1105
- },
1106
- {
1107
- "action": "create",
1108
- "path": "example/biome.json",
1109
- "lines": 1
1110
- },
1111
- {
1112
- "action": "create",
1113
- "path": "example/src/index.ts",
1114
- "lines": 1
1115
- },
1116
- {
1117
- "action": "create",
1118
- "path": "example/README.md",
1119
- "lines": 1
1120
- },
1121
- {
1122
- "action": "info",
1123
- "path": "Package created at ./example"
1124
- },
1125
- {
1126
- "action": "info",
1127
- "path": "Running bun install..."
1128
- },
1129
- {
1130
- "action": "exec",
1131
- "path": "bun install"
1132
- },
1133
- {
1134
- "action": "info",
1135
- "path": "Dependencies installed successfully"
1136
- },
1137
- {
1138
- "action": "info",
1139
- "path": ""
1140
- },
1141
- {
1142
- "action": "info",
1143
- "path": "Next steps:"
1144
- },
1145
- {
1146
- "action": "info",
1147
- "path": " cd example"
1148
- },
1149
- {
1150
- "action": "info",
1151
- "path": " bun run check"
1152
- },
1153
- {
1154
- "action": "info",
1155
- "path": ""
1156
- }
1157
- ],
1158
- "files": {
1159
- "example/package.json": "[mock content of <repo>/packages/summon/package/src/templates/package.json.ejs]",
1160
- "example/tsconfig.json": "[mock content of <repo>/packages/summon/package/src/templates/tsconfig.json.ejs]",
1161
- "example/biome.json": "[mock content of <repo>/packages/summon/package/src/templates/biome.json.ejs]",
1162
- "example/src/index.ts": "[mock content of <repo>/packages/summon/package/src/templates/index.ts.ejs]",
1163
- "example/README.md": "[mock content of <repo>/packages/summon/package/src/templates/README.md.ejs]"
1164
- },
1165
- "executeCommand": "summon package --name @canonical/example --type library --description --yes"
1166
- }
1167
- "
1168
- `;
1169
-
1170
- exports[`golden: runSetupTask — setups > completions (bash) — dry-run 1`] = `
1171
- "Dry run — the following operations would be performed:
1172
-
1173
- ├─ Info Setting up completions for bash...
1174
- ├─ Create dir <home>/.local/share/bash-completion/completions
1175
- ├─ Create file <home>/.local/share/bash-completion/completions/pragma
1176
- ├─ Info ✓ Completions installed for bash.
1177
- └─ Info Run \`source ~/.bashrc\` or start a new shell to activate.
1178
-
1179
- No changes were made."
1180
- `;
1181
-
1182
- exports[`golden: runSetupTask — setups > lsp — dry-run 1`] = `
1183
- "Dry run — the following operations would be performed:
1184
-
1185
- ├─ Info Ensuring the Terrazzo LSP VS Code extension is installed...
1186
- ├─ Execute bunx @canonical/terrazzo-lsp-extension
1187
- └─ Info ✓ Terrazzo LSP extension is installed (up to date).
1188
-
1189
- No changes were made."
1190
- `;
1191
-
1192
- exports[`golden: runSetupTask — setups > lsp — dry-run json 1`] = `
1193
- "[
1194
- {
1195
- "action": "Log",
1196
- "message": "Ensuring the Terrazzo LSP VS Code extension is installed..."
1197
- },
1198
- {
1199
- "action": "Exec"
1200
- },
1201
- {
1202
- "action": "Log",
1203
- "message": "✓ Terrazzo LSP extension is installed (up to date)."
1204
- }
1205
- ]
1206
- "
1207
- `;