council-review 0.1.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.
Files changed (108) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +374 -0
  3. package/dist/bin.d.ts +3 -0
  4. package/dist/bin.d.ts.map +1 -0
  5. package/dist/bin.js +19 -0
  6. package/dist/bin.js.map +1 -0
  7. package/dist/cli.d.ts +14 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +829 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/config.d.ts +61 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +235 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/herdr.d.ts +36 -0
  16. package/dist/herdr.d.ts.map +1 -0
  17. package/dist/herdr.js +196 -0
  18. package/dist/herdr.js.map +1 -0
  19. package/dist/index.d.ts +30 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +30 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/levels.d.ts +9 -0
  24. package/dist/levels.d.ts.map +1 -0
  25. package/dist/levels.js +19 -0
  26. package/dist/levels.js.map +1 -0
  27. package/dist/merge.d.ts +90 -0
  28. package/dist/merge.d.ts.map +1 -0
  29. package/dist/merge.js +441 -0
  30. package/dist/merge.js.map +1 -0
  31. package/dist/node-guard.d.ts +9 -0
  32. package/dist/node-guard.d.ts.map +1 -0
  33. package/dist/node-guard.js +21 -0
  34. package/dist/node-guard.js.map +1 -0
  35. package/dist/panel.d.ts +89 -0
  36. package/dist/panel.d.ts.map +1 -0
  37. package/dist/panel.js +275 -0
  38. package/dist/panel.js.map +1 -0
  39. package/dist/picker.d.ts +24 -0
  40. package/dist/picker.d.ts.map +1 -0
  41. package/dist/picker.js +182 -0
  42. package/dist/picker.js.map +1 -0
  43. package/dist/providers.d.ts +66 -0
  44. package/dist/providers.d.ts.map +1 -0
  45. package/dist/providers.js +544 -0
  46. package/dist/providers.js.map +1 -0
  47. package/dist/report.d.ts +116 -0
  48. package/dist/report.d.ts.map +1 -0
  49. package/dist/report.js +493 -0
  50. package/dist/report.js.map +1 -0
  51. package/dist/resolve.d.ts +58 -0
  52. package/dist/resolve.d.ts.map +1 -0
  53. package/dist/resolve.js +147 -0
  54. package/dist/resolve.js.map +1 -0
  55. package/dist/reviewer-spawn.d.ts +67 -0
  56. package/dist/reviewer-spawn.d.ts.map +1 -0
  57. package/dist/reviewer-spawn.js +94 -0
  58. package/dist/reviewer-spawn.js.map +1 -0
  59. package/dist/reviewer-tools.d.ts +113 -0
  60. package/dist/reviewer-tools.d.ts.map +1 -0
  61. package/dist/reviewer-tools.js +557 -0
  62. package/dist/reviewer-tools.js.map +1 -0
  63. package/dist/runner.d.ts +79 -0
  64. package/dist/runner.d.ts.map +1 -0
  65. package/dist/runner.js +811 -0
  66. package/dist/runner.js.map +1 -0
  67. package/dist/schema.d.ts +63 -0
  68. package/dist/schema.d.ts.map +1 -0
  69. package/dist/schema.js +302 -0
  70. package/dist/schema.js.map +1 -0
  71. package/dist/scope.d.ts +40 -0
  72. package/dist/scope.d.ts.map +1 -0
  73. package/dist/scope.js +372 -0
  74. package/dist/scope.js.map +1 -0
  75. package/dist/snapshot.d.ts +57 -0
  76. package/dist/snapshot.d.ts.map +1 -0
  77. package/dist/snapshot.js +471 -0
  78. package/dist/snapshot.js.map +1 -0
  79. package/dist/status.d.ts +90 -0
  80. package/dist/status.d.ts.map +1 -0
  81. package/dist/status.js +336 -0
  82. package/dist/status.js.map +1 -0
  83. package/dist/thinking.d.ts +53 -0
  84. package/dist/thinking.d.ts.map +1 -0
  85. package/dist/thinking.js +116 -0
  86. package/dist/thinking.js.map +1 -0
  87. package/package.json +81 -0
  88. package/src/bin.ts +20 -0
  89. package/src/cli.ts +996 -0
  90. package/src/config.ts +338 -0
  91. package/src/herdr.ts +231 -0
  92. package/src/index.ts +30 -0
  93. package/src/levels.ts +23 -0
  94. package/src/merge.ts +548 -0
  95. package/src/node-guard.ts +25 -0
  96. package/src/panel.ts +354 -0
  97. package/src/picker.ts +230 -0
  98. package/src/providers.ts +778 -0
  99. package/src/report.ts +594 -0
  100. package/src/resolve.ts +179 -0
  101. package/src/reviewer-spawn.ts +131 -0
  102. package/src/reviewer-tools.ts +715 -0
  103. package/src/runner.ts +1120 -0
  104. package/src/schema.ts +373 -0
  105. package/src/scope.ts +448 -0
  106. package/src/snapshot.ts +536 -0
  107. package/src/status.ts +470 -0
  108. package/src/thinking.ts +148 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../src/merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
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.
4
+ *
5
+ * @param version - The version string to check, defaulting to `process.version`. Exposed as a
6
+ * parameter purely as a test seam.
7
+ */
8
+ export declare function assertNodeVersion(version?: string): void;
9
+ //# sourceMappingURL=node-guard.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,21 @@
1
+ // Zero imports beyond node:process, so this can run before any other import work at binary
2
+ // startup — a broken or ancient runtime must never fail inside a dependency instead of here.
3
+ import process from 'node:process';
4
+ const MINIMUM_MAJOR_VERSION = 20;
5
+ /**
6
+ * 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.
8
+ *
9
+ * @param version - The version string to check, defaulting to `process.version`. Exposed as a
10
+ * parameter purely as a test seam.
11
+ */
12
+ export function assertNodeVersion(version = process.version) {
13
+ 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) {
16
+ process.stderr.write(`council-review: unsupported Node.js version "${detected}" detected; ` +
17
+ `Node.js >= ${MINIMUM_MAJOR_VERSION} is required.\n`);
18
+ process.exit(2);
19
+ }
20
+ }
21
+ //# sourceMappingURL=node-guard.js.map
@@ -0,0 +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"}
@@ -0,0 +1,89 @@
1
+ import type { CouncilConfig, PanelEntry } from './config.js';
2
+ import { type ThinkingLevel } from './levels.js';
3
+ import { type Catalog, type CatalogModel } from './providers.js';
4
+ import { type ResolvedThinking } from './thinking.js';
5
+ export interface Reviewer {
6
+ provider: string;
7
+ model: string;
8
+ vendor: string;
9
+ catalog: CatalogModel;
10
+ thinking: ResolvedThinking;
11
+ }
12
+ export declare class PanelError extends Error {
13
+ readonly exitCode: 2;
14
+ constructor(message: string);
15
+ }
16
+ export declare class GuardRefusal extends Error {
17
+ readonly exitCode: 4;
18
+ readonly vendors: Map<string, string[]>;
19
+ constructor(message: string, vendors: Map<string, string[]>);
20
+ }
21
+ type ParsedEntry = {
22
+ provider: string;
23
+ model: string;
24
+ pin?: ThinkingLevel;
25
+ };
26
+ /**
27
+ * Parses one `provider/modelId[:level]` entry. The pin is split on the last colon (see
28
+ * `splitTrailingPin`); everything before it is `provider/modelId`, split on the FIRST slash —
29
+ * this is what tolerates a model id that itself contains slashes (the entire remainder becomes
30
+ * the model id) and one that carries a leading prefix marker (carried through unmodified; vendor
31
+ * derivation in `providers.ts` is what strips it, not this parser).
32
+ */
33
+ export declare function parsePanelEntry(entry: string): ParsedEntry;
34
+ /**
35
+ * Expands one comma-separated `--models` spec against the catalog. A literal (non-glob) entry is
36
+ * looked up directly and must name a real catalog model, or it errors naming the offending
37
+ * entry. A glob entry is matched against every catalog model's `provider/id`, must match at
38
+ * least one, and every match inherits the pattern's own pin.
39
+ */
40
+ export declare function expandPanelSpec(spec: string, catalog: Catalog): ParsedEntry[];
41
+ /**
42
+ * Resolves a saved config panel into reviewers. Every entry's model must still be present in the
43
+ * catalog and its provider must still be ready — either failure is a `PanelError` naming the
44
+ * entry, per the "A saved panel entry no longer exists" and "A configured model belongs to an
45
+ * unready provider" scenarios. Each entry's own saved `thinking` and the general
46
+ * `modelThinkingLevels` map both occupy the "configured per-model" precedence tier; the general
47
+ * map wins when both name the same model, since it is the more deliberate, hand-editable source.
48
+ */
49
+ export declare function resolveConfiguredPanel(panel: readonly PanelEntry[], catalog: Catalog, cfg: CouncilConfig, cliPanelWide?: ThinkingLevel): Reviewer[];
50
+ /** Resolves a `--models` command-line spec into reviewers. Each entry's own `:level` pin, if
51
+ * any, is that model's CLI pin — the most specific source in the precedence chain. */
52
+ export declare function resolveSpecPanel(spec: string, catalog: Catalog, cfg: CouncilConfig, cliPanelWide?: ThinkingLevel): Reviewer[];
53
+ export interface GuardResult {
54
+ ok: boolean;
55
+ vendors: Map<string, string[]>;
56
+ reason?: string;
57
+ }
58
+ /**
59
+ * Groups `reviewers` by derived vendor and checks the independence minimums: at least three
60
+ * models across at least three distinct vendors. `unknown` is one legitimate vendor bucket like
61
+ * any other — several unrecognised models collapse into it exactly as several recognised models
62
+ * from the same real vendor would, per design.md's "`unknown` is not treated as benign" (the
63
+ * point there is that `unknown` is admitted rather than rejected, not that it is exempt from
64
+ * collapsing). The model-count check runs first so its message doesn't get crowded out by a
65
+ * vendor-count message that would be equally true of a too-small panel.
66
+ *
67
+ * Typed against a structural minimum (only the three fields this function actually reads)
68
+ * rather than the full `Reviewer` shape, so `status.ts` can hand it plain `{provider, model,
69
+ * vendor}` objects derived from config alone -- reusing this exact guard verdict -- without
70
+ * needing to build a `CatalogModel` or resolve thinking levels for anything. `Reviewer` remains
71
+ * assignable, so every existing caller is unaffected.
72
+ */
73
+ export declare function checkIndependence(reviewers: readonly {
74
+ provider: string;
75
+ model: string;
76
+ vendor: string;
77
+ }[]): GuardResult;
78
+ /** Formats a vendor grouping as `vendor: member, member (n)` lines, for printing on refusal or
79
+ * before launch. Singleton groups are included too, so the full picture is visible at a glance. */
80
+ export declare function formatVendorGrouping(vendors: ReadonlyMap<string, string[]>): string;
81
+ /**
82
+ * Enforces the independence guard. Throws `GuardRefusal` (exit code 4) when the panel fails the
83
+ * guard and `allowCorrelated` is false. Stateless and cheap to call twice — at the end of
84
+ * selection and again immediately before launch — which is how a panel that reached
85
+ * configuration by hand-editing (never passing through the picker) still gets checked.
86
+ */
87
+ export declare function enforceIndependence(reviewers: readonly Reviewer[], allowCorrelated: boolean): void;
88
+ export {};
89
+ //# sourceMappingURL=panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../src/panel.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAa,KAAK,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAmB,KAAK,gBAAgB,EAAwB,MAAM,eAAe,CAAC;AAE7F,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,QAAQ,EAAG,CAAC,CAAU;gBAEnB,OAAO,EAAE,MAAM;CAK5B;AAED,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,QAAQ,EAAG,CAAC,CAAU;IAC/B,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBAE5B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAM5D;AAMD,KAAK,WAAW,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,aAAa,CAAA;CAAE,CAAC;AAmB5E;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAgB1D;AAWD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,WAAW,EAAE,CAoC7E;AAmDD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,aAAa,EAClB,YAAY,CAAC,EAAE,aAAa,GAC3B,QAAQ,EAAE,CA2BZ;AAED;sFACsF;AACtF,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,aAAa,EAClB,YAAY,CAAC,EAAE,aAAa,GAC3B,QAAQ,EAAE,CAqBZ;AASD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,GACxE,WAAW,CA+Bb;AAED;mGACmG;AACnG,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAInF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,SAAS,QAAQ,EAAE,EAC9B,eAAe,EAAE,OAAO,GACvB,IAAI,CAKN"}
package/dist/panel.js ADDED
@@ -0,0 +1,275 @@
1
+ /**
2
+ * Assembles the set of reviewers for a run — from a saved config panel or from a command-line
3
+ * spec — and the vendor-independence guard that refuses a panel whose members would fail in
4
+ * correlated ways. See `openspec/changes/add-council-review/specs/council-review/panel-
5
+ * selection/spec.md` for the requirements this implements.
6
+ *
7
+ * This module never spawns anything and never prompts; `picker.ts` (interactive selection) and
8
+ * `cli.ts` (dispatch and exit-code mapping) sit on top of it.
9
+ */
10
+ import picomatch from 'picomatch';
11
+ import { isThinkingLevel } from './levels.js';
12
+ import { findModel } from './providers.js';
13
+ import { resolveThinking } from './thinking.js';
14
+ export class PanelError extends Error {
15
+ exitCode = 2;
16
+ constructor(message) {
17
+ super(message);
18
+ this.name = 'PanelError';
19
+ Object.setPrototypeOf(this, PanelError.prototype);
20
+ }
21
+ }
22
+ export class GuardRefusal extends Error {
23
+ exitCode = 4;
24
+ vendors;
25
+ constructor(message, vendors) {
26
+ super(message);
27
+ this.name = 'GuardRefusal';
28
+ this.vendors = vendors;
29
+ Object.setPrototypeOf(this, GuardRefusal.prototype);
30
+ }
31
+ }
32
+ /**
33
+ * Splits a trailing `:level` pin off `raw` on the LAST colon. A colon that is present but whose
34
+ * suffix is not a recognised thinking level is a parse error (rather than being silently
35
+ * ignored), because the last-colon rule is unconditional: any entry with a colon is asserting a
36
+ * pin. `label` is what the thrown error names — the original, untrimmed entry text.
37
+ */
38
+ function splitTrailingPin(raw, label) {
39
+ const lastColon = raw.lastIndexOf(':');
40
+ if (lastColon === -1)
41
+ return { rest: raw };
42
+ const candidate = raw.slice(lastColon + 1);
43
+ if (!isThinkingLevel(candidate)) {
44
+ throw new PanelError(`could not parse panel entry: ${JSON.stringify(label)}`);
45
+ }
46
+ return { rest: raw.slice(0, lastColon), pin: candidate };
47
+ }
48
+ /**
49
+ * Parses one `provider/modelId[:level]` entry. The pin is split on the last colon (see
50
+ * `splitTrailingPin`); everything before it is `provider/modelId`, split on the FIRST slash —
51
+ * this is what tolerates a model id that itself contains slashes (the entire remainder becomes
52
+ * the model id) and one that carries a leading prefix marker (carried through unmodified; vendor
53
+ * derivation in `providers.ts` is what strips it, not this parser).
54
+ */
55
+ export function parsePanelEntry(entry) {
56
+ const trimmed = entry.trim();
57
+ if (trimmed.length === 0) {
58
+ throw new PanelError(`could not parse panel entry: ${JSON.stringify(entry)}`);
59
+ }
60
+ const { rest, pin } = splitTrailingPin(trimmed, entry);
61
+ const slashIdx = rest.indexOf('/');
62
+ if (slashIdx <= 0 || slashIdx === rest.length - 1) {
63
+ throw new PanelError(`could not parse panel entry: ${JSON.stringify(entry)}`);
64
+ }
65
+ const provider = rest.slice(0, slashIdx);
66
+ const model = rest.slice(slashIdx + 1);
67
+ return pin === undefined ? { provider, model } : { provider, model, pin };
68
+ }
69
+ // -------------------------------------------------------------------------------------------
70
+ // Glob expansion
71
+ // -------------------------------------------------------------------------------------------
72
+ /** Characters that mark an entry's `provider/modelId` portion as a glob pattern rather than a
73
+ * literal id. Plain ids never contain these (host ids are alphanumerics plus `.`, `-`, `_`, `/`,
74
+ * `~`), so their presence is an unambiguous signal to expand rather than look up directly. */
75
+ const GLOB_CHAR_RE = /[*?[\]{}]/;
76
+ /**
77
+ * Expands one comma-separated `--models` spec against the catalog. A literal (non-glob) entry is
78
+ * looked up directly and must name a real catalog model, or it errors naming the offending
79
+ * entry. A glob entry is matched against every catalog model's `provider/id`, must match at
80
+ * least one, and every match inherits the pattern's own pin.
81
+ */
82
+ export function expandPanelSpec(spec, catalog) {
83
+ const results = [];
84
+ for (const rawEntry of spec.split(',')) {
85
+ const entry = rawEntry.trim();
86
+ if (entry.length === 0)
87
+ continue;
88
+ const { rest, pin } = splitTrailingPin(entry, entry);
89
+ if (!GLOB_CHAR_RE.test(rest)) {
90
+ const parsed = parsePanelEntry(entry);
91
+ const found = findModel(catalog, parsed.provider, parsed.model);
92
+ if (!found) {
93
+ throw new PanelError(`panel entry names an unknown provider or model: ${JSON.stringify(entry)}`);
94
+ }
95
+ results.push(parsed);
96
+ continue;
97
+ }
98
+ const isMatch = picomatch(rest, { dot: true });
99
+ const matches = catalog.models.filter((m) => isMatch(`${m.provider}/${m.id}`));
100
+ if (matches.length === 0) {
101
+ throw new PanelError(`glob pattern matched no catalog model: ${JSON.stringify(rest)}`);
102
+ }
103
+ for (const m of matches) {
104
+ results.push(pin === undefined
105
+ ? { provider: m.provider, model: m.id }
106
+ : { provider: m.provider, model: m.id, pin });
107
+ }
108
+ }
109
+ return results;
110
+ }
111
+ // -------------------------------------------------------------------------------------------
112
+ // Duplicate collapsing
113
+ // -------------------------------------------------------------------------------------------
114
+ /**
115
+ * Collapses `entries` that name the same `provider/model` down to one, at the position of their
116
+ * FIRST occurrence but carrying the value of their LAST occurrence. A duplicated panel entry is
117
+ * always a mistake, never a deliberate choice — reviewing the same model twice adds no
118
+ * independence, but it does spawn the host twice (paying twice for one model's worth of signal),
119
+ * and because a reviewer's on-disk artifacts are named from a hash of `provider/model`, the
120
+ * second spawn silently overwrites the first's `.text.md`/`.findings.json`/`.trace.jsonl` while
121
+ * the manifest still claims both ran. The most common way to hit this isn't a literal repeated
122
+ * entry — it's a glob (`opencode-go/qwen3.8-*`) that happens to also match a model named
123
+ * explicitly elsewhere in the same spec, so this must run on the fully-expanded entry list, not
124
+ * just reject literal repeats.
125
+ *
126
+ * "Last occurrence wins" for the entry's own value mirrors `resolveThinking`'s own precedence
127
+ * rule elsewhere in this file: when a model is named more than once with conflicting per-entry
128
+ * pins (`foo/bar:low,foo/bar:high`), the later one is treated as a correction of the earlier one
129
+ * — the user's final word — not as a note to silently discard. `Map#set` gives us exactly this
130
+ * for free: re-setting an already-present key overwrites its value but leaves its original
131
+ * iteration position untouched, so the loop below is the entire implementation.
132
+ *
133
+ * This must run BEFORE the independence guard (`enforceIndependence`) sees the result — both
134
+ * `resolveSpecPanel` and `resolveConfiguredPanel` call this ahead of `buildReviewer` for exactly
135
+ * that reason, so `--models 'a,a,a'` is correctly refused as one model, not admitted as three.
136
+ */
137
+ function collapseDuplicates(entries, keyOf) {
138
+ const byKey = new Map();
139
+ for (const entry of entries) {
140
+ byKey.set(keyOf(entry), entry);
141
+ }
142
+ return Array.from(byKey.values());
143
+ }
144
+ // -------------------------------------------------------------------------------------------
145
+ // Reviewer assembly
146
+ // -------------------------------------------------------------------------------------------
147
+ function buildReviewer(model, sources) {
148
+ return {
149
+ provider: model.provider,
150
+ model: model.id,
151
+ vendor: model.vendor,
152
+ catalog: model,
153
+ thinking: resolveThinking(model, sources),
154
+ };
155
+ }
156
+ /**
157
+ * Resolves a saved config panel into reviewers. Every entry's model must still be present in the
158
+ * catalog and its provider must still be ready — either failure is a `PanelError` naming the
159
+ * entry, per the "A saved panel entry no longer exists" and "A configured model belongs to an
160
+ * unready provider" scenarios. Each entry's own saved `thinking` and the general
161
+ * `modelThinkingLevels` map both occupy the "configured per-model" precedence tier; the general
162
+ * map wins when both name the same model, since it is the more deliberate, hand-editable source.
163
+ */
164
+ export function resolveConfiguredPanel(panel, catalog, cfg, cliPanelWide) {
165
+ const deduped = collapseDuplicates(panel, (entry) => `${entry.provider}/${entry.model}`);
166
+ return deduped.map((entry) => {
167
+ const model = findModel(catalog, entry.provider, entry.model);
168
+ if (!model) {
169
+ throw new PanelError(`configured panel entry names a model absent from the catalog: ${entry.provider}/${entry.model}. ` +
170
+ 'Re-run selection to update the saved panel.');
171
+ }
172
+ const providerInfo = catalog.providers.find((p) => p.id === entry.provider);
173
+ if (!providerInfo || !providerInfo.ready) {
174
+ const reason = providerInfo?.reason ? ` (${providerInfo.reason})` : '';
175
+ throw new PanelError(`configured panel entry's provider "${entry.provider}" is not ready${reason}: ` +
176
+ `${entry.provider}/${entry.model}`);
177
+ }
178
+ const key = `${entry.provider}/${entry.model}`;
179
+ return buildReviewer(model, {
180
+ cliPanelWide,
181
+ configPerModel: cfg.modelThinkingLevels?.[key] ?? entry.thinking,
182
+ configDefault: cfg.defaultThinkingLevel,
183
+ });
184
+ });
185
+ }
186
+ /** Resolves a `--models` command-line spec into reviewers. Each entry's own `:level` pin, if
187
+ * any, is that model's CLI pin — the most specific source in the precedence chain. */
188
+ export function resolveSpecPanel(spec, catalog, cfg, cliPanelWide) {
189
+ const expanded = expandPanelSpec(spec, catalog);
190
+ const deduped = collapseDuplicates(expanded, (entry) => `${entry.provider}/${entry.model}`);
191
+ return deduped.map((entry) => {
192
+ const model = findModel(catalog, entry.provider, entry.model);
193
+ if (!model) {
194
+ // expandPanelSpec already validated existence for every entry it returns; this only
195
+ // guards against a future caller feeding pre-expanded entries in directly.
196
+ throw new PanelError(`panel entry names an unknown provider or model: ${entry.provider}/${entry.model}`);
197
+ }
198
+ const key = `${entry.provider}/${entry.model}`;
199
+ return buildReviewer(model, {
200
+ cliPin: entry.pin,
201
+ cliPanelWide,
202
+ configPerModel: cfg.modelThinkingLevels?.[key],
203
+ configDefault: cfg.defaultThinkingLevel,
204
+ });
205
+ });
206
+ }
207
+ // -------------------------------------------------------------------------------------------
208
+ // Vendor-independence guard
209
+ // -------------------------------------------------------------------------------------------
210
+ const MIN_MODELS = 3;
211
+ const MIN_VENDORS = 3;
212
+ /**
213
+ * Groups `reviewers` by derived vendor and checks the independence minimums: at least three
214
+ * models across at least three distinct vendors. `unknown` is one legitimate vendor bucket like
215
+ * any other — several unrecognised models collapse into it exactly as several recognised models
216
+ * from the same real vendor would, per design.md's "`unknown` is not treated as benign" (the
217
+ * point there is that `unknown` is admitted rather than rejected, not that it is exempt from
218
+ * collapsing). The model-count check runs first so its message doesn't get crowded out by a
219
+ * vendor-count message that would be equally true of a too-small panel.
220
+ *
221
+ * Typed against a structural minimum (only the three fields this function actually reads)
222
+ * rather than the full `Reviewer` shape, so `status.ts` can hand it plain `{provider, model,
223
+ * vendor}` objects derived from config alone -- reusing this exact guard verdict -- without
224
+ * needing to build a `CatalogModel` or resolve thinking levels for anything. `Reviewer` remains
225
+ * assignable, so every existing caller is unaffected.
226
+ */
227
+ export function checkIndependence(reviewers) {
228
+ const vendors = new Map();
229
+ for (const r of reviewers) {
230
+ const key = `${r.provider}/${r.model}`;
231
+ const existing = vendors.get(r.vendor);
232
+ if (existing) {
233
+ existing.push(key);
234
+ }
235
+ else {
236
+ vendors.set(r.vendor, [key]);
237
+ }
238
+ }
239
+ if (reviewers.length < MIN_MODELS) {
240
+ return {
241
+ ok: false,
242
+ vendors,
243
+ reason: `panel holds ${reviewers.length} model(s); at least ${MIN_MODELS} are required`,
244
+ };
245
+ }
246
+ if (vendors.size < MIN_VENDORS) {
247
+ return {
248
+ ok: false,
249
+ vendors,
250
+ reason: `panel resolves to ${vendors.size} distinct vendor(s) (${MIN_VENDORS} required): ` +
251
+ formatVendorGrouping(vendors),
252
+ };
253
+ }
254
+ return { ok: true, vendors };
255
+ }
256
+ /** Formats a vendor grouping as `vendor: member, member (n)` lines, for printing on refusal or
257
+ * before launch. Singleton groups are included too, so the full picture is visible at a glance. */
258
+ export function formatVendorGrouping(vendors) {
259
+ return Array.from(vendors.entries())
260
+ .map(([vendor, members]) => `${vendor}: ${members.join(', ')}`)
261
+ .join('\n');
262
+ }
263
+ /**
264
+ * Enforces the independence guard. Throws `GuardRefusal` (exit code 4) when the panel fails the
265
+ * guard and `allowCorrelated` is false. Stateless and cheap to call twice — at the end of
266
+ * selection and again immediately before launch — which is how a panel that reached
267
+ * configuration by hand-editing (never passing through the picker) still gets checked.
268
+ */
269
+ export function enforceIndependence(reviewers, allowCorrelated) {
270
+ const result = checkIndependence(reviewers);
271
+ if (!result.ok && !allowCorrelated) {
272
+ throw new GuardRefusal(result.reason ?? 'panel failed the independence guard', result.vendors);
273
+ }
274
+ }
275
+ //# sourceMappingURL=panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel.js","sourceRoot":"","sources":["../src/panel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { Reviewer } from './panel.js';
2
+ import type { Catalog } from './providers.js';
3
+ export interface PickerIO {
4
+ input: NodeJS.ReadableStream;
5
+ output: NodeJS.WritableStream & Partial<Pick<NodeJS.WriteStream, 'columns' | 'rows' | 'isTTY'>>;
6
+ isTTY: boolean;
7
+ }
8
+ export declare class PickerCancelled extends Error {
9
+ readonly exitCode: 2;
10
+ constructor(message?: string);
11
+ }
12
+ export declare class PickerNonInteractive extends Error {
13
+ readonly exitCode: 2;
14
+ constructor(message: string);
15
+ }
16
+ /**
17
+ * Runs the three-stage picker: providers, then models scoped to those providers, then a
18
+ * thinking level per selected reasoning model (non-reasoning selections are shown as "no
19
+ * thinking" and skip the prompt entirely). Throws `PickerNonInteractive` (exit code 2) without a
20
+ * terminal, before any prompt runs, and `PickerCancelled` (exit code 2) if the user cancels at
21
+ * any stage.
22
+ */
23
+ export declare function pickPanel(catalog: Catalog, io?: PickerIO): Promise<Reviewer[]>;
24
+ //# sourceMappingURL=picker.d.ts.map
@@ -0,0 +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"}