@trieungoctam/speckit 0.3.3 → 0.3.5

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 CHANGED
@@ -11,6 +11,7 @@ The curated skill set is intentionally small: `spec-shape`, `spec-research`, `sp
11
11
  ## Quickstart
12
12
 
13
13
  ```bash
14
+ npx @trieungoctam/speckit@latest setup
14
15
  npx @trieungoctam/speckit@latest init --ide cursor
15
16
  npx @trieungoctam/speckit@latest init --ide all
16
17
  npx @trieungoctam/speckit@latest init --enterprise --ide all
@@ -19,6 +20,7 @@ npx @trieungoctam/speckit@latest session start "Add checkout validation"
19
20
  npx @trieungoctam/speckit@latest quick "Add checkout validation"
20
21
  npx @trieungoctam/speckit@latest context .speckit/stories/<story>.md
21
22
  npx @trieungoctam/speckit@latest sync
23
+ npx @trieungoctam/speckit@latest graph setup
22
24
  npx @trieungoctam/speckit@latest sprint plan
23
25
  npx @trieungoctam/speckit@latest graph triage --json
24
26
  npx @trieungoctam/speckit@latest validate --json
@@ -66,6 +68,7 @@ For implementation stories, red-green-refactor evidence is mandatory. A story is
66
68
 
67
69
  | Command | Purpose |
68
70
  | --- | --- |
71
+ | `speckit setup` | Open an interactive setup wizard for mode, IDE adapter, overwrite policy, and Beads Viewer setup. |
69
72
  | `speckit init` | Create `.speckit/` core runtime, super-agent, skill catalog, and all IDE adapters. |
70
73
  | `speckit init --enterprise` | Add flow, tool policy, and prompt harness files on top of the shared runtime. |
71
74
  | `speckit init --ide <name>` | Generate shared Speckit runtime plus one adapter: `claude-code`, `codex`, `antigravity`, `opencode`, or `cursor`. |
@@ -88,6 +91,7 @@ For implementation stories, red-green-refactor evidence is mandatory. A story is
88
91
  | `speckit next` | Safely wraps `bv --robot-next --format json`. |
89
92
  | `speckit sprint plan` | Build a sprint plan and status file from synced stories. |
90
93
  | `speckit sprint next` | Pick the next selectable story from sprint state. |
94
+ | `speckit graph setup` | Print Beads Viewer install commands, check `br`/`bd`/`bv`, and prepare `.beads/beads.jsonl`. |
91
95
  | `speckit graph triage` | Run Beads Viewer robot triage, or local JSON fallback if `bv` is missing. |
92
96
  | `speckit graph plan` | Run Beads Viewer robot plan, or local JSON fallback if `bv` is missing. |
93
97
  | `speckit graph insights` | Run Beads Viewer robot insights, or local JSON fallback if `bv` is missing. |
@@ -112,6 +116,7 @@ See `docs/adapters.md` for exact output paths.
112
116
  ## Guides
113
117
 
114
118
  - `docs/use-cases.md` covers setup, migration, quick changes, full planning, long sessions, TDD, graph automation, review, CI, and troubleshooting.
119
+ - `docs/beads-viewer-setup.md` covers Beads Viewer installation, `bv` verification, and robot-safe graph usage.
115
120
  - `docs/workflow-model.md` describes the quick and full workflow lanes.
116
121
  - `docs/prompt-architecture.md` describes the prompt contract used by the super-agent, skills, workflows, run prompt, and IDE adapters.
117
122
  - `docs/spec-quality-gates.md` describes validation gates for release readiness.
@@ -3,6 +3,8 @@ export type ToolCheck = {
3
3
  required: boolean;
4
4
  available: boolean;
5
5
  hint: string;
6
+ install?: string[];
6
7
  };
7
8
  export declare function checkTools(): ToolCheck[];
9
+ export declare function beadsViewerInstallGuide(): string;
8
10
  export declare function commandExists(command: string): boolean;
@@ -1,23 +1,50 @@
1
1
  import { spawnSync } from "node:child_process";
2
2
  const tools = [
3
- ["git", true, "Install Git and run Speckit inside a repository."],
4
- ["node", true, "Install Node.js 20 or newer."],
5
- ["br", false, "Recommended beads CLI. Use bd only for older projects."],
6
- ["bd", false, "Legacy beads CLI fallback."],
7
- ["bv", false, "Recommended for Beads Viewer robot commands."],
8
- ["claude", false, "Claude Code adapter runtime."],
9
- ["codex", false, "Codex adapter runtime."],
10
- ["opencode", false, "OpenCode adapter runtime."],
11
- ["cursor", false, "Cursor adapter runtime."],
3
+ ["git", true, "Install Git and run Speckit inside a repository.", ["https://git-scm.com/downloads"]],
4
+ ["node", true, "Install Node.js 20 or newer.", ["https://nodejs.org/"]],
5
+ ["br", false, "Recommended beads CLI. Use bd only for older projects.", ["Install beads_rust/br from your team's preferred channel."]],
6
+ ["bd", false, "Legacy beads CLI fallback.", ["brew install beads", "go install github.com/steveyegge/beads/cmd/bd@latest"]],
7
+ [
8
+ "bv",
9
+ false,
10
+ "Recommended for Beads Viewer robot commands.",
11
+ [
12
+ "brew install dicklesworthstone/tap/bv",
13
+ "go install github.com/Dicklesworthstone/beads_viewer/cmd/bv@latest",
14
+ "nix run github:Dicklesworthstone/beads_viewer -- --help",
15
+ ],
16
+ ],
17
+ ["claude", false, "Claude Code adapter runtime.", ["https://docs.anthropic.com/en/docs/claude-code"]],
18
+ ["codex", false, "Codex adapter runtime.", ["https://developers.openai.com/codex"]],
19
+ ["opencode", false, "OpenCode adapter runtime.", ["https://opencode.ai/"]],
20
+ ["cursor", false, "Cursor adapter runtime.", ["https://cursor.com/"]],
12
21
  ];
13
22
  export function checkTools() {
14
- return tools.map(([name, required, hint]) => ({
23
+ return tools.map(([name, required, hint, install]) => ({
15
24
  name,
16
25
  required,
17
26
  available: commandExists(name),
18
27
  hint,
28
+ install: [...install],
19
29
  }));
20
30
  }
31
+ export function beadsViewerInstallGuide() {
32
+ return `Beads Viewer setup
33
+
34
+ Install bv with one of:
35
+ brew install dicklesworthstone/tap/bv
36
+ go install github.com/Dicklesworthstone/beads_viewer/cmd/bv@latest
37
+ nix run github:Dicklesworthstone/beads_viewer -- --help
38
+
39
+ Verify:
40
+ bv --version
41
+ speckit sync
42
+ speckit graph triage --json
43
+
44
+ Rules:
45
+ Never run bare bv from agents. Use Speckit wrappers or bv --robot-* flags.
46
+ Speckit writes .beads/beads.jsonl from .speckit stories before graph commands.`;
47
+ }
21
48
  export function commandExists(command) {
22
49
  const result = spawnSync(command, ["--version"], {
23
50
  encoding: "utf8",
package/dist/cli.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { initCommand } from "./commands/init.js";
2
+ import { setupCommand } from "./commands/setup.js";
2
3
  import { doctorCommand } from "./commands/doctor.js";
3
4
  import { startCommand } from "./commands/start.js";
4
5
  import { shapeCommand } from "./commands/shape.js";
@@ -21,7 +22,13 @@ import { closeCommand } from "./commands/close.js";
21
22
  export async function main(argv = process.argv.slice(2), root = process.cwd()) {
22
23
  const parsed = parseArgs(argv);
23
24
  try {
25
+ if (isHelp(parsed)) {
26
+ printHelp();
27
+ return 0;
28
+ }
24
29
  switch (parsed.command) {
30
+ case "setup":
31
+ return setupCommand({ root });
25
32
  case "init":
26
33
  return initCommand({
27
34
  root,
@@ -134,10 +141,14 @@ function value(parsed, name) {
134
141
  function has(parsed, name) {
135
142
  return parsed.flags.has(name);
136
143
  }
144
+ function isHelp(parsed) {
145
+ return parsed.command === "help" || parsed.command === "--help" || parsed.command === "-h" || has(parsed, "help");
146
+ }
137
147
  function printHelp() {
138
148
  console.log(`Speckit - Agile + TDD workflow compiler for agentic IDEs
139
149
 
140
150
  Usage:
151
+ speckit setup
141
152
  speckit init [--ide all|claude-code|codex|antigravity|opencode|cursor] [--force]
142
153
  speckit init --enterprise [--ide all] [--force]
143
154
  speckit doctor [--json] [--deep]
@@ -150,7 +161,7 @@ Usage:
150
161
  speckit permissions audit [--path <path>] [--command <command>] [--json]
151
162
  speckit session start|checkpoint|compact|resume|status [target] [--note "..."] [--json]
152
163
  speckit sprint plan|next [--json]
153
- speckit graph triage|plan|insights [--json]
164
+ speckit graph setup|triage|plan|insights [--json]
154
165
  speckit validate [--json]
155
166
  speckit triage [--json]
156
167
  speckit next
@@ -32,6 +32,12 @@ export async function doctorCommand(options) {
32
32
  stdout.log(`Speckit doctor: ${report.status}`);
33
33
  stdout.log(`Node: ${report.node}`);
34
34
  stdout.log(`Tools: ${tools.map((tool) => `${tool.name}=${tool.available ? "ok" : "missing"}`).join(", ")}`);
35
+ for (const tool of tools.filter((tool) => !tool.available)) {
36
+ stdout.log(`Tool hint ${tool.name}: ${tool.hint}`);
37
+ if (tool.install?.length) {
38
+ stdout.log(`Install ${tool.name}: ${tool.install.join(" OR ")}`);
39
+ }
40
+ }
35
41
  stdout.log(`Tests: ${tests[0]?.command ?? "not detected"}`);
36
42
  for (const check of deepChecks) {
37
43
  stdout.log(`Deep ${check.name}: ${check.ok ? "ok" : "missing"}`);
@@ -1,5 +1,5 @@
1
1
  import { spawnSync } from "node:child_process";
2
- import { commandExists } from "../adapters/tool-checks.js";
2
+ import { beadsViewerInstallGuide, checkTools, commandExists } from "../adapters/tool-checks.js";
3
3
  import { prepareBeadsMirror } from "../core/beads-mirror.js";
4
4
  import { readSyncedStories, selectableStories } from "../core/synced-stories.js";
5
5
  const robotActions = new Map([
@@ -9,9 +9,12 @@ const robotActions = new Map([
9
9
  ]);
10
10
  export async function graphCommand(options) {
11
11
  const stdout = options.stdout ?? console;
12
+ if (options.action === "setup") {
13
+ return graphSetup(options);
14
+ }
12
15
  const robotFlag = robotActions.get(options.action);
13
16
  if (!robotFlag) {
14
- stdout.error("Usage: speckit graph triage|plan|insights [--json]");
17
+ stdout.error("Usage: speckit graph setup|triage|plan|insights [--json]");
15
18
  return 1;
16
19
  }
17
20
  if (commandExists("bv")) {
@@ -32,6 +35,29 @@ export async function graphCommand(options) {
32
35
  stdout.log(JSON.stringify(fallback, null, 2));
33
36
  return 0;
34
37
  }
38
+ async function graphSetup(options) {
39
+ const stdout = options.stdout ?? console;
40
+ const tools = checkTools().filter((tool) => ["br", "bd", "bv"].includes(tool.name));
41
+ const mirrorPath = await prepareBeadsMirror(options.root);
42
+ const report = {
43
+ status: tools.find((tool) => tool.name === "bv")?.available ? "ready" : "needs-bv",
44
+ mirror: mirrorPath,
45
+ tools,
46
+ install: beadsViewerInstallGuide(),
47
+ };
48
+ if (options.json) {
49
+ stdout.log(JSON.stringify(report, null, 2));
50
+ }
51
+ else {
52
+ stdout.log(beadsViewerInstallGuide());
53
+ stdout.log("");
54
+ stdout.log(`Mirror: ${mirrorPath}`);
55
+ for (const tool of tools) {
56
+ stdout.log(`${tool.name}: ${tool.available ? "ok" : "missing"} - ${tool.hint}`);
57
+ }
58
+ }
59
+ return 0;
60
+ }
35
61
  async function localGraphFallback(root, action) {
36
62
  const stories = await readSyncedStories(root);
37
63
  const selectable = selectableStories(stories);
@@ -46,6 +72,6 @@ async function localGraphFallback(root, action) {
46
72
  top_pick: selectable[0] ?? null,
47
73
  },
48
74
  recommendations: selectable.slice(0, 3),
49
- command: "Install Beads Viewer for graph metrics: bv --robot-triage --format json",
75
+ command: "Install Beads Viewer for graph metrics: brew install dicklesworthstone/tap/bv",
50
76
  };
51
77
  }
@@ -1,9 +1,9 @@
1
1
  import { spawnSync } from "node:child_process";
2
- import { commandExists } from "../adapters/tool-checks.js";
2
+ import { beadsViewerInstallGuide, commandExists } from "../adapters/tool-checks.js";
3
3
  export async function nextCommand(options = {}) {
4
4
  const stdout = options.stdout ?? console;
5
5
  if (!commandExists("bv")) {
6
- stdout.error("bv is not installed. Install Beads Viewer, then run: bv --robot-next --format json");
6
+ stdout.error(`bv is not installed.\n\n${beadsViewerInstallGuide()}`);
7
7
  return 1;
8
8
  }
9
9
  const result = spawnSync("bv", ["--robot-next", "--format", "json"], {
@@ -0,0 +1,9 @@
1
+ import { Readable, Writable } from "node:stream";
2
+ export type SetupOptions = {
3
+ root: string;
4
+ answers?: string[];
5
+ stdin?: Readable;
6
+ output?: Writable;
7
+ stdout?: Pick<typeof console, "log" | "error">;
8
+ };
9
+ export declare function setupCommand(options: SetupOptions): Promise<number>;
@@ -0,0 +1,128 @@
1
+ import { createInterface } from "node:readline/promises";
2
+ import { adapters } from "../config/adapter-registry.js";
3
+ import { graphCommand } from "./graph.js";
4
+ import { initCommand } from "./init.js";
5
+ const modeChoices = [
6
+ { label: "Enterprise Agile + TDD harness", value: "enterprise" },
7
+ { label: "Standard Agile + TDD runtime", value: "standard" },
8
+ ];
9
+ const ideChoices = [
10
+ { label: "All supported IDEs", value: "all" },
11
+ ...adapters.map((adapter) => ({
12
+ label: adapter.displayName,
13
+ value: adapter.name,
14
+ })),
15
+ ];
16
+ export async function setupCommand(options) {
17
+ const stdin = options.stdin ?? process.stdin;
18
+ const output = options.output ?? process.stdout;
19
+ const stdout = options.stdout ?? console;
20
+ if (options.answers) {
21
+ return setupFromAnswers(options, stdout, options.answers);
22
+ }
23
+ if (!stdin.isTTY || !output.isTTY) {
24
+ stdout.error("Interactive setup requires a TTY. Use `speckit init --enterprise --ide all` for non-interactive setup.");
25
+ return 1;
26
+ }
27
+ const rl = createInterface({ input: stdin, output });
28
+ try {
29
+ stdout.log("Speckit setup");
30
+ stdout.log("");
31
+ const mode = await select(rl, stdout, modeChoices, "Choose setup mode", "1");
32
+ const ide = await select(rl, stdout, ideChoices, "Choose IDE adapter", "1");
33
+ const force = await confirm(rl, stdout, "Overwrite unmanaged files if needed?", false);
34
+ const configureGraph = await confirm(rl, stdout, "Run Beads Viewer setup after init?", true);
35
+ stdout.log("");
36
+ stdout.log(`Selected: ${mode}, ide=${ide}, force=${force ? "yes" : "no"}, graph=${configureGraph ? "yes" : "no"}`);
37
+ stdout.log("");
38
+ const initExit = await initCommand({
39
+ root: options.root,
40
+ ide,
41
+ enterprise: mode === "enterprise",
42
+ force,
43
+ stdout,
44
+ });
45
+ if (configureGraph) {
46
+ stdout.log("");
47
+ await graphCommand({ root: options.root, action: "setup", stdout });
48
+ }
49
+ return initExit;
50
+ }
51
+ finally {
52
+ rl.close();
53
+ }
54
+ }
55
+ async function setupFromAnswers(options, stdout, answers) {
56
+ stdout.log("Speckit setup");
57
+ stdout.log("");
58
+ const mode = selectAnswer(stdout, modeChoices, "Choose setup mode", "1", answers.shift());
59
+ const ide = selectAnswer(stdout, ideChoices, "Choose IDE adapter", "1", answers.shift());
60
+ const force = confirmAnswer("Overwrite unmanaged files if needed?", false, answers.shift());
61
+ const configureGraph = confirmAnswer("Run Beads Viewer setup after init?", true, answers.shift());
62
+ stdout.log("");
63
+ stdout.log(`Selected: ${mode}, ide=${ide}, force=${force ? "yes" : "no"}, graph=${configureGraph ? "yes" : "no"}`);
64
+ stdout.log("");
65
+ const initExit = await initCommand({
66
+ root: options.root,
67
+ ide,
68
+ enterprise: mode === "enterprise",
69
+ force,
70
+ stdout,
71
+ });
72
+ if (configureGraph) {
73
+ stdout.log("");
74
+ await graphCommand({ root: options.root, action: "setup", stdout });
75
+ }
76
+ return initExit;
77
+ }
78
+ function selectAnswer(stdout, choices, prompt, defaultValue, answer) {
79
+ stdout.log(prompt);
80
+ choices.forEach((choice, index) => stdout.log(` ${index + 1}. ${choice.label}`));
81
+ const selected = (answer?.trim() || defaultValue);
82
+ const index = Number.parseInt(selected, 10) - 1;
83
+ if (!Number.isInteger(index) || !choices[index]) {
84
+ throw new Error(`Invalid selection: ${selected}`);
85
+ }
86
+ stdout.log("");
87
+ return choices[index].value;
88
+ }
89
+ function confirmAnswer(prompt, defaultValue, answer) {
90
+ const selected = answer?.trim().toLowerCase();
91
+ if (!selected)
92
+ return defaultValue;
93
+ if (["y", "yes"].includes(selected))
94
+ return true;
95
+ if (["n", "no"].includes(selected))
96
+ return false;
97
+ throw new Error(`Invalid yes/no answer for "${prompt}": ${answer}`);
98
+ }
99
+ async function select(rl, stdout, choices, prompt, defaultValue) {
100
+ for (;;) {
101
+ stdout.log(prompt);
102
+ choices.forEach((choice, index) => {
103
+ const number = String(index + 1);
104
+ stdout.log(` ${number}. ${choice.label}`);
105
+ });
106
+ const answer = (await rl.question(`Select [${defaultValue}]: `)).trim() || defaultValue;
107
+ const index = Number.parseInt(answer, 10) - 1;
108
+ if (Number.isInteger(index) && choices[index]) {
109
+ stdout.log("");
110
+ return choices[index].value;
111
+ }
112
+ stdout.log(`Invalid selection: ${answer}`);
113
+ stdout.log("");
114
+ }
115
+ }
116
+ async function confirm(rl, stdout, prompt, defaultValue) {
117
+ const suffix = defaultValue ? "Y/n" : "y/N";
118
+ for (;;) {
119
+ const answer = (await rl.question(`${prompt} [${suffix}]: `)).trim().toLowerCase();
120
+ if (!answer)
121
+ return defaultValue;
122
+ if (["y", "yes"].includes(answer))
123
+ return true;
124
+ if (["n", "no"].includes(answer))
125
+ return false;
126
+ stdout.log("Please answer y or n.");
127
+ }
128
+ }
package/docs/adapters.md CHANGED
@@ -25,3 +25,24 @@ Speckit never invokes bare `bv`. The `next` command calls:
25
25
  ```bash
26
26
  bv --robot-next --format json
27
27
  ```
28
+
29
+ Run this once on a new machine to see install commands and prepare the graph mirror:
30
+
31
+ ```bash
32
+ speckit graph setup
33
+ ```
34
+
35
+ Common `bv` installs:
36
+
37
+ ```bash
38
+ brew install dicklesworthstone/tap/bv
39
+ go install github.com/Dicklesworthstone/beads_viewer/cmd/bv@latest
40
+ ```
41
+
42
+ Graph wrappers use robot mode:
43
+
44
+ ```bash
45
+ speckit graph triage --json
46
+ speckit graph plan --json
47
+ speckit graph insights --json
48
+ ```
@@ -0,0 +1,58 @@
1
+ <!-- speckit:managed -->
2
+ # Beads Viewer Setup
3
+
4
+ Speckit works without Beads Viewer by falling back to local JSON. Install `bv` when you want graph-aware prioritization, bottleneck detection, critical path analysis, and robot-mode planning.
5
+
6
+ ## Install `bv`
7
+
8
+ Recommended on macOS/Linux:
9
+
10
+ ```bash
11
+ brew install dicklesworthstone/tap/bv
12
+ ```
13
+
14
+ Go install:
15
+
16
+ ```bash
17
+ go install github.com/Dicklesworthstone/beads_viewer/cmd/bv@latest
18
+ ```
19
+
20
+ Nix:
21
+
22
+ ```bash
23
+ nix run github:Dicklesworthstone/beads_viewer -- --help
24
+ ```
25
+
26
+ ## Verify With Speckit
27
+
28
+ ```bash
29
+ speckit graph setup
30
+ speckit sync
31
+ speckit graph triage --json
32
+ speckit next
33
+ ```
34
+
35
+ `speckit graph setup` prepares `.beads/beads.jsonl` from Speckit stories and reports whether `bv` is available.
36
+
37
+ ## Agent Safety Rule
38
+
39
+ Do not run bare `bv` from an agent session. Bare `bv` opens the interactive TUI. Use:
40
+
41
+ ```bash
42
+ speckit graph triage --json
43
+ speckit graph plan --json
44
+ speckit graph insights --json
45
+ bv --robot-triage --format json
46
+ bv --robot-next --format json
47
+ ```
48
+
49
+ ## Data Flow
50
+
51
+ ```text
52
+ .speckit/stories/*.md
53
+ -> speckit sync
54
+ -> .speckit/sync/beads-sync.jsonl
55
+ -> .beads/beads.jsonl
56
+ -> bv --robot-* or Speckit graph wrappers
57
+ ```
58
+
@@ -4,7 +4,7 @@
4
4
 
5
5
  Speckit MVP is implemented and pushed to `git@github.com:trieungoctam/speckit.git` on `main`.
6
6
 
7
- Current package target: `@trieungoctam/speckit@0.3.3`.
7
+ Current package target: `@trieungoctam/speckit@0.3.5`.
8
8
 
9
9
  The CLI is npx-ready, generates Agile + TDD rules, creates workflow artifacts, supports five IDE adapters, wraps Beads Viewer safely, includes an enterprise harness, and has automated prompt/readiness/session tests plus CI.
10
10
 
@@ -13,11 +13,11 @@ The CLI is npx-ready, generates Agile + TDD rules, creates workflow artifacts, s
13
13
  | Milestone | Status | Notes |
14
14
  | --- | --- | --- |
15
15
  | Product contract | Complete | Contract, workflow model, and command surface documented. |
16
- | CLI scaffold | Complete | `bin/speckit`, TypeScript build, command router, managed file writer. |
16
+ | CLI scaffold | Complete | `bin/speckit`, TypeScript build, command router, interactive setup wizard, managed file writer. |
17
17
  | Workflow engine | Complete | `start`, `shape`, `plan`, `context`, `quick`, `sync`, `triage`, `ready`, `run`, `review`, and `close` generate linked artifacts. |
18
18
  | Long session manager | Complete | `memory refresh` plus `session start/checkpoint/compact/resume/status` preserve agent continuity outside chat history. |
19
19
  | IDE adapters | Complete | Claude Code, Codex, Antigravity, OpenCode, Cursor. |
20
- | Beads integration | MVP Complete | `next` and `graph triage/plan/insights` wrap BV robot mode; `sync` exports story metadata JSONL. |
20
+ | Beads integration | MVP Complete | `graph setup` prints install commands and prepares `.beads/beads.jsonl`; `next` and `graph triage/plan/insights` wrap BV robot mode; `sync` exports story metadata JSONL. |
21
21
  | Sprint automation | MVP Complete | `sprint plan` and `sprint next` select work from synced stories. |
22
22
  | Enterprise harness | MVP Complete | `init --enterprise` creates flow, tool-policy, and prompt harness files; `doctor --deep` verifies them. |
23
23
  | Curated skill catalog | Complete | Speckit now generates focused phase skills, a schema, delegation statuses, and task hydration/sync-back guidance. |
@@ -1,5 +1,30 @@
1
1
  # Project Changelog
2
2
 
3
+ ## 0.3.5 - 2026-05-11
4
+
5
+ ### Added
6
+
7
+ - Added `speckit setup`, an interactive TUI wizard for setup mode, IDE adapter, overwrite policy, and optional Beads Viewer setup.
8
+ - Added `speckit graph setup` to print Beads Viewer install commands, check `br`/`bd`/`bv`, and prepare `.beads/beads.jsonl`.
9
+ - Added `docs/beads-viewer-setup.md` with Homebrew, Go, and Nix setup paths plus robot-safe verification commands.
10
+
11
+ ### Changed
12
+
13
+ - `speckit doctor` now prints install hints for missing tools.
14
+ - `speckit next` now prints concrete Beads Viewer setup guidance when `bv` is missing.
15
+ - README and workflow docs now include the graph setup step.
16
+
17
+ ## 0.3.4 - 2026-05-11
18
+
19
+ ### Fixed
20
+
21
+ - Fixed global CLI help handling so `speckit --help`, `speckit -h`, `speckit help`, and command-level `--help` print usage without an unknown-command warning.
22
+
23
+ ### Quality
24
+
25
+ - Added CLI help regression coverage.
26
+ - `npm test` passes with 44 tests.
27
+
3
28
  ## 0.3.3 - 2026-05-11
4
29
 
5
30
  ### Added
package/docs/use-cases.md CHANGED
@@ -6,6 +6,16 @@ This guide shows how to use Speckit for common product and engineering workflows
6
6
 
7
7
  Use when a repository does not have Speckit runtime files yet.
8
8
 
9
+ Interactive:
10
+
11
+ ```bash
12
+ npx @trieungoctam/speckit@latest setup
13
+ ```
14
+
15
+ The wizard asks for setup mode, IDE adapter, overwrite policy, and whether to run Beads Viewer setup.
16
+
17
+ Scripted:
18
+
9
19
  ```bash
10
20
  npx @trieungoctam/speckit@latest init --enterprise --ide cursor
11
21
  npx @trieungoctam/speckit@latest doctor --deep
@@ -131,6 +141,7 @@ Use when multiple stories exist and the next task is not obvious.
131
141
 
132
142
  ```bash
133
143
  speckit sync
144
+ speckit graph setup
134
145
  speckit sprint plan
135
146
  speckit sprint next --json
136
147
  speckit graph triage --json
@@ -141,6 +152,7 @@ speckit graph insights --json
141
152
  Best practices:
142
153
 
143
154
  - Run `sync` before any graph command.
155
+ - Run `graph setup` on new machines to print Beads Viewer install commands, check `bv`, and prepare `.beads/beads.jsonl`.
144
156
  - Keep graph commands robot-safe. Use Speckit wrappers instead of interactive graph commands.
145
157
  - Treat graph output as prioritization input, not automatic permission to implement.
146
158
  - Re-run `sprint plan` when story status or dependencies change.
@@ -70,3 +70,5 @@ Long-running agent work must keep durable state outside chat history:
70
70
  ## Beads Viewer Automation
71
71
 
72
72
  `speckit sync` prepares both Speckit sync metadata and a Beads Viewer-compatible `.beads/beads.jsonl` mirror. `speckit graph triage|plan|insights` refreshes that mirror before invoking `bv --robot-*` from the project root, then falls back to local JSON if Beads Viewer is unavailable or still fails.
73
+
74
+ Run `speckit graph setup` on a new machine to print Beads Viewer install commands, check `br`/`bd`/`bv`, and prepare `.beads/beads.jsonl`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trieungoctam/speckit",
3
- "version": "0.3.3",
3
+ "version": "0.3.5",
4
4
  "description": "Enterprise Agile + TDD workflow compiler for agentic IDEs.",
5
5
  "type": "module",
6
6
  "files": [