openspecui 0.0.0 → 0.2.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 (614) hide show
  1. package/dist/cli.mjs +4579 -0
  2. package/dist/index.mjs +3 -0
  3. package/dist/open-CmiqsyCQ.mjs +473 -0
  4. package/dist/src-Bmm_kaB8.mjs +13749 -0
  5. package/package.json +37 -7
  6. package/web/assets/index-BhzIZ_eQ.js +150 -0
  7. package/web/assets/index-D6x5Q1lW.css +1 -0
  8. package/web/dist/assets/abap-BdImnpbu.js +1 -0
  9. package/web/dist/assets/actionscript-3-CfeIJUat.js +1 -0
  10. package/web/dist/assets/ada-bCR0ucgS.js +1 -0
  11. package/web/dist/assets/andromeeda-C-Jbm3Hp.js +1 -0
  12. package/web/dist/assets/angular-html-CU67Zn6k.js +1 -0
  13. package/web/dist/assets/angular-ts-BwZT4LLn.js +1 -0
  14. package/web/dist/assets/apache-Pmp26Uib.js +1 -0
  15. package/web/dist/assets/apex-DDbsPZ6N.js +1 -0
  16. package/web/dist/assets/apl-dKokRX4l.js +1 -0
  17. package/web/dist/assets/applescript-Co6uUVPk.js +1 -0
  18. package/web/dist/assets/ara-BRHolxvo.js +1 -0
  19. package/web/dist/assets/asciidoc-Dv7Oe6Be.js +1 -0
  20. package/web/dist/assets/asm-D_Q5rh1f.js +1 -0
  21. package/web/dist/assets/astro-CbQHKStN.js +1 -0
  22. package/web/dist/assets/aurora-x-D-2ljcwZ.js +1 -0
  23. package/web/dist/assets/awk-DMzUqQB5.js +1 -0
  24. package/web/dist/assets/ayu-dark-Cv9koXgw.js +1 -0
  25. package/web/dist/assets/ballerina-BFfxhgS-.js +1 -0
  26. package/web/dist/assets/bat-BkioyH1T.js +1 -0
  27. package/web/dist/assets/beancount-k_qm7-4y.js +1 -0
  28. package/web/dist/assets/berry-uYugtg8r.js +1 -0
  29. package/web/dist/assets/bibtex-CHM0blh-.js +1 -0
  30. package/web/dist/assets/bicep-Bmn6On1c.js +1 -0
  31. package/web/dist/assets/blade-DVc8C-J4.js +1 -0
  32. package/web/dist/assets/bsl-BO_Y6i37.js +1 -0
  33. package/web/dist/assets/c-BIGW1oBm.js +1 -0
  34. package/web/dist/assets/cadence-Bv_4Rxtq.js +1 -0
  35. package/web/dist/assets/cairo-KRGpt6FW.js +1 -0
  36. package/web/dist/assets/catppuccin-frappe-DFWUc33u.js +1 -0
  37. package/web/dist/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
  38. package/web/dist/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
  39. package/web/dist/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
  40. package/web/dist/assets/clarity-D53aC0YG.js +1 -0
  41. package/web/dist/assets/clojure-P80f7IUj.js +1 -0
  42. package/web/dist/assets/cmake-D1j8_8rp.js +1 -0
  43. package/web/dist/assets/cobol-nwyudZeR.js +1 -0
  44. package/web/dist/assets/codeowners-Bp6g37R7.js +1 -0
  45. package/web/dist/assets/codeql-DsOJ9woJ.js +1 -0
  46. package/web/dist/assets/coffee-Ch7k5sss.js +1 -0
  47. package/web/dist/assets/common-lisp-Cg-RD9OK.js +1 -0
  48. package/web/dist/assets/coq-DkFqJrB1.js +1 -0
  49. package/web/dist/assets/cpp-CofmeUqb.js +1 -0
  50. package/web/dist/assets/crystal-tKQVLTB8.js +1 -0
  51. package/web/dist/assets/csharp-K5feNrxe.js +1 -0
  52. package/web/dist/assets/css-DPfMkruS.js +1 -0
  53. package/web/dist/assets/csv-fuZLfV_i.js +1 -0
  54. package/web/dist/assets/cue-D82EKSYY.js +1 -0
  55. package/web/dist/assets/cypher-COkxafJQ.js +1 -0
  56. package/web/dist/assets/d-85-TOEBH.js +1 -0
  57. package/web/dist/assets/dark-plus-C3mMm8J8.js +1 -0
  58. package/web/dist/assets/dart-CF10PKvl.js +1 -0
  59. package/web/dist/assets/dax-CEL-wOlO.js +1 -0
  60. package/web/dist/assets/desktop-BmXAJ9_W.js +1 -0
  61. package/web/dist/assets/diff-D97Zzqfu.js +1 -0
  62. package/web/dist/assets/docker-BcOcwvcX.js +1 -0
  63. package/web/dist/assets/dotenv-Da5cRb03.js +1 -0
  64. package/web/dist/assets/dracula-BzJJZx-M.js +1 -0
  65. package/web/dist/assets/dracula-soft-BXkSAIEj.js +1 -0
  66. package/web/dist/assets/dream-maker-BtqSS_iP.js +1 -0
  67. package/web/dist/assets/edge-BkV0erSs.js +1 -0
  68. package/web/dist/assets/elixir-CDX3lj18.js +1 -0
  69. package/web/dist/assets/elm-DbKCFpqz.js +1 -0
  70. package/web/dist/assets/emacs-lisp-C9XAeP06.js +1 -0
  71. package/web/dist/assets/erb-BOJIQeun.js +1 -0
  72. package/web/dist/assets/erlang-DsQrWhSR.js +1 -0
  73. package/web/dist/assets/everforest-dark-BgDCqdQA.js +1 -0
  74. package/web/dist/assets/everforest-light-C8M2exoo.js +1 -0
  75. package/web/dist/assets/fennel-BYunw83y.js +1 -0
  76. package/web/dist/assets/fish-BvzEVeQv.js +1 -0
  77. package/web/dist/assets/fluent-C4IJs8-o.js +1 -0
  78. package/web/dist/assets/fortran-fixed-form-BZjJHVRy.js +1 -0
  79. package/web/dist/assets/fortran-free-form-D22FLkUw.js +1 -0
  80. package/web/dist/assets/fsharp-CXgrBDvD.js +1 -0
  81. package/web/dist/assets/gdresource-B7Tvp0Sc.js +1 -0
  82. package/web/dist/assets/gdscript-DTMYz4Jt.js +1 -0
  83. package/web/dist/assets/gdshader-DkwncUOv.js +1 -0
  84. package/web/dist/assets/genie-D0YGMca9.js +1 -0
  85. package/web/dist/assets/gherkin-DyxjwDmM.js +1 -0
  86. package/web/dist/assets/git-commit-F4YmCXRG.js +1 -0
  87. package/web/dist/assets/git-rebase-r7XF79zn.js +1 -0
  88. package/web/dist/assets/github-dark-DHJKELXO.js +1 -0
  89. package/web/dist/assets/github-dark-default-Cuk6v7N8.js +1 -0
  90. package/web/dist/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  91. package/web/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  92. package/web/dist/assets/github-light-DAi9KRSo.js +1 -0
  93. package/web/dist/assets/github-light-default-D7oLnXFd.js +1 -0
  94. package/web/dist/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  95. package/web/dist/assets/gleam-BspZqrRM.js +1 -0
  96. package/web/dist/assets/glimmer-js-Rg0-pVw9.js +1 -0
  97. package/web/dist/assets/glimmer-ts-U6CK756n.js +1 -0
  98. package/web/dist/assets/glsl-DplSGwfg.js +1 -0
  99. package/web/dist/assets/gnuplot-DdkO51Og.js +1 -0
  100. package/web/dist/assets/go-Dn2_MT6a.js +1 -0
  101. package/web/dist/assets/graphql-ChdNCCLP.js +1 -0
  102. package/web/dist/assets/groovy-gcz8RCvz.js +1 -0
  103. package/web/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  104. package/web/dist/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
  105. package/web/dist/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
  106. package/web/dist/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
  107. package/web/dist/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
  108. package/web/dist/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
  109. package/web/dist/assets/hack-CaT9iCJl.js +1 -0
  110. package/web/dist/assets/haml-B8DHNrY2.js +1 -0
  111. package/web/dist/assets/handlebars-BL8al0AC.js +1 -0
  112. package/web/dist/assets/haskell-Df6bDoY_.js +1 -0
  113. package/web/dist/assets/haxe-CzTSHFRz.js +1 -0
  114. package/web/dist/assets/hcl-BWvSN4gD.js +1 -0
  115. package/web/dist/assets/hjson-D5-asLiD.js +1 -0
  116. package/web/dist/assets/hlsl-D3lLCCz7.js +1 -0
  117. package/web/dist/assets/houston-DnULxvSX.js +1 -0
  118. package/web/dist/assets/html-GMplVEZG.js +1 -0
  119. package/web/dist/assets/html-derivative-BFtXZ54Q.js +1 -0
  120. package/web/dist/assets/http-jrhK8wxY.js +1 -0
  121. package/web/dist/assets/hurl-irOxFIW8.js +1 -0
  122. package/web/dist/assets/hxml-Bvhsp5Yf.js +1 -0
  123. package/web/dist/assets/hy-DFXneXwc.js +1 -0
  124. package/web/dist/assets/imba-DGztddWO.js +1 -0
  125. package/web/dist/assets/index-BNmb5C1F.css +1 -0
  126. package/web/dist/assets/index-BhzIZ_eQ.js +150 -0
  127. package/web/dist/assets/index-BxBbLX3V.js +170 -0
  128. package/web/dist/assets/index-C4c5ARU5.css +1 -0
  129. package/web/dist/assets/index-CqKOZnDE.css +1 -0
  130. package/web/dist/assets/index-D6x5Q1lW.css +1 -0
  131. package/web/dist/assets/index-Om_P2_SF.js +155 -0
  132. package/web/dist/assets/index-l4gcUD8y.js +382 -0
  133. package/web/dist/assets/ini-BEwlwnbL.js +1 -0
  134. package/web/dist/assets/java-CylS5w8V.js +1 -0
  135. package/web/dist/assets/javascript-wDzz0qaB.js +1 -0
  136. package/web/dist/assets/jinja-4LBKfQ-Z.js +1 -0
  137. package/web/dist/assets/jison-wvAkD_A8.js +1 -0
  138. package/web/dist/assets/json-Cp-IABpG.js +1 -0
  139. package/web/dist/assets/json5-C9tS-k6U.js +1 -0
  140. package/web/dist/assets/jsonc-Des-eS-w.js +1 -0
  141. package/web/dist/assets/jsonl-DcaNXYhu.js +1 -0
  142. package/web/dist/assets/jsonnet-DFQXde-d.js +1 -0
  143. package/web/dist/assets/jssm-C2t-YnRu.js +1 -0
  144. package/web/dist/assets/jsx-g9-lgVsj.js +1 -0
  145. package/web/dist/assets/julia-C8NyazO9.js +1 -0
  146. package/web/dist/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
  147. package/web/dist/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
  148. package/web/dist/assets/kanagawa-wave-DWedfzmr.js +1 -0
  149. package/web/dist/assets/kdl-DV7GczEv.js +1 -0
  150. package/web/dist/assets/kotlin-BdnUsdx6.js +1 -0
  151. package/web/dist/assets/kusto-BvAqAH-y.js +1 -0
  152. package/web/dist/assets/laserwave-DUszq2jm.js +1 -0
  153. package/web/dist/assets/latex-BdAV_C_H.js +1 -0
  154. package/web/dist/assets/lean-Bc6EcWN3.js +1 -0
  155. package/web/dist/assets/less-B1dDrJ26.js +1 -0
  156. package/web/dist/assets/light-plus-B7mTdjB0.js +1 -0
  157. package/web/dist/assets/liquid-DYVedYrR.js +1 -0
  158. package/web/dist/assets/llvm-BtvRca6l.js +1 -0
  159. package/web/dist/assets/log-2UxHyX5q.js +1 -0
  160. package/web/dist/assets/logo-BtOb2qkB.js +1 -0
  161. package/web/dist/assets/lua-BbnMAYS6.js +1 -0
  162. package/web/dist/assets/luau-CXu1NL6O.js +1 -0
  163. package/web/dist/assets/make-CHLpvVh8.js +1 -0
  164. package/web/dist/assets/markdown-Cvjx9yec.js +1 -0
  165. package/web/dist/assets/marko-CPi9NSCl.js +1 -0
  166. package/web/dist/assets/material-theme-D5KoaKCx.js +1 -0
  167. package/web/dist/assets/material-theme-darker-BfHTSMKl.js +1 -0
  168. package/web/dist/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  169. package/web/dist/assets/material-theme-ocean-CyktbL80.js +1 -0
  170. package/web/dist/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  171. package/web/dist/assets/matlab-D7o27uSR.js +1 -0
  172. package/web/dist/assets/mdc-DUICxH0z.js +1 -0
  173. package/web/dist/assets/mdx-Cmh6b_Ma.js +1 -0
  174. package/web/dist/assets/mermaid-DKYwYmdq.js +1 -0
  175. package/web/dist/assets/min-dark-CafNBF8u.js +1 -0
  176. package/web/dist/assets/min-light-CTRr51gU.js +1 -0
  177. package/web/dist/assets/mipsasm-CKIfxQSi.js +1 -0
  178. package/web/dist/assets/mojo-1DNp92w6.js +1 -0
  179. package/web/dist/assets/monokai-D4h5O-jR.js +1 -0
  180. package/web/dist/assets/move-Bu9oaDYs.js +1 -0
  181. package/web/dist/assets/narrat-DRg8JJMk.js +1 -0
  182. package/web/dist/assets/nextflow-BrzmwbiE.js +1 -0
  183. package/web/dist/assets/nginx-DknmC5AR.js +1 -0
  184. package/web/dist/assets/night-owl-C39BiMTA.js +1 -0
  185. package/web/dist/assets/nim-CVrawwO9.js +1 -0
  186. package/web/dist/assets/nix-c8nO5XWb.js +1 -0
  187. package/web/dist/assets/nord-Ddv68eIx.js +1 -0
  188. package/web/dist/assets/nushell-C-sUppwS.js +1 -0
  189. package/web/dist/assets/objective-c-DXmwc3jG.js +1 -0
  190. package/web/dist/assets/objective-cpp-CLxacb5B.js +1 -0
  191. package/web/dist/assets/ocaml-C0hk2d4L.js +1 -0
  192. package/web/dist/assets/one-dark-pro-DVMEJ2y_.js +1 -0
  193. package/web/dist/assets/one-light-PoHY5YXO.js +1 -0
  194. package/web/dist/assets/openscad-C4EeE6gA.js +1 -0
  195. package/web/dist/assets/pascal-D93ZcfNL.js +1 -0
  196. package/web/dist/assets/perl-C0TMdlhV.js +1 -0
  197. package/web/dist/assets/php-CDn_0X-4.js +1 -0
  198. package/web/dist/assets/pkl-u5AG7uiY.js +1 -0
  199. package/web/dist/assets/plastic-3e1v2bzS.js +1 -0
  200. package/web/dist/assets/plsql-ChMvpjG-.js +1 -0
  201. package/web/dist/assets/po-BTJTHyun.js +1 -0
  202. package/web/dist/assets/poimandres-CS3Unz2-.js +1 -0
  203. package/web/dist/assets/polar-C0HS_06l.js +1 -0
  204. package/web/dist/assets/postcss-CXtECtnM.js +1 -0
  205. package/web/dist/assets/powerquery-CEu0bR-o.js +1 -0
  206. package/web/dist/assets/powershell-Dpen1YoG.js +1 -0
  207. package/web/dist/assets/prisma-Dd19v3D-.js +1 -0
  208. package/web/dist/assets/prolog-CbFg5uaA.js +1 -0
  209. package/web/dist/assets/proto-DyJlTyXw.js +1 -0
  210. package/web/dist/assets/pug-CGlum2m_.js +1 -0
  211. package/web/dist/assets/puppet-BMWR74SV.js +1 -0
  212. package/web/dist/assets/purescript-CklMAg4u.js +1 -0
  213. package/web/dist/assets/python-B6aJPvgy.js +1 -0
  214. package/web/dist/assets/qml-3beO22l8.js +1 -0
  215. package/web/dist/assets/qmldir-C8lEn-DE.js +1 -0
  216. package/web/dist/assets/qss-IeuSbFQv.js +1 -0
  217. package/web/dist/assets/r-DiinP2Uv.js +1 -0
  218. package/web/dist/assets/racket-BqYA7rlc.js +1 -0
  219. package/web/dist/assets/raku-DXvB9xmW.js +1 -0
  220. package/web/dist/assets/razor-CE9lU5zL.js +1 -0
  221. package/web/dist/assets/red-bN70gL4F.js +1 -0
  222. package/web/dist/assets/reg-C-SQnVFl.js +1 -0
  223. package/web/dist/assets/regexp-CDVJQ6XC.js +1 -0
  224. package/web/dist/assets/rel-C3B-1QV4.js +1 -0
  225. package/web/dist/assets/riscv-BM1_JUlF.js +1 -0
  226. package/web/dist/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
  227. package/web/dist/assets/rose-pine-moon-D4_iv3hh.js +1 -0
  228. package/web/dist/assets/rose-pine-qdsjHGoJ.js +1 -0
  229. package/web/dist/assets/rosmsg-BJDFO7_C.js +1 -0
  230. package/web/dist/assets/rst-B0xPkSld.js +1 -0
  231. package/web/dist/assets/ruby-BvKwtOVI.js +1 -0
  232. package/web/dist/assets/rust-B1yitclQ.js +1 -0
  233. package/web/dist/assets/sas-cz2c8ADy.js +1 -0
  234. package/web/dist/assets/sass-Cj5Yp3dK.js +1 -0
  235. package/web/dist/assets/scala-C151Ov-r.js +1 -0
  236. package/web/dist/assets/scheme-C98Dy4si.js +1 -0
  237. package/web/dist/assets/scss-OYdSNvt2.js +1 -0
  238. package/web/dist/assets/sdbl-DVxCFoDh.js +1 -0
  239. package/web/dist/assets/shaderlab-Dg9Lc6iA.js +1 -0
  240. package/web/dist/assets/shellscript-Yzrsuije.js +1 -0
  241. package/web/dist/assets/shellsession-BADoaaVG.js +1 -0
  242. package/web/dist/assets/slack-dark-BthQWCQV.js +1 -0
  243. package/web/dist/assets/slack-ochin-DqwNpetd.js +1 -0
  244. package/web/dist/assets/smalltalk-BERRCDM3.js +1 -0
  245. package/web/dist/assets/snazzy-light-Bw305WKR.js +1 -0
  246. package/web/dist/assets/solarized-dark-DXbdFlpD.js +1 -0
  247. package/web/dist/assets/solarized-light-L9t79GZl.js +1 -0
  248. package/web/dist/assets/solidity-rGO070M0.js +1 -0
  249. package/web/dist/assets/soy-Brmx7dQM.js +1 -0
  250. package/web/dist/assets/sparql-rVzFXLq3.js +1 -0
  251. package/web/dist/assets/splunk-BtCnVYZw.js +1 -0
  252. package/web/dist/assets/sql-BLtJtn59.js +1 -0
  253. package/web/dist/assets/ssh-config-_ykCGR6B.js +1 -0
  254. package/web/dist/assets/stata-BH5u7GGu.js +1 -0
  255. package/web/dist/assets/stylus-BEDo0Tqx.js +1 -0
  256. package/web/dist/assets/svelte-3Dk4HxPD.js +1 -0
  257. package/web/dist/assets/swift-Dg5xB15N.js +1 -0
  258. package/web/dist/assets/synthwave-84-CbfX1IO0.js +1 -0
  259. package/web/dist/assets/system-verilog-CnnmHF94.js +1 -0
  260. package/web/dist/assets/systemd-4A_iFExJ.js +1 -0
  261. package/web/dist/assets/talonscript-CkByrt1z.js +1 -0
  262. package/web/dist/assets/tasl-QIJgUcNo.js +1 -0
  263. package/web/dist/assets/tcl-dwOrl1Do.js +1 -0
  264. package/web/dist/assets/templ-W15q3VgB.js +1 -0
  265. package/web/dist/assets/terraform-BETggiCN.js +1 -0
  266. package/web/dist/assets/tex-CxkMU7Pf.js +1 -0
  267. package/web/dist/assets/tokyo-night-hegEt444.js +1 -0
  268. package/web/dist/assets/toml-vGWfd6FD.js +1 -0
  269. package/web/dist/assets/ts-tags-zn1MmPIZ.js +1 -0
  270. package/web/dist/assets/tsv-B_m7g4N7.js +1 -0
  271. package/web/dist/assets/tsx-COt5Ahok.js +1 -0
  272. package/web/dist/assets/turtle-BsS91CYL.js +1 -0
  273. package/web/dist/assets/twig-CO9l9SDP.js +1 -0
  274. package/web/dist/assets/typescript-BPQ3VLAy.js +1 -0
  275. package/web/dist/assets/typespec-BGHnOYBU.js +1 -0
  276. package/web/dist/assets/typst-DHCkPAjA.js +1 -0
  277. package/web/dist/assets/v-BcVCzyr7.js +1 -0
  278. package/web/dist/assets/vala-CsfeWuGM.js +1 -0
  279. package/web/dist/assets/vb-D17OF-Vu.js +1 -0
  280. package/web/dist/assets/verilog-BQ8w6xss.js +1 -0
  281. package/web/dist/assets/vesper-DU1UobuO.js +1 -0
  282. package/web/dist/assets/vhdl-CeAyd5Ju.js +1 -0
  283. package/web/dist/assets/viml-CJc9bBzg.js +1 -0
  284. package/web/dist/assets/vitesse-black-Bkuqu6BP.js +1 -0
  285. package/web/dist/assets/vitesse-dark-D0r3Knsf.js +1 -0
  286. package/web/dist/assets/vitesse-light-CVO1_9PV.js +1 -0
  287. package/web/dist/assets/vue-DnHKYNfI.js +1 -0
  288. package/web/dist/assets/vue-html-CChd_i61.js +1 -0
  289. package/web/dist/assets/vue-vine-8moa0y9V.js +1 -0
  290. package/web/dist/assets/vyper-CDx5xZoG.js +1 -0
  291. package/web/dist/assets/wasm-CG6Dc4jp.js +1 -0
  292. package/web/dist/assets/wasm-MzD3tlZU.js +1 -0
  293. package/web/dist/assets/wenyan-BV7otONQ.js +1 -0
  294. package/web/dist/assets/wgsl-Dx-B1_4e.js +1 -0
  295. package/web/dist/assets/wikitext-BhOHFoWU.js +1 -0
  296. package/web/dist/assets/wit-5i3qLPDT.js +1 -0
  297. package/web/dist/assets/wolfram-lXgVvXCa.js +1 -0
  298. package/web/dist/assets/xml-sdJ4AIDG.js +1 -0
  299. package/web/dist/assets/xsl-CtQFsRM5.js +1 -0
  300. package/web/dist/assets/yaml-Buea-lGh.js +1 -0
  301. package/web/dist/assets/zenscript-DVFEvuxE.js +1 -0
  302. package/web/dist/assets/zig-VOosw3JB.js +1 -0
  303. package/web/dist/index.html +14 -0
  304. package/web/index.html +14 -0
  305. package/.gitmodules +0 -3
  306. package/CHAT.md +0 -3
  307. package/references/openspec/.changeset/README.md +0 -6
  308. package/references/openspec/.changeset/config.json +0 -12
  309. package/references/openspec/.coderabbit.yaml +0 -11
  310. package/references/openspec/.devcontainer/README.md +0 -92
  311. package/references/openspec/.devcontainer/devcontainer.json +0 -68
  312. package/references/openspec/.github/CODEOWNERS +0 -2
  313. package/references/openspec/.github/workflows/ci.yml +0 -222
  314. package/references/openspec/.github/workflows/release-prepare.yml +0 -50
  315. package/references/openspec/AGENTS.md +0 -18
  316. package/references/openspec/CHANGELOG.md +0 -205
  317. package/references/openspec/LICENSE +0 -22
  318. package/references/openspec/README.md +0 -374
  319. package/references/openspec/assets/openspec_dashboard.png +0 -0
  320. package/references/openspec/assets/openspec_pixel_dark.svg +0 -89
  321. package/references/openspec/assets/openspec_pixel_light.svg +0 -89
  322. package/references/openspec/bin/openspec.js +0 -3
  323. package/references/openspec/build.js +0 -31
  324. package/references/openspec/openspec/AGENTS.md +0 -454
  325. package/references/openspec/openspec/changes/IMPLEMENTATION_ORDER.md +0 -68
  326. package/references/openspec/openspec/changes/add-antigravity-support/proposal.md +0 -11
  327. package/references/openspec/openspec/changes/add-antigravity-support/specs/cli-init/spec.md +0 -9
  328. package/references/openspec/openspec/changes/add-antigravity-support/specs/cli-update/spec.md +0 -8
  329. package/references/openspec/openspec/changes/add-antigravity-support/tasks.md +0 -12
  330. package/references/openspec/openspec/changes/add-scaffold-command/proposal.md +0 -11
  331. package/references/openspec/openspec/changes/add-scaffold-command/specs/cli-scaffold/spec.md +0 -36
  332. package/references/openspec/openspec/changes/add-scaffold-command/tasks.md +0 -12
  333. package/references/openspec/openspec/changes/archive/2025-01-11-add-update-command/design.md +0 -86
  334. package/references/openspec/openspec/changes/archive/2025-01-11-add-update-command/proposal.md +0 -29
  335. package/references/openspec/openspec/changes/archive/2025-01-11-add-update-command/specs/cli-update/spec.md +0 -59
  336. package/references/openspec/openspec/changes/archive/2025-01-11-add-update-command/tasks.md +0 -20
  337. package/references/openspec/openspec/changes/archive/2025-01-13-add-list-command/proposal.md +0 -20
  338. package/references/openspec/openspec/changes/archive/2025-01-13-add-list-command/specs/cli-list/spec.md +0 -69
  339. package/references/openspec/openspec/changes/archive/2025-01-13-add-list-command/tasks.md +0 -26
  340. package/references/openspec/openspec/changes/archive/2025-08-05-initialize-typescript-project/design.md +0 -64
  341. package/references/openspec/openspec/changes/archive/2025-08-05-initialize-typescript-project/proposal.md +0 -18
  342. package/references/openspec/openspec/changes/archive/2025-08-05-initialize-typescript-project/tasks.md +0 -25
  343. package/references/openspec/openspec/changes/archive/2025-08-06-add-init-command/design.md +0 -104
  344. package/references/openspec/openspec/changes/archive/2025-08-06-add-init-command/proposal.md +0 -30
  345. package/references/openspec/openspec/changes/archive/2025-08-06-add-init-command/specs/cli-init/spec.md +0 -148
  346. package/references/openspec/openspec/changes/archive/2025-08-06-add-init-command/tasks.md +0 -38
  347. package/references/openspec/openspec/changes/archive/2025-08-06-adopt-future-state-storage/proposal.md +0 -24
  348. package/references/openspec/openspec/changes/archive/2025-08-06-adopt-future-state-storage/specs/openspec-conventions/spec.md +0 -120
  349. package/references/openspec/openspec/changes/archive/2025-08-06-adopt-future-state-storage/tasks.md +0 -38
  350. package/references/openspec/openspec/changes/archive/2025-08-11-add-complexity-guidelines/proposal.md +0 -13
  351. package/references/openspec/openspec/changes/archive/2025-08-11-add-complexity-guidelines/specs/openspec-docs/README.md +0 -472
  352. package/references/openspec/openspec/changes/archive/2025-08-11-add-complexity-guidelines/tasks.md +0 -9
  353. package/references/openspec/openspec/changes/archive/2025-08-13-add-archive-command/proposal.md +0 -15
  354. package/references/openspec/openspec/changes/archive/2025-08-13-add-archive-command/specs/cli-archive/spec.md +0 -111
  355. package/references/openspec/openspec/changes/archive/2025-08-13-add-archive-command/tasks.md +0 -44
  356. package/references/openspec/openspec/changes/archive/2025-08-13-add-diff-command/proposal.md +0 -19
  357. package/references/openspec/openspec/changes/archive/2025-08-13-add-diff-command/specs/cli-diff/spec.md +0 -77
  358. package/references/openspec/openspec/changes/archive/2025-08-13-add-diff-command/tasks.md +0 -23
  359. package/references/openspec/openspec/changes/archive/2025-08-19-add-change-commands/design.md +0 -56
  360. package/references/openspec/openspec/changes/archive/2025-08-19-add-change-commands/proposal.md +0 -17
  361. package/references/openspec/openspec/changes/archive/2025-08-19-add-change-commands/specs/cli-change/spec.md +0 -48
  362. package/references/openspec/openspec/changes/archive/2025-08-19-add-change-commands/specs/cli-list/spec.md +0 -12
  363. package/references/openspec/openspec/changes/archive/2025-08-19-add-change-commands/tasks.md +0 -34
  364. package/references/openspec/openspec/changes/archive/2025-08-19-add-interactive-show-command/proposal.md +0 -20
  365. package/references/openspec/openspec/changes/archive/2025-08-19-add-interactive-show-command/specs/cli-change/spec.md +0 -23
  366. package/references/openspec/openspec/changes/archive/2025-08-19-add-interactive-show-command/specs/cli-show/spec.md +0 -83
  367. package/references/openspec/openspec/changes/archive/2025-08-19-add-interactive-show-command/specs/cli-spec/spec.md +0 -23
  368. package/references/openspec/openspec/changes/archive/2025-08-19-add-interactive-show-command/tasks.md +0 -142
  369. package/references/openspec/openspec/changes/archive/2025-08-19-add-skip-specs-archive-option/proposal.md +0 -13
  370. package/references/openspec/openspec/changes/archive/2025-08-19-add-skip-specs-archive-option/specs/cli-archive/spec.md +0 -191
  371. package/references/openspec/openspec/changes/archive/2025-08-19-add-skip-specs-archive-option/tasks.md +0 -57
  372. package/references/openspec/openspec/changes/archive/2025-08-19-add-spec-commands/design.md +0 -45
  373. package/references/openspec/openspec/changes/archive/2025-08-19-add-spec-commands/proposal.md +0 -19
  374. package/references/openspec/openspec/changes/archive/2025-08-19-add-spec-commands/specs/cli-spec/spec.md +0 -43
  375. package/references/openspec/openspec/changes/archive/2025-08-19-add-spec-commands/tasks.md +0 -22
  376. package/references/openspec/openspec/changes/archive/2025-08-19-add-zod-validation/design.md +0 -104
  377. package/references/openspec/openspec/changes/archive/2025-08-19-add-zod-validation/proposal.md +0 -22
  378. package/references/openspec/openspec/changes/archive/2025-08-19-add-zod-validation/specs/cli-archive/spec.md +0 -18
  379. package/references/openspec/openspec/changes/archive/2025-08-19-add-zod-validation/specs/cli-diff/spec.md +0 -12
  380. package/references/openspec/openspec/changes/archive/2025-08-19-add-zod-validation/tasks.md +0 -59
  381. package/references/openspec/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/proposal.md +0 -93
  382. package/references/openspec/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/specs/cli-archive/spec.md +0 -48
  383. package/references/openspec/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/specs/cli-diff/spec.md +0 -45
  384. package/references/openspec/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/specs/openspec-conventions/spec.md +0 -101
  385. package/references/openspec/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/tasks.md +0 -55
  386. package/references/openspec/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/design.md +0 -19
  387. package/references/openspec/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/proposal.md +0 -67
  388. package/references/openspec/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/specs/cli-list/spec.md +0 -57
  389. package/references/openspec/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/specs/openspec-conventions/spec.md +0 -23
  390. package/references/openspec/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/tasks.md +0 -27
  391. package/references/openspec/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/proposal.md +0 -20
  392. package/references/openspec/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/specs/cli-change/spec.md +0 -22
  393. package/references/openspec/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/specs/cli-spec/spec.md +0 -23
  394. package/references/openspec/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/specs/cli-validate/spec.md +0 -149
  395. package/references/openspec/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/tasks.md +0 -81
  396. package/references/openspec/openspec/changes/archive/2025-08-19-fix-update-tool-selection/proposal.md +0 -40
  397. package/references/openspec/openspec/changes/archive/2025-08-19-fix-update-tool-selection/specs/cli-update/spec.md +0 -23
  398. package/references/openspec/openspec/changes/archive/2025-08-19-fix-update-tool-selection/tasks.md +0 -21
  399. package/references/openspec/openspec/changes/archive/2025-08-19-improve-validate-error-messages/proposal.md +0 -25
  400. package/references/openspec/openspec/changes/archive/2025-08-19-improve-validate-error-messages/specs/cli-validate/spec.md +0 -55
  401. package/references/openspec/openspec/changes/archive/2025-08-19-improve-validate-error-messages/tasks.md +0 -21
  402. package/references/openspec/openspec/changes/archive/2025-08-19-structured-spec-format/proposal.md +0 -36
  403. package/references/openspec/openspec/changes/archive/2025-08-19-structured-spec-format/specs/openspec-conventions/spec.md +0 -192
  404. package/references/openspec/openspec/changes/archive/2025-08-19-structured-spec-format/tasks.md +0 -19
  405. package/references/openspec/openspec/changes/archive/2025-09-12-add-view-dashboard-command/proposal.md +0 -38
  406. package/references/openspec/openspec/changes/archive/2025-09-12-add-view-dashboard-command/specs/cli-view/spec.md +0 -109
  407. package/references/openspec/openspec/changes/archive/2025-09-12-add-view-dashboard-command/tasks.md +0 -47
  408. package/references/openspec/openspec/changes/archive/2025-09-29-add-agents-md-config/proposal.md +0 -28
  409. package/references/openspec/openspec/changes/archive/2025-09-29-add-agents-md-config/specs/cli-init/spec.md +0 -71
  410. package/references/openspec/openspec/changes/archive/2025-09-29-add-agents-md-config/specs/cli-update/spec.md +0 -41
  411. package/references/openspec/openspec/changes/archive/2025-09-29-add-agents-md-config/tasks.md +0 -17
  412. package/references/openspec/openspec/changes/archive/2025-09-29-add-multi-agent-init/proposal.md +0 -35
  413. package/references/openspec/openspec/changes/archive/2025-09-29-add-multi-agent-init/specs/cli-init/spec.md +0 -45
  414. package/references/openspec/openspec/changes/archive/2025-09-29-add-multi-agent-init/tasks.md +0 -16
  415. package/references/openspec/openspec/changes/archive/2025-09-29-add-slash-command-support/proposal.md +0 -119
  416. package/references/openspec/openspec/changes/archive/2025-09-29-add-slash-command-support/specs/cli-init/spec.md +0 -21
  417. package/references/openspec/openspec/changes/archive/2025-09-29-add-slash-command-support/specs/cli-update/spec.md +0 -22
  418. package/references/openspec/openspec/changes/archive/2025-09-29-add-slash-command-support/tasks.md +0 -20
  419. package/references/openspec/openspec/changes/archive/2025-09-29-improve-cli-e2e-plan/proposal.md +0 -19
  420. package/references/openspec/openspec/changes/archive/2025-09-29-improve-cli-e2e-plan/tasks.md +0 -9
  421. package/references/openspec/openspec/changes/archive/2025-09-29-improve-deterministic-tests/proposal.md +0 -78
  422. package/references/openspec/openspec/changes/archive/2025-09-29-improve-deterministic-tests/tasks.md +0 -25
  423. package/references/openspec/openspec/changes/archive/2025-09-29-improve-init-onboarding/proposal.md +0 -13
  424. package/references/openspec/openspec/changes/archive/2025-09-29-improve-init-onboarding/specs/cli-init/spec.md +0 -92
  425. package/references/openspec/openspec/changes/archive/2025-09-29-improve-init-onboarding/tasks.md +0 -12
  426. package/references/openspec/openspec/changes/archive/2025-09-29-remove-diff-command/proposal.md +0 -81
  427. package/references/openspec/openspec/changes/archive/2025-09-29-remove-diff-command/tasks.md +0 -37
  428. package/references/openspec/openspec/changes/archive/2025-09-29-sort-active-changes-by-progress/proposal.md +0 -25
  429. package/references/openspec/openspec/changes/archive/2025-09-29-sort-active-changes-by-progress/specs/cli-view/spec.md +0 -9
  430. package/references/openspec/openspec/changes/archive/2025-09-29-sort-active-changes-by-progress/tasks.md +0 -8
  431. package/references/openspec/openspec/changes/archive/2025-09-29-update-agent-file-name/proposal.md +0 -29
  432. package/references/openspec/openspec/changes/archive/2025-09-29-update-agent-file-name/specs/cli-init/spec.md +0 -40
  433. package/references/openspec/openspec/changes/archive/2025-09-29-update-agent-file-name/specs/cli-update/spec.md +0 -22
  434. package/references/openspec/openspec/changes/archive/2025-09-29-update-agent-file-name/specs/openspec-conventions/spec.md +0 -27
  435. package/references/openspec/openspec/changes/archive/2025-09-29-update-agent-file-name/tasks.md +0 -22
  436. package/references/openspec/openspec/changes/archive/2025-09-29-update-agent-instructions/design.md +0 -130
  437. package/references/openspec/openspec/changes/archive/2025-09-29-update-agent-instructions/proposal.md +0 -117
  438. package/references/openspec/openspec/changes/archive/2025-09-29-update-agent-instructions/tasks.md +0 -69
  439. package/references/openspec/openspec/changes/archive/2025-09-29-update-markdown-parser-crlf/proposal.md +0 -19
  440. package/references/openspec/openspec/changes/archive/2025-09-29-update-markdown-parser-crlf/specs/cli-validate/spec.md +0 -9
  441. package/references/openspec/openspec/changes/archive/2025-09-29-update-markdown-parser-crlf/tasks.md +0 -11
  442. package/references/openspec/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/proposal.md +0 -25
  443. package/references/openspec/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/specs/cli-init/spec.md +0 -56
  444. package/references/openspec/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/specs/cli-update/spec.md +0 -41
  445. package/references/openspec/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/tasks.md +0 -19
  446. package/references/openspec/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/proposal.md +0 -25
  447. package/references/openspec/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/specs/cli-init/spec.md +0 -48
  448. package/references/openspec/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/specs/cli-update/spec.md +0 -48
  449. package/references/openspec/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/tasks.md +0 -30
  450. package/references/openspec/openspec/changes/archive/2025-10-14-add-kilocode-workflows/proposal.md +0 -17
  451. package/references/openspec/openspec/changes/archive/2025-10-14-add-kilocode-workflows/specs/cli-init/spec.md +0 -43
  452. package/references/openspec/openspec/changes/archive/2025-10-14-add-kilocode-workflows/specs/cli-update/spec.md +0 -27
  453. package/references/openspec/openspec/changes/archive/2025-10-14-add-kilocode-workflows/tasks.md +0 -15
  454. package/references/openspec/openspec/changes/archive/2025-10-14-add-non-interactive-init-options/proposal.md +0 -12
  455. package/references/openspec/openspec/changes/archive/2025-10-14-add-non-interactive-init-options/specs/cli-init/spec.md +0 -39
  456. package/references/openspec/openspec/changes/archive/2025-10-14-add-non-interactive-init-options/tasks.md +0 -17
  457. package/references/openspec/openspec/changes/archive/2025-10-14-add-windsurf-workflows/proposal.md +0 -17
  458. package/references/openspec/openspec/changes/archive/2025-10-14-add-windsurf-workflows/specs/cli-init/spec.md +0 -42
  459. package/references/openspec/openspec/changes/archive/2025-10-14-add-windsurf-workflows/specs/cli-update/spec.md +0 -27
  460. package/references/openspec/openspec/changes/archive/2025-10-14-add-windsurf-workflows/tasks.md +0 -17
  461. package/references/openspec/openspec/changes/archive/2025-10-14-enhance-validation-error-messages/proposal.md +0 -12
  462. package/references/openspec/openspec/changes/archive/2025-10-14-enhance-validation-error-messages/specs/cli-validate/spec.md +0 -39
  463. package/references/openspec/openspec/changes/archive/2025-10-14-enhance-validation-error-messages/tasks.md +0 -12
  464. package/references/openspec/openspec/changes/archive/2025-10-14-improve-agent-instruction-usability/proposal.md +0 -12
  465. package/references/openspec/openspec/changes/archive/2025-10-14-improve-agent-instruction-usability/specs/docs-agent-instructions/spec.md +0 -33
  466. package/references/openspec/openspec/changes/archive/2025-10-14-improve-agent-instruction-usability/tasks.md +0 -11
  467. package/references/openspec/openspec/changes/archive/2025-10-14-slim-root-agents-file/proposal.md +0 -13
  468. package/references/openspec/openspec/changes/archive/2025-10-14-slim-root-agents-file/tasks.md +0 -15
  469. package/references/openspec/openspec/changes/archive/2025-10-14-update-cli-init-enter-selection/proposal.md +0 -14
  470. package/references/openspec/openspec/changes/archive/2025-10-14-update-cli-init-enter-selection/specs/cli-init/spec.md +0 -10
  471. package/references/openspec/openspec/changes/archive/2025-10-14-update-cli-init-enter-selection/tasks.md +0 -8
  472. package/references/openspec/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/proposal.md +0 -15
  473. package/references/openspec/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/specs/cli-init/spec.md +0 -32
  474. package/references/openspec/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/specs/cli-update/spec.md +0 -10
  475. package/references/openspec/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/tasks.md +0 -11
  476. package/references/openspec/openspec/changes/archive/2025-10-14-update-release-automation/proposal.md +0 -49
  477. package/references/openspec/openspec/changes/archive/2025-10-14-update-release-automation/tasks.md +0 -12
  478. package/references/openspec/openspec/changes/archive/2025-10-22-add-archive-command-arguments/proposal.md +0 -17
  479. package/references/openspec/openspec/changes/archive/2025-10-22-add-archive-command-arguments/specs/cli-update/spec.md +0 -32
  480. package/references/openspec/openspec/changes/archive/2025-10-22-add-archive-command-arguments/tasks.md +0 -15
  481. package/references/openspec/openspec/changes/archive/2025-10-22-add-cline-support/proposal.md +0 -15
  482. package/references/openspec/openspec/changes/archive/2025-10-22-add-cline-support/specs/cli-init/spec.md +0 -97
  483. package/references/openspec/openspec/changes/archive/2025-10-22-add-cline-support/tasks.md +0 -19
  484. package/references/openspec/openspec/changes/archive/2025-10-22-add-crush-support/proposal.md +0 -13
  485. package/references/openspec/openspec/changes/archive/2025-10-22-add-crush-support/specs/cli-init/spec.md +0 -67
  486. package/references/openspec/openspec/changes/archive/2025-10-22-add-crush-support/tasks.md +0 -7
  487. package/references/openspec/openspec/changes/archive/2025-10-22-add-factory-slash-commands/proposal.md +0 -12
  488. package/references/openspec/openspec/changes/archive/2025-10-22-add-factory-slash-commands/specs/cli-init/spec.md +0 -54
  489. package/references/openspec/openspec/changes/archive/2025-10-22-add-factory-slash-commands/specs/cli-update/spec.md +0 -54
  490. package/references/openspec/openspec/changes/archive/2025-10-22-add-factory-slash-commands/tasks.md +0 -11
  491. package/references/openspec/openspec/changes/fix-cline-workflows-implementation/proposal.md +0 -13
  492. package/references/openspec/openspec/changes/fix-cline-workflows-implementation/specs/cli-init/spec.md +0 -11
  493. package/references/openspec/openspec/changes/fix-cline-workflows-implementation/tasks.md +0 -13
  494. package/references/openspec/openspec/changes/make-validation-scope-aware/proposal.md +0 -12
  495. package/references/openspec/openspec/changes/make-validation-scope-aware/specs/cli-validate/spec.md +0 -25
  496. package/references/openspec/openspec/changes/make-validation-scope-aware/tasks.md +0 -16
  497. package/references/openspec/openspec/project.md +0 -53
  498. package/references/openspec/openspec/specs/cli-archive/spec.md +0 -210
  499. package/references/openspec/openspec/specs/cli-change/spec.md +0 -91
  500. package/references/openspec/openspec/specs/cli-init/spec.md +0 -311
  501. package/references/openspec/openspec/specs/cli-list/spec.md +0 -103
  502. package/references/openspec/openspec/specs/cli-show/spec.md +0 -85
  503. package/references/openspec/openspec/specs/cli-spec/spec.md +0 -87
  504. package/references/openspec/openspec/specs/cli-update/spec.md +0 -190
  505. package/references/openspec/openspec/specs/cli-validate/spec.md +0 -218
  506. package/references/openspec/openspec/specs/cli-view/spec.md +0 -105
  507. package/references/openspec/openspec/specs/docs-agent-instructions/spec.md +0 -38
  508. package/references/openspec/openspec/specs/openspec-conventions/spec.md +0 -474
  509. package/references/openspec/openspec-parallel-merge-plan.md +0 -98
  510. package/references/openspec/package.json +0 -73
  511. package/references/openspec/pnpm-lock.yaml +0 -2324
  512. package/references/openspec/scripts/pack-version-check.mjs +0 -111
  513. package/references/openspec/src/cli/index.ts +0 -253
  514. package/references/openspec/src/commands/change.ts +0 -291
  515. package/references/openspec/src/commands/show.ts +0 -139
  516. package/references/openspec/src/commands/spec.ts +0 -250
  517. package/references/openspec/src/commands/validate.ts +0 -305
  518. package/references/openspec/src/core/archive.ts +0 -606
  519. package/references/openspec/src/core/config.ts +0 -41
  520. package/references/openspec/src/core/configurators/agents.ts +0 -23
  521. package/references/openspec/src/core/configurators/base.ts +0 -6
  522. package/references/openspec/src/core/configurators/claude.ts +0 -23
  523. package/references/openspec/src/core/configurators/cline.ts +0 -23
  524. package/references/openspec/src/core/configurators/codebuddy.ts +0 -24
  525. package/references/openspec/src/core/configurators/costrict.ts +0 -23
  526. package/references/openspec/src/core/configurators/iflow.ts +0 -23
  527. package/references/openspec/src/core/configurators/qoder.ts +0 -53
  528. package/references/openspec/src/core/configurators/qwen.ts +0 -47
  529. package/references/openspec/src/core/configurators/registry.ts +0 -49
  530. package/references/openspec/src/core/configurators/slash/amazon-q.ts +0 -51
  531. package/references/openspec/src/core/configurators/slash/antigravity.ts +0 -28
  532. package/references/openspec/src/core/configurators/slash/auggie.ts +0 -37
  533. package/references/openspec/src/core/configurators/slash/base.ts +0 -95
  534. package/references/openspec/src/core/configurators/slash/claude.ts +0 -42
  535. package/references/openspec/src/core/configurators/slash/cline.ts +0 -27
  536. package/references/openspec/src/core/configurators/slash/codebuddy.ts +0 -43
  537. package/references/openspec/src/core/configurators/slash/codex.ts +0 -126
  538. package/references/openspec/src/core/configurators/slash/costrict.ts +0 -36
  539. package/references/openspec/src/core/configurators/slash/crush.ts +0 -42
  540. package/references/openspec/src/core/configurators/slash/cursor.ts +0 -42
  541. package/references/openspec/src/core/configurators/slash/factory.ts +0 -41
  542. package/references/openspec/src/core/configurators/slash/gemini.ts +0 -27
  543. package/references/openspec/src/core/configurators/slash/github-copilot.ts +0 -39
  544. package/references/openspec/src/core/configurators/slash/iflow.ts +0 -42
  545. package/references/openspec/src/core/configurators/slash/kilocode.ts +0 -21
  546. package/references/openspec/src/core/configurators/slash/opencode.ts +0 -83
  547. package/references/openspec/src/core/configurators/slash/qoder.ts +0 -84
  548. package/references/openspec/src/core/configurators/slash/qwen.ts +0 -55
  549. package/references/openspec/src/core/configurators/slash/registry.ts +0 -81
  550. package/references/openspec/src/core/configurators/slash/roocode.ts +0 -27
  551. package/references/openspec/src/core/configurators/slash/toml-base.ts +0 -66
  552. package/references/openspec/src/core/configurators/slash/windsurf.ts +0 -27
  553. package/references/openspec/src/core/converters/json-converter.ts +0 -61
  554. package/references/openspec/src/core/index.ts +0 -2
  555. package/references/openspec/src/core/init.ts +0 -986
  556. package/references/openspec/src/core/list.ts +0 -104
  557. package/references/openspec/src/core/parsers/change-parser.ts +0 -234
  558. package/references/openspec/src/core/parsers/markdown-parser.ts +0 -237
  559. package/references/openspec/src/core/parsers/requirement-blocks.ts +0 -234
  560. package/references/openspec/src/core/schemas/base.schema.ts +0 -20
  561. package/references/openspec/src/core/schemas/change.schema.ts +0 -42
  562. package/references/openspec/src/core/schemas/index.ts +0 -20
  563. package/references/openspec/src/core/schemas/spec.schema.ts +0 -17
  564. package/references/openspec/src/core/styles/palette.ts +0 -8
  565. package/references/openspec/src/core/templates/agents-root-stub.ts +0 -16
  566. package/references/openspec/src/core/templates/agents-template.ts +0 -457
  567. package/references/openspec/src/core/templates/claude-template.ts +0 -1
  568. package/references/openspec/src/core/templates/cline-template.ts +0 -1
  569. package/references/openspec/src/core/templates/costrict-template.ts +0 -1
  570. package/references/openspec/src/core/templates/index.ts +0 -50
  571. package/references/openspec/src/core/templates/project-template.ts +0 -38
  572. package/references/openspec/src/core/templates/slash-command-templates.ts +0 -60
  573. package/references/openspec/src/core/update.ts +0 -129
  574. package/references/openspec/src/core/validation/constants.ts +0 -48
  575. package/references/openspec/src/core/validation/types.ts +0 -19
  576. package/references/openspec/src/core/validation/validator.ts +0 -448
  577. package/references/openspec/src/core/view.ts +0 -189
  578. package/references/openspec/src/index.ts +0 -2
  579. package/references/openspec/src/utils/file-system.ts +0 -187
  580. package/references/openspec/src/utils/index.ts +0 -2
  581. package/references/openspec/src/utils/interactive.ts +0 -7
  582. package/references/openspec/src/utils/item-discovery.ts +0 -45
  583. package/references/openspec/src/utils/match.ts +0 -26
  584. package/references/openspec/src/utils/task-progress.ts +0 -43
  585. package/references/openspec/test/cli-e2e/basic.test.ts +0 -156
  586. package/references/openspec/test/commands/change.interactive-show.test.ts +0 -45
  587. package/references/openspec/test/commands/change.interactive-validate.test.ts +0 -48
  588. package/references/openspec/test/commands/show.test.ts +0 -123
  589. package/references/openspec/test/commands/spec.interactive-show.test.ts +0 -44
  590. package/references/openspec/test/commands/spec.interactive-validate.test.ts +0 -44
  591. package/references/openspec/test/commands/spec.test.ts +0 -324
  592. package/references/openspec/test/commands/validate.enriched-output.test.ts +0 -49
  593. package/references/openspec/test/commands/validate.test.ts +0 -133
  594. package/references/openspec/test/core/archive.test.ts +0 -680
  595. package/references/openspec/test/core/commands/change-command.list.test.ts +0 -76
  596. package/references/openspec/test/core/commands/change-command.show-validate.test.ts +0 -111
  597. package/references/openspec/test/core/converters/json-converter.test.ts +0 -184
  598. package/references/openspec/test/core/init.test.ts +0 -1710
  599. package/references/openspec/test/core/list.test.ts +0 -165
  600. package/references/openspec/test/core/parsers/change-parser.test.ts +0 -52
  601. package/references/openspec/test/core/parsers/markdown-parser.test.ts +0 -291
  602. package/references/openspec/test/core/update.test.ts +0 -1642
  603. package/references/openspec/test/core/validation.enriched-messages.test.ts +0 -74
  604. package/references/openspec/test/core/validation.test.ts +0 -489
  605. package/references/openspec/test/core/view.test.ts +0 -79
  606. package/references/openspec/test/fixtures/tmp-init/openspec/changes/c1/proposal.md +0 -7
  607. package/references/openspec/test/fixtures/tmp-init/openspec/changes/c1/specs/alpha/spec.md +0 -8
  608. package/references/openspec/test/fixtures/tmp-init/openspec/specs/alpha/spec.md +0 -12
  609. package/references/openspec/test/helpers/run-cli.ts +0 -139
  610. package/references/openspec/test/utils/file-system.test.ts +0 -211
  611. package/references/openspec/test/utils/marker-updates.test.ts +0 -287
  612. package/references/openspec/tsconfig.json +0 -21
  613. package/references/openspec/vitest.config.ts +0 -25
  614. package/references/openspec/vitest.setup.ts +0 -6
@@ -1,45 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import { promises as fs } from 'fs';
3
- import path from 'path';
4
- import { execSync } from 'child_process';
5
-
6
- describe('change show (interactive behavior)', () => {
7
- const projectRoot = process.cwd();
8
- const testDir = path.join(projectRoot, 'test-change-show-tmp');
9
- const changesDir = path.join(testDir, 'openspec', 'changes');
10
- const bin = path.join(projectRoot, 'bin', 'openspec.js');
11
-
12
-
13
- beforeEach(async () => {
14
- await fs.mkdir(changesDir, { recursive: true });
15
- const content = `# Change: Demo\n\n## Why\n\n## What Changes\n- x`;
16
- await fs.mkdir(path.join(changesDir, 'demo'), { recursive: true });
17
- await fs.writeFile(path.join(changesDir, 'demo', 'proposal.md'), content, 'utf-8');
18
- });
19
-
20
- afterEach(async () => {
21
- await fs.rm(testDir, { recursive: true, force: true });
22
- });
23
-
24
- it('prints list hint and exits non-zero when no arg and non-interactive', () => {
25
- const originalCwd = process.cwd();
26
- const originalEnv = { ...process.env };
27
- try {
28
- process.chdir(testDir);
29
- process.env.OPEN_SPEC_INTERACTIVE = '0';
30
- let err: any;
31
- try {
32
- execSync(`node ${bin} change show`, { encoding: 'utf-8' });
33
- } catch (e) { err = e; }
34
- expect(err).toBeDefined();
35
- expect(err.status).not.toBe(0);
36
- expect(err.stderr.toString()).toContain('Available IDs:');
37
- expect(err.stderr.toString()).toContain('openspec change list');
38
- } finally {
39
- process.chdir(originalCwd);
40
- process.env = originalEnv;
41
- }
42
- });
43
- });
44
-
45
-
@@ -1,48 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import { promises as fs } from 'fs';
3
- import path from 'path';
4
- import { execSync } from 'child_process';
5
-
6
- // Note: We cannot truly simulate TTY prompts in this test runner easily.
7
- // Instead, we verify non-interactive fallback behavior and basic invocation.
8
-
9
- describe('change validate (interactive behavior)', () => {
10
- const projectRoot = process.cwd();
11
- const testDir = path.join(projectRoot, 'test-change-validate-tmp');
12
- const changesDir = path.join(testDir, 'openspec', 'changes');
13
- const bin = path.join(projectRoot, 'bin', 'openspec.js');
14
-
15
-
16
- beforeEach(async () => {
17
- await fs.mkdir(changesDir, { recursive: true });
18
- const content = `# Change: Demo\n\n## Why\nBecause reasons that are sufficiently long.\n\n## What Changes\n- **spec-x:** Add something`;
19
- await fs.mkdir(path.join(changesDir, 'demo'), { recursive: true });
20
- await fs.writeFile(path.join(changesDir, 'demo', 'proposal.md'), content, 'utf-8');
21
- });
22
-
23
- afterEach(async () => {
24
- await fs.rm(testDir, { recursive: true, force: true });
25
- });
26
-
27
- it('prints list hint and exits non-zero when no arg and non-interactive', () => {
28
- const originalCwd = process.cwd();
29
- const originalEnv = { ...process.env };
30
- try {
31
- process.chdir(testDir);
32
- process.env.OPEN_SPEC_INTERACTIVE = '0';
33
- let err: any;
34
- try {
35
- execSync(`node ${bin} change validate`, { encoding: 'utf-8' });
36
- } catch (e) { err = e; }
37
- expect(err).toBeDefined();
38
- expect(err.status).not.toBe(0);
39
- expect(err.stderr.toString()).toContain('Available IDs:');
40
- expect(err.stderr.toString()).toContain('openspec change list');
41
- } finally {
42
- process.chdir(originalCwd);
43
- process.env = originalEnv;
44
- }
45
- });
46
- });
47
-
48
-
@@ -1,123 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import { promises as fs } from 'fs';
3
- import path from 'path';
4
- import { execSync } from 'child_process';
5
-
6
- describe('top-level show command', () => {
7
- const projectRoot = process.cwd();
8
- const testDir = path.join(projectRoot, 'test-show-command-tmp');
9
- const changesDir = path.join(testDir, 'openspec', 'changes');
10
- const specsDir = path.join(testDir, 'openspec', 'specs');
11
- const openspecBin = path.join(projectRoot, 'bin', 'openspec.js');
12
-
13
-
14
- beforeEach(async () => {
15
- await fs.mkdir(changesDir, { recursive: true });
16
- await fs.mkdir(specsDir, { recursive: true });
17
-
18
- const changeContent = `# Change: Demo\n\n## Why\nBecause reasons.\n\n## What Changes\n- **auth:** Add requirement\n`;
19
- await fs.mkdir(path.join(changesDir, 'demo'), { recursive: true });
20
- await fs.writeFile(path.join(changesDir, 'demo', 'proposal.md'), changeContent, 'utf-8');
21
-
22
- const specContent = `## Purpose\nAuth spec.\n\n## Requirements\n\n### Requirement: User Authentication\nText\n`;
23
- await fs.mkdir(path.join(specsDir, 'auth'), { recursive: true });
24
- await fs.writeFile(path.join(specsDir, 'auth', 'spec.md'), specContent, 'utf-8');
25
- });
26
-
27
- afterEach(async () => {
28
- await fs.rm(testDir, { recursive: true, force: true });
29
- });
30
-
31
- it('prints hint and non-zero exit when no args and non-interactive', () => {
32
- const originalCwd = process.cwd();
33
- const originalEnv = { ...process.env };
34
- try {
35
- process.chdir(testDir);
36
- process.env.OPEN_SPEC_INTERACTIVE = '0';
37
- let err: any;
38
- try {
39
- execSync(`node ${openspecBin} show`, { encoding: 'utf-8' });
40
- } catch (e) { err = e; }
41
- expect(err).toBeDefined();
42
- expect(err.status).not.toBe(0);
43
- const stderr = err.stderr.toString();
44
- expect(stderr).toContain('Nothing to show.');
45
- expect(stderr).toContain('openspec show <item>');
46
- expect(stderr).toContain('openspec change show');
47
- expect(stderr).toContain('openspec spec show');
48
- } finally {
49
- process.chdir(originalCwd);
50
- process.env = originalEnv;
51
- }
52
- });
53
-
54
- it('auto-detects change id and supports --json', () => {
55
- const originalCwd = process.cwd();
56
- try {
57
- process.chdir(testDir);
58
- const output = execSync(`node ${openspecBin} show demo --json`, { encoding: 'utf-8' });
59
- const json = JSON.parse(output);
60
- expect(json.id).toBe('demo');
61
- expect(Array.isArray(json.deltas)).toBe(true);
62
- } finally {
63
- process.chdir(originalCwd);
64
- }
65
- });
66
-
67
- it('auto-detects spec id and supports spec-only flags', () => {
68
- const originalCwd = process.cwd();
69
- try {
70
- process.chdir(testDir);
71
- const output = execSync(`node ${openspecBin} show auth --json --requirements`, { encoding: 'utf-8' });
72
- const json = JSON.parse(output);
73
- expect(json.id).toBe('auth');
74
- expect(Array.isArray(json.requirements)).toBe(true);
75
- } finally {
76
- process.chdir(originalCwd);
77
- }
78
- });
79
-
80
- it('handles ambiguity and suggests --type', async () => {
81
- // create matching spec and change named 'foo'
82
- await fs.mkdir(path.join(changesDir, 'foo'), { recursive: true });
83
- await fs.writeFile(path.join(changesDir, 'foo', 'proposal.md'), '# Change: Foo\n\n## Why\n\n## What Changes\n', 'utf-8');
84
- await fs.mkdir(path.join(specsDir, 'foo'), { recursive: true });
85
- await fs.writeFile(path.join(specsDir, 'foo', 'spec.md'), '## Purpose\n\n## Requirements\n\n### Requirement: R\nX', 'utf-8');
86
-
87
- const originalCwd = process.cwd();
88
- try {
89
- process.chdir(testDir);
90
- let err: any;
91
- try {
92
- execSync(`node ${openspecBin} show foo`, { encoding: 'utf-8' });
93
- } catch (e) { err = e; }
94
- expect(err).toBeDefined();
95
- expect(err.status).not.toBe(0);
96
- const stderr = err.stderr.toString();
97
- expect(stderr).toContain('Ambiguous item');
98
- expect(stderr).toContain('--type change|spec');
99
- } finally {
100
- process.chdir(originalCwd);
101
- }
102
- });
103
-
104
- it('prints nearest matches when not found', () => {
105
- const originalCwd = process.cwd();
106
- try {
107
- process.chdir(testDir);
108
- let err: any;
109
- try {
110
- execSync(`node ${openspecBin} show unknown-item`, { encoding: 'utf-8' });
111
- } catch (e) { err = e; }
112
- expect(err).toBeDefined();
113
- expect(err.status).not.toBe(0);
114
- const stderr = err.stderr.toString();
115
- expect(stderr).toContain("Unknown item 'unknown-item'");
116
- expect(stderr).toContain('Did you mean:');
117
- } finally {
118
- process.chdir(originalCwd);
119
- }
120
- });
121
- });
122
-
123
-
@@ -1,44 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import { promises as fs } from 'fs';
3
- import path from 'path';
4
- import { execSync } from 'child_process';
5
-
6
- describe('spec show (interactive behavior)', () => {
7
- const projectRoot = process.cwd();
8
- const testDir = path.join(projectRoot, 'test-spec-show-tmp');
9
- const specsDir = path.join(testDir, 'openspec', 'specs');
10
- const bin = path.join(projectRoot, 'bin', 'openspec.js');
11
-
12
-
13
- beforeEach(async () => {
14
- await fs.mkdir(specsDir, { recursive: true });
15
- const content = `## Purpose\nX\n\n## Requirements\n\n### Requirement: R\nText`;
16
- await fs.mkdir(path.join(specsDir, 's1'), { recursive: true });
17
- await fs.writeFile(path.join(specsDir, 's1', 'spec.md'), content, 'utf-8');
18
- });
19
-
20
- afterEach(async () => {
21
- await fs.rm(testDir, { recursive: true, force: true });
22
- });
23
-
24
- it('errors when no arg and non-interactive', () => {
25
- const originalCwd = process.cwd();
26
- const originalEnv = { ...process.env };
27
- try {
28
- process.chdir(testDir);
29
- process.env.OPEN_SPEC_INTERACTIVE = '0';
30
- let err: any;
31
- try {
32
- execSync(`node ${bin} spec show`, { encoding: 'utf-8' });
33
- } catch (e) { err = e; }
34
- expect(err).toBeDefined();
35
- expect(err.status).not.toBe(0);
36
- expect(err.stderr.toString()).toContain('Missing required argument <spec-id>');
37
- } finally {
38
- process.chdir(originalCwd);
39
- process.env = originalEnv;
40
- }
41
- });
42
- });
43
-
44
-
@@ -1,44 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import { promises as fs } from 'fs';
3
- import path from 'path';
4
- import { execSync } from 'child_process';
5
-
6
- describe('spec validate (interactive behavior)', () => {
7
- const projectRoot = process.cwd();
8
- const testDir = path.join(projectRoot, 'test-spec-validate-tmp');
9
- const specsDir = path.join(testDir, 'openspec', 'specs');
10
- const bin = path.join(projectRoot, 'bin', 'openspec.js');
11
-
12
-
13
- beforeEach(async () => {
14
- await fs.mkdir(specsDir, { recursive: true });
15
- const content = `## Purpose\nValid spec for interactive test.\n\n## Requirements\n\n### Requirement: X\nText`;
16
- await fs.mkdir(path.join(specsDir, 's1'), { recursive: true });
17
- await fs.writeFile(path.join(specsDir, 's1', 'spec.md'), content, 'utf-8');
18
- });
19
-
20
- afterEach(async () => {
21
- await fs.rm(testDir, { recursive: true, force: true });
22
- });
23
-
24
- it('errors when no arg and non-interactive', () => {
25
- const originalCwd = process.cwd();
26
- const originalEnv = { ...process.env };
27
- try {
28
- process.chdir(testDir);
29
- process.env.OPEN_SPEC_INTERACTIVE = '0';
30
- let err: any;
31
- try {
32
- execSync(`node ${bin} spec validate`, { encoding: 'utf-8' });
33
- } catch (e) { err = e; }
34
- expect(err).toBeDefined();
35
- expect(err.status).not.toBe(0);
36
- expect(err.stderr.toString()).toContain('Missing required argument <spec-id>');
37
- } finally {
38
- process.chdir(originalCwd);
39
- process.env = originalEnv;
40
- }
41
- });
42
- });
43
-
44
-
@@ -1,324 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import { promises as fs } from 'fs';
3
- import path from 'path';
4
- import { execSync } from 'child_process';
5
-
6
- describe('spec command', () => {
7
- const projectRoot = process.cwd();
8
- const testDir = path.join(projectRoot, 'test-spec-command-tmp');
9
- const specsDir = path.join(testDir, 'openspec', 'specs');
10
- const openspecBin = path.join(projectRoot, 'bin', 'openspec.js');
11
-
12
-
13
- beforeEach(async () => {
14
- await fs.mkdir(specsDir, { recursive: true });
15
-
16
- // Create test spec files
17
- const testSpec = `## Purpose
18
- This is a test specification for the authentication system.
19
-
20
- ## Requirements
21
-
22
- ### Requirement: User Authentication
23
- The system SHALL provide secure user authentication
24
-
25
- #### Scenario: Successful login
26
- - **GIVEN** a user with valid credentials
27
- - **WHEN** they submit the login form
28
- - **THEN** they are authenticated
29
-
30
- ### Requirement: Password Reset
31
- The system SHALL allow users to reset their password
32
-
33
- #### Scenario: Reset via email
34
- - **GIVEN** a user with a registered email
35
- - **WHEN** they request a password reset
36
- - **THEN** they receive a reset link`;
37
-
38
- await fs.mkdir(path.join(specsDir, 'auth'), { recursive: true });
39
- await fs.writeFile(path.join(specsDir, 'auth', 'spec.md'), testSpec);
40
-
41
- const testSpec2 = `## Purpose
42
- This specification defines the payment processing system.
43
-
44
- ## Requirements
45
-
46
- ### Requirement: Process Payments
47
- The system SHALL process credit card payments securely`;
48
-
49
- await fs.mkdir(path.join(specsDir, 'payment'), { recursive: true });
50
- await fs.writeFile(path.join(specsDir, 'payment', 'spec.md'), testSpec2);
51
- });
52
-
53
- afterEach(async () => {
54
- await fs.rm(testDir, { recursive: true, force: true });
55
- });
56
-
57
- describe('spec show', () => {
58
- it('should display spec in text format', () => {
59
- const originalCwd = process.cwd();
60
- try {
61
- process.chdir(testDir);
62
- const output = execSync(`node ${openspecBin} spec show auth`, {
63
- encoding: 'utf-8'
64
- });
65
-
66
- // Raw passthrough should match spec.md content
67
- const raw = execSync(`cat ${path.join(specsDir, 'auth', 'spec.md')}`, { encoding: 'utf-8' });
68
- expect(output.trim()).toBe(raw.trim());
69
- } finally {
70
- process.chdir(originalCwd);
71
- }
72
- });
73
-
74
- it('should output spec as JSON with --json flag', () => {
75
- const originalCwd = process.cwd();
76
- try {
77
- process.chdir(testDir);
78
- const output = execSync(`node ${openspecBin} spec show auth --json`, {
79
- encoding: 'utf-8'
80
- });
81
-
82
- const json = JSON.parse(output);
83
- expect(json.id).toBe('auth');
84
- expect(json.title).toBe('auth');
85
- expect(json.overview).toContain('test specification');
86
- expect(json.requirements).toHaveLength(2);
87
- expect(json.metadata.format).toBe('openspec');
88
- } finally {
89
- process.chdir(originalCwd);
90
- }
91
- });
92
-
93
- it('should filter to show only requirements with --requirements flag (JSON only)', () => {
94
- const originalCwd = process.cwd();
95
- try {
96
- process.chdir(testDir);
97
- const output = execSync(`node ${openspecBin} spec show auth --json --requirements`, {
98
- encoding: 'utf-8'
99
- });
100
-
101
- const json = JSON.parse(output);
102
- expect(json.requirements).toHaveLength(2);
103
- // Scenarios should be excluded when --requirements is used
104
- expect(json.requirements.every((r: any) => Array.isArray(r.scenarios) && r.scenarios.length === 0)).toBe(true);
105
- } finally {
106
- process.chdir(originalCwd);
107
- }
108
- });
109
-
110
- it('should exclude scenarios with --no-scenarios flag (JSON only)', () => {
111
- const originalCwd = process.cwd();
112
- try {
113
- process.chdir(testDir);
114
- const output = execSync(`node ${openspecBin} spec show auth --json --no-scenarios`, {
115
- encoding: 'utf-8'
116
- });
117
-
118
- const json = JSON.parse(output);
119
- expect(json.requirements).toHaveLength(2);
120
- expect(json.requirements.every((r: any) => Array.isArray(r.scenarios) && r.scenarios.length === 0)).toBe(true);
121
- } finally {
122
- process.chdir(originalCwd);
123
- }
124
- });
125
-
126
- it('should show specific requirement with -r flag (JSON only)', () => {
127
- const originalCwd = process.cwd();
128
- try {
129
- process.chdir(testDir);
130
- const output = execSync(`node ${openspecBin} spec show auth --json -r 1`, {
131
- encoding: 'utf-8'
132
- });
133
-
134
- const json = JSON.parse(output);
135
- expect(json.requirements).toHaveLength(1);
136
- expect(json.requirements[0].text).toContain('The system SHALL provide secure user authentication');
137
- } finally {
138
- process.chdir(originalCwd);
139
- }
140
- });
141
-
142
- it('should return JSON with filtered requirements', () => {
143
- const originalCwd = process.cwd();
144
- try {
145
- process.chdir(testDir);
146
- const output = execSync(`node ${openspecBin} spec show auth --json --no-scenarios`, {
147
- encoding: 'utf-8'
148
- });
149
-
150
- const json = JSON.parse(output);
151
- expect(json.requirements).toHaveLength(2);
152
- expect(json.requirements[0].scenarios).toHaveLength(0);
153
- } finally {
154
- process.chdir(originalCwd);
155
- }
156
- });
157
- });
158
-
159
- describe('spec list', () => {
160
- it('should list all available specs (IDs only by default)', () => {
161
- const originalCwd = process.cwd();
162
- try {
163
- process.chdir(testDir);
164
- const output = execSync(`node ${openspecBin} spec list`, {
165
- encoding: 'utf-8'
166
- });
167
-
168
- expect(output).toContain('auth');
169
- expect(output).toContain('payment');
170
- // Default should not include counts or teasers
171
- expect(output).not.toMatch(/Requirements:\s*\d+/);
172
- } finally {
173
- process.chdir(originalCwd);
174
- }
175
- });
176
-
177
- it('should output spec list as JSON with --json flag', () => {
178
- const originalCwd = process.cwd();
179
- try {
180
- process.chdir(testDir);
181
- const output = execSync(`node ${openspecBin} spec list --json`, {
182
- encoding: 'utf-8'
183
- });
184
-
185
- const json = JSON.parse(output);
186
- expect(json).toHaveLength(2);
187
- expect(json.find((s: any) => s.id === 'auth')).toBeDefined();
188
- expect(json.find((s: any) => s.id === 'payment')).toBeDefined();
189
- expect(json[0].requirementCount).toBeDefined();
190
- } finally {
191
- process.chdir(originalCwd);
192
- }
193
- });
194
- });
195
-
196
- describe('spec validate', () => {
197
- it('should validate a valid spec', () => {
198
- const originalCwd = process.cwd();
199
- try {
200
- process.chdir(testDir);
201
- const output = execSync(`node ${openspecBin} spec validate auth`, {
202
- encoding: 'utf-8'
203
- });
204
-
205
- expect(output).toContain("Specification 'auth' is valid");
206
- } finally {
207
- process.chdir(originalCwd);
208
- }
209
- });
210
-
211
- it('should output validation report as JSON with --json flag', () => {
212
- const originalCwd = process.cwd();
213
- try {
214
- process.chdir(testDir);
215
- const output = execSync(`node ${openspecBin} spec validate auth --json`, {
216
- encoding: 'utf-8'
217
- });
218
-
219
- const json = JSON.parse(output);
220
- expect(json.valid).toBeDefined();
221
- expect(json.issues).toBeDefined();
222
- expect(json.summary).toBeDefined();
223
- expect(json.summary.errors).toBeDefined();
224
- expect(json.summary.warnings).toBeDefined();
225
- } finally {
226
- process.chdir(originalCwd);
227
- }
228
- });
229
-
230
- it('should validate with strict mode', () => {
231
- const originalCwd = process.cwd();
232
- try {
233
- process.chdir(testDir);
234
- const output = execSync(`node ${openspecBin} spec validate auth --strict --json`, {
235
- encoding: 'utf-8'
236
- });
237
-
238
- const json = JSON.parse(output);
239
- expect(json.valid).toBeDefined();
240
- // In strict mode, warnings also affect validity
241
- } finally {
242
- process.chdir(originalCwd);
243
- }
244
- });
245
-
246
- it('should detect invalid spec structure', async () => {
247
- const invalidSpec = `## Purpose
248
-
249
- ## Requirements
250
- This section has no actual requirements`;
251
-
252
- await fs.mkdir(path.join(specsDir, 'invalid'), { recursive: true });
253
- await fs.writeFile(path.join(specsDir, 'invalid', 'spec.md'), invalidSpec);
254
-
255
- const originalCwd = process.cwd();
256
- try {
257
- process.chdir(testDir);
258
-
259
- // This should exit with non-zero code
260
- let exitCode = 0;
261
- try {
262
- execSync(`node ${openspecBin} spec validate invalid`, {
263
- encoding: 'utf-8'
264
- });
265
- } catch (error: any) {
266
- exitCode = error.status;
267
- }
268
-
269
- expect(exitCode).not.toBe(0);
270
- } finally {
271
- process.chdir(originalCwd);
272
- }
273
- });
274
- });
275
-
276
- describe('error handling', () => {
277
- it('should handle non-existent spec gracefully', () => {
278
- const originalCwd = process.cwd();
279
- try {
280
- process.chdir(testDir);
281
-
282
- let error: any;
283
- try {
284
- execSync(`node ${openspecBin} spec show nonexistent`, {
285
- encoding: 'utf-8'
286
- });
287
- } catch (e) {
288
- error = e;
289
- }
290
-
291
- expect(error).toBeDefined();
292
- expect(error.status).not.toBe(0);
293
- expect(error.stderr.toString()).toContain('not found');
294
- } finally {
295
- process.chdir(originalCwd);
296
- }
297
- });
298
-
299
- it('should handle missing specs directory gracefully', async () => {
300
- await fs.rm(specsDir, { recursive: true, force: true });
301
- const originalCwd = process.cwd();
302
- try {
303
- process.chdir(testDir);
304
- const output = execSync(`node ${openspecBin} spec list`, { encoding: 'utf-8' });
305
- expect(output.trim()).toBe('No items found');
306
- } finally {
307
- process.chdir(originalCwd);
308
- }
309
- });
310
-
311
- it('should honor --no-color (no ANSI escapes)', () => {
312
- const originalCwd = process.cwd();
313
- try {
314
- process.chdir(testDir);
315
- const output = execSync(`node ${openspecBin} --no-color spec list --long`, { encoding: 'utf-8' });
316
- // Basic ANSI escape pattern
317
- const hasAnsi = /\u001b\[[0-9;]*m/.test(output);
318
- expect(hasAnsi).toBe(false);
319
- } finally {
320
- process.chdir(originalCwd);
321
- }
322
- });
323
- });
324
- });
@@ -1,49 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import { promises as fs } from 'fs';
3
- import path from 'path';
4
- import { execSync } from 'child_process';
5
-
6
- describe('validate command enriched human output', () => {
7
- const projectRoot = process.cwd();
8
- const testDir = path.join(projectRoot, 'test-validate-enriched-tmp');
9
- const changesDir = path.join(testDir, 'openspec', 'changes');
10
- const bin = path.join(projectRoot, 'bin', 'openspec.js');
11
-
12
-
13
- beforeEach(async () => {
14
- await fs.mkdir(changesDir, { recursive: true });
15
- });
16
-
17
- afterEach(async () => {
18
- await fs.rm(testDir, { recursive: true, force: true });
19
- });
20
-
21
- it('prints Next steps footer and guidance on invalid change', () => {
22
- const changeContent = `# Test Change\n\n## Why\nThis is a sufficiently long explanation to pass the why length requirement for validation purposes.\n\n## What Changes\nThere are changes proposed, but no delta specs provided yet.`;
23
- const changeId = 'c-next-steps';
24
- const changePath = path.join(changesDir, changeId);
25
- execSync(`mkdir -p ${changePath}`);
26
- execSync(`bash -lc "cat > ${path.join(changePath, 'proposal.md')} <<'EOF'\n${changeContent}\nEOF"`);
27
-
28
- const originalCwd = process.cwd();
29
- try {
30
- process.chdir(testDir);
31
- let code = 0;
32
- let stderr = '';
33
- try {
34
- execSync(`node ${bin} change validate ${changeId}`, { encoding: 'utf-8', stdio: 'pipe' });
35
- } catch (e: any) {
36
- code = e?.status ?? 1;
37
- stderr = e?.stderr?.toString?.() ?? '';
38
- }
39
- expect(code).not.toBe(0);
40
- expect(stderr).toContain('has issues');
41
- expect(stderr).toContain('Next steps:');
42
- expect(stderr).toContain('openspec change show');
43
- } finally {
44
- process.chdir(originalCwd);
45
- }
46
- });
47
- });
48
-
49
-