@rsktash/beads-ui 0.1.50 → 0.10.3

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 (336) hide show
  1. package/README.md +85 -144
  2. package/bin/bd-web +94 -0
  3. package/dist/assets/index-BBVIMXaM.js +73 -0
  4. package/dist/assets/index-SUXI6Mzt.css +1 -0
  5. package/dist/bd-favicon-16.svg +6 -0
  6. package/dist/bd-favicon-32.svg +6 -0
  7. package/dist/bd-logo-512.svg +6 -0
  8. package/dist/favicon.ico +0 -0
  9. package/dist/icon-180.png +0 -0
  10. package/dist/icon-192.png +0 -0
  11. package/dist/icon-512.png +0 -0
  12. package/dist/index.html +8 -5
  13. package/package.json +39 -29
  14. package/server/auth.js +68 -87
  15. package/server/db.js +91 -134
  16. package/server/dsn.js +130 -0
  17. package/server/index.js +151 -87
  18. package/server/queries.js +247 -0
  19. package/server/routes/auth.js +27 -0
  20. package/server/routes/issues.js +120 -0
  21. package/server/routes/stream.js +111 -0
  22. package/server/types.js +83 -0
  23. package/app/protocol.js +0 -216
  24. package/bin/bd-grep +0 -121
  25. package/bin/bd-ui +0 -19
  26. package/dist/assets/abap-DsBKuouk.js +0 -1
  27. package/dist/assets/actionscript-3-D_z4Izcz.js +0 -1
  28. package/dist/assets/ada-727ZlQH0.js +0 -1
  29. package/dist/assets/andromeeda-C3khCPGq.js +0 -1
  30. package/dist/assets/angular-html-LfdN0zeE.js +0 -1
  31. package/dist/assets/angular-ts-CKsD7JZE.js +0 -1
  32. package/dist/assets/apache-Dn00JSTd.js +0 -1
  33. package/dist/assets/apex-COJ4H7py.js +0 -1
  34. package/dist/assets/apl-BBq3IX1j.js +0 -1
  35. package/dist/assets/applescript-Bu5BbsvL.js +0 -1
  36. package/dist/assets/ara-7O62HKoU.js +0 -1
  37. package/dist/assets/asciidoc-BPT9niGB.js +0 -1
  38. package/dist/assets/asm-Dhn9LcZ4.js +0 -1
  39. package/dist/assets/astro-CqkE3fuf.js +0 -1
  40. package/dist/assets/aurora-x-D-2ljcwZ.js +0 -1
  41. package/dist/assets/awk-eg146-Ew.js +0 -1
  42. package/dist/assets/ayu-dark-Cv9koXgw.js +0 -1
  43. package/dist/assets/ballerina-Du268qiB.js +0 -1
  44. package/dist/assets/bat-fje9CFhw.js +0 -1
  45. package/dist/assets/beancount-BwXTMy5W.js +0 -1
  46. package/dist/assets/berry-3xVqZejG.js +0 -1
  47. package/dist/assets/bibtex-xW4inM5L.js +0 -1
  48. package/dist/assets/bicep-DHo0CJ0O.js +0 -1
  49. package/dist/assets/blade-a8OxSdnT.js +0 -1
  50. package/dist/assets/bsl-Dgyn0ogV.js +0 -1
  51. package/dist/assets/c-C3t2pwGQ.js +0 -1
  52. package/dist/assets/cadence-DNquZEk8.js +0 -1
  53. package/dist/assets/cairo--RitsXJZ.js +0 -1
  54. package/dist/assets/catppuccin-frappe-CD_QflpE.js +0 -1
  55. package/dist/assets/catppuccin-latte-DRW-0cLl.js +0 -1
  56. package/dist/assets/catppuccin-macchiato-C-_shW-Y.js +0 -1
  57. package/dist/assets/catppuccin-mocha-LGGdnPYs.js +0 -1
  58. package/dist/assets/clarity-BHOwM8T6.js +0 -1
  59. package/dist/assets/clojure-DxSadP1t.js +0 -1
  60. package/dist/assets/cmake-DbXoA79R.js +0 -1
  61. package/dist/assets/cobol-PTqiYgYu.js +0 -1
  62. package/dist/assets/codeowners-Bp6g37R7.js +0 -1
  63. package/dist/assets/codeql-sacFqUAJ.js +0 -1
  64. package/dist/assets/coffee-dyiR41kL.js +0 -1
  65. package/dist/assets/common-lisp-C7gG9l05.js +0 -1
  66. package/dist/assets/coq-Dsg_Bt_b.js +0 -1
  67. package/dist/assets/cpp-BksuvNSY.js +0 -1
  68. package/dist/assets/crystal-DtDmRg-F.js +0 -1
  69. package/dist/assets/csharp-D9R-vmeu.js +0 -1
  70. package/dist/assets/css-BPhBrDlE.js +0 -1
  71. package/dist/assets/csv-B0qRVHPH.js +0 -1
  72. package/dist/assets/cue-DtFQj3wx.js +0 -1
  73. package/dist/assets/cypher-m2LEI-9-.js +0 -1
  74. package/dist/assets/d-BoXegm-a.js +0 -1
  75. package/dist/assets/dark-plus-C3mMm8J8.js +0 -1
  76. package/dist/assets/dart-B9wLZaAG.js +0 -1
  77. package/dist/assets/dax-ClGRhx96.js +0 -1
  78. package/dist/assets/desktop-DEIpsLCJ.js +0 -1
  79. package/dist/assets/diff-BgYniUM_.js +0 -1
  80. package/dist/assets/docker-COcR7UxN.js +0 -1
  81. package/dist/assets/dotenv-BjQB5zDj.js +0 -1
  82. package/dist/assets/dracula-BzJJZx-M.js +0 -1
  83. package/dist/assets/dracula-soft-BXkSAIEj.js +0 -1
  84. package/dist/assets/dream-maker-C-nORZOA.js +0 -1
  85. package/dist/assets/edge-D5gP-w-T.js +0 -1
  86. package/dist/assets/elixir-CLiX3zqd.js +0 -1
  87. package/dist/assets/elm-CmHSxxaM.js +0 -1
  88. package/dist/assets/emacs-lisp-BX77sIaO.js +0 -1
  89. package/dist/assets/erb-BYTLMnw6.js +0 -1
  90. package/dist/assets/erlang-B-DoSBHF.js +0 -1
  91. package/dist/assets/everforest-dark-BgDCqdQA.js +0 -1
  92. package/dist/assets/everforest-light-C8M2exoo.js +0 -1
  93. package/dist/assets/fennel-bCA53EVm.js +0 -1
  94. package/dist/assets/fish-w-ucz2PV.js +0 -1
  95. package/dist/assets/fluent-Dayu4EKP.js +0 -1
  96. package/dist/assets/fortran-fixed-form-TqA4NnZg.js +0 -1
  97. package/dist/assets/fortran-free-form-DKXYxT9g.js +0 -1
  98. package/dist/assets/fsharp-XplgxFYe.js +0 -1
  99. package/dist/assets/gdresource-BHYsBjWJ.js +0 -1
  100. package/dist/assets/gdscript-DfxzS6Rs.js +0 -1
  101. package/dist/assets/gdshader-SKMF96pI.js +0 -1
  102. package/dist/assets/genie-ajMbGru0.js +0 -1
  103. package/dist/assets/gherkin--30QC5Em.js +0 -1
  104. package/dist/assets/git-commit-i4q6IMui.js +0 -1
  105. package/dist/assets/git-rebase-B-v9cOL2.js +0 -1
  106. package/dist/assets/github-dark-DHJKELXO.js +0 -1
  107. package/dist/assets/github-dark-default-Cuk6v7N8.js +0 -1
  108. package/dist/assets/github-dark-dimmed-DH5Ifo-i.js +0 -1
  109. package/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -1
  110. package/dist/assets/github-light-DAi9KRSo.js +0 -1
  111. package/dist/assets/github-light-default-D7oLnXFd.js +0 -1
  112. package/dist/assets/github-light-high-contrast-BfjtVDDH.js +0 -1
  113. package/dist/assets/gleam-B430Bg39.js +0 -1
  114. package/dist/assets/glimmer-js-D-cwc0-E.js +0 -1
  115. package/dist/assets/glimmer-ts-pgjy16dm.js +0 -1
  116. package/dist/assets/glsl-DBO2IWDn.js +0 -1
  117. package/dist/assets/gnuplot-CM8KxXT1.js +0 -1
  118. package/dist/assets/go-B1SYOhNW.js +0 -1
  119. package/dist/assets/graphql-cDcHW_If.js +0 -1
  120. package/dist/assets/groovy-DkBy-JyN.js +0 -1
  121. package/dist/assets/hack-D1yCygmZ.js +0 -1
  122. package/dist/assets/haml-B2EZWmdv.js +0 -1
  123. package/dist/assets/handlebars-BQGss363.js +0 -1
  124. package/dist/assets/haskell-BILxekzW.js +0 -1
  125. package/dist/assets/haxe-C5wWYbrZ.js +0 -1
  126. package/dist/assets/hcl-HzYwdGDm.js +0 -1
  127. package/dist/assets/hjson-T-Tgc4AT.js +0 -1
  128. package/dist/assets/hlsl-ifBTmRxC.js +0 -1
  129. package/dist/assets/houston-DnULxvSX.js +0 -1
  130. package/dist/assets/html-C2L_23MC.js +0 -1
  131. package/dist/assets/html-derivative-CSfWNPLT.js +0 -1
  132. package/dist/assets/http-FRrOvY1W.js +0 -1
  133. package/dist/assets/hxml-TIA70rKU.js +0 -1
  134. package/dist/assets/hy-BMj5Y0dO.js +0 -1
  135. package/dist/assets/imba-bv_oIlVt.js +0 -1
  136. package/dist/assets/index-BuQ1xTdM.css +0 -1
  137. package/dist/assets/index-DclShbpd.js +0 -125
  138. package/dist/assets/ini-BjABl1g7.js +0 -1
  139. package/dist/assets/java-xI-RfyKK.js +0 -1
  140. package/dist/assets/javascript-ySlJ1b_l.js +0 -1
  141. package/dist/assets/jinja-DGy0s7-h.js +0 -1
  142. package/dist/assets/jison-BqZprYcd.js +0 -1
  143. package/dist/assets/json-BQoSv7ci.js +0 -1
  144. package/dist/assets/json5-w8dY5SsB.js +0 -1
  145. package/dist/assets/jsonc-TU54ms6u.js +0 -1
  146. package/dist/assets/jsonl-DREVFZK8.js +0 -1
  147. package/dist/assets/jsonnet-BfivnA6A.js +0 -1
  148. package/dist/assets/jssm-P4WzXJd0.js +0 -1
  149. package/dist/assets/jsx-BAng5TT0.js +0 -1
  150. package/dist/assets/julia-BBuGR-5E.js +0 -1
  151. package/dist/assets/kanagawa-dragon-CkXjmgJE.js +0 -1
  152. package/dist/assets/kanagawa-lotus-CfQXZHmo.js +0 -1
  153. package/dist/assets/kanagawa-wave-DWedfzmr.js +0 -1
  154. package/dist/assets/kotlin-B5lbUyaz.js +0 -1
  155. package/dist/assets/kusto-mebxcVVE.js +0 -1
  156. package/dist/assets/laserwave-DUszq2jm.js +0 -1
  157. package/dist/assets/latex-C-cWTeAZ.js +0 -1
  158. package/dist/assets/lean-XBlWyCtg.js +0 -1
  159. package/dist/assets/less-BfCpw3nA.js +0 -1
  160. package/dist/assets/light-plus-B7mTdjB0.js +0 -1
  161. package/dist/assets/liquid-D3W5UaiH.js +0 -1
  162. package/dist/assets/log-Cc5clBb7.js +0 -1
  163. package/dist/assets/logo-IuBKFhSY.js +0 -1
  164. package/dist/assets/lua-CvWAzNxB.js +0 -1
  165. package/dist/assets/luau-Du5NY7AG.js +0 -1
  166. package/dist/assets/make-Bvotw-X0.js +0 -1
  167. package/dist/assets/markdown-UIAJJxZW.js +0 -1
  168. package/dist/assets/marko-z0MBrx5-.js +0 -1
  169. package/dist/assets/material-theme-D5KoaKCx.js +0 -1
  170. package/dist/assets/material-theme-darker-BfHTSMKl.js +0 -1
  171. package/dist/assets/material-theme-lighter-B0m2ddpp.js +0 -1
  172. package/dist/assets/material-theme-ocean-CyktbL80.js +0 -1
  173. package/dist/assets/material-theme-palenight-Csfq5Kiy.js +0 -1
  174. package/dist/assets/matlab-D9-PGadD.js +0 -1
  175. package/dist/assets/mdc-DB_EDNY_.js +0 -1
  176. package/dist/assets/mdx-sdHcTMYB.js +0 -1
  177. package/dist/assets/mermaid-Ci6OQyBP.js +0 -1
  178. package/dist/assets/min-dark-CafNBF8u.js +0 -1
  179. package/dist/assets/min-light-CTRr51gU.js +0 -1
  180. package/dist/assets/mipsasm-BC5c_5Pe.js +0 -1
  181. package/dist/assets/mojo-Tz6hzZYG.js +0 -1
  182. package/dist/assets/monokai-D4h5O-jR.js +0 -1
  183. package/dist/assets/move-DB_GagMm.js +0 -1
  184. package/dist/assets/narrat-DLbgOhZU.js +0 -1
  185. package/dist/assets/nextflow-B0XVJmRM.js +0 -1
  186. package/dist/assets/nginx-D_VnBJ67.js +0 -1
  187. package/dist/assets/night-owl-C39BiMTA.js +0 -1
  188. package/dist/assets/nim-ZlGxZxc3.js +0 -1
  189. package/dist/assets/nix-shcSOmrb.js +0 -1
  190. package/dist/assets/nord-Ddv68eIx.js +0 -1
  191. package/dist/assets/nushell-D4Tzg5kh.js +0 -1
  192. package/dist/assets/objective-c-Deuh7S70.js +0 -1
  193. package/dist/assets/objective-cpp-BUEGK8hf.js +0 -1
  194. package/dist/assets/ocaml-BNioltXt.js +0 -1
  195. package/dist/assets/one-dark-pro-GBQ2dnAY.js +0 -1
  196. package/dist/assets/one-light-PoHY5YXO.js +0 -1
  197. package/dist/assets/pascal-JqZropPD.js +0 -1
  198. package/dist/assets/perl-CHQXSrWU.js +0 -1
  199. package/dist/assets/php-B5ebYQev.js +0 -1
  200. package/dist/assets/plastic-3e1v2bzS.js +0 -1
  201. package/dist/assets/plsql-LKU2TuZ1.js +0 -1
  202. package/dist/assets/po-BFLt1xDp.js +0 -1
  203. package/dist/assets/poimandres-CS3Unz2-.js +0 -1
  204. package/dist/assets/polar-DKykz6zU.js +0 -1
  205. package/dist/assets/postcss-B3ZDOciz.js +0 -1
  206. package/dist/assets/powerquery-CSHBycmS.js +0 -1
  207. package/dist/assets/powershell-BIEUsx6d.js +0 -1
  208. package/dist/assets/prisma-B48N-Iqd.js +0 -1
  209. package/dist/assets/prolog-BY-TUvya.js +0 -1
  210. package/dist/assets/proto-zocC4JxJ.js +0 -1
  211. package/dist/assets/pug-CM9l7STV.js +0 -1
  212. package/dist/assets/puppet-Cza_XSSt.js +0 -1
  213. package/dist/assets/purescript-Bg-kzb6g.js +0 -1
  214. package/dist/assets/python-DhUJRlN_.js +0 -1
  215. package/dist/assets/qml-D8XfuvdV.js +0 -1
  216. package/dist/assets/qmldir-C8lEn-DE.js +0 -1
  217. package/dist/assets/qss-DhMKtDLN.js +0 -1
  218. package/dist/assets/r-CwjWoCRV.js +0 -1
  219. package/dist/assets/racket-CzouJOBO.js +0 -1
  220. package/dist/assets/raku-B1bQXN8T.js +0 -1
  221. package/dist/assets/razor-CNLDkMZG.js +0 -1
  222. package/dist/assets/red-bN70gL4F.js +0 -1
  223. package/dist/assets/reg-5LuOXUq_.js +0 -1
  224. package/dist/assets/regexp-DWJ3fJO_.js +0 -1
  225. package/dist/assets/rel-DJlmqQ1C.js +0 -1
  226. package/dist/assets/riscv-QhoSD0DR.js +0 -1
  227. package/dist/assets/rose-pine-CmCqftbK.js +0 -1
  228. package/dist/assets/rose-pine-dawn-Ds-gbosJ.js +0 -1
  229. package/dist/assets/rose-pine-moon-CjDtw9vr.js +0 -1
  230. package/dist/assets/rst-4NLicBqY.js +0 -1
  231. package/dist/assets/ruby-DeZ3UC14.js +0 -1
  232. package/dist/assets/rust-Be6lgOlo.js +0 -1
  233. package/dist/assets/sas-BmTFh92c.js +0 -1
  234. package/dist/assets/sass-BJ4Li9vH.js +0 -1
  235. package/dist/assets/scala-DQVVAn-B.js +0 -1
  236. package/dist/assets/scheme-BJGe-b2p.js +0 -1
  237. package/dist/assets/scss-C31hgJw-.js +0 -1
  238. package/dist/assets/sdbl-BLhTXw86.js +0 -1
  239. package/dist/assets/shaderlab-B7qAK45m.js +0 -1
  240. package/dist/assets/shellscript-atvbtKCR.js +0 -1
  241. package/dist/assets/shellsession-C_rIy8kc.js +0 -1
  242. package/dist/assets/slack-dark-BthQWCQV.js +0 -1
  243. package/dist/assets/slack-ochin-DqwNpetd.js +0 -1
  244. package/dist/assets/smalltalk-DkLiglaE.js +0 -1
  245. package/dist/assets/snazzy-light-Bw305WKR.js +0 -1
  246. package/dist/assets/solarized-dark-DXbdFlpD.js +0 -1
  247. package/dist/assets/solarized-light-L9t79GZl.js +0 -1
  248. package/dist/assets/solidity-C1w2a3ep.js +0 -1
  249. package/dist/assets/soy-C-lX7w71.js +0 -1
  250. package/dist/assets/sparql-bYkjHRlG.js +0 -1
  251. package/dist/assets/splunk-Cf8iN4DR.js +0 -1
  252. package/dist/assets/sql-COK4E0Yg.js +0 -1
  253. package/dist/assets/ssh-config-BknIz3MU.js +0 -1
  254. package/dist/assets/stata-DorPZHa4.js +0 -1
  255. package/dist/assets/stylus-BeQkCIfX.js +0 -1
  256. package/dist/assets/svelte-MSaWC3Je.js +0 -1
  257. package/dist/assets/swift-BSxZ-RaX.js +0 -1
  258. package/dist/assets/synthwave-84-CbfX1IO0.js +0 -1
  259. package/dist/assets/system-verilog-C7L56vO4.js +0 -1
  260. package/dist/assets/systemd-CUnW07Te.js +0 -1
  261. package/dist/assets/talonscript-C1XDQQGZ.js +0 -1
  262. package/dist/assets/tasl-CQjiPCtT.js +0 -1
  263. package/dist/assets/tcl-DQ1-QYvQ.js +0 -1
  264. package/dist/assets/templ-dwX3ZSMB.js +0 -1
  265. package/dist/assets/terraform-BbSNqyBO.js +0 -1
  266. package/dist/assets/tex-rYs2v40G.js +0 -1
  267. package/dist/assets/tokyo-night-DBQeEorK.js +0 -1
  268. package/dist/assets/toml-CB2ApiWb.js +0 -1
  269. package/dist/assets/ts-tags-CipyTH0X.js +0 -1
  270. package/dist/assets/tsv-B_m7g4N7.js +0 -1
  271. package/dist/assets/tsx-B6W0miNI.js +0 -1
  272. package/dist/assets/turtle-BMR_PYu6.js +0 -1
  273. package/dist/assets/twig-NC5TFiHP.js +0 -1
  274. package/dist/assets/typescript-Dj6nwHGl.js +0 -1
  275. package/dist/assets/typespec-BpWG_bgh.js +0 -1
  276. package/dist/assets/typst-BVUVsWT6.js +0 -1
  277. package/dist/assets/v-CAQ2eGtk.js +0 -1
  278. package/dist/assets/vala-BFOHcciG.js +0 -1
  279. package/dist/assets/vb-CdO5JTpU.js +0 -1
  280. package/dist/assets/verilog-CJaU5se_.js +0 -1
  281. package/dist/assets/vesper-BEBZ7ncR.js +0 -1
  282. package/dist/assets/vhdl-DYoNaHQp.js +0 -1
  283. package/dist/assets/viml-m4uW47V2.js +0 -1
  284. package/dist/assets/vitesse-black-Bkuqu6BP.js +0 -1
  285. package/dist/assets/vitesse-dark-D0r3Knsf.js +0 -1
  286. package/dist/assets/vitesse-light-CVO1_9PV.js +0 -1
  287. package/dist/assets/vue-BuYVFjOK.js +0 -1
  288. package/dist/assets/vue-html-xdeiXROB.js +0 -1
  289. package/dist/assets/vyper-nyqBNV6O.js +0 -1
  290. package/dist/assets/wasm-C6j12Q_x.js +0 -1
  291. package/dist/assets/wasm-CG6Dc4jp.js +0 -1
  292. package/dist/assets/wenyan-7A4Fjokl.js +0 -1
  293. package/dist/assets/wgsl-CB0Krxn9.js +0 -1
  294. package/dist/assets/wikitext-DCE3LsBG.js +0 -1
  295. package/dist/assets/wolfram-C3FkfJm5.js +0 -1
  296. package/dist/assets/xml-e3z08dGr.js +0 -1
  297. package/dist/assets/xsl-Dd0NUgwM.js +0 -1
  298. package/dist/assets/yaml-CVw76BM1.js +0 -1
  299. package/dist/assets/zenscript-HnGAYVZD.js +0 -1
  300. package/dist/assets/zig-BVz_zdnA.js +0 -1
  301. package/server/app.js +0 -165
  302. package/server/app.test.js +0 -30
  303. package/server/bd.js +0 -227
  304. package/server/bd.test.js +0 -194
  305. package/server/cli/cli.test.js +0 -207
  306. package/server/cli/commands.integration.test.js +0 -148
  307. package/server/cli/commands.js +0 -285
  308. package/server/cli/commands.unit.test.js +0 -408
  309. package/server/cli/daemon.js +0 -340
  310. package/server/cli/daemon.test.js +0 -31
  311. package/server/cli/index.js +0 -135
  312. package/server/cli/open.js +0 -178
  313. package/server/cli/open.test.js +0 -26
  314. package/server/cli/usage.js +0 -49
  315. package/server/config.js +0 -36
  316. package/server/db.test.js +0 -169
  317. package/server/dolt-pool.js +0 -313
  318. package/server/dolt-queries.js +0 -764
  319. package/server/list-adapters.js +0 -421
  320. package/server/list-adapters.test.js +0 -208
  321. package/server/logging.js +0 -23
  322. package/server/registry-watcher.js +0 -200
  323. package/server/subscriptions.js +0 -299
  324. package/server/subscriptions.test.js +0 -128
  325. package/server/validators.js +0 -124
  326. package/server/watcher.js +0 -139
  327. package/server/watcher.test.js +0 -120
  328. package/server/ws.comments.test.js +0 -262
  329. package/server/ws.delete.test.js +0 -119
  330. package/server/ws.js +0 -1329
  331. package/server/ws.labels.test.js +0 -95
  332. package/server/ws.list-refresh.coalesce.test.js +0 -95
  333. package/server/ws.list-subscriptions.test.js +0 -403
  334. package/server/ws.mutation-window.test.js +0 -147
  335. package/server/ws.mutations.test.js +0 -389
  336. package/server/ws.test.js +0 -52
package/README.md CHANGED
@@ -1,182 +1,123 @@
1
- # beads-ui
1
+ # @rsktash/bd-web
2
2
 
3
- Web UI for [Beads](https://github.com/rsktash/beads) workspaces.
3
+ Web UI for [bd](https://github.com/rsktash/beads). Same workspace, runs
4
+ locally or on a server, no Go runtime needed.
4
5
 
5
- ## Install
6
-
7
- ```bash
8
- npm install -g @rsktash/beads-ui
9
- ```
10
-
11
- ## Usage
12
-
13
- ```bash
14
- cd /path/to/your/beads-workspace
15
- bd-ui start
16
- ```
17
-
18
- ### Commands
19
-
20
- | Command | Description |
21
- |-----------|--------------------------|
22
- | `start` | Start the UI server |
23
- | `stop` | Stop the UI server |
24
- | `restart` | Restart the UI server |
25
-
26
- ### Options
27
-
28
- | Flag | Description | Default |
29
- |------------------|-----------------------------------------|-------------|
30
- | `-h, --help` | Show help message | |
31
- | `-v, --version` | Show version | |
32
- | `-d, --debug` | Enable debug logging | |
33
- | `--open` | Open browser after start | |
34
- | `--host <addr>` | Bind address | `127.0.0.1` |
35
- | `--port <num>` | Bind port | `3333` |
36
-
37
- ## Environment Variables
38
-
39
- | Variable | Description | Default |
40
- |----------------------------|----------------------------------------------|-------------|
41
- | `PORT` | Server port | `3333` |
42
- | `HOST` | Bind address | `127.0.0.1` |
43
- | `BEADS_DOLT_PASSWORD` | Password for remote Dolt server connection | |
44
- | `FILE_ATTACHMENT_BASE_URL` | Base URL for resolving `attach://` URIs | |
45
- | `BEADS_UI_AUTH_FILE` | Path to users JSON file for authentication | |
46
-
47
- ## Authentication
48
-
49
- Auth is optional. When `BEADS_UI_AUTH_FILE` points to a valid users file, login is required. When not set, auth is bypassed entirely.
50
-
51
- ### Users file format
52
-
53
- ```json
54
- {
55
- "users": [
56
- { "username": "alice", "password": "secret", "role": "Developer" },
57
- { "username": "bob", "password": "guest", "role": "Viewer" }
58
- ]
59
- }
60
- ```
61
-
62
- ### Running with auth
63
-
64
- ```bash
65
- BEADS_UI_AUTH_FILE=/path/to/users.json bd-ui start
6
+ ```sh
7
+ npm install -g @rsktash/bd-web
8
+ cd /path/to/your/bd-workspace # contains .bd/config
9
+ bd-web start
10
+ # → http://127.0.0.1:3333
66
11
  ```
67
12
 
68
- Session tokens are stored in the browser's localStorage and kept in server memory. Tokens are invalidated on server restart.
13
+ ## Stack
69
14
 
70
- ## Dolt Database Modes
15
+ - Server: Hono + `@hono/node-server`, `pg`, `better-sqlite3`
16
+ - Client: Vite + React 19 + TanStack Router + TanStack Query + Tailwind v4
71
17
 
72
- Two Dolt connection modes, configured via `.beads/metadata.json`:
18
+ ## Environment
73
19
 
74
- ### Embedded (default)
20
+ | var | purpose |
21
+ |---|---|
22
+ | `BD_DB` | override DSN (otherwise read from `.bd/config`) |
23
+ | `BD_DB_PASSWORD` | postgres password (or put it in `.bd/.env`) |
24
+ | `BD_WEB_AUTH_FILE` | enable optional auth — JSON `{users:[{username,password,role}]}` |
25
+ | `HOST`, `PORT` | bind (default `127.0.0.1:3333`) |
26
+ | `DEBUG` | extra logging |
75
27
 
76
- Spawns a local `dolt sql-server` from `.beads/embeddeddolt/`.
28
+ ## Development
77
29
 
78
- ```json
79
- {
80
- "backend": "dolt",
81
- "dolt_database": "mydb"
82
- }
30
+ ```sh
31
+ cd web/
32
+ npm install
33
+ npm run dev # vite at 5173 + hono at 3333; vite proxies /api -> hono
83
34
  ```
84
35
 
85
- ### Remote Server
36
+ `npm run build` writes to `web/dist/`. `npm start` runs the Hono server, which
37
+ serves both `/api/*` and the built client at `/`.
86
38
 
87
- Connects to an external Dolt server:
39
+ ## Releases
88
40
 
89
- ```json
90
- {
91
- "backend": "dolt",
92
- "dolt_mode": "server",
93
- "dolt_server_host": "127.0.0.1",
94
- "dolt_server_port": 3308,
95
- "dolt_server_user": "root",
96
- "dolt_database": "mydb"
97
- }
98
- ```
41
+ Tag `v*` to publish:
99
42
 
100
- ```bash
101
- BEADS_DOLT_PASSWORD=secret bd-ui start
43
+ ```sh
44
+ git tag v0.1.1 && git push origin v0.1.1
102
45
  ```
103
46
 
104
- ## Docker
47
+ That triggers two GitHub Actions:
105
48
 
106
- ```yaml
107
- services:
108
- beads-ui:
109
- image: ghcr.io/rsktash/beads-ui:latest
110
- ports:
111
- - "3333:3333"
112
- volumes:
113
- - /path/to/workspace:/workspace
114
- working_dir: /workspace
115
- environment:
116
- - HOST=0.0.0.0
117
- - BEADS_DOLT_PASSWORD=secret
118
- - BEADS_UI_AUTH_FILE=/workspace/.beads/users.json
119
- - FILE_ATTACHMENT_BASE_URL=https://files.example.com/attachments
120
- ```
49
+ - `.github/workflows/publish.yml` — `npm publish --provenance --access public`
50
+ for `@rsktash/bd-web`. Required repo secret: `NPM_TOKEN`.
51
+ - `.github/workflows/docker.yml` — pushes `ghcr.io/rsktash/bd-web:{version}`,
52
+ `:{major}.{minor}`, and `:latest`. Uses the built-in `GITHUB_TOKEN`.
121
53
 
122
- Images published to `ghcr.io/rsktash/beads-ui` on version tags via GitHub Actions.
54
+ Bump `web/package.json` before tagging.
123
55
 
124
- ## Markdown Features
56
+ ## Routes
125
57
 
126
- ### Attachments
58
+ - `/` — board (kanban by status; ready issues at top)
59
+ - `/list` — table view with filters
60
+ - `/issue/<id>` — detail with markdown sections, deps, comments
61
+ - `/projects` — postgres-only; lists schemas containing a `config` table
127
62
 
128
- `attach://` URIs for portable file references, resolved against `FILE_ATTACHMENT_BASE_URL`:
63
+ The header always shows the project prefix, current user, and backend driver.
129
64
 
130
- ```md
131
- ![Screenshot](attach://bead-42/screenshot.png)
132
- ```
65
+ ## Docker
133
66
 
134
- ### Issue Mentions
67
+ The repo ships a multi-stage [Dockerfile](Dockerfile). It builds the client,
68
+ keeps only production deps, and runs `node server/index.js` as PID 1.
135
69
 
136
- `#issue-id` auto-links to the issue detail page:
70
+ For the **full stack** (Postgres + bd-web together), use the root-level
71
+ [docker-compose.yml](../docker-compose.yml):
137
72
 
138
- ```md
139
- See #proj-a1b for details. Depends on #proj-c3d.
73
+ ```sh
74
+ # from repo root
75
+ cp .env.example .env # set POSTGRES_PASSWORD and BD_PREFIX
76
+ docker compose --profile full up -d --build
77
+ # → http://127.0.0.1:3333
140
78
  ```
141
79
 
142
- ### Deep Linking
143
-
144
- Sections and headings get unique element IDs for fragment linking:
80
+ For an existing database, just run the bd-web container directly:
145
81
 
146
- - Predefined sections: `#description`, `#acceptance-criteria`, `#notes`, `#design`
147
- - Content headings: auto-slugified (e.g., `## My Heading` → `#my-heading`)
148
-
149
- ```md
150
- [see details](/detail/proj-a1b#my-heading)
82
+ ```sh
83
+ docker run --rm -p 3333:3333 \
84
+ -e BD_DB="postgres://bd@host.docker.internal:5432/tracker?sslmode=disable&search_path=myproject" \
85
+ -e BD_DB_PASSWORD=mypassword \
86
+ -e HOST=0.0.0.0 \
87
+ $(docker build -q ./web)
151
88
  ```
152
89
 
153
- ### Theme
154
-
155
- Solarized Light color palette with matching syntax highlighting.
156
-
157
- ## CLI Tools
90
+ To enable auth, mount a users JSON file and point at it:
158
91
 
159
- ### bd-grep
160
-
161
- Grep across beads issue content with snippet output. Uses `bd list` for issue filtering, then greps field content for pattern matches.
162
-
163
- ```bash
164
- bd-grep <pattern> [bd-list-flags] [--field fields] [-A N] [-B N] [-C N] [-i] [-l]
92
+ ```sh
93
+ docker run --rm -p 3333:3333 \
94
+ -v $(pwd)/users.json:/etc/bd/users.json:ro \
95
+ -e BD_DB=... -e BD_DB_PASSWORD=... \
96
+ -e BD_WEB_AUTH_FILE=/etc/bd/users.json \
97
+ $(docker build -q ./web)
165
98
  ```
166
99
 
167
- Examples:
100
+ `users.json` shape:
168
101
 
169
- ```bash
170
- bd-grep "timeline" # open issues, description
171
- bd-grep "timeline" --all # include closed
172
- bd-grep "route" -t epic # epics only
173
- bd-grep "fallback" --field description,design # multiple fields
174
- bd-grep "composite" -C2 # 2 lines context
175
- bd-grep "trip.id" -l # list matching IDs only
102
+ ```json
103
+ {
104
+ "users": [
105
+ { "username": "alice", "password": "secret", "role": "Developer" },
106
+ { "username": "bob", "password": "guest", "role": "Viewer" }
107
+ ]
108
+ }
176
109
  ```
177
110
 
178
- Requires `bd` and `jq`.
111
+ ## CLI setup (Go)
179
112
 
180
- ## License
113
+ The companion CLI `bd` lives in this repo's [parent directory](..). Install
114
+ and initialise from the project README:
181
115
 
182
- MIT
116
+ ```sh
117
+ go install github.com/rsktash/beads/cmd/bd@latest
118
+ bd init --prefix myproject \
119
+ --db "postgres://bd@127.0.0.1:5432/tracker?sslmode=disable"
120
+ export BD_DB_PASSWORD=...
121
+ bd create "first issue" -p 0
122
+ bd-web start # uses the same .bd/config
123
+ ```
package/bin/bd-web ADDED
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env node
2
+ // Thin CLI shim for `bd-web`. Mirrors beads-ui/bin/bd-ui in shape: parses a
3
+ // few flags (start/stop/restart, --port, --host, --debug, --open) and spawns
4
+ // the server. We keep the surface tiny — heavy lifting lives in server/.
5
+
6
+ import { spawn } from 'node:child_process';
7
+ import { fileURLToPath } from 'node:url';
8
+ import { dirname, resolve } from 'node:path';
9
+
10
+ const HERE = dirname(fileURLToPath(import.meta.url));
11
+ const SERVER = resolve(HERE, '..', 'server', 'index.js');
12
+
13
+ const argv = process.argv.slice(2);
14
+ const flags = { open: false, debug: false, host: undefined, port: undefined };
15
+ let action = 'start';
16
+
17
+ for (let i = 0; i < argv.length; i++) {
18
+ const a = argv[i];
19
+ switch (a) {
20
+ case '-h':
21
+ case '--help':
22
+ printHelp();
23
+ process.exit(0);
24
+ case '-v':
25
+ case '--version':
26
+ printVersion();
27
+ process.exit(0);
28
+ case 'start':
29
+ case 'stop':
30
+ case 'restart':
31
+ action = a;
32
+ break;
33
+ case '-d':
34
+ case '--debug':
35
+ flags.debug = true;
36
+ break;
37
+ case '--open':
38
+ flags.open = true;
39
+ break;
40
+ case '--host':
41
+ flags.host = argv[++i];
42
+ break;
43
+ case '--port':
44
+ flags.port = argv[++i];
45
+ break;
46
+ default:
47
+ process.stderr.write(`unknown arg: ${a}\n`);
48
+ process.exit(2);
49
+ }
50
+ }
51
+
52
+ if (action !== 'start') {
53
+ process.stderr.write(`only 'start' is implemented for now (got '${action}')\n`);
54
+ process.exit(2);
55
+ }
56
+
57
+ const env = { ...process.env };
58
+ if (flags.port) env.PORT = String(flags.port);
59
+ if (flags.host) env.HOST = flags.host;
60
+ if (flags.debug) env.DEBUG = (env.DEBUG ? env.DEBUG + ',' : '') + 'bd-web*';
61
+ if (flags.open) env.BD_WEB_OPEN = '1';
62
+
63
+ const child = spawn(process.execPath, [SERVER], { env, stdio: 'inherit' });
64
+ child.on('exit', (code) => process.exit(code ?? 0));
65
+
66
+ function printHelp() {
67
+ process.stdout.write(`bd-web — web UI for beads
68
+
69
+ Usage:
70
+ bd-web start [options]
71
+
72
+ Options:
73
+ -h, --help Show this help
74
+ -v, --version Show version
75
+ -d, --debug Verbose logging
76
+ --open Open browser after start
77
+ --host <addr> Bind address (default 127.0.0.1; HOST env)
78
+ --port <num> Bind port (default 3333; PORT env)
79
+
80
+ Environment:
81
+ BD_DB Override DSN (otherwise read from .bd/config)
82
+ BD_DB_PASSWORD Password for postgres DSN (or .bd/.env, .env)
83
+ BD_WEB_AUTH_FILE Optional JSON users file to enable auth
84
+ HOST, PORT Bind address overrides
85
+ `);
86
+ }
87
+
88
+ function printVersion() {
89
+ // The version is read from the package.json next to us, not hardcoded.
90
+ import('node:fs').then((fs) => {
91
+ const pkg = JSON.parse(fs.readFileSync(resolve(HERE, '..', 'package.json'), 'utf8'));
92
+ process.stdout.write(pkg.version + '\n');
93
+ });
94
+ }