@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.
- package/README.md +85 -144
- package/bin/bd-web +94 -0
- package/dist/assets/index-BBVIMXaM.js +73 -0
- package/dist/assets/index-SUXI6Mzt.css +1 -0
- package/dist/bd-favicon-16.svg +6 -0
- package/dist/bd-favicon-32.svg +6 -0
- package/dist/bd-logo-512.svg +6 -0
- package/dist/favicon.ico +0 -0
- package/dist/icon-180.png +0 -0
- package/dist/icon-192.png +0 -0
- package/dist/icon-512.png +0 -0
- package/dist/index.html +8 -5
- package/package.json +39 -29
- package/server/auth.js +68 -87
- package/server/db.js +91 -134
- package/server/dsn.js +130 -0
- package/server/index.js +151 -87
- package/server/queries.js +247 -0
- package/server/routes/auth.js +27 -0
- package/server/routes/issues.js +120 -0
- package/server/routes/stream.js +111 -0
- package/server/types.js +83 -0
- package/app/protocol.js +0 -216
- package/bin/bd-grep +0 -121
- package/bin/bd-ui +0 -19
- package/dist/assets/abap-DsBKuouk.js +0 -1
- package/dist/assets/actionscript-3-D_z4Izcz.js +0 -1
- package/dist/assets/ada-727ZlQH0.js +0 -1
- package/dist/assets/andromeeda-C3khCPGq.js +0 -1
- package/dist/assets/angular-html-LfdN0zeE.js +0 -1
- package/dist/assets/angular-ts-CKsD7JZE.js +0 -1
- package/dist/assets/apache-Dn00JSTd.js +0 -1
- package/dist/assets/apex-COJ4H7py.js +0 -1
- package/dist/assets/apl-BBq3IX1j.js +0 -1
- package/dist/assets/applescript-Bu5BbsvL.js +0 -1
- package/dist/assets/ara-7O62HKoU.js +0 -1
- package/dist/assets/asciidoc-BPT9niGB.js +0 -1
- package/dist/assets/asm-Dhn9LcZ4.js +0 -1
- package/dist/assets/astro-CqkE3fuf.js +0 -1
- package/dist/assets/aurora-x-D-2ljcwZ.js +0 -1
- package/dist/assets/awk-eg146-Ew.js +0 -1
- package/dist/assets/ayu-dark-Cv9koXgw.js +0 -1
- package/dist/assets/ballerina-Du268qiB.js +0 -1
- package/dist/assets/bat-fje9CFhw.js +0 -1
- package/dist/assets/beancount-BwXTMy5W.js +0 -1
- package/dist/assets/berry-3xVqZejG.js +0 -1
- package/dist/assets/bibtex-xW4inM5L.js +0 -1
- package/dist/assets/bicep-DHo0CJ0O.js +0 -1
- package/dist/assets/blade-a8OxSdnT.js +0 -1
- package/dist/assets/bsl-Dgyn0ogV.js +0 -1
- package/dist/assets/c-C3t2pwGQ.js +0 -1
- package/dist/assets/cadence-DNquZEk8.js +0 -1
- package/dist/assets/cairo--RitsXJZ.js +0 -1
- package/dist/assets/catppuccin-frappe-CD_QflpE.js +0 -1
- package/dist/assets/catppuccin-latte-DRW-0cLl.js +0 -1
- package/dist/assets/catppuccin-macchiato-C-_shW-Y.js +0 -1
- package/dist/assets/catppuccin-mocha-LGGdnPYs.js +0 -1
- package/dist/assets/clarity-BHOwM8T6.js +0 -1
- package/dist/assets/clojure-DxSadP1t.js +0 -1
- package/dist/assets/cmake-DbXoA79R.js +0 -1
- package/dist/assets/cobol-PTqiYgYu.js +0 -1
- package/dist/assets/codeowners-Bp6g37R7.js +0 -1
- package/dist/assets/codeql-sacFqUAJ.js +0 -1
- package/dist/assets/coffee-dyiR41kL.js +0 -1
- package/dist/assets/common-lisp-C7gG9l05.js +0 -1
- package/dist/assets/coq-Dsg_Bt_b.js +0 -1
- package/dist/assets/cpp-BksuvNSY.js +0 -1
- package/dist/assets/crystal-DtDmRg-F.js +0 -1
- package/dist/assets/csharp-D9R-vmeu.js +0 -1
- package/dist/assets/css-BPhBrDlE.js +0 -1
- package/dist/assets/csv-B0qRVHPH.js +0 -1
- package/dist/assets/cue-DtFQj3wx.js +0 -1
- package/dist/assets/cypher-m2LEI-9-.js +0 -1
- package/dist/assets/d-BoXegm-a.js +0 -1
- package/dist/assets/dark-plus-C3mMm8J8.js +0 -1
- package/dist/assets/dart-B9wLZaAG.js +0 -1
- package/dist/assets/dax-ClGRhx96.js +0 -1
- package/dist/assets/desktop-DEIpsLCJ.js +0 -1
- package/dist/assets/diff-BgYniUM_.js +0 -1
- package/dist/assets/docker-COcR7UxN.js +0 -1
- package/dist/assets/dotenv-BjQB5zDj.js +0 -1
- package/dist/assets/dracula-BzJJZx-M.js +0 -1
- package/dist/assets/dracula-soft-BXkSAIEj.js +0 -1
- package/dist/assets/dream-maker-C-nORZOA.js +0 -1
- package/dist/assets/edge-D5gP-w-T.js +0 -1
- package/dist/assets/elixir-CLiX3zqd.js +0 -1
- package/dist/assets/elm-CmHSxxaM.js +0 -1
- package/dist/assets/emacs-lisp-BX77sIaO.js +0 -1
- package/dist/assets/erb-BYTLMnw6.js +0 -1
- package/dist/assets/erlang-B-DoSBHF.js +0 -1
- package/dist/assets/everforest-dark-BgDCqdQA.js +0 -1
- package/dist/assets/everforest-light-C8M2exoo.js +0 -1
- package/dist/assets/fennel-bCA53EVm.js +0 -1
- package/dist/assets/fish-w-ucz2PV.js +0 -1
- package/dist/assets/fluent-Dayu4EKP.js +0 -1
- package/dist/assets/fortran-fixed-form-TqA4NnZg.js +0 -1
- package/dist/assets/fortran-free-form-DKXYxT9g.js +0 -1
- package/dist/assets/fsharp-XplgxFYe.js +0 -1
- package/dist/assets/gdresource-BHYsBjWJ.js +0 -1
- package/dist/assets/gdscript-DfxzS6Rs.js +0 -1
- package/dist/assets/gdshader-SKMF96pI.js +0 -1
- package/dist/assets/genie-ajMbGru0.js +0 -1
- package/dist/assets/gherkin--30QC5Em.js +0 -1
- package/dist/assets/git-commit-i4q6IMui.js +0 -1
- package/dist/assets/git-rebase-B-v9cOL2.js +0 -1
- package/dist/assets/github-dark-DHJKELXO.js +0 -1
- package/dist/assets/github-dark-default-Cuk6v7N8.js +0 -1
- package/dist/assets/github-dark-dimmed-DH5Ifo-i.js +0 -1
- package/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -1
- package/dist/assets/github-light-DAi9KRSo.js +0 -1
- package/dist/assets/github-light-default-D7oLnXFd.js +0 -1
- package/dist/assets/github-light-high-contrast-BfjtVDDH.js +0 -1
- package/dist/assets/gleam-B430Bg39.js +0 -1
- package/dist/assets/glimmer-js-D-cwc0-E.js +0 -1
- package/dist/assets/glimmer-ts-pgjy16dm.js +0 -1
- package/dist/assets/glsl-DBO2IWDn.js +0 -1
- package/dist/assets/gnuplot-CM8KxXT1.js +0 -1
- package/dist/assets/go-B1SYOhNW.js +0 -1
- package/dist/assets/graphql-cDcHW_If.js +0 -1
- package/dist/assets/groovy-DkBy-JyN.js +0 -1
- package/dist/assets/hack-D1yCygmZ.js +0 -1
- package/dist/assets/haml-B2EZWmdv.js +0 -1
- package/dist/assets/handlebars-BQGss363.js +0 -1
- package/dist/assets/haskell-BILxekzW.js +0 -1
- package/dist/assets/haxe-C5wWYbrZ.js +0 -1
- package/dist/assets/hcl-HzYwdGDm.js +0 -1
- package/dist/assets/hjson-T-Tgc4AT.js +0 -1
- package/dist/assets/hlsl-ifBTmRxC.js +0 -1
- package/dist/assets/houston-DnULxvSX.js +0 -1
- package/dist/assets/html-C2L_23MC.js +0 -1
- package/dist/assets/html-derivative-CSfWNPLT.js +0 -1
- package/dist/assets/http-FRrOvY1W.js +0 -1
- package/dist/assets/hxml-TIA70rKU.js +0 -1
- package/dist/assets/hy-BMj5Y0dO.js +0 -1
- package/dist/assets/imba-bv_oIlVt.js +0 -1
- package/dist/assets/index-BuQ1xTdM.css +0 -1
- package/dist/assets/index-DclShbpd.js +0 -125
- package/dist/assets/ini-BjABl1g7.js +0 -1
- package/dist/assets/java-xI-RfyKK.js +0 -1
- package/dist/assets/javascript-ySlJ1b_l.js +0 -1
- package/dist/assets/jinja-DGy0s7-h.js +0 -1
- package/dist/assets/jison-BqZprYcd.js +0 -1
- package/dist/assets/json-BQoSv7ci.js +0 -1
- package/dist/assets/json5-w8dY5SsB.js +0 -1
- package/dist/assets/jsonc-TU54ms6u.js +0 -1
- package/dist/assets/jsonl-DREVFZK8.js +0 -1
- package/dist/assets/jsonnet-BfivnA6A.js +0 -1
- package/dist/assets/jssm-P4WzXJd0.js +0 -1
- package/dist/assets/jsx-BAng5TT0.js +0 -1
- package/dist/assets/julia-BBuGR-5E.js +0 -1
- package/dist/assets/kanagawa-dragon-CkXjmgJE.js +0 -1
- package/dist/assets/kanagawa-lotus-CfQXZHmo.js +0 -1
- package/dist/assets/kanagawa-wave-DWedfzmr.js +0 -1
- package/dist/assets/kotlin-B5lbUyaz.js +0 -1
- package/dist/assets/kusto-mebxcVVE.js +0 -1
- package/dist/assets/laserwave-DUszq2jm.js +0 -1
- package/dist/assets/latex-C-cWTeAZ.js +0 -1
- package/dist/assets/lean-XBlWyCtg.js +0 -1
- package/dist/assets/less-BfCpw3nA.js +0 -1
- package/dist/assets/light-plus-B7mTdjB0.js +0 -1
- package/dist/assets/liquid-D3W5UaiH.js +0 -1
- package/dist/assets/log-Cc5clBb7.js +0 -1
- package/dist/assets/logo-IuBKFhSY.js +0 -1
- package/dist/assets/lua-CvWAzNxB.js +0 -1
- package/dist/assets/luau-Du5NY7AG.js +0 -1
- package/dist/assets/make-Bvotw-X0.js +0 -1
- package/dist/assets/markdown-UIAJJxZW.js +0 -1
- package/dist/assets/marko-z0MBrx5-.js +0 -1
- package/dist/assets/material-theme-D5KoaKCx.js +0 -1
- package/dist/assets/material-theme-darker-BfHTSMKl.js +0 -1
- package/dist/assets/material-theme-lighter-B0m2ddpp.js +0 -1
- package/dist/assets/material-theme-ocean-CyktbL80.js +0 -1
- package/dist/assets/material-theme-palenight-Csfq5Kiy.js +0 -1
- package/dist/assets/matlab-D9-PGadD.js +0 -1
- package/dist/assets/mdc-DB_EDNY_.js +0 -1
- package/dist/assets/mdx-sdHcTMYB.js +0 -1
- package/dist/assets/mermaid-Ci6OQyBP.js +0 -1
- package/dist/assets/min-dark-CafNBF8u.js +0 -1
- package/dist/assets/min-light-CTRr51gU.js +0 -1
- package/dist/assets/mipsasm-BC5c_5Pe.js +0 -1
- package/dist/assets/mojo-Tz6hzZYG.js +0 -1
- package/dist/assets/monokai-D4h5O-jR.js +0 -1
- package/dist/assets/move-DB_GagMm.js +0 -1
- package/dist/assets/narrat-DLbgOhZU.js +0 -1
- package/dist/assets/nextflow-B0XVJmRM.js +0 -1
- package/dist/assets/nginx-D_VnBJ67.js +0 -1
- package/dist/assets/night-owl-C39BiMTA.js +0 -1
- package/dist/assets/nim-ZlGxZxc3.js +0 -1
- package/dist/assets/nix-shcSOmrb.js +0 -1
- package/dist/assets/nord-Ddv68eIx.js +0 -1
- package/dist/assets/nushell-D4Tzg5kh.js +0 -1
- package/dist/assets/objective-c-Deuh7S70.js +0 -1
- package/dist/assets/objective-cpp-BUEGK8hf.js +0 -1
- package/dist/assets/ocaml-BNioltXt.js +0 -1
- package/dist/assets/one-dark-pro-GBQ2dnAY.js +0 -1
- package/dist/assets/one-light-PoHY5YXO.js +0 -1
- package/dist/assets/pascal-JqZropPD.js +0 -1
- package/dist/assets/perl-CHQXSrWU.js +0 -1
- package/dist/assets/php-B5ebYQev.js +0 -1
- package/dist/assets/plastic-3e1v2bzS.js +0 -1
- package/dist/assets/plsql-LKU2TuZ1.js +0 -1
- package/dist/assets/po-BFLt1xDp.js +0 -1
- package/dist/assets/poimandres-CS3Unz2-.js +0 -1
- package/dist/assets/polar-DKykz6zU.js +0 -1
- package/dist/assets/postcss-B3ZDOciz.js +0 -1
- package/dist/assets/powerquery-CSHBycmS.js +0 -1
- package/dist/assets/powershell-BIEUsx6d.js +0 -1
- package/dist/assets/prisma-B48N-Iqd.js +0 -1
- package/dist/assets/prolog-BY-TUvya.js +0 -1
- package/dist/assets/proto-zocC4JxJ.js +0 -1
- package/dist/assets/pug-CM9l7STV.js +0 -1
- package/dist/assets/puppet-Cza_XSSt.js +0 -1
- package/dist/assets/purescript-Bg-kzb6g.js +0 -1
- package/dist/assets/python-DhUJRlN_.js +0 -1
- package/dist/assets/qml-D8XfuvdV.js +0 -1
- package/dist/assets/qmldir-C8lEn-DE.js +0 -1
- package/dist/assets/qss-DhMKtDLN.js +0 -1
- package/dist/assets/r-CwjWoCRV.js +0 -1
- package/dist/assets/racket-CzouJOBO.js +0 -1
- package/dist/assets/raku-B1bQXN8T.js +0 -1
- package/dist/assets/razor-CNLDkMZG.js +0 -1
- package/dist/assets/red-bN70gL4F.js +0 -1
- package/dist/assets/reg-5LuOXUq_.js +0 -1
- package/dist/assets/regexp-DWJ3fJO_.js +0 -1
- package/dist/assets/rel-DJlmqQ1C.js +0 -1
- package/dist/assets/riscv-QhoSD0DR.js +0 -1
- package/dist/assets/rose-pine-CmCqftbK.js +0 -1
- package/dist/assets/rose-pine-dawn-Ds-gbosJ.js +0 -1
- package/dist/assets/rose-pine-moon-CjDtw9vr.js +0 -1
- package/dist/assets/rst-4NLicBqY.js +0 -1
- package/dist/assets/ruby-DeZ3UC14.js +0 -1
- package/dist/assets/rust-Be6lgOlo.js +0 -1
- package/dist/assets/sas-BmTFh92c.js +0 -1
- package/dist/assets/sass-BJ4Li9vH.js +0 -1
- package/dist/assets/scala-DQVVAn-B.js +0 -1
- package/dist/assets/scheme-BJGe-b2p.js +0 -1
- package/dist/assets/scss-C31hgJw-.js +0 -1
- package/dist/assets/sdbl-BLhTXw86.js +0 -1
- package/dist/assets/shaderlab-B7qAK45m.js +0 -1
- package/dist/assets/shellscript-atvbtKCR.js +0 -1
- package/dist/assets/shellsession-C_rIy8kc.js +0 -1
- package/dist/assets/slack-dark-BthQWCQV.js +0 -1
- package/dist/assets/slack-ochin-DqwNpetd.js +0 -1
- package/dist/assets/smalltalk-DkLiglaE.js +0 -1
- package/dist/assets/snazzy-light-Bw305WKR.js +0 -1
- package/dist/assets/solarized-dark-DXbdFlpD.js +0 -1
- package/dist/assets/solarized-light-L9t79GZl.js +0 -1
- package/dist/assets/solidity-C1w2a3ep.js +0 -1
- package/dist/assets/soy-C-lX7w71.js +0 -1
- package/dist/assets/sparql-bYkjHRlG.js +0 -1
- package/dist/assets/splunk-Cf8iN4DR.js +0 -1
- package/dist/assets/sql-COK4E0Yg.js +0 -1
- package/dist/assets/ssh-config-BknIz3MU.js +0 -1
- package/dist/assets/stata-DorPZHa4.js +0 -1
- package/dist/assets/stylus-BeQkCIfX.js +0 -1
- package/dist/assets/svelte-MSaWC3Je.js +0 -1
- package/dist/assets/swift-BSxZ-RaX.js +0 -1
- package/dist/assets/synthwave-84-CbfX1IO0.js +0 -1
- package/dist/assets/system-verilog-C7L56vO4.js +0 -1
- package/dist/assets/systemd-CUnW07Te.js +0 -1
- package/dist/assets/talonscript-C1XDQQGZ.js +0 -1
- package/dist/assets/tasl-CQjiPCtT.js +0 -1
- package/dist/assets/tcl-DQ1-QYvQ.js +0 -1
- package/dist/assets/templ-dwX3ZSMB.js +0 -1
- package/dist/assets/terraform-BbSNqyBO.js +0 -1
- package/dist/assets/tex-rYs2v40G.js +0 -1
- package/dist/assets/tokyo-night-DBQeEorK.js +0 -1
- package/dist/assets/toml-CB2ApiWb.js +0 -1
- package/dist/assets/ts-tags-CipyTH0X.js +0 -1
- package/dist/assets/tsv-B_m7g4N7.js +0 -1
- package/dist/assets/tsx-B6W0miNI.js +0 -1
- package/dist/assets/turtle-BMR_PYu6.js +0 -1
- package/dist/assets/twig-NC5TFiHP.js +0 -1
- package/dist/assets/typescript-Dj6nwHGl.js +0 -1
- package/dist/assets/typespec-BpWG_bgh.js +0 -1
- package/dist/assets/typst-BVUVsWT6.js +0 -1
- package/dist/assets/v-CAQ2eGtk.js +0 -1
- package/dist/assets/vala-BFOHcciG.js +0 -1
- package/dist/assets/vb-CdO5JTpU.js +0 -1
- package/dist/assets/verilog-CJaU5se_.js +0 -1
- package/dist/assets/vesper-BEBZ7ncR.js +0 -1
- package/dist/assets/vhdl-DYoNaHQp.js +0 -1
- package/dist/assets/viml-m4uW47V2.js +0 -1
- package/dist/assets/vitesse-black-Bkuqu6BP.js +0 -1
- package/dist/assets/vitesse-dark-D0r3Knsf.js +0 -1
- package/dist/assets/vitesse-light-CVO1_9PV.js +0 -1
- package/dist/assets/vue-BuYVFjOK.js +0 -1
- package/dist/assets/vue-html-xdeiXROB.js +0 -1
- package/dist/assets/vyper-nyqBNV6O.js +0 -1
- package/dist/assets/wasm-C6j12Q_x.js +0 -1
- package/dist/assets/wasm-CG6Dc4jp.js +0 -1
- package/dist/assets/wenyan-7A4Fjokl.js +0 -1
- package/dist/assets/wgsl-CB0Krxn9.js +0 -1
- package/dist/assets/wikitext-DCE3LsBG.js +0 -1
- package/dist/assets/wolfram-C3FkfJm5.js +0 -1
- package/dist/assets/xml-e3z08dGr.js +0 -1
- package/dist/assets/xsl-Dd0NUgwM.js +0 -1
- package/dist/assets/yaml-CVw76BM1.js +0 -1
- package/dist/assets/zenscript-HnGAYVZD.js +0 -1
- package/dist/assets/zig-BVz_zdnA.js +0 -1
- package/server/app.js +0 -165
- package/server/app.test.js +0 -30
- package/server/bd.js +0 -227
- package/server/bd.test.js +0 -194
- package/server/cli/cli.test.js +0 -207
- package/server/cli/commands.integration.test.js +0 -148
- package/server/cli/commands.js +0 -285
- package/server/cli/commands.unit.test.js +0 -408
- package/server/cli/daemon.js +0 -340
- package/server/cli/daemon.test.js +0 -31
- package/server/cli/index.js +0 -135
- package/server/cli/open.js +0 -178
- package/server/cli/open.test.js +0 -26
- package/server/cli/usage.js +0 -49
- package/server/config.js +0 -36
- package/server/db.test.js +0 -169
- package/server/dolt-pool.js +0 -313
- package/server/dolt-queries.js +0 -764
- package/server/list-adapters.js +0 -421
- package/server/list-adapters.test.js +0 -208
- package/server/logging.js +0 -23
- package/server/registry-watcher.js +0 -200
- package/server/subscriptions.js +0 -299
- package/server/subscriptions.test.js +0 -128
- package/server/validators.js +0 -124
- package/server/watcher.js +0 -139
- package/server/watcher.test.js +0 -120
- package/server/ws.comments.test.js +0 -262
- package/server/ws.delete.test.js +0 -119
- package/server/ws.js +0 -1329
- package/server/ws.labels.test.js +0 -95
- package/server/ws.list-refresh.coalesce.test.js +0 -95
- package/server/ws.list-subscriptions.test.js +0 -403
- package/server/ws.mutation-window.test.js +0 -147
- package/server/ws.mutations.test.js +0 -389
- package/server/ws.test.js +0 -52
package/README.md
CHANGED
|
@@ -1,182 +1,123 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @rsktash/bd-web
|
|
2
2
|
|
|
3
|
-
Web UI for [
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
13
|
+
## Stack
|
|
69
14
|
|
|
70
|
-
|
|
15
|
+
- Server: Hono + `@hono/node-server`, `pg`, `better-sqlite3`
|
|
16
|
+
- Client: Vite + React 19 + TanStack Router + TanStack Query + Tailwind v4
|
|
71
17
|
|
|
72
|
-
|
|
18
|
+
## Environment
|
|
73
19
|
|
|
74
|
-
|
|
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
|
-
|
|
28
|
+
## Development
|
|
77
29
|
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
|
|
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
|
-
|
|
39
|
+
## Releases
|
|
88
40
|
|
|
89
|
-
|
|
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
|
-
```
|
|
101
|
-
|
|
43
|
+
```sh
|
|
44
|
+
git tag v0.1.1 && git push origin v0.1.1
|
|
102
45
|
```
|
|
103
46
|
|
|
104
|
-
|
|
47
|
+
That triggers two GitHub Actions:
|
|
105
48
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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
|
-
|
|
54
|
+
Bump `web/package.json` before tagging.
|
|
123
55
|
|
|
124
|
-
##
|
|
56
|
+
## Routes
|
|
125
57
|
|
|
126
|
-
|
|
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
|
-
|
|
63
|
+
The header always shows the project prefix, current user, and backend driver.
|
|
129
64
|
|
|
130
|
-
|
|
131
|
-

|
|
132
|
-
```
|
|
65
|
+
## Docker
|
|
133
66
|
|
|
134
|
-
|
|
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
|
-
|
|
70
|
+
For the **full stack** (Postgres + bd-web together), use the root-level
|
|
71
|
+
[docker-compose.yml](../docker-compose.yml):
|
|
137
72
|
|
|
138
|
-
```
|
|
139
|
-
|
|
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
|
-
|
|
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
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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
|
-
|
|
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
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
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
|
-
|
|
100
|
+
`users.json` shape:
|
|
168
101
|
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
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
|
-
|
|
111
|
+
## CLI setup (Go)
|
|
179
112
|
|
|
180
|
-
|
|
113
|
+
The companion CLI `bd` lives in this repo's [parent directory](..). Install
|
|
114
|
+
and initialise from the project README:
|
|
181
115
|
|
|
182
|
-
|
|
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
|
+
}
|