@sienklogic/plan-build-run 2.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/CHANGELOG.md +56 -0
- package/CLAUDE.md +149 -0
- package/LICENSE +21 -0
- package/README.md +247 -0
- package/dashboard/bin/cli.js +25 -0
- package/dashboard/package.json +34 -0
- package/dashboard/public/.gitkeep +0 -0
- package/dashboard/public/css/layout.css +406 -0
- package/dashboard/public/css/status-colors.css +98 -0
- package/dashboard/public/js/htmx-title.js +5 -0
- package/dashboard/public/js/sidebar-toggle.js +20 -0
- package/dashboard/src/app.js +78 -0
- package/dashboard/src/middleware/errorHandler.js +52 -0
- package/dashboard/src/middleware/notFoundHandler.js +9 -0
- package/dashboard/src/repositories/planning.repository.js +128 -0
- package/dashboard/src/routes/events.routes.js +40 -0
- package/dashboard/src/routes/index.routes.js +31 -0
- package/dashboard/src/routes/pages.routes.js +195 -0
- package/dashboard/src/server.js +42 -0
- package/dashboard/src/services/dashboard.service.js +222 -0
- package/dashboard/src/services/phase.service.js +167 -0
- package/dashboard/src/services/project.service.js +57 -0
- package/dashboard/src/services/roadmap.service.js +171 -0
- package/dashboard/src/services/sse.service.js +58 -0
- package/dashboard/src/services/todo.service.js +254 -0
- package/dashboard/src/services/watcher.service.js +48 -0
- package/dashboard/src/views/coming-soon.ejs +11 -0
- package/dashboard/src/views/error.ejs +13 -0
- package/dashboard/src/views/index.ejs +5 -0
- package/dashboard/src/views/layout.ejs +1 -0
- package/dashboard/src/views/partials/dashboard-content.ejs +77 -0
- package/dashboard/src/views/partials/footer.ejs +3 -0
- package/dashboard/src/views/partials/head.ejs +21 -0
- package/dashboard/src/views/partials/header.ejs +12 -0
- package/dashboard/src/views/partials/layout-bottom.ejs +15 -0
- package/dashboard/src/views/partials/layout-top.ejs +8 -0
- package/dashboard/src/views/partials/phase-content.ejs +181 -0
- package/dashboard/src/views/partials/phases-content.ejs +117 -0
- package/dashboard/src/views/partials/roadmap-content.ejs +142 -0
- package/dashboard/src/views/partials/sidebar.ejs +38 -0
- package/dashboard/src/views/partials/todo-create-content.ejs +53 -0
- package/dashboard/src/views/partials/todo-detail-content.ejs +38 -0
- package/dashboard/src/views/partials/todos-content.ejs +53 -0
- package/dashboard/src/views/phase-detail.ejs +5 -0
- package/dashboard/src/views/phases.ejs +5 -0
- package/dashboard/src/views/roadmap.ejs +5 -0
- package/dashboard/src/views/todo-create.ejs +5 -0
- package/dashboard/src/views/todo-detail.ejs +5 -0
- package/dashboard/src/views/todos.ejs +5 -0
- package/package.json +57 -0
- package/plugins/pbr/.claude-plugin/plugin.json +13 -0
- package/plugins/pbr/UI-CONSISTENCY-GAPS.md +61 -0
- package/plugins/pbr/agents/codebase-mapper.md +271 -0
- package/plugins/pbr/agents/debugger.md +281 -0
- package/plugins/pbr/agents/executor.md +407 -0
- package/plugins/pbr/agents/general.md +164 -0
- package/plugins/pbr/agents/integration-checker.md +141 -0
- package/plugins/pbr/agents/plan-checker.md +280 -0
- package/plugins/pbr/agents/planner.md +358 -0
- package/plugins/pbr/agents/researcher.md +363 -0
- package/plugins/pbr/agents/synthesizer.md +230 -0
- package/plugins/pbr/agents/verifier.md +454 -0
- package/plugins/pbr/commands/begin.md +5 -0
- package/plugins/pbr/commands/build.md +5 -0
- package/plugins/pbr/commands/config.md +5 -0
- package/plugins/pbr/commands/continue.md +5 -0
- package/plugins/pbr/commands/debug.md +5 -0
- package/plugins/pbr/commands/discuss.md +5 -0
- package/plugins/pbr/commands/explore.md +5 -0
- package/plugins/pbr/commands/health.md +5 -0
- package/plugins/pbr/commands/help.md +5 -0
- package/plugins/pbr/commands/import.md +5 -0
- package/plugins/pbr/commands/milestone.md +5 -0
- package/plugins/pbr/commands/note.md +5 -0
- package/plugins/pbr/commands/pause.md +5 -0
- package/plugins/pbr/commands/plan.md +5 -0
- package/plugins/pbr/commands/quick.md +5 -0
- package/plugins/pbr/commands/resume.md +5 -0
- package/plugins/pbr/commands/review.md +5 -0
- package/plugins/pbr/commands/scan.md +5 -0
- package/plugins/pbr/commands/setup.md +5 -0
- package/plugins/pbr/commands/status.md +5 -0
- package/plugins/pbr/commands/todo.md +5 -0
- package/plugins/pbr/contexts/dev.md +27 -0
- package/plugins/pbr/contexts/research.md +28 -0
- package/plugins/pbr/contexts/review.md +36 -0
- package/plugins/pbr/hooks/hooks.json +183 -0
- package/plugins/pbr/references/agent-anti-patterns.md +24 -0
- package/plugins/pbr/references/agent-interactions.md +134 -0
- package/plugins/pbr/references/agent-teams.md +54 -0
- package/plugins/pbr/references/checkpoints.md +157 -0
- package/plugins/pbr/references/common-bug-patterns.md +13 -0
- package/plugins/pbr/references/continuation-format.md +212 -0
- package/plugins/pbr/references/deviation-rules.md +112 -0
- package/plugins/pbr/references/git-integration.md +226 -0
- package/plugins/pbr/references/integration-patterns.md +117 -0
- package/plugins/pbr/references/model-profiles.md +99 -0
- package/plugins/pbr/references/model-selection.md +31 -0
- package/plugins/pbr/references/pbr-rules.md +193 -0
- package/plugins/pbr/references/plan-authoring.md +181 -0
- package/plugins/pbr/references/plan-format.md +283 -0
- package/plugins/pbr/references/planning-config.md +213 -0
- package/plugins/pbr/references/questioning.md +214 -0
- package/plugins/pbr/references/reading-verification.md +127 -0
- package/plugins/pbr/references/stub-patterns.md +160 -0
- package/plugins/pbr/references/subagent-coordination.md +119 -0
- package/plugins/pbr/references/ui-formatting.md +399 -0
- package/plugins/pbr/references/verification-patterns.md +198 -0
- package/plugins/pbr/references/wave-execution.md +95 -0
- package/plugins/pbr/scripts/auto-continue.js +80 -0
- package/plugins/pbr/scripts/check-dangerous-commands.js +136 -0
- package/plugins/pbr/scripts/check-doc-sprawl.js +102 -0
- package/plugins/pbr/scripts/check-phase-boundary.js +196 -0
- package/plugins/pbr/scripts/check-plan-format.js +270 -0
- package/plugins/pbr/scripts/check-roadmap-sync.js +252 -0
- package/plugins/pbr/scripts/check-skill-workflow.js +262 -0
- package/plugins/pbr/scripts/check-state-sync.js +476 -0
- package/plugins/pbr/scripts/check-subagent-output.js +144 -0
- package/plugins/pbr/scripts/config-schema.json +251 -0
- package/plugins/pbr/scripts/context-budget-check.js +287 -0
- package/plugins/pbr/scripts/event-handler.js +151 -0
- package/plugins/pbr/scripts/event-logger.js +92 -0
- package/plugins/pbr/scripts/hook-logger.js +76 -0
- package/plugins/pbr/scripts/hooks-schema.json +79 -0
- package/plugins/pbr/scripts/log-subagent.js +152 -0
- package/plugins/pbr/scripts/log-tool-failure.js +88 -0
- package/plugins/pbr/scripts/pbr-tools.js +1301 -0
- package/plugins/pbr/scripts/post-write-dispatch.js +66 -0
- package/plugins/pbr/scripts/post-write-quality.js +207 -0
- package/plugins/pbr/scripts/pre-bash-dispatch.js +56 -0
- package/plugins/pbr/scripts/pre-write-dispatch.js +62 -0
- package/plugins/pbr/scripts/progress-tracker.js +228 -0
- package/plugins/pbr/scripts/session-cleanup.js +254 -0
- package/plugins/pbr/scripts/status-line.js +285 -0
- package/plugins/pbr/scripts/suggest-compact.js +119 -0
- package/plugins/pbr/scripts/task-completed.js +45 -0
- package/plugins/pbr/scripts/track-context-budget.js +119 -0
- package/plugins/pbr/scripts/validate-commit.js +200 -0
- package/plugins/pbr/scripts/validate-plugin-structure.js +172 -0
- package/plugins/pbr/skills/begin/SKILL.md +545 -0
- package/plugins/pbr/skills/begin/templates/PROJECT.md.tmpl +33 -0
- package/plugins/pbr/skills/begin/templates/REQUIREMENTS.md.tmpl +18 -0
- package/plugins/pbr/skills/begin/templates/STATE.md.tmpl +49 -0
- package/plugins/pbr/skills/begin/templates/config.json.tmpl +63 -0
- package/plugins/pbr/skills/begin/templates/researcher-prompt.md.tmpl +19 -0
- package/plugins/pbr/skills/begin/templates/roadmap-prompt.md.tmpl +30 -0
- package/plugins/pbr/skills/begin/templates/synthesis-prompt.md.tmpl +16 -0
- package/plugins/pbr/skills/build/SKILL.md +962 -0
- package/plugins/pbr/skills/config/SKILL.md +241 -0
- package/plugins/pbr/skills/continue/SKILL.md +127 -0
- package/plugins/pbr/skills/debug/SKILL.md +489 -0
- package/plugins/pbr/skills/debug/templates/continuation-prompt.md.tmpl +16 -0
- package/plugins/pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +27 -0
- package/plugins/pbr/skills/discuss/SKILL.md +338 -0
- package/plugins/pbr/skills/discuss/templates/CONTEXT.md.tmpl +61 -0
- package/plugins/pbr/skills/discuss/templates/decision-categories.md +9 -0
- package/plugins/pbr/skills/explore/SKILL.md +362 -0
- package/plugins/pbr/skills/health/SKILL.md +186 -0
- package/plugins/pbr/skills/health/templates/check-pattern.md.tmpl +30 -0
- package/plugins/pbr/skills/health/templates/output-format.md.tmpl +63 -0
- package/plugins/pbr/skills/help/SKILL.md +140 -0
- package/plugins/pbr/skills/import/SKILL.md +490 -0
- package/plugins/pbr/skills/milestone/SKILL.md +673 -0
- package/plugins/pbr/skills/milestone/templates/audit-report.md.tmpl +48 -0
- package/plugins/pbr/skills/milestone/templates/stats-file.md.tmpl +30 -0
- package/plugins/pbr/skills/note/SKILL.md +212 -0
- package/plugins/pbr/skills/pause/SKILL.md +235 -0
- package/plugins/pbr/skills/pause/templates/continue-here.md.tmpl +71 -0
- package/plugins/pbr/skills/plan/SKILL.md +628 -0
- package/plugins/pbr/skills/plan/decimal-phase-calc.md +98 -0
- package/plugins/pbr/skills/plan/templates/checker-prompt.md.tmpl +21 -0
- package/plugins/pbr/skills/plan/templates/gap-closure-prompt.md.tmpl +32 -0
- package/plugins/pbr/skills/plan/templates/planner-prompt.md.tmpl +38 -0
- package/plugins/pbr/skills/plan/templates/researcher-prompt.md.tmpl +19 -0
- package/plugins/pbr/skills/plan/templates/revision-prompt.md.tmpl +23 -0
- package/plugins/pbr/skills/quick/SKILL.md +335 -0
- package/plugins/pbr/skills/resume/SKILL.md +388 -0
- package/plugins/pbr/skills/review/SKILL.md +652 -0
- package/plugins/pbr/skills/review/templates/debugger-prompt.md.tmpl +60 -0
- package/plugins/pbr/skills/review/templates/gap-planner-prompt.md.tmpl +40 -0
- package/plugins/pbr/skills/review/templates/verifier-prompt.md.tmpl +115 -0
- package/plugins/pbr/skills/scan/SKILL.md +269 -0
- package/plugins/pbr/skills/scan/templates/mapper-prompt.md.tmpl +201 -0
- package/plugins/pbr/skills/setup/SKILL.md +227 -0
- package/plugins/pbr/skills/shared/commit-planning-docs.md +35 -0
- package/plugins/pbr/skills/shared/config-loading.md +102 -0
- package/plugins/pbr/skills/shared/context-budget.md +40 -0
- package/plugins/pbr/skills/shared/context-loader-task.md +86 -0
- package/plugins/pbr/skills/shared/digest-select.md +79 -0
- package/plugins/pbr/skills/shared/domain-probes.md +125 -0
- package/plugins/pbr/skills/shared/error-reporting.md +79 -0
- package/plugins/pbr/skills/shared/gate-prompts.md +388 -0
- package/plugins/pbr/skills/shared/phase-argument-parsing.md +45 -0
- package/plugins/pbr/skills/shared/progress-display.md +53 -0
- package/plugins/pbr/skills/shared/revision-loop.md +81 -0
- package/plugins/pbr/skills/shared/state-loading.md +62 -0
- package/plugins/pbr/skills/shared/state-update.md +161 -0
- package/plugins/pbr/skills/shared/universal-anti-patterns.md +33 -0
- package/plugins/pbr/skills/status/SKILL.md +353 -0
- package/plugins/pbr/skills/todo/SKILL.md +181 -0
- package/plugins/pbr/templates/CONTEXT.md.tmpl +52 -0
- package/plugins/pbr/templates/INTEGRATION-REPORT.md.tmpl +151 -0
- package/plugins/pbr/templates/RESEARCH-SUMMARY.md.tmpl +97 -0
- package/plugins/pbr/templates/ROADMAP.md.tmpl +40 -0
- package/plugins/pbr/templates/SUMMARY.md.tmpl +81 -0
- package/plugins/pbr/templates/VERIFICATION-DETAIL.md.tmpl +116 -0
- package/plugins/pbr/templates/codebase/ARCHITECTURE.md.tmpl +98 -0
- package/plugins/pbr/templates/codebase/CONCERNS.md.tmpl +93 -0
- package/plugins/pbr/templates/codebase/CONVENTIONS.md.tmpl +104 -0
- package/plugins/pbr/templates/codebase/INTEGRATIONS.md.tmpl +78 -0
- package/plugins/pbr/templates/codebase/STACK.md.tmpl +78 -0
- package/plugins/pbr/templates/codebase/STRUCTURE.md.tmpl +80 -0
- package/plugins/pbr/templates/codebase/TESTING.md.tmpl +107 -0
- package/plugins/pbr/templates/continue-here.md.tmpl +73 -0
- package/plugins/pbr/templates/prompt-partials/phase-project-context.md.tmpl +37 -0
- package/plugins/pbr/templates/research/ARCHITECTURE.md.tmpl +124 -0
- package/plugins/pbr/templates/research/STACK.md.tmpl +71 -0
- package/plugins/pbr/templates/research/SUMMARY.md.tmpl +112 -0
- package/plugins/pbr/templates/research-outputs/phase-research.md.tmpl +81 -0
- package/plugins/pbr/templates/research-outputs/project-research.md.tmpl +99 -0
- package/plugins/pbr/templates/research-outputs/synthesis.md.tmpl +36 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to Plan-Build-Run will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [2.0.0] - 2026-02-17
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- Token-saving CLI: 6 new commands in `towline-tools.js` — `frontmatter`, `must-haves`, `phase-info`, `state update`, `roadmap update-status`, `roadmap update-plans`
|
|
14
|
+
- Companion web dashboard (Express 5.x, EJS, Pico.css v2, HTMX 2.0) with overview, phase detail, roadmap, todos, and SSE live updates
|
|
15
|
+
- `/dev:import` skill — Import external plan documents into Towline format
|
|
16
|
+
- `/dev:note` skill — Zero-friction idea capture with promote-to-todo support
|
|
17
|
+
- `/dev:setup` skill — Interactive onboarding wizard for new installations
|
|
18
|
+
- `/dev:explore` skill — Socratic conversation for idea exploration
|
|
19
|
+
- `/dev:continue` skill — Execute the next logical step automatically
|
|
20
|
+
- `/dev:health` skill — Validate `.planning/` directory integrity
|
|
21
|
+
- General agent — Lightweight Towline-aware agent for ad-hoc tasks
|
|
22
|
+
- `/dev:build <N> --team` variant — Agent Teams for complex inter-agent coordination
|
|
23
|
+
- `/dev:review <N> --auto-fix` variant — Auto-diagnose and fix verification failures
|
|
24
|
+
- Hook spawn tests for all lifecycle hooks
|
|
25
|
+
- Iterative retrieval protocol for researcher agent
|
|
26
|
+
- Behavioral contexts for agent prompt refinement
|
|
27
|
+
- Published to npm with OIDC trusted publishing
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
- Skill count increased from 15 to 21
|
|
31
|
+
- Agent count increased from 9 to 10 (added General agent)
|
|
32
|
+
- Hook scripts consolidated: Write/Edit dispatch reduced from 4 spawns to 2
|
|
33
|
+
- All hook scripts now use `logHook()` from `hook-logger.js` for unified logging
|
|
34
|
+
- Agents reference new CLI tooling shortcuts instead of manual YAML parsing
|
|
35
|
+
- README rewritten with badges, comparison table, and acknowledgments
|
|
36
|
+
- Package tarball trimmed from 1.9MB to 305KB via explicit `files` field
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
- Windows CI: `parseMustHaves` now trims CRLF line endings
|
|
40
|
+
- Context budget: main orchestrator no longer reads agent definitions (saves ~15% context)
|
|
41
|
+
- Hook logger rotation: `.hook-log` now caps at 200 entries with JSONL format
|
|
42
|
+
- Status line ANSI rendering on Windows terminals
|
|
43
|
+
|
|
44
|
+
## [1.0.0] - 2025-02-07
|
|
45
|
+
|
|
46
|
+
### Added
|
|
47
|
+
- Initial release of Plan-Build-Run plugin for Claude Code
|
|
48
|
+
- 15 skills: begin, plan, build, review, discuss, quick, debug, status, pause, resume, milestone, scan, todo, config, help
|
|
49
|
+
- 9 specialized agents: researcher, planner, plan-checker, executor, verifier, integration-checker, debugger, codebase-mapper, synthesizer
|
|
50
|
+
- Hook-enforced quality gates: commit validation, plan format checking, session state injection, pre-compact preservation
|
|
51
|
+
- Wave-based parallel execution via Task() subagents
|
|
52
|
+
- Goal-backward verification at phase and milestone levels
|
|
53
|
+
- Persistent file-based state management (.planning/ directory)
|
|
54
|
+
- Configurable workflow: depth, models, gates, parallelization, git branching
|
|
55
|
+
- Cross-platform Node.js hook scripts (Windows + macOS + Linux)
|
|
56
|
+
- Plugin distribution via npm
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## What This Is
|
|
6
|
+
|
|
7
|
+
Plan-Build-Run is a **Claude Code plugin** that provides a structured development workflow. It solves context rot — quality degradation as Claude's context window fills up — through disciplined subagent delegation, file-based state, and goal-backward verification. Users invoke `/pbr:*` slash commands (skills) that orchestrate specialized agents via `Task()`.
|
|
8
|
+
|
|
9
|
+
## Critical Rules
|
|
10
|
+
|
|
11
|
+
- **NEVER add AI co-author lines** to git commits or PRs. No `Co-Authored-By: Claude` or similar. Only add co-author lines referencing actual human contributors.
|
|
12
|
+
- **NEVER inline agent definitions** into skill prompts. Use `subagent_type: "pbr:{name}"` — Claude Code auto-loads agent definitions from `agents/`. Reading agent `.md` files wastes main context.
|
|
13
|
+
|
|
14
|
+
## Commands
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm test # Run all Jest tests (~780 tests, 36 suites)
|
|
18
|
+
npm run lint # ESLint on plugins/pbr/scripts/ and tests/
|
|
19
|
+
npm run validate # Validate plugin directory structure
|
|
20
|
+
npx jest tests/validate-commit.test.js # Run a single test file
|
|
21
|
+
npx jest --coverage # Run with coverage report
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Coverage thresholds (enforced in `package.json`): 65% statements, 58% branches, 70% functions, 65% lines.
|
|
25
|
+
|
|
26
|
+
Dashboard (separate dependency tree):
|
|
27
|
+
```bash
|
|
28
|
+
npm run dashboard:install # One-time install of dashboard deps
|
|
29
|
+
npm run dashboard -- --dir /path/to/project # Launch dashboard for a project
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Load the plugin locally for manual testing:
|
|
33
|
+
```bash
|
|
34
|
+
claude --plugin-dir .
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
CI runs on Node 18/20/22 across Windows, macOS, and Linux. All three platforms must pass.
|
|
38
|
+
|
|
39
|
+
## Architecture
|
|
40
|
+
|
|
41
|
+
All plugin code lives under `plugins/pbr/`. Three layers:
|
|
42
|
+
|
|
43
|
+
### Skills (`skills/{name}/SKILL.md`)
|
|
44
|
+
Markdown files with YAML frontmatter defining slash commands (`/pbr:begin`, `/pbr:plan`, etc.). Each SKILL.md is a complete prompt that tells the orchestrator what to do. Skills read state, interact with the user, and spawn agents.
|
|
45
|
+
|
|
46
|
+
21 skills: begin, build, config, continue, debug, discuss, explore, health, help, import, milestone, note, pause, plan, quick, resume, review, scan, setup, status, todo.
|
|
47
|
+
|
|
48
|
+
### Agents (`agents/{name}.md`)
|
|
49
|
+
Markdown files with YAML frontmatter defining specialized subagent prompts. Agents run in fresh `Task()` contexts with clean 200k token windows. Spawned via `subagent_type: "pbr:{name}"` — auto-loaded by Claude Code.
|
|
50
|
+
|
|
51
|
+
10 agents: researcher, planner, plan-checker, executor, verifier, integration-checker, debugger, codebase-mapper, synthesizer, general.
|
|
52
|
+
|
|
53
|
+
### Scripts (`scripts/*.js`)
|
|
54
|
+
28 Node.js hook scripts that fire on Claude Code lifecycle events. Configured in `hooks/hooks.json`. All use CommonJS, must be cross-platform (`path.join()`, not hardcoded separators), and log via `logHook()` from `hook-logger.js`.
|
|
55
|
+
|
|
56
|
+
**Dispatch pattern**: Several hooks use dispatch scripts that fan out to sub-scripts based on the file being written/read:
|
|
57
|
+
|
|
58
|
+
| Hook Event | Entry Script | Delegates To |
|
|
59
|
+
|------------|-------------|-------------|
|
|
60
|
+
| SessionStart | progress-tracker.js | — (injects project state) |
|
|
61
|
+
| PostToolUse (Write\|Edit) | post-write-dispatch.js | check-plan-format.js, check-roadmap-sync.js, check-state-sync.js |
|
|
62
|
+
| PostToolUse (Write\|Edit) | post-write-quality.js | check-doc-sprawl.js, check-skill-workflow.js |
|
|
63
|
+
| PostToolUse (Task) | check-subagent-output.js | — (validates agent output) |
|
|
64
|
+
| PostToolUse (Write\|Edit) | suggest-compact.js | — (context budget warnings) |
|
|
65
|
+
| PostToolUse (Read) | track-context-budget.js | — (tracks reads for budget) |
|
|
66
|
+
| PostToolUseFailure | log-tool-failure.js | — (logs failures) |
|
|
67
|
+
| PreToolUse (Bash) | pre-bash-dispatch.js | validate-commit.js, check-dangerous-commands.js, check-phase-boundary.js |
|
|
68
|
+
| PreToolUse (Write\|Edit) | pre-write-dispatch.js | — (write guards) |
|
|
69
|
+
| PreCompact | context-budget-check.js | — (preserves STATE.md) |
|
|
70
|
+
| Stop | auto-continue.js | — (chains next command) |
|
|
71
|
+
| SubagentStart/Stop | log-subagent.js | — (tracks lifecycle) |
|
|
72
|
+
| SubagentStop | event-handler.js | — (auto-verification trigger) |
|
|
73
|
+
| TaskCompleted | task-completed.js | — (processes task completion) |
|
|
74
|
+
| SessionEnd | session-cleanup.js | — (cleanup) |
|
|
75
|
+
|
|
76
|
+
**Hook exit codes**: 0 = success, 2 = block (PreToolUse hooks that reject a tool call).
|
|
77
|
+
|
|
78
|
+
**`${CLAUDE_PLUGIN_ROOT}`**: Used in hooks.json to reference script paths. Claude Code expands this internally — works on all platforms without shell expansion.
|
|
79
|
+
|
|
80
|
+
### Supporting directories
|
|
81
|
+
|
|
82
|
+
- **`references/`** — Shared reference docs loaded by skills (plan format, commit conventions, UI formatting, deviation rules)
|
|
83
|
+
- **`templates/`** — EJS-style `.tmpl` files for generated markdown (VERIFICATION.md, SUMMARY.md, etc.)
|
|
84
|
+
- **`commands/`** — Command registration files (one `.md` per command mapping to its skill)
|
|
85
|
+
- **`skills/shared/`** — 14 shared skill fragments extracted from repeated patterns across skills (config-loading, digest-select, revision-loop, context-loader-task, universal-anti-patterns, phase-argument-parsing, gate-prompts, state-loading, state-update, commit-planning-docs, context-budget, domain-probes, progress-display, error-reporting)
|
|
86
|
+
|
|
87
|
+
## Key Conventions
|
|
88
|
+
|
|
89
|
+
**Commit format**: `{type}({scope}): {description}` — enforced by PreToolUse hook. Types: feat, fix, refactor, test, docs, chore, wip. Scopes: `{NN}-{MM}` (phase-plan), `quick-{NNN}`, `planning`, `tools`, or descriptive word.
|
|
90
|
+
|
|
91
|
+
**Skill frontmatter** (SKILL.md):
|
|
92
|
+
```yaml
|
|
93
|
+
---
|
|
94
|
+
name: skill-name
|
|
95
|
+
description: "What this skill does"
|
|
96
|
+
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, Task
|
|
97
|
+
argument-hint: "<N> [--flag]"
|
|
98
|
+
---
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**Agent frontmatter** ({name}.md):
|
|
102
|
+
```yaml
|
|
103
|
+
---
|
|
104
|
+
name: agent-name
|
|
105
|
+
description: "What this agent does"
|
|
106
|
+
model: sonnet|inherit|haiku
|
|
107
|
+
memory: none|user|project
|
|
108
|
+
tools:
|
|
109
|
+
- Read
|
|
110
|
+
- Write
|
|
111
|
+
- Bash
|
|
112
|
+
---
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Data Flow
|
|
116
|
+
|
|
117
|
+
Skills and agents communicate through files on disk, not messages:
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
.planning/STATE.md ← source of truth for current position
|
|
121
|
+
.planning/ROADMAP.md ← phase structure, goals, dependencies
|
|
122
|
+
.planning/config.json ← workflow settings (~62 properties across 12 top-level keys)
|
|
123
|
+
.planning/phases/NN-slug/
|
|
124
|
+
PLAN.md ← written by planner, read by executor
|
|
125
|
+
SUMMARY.md ← written by executor, read by orchestrator
|
|
126
|
+
VERIFICATION.md ← written by verifier, read by review skill
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
The orchestrator stays lean (~15% context) by delegating heavy work to agents. Each agent gets a fresh context window.
|
|
130
|
+
|
|
131
|
+
**Utility library**: `pbr-tools.js` is a shared Node.js library (stateLoad, configLoad, frontmatterParse, mustHavesCollect, etc.) used by multiple hook scripts. It provides CLI subcommands that agents call to avoid wasting tokens on file parsing.
|
|
132
|
+
|
|
133
|
+
## Testing
|
|
134
|
+
|
|
135
|
+
Tests live in `tests/` using Jest. Test files mirror script names: `validate-commit.test.js` tests `validate-commit.js`.
|
|
136
|
+
|
|
137
|
+
**Fixture project**: `tests/fixtures/fake-project/.planning/` provides read-only fixture data for tests.
|
|
138
|
+
|
|
139
|
+
**Mutation tests**: Use `fs.mkdtempSync()` to create temporary directories — never mutate the fixture project.
|
|
140
|
+
|
|
141
|
+
**`pbr-tools.js` tests** span both `pbr-tools.test.js` and `integration.test.js`.
|
|
142
|
+
|
|
143
|
+
When adding a new hook script, create a corresponding test file. Tests must pass on Windows, macOS, and Linux.
|
|
144
|
+
|
|
145
|
+
## Dashboard
|
|
146
|
+
|
|
147
|
+
The dashboard (`dashboard/`) is a separate Express.js application with its own dependency tree (`dashboard/package.json`). It provides a web UI for browsing `.planning/` state. Tech: Express 5.x, EJS, Pico.css, HTMX 2.0, chokidar for file watching, SSE for live updates.
|
|
148
|
+
|
|
149
|
+
Dashboard tests use Vitest (not Jest) and live in `dashboard/tests/`. Run with `npm --prefix dashboard test`.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Towline Contributors
|
|
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,247 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="./assets/pbr_banner_logo.png" alt="Plan-Build-Run Logo" width="550" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<strong>Context-engineered development workflow for Claude Code.</strong>
|
|
7
|
+
<br />
|
|
8
|
+
Build ambitious multi-phase software without quality degradation.
|
|
9
|
+
<br />
|
|
10
|
+
Works with any Claude Code plan. Shines on Max.
|
|
11
|
+
<br />
|
|
12
|
+
<br />
|
|
13
|
+
<a href="#why-plan-build-run">Why Plan-Build-Run?</a> •
|
|
14
|
+
<a href="#getting-started">Getting Started</a> •
|
|
15
|
+
<a href="#commands">Commands</a> •
|
|
16
|
+
<a href="#how-it-works">How It Works</a> •
|
|
17
|
+
<a href="https://github.com/SienkLogic/plan-build-run/wiki">Wiki</a> •
|
|
18
|
+
<a href=".github/CONTRIBUTING.md">Contributing</a>
|
|
19
|
+
</p>
|
|
20
|
+
|
|
21
|
+
<p align="center">
|
|
22
|
+
<a href="https://github.com/SienkLogic/plan-build-run/actions"><img src="https://img.shields.io/github/actions/workflow/status/SienkLogic/plan-build-run/ci.yml?style=for-the-badge&label=CI&logo=github" alt="CI Status" /></a>
|
|
23
|
+
<img src="https://img.shields.io/badge/Claude_Code-Plugin-7C3AED?style=for-the-badge&logo=anthropic&logoColor=white" alt="Claude Code Plugin" />
|
|
24
|
+
<img src="https://img.shields.io/badge/Node.js-18%2B-339933?style=for-the-badge&logo=node.js&logoColor=white" alt="Node.js 18+" />
|
|
25
|
+
<a href="LICENSE"><img src="https://img.shields.io/github/license/SienkLogic/plan-build-run?style=for-the-badge" alt="License" /></a>
|
|
26
|
+
<a href="https://www.npmjs.com/package/@sienklogic/plan-build-run"><img src="https://img.shields.io/npm/v/@sienklogic/plan-build-run?style=for-the-badge&logo=npm&logoColor=white" alt="npm" /></a>
|
|
27
|
+
<img src="https://img.shields.io/badge/Tests-780_passing-brightgreen?style=for-the-badge" alt="780 Tests" />
|
|
28
|
+
</p>
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## The Problem
|
|
33
|
+
|
|
34
|
+
Claude Code is remarkably capable...until your context window fills up. As tokens accumulate during a long session, reasoning quality degrades, hallucinations increase, and the model starts losing track of earlier decisions. This is **context rot**, and it's the primary failure mode when building anything beyond a single-session project.
|
|
35
|
+
|
|
36
|
+
**Plan-Build-Run solves this.** It keeps your main orchestrator under ~15% context usage by delegating heavy work to fresh subagent contexts, each getting a clean 200k token window. All state lives on disk. Sessions are killable at any second without data loss. Whether you're on a free tier or Max 5x, wasted context means wasted budget, and context rot is the biggest source of waste.
|
|
37
|
+
|
|
38
|
+
## Why Plan-Build-Run?
|
|
39
|
+
|
|
40
|
+
Most AI coding tools treat context as infinite. They index your codebase, track your edits, and hope the model keeps up. That works for single-file changes. It falls apart when you're building something that takes days, spans dozens of files, and requires decisions made on Monday to still hold on Friday.
|
|
41
|
+
|
|
42
|
+
Plan-Build-Run takes a different approach: **structured context isolation**. Instead of stuffing everything into one session, it delegates each operation to a fresh subagent with a clean 200k token window and coordinates through files on disk.
|
|
43
|
+
|
|
44
|
+
<p align="center">
|
|
45
|
+
<img src="./assets/pbr-demo.gif" alt="Plan-Build-Run workflow: begin → plan → build → review" width="800" />
|
|
46
|
+
</p>
|
|
47
|
+
|
|
48
|
+
Goal-backward verification, lifecycle hooks, wave-based parallelism, kill-safe state, and more. See **[What Sets It Apart](https://github.com/SienkLogic/plan-build-run/wiki/What-Sets-It-Apart)** for the full comparison and differentiators.
|
|
49
|
+
|
|
50
|
+
> **When to use Plan-Build-Run:** Multi-phase projects where quality matters. New features spanning 5+ files, large refactors, greenfield builds, anything that would take more than one Claude Code session to complete. Use `depth: quick` or `depth: standard` to control agent spawn count per phase.
|
|
51
|
+
>
|
|
52
|
+
> **When to skip it:** Single-file fixes, quick questions, one-off scripts. Use `/pbr:quick` for atomic commits without full workflow overhead: single executor spawn, no research or verification agents.
|
|
53
|
+
|
|
54
|
+
Works on every Claude Code plan. Use `depth: quick` on Free/Pro, `depth: standard` on Max, `depth: comprehensive` on Max 5x. See **[What Sets It Apart](https://github.com/SienkLogic/plan-build-run/wiki/What-Sets-It-Apart#plan-build-run-on-different-claude-code-plans)** for tier-specific guidance.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Getting Started
|
|
59
|
+
|
|
60
|
+
### Prerequisites
|
|
61
|
+
|
|
62
|
+
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code) 2.1.45+ (`claude --version`)
|
|
63
|
+
- Node.js 18+
|
|
64
|
+
|
|
65
|
+
### Install
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# From your terminal
|
|
69
|
+
claude plugin marketplace add SienkLogic/plan-build-run
|
|
70
|
+
claude plugin install pbr@plan-build-run
|
|
71
|
+
|
|
72
|
+
# Or from inside a Claude Code session
|
|
73
|
+
/plugin marketplace add SienkLogic/plan-build-run
|
|
74
|
+
/plugin install pbr@plan-build-run
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
All `/pbr:*` commands are now available globally.
|
|
78
|
+
|
|
79
|
+
<details>
|
|
80
|
+
<summary><strong>Install scopes</strong></summary>
|
|
81
|
+
|
|
82
|
+
| Scope | Command | Effect |
|
|
83
|
+
|-------|---------|--------|
|
|
84
|
+
| **Global** (default) | `claude plugin install pbr@plan-build-run` | Available in all projects |
|
|
85
|
+
| **Project only** | `claude plugin install pbr@plan-build-run --scope local` | This project only, gitignored |
|
|
86
|
+
| **Team project** | `claude plugin install pbr@plan-build-run --scope project` | Shared via git, teammates get prompted |
|
|
87
|
+
|
|
88
|
+
</details>
|
|
89
|
+
|
|
90
|
+
### Dashboard (Optional)
|
|
91
|
+
|
|
92
|
+
Plan-Build-Run ships with a companion web dashboard for browsing your project's planning state in a browser. To set it up:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
# One-time install of dashboard dependencies
|
|
96
|
+
npm run dashboard:install
|
|
97
|
+
|
|
98
|
+
# Launch the dashboard for any project with a .planning/ directory
|
|
99
|
+
npm run dashboard -- --dir /path/to/your/project
|
|
100
|
+
# Opens at http://127.0.0.1:3000
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Or run directly:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
node dashboard/bin/cli.js --dir /path/to/your/project --port 3000
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Quick Start (Max / Max 5x)
|
|
110
|
+
|
|
111
|
+
Full pipeline with parallel research and multi-agent builds. Best experience.
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
cd your-project && claude
|
|
115
|
+
```
|
|
116
|
+
```
|
|
117
|
+
/pbr:begin # Plan-Build-Run asks about your project, researches the domain,
|
|
118
|
+
# scopes requirements, and generates a phased roadmap
|
|
119
|
+
|
|
120
|
+
/pbr:plan 1 # Research + plan the first phase
|
|
121
|
+
/pbr:build 1 # Build it with parallel agents, atomic commits
|
|
122
|
+
/pbr:review 1 # Verify the codebase matches requirements
|
|
123
|
+
/pbr:plan 2 # Repeat for next phase
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
That's the whole cycle. Everything lands in a `.planning/` directory. Kill your terminal anytime, `/pbr:resume` picks up where you left off.
|
|
127
|
+
|
|
128
|
+
### Quick Start (Pro / Free)
|
|
129
|
+
|
|
130
|
+
Lighter workflow that still gives you structured state tracking and clean commits.
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
cd your-project && claude
|
|
134
|
+
```
|
|
135
|
+
```
|
|
136
|
+
/pbr:setup # Create .planning/ structure without the heavy research step
|
|
137
|
+
/pbr:plan 1 --skip-research # Plan without spawning a research agent
|
|
138
|
+
/pbr:build 1 # Build it
|
|
139
|
+
/pbr:quick # For one-off tasks: single agent, atomic commit, lowest cost
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Set `depth: quick` in `/pbr:config` to reduce agent spawns across all workflows.
|
|
143
|
+
|
|
144
|
+
### Quick Reference
|
|
145
|
+
|
|
146
|
+
| What you want | Command |
|
|
147
|
+
|---------------|---------|
|
|
148
|
+
| Start a new project | `/pbr:begin` (or `/pbr:setup` for lightweight init) |
|
|
149
|
+
| Plan a phase | `/pbr:plan 1` |
|
|
150
|
+
| Build a phase | `/pbr:build 1` |
|
|
151
|
+
| Verify a phase | `/pbr:review 1` |
|
|
152
|
+
| Do something quick | `/pbr:quick` |
|
|
153
|
+
| See where you are | `/pbr:status` |
|
|
154
|
+
| Resume after restart | `/pbr:resume` |
|
|
155
|
+
| Auto-advance | `/pbr:continue` |
|
|
156
|
+
| Change settings | `/pbr:config` |
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Commands
|
|
161
|
+
|
|
162
|
+
### Core Workflow
|
|
163
|
+
|
|
164
|
+
| Command | Description | Agents |
|
|
165
|
+
|---------|-------------|--------|
|
|
166
|
+
| `/pbr:begin` | Start a new project: questioning, research, requirements, roadmap | 4-6 (quick: 2-3) |
|
|
167
|
+
| `/pbr:plan <N>` | Plan a phase: research, plan creation, verification loop | 2-3 (quick: 1-2) |
|
|
168
|
+
| `/pbr:build <N>` | Build a phase: parallel execution in waves, atomic commits | 2-4 (quick: 1-2) |
|
|
169
|
+
| `/pbr:review <N>` | Verify a phase: automated 3-layer checks + conversational UAT | 1 |
|
|
170
|
+
|
|
171
|
+
See **[Commands](https://github.com/SienkLogic/plan-build-run/wiki/Commands)** for all 21 commands with flags, cost-by-depth tables, and detailed descriptions.
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## How It Works
|
|
176
|
+
|
|
177
|
+
Plan-Build-Run is a **thin orchestrator** that delegates heavy work to fresh subagent contexts via `Task()`. Data flows through files on disk, not through messages.
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
Main Session (~15% context)
|
|
181
|
+
│
|
|
182
|
+
├── Task(researcher) ──▶ writes .planning/research/
|
|
183
|
+
├── Task(planner) ──▶ writes PLAN.md files
|
|
184
|
+
├── Task(executor) ──▶ builds code, creates commits
|
|
185
|
+
├── Task(executor) ──▶ (parallel, same wave)
|
|
186
|
+
└── Task(verifier) ──▶ checks codebase against must-haves
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
See **[Architecture](https://github.com/SienkLogic/plan-build-run/wiki/Architecture)** for key concepts, the token-saving CLI, data flow details, and supporting directories.
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Deep Dive
|
|
194
|
+
|
|
195
|
+
| Topic | Description |
|
|
196
|
+
|-------|-------------|
|
|
197
|
+
| **[Agents](https://github.com/SienkLogic/plan-build-run/wiki/Agents)** | 10 specialized agents with configurable model profiles and file-based communication |
|
|
198
|
+
| **[Configuration](https://github.com/SienkLogic/plan-build-run/wiki/Configuration)** | 12 config keys, depth/model profiles, 16+ feature toggles |
|
|
199
|
+
| **[Hooks](https://github.com/SienkLogic/plan-build-run/wiki/Hooks)** | 15 lifecycle hooks that enforce discipline at zero token cost |
|
|
200
|
+
| **[Project Structure](https://github.com/SienkLogic/plan-build-run/wiki/Project-Structure)** | The `.planning/` directory layout, key files, and file ownership |
|
|
201
|
+
| **[Dashboard](https://github.com/SienkLogic/plan-build-run/wiki/Dashboard)** | Web UI with live updates for browsing project state |
|
|
202
|
+
| **[Philosophy](https://github.com/SienkLogic/plan-build-run/wiki/Philosophy)** | Design principles and platform alignment strategy |
|
|
203
|
+
| **[What Sets It Apart](https://github.com/SienkLogic/plan-build-run/wiki/What-Sets-It-Apart)** | Feature comparison and key differentiators |
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Local Development
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
# Clone and install
|
|
211
|
+
git clone https://github.com/SienkLogic/plan-build-run.git
|
|
212
|
+
cd plan-build-run
|
|
213
|
+
npm install
|
|
214
|
+
|
|
215
|
+
# Run tests (758 tests, 36 suites)
|
|
216
|
+
npm test
|
|
217
|
+
|
|
218
|
+
# Lint
|
|
219
|
+
npm run lint
|
|
220
|
+
|
|
221
|
+
# Validate plugin structure
|
|
222
|
+
npm run validate
|
|
223
|
+
|
|
224
|
+
# Load locally for manual testing
|
|
225
|
+
claude --plugin-dir .
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
CI runs on Node 18/20/22 across Windows, macOS, and Linux. See [CONTRIBUTING.md](.github/CONTRIBUTING.md) for guidelines.
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Stats
|
|
233
|
+
|
|
234
|
+
| Metric | Count |
|
|
235
|
+
|--------|-------|
|
|
236
|
+
| Skills (slash commands) | 21 |
|
|
237
|
+
| Specialized agents | 10 |
|
|
238
|
+
| Hook scripts | 28 |
|
|
239
|
+
| Tests | 758 |
|
|
240
|
+
| Test suites | 36 |
|
|
241
|
+
| Config toggles | 12 top-level keys |
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## License
|
|
246
|
+
|
|
247
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { Command } from 'commander';
|
|
4
|
+
import { resolve } from 'path';
|
|
5
|
+
import { startServer } from '../src/server.js';
|
|
6
|
+
|
|
7
|
+
const program = new Command();
|
|
8
|
+
|
|
9
|
+
program
|
|
10
|
+
.name('pbr-dashboard')
|
|
11
|
+
.description('Start the Plan-Build-Run planning dashboard')
|
|
12
|
+
.option('-d, --dir <path>', 'Path to Plan-Build-Run project directory', process.cwd())
|
|
13
|
+
.option('-p, --port <number>', 'Server port', '3000')
|
|
14
|
+
.parse();
|
|
15
|
+
|
|
16
|
+
const options = program.opts();
|
|
17
|
+
const projectDir = resolve(options.dir);
|
|
18
|
+
const port = parseInt(options.port, 10);
|
|
19
|
+
|
|
20
|
+
if (isNaN(port) || port < 1 || port > 65535) {
|
|
21
|
+
console.error(`Invalid port: ${options.port}`);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
startServer({ projectDir, port });
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "plan-build-run-dashboard",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Web dashboard for viewing Plan-Build-Run project planning state",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"pbr-dashboard": "./bin/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"start": "node bin/cli.js",
|
|
11
|
+
"dev": "node --watch bin/cli.js",
|
|
12
|
+
"test": "vitest run"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"plan-build-run",
|
|
16
|
+
"dashboard",
|
|
17
|
+
"planning"
|
|
18
|
+
],
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@rollup/rollup-win32-x64-msvc": "^4.57.1",
|
|
22
|
+
"chokidar": "^5.0.0",
|
|
23
|
+
"commander": "^12.1.0",
|
|
24
|
+
"ejs": "^3.1.10",
|
|
25
|
+
"express": "^5.1.0",
|
|
26
|
+
"gray-matter": "^4.0.3",
|
|
27
|
+
"helmet": "^8.1.0",
|
|
28
|
+
"marked": "^17.0.1"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"memfs": "^4.56.10",
|
|
32
|
+
"vitest": "^3.1.0"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
File without changes
|