instar 1.3.190 → 1.3.192
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/dist/core/crossModelReviewer.d.ts +310 -0
- package/dist/core/crossModelReviewer.d.ts.map +1 -0
- package/dist/core/crossModelReviewer.js +489 -0
- package/dist/core/crossModelReviewer.js.map +1 -0
- package/package.json +1 -1
- package/scripts/instar-dev-precommit.js +279 -1
- package/scripts/lib/classify-tier.mjs +191 -0
- package/src/data/builtin-manifest.json +2 -2
- package/upgrades/1.3.191.md +37 -0
- package/upgrades/1.3.192.md +37 -0
- package/upgrades/side-effects/codex-crossreview-stepB.md +83 -0
- package/upgrades/side-effects/tier-classifier-and-tier1-path.md +81 -0
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* crossModelReviewer — Step B of the tiered development process.
|
|
3
|
+
*
|
|
4
|
+
* Re-platforms the `/spec-converge` external "cross-model" reviewer onto the
|
|
5
|
+
* agent's own installed `codex` CLI. The external pass that the skill used to
|
|
6
|
+
* describe as running "via the /crossreview pattern" (a never-built
|
|
7
|
+
* placeholder) is now a grounded mechanism: detect whether a supported reviewer
|
|
8
|
+
* framework is installed + authed, assemble the cross-model reviewer prompt
|
|
9
|
+
* (spec + referenced context, bounded to a budget), and run it THROUGH the
|
|
10
|
+
* existing `CodexCliIntelligenceProvider` (the factory with
|
|
11
|
+
* `framework: 'codex-cli'`, model `capable` → GPT-tier).
|
|
12
|
+
*
|
|
13
|
+
* Design invariants (see docs/specs/codex-crossreview-stepB-spec.md):
|
|
14
|
+
* - Detection is a pure function with injectable inputs (no real spawns in
|
|
15
|
+
* unit tests). It is SIGNAL-ONLY — it never throws and never blocks.
|
|
16
|
+
* - Reviewer invocation reuses the provider (its scratch-dir clean-notepad,
|
|
17
|
+
* env allowlist, `--skip-git-repo-check`, and the account-global circuit
|
|
18
|
+
* breaker the factory wraps it in). The ONLY new spawn-adjacent code is
|
|
19
|
+
* prompt assembly + result parsing.
|
|
20
|
+
* - Every failure mode routes toward internal-only convergence or a captured
|
|
21
|
+
* raw finding — never a stall. `unavailable` (no framework) is distinct
|
|
22
|
+
* from `degraded` (framework present, this call failed) and
|
|
23
|
+
* `skipped-abbreviated` (author chose the fast path).
|
|
24
|
+
*
|
|
25
|
+
* codex is the FIRST supported framework; the registry
|
|
26
|
+
* (`SUPPORTED_REVIEWER_FRAMEWORKS`) is the single seam for gemini-cli and
|
|
27
|
+
* others to plug in later (Out of Scope here). Adding a framework is one
|
|
28
|
+
* registry entry + one `id`-union extension — no skill change.
|
|
29
|
+
*/
|
|
30
|
+
import { type IntelligenceFramework } from './intelligenceProviderFactory.js';
|
|
31
|
+
/**
|
|
32
|
+
* Per-call timeout for a cross-model spec review. A reasoning review of a
|
|
33
|
+
* full spec is far heavier than the provider's 30s judgment-call default, so
|
|
34
|
+
* Step B bumps it to 120s (spec §2).
|
|
35
|
+
*/
|
|
36
|
+
export declare const REVIEW_TIMEOUT_MS = 120000;
|
|
37
|
+
/**
|
|
38
|
+
* Total context budget (spec + referenced docs) inlined into the reviewer
|
|
39
|
+
* prompt. codex runs in an empty read-only scratch dir with no repo access,
|
|
40
|
+
* so referenced context MUST be inlined; this bounds the prompt size (spec §2).
|
|
41
|
+
* The spec is always included in full; referenced context fills the remainder
|
|
42
|
+
* and is truncated (with a loud note) if it overflows.
|
|
43
|
+
*/
|
|
44
|
+
export declare const CONTEXT_BUDGET_BYTES: number;
|
|
45
|
+
/**
|
|
46
|
+
* Deterministic priority ordering for referenced context (spec §2, F4).
|
|
47
|
+
*
|
|
48
|
+
* When the 60KB budget can't hold every referenced doc, truncation MUST be
|
|
49
|
+
* deterministic — the same spec + same docs always drop the same docs — so a
|
|
50
|
+
* review is reproducible and the "what got dropped" note is stable. The
|
|
51
|
+
* constitutional / lessons docs are the highest-value context for a reviewer
|
|
52
|
+
* (they're what the lessons-aware internal reviewer reads), so they are kept
|
|
53
|
+
* FIRST; everything else keeps the spec-declared link order (the order the
|
|
54
|
+
* caller passed the docs in, which is the order they appear in the spec).
|
|
55
|
+
*
|
|
56
|
+
* A doc whose path contains one of these substrings sorts ahead of the rest,
|
|
57
|
+
* in THIS order. Ties (and all non-priority docs) preserve the caller's order
|
|
58
|
+
* via a stable sort.
|
|
59
|
+
*/
|
|
60
|
+
export declare const CONTEXT_PRIORITY_SUBSTRINGS: readonly string[];
|
|
61
|
+
/**
|
|
62
|
+
* Order referenced context deterministically: constitutional/lessons docs
|
|
63
|
+
* first (per CONTEXT_PRIORITY_SUBSTRINGS), then the caller's spec-declared link
|
|
64
|
+
* order for the rest. A stable sort on the priority rank achieves both — equal
|
|
65
|
+
* ranks keep their input order. Pure; never mutates the input.
|
|
66
|
+
*/
|
|
67
|
+
export declare function orderContextDeterministically(context: readonly ReferencedContextDoc[]): ReferencedContextDoc[];
|
|
68
|
+
/**
|
|
69
|
+
* Reasons a supported reviewer framework is unavailable. Mirrors the
|
|
70
|
+
* Rule-1 / auth-probe vocabulary so a report can render a specific
|
|
71
|
+
* remediation.
|
|
72
|
+
*/
|
|
73
|
+
export type CrossModelUnavailableReason = 'codex-not-installed' | 'codex-not-authed' | 'codex-auth-apikey-forbidden' | 'no-supported-framework';
|
|
74
|
+
export interface CrossModelDetectionResult {
|
|
75
|
+
available: boolean;
|
|
76
|
+
/** Present when available; the framework id that will run the review. */
|
|
77
|
+
framework?: IntelligenceFramework;
|
|
78
|
+
/** Present when available; the concrete model the review resolves to. */
|
|
79
|
+
model?: string;
|
|
80
|
+
/** Present when unavailable; a specific machine-readable reason. */
|
|
81
|
+
reason?: CrossModelUnavailableReason;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Injectable inputs for `detectCrossModelReviewer` so the detection logic is
|
|
85
|
+
* unit-testable without real spawns or a real `~/.codex/auth.json`.
|
|
86
|
+
*/
|
|
87
|
+
export interface CrossModelDetectInputs {
|
|
88
|
+
/**
|
|
89
|
+
* Path to the codex binary if detected, else null. Defaults to
|
|
90
|
+
* `detectCodexPath()` (PATH + asdf/nvm-shim resolution).
|
|
91
|
+
*/
|
|
92
|
+
codexPathDetected?: string | null;
|
|
93
|
+
/**
|
|
94
|
+
* Path to the codex auth.json. Defaults to
|
|
95
|
+
* `${CODEX_HOME || ~/.codex}/auth.json`.
|
|
96
|
+
*/
|
|
97
|
+
authJsonPath?: string;
|
|
98
|
+
/** Process env (for the Rule-1 OPENAI_API_KEY probe). Defaults to process.env. */
|
|
99
|
+
env?: NodeJS.ProcessEnv;
|
|
100
|
+
/** Clock injection for the Rule-1 killswitch sunset check. */
|
|
101
|
+
now?: Date;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Detect a codex reviewer. Returns `{ available: true, framework, model }`
|
|
105
|
+
* iff ALL of: codex binary detected, OAuth `access_token` present, Rule-1
|
|
106
|
+
* clean (no raw API key in env or auth.json). Any miss → a specific reason.
|
|
107
|
+
*
|
|
108
|
+
* Pure-ish: all external inputs are injectable. With no inputs it probes the
|
|
109
|
+
* real host. It NEVER throws.
|
|
110
|
+
*/
|
|
111
|
+
export declare function detectCodexReviewer(inputs?: CrossModelDetectInputs): CrossModelDetectionResult;
|
|
112
|
+
export interface ReviewerResult {
|
|
113
|
+
/** Outcome class for the cross-model pass. */
|
|
114
|
+
status: 'ok' | 'degraded' | 'unavailable';
|
|
115
|
+
/** The framework that ran (or would have run). */
|
|
116
|
+
framework?: IntelligenceFramework;
|
|
117
|
+
/** Concrete model used. */
|
|
118
|
+
model?: string;
|
|
119
|
+
/** Parsed verdict, when the review returned. */
|
|
120
|
+
verdict?: ReviewVerdict;
|
|
121
|
+
/** Structured findings (one record), folded alongside internal reviewers. */
|
|
122
|
+
findings?: ReviewFinding[];
|
|
123
|
+
/** A reason string for degraded/unavailable outcomes. */
|
|
124
|
+
reason?: string;
|
|
125
|
+
/** The flag string that gets written to frontmatter + the report banner. */
|
|
126
|
+
flag: string;
|
|
127
|
+
}
|
|
128
|
+
export type ReviewVerdict = 'CLEAN' | 'MINOR ISSUES' | 'SERIOUS ISSUES' | 'UNKNOWN';
|
|
129
|
+
export interface ReviewFinding {
|
|
130
|
+
/** Reviewer tag, e.g. 'cross-model:codex-cli:gpt-5.5'. */
|
|
131
|
+
reviewer: string;
|
|
132
|
+
verdict: ReviewVerdict;
|
|
133
|
+
/** The findings body (verbatim text the reviewer produced). */
|
|
134
|
+
body: string;
|
|
135
|
+
/** True when the reply could not be parsed into a verdict (captured raw). */
|
|
136
|
+
unstructured?: boolean;
|
|
137
|
+
}
|
|
138
|
+
interface SupportedReviewerFramework {
|
|
139
|
+
/** Extend this union (in the type below) to add a framework. */
|
|
140
|
+
id: IntelligenceFramework;
|
|
141
|
+
/** Detection — does this framework's reviewer have what it needs to run? */
|
|
142
|
+
detect(inputs?: CrossModelDetectInputs): CrossModelDetectionResult;
|
|
143
|
+
/**
|
|
144
|
+
* Run the review: assemble already done by the caller; this builds the
|
|
145
|
+
* provider, evaluates the prompt, and parses the result. Returns a
|
|
146
|
+
* ReviewerResult (never throws — failures map to a degraded result).
|
|
147
|
+
*/
|
|
148
|
+
review(args: ReviewerInvokeArgs): Promise<ReviewerResult>;
|
|
149
|
+
}
|
|
150
|
+
export interface ReviewerInvokeArgs {
|
|
151
|
+
/** The fully-assembled cross-model reviewer prompt (prompt + spec + context). */
|
|
152
|
+
promptText: string;
|
|
153
|
+
/** Per-call timeout. */
|
|
154
|
+
timeoutMs: number;
|
|
155
|
+
/**
|
|
156
|
+
* Optional provider override — tests inject a stub so no real codex spawn
|
|
157
|
+
* happens. Production passes nothing and the factory builds the real one.
|
|
158
|
+
*/
|
|
159
|
+
providerOverride?: {
|
|
160
|
+
evaluate(prompt: string, options?: {
|
|
161
|
+
model?: 'fast' | 'balanced' | 'capable';
|
|
162
|
+
timeoutMs?: number;
|
|
163
|
+
}): Promise<string>;
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* The supported-reviewer registry. codex first — the order IS the preference
|
|
168
|
+
* order. gemini-cli and others land here as later steps (Out of Scope).
|
|
169
|
+
*/
|
|
170
|
+
export declare const SUPPORTED_REVIEWER_FRAMEWORKS: SupportedReviewerFramework[];
|
|
171
|
+
/**
|
|
172
|
+
* Walk the registry in preference order and return the FIRST available
|
|
173
|
+
* framework's detection result. If none is available, returns the codex
|
|
174
|
+
* reason when there's exactly one entry (so the report can be specific), else
|
|
175
|
+
* the generic `no-supported-framework`.
|
|
176
|
+
*
|
|
177
|
+
* SIGNAL-ONLY: never throws, never blocks. A `false` simply routes the skill
|
|
178
|
+
* to the internal-only fallback (spec §4).
|
|
179
|
+
*/
|
|
180
|
+
export declare function detectCrossModelReviewer(inputs?: CrossModelDetectInputs): CrossModelDetectionResult;
|
|
181
|
+
/**
|
|
182
|
+
* Map a provider rejection into a coarse `degraded` reason. The provider
|
|
183
|
+
* surfaces timeouts, non-zero exits, and (via the circuit breaker) rate
|
|
184
|
+
* limits as thrown Errors; we classify on the message text the same way the
|
|
185
|
+
* rate-limit classifier does.
|
|
186
|
+
*/
|
|
187
|
+
export declare function classifyReviewFailure(err: unknown): string;
|
|
188
|
+
/**
|
|
189
|
+
* Parse a reviewer reply into a structured finding. The prompt mandates a
|
|
190
|
+
* `Verdict: CLEAN | MINOR ISSUES | SERIOUS ISSUES` line + a findings list. If
|
|
191
|
+
* the verdict line is unparseable (or the reply is blank), the whole reply is
|
|
192
|
+
* captured as one raw "unstructured external review — read manually" finding
|
|
193
|
+
* (never dropped, never thrown, never zero).
|
|
194
|
+
*/
|
|
195
|
+
export declare function parseReviewerReply(raw: string, reviewerTag: string): ReviewFinding;
|
|
196
|
+
export interface ReferencedContextDoc {
|
|
197
|
+
/** Repo-relative path used as the `--- CONTEXT: <path> ---` header. */
|
|
198
|
+
path: string;
|
|
199
|
+
/** The doc's contents (already read by the caller). */
|
|
200
|
+
content: string;
|
|
201
|
+
}
|
|
202
|
+
export interface AssemblePromptInputs {
|
|
203
|
+
/** Contents of skills/spec-converge/templates/reviewer-cross-model.md. */
|
|
204
|
+
reviewerTemplate: string;
|
|
205
|
+
/** The full spec markdown. */
|
|
206
|
+
specMarkdown: string;
|
|
207
|
+
/** Repo-relative spec path, substituted for {SPEC_PATH} in the template. */
|
|
208
|
+
specPath: string;
|
|
209
|
+
/** Referenced architectural context docs (same set internal reviewers see). */
|
|
210
|
+
context?: ReferencedContextDoc[];
|
|
211
|
+
/** Total budget in bytes. Defaults to CONTEXT_BUDGET_BYTES. */
|
|
212
|
+
budgetBytes?: number;
|
|
213
|
+
}
|
|
214
|
+
export interface AssembledPrompt {
|
|
215
|
+
/** The final prompt string fed to the provider. */
|
|
216
|
+
promptText: string;
|
|
217
|
+
/** True when referenced context had to be truncated to fit the budget. */
|
|
218
|
+
truncated: boolean;
|
|
219
|
+
/** Byte size of the assembled prompt. */
|
|
220
|
+
bytes: number;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Assemble the cross-model reviewer prompt: the reviewer template (with
|
|
224
|
+
* `{SPEC_PATH}` substituted) + the full spec + as much referenced context as
|
|
225
|
+
* fits the budget. codex runs with NO repo access, so context is inlined under
|
|
226
|
+
* `--- CONTEXT: <path> ---` headers. The spec is ALWAYS included in full; if
|
|
227
|
+
* referenced docs overflow the budget, they are truncated and a loud
|
|
228
|
+
* truncation note is added so the reviewer knows its view was partial (a
|
|
229
|
+
* silently-truncated review is a trap; a disclosed-partial one is still signal).
|
|
230
|
+
*
|
|
231
|
+
* Truncation is DETERMINISTIC (spec §2, F4): referenced docs are ordered by
|
|
232
|
+
* `orderContextDeterministically` (constitutional/lessons docs first, then the
|
|
233
|
+
* spec-declared link order) BEFORE the budget walk, so the same spec + docs
|
|
234
|
+
* always drop the same docs. When a doc is fully or partially dropped, the
|
|
235
|
+
* truncation note NAMES the affected docs (which were partial, which were fully
|
|
236
|
+
* omitted) — a reviewer must know exactly which context it could not see, not
|
|
237
|
+
* just that "something" was cut.
|
|
238
|
+
*/
|
|
239
|
+
export declare function assembleReviewerPrompt(inputs: AssemblePromptInputs): AssembledPrompt;
|
|
240
|
+
/**
|
|
241
|
+
* The discrete cross-model review outcome states the report + frontmatter
|
|
242
|
+
* record. Distinct so "you have no cross-model reviewer" reads differently
|
|
243
|
+
* from "your reviewer was rate-limited this round" from "you chose the fast
|
|
244
|
+
* path" from "the framework was present but NOT ONE round ever succeeded".
|
|
245
|
+
*
|
|
246
|
+
* `degraded-all-rounds` (spec §2/§4, F2) is the SPEC-LEVEL aggregate: a single
|
|
247
|
+
* round's `degraded` lives on a ReviewerResult, but convergence runs many
|
|
248
|
+
* rounds and the spec gets ONE final `cross-model-review:` value. When a
|
|
249
|
+
* framework was present every round but ZERO rounds produced a successful
|
|
250
|
+
* external pass (all degraded), the final flag is `degraded-all-rounds` —
|
|
251
|
+
* treated as loud as `unavailable`, because the spec converged having never
|
|
252
|
+
* once received a real external opinion. This must surface at SPEC level, not
|
|
253
|
+
* hide in per-round notes.
|
|
254
|
+
*/
|
|
255
|
+
export type CrossModelFlagStatus = 'available' | 'unavailable' | 'degraded' | 'degraded-all-rounds' | 'skipped-abbreviated';
|
|
256
|
+
export interface CrossModelFlag {
|
|
257
|
+
status: CrossModelFlagStatus;
|
|
258
|
+
/** The `cross-model-review:` frontmatter value. */
|
|
259
|
+
flag: string;
|
|
260
|
+
/** Optional `cross-model-review-reason:` value. */
|
|
261
|
+
reason?: string;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Build the fallback flag for the unavailable / skipped / degraded-all-rounds
|
|
265
|
+
* states. (The available and per-round degraded flags come back on the
|
|
266
|
+
* ReviewerResult.) Centralizes the exact strings the frontmatter writer +
|
|
267
|
+
* report banner consume.
|
|
268
|
+
*
|
|
269
|
+
* `degraded-all-rounds` is the spec-level aggregate the skill writes when a
|
|
270
|
+
* framework was present but no round ever succeeded (see
|
|
271
|
+
* `aggregateRoundOutcomes`).
|
|
272
|
+
*/
|
|
273
|
+
export declare function buildCrossModelFlag(status: 'unavailable' | 'skipped-abbreviated' | 'degraded-all-rounds', reason?: string): CrossModelFlag;
|
|
274
|
+
/**
|
|
275
|
+
* Aggregate per-round cross-model outcomes into the ONE final spec-level flag
|
|
276
|
+
* (spec §2/§4, F2). Convergence runs multiple rounds; each round yields a
|
|
277
|
+
* `ReviewerResult` (`ok` / `degraded` / `unavailable`). The skill collects the
|
|
278
|
+
* per-round statuses and calls this to decide what `write-convergence-tag.mjs`
|
|
279
|
+
* stamps:
|
|
280
|
+
*
|
|
281
|
+
* - `skipped-abbreviated` if the author opted out (passed explicitly) — wins
|
|
282
|
+
* over everything, since no external pass was attempted by choice.
|
|
283
|
+
* - `codex-cli:<model>` (the LAST successful round's flag) if ANY round got a
|
|
284
|
+
* real external pass — one genuine outside opinion is enough to say the spec
|
|
285
|
+
* received cross-model review.
|
|
286
|
+
* - `degraded-all-rounds` if a framework was present every round but ZERO
|
|
287
|
+
* rounds succeeded (all degraded) — as loud as `unavailable`.
|
|
288
|
+
* - `unavailable` if no framework was ever available (all rounds unavailable).
|
|
289
|
+
*
|
|
290
|
+
* Returns the `{ flag, reason }` the tag writer + report banner consume.
|
|
291
|
+
*/
|
|
292
|
+
export declare function aggregateRoundOutcomes(rounds: ReviewerResult[], opts?: {
|
|
293
|
+
skippedAbbreviated?: boolean;
|
|
294
|
+
}): CrossModelFlag;
|
|
295
|
+
/**
|
|
296
|
+
* The high-level entry the skill driver calls: detect, and if available run
|
|
297
|
+
* the first available framework's reviewer with the assembled prompt;
|
|
298
|
+
* otherwise return the `unavailable` flag. NEVER throws, NEVER blocks.
|
|
299
|
+
*
|
|
300
|
+
* `assembled` is produced by `assembleReviewerPrompt`. `detectInputs` and
|
|
301
|
+
* `providerOverride` exist for tests; production omits them.
|
|
302
|
+
*/
|
|
303
|
+
export declare function runCrossModelReview(args: {
|
|
304
|
+
assembled: AssembledPrompt;
|
|
305
|
+
timeoutMs?: number;
|
|
306
|
+
detectInputs?: CrossModelDetectInputs;
|
|
307
|
+
providerOverride?: ReviewerInvokeArgs['providerOverride'];
|
|
308
|
+
}): Promise<ReviewerResult>;
|
|
309
|
+
export {};
|
|
310
|
+
//# sourceMappingURL=crossModelReviewer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crossModelReviewer.d.ts","sourceRoot":"","sources":["../../src/core/crossModelReviewer.ts"],"names":[],"mappings":"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"}
|