@zhuk/spego 0.13.1 → 0.14.1

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.
Files changed (47) hide show
  1. package/CHANGELOG.md +25 -6
  2. package/README.md +9 -10
  3. package/dist/cli/commands/artifact.js +3 -3
  4. package/dist/cli/commands/artifact.js.map +1 -1
  5. package/dist/cli/commands/board.d.ts +2 -0
  6. package/dist/cli/commands/{mirror.js → board.js} +10 -127
  7. package/dist/cli/commands/board.js.map +1 -0
  8. package/dist/cli/commands/delivery.d.ts +3 -2
  9. package/dist/cli/commands/delivery.js +44 -38
  10. package/dist/cli/commands/delivery.js.map +1 -1
  11. package/dist/cli/commands/index-rebuild.js +3 -4
  12. package/dist/cli/commands/index-rebuild.js.map +1 -1
  13. package/dist/cli/commands/meta.js +3 -3
  14. package/dist/cli/commands/meta.js.map +1 -1
  15. package/dist/cli/commands/sprints.d.ts +6 -0
  16. package/dist/cli/commands/sprints.js +35 -0
  17. package/dist/cli/commands/sprints.js.map +1 -0
  18. package/dist/cli/commands/view.d.ts +0 -3
  19. package/dist/cli/commands/view.js +3 -14
  20. package/dist/cli/commands/view.js.map +1 -1
  21. package/dist/cli/commands/workspace.js +52 -4
  22. package/dist/cli/commands/workspace.js.map +1 -1
  23. package/dist/cli/render.d.ts +6 -0
  24. package/dist/cli/render.js +9 -0
  25. package/dist/cli/render.js.map +1 -1
  26. package/dist/cli/runtime.d.ts +0 -1
  27. package/dist/cli/runtime.js +1 -1
  28. package/dist/cli/runtime.js.map +1 -1
  29. package/dist/cli.js +4 -2
  30. package/dist/cli.js.map +1 -1
  31. package/dist/command-meta/registry.d.ts +1 -0
  32. package/dist/command-meta/registry.js +18 -8
  33. package/dist/command-meta/registry.js.map +1 -1
  34. package/dist/delivery/load.d.ts +13 -0
  35. package/dist/delivery/load.js +124 -0
  36. package/dist/delivery/load.js.map +1 -0
  37. package/dist/delivery/mirror.d.ts +11 -0
  38. package/dist/delivery/mirror.js +14 -0
  39. package/dist/delivery/mirror.js.map +1 -1
  40. package/dist/generator/claude.d.ts +1 -1
  41. package/dist/generator/claude.js +11 -4
  42. package/dist/generator/claude.js.map +1 -1
  43. package/dist/workflows/registry.js +5 -5
  44. package/dist/workflows/registry.js.map +1 -1
  45. package/package.json +1 -1
  46. package/dist/cli/commands/mirror.d.ts +0 -2
  47. package/dist/cli/commands/mirror.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,14 +1,25 @@
1
1
  # Changelog
2
2
 
3
- ## [0.13.0] - 2026-07-21
3
+ ## [Unreleased]
4
+
5
+ ## [0.14.1] - 2026-07-23
6
+
7
+ ### Changed
8
+ - Uniform human output: every command renders an emoji section header, one blank line, then content; empty states ("No epics.", "No artifacts.", …) keep their section header.
9
+ - Delivery board header emoji is now `📋` (the mirror emoji `🪞` renders poorly in common terminal fonts).
10
+
11
+ ## [0.14.0] - 2026-07-22
4
12
 
5
13
  ### Added
6
- - `epic` artifact type for mirroring OpenSpec changes with deps, links, requires, and gaps metadata.
7
- - `sprint-plan` metadata can list ordered OpenSpec changes, enforced to one non-closed sprint at a time.
8
- - `spego mirror` command deriving the delivery mirror (sprint board, blockers, gaps, drift warnings, next-change suggestion) from OpenSpec changes and `epic`/`sprint-plan` artifacts, with `--graph`, `--gaps`, and deterministic `--json` output.
9
- - `spego-groom` workflow skill for syncing delivery-mirror epics with active OpenSpec changes, analyzing deps/requires/gaps, and maintaining sprint plans.
14
+ - `spego sprints` lists sprint plans in board order (start date, undated last).
15
+ - `spego status` reports advisory delivery drift (ungroomed changes, orphan epics, closable sprints) with a pointer to the groom workflow.
10
16
 
11
- ## [Unreleased]
17
+ ### Changed
18
+ - **Breaking:** renamed `spego mirror` to `spego board` (`/spego:board`); the delivery board name matches what the command renders. The Mirror stays the internal derivation concept.
19
+ - **Breaking:** `spego epics` and `spego tasks` take positional arguments: `spego epics [name]`, `spego tasks <change> [task]`. The `--change` and `--task` flags are gone; mutation verbs in the name position still fail with `DELIVERY_READ_ONLY`.
20
+
21
+ ### Removed
22
+ - **Breaking:** removed the deprecated `spego view --format` flag; use the global `--json` flag.
12
23
 
13
24
  ## [0.13.1] - 2026-07-21
14
25
 
@@ -18,6 +29,14 @@
18
29
  ### Removed
19
30
  - Removed the per-change `openspec status` subprocess call and the "OpenSpec CLI status unavailable" fallback warning; mirror and epics no longer require the `openspec` binary on PATH.
20
31
 
32
+ ## [0.13.0] - 2026-07-21
33
+
34
+ ### Added
35
+ - `epic` artifact type for mirroring OpenSpec changes with deps, links, requires, and gaps metadata.
36
+ - `sprint-plan` metadata can list ordered OpenSpec changes, enforced to one non-closed sprint at a time.
37
+ - `spego mirror` command deriving the delivery mirror (sprint board, blockers, gaps, drift warnings, next-change suggestion) from OpenSpec changes and `epic`/`sprint-plan` artifacts, with `--graph`, `--gaps`, and deterministic `--json` output.
38
+ - `spego-groom` workflow skill for syncing delivery-mirror epics with active OpenSpec changes, analyzing deps/requires/gaps, and maintaining sprint plans.
39
+
21
40
  ## [0.12.0] - 2026-07-12
22
41
 
23
42
  ### Security
package/README.md CHANGED
@@ -24,9 +24,10 @@ spego init --agents claude,opencode --demo false
24
24
  | `spego commands` | List command metadata |
25
25
  | `spego workflows` | List workflow skills metadata |
26
26
  | `spego skills` | Regenerate agent skill files |
27
- | `spego epics` | List delivery epics |
28
- | `spego tasks --change <name>` | List tasks for a change |
29
- | `spego mirror` | Show delivery mirror board |
27
+ | `spego epics [name]` | List delivery epics, or get one by change name |
28
+ | `spego tasks <change> [task]` | List tasks for a change, or get one task |
29
+ | `spego sprints` | List sprint plans in board order |
30
+ | `spego board` | Show the delivery board (sprints, blockers, gaps) |
30
31
  | `spego index rebuild` | Rebuild SQLite index from files |
31
32
 
32
33
  All commands accept `--cwd <dir>` to set the project root.
@@ -35,13 +36,11 @@ All commands accept `--cwd <dir>` to set the project root.
35
36
 
36
37
  Every spego command speaks two output modes:
37
38
 
38
- - **Human (default)** — pretty, scannable output for terminals. Section headers use a single emoji prefix (`📦 📄 🛠️ 🧭 📚 ✅ ✨ 🗑`), summaries render as bordered boxes (`╭─ … ─╮`), lists render as aligned tables, and `view` separates artifacts with `────` dividers. Errors print as `⚠️ [CODE] message` to stderr.
39
+ - **Human (default)** — pretty, scannable output for terminals. Every command renders a section: a single emoji header (`📦 📄 🛠️ 🧭 📚 ✅ ✨ 🗑 📋 🏃 🕸️ 🧩`), one blank line, then the content. Summaries render as bordered boxes (`╭─ … ─╮`), lists render as aligned tables, and `view` separates artifacts with `────` dividers. Errors print as `⚠️ [CODE] message` to stderr.
39
40
  - **JSON (opt-in)** — pass the global `--json` flag to get deterministic, decoration-free JSON on stdout. Errors come back as `{ "error": { "code", "message", "details" } }` on stderr; `details` is always an object.
40
41
 
41
42
  Agents calling spego MUST pass `--json` so they get parseable output. Humans normally do not.
42
43
 
43
- The legacy `spego view --format markdown|json` flag is **deprecated** and will be removed in the next minor release. Use the global `--json` flag instead. The old flag still works during the deprecation window and prints a single `deprecated:` warning line to stderr.
44
-
45
44
  `spego read --json` and `spego update --json` both return artifact records with `frontmatter`, `body`, and `path`; `update` also keeps the compatibility fields `id` and `revision`.
46
45
 
47
46
  `spego create` and `spego update` accept body content through `--body`, `--body-file <path>`, or stdin via `--body-file -`.
@@ -91,17 +90,17 @@ The adapter is read-only. It observes OpenSpec state but does not create, contin
91
90
  | `openspec/changes/<name>/proposal.md` | Epic title |
92
91
  | `openspec/changes/<name>/tasks.md` | Task status and counts |
93
92
 
94
- The `openspec` binary is not required on PATH — mirror and epics resolve status entirely from `tasks.md` on disk.
93
+ The `openspec` binary is not required on PATH — board and epics resolve status entirely from `tasks.md` on disk.
95
94
 
96
95
  Archived changes under `openspec/changes/archive/` are excluded. A change with no `tasks.md` is reported as `planning-incomplete`.
97
96
 
98
97
  ## Delivery Mirror
99
98
 
100
- `spego mirror` derives the delivery mirror on demand — it never writes artifacts or OpenSpec state. It combines active and archived OpenSpec changes with `epic` and `sprint-plan` artifacts into a sprint board: sprints in date order (undated last), changes in each sprint-plan's list order, per-change status, blockers, gaps, and missing artifacts (`requires` minus resolvable `links`). A change is blocked when a dependency is incomplete and not scheduled in the same or an earlier sprint.
99
+ `spego board` derives the delivery mirror on demand — it never writes artifacts or OpenSpec state. It combines active and archived OpenSpec changes with `epic` and `sprint-plan` artifacts into a sprint board: sprints in date order (undated last), changes in each sprint-plan's list order, per-change status, blockers, gaps, and missing artifacts (`requires` minus resolvable `links`). A change is blocked when a dependency is incomplete and not scheduled in the same or an earlier sprint.
101
100
 
102
101
  The default output is the human board. `--graph` shows dependency edges; `--gaps` focuses on gap flags and missing artifacts. The global `--json` flag emits a deterministic `{ sprints, ungrouped, warnings, next }` document in all modes; `next` names the first pending, unblocked change or is `null` with a hint to groom.
103
102
 
104
- Every rendering attaches drift warnings: `dangling-dep`, `dep-cycle`, `ungroomed-change`, `orphan-epic`, `archived-in-sprint`, and `closable-sprint`. Repair belongs to the groom workflow; mirror only reports.
103
+ Every rendering attaches drift warnings: `dangling-dep`, `dep-cycle`, `ungroomed-change`, `orphan-epic`, `archived-in-sprint`, and `closable-sprint`. Repair belongs to the groom workflow; the board only reports.
105
104
 
106
105
  ## OpenCode Workflows
107
106
 
@@ -229,7 +228,7 @@ If a combined workflow discovers that OpenSpec artifacts need to change, use the
229
228
 
230
229
  Delivery-mirror workflow that reconciles active OpenSpec changes with `epic` and `sprint-plan` artifacts. One Groomer persona runs five phases:
231
230
 
232
- 1. `orient` — read `spego mirror --json` and `spego epics --json`, then classify drift warnings.
231
+ 1. `orient` — read `spego board --json` and `spego epics --json`, then classify drift warnings.
233
232
  2. `sync` — create missing epics for ungroomed active changes and propose orphan-epic disposition.
234
233
  3. `analyze` — update deps, requires, supporting links, and gap notes on epics.
235
234
  4. `plan` — propose releasable, testable sprint groupings and create or update `sprint-plan` artifacts after confirmation.
@@ -10,7 +10,7 @@ import { makeSlug } from '../../artifacts/slug.js';
10
10
  import { resolveAdapter } from '../../delivery/index.js';
11
11
  import { assertWorkspace } from '../../delivery/openspec-discover.js';
12
12
  import { SpegoError } from '../../errors.js';
13
- import { renderDivider, renderHeader, renderTable } from '../render.js';
13
+ import { renderDivider, renderHeader, renderSection, renderTable } from '../render.js';
14
14
  import { runEngineCommand } from '../runtime.js';
15
15
  import { resolveBody } from '../body-input.js';
16
16
  import { assertEpicSlugActive } from '../epic-slug.js';
@@ -221,7 +221,7 @@ export function registerArtifact(program) {
221
221
  const items = engine.list({ type: opts.type, includeDeleted: opts.includeDeleted });
222
222
  const human = () => {
223
223
  if (items.length === 0)
224
- return 'No artifacts.';
224
+ return renderSection('📦', 'Artifacts', 'No artifacts.');
225
225
  const rows = items.map((a) => [
226
226
  `${a.type}/${a.slug}`,
227
227
  String(a.revision),
@@ -230,7 +230,7 @@ export function registerArtifact(program) {
230
230
  a.id,
231
231
  ]);
232
232
  const table = renderTable(['type/slug', 'rev', 'status', 'title', 'id'], rows);
233
- return `${renderHeader('📦', 'Artifacts')}\n${table}`;
233
+ return renderSection('📦', 'Artifacts', table);
234
234
  };
235
235
  return { payload: items, human };
236
236
  });
@@ -1 +1 @@
1
- {"version":3,"file":"artifact.js","sourceRoot":"","sources":["../../../src/cli/commands/artifact.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"artifact.js","sourceRoot":"","sources":["../../../src/cli/commands/artifact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerBoard(program: Command): void;
@@ -1,23 +1,17 @@
1
- import path from 'node:path';
2
- import { resolveAdapter } from '../../delivery/index.js';
3
- import { assertWorkspace, discoverChanges } from '../../delivery/openspec-discover.js';
4
- import { listEpicsFromDiscovered } from '../../delivery/openspec-adapter.js';
5
- import { deriveMirror, filterMirrorGaps, } from '../../delivery/mirror.js';
6
- import { SpegoError } from '../../errors.js';
7
- import { readConfig } from '../../workspace/config.js';
8
- import { resolveWorkspacePaths } from '../../workspace/paths.js';
1
+ import { loadBoardState } from '../../delivery/load.js';
2
+ import { filterMirrorGaps, } from '../../delivery/mirror.js';
9
3
  import { renderHeader, renderTable } from '../render.js';
10
4
  import { runEngineCommand } from '../runtime.js';
11
- export function registerMirror(program) {
5
+ export function registerBoard(program) {
12
6
  program
13
- .command('mirror')
14
- .description('Show delivery mirror board')
7
+ .command('board')
8
+ .description('Show the delivery board (sprints, blockers, gaps)')
15
9
  .option('--graph', 'show dependency graph', false)
16
10
  .option('--gaps', 'show gaps, missing artifacts, and blockers', false)
17
11
  .option('--cwd <dir>', 'project root')
18
12
  .action(async (opts) => {
19
13
  await runEngineCommand({ program, cwd: opts.cwd }, async (engine) => {
20
- const state = await loadMirrorState(engine, opts.cwd);
14
+ const state = await loadBoardState(engine, opts.cwd);
21
15
  const payload = opts.gaps ? filterMirrorGaps(state.board) : state.board;
22
16
  return {
23
17
  payload,
@@ -32,119 +26,8 @@ export function registerMirror(program) {
32
26
  });
33
27
  });
34
28
  }
35
- async function loadMirrorState(engine, cwd) {
36
- const projectRoot = path.resolve(cwd ?? process.cwd());
37
- const wsPaths = resolveWorkspacePaths(projectRoot);
38
- const config = await readConfig(wsPaths.configPath);
39
- const adapter = resolveAdapter(projectRoot, config);
40
- try {
41
- const input = await collectMirrorInput(engine, projectRoot, adapter);
42
- return { input, board: deriveMirror(input) };
43
- }
44
- catch (err) {
45
- if (err instanceof SpegoError && err.code === 'DELIVERY_ADAPTER_ERROR') {
46
- const warning = {
47
- code: 'adapter-unavailable',
48
- message: 'OpenSpec workspace unavailable; mirror board is empty.',
49
- details: err.details,
50
- };
51
- const input = {
52
- changes: [],
53
- epics: [],
54
- sprints: [],
55
- linkedArtifacts: [],
56
- warnings: [warning],
57
- };
58
- return { input, board: deriveMirror(input) };
59
- }
60
- throw err;
61
- }
62
- }
63
- async function collectMirrorInput(engine, projectRoot, adapter) {
64
- if (adapter.name === 'openspec')
65
- await assertWorkspace(projectRoot);
66
- const discovered = await discoverChanges(projectRoot);
67
- const adapterEpics = adapter.name === 'openspec'
68
- ? await listEpicsFromDiscovered(projectRoot, discovered.filter((change) => !change.archived))
69
- : await adapter.listEpics();
70
- const adapterBySlug = new Map(adapterEpics.map((epic) => [epic.externalId, epic]));
71
- const seen = new Set();
72
- const changes = discovered
73
- .map((item) => {
74
- seen.add(item.name);
75
- const adapterEpic = adapterBySlug.get(item.name);
76
- return sourceChange(item.name, item.archived, adapterEpic);
77
- })
78
- .sort((a, b) => a.slug.localeCompare(b.slug));
79
- for (const epic of adapterEpics) {
80
- if (seen.has(epic.externalId))
81
- continue;
82
- changes.push(sourceChange(epic.externalId, false, epic));
83
- }
84
- changes.sort((a, b) => a.slug.localeCompare(b.slug));
85
- const epics = engine.list({ type: 'epic' }).map(indexedArtifact);
86
- const sprints = engine.list({ type: 'sprint-plan' }).map(indexedArtifact);
87
- const linkedArtifacts = await resolveLinkedArtifacts(engine, epics);
88
- return { changes, epics, sprints, linkedArtifacts, warnings: [] };
89
- }
90
- function sourceChange(slug, archived, epic) {
91
- const status = archived ? 'completed' : (epic?.status ?? 'unknown');
92
- return {
93
- slug,
94
- title: epic?.title ?? slug,
95
- status,
96
- archived,
97
- warnings: epic?.warnings,
98
- };
99
- }
100
- function indexedArtifact(artifact) {
101
- return {
102
- id: artifact.id,
103
- type: artifact.type,
104
- slug: artifact.slug,
105
- title: artifact.title,
106
- meta: artifact.meta,
107
- };
108
- }
109
- async function resolveLinkedArtifacts(engine, epics) {
110
- const ids = new Set();
111
- for (const epic of epics) {
112
- const links = epic.meta.links;
113
- if (!Array.isArray(links))
114
- continue;
115
- for (const link of links) {
116
- if (typeof link === 'string')
117
- ids.add(link);
118
- }
119
- }
120
- const artifacts = [];
121
- for (const id of [...ids].sort()) {
122
- try {
123
- const record = await engine.readById(id);
124
- artifacts.push({
125
- id: record.frontmatter.id,
126
- type: record.frontmatter.type,
127
- slug: record.frontmatter.slug,
128
- title: record.frontmatter.title,
129
- meta: record.frontmatter.meta,
130
- });
131
- }
132
- catch (err) {
133
- if (err instanceof SpegoError && err.code === 'ARTIFACT_NOT_FOUND')
134
- continue;
135
- throw err;
136
- }
137
- }
138
- artifacts.sort((a, b) => {
139
- const bySlug = a.slug.localeCompare(b.slug);
140
- if (bySlug !== 0)
141
- return bySlug;
142
- return a.id.localeCompare(b.id);
143
- });
144
- return artifacts;
145
- }
146
29
  function renderBoard(board) {
147
- const lines = [renderHeader('🪞', 'Mirror board'), ''];
30
+ const lines = [renderHeader('📋', 'Delivery board'), ''];
148
31
  if (board.sprints.length === 0 && board.ungrouped.length === 0) {
149
32
  lines.push('No groomed delivery board.');
150
33
  }
@@ -176,7 +59,7 @@ function renderGraph(board, input) {
176
59
  rows.push([change.slug, visible.has(dep) ? dep : `${dep} (missing)`, change.blockers.join(', ') || '—', change.status]);
177
60
  }
178
61
  }
179
- const lines = [renderHeader('🕸️', 'Mirror dependency graph'), ''];
62
+ const lines = [renderHeader('🕸️', 'Dependency graph'), ''];
180
63
  if (rows.length === 0)
181
64
  lines.push('No dependency edges.');
182
65
  else
@@ -196,7 +79,7 @@ function renderGaps(board) {
196
79
  for (const change of board.ungrouped) {
197
80
  rows.push([change.slug, '—', change.blockers.join(', ') || '—', formatGaps(change), change.missing.join(', ') || '—']);
198
81
  }
199
- const lines = [renderHeader('🧩', 'Mirror gaps'), ''];
82
+ const lines = [renderHeader('🧩', 'Delivery gaps'), ''];
200
83
  if (rows.length === 0)
201
84
  lines.push('No gaps, missing artifacts, or blockers.');
202
85
  else
@@ -255,4 +138,4 @@ function allChanges(board) {
255
138
  changes.push(...board.ungrouped);
256
139
  return changes;
257
140
  }
258
- //# sourceMappingURL=mirror.js.map
141
+ //# sourceMappingURL=board.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.js","sourceRoot":"","sources":["../../../src/cli/commands/board.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * Delivery commands: read-only `epics` and `tasks` views over the configured
3
- * delivery adapter (default: OpenSpec). Mutating actions are rejected with
4
- * `DELIVERY_READ_ONLY` so users get a structured pointer to the right tool.
3
+ * delivery adapter (default: OpenSpec). Mutation verbs in the name position
4
+ * are rejected with `DELIVERY_READ_ONLY` so agents get a structured pointer
5
+ * to the right tool.
5
6
  */
6
7
  import type { Command } from 'commander';
7
8
  export declare function registerDelivery(program: Command): void;
@@ -1,20 +1,34 @@
1
1
  /**
2
2
  * Delivery commands: read-only `epics` and `tasks` views over the configured
3
- * delivery adapter (default: OpenSpec). Mutating actions are rejected with
4
- * `DELIVERY_READ_ONLY` so users get a structured pointer to the right tool.
3
+ * delivery adapter (default: OpenSpec). Mutation verbs in the name position
4
+ * are rejected with `DELIVERY_READ_ONLY` so agents get a structured pointer
5
+ * to the right tool.
5
6
  */
6
7
  import path from 'node:path';
7
8
  import { resolveWorkspacePaths } from '../../workspace/paths.js';
8
9
  import { readConfig } from '../../workspace/config.js';
9
10
  import { resolveAdapter } from '../../delivery/index.js';
10
11
  import { SpegoError } from '../../errors.js';
11
- import { renderHeader, renderTable } from '../render.js';
12
+ import { renderSection, renderTable } from '../render.js';
12
13
  import { runCommand } from '../runtime.js';
13
- const READ_ONLY_ACTIONS = new Set(['list', 'get']);
14
- function assertReadOnlyAction(action, surface) {
15
- if (!action || READ_ONLY_ACTIONS.has(action))
14
+ const MUTATING_ACTIONS = new Set([
15
+ 'create', 'update', 'delete', 'add', 'remove', 'edit', 'set', 'complete', 'close', 'archive',
16
+ ]);
17
+ function assertReadOnly(name, surface, usage) {
18
+ if (!name)
16
19
  return;
17
- throw new SpegoError('DELIVERY_READ_ONLY', `Cannot '${action}' delivery ${surface} through spego. Use the OpenSpec CLI for delivery mutations.`, { attemptedAction: action, suggestedTool: 'openspec' });
20
+ if (MUTATING_ACTIONS.has(name)) {
21
+ throw new SpegoError('DELIVERY_READ_ONLY', `Cannot '${name}' delivery ${surface} through spego. Use the OpenSpec CLI for delivery mutations.`, { attemptedAction: name, suggestedTool: 'openspec' });
22
+ }
23
+ if (name === 'get') {
24
+ throw new SpegoError('VALIDATION_FAILED', `'get' is no longer an action; usage: ${usage}`, { usage });
25
+ }
26
+ }
27
+ async function loadAdapter(cwd) {
28
+ const projectRoot = path.resolve(cwd ?? process.cwd());
29
+ const wsPaths = resolveWorkspacePaths(projectRoot);
30
+ const config = await readConfig(wsPaths.configPath);
31
+ return resolveAdapter(projectRoot, config);
18
32
  }
19
33
  function renderEpicRow(epic) {
20
34
  const progress = epic.taskCount != null ? `${epic.tasksDone ?? 0}/${epic.taskCount}` : '—';
@@ -26,24 +40,20 @@ function renderTaskRow(task) {
26
40
  export function registerDelivery(program) {
27
41
  program
28
42
  .command('epics')
29
- .description('List epics or get a single epic')
30
- .argument('[action]', 'list (default) or get')
31
- .option('--change <name>', 'get a single epic by name')
43
+ .description('List epics or get a single epic by change name')
44
+ .argument('[name]', 'change name to get a single epic')
32
45
  .option('--cwd <dir>', 'project root')
33
- .action(async (action, opts) => {
46
+ .action(async (name, opts) => {
34
47
  await runCommand({ program }, async () => {
35
- assertReadOnlyAction(action, 'epics');
36
- const projectRoot = path.resolve(opts.cwd ?? process.cwd());
37
- const wsPaths = resolveWorkspacePaths(projectRoot);
38
- const config = await readConfig(wsPaths.configPath);
39
- const adapter = resolveAdapter(projectRoot, config);
40
- if (opts.change) {
41
- const epic = await adapter.getEpic(opts.change);
48
+ assertReadOnly(name, 'epics', 'spego epics <name>');
49
+ const adapter = await loadAdapter(opts.cwd);
50
+ if (name && name !== 'list') {
51
+ const epic = await adapter.getEpic(name);
42
52
  return {
43
53
  payload: epic,
44
54
  human: () => {
45
55
  const table = renderTable(['id', 'status', 'progress', 'title'], [renderEpicRow(epic)]);
46
- return `${renderHeader('📚', `Epic (${adapter.name})`)}\n${table}`;
56
+ return renderSection('📚', `Epic (${adapter.name})`, table);
47
57
  },
48
58
  };
49
59
  }
@@ -52,9 +62,9 @@ export function registerDelivery(program) {
52
62
  payload: epics,
53
63
  human: () => {
54
64
  if (epics.length === 0)
55
- return 'No epics.';
65
+ return renderSection('📚', `Epics (${adapter.name})`, 'No epics.');
56
66
  const table = renderTable(['id', 'status', 'progress', 'title'], epics.map(renderEpicRow));
57
- return `${renderHeader('📚', `Epics (${adapter.name})`)}\n${table}`;
67
+ return renderSection('📚', `Epics (${adapter.name})`, table);
58
68
  },
59
69
  };
60
70
  });
@@ -62,35 +72,31 @@ export function registerDelivery(program) {
62
72
  program
63
73
  .command('tasks')
64
74
  .description('List tasks for a change or get a single task')
65
- .argument('[action]', 'list (default) or get')
66
- .requiredOption('--change <name>', 'the epic/change name')
67
- .option('--task <id>', 'get a single task by id')
75
+ .argument('<change>', 'change or epic name')
76
+ .argument('[task]', 'task id to get a single task')
68
77
  .option('--cwd <dir>', 'project root')
69
- .action(async (action, opts) => {
78
+ .action(async (change, task, opts) => {
70
79
  await runCommand({ program }, async () => {
71
- assertReadOnlyAction(action, 'tasks');
72
- const projectRoot = path.resolve(opts.cwd ?? process.cwd());
73
- const wsPaths = resolveWorkspacePaths(projectRoot);
74
- const config = await readConfig(wsPaths.configPath);
75
- const adapter = resolveAdapter(projectRoot, config);
76
- if (opts.task) {
77
- const task = await adapter.getTask(opts.change, opts.task);
80
+ assertReadOnly(change, 'tasks', 'spego tasks <change> [task]');
81
+ const adapter = await loadAdapter(opts.cwd);
82
+ if (task) {
83
+ const found = await adapter.getTask(change, task);
78
84
  return {
79
- payload: task,
85
+ payload: found,
80
86
  human: () => {
81
- const table = renderTable(['done', 'title'], [renderTaskRow(task)]);
82
- return `${renderHeader('✅', `Task: ${opts.change} (${adapter.name})`)}\n${table}`;
87
+ const table = renderTable(['done', 'title'], [renderTaskRow(found)]);
88
+ return renderSection('✅', `Task: ${change} (${adapter.name})`, table);
83
89
  },
84
90
  };
85
91
  }
86
- const tasks = await adapter.listTasks(opts.change);
92
+ const tasks = await adapter.listTasks(change);
87
93
  return {
88
94
  payload: tasks,
89
95
  human: () => {
90
96
  if (tasks.length === 0)
91
- return `No tasks for ${opts.change}.`;
97
+ return renderSection('✅', `Tasks: ${change} (${adapter.name})`, `No tasks for ${change}.`);
92
98
  const table = renderTable(['done', 'title'], tasks.map(renderTaskRow));
93
- return `${renderHeader('✅', `Tasks: ${opts.change} (${adapter.name})`)}\n${table}`;
99
+ return renderSection('✅', `Tasks: ${change} (${adapter.name})`, table);
94
100
  },
95
101
  };
96
102
  });
@@ -1 +1 @@
1
- {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../../src/cli/commands/delivery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../../src/cli/commands/delivery.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Index maintenance: `spego index rebuild`.
3
3
  */
4
- import { renderBox, renderHeader, renderTable } from '../render.js';
4
+ import { renderBox, renderSection, renderTable } from '../render.js';
5
5
  import { runEngineCommand } from '../runtime.js';
6
6
  export function registerIndex(program) {
7
7
  const indexCmd = program.command('index').description('Index maintenance');
@@ -18,11 +18,10 @@ export function registerIndex(program) {
18
18
  ['indexed', String(report.indexedArtifacts)],
19
19
  ['invalid', String(report.invalidFiles.length)],
20
20
  ]);
21
- const header = renderHeader('📦', 'Index rebuild');
22
21
  if (report.invalidFiles.length === 0)
23
- return `${header}\n${summary}`;
22
+ return renderSection('📦', 'Index rebuild', summary);
24
23
  const table = renderTable(['path', 'error'], report.invalidFiles.map((i) => [i.path, i.error]), { maxWidth: 80 });
25
- return `${header}\n${summary}\n\nInvalid files:\n${table}`;
24
+ return renderSection('📦', 'Index rebuild', summary, `Invalid files:\n${table}`);
26
25
  };
27
26
  return { payload: report, human };
28
27
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index-rebuild.js","sourceRoot":"","sources":["../../../src/cli/commands/index-rebuild.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;IAE3E,QAAQ;SACL,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC;SACrC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,gBAAgB,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAClE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,GAAW,EAAE;gBACzB,MAAM,OAAO,GAAG,SAAS,CAAC,eAAe,EAAE;oBACzC,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;oBACxC,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;oBAC5C,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;iBAChD,CAAC,CAAC;gBACH,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;gBACnD,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,GAAG,MAAM,KAAK,OAAO,EAAE,CAAC;gBACrE,MAAM,KAAK,GAAG,WAAW,CACvB,CAAC,MAAM,EAAE,OAAO,CAAC,EACjB,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EACjD,EAAE,QAAQ,EAAE,EAAE,EAAE,CACjB,CAAC;gBACF,OAAO,GAAG,MAAM,KAAK,OAAO,uBAAuB,KAAK,EAAE,CAAC;YAC7D,CAAC,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"index-rebuild.js","sourceRoot":"","sources":["../../../src/cli/commands/index-rebuild.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;IAE3E,QAAQ;SACL,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC;SACrC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,gBAAgB,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAClE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,GAAW,EAAE;gBACzB,MAAM,OAAO,GAAG,SAAS,CAAC,eAAe,EAAE;oBACzC,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;oBACxC,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;oBAC5C,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;iBAChD,CAAC,CAAC;gBACH,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,aAAa,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;gBAC3F,MAAM,KAAK,GAAG,WAAW,CACvB,CAAC,MAAM,EAAE,OAAO,CAAC,EACjB,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EACjD,EAAE,QAAQ,EAAE,EAAE,EAAE,CACjB,CAAC;gBACF,OAAO,aAAa,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,mBAAmB,KAAK,EAAE,CAAC,CAAC;YACnF,CAAC,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import { COMMAND_REGISTRY } from '../../command-meta/registry.js';
6
6
  import { WORKFLOW_REGISTRY } from '../../workflows/registry.js';
7
- import { renderHeader, renderTable } from '../render.js';
7
+ import { renderSection, renderTable } from '../render.js';
8
8
  import { runCommand } from '../runtime.js';
9
9
  function renderCommandsHuman() {
10
10
  const order = ['workspace', 'artifact', 'view', 'planning'];
@@ -23,12 +23,12 @@ function renderCommandsHuman() {
23
23
  return `${titles[cat]}\n${table}`;
24
24
  })
25
25
  .filter((s) => s.length > 0);
26
- return [renderHeader('🛠️', 'Commands'), '', sections.join('\n\n')].join('\n');
26
+ return renderSection('🛠️', 'Commands', ...sections);
27
27
  }
28
28
  function renderWorkflowsHuman() {
29
29
  const rows = WORKFLOW_REGISTRY.map((w) => [w.name, String(w.phases.length), w.description]);
30
30
  const table = renderTable(['name', 'phases', 'description'], rows, { maxWidth: 80 });
31
- return [renderHeader('🧭', 'Workflows'), '', table].join('\n');
31
+ return renderSection('🧭', 'Workflows', table);
32
32
  }
33
33
  export function registerMeta(program) {
34
34
  program
@@ -1 +1 @@
1
- {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../src/cli/commands/meta.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../src/cli/commands/meta.ts"],"names":[],"mappings":"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"}