@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 CHANGED
@@ -1,5 +1,7 @@
1
1
  # adversary-sdk-typescript
2
2
 
3
+ [![doomerlabs/doomer-sdk-typescript cover art by coverart.dev](https://coverart.dev/covers/doomerlabs/doomer-sdk-typescript.png)](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,GAAG,sBAAsB,GAAG,uBAAuB,CAAC;AACtF,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
+ {"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;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAA6B,KAAK,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjG,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EAGtB,KAAK,WAAW,EAIjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,cAAc,EAAiC,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAAE,KAAK,SAAS,EAA4B,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,KAAK,SAAS,EAA4B,MAAM,iBAAiB,CAAC;AAE3E,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAG/B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,EAChC,yBAAyB,EACzB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,0BAA0B,EAC1B,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,WAAW,GACjB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,EAC9B,qCAAqC,EACrC,8BAA8B,EAC9B,kBAAkB,EAClB,6BAA6B,EAC7B,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,aAAa,GACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,aAAa,EACb,wBAAwB,EACxB,yBAAyB,EACzB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,aAAa,GACnB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,yBAAyB,EACzB,aAAa,EACb,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,EACzB,4BAA4B,EAC5B,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,GAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,GACvB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC5B,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,8BAA8B,EACnC,KAAK,6BAA6B,EAClC,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,kBAAkB,0BAA0B,CAAC;AAC1D,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAC5D,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAKhD,eAAO,MAAM,QAAQ;;;;;;CAMX,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAEhE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,yBAAyB,EAAE,qBAAqB,EAqB5D,CAAC;AAEF,eAAO,MAAM,UAAU;;;;CAIb,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AACtE,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,MAAM,CAAC;AAElD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,6BAA6B,EAAE,oBAG3C,CAAC;AAEF,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,eAAe,CAAC;CACzE;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEN,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN;IACE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEN,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AACtE,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEvD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,KAAK,EAAE,gBAAgB,CAAC;IACxB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,cAAc,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC9C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,eAAe,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC;IACnE,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEjE,MAAM,WAAW,oBAAoB;IACnC,oFAAoF;IACpF,IAAI,EAAE,OAAO,CAAC;IACd;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,iCAAiC;IACjC,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,yBAA0B,SAAQ,oBAAoB;IACrE,0FAA0F;IAC1F,KAAK,EAAE,WAAW,CAAC;IACnB,iDAAiD;IACjD,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,MAAM,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,UAAU,EAAE;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,kBAAkB,CAAC,EAAE,aAAa,EAAE,CAAC;IACrC,eAAe,CAAC,EAAE,eAAe,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,OAAO,8BAA8B,CAAC;IACvD,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;IACxE,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC;IAClE,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBACf,SAAQ,IAAI,CAAC,YAAY,EAAE,WAAW,GAAG,cAAc,GAAG,UAAU,GAAG,oBAAoB,CAAC;IAC5F,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AAED,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAE5C,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,uEAAuE;AACvE,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,YAAY,EAAE,CAAC;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,oFAAoF;AACpF,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,KAAK,CAAC;IACrC,kEAAkE;IAClE,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,+EAA+E;IAC/E,QAAQ,CAAC,aAAa,EAAE,SAAS,YAAY,EAAE,CAAC;IAChD,+DAA+D;IAC/D,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,OAAO;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B;;;;OAIG;IACH,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC;;;OAGG;IACH,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B;;;OAGG;IACH,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAClC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C;;;OAGG;IACH,gBAAgB,EAAE,CAAC,OAAO,CAAC,EAAE,uBAAuB,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3E;;;OAGG;IACH,kBAAkB,EAAE,CAAC,OAAO,CAAC,EAAE,yBAAyB,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACtF;;;OAGG;IACH,KAAK,EAAE,qBAAqB,CAAC;IAC7B,OAAO,EAAE,CAAC,WAAW,EAAE,eAAe,KAAK,IAAI,CAAC;IAChD,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IACzC,MAAM,EAAE;QACN,kEAAkE;QAClE,UAAU,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,IAAI,CAAC;QACrD,UAAU,EAAE,CAAC,UAAU,EAAE,gBAAgB,KAAK,IAAI,CAAC;QACnD,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;QAC1C,OAAO,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;QACzC,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;QACpC,OAAO,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;KAC3C,CAAC;CACH;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,gFAAgF;IAChF,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,iFAAiF;IACjF,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,kFAAkF;IAClF,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACvC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACvC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACpD;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,QAAQ,CAAC;IAC3B,iBAAiB,CAAC,EAAE,eAAe,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,KAAK,gBAAgB,CAAC;CAChF;AAED,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC,GAAG;IACxE,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;CAC5B,CAAC;AAEF,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAE3D,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAQpC,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAQnC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAKlD,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAI5B,QAAQ,IAAI,YAAY;IAQxB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;CAO1C;AAmBD,oFAAoF;AACpF,eAAO,MAAM,YAAY,cAAqB,CAAC;AAE/C,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAErD;AAED,qFAAqF;AACrF,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAEtD;AAED,eAAO,MAAM,GAAG;mBACC,OAAO,GAAG,IAAI;kBAMf,OAAO,GAAG,IAAI;kBAMd,OAAO,GAAG,IAAI;mBAIb,OAAO,GAAG,IAAI;CAG9B,CAAC;AAEF,qBAAa,SAAS;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmD;IACzE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAe;gBAEnC,OAAO,EAAE,gBAAgB;IAYrC,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAItC,WAAW,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIvC,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAI1C,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAetC,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAuD/C,kBAAkB,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,YAAY,CAAC;CAuBrF;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,YAAY,GAAG,oBAAoB,CAKrF;AA4DD,wBAAsB,UAAU,CAAC,IAAI,SAAqB,GAAG,OAAO,CAAC,YAAY,CAAC,CAwBjF;AA0DD,wBAAsB,WAAW,CAC/B,MAAM,EAAE,oBAAoB,EAC5B,IAAI,SAAsB,GACzB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAexE;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,eAAe,EAC3B,UAAU,GAAE,oBAAoD,GAC/D,UAAU,CAuBZ;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAmBvE;AAED,qBAAa,YAAa,YAAW,cAAc;IAE/C,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAA2C;IAGvF,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;CAGnC;AAKD,qBAAa,gBAAiB,YAAW,cAAc;IAEnD,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAA2C;IAGvF;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;CAqGnC;AAwED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,GACvC,aAAa,GAAG,IAAI,CAiBtB;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAW/F;AA2oBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,GAAG,aAAa,CAQ5F;AAED,mEAAmE;AACnE,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAE9C;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAM/D;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO/D;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAoB,GAAG,MAAM,CAqCxF;AAED,4FAA4F;AAC5F,eAAO,MAAM,8BAA8B,omBASoC,CAAC;AAEhF,yDAAyD;AACzD,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAWlE,CAAC;AAOF;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CA4E7B;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC,CAmDxB;AAED,yFAAyF;AACzF,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,cAAc,CAAC,EAAE,MAAM,EACvB,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,EAC7B,QAAQ,CAAC,EAAE,MAAM,GAChB,qBAAqB,CAQvB;AAWD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA6C1E"}
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) {