council-review 0.1.0 → 0.1.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.
package/README.md CHANGED
@@ -2,372 +2,63 @@
2
2
 
3
3
  A read-only, multi-vendor code review panel over local git state.
4
4
 
5
- `council-review` sends the work in your git worktree to several independent models from
6
- **different vendors** — not just different gateways — and merges their findings in deterministic
7
- code, never through another model. Reviewers cannot write to anything: every host built-in is
8
- removed, the repository under review cannot load its own extensions or skills into the process
9
- reviewing it, and the only tools a reviewer has are four read-only ones scoped to a frozen,
10
- non-writable snapshot of your tree.
11
-
12
- Every run produces a timestamped directory holding a machine-readable manifest, each reviewer's
13
- raw output, the merged findings, a human report, and a handoff prompt addressed to a coding agent.
5
+ `council-review` sends the work in your git worktree to several models from **different vendors**
6
+ and merges their findings in deterministic code, never through another model. Reviewers cannot
7
+ write anything: every host built-in is removed, the repository under review cannot load its own
8
+ extensions, skills or context files into the process reviewing it, and a reviewer's whole tool
9
+ surface is four read-only tools scoped to a frozen, non-writable copy of your tree. That is not
10
+ container or VM isolation, and third-party models do read your source — see
11
+ [`HOST-VERSION.md`](./HOST-VERSION.md) and the
12
+ [design doc](./docs/design/council-review-design.md) for what was actually verified, and re-verify
13
+ after a host upgrade. Every run writes a timestamped directory under `.council/reviews/` holding a
14
+ manifest, each reviewer's raw output, the merged findings, a human report (`REPORT.md`) and a
15
+ handoff prompt addressed to a coding agent (`HANDOFF.md`).
14
16
 
15
17
  ## Install
16
18
 
17
- This package is not yet published to npm, so the recommended install is directly from GitHub.
18
-
19
- ### From GitHub (recommended)
20
-
21
- ```
22
- npm install -g github:ad-005/council-review
23
- ```
24
-
25
- This installs and builds straight from the repository and works today.
26
-
27
- ### From npm
28
-
29
19
  ```
30
20
  npm install -g council-review
31
21
  ```
32
22
 
33
- This will be the install once the package is published to npm. It is not published yet, so this
34
- command currently fails — the GitHub install above is the one that works.
35
-
36
- ### From source (development)
23
+ For unreleased changes from `main`, install straight from GitHub instead:
37
24
 
38
25
  ```
39
- git clone https://github.com/ad-005/council-review.git
40
- cd council-review
41
- npm install
42
- npm run build
43
- npm link
26
+ npm install -g github:ad-005/council-review
44
27
  ```
45
28
 
46
- Use this if you're contributing to `council-review` itself. `npm link` makes the `council-review`
47
- command available globally from your checkout; alternatively, run it directly with
48
- `node dist/bin.js`.
49
-
50
- Requires Node.js 20 or later to install and run `council-review` itself, plus the
51
- [`pi`](#the-pi-host-dependency) coding-agent CLI on `PATH`, authenticated for at least one
52
- provider. `pi` itself requires Node.js **>= 22.19.0**, which is the effective floor for actually
53
- running a review — a Node 20 or 21 install satisfies `council-review`'s own guard but leaves every
54
- reviewer failing to spawn.
29
+ Requires the `pi` coding-agent CLI (`@earendil-works/pi-coding-agent`) on `PATH`, authenticated
30
+ for at least one provider through `pi`'s own credential store — a key that exists only as a shell
31
+ variable never reaches a reviewer, because reviewer processes get a tight environment allowlist.
32
+ Both `council-review` and `pi` need Node **>= 22.19.0**.
55
33
 
56
- ## Quick start
34
+ ## Use
57
35
 
58
36
  ```
59
37
  cd your-project
60
- council-review init # pick a panel interactively; writes .council/config.json
61
- council-review # review the current worktree's work against its base branch
38
+ council-review init # pick a panel; writes .council/config.json (commit it)
39
+ council-review # review this worktree against its base branch
62
40
  ```
63
41
 
64
- `init` runs a three-stage picker — providers, then models, then a thinking level per reasoning
65
- model — and requires at least three models resolving to at least three distinct vendors before it
66
- will save a panel (the vendor-independence guard; see below). The saved panel is committed
67
- (`.council/config.json` is meant to be checked in) so the rest of the team reuses it without
68
- re-picking.
69
-
70
- Bare `council-review` reviews **the whole of the current worktree's divergence from its base
71
- branch** — committed, staged, unstaged and untracked-but-not-gitignored changes, folded into one
72
- patch — not just what's staged. Use the scope flags below to narrow that.
73
-
74
- ## Scope flags
75
-
76
- | Flag | Meaning |
77
- | ---------------------------- | ------------------------------------------------ |
78
- | `--staged` | Review the staged index only |
79
- | `--range <A..B>` | Review a commit range |
80
- | `--revision <rev>` | Review a single revision's own change |
81
- | `--paths <glob>[,<glob>...]` | Narrow to matching paths (repeatable) |
82
- | `--base <branch>` | Override the configured base branch for this run |
83
-
84
- `--staged`, `--range` and `--revision` are mutually exclusive. An empty resolved scope (nothing to
85
- review) is not an error: the tool reports that and exits `0` without spawning a reviewer.
86
-
87
- ## Panel flags
88
-
89
- | Flag | Meaning |
90
- | -------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
91
- | `--models <spec>` | One-off panel for this run only: comma-separated `provider/modelId[:level]` entries or globs. Does not touch the saved panel. |
92
- | `--pick` | Re-open interactive selection; the result **replaces** the saved panel |
93
- | `--thinking <level>` | Panel-wide thinking level (one of `off`, `minimal`, `low`, `medium`, `high`, `xhigh`, `max`) |
94
- | `--allow-correlated` | Waive the vendor-independence guard for this run (recorded in the manifest even when it wasn't needed) |
95
-
96
- `council-review models` lists every discovered, ready model with its provider, derived vendor,
97
- context window, cost rates and supported thinking levels — no prompt, no model call, works without
98
- a terminal.
99
-
100
- ### The vendor-independence guard
101
-
102
- A panel is admitted only with **at least three models resolving to at least three distinct
103
- vendors** (`unknown` counts as its own distinct vendor, so three unrecognised models still pass).
104
- This is checked at the end of selection and again immediately before every launch, so a
105
- hand-edited config is checked too. On refusal, nothing is spawned and the tool exits `4`. Pass
106
- `--allow-correlated` to waive both the vendor-count and the three-model minimum deliberately.
107
-
108
- ## Run flags
109
-
110
- | Flag | Meaning |
111
- | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
112
- | `--timeout <seconds>` | Per-reviewer wall-clock timeout (overrides configured `timeoutSeconds`) |
113
- | `--max-tokens <n>` | Per-reviewer output-token ceiling (overrides configured `maxOutputTokens`); with neither the flag nor the config key set, there is no ceiling |
114
- | `--since <last\|run-id>` | Diff this run's findings against a previous one: `resolved` / `still-present` / `new` |
115
- | `--fail-on <level\|none>` | Severity threshold for exit code `1` (`critical`, `high`, `medium`, `low`, or `none` to disable) |
116
- | `--no-suppress` | Ignore `.council/ignore.json` for this run only; the file itself is untouched |
117
- | `--json` | Emit only the merged findings document on stdout; everything else (progress, diagnostics) goes to stderr |
118
-
119
- ## Environment (herdr) flags
120
-
121
- Only meaningful inside a [herdr](https://herdr.dev) pane (an agent multiplexer some users run
122
- coding agents under, detected via an environment marker). herdr is an optional integration —
123
- install it with `brew install herdr` if you want it — and every one of these flags is gated on
124
- that marker: outside that environment each degrades to exactly one printed notice, and the review
125
- itself proceeds and completes identically to how it would with none of these flags supplied — same
126
- artifacts, same exit code. A failing or unavailable herdr command is likewise reported as a warning
127
- only; it never changes the review's own outcome.
128
-
129
- | Flag | Meaning |
130
- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
131
- | `--pane` | Run the review in a new herdr pane (default direction: horizontal), current working directory carried over, focus left where it was |
132
- | `--direction <horizontal\|vertical>` | Direction for `--pane` |
133
- | `--no-pane` | Do not delegate to a new pane even if `--pane` is set |
134
- | `--handoff <agent>` | Deliver the written handoff prompt to a herdr-managed agent by name; delivery is not awaited, so the review command's own exit code reflects the review only |
135
- | `--no-notify` | Suppress the herdr completion notification (still raised, conveying completion, after a degraded run) |
136
-
137
- ## Subcommands
138
-
139
- - **`init [--pick]`** — bootstrap the current repository: run panel selection, write
140
- `.council/config.json` and `.council/ignore.json`, and ensure `.gitignore` excludes
141
- `.council/reviews/`. Safe to re-run: existing suppressions are preserved. Must be run inside a
142
- git repository.
143
- - **`models`** — list discovered, ready models. No prompt, no model call.
144
- - **`show [run-id]`** — render a stored run's `REPORT.md`. Defaults to the most recent run. No
145
- model call.
146
- - **`ignore <finding-id> [--reason <text>] [--run <run-id>]`** — resolve a finding id from a run's
147
- merged findings to its fingerprint and append it to `.council/ignore.json`. Idempotent.
148
- - **`gc [--keep <n>]`** — prune stored runs under `.council/reviews/`, keeping the `<n>` most
149
- recent (default: the configured `retain`, or 20). Never removes the run the `last` pointer
150
- resolves to. Also sweeps snapshot directories orphaned by a run that couldn't clean up after
151
- itself.
152
- - **`status [--json] [--verify]`** — report whether this project is configured, plus the resolved
153
- panel, independence-guard verdict, settings, suppression count, stored runs and
154
- gitignore/herdr state. This is the intended entry point for a coding agent to check in
155
- milliseconds whether it can run a review here at all, before doing anything else. Exits `0`
156
- when configured, `2` when not — including outside a git repository, or with an invalid
157
- `.council/config.json` (the offending key is named in the report) — and never anything else.
158
- The default form makes no host call and no model call: it reads only files already on disk
159
- (plus the single `git rev-parse` used to find the repository root). `--verify` additionally
160
- discovers the model catalog and reports each panel entry's real readiness and effective
161
- thinking level — a stale panel entry (a model no longer in the catalog) is reported as not
162
- ready rather than causing the command to fail. `--json` emits the full report as JSON on
163
- stdout instead of the human-readable form, e.g.:
164
- ```json
165
- {
166
- "version": "0.1.0",
167
- "configured": true,
168
- "repoRoot": "/path/to/project",
169
- "config": {
170
- "path": "/path/to/project/.council/config.json",
171
- "present": true,
172
- "valid": true,
173
- "version": 1,
174
- "error": null,
175
- "errorKeyPath": null
176
- },
177
- "panel": [
178
- {
179
- "provider": "anthropic",
180
- "model": "claude-opus-4",
181
- "vendor": "anthropic",
182
- "thinking": "high",
183
- "effectiveThinking": null,
184
- "clamped": null,
185
- "ready": null,
186
- "readyReason": null
187
- }
188
- ],
189
- "independence": {
190
- "ok": true,
191
- "modelCount": 3,
192
- "vendorCount": 3,
193
- "vendors": { "anthropic": ["anthropic/claude-opus-4"] },
194
- "reason": null
195
- },
196
- "settings": {
197
- "baseBranch": "main",
198
- "failOn": "high",
199
- "timeoutSeconds": 600,
200
- "maxOutputTokens": null,
201
- "mergeWindow": 10,
202
- "claimSimilarity": 0.6,
203
- "includeContextFiles": false,
204
- "retain": 20
205
- },
206
- "suppressions": {
207
- "path": "/path/to/project/.council/ignore.json",
208
- "present": true,
209
- "count": 4
210
- },
211
- "runs": {
212
- "count": 12,
213
- "last": {
214
- "id": "20260904T153012123Z",
215
- "path": "...",
216
- "reportPath": "...",
217
- "findingsPath": "..."
218
- }
219
- },
220
- "gitignore": { "excludesReviews": true },
221
- "herdr": { "detected": false },
222
- "verified": false
223
- }
224
- ```
225
-
226
- Run `council-review <subcommand> --help` for a subcommand's own usage, or `council-review --help`
227
- for the full flag surface.
42
+ A bare `council-review` reviews the whole divergence from the base branch — committed, staged,
43
+ unstaged and untracked changes folded into one patch — not just the index; narrow it with
44
+ `--staged`, `--range`, `--revision`, `--paths` or `--base`. A panel is admitted only with at least
45
+ three models resolving to at least three distinct vendors, checked when it is saved and again
46
+ before every launch, so a hand-edited config is checked too (`--allow-correlated` waives it). The
47
+ other subcommands are `models`, `status` (a millisecond, no-model check of whether a review can run
48
+ here at all — the intended entry point for a coding agent), `show`, `ignore` and `gc`; run
49
+ `council-review --help` for the full flag surface, and see the design doc for every
50
+ `.council/config.json` key.
228
51
 
229
52
  ## Exit codes
230
53
 
231
- | Code | Meaning |
232
- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
233
- | `0` | Clean: nothing at or above the `failOn` threshold |
234
- | `1` | Findings at or above the `failOn` threshold |
235
- | `2` | Configuration or usage error |
236
- | `3` | Degraded: one or more reviewers timed out, exceeded budget, or failed validation — a partial report was still written. **Outranks `1`**, so a CI job checking for "findings" never mistakes a partial panel for a clean measurement. |
237
- | `4` | The vendor-independence guard refused the panel; no reviewer was spawned |
238
- | `130` | Interrupted (SIGINT/SIGTERM) |
239
-
240
- ## What a run leaves behind
241
-
242
- Every run writes a timestamped directory under `.council/reviews/` (excluded from version control
243
- by an entry `init` adds to `.gitignore` — only the configuration in `.council/config.json` and
244
- `.council/ignore.json` is meant to be committed):
245
-
246
- ```
247
- .council/reviews/<run-id>/
248
- manifest.json reviewed state, resolved scope, panel + vendors + thinking levels,
249
- per-reviewer state/timings/usage/cost/depth, overrides in effect
250
- patch.diff the diff patch — never inside the snapshot
251
- findings.json the merged findings, as a JSON array
252
- REPORT.md human-readable report
253
- HANDOFF.md a prompt addressed to a coding agent, not a person
254
- reviewers/<slug>.findings.json | .text.md | .trace.jsonl
255
- .council/reviews/last -> <run-id> symlink to the most recent run
256
- ```
257
-
258
- `HANDOFF.md` instructs the consuming agent to reproduce each finding before fixing it, to check a
259
- merged finding against the reviewers' verbatim raw output when its claim is ambiguous, and frames
260
- a low-agreement finding as a hypothesis to test, not an established defect.
261
-
262
- ## The isolation model and its limits
263
-
264
- Three third-party models read your repository's source under this tool. That is a real trust
265
- boundary, and this section describes it plainly rather than reassuringly. See
266
- [`docs/design/council-review-design.md`](./docs/design/council-review-design.md)'s
267
- "Decisions" and "Risks / Trade-offs" sections for the full reasoning; this is the summary a user
268
- needs before relying on it.
269
-
270
- **What the isolation actually is**, layered so that no single mistake removes it:
271
-
272
- - Every host built-in tool is removed (`-nbt`) — specifically no shell, no file-write, no
273
- file-edit capability exists for a reviewer to call.
274
- - Resource discovery from the reviewed repository is disabled wholesale: no repo-supplied
275
- extensions, no skills, no prompt templates, and project trust state grants no extra capability
276
- — so a repository under review cannot get its own code or instructions loaded into the process
277
- reviewing it.
278
- - Agent context files (e.g. project-level agent instructions) are **excluded by default**, because
279
- the host loads them regardless of trust and they are therefore an instruction-injection surface.
280
- Opt in only via `includeContextFiles` in `.council/config.json`; the choice is recorded in every
281
- run's manifest.
282
- - A reviewer's entire tool surface is exactly four read-only tools — `council_read`,
283
- `council_grep`, `council_list`, `council_git` — loaded from one file this package ships, never
284
- installed into the host. Every path any of them is given is realpath-resolved and rejected if it
285
- escapes the snapshot root, including via a symlink or an intermediate symlinked directory.
286
- `council_git` reaches the _real_ repository, but only through a fixed allowlist of read-only
287
- subcommands (log, show, blame, diff) with structured arguments — never a composed command line.
288
- - Reviewers run against a **frozen snapshot**, not your live worktree: a plain copy into scratch,
289
- made non-writable (`chmod -R a-w`) before any reviewer launches, so every reviewer reads the same
290
- photograph and your ongoing edits in the meantime have no effect on the run.
291
- - Removing the shell removes a reviewer's only path to arbitrary network egress. Its only outbound
292
- traffic is the host's own model API call.
293
- - Host session persistence is disabled (`--no-session`), so a reviewer's transcript — which
294
- contains your repository's source — is never written into the host's own session store.
295
- - Each reviewer process gets an **allowlisted** environment, not a denylisted one: the executable
296
- search path, the home directory (so the host can find its own config/credentials), the two roots
297
- the reviewer tools need, and the host's own `PI_*` variables. Every other variable from the
298
- invoking environment is dropped, so no unrelated secret — including credentials for other
299
- services — ever reaches a reviewer process.
300
- - No code path in this package ever opens the host's credential store
301
- (`~/.pi/agent/auth.json`). No artifact this tool writes can contain a token, key or secret.
302
-
303
- **What it is not:**
304
-
305
- - **Not container or VM isolation.** There is no sandbox boundary beyond what's described above.
306
- This is a deliberate v1 choice (see the design doc's "Decisions"), not an oversight, and a stronger
307
- implementation can be added later without changing what this tool guarantees observably.
308
- - **`chmod -R a-w` on the snapshot is not a security boundary against a process running as the
309
- same user.** A same-user process can `chmod` its way back to writable. Freezing the tree exists
310
- for _consistency_ — so line numbers mean the same thing to every reviewer and to the merge step
311
- — not as the source of the read-only guarantee. That guarantee comes entirely from the absence
312
- of a write tool in the reviewer's callable surface.
313
- - **POSIX-only.** The freeze step and the path-containment logic assume POSIX permission and
314
- symlink semantics. This has not been tested, and is not expected to work, on a non-POSIX
315
- filesystem.
316
- - **Verified empirically against one pinned host version.** The whole guarantee rests on flags and
317
- an event-stream shape belonging to the `pi` binary, which this package does not control. See
318
- [`HOST-VERSION.md`](./HOST-VERSION.md) for exactly what was verified and how, and re-verify
319
- after any host upgrade before trusting the isolation guarantee against the new version.
320
- - **A provider whose API key exists only as a shell environment variable will not authenticate
321
- inside a reviewer.** The environment allowlist above is intentionally tight and does not pass
322
- through any `*_API_KEY`-shaped variable — this was a deliberate, verified decision (a scrubbed
323
- environment containing only `PATH`/`HOME` was confirmed to authenticate correctly for providers
324
- whose credentials live in the host's own store), not an oversight. A provider only ever
325
- authenticates inside a reviewer through the host's own credential store under `HOME`. **Remedy:**
326
- authenticate that provider through the host itself (e.g. `pi auth login`) so its credential is
327
- saved into the host's store, rather than relying on an environment variable your shell happens
328
- to export. If a provider's credential exists only as a shell variable and was never run through
329
- the host's own auth flow, reviewers using that provider will fail to authenticate — this is the
330
- environment allowlist working as designed, not a bug to route around by widening it.
331
- - **Third-party models read your repository's source.** That is the whole premise of this tool.
332
- Nothing above prevents a model provider from seeing your code as part of serving the review
333
- request; it only prevents that model, or the repository it's reviewing, from writing anything,
334
- executing anything, or reaching the network on its own.
335
-
336
- ### The `pi` host dependency
337
-
338
- `council-review` spawns the `pi` coding-agent CLI (npm package `@earendil-works/pi-coding-agent`)
339
- headlessly per reviewer rather than calling each vendor's API directly, so it can reuse the
340
- authentication, model catalog and agentic tool loop you already have configured for it. `pi`
341
- declares `engines: { node: ">=22.19.0" }`, so that version — not `council-review`'s own `>=20`
342
- floor — is what actually determines whether a review can run. See
343
- [`HOST-VERSION.md`](./HOST-VERSION.md) for the exact verified version and the re-verification
344
- procedure after a host upgrade.
345
-
346
- ## Configuration reference (`.council/config.json`)
347
-
348
- Written by `init`, hand-editable afterward. An unrecognised `version` is a hard error, so a future
349
- schema change has a defined migration point.
350
-
351
- | Key | Meaning |
352
- | ---------------------- | -------------------------------------------------------------------------------------------------- |
353
- | `version` | Config schema version |
354
- | `baseBranch` | Default base branch for scope resolution |
355
- | `panel` | Ordered list of `{ provider, model, thinking? }` |
356
- | `defaultThinkingLevel` | Fallback thinking level when nothing more specific applies |
357
- | `modelThinkingLevels` | Per-model thinking level, keyed `"provider/modelId"` — what the picker actually writes |
358
- | `includeContextFiles` | Opt into loading agent context files into reviewers (default: excluded) |
359
- | `timeoutSeconds` | Per-reviewer wall-clock timeout |
360
- | `maxOutputTokens` | Per-reviewer output-token ceiling (default: none — reviewers are bounded by `timeoutSeconds` only) |
361
- | `mergeWindow` | Line-proximity window for clustering findings |
362
- | `claimSimilarity` | Claim-token-similarity threshold for clustering |
363
- | `failOn` | Default severity threshold for exit code `1` (`critical`\|`high`\|`medium`\|`low`\|`none`) |
364
- | `snapshot.include` | Path globs narrowing what's copied into the snapshot (large repos) |
365
- | `vendorOverrides` | Exact `"provider/modelId"` → vendor overrides for vendor derivation |
366
- | `retain` | Default number of runs `gc` keeps |
367
-
368
- `.council/ignore.json` holds suppressed findings by fingerprint (stable across line movement —
369
- see the design doc's fingerprinting rationale), each optionally carrying a human-supplied `reason`.
370
- Managed through `council-review ignore`, not normally hand-edited.
54
+ | Code | Meaning |
55
+ | ----- | --------------------------------------------------------------------------- |
56
+ | `0` | Clean: nothing at or above the `failOn` threshold |
57
+ | `1` | Findings at or above the threshold |
58
+ | `2` | Configuration or usage error |
59
+ | `3` | Degraded: a reviewer failed and a partial report was written. Outranks `1`. |
60
+ | `4` | The vendor-independence guard refused the panel; nothing was spawned |
61
+ | `130` | Interrupted (SIGINT/SIGTERM) |
371
62
 
372
63
  ## License
373
64
 
package/dist/bin.js CHANGED
File without changes
package/dist/config.js CHANGED
@@ -30,7 +30,7 @@ export const CONFIG_DEFAULTS = Object.freeze({
30
30
  version: 1,
31
31
  baseBranch: 'main',
32
32
  includeContextFiles: false,
33
- timeoutSeconds: 600,
33
+ timeoutSeconds: 10800,
34
34
  maxOutputTokens: null,
35
35
  mergeWindow: 10,
36
36
  claimSimilarity: 0.6,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Exits the process with code 2 if the running Node version is older than the minimum
3
- * supported version, printing both the detected and minimum versions.
3
+ * supported version (compared component by component — major, then minor, then patch — not
4
+ * major-only), printing both the detected and minimum versions.
4
5
  *
5
6
  * @param version - The version string to check, defaulting to `process.version`. Exposed as a
6
7
  * parameter purely as a test seam.
@@ -1 +1 @@
1
- {"version":3,"file":"node-guard.d.ts","sourceRoot":"","sources":["../src/node-guard.ts"],"names":[],"mappings":"AAMA;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,MAAwB,GAAG,IAAI,CAWzE"}
1
+ {"version":3,"file":"node-guard.d.ts","sourceRoot":"","sources":["../src/node-guard.ts"],"names":[],"mappings":"AA0BA;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,MAAwB,GAAG,IAAI,CAkBzE"}
@@ -1,20 +1,42 @@
1
1
  // Zero imports beyond node:process, so this can run before any other import work at binary
2
2
  // startup — a broken or ancient runtime must never fail inside a dependency instead of here.
3
3
  import process from 'node:process';
4
- const MINIMUM_MAJOR_VERSION = 20;
4
+ const MINIMUM_VERSION = '22.19.0';
5
+ const MINIMUM_VERSION_PARTS = MINIMUM_VERSION.split('.').map((part) => Number.parseInt(part, 10));
6
+ /**
7
+ * Parses a dotted version string into its numeric [major, minor, patch] components, treating any
8
+ * missing or non-numeric component as 0. Returns `null` if the major component itself can't be
9
+ * parsed as a finite number, since that makes the whole version unusable for comparison.
10
+ */
11
+ function parseVersionParts(version) {
12
+ const segments = version.split('.');
13
+ const major = Number.parseInt(segments[0] ?? '', 10);
14
+ if (!Number.isFinite(major)) {
15
+ return null;
16
+ }
17
+ const minor = Number.parseInt(segments[1] ?? '', 10);
18
+ const patch = Number.parseInt(segments[2] ?? '', 10);
19
+ return [major, Number.isFinite(minor) ? minor : 0, Number.isFinite(patch) ? patch : 0];
20
+ }
5
21
  /**
6
22
  * Exits the process with code 2 if the running Node version is older than the minimum
7
- * supported version, printing both the detected and minimum versions.
23
+ * supported version (compared component by component — major, then minor, then patch — not
24
+ * major-only), printing both the detected and minimum versions.
8
25
  *
9
26
  * @param version - The version string to check, defaulting to `process.version`. Exposed as a
10
27
  * parameter purely as a test seam.
11
28
  */
12
29
  export function assertNodeVersion(version = process.version) {
13
30
  const detected = version.startsWith('v') ? version.slice(1) : version;
14
- const major = Number.parseInt(detected.split('.')[0] ?? '', 10);
15
- if (!Number.isFinite(major) || major < MINIMUM_MAJOR_VERSION) {
31
+ const parts = parseVersionParts(detected);
32
+ const isSupported = parts !== null &&
33
+ (parts[0] > MINIMUM_VERSION_PARTS[0] ||
34
+ (parts[0] === MINIMUM_VERSION_PARTS[0] &&
35
+ (parts[1] > MINIMUM_VERSION_PARTS[1] ||
36
+ (parts[1] === MINIMUM_VERSION_PARTS[1] && parts[2] >= MINIMUM_VERSION_PARTS[2]))));
37
+ if (!isSupported) {
16
38
  process.stderr.write(`council-review: unsupported Node.js version "${detected}" detected; ` +
17
- `Node.js >= ${MINIMUM_MAJOR_VERSION} is required.\n`);
39
+ `Node.js >= ${MINIMUM_VERSION} is required.\n`);
18
40
  process.exit(2);
19
41
  }
20
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"node-guard.js","sourceRoot":"","sources":["../src/node-guard.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,6FAA6F;AAC7F,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAEjC;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB,OAAO,CAAC,OAAO;IACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACtE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAEhE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,qBAAqB,EAAE,CAAC;QAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gDAAgD,QAAQ,cAAc;YACpE,cAAc,qBAAqB,iBAAiB,CACvD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"node-guard.js","sourceRoot":"","sources":["../src/node-guard.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,6FAA6F;AAC7F,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,eAAe,GAAG,SAAS,CAAC;AAClC,MAAM,qBAAqB,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AAElG;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,OAAe;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAErD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAErD,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB,OAAO,CAAC,OAAO;IACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACtE,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAE1C,MAAM,WAAW,GACf,KAAK,KAAK,IAAI;QACd,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC;YAClC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBACpC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC;oBAClC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,qBAAqB,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3F,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gDAAgD,QAAQ,cAAc;YACpE,cAAc,eAAe,iBAAiB,CACjD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
package/dist/picker.d.ts CHANGED
@@ -1,5 +1,6 @@
1
+ import { Separator } from '@inquirer/prompts';
1
2
  import type { Reviewer } from './panel.js';
2
- import type { Catalog } from './providers.js';
3
+ import type { Catalog, CatalogModel } from './providers.js';
3
4
  export interface PickerIO {
4
5
  input: NodeJS.ReadableStream;
5
6
  output: NodeJS.WritableStream & Partial<Pick<NodeJS.WriteStream, 'columns' | 'rows' | 'isTTY'>>;
@@ -13,6 +14,49 @@ export declare class PickerNonInteractive extends Error {
13
14
  readonly exitCode: 2;
14
15
  constructor(message: string);
15
16
  }
17
+ export interface ModelChoice {
18
+ value: string;
19
+ name: string;
20
+ description: string;
21
+ short: string;
22
+ }
23
+ /**
24
+ * Larger square checkbox glyphs (`☐`/`☑`) replacing the default small circles (`○`/`◉`) for
25
+ * the picker's checkbox stages. The checked glyph keeps the default green via `node:util`'s
26
+ * `styleText` — which, like the default theme, emits plain text when output is piped and color
27
+ * only on a real terminal. Only `checked`/`unchecked` are overridden, so the cursor (`❯`) and
28
+ * everything else stay on the inquirer defaults.
29
+ */
30
+ export declare const pickerCheckboxTheme: {
31
+ icon: {
32
+ checked: string;
33
+ unchecked: string;
34
+ };
35
+ };
36
+ export interface ModelGroup {
37
+ provider: string;
38
+ models: CatalogModel[];
39
+ }
40
+ /** Groups models by provider in first-appearance (catalog) order. */
41
+ export declare function groupModelsByProvider(models: readonly CatalogModel[]): ModelGroup[];
42
+ /**
43
+ * The model-stage prompt message doubles as the provider group header: inquirer renders the
44
+ * message above the paginated list and never scrolls it, so the header stays pinned at the top
45
+ * — visually distinct (prompt-message styling) and distanced (a blank spacer row follows it)
46
+ * — no matter how far the rows scroll underneath.
47
+ */
48
+ export declare function modelGroupMessage(provider: string, modelCount: number): string;
49
+ /**
50
+ * Builds one provider group's checkbox rows: one padded, single-line row per model, each
51
+ * preceded by a blank `Separator` spacer (including the first, which distances the rows from
52
+ * the header message). Padding lines up the identity and vendor columns so the rows stop
53
+ * blurring into a wall of text. `short` stays the bare `provider/id` so the submitted answer
54
+ * line reads cleanly. Widths are measured within the group since each group is its own prompt.
55
+ *
56
+ * Blank separators are skipped by checkbox navigation (up/down/space/number keys all ignore
57
+ * them), so they are pure vertical air with no effect on selection.
58
+ */
59
+ export declare function buildModelRows(models: readonly CatalogModel[]): Array<ModelChoice | Separator>;
16
60
  /**
17
61
  * Runs the three-stage picker: providers, then models scoped to those providers, then a
18
62
  * thinking level per selected reasoning model (non-reasoning selections are shown as "no
@@ -1 +1 @@
1
- {"version":3,"file":"picker.d.ts","sourceRoot":"","sources":["../src/picker.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAA8B,MAAM,gBAAgB,CAAC;AAG1E,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAChG,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,QAAQ,EAAG,CAAC,CAAU;gBAEnB,OAAO,SAAsD;CAK1E;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,QAAQ,EAAG,CAAC,CAAU;gBAEnB,OAAO,EAAE,MAAM;CAK5B;AA2FD;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,GAAE,QAAsB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAuFjG"}
1
+ {"version":3,"file":"picker.d.ts","sourceRoot":"","sources":["../src/picker.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,SAAS,EAAoB,MAAM,mBAAmB,CAAC;AAGhE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAgB,MAAM,gBAAgB,CAAC;AAG1E,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAChG,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,QAAQ,EAAG,CAAC,CAAU;gBAEnB,OAAO,SAAsD;CAK1E;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,QAAQ,EAAG,CAAC,CAAU;gBAEnB,OAAO,EAAE,MAAM;CAK5B;AAoED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB;;;;;CAK/B,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,UAAU,EAAE,CAcnF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAG9E;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC,CA2B9F;AA8CD;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,GAAE,QAAsB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAiHjG"}