@adversarylabs/sdk 0.1.43 → 0.1.45
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 +76 -0
- package/dist/candidate-recovery.d.ts +1 -1
- package/dist/candidate-recovery.d.ts.map +1 -1
- package/dist/candidate-recovery.js.map +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +108 -5
- package/dist/index.js.map +1 -1
- package/dist/model.d.ts +26 -0
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +127 -2
- package/dist/model.js.map +1 -1
- package/dist/repository-model.d.ts.map +1 -1
- package/dist/repository-model.js +293 -21
- package/dist/repository-model.js.map +1 -1
- package/dist/review-sources.d.ts +34 -0
- package/dist/review-sources.d.ts.map +1 -0
- package/dist/review-sources.js +195 -0
- package/dist/review-sources.js.map +1 -0
- package/package.json +1 -1
- package/schemas/adversary.review.v1.schema.json +76 -0
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# adversary-sdk-typescript
|
|
2
2
|
|
|
3
|
+
[](https://coverart.dev/doomerlabs/doomer-sdk-typescript)
|
|
4
|
+
|
|
3
5
|
Small TypeScript SDK for building file-based Adversaries.
|
|
4
6
|
|
|
5
7
|
The SDK owns the runtime boilerplate: read runtime input, discover the source repository path,
|
|
@@ -1236,3 +1238,77 @@ findings. The final coverage guard cannot be overwritten by a later clean opinio
|
|
|
1236
1238
|
This API is opt-in. Consumers must replace whole-response validators that throw
|
|
1237
1239
|
because of one candidate; upgrading the dependency alone does not adopt recovery.
|
|
1238
1240
|
Composed reviews must propagate incomplete coverage from their children.
|
|
1241
|
+
|
|
1242
|
+
### Reporting review evidence sources
|
|
1243
|
+
|
|
1244
|
+
Use `ctx.review.source(...)` to register the output of a scanner or an artifact
|
|
1245
|
+
reader, including successful runs with no findings. Sources appear on the review
|
|
1246
|
+
Sources page independently of findings. Re-reporting the same ID updates that
|
|
1247
|
+
invocation; use different IDs for distinct invocations or environments.
|
|
1248
|
+
|
|
1249
|
+
```ts
|
|
1250
|
+
app.rule("workflow-lint", async (ctx) => {
|
|
1251
|
+
ctx.review.source({
|
|
1252
|
+
id: "actionlint:workflows",
|
|
1253
|
+
kind: "tool",
|
|
1254
|
+
title: "Actionlint",
|
|
1255
|
+
status: "passed",
|
|
1256
|
+
summary: "Checked two workflows; no diagnostics.",
|
|
1257
|
+
version: "1.7.7",
|
|
1258
|
+
scope: [".github/workflows/build.yml", ".github/workflows/release.yml"],
|
|
1259
|
+
output: "No diagnostics.",
|
|
1260
|
+
});
|
|
1261
|
+
});
|
|
1262
|
+
```
|
|
1263
|
+
|
|
1264
|
+
For findings, add `sourceIds: ["actionlint:workflows"]` to `ctx.finding(...)` or
|
|
1265
|
+
`ctx.observe(...)`. IDs must reference sources reported by the same run. They
|
|
1266
|
+
are namespaced by the runner when combining adversaries. Optional `data` holds
|
|
1267
|
+
structured JSON results; `headSha` and an HTTP(S) `url` capture artifact provenance.
|
|
1268
|
+
|
|
1269
|
+
Statuses are `passed` (completed without issues), `findings` (completed with
|
|
1270
|
+
issues), `error`, `partial`, and `unavailable`. Never label an unexecuted scanner
|
|
1271
|
+
as passed. Missing evidence should still be reported using the appropriate
|
|
1272
|
+
status; the platform records incomplete source coverage separately from findings.
|
|
1273
|
+
|
|
1274
|
+
The SDK accepts at most 32 sources per run. Source text and structured output
|
|
1275
|
+
share a 32 KiB UTF-8 budget. Structured data that fits is retained, shortening
|
|
1276
|
+
text output to the remaining budget. Data larger than the entire budget is
|
|
1277
|
+
omitted rather than serialized as broken JSON. `truncated` is set whenever output or metadata is
|
|
1278
|
+
shortened. Source titles, summaries and scope also have bounded lengths. The
|
|
1279
|
+
combined protocol supports up to 256 sources. `createAdversaryRunEnvelope` also
|
|
1280
|
+
normalizes sources in manually constructed results, and `validateRunEnvelope`
|
|
1281
|
+
enforces the combined output/data byte budget in addition to JSON Schema's
|
|
1282
|
+
character limits. Both helpers also reject dangling or malformed source IDs
|
|
1283
|
+
in active and suppressed findings, and reject duplicate source IDs. The
|
|
1284
|
+
constructor deduplicates valid finding references.
|
|
1285
|
+
|
|
1286
|
+
Invalid source metadata throws `ReviewSourceValidationError` (exported by the
|
|
1287
|
+
SDK) with code `invalid_review_source`, a field label such as
|
|
1288
|
+
`ctx.review.source.url`, and the source ID when it is valid. Parser failures do
|
|
1289
|
+
not include raw URLs or credential values in error messages. Exceeding the
|
|
1290
|
+
32-source limit throws `ReviewSourceCapacityError` with code
|
|
1291
|
+
`review_source_capacity_exceeded`.
|
|
1292
|
+
|
|
1293
|
+
**Remove secrets before reporting any output or URL.** The SDK additionally
|
|
1294
|
+
redacts common credential keys, assignments and bearer tokens in raw output,
|
|
1295
|
+
structured data and URLs. Display metadata is preserved rather than guessed to
|
|
1296
|
+
be credentials. Raw-text redaction is heuristic and may over-redact ambiguous
|
|
1297
|
+
assignments; it cannot identify every domain-specific secret. Output is evidence, never instructions
|
|
1298
|
+
or executable HTML. The `sources` and `sourceIds` fields are optional, preserving
|
|
1299
|
+
legacy reviews. Deploy a runner supporting these fields before releasing an
|
|
1300
|
+
adversary that emits them; older strict protocol decoders reject unknown fields.
|
|
1301
|
+
|
|
1302
|
+
### Optional attention-routing classification
|
|
1303
|
+
|
|
1304
|
+
A host can opt a reviewer into typed System 1 decisions with
|
|
1305
|
+
`ADVERSARY_ATTENTION_SYSTEM1=1` and an authenticated `/v1/choices` broker route.
|
|
1306
|
+
Only then does the environment-created model expose `classify`. The SDK can use
|
|
1307
|
+
that capability for bounded repository-read selection and explicit configuration
|
|
1308
|
+
selection; final review generation and uncertain decisions retain their existing
|
|
1309
|
+
paths. Ordinary models do not expose the capability and keep the existing
|
|
1310
|
+
retrieval, review, and opinion behavior.
|
|
1311
|
+
|
|
1312
|
+
This is a host-controlled capability, not a setting to read from a reviewed
|
|
1313
|
+
repository. An unavailable or uncertain classification preserves generative
|
|
1314
|
+
fallback; a host policy rejection is propagated rather than bypassed.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { RuleContext } from "./index.js";
|
|
2
2
|
import { type ModelReviewRequest } from "./model.js";
|
|
3
3
|
export declare const INCOMPLETE_REVIEW_SUMMARY = "Review completed with limited coverage. Supported findings are retained; no whole-change clean opinion is available.";
|
|
4
|
-
export type ReviewIncompleteReason = "candidate_validation" | "assessment_validation";
|
|
4
|
+
export type ReviewIncompleteReason = "candidate_validation" | "assessment_validation" | "source_coverage";
|
|
5
5
|
export interface CandidateValidationIssue {
|
|
6
6
|
field: string;
|
|
7
7
|
code: "missing" | "invalid_type" | "invalid_value" | "too_short" | "too_long" | "placeholder" | "repetition";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"candidate-recovery.d.ts","sourceRoot":"","sources":["../src/candidate-recovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAoB,KAAK,kBAAkB,EAAyB,MAAM,YAAY,CAAC;AAG9F,eAAO,MAAM,yBAAyB,yHACkF,CAAC;AAEzH,MAAM,MAAM,sBAAsB,
|
|
1
|
+
{"version":3,"file":"candidate-recovery.d.ts","sourceRoot":"","sources":["../src/candidate-recovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAoB,KAAK,kBAAkB,EAAyB,MAAM,YAAY,CAAC;AAG9F,eAAO,MAAM,yBAAyB,yHACkF,CAAC;AAEzH,MAAM,MAAM,sBAAsB,GAC9B,sBAAsB,GACtB,uBAAuB,GACvB,iBAAiB,CAAC;AACtB,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EACA,SAAS,GACT,cAAc,GACd,eAAe,GACf,WAAW,GACX,UAAU,GACV,aAAa,GACb,YAAY,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AACD,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,MAAM;IACxD,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;IACzB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC;IAClC,qFAAqF;IACrF,QAAQ,CACN,SAAS,EAAE,CAAC,GACX,SAAS,wBAAwB,EAAE,GAAG,OAAO,CAAC,SAAS,wBAAwB,EAAE,CAAC,CAAC;IACtF,MAAM,CAAC,EAAE;QACP,2FAA2F;QAC3F,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,EAAE;YACb,SAAS,EAAE,CAAC,CAAC;YACb,MAAM,EAAE,SAAS,wBAAwB,EAAE,CAAC;YAC5C,kBAAkB,EAAE,MAAM,CAAC;SAC5B,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;KACpC,CAAC;IACF,kEAAkE;IAClE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AACD,MAAM,WAAW,uBAAuB,CAAC,CAAC;IACxC,UAAU,EAAE,CAAC,EAAE,CAAC;IAChB,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,wBAAwB,EAAE,CAAA;KAAE,EAAE,CAAC;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wFAAwF;AACxF,wBAAsB,uBAAuB,CAAC,CAAC,SAAS,MAAM,EAC5D,OAAO,EAAE;IACP,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC5C,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC;CACnD,EACD,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC,GACnC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAiHrC;AAED,wFAAwF;AACxF,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACvE,wBAAwB,EAAE,CAoC5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"candidate-recovery.js","sourceRoot":"","sources":["../src/candidate-recovery.ts"],"names":[],"mappings":"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","sourcesContent":["import type { RuleContext } from \"./index.js\";\nimport { ModelReviewError, type ModelReviewRequest, ModelUnavailableError } from \"./model.js\";\nimport { writeRepositoryDiagnostic } from \"./repository-diagnostics.js\";\n\nexport const INCOMPLETE_REVIEW_SUMMARY =\n \"Review completed with limited coverage. Supported findings are retained; no whole-change clean opinion is available.\";\n\nexport type ReviewIncompleteReason = \"candidate_validation\" | \"assessment_validation\";\nexport interface CandidateValidationIssue {\n field: string;\n code:\n | \"missing\"\n | \"invalid_type\"\n | \"invalid_value\"\n | \"too_short\"\n | \"too_long\"\n | \"placeholder\"\n | \"repetition\";\n actualLength?: number;\n minimumLength?: number;\n maximumLength?: number;\n}\nexport interface CandidateRecoveryOptions<T extends object> {\n candidates: readonly T[];\n /** Diagnostic identity only. Never include source text. */\n reviewer?: string;\n kind?: \"candidate\" | \"assessment\";\n /** Return content-free issues. Programming errors thrown by validators propagate. */\n validate(\n candidate: T,\n ): readonly CandidateValidationIssue[] | Promise<readonly CandidateValidationIssue[]>;\n repair?: {\n /** Only these rejected top-level fields can change. Identity/evidence remain untouched. */\n fields: readonly (keyof T & string)[];\n request(input: {\n candidate: T;\n issues: readonly CandidateValidationIssue[];\n remainingTimeoutMs: number;\n }): ModelReviewRequest<Partial<T>>;\n };\n /** Total repair calls across the batch, default 2; maximum 10. */\n maximumRepairCalls?: number;\n /** Shared repair deadline, default ten minutes; explicit shorter limits are preserved. */\n timeoutMs?: number;\n}\nexport interface CandidateRecoveryResult<T> {\n candidates: T[];\n withheld: { index: number; issues: readonly CandidateValidationIssue[] }[];\n repaired: number;\n repairCalls: number;\n}\n\n/** Independent validation/recovery; an invalid candidate never discards valid peers. */\nexport async function recoverReviewCandidates<T extends object>(\n context: {\n model: Pick<RuleContext[\"model\"], \"review\">;\n review: Pick<RuleContext[\"review\"], \"incomplete\">;\n },\n options: CandidateRecoveryOptions<T>,\n): Promise<CandidateRecoveryResult<T>> {\n if (options.kind !== undefined && ![\"candidate\", \"assessment\"].includes(options.kind))\n throw new TypeError(\"Invalid candidate recovery kind.\");\n const maximumRepairCalls = options.maximumRepairCalls ?? 2;\n const timeoutMs = options.timeoutMs ?? 600_000;\n if (\n !Number.isInteger(maximumRepairCalls) ||\n maximumRepairCalls < 0 ||\n maximumRepairCalls > 10 ||\n !Number.isInteger(timeoutMs) ||\n timeoutMs < 1 ||\n timeoutMs > 600_000 ||\n options.candidates.length > 100\n ) {\n throw new TypeError(\n \"Candidate recovery requires at most 100 candidates, 0–10 repair calls, and a 1–600000ms deadline.\",\n );\n }\n for (const field of options.repair?.fields ?? []) requireField(field);\n const startedAt = performance.now();\n const result: CandidateRecoveryResult<T> = {\n candidates: [],\n withheld: [],\n repaired: 0,\n repairCalls: 0,\n };\n for (const [index, original] of options.candidates.entries()) {\n let repairAttempted = false;\n let candidate = original;\n let issues = safeIssues(await options.validate(candidate));\n if (issues.length === 0) {\n result.candidates.push(candidate);\n continue;\n }\n diagnostic(options.reviewer, index, issues, 0, \"rejected\");\n const fields = new Set(\n issues\n .map((issue) => issue.field)\n .filter((field) => options.repair?.fields.includes(field as keyof T & string)),\n );\n const remainingTimeoutMs = Math.floor(timeoutMs - (performance.now() - startedAt));\n if (\n options.repair &&\n fields.size > 0 &&\n issues.every((issue) => fields.has(issue.field)) &&\n result.repairCalls < maximumRepairCalls &&\n remainingTimeoutMs > 0\n ) {\n // Request-construction errors are programming errors, not malformed model output.\n const request = options.repair.request({ candidate, issues, remainingTimeoutMs });\n const requestedTimeout = request.budget?.timeoutMs ?? remainingTimeoutMs;\n if (\n !Number.isInteger(requestedTimeout) ||\n requestedTimeout < 1 ||\n requestedTimeout > 600_000\n ) {\n throw new ModelReviewError(\"Invalid candidate repair request timeout.\", {\n code: \"invalid_model_budget\",\n });\n }\n repairAttempted = true;\n result.repairCalls += 1;\n try {\n const { output } = await context.model.review<Partial<T>>({\n ...request,\n budget: { ...request.budget, timeoutMs: Math.min(requestedTimeout, remainingTimeoutMs) },\n });\n if (typeof output !== \"object\" || output === null || Array.isArray(output)) {\n throw new ModelReviewError(\"Candidate repair returned a non-object.\", {\n code: \"invalid_model_output\",\n });\n }\n candidate = { ...original };\n for (const field of fields) {\n if (Object.hasOwn(output, field))\n (candidate as Record<string, unknown>)[field] = (output as Record<string, unknown>)[\n field\n ];\n }\n } catch (error) {\n if (!(error instanceof ModelReviewError) && !(error instanceof ModelUnavailableError))\n throw error;\n if (\n error instanceof ModelReviewError &&\n [\n \"invalid_model_request\",\n \"model_request_too_large\",\n \"invalid_model_schema\",\n \"invalid_model_budget\",\n \"invalid_broker_endpoint\",\n \"invalid_broker_token\",\n ].includes(error.code ?? \"\")\n )\n throw error;\n diagnostic(options.reviewer, index, issues, 1, \"repair_failed\");\n }\n // Validation is outside the model-error catch: never swallow validator bugs.\n issues = safeIssues(await options.validate(candidate));\n if (issues.length === 0) {\n result.repaired += 1;\n result.candidates.push(candidate);\n diagnostic(options.reviewer, index, [], 1, \"repaired\");\n continue;\n }\n }\n result.withheld.push({ index, issues });\n diagnostic(options.reviewer, index, issues, repairAttempted ? 1 : 0, \"withheld\");\n }\n if (result.withheld.length > 0)\n context.review.incomplete(\n options.kind === \"assessment\" ? \"assessment_validation\" : \"candidate_validation\",\n );\n return result;\n}\n\n/** Shared prose checks, with domain-specific length limits supplied by the reviewer. */\nexport function validateReviewText(\n value: unknown,\n options: { field: string; minimumLength: number; maximumLength: number },\n): CandidateValidationIssue[] {\n requireField(options.field);\n const { minimumLength, maximumLength } = options;\n if (\n !Number.isInteger(minimumLength) ||\n minimumLength < 1 ||\n !Number.isInteger(maximumLength) ||\n maximumLength < minimumLength\n )\n throw new TypeError(\"Invalid review text length limits.\");\n const issue = (\n code: CandidateValidationIssue[\"code\"],\n actualLength?: number,\n ): CandidateValidationIssue[] => [\n { ...options, code, ...(actualLength === undefined ? {} : { actualLength }) },\n ];\n if (value == null) return issue(\"missing\");\n if (typeof value !== \"string\") return issue(\"invalid_type\");\n const text = value.trim();\n if (text.length < minimumLength) return issue(\"too_short\", text.length);\n if (text.length > maximumLength) return issue(\"too_long\", text.length);\n if (\n /^(?:assessment|detail|impact|none|placeholder|principle|quote|recommendation|string|summary|title|tradeoffs?)$/i.test(\n text,\n )\n )\n return issue(\"placeholder\", text.length);\n const counts = new Map<string, number>();\n for (const unit of text\n .toLowerCase()\n .split(/(?:\\r?\\n+|(?<=[.!?])\\s+)/)\n .map((unit) => unit.replace(/[.!?]+$/u, \"\").trim())\n .filter((unit) => unit.length >= 2)) {\n counts.set(unit, (counts.get(unit) ?? 0) + 1);\n }\n return [...counts.values()].some((count) => count >= 4) ? issue(\"repetition\", text.length) : [];\n}\n\nfunction requireField(field: string): void {\n if (\n !/^[A-Za-z_][A-Za-z0-9_]{0,63}$/.test(field) ||\n [\"__proto__\", \"constructor\", \"prototype\"].includes(field)\n )\n throw new TypeError(\"Invalid candidate validation field.\");\n}\nfunction safeIssues(issues: readonly CandidateValidationIssue[]): CandidateValidationIssue[] {\n if (issues.length > 32) throw new TypeError(\"Too many candidate validation issues.\");\n return issues.map((issue) => {\n requireField(issue.field);\n if (\n ![\n \"missing\",\n \"invalid_type\",\n \"invalid_value\",\n \"too_short\",\n \"too_long\",\n \"placeholder\",\n \"repetition\",\n ].includes(issue.code)\n )\n throw new TypeError(\"Invalid candidate validation code.\");\n const safe: CandidateValidationIssue = { field: issue.field, code: issue.code };\n for (const key of [\"actualLength\", \"minimumLength\", \"maximumLength\"] as const) {\n const value = issue[key];\n if (value !== undefined) {\n if (!Number.isSafeInteger(value) || value < 0)\n throw new TypeError(\"Invalid candidate length diagnostic.\");\n safe[key] = value;\n }\n }\n return safe;\n });\n}\nfunction diagnostic(\n reviewer: string | undefined,\n index: number,\n issues: readonly CandidateValidationIssue[],\n attempt: number,\n outcome: string,\n): void {\n const identity = (value: string | undefined) =>\n value && /^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$/.test(value) ? value : \"unknown\";\n writeRepositoryDiagnostic({\n event: \"review.candidate-validation\",\n jobId: identity(process.env.HOSTED_REVIEW_JOB_ID),\n reviewer: identity(reviewer),\n stage: \"candidate_validation\",\n provider: identity(process.env.ADVERSARY_MODEL_PROVIDER),\n model: identity(process.env.ADVERSARY_MODEL),\n candidateIndex: index,\n attempt,\n outcome,\n issues,\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"candidate-recovery.js","sourceRoot":"","sources":["../src/candidate-recovery.ts"],"names":[],"mappings":"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","sourcesContent":["import type { RuleContext } from \"./index.js\";\nimport { ModelReviewError, type ModelReviewRequest, ModelUnavailableError } from \"./model.js\";\nimport { writeRepositoryDiagnostic } from \"./repository-diagnostics.js\";\n\nexport const INCOMPLETE_REVIEW_SUMMARY =\n \"Review completed with limited coverage. Supported findings are retained; no whole-change clean opinion is available.\";\n\nexport type ReviewIncompleteReason =\n | \"candidate_validation\"\n | \"assessment_validation\"\n | \"source_coverage\";\nexport interface CandidateValidationIssue {\n field: string;\n code:\n | \"missing\"\n | \"invalid_type\"\n | \"invalid_value\"\n | \"too_short\"\n | \"too_long\"\n | \"placeholder\"\n | \"repetition\";\n actualLength?: number;\n minimumLength?: number;\n maximumLength?: number;\n}\nexport interface CandidateRecoveryOptions<T extends object> {\n candidates: readonly T[];\n /** Diagnostic identity only. Never include source text. */\n reviewer?: string;\n kind?: \"candidate\" | \"assessment\";\n /** Return content-free issues. Programming errors thrown by validators propagate. */\n validate(\n candidate: T,\n ): readonly CandidateValidationIssue[] | Promise<readonly CandidateValidationIssue[]>;\n repair?: {\n /** Only these rejected top-level fields can change. Identity/evidence remain untouched. */\n fields: readonly (keyof T & string)[];\n request(input: {\n candidate: T;\n issues: readonly CandidateValidationIssue[];\n remainingTimeoutMs: number;\n }): ModelReviewRequest<Partial<T>>;\n };\n /** Total repair calls across the batch, default 2; maximum 10. */\n maximumRepairCalls?: number;\n /** Shared repair deadline, default ten minutes; explicit shorter limits are preserved. */\n timeoutMs?: number;\n}\nexport interface CandidateRecoveryResult<T> {\n candidates: T[];\n withheld: { index: number; issues: readonly CandidateValidationIssue[] }[];\n repaired: number;\n repairCalls: number;\n}\n\n/** Independent validation/recovery; an invalid candidate never discards valid peers. */\nexport async function recoverReviewCandidates<T extends object>(\n context: {\n model: Pick<RuleContext[\"model\"], \"review\">;\n review: Pick<RuleContext[\"review\"], \"incomplete\">;\n },\n options: CandidateRecoveryOptions<T>,\n): Promise<CandidateRecoveryResult<T>> {\n if (options.kind !== undefined && ![\"candidate\", \"assessment\"].includes(options.kind))\n throw new TypeError(\"Invalid candidate recovery kind.\");\n const maximumRepairCalls = options.maximumRepairCalls ?? 2;\n const timeoutMs = options.timeoutMs ?? 600_000;\n if (\n !Number.isInteger(maximumRepairCalls) ||\n maximumRepairCalls < 0 ||\n maximumRepairCalls > 10 ||\n !Number.isInteger(timeoutMs) ||\n timeoutMs < 1 ||\n timeoutMs > 600_000 ||\n options.candidates.length > 100\n ) {\n throw new TypeError(\n \"Candidate recovery requires at most 100 candidates, 0–10 repair calls, and a 1–600000ms deadline.\",\n );\n }\n for (const field of options.repair?.fields ?? []) requireField(field);\n const startedAt = performance.now();\n const result: CandidateRecoveryResult<T> = {\n candidates: [],\n withheld: [],\n repaired: 0,\n repairCalls: 0,\n };\n for (const [index, original] of options.candidates.entries()) {\n let repairAttempted = false;\n let candidate = original;\n let issues = safeIssues(await options.validate(candidate));\n if (issues.length === 0) {\n result.candidates.push(candidate);\n continue;\n }\n diagnostic(options.reviewer, index, issues, 0, \"rejected\");\n const fields = new Set(\n issues\n .map((issue) => issue.field)\n .filter((field) => options.repair?.fields.includes(field as keyof T & string)),\n );\n const remainingTimeoutMs = Math.floor(timeoutMs - (performance.now() - startedAt));\n if (\n options.repair &&\n fields.size > 0 &&\n issues.every((issue) => fields.has(issue.field)) &&\n result.repairCalls < maximumRepairCalls &&\n remainingTimeoutMs > 0\n ) {\n // Request-construction errors are programming errors, not malformed model output.\n const request = options.repair.request({ candidate, issues, remainingTimeoutMs });\n const requestedTimeout = request.budget?.timeoutMs ?? remainingTimeoutMs;\n if (\n !Number.isInteger(requestedTimeout) ||\n requestedTimeout < 1 ||\n requestedTimeout > 600_000\n ) {\n throw new ModelReviewError(\"Invalid candidate repair request timeout.\", {\n code: \"invalid_model_budget\",\n });\n }\n repairAttempted = true;\n result.repairCalls += 1;\n try {\n const { output } = await context.model.review<Partial<T>>({\n ...request,\n budget: { ...request.budget, timeoutMs: Math.min(requestedTimeout, remainingTimeoutMs) },\n });\n if (typeof output !== \"object\" || output === null || Array.isArray(output)) {\n throw new ModelReviewError(\"Candidate repair returned a non-object.\", {\n code: \"invalid_model_output\",\n });\n }\n candidate = { ...original };\n for (const field of fields) {\n if (Object.hasOwn(output, field))\n (candidate as Record<string, unknown>)[field] = (output as Record<string, unknown>)[\n field\n ];\n }\n } catch (error) {\n if (!(error instanceof ModelReviewError) && !(error instanceof ModelUnavailableError))\n throw error;\n if (\n error instanceof ModelReviewError &&\n [\n \"invalid_model_request\",\n \"model_request_too_large\",\n \"invalid_model_schema\",\n \"invalid_model_budget\",\n \"invalid_broker_endpoint\",\n \"invalid_broker_token\",\n ].includes(error.code ?? \"\")\n )\n throw error;\n diagnostic(options.reviewer, index, issues, 1, \"repair_failed\");\n }\n // Validation is outside the model-error catch: never swallow validator bugs.\n issues = safeIssues(await options.validate(candidate));\n if (issues.length === 0) {\n result.repaired += 1;\n result.candidates.push(candidate);\n diagnostic(options.reviewer, index, [], 1, \"repaired\");\n continue;\n }\n }\n result.withheld.push({ index, issues });\n diagnostic(options.reviewer, index, issues, repairAttempted ? 1 : 0, \"withheld\");\n }\n if (result.withheld.length > 0)\n context.review.incomplete(\n options.kind === \"assessment\" ? \"assessment_validation\" : \"candidate_validation\",\n );\n return result;\n}\n\n/** Shared prose checks, with domain-specific length limits supplied by the reviewer. */\nexport function validateReviewText(\n value: unknown,\n options: { field: string; minimumLength: number; maximumLength: number },\n): CandidateValidationIssue[] {\n requireField(options.field);\n const { minimumLength, maximumLength } = options;\n if (\n !Number.isInteger(minimumLength) ||\n minimumLength < 1 ||\n !Number.isInteger(maximumLength) ||\n maximumLength < minimumLength\n )\n throw new TypeError(\"Invalid review text length limits.\");\n const issue = (\n code: CandidateValidationIssue[\"code\"],\n actualLength?: number,\n ): CandidateValidationIssue[] => [\n { ...options, code, ...(actualLength === undefined ? {} : { actualLength }) },\n ];\n if (value == null) return issue(\"missing\");\n if (typeof value !== \"string\") return issue(\"invalid_type\");\n const text = value.trim();\n if (text.length < minimumLength) return issue(\"too_short\", text.length);\n if (text.length > maximumLength) return issue(\"too_long\", text.length);\n if (\n /^(?:assessment|detail|impact|none|placeholder|principle|quote|recommendation|string|summary|title|tradeoffs?)$/i.test(\n text,\n )\n )\n return issue(\"placeholder\", text.length);\n const counts = new Map<string, number>();\n for (const unit of text\n .toLowerCase()\n .split(/(?:\\r?\\n+|(?<=[.!?])\\s+)/)\n .map((unit) => unit.replace(/[.!?]+$/u, \"\").trim())\n .filter((unit) => unit.length >= 2)) {\n counts.set(unit, (counts.get(unit) ?? 0) + 1);\n }\n return [...counts.values()].some((count) => count >= 4) ? issue(\"repetition\", text.length) : [];\n}\n\nfunction requireField(field: string): void {\n if (\n !/^[A-Za-z_][A-Za-z0-9_]{0,63}$/.test(field) ||\n [\"__proto__\", \"constructor\", \"prototype\"].includes(field)\n )\n throw new TypeError(\"Invalid candidate validation field.\");\n}\nfunction safeIssues(issues: readonly CandidateValidationIssue[]): CandidateValidationIssue[] {\n if (issues.length > 32) throw new TypeError(\"Too many candidate validation issues.\");\n return issues.map((issue) => {\n requireField(issue.field);\n if (\n ![\n \"missing\",\n \"invalid_type\",\n \"invalid_value\",\n \"too_short\",\n \"too_long\",\n \"placeholder\",\n \"repetition\",\n ].includes(issue.code)\n )\n throw new TypeError(\"Invalid candidate validation code.\");\n const safe: CandidateValidationIssue = { field: issue.field, code: issue.code };\n for (const key of [\"actualLength\", \"minimumLength\", \"maximumLength\"] as const) {\n const value = issue[key];\n if (value !== undefined) {\n if (!Number.isSafeInteger(value) || value < 0)\n throw new TypeError(\"Invalid candidate length diagnostic.\");\n safe[key] = value;\n }\n }\n return safe;\n });\n}\nfunction diagnostic(\n reviewer: string | undefined,\n index: number,\n issues: readonly CandidateValidationIssue[],\n attempt: number,\n outcome: string,\n): void {\n const identity = (value: string | undefined) =>\n value && /^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$/.test(value) ? value : \"unknown\";\n writeRepositoryDiagnostic({\n event: \"review.candidate-validation\",\n jobId: identity(process.env.HOSTED_REVIEW_JOB_ID),\n reviewer: identity(reviewer),\n stage: \"candidate_validation\",\n provider: identity(process.env.ADVERSARY_MODEL_PROVIDER),\n model: identity(process.env.ADVERSARY_MODEL),\n candidateIndex: index,\n attempt,\n outcome,\n issues,\n });\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,11 @@ import { type ContextualReviewModel, type ModelConcernRequest, type ModelConcern
|
|
|
3
3
|
import { type OutcomeContext } from "./outcome-context.js";
|
|
4
4
|
import { type RepoGraph } from "./repo-graph.js";
|
|
5
5
|
import { type RepoIndex } from "./repo-index.js";
|
|
6
|
+
import { type ReviewSource } from "./review-sources.js";
|
|
6
7
|
import { type InScopeSource, type ListInScopePathsOptions, type LoadInScopeSourcesOptions } from "./sources.js";
|
|
8
|
+
export { REVIEW_SOURCE_STATUSES, ReviewSourceValidationError, ReviewSourceCapacityError, type ReviewSource, } from "./review-sources.js";
|
|
9
|
+
export { confidentChoice, classifierPolicyError } from "./model.js";
|
|
10
|
+
export type { ChoiceQuestion, ChoiceRequest, ChoiceAnswer, ChoiceAnswers } from "./model.js";
|
|
7
11
|
export { ADVERSARY_MODEL_ENDPOINT_ENV, ADVERSARY_MODEL_PROTOCOL_VERSION, ADVERSARY_MODEL_TOKEN_ENV, BrokerReviewModel, ModelReviewError, ModelUnavailableError, createModelFromEnvironment, unavailableModel, type ContextualReviewModel, type ModelConcernRequest, type ModelConcernResult, type ModelReviewBudget, type ModelEnvironment, type ModelReviewRequest, type ModelReviewResult, type ModelReviewUsage, type ReviewModel, } from "./model.js";
|
|
8
12
|
export type { ModelRepositoryCitation, ModelRepositoryCoverage, ModelRepositoryChange, ModelRepositoryRetrieval, ModelRepositoryToolOptions, } from "./repository-model.js";
|
|
9
13
|
export { recoverReviewCandidates, validateReviewText, type CandidateValidationIssue, type CandidateRecoveryOptions, type CandidateRecoveryResult, type ReviewIncompleteReason, } from "./candidate-recovery.js";
|
|
@@ -80,6 +84,7 @@ export type ObservationSummary = string | {
|
|
|
80
84
|
export type ConfidenceAggregation = "maximum" | "minimum" | "average";
|
|
81
85
|
export type SeverityAggregation = "highest" | "lowest";
|
|
82
86
|
export interface ObservationInit {
|
|
87
|
+
sourceIds?: string[];
|
|
83
88
|
ruleId: string;
|
|
84
89
|
subject: string;
|
|
85
90
|
groupKey?: string;
|
|
@@ -103,6 +108,7 @@ export interface ObservationInit {
|
|
|
103
108
|
metadata?: Record<string, unknown>;
|
|
104
109
|
}
|
|
105
110
|
export interface FindingInput {
|
|
111
|
+
sourceIds?: string[];
|
|
106
112
|
id?: string;
|
|
107
113
|
ruleId?: string;
|
|
108
114
|
groupKey?: string;
|
|
@@ -121,6 +127,7 @@ export interface FindingInput {
|
|
|
121
127
|
metadata?: Record<string, unknown>;
|
|
122
128
|
}
|
|
123
129
|
export interface ReviewFinding {
|
|
130
|
+
sourceIds?: string[];
|
|
124
131
|
id: string;
|
|
125
132
|
ruleId?: string;
|
|
126
133
|
groupKey?: string;
|
|
@@ -203,6 +210,7 @@ export interface ReviewPolicy {
|
|
|
203
210
|
severityOverrides?: Record<string, Severity>;
|
|
204
211
|
}
|
|
205
212
|
export interface ReviewResult {
|
|
213
|
+
sources?: ReviewSource[];
|
|
206
214
|
adversary: {
|
|
207
215
|
name: string;
|
|
208
216
|
version?: string;
|
|
@@ -346,6 +354,8 @@ export interface RuleContext {
|
|
|
346
354
|
observe: (observation: ObservationInit) => void;
|
|
347
355
|
finding: (finding: FindingInput) => void;
|
|
348
356
|
review: {
|
|
357
|
+
/** Register evidence even when it produced no findings. Same ID replaces a previous report. */
|
|
358
|
+
source: (source: ReviewSource) => void;
|
|
349
359
|
/** Sticky coverage guard; later approvals cannot overwrite it. */
|
|
350
360
|
incomplete: (reason: ReviewIncompleteReason) => void;
|
|
351
361
|
assessment: (assessment: ReviewAssessment) => void;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,10 @@ import { outcomeContextFromEnvironment } from "./outcome-context.js";
|
|
|
7
7
|
import { repoGraphFromEnvironment } from "./repo-graph.js";
|
|
8
8
|
import { repoIndexFromEnvironment } from "./repo-index.js";
|
|
9
9
|
import { reviewWithRepositoryTools } from "./repository-model.js";
|
|
10
|
+
import { ReviewSourceCapacityError, ReviewSourceValidationError, normalizeReviewSource, parseReviewSourceUrl, validateReviewSourceBudget, validateSourceIds, } from "./review-sources.js";
|
|
10
11
|
import { listInScopePaths as listInScopePathsImpl, loadInScopeSources as loadInScopeSourcesImpl, } from "./sources.js";
|
|
12
|
+
export { REVIEW_SOURCE_STATUSES, ReviewSourceValidationError, ReviewSourceCapacityError, } from "./review-sources.js";
|
|
13
|
+
export { confidentChoice, classifierPolicyError } from "./model.js";
|
|
11
14
|
export { ADVERSARY_MODEL_ENDPOINT_ENV, ADVERSARY_MODEL_PROTOCOL_VERSION, ADVERSARY_MODEL_TOKEN_ENV, BrokerReviewModel, ModelReviewError, ModelUnavailableError, createModelFromEnvironment, unavailableModel, } from "./model.js";
|
|
12
15
|
export { recoverReviewCandidates, validateReviewText, } from "./candidate-recovery.js";
|
|
13
16
|
export { resolveModelCitation } from "./repository-model.js";
|
|
@@ -239,12 +242,15 @@ export function createAdversaryRunEnvelope(result) {
|
|
|
239
242
|
};
|
|
240
243
|
}
|
|
241
244
|
function toWireReviewResult(result) {
|
|
245
|
+
const sources = result.sources?.map((source, index) => normalizeReviewSource(source, `result.sources[${index}]`));
|
|
246
|
+
assertResultSourceReferences(result, sources ?? []);
|
|
242
247
|
return omitUndefined({
|
|
243
248
|
adversary: omitUndefined(result.adversary),
|
|
244
249
|
target: omitUndefined(result.target),
|
|
245
250
|
assessment: result.assessment === undefined ? undefined : omitUndefined({ ...result.assessment }),
|
|
246
251
|
positives: result.positives.map(toWireReviewNote),
|
|
247
252
|
observations: result.observations.map(toWireReviewNote),
|
|
253
|
+
sources: sources?.length ? sources : undefined,
|
|
248
254
|
findings: result.findings.map(toWireFinding),
|
|
249
255
|
opinion: result.opinion === undefined ? undefined : omitUndefined({ ...result.opinion }),
|
|
250
256
|
suppressed: result.suppressed,
|
|
@@ -264,6 +270,7 @@ function toWireReviewNote(note) {
|
|
|
264
270
|
function toWireFinding(finding) {
|
|
265
271
|
return omitUndefined({
|
|
266
272
|
id: finding.id,
|
|
273
|
+
sourceIds: finding.sourceIds === undefined ? undefined : uniqueStrings(finding.sourceIds),
|
|
267
274
|
ruleId: finding.ruleId,
|
|
268
275
|
groupKey: finding.groupKey,
|
|
269
276
|
title: finding.title,
|
|
@@ -356,7 +363,31 @@ export async function writeOutput(output, path = DEFAULT_OUTPUT_PATH) {
|
|
|
356
363
|
await mkdir(dirname(path), { recursive: true });
|
|
357
364
|
await writeFile(path, `${JSON.stringify(output, null, 2)}\n`, "utf8");
|
|
358
365
|
}
|
|
366
|
+
function validateWireSourceUrl(source, index) {
|
|
367
|
+
if (!isRecord(source) || source.url === undefined)
|
|
368
|
+
return;
|
|
369
|
+
parseReviewSourceUrl(source.url, `result.sources[${index}].url`, typeof source.id === "string" ? source.id : undefined);
|
|
370
|
+
}
|
|
371
|
+
function validateWireFindingSourceIds(finding, index, field) {
|
|
372
|
+
if (!isRecord(finding))
|
|
373
|
+
return;
|
|
374
|
+
validateSourceIds(finding.sourceIds, `result.${field}[${index}].sourceIds`);
|
|
375
|
+
}
|
|
376
|
+
function validateEnvelopeSourceInputs(output) {
|
|
377
|
+
if (!isRecord(output) || !isRecord(output.result))
|
|
378
|
+
return;
|
|
379
|
+
const result = output.result;
|
|
380
|
+
if (Array.isArray(result.sources))
|
|
381
|
+
result.sources.forEach(validateWireSourceUrl);
|
|
382
|
+
for (const field of ["findings", "suppressedFindings"]) {
|
|
383
|
+
const findings = result[field];
|
|
384
|
+
if (!Array.isArray(findings))
|
|
385
|
+
continue;
|
|
386
|
+
findings.forEach((finding, index) => validateWireFindingSourceIds(finding, index, field));
|
|
387
|
+
}
|
|
388
|
+
}
|
|
359
389
|
export async function validateRunEnvelope(output) {
|
|
390
|
+
validateEnvelopeSourceInputs(output);
|
|
360
391
|
let validator = envelopeValidator;
|
|
361
392
|
if (validator === undefined) {
|
|
362
393
|
const schema = JSON.parse(await readFile(new URL("../schemas/adversary.review.v1.schema.json", import.meta.url), "utf8"));
|
|
@@ -366,6 +397,11 @@ export async function validateRunEnvelope(output) {
|
|
|
366
397
|
if (!validator(output)) {
|
|
367
398
|
throw new Error(`Invalid adversary.review.v1 envelope: ${JSON.stringify(validator.errors)}`);
|
|
368
399
|
}
|
|
400
|
+
const result = output.result;
|
|
401
|
+
assertResultSourceReferences(result, result.sources ?? []);
|
|
402
|
+
for (const [index, source] of (result.sources ?? []).entries()) {
|
|
403
|
+
validateReviewSourceBudget(source, `result.sources[${index}]`);
|
|
404
|
+
}
|
|
369
405
|
}
|
|
370
406
|
export function normalizeConfidence(confidence, thresholds = DEFAULT_CONFIDENCE_THRESHOLDS) {
|
|
371
407
|
if (isConfidence(confidence)) {
|
|
@@ -630,19 +666,25 @@ function createRuleContext(repoPath, change, summary, cache, collector, registry
|
|
|
630
666
|
return loadInScopeSourcesImpl(absoluteRepoPath, change, options);
|
|
631
667
|
},
|
|
632
668
|
observe(observation) {
|
|
633
|
-
assertObservationInit(observation, "ctx.observe", registry);
|
|
669
|
+
assertObservationInit(observation, "ctx.observe", registry, collector.observations.length);
|
|
634
670
|
collector.observations.push(observation);
|
|
635
671
|
},
|
|
636
672
|
finding(finding) {
|
|
637
|
-
assertFindingInput(finding, "ctx.finding");
|
|
673
|
+
assertFindingInput(finding, "ctx.finding", collector.findings.length);
|
|
638
674
|
collector.findings.push({
|
|
639
675
|
finding: normalizeFindingInput(finding, collector.findings.length),
|
|
640
676
|
deduplicate: finding.deduplicate !== false,
|
|
641
677
|
});
|
|
642
678
|
},
|
|
643
679
|
review: {
|
|
680
|
+
source(source) {
|
|
681
|
+
const normalized = normalizeReviewSource(source, "ctx.review.source");
|
|
682
|
+
if (!collector.sources.has(normalized.id) && collector.sources.size >= 32)
|
|
683
|
+
throw new ReviewSourceCapacityError(normalized.id);
|
|
684
|
+
collector.sources.set(normalized.id, normalized);
|
|
685
|
+
},
|
|
644
686
|
incomplete(reason) {
|
|
645
|
-
if (!["candidate_validation", "assessment_validation"].includes(reason))
|
|
687
|
+
if (!["candidate_validation", "assessment_validation", "source_coverage"].includes(reason))
|
|
646
688
|
throw new TypeError("Invalid incomplete review reason.");
|
|
647
689
|
collector.incomplete = true;
|
|
648
690
|
collector.incompleteBlocking ||= collector.opinion?.ship === false;
|
|
@@ -735,6 +777,7 @@ function globPatternToRegExp(pattern) {
|
|
|
735
777
|
}
|
|
736
778
|
function createReviewCollector() {
|
|
737
779
|
return {
|
|
780
|
+
sources: new Map(),
|
|
738
781
|
observations: [],
|
|
739
782
|
findings: [],
|
|
740
783
|
positives: [],
|
|
@@ -743,6 +786,7 @@ function createReviewCollector() {
|
|
|
743
786
|
};
|
|
744
787
|
}
|
|
745
788
|
function buildReviewResult(input) {
|
|
789
|
+
assertCollectedSourceReferences(input.collector);
|
|
746
790
|
const thresholds = input.policy.confidenceThresholds ?? DEFAULT_CONFIDENCE_THRESHOLDS;
|
|
747
791
|
const synthesis = synthesizeObservationFindings(input.collector.observations, thresholds, input.registry);
|
|
748
792
|
const allFindings = deduplicateFindings([
|
|
@@ -766,6 +810,7 @@ function buildReviewResult(input) {
|
|
|
766
810
|
eligible.push(finding);
|
|
767
811
|
}
|
|
768
812
|
}
|
|
813
|
+
recordIncompleteSourceCoverage(input.collector);
|
|
769
814
|
const positives = selectPositiveSignals(input.collector.positives);
|
|
770
815
|
const reviewObservations = deduplicateReviewObservations([
|
|
771
816
|
...input.collector.reviewObservations,
|
|
@@ -781,6 +826,7 @@ function buildReviewResult(input) {
|
|
|
781
826
|
assessment,
|
|
782
827
|
positives,
|
|
783
828
|
observations: reviewObservations,
|
|
829
|
+
sources: input.collector.sources.size ? [...input.collector.sources.values()] : undefined,
|
|
784
830
|
findings: eligible,
|
|
785
831
|
opinion,
|
|
786
832
|
suppressed: {
|
|
@@ -792,6 +838,48 @@ function buildReviewResult(input) {
|
|
|
792
838
|
rawObservations: input.includeRawObservations ? input.collector.observations : undefined,
|
|
793
839
|
});
|
|
794
840
|
}
|
|
841
|
+
function sourceReferenceField(caller, ruleId, index) {
|
|
842
|
+
return `${caller}${ruleId ? ` (rule ${ruleId})` : ""}${index === undefined ? "" : `[${index}]`}.sourceIds`;
|
|
843
|
+
}
|
|
844
|
+
function assertCollectedSourceReferences(collector) {
|
|
845
|
+
for (const [index, observation] of collector.observations.entries())
|
|
846
|
+
assertSourceReferences(observation.sourceIds, collector.sources, sourceReferenceField("ctx.observe", observation.ruleId, index));
|
|
847
|
+
for (const [index, { finding }] of collector.findings.entries())
|
|
848
|
+
assertSourceReferences(finding.sourceIds, collector.sources, sourceReferenceField("ctx.finding", finding.ruleId, index));
|
|
849
|
+
}
|
|
850
|
+
function assertSourceReferences(sourceIds, sources, field) {
|
|
851
|
+
validateSourceIds(sourceIds, field);
|
|
852
|
+
const unknown = sourceIds?.find((id) => !sources.has(id));
|
|
853
|
+
if (unknown !== undefined)
|
|
854
|
+
throw new ReviewSourceValidationError(field, "Unknown review source", unknown);
|
|
855
|
+
}
|
|
856
|
+
function assertFindingSourceReferences(findings, sources, label) {
|
|
857
|
+
findings.forEach((finding, index) => assertSourceReferences(finding.sourceIds, sources, `${label}[${index}].sourceIds`));
|
|
858
|
+
}
|
|
859
|
+
function assertResultSourceReferences(result, sources) {
|
|
860
|
+
const byId = new Map();
|
|
861
|
+
for (const [index, source] of sources.entries()) {
|
|
862
|
+
if (byId.has(source.id))
|
|
863
|
+
throw new ReviewSourceValidationError(`result.sources[${index}].id`, "duplicate source ID", source.id);
|
|
864
|
+
byId.set(source.id, source);
|
|
865
|
+
}
|
|
866
|
+
assertFindingSourceReferences(result.findings, byId, "result.findings");
|
|
867
|
+
assertFindingSourceReferences(result.suppressedFindings ?? [], byId, "result.suppressedFindings");
|
|
868
|
+
}
|
|
869
|
+
function recordIncompleteSourceCoverage(collector) {
|
|
870
|
+
if (![...collector.sources.values()].some((source) => ["error", "partial", "unavailable"].includes(source.status)))
|
|
871
|
+
return;
|
|
872
|
+
collector.incomplete = true;
|
|
873
|
+
collector.reviewObservations.push({
|
|
874
|
+
key: "code-review.coverage-gap.sources",
|
|
875
|
+
summary: "One or more reported evidence sources are incomplete.",
|
|
876
|
+
metadata: {
|
|
877
|
+
role: "context",
|
|
878
|
+
incomplete: true,
|
|
879
|
+
reason: "source_coverage",
|
|
880
|
+
},
|
|
881
|
+
});
|
|
882
|
+
}
|
|
795
883
|
function resolveReviewConclusion(collector, findings, positives, change) {
|
|
796
884
|
const assessment = collector.assessment ?? synthesizeAssessment(findings, positives);
|
|
797
885
|
if (!collector.incomplete) {
|
|
@@ -863,6 +951,9 @@ function synthesizeObservationFindings(observations, thresholds, registry) {
|
|
|
863
951
|
remediation: synthesis.remediation ?? first.remediation,
|
|
864
952
|
tags: synthesis.tags ?? uniqueStrings(group.flatMap((observation) => observation.tags ?? [])),
|
|
865
953
|
metadata: synthesis.metadata ?? first.metadata,
|
|
954
|
+
...(group.some((item) => item.sourceIds?.length)
|
|
955
|
+
? { sourceIds: uniqueStrings(group.flatMap((item) => item.sourceIds ?? [])) }
|
|
956
|
+
: {}),
|
|
866
957
|
};
|
|
867
958
|
assertFindingInput(finding, `adversary aggregate rule "${first.ruleId}"`);
|
|
868
959
|
return finding;
|
|
@@ -898,8 +989,14 @@ function normalizeFindingInput(input, occurrence = 0) {
|
|
|
898
989
|
remediation: input.remediation,
|
|
899
990
|
tags: input.tags === undefined ? undefined : uniqueStrings(input.tags),
|
|
900
991
|
metadata: input.metadata,
|
|
992
|
+
sourceIds: input.sourceIds === undefined ? undefined : uniqueStrings(input.sourceIds),
|
|
901
993
|
});
|
|
902
994
|
}
|
|
995
|
+
function mergeSourceIds(left, right) {
|
|
996
|
+
if (!left?.length && !right?.length)
|
|
997
|
+
return left;
|
|
998
|
+
return uniqueStrings([...(left ?? []), ...(right ?? [])]);
|
|
999
|
+
}
|
|
903
1000
|
function deduplicateFindings(findings) {
|
|
904
1001
|
const seen = new Set();
|
|
905
1002
|
const result = [];
|
|
@@ -914,6 +1011,9 @@ function deduplicateFindings(findings) {
|
|
|
914
1011
|
const existing = result.find((item) => (item.groupKey ?? item.id) === key);
|
|
915
1012
|
if (existing !== undefined) {
|
|
916
1013
|
existing.evidence = deduplicateEvidence([...existing.evidence, ...finding.evidence]);
|
|
1014
|
+
const sourceIds = mergeSourceIds(existing.sourceIds, finding.sourceIds);
|
|
1015
|
+
if (sourceIds !== undefined)
|
|
1016
|
+
existing.sourceIds = sourceIds;
|
|
917
1017
|
existing.tags = uniqueStrings([...(existing.tags ?? []), ...(finding.tags ?? [])]);
|
|
918
1018
|
}
|
|
919
1019
|
continue;
|
|
@@ -1308,6 +1408,7 @@ export async function formatOpinionAsync(options) {
|
|
|
1308
1408
|
/** Attach {@link ContextualReviewModel.concern} on top of any injectable ReviewModel. */
|
|
1309
1409
|
export function enhanceReviewModel(model, repositoryRoot, change, reviewer) {
|
|
1310
1410
|
return {
|
|
1411
|
+
...(model.classify ? { classify: model.classify.bind(model) } : {}),
|
|
1311
1412
|
review: (request) => request.tools?.repository === undefined
|
|
1312
1413
|
? reviewWithValidation(model, request)
|
|
1313
1414
|
: reviewWithRepositoryTools(model, repositoryRoot, request, change, reviewer),
|
|
@@ -1825,7 +1926,7 @@ function stableStringify(value) {
|
|
|
1825
1926
|
function uniqueStrings(values) {
|
|
1826
1927
|
return [...new Set(values.filter(isNonEmptyString))].sort(compareStrings);
|
|
1827
1928
|
}
|
|
1828
|
-
function assertObservationInit(value, source, registry) {
|
|
1929
|
+
function assertObservationInit(value, source, registry, index) {
|
|
1829
1930
|
requireString(value.ruleId, `${source}.ruleId`);
|
|
1830
1931
|
requireString(value.subject, `${source}.subject`);
|
|
1831
1932
|
requireObservationTitle(value.title, `${source}.title`);
|
|
@@ -1852,8 +1953,9 @@ function assertObservationInit(value, source, registry) {
|
|
|
1852
1953
|
optionalString(value.groupKey, `${source}.groupKey`);
|
|
1853
1954
|
optionalStringArray(value.groupBy, `${source}.groupBy`);
|
|
1854
1955
|
optionalStringArray(value.tags, `${source}.tags`);
|
|
1956
|
+
validateSourceIds(value.sourceIds, sourceReferenceField(source, value.ruleId, index));
|
|
1855
1957
|
}
|
|
1856
|
-
function assertFindingInput(value, source) {
|
|
1958
|
+
function assertFindingInput(value, source, index) {
|
|
1857
1959
|
requireString(value.title, `${source}.title`);
|
|
1858
1960
|
requireString(value.category, `${source}.category`);
|
|
1859
1961
|
requireString(value.summary, `${source}.summary`);
|
|
@@ -1871,6 +1973,7 @@ function assertFindingInput(value, source) {
|
|
|
1871
1973
|
optionalString(value.ruleId, `${source}.ruleId`);
|
|
1872
1974
|
optionalString(value.groupKey, `${source}.groupKey`);
|
|
1873
1975
|
optionalStringArray(value.tags, `${source}.tags`);
|
|
1976
|
+
validateSourceIds(value.sourceIds, sourceReferenceField(source, value.ruleId, index));
|
|
1874
1977
|
optionalRemediation(value.remediation, `${source}.remediation`);
|
|
1875
1978
|
}
|
|
1876
1979
|
function assertReviewNote(value, source) {
|