@vibecompass/vibecompass 0.2.0 → 0.3.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/README.md +157 -13
- package/package.json +1 -1
- package/src/cli.js +161 -2
- package/src/docs-review.js +813 -0
- package/src/generators/agent-files/template.js +3 -3
- package/src/index.js +1 -0
- package/src/init.js +3 -1
- package/src/manifest.js +34 -1
- package/src/project-memory.js +1 -1
- package/src/scaffold.js +220 -14
- package/src/session.js +256 -25
- package/src/setup.js +54 -0
package/README.md
CHANGED
|
@@ -12,24 +12,31 @@ Shipped today:
|
|
|
12
12
|
|
|
13
13
|
- `vibecompass init` for scaffolding a project-memory root
|
|
14
14
|
- interactive guided init for placement, workflow bootstrap, and first-session setup
|
|
15
|
+
- lightweight starter architecture/session memory plus example-only decision guidance
|
|
15
16
|
- generated `context.md` plus opt-in workflow guide files
|
|
16
17
|
- opt-in starter `CLAUDE.md` / `AGENTS.md` templates that are created once and never overwritten
|
|
17
18
|
- `vibecompass start-session` / `vibecompass close-session` for lane-aware local builder workflow
|
|
18
19
|
- `vibecompass list-sessions` / `vibecompass switch-session` for multiple active session lanes
|
|
19
20
|
- `vibecompass end-session` as a discoverable alias for `close-session`
|
|
20
21
|
- `vibecompass sync-agents` for generated `CLAUDE.md`, `AGENTS.md`, `.cursorrules`, and `.github/copilot-instructions.md` views
|
|
22
|
+
- `vibecompass docs-review --guided` — print a comprehensive review prompt for your chosen LLM to run
|
|
23
|
+
- `vibecompass docs-review --submit-hosted` — submit the review request to the hosted app (execution paused; details below)
|
|
24
|
+
- `vibecompass docs-review --run-local --provider anthropic` — local provider adapter that saves review output locally
|
|
25
|
+
- `vibecompass docs-review --apply-output` — apply accepted architecture-doc blocks into canonical `architecture/` docs
|
|
26
|
+
- `vibecompass docs-review --complete` — mark the review accepted after the docs land
|
|
21
27
|
- canonical file scanning and validation
|
|
22
28
|
- `state/manifest.json` generation
|
|
23
29
|
- JavaScript read-model helpers for project, feature, decision, and file context
|
|
24
30
|
|
|
25
31
|
Not shipped yet:
|
|
26
32
|
|
|
27
|
-
- hosted sync commands
|
|
33
|
+
- hosted sync commands (push, pull-preview, pull-export)
|
|
34
|
+
- hosted docs-review execution that runs the review and writes canonical docs
|
|
35
|
+
- additional local docs-review providers beyond Anthropic
|
|
36
|
+
- automatic acceptance of review findings without a local apply step
|
|
28
37
|
|
|
29
38
|
The package is publishable now as the file-contract and read-model core. The
|
|
30
39
|
broader local-primary sync workflow is still being built on top of it.
|
|
31
|
-
The lane-aware session workflow is intended to publish as `0.2.0`; the local
|
|
32
|
-
package may remain at `0.1.0` until the publish pass.
|
|
33
40
|
|
|
34
41
|
## Requirements
|
|
35
42
|
|
|
@@ -61,9 +68,9 @@ npx -y @vibecompass/vibecompass init --guided
|
|
|
61
68
|
```
|
|
62
69
|
|
|
63
70
|
Guided init asks about repo topology, recommends a placement pattern
|
|
64
|
-
(`workspace-root`, `dedicated-memory-repo`, or `primary-repo`),
|
|
65
|
-
|
|
66
|
-
immediately.
|
|
71
|
+
(`workspace-root`, `dedicated-memory-repo`, or `primary-repo`), writes
|
|
72
|
+
lightweight starter project memory, scaffolds the workflow files you opt into,
|
|
73
|
+
and can open the first builder session immediately.
|
|
67
74
|
|
|
68
75
|
When the owner directory is a workspace root or primary repo, the canonical
|
|
69
76
|
root defaults to `.compass/` inside that directory. For a dedicated memory repo,
|
|
@@ -84,10 +91,26 @@ npx -y @vibecompass/vibecompass init \
|
|
|
84
91
|
--close-session-git-publish \
|
|
85
92
|
--close-session-git-remote origin \
|
|
86
93
|
--start-session \
|
|
94
|
+
--session-id mcp-dogfood \
|
|
87
95
|
--session-working-on "Validate the local-first MCP workflow"
|
|
88
96
|
```
|
|
89
97
|
|
|
90
|
-
That creates the canonical root plus
|
|
98
|
+
That creates the canonical root plus lightweight starter memory:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
PROJECT_MEMORY_ROOT/project.yaml
|
|
102
|
+
PROJECT_MEMORY_ROOT/architecture/overview/project-shape.md
|
|
103
|
+
PROJECT_MEMORY_ROOT/decisions/EXAMPLE.md # example-only, ignored by canonical parsing
|
|
104
|
+
PROJECT_MEMORY_ROOT/sessions/YYYY-MM-DD-1-project-memory-initialized.md
|
|
105
|
+
PROJECT_MEMORY_ROOT/state/manifest.json
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
The starter architecture doc is intentionally marked as initial scaffold
|
|
109
|
+
coverage. It is useful orientation, not a comprehensive review. Before risky
|
|
110
|
+
implementation work, inspect the relevant code and replace or expand the
|
|
111
|
+
starter docs with evidence-backed domain/feature/component docs.
|
|
112
|
+
|
|
113
|
+
When workflow scaffolding is enabled, init also creates:
|
|
91
114
|
|
|
92
115
|
```text
|
|
93
116
|
PROJECT_MEMORY_ROOT/context.md
|
|
@@ -101,6 +124,53 @@ AGENTS.md # at the tooling root, only if missing and --with-agents is
|
|
|
101
124
|
`context.md` is a derived package-owned file. Re-running `init --force --with-workflow`
|
|
102
125
|
regenerates it; do not treat it as a hand-edited source document.
|
|
103
126
|
|
|
127
|
+
## After init: generate real architecture docs
|
|
128
|
+
|
|
129
|
+
`init` writes a small starter map of your project. To turn it into real
|
|
130
|
+
architecture docs, run a docs-review and let your AI tool write them:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
npx -y @vibecompass/vibecompass docs-review --guided
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
You can run this right after `init`, or any time later — for example after
|
|
137
|
+
scope expands, or before risky implementation work. `start-session` will
|
|
138
|
+
remind you with a non-blocking warning if no completed review exists.
|
|
139
|
+
|
|
140
|
+
What happens:
|
|
141
|
+
|
|
142
|
+
1. The CLI asks which LLM you'll use, then prints a versioned prompt template with fixed review criteria.
|
|
143
|
+
2. You paste that prompt into your AI tool (Claude Code, Codex, Cursor, etc.).
|
|
144
|
+
3. The AI reads your repo and writes architecture docs under
|
|
145
|
+
`architecture/<domain>/<feature>/<component>.md`.
|
|
146
|
+
4. Run `vibecompass docs-review --apply-output` after accepting fenced
|
|
147
|
+
architecture-doc blocks, or `--complete` if accepted docs were written
|
|
148
|
+
manually.
|
|
149
|
+
|
|
150
|
+
The guided prompt is deterministic apart from project-specific fields
|
|
151
|
+
(`project`, `mode`, `root`, provider, and model). It uses the same structure
|
|
152
|
+
VibeCompass dogfoods: read project memory first, inspect source evidence,
|
|
153
|
+
write component docs with review metadata, preserve the starter overview, and
|
|
154
|
+
emit accepted docs as `vibecompass-architecture-doc` blocks.
|
|
155
|
+
|
|
156
|
+
The package never calls an AI itself — that's intentional. You stay in
|
|
157
|
+
control of which provider runs the review and what gets saved.
|
|
158
|
+
|
|
159
|
+
### Other ways to run a review
|
|
160
|
+
|
|
161
|
+
- `--submit-hosted` sends the review request to the hosted app and records a
|
|
162
|
+
run ID. The hosted worker that actually runs the review and writes docs
|
|
163
|
+
isn't live yet, so the submission is durably accepted but no scan runs
|
|
164
|
+
against it.
|
|
165
|
+
- `--run-local --provider anthropic` calls Anthropic directly with your
|
|
166
|
+
`ANTHROPIC_API_KEY` and saves the raw output to
|
|
167
|
+
`state/docs-review-output.md`.
|
|
168
|
+
- `--apply-output` writes accepted fenced architecture-doc blocks from
|
|
169
|
+
`state/docs-review-output.md` into canonical `architecture/` docs and
|
|
170
|
+
completes the local review marker.
|
|
171
|
+
|
|
172
|
+
For most users, stick with `--guided`.
|
|
173
|
+
|
|
104
174
|
If you do not chain straight into a first session from `init`, open one later:
|
|
105
175
|
|
|
106
176
|
```bash
|
|
@@ -143,8 +213,8 @@ the builder closes the session with `vibecompass close-session --session
|
|
|
143
213
|
|
|
144
214
|
Active builder sessions are named lanes under
|
|
145
215
|
`sessions/active/<lane-id>/`. Use one lane per active feature or workstream.
|
|
146
|
-
`start-session`
|
|
147
|
-
|
|
216
|
+
`start-session` requires `--id <lane-id>` for every lane, including the first
|
|
217
|
+
one in a project.
|
|
148
218
|
Finalized sessions are append-only notes named
|
|
149
219
|
`sessions/YYYY-MM-DD-N-title.md`, so multiple sessions on the same day
|
|
150
220
|
increment `N`. Decisions remain append-only in `decisions/`; a session note
|
|
@@ -234,6 +304,7 @@ Options:
|
|
|
234
304
|
- `--with-agents`: create a starter `AGENTS.md` if it does not already exist
|
|
235
305
|
- `--start-session`: open the first builder session after init
|
|
236
306
|
- `--session-working-on <text>`: required with `--start-session` outside guided mode
|
|
307
|
+
- `--session-id <lane-id>`: required with `--start-session`; names the first builder lane
|
|
237
308
|
- `--close-session-git-publish`: store that the close-session workflow includes a Git publish step
|
|
238
309
|
- `--close-session-git-remote <name>`: optional default Git remote name for that stored publish step
|
|
239
310
|
- `--force`: overwrite an existing `project.yaml`
|
|
@@ -247,7 +318,7 @@ include a Git publish step and which remote name to use for that step.
|
|
|
247
318
|
### `vibecompass start-session`
|
|
248
319
|
|
|
249
320
|
```text
|
|
250
|
-
vibecompass start-session --working-on <text> [options]
|
|
321
|
+
vibecompass start-session --id <lane-id> --working-on <text> [options]
|
|
251
322
|
```
|
|
252
323
|
|
|
253
324
|
Options:
|
|
@@ -255,7 +326,7 @@ Options:
|
|
|
255
326
|
- `--root <path>`: project-memory root; defaults to `.compass`
|
|
256
327
|
- `--tooling-root <path>`: workspace root that contains `CLAUDE.md`; defaults to cwd
|
|
257
328
|
- `--working-on <text>`: required active-session summary
|
|
258
|
-
- `--id <lane-id>`:
|
|
329
|
+
- `--id <lane-id>`: required lane ID
|
|
259
330
|
- `--feature <slug>`: repeatable feature slug for the lane
|
|
260
331
|
- `--repo <id>`: repeatable repo ID for the lane
|
|
261
332
|
- `--claim <path>`: repeatable path claim for overlap warnings
|
|
@@ -265,6 +336,10 @@ This command updates the `Current session` block in `CLAUDE.md` and creates
|
|
|
265
336
|
`sessions/active/<lane-id>/session.yaml`, `wip.md`, and `handoff.md` for the
|
|
266
337
|
next session number. It also updates `sessions/active/index.yaml`.
|
|
267
338
|
|
|
339
|
+
If no completed docs-review marker exists under `state/docs-review.json`,
|
|
340
|
+
`start-session` prints a non-blocking warning that starter docs are not a
|
|
341
|
+
comprehensive architecture review.
|
|
342
|
+
|
|
268
343
|
### `vibecompass list-sessions`
|
|
269
344
|
|
|
270
345
|
```text
|
|
@@ -332,6 +407,72 @@ memory. It creates missing files with managed markers, replaces existing
|
|
|
332
407
|
managed regions, preserves content outside markers, and warns instead of
|
|
333
408
|
overwriting existing unmarked files.
|
|
334
409
|
|
|
410
|
+
### `vibecompass docs-review`
|
|
411
|
+
|
|
412
|
+
```text
|
|
413
|
+
vibecompass docs-review --guided [options]
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
Options:
|
|
417
|
+
|
|
418
|
+
- `--root <path>`: project-memory root; defaults to `.compass`
|
|
419
|
+
- `--guided`: print a comprehensive review prompt for your chosen LLM to run (recommended)
|
|
420
|
+
- `--submit-hosted`: submit the review request to the hosted app (execution paused; submission durable)
|
|
421
|
+
- `--run-local`: run the generated review request with a local provider
|
|
422
|
+
- `--provider <name>`: local provider for `--run-local`; currently `anthropic`
|
|
423
|
+
- `--run-local-anthropic`: compatibility alias for `--run-local --provider anthropic`
|
|
424
|
+
- `--apply-output`: apply accepted architecture-doc blocks from review output
|
|
425
|
+
- `--output <path>`: review output path for `--apply-output`; defaults to `state/docs-review-output.md`
|
|
426
|
+
- `--complete`: mark accepted docs-review changes as completed in local state
|
|
427
|
+
- `--llm <name>`: preferred LLM/provider to record for the review (e.g. `claude`, `codex`, `gemini`)
|
|
428
|
+
- `--model <name>`: model name/version to record for the review
|
|
429
|
+
- `--anthropic-env-var <name>`: env var for local Anthropic runtime; defaults to `ANTHROPIC_API_KEY`
|
|
430
|
+
- `--max-tokens <number>`: local Anthropic output budget, 1024–32000; defaults to 16000
|
|
431
|
+
|
|
432
|
+
Plain `--guided` does not call an AI itself; it prints a review prompt your
|
|
433
|
+
chosen LLM runs. `--submit-hosted`, `--run-local`, and `--apply-output` are
|
|
434
|
+
explicit alternative steps.
|
|
435
|
+
|
|
436
|
+
Project-mode requirements:
|
|
437
|
+
|
|
438
|
+
- `local-only` — `--guided` can use any external LLM; `--run-local` requires a supported local provider key
|
|
439
|
+
- `local-primary` — hosted sync binding preferred for hosted submission; local provider key accepted for `--run-local`
|
|
440
|
+
- `hosted-only` — hosted sync binding required
|
|
441
|
+
|
|
442
|
+
`--run-local --provider anthropic` always uses local Anthropic regardless of
|
|
443
|
+
hosted binding, so hosted precedence does not apply when that flag is set.
|
|
444
|
+
|
|
445
|
+
`--submit-hosted` uses `sync.credential_env_var` and records the hosted run
|
|
446
|
+
ID in `state/docs-review.json`. Submission is durable today; the hosted
|
|
447
|
+
worker that runs the review and writes canonical docs is not yet live, so
|
|
448
|
+
no scan executes against the submitted request. Local files stay untouched.
|
|
449
|
+
|
|
450
|
+
`--run-local-anthropic` remains as a compatibility alias. New scripts should
|
|
451
|
+
use `--run-local --provider anthropic`.
|
|
452
|
+
|
|
453
|
+
`--apply-output` looks for accepted architecture docs in fenced blocks:
|
|
454
|
+
|
|
455
|
+
````md
|
|
456
|
+
```vibecompass-architecture-doc path=architecture/domain/feature/component.md
|
|
457
|
+
---
|
|
458
|
+
domain: Platform
|
|
459
|
+
feature: Example
|
|
460
|
+
component: Backend
|
|
461
|
+
status: In progress
|
|
462
|
+
---
|
|
463
|
+
|
|
464
|
+
## Description
|
|
465
|
+
Accepted review content.
|
|
466
|
+
```
|
|
467
|
+
````
|
|
468
|
+
|
|
469
|
+
Only `architecture/*.md` paths are writable through this apply step.
|
|
470
|
+
|
|
471
|
+
`vibecompass docs-review --complete` updates the marker in
|
|
472
|
+
`state/docs-review.json` to `status: "completed"` once the docs have
|
|
473
|
+
landed, preserving the recorded `llm` / `model` so future sessions know
|
|
474
|
+
what reviewed the architecture.
|
|
475
|
+
|
|
335
476
|
### Prompt commands
|
|
336
477
|
|
|
337
478
|
These are the default prompt commands used by the scaffolded workflow files:
|
|
@@ -340,19 +481,22 @@ These are the default prompt commands used by the scaffolded workflow files:
|
|
|
340
481
|
- `join as reviewer`: reviewer role trigger
|
|
341
482
|
- `review handoff`: reviewer reads the selected lane's latest `wip.md`, `handoff.md`, latest finalized note, and relevant diffs before appending findings
|
|
342
483
|
- `address review`: builder reads the latest reviewer feedback in the selected lane's `wip.md` / `handoff.md`, responds inline, applies accepted changes, and refreshes the builder handoff
|
|
484
|
+
- `close session`: builder runs the close-out checklist and ends with `vibecompass close-session --session <lane-id>`; `end session` is accepted as a synonym
|
|
343
485
|
|
|
344
486
|
They are prompt commands for AI-tool behavior, not package CLI commands.
|
|
345
487
|
Reviewer handback ends when the reviewer has updated the selected lane's
|
|
346
488
|
`wip.md` and `handoff.md`; there is no extra reviewer-exit step. The builder
|
|
347
489
|
remains in builder role, uses `address review` until findings are resolved or
|
|
348
|
-
explicitly deferred, and then
|
|
349
|
-
<lane-id>` using the workflow defaults
|
|
490
|
+
explicitly deferred, and then uses the `close session` prompt to run
|
|
491
|
+
`vibecompass close-session --session <lane-id>` using the workflow defaults
|
|
492
|
+
recorded in `project.yaml`.
|
|
350
493
|
|
|
351
494
|
## JavaScript API
|
|
352
495
|
|
|
353
496
|
```js
|
|
354
497
|
import {
|
|
355
498
|
initializeProjectMemory,
|
|
499
|
+
preflightDocsReview,
|
|
356
500
|
startProjectSession,
|
|
357
501
|
closeProjectSession,
|
|
358
502
|
syncAgentInstructionFiles,
|
package/package.json
CHANGED
package/src/cli.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { realpathSync } from 'node:fs';
|
|
4
4
|
import { pathToFileURL } from 'node:url';
|
|
5
5
|
import { initializeProjectMemory } from './init.js';
|
|
6
|
+
import { preflightDocsReview } from './docs-review.js';
|
|
6
7
|
import { resolveInitCliOptions } from './setup.js';
|
|
7
8
|
import { closeProjectSession, listProjectSessions, startProjectSession, switchProjectSession } from './session.js';
|
|
8
9
|
import { syncAgentInstructionFiles } from './generators/agent-files/index.js';
|
|
@@ -62,6 +63,7 @@ export async function runCli(argv, io = createDefaultIo(), runtime = {}) {
|
|
|
62
63
|
const sessionResult = await startProjectSession({
|
|
63
64
|
rootDir: initPlan.initOptions.rootDir,
|
|
64
65
|
toolingRootDir: initPlan.initOptions.toolingRootDir,
|
|
66
|
+
sessionId: initPlan.sessionPlan.sessionId,
|
|
65
67
|
workingOn: initPlan.sessionPlan.workingOn,
|
|
66
68
|
...(runtime.cwd ? { cwd: runtime.cwd } : {}),
|
|
67
69
|
});
|
|
@@ -69,6 +71,8 @@ export async function runCli(argv, io = createDefaultIo(), runtime = {}) {
|
|
|
69
71
|
io.stdout.write(`Updated ${sessionResult.claudePath}\n`);
|
|
70
72
|
io.stdout.write(`Created ${sessionResult.wipFilePath}\n`);
|
|
71
73
|
io.stdout.write(`Created ${sessionResult.handoffFilePath}\n`);
|
|
74
|
+
writeWarnings(io, sessionResult.warnings);
|
|
75
|
+
writeAgentFileSyncResult(io, sessionResult.agentFileSync);
|
|
72
76
|
}
|
|
73
77
|
|
|
74
78
|
return 0;
|
|
@@ -83,6 +87,8 @@ export async function runCli(argv, io = createDefaultIo(), runtime = {}) {
|
|
|
83
87
|
io.stdout.write(`Updated ${result.claudePath}\n`);
|
|
84
88
|
io.stdout.write(`Created ${result.wipFilePath}\n`);
|
|
85
89
|
io.stdout.write(`Created ${result.handoffFilePath}\n`);
|
|
90
|
+
writeWarnings(io, result.warnings);
|
|
91
|
+
writeAgentFileSyncResult(io, result.agentFileSync);
|
|
86
92
|
return 0;
|
|
87
93
|
}
|
|
88
94
|
|
|
@@ -127,6 +133,8 @@ export async function runCli(argv, io = createDefaultIo(), runtime = {}) {
|
|
|
127
133
|
...(runtime.cwd ? { cwd: runtime.cwd } : {}),
|
|
128
134
|
});
|
|
129
135
|
io.stdout.write(`Current session lane: ${result.current}\n`);
|
|
136
|
+
io.stdout.write(`Updated ${result.claudePath}\n`);
|
|
137
|
+
writeAgentFileSyncResult(io, result.agentFileSync);
|
|
130
138
|
return 0;
|
|
131
139
|
}
|
|
132
140
|
|
|
@@ -139,6 +147,47 @@ export async function runCli(argv, io = createDefaultIo(), runtime = {}) {
|
|
|
139
147
|
return 0;
|
|
140
148
|
}
|
|
141
149
|
|
|
150
|
+
if (parsed.command === 'docs-review') {
|
|
151
|
+
const result = await preflightDocsReview({
|
|
152
|
+
...parsed.options,
|
|
153
|
+
...(runtime.cwd ? { cwd: runtime.cwd } : {}),
|
|
154
|
+
}, {
|
|
155
|
+
io,
|
|
156
|
+
env: runtime.env,
|
|
157
|
+
runtime,
|
|
158
|
+
});
|
|
159
|
+
io.stdout.write(`Docs-review: ${result.status}\n`);
|
|
160
|
+
if (result.llm) {
|
|
161
|
+
io.stdout.write(`LLM: ${result.llm}\n`);
|
|
162
|
+
}
|
|
163
|
+
if (result.model) {
|
|
164
|
+
io.stdout.write(`Model: ${result.model}\n`);
|
|
165
|
+
}
|
|
166
|
+
if (result.runtime) {
|
|
167
|
+
io.stdout.write(`Runtime: ${result.runtime.provider}\n`);
|
|
168
|
+
}
|
|
169
|
+
if (result.hosted) {
|
|
170
|
+
io.stdout.write(`Hosted run: ${result.hosted.run_id}\n`);
|
|
171
|
+
}
|
|
172
|
+
if (result.localReview) {
|
|
173
|
+
io.stdout.write(`Local review output: ${result.localReview.output_path}\n`);
|
|
174
|
+
}
|
|
175
|
+
if (result.applied) {
|
|
176
|
+
io.stdout.write(`Applied architecture docs: ${result.applied.architecture_docs.length}\n`);
|
|
177
|
+
for (const entry of result.applied.architecture_docs) {
|
|
178
|
+
io.stdout.write(`- ${entry.path} (${entry.status})\n`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
writeWarnings(io, result.warnings);
|
|
182
|
+
io.stdout.write(`Recorded ${result.statePath}\n`);
|
|
183
|
+
io.stdout.write(`${result.message}\n`);
|
|
184
|
+
if (result.reviewPrompt) {
|
|
185
|
+
io.stdout.write('Architecture review prompt:\n');
|
|
186
|
+
io.stdout.write(`${result.reviewPrompt}\n`);
|
|
187
|
+
}
|
|
188
|
+
return 0;
|
|
189
|
+
}
|
|
190
|
+
|
|
142
191
|
throw new Error(`Unknown command "${parsed.command}".`);
|
|
143
192
|
}
|
|
144
193
|
|
|
@@ -170,6 +219,10 @@ export function parseCliArgs(argv) {
|
|
|
170
219
|
return parseSyncAgentsArgs(rest);
|
|
171
220
|
}
|
|
172
221
|
|
|
222
|
+
if (command === 'docs-review') {
|
|
223
|
+
return parseDocsReviewArgs(rest);
|
|
224
|
+
}
|
|
225
|
+
|
|
173
226
|
return { command };
|
|
174
227
|
}
|
|
175
228
|
|
|
@@ -270,6 +323,9 @@ export function parseCliArgs(argv) {
|
|
|
270
323
|
case '--session-working-on':
|
|
271
324
|
parsed.sessionWorkingOn = value;
|
|
272
325
|
break;
|
|
326
|
+
case '--session-id':
|
|
327
|
+
parsed.sessionId = value;
|
|
328
|
+
break;
|
|
273
329
|
case '--close-session-git-remote':
|
|
274
330
|
parsed.closeSessionGitRemote = value;
|
|
275
331
|
break;
|
|
@@ -306,6 +362,7 @@ export function parseCliArgs(argv) {
|
|
|
306
362
|
force: parsed.force,
|
|
307
363
|
startSession: parsed.startSession,
|
|
308
364
|
sessionWorkingOn: parsed.sessionWorkingOn,
|
|
365
|
+
sessionId: parsed.sessionId,
|
|
309
366
|
closeSessionGitPublish: parsed.closeSessionGitPublish,
|
|
310
367
|
closeSessionGitRemote: parsed.closeSessionGitRemote,
|
|
311
368
|
...(parsed.withWorkflow || parsed.withClaude || parsed.withAgents
|
|
@@ -578,6 +635,85 @@ function parseSyncAgentsArgs(argv) {
|
|
|
578
635
|
};
|
|
579
636
|
}
|
|
580
637
|
|
|
638
|
+
function parseDocsReviewArgs(argv) {
|
|
639
|
+
const parsed = {};
|
|
640
|
+
|
|
641
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
642
|
+
const token = argv[index];
|
|
643
|
+
|
|
644
|
+
if (token === '--guided') {
|
|
645
|
+
parsed.guided = true;
|
|
646
|
+
continue;
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
if (token === '--submit-hosted') {
|
|
650
|
+
parsed.submitHosted = true;
|
|
651
|
+
continue;
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
if (token === '--complete') {
|
|
655
|
+
parsed.complete = true;
|
|
656
|
+
continue;
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
if (token === '--run-local-anthropic') {
|
|
660
|
+
parsed.runLocalAnthropic = true;
|
|
661
|
+
continue;
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
if (token === '--run-local') {
|
|
665
|
+
parsed.runLocal = true;
|
|
666
|
+
continue;
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
if (token === '--apply-output') {
|
|
670
|
+
parsed.applyOutput = true;
|
|
671
|
+
continue;
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
if (!token.startsWith('--')) {
|
|
675
|
+
throw new Error(`Unexpected argument "${token}".`);
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
const value = argv[index + 1];
|
|
679
|
+
if (value === undefined) {
|
|
680
|
+
throw new Error(`Flag "${token}" requires a value.`);
|
|
681
|
+
}
|
|
682
|
+
index += 1;
|
|
683
|
+
|
|
684
|
+
switch (token) {
|
|
685
|
+
case '--root':
|
|
686
|
+
parsed.rootDir = value;
|
|
687
|
+
break;
|
|
688
|
+
case '--llm':
|
|
689
|
+
parsed.llm = value;
|
|
690
|
+
break;
|
|
691
|
+
case '--model':
|
|
692
|
+
parsed.model = value;
|
|
693
|
+
break;
|
|
694
|
+
case '--anthropic-env-var':
|
|
695
|
+
parsed.anthropicEnvVar = value;
|
|
696
|
+
break;
|
|
697
|
+
case '--provider':
|
|
698
|
+
parsed.provider = value;
|
|
699
|
+
break;
|
|
700
|
+
case '--output':
|
|
701
|
+
parsed.outputPath = value;
|
|
702
|
+
break;
|
|
703
|
+
case '--max-tokens':
|
|
704
|
+
parsed.maxTokens = value;
|
|
705
|
+
break;
|
|
706
|
+
default:
|
|
707
|
+
throw new Error(`Unknown flag "${token}".`);
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
return {
|
|
712
|
+
command: 'docs-review',
|
|
713
|
+
options: parsed,
|
|
714
|
+
};
|
|
715
|
+
}
|
|
716
|
+
|
|
581
717
|
function writeAgentFileSyncResult(io, result) {
|
|
582
718
|
if (!result) {
|
|
583
719
|
return;
|
|
@@ -591,6 +727,12 @@ function writeAgentFileSyncResult(io, result) {
|
|
|
591
727
|
}
|
|
592
728
|
}
|
|
593
729
|
|
|
730
|
+
function writeWarnings(io, warnings = []) {
|
|
731
|
+
for (const warning of warnings) {
|
|
732
|
+
io.stderr.write(`Warning: ${warning}\n`);
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
|
|
594
736
|
function splitAssignment(value, flagName) {
|
|
595
737
|
const separatorIndex = value.indexOf('=');
|
|
596
738
|
if (separatorIndex <= 0 || separatorIndex === value.length - 1) {
|
|
@@ -604,12 +746,13 @@ function usageText() {
|
|
|
604
746
|
return [
|
|
605
747
|
'Usage:',
|
|
606
748
|
' vibecompass init --name <project-name> --mode <local-only|local-primary|hosted-only> --repo <id=remote> [options]',
|
|
607
|
-
' vibecompass start-session --working-on <text> [options]',
|
|
749
|
+
' vibecompass start-session --id <lane-id> --working-on <text> [options]',
|
|
608
750
|
' vibecompass close-session --title <text> --completed <text> --next-step <text> [options]',
|
|
609
751
|
' vibecompass end-session --title <text> --completed <text> --next-step <text> [options] # alias',
|
|
610
752
|
' vibecompass list-sessions [options]',
|
|
611
753
|
' vibecompass switch-session <id> [options]',
|
|
612
754
|
' vibecompass sync-agents [options]',
|
|
755
|
+
' vibecompass docs-review --guided [options]',
|
|
613
756
|
'',
|
|
614
757
|
'Init options:',
|
|
615
758
|
' --root <path> Project-memory root. Defaults to .compass',
|
|
@@ -629,6 +772,7 @@ function usageText() {
|
|
|
629
772
|
' --with-agents Create a starter AGENTS.md if missing',
|
|
630
773
|
' --start-session Open the first builder session after init',
|
|
631
774
|
' --session-working-on <text> Required with --start-session outside guided mode',
|
|
775
|
+
' --session-id <lane-id> Required with --start-session; names the first builder lane',
|
|
632
776
|
' --close-session-git-publish Include a Git publish step in the stored close-session workflow',
|
|
633
777
|
' --close-session-git-remote <name> Default Git remote name for that close-session publish step',
|
|
634
778
|
' --force Overwrite an existing project.yaml',
|
|
@@ -637,7 +781,7 @@ function usageText() {
|
|
|
637
781
|
' --root <path> Project-memory root. Defaults to .compass',
|
|
638
782
|
' --tooling-root <path> Tooling root that contains CLAUDE.md. Defaults to cwd',
|
|
639
783
|
' --working-on <text> Required active-session summary',
|
|
640
|
-
' --id <lane-id>
|
|
784
|
+
' --id <lane-id> Required active session lane ID',
|
|
641
785
|
' --feature <slug> Repeatable feature slug for the lane',
|
|
642
786
|
' --repo <id> Repeatable repo ID for the lane',
|
|
643
787
|
' --claim <path> Repeatable path claim for overlap warnings',
|
|
@@ -669,6 +813,21 @@ function usageText() {
|
|
|
669
813
|
' --tooling-root <path> Directory where agent files are written. Defaults to cwd',
|
|
670
814
|
' --format <name> Optional format: claude_md, agents_md, cursor_rules, copilot_instructions',
|
|
671
815
|
' --dry-run Show planned writes without changing files',
|
|
816
|
+
'',
|
|
817
|
+
'Docs-review options:',
|
|
818
|
+
' --root <path> Project-memory root. Defaults to .compass',
|
|
819
|
+
' --guided Accepted for the explicit comprehensive-review workflow',
|
|
820
|
+
' --submit-hosted Submit the generated review request to hosted sync',
|
|
821
|
+
' --complete Mark accepted docs-review changes as completed locally',
|
|
822
|
+
' --run-local Run the generated review request with a local provider',
|
|
823
|
+
' --provider <name> Local provider for --run-local. Currently: anthropic',
|
|
824
|
+
' --run-local-anthropic Compatibility alias for --run-local --provider anthropic',
|
|
825
|
+
' --apply-output Apply accepted architecture doc blocks from review output',
|
|
826
|
+
' --output <path> Review output path for --apply-output; defaults to state/docs-review-output.md',
|
|
827
|
+
' --llm <name> Preferred LLM/provider to run the external architecture review',
|
|
828
|
+
' --model <name> Model name to record for the review',
|
|
829
|
+
' --anthropic-env-var <name> Env var to use for local Anthropic docs-review runtime',
|
|
830
|
+
' --max-tokens <number> Local Anthropic max_tokens, 1024-32000. Defaults to 16000',
|
|
672
831
|
].join('\n');
|
|
673
832
|
}
|
|
674
833
|
|