@adversarylabs/sdk 0.1.11 → 0.1.12
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 +15 -4
- package/dist/index.d.ts +29 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +74 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -200,27 +200,38 @@ concern into posture-aware prose:
|
|
|
200
200
|
| `worktree` | uncommitted local changes (`headRef` is `WORKTREE`) | before committing |
|
|
201
201
|
|
|
202
202
|
```ts
|
|
203
|
-
import { formatOpinion } from "@adversarylabs/sdk";
|
|
203
|
+
import { formatOpinion, requireOpinionConcern } from "@adversarylabs/sdk";
|
|
204
204
|
|
|
205
205
|
ctx.review.opinion(
|
|
206
206
|
formatOpinion({
|
|
207
207
|
ship: false,
|
|
208
|
-
//
|
|
208
|
+
// Must be a noun phrase suitable after "I would address …".
|
|
209
209
|
concern: "direct process termination below the application boundary",
|
|
210
210
|
change: ctx.change,
|
|
211
211
|
}),
|
|
212
212
|
);
|
|
213
|
+
|
|
214
|
+
// Validate early when adapting model titles or free-form text:
|
|
215
|
+
requireOpinionConcern("forced exit code 124");
|
|
216
|
+
// throws: requireOpinionConcern("commands replace inherited context");
|
|
213
217
|
```
|
|
214
218
|
|
|
215
219
|
Helpers:
|
|
216
220
|
|
|
217
221
|
- `resolveReviewPosture(change)` — map `ctx.change` to `repository` | `change` | `worktree`
|
|
218
|
-
- `
|
|
219
|
-
- `
|
|
222
|
+
- `isOpinionConcernPhrase(concern)` — true when the string is a short noun phrase
|
|
223
|
+
- `requireOpinionConcern(concern)` — validate/normalize a noun phrase or throw
|
|
224
|
+
- `normalizeOpinionConcern(concern)` — lenient helper (may wrap clauses as `that …`); prefer
|
|
225
|
+
`requireOpinionConcern` for overall opinions
|
|
226
|
+
- `formatOpinion({ ship, concern?, remainingCount?, change?, posture? })` — build `{ ship, summary }`;
|
|
227
|
+
**rejects clause-shaped concerns**
|
|
220
228
|
|
|
221
229
|
When an adversary omits `ctx.review.opinion(...)`, the SDK synthesizes an opinion from residual
|
|
222
230
|
findings using the same posture rules.
|
|
223
231
|
|
|
232
|
+
**Ownership:** adversaries supply noun-phrase concerns; the SDK frames posture language and
|
|
233
|
+
validates concern shape. The CLI prints `opinion.summary` and does not rewrite prose.
|
|
234
|
+
|
|
224
235
|
### `app.defineRule(definition)`
|
|
225
236
|
|
|
226
237
|
Registers domain-specific aggregation for a stable rule id. The SDK still owns grouping,
|
package/dist/index.d.ts
CHANGED
|
@@ -155,9 +155,10 @@ export interface FormatOpinionOptions {
|
|
|
155
155
|
/** Whether the reviewer would accept the current target as-is enough to proceed. */
|
|
156
156
|
ship: boolean;
|
|
157
157
|
/**
|
|
158
|
-
* What should be fixed.
|
|
159
|
-
* ("direct process termination below the
|
|
160
|
-
*
|
|
158
|
+
* What should be fixed. Must be a short noun phrase suitable after
|
|
159
|
+
* "I would address …" (for example "direct process termination below the
|
|
160
|
+
* application boundary"). Validated by {@link requireOpinionConcern}; clauses
|
|
161
|
+
* and sentence punctuation are rejected (they are not rewritten).
|
|
161
162
|
*/
|
|
162
163
|
concern?: string;
|
|
163
164
|
/**
|
|
@@ -396,16 +397,39 @@ export declare function normalizeChangeContext(change: RuntimeChange | null | un
|
|
|
396
397
|
* Adversaries should prefer this (or `formatOpinion`) over hardcoding merge language.
|
|
397
398
|
*/
|
|
398
399
|
export declare function resolveReviewPosture(change: ChangeContext | null | undefined): ReviewPosture;
|
|
400
|
+
/** Maximum length for a concern phrase passed to formatOpinion. */
|
|
401
|
+
export declare const MAX_OPINION_CONCERN_LENGTH = 100;
|
|
399
402
|
/**
|
|
400
403
|
* Normalize a concern for use after "address …". Noun phrases pass through;
|
|
401
404
|
* full clauses become "that …" so rule titles remain grammatical.
|
|
405
|
+
*
|
|
406
|
+
* Prefer {@link requireOpinionConcern} / {@link formatOpinion} for overall opinion
|
|
407
|
+
* text. This helper remains available when synthesizing assessment-style clauses.
|
|
402
408
|
*/
|
|
403
409
|
export declare function normalizeOpinionConcern(concern: string): string;
|
|
410
|
+
/**
|
|
411
|
+
* True when `concern` is a short noun phrase suitable after "I would address …".
|
|
412
|
+
* Rejects empty values, sentence punctuation, long strings, and finite-clause shapes
|
|
413
|
+
* such as "commands replace inherited context".
|
|
414
|
+
*/
|
|
415
|
+
export declare function isOpinionConcernPhrase(concern: string): boolean;
|
|
416
|
+
/**
|
|
417
|
+
* Validate and normalize a noun-phrase concern for {@link formatOpinion}.
|
|
418
|
+
* Throws when the value is empty, too long, sentence-like, or a finite clause.
|
|
419
|
+
*
|
|
420
|
+
* @example
|
|
421
|
+
* ```ts
|
|
422
|
+
* requireOpinionConcern("direct process termination below the application boundary");
|
|
423
|
+
* // throws: requireOpinionConcern("commands replace inherited context with context.Background");
|
|
424
|
+
* ```
|
|
425
|
+
*/
|
|
426
|
+
export declare function requireOpinionConcern(concern: string, label?: string): string;
|
|
404
427
|
/**
|
|
405
428
|
* Build a posture-aware review opinion from a ship decision and optional concern.
|
|
406
429
|
*
|
|
407
|
-
* Domain adversaries should pass judgment (ship + concern
|
|
408
|
-
* choose merge/commit/shipping language from the runner-resolved change scope.
|
|
430
|
+
* Domain adversaries should pass judgment (ship + **noun-phrase** concern) and let
|
|
431
|
+
* the SDK choose merge/commit/shipping language from the runner-resolved change scope.
|
|
432
|
+
* Concerns are validated with {@link requireOpinionConcern}.
|
|
409
433
|
*
|
|
410
434
|
* @example
|
|
411
435
|
* ```ts
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -948,9 +948,14 @@ export function resolveReviewPosture(change) {
|
|
|
948
948
|
}
|
|
949
949
|
return "change";
|
|
950
950
|
}
|
|
951
|
+
/** Maximum length for a concern phrase passed to formatOpinion. */
|
|
952
|
+
export const MAX_OPINION_CONCERN_LENGTH = 100;
|
|
951
953
|
/**
|
|
952
954
|
* Normalize a concern for use after "address …". Noun phrases pass through;
|
|
953
955
|
* full clauses become "that …" so rule titles remain grammatical.
|
|
956
|
+
*
|
|
957
|
+
* Prefer {@link requireOpinionConcern} / {@link formatOpinion} for overall opinion
|
|
958
|
+
* text. This helper remains available when synthesizing assessment-style clauses.
|
|
954
959
|
*/
|
|
955
960
|
export function normalizeOpinionConcern(concern) {
|
|
956
961
|
const normalized = lowercaseFirst(trimTrailingSentencePunctuation(normalizeParagraph(concern)));
|
|
@@ -959,11 +964,61 @@ export function normalizeOpinionConcern(concern) {
|
|
|
959
964
|
}
|
|
960
965
|
return concernClause(normalized);
|
|
961
966
|
}
|
|
967
|
+
/**
|
|
968
|
+
* True when `concern` is a short noun phrase suitable after "I would address …".
|
|
969
|
+
* Rejects empty values, sentence punctuation, long strings, and finite-clause shapes
|
|
970
|
+
* such as "commands replace inherited context".
|
|
971
|
+
*/
|
|
972
|
+
export function isOpinionConcernPhrase(concern) {
|
|
973
|
+
try {
|
|
974
|
+
requireOpinionConcern(concern);
|
|
975
|
+
return true;
|
|
976
|
+
}
|
|
977
|
+
catch {
|
|
978
|
+
return false;
|
|
979
|
+
}
|
|
980
|
+
}
|
|
981
|
+
/**
|
|
982
|
+
* Validate and normalize a noun-phrase concern for {@link formatOpinion}.
|
|
983
|
+
* Throws when the value is empty, too long, sentence-like, or a finite clause.
|
|
984
|
+
*
|
|
985
|
+
* @example
|
|
986
|
+
* ```ts
|
|
987
|
+
* requireOpinionConcern("direct process termination below the application boundary");
|
|
988
|
+
* // throws: requireOpinionConcern("commands replace inherited context with context.Background");
|
|
989
|
+
* ```
|
|
990
|
+
*/
|
|
991
|
+
export function requireOpinionConcern(concern, label = "opinion concern") {
|
|
992
|
+
if (typeof concern !== "string") {
|
|
993
|
+
throw new Error(`${label} must be a string.`);
|
|
994
|
+
}
|
|
995
|
+
const trimmed = concern.trim();
|
|
996
|
+
if (trimmed === "") {
|
|
997
|
+
throw new Error(`${label} must be a non-empty noun phrase suitable after "address …" (for example "direct process termination").`);
|
|
998
|
+
}
|
|
999
|
+
// Reject sentence punctuation before any stripping so "foo." does not bypass
|
|
1000
|
+
// the noun-phrase contract by normalizing to "foo".
|
|
1001
|
+
if (/[.!?]/.test(trimmed)) {
|
|
1002
|
+
throw new Error(`${label} must be a noun phrase, not a sentence (remove ".!?").`);
|
|
1003
|
+
}
|
|
1004
|
+
const normalized = lowercaseFirst(normalizeParagraph(trimmed));
|
|
1005
|
+
if (!isNonEmptyString(normalized)) {
|
|
1006
|
+
throw new Error(`${label} must be a non-empty noun phrase suitable after "address …" (for example "direct process termination").`);
|
|
1007
|
+
}
|
|
1008
|
+
if (normalized.length > MAX_OPINION_CONCERN_LENGTH) {
|
|
1009
|
+
throw new Error(`${label} must be at most ${MAX_OPINION_CONCERN_LENGTH} characters (got ${normalized.length}).`);
|
|
1010
|
+
}
|
|
1011
|
+
if (looksLikeFiniteClause(normalized)) {
|
|
1012
|
+
throw new Error(`${label} must be a noun phrase (for example "direct process termination"), not a clause (for example "commands replace inherited context").`);
|
|
1013
|
+
}
|
|
1014
|
+
return normalized;
|
|
1015
|
+
}
|
|
962
1016
|
/**
|
|
963
1017
|
* Build a posture-aware review opinion from a ship decision and optional concern.
|
|
964
1018
|
*
|
|
965
|
-
* Domain adversaries should pass judgment (ship + concern
|
|
966
|
-
* choose merge/commit/shipping language from the runner-resolved change scope.
|
|
1019
|
+
* Domain adversaries should pass judgment (ship + **noun-phrase** concern) and let
|
|
1020
|
+
* the SDK choose merge/commit/shipping language from the runner-resolved change scope.
|
|
1021
|
+
* Concerns are validated with {@link requireOpinionConcern}.
|
|
967
1022
|
*
|
|
968
1023
|
* @example
|
|
969
1024
|
* ```ts
|
|
@@ -993,7 +1048,7 @@ export function formatOpinion(options) {
|
|
|
993
1048
|
}
|
|
994
1049
|
const concern = options.concern === undefined || options.concern.trim() === ""
|
|
995
1050
|
? undefined
|
|
996
|
-
:
|
|
1051
|
+
: requireOpinionConcern(options.concern, "formatOpinion concern");
|
|
997
1052
|
if (options.ship) {
|
|
998
1053
|
if (concern === undefined) {
|
|
999
1054
|
return { ship: true, summary: opinionApproveAsIs(posture) };
|
|
@@ -1014,6 +1069,22 @@ export function formatOpinion(options) {
|
|
|
1014
1069
|
summary: `I would address ${concern} ${deadline}.`,
|
|
1015
1070
|
};
|
|
1016
1071
|
}
|
|
1072
|
+
/**
|
|
1073
|
+
* True when the phrase looks like a finite clause (subject + finite verb + complement),
|
|
1074
|
+
* not a noun phrase. Used to reject bad formatOpinion concerns.
|
|
1075
|
+
*/
|
|
1076
|
+
function looksLikeFiniteClause(concern) {
|
|
1077
|
+
// Finite verb with a following token (shared with concernClause).
|
|
1078
|
+
if (/\b(?:allows|are|binds|blocks|builds|bypasses|calls|can|closes|contains|copies|could|creates|detaches|did|discards|do|does|exits|exposes|fails|forks|has|have|ignores|includes|installs|is|kills|lacks|leaks|leaves|logs|maps|may|might|must|opens|panics|prints|reads|references|relies|replaces|requires|returns|runs|skips|spawns|starts|terminates|throws|uses|was|were|writes)\b\s+\S+/i.test(concern)) {
|
|
1079
|
+
return true;
|
|
1080
|
+
}
|
|
1081
|
+
// Present-tense verbs that often appear mid-title ("commands replace inherited context").
|
|
1082
|
+
// Do not match past-participial adjectives at the start ("discarded command errors").
|
|
1083
|
+
if (/(?:^|\s)(?:replace|replaces|discard|discards|force|forces|override|overrides|cause|causes|prevent|prevents|block|blocks|break|breaks|succeed|succeeds|fail|fails|mix|mixes|omit|omits|ignore|ignores)\s+\S+/i.test(concern)) {
|
|
1084
|
+
return true;
|
|
1085
|
+
}
|
|
1086
|
+
return false;
|
|
1087
|
+
}
|
|
1017
1088
|
function parseReviewPosture(value, label) {
|
|
1018
1089
|
if (value === "repository" || value === "change" || value === "worktree") {
|
|
1019
1090
|
return value;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { mkdir, readFile, readdir, writeFile } from \"node:fs/promises\";\nimport { dirname, isAbsolute, relative, resolve } from \"node:path\";\nimport { Ajv2020, type ValidateFunction } from \"ajv/dist/2020.js\";\nimport { type ReviewModel, createModelFromEnvironment, unavailableModel } from \"./model.js\";\n\nexport {\n ADVERSARY_MODEL_ENDPOINT_ENV,\n ADVERSARY_MODEL_PROTOCOL_VERSION,\n ADVERSARY_MODEL_TOKEN_ENV,\n BrokerReviewModel,\n ModelReviewError,\n ModelUnavailableError,\n createModelFromEnvironment,\n unavailableModel,\n type ModelReviewBudget,\n type ModelEnvironment,\n type ModelReviewRequest,\n type ModelReviewResult,\n type ModelReviewUsage,\n type ReviewModel,\n} from \"./model.js\";\n\nexport {\n ADVERSARY_MANIFEST_FILE_NAME,\n ADVERSARY_MANIFEST_MAX_BYTES,\n ManifestValidationError,\n parseAdversaryManifest,\n validateAdversaryManifest,\n type AdversaryManifest,\n type DetectionManifest,\n type EnvironmentPermissionsManifest,\n type FilesystemPermissionsManifest,\n type FindingsManifest,\n type PermissionsManifest,\n type RuntimeManifest,\n type TriggerManifest,\n} from \"./manifest.js\";\n\nexport const DEFAULT_INPUT_PATH = \"/adversary/input.json\";\nexport const DEFAULT_OUTPUT_PATH = \"/adversary/output.json\";\nexport const ADVERSARY_RUN_PROTOCOL_VERSION = 1;\n\nconst verboseValues = new Set([\"1\", \"true\", \"TRUE\", \"yes\", \"YES\"]);\nlet envelopeValidator: ValidateFunction | undefined;\n\nexport const Severity = {\n Info: \"info\",\n Low: \"low\",\n Medium: \"medium\",\n High: \"high\",\n Critical: \"critical\",\n} as const;\n\nexport type Severity = (typeof Severity)[keyof typeof Severity];\n\nexport interface SeverityGuidanceEntry {\n severity: Severity;\n guidance: string;\n}\n\nexport const DEFAULT_SEVERITY_GUIDANCE: SeverityGuidanceEntry[] = [\n {\n severity: Severity.Info,\n guidance: \"Interesting observations.\",\n },\n {\n severity: Severity.Low,\n guidance: \"Reasonable engineering improvements.\",\n },\n {\n severity: Severity.Medium,\n guidance: \"Issues likely to create operational problems.\",\n },\n {\n severity: Severity.High,\n guidance: \"Security, correctness, or reliability risks.\",\n },\n {\n severity: Severity.Critical,\n guidance: \"Immediate production risk.\",\n },\n];\n\nexport const Confidence = {\n Low: \"low\",\n Medium: \"medium\",\n High: \"high\",\n} as const;\n\nexport type Confidence = (typeof Confidence)[keyof typeof Confidence];\nexport type ConfidenceInput = Confidence | number;\n\nexport interface ConfidenceThresholds {\n medium: number;\n high: number;\n}\n\nexport const DEFAULT_CONFIDENCE_THRESHOLDS: ConfidenceThresholds = {\n medium: 0.6,\n high: 0.85,\n};\n\nexport interface Location {\n file?: string;\n line?: number;\n endLine?: number;\n}\n\nexport interface EvidenceInput extends Location {\n location?: Location;\n label?: string;\n message?: string;\n snippet?: string;\n data?: Record<string, unknown>;\n /** @deprecated Use data. */\n metadata?: Record<string, unknown>;\n}\n\nexport interface Evidence {\n location?: Location;\n label?: string;\n message?: string;\n snippet?: string;\n data?: Record<string, unknown>;\n}\n\nexport interface Remediation {\n complexity?: \"trivial\" | \"small\" | \"medium\" | \"large\" | \"architectural\";\n}\n\nexport interface RecommendationInput {\n summary: string;\n details?: string;\n}\n\nexport type ObservationTitle =\n | string\n | {\n singular: string;\n plural: string;\n };\n\nexport type ObservationSummary =\n | string\n | {\n singular?: string;\n grouped?: string;\n };\n\nexport type ConfidenceAggregation = \"maximum\" | \"minimum\" | \"average\";\nexport type SeverityAggregation = \"highest\" | \"lowest\";\n\nexport interface ObservationInit {\n ruleId: string;\n subject: string;\n groupKey?: string;\n groupBy?: string[];\n groupedTitle?: string;\n deduplicate?: boolean;\n category?: string;\n severity?: Severity;\n confidence?: ConfidenceInput;\n confidenceAggregation?: ConfidenceAggregation;\n severityAggregation?: SeverityAggregation;\n title: ObservationTitle;\n summary?: ObservationSummary;\n whyItMatters?: string;\n impact?: string;\n location?: EvidenceInput;\n evidence?: string | Record<string, unknown>;\n recommendation?: string | RecommendationInput;\n remediation?: Remediation;\n tags?: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface FindingInput {\n id?: string;\n ruleId?: string;\n groupKey?: string;\n deduplicate?: boolean;\n title: string;\n category: string;\n severity: Severity;\n confidence: ConfidenceInput;\n summary: string;\n whyItMatters?: string;\n impact?: string;\n evidence: EvidenceInput[];\n recommendation?: string;\n remediation?: Remediation;\n tags?: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface ReviewFinding {\n id: string;\n ruleId?: string;\n groupKey?: string;\n title: string;\n category: string;\n severity: Severity;\n confidence: Confidence;\n summary: string;\n whyItMatters?: string;\n impact?: string;\n evidence: Evidence[];\n recommendation?: string;\n remediation?: Remediation;\n tags?: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface ReviewNote {\n key: string;\n summary: string;\n evidence?: Evidence[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface ReviewNoteInput extends Omit<ReviewNote, \"evidence\"> {\n evidence?: EvidenceInput[];\n}\n\nexport interface ReviewAssessment {\n risk: \"none\" | \"low\" | \"medium\" | \"high\" | \"critical\";\n summary?: string;\n}\n\nexport interface ReviewOpinion {\n ship?: boolean;\n summary: string;\n}\n\n/**\n * Decision context for opinion framing. Derived from the runner-resolved change\n * scope so adversaries do not invent merge/commit language for whole-target audits.\n *\n * - `repository` — entire target (`change === null` or `scanMode: \"all\"`)\n * - `change` — committed range (branch comparison, PR, or explicit base/head)\n * - `worktree` — uncommitted local changes (`headRef` is the WORKTREE sentinel)\n */\nexport type ReviewPosture = \"repository\" | \"change\" | \"worktree\";\n\nexport interface FormatOpinionOptions {\n /** Whether the reviewer would accept the current target as-is enough to proceed. */\n ship: boolean;\n /**\n * What should be fixed. Prefer a short noun phrase\n * (\"direct process termination below the application boundary\").\n * Full clauses are normalized for \"address …\" sentences.\n */\n concern?: string;\n /**\n * When greater than 1, use plural \"remaining findings\" framing and ignore\n * `concern` for the primary sentence.\n */\n remainingCount?: number;\n /** Runner-resolved change scope; used when `posture` is omitted. */\n change?: ChangeContext | null;\n /** Explicit posture override. */\n posture?: ReviewPosture;\n}\n\nexport interface ReviewScore {\n key: string;\n label?: string;\n score: number;\n max?: number;\n summary?: string;\n}\n\nexport interface ReviewPolicy {\n minimumConfidence?: Confidence;\n maximumFindings?: number;\n includeInformational?: boolean;\n confidenceThresholds?: ConfidenceThresholds;\n severityOverrides?: Record<string, Severity>;\n}\n\nexport interface ReviewResult {\n adversary: {\n name: string;\n version?: string;\n };\n target: {\n repository?: string;\n filesScanned?: number;\n };\n assessment?: ReviewAssessment;\n positives: ReviewNote[];\n observations: ReviewNote[];\n findings: ReviewFinding[];\n opinion?: ReviewOpinion;\n suppressed: {\n observations: number;\n findings: number;\n };\n timing?: {\n buildMs?: number;\n startupMs?: number;\n scanMs?: number;\n totalMs?: number;\n };\n suppressedFindings?: ReviewFinding[];\n rawObservations?: ObservationInit[];\n}\n\nexport interface AdversaryRunEnvelope {\n protocolVersion: typeof ADVERSARY_RUN_PROTOCOL_VERSION;\n result: WireReviewResult;\n}\n\nexport interface WireEvidence {\n file?: string;\n line?: number;\n endLine?: number;\n message?: string;\n snippet?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface WireReviewFinding extends Omit<ReviewFinding, \"evidence\"> {\n evidence: WireEvidence[];\n}\n\nexport interface WireReviewNote extends Omit<ReviewNote, \"evidence\"> {\n evidence?: WireEvidence[];\n}\n\nexport interface WireReviewResult\n extends Omit<ReviewResult, \"positives\" | \"observations\" | \"findings\" | \"suppressedFindings\"> {\n positives: WireReviewNote[];\n observations: WireReviewNote[];\n findings: WireReviewFinding[];\n suppressedFindings?: WireReviewFinding[];\n}\n\n/** Sentinel head_ref used when the reviewed head is the uncommitted worktree. */\nexport const WORKTREE_HEAD_REF = \"WORKTREE\";\n\n/** The change block of adversary.input.v1 as written by the runner. */\nexport interface RuntimeChange {\n type?: string;\n base_ref?: string;\n head_ref?: string;\n scan_mode?: string;\n changed_files?: string[];\n [key: string]: unknown;\n}\n\nexport interface RuntimeInput {\n source: {\n path: string;\n };\n change?: RuntimeChange | null;\n [key: string]: unknown;\n}\n\n/** The requested review scope, normalized from the runtime input's change block. */\nexport interface ChangeContext {\n /** Change representation reported by the runner; \"diff\" today. */\n readonly type?: string;\n /** Base revision of the reviewed change. */\n readonly baseRef?: string;\n /** Head revision of the reviewed change, or the WORKTREE sentinel. */\n readonly headRef?: string;\n /** \"changed\" restricts review to the change; \"all\" requests the entire target. */\n readonly scanMode: \"changed\" | \"all\";\n /** Repository-relative paths the runner identified as changed. */\n readonly changedFiles: readonly string[];\n /** True when the reviewed head is the uncommitted worktree. */\n readonly worktree: boolean;\n}\n\nexport interface Summary {\n files_scanned?: number;\n}\n\nexport interface RuleContext {\n repoPath: string;\n /**\n * The requested review scope. Null when the runner asked for a full-target\n * review without a change context; when present, scanMode distinguishes\n * reviewing only the change (\"changed\") from reviewing the entire target\n * with change metadata available (\"all\").\n */\n change: ChangeContext | null;\n summary: Summary;\n cache: Map<string, unknown>;\n relpath: (path: string) => string;\n glob: (pattern: string) => Promise<string[]>;\n rglob: (pattern: string) => Promise<string[]>;\n model: ReviewModel;\n observe: (observation: ObservationInit) => void;\n finding: (finding: FindingInput) => void;\n review: {\n assessment: (assessment: ReviewAssessment) => void;\n positive: (note: ReviewNoteInput) => void;\n observe: (note: ReviewNoteInput) => void;\n score: (score: ReviewScore) => void;\n opinion: (opinion: ReviewOpinion) => void;\n };\n}\n\nexport type RuleHandler = (context: RuleContext) => void | Promise<void>;\n\nexport interface AdversaryOptions {\n name: string;\n version?: string;\n review?: ReviewPolicy;\n}\n\nexport interface RunOptions {\n input: RuntimeInput;\n model?: ReviewModel;\n review?: ReviewPolicy;\n includeSuppressed?: boolean;\n includeRawObservations?: boolean;\n includeTiming?: boolean;\n}\n\nexport interface EnvironmentRunOptions {\n input?: RuntimeInput;\n inputPath?: string;\n outputPath?: string;\n model?: ReviewModel;\n review?: ReviewPolicy;\n includeSuppressed?: boolean;\n includeRawObservations?: boolean;\n includeTiming?: boolean;\n}\n\nexport interface ReviewRenderer {\n render(result: ReviewResult): Promise<void> | void;\n}\n\nexport interface RuleDefinition {\n id: string;\n category?: string;\n defaultSeverity?: Severity;\n defaultConfidence?: ConfidenceInput;\n groupBy?: string[];\n aggregate?: (observations: ReadonlyArray<ObservationInit>) => FindingSynthesis;\n}\n\nexport type FindingSynthesis = Omit<Partial<ReviewFinding>, \"evidence\"> & {\n evidence?: EvidenceInput[];\n};\n\nexport class RuleRegistry {\n private readonly rules = new Map<string, RuleDefinition>();\n\n register(rule: RuleDefinition): void {\n assertRuleDefinition(rule);\n if (this.rules.has(rule.id)) {\n throw new Error(`Rule definition \"${rule.id}\" is already registered.`);\n }\n this.rules.set(rule.id, cloneRuleDefinition(rule));\n }\n\n replace(rule: RuleDefinition): void {\n assertRuleDefinition(rule);\n if (!this.rules.has(rule.id)) {\n throw new Error(`Rule definition \"${rule.id}\" is not registered.`);\n }\n this.rules.set(rule.id, cloneRuleDefinition(rule));\n }\n\n lookup(ruleId: string): RuleDefinition | undefined {\n const rule = this.rules.get(ruleId);\n return rule === undefined ? undefined : cloneRuleDefinition(rule);\n }\n\n has(ruleId: string): boolean {\n return this.rules.has(ruleId);\n }\n\n snapshot(): RuleRegistry {\n const snapshot = new RuleRegistry();\n for (const rule of this.rules.values()) {\n snapshot.register(rule);\n }\n return snapshot;\n }\n\n importMissing(source: RuleRegistry): void {\n for (const rule of source.rules.values()) {\n if (!this.rules.has(rule.id)) {\n this.rules.set(rule.id, cloneRuleDefinition(rule));\n }\n }\n }\n}\n\nfunction cloneRuleDefinition(rule: RuleDefinition): RuleDefinition {\n return {\n ...rule,\n groupBy: rule.groupBy === undefined ? undefined : [...rule.groupBy],\n };\n}\n\nfunction cloneReviewPolicy(policy: ReviewPolicy): ReviewPolicy {\n return {\n ...policy,\n confidenceThresholds:\n policy.confidenceThresholds === undefined ? undefined : { ...policy.confidenceThresholds },\n severityOverrides:\n policy.severityOverrides === undefined ? undefined : { ...policy.severityOverrides },\n };\n}\n\n/** @deprecated Prefer app.defineRule(...) so definitions remain instance-scoped. */\nexport const ruleRegistry = new RuleRegistry();\n\n/** @deprecated Prefer app.defineRule(...) so definitions remain instance-scoped. */\nexport function defineRule(rule: RuleDefinition): void {\n ruleRegistry.register(rule);\n}\n\n/** @deprecated Prefer app.replaceRule(...) so definitions remain instance-scoped. */\nexport function replaceRule(rule: RuleDefinition): void {\n ruleRegistry.replace(rule);\n}\n\nexport const log = {\n debug(message: unknown): void {\n if (isVerbose()) {\n writeLog(\"debug\", message);\n }\n },\n\n info(message: unknown): void {\n if (isVerbose()) {\n writeLog(\"info\", message);\n }\n },\n\n warn(message: unknown): void {\n writeLog(\"warn\", message);\n },\n\n error(message: unknown): void {\n writeLog(\"error\", message);\n },\n};\n\nexport class Adversary {\n readonly name: string;\n readonly version?: string;\n private readonly rules: Array<{ id: string; handler: RuleHandler }> = [];\n private readonly reviewPolicy: ReviewPolicy;\n private readonly ruleDefinitions: RuleRegistry;\n\n constructor(options: AdversaryOptions) {\n if (options.name.length === 0) {\n throw new Error(\"Adversary name must be a non-empty string.\");\n }\n\n this.name = options.name;\n this.version = options.version;\n this.reviewPolicy = cloneReviewPolicy(options.review ?? {});\n assertReviewPolicy(this.reviewPolicy, `adversary \"${this.name}\" review policy`);\n this.ruleDefinitions = ruleRegistry.snapshot();\n }\n\n defineRule(rule: RuleDefinition): void {\n this.ruleDefinitions.register(rule);\n }\n\n replaceRule(rule: RuleDefinition): void {\n this.ruleDefinitions.replace(rule);\n }\n\n hasRuleDefinition(ruleId: string): boolean {\n return this.ruleDefinitions.has(ruleId);\n }\n\n rule(id: string, handler: RuleHandler): void {\n if (id.length === 0) {\n throw new Error(\"Rule id must be a non-empty string.\");\n }\n\n if (this.rules.some((rule) => rule.id === id)) {\n throw new Error(`App rule \"${id}\" is already registered.`);\n }\n\n // Compatibility for definitions registered with the deprecated top-level API after\n // this Adversary was constructed. Once copied, later global changes cannot affect it.\n this.ruleDefinitions.importMissing(ruleRegistry);\n this.rules.push({ id, handler });\n }\n\n async run(options: RunOptions): Promise<ReviewResult> {\n const startedAt = performance.now();\n assertReviewPolicy(options.review ?? {}, `adversary \"${this.name}\" run review policy`);\n const repoPath = options.input.source.path;\n const summary: Summary = {};\n const cache = new Map<string, unknown>();\n const collector = createReviewCollector();\n const registry = this.ruleDefinitions.snapshot();\n const change = normalizeChangeContext(options.input.change);\n const context = createRuleContext(\n repoPath,\n change,\n summary,\n cache,\n collector,\n registry,\n options.model ?? unavailableModel(),\n );\n const includeSuppressed = options.includeSuppressed;\n\n for (const rule of this.rules) {\n log.debug(`running rule ${rule.id}`);\n await rule.handler(context);\n }\n\n const output = buildReviewResult({\n adversary: { name: this.name, version: this.version },\n repository: repoPath,\n filesScanned: typeof summary.files_scanned === \"number\" ? summary.files_scanned : undefined,\n collector,\n policy: cloneReviewPolicy({ ...this.reviewPolicy, ...options.review }),\n registry,\n change,\n includeSuppressed,\n includeRawObservations: options.includeRawObservations,\n timing: options.includeTiming\n ? { totalMs: Math.round(performance.now() - startedAt) }\n : undefined,\n });\n\n return output;\n }\n\n async runFromEnvironment(options: EnvironmentRunOptions = {}): Promise<ReviewResult> {\n const input =\n options.input ??\n (await parseInput(options.inputPath ?? process.env.ADVERSARY_INPUT ?? DEFAULT_INPUT_PATH));\n const repository = options.input\n ? input.source.path\n : (process.env.ADVERSARY_REPO ?? input.source.path);\n const result = await this.run({\n input: { ...input, source: { ...input.source, path: repository } },\n model: options.model ?? createModelFromEnvironment(),\n review: options.review,\n includeSuppressed:\n options.includeSuppressed ?? parseBooleanEnv(process.env.ADVERSARY_INCLUDE_SUPPRESSED),\n includeRawObservations: options.includeRawObservations,\n includeTiming: options.includeTiming,\n });\n await writeOutput(\n createAdversaryRunEnvelope(result),\n options.outputPath ?? process.env.ADVERSARY_OUTPUT ?? DEFAULT_OUTPUT_PATH,\n );\n return result;\n }\n}\n\nexport function createAdversaryRunEnvelope(result: ReviewResult): AdversaryRunEnvelope {\n return {\n protocolVersion: ADVERSARY_RUN_PROTOCOL_VERSION,\n result: toWireReviewResult(result),\n };\n}\n\nfunction toWireReviewResult(result: ReviewResult): WireReviewResult {\n return omitUndefined({\n adversary: omitUndefined(result.adversary),\n target: omitUndefined(result.target),\n assessment:\n result.assessment === undefined ? undefined : omitUndefined({ ...result.assessment }),\n positives: result.positives.map(toWireReviewNote),\n observations: result.observations.map(toWireReviewNote),\n findings: result.findings.map(toWireFinding),\n opinion: result.opinion === undefined ? undefined : omitUndefined({ ...result.opinion }),\n suppressed: result.suppressed,\n timing: result.timing === undefined ? undefined : omitUndefined(result.timing),\n suppressedFindings: result.suppressedFindings?.map(toWireFinding),\n rawObservations: result.rawObservations,\n }) as WireReviewResult;\n}\n\nfunction toWireReviewNote(note: ReviewNote): WireReviewNote {\n return omitUndefined({\n key: note.key,\n summary: note.summary,\n evidence: note.evidence?.map(toWireEvidence),\n metadata: note.metadata,\n });\n}\n\nfunction toWireFinding(finding: ReviewFinding): WireReviewFinding {\n return omitUndefined({\n id: finding.id,\n ruleId: finding.ruleId,\n groupKey: finding.groupKey,\n title: finding.title,\n category: finding.category,\n severity: finding.severity,\n confidence: finding.confidence,\n summary: finding.summary,\n whyItMatters: finding.whyItMatters,\n impact: finding.impact,\n evidence: finding.evidence.map(toWireEvidence),\n recommendation: finding.recommendation,\n remediation:\n finding.remediation === undefined ? undefined : omitUndefined({ ...finding.remediation }),\n tags: finding.tags,\n metadata: finding.metadata,\n }) as WireReviewFinding;\n}\n\nfunction toWireEvidence(evidence: Evidence): WireEvidence {\n return omitUndefined({\n file: evidence.location?.file,\n line: evidence.location?.line,\n endLine: evidence.location?.endLine,\n message: evidence.message ?? evidence.label,\n snippet: evidence.snippet,\n metadata: evidence.data,\n });\n}\n\nexport async function parseInput(path = DEFAULT_INPUT_PATH): Promise<RuntimeInput> {\n const raw = await readFile(path, \"utf8\");\n const parsed: unknown = JSON.parse(raw);\n\n if (!isRecord(parsed)) {\n throw new Error(`Invalid input at ${path}: expected an object.`);\n }\n\n if (!isRecord(parsed.source)) {\n throw new Error(`Invalid input at ${path}: source must be an object.`);\n }\n\n if (typeof parsed.source.path !== \"string\" || parsed.source.path.length === 0) {\n throw new Error(`Invalid input at ${path}: source.path must be a non-empty string.`);\n }\n\n if (parsed.change !== undefined && parsed.change !== null) {\n if (!isRecord(parsed.change)) {\n throw new Error(`Invalid input at ${path}: change must be an object or null.`);\n }\n for (const field of [\"type\", \"base_ref\", \"head_ref\", \"scan_mode\"] as const) {\n const value = parsed.change[field];\n if (value !== undefined && typeof value !== \"string\") {\n throw new Error(`Invalid input at ${path}: change.${field} must be a string.`);\n }\n }\n const scanMode = parsed.change.scan_mode;\n if (scanMode !== undefined && scanMode !== \"changed\" && scanMode !== \"all\") {\n throw new Error(`Invalid input at ${path}: change.scan_mode must be \"changed\" or \"all\".`);\n }\n const changedFiles = parsed.change.changed_files;\n if (\n changedFiles !== undefined &&\n (!Array.isArray(changedFiles) || changedFiles.some((item) => typeof item !== \"string\"))\n ) {\n throw new Error(\n `Invalid input at ${path}: change.changed_files must be an array of strings.`,\n );\n }\n }\n\n return parsed as RuntimeInput;\n}\n\nexport async function writeOutput(\n output: AdversaryRunEnvelope,\n path = DEFAULT_OUTPUT_PATH,\n): Promise<void> {\n await validateRunEnvelope(output);\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, `${JSON.stringify(output, null, 2)}\\n`, \"utf8\");\n}\n\nexport async function validateRunEnvelope(output: unknown): Promise<void> {\n let validator = envelopeValidator;\n if (validator === undefined) {\n const schema = JSON.parse(\n await readFile(\n new URL(\"../schemas/adversary.review.v1.schema.json\", import.meta.url),\n \"utf8\",\n ),\n );\n validator = new Ajv2020({ allErrors: true, strict: true }).compile(schema);\n envelopeValidator = validator;\n }\n if (!validator(output)) {\n throw new Error(`Invalid adversary.review.v1 envelope: ${JSON.stringify(validator.errors)}`);\n }\n}\n\nexport function normalizeConfidence(\n confidence: ConfidenceInput,\n thresholds: ConfidenceThresholds = DEFAULT_CONFIDENCE_THRESHOLDS,\n): Confidence {\n if (isConfidence(confidence)) {\n return confidence;\n }\n\n if (\n typeof confidence !== \"number\" ||\n Number.isNaN(confidence) ||\n confidence < 0 ||\n confidence > 1\n ) {\n throw new Error(\"confidence must be low, medium, high, or a number from 0 to 1.\");\n }\n\n if (confidence >= thresholds.high) {\n return Confidence.High;\n }\n\n if (confidence >= thresholds.medium) {\n return Confidence.Medium;\n }\n\n return Confidence.Low;\n}\n\nexport function rankFindings(findings: ReviewFinding[]): ReviewFinding[] {\n return [...findings].sort((left, right) => {\n const scoreComparison = scoreFinding(right) - scoreFinding(left);\n if (scoreComparison !== 0) {\n return scoreComparison;\n }\n\n const severityComparison = severityWeight(right.severity) - severityWeight(left.severity);\n if (severityComparison !== 0) {\n return severityComparison;\n }\n\n const titleComparison = compareStrings(left.title, right.title);\n if (titleComparison !== 0) {\n return titleComparison;\n }\n\n return compareStrings(left.id, right.id);\n });\n}\n\nexport class JsonRenderer implements ReviewRenderer {\n constructor(\n private readonly write: (text: string) => void = (text) => process.stdout.write(text),\n ) {}\n\n render(result: ReviewResult): void {\n this.write(`${JSON.stringify(toWireReviewResult(result), null, 2)}\\n`);\n }\n}\n\n/** Maximum evidence items shown per finding in text mode. JSON keeps the full list. */\nconst TERMINAL_MAX_EVIDENCE = 5;\n\nexport class TerminalRenderer implements ReviewRenderer {\n constructor(\n private readonly write: (text: string) => void = (text) => process.stdout.write(text),\n ) {}\n\n /**\n * Product text report layout (aligned with the adversary CLI renderer):\n * header → assessment → finding index → finding detail → positives →\n * scores → observations → opinion → stats footer.\n */\n render(result: ReviewResult): void {\n const lines: string[] = [];\n lines.push(`Adversary: ${result.adversary.name}`);\n if (result.target.repository !== undefined) {\n lines.push(`Repository: ${shortenRepositoryPath(result.target.repository)}`);\n }\n if (result.target.filesScanned !== undefined) {\n lines.push(`Files scanned: ${result.target.filesScanned}`);\n }\n lines.push(\"\");\n\n if (result.assessment !== undefined) {\n lines.push(\"Overall assessment\", \"\");\n lines.push(`Risk: ${capitalize(result.assessment.risk)}`, \"\");\n if (result.assessment.summary !== undefined) {\n lines.push(normalizeParagraph(result.assessment.summary), \"\");\n }\n }\n\n if (result.findings.length > 0) {\n lines.push(`Findings (${result.findings.length})`, \"\");\n for (const finding of result.findings) {\n const sites = finding.evidence.length;\n lines.push(\n sites > 0\n ? `- [${finding.severity}] ${finding.title} (${evidenceCountLabel(sites)})`\n : `- [${finding.severity}] ${finding.title}`,\n );\n }\n lines.push(\"\");\n }\n\n for (const finding of result.findings) {\n appendTerminalFinding(lines, finding);\n }\n\n // Suppressed details are separate from the active findings index/total.\n // The active count remains result.findings.length; suppressed details and\n // the suppressed footer count are reported explicitly.\n const suppressedFindings = result.suppressedFindings ?? [];\n if (suppressedFindings.length > 0) {\n lines.push(`Suppressed findings (${suppressedFindings.length})`, \"\");\n for (const finding of suppressedFindings) {\n const sites = finding.evidence.length;\n lines.push(\n sites > 0\n ? `- [${finding.severity}] ${finding.title} (${evidenceCountLabel(sites)})`\n : `- [${finding.severity}] ${finding.title}`,\n );\n }\n lines.push(\"\");\n for (const finding of suppressedFindings) {\n appendTerminalFinding(lines, finding, \"suppressed; reason unavailable\");\n }\n }\n\n if (result.positives.length > 0) {\n lines.push(\"Positive signals\", \"\");\n for (const positive of result.positives) {\n lines.push(`- ${normalizeParagraph(positive.summary)}`);\n }\n lines.push(\"\");\n }\n\n const scoreNotes = result.observations.filter(isScoreReviewNote);\n const additionalObservations = reviewObservationsForTerminal(\n result.observations.filter((note) => !isScoreReviewNote(note)),\n );\n\n if (scoreNotes.length > 0) {\n lines.push(\"Scores\", \"\");\n for (const note of scoreNotes) {\n lines.push(note.summary);\n }\n lines.push(\"\");\n }\n\n if (additionalObservations.length > 0) {\n lines.push(\"Observations\", \"\");\n for (const observation of additionalObservations) {\n lines.push(`- ${normalizeParagraph(observation.summary)}`);\n }\n lines.push(\"\");\n }\n\n if (result.opinion !== undefined) {\n lines.push(\"Overall opinion\", \"\", normalizeParagraph(result.opinion.summary), \"\");\n }\n\n // Active findings only in the primary total; suppressed counts are separate.\n lines.push(`Findings: ${result.findings.length}`);\n if (result.suppressed.observations > 0) {\n lines.push(`Suppressed observations: ${result.suppressed.observations}`);\n }\n const suppressedFindingCount = Math.max(result.suppressed.findings, suppressedFindings.length);\n if (suppressedFindingCount > 0) {\n lines.push(`Suppressed findings: ${suppressedFindingCount}`);\n }\n\n this.write(`${lines.join(\"\\n\").trimEnd()}\\n`);\n }\n}\n\nfunction appendTerminalFinding(lines: string[], finding: ReviewFinding, qualifier?: string): void {\n const label = qualifier === undefined ? finding.severity : `${finding.severity}; ${qualifier}`;\n lines.push(`[${label}] ${finding.title}`);\n const firstEvidence = finding.evidence.find((item) => item.location?.file !== undefined);\n if (firstEvidence?.location?.file !== undefined) {\n lines.push(formatEvidenceLocation(firstEvidence));\n }\n lines.push(\"\");\n lines.push(`Category: ${finding.category}`);\n lines.push(`Confidence: ${finding.confidence}`, \"\");\n lines.push(\"Summary\", \"\", finding.summary, \"\");\n\n if (finding.whyItMatters !== undefined) {\n lines.push(\"Why it matters\", \"\", finding.whyItMatters, \"\");\n }\n\n if (finding.impact !== undefined) {\n lines.push(\"Impact\", \"\", finding.impact, \"\");\n }\n\n if (finding.evidence.length > 0) {\n lines.push(\"Evidence\", \"\");\n const shown = finding.evidence.slice(0, TERMINAL_MAX_EVIDENCE);\n const remaining = finding.evidence.length - shown.length;\n for (const evidence of shown) {\n lines.push(...formatEvidenceLines(evidence));\n }\n if (remaining > 0) {\n lines.push(`- … and ${remaining} more`);\n }\n lines.push(\"\");\n }\n\n if (finding.recommendation !== undefined) {\n lines.push(\"Recommendation\", \"\", normalizeParagraph(finding.recommendation), \"\");\n }\n}\n\nfunction reviewObservationsForTerminal(notes: ReviewNote[]): ReviewNote[] {\n return notes.filter((note) => !isContextObservation(note));\n}\n\nfunction isContextObservation(note: ReviewNote): boolean {\n // Prefer explicit markers only. Free-text heuristics like \"Prepared … file\"\n // drop legitimate review notes (e.g. \"Prepared migration file has syntax errors\").\n const key = note.key.trim().toLowerCase();\n if (key.endsWith(\".analysis\") || key === \"analysis\") {\n return true;\n }\n const role = note.metadata?.role;\n return typeof role === \"string\" && role.toLowerCase() === \"context\";\n}\n\nfunction shortenRepositoryPath(path: string): string {\n const trimmed = path.trim();\n if (trimmed.length === 0) {\n return trimmed;\n }\n const normalized = trimmed.replaceAll(\"\\\\\", \"/\");\n const segments = normalized.split(\"/\").filter((part) => part.length > 0);\n if (segments.length <= 2) {\n return trimmed;\n }\n return `${segments[segments.length - 2]}/${segments[segments.length - 1]}`;\n}\n\nfunction evidenceCountLabel(n: number): string {\n return n === 1 ? \"1 site\" : `${n} sites`;\n}\n\nexport function normalizeChangeContext(\n change: RuntimeChange | null | undefined,\n): ChangeContext | null {\n if (change === undefined || change === null) {\n return null;\n }\n const scanMode = change.scan_mode ?? \"changed\";\n if (scanMode !== \"changed\" && scanMode !== \"all\") {\n throw new Error(`Unsupported change scan_mode \"${change.scan_mode}\".`);\n }\n return Object.freeze({\n ...(change.type === undefined ? {} : { type: change.type }),\n ...(change.base_ref === undefined ? {} : { baseRef: change.base_ref }),\n ...(change.head_ref === undefined ? {} : { headRef: change.head_ref }),\n scanMode,\n changedFiles: Object.freeze([...(change.changed_files ?? [])]),\n worktree: change.head_ref === WORKTREE_HEAD_REF,\n });\n}\n\nfunction createRuleContext(\n repoPath: string,\n change: ChangeContext | null,\n summary: Summary,\n cache: Map<string, unknown>,\n collector: ReviewCollector,\n registry: RuleRegistry,\n model: ReviewModel,\n): RuleContext {\n const absoluteRepoPath = resolve(repoPath);\n\n return {\n repoPath: absoluteRepoPath,\n change,\n summary,\n cache,\n model,\n relpath(path: string): string {\n return relative(absoluteRepoPath, isAbsolute(path) ? path : resolve(absoluteRepoPath, path));\n },\n glob(pattern: string): Promise<string[]> {\n return findMatchingPaths(absoluteRepoPath, pattern, false);\n },\n rglob(pattern: string): Promise<string[]> {\n return findMatchingPaths(absoluteRepoPath, pattern, true);\n },\n observe(observation: ObservationInit): void {\n assertObservationInit(observation, \"ctx.observe\", registry);\n collector.observations.push(observation);\n },\n finding(finding: FindingInput): void {\n assertFindingInput(finding, \"ctx.finding\");\n collector.findings.push({\n finding: normalizeFindingInput(finding, collector.findings.length),\n deduplicate: finding.deduplicate !== false,\n });\n },\n review: {\n assessment(assessment: ReviewAssessment): void {\n assertAssessment(assessment);\n collector.assessment = assessment;\n },\n positive(note: ReviewNoteInput): void {\n assertReviewNote(note, \"ctx.review.positive\");\n collector.positives.push(normalizeReviewNote(note));\n },\n observe(note: ReviewNoteInput): void {\n assertReviewNote(note, \"ctx.review.observe\");\n collector.reviewObservations.push(normalizeReviewNote(note));\n },\n score(score: ReviewScore): void {\n assertReviewScore(score);\n collector.scores.push(score);\n },\n opinion(opinion: ReviewOpinion): void {\n assertOpinion(opinion);\n collector.opinion = opinion;\n },\n },\n };\n}\n\nasync function findMatchingPaths(\n repoPath: string,\n pattern: string,\n recursive: boolean,\n): Promise<string[]> {\n const matcher = globPatternToRegExp(pattern);\n const paths = recursive ? await walk(repoPath) : await listFiles(repoPath);\n\n return paths\n .map((path) => relative(repoPath, path))\n .filter((path) => {\n const posixPath = toPosixPath(path);\n const candidate = recursive && !pattern.includes(\"/\") ? basename(posixPath) : posixPath;\n return matcher.test(candidate);\n })\n .sort(compareStrings);\n}\n\nasync function listFiles(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n return entries.filter((entry) => entry.isFile()).map((entry) => resolve(directory, entry.name));\n}\n\nasync function walk(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const paths: string[] = [];\n\n for (const entry of entries) {\n const path = resolve(directory, entry.name);\n\n if (entry.isDirectory()) {\n paths.push(...(await walk(path)));\n } else if (entry.isFile()) {\n paths.push(path);\n }\n }\n\n return paths;\n}\n\nfunction globPatternToRegExp(pattern: string): RegExp {\n const source = toPosixPath(pattern)\n .replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\n .replace(/\\*\\*/g, \"\\0\")\n .replace(/\\*/g, \"[^/]*\")\n .replace(/\\?/g, \"[^/]\")\n .replace(/\\0/g, \".*\");\n\n return new RegExp(`^${source}$`);\n}\n\ninterface ReviewCollector {\n observations: ObservationInit[];\n findings: CollectedFinding[];\n assessment?: ReviewAssessment;\n positives: ReviewNote[];\n reviewObservations: ReviewNote[];\n scores: ReviewScore[];\n opinion?: ReviewOpinion;\n}\n\ninterface CollectedFinding {\n finding: ReviewFinding;\n deduplicate: boolean;\n}\n\nfunction createReviewCollector(): ReviewCollector {\n return {\n observations: [],\n findings: [],\n positives: [],\n reviewObservations: [],\n scores: [],\n };\n}\n\nfunction buildReviewResult(input: {\n adversary: ReviewResult[\"adversary\"];\n repository: string;\n filesScanned?: number;\n collector: ReviewCollector;\n policy: ReviewPolicy;\n registry: RuleRegistry;\n change?: ChangeContext | null;\n includeSuppressed?: boolean;\n includeRawObservations?: boolean;\n timing?: ReviewResult[\"timing\"];\n}): ReviewResult {\n const thresholds = input.policy.confidenceThresholds ?? DEFAULT_CONFIDENCE_THRESHOLDS;\n const synthesis = synthesizeObservationFindings(\n input.collector.observations,\n thresholds,\n input.registry,\n );\n const allFindings = deduplicateFindings([\n ...synthesis.findings.map((finding) => ({ finding, deduplicate: true })),\n ...input.collector.findings,\n ]).map((finding) => calibrateFindingSeverity(finding, input.policy));\n const ranked = rankFindings(allFindings);\n const minimumConfidence = input.policy.minimumConfidence ?? Confidence.Medium;\n const includeInformational = input.policy.includeInformational ?? false;\n const maximumFindings = input.policy.maximumFindings ?? Number.POSITIVE_INFINITY;\n const eligible: ReviewFinding[] = [];\n const suppressedFindings: ReviewFinding[] = [];\n\n for (const finding of ranked) {\n const suppressed =\n confidenceWeight(finding.confidence) < confidenceWeight(minimumConfidence) ||\n (!includeInformational && finding.severity === Severity.Info) ||\n eligible.length >= maximumFindings;\n\n if (suppressed) {\n suppressedFindings.push(finding);\n } else {\n eligible.push(finding);\n }\n }\n\n const positives = selectPositiveSignals(input.collector.positives);\n const reviewObservations = deduplicateReviewObservations(\n [\n ...input.collector.reviewObservations,\n ...deduplicateScores(input.collector.scores).map(scoreToReviewNote),\n ],\n positives,\n );\n\n return omitUndefined({\n adversary: input.adversary,\n target: omitUndefined({\n repository: input.repository,\n filesScanned: input.filesScanned,\n }),\n assessment: input.collector.assessment ?? synthesizeAssessment(eligible, positives),\n positives,\n observations: reviewObservations,\n findings: eligible,\n opinion: input.collector.opinion ?? synthesizeOpinion(eligible, input.change ?? null),\n suppressed: {\n observations: synthesis.suppressedObservations,\n findings: suppressedFindings.length,\n },\n timing: input.timing,\n suppressedFindings: input.includeSuppressed ? suppressedFindings : undefined,\n rawObservations: input.includeRawObservations ? input.collector.observations : undefined,\n }) as ReviewResult;\n}\n\ninterface ObservationSynthesisResult {\n findings: ReviewFinding[];\n suppressedObservations: number;\n}\n\nfunction synthesizeObservationFindings(\n observations: ObservationInit[],\n thresholds: ConfidenceThresholds,\n registry: RuleRegistry,\n): ObservationSynthesisResult {\n const grouped = new Map<string, ObservationInit[]>();\n const seen = new Set<string>();\n let suppressedObservations = 0;\n\n for (const observation of observations) {\n const rule = registry.lookup(observation.ruleId);\n const groupKey = observation.groupKey ?? defaultObservationGroupKey(observation, rule);\n const dedupeKey = stableStringify({ groupKey, observation });\n if (observation.deduplicate !== false && seen.has(dedupeKey)) {\n suppressedObservations += 1;\n continue;\n }\n seen.add(dedupeKey);\n grouped.set(groupKey, [...(grouped.get(groupKey) ?? []), observation]);\n }\n\n const findings = [...grouped.entries()].map(([groupKey, group]) => {\n const first = group[0];\n if (first === undefined) {\n throw new Error(\"Cannot synthesize finding from an empty observation group.\");\n }\n\n const rule = registry.lookup(first.ruleId);\n const synthesis = rule?.aggregate?.(group) ?? {};\n const synthesisSource = rule?.aggregate === undefined ? \"generic\" : \"rule\";\n log.debug(\n `review synthesis ruleId=${first.ruleId} groupKey=${groupKey} observations=${group.length} selected=${synthesisSource} fallback=${synthesisSource === \"generic\"}`,\n );\n\n const evidence = deduplicateEvidence(synthesis.evidence ?? group.map(observationToEvidence));\n const recommendation =\n synthesis.recommendation === undefined\n ? synthesizeRecommendation(group)\n : normalizeParagraph(synthesis.recommendation);\n const confidence = aggregateConfidence(\n group.map((observation) =>\n normalizeConfidence(\n observation.confidence ?? rule?.defaultConfidence ?? Confidence.Medium,\n thresholds,\n ),\n ),\n first.confidenceAggregation ?? \"maximum\",\n );\n const severity = aggregateSeverity(\n group.map((observation) => observation.severity ?? rule?.defaultSeverity ?? Severity.Info),\n first.severityAggregation ?? \"highest\",\n );\n\n const finding: ReviewFinding = {\n id: synthesis.id ?? stableId(`${first.ruleId}:${groupKey}`),\n ruleId: synthesis.ruleId ?? first.ruleId,\n groupKey: synthesis.groupKey ?? groupKey,\n title:\n synthesis.title ??\n synthesizeObservationTitle(first.title, group.length, first.groupedTitle),\n category: synthesis.category ?? first.category ?? rule?.category ?? \"general\",\n severity: synthesis.severity ?? severity,\n confidence:\n synthesis.confidence ??\n (rule?.defaultConfidence === undefined\n ? confidence\n : normalizeConfidence(rule.defaultConfidence, thresholds)),\n summary: synthesis.summary ?? summarizeObservationGroup(group),\n whyItMatters: synthesis.whyItMatters ?? first.whyItMatters,\n impact: synthesis.impact ?? first.impact,\n evidence,\n recommendation: recommendation.length > 0 ? recommendation : undefined,\n remediation: synthesis.remediation ?? first.remediation,\n tags: synthesis.tags ?? uniqueStrings(group.flatMap((observation) => observation.tags ?? [])),\n metadata: synthesis.metadata ?? first.metadata,\n };\n assertFindingInput(finding, `adversary aggregate rule \"${first.ruleId}\"`);\n return finding;\n });\n return { findings, suppressedObservations };\n}\n\nfunction normalizeFindingInput(input: FindingInput, occurrence = 0): ReviewFinding {\n return omitUndefined({\n id:\n input.id ??\n stableId(\n `${input.ruleId ?? input.title}:${input.groupKey ?? input.category}${\n input.deduplicate === false ? `:${occurrence}` : \"\"\n }`,\n ),\n ruleId: input.ruleId,\n groupKey: input.groupKey,\n title: input.title,\n category: input.category,\n severity: input.severity,\n confidence: normalizeConfidence(input.confidence),\n summary: input.summary,\n whyItMatters: input.whyItMatters,\n impact: input.impact,\n evidence: deduplicateEvidence(input.evidence),\n recommendation:\n input.recommendation === undefined ? undefined : normalizeParagraph(input.recommendation),\n remediation: input.remediation,\n tags: input.tags === undefined ? undefined : uniqueStrings(input.tags),\n metadata: input.metadata,\n }) as ReviewFinding;\n}\n\nfunction deduplicateFindings(findings: CollectedFinding[]): ReviewFinding[] {\n const seen = new Set<string>();\n const result: ReviewFinding[] = [];\n\n for (const collected of findings) {\n const { finding } = collected;\n if (!collected.deduplicate) {\n result.push({ ...finding, evidence: deduplicateEvidence(finding.evidence) });\n continue;\n }\n const key = finding.groupKey ?? finding.id;\n if (seen.has(key)) {\n const existing = result.find((item) => (item.groupKey ?? item.id) === key);\n if (existing !== undefined) {\n existing.evidence = deduplicateEvidence([...existing.evidence, ...finding.evidence]);\n existing.tags = uniqueStrings([...(existing.tags ?? []), ...(finding.tags ?? [])]);\n }\n continue;\n }\n seen.add(key);\n result.push({ ...finding, evidence: deduplicateEvidence(finding.evidence) });\n }\n\n return result;\n}\n\nfunction deduplicateEvidence(evidence: ReadonlyArray<EvidenceInput | Evidence>): Evidence[] {\n const seen = new Set<string>();\n const result: Evidence[] = [];\n\n for (const item of evidence) {\n const normalized = normalizeEvidence(item);\n const key = stableStringify(normalized);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(normalized);\n }\n }\n\n return result.sort((left, right) => {\n const fileComparison = compareStrings(left.location?.file ?? \"\", right.location?.file ?? \"\");\n if (fileComparison !== 0) {\n return fileComparison;\n }\n const lineComparison = compareNumbers(left.location?.line, right.location?.line);\n if (lineComparison !== 0) {\n return lineComparison;\n }\n return compareStrings(left.message ?? \"\", right.message ?? \"\");\n });\n}\n\nfunction normalizeEvidence(input: EvidenceInput | Evidence): Evidence {\n const legacy = input as EvidenceInput;\n const hasLocation =\n legacy.location !== undefined ||\n legacy.file !== undefined ||\n legacy.line !== undefined ||\n legacy.endLine !== undefined;\n const location = hasLocation\n ? omitUndefined({\n file: legacy.location?.file ?? legacy.file,\n line: legacy.location?.line ?? legacy.line,\n endLine: legacy.location?.endLine ?? legacy.endLine,\n })\n : undefined;\n return omitUndefined({\n location,\n label: input.label,\n message: input.message,\n snippet: input.snippet,\n data: input.data ?? legacy.metadata,\n });\n}\n\nfunction normalizeReviewNote(note: ReviewNoteInput): ReviewNote {\n return omitUndefined({\n ...note,\n evidence: note.evidence === undefined ? undefined : deduplicateEvidence(note.evidence),\n }) as ReviewNote;\n}\n\nfunction deduplicateNotes(notes: ReviewNote[]): ReviewNote[] {\n const seen = new Set<string>();\n const result: ReviewNote[] = [];\n\n for (const note of notes) {\n const normalized = {\n ...note,\n evidence: note.evidence === undefined ? undefined : deduplicateEvidence(note.evidence),\n };\n const key = note.key;\n if (!seen.has(key)) {\n seen.add(key);\n result.push(normalized);\n }\n }\n\n return result.sort((left, right) => compareStrings(left.key, right.key));\n}\n\nfunction selectPositiveSignals(notes: ReviewNote[]): ReviewNote[] {\n const selected: ReviewNote[] = [];\n const seen = new Set<string>();\n\n // Registration order expresses the review author's priority. Two strong signals\n // provide useful context without diluting the findings.\n for (const note of notes) {\n if (!seen.has(note.key)) {\n seen.add(note.key);\n selected.push(note);\n }\n if (selected.length === 2) {\n break;\n }\n }\n\n return deduplicateNotes(selected);\n}\n\nfunction deduplicateReviewObservations(\n observations: ReviewNote[],\n positives: ReviewNote[],\n): ReviewNote[] {\n const deduped = deduplicateNotes(observations);\n\n return deduped.filter((item) => {\n return !positives.some((positive) => notesDescribeSameFact(positive, item));\n });\n}\n\nfunction notesDescribeSameFact(positive: ReviewNote, observation: ReviewNote): boolean {\n if (positive.key === observation.key) {\n return true;\n }\n\n const positiveText = normalizeSemanticText(`${positive.key} ${positive.summary}`);\n const observationText = normalizeSemanticText(`${observation.key} ${observation.summary}`);\n return positiveText.length > 0 && positiveText === observationText;\n}\n\nfunction synthesizeAssessment(\n findings: ReviewFinding[],\n positives: ReviewNote[] = [],\n): ReviewAssessment {\n const strength = assessmentStrength(positives[0]);\n\n if (findings.length === 0) {\n return {\n risk: \"none\",\n summary: joinSentences(\n strength,\n \"No material concerns were identified in the reviewed repository.\",\n ),\n };\n }\n\n const risk = highestRisk(findings);\n const primary = findings[0];\n const primaryConcern =\n primary === undefined ? \"the highest-ranked finding\" : assessmentConcern(primary);\n\n if (findings.length === 1) {\n return {\n risk,\n summary: joinSentences(\n strength,\n `The only material concern identified is ${primaryConcern}.`,\n ),\n };\n }\n\n return {\n risk,\n summary: joinSentences(\n strength,\n `${numberWord(findings.length)} material concerns were identified. The highest-value improvement is ${primaryConcern}.`,\n ),\n };\n}\n\nfunction assessmentStrength(positive: ReviewNote | undefined): string | undefined {\n if (positive === undefined) {\n return undefined;\n }\n\n const summary = normalizeParagraph(positive.summary);\n if (/^uses\\b/i.test(summary)) {\n return `The repository ${lowercaseFirst(summary)}`;\n }\n return summary;\n}\n\nfunction assessmentConcern(finding: ReviewFinding): string {\n const summary = normalizeParagraph(finding.summary).split(/(?<=[.!?])\\s+/, 1)[0];\n return concernClause(\n lowercaseFirst(trimTrailingSentencePunctuation(summary ?? findingConcern(finding))),\n );\n}\n\nfunction concernClause(concern: string): string {\n // Finite verbs with a following complement/object. Requiring a trailing token\n // keeps noun phrases such as \"memory leaks\", \"stale reads\", and \"concurrent\n // writes\" from being rewritten as broken \"that the …\" clauses.\n const isClause =\n /\\b(?:allows|are|binds|blocks|builds|bypasses|calls|can|closes|contains|copies|could|creates|detaches|did|discards|do|does|exits|exposes|fails|forks|has|have|ignores|includes|installs|is|kills|lacks|leaks|leaves|logs|maps|may|might|must|opens|panics|prints|reads|references|relies|replaces|requires|returns|runs|skips|spawns|starts|terminates|throws|uses|was|were|writes)\\b\\s+\\S+/i.test(\n concern,\n );\n if (!isClause) {\n return concern;\n }\n\n const hasDeterminer = /^(?:a|an|any|each|its|no|one|some|the|their|these|this|those)\\b/i.test(\n concern,\n );\n return `that ${hasDeterminer ? concern : `the ${concern}`}`;\n}\n\nfunction joinSentences(...sentences: Array<string | undefined>): string {\n return sentences.filter(isNonEmptyString).join(\" \");\n}\n\n/**\n * Resolve the decision posture from the runner-provided change scope.\n * Adversaries should prefer this (or `formatOpinion`) over hardcoding merge language.\n */\nexport function resolveReviewPosture(change: ChangeContext | null | undefined): ReviewPosture {\n if (change === null || change === undefined || change.scanMode === \"all\") {\n return \"repository\";\n }\n if (change.worktree) {\n return \"worktree\";\n }\n return \"change\";\n}\n\n/**\n * Normalize a concern for use after \"address …\". Noun phrases pass through;\n * full clauses become \"that …\" so rule titles remain grammatical.\n */\nexport function normalizeOpinionConcern(concern: string): string {\n const normalized = lowercaseFirst(trimTrailingSentencePunctuation(normalizeParagraph(concern)));\n if (!isNonEmptyString(normalized)) {\n throw new Error(\"opinion concern must be a non-empty string.\");\n }\n return concernClause(normalized);\n}\n\n/**\n * Build a posture-aware review opinion from a ship decision and optional concern.\n *\n * Domain adversaries should pass judgment (ship + concern phrase) and let the SDK\n * choose merge/commit/shipping language from the runner-resolved change scope.\n *\n * @example\n * ```ts\n * ctx.review.opinion(\n * formatOpinion({\n * ship: false,\n * concern: \"direct process termination below the application boundary\",\n * change: ctx.change,\n * }),\n * );\n * ```\n */\nexport function formatOpinion(options: FormatOpinionOptions): ReviewOpinion {\n if (typeof options.ship !== \"boolean\") {\n throw new Error(\"formatOpinion requires a boolean ship decision.\");\n }\n\n const posture =\n options.posture === undefined\n ? resolveReviewPosture(options.change ?? null)\n : parseReviewPosture(options.posture, \"formatOpinion posture\");\n const deadline = opinionDeadline(posture);\n const remainingCount = options.remainingCount ?? 0;\n\n if (remainingCount > 1) {\n return {\n ship: options.ship,\n summary: `I would address the remaining findings ${deadline}.`,\n };\n }\n\n const concern =\n options.concern === undefined || options.concern.trim() === \"\"\n ? undefined\n : normalizeOpinionConcern(options.concern);\n\n if (options.ship) {\n if (concern === undefined) {\n return { ship: true, summary: opinionApproveAsIs(posture) };\n }\n return {\n ship: true,\n summary: opinionApproveWithFollowUp(posture, concern),\n };\n }\n\n if (concern === undefined) {\n return {\n ship: false,\n summary: `I would address the remaining findings ${deadline}.`,\n };\n }\n\n return {\n ship: false,\n summary: `I would address ${concern} ${deadline}.`,\n };\n}\n\nfunction parseReviewPosture(value: unknown, label: string): ReviewPosture {\n if (value === \"repository\" || value === \"change\" || value === \"worktree\") {\n return value;\n }\n throw new Error(`${label} must be one of repository, change, or worktree.`);\n}\n\nfunction opinionDeadline(posture: ReviewPosture): string {\n switch (posture) {\n case \"worktree\":\n return \"before committing\";\n case \"change\":\n return \"before merging\";\n case \"repository\":\n return \"before shipping\";\n default: {\n const _exhaustive: never = posture;\n throw new Error(`unsupported review posture: ${String(_exhaustive)}`);\n }\n }\n}\n\nfunction opinionApproveAsIs(posture: ReviewPosture): string {\n switch (posture) {\n case \"worktree\":\n return \"I would land these local changes as-is.\";\n case \"change\":\n return \"I would merge this change as-is.\";\n case \"repository\":\n return \"I would ship this as-is.\";\n default: {\n const _exhaustive: never = posture;\n throw new Error(`unsupported review posture: ${String(_exhaustive)}`);\n }\n }\n}\n\nfunction opinionApproveWithFollowUp(posture: ReviewPosture, concern: string): string {\n switch (posture) {\n case \"worktree\":\n return `I would land these local changes and address ${concern} as follow-up hardening.`;\n case \"change\":\n return `I would merge this change and address ${concern} as follow-up hardening.`;\n case \"repository\":\n return `I would ship this as-is. Addressing ${concern} is the only improvement I would recommend before shipping.`;\n default: {\n const _exhaustive: never = posture;\n throw new Error(`unsupported review posture: ${String(_exhaustive)}`);\n }\n }\n}\n\nfunction synthesizeOpinion(\n findings: ReviewFinding[],\n change: ChangeContext | null,\n): ReviewOpinion | undefined {\n const posture = resolveReviewPosture(change);\n const deadline = opinionDeadline(posture);\n\n if (findings.length === 0) {\n return formatOpinion({ ship: true, posture });\n }\n\n const highestSeverity = highestFindingSeverity(findings);\n const ship = severityWeight(highestSeverity) < severityWeight(Severity.High);\n\n if (findings.length > 1) {\n return formatOpinion({ ship, remainingCount: findings.length, posture });\n }\n\n const finding = findings[0];\n const improvement = finding === undefined ? \"Addressing the finding\" : improvementPhrase(finding);\n return {\n ship,\n summary: ship\n ? `${opinionApproveAsIs(posture)} ${improvement} is the only improvement I would recommend ${deadline}.`\n : `${improvement} is the most important improvement to address ${deadline}.`,\n };\n}\n\nfunction deduplicateScores(scores: ReviewScore[]): ReviewScore[] {\n const seen = new Set<string>();\n const result: ReviewScore[] = [];\n\n for (const score of scores) {\n if (!seen.has(score.key)) {\n seen.add(score.key);\n result.push(score);\n }\n }\n\n return result.sort((left, right) => compareStrings(left.key, right.key));\n}\n\nfunction scoreToReviewNote(score: ReviewScore): ReviewNote {\n return {\n key: `score.${score.key}`,\n summary: formatScore(score),\n metadata: {\n kind: \"score\",\n score: omitUndefined({\n key: score.key,\n label: score.label,\n score: score.score,\n max: score.max,\n summary: score.summary,\n }),\n },\n };\n}\n\nfunction isScoreReviewNote(note: ReviewNote): boolean {\n return note.metadata?.kind === \"score\" && isRecord(note.metadata.score);\n}\n\nfunction observationToEvidence(observation: ObservationInit): Evidence {\n const data = isRecord(observation.evidence)\n ? observation.evidence\n : observation.evidence === undefined\n ? undefined\n : { evidence: observation.evidence };\n const message = isRecord(observation.evidence)\n ? structuredEvidenceMessage(observation.evidence)\n : stringFromUnknown(observation.evidence);\n const snippet = isRecord(observation.evidence)\n ? (stringFromUnknown(observation.evidence.snippet) ??\n stringFromUnknown(observation.evidence.instruction))\n : observation.location?.snippet;\n\n return omitUndefined({\n location: normalizeEvidence(observation.location ?? {}).location,\n label: observation.location?.label ?? message,\n message: observation.location?.message ?? message,\n snippet,\n data,\n });\n}\n\nfunction structuredEvidenceMessage(evidence: Record<string, unknown>): string | undefined {\n const explicitMessage = stringFromUnknown(evidence.message);\n if (explicitMessage !== undefined) {\n return explicitMessage;\n }\n\n const label = stringFromUnknown(evidence.label) ?? stringFromUnknown(evidence.name);\n if (label !== undefined) {\n return label;\n }\n\n return stringFromUnknown(evidence.summary) ?? stringFromUnknown(evidence.instruction);\n}\n\nfunction synthesizeObservationTitle(\n title: ObservationTitle,\n count: number,\n groupedTitle: string | undefined,\n): string {\n if (typeof title === \"string\") {\n return count > 1 && groupedTitle !== undefined ? groupedTitle : title;\n }\n return count > 1 ? title.plural : title.singular;\n}\n\nfunction summarizeObservationGroup(group: ObservationInit[]): string {\n const first = group[0];\n if (first === undefined) {\n throw new Error(\"Cannot summarize an empty observation group.\");\n }\n\n if (first.summary !== undefined) {\n if (typeof first.summary === \"string\") {\n return normalizeParagraph(renderObservationTemplate(first.summary, group));\n }\n const template = group.length > 1 ? first.summary.grouped : first.summary.singular;\n if (template !== undefined) {\n return normalizeParagraph(renderObservationTemplate(template, group));\n }\n }\n\n const recommendation =\n typeof first.recommendation === \"string\" ? undefined : first.recommendation?.summary;\n if (group.length === 1) {\n return recommendation ?? synthesizeObservationTitle(first.title, 1, first.groupedTitle);\n }\n return `${group.length} related observations were reported for ${first.subject}.`;\n}\n\nfunction synthesizeRecommendation(group: ObservationInit[]): string {\n const recommendations = uniqueStrings(\n group.flatMap((observation) => {\n if (typeof observation.recommendation === \"string\") {\n return [observation.recommendation];\n }\n if (observation.recommendation !== undefined) {\n return [\n joinRecommendation(\n observation.recommendation.summary,\n observation.recommendation.details,\n ),\n ];\n }\n return [];\n }),\n );\n\n return recommendations.map(normalizeParagraph).join(\"\\n\\n\");\n}\n\nfunction joinRecommendation(summary: string, details: string | undefined): string {\n if (!isNonEmptyString(details)) {\n return summary;\n }\n\n const compactSummary = trimTrailingSentencePunctuation(summary);\n const compactDetails = trimTrailingSentencePunctuation(details);\n\n if (/^use\\s+/i.test(compactDetails)) {\n return `${compactSummary} and ${lowercaseFirst(compactDetails)}.`;\n }\n\n return `${compactSummary}. ${compactDetails}.`;\n}\n\nfunction defaultObservationGroupKey(\n observation: ObservationInit,\n rule: RuleDefinition | undefined,\n): string {\n const groupBy = observation.groupBy ?? rule?.groupBy;\n if (groupBy !== undefined && groupBy.length > 0) {\n return groupBy\n .map((field) => `${field}:${stringFromUnknown(observationValue(observation, field)) ?? \"\"}`)\n .join(\"|\");\n }\n return `${observation.ruleId}:${observation.subject}:${observation.category ?? rule?.category ?? \"general\"}`;\n}\n\nfunction renderObservationTemplate(template: string, group: ObservationInit[]): string {\n const values = observationTemplateValues(group);\n return template.replace(/\\{([a-zA-Z][a-zA-Z0-9_]*)\\}/g, (match, key: string) => {\n return values[key] ?? match;\n });\n}\n\nfunction observationTemplateValues(group: ObservationInit[]): Record<string, string> {\n const first = group[0];\n const subjects = uniqueStrings(group.map((observation) => observation.subject));\n const locations = uniqueStrings(group.map(formatObservationLocation).filter(isNonEmptyString));\n\n return omitUndefined({\n count: numberWord(group.length),\n location: locations[0],\n locations: joinHumanList(locations),\n subject: first?.subject,\n subjects: joinHumanList(subjects),\n });\n}\n\nfunction observationValue(observation: ObservationInit, field: string): unknown {\n if (field.includes(\".\")) {\n return field.split(\".\").reduce<unknown>((value, part) => {\n return isRecord(value) ? value[part] : undefined;\n }, observation);\n }\n return (observation as unknown as Record<string, unknown>)[field];\n}\n\nfunction formatObservationLocation(observation: ObservationInit): string | undefined {\n if (observation.location?.file === undefined) {\n return undefined;\n }\n if (observation.location.line === undefined) {\n return observation.location.file;\n }\n return `${observation.location.file}:${observation.location.line}`;\n}\n\nfunction joinHumanList(values: string[]): string {\n if (values.length <= 2) {\n return values.join(\" and \");\n }\n return `${values.slice(0, -1).join(\", \")}, and ${values.at(-1)}`;\n}\n\nfunction highestRisk(findings: ReviewFinding[]): ReviewAssessment[\"risk\"] {\n const severity = highestFindingSeverity(findings);\n if (severity === Severity.Info) {\n return \"none\";\n }\n return severity;\n}\n\nfunction highestFindingSeverity(findings: ReviewFinding[]): Severity {\n return aggregateSeverity(\n findings.map((finding) => finding.severity),\n \"highest\",\n );\n}\n\nfunction findingConcern(finding: ReviewFinding): string {\n return lowercaseFirst(trimTrailingSentencePunctuation(finding.title));\n}\n\nfunction improvementPhrase(finding: ReviewFinding): string {\n const recommendation = recommendationSubject(finding.recommendation);\n if (recommendation !== undefined) {\n return recommendation;\n }\n\n return `Addressing ${findingConcern(finding)}`;\n}\n\nfunction recommendationSubject(recommendation: string | undefined): string | undefined {\n if (recommendation === undefined) {\n return undefined;\n }\n\n const normalized = trimTrailingSentencePunctuation(normalizeParagraph(recommendation));\n const firstClause = normalized.split(/\\s+(?:and|when|where|with)\\s+/i)[0]?.trim();\n if (!isNonEmptyString(firstClause)) {\n return undefined;\n }\n\n return gerundPhrase(firstClause);\n}\n\nfunction gerundPhrase(phrase: string): string {\n const words = phrase.split(/\\s+/);\n const first = words[0];\n if (first === undefined) {\n return phrase;\n }\n\n return capitalize([toGerund(first), ...words.slice(1)].join(\" \"));\n}\n\nfunction toGerund(verb: string): string {\n const lower = verb.toLowerCase();\n const irregular: Record<string, string> = {\n pin: \"pinning\",\n run: \"running\",\n use: \"using\",\n };\n const known = irregular[lower];\n if (known !== undefined) {\n return known;\n }\n if (lower.endsWith(\"e\") && !lower.endsWith(\"ee\")) {\n return `${lower.slice(0, -1)}ing`;\n }\n return `${lower}ing`;\n}\n\nfunction normalizeSemanticText(value: string): string {\n return value\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \" \")\n .split(/\\s+/)\n .filter((word) => word.length > 0 && !semanticStopWords.has(word))\n .join(\" \");\n}\n\nfunction trimTrailingWord(value: string | undefined, word: string): string | undefined {\n if (value === undefined) {\n return undefined;\n }\n const pattern = new RegExp(`\\\\s+${word}$`, \"i\");\n const trimmed = value.replace(pattern, \"\").trim();\n return trimmed.length > 0 ? trimmed : value;\n}\n\nfunction numberWord(value: number): string {\n return (\n {\n 1: \"One\",\n 2: \"Two\",\n 3: \"Three\",\n 4: \"Four\",\n 5: \"Five\",\n 6: \"Six\",\n 7: \"Seven\",\n 8: \"Eight\",\n 9: \"Nine\",\n 10: \"Ten\",\n }[value] ?? String(value)\n );\n}\n\nfunction calibrateFindingSeverity(finding: ReviewFinding, policy: ReviewPolicy): ReviewFinding {\n const override =\n policy.severityOverrides?.[finding.ruleId ?? \"\"] ??\n policy.severityOverrides?.[finding.groupKey ?? \"\"];\n\n return override === undefined ? finding : { ...finding, severity: override };\n}\n\nfunction scoreFinding(finding: ReviewFinding): number {\n const locationScore = Math.min(finding.evidence.length, 5) * 3;\n const remediationScore = finding.remediation?.complexity === \"trivial\" ? 3 : 0;\n return (\n severityWeight(finding.severity) * 10 +\n confidenceWeight(finding.confidence) * 12 +\n locationScore +\n remediationScore\n );\n}\n\nfunction severityWeight(severity: Severity): number {\n switch (severity) {\n case Severity.Critical:\n return 5;\n case Severity.High:\n return 4;\n case Severity.Medium:\n return 3;\n case Severity.Low:\n return 2;\n case Severity.Info:\n return 1;\n }\n}\n\nfunction confidenceWeight(confidence: Confidence): number {\n switch (confidence) {\n case Confidence.High:\n return 3;\n case Confidence.Medium:\n return 2;\n case Confidence.Low:\n return 1;\n }\n}\n\nfunction aggregateSeverity(values: Severity[], strategy: SeverityAggregation): Severity {\n const sorted = [...values].sort((left, right) => severityWeight(right) - severityWeight(left));\n if (strategy === \"lowest\") {\n return sorted.at(-1) ?? Severity.Info;\n }\n return sorted[0] ?? Severity.Info;\n}\n\nfunction aggregateConfidence(values: Confidence[], strategy: ConfidenceAggregation): Confidence {\n if (values.length === 0) {\n return Confidence.Low;\n }\n\n if (strategy === \"minimum\") {\n return (\n [...values].sort((left, right) => confidenceWeight(left) - confidenceWeight(right))[0] ??\n Confidence.Low\n );\n }\n\n if (strategy === \"average\") {\n const average =\n values.reduce((total, confidence) => total + confidenceNumericValue(confidence), 0) /\n values.length;\n return normalizeConfidence(average);\n }\n\n return (\n [...values].sort((left, right) => confidenceWeight(right) - confidenceWeight(left))[0] ??\n Confidence.Low\n );\n}\n\nfunction confidenceNumericValue(confidence: Confidence): number {\n switch (confidence) {\n case Confidence.High:\n return 0.95;\n case Confidence.Medium:\n return 0.72;\n case Confidence.Low:\n return 0.3;\n }\n}\n\nfunction stableId(value: string): string {\n let hash = 0;\n for (const character of value) {\n hash = (hash * 31 + character.charCodeAt(0)) >>> 0;\n }\n return `finding-${hash.toString(16).padStart(8, \"0\")}`;\n}\n\nfunction stableStringify(value: unknown): string {\n if (Array.isArray(value)) {\n return `[${value.map(stableStringify).join(\",\")}]`;\n }\n if (isRecord(value)) {\n return `{${Object.keys(value)\n .sort(compareStrings)\n .map((key) => `${JSON.stringify(key)}:${stableStringify(value[key])}`)\n .join(\",\")}}`;\n }\n return JSON.stringify(value);\n}\n\nfunction uniqueStrings(values: string[]): string[] {\n return [...new Set(values.filter(isNonEmptyString))].sort(compareStrings);\n}\n\nfunction assertObservationInit(\n value: ObservationInit,\n source: string,\n registry: RuleRegistry,\n): void {\n requireString(value.ruleId, `${source}.ruleId`);\n requireString(value.subject, `${source}.subject`);\n requireObservationTitle(value.title, `${source}.title`);\n const rule = registry.lookup(value.ruleId);\n if (value.category === undefined && rule?.category === undefined) {\n throw new Error(`${source}.category is required when rule.category is not defined.`);\n }\n optionalString(value.category, `${source}.category`);\n if (value.severity === undefined && rule?.defaultSeverity === undefined) {\n throw new Error(`${source}.severity is required when rule.defaultSeverity is not defined.`);\n }\n if (value.severity !== undefined && !isSeverity(value.severity)) {\n throw new Error(`${source}.severity must be one of info, low, medium, high, critical.`);\n }\n const ruleConfidence = rule?.defaultConfidence;\n if (value.confidence === undefined && ruleConfidence === undefined) {\n throw new Error(`${source}.confidence is required when rule.defaultConfidence is not defined.`);\n }\n if (value.confidence !== undefined) {\n normalizeConfidence(value.confidence);\n }\n optionalObservationSummary(value.summary, `${source}.summary`);\n optionalEvidence(value.location, `${source}.location`);\n optionalString(value.groupKey, `${source}.groupKey`);\n optionalStringArray(value.groupBy, `${source}.groupBy`);\n optionalStringArray(value.tags, `${source}.tags`);\n}\n\nfunction assertFindingInput(value: FindingInput, source: string): void {\n requireString(value.title, `${source}.title`);\n requireString(value.category, `${source}.category`);\n requireString(value.summary, `${source}.summary`);\n if (!isSeverity(value.severity)) {\n throw new Error(`${source}.severity must be one of info, low, medium, high, critical.`);\n }\n normalizeConfidence(value.confidence);\n if (!Array.isArray(value.evidence) || value.evidence.length === 0) {\n throw new Error(`${source}.evidence must contain at least one evidence item.`);\n }\n for (const [index, evidence] of value.evidence.entries()) {\n optionalEvidence(evidence, `${source}.evidence[${index}]`);\n }\n optionalString(value.id, `${source}.id`);\n optionalString(value.ruleId, `${source}.ruleId`);\n optionalString(value.groupKey, `${source}.groupKey`);\n optionalStringArray(value.tags, `${source}.tags`);\n optionalRemediation(value.remediation, `${source}.remediation`);\n}\n\nfunction assertReviewNote(value: ReviewNoteInput, source: string): void {\n requireString(value.key, `${source}.key`);\n requireString(value.summary, `${source}.summary`);\n if (value.evidence !== undefined) {\n for (const [index, evidence] of value.evidence.entries()) {\n optionalEvidence(evidence, `${source}.evidence[${index}]`);\n }\n }\n}\n\nfunction assertReviewScore(value: ReviewScore): void {\n requireString(value.key, \"ctx.review.score.key\");\n if (typeof value.score !== \"number\" || !Number.isFinite(value.score)) {\n throw new Error(\"ctx.review.score.score must be a finite number.\");\n }\n if (value.max !== undefined && (typeof value.max !== \"number\" || !Number.isFinite(value.max))) {\n throw new Error(\"ctx.review.score.max must be a finite number.\");\n }\n if (value.score < 0) {\n throw new Error(\"ctx.review.score.score must be greater than or equal to zero.\");\n }\n if (value.max !== undefined && (value.max <= 0 || value.score > value.max)) {\n throw new Error(\"ctx.review.score.max must be positive and no smaller than score.\");\n }\n optionalString(value.label, \"ctx.review.score.label\");\n optionalString(value.summary, \"ctx.review.score.summary\");\n}\n\nfunction assertAssessment(value: ReviewAssessment): void {\n if (![\"none\", \"low\", \"medium\", \"high\", \"critical\"].includes(value.risk)) {\n throw new Error(\"ctx.review.assessment.risk must be one of none, low, medium, high, critical.\");\n }\n optionalString(value.summary, \"ctx.review.assessment.summary\");\n}\n\nfunction assertOpinion(value: ReviewOpinion): void {\n requireString(value.summary, \"ctx.review.opinion.summary\");\n}\n\nfunction assertRuleDefinition(rule: RuleDefinition): void {\n requireString(rule.id, \"rule.id\");\n optionalString(rule.category, \"rule.category\");\n if (rule.defaultSeverity !== undefined && !isSeverity(rule.defaultSeverity)) {\n throw new Error(\"rule.defaultSeverity must be one of info, low, medium, high, critical.\");\n }\n if (rule.defaultConfidence !== undefined) {\n normalizeConfidence(rule.defaultConfidence);\n }\n optionalStringArray(rule.groupBy, \"rule.groupBy\");\n if (rule.aggregate !== undefined && typeof rule.aggregate !== \"function\") {\n throw new Error(\"rule.aggregate must be a function.\");\n }\n}\n\nfunction assertReviewPolicy(policy: ReviewPolicy, source: string): void {\n if (policy.minimumConfidence !== undefined && !isConfidence(policy.minimumConfidence)) {\n throw new Error(`${source}.minimumConfidence must be one of low, medium, high.`);\n }\n if (\n policy.maximumFindings !== undefined &&\n (!Number.isInteger(policy.maximumFindings) || policy.maximumFindings < 0)\n ) {\n throw new Error(`${source}.maximumFindings must be a non-negative integer.`);\n }\n if (policy.confidenceThresholds !== undefined) {\n const { medium, high } = policy.confidenceThresholds;\n if (medium < 0 || high > 1 || medium > high) {\n throw new Error(`${source}.confidenceThresholds must satisfy 0 <= medium <= high <= 1.`);\n }\n }\n for (const [ruleId, severity] of Object.entries(policy.severityOverrides ?? {})) {\n if (!isSeverity(severity)) {\n throw new Error(`${source}.severityOverrides[\"${ruleId}\"] is not a valid severity.`);\n }\n }\n}\n\nfunction optionalRemediation(value: Remediation | undefined, field: string): void {\n if (value === undefined) return;\n if (!isRecord(value)) throw new Error(`${field} must be an object.`);\n if (\n value.complexity !== undefined &&\n (typeof value.complexity !== \"string\" ||\n ![\"trivial\", \"small\", \"medium\", \"large\", \"architectural\"].includes(value.complexity))\n ) {\n throw new Error(`${field}.complexity is invalid.`);\n }\n}\n\nfunction requireObservationTitle(value: ObservationTitle, field: string): void {\n if (typeof value === \"string\") {\n requireString(value, field);\n return;\n }\n if (!isRecord(value)) {\n throw new Error(`${field} must be a string or { singular, plural }.`);\n }\n requireString(value.singular, `${field}.singular`);\n requireString(value.plural, `${field}.plural`);\n}\n\nfunction optionalObservationSummary(value: ObservationSummary | undefined, field: string): void {\n if (value === undefined) {\n return;\n }\n if (typeof value === \"string\") {\n optionalString(value, field);\n return;\n }\n if (!isRecord(value)) {\n throw new Error(`${field} must be a string or { singular, grouped }.`);\n }\n optionalString(value.singular, `${field}.singular`);\n optionalString(value.grouped, `${field}.grouped`);\n}\n\nfunction optionalEvidence(value: EvidenceInput | Evidence | undefined, field: string): void {\n if (value === undefined) {\n return;\n }\n if (!isRecord(value)) {\n throw new Error(`${field} must be an object.`);\n }\n const input = value as EvidenceInput;\n optionalString(input.file, `${field}.file`);\n optionalPositiveInteger(input.line, `${field}.line`);\n optionalPositiveInteger(input.endLine, `${field}.endLine`);\n optionalString(value.message, `${field}.message`);\n optionalString(value.snippet, `${field}.snippet`);\n optionalString(value.label, `${field}.label`);\n if (value.location !== undefined) {\n if (!isRecord(value.location)) {\n throw new Error(`${field}.location must be an object.`);\n }\n optionalString(value.location.file, `${field}.location.file`);\n optionalPositiveInteger(value.location.line, `${field}.location.line`);\n optionalPositiveInteger(value.location.endLine, `${field}.location.endLine`);\n }\n const line = value.location?.line ?? input.line;\n const endLine = value.location?.endLine ?? input.endLine;\n if (endLine !== undefined && line === undefined) {\n throw new Error(`${field}.endLine requires line.`);\n }\n if (endLine !== undefined && line !== undefined && endLine < line) {\n throw new Error(`${field}.endLine must not precede line.`);\n }\n if (value.data !== undefined && !isRecord(value.data)) {\n throw new Error(`${field}.data must be an object.`);\n }\n if (input.metadata !== undefined && !isRecord(input.metadata)) {\n throw new Error(`${field}.metadata must be an object.`);\n }\n}\n\nfunction writeLog(level: \"debug\" | \"info\" | \"warn\" | \"error\", message: unknown): void {\n process.stderr.write(`[adversary] ${level}: ${String(message)}\\n`);\n}\n\nfunction parseBooleanEnv(value: string | undefined): boolean | undefined {\n if (value === undefined || value.length === 0) {\n return undefined;\n }\n return [\"1\", \"true\", \"TRUE\", \"yes\", \"YES\"].includes(value);\n}\n\nfunction isVerbose(): boolean {\n return verboseValues.has(process.env.ADVERSARY_VERBOSE ?? \"\");\n}\n\nfunction compareStrings(left: string, right: string): number {\n return left.localeCompare(right);\n}\n\nfunction compareNumbers(left: number | undefined, right: number | undefined): number {\n return (left ?? Number.MAX_SAFE_INTEGER) - (right ?? Number.MAX_SAFE_INTEGER);\n}\n\nfunction toPosixPath(path: string): string {\n return path.replaceAll(\"\\\\\", \"/\");\n}\n\nfunction basename(path: string): string {\n return path.split(\"/\").at(-1) ?? path;\n}\n\nfunction requireString(value: unknown, field: string): void {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`${field} must be a non-empty string.`);\n }\n}\n\nfunction optionalString(value: unknown, field: string): void {\n if (value !== undefined && typeof value !== \"string\") {\n throw new Error(`${field} must be a string.`);\n }\n}\n\nfunction optionalStringArray(value: unknown, field: string): void {\n if (\n value !== undefined &&\n (!Array.isArray(value) || value.some((item) => typeof item !== \"string\"))\n ) {\n throw new Error(`${field} must be an array of strings.`);\n }\n}\n\nfunction optionalPositiveInteger(value: unknown, field: string): void {\n if (value !== undefined && (!Number.isInteger(value) || Number(value) < 1)) {\n throw new Error(`${field} must be a positive integer.`);\n }\n}\n\nfunction isConfidence(value: unknown): value is Confidence {\n return value === Confidence.Low || value === Confidence.Medium || value === Confidence.High;\n}\n\nfunction isSeverity(value: unknown): value is Severity {\n return (\n value === Severity.Info ||\n value === Severity.Low ||\n value === Severity.Medium ||\n value === Severity.High ||\n value === Severity.Critical\n );\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.length > 0;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction stringFromUnknown(value: unknown): string | undefined {\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction capitalize(value: string): string {\n return `${value.slice(0, 1).toUpperCase()}${value.slice(1)}`;\n}\n\nconst semanticStopWords = new Set([\n \"a\",\n \"an\",\n \"and\",\n \"are\",\n \"as\",\n \"from\",\n \"in\",\n \"is\",\n \"of\",\n \"the\",\n \"to\",\n \"uses\",\n \"using\",\n]);\n\nfunction formatEvidenceLocation(evidence: Evidence): string {\n const file = evidence.location?.file;\n const line = evidence.location?.line;\n const endLine = evidence.location?.endLine;\n\n if (file === undefined) {\n return \"\";\n }\n if (line !== undefined && endLine !== undefined) {\n return `${file}:${line}-${endLine}`;\n }\n if (line !== undefined) {\n return `${file}:${line}`;\n }\n return file;\n}\n\nfunction formatEvidenceLines(evidence: Evidence): string[] {\n const location = formatEvidenceLocation(evidence);\n const label = evidence.label ?? evidence.message;\n const firstLine =\n location.length > 0 && label !== undefined\n ? `- ${location} — ${label}`\n : `- ${location.length > 0 ? location : (label ?? \"Evidence\")}`;\n const lines = [firstLine];\n\n if (evidence.snippet !== undefined) {\n lines.push(` ${evidence.snippet}`);\n }\n\n return lines;\n}\n\nfunction formatScore(score: ReviewScore): string {\n const label = score.label ?? score.key;\n const max = score.max ?? 10;\n const summary = score.summary === undefined ? \"\" : ` - ${normalizeParagraph(score.summary)}`;\n return `${label}: ${score.score} / ${max}${summary}`;\n}\n\nfunction normalizeParagraph(value: string): string {\n return value\n .split(/\\n+/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .join(\" \");\n}\n\nfunction trimTrailingSentencePunctuation(value: string): string {\n return value.trim().replace(/[.!?]+$/g, \"\");\n}\n\nfunction lowercaseFirst(value: string): string {\n return `${value.slice(0, 1).toLowerCase()}${value.slice(1)}`;\n}\n\nfunction omitUndefined<T extends Record<string, unknown>>(value: T): T {\n return Object.fromEntries(\n Object.entries(value).filter(([, entryValue]) => entryValue !== undefined),\n ) as T;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { mkdir, readFile, readdir, writeFile } from \"node:fs/promises\";\nimport { dirname, isAbsolute, relative, resolve } from \"node:path\";\nimport { Ajv2020, type ValidateFunction } from \"ajv/dist/2020.js\";\nimport { type ReviewModel, createModelFromEnvironment, unavailableModel } from \"./model.js\";\n\nexport {\n ADVERSARY_MODEL_ENDPOINT_ENV,\n ADVERSARY_MODEL_PROTOCOL_VERSION,\n ADVERSARY_MODEL_TOKEN_ENV,\n BrokerReviewModel,\n ModelReviewError,\n ModelUnavailableError,\n createModelFromEnvironment,\n unavailableModel,\n type ModelReviewBudget,\n type ModelEnvironment,\n type ModelReviewRequest,\n type ModelReviewResult,\n type ModelReviewUsage,\n type ReviewModel,\n} from \"./model.js\";\n\nexport {\n ADVERSARY_MANIFEST_FILE_NAME,\n ADVERSARY_MANIFEST_MAX_BYTES,\n ManifestValidationError,\n parseAdversaryManifest,\n validateAdversaryManifest,\n type AdversaryManifest,\n type DetectionManifest,\n type EnvironmentPermissionsManifest,\n type FilesystemPermissionsManifest,\n type FindingsManifest,\n type PermissionsManifest,\n type RuntimeManifest,\n type TriggerManifest,\n} from \"./manifest.js\";\n\nexport const DEFAULT_INPUT_PATH = \"/adversary/input.json\";\nexport const DEFAULT_OUTPUT_PATH = \"/adversary/output.json\";\nexport const ADVERSARY_RUN_PROTOCOL_VERSION = 1;\n\nconst verboseValues = new Set([\"1\", \"true\", \"TRUE\", \"yes\", \"YES\"]);\nlet envelopeValidator: ValidateFunction | undefined;\n\nexport const Severity = {\n Info: \"info\",\n Low: \"low\",\n Medium: \"medium\",\n High: \"high\",\n Critical: \"critical\",\n} as const;\n\nexport type Severity = (typeof Severity)[keyof typeof Severity];\n\nexport interface SeverityGuidanceEntry {\n severity: Severity;\n guidance: string;\n}\n\nexport const DEFAULT_SEVERITY_GUIDANCE: SeverityGuidanceEntry[] = [\n {\n severity: Severity.Info,\n guidance: \"Interesting observations.\",\n },\n {\n severity: Severity.Low,\n guidance: \"Reasonable engineering improvements.\",\n },\n {\n severity: Severity.Medium,\n guidance: \"Issues likely to create operational problems.\",\n },\n {\n severity: Severity.High,\n guidance: \"Security, correctness, or reliability risks.\",\n },\n {\n severity: Severity.Critical,\n guidance: \"Immediate production risk.\",\n },\n];\n\nexport const Confidence = {\n Low: \"low\",\n Medium: \"medium\",\n High: \"high\",\n} as const;\n\nexport type Confidence = (typeof Confidence)[keyof typeof Confidence];\nexport type ConfidenceInput = Confidence | number;\n\nexport interface ConfidenceThresholds {\n medium: number;\n high: number;\n}\n\nexport const DEFAULT_CONFIDENCE_THRESHOLDS: ConfidenceThresholds = {\n medium: 0.6,\n high: 0.85,\n};\n\nexport interface Location {\n file?: string;\n line?: number;\n endLine?: number;\n}\n\nexport interface EvidenceInput extends Location {\n location?: Location;\n label?: string;\n message?: string;\n snippet?: string;\n data?: Record<string, unknown>;\n /** @deprecated Use data. */\n metadata?: Record<string, unknown>;\n}\n\nexport interface Evidence {\n location?: Location;\n label?: string;\n message?: string;\n snippet?: string;\n data?: Record<string, unknown>;\n}\n\nexport interface Remediation {\n complexity?: \"trivial\" | \"small\" | \"medium\" | \"large\" | \"architectural\";\n}\n\nexport interface RecommendationInput {\n summary: string;\n details?: string;\n}\n\nexport type ObservationTitle =\n | string\n | {\n singular: string;\n plural: string;\n };\n\nexport type ObservationSummary =\n | string\n | {\n singular?: string;\n grouped?: string;\n };\n\nexport type ConfidenceAggregation = \"maximum\" | \"minimum\" | \"average\";\nexport type SeverityAggregation = \"highest\" | \"lowest\";\n\nexport interface ObservationInit {\n ruleId: string;\n subject: string;\n groupKey?: string;\n groupBy?: string[];\n groupedTitle?: string;\n deduplicate?: boolean;\n category?: string;\n severity?: Severity;\n confidence?: ConfidenceInput;\n confidenceAggregation?: ConfidenceAggregation;\n severityAggregation?: SeverityAggregation;\n title: ObservationTitle;\n summary?: ObservationSummary;\n whyItMatters?: string;\n impact?: string;\n location?: EvidenceInput;\n evidence?: string | Record<string, unknown>;\n recommendation?: string | RecommendationInput;\n remediation?: Remediation;\n tags?: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface FindingInput {\n id?: string;\n ruleId?: string;\n groupKey?: string;\n deduplicate?: boolean;\n title: string;\n category: string;\n severity: Severity;\n confidence: ConfidenceInput;\n summary: string;\n whyItMatters?: string;\n impact?: string;\n evidence: EvidenceInput[];\n recommendation?: string;\n remediation?: Remediation;\n tags?: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface ReviewFinding {\n id: string;\n ruleId?: string;\n groupKey?: string;\n title: string;\n category: string;\n severity: Severity;\n confidence: Confidence;\n summary: string;\n whyItMatters?: string;\n impact?: string;\n evidence: Evidence[];\n recommendation?: string;\n remediation?: Remediation;\n tags?: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface ReviewNote {\n key: string;\n summary: string;\n evidence?: Evidence[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface ReviewNoteInput extends Omit<ReviewNote, \"evidence\"> {\n evidence?: EvidenceInput[];\n}\n\nexport interface ReviewAssessment {\n risk: \"none\" | \"low\" | \"medium\" | \"high\" | \"critical\";\n summary?: string;\n}\n\nexport interface ReviewOpinion {\n ship?: boolean;\n summary: string;\n}\n\n/**\n * Decision context for opinion framing. Derived from the runner-resolved change\n * scope so adversaries do not invent merge/commit language for whole-target audits.\n *\n * - `repository` — entire target (`change === null` or `scanMode: \"all\"`)\n * - `change` — committed range (branch comparison, PR, or explicit base/head)\n * - `worktree` — uncommitted local changes (`headRef` is the WORKTREE sentinel)\n */\nexport type ReviewPosture = \"repository\" | \"change\" | \"worktree\";\n\nexport interface FormatOpinionOptions {\n /** Whether the reviewer would accept the current target as-is enough to proceed. */\n ship: boolean;\n /**\n * What should be fixed. Must be a short noun phrase suitable after\n * \"I would address …\" (for example \"direct process termination below the\n * application boundary\"). Validated by {@link requireOpinionConcern}; clauses\n * and sentence punctuation are rejected (they are not rewritten).\n */\n concern?: string;\n /**\n * When greater than 1, use plural \"remaining findings\" framing and ignore\n * `concern` for the primary sentence.\n */\n remainingCount?: number;\n /** Runner-resolved change scope; used when `posture` is omitted. */\n change?: ChangeContext | null;\n /** Explicit posture override. */\n posture?: ReviewPosture;\n}\n\nexport interface ReviewScore {\n key: string;\n label?: string;\n score: number;\n max?: number;\n summary?: string;\n}\n\nexport interface ReviewPolicy {\n minimumConfidence?: Confidence;\n maximumFindings?: number;\n includeInformational?: boolean;\n confidenceThresholds?: ConfidenceThresholds;\n severityOverrides?: Record<string, Severity>;\n}\n\nexport interface ReviewResult {\n adversary: {\n name: string;\n version?: string;\n };\n target: {\n repository?: string;\n filesScanned?: number;\n };\n assessment?: ReviewAssessment;\n positives: ReviewNote[];\n observations: ReviewNote[];\n findings: ReviewFinding[];\n opinion?: ReviewOpinion;\n suppressed: {\n observations: number;\n findings: number;\n };\n timing?: {\n buildMs?: number;\n startupMs?: number;\n scanMs?: number;\n totalMs?: number;\n };\n suppressedFindings?: ReviewFinding[];\n rawObservations?: ObservationInit[];\n}\n\nexport interface AdversaryRunEnvelope {\n protocolVersion: typeof ADVERSARY_RUN_PROTOCOL_VERSION;\n result: WireReviewResult;\n}\n\nexport interface WireEvidence {\n file?: string;\n line?: number;\n endLine?: number;\n message?: string;\n snippet?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface WireReviewFinding extends Omit<ReviewFinding, \"evidence\"> {\n evidence: WireEvidence[];\n}\n\nexport interface WireReviewNote extends Omit<ReviewNote, \"evidence\"> {\n evidence?: WireEvidence[];\n}\n\nexport interface WireReviewResult\n extends Omit<ReviewResult, \"positives\" | \"observations\" | \"findings\" | \"suppressedFindings\"> {\n positives: WireReviewNote[];\n observations: WireReviewNote[];\n findings: WireReviewFinding[];\n suppressedFindings?: WireReviewFinding[];\n}\n\n/** Sentinel head_ref used when the reviewed head is the uncommitted worktree. */\nexport const WORKTREE_HEAD_REF = \"WORKTREE\";\n\n/** The change block of adversary.input.v1 as written by the runner. */\nexport interface RuntimeChange {\n type?: string;\n base_ref?: string;\n head_ref?: string;\n scan_mode?: string;\n changed_files?: string[];\n [key: string]: unknown;\n}\n\nexport interface RuntimeInput {\n source: {\n path: string;\n };\n change?: RuntimeChange | null;\n [key: string]: unknown;\n}\n\n/** The requested review scope, normalized from the runtime input's change block. */\nexport interface ChangeContext {\n /** Change representation reported by the runner; \"diff\" today. */\n readonly type?: string;\n /** Base revision of the reviewed change. */\n readonly baseRef?: string;\n /** Head revision of the reviewed change, or the WORKTREE sentinel. */\n readonly headRef?: string;\n /** \"changed\" restricts review to the change; \"all\" requests the entire target. */\n readonly scanMode: \"changed\" | \"all\";\n /** Repository-relative paths the runner identified as changed. */\n readonly changedFiles: readonly string[];\n /** True when the reviewed head is the uncommitted worktree. */\n readonly worktree: boolean;\n}\n\nexport interface Summary {\n files_scanned?: number;\n}\n\nexport interface RuleContext {\n repoPath: string;\n /**\n * The requested review scope. Null when the runner asked for a full-target\n * review without a change context; when present, scanMode distinguishes\n * reviewing only the change (\"changed\") from reviewing the entire target\n * with change metadata available (\"all\").\n */\n change: ChangeContext | null;\n summary: Summary;\n cache: Map<string, unknown>;\n relpath: (path: string) => string;\n glob: (pattern: string) => Promise<string[]>;\n rglob: (pattern: string) => Promise<string[]>;\n model: ReviewModel;\n observe: (observation: ObservationInit) => void;\n finding: (finding: FindingInput) => void;\n review: {\n assessment: (assessment: ReviewAssessment) => void;\n positive: (note: ReviewNoteInput) => void;\n observe: (note: ReviewNoteInput) => void;\n score: (score: ReviewScore) => void;\n opinion: (opinion: ReviewOpinion) => void;\n };\n}\n\nexport type RuleHandler = (context: RuleContext) => void | Promise<void>;\n\nexport interface AdversaryOptions {\n name: string;\n version?: string;\n review?: ReviewPolicy;\n}\n\nexport interface RunOptions {\n input: RuntimeInput;\n model?: ReviewModel;\n review?: ReviewPolicy;\n includeSuppressed?: boolean;\n includeRawObservations?: boolean;\n includeTiming?: boolean;\n}\n\nexport interface EnvironmentRunOptions {\n input?: RuntimeInput;\n inputPath?: string;\n outputPath?: string;\n model?: ReviewModel;\n review?: ReviewPolicy;\n includeSuppressed?: boolean;\n includeRawObservations?: boolean;\n includeTiming?: boolean;\n}\n\nexport interface ReviewRenderer {\n render(result: ReviewResult): Promise<void> | void;\n}\n\nexport interface RuleDefinition {\n id: string;\n category?: string;\n defaultSeverity?: Severity;\n defaultConfidence?: ConfidenceInput;\n groupBy?: string[];\n aggregate?: (observations: ReadonlyArray<ObservationInit>) => FindingSynthesis;\n}\n\nexport type FindingSynthesis = Omit<Partial<ReviewFinding>, \"evidence\"> & {\n evidence?: EvidenceInput[];\n};\n\nexport class RuleRegistry {\n private readonly rules = new Map<string, RuleDefinition>();\n\n register(rule: RuleDefinition): void {\n assertRuleDefinition(rule);\n if (this.rules.has(rule.id)) {\n throw new Error(`Rule definition \"${rule.id}\" is already registered.`);\n }\n this.rules.set(rule.id, cloneRuleDefinition(rule));\n }\n\n replace(rule: RuleDefinition): void {\n assertRuleDefinition(rule);\n if (!this.rules.has(rule.id)) {\n throw new Error(`Rule definition \"${rule.id}\" is not registered.`);\n }\n this.rules.set(rule.id, cloneRuleDefinition(rule));\n }\n\n lookup(ruleId: string): RuleDefinition | undefined {\n const rule = this.rules.get(ruleId);\n return rule === undefined ? undefined : cloneRuleDefinition(rule);\n }\n\n has(ruleId: string): boolean {\n return this.rules.has(ruleId);\n }\n\n snapshot(): RuleRegistry {\n const snapshot = new RuleRegistry();\n for (const rule of this.rules.values()) {\n snapshot.register(rule);\n }\n return snapshot;\n }\n\n importMissing(source: RuleRegistry): void {\n for (const rule of source.rules.values()) {\n if (!this.rules.has(rule.id)) {\n this.rules.set(rule.id, cloneRuleDefinition(rule));\n }\n }\n }\n}\n\nfunction cloneRuleDefinition(rule: RuleDefinition): RuleDefinition {\n return {\n ...rule,\n groupBy: rule.groupBy === undefined ? undefined : [...rule.groupBy],\n };\n}\n\nfunction cloneReviewPolicy(policy: ReviewPolicy): ReviewPolicy {\n return {\n ...policy,\n confidenceThresholds:\n policy.confidenceThresholds === undefined ? undefined : { ...policy.confidenceThresholds },\n severityOverrides:\n policy.severityOverrides === undefined ? undefined : { ...policy.severityOverrides },\n };\n}\n\n/** @deprecated Prefer app.defineRule(...) so definitions remain instance-scoped. */\nexport const ruleRegistry = new RuleRegistry();\n\n/** @deprecated Prefer app.defineRule(...) so definitions remain instance-scoped. */\nexport function defineRule(rule: RuleDefinition): void {\n ruleRegistry.register(rule);\n}\n\n/** @deprecated Prefer app.replaceRule(...) so definitions remain instance-scoped. */\nexport function replaceRule(rule: RuleDefinition): void {\n ruleRegistry.replace(rule);\n}\n\nexport const log = {\n debug(message: unknown): void {\n if (isVerbose()) {\n writeLog(\"debug\", message);\n }\n },\n\n info(message: unknown): void {\n if (isVerbose()) {\n writeLog(\"info\", message);\n }\n },\n\n warn(message: unknown): void {\n writeLog(\"warn\", message);\n },\n\n error(message: unknown): void {\n writeLog(\"error\", message);\n },\n};\n\nexport class Adversary {\n readonly name: string;\n readonly version?: string;\n private readonly rules: Array<{ id: string; handler: RuleHandler }> = [];\n private readonly reviewPolicy: ReviewPolicy;\n private readonly ruleDefinitions: RuleRegistry;\n\n constructor(options: AdversaryOptions) {\n if (options.name.length === 0) {\n throw new Error(\"Adversary name must be a non-empty string.\");\n }\n\n this.name = options.name;\n this.version = options.version;\n this.reviewPolicy = cloneReviewPolicy(options.review ?? {});\n assertReviewPolicy(this.reviewPolicy, `adversary \"${this.name}\" review policy`);\n this.ruleDefinitions = ruleRegistry.snapshot();\n }\n\n defineRule(rule: RuleDefinition): void {\n this.ruleDefinitions.register(rule);\n }\n\n replaceRule(rule: RuleDefinition): void {\n this.ruleDefinitions.replace(rule);\n }\n\n hasRuleDefinition(ruleId: string): boolean {\n return this.ruleDefinitions.has(ruleId);\n }\n\n rule(id: string, handler: RuleHandler): void {\n if (id.length === 0) {\n throw new Error(\"Rule id must be a non-empty string.\");\n }\n\n if (this.rules.some((rule) => rule.id === id)) {\n throw new Error(`App rule \"${id}\" is already registered.`);\n }\n\n // Compatibility for definitions registered with the deprecated top-level API after\n // this Adversary was constructed. Once copied, later global changes cannot affect it.\n this.ruleDefinitions.importMissing(ruleRegistry);\n this.rules.push({ id, handler });\n }\n\n async run(options: RunOptions): Promise<ReviewResult> {\n const startedAt = performance.now();\n assertReviewPolicy(options.review ?? {}, `adversary \"${this.name}\" run review policy`);\n const repoPath = options.input.source.path;\n const summary: Summary = {};\n const cache = new Map<string, unknown>();\n const collector = createReviewCollector();\n const registry = this.ruleDefinitions.snapshot();\n const change = normalizeChangeContext(options.input.change);\n const context = createRuleContext(\n repoPath,\n change,\n summary,\n cache,\n collector,\n registry,\n options.model ?? unavailableModel(),\n );\n const includeSuppressed = options.includeSuppressed;\n\n for (const rule of this.rules) {\n log.debug(`running rule ${rule.id}`);\n await rule.handler(context);\n }\n\n const output = buildReviewResult({\n adversary: { name: this.name, version: this.version },\n repository: repoPath,\n filesScanned: typeof summary.files_scanned === \"number\" ? summary.files_scanned : undefined,\n collector,\n policy: cloneReviewPolicy({ ...this.reviewPolicy, ...options.review }),\n registry,\n change,\n includeSuppressed,\n includeRawObservations: options.includeRawObservations,\n timing: options.includeTiming\n ? { totalMs: Math.round(performance.now() - startedAt) }\n : undefined,\n });\n\n return output;\n }\n\n async runFromEnvironment(options: EnvironmentRunOptions = {}): Promise<ReviewResult> {\n const input =\n options.input ??\n (await parseInput(options.inputPath ?? process.env.ADVERSARY_INPUT ?? DEFAULT_INPUT_PATH));\n const repository = options.input\n ? input.source.path\n : (process.env.ADVERSARY_REPO ?? input.source.path);\n const result = await this.run({\n input: { ...input, source: { ...input.source, path: repository } },\n model: options.model ?? createModelFromEnvironment(),\n review: options.review,\n includeSuppressed:\n options.includeSuppressed ?? parseBooleanEnv(process.env.ADVERSARY_INCLUDE_SUPPRESSED),\n includeRawObservations: options.includeRawObservations,\n includeTiming: options.includeTiming,\n });\n await writeOutput(\n createAdversaryRunEnvelope(result),\n options.outputPath ?? process.env.ADVERSARY_OUTPUT ?? DEFAULT_OUTPUT_PATH,\n );\n return result;\n }\n}\n\nexport function createAdversaryRunEnvelope(result: ReviewResult): AdversaryRunEnvelope {\n return {\n protocolVersion: ADVERSARY_RUN_PROTOCOL_VERSION,\n result: toWireReviewResult(result),\n };\n}\n\nfunction toWireReviewResult(result: ReviewResult): WireReviewResult {\n return omitUndefined({\n adversary: omitUndefined(result.adversary),\n target: omitUndefined(result.target),\n assessment:\n result.assessment === undefined ? undefined : omitUndefined({ ...result.assessment }),\n positives: result.positives.map(toWireReviewNote),\n observations: result.observations.map(toWireReviewNote),\n findings: result.findings.map(toWireFinding),\n opinion: result.opinion === undefined ? undefined : omitUndefined({ ...result.opinion }),\n suppressed: result.suppressed,\n timing: result.timing === undefined ? undefined : omitUndefined(result.timing),\n suppressedFindings: result.suppressedFindings?.map(toWireFinding),\n rawObservations: result.rawObservations,\n }) as WireReviewResult;\n}\n\nfunction toWireReviewNote(note: ReviewNote): WireReviewNote {\n return omitUndefined({\n key: note.key,\n summary: note.summary,\n evidence: note.evidence?.map(toWireEvidence),\n metadata: note.metadata,\n });\n}\n\nfunction toWireFinding(finding: ReviewFinding): WireReviewFinding {\n return omitUndefined({\n id: finding.id,\n ruleId: finding.ruleId,\n groupKey: finding.groupKey,\n title: finding.title,\n category: finding.category,\n severity: finding.severity,\n confidence: finding.confidence,\n summary: finding.summary,\n whyItMatters: finding.whyItMatters,\n impact: finding.impact,\n evidence: finding.evidence.map(toWireEvidence),\n recommendation: finding.recommendation,\n remediation:\n finding.remediation === undefined ? undefined : omitUndefined({ ...finding.remediation }),\n tags: finding.tags,\n metadata: finding.metadata,\n }) as WireReviewFinding;\n}\n\nfunction toWireEvidence(evidence: Evidence): WireEvidence {\n return omitUndefined({\n file: evidence.location?.file,\n line: evidence.location?.line,\n endLine: evidence.location?.endLine,\n message: evidence.message ?? evidence.label,\n snippet: evidence.snippet,\n metadata: evidence.data,\n });\n}\n\nexport async function parseInput(path = DEFAULT_INPUT_PATH): Promise<RuntimeInput> {\n const raw = await readFile(path, \"utf8\");\n const parsed: unknown = JSON.parse(raw);\n\n if (!isRecord(parsed)) {\n throw new Error(`Invalid input at ${path}: expected an object.`);\n }\n\n if (!isRecord(parsed.source)) {\n throw new Error(`Invalid input at ${path}: source must be an object.`);\n }\n\n if (typeof parsed.source.path !== \"string\" || parsed.source.path.length === 0) {\n throw new Error(`Invalid input at ${path}: source.path must be a non-empty string.`);\n }\n\n if (parsed.change !== undefined && parsed.change !== null) {\n if (!isRecord(parsed.change)) {\n throw new Error(`Invalid input at ${path}: change must be an object or null.`);\n }\n for (const field of [\"type\", \"base_ref\", \"head_ref\", \"scan_mode\"] as const) {\n const value = parsed.change[field];\n if (value !== undefined && typeof value !== \"string\") {\n throw new Error(`Invalid input at ${path}: change.${field} must be a string.`);\n }\n }\n const scanMode = parsed.change.scan_mode;\n if (scanMode !== undefined && scanMode !== \"changed\" && scanMode !== \"all\") {\n throw new Error(`Invalid input at ${path}: change.scan_mode must be \"changed\" or \"all\".`);\n }\n const changedFiles = parsed.change.changed_files;\n if (\n changedFiles !== undefined &&\n (!Array.isArray(changedFiles) || changedFiles.some((item) => typeof item !== \"string\"))\n ) {\n throw new Error(\n `Invalid input at ${path}: change.changed_files must be an array of strings.`,\n );\n }\n }\n\n return parsed as RuntimeInput;\n}\n\nexport async function writeOutput(\n output: AdversaryRunEnvelope,\n path = DEFAULT_OUTPUT_PATH,\n): Promise<void> {\n await validateRunEnvelope(output);\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, `${JSON.stringify(output, null, 2)}\\n`, \"utf8\");\n}\n\nexport async function validateRunEnvelope(output: unknown): Promise<void> {\n let validator = envelopeValidator;\n if (validator === undefined) {\n const schema = JSON.parse(\n await readFile(\n new URL(\"../schemas/adversary.review.v1.schema.json\", import.meta.url),\n \"utf8\",\n ),\n );\n validator = new Ajv2020({ allErrors: true, strict: true }).compile(schema);\n envelopeValidator = validator;\n }\n if (!validator(output)) {\n throw new Error(`Invalid adversary.review.v1 envelope: ${JSON.stringify(validator.errors)}`);\n }\n}\n\nexport function normalizeConfidence(\n confidence: ConfidenceInput,\n thresholds: ConfidenceThresholds = DEFAULT_CONFIDENCE_THRESHOLDS,\n): Confidence {\n if (isConfidence(confidence)) {\n return confidence;\n }\n\n if (\n typeof confidence !== \"number\" ||\n Number.isNaN(confidence) ||\n confidence < 0 ||\n confidence > 1\n ) {\n throw new Error(\"confidence must be low, medium, high, or a number from 0 to 1.\");\n }\n\n if (confidence >= thresholds.high) {\n return Confidence.High;\n }\n\n if (confidence >= thresholds.medium) {\n return Confidence.Medium;\n }\n\n return Confidence.Low;\n}\n\nexport function rankFindings(findings: ReviewFinding[]): ReviewFinding[] {\n return [...findings].sort((left, right) => {\n const scoreComparison = scoreFinding(right) - scoreFinding(left);\n if (scoreComparison !== 0) {\n return scoreComparison;\n }\n\n const severityComparison = severityWeight(right.severity) - severityWeight(left.severity);\n if (severityComparison !== 0) {\n return severityComparison;\n }\n\n const titleComparison = compareStrings(left.title, right.title);\n if (titleComparison !== 0) {\n return titleComparison;\n }\n\n return compareStrings(left.id, right.id);\n });\n}\n\nexport class JsonRenderer implements ReviewRenderer {\n constructor(\n private readonly write: (text: string) => void = (text) => process.stdout.write(text),\n ) {}\n\n render(result: ReviewResult): void {\n this.write(`${JSON.stringify(toWireReviewResult(result), null, 2)}\\n`);\n }\n}\n\n/** Maximum evidence items shown per finding in text mode. JSON keeps the full list. */\nconst TERMINAL_MAX_EVIDENCE = 5;\n\nexport class TerminalRenderer implements ReviewRenderer {\n constructor(\n private readonly write: (text: string) => void = (text) => process.stdout.write(text),\n ) {}\n\n /**\n * Product text report layout (aligned with the adversary CLI renderer):\n * header → assessment → finding index → finding detail → positives →\n * scores → observations → opinion → stats footer.\n */\n render(result: ReviewResult): void {\n const lines: string[] = [];\n lines.push(`Adversary: ${result.adversary.name}`);\n if (result.target.repository !== undefined) {\n lines.push(`Repository: ${shortenRepositoryPath(result.target.repository)}`);\n }\n if (result.target.filesScanned !== undefined) {\n lines.push(`Files scanned: ${result.target.filesScanned}`);\n }\n lines.push(\"\");\n\n if (result.assessment !== undefined) {\n lines.push(\"Overall assessment\", \"\");\n lines.push(`Risk: ${capitalize(result.assessment.risk)}`, \"\");\n if (result.assessment.summary !== undefined) {\n lines.push(normalizeParagraph(result.assessment.summary), \"\");\n }\n }\n\n if (result.findings.length > 0) {\n lines.push(`Findings (${result.findings.length})`, \"\");\n for (const finding of result.findings) {\n const sites = finding.evidence.length;\n lines.push(\n sites > 0\n ? `- [${finding.severity}] ${finding.title} (${evidenceCountLabel(sites)})`\n : `- [${finding.severity}] ${finding.title}`,\n );\n }\n lines.push(\"\");\n }\n\n for (const finding of result.findings) {\n appendTerminalFinding(lines, finding);\n }\n\n // Suppressed details are separate from the active findings index/total.\n // The active count remains result.findings.length; suppressed details and\n // the suppressed footer count are reported explicitly.\n const suppressedFindings = result.suppressedFindings ?? [];\n if (suppressedFindings.length > 0) {\n lines.push(`Suppressed findings (${suppressedFindings.length})`, \"\");\n for (const finding of suppressedFindings) {\n const sites = finding.evidence.length;\n lines.push(\n sites > 0\n ? `- [${finding.severity}] ${finding.title} (${evidenceCountLabel(sites)})`\n : `- [${finding.severity}] ${finding.title}`,\n );\n }\n lines.push(\"\");\n for (const finding of suppressedFindings) {\n appendTerminalFinding(lines, finding, \"suppressed; reason unavailable\");\n }\n }\n\n if (result.positives.length > 0) {\n lines.push(\"Positive signals\", \"\");\n for (const positive of result.positives) {\n lines.push(`- ${normalizeParagraph(positive.summary)}`);\n }\n lines.push(\"\");\n }\n\n const scoreNotes = result.observations.filter(isScoreReviewNote);\n const additionalObservations = reviewObservationsForTerminal(\n result.observations.filter((note) => !isScoreReviewNote(note)),\n );\n\n if (scoreNotes.length > 0) {\n lines.push(\"Scores\", \"\");\n for (const note of scoreNotes) {\n lines.push(note.summary);\n }\n lines.push(\"\");\n }\n\n if (additionalObservations.length > 0) {\n lines.push(\"Observations\", \"\");\n for (const observation of additionalObservations) {\n lines.push(`- ${normalizeParagraph(observation.summary)}`);\n }\n lines.push(\"\");\n }\n\n if (result.opinion !== undefined) {\n lines.push(\"Overall opinion\", \"\", normalizeParagraph(result.opinion.summary), \"\");\n }\n\n // Active findings only in the primary total; suppressed counts are separate.\n lines.push(`Findings: ${result.findings.length}`);\n if (result.suppressed.observations > 0) {\n lines.push(`Suppressed observations: ${result.suppressed.observations}`);\n }\n const suppressedFindingCount = Math.max(result.suppressed.findings, suppressedFindings.length);\n if (suppressedFindingCount > 0) {\n lines.push(`Suppressed findings: ${suppressedFindingCount}`);\n }\n\n this.write(`${lines.join(\"\\n\").trimEnd()}\\n`);\n }\n}\n\nfunction appendTerminalFinding(lines: string[], finding: ReviewFinding, qualifier?: string): void {\n const label = qualifier === undefined ? finding.severity : `${finding.severity}; ${qualifier}`;\n lines.push(`[${label}] ${finding.title}`);\n const firstEvidence = finding.evidence.find((item) => item.location?.file !== undefined);\n if (firstEvidence?.location?.file !== undefined) {\n lines.push(formatEvidenceLocation(firstEvidence));\n }\n lines.push(\"\");\n lines.push(`Category: ${finding.category}`);\n lines.push(`Confidence: ${finding.confidence}`, \"\");\n lines.push(\"Summary\", \"\", finding.summary, \"\");\n\n if (finding.whyItMatters !== undefined) {\n lines.push(\"Why it matters\", \"\", finding.whyItMatters, \"\");\n }\n\n if (finding.impact !== undefined) {\n lines.push(\"Impact\", \"\", finding.impact, \"\");\n }\n\n if (finding.evidence.length > 0) {\n lines.push(\"Evidence\", \"\");\n const shown = finding.evidence.slice(0, TERMINAL_MAX_EVIDENCE);\n const remaining = finding.evidence.length - shown.length;\n for (const evidence of shown) {\n lines.push(...formatEvidenceLines(evidence));\n }\n if (remaining > 0) {\n lines.push(`- … and ${remaining} more`);\n }\n lines.push(\"\");\n }\n\n if (finding.recommendation !== undefined) {\n lines.push(\"Recommendation\", \"\", normalizeParagraph(finding.recommendation), \"\");\n }\n}\n\nfunction reviewObservationsForTerminal(notes: ReviewNote[]): ReviewNote[] {\n return notes.filter((note) => !isContextObservation(note));\n}\n\nfunction isContextObservation(note: ReviewNote): boolean {\n // Prefer explicit markers only. Free-text heuristics like \"Prepared … file\"\n // drop legitimate review notes (e.g. \"Prepared migration file has syntax errors\").\n const key = note.key.trim().toLowerCase();\n if (key.endsWith(\".analysis\") || key === \"analysis\") {\n return true;\n }\n const role = note.metadata?.role;\n return typeof role === \"string\" && role.toLowerCase() === \"context\";\n}\n\nfunction shortenRepositoryPath(path: string): string {\n const trimmed = path.trim();\n if (trimmed.length === 0) {\n return trimmed;\n }\n const normalized = trimmed.replaceAll(\"\\\\\", \"/\");\n const segments = normalized.split(\"/\").filter((part) => part.length > 0);\n if (segments.length <= 2) {\n return trimmed;\n }\n return `${segments[segments.length - 2]}/${segments[segments.length - 1]}`;\n}\n\nfunction evidenceCountLabel(n: number): string {\n return n === 1 ? \"1 site\" : `${n} sites`;\n}\n\nexport function normalizeChangeContext(\n change: RuntimeChange | null | undefined,\n): ChangeContext | null {\n if (change === undefined || change === null) {\n return null;\n }\n const scanMode = change.scan_mode ?? \"changed\";\n if (scanMode !== \"changed\" && scanMode !== \"all\") {\n throw new Error(`Unsupported change scan_mode \"${change.scan_mode}\".`);\n }\n return Object.freeze({\n ...(change.type === undefined ? {} : { type: change.type }),\n ...(change.base_ref === undefined ? {} : { baseRef: change.base_ref }),\n ...(change.head_ref === undefined ? {} : { headRef: change.head_ref }),\n scanMode,\n changedFiles: Object.freeze([...(change.changed_files ?? [])]),\n worktree: change.head_ref === WORKTREE_HEAD_REF,\n });\n}\n\nfunction createRuleContext(\n repoPath: string,\n change: ChangeContext | null,\n summary: Summary,\n cache: Map<string, unknown>,\n collector: ReviewCollector,\n registry: RuleRegistry,\n model: ReviewModel,\n): RuleContext {\n const absoluteRepoPath = resolve(repoPath);\n\n return {\n repoPath: absoluteRepoPath,\n change,\n summary,\n cache,\n model,\n relpath(path: string): string {\n return relative(absoluteRepoPath, isAbsolute(path) ? path : resolve(absoluteRepoPath, path));\n },\n glob(pattern: string): Promise<string[]> {\n return findMatchingPaths(absoluteRepoPath, pattern, false);\n },\n rglob(pattern: string): Promise<string[]> {\n return findMatchingPaths(absoluteRepoPath, pattern, true);\n },\n observe(observation: ObservationInit): void {\n assertObservationInit(observation, \"ctx.observe\", registry);\n collector.observations.push(observation);\n },\n finding(finding: FindingInput): void {\n assertFindingInput(finding, \"ctx.finding\");\n collector.findings.push({\n finding: normalizeFindingInput(finding, collector.findings.length),\n deduplicate: finding.deduplicate !== false,\n });\n },\n review: {\n assessment(assessment: ReviewAssessment): void {\n assertAssessment(assessment);\n collector.assessment = assessment;\n },\n positive(note: ReviewNoteInput): void {\n assertReviewNote(note, \"ctx.review.positive\");\n collector.positives.push(normalizeReviewNote(note));\n },\n observe(note: ReviewNoteInput): void {\n assertReviewNote(note, \"ctx.review.observe\");\n collector.reviewObservations.push(normalizeReviewNote(note));\n },\n score(score: ReviewScore): void {\n assertReviewScore(score);\n collector.scores.push(score);\n },\n opinion(opinion: ReviewOpinion): void {\n assertOpinion(opinion);\n collector.opinion = opinion;\n },\n },\n };\n}\n\nasync function findMatchingPaths(\n repoPath: string,\n pattern: string,\n recursive: boolean,\n): Promise<string[]> {\n const matcher = globPatternToRegExp(pattern);\n const paths = recursive ? await walk(repoPath) : await listFiles(repoPath);\n\n return paths\n .map((path) => relative(repoPath, path))\n .filter((path) => {\n const posixPath = toPosixPath(path);\n const candidate = recursive && !pattern.includes(\"/\") ? basename(posixPath) : posixPath;\n return matcher.test(candidate);\n })\n .sort(compareStrings);\n}\n\nasync function listFiles(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n return entries.filter((entry) => entry.isFile()).map((entry) => resolve(directory, entry.name));\n}\n\nasync function walk(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const paths: string[] = [];\n\n for (const entry of entries) {\n const path = resolve(directory, entry.name);\n\n if (entry.isDirectory()) {\n paths.push(...(await walk(path)));\n } else if (entry.isFile()) {\n paths.push(path);\n }\n }\n\n return paths;\n}\n\nfunction globPatternToRegExp(pattern: string): RegExp {\n const source = toPosixPath(pattern)\n .replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\n .replace(/\\*\\*/g, \"\\0\")\n .replace(/\\*/g, \"[^/]*\")\n .replace(/\\?/g, \"[^/]\")\n .replace(/\\0/g, \".*\");\n\n return new RegExp(`^${source}$`);\n}\n\ninterface ReviewCollector {\n observations: ObservationInit[];\n findings: CollectedFinding[];\n assessment?: ReviewAssessment;\n positives: ReviewNote[];\n reviewObservations: ReviewNote[];\n scores: ReviewScore[];\n opinion?: ReviewOpinion;\n}\n\ninterface CollectedFinding {\n finding: ReviewFinding;\n deduplicate: boolean;\n}\n\nfunction createReviewCollector(): ReviewCollector {\n return {\n observations: [],\n findings: [],\n positives: [],\n reviewObservations: [],\n scores: [],\n };\n}\n\nfunction buildReviewResult(input: {\n adversary: ReviewResult[\"adversary\"];\n repository: string;\n filesScanned?: number;\n collector: ReviewCollector;\n policy: ReviewPolicy;\n registry: RuleRegistry;\n change?: ChangeContext | null;\n includeSuppressed?: boolean;\n includeRawObservations?: boolean;\n timing?: ReviewResult[\"timing\"];\n}): ReviewResult {\n const thresholds = input.policy.confidenceThresholds ?? DEFAULT_CONFIDENCE_THRESHOLDS;\n const synthesis = synthesizeObservationFindings(\n input.collector.observations,\n thresholds,\n input.registry,\n );\n const allFindings = deduplicateFindings([\n ...synthesis.findings.map((finding) => ({ finding, deduplicate: true })),\n ...input.collector.findings,\n ]).map((finding) => calibrateFindingSeverity(finding, input.policy));\n const ranked = rankFindings(allFindings);\n const minimumConfidence = input.policy.minimumConfidence ?? Confidence.Medium;\n const includeInformational = input.policy.includeInformational ?? false;\n const maximumFindings = input.policy.maximumFindings ?? Number.POSITIVE_INFINITY;\n const eligible: ReviewFinding[] = [];\n const suppressedFindings: ReviewFinding[] = [];\n\n for (const finding of ranked) {\n const suppressed =\n confidenceWeight(finding.confidence) < confidenceWeight(minimumConfidence) ||\n (!includeInformational && finding.severity === Severity.Info) ||\n eligible.length >= maximumFindings;\n\n if (suppressed) {\n suppressedFindings.push(finding);\n } else {\n eligible.push(finding);\n }\n }\n\n const positives = selectPositiveSignals(input.collector.positives);\n const reviewObservations = deduplicateReviewObservations(\n [\n ...input.collector.reviewObservations,\n ...deduplicateScores(input.collector.scores).map(scoreToReviewNote),\n ],\n positives,\n );\n\n return omitUndefined({\n adversary: input.adversary,\n target: omitUndefined({\n repository: input.repository,\n filesScanned: input.filesScanned,\n }),\n assessment: input.collector.assessment ?? synthesizeAssessment(eligible, positives),\n positives,\n observations: reviewObservations,\n findings: eligible,\n opinion: input.collector.opinion ?? synthesizeOpinion(eligible, input.change ?? null),\n suppressed: {\n observations: synthesis.suppressedObservations,\n findings: suppressedFindings.length,\n },\n timing: input.timing,\n suppressedFindings: input.includeSuppressed ? suppressedFindings : undefined,\n rawObservations: input.includeRawObservations ? input.collector.observations : undefined,\n }) as ReviewResult;\n}\n\ninterface ObservationSynthesisResult {\n findings: ReviewFinding[];\n suppressedObservations: number;\n}\n\nfunction synthesizeObservationFindings(\n observations: ObservationInit[],\n thresholds: ConfidenceThresholds,\n registry: RuleRegistry,\n): ObservationSynthesisResult {\n const grouped = new Map<string, ObservationInit[]>();\n const seen = new Set<string>();\n let suppressedObservations = 0;\n\n for (const observation of observations) {\n const rule = registry.lookup(observation.ruleId);\n const groupKey = observation.groupKey ?? defaultObservationGroupKey(observation, rule);\n const dedupeKey = stableStringify({ groupKey, observation });\n if (observation.deduplicate !== false && seen.has(dedupeKey)) {\n suppressedObservations += 1;\n continue;\n }\n seen.add(dedupeKey);\n grouped.set(groupKey, [...(grouped.get(groupKey) ?? []), observation]);\n }\n\n const findings = [...grouped.entries()].map(([groupKey, group]) => {\n const first = group[0];\n if (first === undefined) {\n throw new Error(\"Cannot synthesize finding from an empty observation group.\");\n }\n\n const rule = registry.lookup(first.ruleId);\n const synthesis = rule?.aggregate?.(group) ?? {};\n const synthesisSource = rule?.aggregate === undefined ? \"generic\" : \"rule\";\n log.debug(\n `review synthesis ruleId=${first.ruleId} groupKey=${groupKey} observations=${group.length} selected=${synthesisSource} fallback=${synthesisSource === \"generic\"}`,\n );\n\n const evidence = deduplicateEvidence(synthesis.evidence ?? group.map(observationToEvidence));\n const recommendation =\n synthesis.recommendation === undefined\n ? synthesizeRecommendation(group)\n : normalizeParagraph(synthesis.recommendation);\n const confidence = aggregateConfidence(\n group.map((observation) =>\n normalizeConfidence(\n observation.confidence ?? rule?.defaultConfidence ?? Confidence.Medium,\n thresholds,\n ),\n ),\n first.confidenceAggregation ?? \"maximum\",\n );\n const severity = aggregateSeverity(\n group.map((observation) => observation.severity ?? rule?.defaultSeverity ?? Severity.Info),\n first.severityAggregation ?? \"highest\",\n );\n\n const finding: ReviewFinding = {\n id: synthesis.id ?? stableId(`${first.ruleId}:${groupKey}`),\n ruleId: synthesis.ruleId ?? first.ruleId,\n groupKey: synthesis.groupKey ?? groupKey,\n title:\n synthesis.title ??\n synthesizeObservationTitle(first.title, group.length, first.groupedTitle),\n category: synthesis.category ?? first.category ?? rule?.category ?? \"general\",\n severity: synthesis.severity ?? severity,\n confidence:\n synthesis.confidence ??\n (rule?.defaultConfidence === undefined\n ? confidence\n : normalizeConfidence(rule.defaultConfidence, thresholds)),\n summary: synthesis.summary ?? summarizeObservationGroup(group),\n whyItMatters: synthesis.whyItMatters ?? first.whyItMatters,\n impact: synthesis.impact ?? first.impact,\n evidence,\n recommendation: recommendation.length > 0 ? recommendation : undefined,\n remediation: synthesis.remediation ?? first.remediation,\n tags: synthesis.tags ?? uniqueStrings(group.flatMap((observation) => observation.tags ?? [])),\n metadata: synthesis.metadata ?? first.metadata,\n };\n assertFindingInput(finding, `adversary aggregate rule \"${first.ruleId}\"`);\n return finding;\n });\n return { findings, suppressedObservations };\n}\n\nfunction normalizeFindingInput(input: FindingInput, occurrence = 0): ReviewFinding {\n return omitUndefined({\n id:\n input.id ??\n stableId(\n `${input.ruleId ?? input.title}:${input.groupKey ?? input.category}${\n input.deduplicate === false ? `:${occurrence}` : \"\"\n }`,\n ),\n ruleId: input.ruleId,\n groupKey: input.groupKey,\n title: input.title,\n category: input.category,\n severity: input.severity,\n confidence: normalizeConfidence(input.confidence),\n summary: input.summary,\n whyItMatters: input.whyItMatters,\n impact: input.impact,\n evidence: deduplicateEvidence(input.evidence),\n recommendation:\n input.recommendation === undefined ? undefined : normalizeParagraph(input.recommendation),\n remediation: input.remediation,\n tags: input.tags === undefined ? undefined : uniqueStrings(input.tags),\n metadata: input.metadata,\n }) as ReviewFinding;\n}\n\nfunction deduplicateFindings(findings: CollectedFinding[]): ReviewFinding[] {\n const seen = new Set<string>();\n const result: ReviewFinding[] = [];\n\n for (const collected of findings) {\n const { finding } = collected;\n if (!collected.deduplicate) {\n result.push({ ...finding, evidence: deduplicateEvidence(finding.evidence) });\n continue;\n }\n const key = finding.groupKey ?? finding.id;\n if (seen.has(key)) {\n const existing = result.find((item) => (item.groupKey ?? item.id) === key);\n if (existing !== undefined) {\n existing.evidence = deduplicateEvidence([...existing.evidence, ...finding.evidence]);\n existing.tags = uniqueStrings([...(existing.tags ?? []), ...(finding.tags ?? [])]);\n }\n continue;\n }\n seen.add(key);\n result.push({ ...finding, evidence: deduplicateEvidence(finding.evidence) });\n }\n\n return result;\n}\n\nfunction deduplicateEvidence(evidence: ReadonlyArray<EvidenceInput | Evidence>): Evidence[] {\n const seen = new Set<string>();\n const result: Evidence[] = [];\n\n for (const item of evidence) {\n const normalized = normalizeEvidence(item);\n const key = stableStringify(normalized);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(normalized);\n }\n }\n\n return result.sort((left, right) => {\n const fileComparison = compareStrings(left.location?.file ?? \"\", right.location?.file ?? \"\");\n if (fileComparison !== 0) {\n return fileComparison;\n }\n const lineComparison = compareNumbers(left.location?.line, right.location?.line);\n if (lineComparison !== 0) {\n return lineComparison;\n }\n return compareStrings(left.message ?? \"\", right.message ?? \"\");\n });\n}\n\nfunction normalizeEvidence(input: EvidenceInput | Evidence): Evidence {\n const legacy = input as EvidenceInput;\n const hasLocation =\n legacy.location !== undefined ||\n legacy.file !== undefined ||\n legacy.line !== undefined ||\n legacy.endLine !== undefined;\n const location = hasLocation\n ? omitUndefined({\n file: legacy.location?.file ?? legacy.file,\n line: legacy.location?.line ?? legacy.line,\n endLine: legacy.location?.endLine ?? legacy.endLine,\n })\n : undefined;\n return omitUndefined({\n location,\n label: input.label,\n message: input.message,\n snippet: input.snippet,\n data: input.data ?? legacy.metadata,\n });\n}\n\nfunction normalizeReviewNote(note: ReviewNoteInput): ReviewNote {\n return omitUndefined({\n ...note,\n evidence: note.evidence === undefined ? undefined : deduplicateEvidence(note.evidence),\n }) as ReviewNote;\n}\n\nfunction deduplicateNotes(notes: ReviewNote[]): ReviewNote[] {\n const seen = new Set<string>();\n const result: ReviewNote[] = [];\n\n for (const note of notes) {\n const normalized = {\n ...note,\n evidence: note.evidence === undefined ? undefined : deduplicateEvidence(note.evidence),\n };\n const key = note.key;\n if (!seen.has(key)) {\n seen.add(key);\n result.push(normalized);\n }\n }\n\n return result.sort((left, right) => compareStrings(left.key, right.key));\n}\n\nfunction selectPositiveSignals(notes: ReviewNote[]): ReviewNote[] {\n const selected: ReviewNote[] = [];\n const seen = new Set<string>();\n\n // Registration order expresses the review author's priority. Two strong signals\n // provide useful context without diluting the findings.\n for (const note of notes) {\n if (!seen.has(note.key)) {\n seen.add(note.key);\n selected.push(note);\n }\n if (selected.length === 2) {\n break;\n }\n }\n\n return deduplicateNotes(selected);\n}\n\nfunction deduplicateReviewObservations(\n observations: ReviewNote[],\n positives: ReviewNote[],\n): ReviewNote[] {\n const deduped = deduplicateNotes(observations);\n\n return deduped.filter((item) => {\n return !positives.some((positive) => notesDescribeSameFact(positive, item));\n });\n}\n\nfunction notesDescribeSameFact(positive: ReviewNote, observation: ReviewNote): boolean {\n if (positive.key === observation.key) {\n return true;\n }\n\n const positiveText = normalizeSemanticText(`${positive.key} ${positive.summary}`);\n const observationText = normalizeSemanticText(`${observation.key} ${observation.summary}`);\n return positiveText.length > 0 && positiveText === observationText;\n}\n\nfunction synthesizeAssessment(\n findings: ReviewFinding[],\n positives: ReviewNote[] = [],\n): ReviewAssessment {\n const strength = assessmentStrength(positives[0]);\n\n if (findings.length === 0) {\n return {\n risk: \"none\",\n summary: joinSentences(\n strength,\n \"No material concerns were identified in the reviewed repository.\",\n ),\n };\n }\n\n const risk = highestRisk(findings);\n const primary = findings[0];\n const primaryConcern =\n primary === undefined ? \"the highest-ranked finding\" : assessmentConcern(primary);\n\n if (findings.length === 1) {\n return {\n risk,\n summary: joinSentences(\n strength,\n `The only material concern identified is ${primaryConcern}.`,\n ),\n };\n }\n\n return {\n risk,\n summary: joinSentences(\n strength,\n `${numberWord(findings.length)} material concerns were identified. The highest-value improvement is ${primaryConcern}.`,\n ),\n };\n}\n\nfunction assessmentStrength(positive: ReviewNote | undefined): string | undefined {\n if (positive === undefined) {\n return undefined;\n }\n\n const summary = normalizeParagraph(positive.summary);\n if (/^uses\\b/i.test(summary)) {\n return `The repository ${lowercaseFirst(summary)}`;\n }\n return summary;\n}\n\nfunction assessmentConcern(finding: ReviewFinding): string {\n const summary = normalizeParagraph(finding.summary).split(/(?<=[.!?])\\s+/, 1)[0];\n return concernClause(\n lowercaseFirst(trimTrailingSentencePunctuation(summary ?? findingConcern(finding))),\n );\n}\n\nfunction concernClause(concern: string): string {\n // Finite verbs with a following complement/object. Requiring a trailing token\n // keeps noun phrases such as \"memory leaks\", \"stale reads\", and \"concurrent\n // writes\" from being rewritten as broken \"that the …\" clauses.\n const isClause =\n /\\b(?:allows|are|binds|blocks|builds|bypasses|calls|can|closes|contains|copies|could|creates|detaches|did|discards|do|does|exits|exposes|fails|forks|has|have|ignores|includes|installs|is|kills|lacks|leaks|leaves|logs|maps|may|might|must|opens|panics|prints|reads|references|relies|replaces|requires|returns|runs|skips|spawns|starts|terminates|throws|uses|was|were|writes)\\b\\s+\\S+/i.test(\n concern,\n );\n if (!isClause) {\n return concern;\n }\n\n const hasDeterminer = /^(?:a|an|any|each|its|no|one|some|the|their|these|this|those)\\b/i.test(\n concern,\n );\n return `that ${hasDeterminer ? concern : `the ${concern}`}`;\n}\n\nfunction joinSentences(...sentences: Array<string | undefined>): string {\n return sentences.filter(isNonEmptyString).join(\" \");\n}\n\n/**\n * Resolve the decision posture from the runner-provided change scope.\n * Adversaries should prefer this (or `formatOpinion`) over hardcoding merge language.\n */\nexport function resolveReviewPosture(change: ChangeContext | null | undefined): ReviewPosture {\n if (change === null || change === undefined || change.scanMode === \"all\") {\n return \"repository\";\n }\n if (change.worktree) {\n return \"worktree\";\n }\n return \"change\";\n}\n\n/** Maximum length for a concern phrase passed to formatOpinion. */\nexport const MAX_OPINION_CONCERN_LENGTH = 100;\n\n/**\n * Normalize a concern for use after \"address …\". Noun phrases pass through;\n * full clauses become \"that …\" so rule titles remain grammatical.\n *\n * Prefer {@link requireOpinionConcern} / {@link formatOpinion} for overall opinion\n * text. This helper remains available when synthesizing assessment-style clauses.\n */\nexport function normalizeOpinionConcern(concern: string): string {\n const normalized = lowercaseFirst(trimTrailingSentencePunctuation(normalizeParagraph(concern)));\n if (!isNonEmptyString(normalized)) {\n throw new Error(\"opinion concern must be a non-empty string.\");\n }\n return concernClause(normalized);\n}\n\n/**\n * True when `concern` is a short noun phrase suitable after \"I would address …\".\n * Rejects empty values, sentence punctuation, long strings, and finite-clause shapes\n * such as \"commands replace inherited context\".\n */\nexport function isOpinionConcernPhrase(concern: string): boolean {\n try {\n requireOpinionConcern(concern);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Validate and normalize a noun-phrase concern for {@link formatOpinion}.\n * Throws when the value is empty, too long, sentence-like, or a finite clause.\n *\n * @example\n * ```ts\n * requireOpinionConcern(\"direct process termination below the application boundary\");\n * // throws: requireOpinionConcern(\"commands replace inherited context with context.Background\");\n * ```\n */\nexport function requireOpinionConcern(concern: string, label = \"opinion concern\"): string {\n if (typeof concern !== \"string\") {\n throw new Error(`${label} must be a string.`);\n }\n const trimmed = concern.trim();\n if (trimmed === \"\") {\n throw new Error(\n `${label} must be a non-empty noun phrase suitable after \"address …\" (for example \"direct process termination\").`,\n );\n }\n // Reject sentence punctuation before any stripping so \"foo.\" does not bypass\n // the noun-phrase contract by normalizing to \"foo\".\n if (/[.!?]/.test(trimmed)) {\n throw new Error(`${label} must be a noun phrase, not a sentence (remove \".!?\").`);\n }\n const normalized = lowercaseFirst(normalizeParagraph(trimmed));\n if (!isNonEmptyString(normalized)) {\n throw new Error(\n `${label} must be a non-empty noun phrase suitable after \"address …\" (for example \"direct process termination\").`,\n );\n }\n if (normalized.length > MAX_OPINION_CONCERN_LENGTH) {\n throw new Error(\n `${label} must be at most ${MAX_OPINION_CONCERN_LENGTH} characters (got ${normalized.length}).`,\n );\n }\n if (looksLikeFiniteClause(normalized)) {\n throw new Error(\n `${label} must be a noun phrase (for example \"direct process termination\"), not a clause (for example \"commands replace inherited context\").`,\n );\n }\n return normalized;\n}\n\n/**\n * Build a posture-aware review opinion from a ship decision and optional concern.\n *\n * Domain adversaries should pass judgment (ship + **noun-phrase** concern) and let\n * the SDK choose merge/commit/shipping language from the runner-resolved change scope.\n * Concerns are validated with {@link requireOpinionConcern}.\n *\n * @example\n * ```ts\n * ctx.review.opinion(\n * formatOpinion({\n * ship: false,\n * concern: \"direct process termination below the application boundary\",\n * change: ctx.change,\n * }),\n * );\n * ```\n */\nexport function formatOpinion(options: FormatOpinionOptions): ReviewOpinion {\n if (typeof options.ship !== \"boolean\") {\n throw new Error(\"formatOpinion requires a boolean ship decision.\");\n }\n\n const posture =\n options.posture === undefined\n ? resolveReviewPosture(options.change ?? null)\n : parseReviewPosture(options.posture, \"formatOpinion posture\");\n const deadline = opinionDeadline(posture);\n const remainingCount = options.remainingCount ?? 0;\n\n if (remainingCount > 1) {\n return {\n ship: options.ship,\n summary: `I would address the remaining findings ${deadline}.`,\n };\n }\n\n const concern =\n options.concern === undefined || options.concern.trim() === \"\"\n ? undefined\n : requireOpinionConcern(options.concern, \"formatOpinion concern\");\n\n if (options.ship) {\n if (concern === undefined) {\n return { ship: true, summary: opinionApproveAsIs(posture) };\n }\n return {\n ship: true,\n summary: opinionApproveWithFollowUp(posture, concern),\n };\n }\n\n if (concern === undefined) {\n return {\n ship: false,\n summary: `I would address the remaining findings ${deadline}.`,\n };\n }\n\n return {\n ship: false,\n summary: `I would address ${concern} ${deadline}.`,\n };\n}\n\n/**\n * True when the phrase looks like a finite clause (subject + finite verb + complement),\n * not a noun phrase. Used to reject bad formatOpinion concerns.\n */\nfunction looksLikeFiniteClause(concern: string): boolean {\n // Finite verb with a following token (shared with concernClause).\n if (\n /\\b(?:allows|are|binds|blocks|builds|bypasses|calls|can|closes|contains|copies|could|creates|detaches|did|discards|do|does|exits|exposes|fails|forks|has|have|ignores|includes|installs|is|kills|lacks|leaks|leaves|logs|maps|may|might|must|opens|panics|prints|reads|references|relies|replaces|requires|returns|runs|skips|spawns|starts|terminates|throws|uses|was|were|writes)\\b\\s+\\S+/i.test(\n concern,\n )\n ) {\n return true;\n }\n // Present-tense verbs that often appear mid-title (\"commands replace inherited context\").\n // Do not match past-participial adjectives at the start (\"discarded command errors\").\n if (\n /(?:^|\\s)(?:replace|replaces|discard|discards|force|forces|override|overrides|cause|causes|prevent|prevents|block|blocks|break|breaks|succeed|succeeds|fail|fails|mix|mixes|omit|omits|ignore|ignores)\\s+\\S+/i.test(\n concern,\n )\n ) {\n return true;\n }\n return false;\n}\n\nfunction parseReviewPosture(value: unknown, label: string): ReviewPosture {\n if (value === \"repository\" || value === \"change\" || value === \"worktree\") {\n return value;\n }\n throw new Error(`${label} must be one of repository, change, or worktree.`);\n}\n\nfunction opinionDeadline(posture: ReviewPosture): string {\n switch (posture) {\n case \"worktree\":\n return \"before committing\";\n case \"change\":\n return \"before merging\";\n case \"repository\":\n return \"before shipping\";\n default: {\n const _exhaustive: never = posture;\n throw new Error(`unsupported review posture: ${String(_exhaustive)}`);\n }\n }\n}\n\nfunction opinionApproveAsIs(posture: ReviewPosture): string {\n switch (posture) {\n case \"worktree\":\n return \"I would land these local changes as-is.\";\n case \"change\":\n return \"I would merge this change as-is.\";\n case \"repository\":\n return \"I would ship this as-is.\";\n default: {\n const _exhaustive: never = posture;\n throw new Error(`unsupported review posture: ${String(_exhaustive)}`);\n }\n }\n}\n\nfunction opinionApproveWithFollowUp(posture: ReviewPosture, concern: string): string {\n switch (posture) {\n case \"worktree\":\n return `I would land these local changes and address ${concern} as follow-up hardening.`;\n case \"change\":\n return `I would merge this change and address ${concern} as follow-up hardening.`;\n case \"repository\":\n return `I would ship this as-is. Addressing ${concern} is the only improvement I would recommend before shipping.`;\n default: {\n const _exhaustive: never = posture;\n throw new Error(`unsupported review posture: ${String(_exhaustive)}`);\n }\n }\n}\n\nfunction synthesizeOpinion(\n findings: ReviewFinding[],\n change: ChangeContext | null,\n): ReviewOpinion | undefined {\n const posture = resolveReviewPosture(change);\n const deadline = opinionDeadline(posture);\n\n if (findings.length === 0) {\n return formatOpinion({ ship: true, posture });\n }\n\n const highestSeverity = highestFindingSeverity(findings);\n const ship = severityWeight(highestSeverity) < severityWeight(Severity.High);\n\n if (findings.length > 1) {\n return formatOpinion({ ship, remainingCount: findings.length, posture });\n }\n\n const finding = findings[0];\n const improvement = finding === undefined ? \"Addressing the finding\" : improvementPhrase(finding);\n return {\n ship,\n summary: ship\n ? `${opinionApproveAsIs(posture)} ${improvement} is the only improvement I would recommend ${deadline}.`\n : `${improvement} is the most important improvement to address ${deadline}.`,\n };\n}\n\nfunction deduplicateScores(scores: ReviewScore[]): ReviewScore[] {\n const seen = new Set<string>();\n const result: ReviewScore[] = [];\n\n for (const score of scores) {\n if (!seen.has(score.key)) {\n seen.add(score.key);\n result.push(score);\n }\n }\n\n return result.sort((left, right) => compareStrings(left.key, right.key));\n}\n\nfunction scoreToReviewNote(score: ReviewScore): ReviewNote {\n return {\n key: `score.${score.key}`,\n summary: formatScore(score),\n metadata: {\n kind: \"score\",\n score: omitUndefined({\n key: score.key,\n label: score.label,\n score: score.score,\n max: score.max,\n summary: score.summary,\n }),\n },\n };\n}\n\nfunction isScoreReviewNote(note: ReviewNote): boolean {\n return note.metadata?.kind === \"score\" && isRecord(note.metadata.score);\n}\n\nfunction observationToEvidence(observation: ObservationInit): Evidence {\n const data = isRecord(observation.evidence)\n ? observation.evidence\n : observation.evidence === undefined\n ? undefined\n : { evidence: observation.evidence };\n const message = isRecord(observation.evidence)\n ? structuredEvidenceMessage(observation.evidence)\n : stringFromUnknown(observation.evidence);\n const snippet = isRecord(observation.evidence)\n ? (stringFromUnknown(observation.evidence.snippet) ??\n stringFromUnknown(observation.evidence.instruction))\n : observation.location?.snippet;\n\n return omitUndefined({\n location: normalizeEvidence(observation.location ?? {}).location,\n label: observation.location?.label ?? message,\n message: observation.location?.message ?? message,\n snippet,\n data,\n });\n}\n\nfunction structuredEvidenceMessage(evidence: Record<string, unknown>): string | undefined {\n const explicitMessage = stringFromUnknown(evidence.message);\n if (explicitMessage !== undefined) {\n return explicitMessage;\n }\n\n const label = stringFromUnknown(evidence.label) ?? stringFromUnknown(evidence.name);\n if (label !== undefined) {\n return label;\n }\n\n return stringFromUnknown(evidence.summary) ?? stringFromUnknown(evidence.instruction);\n}\n\nfunction synthesizeObservationTitle(\n title: ObservationTitle,\n count: number,\n groupedTitle: string | undefined,\n): string {\n if (typeof title === \"string\") {\n return count > 1 && groupedTitle !== undefined ? groupedTitle : title;\n }\n return count > 1 ? title.plural : title.singular;\n}\n\nfunction summarizeObservationGroup(group: ObservationInit[]): string {\n const first = group[0];\n if (first === undefined) {\n throw new Error(\"Cannot summarize an empty observation group.\");\n }\n\n if (first.summary !== undefined) {\n if (typeof first.summary === \"string\") {\n return normalizeParagraph(renderObservationTemplate(first.summary, group));\n }\n const template = group.length > 1 ? first.summary.grouped : first.summary.singular;\n if (template !== undefined) {\n return normalizeParagraph(renderObservationTemplate(template, group));\n }\n }\n\n const recommendation =\n typeof first.recommendation === \"string\" ? undefined : first.recommendation?.summary;\n if (group.length === 1) {\n return recommendation ?? synthesizeObservationTitle(first.title, 1, first.groupedTitle);\n }\n return `${group.length} related observations were reported for ${first.subject}.`;\n}\n\nfunction synthesizeRecommendation(group: ObservationInit[]): string {\n const recommendations = uniqueStrings(\n group.flatMap((observation) => {\n if (typeof observation.recommendation === \"string\") {\n return [observation.recommendation];\n }\n if (observation.recommendation !== undefined) {\n return [\n joinRecommendation(\n observation.recommendation.summary,\n observation.recommendation.details,\n ),\n ];\n }\n return [];\n }),\n );\n\n return recommendations.map(normalizeParagraph).join(\"\\n\\n\");\n}\n\nfunction joinRecommendation(summary: string, details: string | undefined): string {\n if (!isNonEmptyString(details)) {\n return summary;\n }\n\n const compactSummary = trimTrailingSentencePunctuation(summary);\n const compactDetails = trimTrailingSentencePunctuation(details);\n\n if (/^use\\s+/i.test(compactDetails)) {\n return `${compactSummary} and ${lowercaseFirst(compactDetails)}.`;\n }\n\n return `${compactSummary}. ${compactDetails}.`;\n}\n\nfunction defaultObservationGroupKey(\n observation: ObservationInit,\n rule: RuleDefinition | undefined,\n): string {\n const groupBy = observation.groupBy ?? rule?.groupBy;\n if (groupBy !== undefined && groupBy.length > 0) {\n return groupBy\n .map((field) => `${field}:${stringFromUnknown(observationValue(observation, field)) ?? \"\"}`)\n .join(\"|\");\n }\n return `${observation.ruleId}:${observation.subject}:${observation.category ?? rule?.category ?? \"general\"}`;\n}\n\nfunction renderObservationTemplate(template: string, group: ObservationInit[]): string {\n const values = observationTemplateValues(group);\n return template.replace(/\\{([a-zA-Z][a-zA-Z0-9_]*)\\}/g, (match, key: string) => {\n return values[key] ?? match;\n });\n}\n\nfunction observationTemplateValues(group: ObservationInit[]): Record<string, string> {\n const first = group[0];\n const subjects = uniqueStrings(group.map((observation) => observation.subject));\n const locations = uniqueStrings(group.map(formatObservationLocation).filter(isNonEmptyString));\n\n return omitUndefined({\n count: numberWord(group.length),\n location: locations[0],\n locations: joinHumanList(locations),\n subject: first?.subject,\n subjects: joinHumanList(subjects),\n });\n}\n\nfunction observationValue(observation: ObservationInit, field: string): unknown {\n if (field.includes(\".\")) {\n return field.split(\".\").reduce<unknown>((value, part) => {\n return isRecord(value) ? value[part] : undefined;\n }, observation);\n }\n return (observation as unknown as Record<string, unknown>)[field];\n}\n\nfunction formatObservationLocation(observation: ObservationInit): string | undefined {\n if (observation.location?.file === undefined) {\n return undefined;\n }\n if (observation.location.line === undefined) {\n return observation.location.file;\n }\n return `${observation.location.file}:${observation.location.line}`;\n}\n\nfunction joinHumanList(values: string[]): string {\n if (values.length <= 2) {\n return values.join(\" and \");\n }\n return `${values.slice(0, -1).join(\", \")}, and ${values.at(-1)}`;\n}\n\nfunction highestRisk(findings: ReviewFinding[]): ReviewAssessment[\"risk\"] {\n const severity = highestFindingSeverity(findings);\n if (severity === Severity.Info) {\n return \"none\";\n }\n return severity;\n}\n\nfunction highestFindingSeverity(findings: ReviewFinding[]): Severity {\n return aggregateSeverity(\n findings.map((finding) => finding.severity),\n \"highest\",\n );\n}\n\nfunction findingConcern(finding: ReviewFinding): string {\n return lowercaseFirst(trimTrailingSentencePunctuation(finding.title));\n}\n\nfunction improvementPhrase(finding: ReviewFinding): string {\n const recommendation = recommendationSubject(finding.recommendation);\n if (recommendation !== undefined) {\n return recommendation;\n }\n\n return `Addressing ${findingConcern(finding)}`;\n}\n\nfunction recommendationSubject(recommendation: string | undefined): string | undefined {\n if (recommendation === undefined) {\n return undefined;\n }\n\n const normalized = trimTrailingSentencePunctuation(normalizeParagraph(recommendation));\n const firstClause = normalized.split(/\\s+(?:and|when|where|with)\\s+/i)[0]?.trim();\n if (!isNonEmptyString(firstClause)) {\n return undefined;\n }\n\n return gerundPhrase(firstClause);\n}\n\nfunction gerundPhrase(phrase: string): string {\n const words = phrase.split(/\\s+/);\n const first = words[0];\n if (first === undefined) {\n return phrase;\n }\n\n return capitalize([toGerund(first), ...words.slice(1)].join(\" \"));\n}\n\nfunction toGerund(verb: string): string {\n const lower = verb.toLowerCase();\n const irregular: Record<string, string> = {\n pin: \"pinning\",\n run: \"running\",\n use: \"using\",\n };\n const known = irregular[lower];\n if (known !== undefined) {\n return known;\n }\n if (lower.endsWith(\"e\") && !lower.endsWith(\"ee\")) {\n return `${lower.slice(0, -1)}ing`;\n }\n return `${lower}ing`;\n}\n\nfunction normalizeSemanticText(value: string): string {\n return value\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \" \")\n .split(/\\s+/)\n .filter((word) => word.length > 0 && !semanticStopWords.has(word))\n .join(\" \");\n}\n\nfunction trimTrailingWord(value: string | undefined, word: string): string | undefined {\n if (value === undefined) {\n return undefined;\n }\n const pattern = new RegExp(`\\\\s+${word}$`, \"i\");\n const trimmed = value.replace(pattern, \"\").trim();\n return trimmed.length > 0 ? trimmed : value;\n}\n\nfunction numberWord(value: number): string {\n return (\n {\n 1: \"One\",\n 2: \"Two\",\n 3: \"Three\",\n 4: \"Four\",\n 5: \"Five\",\n 6: \"Six\",\n 7: \"Seven\",\n 8: \"Eight\",\n 9: \"Nine\",\n 10: \"Ten\",\n }[value] ?? String(value)\n );\n}\n\nfunction calibrateFindingSeverity(finding: ReviewFinding, policy: ReviewPolicy): ReviewFinding {\n const override =\n policy.severityOverrides?.[finding.ruleId ?? \"\"] ??\n policy.severityOverrides?.[finding.groupKey ?? \"\"];\n\n return override === undefined ? finding : { ...finding, severity: override };\n}\n\nfunction scoreFinding(finding: ReviewFinding): number {\n const locationScore = Math.min(finding.evidence.length, 5) * 3;\n const remediationScore = finding.remediation?.complexity === \"trivial\" ? 3 : 0;\n return (\n severityWeight(finding.severity) * 10 +\n confidenceWeight(finding.confidence) * 12 +\n locationScore +\n remediationScore\n );\n}\n\nfunction severityWeight(severity: Severity): number {\n switch (severity) {\n case Severity.Critical:\n return 5;\n case Severity.High:\n return 4;\n case Severity.Medium:\n return 3;\n case Severity.Low:\n return 2;\n case Severity.Info:\n return 1;\n }\n}\n\nfunction confidenceWeight(confidence: Confidence): number {\n switch (confidence) {\n case Confidence.High:\n return 3;\n case Confidence.Medium:\n return 2;\n case Confidence.Low:\n return 1;\n }\n}\n\nfunction aggregateSeverity(values: Severity[], strategy: SeverityAggregation): Severity {\n const sorted = [...values].sort((left, right) => severityWeight(right) - severityWeight(left));\n if (strategy === \"lowest\") {\n return sorted.at(-1) ?? Severity.Info;\n }\n return sorted[0] ?? Severity.Info;\n}\n\nfunction aggregateConfidence(values: Confidence[], strategy: ConfidenceAggregation): Confidence {\n if (values.length === 0) {\n return Confidence.Low;\n }\n\n if (strategy === \"minimum\") {\n return (\n [...values].sort((left, right) => confidenceWeight(left) - confidenceWeight(right))[0] ??\n Confidence.Low\n );\n }\n\n if (strategy === \"average\") {\n const average =\n values.reduce((total, confidence) => total + confidenceNumericValue(confidence), 0) /\n values.length;\n return normalizeConfidence(average);\n }\n\n return (\n [...values].sort((left, right) => confidenceWeight(right) - confidenceWeight(left))[0] ??\n Confidence.Low\n );\n}\n\nfunction confidenceNumericValue(confidence: Confidence): number {\n switch (confidence) {\n case Confidence.High:\n return 0.95;\n case Confidence.Medium:\n return 0.72;\n case Confidence.Low:\n return 0.3;\n }\n}\n\nfunction stableId(value: string): string {\n let hash = 0;\n for (const character of value) {\n hash = (hash * 31 + character.charCodeAt(0)) >>> 0;\n }\n return `finding-${hash.toString(16).padStart(8, \"0\")}`;\n}\n\nfunction stableStringify(value: unknown): string {\n if (Array.isArray(value)) {\n return `[${value.map(stableStringify).join(\",\")}]`;\n }\n if (isRecord(value)) {\n return `{${Object.keys(value)\n .sort(compareStrings)\n .map((key) => `${JSON.stringify(key)}:${stableStringify(value[key])}`)\n .join(\",\")}}`;\n }\n return JSON.stringify(value);\n}\n\nfunction uniqueStrings(values: string[]): string[] {\n return [...new Set(values.filter(isNonEmptyString))].sort(compareStrings);\n}\n\nfunction assertObservationInit(\n value: ObservationInit,\n source: string,\n registry: RuleRegistry,\n): void {\n requireString(value.ruleId, `${source}.ruleId`);\n requireString(value.subject, `${source}.subject`);\n requireObservationTitle(value.title, `${source}.title`);\n const rule = registry.lookup(value.ruleId);\n if (value.category === undefined && rule?.category === undefined) {\n throw new Error(`${source}.category is required when rule.category is not defined.`);\n }\n optionalString(value.category, `${source}.category`);\n if (value.severity === undefined && rule?.defaultSeverity === undefined) {\n throw new Error(`${source}.severity is required when rule.defaultSeverity is not defined.`);\n }\n if (value.severity !== undefined && !isSeverity(value.severity)) {\n throw new Error(`${source}.severity must be one of info, low, medium, high, critical.`);\n }\n const ruleConfidence = rule?.defaultConfidence;\n if (value.confidence === undefined && ruleConfidence === undefined) {\n throw new Error(`${source}.confidence is required when rule.defaultConfidence is not defined.`);\n }\n if (value.confidence !== undefined) {\n normalizeConfidence(value.confidence);\n }\n optionalObservationSummary(value.summary, `${source}.summary`);\n optionalEvidence(value.location, `${source}.location`);\n optionalString(value.groupKey, `${source}.groupKey`);\n optionalStringArray(value.groupBy, `${source}.groupBy`);\n optionalStringArray(value.tags, `${source}.tags`);\n}\n\nfunction assertFindingInput(value: FindingInput, source: string): void {\n requireString(value.title, `${source}.title`);\n requireString(value.category, `${source}.category`);\n requireString(value.summary, `${source}.summary`);\n if (!isSeverity(value.severity)) {\n throw new Error(`${source}.severity must be one of info, low, medium, high, critical.`);\n }\n normalizeConfidence(value.confidence);\n if (!Array.isArray(value.evidence) || value.evidence.length === 0) {\n throw new Error(`${source}.evidence must contain at least one evidence item.`);\n }\n for (const [index, evidence] of value.evidence.entries()) {\n optionalEvidence(evidence, `${source}.evidence[${index}]`);\n }\n optionalString(value.id, `${source}.id`);\n optionalString(value.ruleId, `${source}.ruleId`);\n optionalString(value.groupKey, `${source}.groupKey`);\n optionalStringArray(value.tags, `${source}.tags`);\n optionalRemediation(value.remediation, `${source}.remediation`);\n}\n\nfunction assertReviewNote(value: ReviewNoteInput, source: string): void {\n requireString(value.key, `${source}.key`);\n requireString(value.summary, `${source}.summary`);\n if (value.evidence !== undefined) {\n for (const [index, evidence] of value.evidence.entries()) {\n optionalEvidence(evidence, `${source}.evidence[${index}]`);\n }\n }\n}\n\nfunction assertReviewScore(value: ReviewScore): void {\n requireString(value.key, \"ctx.review.score.key\");\n if (typeof value.score !== \"number\" || !Number.isFinite(value.score)) {\n throw new Error(\"ctx.review.score.score must be a finite number.\");\n }\n if (value.max !== undefined && (typeof value.max !== \"number\" || !Number.isFinite(value.max))) {\n throw new Error(\"ctx.review.score.max must be a finite number.\");\n }\n if (value.score < 0) {\n throw new Error(\"ctx.review.score.score must be greater than or equal to zero.\");\n }\n if (value.max !== undefined && (value.max <= 0 || value.score > value.max)) {\n throw new Error(\"ctx.review.score.max must be positive and no smaller than score.\");\n }\n optionalString(value.label, \"ctx.review.score.label\");\n optionalString(value.summary, \"ctx.review.score.summary\");\n}\n\nfunction assertAssessment(value: ReviewAssessment): void {\n if (![\"none\", \"low\", \"medium\", \"high\", \"critical\"].includes(value.risk)) {\n throw new Error(\"ctx.review.assessment.risk must be one of none, low, medium, high, critical.\");\n }\n optionalString(value.summary, \"ctx.review.assessment.summary\");\n}\n\nfunction assertOpinion(value: ReviewOpinion): void {\n requireString(value.summary, \"ctx.review.opinion.summary\");\n}\n\nfunction assertRuleDefinition(rule: RuleDefinition): void {\n requireString(rule.id, \"rule.id\");\n optionalString(rule.category, \"rule.category\");\n if (rule.defaultSeverity !== undefined && !isSeverity(rule.defaultSeverity)) {\n throw new Error(\"rule.defaultSeverity must be one of info, low, medium, high, critical.\");\n }\n if (rule.defaultConfidence !== undefined) {\n normalizeConfidence(rule.defaultConfidence);\n }\n optionalStringArray(rule.groupBy, \"rule.groupBy\");\n if (rule.aggregate !== undefined && typeof rule.aggregate !== \"function\") {\n throw new Error(\"rule.aggregate must be a function.\");\n }\n}\n\nfunction assertReviewPolicy(policy: ReviewPolicy, source: string): void {\n if (policy.minimumConfidence !== undefined && !isConfidence(policy.minimumConfidence)) {\n throw new Error(`${source}.minimumConfidence must be one of low, medium, high.`);\n }\n if (\n policy.maximumFindings !== undefined &&\n (!Number.isInteger(policy.maximumFindings) || policy.maximumFindings < 0)\n ) {\n throw new Error(`${source}.maximumFindings must be a non-negative integer.`);\n }\n if (policy.confidenceThresholds !== undefined) {\n const { medium, high } = policy.confidenceThresholds;\n if (medium < 0 || high > 1 || medium > high) {\n throw new Error(`${source}.confidenceThresholds must satisfy 0 <= medium <= high <= 1.`);\n }\n }\n for (const [ruleId, severity] of Object.entries(policy.severityOverrides ?? {})) {\n if (!isSeverity(severity)) {\n throw new Error(`${source}.severityOverrides[\"${ruleId}\"] is not a valid severity.`);\n }\n }\n}\n\nfunction optionalRemediation(value: Remediation | undefined, field: string): void {\n if (value === undefined) return;\n if (!isRecord(value)) throw new Error(`${field} must be an object.`);\n if (\n value.complexity !== undefined &&\n (typeof value.complexity !== \"string\" ||\n ![\"trivial\", \"small\", \"medium\", \"large\", \"architectural\"].includes(value.complexity))\n ) {\n throw new Error(`${field}.complexity is invalid.`);\n }\n}\n\nfunction requireObservationTitle(value: ObservationTitle, field: string): void {\n if (typeof value === \"string\") {\n requireString(value, field);\n return;\n }\n if (!isRecord(value)) {\n throw new Error(`${field} must be a string or { singular, plural }.`);\n }\n requireString(value.singular, `${field}.singular`);\n requireString(value.plural, `${field}.plural`);\n}\n\nfunction optionalObservationSummary(value: ObservationSummary | undefined, field: string): void {\n if (value === undefined) {\n return;\n }\n if (typeof value === \"string\") {\n optionalString(value, field);\n return;\n }\n if (!isRecord(value)) {\n throw new Error(`${field} must be a string or { singular, grouped }.`);\n }\n optionalString(value.singular, `${field}.singular`);\n optionalString(value.grouped, `${field}.grouped`);\n}\n\nfunction optionalEvidence(value: EvidenceInput | Evidence | undefined, field: string): void {\n if (value === undefined) {\n return;\n }\n if (!isRecord(value)) {\n throw new Error(`${field} must be an object.`);\n }\n const input = value as EvidenceInput;\n optionalString(input.file, `${field}.file`);\n optionalPositiveInteger(input.line, `${field}.line`);\n optionalPositiveInteger(input.endLine, `${field}.endLine`);\n optionalString(value.message, `${field}.message`);\n optionalString(value.snippet, `${field}.snippet`);\n optionalString(value.label, `${field}.label`);\n if (value.location !== undefined) {\n if (!isRecord(value.location)) {\n throw new Error(`${field}.location must be an object.`);\n }\n optionalString(value.location.file, `${field}.location.file`);\n optionalPositiveInteger(value.location.line, `${field}.location.line`);\n optionalPositiveInteger(value.location.endLine, `${field}.location.endLine`);\n }\n const line = value.location?.line ?? input.line;\n const endLine = value.location?.endLine ?? input.endLine;\n if (endLine !== undefined && line === undefined) {\n throw new Error(`${field}.endLine requires line.`);\n }\n if (endLine !== undefined && line !== undefined && endLine < line) {\n throw new Error(`${field}.endLine must not precede line.`);\n }\n if (value.data !== undefined && !isRecord(value.data)) {\n throw new Error(`${field}.data must be an object.`);\n }\n if (input.metadata !== undefined && !isRecord(input.metadata)) {\n throw new Error(`${field}.metadata must be an object.`);\n }\n}\n\nfunction writeLog(level: \"debug\" | \"info\" | \"warn\" | \"error\", message: unknown): void {\n process.stderr.write(`[adversary] ${level}: ${String(message)}\\n`);\n}\n\nfunction parseBooleanEnv(value: string | undefined): boolean | undefined {\n if (value === undefined || value.length === 0) {\n return undefined;\n }\n return [\"1\", \"true\", \"TRUE\", \"yes\", \"YES\"].includes(value);\n}\n\nfunction isVerbose(): boolean {\n return verboseValues.has(process.env.ADVERSARY_VERBOSE ?? \"\");\n}\n\nfunction compareStrings(left: string, right: string): number {\n return left.localeCompare(right);\n}\n\nfunction compareNumbers(left: number | undefined, right: number | undefined): number {\n return (left ?? Number.MAX_SAFE_INTEGER) - (right ?? Number.MAX_SAFE_INTEGER);\n}\n\nfunction toPosixPath(path: string): string {\n return path.replaceAll(\"\\\\\", \"/\");\n}\n\nfunction basename(path: string): string {\n return path.split(\"/\").at(-1) ?? path;\n}\n\nfunction requireString(value: unknown, field: string): void {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`${field} must be a non-empty string.`);\n }\n}\n\nfunction optionalString(value: unknown, field: string): void {\n if (value !== undefined && typeof value !== \"string\") {\n throw new Error(`${field} must be a string.`);\n }\n}\n\nfunction optionalStringArray(value: unknown, field: string): void {\n if (\n value !== undefined &&\n (!Array.isArray(value) || value.some((item) => typeof item !== \"string\"))\n ) {\n throw new Error(`${field} must be an array of strings.`);\n }\n}\n\nfunction optionalPositiveInteger(value: unknown, field: string): void {\n if (value !== undefined && (!Number.isInteger(value) || Number(value) < 1)) {\n throw new Error(`${field} must be a positive integer.`);\n }\n}\n\nfunction isConfidence(value: unknown): value is Confidence {\n return value === Confidence.Low || value === Confidence.Medium || value === Confidence.High;\n}\n\nfunction isSeverity(value: unknown): value is Severity {\n return (\n value === Severity.Info ||\n value === Severity.Low ||\n value === Severity.Medium ||\n value === Severity.High ||\n value === Severity.Critical\n );\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.length > 0;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction stringFromUnknown(value: unknown): string | undefined {\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction capitalize(value: string): string {\n return `${value.slice(0, 1).toUpperCase()}${value.slice(1)}`;\n}\n\nconst semanticStopWords = new Set([\n \"a\",\n \"an\",\n \"and\",\n \"are\",\n \"as\",\n \"from\",\n \"in\",\n \"is\",\n \"of\",\n \"the\",\n \"to\",\n \"uses\",\n \"using\",\n]);\n\nfunction formatEvidenceLocation(evidence: Evidence): string {\n const file = evidence.location?.file;\n const line = evidence.location?.line;\n const endLine = evidence.location?.endLine;\n\n if (file === undefined) {\n return \"\";\n }\n if (line !== undefined && endLine !== undefined) {\n return `${file}:${line}-${endLine}`;\n }\n if (line !== undefined) {\n return `${file}:${line}`;\n }\n return file;\n}\n\nfunction formatEvidenceLines(evidence: Evidence): string[] {\n const location = formatEvidenceLocation(evidence);\n const label = evidence.label ?? evidence.message;\n const firstLine =\n location.length > 0 && label !== undefined\n ? `- ${location} — ${label}`\n : `- ${location.length > 0 ? location : (label ?? \"Evidence\")}`;\n const lines = [firstLine];\n\n if (evidence.snippet !== undefined) {\n lines.push(` ${evidence.snippet}`);\n }\n\n return lines;\n}\n\nfunction formatScore(score: ReviewScore): string {\n const label = score.label ?? score.key;\n const max = score.max ?? 10;\n const summary = score.summary === undefined ? \"\" : ` - ${normalizeParagraph(score.summary)}`;\n return `${label}: ${score.score} / ${max}${summary}`;\n}\n\nfunction normalizeParagraph(value: string): string {\n return value\n .split(/\\n+/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .join(\" \");\n}\n\nfunction trimTrailingSentencePunctuation(value: string): string {\n return value.trim().replace(/[.!?]+$/g, \"\");\n}\n\nfunction lowercaseFirst(value: string): string {\n return `${value.slice(0, 1).toLowerCase()}${value.slice(1)}`;\n}\n\nfunction omitUndefined<T extends Record<string, unknown>>(value: T): T {\n return Object.fromEntries(\n Object.entries(value).filter(([, entryValue]) => entryValue !== undefined),\n ) as T;\n}\n"]}
|