Commit graph

405 commits

Author SHA1 Message Date
Viktor Barzin
394a771b67 [beadboard] Add Dispatch-to-Agent button and prompt template
## Context

We want a one-click path from the right-panel task detail into the
claude-agent-service runner, without the user copy-pasting the bead id
into a CLI or another tab. The runner expects a self-contained prompt
that restates the bead id, title, description, acceptance criteria, and
the guard rails the agent must operate under (no push, no file edits,
no terraform/kubectl/helm). The prompt template lives in `src/lib/` so
it can be tested and reused from the server-side dispatch route.

The right-panel button needs to:
- Only appear when the bead is actionable (`open` or `in_progress`).
- Disable itself while the claude-agent-service is already busy (the
  service has a global `asyncio.Lock` — parallel dispatches 409).
- Disable itself when the bead lacks acceptance criteria. An agent that
  doesn't know what "done" looks like burns budget and closes nothing.
- Surface the resulting `job_id` or any 409/error back to the user.

The project has no toast library (no `sonner`, no `react-hot-toast`), so
we render status inline under the button rather than pulling in a new
dependency for this single surface.

## This change

- `src/lib/dispatch-prompt.ts` exports `buildDispatchPrompt(bead)` which
  produces the exact prompt the agent runner expects. Bead id, priority
  (`P<n>`), issue type, description, and acceptance criteria are
  interpolated; `<job_id>` stays a literal placeholder because the agent
  only learns its own id at runtime (env var).
- `src/components/shared/dispatch-button.tsx` is a focused client
  component with three responsibilities:
    1. Poll `GET /api/agent-status` every 5 s while the panel is open
       (plus an initial fetch on mount), mirror `busy` into local state.
    2. On click, `POST /api/agent-dispatch` with `{taskId}`; branch on
       200 / 409 / other.
    3. Render an inline status line under the button (`text-xs`, tone
       driven by `ok | info | error`) — no toast dep required.
  The poll interval self-clears on unmount so closing the panel stops
  network traffic.
- `src/components/shared/thread-drawer.tsx` renders `<DispatchButton>`
  alongside the existing "Edit task" button in the summary section,
  wrapped in a `flex-wrap` so the two controls reflow on narrow panes.
- Registers two new tests in `package.json`'s enumerated test script.

## What is NOT in this change

- The `/api/agent-dispatch` and `/api/agent-status` routes themselves —
  those land in the next commit. The button calls them but the server
  side is intentionally a separate step so each commit can be reviewed
  in isolation.
- No real toast system is introduced; inline status is sufficient.
- No change to how task state transitions on dispatch. The agent itself
  is expected to run `bd update --claim` / `bd close` via the prompt's
  operating rules.

## Test Plan

### Automated

```
$ node --import tsx --test tests/lib/dispatch-prompt.test.ts \
    tests/components/shared/dispatch-button.test.tsx
# tests 7 pass 7 fail 0
```

Covers:
- Bead id appears in opening paragraph and in both `bd note` / `bd close`
  commands.
- Priority rendered as `P<n>`, issue type echoed.
- Description and acceptance criteria quoted verbatim when present.
- `(no description)` / `(no acceptance criteria)` fallbacks when null.
- Guard rails block present (no terraform/kubectl/helm, workspace bd
  path, `bd update … --status blocked` fallback).
- DispatchButton module loads and exports both named and default.

`npm run typecheck` shows only the pre-existing `OrchestratorChatMessage`
type gap in `left-panel.tsx` that reproduces on untouched `main`.

### Manual Verification

1. `npm install`
2. `npm run dev`
3. Open `http://localhost:3000/?task=<some-open-bead-id>`
4. Expected: "Dispatch to Agent" button next to "Edit task" in the
   right-panel summary section.
5. Button disabled on beads with `status in {closed, blocked, deferred}`
   (they don't render the button at all).
6. Button disabled on beads missing acceptance criteria, with tooltip
   "Task is missing acceptance criteria — cannot dispatch.".
7. Click: UI flips to "Dispatching…"; once the next commit is merged,
   the agent-dispatch route will surface a `job_id` (today it returns
   404 which renders as "Dispatch failed (HTTP 404)").

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 14:04:34 +00:00
Viktor Barzin
845e90d7c0 [beadboard] Add quality filters for acceptance criteria and description length
## Context

The left-panel task list surfaces every bead regardless of whether the task
has been specified thoroughly enough for an agent to pick it up. Tasks with
empty `acceptance_criteria` or very short descriptions are low-signal noise
that muddles the navigation spine — especially now that we plan to dispatch
tasks to Claude agents (which need concrete instructions to succeed).

Epics are deliberately exempt: their role is grouping, not execution, so
requiring acceptance criteria / long descriptions on epics would hide the
entire backbone of the navigation.

## This change

- Plumbs `acceptance_criteria` end-to-end: adds the optional field on
  `BeadIssue`, and reads it both from `.beads/issues.jsonl` (parser) and
  Dolt SQL (`read-issues-dolt.ts` row shape + normalizer).
- Extends `LeftPanelFilters` with `hideNoAcceptance` and
  `hideShortDescription` (both default `true`) in the source-of-truth
  `hooks/use-url-state.ts` and in the re-exported shadow type on
  `components/shared/left-panel.tsx`.
- Updates `isTaskMatch` in both `left-panel.tsx` and `left-panel-new.tsx`
  to skip non-epic tasks lacking acceptance criteria or with a description
  shorter than `SHORT_DESCRIPTION_MIN_LENGTH` (200 chars). Epics bypass
  both filters via the `issue_type === 'epic'` guard.
- Exposes `isTaskMatch` from `left-panel.tsx` so the filter tests can
  assert behavior directly (previously only `shouldHideEpicEntry` was
  exported).
- Adds two checkboxes under the existing "Hide Closed" button in both
  left-panel variants (legacy `left-panel.tsx` and the one unified-shell
  currently wires up — `left-panel-new.tsx`).
- Seeds both new filter flags as `true` in the `UnifiedShell` default
  state so fresh sessions see the high-signal view without toggling.

## What is NOT in this change

- No mutation of `bd` / CLI behavior. Filters are purely UI-level.
- No localStorage persistence for the two new flags — existing
  `hideClosed` is also React-only, so parity is preserved. If/when we
  persist any of these, all three move together.
- No change to the `metadata.acceptance` path used by `kanban.ts`'s
  `hasQualitySignal` — that's a separate signal with its own callers.

## Test Plan

### Automated

Tests run from `/home/wizard/code/beadboard`:

```
$ node --import tsx --test tests/components/shared/left-panel-filtering.test.ts
# tests 15
# pass 15
# fail 0
# duration_ms 604
```

All 15 filter cases pass: 6 pre-existing `shouldHideEpicEntry` cases plus
9 new `isTaskMatch` cases covering acceptance-criteria-empty hides,
acceptance-criteria-disabled shows, epic exemption, 199/200-char
description boundary, null description, and short-description flag
disabled.

Related suites still green:

```
$ node --import tsx --test tests/components/shared/left-panel.test.tsx \
    tests/components/shared/unified-shell-hide-closed-contract.test.ts
# tests 7 pass 7 fail 0
```

Pre-existing failures in `tests/hooks/url-state-integration.test.ts`
(`view=activity` cases) and one pre-existing typecheck error in
`left-panel.tsx` thread prop are unrelated — both reproduce on `main`
before this change.

### Manual Verification

1. `npm install`
2. `npm run dev`
3. Open `http://localhost:3000` with bd project loaded.
4. Expected: two new checkboxes appear under "Hide Closed" in the left
   sidebar — "Hide tasks without acceptance criteria" and
   "Hide tasks with short description (<200 chars)". Both checked by
   default.
5. Toggle each off. Expected: additional beads appear in epic expansions
   (tasks that were previously hidden because they lack quality signal).
6. Confirm epics remain visible regardless of the checkbox state.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 14:00:51 +00:00
zenchantlive
9993738b29
Update CONTRIBUTING.md
typo
2026-03-29 13:37:46 -07:00
zenchantlive
90097b9ae3
Update CONTRIBUTING.md
fork not clone
2026-03-29 13:35:53 -07:00
zenchantlive
cd4f2ba9cf
Revise installation section in README.md
Updated installation instructions and prerequisites for BeadBoard, including new commands and clarification on the beadboard-driver skill.
2026-03-27 18:35:24 -07:00
zenchantlive
c85c8660ae
Merge pull request #26 from zenchantlive/docs/cleanup-junk-files
Docs/cleanup junk files
2026-03-25 23:52:24 -05:00
zenchantlive
f0b4875c47 chore: recreate orchestrator backlog with proper bead naming and descriptions
Deleted auto-named beads and recreated with beadboard-<epic>.x convention
per AGENTS.md. Each task has a full description following the bead prompting
guide: Goal, Success Criteria, Scope, Out of Scope, Verification Requirements.

Epic 1 — Core Reliability (beadboard-0cf):
  0cf.1: Replace event-based chat with conversation turns (P0)
  0cf.2: Persist orchestrator state to disk (P0)
  0cf.3: Replace execFileSync with async (P0)
  0cf.4: Context window management (P1)
  0cf.5: Integration tests (P1, depends on 0cf.1 + 0cf.2)

Epic 2 — Orchestrator UX (beadboard-1zb):
  1zb.1: Onboarding / suggested prompts (P0)
  1zb.2: BLOCKED notification (P0)
  1zb.3: Stop worker / restart orchestrator (P0)
  1zb.4: Plan visibility / template pipeline (P1)
  1zb.5: Launch from graph view (P1)
  1zb.6: Retry failed workers (P1)
  1zb.7: Chat panel expand / fullscreen (P2)
  1zb.8: Settings surface (P2)

Epic 3 — Agent Visibility (beadboard-7gx):
  7gx.1: Real agent activity detail (P1)
  7gx.2: Agent presence on graph nodes (P2)
  7gx.3: Direct worker communication (P2)

Epic 4 — Dolt History (beadboard-6rp):
  6rp.1: Session replay via Dolt diffs (P1)
  6rp.2: Rollback agent work (P1, depends on 6rp.1)
  6rp.3: Session history from Dolt log (P1)
  6rp.4: Output review surface (P1, depends on 6rp.1)
  6rp.5: Dolt audit trail in activity view (P2)
  6rp.6: Cost / token visibility (P1)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 23:15:36 -05:00
zenchantlive
5d2e147ca9 chore: create orchestrator backlog — 4 epics, 27 beads
Epic 1: Core Reliability (P0) — beadboard-0cf
  9 children: chat projection, persistence, async subprocess, context mgmt,
  integration tests, + existing bugs (sen, 4v7, 28z, bnx)

Epic 2: Orchestrator UX (P1) — beadboard-1zb
  9 children: onboarding, plan visibility, BLOCKED notification, graph launch,
  chat expand, stop/restart, retry, settings, + silent failures (cho)

Epic 3: Agent Visibility (P1) — beadboard-7gx
  3 children: activity detail, graph presence, direct worker communication

Epic 4: Dolt History Integration (P2) — beadboard-6rp
  6 children: session replay, rollback, session history, review surface,
  audit trail, cost visibility

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 20:19:52 -05:00
zenchantlive
efb6b06588
Merge pull request #24 from zenchantlive/docs/cleanup-junk-files
Docs/cleanup junk files
2026-03-25 11:10:07 -05:00
zenchantlive
2125431ab8 chore: swap Discord for GitHub Discussions
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 00:48:04 -05:00
zenchantlive
f29c0e3cba feat: add CONTRIBUTING.md, GitHub Issue templates, contrib:open label convention
CONTRIBUTING.md:
- Two tracks: humans (GitHub flow) and agents (beadboard-driver + bd)
- Copy-pasteable agent instructions for quick setup
- PR size guidelines (under 100 lines preferred, 200+ needs issue first)
- Quality gates, claim workflow, professional conduct expectations
- beadboard-driver and bd setup for agent contributors

GitHub Issue templates:
- Bug report: structured fields (steps, platform, Dolt status, versions)
- Feature request: problem/proposal/area, opt-in to implement
- Config: links to Discord and contrib:open issue filter

contrib:open labels:
- Tagged 4 orchestrator beads for community contribution
- Left session race condition (beadboard-4v7) as internal

README:
- Updated banner to link to CONTRIBUTING.md
- Updated Contributing section with Discord link and contrib:open workflow

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 00:23:05 -05:00
zenchantlive
4bc24bc160
Merge branch 'main' into docs/cleanup-junk-files 2026-03-24 21:30:12 -05:00
zenchantlive
4c9a1786db
Fix formatting and clarify installation instructions 2026-03-24 21:24:06 -05:00
zenchantlive
078acd6b57 docs: comprehensive README rewrite — keep everything good, fix dupes, add missing pieces
Starting from Jordan's edited version on main:
- Fixed 3 duplicate sections (Quick Start, Add to Agent, Install)
- Fixed broken markdown (unclosed code block)
- Fixed orchestrator banner typos
- Added full bb CLI commands (agent register/send/inbox/reserve/release, daemon tui)
- Added work reservation system with liveness-aware conflict resolution
- Added templates (feature-dev, bug-fix, full-squad, greenfield, etc.)
- Added capability-gated agent types
- Added bb-pi orchestrator section with honest WIP status
- Added Dolt section framed as recommended
- Added cross-platform support
- Added human-sounding agent instructions
- Added emojis for section scanning
- Updated architecture diagram to show bb CLI layer
- Described beadboard-driver as 9-step operating contract

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 21:10:39 -05:00
zenchantlive
5537e22174 docs: sharpen README — lead with the problem, frame Dolt as recommended
- Hero screenshot + "who's watching your agents" hook at top
- Dolt promoted from optional footnote to recommended with install commands
- bb-pi section leads with vision before construction status
- Agent-first framing moved higher
- Trimmed to 248 lines, no duplicates, no filler

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 20:37:32 -05:00
zenchantlive
fabd748833 docs: rewrite README + add under-construction banner to orchestrator panel
README.md:
- Remove duplicate sections, stale info, and broken markdown
- Add bb-pi orchestrator section with honest WIP status and known issues
- Clarify bd vs bb/beadboard CLI distinction
- Add cross-platform support section (Windows, macOS, Linux)
- Note Dolt as optional, document JSONL fallback
- Reference Pi SDK and community tools listing

orchestrator-panel.tsx:
- Add amber "Under construction" banner with link to track progress
- Visible on every orchestrator panel render

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 20:33:15 -05:00
zenchantlive
e96eccf6c5
Update README.md 2026-03-24 19:14:52 -05:00
zenchantlive
7e2a0deb62
Update README with current status of Orchastrator 2026-03-24 19:11:48 -05:00
zenchantlive
fc44142a0e
Merge pull request #23 from zenchantlive/docs/cleanup-junk-files
fix: orchestrator button + Pi SDK session error
2026-03-24 19:07:50 -05:00
zenchantlive
d6f73ce979 fix: restore JSONL fallback when Dolt is unavailable
readIssuesFromDisk was throwing when Dolt was unreachable instead of
falling back to .beads/issues.jsonl on disk. This broke the app for
users without Dolt installed.

Restores the JSONL fallback path: try Dolt first, then read from the
git-tracked JSONL file, return empty array if neither is available.

Fixes #22

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 19:07:19 -05:00
zenchantlive
203203fb9f chore: track orchestrator bugs as beads (WIP)
Created beads for known orchestrator issues discovered during Mac onboarding:
- beadboard-sen: double-reply rendering
- beadboard-cho: silent failures in UX
- beadboard-4v7: session race condition
- beadboard-bnx: clawdbot path cleanup
- beadboard-28z: unbounded event array

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 19:03:29 -05:00
zenchantlive
5c074935d7 fix: repair beads database for macOS — remove stale Dolt port, fix comment ID types
- Remove deprecated dolt_server_port from metadata.json (stale Windows value causing auto-start suppression)
- Convert numeric comment IDs to strings in issues.jsonl (bd 0.61.0 schema requirement)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 19:02:45 -05:00
zenchantlive
c5d255f816 bd init: initialize beads issue tracking 2026-03-24 19:02:04 -05:00
zenchantlive
5f6e5b610a beads back 2026-03-24 19:02:04 -05:00
zenchantlive
d335e5bf71 fix: orchestrator button + Pi SDK session error
- Move leftSidebarMode from URL state to local useState in unified-shell,
    avoiding force-dynamic router round-trip that made the button appear broken                                           - Replace fileURLToPath(new URL(..., import.meta.url)) with process.cwd()
    in bb-pi-bootstrap.ts — import.meta.url is a webpack:// URL in Next.js,
    causing cross-realm TypeError when passed to Node.js fileURLToPath()
2026-03-24 19:02:04 -05:00
zenchantlive
643fa299dd bd: backup 2026-03-16 03:38 2026-03-24 19:01:45 -05:00
zenchantlive
dca6bd6ff1 bd: backup 2026-03-14 19:04 2026-03-24 19:01:45 -05:00
zenchantlive
c515d40bdc bd: backup 2026-03-11 02:03 2026-03-24 19:01:45 -05:00
zenchantlive
040e936ae2 bd: backup 2026-03-11 01:48 2026-03-24 19:01:45 -05:00
zenchantlive
c6203494d8 bd: backup 2026-03-11 01:12 2026-03-24 19:01:45 -05:00
zenchantlive
3a467ef753 bd: backup 2026-03-11 00:31 2026-03-24 19:01:45 -05:00
zenchantlive
67dbd7b446 bd: backup 2026-03-10 22:08 2026-03-24 19:01:45 -05:00
zenchantlive
273b6a113d bd: backup 2026-03-10 20:36 2026-03-24 19:01:45 -05:00
zenchantlive
d3da37e5c8 bd: backup 2026-03-10 01:23 2026-03-24 19:01:45 -05:00
zenchantlive
189e19335d bd: backup 2026-03-10 01:00 2026-03-24 19:01:45 -05:00
zenchantlive
7ac90238c3 bd: backup 2026-03-06 06:33 2026-03-24 19:01:45 -05:00
zenchantlive
23e15bf61b
Merge pull request #21 from cognovis/feat/linux-support
feat: add Linux/macOS support for pathing, registry, and project scope
2026-03-24 19:01:16 -05:00
zenchantlive
523fe6e354
Correct capitalization in README status message 2026-03-24 17:55:34 -05:00
zenchantlive
3b5b015586
Add temporary notice about ongoing fixes 2026-03-24 17:55:05 -05:00
Malte Sussdorff
1cf007a800 feat: add Linux/macOS support for pathing, registry, and project scope
- pathing.ts: use path.resolve() on POSIX instead of win32.normalize
- registry.ts: replace ensureWindowsAbsolutePath with path.isAbsolute()
- Tests: platform-conditional assertions for both Windows and POSIX
- Windows behavior preserved unchanged via os.platform() guard

All 17 tests pass on macOS. Windows tests guarded behind IS_WINDOWS.
2026-03-22 12:48:56 +01:00
zenchantlive
b3956b31ce
Revise BeadBoard integration section
Updated BeadBoard integration instructions in README.
2026-03-05 17:53:30 -08:00
zenchantlive
03efa10e28
Merge pull request #19 from zenchantlive/docs/cleanup-junk-files
chore: remove junk files from repository root
2026-03-05 17:51:14 -08:00
zenchantlive
bea2487816 chore: remove junk files from repository root 2026-03-05 17:47:51 -08:00
zenchantlive
a25fbfc9d0
Merge pull request #18 from zenchantlive/docs/update-readme-no-npm
docs: update README to reflect no npm publish yet
2026-03-05 17:41:00 -08:00
zenchantlive
09f407e3db
Update README.md
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-05 17:40:49 -08:00
zenchantlive
457d819204 docs: update README to reflect no npm publish yet
- Remove npm version badge (not published)
- Update installation instructions to clone + npm install -g .
- Add note that BeadBoard is not on npm yet
2026-03-05 17:38:10 -08:00
zenchantlive
a82855bb32
Merge pull request #17 from zenchantlive/feat/bb-mail
chore: Remove runtime artifacts from git tracking
2026-03-05 17:30:46 -08:00
zenchantlive
7c4c5f46f3 chore: Remove runtime artifacts from git tracking
This commit removes the following directories from git tracking (not from disk):
- .agent/ - AI tool configs
- .agents/ - Agent skills
- .augment/ - Augment AI
- .beads/ - Runtime database
- .claude/ - Claude AI configs
- .cline/ - Cline AI configs
- .openhands/ - OpenHands AI
- .dolt/ - Dolt database

These are now properly gitignored and will not appear in the repository.
This is a MASSIVE cleanup removing 1500+ files from version control.
2026-03-05 17:25:09 -08:00
zenchantlive
e594bc4244 chore: Repository cleanup and honest installation
- Move screenshots to docs/screenshots/
- Remove build artifacts (eslint-report.json, tsconfig.tsbuildinfo, out/)
- Remove temporary test files from root
- Update .gitignore with comprehensive patterns
- Update README with honest git clone installation
- Professional repository structure
2026-03-05 17:16:43 -08:00
zenchantlive
a28caeb461 chore: Organize repository structure
- Move screenshots from root to docs/screenshots/
- Remove build artifacts (eslint-report.json, tsconfig.tsbuildinfo, out/)
- Remove temporary test files from root (test-sse.mjs, test-watcher.ts)
- Remove tmp/ directory
- Update .gitignore with comprehensive patterns:
  - Build artifacts (eslint-report.json, tsconfig.tsbuildinfo, out/)
  - Temporary files (tmp/, test-*.mjs, test-*.ts, *.tmp, *.temp)
  - Root image files (should be in docs/screenshots/)
  - AI tool directories (.augment/, .claude/, .cline/, .openhands/, .qodo/, .gemini/, .kilocode/)
- Update README image references to new locations

This cleanup makes the repository structure more professional and organized.
2026-03-05 17:09:25 -08:00