@adversarylabs/sdk 0.1.7 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -98,6 +98,7 @@ Registers a rule. Rules report through `ctx.observe(...)`, `ctx.finding(...)`, a
98
98
  Rule context exposes:
99
99
 
100
100
  - `ctx.repoPath`
101
+ - `ctx.change`
101
102
  - `ctx.summary`
102
103
  - `ctx.cache`
103
104
  - `ctx.relpath(path)`
@@ -110,6 +111,30 @@ Rule context exposes:
110
111
  - `ctx.review.observe(note)`
111
112
  - `ctx.review.opinion(opinion)`
112
113
 
114
+ ### `ctx.change`
115
+
116
+ The requested review scope, normalized from the runtime input's `change` block. Honor it instead
117
+ of inferring scope from Git state: the runner has already resolved what should be reviewed.
118
+
119
+ - `null` — review the entire target; the runner provided no change context (for example
120
+ `--all-files` with no refs, or a non-Git target).
121
+ - `scanMode: "all"` — review the entire target; change metadata is still available.
122
+ - `scanMode: "changed"` — review only the change from `baseRef` to `headRef`.
123
+
124
+ `changedFiles` lists the repository-relative paths the runner identified as changed. `worktree` is
125
+ true when the reviewed head is the uncommitted worktree (`headRef` is the `WORKTREE` sentinel,
126
+ exported as `WORKTREE_HEAD_REF`).
127
+
128
+ ```ts
129
+ app.rule("scoped", async (ctx) => {
130
+ if (ctx.change === null || ctx.change.scanMode === "all") {
131
+ // Review every file in ctx.repoPath.
132
+ } else {
133
+ // Review only ctx.change.changedFiles against ctx.change.baseRef.
134
+ }
135
+ });
136
+ ```
137
+
113
138
  ### `app.defineRule(definition)`
114
139
 
115
140
  Registers domain-specific aggregation for a stable rule id. The SDK still owns grouping,
package/dist/index.d.ts CHANGED
@@ -205,17 +205,51 @@ export interface WireReviewResult extends Omit<ReviewResult, "positives" | "obse
205
205
  findings: WireReviewFinding[];
206
206
  suppressedFindings?: WireReviewFinding[];
207
207
  }
208
+ /** Sentinel head_ref used when the reviewed head is the uncommitted worktree. */
209
+ export declare const WORKTREE_HEAD_REF = "WORKTREE";
210
+ /** The change block of adversary.input.v1 as written by the runner. */
211
+ export interface RuntimeChange {
212
+ type?: string;
213
+ base_ref?: string;
214
+ head_ref?: string;
215
+ scan_mode?: string;
216
+ changed_files?: string[];
217
+ [key: string]: unknown;
218
+ }
208
219
  export interface RuntimeInput {
209
220
  source: {
210
221
  path: string;
211
222
  };
223
+ change?: RuntimeChange | null;
212
224
  [key: string]: unknown;
213
225
  }
226
+ /** The requested review scope, normalized from the runtime input's change block. */
227
+ export interface ChangeContext {
228
+ /** Change representation reported by the runner; "diff" today. */
229
+ readonly type?: string;
230
+ /** Base revision of the reviewed change. */
231
+ readonly baseRef?: string;
232
+ /** Head revision of the reviewed change, or the WORKTREE sentinel. */
233
+ readonly headRef?: string;
234
+ /** "changed" restricts review to the change; "all" requests the entire target. */
235
+ readonly scanMode: "changed" | "all";
236
+ /** Repository-relative paths the runner identified as changed. */
237
+ readonly changedFiles: readonly string[];
238
+ /** True when the reviewed head is the uncommitted worktree. */
239
+ readonly worktree: boolean;
240
+ }
214
241
  export interface Summary {
215
242
  files_scanned?: number;
216
243
  }
217
244
  export interface RuleContext {
218
245
  repoPath: string;
246
+ /**
247
+ * The requested review scope. Null when the runner asked for a full-target
248
+ * review without a change context; when present, scanMode distinguishes
249
+ * reviewing only the change ("changed") from reviewing the entire target
250
+ * with change metadata available ("all").
251
+ */
252
+ change: ChangeContext | null;
219
253
  summary: Summary;
220
254
  cache: Map<string, unknown>;
221
255
  relpath: (path: string) => string;
@@ -318,4 +352,5 @@ export declare class TerminalRenderer implements ReviewRenderer {
318
352
  constructor(write?: (text: string) => void);
319
353
  render(result: ReviewResult): void;
320
354
  }
355
+ export declare function normalizeChangeContext(change: RuntimeChange | null | undefined): ChangeContext | null;
321
356
  //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -45,6 +45,8 @@ export const DEFAULT_CONFIDENCE_THRESHOLDS = {
45
45
  medium: 0.6,
46
46
  high: 0.85,
47
47
  };
48
+ /** Sentinel head_ref used when the reviewed head is the uncommitted worktree. */
49
+ export const WORKTREE_HEAD_REF = "WORKTREE";
48
50
  export class RuleRegistry {
49
51
  rules = new Map();
50
52
  register(rule) {
@@ -169,7 +171,7 @@ export class Adversary {
169
171
  const cache = new Map();
170
172
  const collector = createReviewCollector();
171
173
  const registry = this.ruleDefinitions.snapshot();
172
- const context = createRuleContext(repoPath, summary, cache, collector, registry);
174
+ const context = createRuleContext(repoPath, normalizeChangeContext(options.input.change), summary, cache, collector, registry);
173
175
  const includeSuppressed = options.includeSuppressed;
174
176
  for (const rule of this.rules) {
175
177
  log.debug(`running rule ${rule.id}`);
@@ -277,6 +279,26 @@ export async function parseInput(path = DEFAULT_INPUT_PATH) {
277
279
  if (typeof parsed.source.path !== "string" || parsed.source.path.length === 0) {
278
280
  throw new Error(`Invalid input at ${path}: source.path must be a non-empty string.`);
279
281
  }
282
+ if (parsed.change !== undefined && parsed.change !== null) {
283
+ if (!isRecord(parsed.change)) {
284
+ throw new Error(`Invalid input at ${path}: change must be an object or null.`);
285
+ }
286
+ for (const field of ["type", "base_ref", "head_ref", "scan_mode"]) {
287
+ const value = parsed.change[field];
288
+ if (value !== undefined && typeof value !== "string") {
289
+ throw new Error(`Invalid input at ${path}: change.${field} must be a string.`);
290
+ }
291
+ }
292
+ const scanMode = parsed.change.scan_mode;
293
+ if (scanMode !== undefined && scanMode !== "changed" && scanMode !== "all") {
294
+ throw new Error(`Invalid input at ${path}: change.scan_mode must be "changed" or "all".`);
295
+ }
296
+ const changedFiles = parsed.change.changed_files;
297
+ if (changedFiles !== undefined &&
298
+ (!Array.isArray(changedFiles) || changedFiles.some((item) => typeof item !== "string"))) {
299
+ throw new Error(`Invalid input at ${path}: change.changed_files must be an array of strings.`);
300
+ }
301
+ }
280
302
  return parsed;
281
303
  }
282
304
  export async function writeOutput(output, path = DEFAULT_OUTPUT_PATH) {
@@ -424,10 +446,28 @@ export class TerminalRenderer {
424
446
  this.write(`${lines.join("\n").trimEnd()}\n`);
425
447
  }
426
448
  }
427
- function createRuleContext(repoPath, summary, cache, collector, registry) {
449
+ export function normalizeChangeContext(change) {
450
+ if (change === undefined || change === null) {
451
+ return null;
452
+ }
453
+ const scanMode = change.scan_mode ?? "changed";
454
+ if (scanMode !== "changed" && scanMode !== "all") {
455
+ throw new Error(`Unsupported change scan_mode "${change.scan_mode}".`);
456
+ }
457
+ return Object.freeze({
458
+ ...(change.type === undefined ? {} : { type: change.type }),
459
+ ...(change.base_ref === undefined ? {} : { baseRef: change.base_ref }),
460
+ ...(change.head_ref === undefined ? {} : { headRef: change.head_ref }),
461
+ scanMode,
462
+ changedFiles: Object.freeze([...(change.changed_files ?? [])]),
463
+ worktree: change.head_ref === WORKTREE_HEAD_REF,
464
+ });
465
+ }
466
+ function createRuleContext(repoPath, change, summary, cache, collector, registry) {
428
467
  const absoluteRepoPath = resolve(repoPath);
429
468
  return {
430
469
  repoPath: absoluteRepoPath,
470
+ change,
431
471
  summary,
432
472
  cache,
433
473
  relpath(path) {
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\";\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\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\nexport interface RuntimeInput {\n source: {\n path: string;\n };\n [key: string]: unknown;\n}\n\nexport interface Summary {\n files_scanned?: number;\n}\n\nexport interface RuleContext {\n repoPath: string;\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 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 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 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 context = createRuleContext(repoPath, summary, cache, collector, registry);\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 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 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 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\nexport class TerminalRenderer implements ReviewRenderer {\n constructor(\n private readonly write: (text: string) => void = (text) => process.stdout.write(text),\n ) {}\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: ${result.target.repository}`);\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 const scoreNotes = result.observations.filter(isScoreReviewNote);\n const additionalObservations = result.observations.filter((note) => !isScoreReviewNote(note));\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 (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 if (additionalObservations.length > 0) {\n lines.push(\"Additional observations\", \"\");\n for (const observation of additionalObservations) {\n lines.push(`- ${normalizeParagraph(observation.summary)}`);\n }\n lines.push(\"\");\n }\n\n const primary = result.findings[0];\n if (primary !== undefined) {\n lines.push(\"Primary opportunity\", \"\");\n lines.push(`- ${primary.title.endsWith(\".\") ? primary.title : `${primary.title}.`}`, \"\");\n }\n\n if (result.opinion !== undefined) {\n lines.push(\"Overall opinion\", \"\", normalizeParagraph(result.opinion.summary), \"\");\n }\n\n lines.push(\"Scan complete\", \"\");\n if (result.target.filesScanned !== undefined) {\n lines.push(`Files scanned: ${result.target.filesScanned}`);\n }\n lines.push(`Findings: ${result.findings.length}`, \"\");\n\n for (const finding of result.findings) {\n lines.push(`[${finding.severity}] ${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 for (const evidence of finding.evidence) {\n lines.push(...formatEvidenceLines(evidence));\n }\n lines.push(\"\");\n }\n\n if (finding.recommendation !== undefined) {\n lines.push(\"Recommendation\", \"\", normalizeParagraph(finding.recommendation), \"\");\n }\n }\n\n this.write(`${lines.join(\"\\n\").trimEnd()}\\n`);\n }\n}\n\nfunction createRuleContext(\n repoPath: string,\n summary: Summary,\n cache: Map<string, unknown>,\n collector: ReviewCollector,\n registry: RuleRegistry,\n): RuleContext {\n const absoluteRepoPath = resolve(repoPath);\n\n return {\n repoPath: absoluteRepoPath,\n summary,\n cache,\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 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),\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 const isClause =\n /\\b(?:allows|are|builds|can|contains|copies|could|did|do|does|exposes|has|have|includes|installs|is|lacks|may|might|must|reads|references|relies|requires|runs|uses|was|were|writes)\\b/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\nfunction synthesizeOpinion(findings: ReviewFinding[]): ReviewOpinion | undefined {\n if (findings.length === 0) {\n return {\n ship: true,\n summary: \"I would ship this as-is.\",\n };\n }\n\n const highestSeverity = highestFindingSeverity(findings);\n const ship = severityWeight(highestSeverity) < severityWeight(Severity.High);\n\n if (findings.length > 1) {\n return {\n ship,\n summary: \"I would address the remaining findings before production.\",\n };\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 ? `I would ship this as-is. ${improvement} is the only improvement I would recommend before production.`\n : `${improvement} is the most important improvement to address before production.`,\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\";\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\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 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 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 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 context = createRuleContext(\n repoPath,\n normalizeChangeContext(options.input.change),\n summary,\n cache,\n collector,\n registry,\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 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 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\nexport class TerminalRenderer implements ReviewRenderer {\n constructor(\n private readonly write: (text: string) => void = (text) => process.stdout.write(text),\n ) {}\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: ${result.target.repository}`);\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 const scoreNotes = result.observations.filter(isScoreReviewNote);\n const additionalObservations = result.observations.filter((note) => !isScoreReviewNote(note));\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 (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 if (additionalObservations.length > 0) {\n lines.push(\"Additional observations\", \"\");\n for (const observation of additionalObservations) {\n lines.push(`- ${normalizeParagraph(observation.summary)}`);\n }\n lines.push(\"\");\n }\n\n const primary = result.findings[0];\n if (primary !== undefined) {\n lines.push(\"Primary opportunity\", \"\");\n lines.push(`- ${primary.title.endsWith(\".\") ? primary.title : `${primary.title}.`}`, \"\");\n }\n\n if (result.opinion !== undefined) {\n lines.push(\"Overall opinion\", \"\", normalizeParagraph(result.opinion.summary), \"\");\n }\n\n lines.push(\"Scan complete\", \"\");\n if (result.target.filesScanned !== undefined) {\n lines.push(`Files scanned: ${result.target.filesScanned}`);\n }\n lines.push(`Findings: ${result.findings.length}`, \"\");\n\n for (const finding of result.findings) {\n lines.push(`[${finding.severity}] ${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 for (const evidence of finding.evidence) {\n lines.push(...formatEvidenceLines(evidence));\n }\n lines.push(\"\");\n }\n\n if (finding.recommendation !== undefined) {\n lines.push(\"Recommendation\", \"\", normalizeParagraph(finding.recommendation), \"\");\n }\n }\n\n this.write(`${lines.join(\"\\n\").trimEnd()}\\n`);\n }\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): RuleContext {\n const absoluteRepoPath = resolve(repoPath);\n\n return {\n repoPath: absoluteRepoPath,\n change,\n summary,\n cache,\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 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),\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 const isClause =\n /\\b(?:allows|are|builds|can|contains|copies|could|did|do|does|exposes|has|have|includes|installs|is|lacks|may|might|must|reads|references|relies|requires|runs|uses|was|were|writes)\\b/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\nfunction synthesizeOpinion(findings: ReviewFinding[]): ReviewOpinion | undefined {\n if (findings.length === 0) {\n return {\n ship: true,\n summary: \"I would ship this as-is.\",\n };\n }\n\n const highestSeverity = highestFindingSeverity(findings);\n const ship = severityWeight(highestSeverity) < severityWeight(Severity.High);\n\n if (findings.length > 1) {\n return {\n ship,\n summary: \"I would address the remaining findings before production.\",\n };\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 ? `I would ship this as-is. ${improvement} is the only improvement I would recommend before production.`\n : `${improvement} is the most important improvement to address before production.`,\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adversarylabs/sdk",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "Small TypeScript SDK for authoring Adversaries.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -16,6 +16,37 @@
16
16
  "minLength": 1
17
17
  }
18
18
  }
19
+ },
20
+ "change": {
21
+ "type": ["object", "null"],
22
+ "additionalProperties": true,
23
+ "description": "The requested review scope. Null or absent when the runner asked for a full-target review without a change context.",
24
+ "properties": {
25
+ "type": {
26
+ "type": "string",
27
+ "description": "Change representation reported by the runner; \"diff\" today."
28
+ },
29
+ "base_ref": {
30
+ "type": "string",
31
+ "description": "Base revision of the reviewed change."
32
+ },
33
+ "head_ref": {
34
+ "type": "string",
35
+ "description": "Head revision of the reviewed change, or the WORKTREE sentinel for the uncommitted worktree."
36
+ },
37
+ "scan_mode": {
38
+ "type": "string",
39
+ "enum": ["changed", "all"],
40
+ "description": "\"changed\" restricts review to the change; \"all\" requests the entire target."
41
+ },
42
+ "changed_files": {
43
+ "type": "array",
44
+ "items": {
45
+ "type": "string"
46
+ },
47
+ "description": "Repository-relative paths the runner identified as changed."
48
+ }
49
+ }
19
50
  }
20
51
  }
21
52
  }