@citadel-labs/beads-ui 1.0.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.
- package/LICENSE +21 -0
- package/README.md +69 -0
- package/bin/beads-board.js +71 -0
- package/package.json +13 -0
- package/server/dist/assets/index-C62XoEh1.js +49 -0
- package/server/dist/assets/index-DXoLXViw.css +1 -0
- package/server/dist/index.html +14 -0
- package/server/dist/vite.svg +1 -0
- package/server/index.js +231 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Stuart Rimel
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# beads-board
|
|
2
|
+
|
|
3
|
+
A minimal kanban dashboard and git log viewer for [Beads](https://github.com/steveyegge/beads). Works standalone as a CLI tool or as a Claude Code plugin.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Kanban board** — Issues organized by status: Ready, In Progress, Blocked, Done
|
|
8
|
+
- **Git log** — Scrollable commit history with branch selector
|
|
9
|
+
- **Bead ID linking** — Bead IDs in commit messages are highlighted as badges
|
|
10
|
+
- **Dark/light theme** — Toggle between themes, dark by default
|
|
11
|
+
- **Auto-refresh** — Polls for updates every 5 seconds
|
|
12
|
+
- **Zero runtime dependencies** — Server uses only Node.js stdlib
|
|
13
|
+
|
|
14
|
+
## Quick Start
|
|
15
|
+
|
|
16
|
+
### Standalone CLI (works with any editor)
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Install globally
|
|
20
|
+
npm install -g @citadel-labs/beads-ui
|
|
21
|
+
|
|
22
|
+
# Or run directly with npx (installs temporarily)
|
|
23
|
+
npx @citadel-labs/beads-ui
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Then from any project that uses [Beads](https://github.com/steveyegge/beads):
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
cd /path/to/your/project
|
|
30
|
+
bdui # Start dashboard for current directory
|
|
31
|
+
bdui /path/to/project # Or specify a project directory
|
|
32
|
+
bdui --port 9000 # Custom port
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Open **http://localhost:8377** in your browser. The server auto-detects an available port and reuses an existing instance if one is already running.
|
|
36
|
+
|
|
37
|
+
### As a Claude Code Plugin
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# Install from local directory
|
|
41
|
+
claude --plugin-dir /path/to/beads-board
|
|
42
|
+
|
|
43
|
+
# Then in any project with .beads/
|
|
44
|
+
/beads-board:start # Start the dashboard server
|
|
45
|
+
/beads-board:stop # Stop it
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
The plugin auto-detects `.beads/` in your project. If your project doesn't use Beads, it will let you know.
|
|
49
|
+
|
|
50
|
+
## How It Works
|
|
51
|
+
|
|
52
|
+
The server shells out to `bd` and `git` CLI commands to fetch data, then serves a React dashboard that polls the API every 5 seconds. No direct database access — all data flows through the Beads CLI.
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
Browser → GET /api/* → Node.js server → bd/git CLI → JSON response
|
|
56
|
+
← React app ← server/dist/
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
See [docs/architecture.md](docs/architecture.md) for details.
|
|
60
|
+
|
|
61
|
+
## Documentation
|
|
62
|
+
|
|
63
|
+
- [Architecture](docs/architecture.md) — How the server, UI, and plugin fit together
|
|
64
|
+
- [API Reference](docs/api.md) — All API endpoints with examples
|
|
65
|
+
- [Contributing](docs/contributing.md) — How to set up a dev environment and make changes
|
|
66
|
+
|
|
67
|
+
## License
|
|
68
|
+
|
|
69
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const path = require('node:path');
|
|
4
|
+
const fs = require('node:fs');
|
|
5
|
+
|
|
6
|
+
const args = process.argv.slice(2);
|
|
7
|
+
|
|
8
|
+
// --help
|
|
9
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
10
|
+
console.log(`bdui — Kanban dashboard and git log viewer for Beads
|
|
11
|
+
|
|
12
|
+
Usage:
|
|
13
|
+
bdui [project-dir] [options]
|
|
14
|
+
|
|
15
|
+
Options:
|
|
16
|
+
--port <port> Port to listen on (default: 8377)
|
|
17
|
+
--help, -h Show this help message
|
|
18
|
+
--version, -v Show version number
|
|
19
|
+
|
|
20
|
+
Examples:
|
|
21
|
+
bdui # Use current directory
|
|
22
|
+
bdui /path/to/project # Specify project directory
|
|
23
|
+
bdui --port 9000 # Custom port`);
|
|
24
|
+
process.exit(0);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// --version
|
|
28
|
+
if (args.includes('--version') || args.includes('-v')) {
|
|
29
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8'));
|
|
30
|
+
console.log(pkg.version);
|
|
31
|
+
process.exit(0);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Parse --port
|
|
35
|
+
let customPort = null;
|
|
36
|
+
const portIdx = args.indexOf('--port');
|
|
37
|
+
if (portIdx !== -1) {
|
|
38
|
+
customPort = args[portIdx + 1];
|
|
39
|
+
if (!customPort || isNaN(parseInt(customPort, 10))) {
|
|
40
|
+
console.error('Error: --port requires a numeric value');
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
args.splice(portIdx, 2);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Remaining arg is the project directory
|
|
47
|
+
const projectDir = args[0] ? path.resolve(args[0]) : process.cwd();
|
|
48
|
+
|
|
49
|
+
// Validate project directory exists
|
|
50
|
+
if (!fs.existsSync(projectDir)) {
|
|
51
|
+
console.error(`Error: directory not found: ${projectDir}`);
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Check for .beads/ directory
|
|
56
|
+
if (!fs.existsSync(path.join(projectDir, '.beads'))) {
|
|
57
|
+
console.error(`Error: no .beads/ directory found in ${projectDir}`);
|
|
58
|
+
console.error('This project does not appear to use Beads issue tracking.');
|
|
59
|
+
console.error('See https://github.com/steveyegge/beads to get started.');
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Set PORT env var if custom port specified, then delegate to server
|
|
64
|
+
if (customPort) {
|
|
65
|
+
process.env.PORT = customPort;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Rewrite process.argv so server/index.js sees the project dir
|
|
69
|
+
process.argv = [process.argv[0], __filename, projectDir];
|
|
70
|
+
|
|
71
|
+
require(path.join(__dirname, '..', 'server', 'index.js'));
|
package/package.json
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@citadel-labs/beads-ui",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Kanban dashboard and git log viewer for Beads",
|
|
5
|
+
"bin": {
|
|
6
|
+
"bdui": "bin/beads-board.js"
|
|
7
|
+
},
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "cd ui && npm run build",
|
|
10
|
+
"start": "node server/index.js"
|
|
11
|
+
},
|
|
12
|
+
"license": "MIT"
|
|
13
|
+
}
|