@adversarylabs/sdk 0.1.44 → 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/dist/model.d.ts CHANGED
@@ -13,6 +13,8 @@ export interface ModelReviewValidation<T = unknown> {
13
13
  maximumAttempts?: number;
14
14
  }
15
15
  export interface ModelReviewRequest<T = unknown> {
16
+ /** Attention-only choice task; ordinary reviews ignore this SDK-local hint. */
17
+ attentionTask?: "configuration-go-vet" | "configuration-gosec";
16
18
  /** Local timing classification only; never sent to the broker or model. */
17
19
  diagnosticStage?: "model_review" | "repository_planning";
18
20
  prompt: string;
@@ -36,10 +38,32 @@ export interface ModelReviewResult<T = unknown> {
36
38
  citations?: readonly ModelRepositoryCitation[];
37
39
  retrieval?: ModelRepositoryRetrieval;
38
40
  }
41
+ export interface ChoiceQuestion {
42
+ type: "choice";
43
+ instructions: string;
44
+ criteria: Record<string, string>;
45
+ }
46
+ export interface ChoiceRequest {
47
+ state: unknown;
48
+ questions: Record<string, ChoiceQuestion>;
49
+ timeoutMs?: number;
50
+ }
51
+ export interface ChoiceAnswer {
52
+ type: "choice";
53
+ choice: string;
54
+ confidence: number;
55
+ probabilities: Record<string, number>;
56
+ }
57
+ export type ChoiceAnswers = Record<string, ChoiceAnswer>;
58
+ export declare function confidentChoice(answer: ChoiceAnswer | undefined, choice: string): boolean;
59
+ export declare function classifierPolicyError(error: unknown): boolean;
39
60
  export interface ReviewModel {
40
61
  review<T = unknown>(request: ModelReviewRequest<T>): Promise<ModelReviewResult<T>>;
62
+ /** Present only when the host authorizes attention-routing System 1 calls. */
63
+ classify?(request: ChoiceRequest): Promise<ChoiceAnswers>;
41
64
  }
42
65
  export interface BrokerReviewModelOptions {
66
+ attentionSystem1?: boolean;
43
67
  maximumAttempts?: number;
44
68
  initialRetryDelayMs?: number;
45
69
  random?: () => number;
@@ -92,6 +116,7 @@ export declare function createModelFromEnvironment(environment?: ModelEnvironmen
92
116
  export declare function unavailableModel(): ReviewModel;
93
117
  export declare class BrokerReviewModel implements ReviewModel {
94
118
  #private;
119
+ readonly classify?: (request: ChoiceRequest) => Promise<ChoiceAnswers>;
95
120
  readonly endpoint: string;
96
121
  constructor(endpoint: string, token: string, options?: BrokerReviewModelOptions);
97
122
  review<T = unknown>(request: ModelReviewRequest<T>): Promise<ModelReviewResult<T>>;
@@ -105,4 +130,5 @@ export declare class BrokerReviewModel implements ReviewModel {
105
130
  * validation without repeating repository retrieval.
106
131
  */
107
132
  export declare function reviewWithValidation<T>(model: ReviewModel, request: ModelReviewRequest<T>, decorate?: (result: ModelReviewResult<T>) => ModelReviewResult<T>): Promise<ModelReviewResult<T>>;
133
+ export declare function validateModelOutput(schema: Record<string, unknown>, output: unknown, usage?: ModelReviewUsage): void;
108
134
  //# sourceMappingURL=model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
package/dist/model.js CHANGED
@@ -37,6 +37,12 @@ class ModelBrokerDispatcher extends Agent {
37
37
  }, handler);
38
38
  }
39
39
  }
40
+ export function confidentChoice(answer, choice) {
41
+ return (answer?.choice === choice && Number.isFinite(answer.confidence) && answer.confidence >= 0.85);
42
+ }
43
+ export function classifierPolicyError(error) {
44
+ return error instanceof ModelReviewError && error.code === "classifier_policy_blocked";
45
+ }
40
46
  export class ModelUnavailableError extends Error {
41
47
  constructor(message = "Model review is unavailable for this adversary execution.") {
42
48
  super(message);
@@ -73,7 +79,9 @@ export function createModelFromEnvironment(environment = process.env) {
73
79
  if (endpoint === undefined || endpoint === "" || token === undefined || token === "") {
74
80
  return unavailableModel();
75
81
  }
76
- return new BrokerReviewModel(endpoint, token);
82
+ return new BrokerReviewModel(endpoint, token, {
83
+ attentionSystem1: environment.ADVERSARY_ATTENTION_SYSTEM1 === "1",
84
+ });
77
85
  }
78
86
  export function unavailableModel() {
79
87
  return Object.freeze({
@@ -111,6 +119,54 @@ export class BrokerReviewModel {
111
119
  this.#maximumAttempts = maximumAttempts;
112
120
  this.#initialRetryDelayMs = initialRetryDelayMs;
113
121
  this.#random = options.random ?? Math.random;
122
+ if (options.attentionSystem1 === true)
123
+ this.classify = (request) => this.#classify(request);
124
+ }
125
+ async #classify(request) {
126
+ const timeoutMs = request.timeoutMs ?? 45_000;
127
+ requireIntegerRange(timeoutMs, "choice timeoutMs", 1, 45_000);
128
+ const body = encodeChoiceRequest(request);
129
+ const controller = new AbortController();
130
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
131
+ try {
132
+ const endpoint = new URL(this.endpoint);
133
+ endpoint.pathname = "/v1/choices";
134
+ let response;
135
+ let raw;
136
+ try {
137
+ response = await fetch(endpoint, {
138
+ method: "POST",
139
+ signal: controller.signal,
140
+ headers: {
141
+ "content-type": "application/json",
142
+ authorization: `Bearer ${this.#token}`,
143
+ "x-adversary-model-protocol": String(ADVERSARY_MODEL_PROTOCOL_VERSION),
144
+ },
145
+ body,
146
+ });
147
+ raw = await readBoundedResponse(response);
148
+ }
149
+ catch (error) {
150
+ throw brokerTransportError(error, controller.signal, timeoutMs);
151
+ }
152
+ let payload;
153
+ try {
154
+ payload = JSON.parse(raw);
155
+ }
156
+ catch {
157
+ if (!response.ok)
158
+ throw choiceResponseFailure(response.status);
159
+ throw new ModelReviewError("Invalid classifier response.", {
160
+ code: "invalid_choice_response",
161
+ });
162
+ }
163
+ if (!response.ok)
164
+ throw choiceResponseFailure(response.status, payload);
165
+ return requireChoiceAnswers(payload, request.questions);
166
+ }
167
+ finally {
168
+ clearTimeout(timer);
169
+ }
114
170
  }
115
171
  async review(request) {
116
172
  if (request.tools?.repository !== undefined) {
@@ -521,6 +577,75 @@ function requireIntegerRange(value, name, minimum, maximum) {
521
577
  });
522
578
  }
523
579
  }
580
+ function encodeChoiceRequest(request) {
581
+ let body;
582
+ try {
583
+ body = JSON.stringify({ state: request.state, questions: request.questions });
584
+ }
585
+ catch {
586
+ throw new ModelReviewError("Invalid choice request.", { code: "invalid_choice_request" });
587
+ }
588
+ const withinWireBudget = Buffer.byteLength(body) <= 1 << 20;
589
+ const hasQuestions = Object.keys(request.questions).length > 0;
590
+ if (!withinWireBudget || !hasQuestions)
591
+ throw new ModelReviewError("Invalid choice request size.", { code: "invalid_choice_request" });
592
+ return body;
593
+ }
594
+ function choiceRecord(value) {
595
+ return value !== null && typeof value === "object" && !Array.isArray(value)
596
+ ? value
597
+ : undefined;
598
+ }
599
+ function choiceResponseFailure(status, payload) {
600
+ const failure = choiceRecord(choiceRecord(payload)?.error);
601
+ return new ModelReviewError(`Attention classifier returned HTTP ${status}.`, {
602
+ code: typeof failure?.code === "string" && failure.code !== ""
603
+ ? failure.code
604
+ : "attention_classification_failed",
605
+ retryable: typeof failure?.retryable === "boolean" ? failure.retryable : status >= 500,
606
+ diagnostics: { httpStatus: status },
607
+ });
608
+ }
609
+ function isChoiceProbability(value) {
610
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 && value <= 1;
611
+ }
612
+ function isChoiceDistribution(value, choices) {
613
+ const probabilities = choiceRecord(value);
614
+ if (!probabilities || Object.keys(probabilities).length !== choices.length)
615
+ return false;
616
+ let sum = 0;
617
+ for (const choice of choices) {
618
+ const probability = probabilities[choice];
619
+ if (!isChoiceProbability(probability))
620
+ return false;
621
+ sum += probability;
622
+ }
623
+ return Math.abs(sum - 1) <= 0.01;
624
+ }
625
+ function isValidChoiceAnswer(value, question) {
626
+ const answer = choiceRecord(value);
627
+ if (!answer || answer.type !== "choice")
628
+ return false;
629
+ const choices = Object.keys(question.criteria);
630
+ const declaredChoice = typeof answer.choice === "string" && choices.includes(answer.choice);
631
+ const boundedConfidence = isChoiceProbability(answer.confidence);
632
+ const normalizedDistribution = isChoiceDistribution(answer.probabilities, choices);
633
+ return declaredChoice && boundedConfidence && normalizedDistribution;
634
+ }
635
+ function requireChoiceAnswers(payload, questions) {
636
+ const answers = choiceRecord(choiceRecord(payload)?.answers);
637
+ if (!answers || Object.keys(answers).length !== Object.keys(questions).length)
638
+ throw new ModelReviewError("Incomplete classifier response.", {
639
+ code: "invalid_choice_response",
640
+ });
641
+ for (const [id, question] of Object.entries(questions)) {
642
+ if (!isValidChoiceAnswer(answers[id], question))
643
+ throw new ModelReviewError("Invalid classifier choices.", {
644
+ code: "invalid_choice_response",
645
+ });
646
+ }
647
+ return answers;
648
+ }
524
649
  function brokerTransportError(error, signal, timeoutMs) {
525
650
  if (signal.aborted)
526
651
  return modelTimeoutError(timeoutMs);
@@ -608,7 +733,7 @@ function validateUsage(value) {
608
733
  }
609
734
  }
610
735
  }
611
- function validateModelOutput(schema, output, usage) {
736
+ export function validateModelOutput(schema, output, usage) {
612
737
  const ajv = new Ajv2020({ allErrors: true, strict: true });
613
738
  let validate;
614
739
  try {
package/dist/model.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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","sourcesContent":["import { Ajv2020 } from \"ajv/dist/2020.js\";\nimport { Agent, type Dispatcher } from \"undici\";\nimport { modelAttemptDiagnostics } from \"./model-diagnostics.js\";\nimport type {\n ModelRepositoryCitation,\n ModelRepositoryRetrieval,\n ModelRepositoryToolOptions,\n} from \"./repository-model.js\";\n\nexport const ADVERSARY_MODEL_PROTOCOL_VERSION = 1;\nexport const ADVERSARY_MODEL_ENDPOINT_ENV = \"ADVERSARY_MODEL_ENDPOINT\";\nexport const ADVERSARY_MODEL_TOKEN_ENV = \"ADVERSARY_MODEL_TOKEN\";\n\nconst DEFAULT_MODEL_TIMEOUT_MS = 600_000;\nconst MAX_MODEL_TIMEOUT_MS = 600_000;\nconst DEFAULT_MAXIMUM_OUTPUT_TOKENS = 8_192;\nconst MAX_MAXIMUM_OUTPUT_TOKENS = 65_536;\nconst MAX_PROMPT_BYTES = 256 << 10;\nconst MAX_INPUT_BYTES = 4 << 20;\nconst MAX_SCHEMA_BYTES = 512 << 10;\nconst MAX_RESPONSE_BYTES = 4 << 20;\nconst DEFAULT_BROKER_MAXIMUM_ATTEMPTS = 3;\nconst DEFAULT_BROKER_RETRY_DELAY_MS = 250;\nconst MAX_BROKER_RETRY_DELAY_MS = 5_000;\nconst DEFAULT_VALIDATION_MAXIMUM_ATTEMPTS = 3;\nconst MAX_VALIDATION_MAXIMUM_ATTEMPTS = 5;\nconst MAX_VALIDATION_FEEDBACK_BYTES = 8 << 10;\n// Internal request metadata survives wrapper spreads but never enters broker JSON.\nconst outputRepairRequest = Symbol(\"sdk.output-repair\");\ntype OutputRepairRequest = ModelReviewRequest & { [outputRepairRequest]?: true };\n\n// Fetch supplies its own five-minute header timeout, overriding Agent defaults.\n// Override dispatch options for this review only; its shared AbortSignal remains\n// the authoritative deadline across connection, headers, body, and retries.\nclass ModelBrokerDispatcher extends Agent {\n constructor(private readonly deadlineMs: number) {\n super({ connectTimeout: deadlineMs });\n }\n\n override dispatch(\n options: Dispatcher.DispatchOptions,\n handler: Dispatcher.DispatchHandlers,\n ): boolean {\n return super.dispatch(\n {\n ...options,\n headersTimeout: this.deadlineMs,\n bodyTimeout: this.deadlineMs,\n },\n handler,\n );\n }\n}\n\nexport interface ModelReviewBudget {\n maximumOutputTokens?: number;\n timeoutMs?: number;\n}\n\nexport interface ModelReviewValidation<T = unknown> {\n /** Validate a completed model result. Throw to retry generation with the error as feedback. */\n validate(result: ModelReviewResult<T>): void | Promise<void>;\n /** Total generation attempts, including the first. Defaults to 3 and is capped at 5. */\n maximumAttempts?: number;\n}\n\nexport interface ModelReviewRequest<T = unknown> {\n /** Local timing classification only; never sent to the broker or model. */\n diagnosticStage?: \"model_review\" | \"repository_planning\";\n prompt: string;\n input: unknown;\n schema: Record<string, unknown>;\n budget?: ModelReviewBudget;\n validation?: ModelReviewValidation<T>;\n tools?: {\n repository: ModelRepositoryToolOptions;\n };\n}\n\nexport interface ModelReviewUsage {\n inputTokens?: number;\n outputTokens?: number;\n}\n\nexport interface ModelReviewResult<T = unknown> {\n output: T;\n provider: string;\n model: string;\n usage?: ModelReviewUsage;\n citations?: readonly ModelRepositoryCitation[];\n retrieval?: ModelRepositoryRetrieval;\n}\n\nexport interface ReviewModel {\n review<T = unknown>(request: ModelReviewRequest<T>): Promise<ModelReviewResult<T>>;\n}\n\nexport interface BrokerReviewModelOptions {\n maximumAttempts?: number;\n initialRetryDelayMs?: number;\n random?: () => number;\n}\n\n/**\n * Request a short noun-phrase concern suitable after \"I would address …\".\n * Implemented by the SDK via {@link ReviewModel.review} (CLI broker pass-through).\n */\nexport interface ModelConcernRequest {\n /** Free-form title, clause, or draft concern to rewrite. */\n text: string;\n budget?: ModelReviewBudget;\n /**\n * Extra attempts when the model returns a phrase that fails noun-phrase validation.\n * Defaults to 1 retry (2 total attempts).\n */\n maxAttempts?: number;\n}\n\nexport interface ModelConcernResult {\n /** Validated noun phrase (see requireOpinionConcern). */\n concern: string;\n /** False when `text` was already a valid noun phrase (no broker call). */\n rewritten: boolean;\n provider: string;\n model: string;\n usage?: ModelReviewUsage;\n}\n\n/** Rule-context model: broker review plus opinion-concern rewrite. */\nexport type ContextualReviewModel = ReviewModel & {\n concern(request: ModelConcernRequest): Promise<ModelConcernResult>;\n};\n\nexport type ModelEnvironment = Readonly<Record<string, string | undefined>>;\n\ninterface ModelBrokerRequest\n extends Omit<ModelReviewRequest, \"validation\" | \"tools\" | \"diagnosticStage\"> {\n protocolVersion: typeof ADVERSARY_MODEL_PROTOCOL_VERSION;\n}\n\ninterface ModelBrokerResponse {\n protocolVersion: typeof ADVERSARY_MODEL_PROTOCOL_VERSION;\n output: unknown;\n provider: string;\n model: string;\n usage?: ModelReviewUsage;\n}\n\ninterface ModelBrokerErrorResponse {\n usage?: ModelReviewUsage;\n error?: {\n code?: string;\n message?: string;\n retryable?: boolean;\n };\n}\n\ntype NormalizedModelReviewRequest = Omit<\n ModelReviewRequest,\n \"budget\" | \"validation\" | \"tools\" | \"diagnosticStage\"\n> & {\n budget: Required<ModelReviewBudget>;\n};\n\nexport class ModelUnavailableError extends Error {\n constructor(message = \"Model review is unavailable for this adversary execution.\") {\n super(message);\n this.name = \"ModelUnavailableError\";\n }\n}\n\nexport class ModelReviewError extends Error {\n readonly code?: string;\n readonly retryable: boolean;\n readonly diagnostics?: Readonly<Record<string, unknown>>;\n /** Reported usage from completed requests, including rejected output. */\n readonly usage?: ModelReviewUsage;\n\n constructor(\n message: string,\n options: {\n code?: string;\n retryable?: boolean;\n diagnostics?: Readonly<Record<string, unknown>>;\n usage?: ModelReviewUsage;\n } = {},\n ) {\n super(message);\n this.name = \"ModelReviewError\";\n this.code = options.code;\n this.diagnostics = options.diagnostics;\n this.usage = options.usage;\n this.retryable = options.retryable ?? false;\n }\n}\n\n// The message carries the code because subprocess runners may only retain stderr.\n// Never include an upstream error body, prompt, or validator feedback here.\nfunction exhaustedModelRecovery(\n attempts: number,\n reason: \"deadline\" | \"attempt_limit\",\n): ModelReviewError {\n return new ModelReviewError(\n `model_request_recovery_exhausted: Model request recovery exhausted after ${attempts} attempt(s) (${reason}).`,\n {\n code: \"model_request_recovery_exhausted\",\n retryable: false,\n diagnostics: Object.freeze({ attempts, reason }),\n },\n );\n}\n\nexport function createModelFromEnvironment(\n environment: ModelEnvironment = process.env,\n): ReviewModel {\n const endpoint = environment[ADVERSARY_MODEL_ENDPOINT_ENV]?.trim();\n const token = environment[ADVERSARY_MODEL_TOKEN_ENV]?.trim();\n if (endpoint === undefined || endpoint === \"\" || token === undefined || token === \"\") {\n return unavailableModel();\n }\n return new BrokerReviewModel(endpoint, token);\n}\n\nexport function unavailableModel(): ReviewModel {\n return Object.freeze({\n async review(): Promise<never> {\n throw new ModelUnavailableError();\n },\n });\n}\n\nexport class BrokerReviewModel implements ReviewModel {\n readonly endpoint: string;\n readonly #token: string;\n readonly #maximumAttempts: number;\n readonly #initialRetryDelayMs: number;\n readonly #random: () => number;\n\n constructor(endpoint: string, token: string, options: BrokerReviewModelOptions = {}) {\n const parsed = new URL(endpoint);\n if (\n parsed.protocol !== \"http:\" ||\n (parsed.hostname !== \"127.0.0.1\" &&\n parsed.hostname !== \"::1\" &&\n parsed.hostname !== \"[::1]\" &&\n parsed.hostname !== \"localhost\")\n ) {\n throw new ModelReviewError(\n \"The model broker endpoint must use HTTP on the local loopback interface.\",\n { code: \"invalid_broker_endpoint\" },\n );\n }\n if (token.trim() === \"\") {\n throw new ModelReviewError(\"The model broker token must not be empty.\", {\n code: \"invalid_broker_token\",\n });\n }\n this.endpoint = parsed.toString();\n this.#token = token;\n const maximumAttempts = options.maximumAttempts ?? DEFAULT_BROKER_MAXIMUM_ATTEMPTS;\n const initialRetryDelayMs = options.initialRetryDelayMs ?? DEFAULT_BROKER_RETRY_DELAY_MS;\n requireIntegerRange(maximumAttempts, \"maximumAttempts\", 1, 5);\n requireIntegerRange(initialRetryDelayMs, \"initialRetryDelayMs\", 0, MAX_BROKER_RETRY_DELAY_MS);\n this.#maximumAttempts = maximumAttempts;\n this.#initialRetryDelayMs = initialRetryDelayMs;\n this.#random = options.random ?? Math.random;\n }\n\n async review<T = unknown>(request: ModelReviewRequest<T>): Promise<ModelReviewResult<T>> {\n if (request.tools?.repository !== undefined) {\n throw new ModelReviewError(\n \"Repository model tools require ctx.model so the SDK can enforce the repository boundary.\",\n { code: \"invalid_model_request\" },\n );\n }\n const normalized = normalizeRequest(request);\n const validationOwnsRetries = (request as OutputRepairRequest)[outputRepairRequest] === true;\n const diagnostics = modelAttemptDiagnostics(\n normalized.budget.timeoutMs,\n request.diagnosticStage === \"repository_planning\" ? \"repository_planning\" : \"model_review\",\n );\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), normalized.budget.timeoutMs);\n const dispatcher = new ModelBrokerDispatcher(normalized.budget.timeoutMs);\n let usage: ModelReviewUsage = {};\n try {\n for (let attempt = 1; attempt <= this.#maximumAttempts; attempt += 1) {\n const outcome = await this.#reviewAttempt<T>(\n normalized,\n controller.signal,\n dispatcher,\n diagnostics,\n attempt,\n );\n if (outcome.ok) return withAccumulatedResultUsage(outcome.result, usage);\n const error = outcome.error;\n if (!(error instanceof ModelReviewError)) throw error;\n // Only an opted-in validation loop takes ownership of schema retries.\n // Other callers retain the broker's existing retryable-error behavior.\n if (!error.retryable || (validationOwnsRetries && error.code === \"invalid_model_output\"))\n throw error;\n usage = addModelUsage(usage, error.usage);\n if (controller.signal.aborted) throw exhaustedModelRecovery(attempt, \"deadline\");\n if (attempt === this.#maximumAttempts)\n throw exhaustedModelRecovery(attempt, \"attempt_limit\");\n await this.#waitForRetry(\n attempt,\n controller.signal,\n normalized.budget.timeoutMs,\n diagnostics,\n );\n }\n throw exhaustedModelRecovery(this.#maximumAttempts, \"attempt_limit\");\n } catch (error) {\n if (!(error instanceof ModelReviewError)) throw error;\n throw withAccumulatedUsage(error, usage);\n } finally {\n clearTimeout(timeout);\n // Cleanup must not replace the typed request error or a successful response.\n try {\n await dispatcher.destroy();\n } catch {\n // The dispatcher is no longer used after this request.\n }\n }\n }\n\n // One attempt owns its timing and error outcome; retry decisions belong to review().\n async #reviewAttempt<T>(\n normalized: NormalizedModelReviewRequest,\n signal: AbortSignal,\n dispatcher: ModelBrokerDispatcher,\n diagnostics: ReturnType<typeof modelAttemptDiagnostics>,\n attempt: number,\n ): Promise<{ ok: true; result: ModelReviewResult<T> } | { ok: false; error: unknown }> {\n const finish = diagnostics.start(attempt);\n try {\n const result = await this.#reviewOnce<T>(normalized, signal, dispatcher);\n finish(\"succeeded\", result.provider, result.model);\n return { ok: true, result };\n } catch (error) {\n finish(\n \"failed\",\n undefined,\n undefined,\n error instanceof ModelReviewError ? error.code : \"broker_unavailable\",\n );\n return { ok: false, error };\n }\n }\n\n // Keep backoff, timeout diagnostics, and error translation together.\n async #waitForRetry(\n attempt: number,\n signal: AbortSignal,\n timeoutMs: number,\n diagnostics: ReturnType<typeof modelAttemptDiagnostics>,\n ): Promise<void> {\n const exponential = Math.min(\n MAX_BROKER_RETRY_DELAY_MS,\n this.#initialRetryDelayMs * 2 ** (attempt - 1),\n );\n const jittered = Math.round(exponential * (0.75 + 0.5 * this.#random()));\n const retryDelayFailed = diagnostics.startRetryDelay(attempt);\n try {\n await waitForRetry(jittered, signal, timeoutMs);\n } catch (error) {\n retryDelayFailed(\n error instanceof ModelReviewError\n ? (error.code ?? \"model_review_failed\")\n : \"model_review_failed\",\n );\n if (error instanceof ModelReviewError && error.retryable) {\n throw exhaustedModelRecovery(attempt, \"deadline\");\n }\n throw error;\n }\n }\n\n async #reviewOnce<T>(\n normalized: NormalizedModelReviewRequest,\n signal: AbortSignal,\n dispatcher: ModelBrokerDispatcher,\n ): Promise<ModelReviewResult<T>> {\n let response: Response;\n try {\n response = await fetch(this.endpoint, {\n method: \"POST\",\n headers: {\n accept: \"application/json\",\n authorization: `Bearer ${this.#token}`,\n \"content-type\": \"application/json\",\n \"x-adversary-model-protocol\": String(ADVERSARY_MODEL_PROTOCOL_VERSION),\n },\n body: JSON.stringify({\n protocolVersion: ADVERSARY_MODEL_PROTOCOL_VERSION,\n prompt: normalized.prompt,\n input: normalized.input,\n schema: normalized.schema,\n budget: normalized.budget,\n } satisfies ModelBrokerRequest),\n signal,\n dispatcher,\n } as RequestInit & { dispatcher: Dispatcher });\n } catch (error) {\n throw brokerTransportError(error, signal, normalized.budget.timeoutMs);\n }\n\n let body: string;\n try {\n body = await readBoundedResponse(response);\n } catch (error) {\n throw brokerTransportError(error, signal, normalized.budget.timeoutMs);\n }\n let decoded: unknown;\n try {\n decoded = JSON.parse(body);\n } catch {\n throw new ModelReviewError(\"Model broker returned malformed JSON.\", {\n code: \"invalid_broker_response\",\n });\n }\n if (!response.ok) {\n const failure = decoded as ModelBrokerErrorResponse;\n if (failure.usage !== undefined) validateUsage(failure.usage);\n throw new ModelReviewError(\n failure.error?.message ?? `Model broker returned HTTP ${response.status}.`,\n {\n code: failure.error?.code ?? \"model_review_failed\",\n retryable: failure.error?.retryable ?? response.status >= 500,\n ...(failure.usage === undefined ? {} : { usage: failure.usage }),\n },\n );\n }\n\n const envelope = requireBrokerResponse(decoded);\n validateModelOutput(normalized.schema, envelope.output, envelope.usage);\n return {\n output: envelope.output as T,\n provider: envelope.provider,\n model: envelope.model,\n ...(envelope.usage === undefined ? {} : { usage: envelope.usage }),\n };\n }\n}\n\n/**\n * Run schema and adversary-owned semantic validation with SDK-owned bounded regeneration.\n *\n * Each retry receives the validator failure as trusted SDK feedback while retaining the\n * original input. The original timeout is shared by all validation attempts, and usage is\n * aggregated across them. Repository callers may decorate the raw result with citations before\n * validation without repeating repository retrieval.\n */\nexport async function reviewWithValidation<T>(\n model: ReviewModel,\n request: ModelReviewRequest<T>,\n decorate: (result: ModelReviewResult<T>) => ModelReviewResult<T> = (result) => result,\n): Promise<ModelReviewResult<T>> {\n const validation = request.validation;\n const { validation: _validation, tools: _tools, ...baseRequest } = request;\n if (validation === undefined) return decorate(await model.review<T>(baseRequest));\n\n const maximumAttempts = validation.maximumAttempts ?? DEFAULT_VALIDATION_MAXIMUM_ATTEMPTS;\n requireIntegerRange(\n maximumAttempts,\n \"validation.maximumAttempts\",\n 1,\n MAX_VALIDATION_MAXIMUM_ATTEMPTS,\n );\n const timeoutMs = request.budget?.timeoutMs ?? DEFAULT_MODEL_TIMEOUT_MS;\n const startedAt = Date.now();\n let usage: ModelReviewUsage = {};\n let feedback: string | undefined;\n\n for (let attempt = 1; attempt <= maximumAttempts; attempt += 1) {\n const elapsed = Date.now() - startedAt;\n const remainingTimeoutMs = timeoutMs - elapsed;\n if (remainingTimeoutMs <= 0)\n throw withAccumulatedUsage(exhaustedModelRecovery(attempt - 1, \"deadline\"), usage);\n let outcome: OutputValidationAttempt<T>;\n try {\n outcome = await reviewValidationAttempt(\n model,\n {\n ...baseRequest,\n prompt:\n feedback === undefined\n ? baseRequest.prompt\n : `${baseRequest.prompt}\\n\\nSDK VALIDATION FEEDBACK:\\nThe previous response failed output validation. Correct the response using this trusted validation result and return the complete response again.\\n${JSON.stringify({ attempt, error: feedback })}`,\n budget: { ...baseRequest.budget, timeoutMs: remainingTimeoutMs },\n },\n validation,\n decorate,\n );\n } catch (error) {\n if (!(error instanceof ModelReviewError)) throw error;\n throw withAccumulatedUsage(error, usage);\n }\n usage = addModelUsage(usage, outcome.ok ? outcome.result.usage : outcome.usage);\n if (outcome.ok) {\n return {\n ...outcome.result,\n ...(usage.inputTokens === undefined && usage.outputTokens === undefined ? {} : { usage }),\n };\n }\n feedback = outcome.feedback;\n if (attempt === maximumAttempts)\n throw exhaustedOutputValidation(maximumAttempts, feedback, usage);\n }\n throw new ModelReviewError(\"Model validation retry loop exhausted unexpectedly.\", {\n code: \"model_validation_failed\",\n retryable: false,\n });\n}\n\ntype OutputValidationAttempt<T> =\n | { ok: true; result: ModelReviewResult<T> }\n | { ok: false; feedback: string; usage?: ModelReviewUsage };\n\n// Keep generation and semantic validation failures together for one prepared\n// request. Neither kind of rejection repeats repository evidence gathering.\nasync function reviewValidationAttempt<T>(\n model: ReviewModel,\n request: ModelReviewRequest<T>,\n validation: ModelReviewValidation<T>,\n decorate: (result: ModelReviewResult<T>) => ModelReviewResult<T>,\n): Promise<OutputValidationAttempt<T>> {\n let result: ModelReviewResult<T>;\n try {\n const prepared: OutputRepairRequest = { ...request, [outputRepairRequest]: true };\n result = decorate(await model.review<T>(prepared));\n } catch (error) {\n if (!(error instanceof ModelReviewError) || error.code !== \"invalid_model_output\") throw error;\n return {\n ok: false,\n feedback: schemaValidationFeedback(error, request.schema),\n usage: error.usage,\n };\n }\n try {\n await validation.validate(result);\n return { ok: true, result };\n } catch (error) {\n return { ok: false, feedback: boundedValidationFeedback(error), usage: result.usage };\n }\n}\n\nfunction withAccumulatedResultUsage<T>(\n result: ModelReviewResult<T>,\n accumulated: ModelReviewUsage,\n): ModelReviewResult<T> {\n const usage = addModelUsage(accumulated, result.usage);\n return {\n ...result,\n ...(usage.inputTokens === undefined && usage.outputTokens === undefined ? {} : { usage }),\n };\n}\n\n// Keep interruption classification and metadata intact without mutating an error\n// that a model implementation may reuse. Current-error usage is counted once.\nfunction withAccumulatedUsage(error: ModelReviewError, usage: ModelReviewUsage): ModelReviewError {\n if (usage.inputTokens === undefined && usage.outputTokens === undefined) return error;\n return new ModelReviewError(error.message, {\n code: error.code,\n retryable: error.retryable,\n diagnostics: error.diagnostics,\n usage: addModelUsage(usage, error.usage),\n });\n}\n\nfunction exhaustedOutputValidation(\n attempts: number,\n feedback: string,\n usage: ModelReviewUsage,\n): ModelReviewError {\n return new ModelReviewError(\n `Model output failed adversary validation after ${attempts} attempts: ${feedback}`,\n {\n code: \"model_validation_failed\",\n retryable: false,\n ...(usage.inputTokens === undefined && usage.outputTokens === undefined ? {} : { usage }),\n },\n );\n}\n\n// Broker pattern/enum errors can quote rejected model text. Retain only schema-owned\n// locations, fixed keywords, numeric limits, and trusted schema descriptions as feedback.\nfunction schemaValidationFeedback(\n error: ModelReviewError,\n schema: Record<string, unknown>,\n): string {\n const goLocations = [...error.message.matchAll(/- at '([^'\\n]*)': ([^\\n]*)/g)];\n const locations =\n goLocations.length > 0\n ? goLocations\n : [...error.message.matchAll(/data((?:\\/[^\\s;:]*)*) (must [^;\\n]*)/g)];\n const messages =\n locations.length === 0\n ? [schemaFailureFeedback(undefined, \"\", schema)]\n : locations\n .slice(0, 32)\n .map((location) => schemaFailureFeedback(location[1], location[2], schema));\n return boundedValidationFeedback(new Error([...new Set(messages)].join(\"\\n\")));\n}\n\nfunction schemaFailureFeedback(\n rawPath: string | undefined,\n detail: string,\n schema: Record<string, unknown>,\n): string {\n let node = schema;\n const safePath: string[] = [];\n for (const token of (rawPath ?? \"\").split(\"/\").filter(Boolean).slice(0, 32)) {\n const key = token.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\");\n const properties = node.properties as Record<string, Record<string, unknown>> | undefined;\n if (properties && Object.hasOwn(properties, key)) {\n safePath.push(token.slice(0, 128));\n node = properties[key];\n } else if (\n node.type === \"array\" &&\n /^\\d{1,8}$/.test(key) &&\n node.items &&\n typeof node.items === \"object\"\n ) {\n safePath.push(key);\n node = node.items as Record<string, unknown>;\n } else {\n safePath.push(\"*\");\n node = {};\n }\n }\n const at = rawPath !== undefined ? ` at /${safePath.join(\"/\")}` : \"\";\n const length = /^(minLength|maxLength): got (\\d{1,8}), want (\\d{1,8})$/.exec(detail);\n let reason = \"Return a complete response that satisfies the supplied schema.\";\n if (length) {\n reason = `${length[1]}: got ${length[2]} characters; required ${length[3]}.`;\n } else if (/^must NOT have (more|fewer) than \\d+ characters$/.test(detail)) {\n reason = detail;\n } else if (\n /^(?:'not' failed|must NOT be valid)$/.test(detail) &&\n typeof node.not === \"object\" &&\n node.not !== null\n ) {\n const description = (node.not as Record<string, unknown>).description;\n reason =\n typeof description === \"string\"\n ? description\n : \"The value violates a 'not' schema constraint.\";\n } else if (/pattern/.test(detail)) {\n reason = \"The value does not satisfy its schema pattern.\";\n }\n return `Model output does not match the requested schema${at}. ${reason}`;\n}\n\nfunction boundedValidationFeedback(error: unknown): string {\n const message = error instanceof Error ? error.message : String(error);\n const encoded = Buffer.from(message, \"utf8\");\n return encoded.byteLength <= MAX_VALIDATION_FEEDBACK_BYTES\n ? message\n : `${encoded.subarray(0, MAX_VALIDATION_FEEDBACK_BYTES).toString(\"utf8\")}…`;\n}\n\nfunction addModelUsage(\n total: ModelReviewUsage,\n next: ModelReviewUsage | undefined,\n): ModelReviewUsage {\n if (next === undefined) return total;\n return {\n ...(total.inputTokens === undefined && next.inputTokens === undefined\n ? {}\n : { inputTokens: (total.inputTokens ?? 0) + (next.inputTokens ?? 0) }),\n ...(total.outputTokens === undefined && next.outputTokens === undefined\n ? {}\n : { outputTokens: (total.outputTokens ?? 0) + (next.outputTokens ?? 0) }),\n };\n}\n\nasync function waitForRetry(\n delayMs: number,\n signal: AbortSignal,\n timeoutMs: number,\n): Promise<void> {\n if (signal.aborted) {\n throw modelTimeoutError(timeoutMs);\n }\n await new Promise<void>((resolve, reject) => {\n const onAbort = () => {\n clearTimeout(timer);\n reject(modelTimeoutError(timeoutMs));\n };\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, delayMs);\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\nfunction modelTimeoutError(timeoutMs: number): ModelReviewError {\n return new ModelReviewError(`Model review exceeded its ${timeoutMs}ms timeout.`, {\n code: \"model_timeout\",\n retryable: true,\n });\n}\n\nfunction normalizeRequest(request: ModelReviewRequest): NormalizedModelReviewRequest {\n if (typeof request !== \"object\" || request === null) {\n throw new ModelReviewError(\"Model review request must be an object.\", {\n code: \"invalid_model_request\",\n });\n }\n if (typeof request.prompt !== \"string\" || request.prompt.trim() === \"\") {\n throw new ModelReviewError(\"Model review prompt must be a non-empty string.\", {\n code: \"invalid_model_request\",\n });\n }\n const promptBytes = Buffer.byteLength(request.prompt, \"utf8\");\n if (promptBytes > MAX_PROMPT_BYTES) {\n throw new ModelReviewError(`Model review prompt exceeds ${MAX_PROMPT_BYTES} bytes.`, {\n code: \"model_request_too_large\",\n });\n }\n requireJsonSize(request.input, \"input\", MAX_INPUT_BYTES);\n if (\n typeof request.schema !== \"object\" ||\n request.schema === null ||\n Array.isArray(request.schema)\n ) {\n throw new ModelReviewError(\"Model review schema must be a JSON Schema object.\", {\n code: \"invalid_model_schema\",\n });\n }\n requireJsonSize(request.schema, \"schema\", MAX_SCHEMA_BYTES);\n\n const maximumOutputTokens = request.budget?.maximumOutputTokens ?? DEFAULT_MAXIMUM_OUTPUT_TOKENS;\n const timeoutMs = request.budget?.timeoutMs ?? DEFAULT_MODEL_TIMEOUT_MS;\n requireIntegerRange(\n maximumOutputTokens,\n \"budget.maximumOutputTokens\",\n 1,\n MAX_MAXIMUM_OUTPUT_TOKENS,\n );\n requireIntegerRange(timeoutMs, \"budget.timeoutMs\", 1, MAX_MODEL_TIMEOUT_MS);\n return {\n prompt: request.prompt,\n input: request.input,\n schema: request.schema,\n budget: { maximumOutputTokens, timeoutMs },\n };\n}\n\nfunction requireJsonSize(value: unknown, name: string, maximum: number): void {\n let encoded: string | undefined;\n try {\n encoded = JSON.stringify(value);\n } catch (error) {\n throw new ModelReviewError(\n `Model review ${name} must be JSON-serializable: ${error instanceof Error ? error.message : String(error)}`,\n { code: \"invalid_model_request\" },\n );\n }\n if (encoded === undefined) {\n throw new ModelReviewError(`Model review ${name} must be JSON-serializable.`, {\n code: \"invalid_model_request\",\n });\n }\n if (Buffer.byteLength(encoded, \"utf8\") > maximum) {\n throw new ModelReviewError(`Model review ${name} exceeds ${maximum} bytes.`, {\n code: \"model_request_too_large\",\n });\n }\n}\n\nfunction requireIntegerRange(value: number, name: string, minimum: number, maximum: number): void {\n if (!Number.isInteger(value) || value < minimum || value > maximum) {\n throw new ModelReviewError(`${name} must be an integer from ${minimum} through ${maximum}.`, {\n code: \"invalid_model_budget\",\n });\n }\n}\n\nfunction brokerTransportError(\n error: unknown,\n signal: AbortSignal,\n timeoutMs: number,\n): ModelReviewError {\n if (signal.aborted) return modelTimeoutError(timeoutMs);\n if (error instanceof ModelReviewError) return error;\n return new ModelReviewError(\n `Model broker request failed: ${error instanceof Error ? error.message : String(error)}`,\n { code: \"broker_unavailable\", retryable: true },\n );\n}\n\nasync function readBoundedResponse(response: Response): Promise<string> {\n const declared = response.headers.get(\"content-length\");\n if (declared !== null && Number(declared) > MAX_RESPONSE_BYTES) {\n throw new ModelReviewError(`Model broker response exceeds ${MAX_RESPONSE_BYTES} bytes.`, {\n code: \"model_response_too_large\",\n });\n }\n if (response.body === null) {\n return \"\";\n }\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n let size = 0;\n for (;;) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n size += value.byteLength;\n if (size > MAX_RESPONSE_BYTES) {\n await reader.cancel();\n throw new ModelReviewError(`Model broker response exceeds ${MAX_RESPONSE_BYTES} bytes.`, {\n code: \"model_response_too_large\",\n });\n }\n chunks.push(value);\n }\n const joined = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) {\n joined.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return new TextDecoder().decode(joined);\n}\n\nfunction requireBrokerResponse(value: unknown): ModelBrokerResponse {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new ModelReviewError(\"Model broker response must be an object.\", {\n code: \"invalid_broker_response\",\n });\n }\n const response = value as Partial<ModelBrokerResponse>;\n if (response.protocolVersion !== ADVERSARY_MODEL_PROTOCOL_VERSION) {\n throw new ModelReviewError(\n `Model broker protocol version must be ${ADVERSARY_MODEL_PROTOCOL_VERSION}.`,\n { code: \"unsupported_model_protocol\" },\n );\n }\n if (typeof response.provider !== \"string\" || response.provider.trim() === \"\") {\n throw new ModelReviewError(\"Model broker response provider must be a non-empty string.\", {\n code: \"invalid_broker_response\",\n });\n }\n if (typeof response.model !== \"string\" || response.model.trim() === \"\") {\n throw new ModelReviewError(\"Model broker response model must be a non-empty string.\", {\n code: \"invalid_broker_response\",\n });\n }\n if (!Object.hasOwn(response, \"output\")) {\n throw new ModelReviewError(\"Model broker response is missing output.\", {\n code: \"invalid_broker_response\",\n });\n }\n if (response.usage !== undefined) {\n validateUsage(response.usage);\n }\n return response as ModelBrokerResponse;\n}\n\nfunction validateUsage(value: unknown): asserts value is ModelReviewUsage {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new ModelReviewError(\"Model broker response usage must be an object.\", {\n code: \"invalid_broker_response\",\n });\n }\n for (const field of [\"inputTokens\", \"outputTokens\"] as const) {\n const count = (value as ModelReviewUsage)[field];\n if (count !== undefined && (!Number.isInteger(count) || count < 0)) {\n throw new ModelReviewError(\n `Model broker response usage.${field} must be a non-negative integer.`,\n {\n code: \"invalid_broker_response\",\n },\n );\n }\n }\n}\n\nfunction validateModelOutput(\n schema: Record<string, unknown>,\n output: unknown,\n usage?: ModelReviewUsage,\n): void {\n const ajv = new Ajv2020({ allErrors: true, strict: true });\n let validate: ReturnType<Ajv2020[\"compile\"]>;\n try {\n validate = ajv.compile(schema);\n } catch (error) {\n throw new ModelReviewError(\n `Model review schema is invalid: ${error instanceof Error ? error.message : String(error)}`,\n { code: \"invalid_model_schema\" },\n );\n }\n if (!validate(output)) {\n const detail = ajv.errorsText(validate.errors, { separator: \"; \" });\n throw new ModelReviewError(`Model output does not match the requested schema: ${detail}`, {\n code: \"invalid_model_output\",\n ...(usage === undefined ? {} : { usage }),\n });\n }\n}\n"]}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAmB,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAOjE,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,4BAA4B,GAAG,0BAA0B,CAAC;AACvE,MAAM,CAAC,MAAM,yBAAyB,GAAG,uBAAuB,CAAC;AAEjE,MAAM,wBAAwB,GAAG,OAAO,CAAC;AACzC,MAAM,oBAAoB,GAAG,OAAO,CAAC;AACrC,MAAM,6BAA6B,GAAG,KAAK,CAAC;AAC5C,MAAM,yBAAyB,GAAG,MAAM,CAAC;AACzC,MAAM,gBAAgB,GAAG,GAAG,IAAI,EAAE,CAAC;AACnC,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,CAAC;AAChC,MAAM,gBAAgB,GAAG,GAAG,IAAI,EAAE,CAAC;AACnC,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,CAAC;AACnC,MAAM,+BAA+B,GAAG,CAAC,CAAC;AAC1C,MAAM,6BAA6B,GAAG,GAAG,CAAC;AAC1C,MAAM,yBAAyB,GAAG,KAAK,CAAC;AACxC,MAAM,mCAAmC,GAAG,CAAC,CAAC;AAC9C,MAAM,+BAA+B,GAAG,CAAC,CAAC;AAC1C,MAAM,6BAA6B,GAAG,CAAC,IAAI,EAAE,CAAC;AAC9C,mFAAmF;AACnF,MAAM,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAGxD,gFAAgF;AAChF,iFAAiF;AACjF,4EAA4E;AAC5E,MAAM,qBAAsB,SAAQ,KAAK;IACV;IAA7B,YAA6B,UAAkB;QAC7C,KAAK,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC;QADX,eAAU,GAAV,UAAU,CAAQ;IAE/C,CAAC;IAEQ,QAAQ,CACf,OAAmC,EACnC,OAAoC;QAEpC,OAAO,KAAK,CAAC,QAAQ,CACnB;YACE,GAAG,OAAO;YACV,cAAc,EAAE,IAAI,CAAC,UAAU;YAC/B,WAAW,EAAE,IAAI,CAAC,UAAU;SAC7B,EACD,OAAO,CACR,CAAC;IACJ,CAAC;CACF;AA6DD,MAAM,UAAU,eAAe,CAAC,MAAgC,EAAE,MAAc;IAC9E,OAAO,CACL,MAAM,EAAE,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,CAC7F,CAAC;AACJ,CAAC;AACD,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,KAAK,YAAY,gBAAgB,IAAI,KAAK,CAAC,IAAI,KAAK,2BAA2B,CAAC;AACzF,CAAC;AA4ED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAO,GAAG,2DAA2D;QAC/E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,IAAI,CAAU;IACd,SAAS,CAAU;IACnB,WAAW,CAAqC;IACzD,yEAAyE;IAChE,KAAK,CAAoB;IAElC,YACE,OAAe,EACf,UAKI,EAAE;QAEN,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;IAC9C,CAAC;CACF;AAED,kFAAkF;AAClF,4EAA4E;AAC5E,SAAS,sBAAsB,CAC7B,QAAgB,EAChB,MAAoC;IAEpC,OAAO,IAAI,gBAAgB,CACzB,4EAA4E,QAAQ,gBAAgB,MAAM,IAAI,EAC9G;QACE,IAAI,EAAE,kCAAkC;QACxC,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;KACjD,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,cAAgC,OAAO,CAAC,GAAG;IAE3C,MAAM,QAAQ,GAAG,WAAW,CAAC,4BAA4B,CAAC,EAAE,IAAI,EAAE,CAAC;IACnE,MAAM,KAAK,GAAG,WAAW,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,CAAC;IAC7D,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACrF,OAAO,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO,IAAI,iBAAiB,CAAC,QAAQ,EAAE,KAAK,EAAE;QAC5C,gBAAgB,EAAE,WAAW,CAAC,2BAA2B,KAAK,GAAG;KAClE,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,KAAK,CAAC,MAAM;YACV,MAAM,IAAI,qBAAqB,EAAE,CAAC;QACpC,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,iBAAiB;IAEnB,QAAQ,CAAS;IACjB,MAAM,CAAS;IACf,gBAAgB,CAAS;IACzB,oBAAoB,CAAS;IAC7B,OAAO,CAAe;IAE/B,YAAY,QAAgB,EAAE,KAAa,EAAE,UAAoC,EAAE;QACjF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,IACE,MAAM,CAAC,QAAQ,KAAK,OAAO;YAC3B,CAAC,MAAM,CAAC,QAAQ,KAAK,WAAW;gBAC9B,MAAM,CAAC,QAAQ,KAAK,KAAK;gBACzB,MAAM,CAAC,QAAQ,KAAK,OAAO;gBAC3B,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC,EAClC,CAAC;YACD,MAAM,IAAI,gBAAgB,CACxB,0EAA0E,EAC1E,EAAE,IAAI,EAAE,yBAAyB,EAAE,CACpC,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACxB,MAAM,IAAI,gBAAgB,CAAC,2CAA2C,EAAE;gBACtE,IAAI,EAAE,sBAAsB;aAC7B,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,+BAA+B,CAAC;QACnF,MAAM,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,IAAI,6BAA6B,CAAC;QACzF,mBAAmB,CAAC,eAAe,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9D,mBAAmB,CAAC,mBAAmB,EAAE,qBAAqB,EAAE,CAAC,EAAE,yBAAyB,CAAC,CAAC;QAC9F,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,IAAI,CAAC,oBAAoB,GAAG,mBAAmB,CAAC;QAChD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;QAC7C,IAAI,OAAO,CAAC,gBAAgB,KAAK,IAAI;YAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC9F,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAsB;QACpC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC;QAC9C,mBAAmB,CAAC,SAAS,EAAE,kBAAkB,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QAC9D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxC,QAAQ,CAAC,QAAQ,GAAG,aAAa,CAAC;YAClC,IAAI,QAAkB,CAAC;YACvB,IAAI,GAAW,CAAC;YAChB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;oBAC/B,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,UAAU,CAAC,MAAM;oBACzB,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;wBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;wBACtC,4BAA4B,EAAE,MAAM,CAAC,gCAAgC,CAAC;qBACvE;oBACD,IAAI;iBACL,CAAC,CAAC;gBACH,GAAG,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAClE,CAAC;YACD,IAAI,OAAgB,CAAC;YACrB,IAAI,CAAC;gBACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,QAAQ,CAAC,EAAE;oBAAE,MAAM,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC/D,MAAM,IAAI,gBAAgB,CAAC,8BAA8B,EAAE;oBACzD,IAAI,EAAE,yBAAyB;iBAChC,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,qBAAqB,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACxE,OAAO,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1D,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAc,OAA8B;QACtD,IAAI,OAAO,CAAC,KAAK,EAAE,UAAU,KAAK,SAAS,EAAE,CAAC;YAC5C,MAAM,IAAI,gBAAgB,CACxB,0FAA0F,EAC1F,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAClC,CAAC;QACJ,CAAC;QACD,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,qBAAqB,GAAI,OAA+B,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;QAC7F,MAAM,WAAW,GAAG,uBAAuB,CACzC,UAAU,CAAC,MAAM,CAAC,SAAS,EAC3B,OAAO,CAAC,eAAe,KAAK,qBAAqB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,cAAc,CAC3F,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClF,MAAM,UAAU,GAAG,IAAI,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1E,IAAI,KAAK,GAAqB,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,gBAAgB,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;gBACrE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CACvC,UAAU,EACV,UAAU,CAAC,MAAM,EACjB,UAAU,EACV,WAAW,EACX,OAAO,CACR,CAAC;gBACF,IAAI,OAAO,CAAC,EAAE;oBAAE,OAAO,0BAA0B,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBACzE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;gBAC5B,IAAI,CAAC,CAAC,KAAK,YAAY,gBAAgB,CAAC;oBAAE,MAAM,KAAK,CAAC;gBACtD,sEAAsE;gBACtE,uEAAuE;gBACvE,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,qBAAqB,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,CAAC;oBACtF,MAAM,KAAK,CAAC;gBACd,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC1C,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,MAAM,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;gBACjF,IAAI,OAAO,KAAK,IAAI,CAAC,gBAAgB;oBACnC,MAAM,sBAAsB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;gBACzD,MAAM,IAAI,CAAC,aAAa,CACtB,OAAO,EACP,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,MAAM,CAAC,SAAS,EAC3B,WAAW,CACZ,CAAC;YACJ,CAAC;YACD,MAAM,sBAAsB,CAAC,IAAI,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,gBAAgB,CAAC;gBAAE,MAAM,KAAK,CAAC;YACtD,MAAM,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,6EAA6E;YAC7E,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,uDAAuD;YACzD,CAAC;QACH,CAAC;IACH,CAAC;IAED,qFAAqF;IACrF,KAAK,CAAC,cAAc,CAClB,UAAwC,EACxC,MAAmB,EACnB,UAAiC,EACjC,WAAuD,EACvD,OAAe;QAEf,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAI,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YACzE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACnD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CACJ,QAAQ,EACR,SAAS,EACT,SAAS,EACT,KAAK,YAAY,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,CACtE,CAAC;YACF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,KAAK,CAAC,aAAa,CACjB,OAAe,EACf,MAAmB,EACnB,SAAiB,EACjB,WAAuD;QAEvD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,yBAAyB,EACzB,IAAI,CAAC,oBAAoB,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAC/C,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzE,MAAM,gBAAgB,GAAG,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gBAAgB,CACd,KAAK,YAAY,gBAAgB;gBAC/B,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,qBAAqB,CAAC;gBACvC,CAAC,CAAC,qBAAqB,CAC1B,CAAC;YACF,IAAI,KAAK,YAAY,gBAAgB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACzD,MAAM,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACpD,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CACf,UAAwC,EACxC,MAAmB,EACnB,UAAiC;QAEjC,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACpC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,MAAM,EAAE,kBAAkB;oBAC1B,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;oBACtC,cAAc,EAAE,kBAAkB;oBAClC,4BAA4B,EAAE,MAAM,CAAC,gCAAgC,CAAC;iBACvE;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,eAAe,EAAE,gCAAgC;oBACjD,MAAM,EAAE,UAAU,CAAC,MAAM;oBACzB,KAAK,EAAE,UAAU,CAAC,KAAK;oBACvB,MAAM,EAAE,UAAU,CAAC,MAAM;oBACzB,MAAM,EAAE,UAAU,CAAC,MAAM;iBACG,CAAC;gBAC/B,MAAM;gBACN,UAAU;aACiC,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,OAAgB,CAAC;QACrB,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,gBAAgB,CAAC,uCAAuC,EAAE;gBAClE,IAAI,EAAE,yBAAyB;aAChC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,OAAmC,CAAC;YACpD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;gBAAE,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9D,MAAM,IAAI,gBAAgB,CACxB,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,8BAA8B,QAAQ,CAAC,MAAM,GAAG,EAC1E;gBACE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,IAAI,qBAAqB;gBAClD,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG;gBAC7D,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;aACjE,CACF,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAChD,mBAAmB,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxE,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,MAAW;YAC5B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,GAAG,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAkB,EAClB,OAA8B,EAC9B,WAAmE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM;IAErF,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACtC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC;IAC3E,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,MAAM,CAAI,WAAW,CAAC,CAAC,CAAC;IAElF,MAAM,eAAe,GAAG,UAAU,CAAC,eAAe,IAAI,mCAAmC,CAAC;IAC1F,mBAAmB,CACjB,eAAe,EACf,4BAA4B,EAC5B,CAAC,EACD,+BAA+B,CAChC,CAAC;IACF,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI,wBAAwB,CAAC;IACxE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,KAAK,GAAqB,EAAE,CAAC;IACjC,IAAI,QAA4B,CAAC;IAEjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,eAAe,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACvC,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,CAAC;QAC/C,IAAI,kBAAkB,IAAI,CAAC;YACzB,MAAM,oBAAoB,CAAC,sBAAsB,CAAC,OAAO,GAAG,CAAC,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC;QACrF,IAAI,OAAmC,CAAC;QACxC,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,uBAAuB,CACrC,KAAK,EACL;gBACE,GAAG,WAAW;gBACd,MAAM,EACJ,QAAQ,KAAK,SAAS;oBACpB,CAAC,CAAC,WAAW,CAAC,MAAM;oBACpB,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,oLAAoL,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;gBAC7P,MAAM,EAAE,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE;aACjE,EACD,UAAU,EACV,QAAQ,CACT,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,gBAAgB,CAAC;gBAAE,MAAM,KAAK,CAAC;YACtD,MAAM,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;QACD,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChF,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;YACf,OAAO;gBACL,GAAG,OAAO,CAAC,MAAM;gBACjB,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;aAC1F,CAAC;QACJ,CAAC;QACD,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC5B,IAAI,OAAO,KAAK,eAAe;YAC7B,MAAM,yBAAyB,CAAC,eAAe,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,IAAI,gBAAgB,CAAC,qDAAqD,EAAE;QAChF,IAAI,EAAE,yBAAyB;QAC/B,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;AACL,CAAC;AAMD,6EAA6E;AAC7E,4EAA4E;AAC5E,KAAK,UAAU,uBAAuB,CACpC,KAAkB,EAClB,OAA8B,EAC9B,UAAoC,EACpC,QAAgE;IAEhE,IAAI,MAA4B,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAwB,EAAE,GAAG,OAAO,EAAE,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,CAAC;QAClF,MAAM,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,MAAM,CAAI,QAAQ,CAAC,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,gBAAgB,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB;YAAE,MAAM,KAAK,CAAC;QAC/F,OAAO;YACL,EAAE,EAAE,KAAK;YACT,QAAQ,EAAE,wBAAwB,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;YACzD,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,yBAAyB,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IACxF,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B,CACjC,MAA4B,EAC5B,WAA6B;IAE7B,MAAM,KAAK,GAAG,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACvD,OAAO;QACL,GAAG,MAAM;QACT,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;KAC1F,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,8EAA8E;AAC9E,SAAS,oBAAoB,CAAC,KAAuB,EAAE,KAAuB;IAC5E,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtF,OAAO,IAAI,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE;QACzC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;KACzC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAChC,QAAgB,EAChB,QAAgB,EAChB,KAAuB;IAEvB,OAAO,IAAI,gBAAgB,CACzB,kDAAkD,QAAQ,cAAc,QAAQ,EAAE,EAClF;QACE,IAAI,EAAE,yBAAyB;QAC/B,SAAS,EAAE,KAAK;QAChB,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;KAC1F,CACF,CAAC;AACJ,CAAC;AAED,qFAAqF;AACrF,0FAA0F;AAC1F,SAAS,wBAAwB,CAC/B,KAAuB,EACvB,MAA+B;IAE/B,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAC/E,MAAM,SAAS,GACb,WAAW,CAAC,MAAM,GAAG,CAAC;QACpB,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,uCAAuC,CAAC,CAAC,CAAC;IAC3E,MAAM,QAAQ,GACZ,SAAS,CAAC,MAAM,KAAK,CAAC;QACpB,CAAC,CAAC,CAAC,qBAAqB,CAAC,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAChD,CAAC,CAAC,SAAS;aACN,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;aACZ,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACpF,OAAO,yBAAyB,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAA2B,EAC3B,MAAc,EACd,MAA+B;IAE/B,IAAI,IAAI,GAAG,MAAM,CAAC;IAClB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAC5E,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAiE,CAAC;QAC1F,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC;YACjD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACnC,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;aAAM,IACL,IAAI,CAAC,IAAI,KAAK,OAAO;YACrB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;YACrB,IAAI,CAAC,KAAK;YACV,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAC9B,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,IAAI,GAAG,IAAI,CAAC,KAAgC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,IAAI,GAAG,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IACD,MAAM,EAAE,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,MAAM,MAAM,GAAG,wDAAwD,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrF,IAAI,MAAM,GAAG,gEAAgE,CAAC;IAC9E,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,CAAC,yBAAyB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/E,CAAC;SAAM,IAAI,kDAAkD,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,MAAM,GAAG,MAAM,CAAC;IAClB,CAAC;SAAM,IACL,sCAAsC,CAAC,IAAI,CAAC,MAAM,CAAC;QACnD,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ;QAC5B,IAAI,CAAC,GAAG,KAAK,IAAI,EACjB,CAAC;QACD,MAAM,WAAW,GAAI,IAAI,CAAC,GAA+B,CAAC,WAAW,CAAC;QACtE,MAAM;YACJ,OAAO,WAAW,KAAK,QAAQ;gBAC7B,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,+CAA+C,CAAC;IACxD,CAAC;SAAM,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,MAAM,GAAG,gDAAgD,CAAC;IAC5D,CAAC;IACD,OAAO,mDAAmD,EAAE,KAAK,MAAM,EAAE,CAAC;AAC5E,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAc;IAC/C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7C,OAAO,OAAO,CAAC,UAAU,IAAI,6BAA6B;QACxD,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,6BAA6B,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;AAChF,CAAC;AAED,SAAS,aAAa,CACpB,KAAuB,EACvB,IAAkC;IAElC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO;QACL,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;YACnE,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;YACrE,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,EAAE,CAAC;KAC5E,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,OAAe,EACf,MAAmB,EACnB,SAAiB;IAEjB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,OAAO,CAAC,CAAC;QACZ,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,OAAO,IAAI,gBAAgB,CAAC,6BAA6B,SAAS,aAAa,EAAE;QAC/E,IAAI,EAAE,eAAe;QACrB,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,OAA2B;IACnD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACpD,MAAM,IAAI,gBAAgB,CAAC,yCAAyC,EAAE;YACpE,IAAI,EAAE,uBAAuB;SAC9B,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACvE,MAAM,IAAI,gBAAgB,CAAC,iDAAiD,EAAE;YAC5E,IAAI,EAAE,uBAAuB;SAC9B,CAAC,CAAC;IACL,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,IAAI,WAAW,GAAG,gBAAgB,EAAE,CAAC;QACnC,MAAM,IAAI,gBAAgB,CAAC,+BAA+B,gBAAgB,SAAS,EAAE;YACnF,IAAI,EAAE,yBAAyB;SAChC,CAAC,CAAC;IACL,CAAC;IACD,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;IACzD,IACE,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ;QAClC,OAAO,CAAC,MAAM,KAAK,IAAI;QACvB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAC7B,CAAC;QACD,MAAM,IAAI,gBAAgB,CAAC,mDAAmD,EAAE;YAC9E,IAAI,EAAE,sBAAsB;SAC7B,CAAC,CAAC;IACL,CAAC;IACD,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAE5D,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,EAAE,mBAAmB,IAAI,6BAA6B,CAAC;IACjG,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI,wBAAwB,CAAC;IACxE,mBAAmB,CACjB,mBAAmB,EACnB,4BAA4B,EAC5B,CAAC,EACD,yBAAyB,CAC1B,CAAC;IACF,mBAAmB,CAAC,SAAS,EAAE,kBAAkB,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAC;IAC5E,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,EAAE,mBAAmB,EAAE,SAAS,EAAE;KAC3C,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAc,EAAE,IAAY,EAAE,OAAe;IACpE,IAAI,OAA2B,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,gBAAgB,CACxB,gBAAgB,IAAI,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC3G,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAClC,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,IAAI,6BAA6B,EAAE;YAC5E,IAAI,EAAE,uBAAuB;SAC9B,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;QACjD,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,IAAI,YAAY,OAAO,SAAS,EAAE;YAC3E,IAAI,EAAE,yBAAyB;SAChC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa,EAAE,IAAY,EAAE,OAAe,EAAE,OAAe;IACxF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,OAAO,IAAI,KAAK,GAAG,OAAO,EAAE,CAAC;QACnE,MAAM,IAAI,gBAAgB,CAAC,GAAG,IAAI,4BAA4B,OAAO,YAAY,OAAO,GAAG,EAAE;YAC3F,IAAI,EAAE,sBAAsB;SAC7B,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAsB;IACjD,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,gBAAgB,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,MAAM,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5D,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/D,IAAI,CAAC,gBAAgB,IAAI,CAAC,YAAY;QACpC,MAAM,IAAI,gBAAgB,CAAC,8BAA8B,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAC;IACjG,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzE,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAc,EAAE,OAAiB;IAC9D,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;IAC3D,OAAO,IAAI,gBAAgB,CAAC,sCAAsC,MAAM,GAAG,EAAE;QAC3E,IAAI,EACF,OAAO,OAAO,EAAE,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE;YACtD,CAAC,CAAC,OAAO,CAAC,IAAI;YACd,CAAC,CAAC,iCAAiC;QACvC,SAAS,EAAE,OAAO,OAAO,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG;QACtF,WAAW,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;KACpC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc,EAAE,OAAiB;IAC7D,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACzF,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC;YAAE,OAAO,KAAK,CAAC;QACpD,GAAG,IAAI,WAAW,CAAC;IACrB,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AACnC,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc,EAAE,QAAwB;IACnE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5F,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACjE,MAAM,sBAAsB,GAAG,oBAAoB,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACnF,OAAO,cAAc,IAAI,iBAAiB,IAAI,sBAAsB,CAAC;AACvE,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAAgB,EAChB,SAAyC;IAEzC,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7D,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM;QAC3E,MAAM,IAAI,gBAAgB,CAAC,iCAAiC,EAAE;YAC5D,IAAI,EAAE,yBAAyB;SAChC,CAAC,CAAC;IACL,KAAK,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC;YAC7C,MAAM,IAAI,gBAAgB,CAAC,6BAA6B,EAAE;gBACxD,IAAI,EAAE,yBAAyB;aAChC,CAAC,CAAC;IACP,CAAC;IACD,OAAO,OAAmC,CAAC;AAC7C,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAc,EACd,MAAmB,EACnB,SAAiB;IAEjB,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACxD,IAAI,KAAK,YAAY,gBAAgB;QAAE,OAAO,KAAK,CAAC;IACpD,OAAO,IAAI,gBAAgB,CACzB,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACxF,EAAE,IAAI,EAAE,oBAAoB,EAAE,SAAS,EAAE,IAAI,EAAE,CAChD,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,QAAkB;IACnD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACxD,IAAI,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,kBAAkB,EAAE,CAAC;QAC/D,MAAM,IAAI,gBAAgB,CAAC,iCAAiC,kBAAkB,SAAS,EAAE;YACvF,IAAI,EAAE,0BAA0B;SACjC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACzC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,SAAS,CAAC;QACR,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,IAAI,EAAE,CAAC;YACT,MAAM;QACR,CAAC;QACD,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC;QACzB,IAAI,IAAI,GAAG,kBAAkB,EAAE,CAAC;YAC9B,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,gBAAgB,CAAC,iCAAiC,kBAAkB,SAAS,EAAE;gBACvF,IAAI,EAAE,0BAA0B;aACjC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,gBAAgB,CAAC,0CAA0C,EAAE;YACrE,IAAI,EAAE,yBAAyB;SAChC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,KAAqC,CAAC;IACvD,IAAI,QAAQ,CAAC,eAAe,KAAK,gCAAgC,EAAE,CAAC;QAClE,MAAM,IAAI,gBAAgB,CACxB,yCAAyC,gCAAgC,GAAG,EAC5E,EAAE,IAAI,EAAE,4BAA4B,EAAE,CACvC,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC7E,MAAM,IAAI,gBAAgB,CAAC,4DAA4D,EAAE;YACvF,IAAI,EAAE,yBAAyB;SAChC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACvE,MAAM,IAAI,gBAAgB,CAAC,yDAAyD,EAAE;YACpF,IAAI,EAAE,yBAAyB;SAChC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,gBAAgB,CAAC,0CAA0C,EAAE;YACrE,IAAI,EAAE,yBAAyB;SAChC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACjC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,QAA+B,CAAC;AACzC,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,gBAAgB,CAAC,gDAAgD,EAAE;YAC3E,IAAI,EAAE,yBAAyB;SAChC,CAAC,CAAC;IACL,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,CAAC,aAAa,EAAE,cAAc,CAAU,EAAE,CAAC;QAC7D,MAAM,KAAK,GAAI,KAA0B,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,gBAAgB,CACxB,+BAA+B,KAAK,kCAAkC,EACtE;gBACE,IAAI,EAAE,yBAAyB;aAChC,CACF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAA+B,EAC/B,MAAe,EACf,KAAwB;IAExB,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,IAAI,QAAwC,CAAC;IAC7C,IAAI,CAAC;QACH,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,gBAAgB,CACxB,mCAAmC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC3F,EAAE,IAAI,EAAE,sBAAsB,EAAE,CACjC,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,IAAI,gBAAgB,CAAC,qDAAqD,MAAM,EAAE,EAAE;YACxF,IAAI,EAAE,sBAAsB;YAC5B,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;AACH,CAAC","sourcesContent":["import { Ajv2020 } from \"ajv/dist/2020.js\";\nimport { Agent, type Dispatcher } from \"undici\";\nimport { modelAttemptDiagnostics } from \"./model-diagnostics.js\";\nimport type {\n ModelRepositoryCitation,\n ModelRepositoryRetrieval,\n ModelRepositoryToolOptions,\n} from \"./repository-model.js\";\n\nexport const ADVERSARY_MODEL_PROTOCOL_VERSION = 1;\nexport const ADVERSARY_MODEL_ENDPOINT_ENV = \"ADVERSARY_MODEL_ENDPOINT\";\nexport const ADVERSARY_MODEL_TOKEN_ENV = \"ADVERSARY_MODEL_TOKEN\";\n\nconst DEFAULT_MODEL_TIMEOUT_MS = 600_000;\nconst MAX_MODEL_TIMEOUT_MS = 600_000;\nconst DEFAULT_MAXIMUM_OUTPUT_TOKENS = 8_192;\nconst MAX_MAXIMUM_OUTPUT_TOKENS = 65_536;\nconst MAX_PROMPT_BYTES = 256 << 10;\nconst MAX_INPUT_BYTES = 4 << 20;\nconst MAX_SCHEMA_BYTES = 512 << 10;\nconst MAX_RESPONSE_BYTES = 4 << 20;\nconst DEFAULT_BROKER_MAXIMUM_ATTEMPTS = 3;\nconst DEFAULT_BROKER_RETRY_DELAY_MS = 250;\nconst MAX_BROKER_RETRY_DELAY_MS = 5_000;\nconst DEFAULT_VALIDATION_MAXIMUM_ATTEMPTS = 3;\nconst MAX_VALIDATION_MAXIMUM_ATTEMPTS = 5;\nconst MAX_VALIDATION_FEEDBACK_BYTES = 8 << 10;\n// Internal request metadata survives wrapper spreads but never enters broker JSON.\nconst outputRepairRequest = Symbol(\"sdk.output-repair\");\ntype OutputRepairRequest = ModelReviewRequest & { [outputRepairRequest]?: true };\n\n// Fetch supplies its own five-minute header timeout, overriding Agent defaults.\n// Override dispatch options for this review only; its shared AbortSignal remains\n// the authoritative deadline across connection, headers, body, and retries.\nclass ModelBrokerDispatcher extends Agent {\n constructor(private readonly deadlineMs: number) {\n super({ connectTimeout: deadlineMs });\n }\n\n override dispatch(\n options: Dispatcher.DispatchOptions,\n handler: Dispatcher.DispatchHandlers,\n ): boolean {\n return super.dispatch(\n {\n ...options,\n headersTimeout: this.deadlineMs,\n bodyTimeout: this.deadlineMs,\n },\n handler,\n );\n }\n}\n\nexport interface ModelReviewBudget {\n maximumOutputTokens?: number;\n timeoutMs?: number;\n}\n\nexport interface ModelReviewValidation<T = unknown> {\n /** Validate a completed model result. Throw to retry generation with the error as feedback. */\n validate(result: ModelReviewResult<T>): void | Promise<void>;\n /** Total generation attempts, including the first. Defaults to 3 and is capped at 5. */\n maximumAttempts?: number;\n}\n\nexport interface ModelReviewRequest<T = unknown> {\n /** Attention-only choice task; ordinary reviews ignore this SDK-local hint. */\n attentionTask?: \"configuration-go-vet\" | \"configuration-gosec\";\n /** Local timing classification only; never sent to the broker or model. */\n diagnosticStage?: \"model_review\" | \"repository_planning\";\n prompt: string;\n input: unknown;\n schema: Record<string, unknown>;\n budget?: ModelReviewBudget;\n validation?: ModelReviewValidation<T>;\n tools?: {\n repository: ModelRepositoryToolOptions;\n };\n}\n\nexport interface ModelReviewUsage {\n inputTokens?: number;\n outputTokens?: number;\n}\n\nexport interface ModelReviewResult<T = unknown> {\n output: T;\n provider: string;\n model: string;\n usage?: ModelReviewUsage;\n citations?: readonly ModelRepositoryCitation[];\n retrieval?: ModelRepositoryRetrieval;\n}\n\nexport interface ChoiceQuestion {\n type: \"choice\";\n instructions: string;\n criteria: Record<string, string>;\n}\nexport interface ChoiceRequest {\n state: unknown;\n questions: Record<string, ChoiceQuestion>;\n timeoutMs?: number;\n}\nexport interface ChoiceAnswer {\n type: \"choice\";\n choice: string;\n confidence: number;\n probabilities: Record<string, number>;\n}\nexport type ChoiceAnswers = Record<string, ChoiceAnswer>;\n\nexport function confidentChoice(answer: ChoiceAnswer | undefined, choice: string): boolean {\n return (\n answer?.choice === choice && Number.isFinite(answer.confidence) && answer.confidence >= 0.85\n );\n}\nexport function classifierPolicyError(error: unknown): boolean {\n return error instanceof ModelReviewError && error.code === \"classifier_policy_blocked\";\n}\n\nexport interface ReviewModel {\n review<T = unknown>(request: ModelReviewRequest<T>): Promise<ModelReviewResult<T>>;\n /** Present only when the host authorizes attention-routing System 1 calls. */\n classify?(request: ChoiceRequest): Promise<ChoiceAnswers>;\n}\n\nexport interface BrokerReviewModelOptions {\n attentionSystem1?: boolean;\n maximumAttempts?: number;\n initialRetryDelayMs?: number;\n random?: () => number;\n}\n\n/**\n * Request a short noun-phrase concern suitable after \"I would address …\".\n * Implemented by the SDK via {@link ReviewModel.review} (CLI broker pass-through).\n */\nexport interface ModelConcernRequest {\n /** Free-form title, clause, or draft concern to rewrite. */\n text: string;\n budget?: ModelReviewBudget;\n /**\n * Extra attempts when the model returns a phrase that fails noun-phrase validation.\n * Defaults to 1 retry (2 total attempts).\n */\n maxAttempts?: number;\n}\n\nexport interface ModelConcernResult {\n /** Validated noun phrase (see requireOpinionConcern). */\n concern: string;\n /** False when `text` was already a valid noun phrase (no broker call). */\n rewritten: boolean;\n provider: string;\n model: string;\n usage?: ModelReviewUsage;\n}\n\n/** Rule-context model: broker review plus opinion-concern rewrite. */\nexport type ContextualReviewModel = ReviewModel & {\n concern(request: ModelConcernRequest): Promise<ModelConcernResult>;\n};\n\nexport type ModelEnvironment = Readonly<Record<string, string | undefined>>;\n\ninterface ModelBrokerRequest\n extends Omit<ModelReviewRequest, \"validation\" | \"tools\" | \"diagnosticStage\"> {\n protocolVersion: typeof ADVERSARY_MODEL_PROTOCOL_VERSION;\n}\n\ninterface ModelBrokerResponse {\n protocolVersion: typeof ADVERSARY_MODEL_PROTOCOL_VERSION;\n output: unknown;\n provider: string;\n model: string;\n usage?: ModelReviewUsage;\n}\n\ninterface ModelBrokerErrorResponse {\n usage?: ModelReviewUsage;\n error?: {\n code?: string;\n message?: string;\n retryable?: boolean;\n };\n}\n\ntype NormalizedModelReviewRequest = Omit<\n ModelReviewRequest,\n \"budget\" | \"validation\" | \"tools\" | \"diagnosticStage\"\n> & {\n budget: Required<ModelReviewBudget>;\n};\n\nexport class ModelUnavailableError extends Error {\n constructor(message = \"Model review is unavailable for this adversary execution.\") {\n super(message);\n this.name = \"ModelUnavailableError\";\n }\n}\n\nexport class ModelReviewError extends Error {\n readonly code?: string;\n readonly retryable: boolean;\n readonly diagnostics?: Readonly<Record<string, unknown>>;\n /** Reported usage from completed requests, including rejected output. */\n readonly usage?: ModelReviewUsage;\n\n constructor(\n message: string,\n options: {\n code?: string;\n retryable?: boolean;\n diagnostics?: Readonly<Record<string, unknown>>;\n usage?: ModelReviewUsage;\n } = {},\n ) {\n super(message);\n this.name = \"ModelReviewError\";\n this.code = options.code;\n this.diagnostics = options.diagnostics;\n this.usage = options.usage;\n this.retryable = options.retryable ?? false;\n }\n}\n\n// The message carries the code because subprocess runners may only retain stderr.\n// Never include an upstream error body, prompt, or validator feedback here.\nfunction exhaustedModelRecovery(\n attempts: number,\n reason: \"deadline\" | \"attempt_limit\",\n): ModelReviewError {\n return new ModelReviewError(\n `model_request_recovery_exhausted: Model request recovery exhausted after ${attempts} attempt(s) (${reason}).`,\n {\n code: \"model_request_recovery_exhausted\",\n retryable: false,\n diagnostics: Object.freeze({ attempts, reason }),\n },\n );\n}\n\nexport function createModelFromEnvironment(\n environment: ModelEnvironment = process.env,\n): ReviewModel {\n const endpoint = environment[ADVERSARY_MODEL_ENDPOINT_ENV]?.trim();\n const token = environment[ADVERSARY_MODEL_TOKEN_ENV]?.trim();\n if (endpoint === undefined || endpoint === \"\" || token === undefined || token === \"\") {\n return unavailableModel();\n }\n return new BrokerReviewModel(endpoint, token, {\n attentionSystem1: environment.ADVERSARY_ATTENTION_SYSTEM1 === \"1\",\n });\n}\n\nexport function unavailableModel(): ReviewModel {\n return Object.freeze({\n async review(): Promise<never> {\n throw new ModelUnavailableError();\n },\n });\n}\n\nexport class BrokerReviewModel implements ReviewModel {\n declare readonly classify?: (request: ChoiceRequest) => Promise<ChoiceAnswers>;\n readonly endpoint: string;\n readonly #token: string;\n readonly #maximumAttempts: number;\n readonly #initialRetryDelayMs: number;\n readonly #random: () => number;\n\n constructor(endpoint: string, token: string, options: BrokerReviewModelOptions = {}) {\n const parsed = new URL(endpoint);\n if (\n parsed.protocol !== \"http:\" ||\n (parsed.hostname !== \"127.0.0.1\" &&\n parsed.hostname !== \"::1\" &&\n parsed.hostname !== \"[::1]\" &&\n parsed.hostname !== \"localhost\")\n ) {\n throw new ModelReviewError(\n \"The model broker endpoint must use HTTP on the local loopback interface.\",\n { code: \"invalid_broker_endpoint\" },\n );\n }\n if (token.trim() === \"\") {\n throw new ModelReviewError(\"The model broker token must not be empty.\", {\n code: \"invalid_broker_token\",\n });\n }\n this.endpoint = parsed.toString();\n this.#token = token;\n const maximumAttempts = options.maximumAttempts ?? DEFAULT_BROKER_MAXIMUM_ATTEMPTS;\n const initialRetryDelayMs = options.initialRetryDelayMs ?? DEFAULT_BROKER_RETRY_DELAY_MS;\n requireIntegerRange(maximumAttempts, \"maximumAttempts\", 1, 5);\n requireIntegerRange(initialRetryDelayMs, \"initialRetryDelayMs\", 0, MAX_BROKER_RETRY_DELAY_MS);\n this.#maximumAttempts = maximumAttempts;\n this.#initialRetryDelayMs = initialRetryDelayMs;\n this.#random = options.random ?? Math.random;\n if (options.attentionSystem1 === true) this.classify = (request) => this.#classify(request);\n }\n\n async #classify(request: ChoiceRequest): Promise<ChoiceAnswers> {\n const timeoutMs = request.timeoutMs ?? 45_000;\n requireIntegerRange(timeoutMs, \"choice timeoutMs\", 1, 45_000);\n const body = encodeChoiceRequest(request);\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const endpoint = new URL(this.endpoint);\n endpoint.pathname = \"/v1/choices\";\n let response: Response;\n let raw: string;\n try {\n response = await fetch(endpoint, {\n method: \"POST\",\n signal: controller.signal,\n headers: {\n \"content-type\": \"application/json\",\n authorization: `Bearer ${this.#token}`,\n \"x-adversary-model-protocol\": String(ADVERSARY_MODEL_PROTOCOL_VERSION),\n },\n body,\n });\n raw = await readBoundedResponse(response);\n } catch (error) {\n throw brokerTransportError(error, controller.signal, timeoutMs);\n }\n let payload: unknown;\n try {\n payload = JSON.parse(raw);\n } catch {\n if (!response.ok) throw choiceResponseFailure(response.status);\n throw new ModelReviewError(\"Invalid classifier response.\", {\n code: \"invalid_choice_response\",\n });\n }\n if (!response.ok) throw choiceResponseFailure(response.status, payload);\n return requireChoiceAnswers(payload, request.questions);\n } finally {\n clearTimeout(timer);\n }\n }\n\n async review<T = unknown>(request: ModelReviewRequest<T>): Promise<ModelReviewResult<T>> {\n if (request.tools?.repository !== undefined) {\n throw new ModelReviewError(\n \"Repository model tools require ctx.model so the SDK can enforce the repository boundary.\",\n { code: \"invalid_model_request\" },\n );\n }\n const normalized = normalizeRequest(request);\n const validationOwnsRetries = (request as OutputRepairRequest)[outputRepairRequest] === true;\n const diagnostics = modelAttemptDiagnostics(\n normalized.budget.timeoutMs,\n request.diagnosticStage === \"repository_planning\" ? \"repository_planning\" : \"model_review\",\n );\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), normalized.budget.timeoutMs);\n const dispatcher = new ModelBrokerDispatcher(normalized.budget.timeoutMs);\n let usage: ModelReviewUsage = {};\n try {\n for (let attempt = 1; attempt <= this.#maximumAttempts; attempt += 1) {\n const outcome = await this.#reviewAttempt<T>(\n normalized,\n controller.signal,\n dispatcher,\n diagnostics,\n attempt,\n );\n if (outcome.ok) return withAccumulatedResultUsage(outcome.result, usage);\n const error = outcome.error;\n if (!(error instanceof ModelReviewError)) throw error;\n // Only an opted-in validation loop takes ownership of schema retries.\n // Other callers retain the broker's existing retryable-error behavior.\n if (!error.retryable || (validationOwnsRetries && error.code === \"invalid_model_output\"))\n throw error;\n usage = addModelUsage(usage, error.usage);\n if (controller.signal.aborted) throw exhaustedModelRecovery(attempt, \"deadline\");\n if (attempt === this.#maximumAttempts)\n throw exhaustedModelRecovery(attempt, \"attempt_limit\");\n await this.#waitForRetry(\n attempt,\n controller.signal,\n normalized.budget.timeoutMs,\n diagnostics,\n );\n }\n throw exhaustedModelRecovery(this.#maximumAttempts, \"attempt_limit\");\n } catch (error) {\n if (!(error instanceof ModelReviewError)) throw error;\n throw withAccumulatedUsage(error, usage);\n } finally {\n clearTimeout(timeout);\n // Cleanup must not replace the typed request error or a successful response.\n try {\n await dispatcher.destroy();\n } catch {\n // The dispatcher is no longer used after this request.\n }\n }\n }\n\n // One attempt owns its timing and error outcome; retry decisions belong to review().\n async #reviewAttempt<T>(\n normalized: NormalizedModelReviewRequest,\n signal: AbortSignal,\n dispatcher: ModelBrokerDispatcher,\n diagnostics: ReturnType<typeof modelAttemptDiagnostics>,\n attempt: number,\n ): Promise<{ ok: true; result: ModelReviewResult<T> } | { ok: false; error: unknown }> {\n const finish = diagnostics.start(attempt);\n try {\n const result = await this.#reviewOnce<T>(normalized, signal, dispatcher);\n finish(\"succeeded\", result.provider, result.model);\n return { ok: true, result };\n } catch (error) {\n finish(\n \"failed\",\n undefined,\n undefined,\n error instanceof ModelReviewError ? error.code : \"broker_unavailable\",\n );\n return { ok: false, error };\n }\n }\n\n // Keep backoff, timeout diagnostics, and error translation together.\n async #waitForRetry(\n attempt: number,\n signal: AbortSignal,\n timeoutMs: number,\n diagnostics: ReturnType<typeof modelAttemptDiagnostics>,\n ): Promise<void> {\n const exponential = Math.min(\n MAX_BROKER_RETRY_DELAY_MS,\n this.#initialRetryDelayMs * 2 ** (attempt - 1),\n );\n const jittered = Math.round(exponential * (0.75 + 0.5 * this.#random()));\n const retryDelayFailed = diagnostics.startRetryDelay(attempt);\n try {\n await waitForRetry(jittered, signal, timeoutMs);\n } catch (error) {\n retryDelayFailed(\n error instanceof ModelReviewError\n ? (error.code ?? \"model_review_failed\")\n : \"model_review_failed\",\n );\n if (error instanceof ModelReviewError && error.retryable) {\n throw exhaustedModelRecovery(attempt, \"deadline\");\n }\n throw error;\n }\n }\n\n async #reviewOnce<T>(\n normalized: NormalizedModelReviewRequest,\n signal: AbortSignal,\n dispatcher: ModelBrokerDispatcher,\n ): Promise<ModelReviewResult<T>> {\n let response: Response;\n try {\n response = await fetch(this.endpoint, {\n method: \"POST\",\n headers: {\n accept: \"application/json\",\n authorization: `Bearer ${this.#token}`,\n \"content-type\": \"application/json\",\n \"x-adversary-model-protocol\": String(ADVERSARY_MODEL_PROTOCOL_VERSION),\n },\n body: JSON.stringify({\n protocolVersion: ADVERSARY_MODEL_PROTOCOL_VERSION,\n prompt: normalized.prompt,\n input: normalized.input,\n schema: normalized.schema,\n budget: normalized.budget,\n } satisfies ModelBrokerRequest),\n signal,\n dispatcher,\n } as RequestInit & { dispatcher: Dispatcher });\n } catch (error) {\n throw brokerTransportError(error, signal, normalized.budget.timeoutMs);\n }\n\n let body: string;\n try {\n body = await readBoundedResponse(response);\n } catch (error) {\n throw brokerTransportError(error, signal, normalized.budget.timeoutMs);\n }\n let decoded: unknown;\n try {\n decoded = JSON.parse(body);\n } catch {\n throw new ModelReviewError(\"Model broker returned malformed JSON.\", {\n code: \"invalid_broker_response\",\n });\n }\n if (!response.ok) {\n const failure = decoded as ModelBrokerErrorResponse;\n if (failure.usage !== undefined) validateUsage(failure.usage);\n throw new ModelReviewError(\n failure.error?.message ?? `Model broker returned HTTP ${response.status}.`,\n {\n code: failure.error?.code ?? \"model_review_failed\",\n retryable: failure.error?.retryable ?? response.status >= 500,\n ...(failure.usage === undefined ? {} : { usage: failure.usage }),\n },\n );\n }\n\n const envelope = requireBrokerResponse(decoded);\n validateModelOutput(normalized.schema, envelope.output, envelope.usage);\n return {\n output: envelope.output as T,\n provider: envelope.provider,\n model: envelope.model,\n ...(envelope.usage === undefined ? {} : { usage: envelope.usage }),\n };\n }\n}\n\n/**\n * Run schema and adversary-owned semantic validation with SDK-owned bounded regeneration.\n *\n * Each retry receives the validator failure as trusted SDK feedback while retaining the\n * original input. The original timeout is shared by all validation attempts, and usage is\n * aggregated across them. Repository callers may decorate the raw result with citations before\n * validation without repeating repository retrieval.\n */\nexport async function reviewWithValidation<T>(\n model: ReviewModel,\n request: ModelReviewRequest<T>,\n decorate: (result: ModelReviewResult<T>) => ModelReviewResult<T> = (result) => result,\n): Promise<ModelReviewResult<T>> {\n const validation = request.validation;\n const { validation: _validation, tools: _tools, ...baseRequest } = request;\n if (validation === undefined) return decorate(await model.review<T>(baseRequest));\n\n const maximumAttempts = validation.maximumAttempts ?? DEFAULT_VALIDATION_MAXIMUM_ATTEMPTS;\n requireIntegerRange(\n maximumAttempts,\n \"validation.maximumAttempts\",\n 1,\n MAX_VALIDATION_MAXIMUM_ATTEMPTS,\n );\n const timeoutMs = request.budget?.timeoutMs ?? DEFAULT_MODEL_TIMEOUT_MS;\n const startedAt = Date.now();\n let usage: ModelReviewUsage = {};\n let feedback: string | undefined;\n\n for (let attempt = 1; attempt <= maximumAttempts; attempt += 1) {\n const elapsed = Date.now() - startedAt;\n const remainingTimeoutMs = timeoutMs - elapsed;\n if (remainingTimeoutMs <= 0)\n throw withAccumulatedUsage(exhaustedModelRecovery(attempt - 1, \"deadline\"), usage);\n let outcome: OutputValidationAttempt<T>;\n try {\n outcome = await reviewValidationAttempt(\n model,\n {\n ...baseRequest,\n prompt:\n feedback === undefined\n ? baseRequest.prompt\n : `${baseRequest.prompt}\\n\\nSDK VALIDATION FEEDBACK:\\nThe previous response failed output validation. Correct the response using this trusted validation result and return the complete response again.\\n${JSON.stringify({ attempt, error: feedback })}`,\n budget: { ...baseRequest.budget, timeoutMs: remainingTimeoutMs },\n },\n validation,\n decorate,\n );\n } catch (error) {\n if (!(error instanceof ModelReviewError)) throw error;\n throw withAccumulatedUsage(error, usage);\n }\n usage = addModelUsage(usage, outcome.ok ? outcome.result.usage : outcome.usage);\n if (outcome.ok) {\n return {\n ...outcome.result,\n ...(usage.inputTokens === undefined && usage.outputTokens === undefined ? {} : { usage }),\n };\n }\n feedback = outcome.feedback;\n if (attempt === maximumAttempts)\n throw exhaustedOutputValidation(maximumAttempts, feedback, usage);\n }\n throw new ModelReviewError(\"Model validation retry loop exhausted unexpectedly.\", {\n code: \"model_validation_failed\",\n retryable: false,\n });\n}\n\ntype OutputValidationAttempt<T> =\n | { ok: true; result: ModelReviewResult<T> }\n | { ok: false; feedback: string; usage?: ModelReviewUsage };\n\n// Keep generation and semantic validation failures together for one prepared\n// request. Neither kind of rejection repeats repository evidence gathering.\nasync function reviewValidationAttempt<T>(\n model: ReviewModel,\n request: ModelReviewRequest<T>,\n validation: ModelReviewValidation<T>,\n decorate: (result: ModelReviewResult<T>) => ModelReviewResult<T>,\n): Promise<OutputValidationAttempt<T>> {\n let result: ModelReviewResult<T>;\n try {\n const prepared: OutputRepairRequest = { ...request, [outputRepairRequest]: true };\n result = decorate(await model.review<T>(prepared));\n } catch (error) {\n if (!(error instanceof ModelReviewError) || error.code !== \"invalid_model_output\") throw error;\n return {\n ok: false,\n feedback: schemaValidationFeedback(error, request.schema),\n usage: error.usage,\n };\n }\n try {\n await validation.validate(result);\n return { ok: true, result };\n } catch (error) {\n return { ok: false, feedback: boundedValidationFeedback(error), usage: result.usage };\n }\n}\n\nfunction withAccumulatedResultUsage<T>(\n result: ModelReviewResult<T>,\n accumulated: ModelReviewUsage,\n): ModelReviewResult<T> {\n const usage = addModelUsage(accumulated, result.usage);\n return {\n ...result,\n ...(usage.inputTokens === undefined && usage.outputTokens === undefined ? {} : { usage }),\n };\n}\n\n// Keep interruption classification and metadata intact without mutating an error\n// that a model implementation may reuse. Current-error usage is counted once.\nfunction withAccumulatedUsage(error: ModelReviewError, usage: ModelReviewUsage): ModelReviewError {\n if (usage.inputTokens === undefined && usage.outputTokens === undefined) return error;\n return new ModelReviewError(error.message, {\n code: error.code,\n retryable: error.retryable,\n diagnostics: error.diagnostics,\n usage: addModelUsage(usage, error.usage),\n });\n}\n\nfunction exhaustedOutputValidation(\n attempts: number,\n feedback: string,\n usage: ModelReviewUsage,\n): ModelReviewError {\n return new ModelReviewError(\n `Model output failed adversary validation after ${attempts} attempts: ${feedback}`,\n {\n code: \"model_validation_failed\",\n retryable: false,\n ...(usage.inputTokens === undefined && usage.outputTokens === undefined ? {} : { usage }),\n },\n );\n}\n\n// Broker pattern/enum errors can quote rejected model text. Retain only schema-owned\n// locations, fixed keywords, numeric limits, and trusted schema descriptions as feedback.\nfunction schemaValidationFeedback(\n error: ModelReviewError,\n schema: Record<string, unknown>,\n): string {\n const goLocations = [...error.message.matchAll(/- at '([^'\\n]*)': ([^\\n]*)/g)];\n const locations =\n goLocations.length > 0\n ? goLocations\n : [...error.message.matchAll(/data((?:\\/[^\\s;:]*)*) (must [^;\\n]*)/g)];\n const messages =\n locations.length === 0\n ? [schemaFailureFeedback(undefined, \"\", schema)]\n : locations\n .slice(0, 32)\n .map((location) => schemaFailureFeedback(location[1], location[2], schema));\n return boundedValidationFeedback(new Error([...new Set(messages)].join(\"\\n\")));\n}\n\nfunction schemaFailureFeedback(\n rawPath: string | undefined,\n detail: string,\n schema: Record<string, unknown>,\n): string {\n let node = schema;\n const safePath: string[] = [];\n for (const token of (rawPath ?? \"\").split(\"/\").filter(Boolean).slice(0, 32)) {\n const key = token.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\");\n const properties = node.properties as Record<string, Record<string, unknown>> | undefined;\n if (properties && Object.hasOwn(properties, key)) {\n safePath.push(token.slice(0, 128));\n node = properties[key];\n } else if (\n node.type === \"array\" &&\n /^\\d{1,8}$/.test(key) &&\n node.items &&\n typeof node.items === \"object\"\n ) {\n safePath.push(key);\n node = node.items as Record<string, unknown>;\n } else {\n safePath.push(\"*\");\n node = {};\n }\n }\n const at = rawPath !== undefined ? ` at /${safePath.join(\"/\")}` : \"\";\n const length = /^(minLength|maxLength): got (\\d{1,8}), want (\\d{1,8})$/.exec(detail);\n let reason = \"Return a complete response that satisfies the supplied schema.\";\n if (length) {\n reason = `${length[1]}: got ${length[2]} characters; required ${length[3]}.`;\n } else if (/^must NOT have (more|fewer) than \\d+ characters$/.test(detail)) {\n reason = detail;\n } else if (\n /^(?:'not' failed|must NOT be valid)$/.test(detail) &&\n typeof node.not === \"object\" &&\n node.not !== null\n ) {\n const description = (node.not as Record<string, unknown>).description;\n reason =\n typeof description === \"string\"\n ? description\n : \"The value violates a 'not' schema constraint.\";\n } else if (/pattern/.test(detail)) {\n reason = \"The value does not satisfy its schema pattern.\";\n }\n return `Model output does not match the requested schema${at}. ${reason}`;\n}\n\nfunction boundedValidationFeedback(error: unknown): string {\n const message = error instanceof Error ? error.message : String(error);\n const encoded = Buffer.from(message, \"utf8\");\n return encoded.byteLength <= MAX_VALIDATION_FEEDBACK_BYTES\n ? message\n : `${encoded.subarray(0, MAX_VALIDATION_FEEDBACK_BYTES).toString(\"utf8\")}…`;\n}\n\nfunction addModelUsage(\n total: ModelReviewUsage,\n next: ModelReviewUsage | undefined,\n): ModelReviewUsage {\n if (next === undefined) return total;\n return {\n ...(total.inputTokens === undefined && next.inputTokens === undefined\n ? {}\n : { inputTokens: (total.inputTokens ?? 0) + (next.inputTokens ?? 0) }),\n ...(total.outputTokens === undefined && next.outputTokens === undefined\n ? {}\n : { outputTokens: (total.outputTokens ?? 0) + (next.outputTokens ?? 0) }),\n };\n}\n\nasync function waitForRetry(\n delayMs: number,\n signal: AbortSignal,\n timeoutMs: number,\n): Promise<void> {\n if (signal.aborted) {\n throw modelTimeoutError(timeoutMs);\n }\n await new Promise<void>((resolve, reject) => {\n const onAbort = () => {\n clearTimeout(timer);\n reject(modelTimeoutError(timeoutMs));\n };\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, delayMs);\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\nfunction modelTimeoutError(timeoutMs: number): ModelReviewError {\n return new ModelReviewError(`Model review exceeded its ${timeoutMs}ms timeout.`, {\n code: \"model_timeout\",\n retryable: true,\n });\n}\n\nfunction normalizeRequest(request: ModelReviewRequest): NormalizedModelReviewRequest {\n if (typeof request !== \"object\" || request === null) {\n throw new ModelReviewError(\"Model review request must be an object.\", {\n code: \"invalid_model_request\",\n });\n }\n if (typeof request.prompt !== \"string\" || request.prompt.trim() === \"\") {\n throw new ModelReviewError(\"Model review prompt must be a non-empty string.\", {\n code: \"invalid_model_request\",\n });\n }\n const promptBytes = Buffer.byteLength(request.prompt, \"utf8\");\n if (promptBytes > MAX_PROMPT_BYTES) {\n throw new ModelReviewError(`Model review prompt exceeds ${MAX_PROMPT_BYTES} bytes.`, {\n code: \"model_request_too_large\",\n });\n }\n requireJsonSize(request.input, \"input\", MAX_INPUT_BYTES);\n if (\n typeof request.schema !== \"object\" ||\n request.schema === null ||\n Array.isArray(request.schema)\n ) {\n throw new ModelReviewError(\"Model review schema must be a JSON Schema object.\", {\n code: \"invalid_model_schema\",\n });\n }\n requireJsonSize(request.schema, \"schema\", MAX_SCHEMA_BYTES);\n\n const maximumOutputTokens = request.budget?.maximumOutputTokens ?? DEFAULT_MAXIMUM_OUTPUT_TOKENS;\n const timeoutMs = request.budget?.timeoutMs ?? DEFAULT_MODEL_TIMEOUT_MS;\n requireIntegerRange(\n maximumOutputTokens,\n \"budget.maximumOutputTokens\",\n 1,\n MAX_MAXIMUM_OUTPUT_TOKENS,\n );\n requireIntegerRange(timeoutMs, \"budget.timeoutMs\", 1, MAX_MODEL_TIMEOUT_MS);\n return {\n prompt: request.prompt,\n input: request.input,\n schema: request.schema,\n budget: { maximumOutputTokens, timeoutMs },\n };\n}\n\nfunction requireJsonSize(value: unknown, name: string, maximum: number): void {\n let encoded: string | undefined;\n try {\n encoded = JSON.stringify(value);\n } catch (error) {\n throw new ModelReviewError(\n `Model review ${name} must be JSON-serializable: ${error instanceof Error ? error.message : String(error)}`,\n { code: \"invalid_model_request\" },\n );\n }\n if (encoded === undefined) {\n throw new ModelReviewError(`Model review ${name} must be JSON-serializable.`, {\n code: \"invalid_model_request\",\n });\n }\n if (Buffer.byteLength(encoded, \"utf8\") > maximum) {\n throw new ModelReviewError(`Model review ${name} exceeds ${maximum} bytes.`, {\n code: \"model_request_too_large\",\n });\n }\n}\n\nfunction requireIntegerRange(value: number, name: string, minimum: number, maximum: number): void {\n if (!Number.isInteger(value) || value < minimum || value > maximum) {\n throw new ModelReviewError(`${name} must be an integer from ${minimum} through ${maximum}.`, {\n code: \"invalid_model_budget\",\n });\n }\n}\n\nfunction encodeChoiceRequest(request: ChoiceRequest): string {\n let body: string;\n try {\n body = JSON.stringify({ state: request.state, questions: request.questions });\n } catch {\n throw new ModelReviewError(\"Invalid choice request.\", { code: \"invalid_choice_request\" });\n }\n const withinWireBudget = Buffer.byteLength(body) <= 1 << 20;\n const hasQuestions = Object.keys(request.questions).length > 0;\n if (!withinWireBudget || !hasQuestions)\n throw new ModelReviewError(\"Invalid choice request size.\", { code: \"invalid_choice_request\" });\n return body;\n}\n\nfunction choiceRecord(value: unknown): Record<string, unknown> | undefined {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction choiceResponseFailure(status: number, payload?: unknown): ModelReviewError {\n const failure = choiceRecord(choiceRecord(payload)?.error);\n return new ModelReviewError(`Attention classifier returned HTTP ${status}.`, {\n code:\n typeof failure?.code === \"string\" && failure.code !== \"\"\n ? failure.code\n : \"attention_classification_failed\",\n retryable: typeof failure?.retryable === \"boolean\" ? failure.retryable : status >= 500,\n diagnostics: { httpStatus: status },\n });\n}\n\nfunction isChoiceProbability(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0 && value <= 1;\n}\n\nfunction isChoiceDistribution(value: unknown, choices: string[]): boolean {\n const probabilities = choiceRecord(value);\n if (!probabilities || Object.keys(probabilities).length !== choices.length) return false;\n let sum = 0;\n for (const choice of choices) {\n const probability = probabilities[choice];\n if (!isChoiceProbability(probability)) return false;\n sum += probability;\n }\n return Math.abs(sum - 1) <= 0.01;\n}\n\nfunction isValidChoiceAnswer(value: unknown, question: ChoiceQuestion): value is ChoiceAnswer {\n const answer = choiceRecord(value);\n if (!answer || answer.type !== \"choice\") return false;\n const choices = Object.keys(question.criteria);\n const declaredChoice = typeof answer.choice === \"string\" && choices.includes(answer.choice);\n const boundedConfidence = isChoiceProbability(answer.confidence);\n const normalizedDistribution = isChoiceDistribution(answer.probabilities, choices);\n return declaredChoice && boundedConfidence && normalizedDistribution;\n}\n\nfunction requireChoiceAnswers(\n payload: unknown,\n questions: Record<string, ChoiceQuestion>,\n): ChoiceAnswers {\n const answers = choiceRecord(choiceRecord(payload)?.answers);\n if (!answers || Object.keys(answers).length !== Object.keys(questions).length)\n throw new ModelReviewError(\"Incomplete classifier response.\", {\n code: \"invalid_choice_response\",\n });\n for (const [id, question] of Object.entries(questions)) {\n if (!isValidChoiceAnswer(answers[id], question))\n throw new ModelReviewError(\"Invalid classifier choices.\", {\n code: \"invalid_choice_response\",\n });\n }\n return answers as unknown as ChoiceAnswers;\n}\n\nfunction brokerTransportError(\n error: unknown,\n signal: AbortSignal,\n timeoutMs: number,\n): ModelReviewError {\n if (signal.aborted) return modelTimeoutError(timeoutMs);\n if (error instanceof ModelReviewError) return error;\n return new ModelReviewError(\n `Model broker request failed: ${error instanceof Error ? error.message : String(error)}`,\n { code: \"broker_unavailable\", retryable: true },\n );\n}\n\nasync function readBoundedResponse(response: Response): Promise<string> {\n const declared = response.headers.get(\"content-length\");\n if (declared !== null && Number(declared) > MAX_RESPONSE_BYTES) {\n throw new ModelReviewError(`Model broker response exceeds ${MAX_RESPONSE_BYTES} bytes.`, {\n code: \"model_response_too_large\",\n });\n }\n if (response.body === null) {\n return \"\";\n }\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n let size = 0;\n for (;;) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n size += value.byteLength;\n if (size > MAX_RESPONSE_BYTES) {\n await reader.cancel();\n throw new ModelReviewError(`Model broker response exceeds ${MAX_RESPONSE_BYTES} bytes.`, {\n code: \"model_response_too_large\",\n });\n }\n chunks.push(value);\n }\n const joined = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) {\n joined.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return new TextDecoder().decode(joined);\n}\n\nfunction requireBrokerResponse(value: unknown): ModelBrokerResponse {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new ModelReviewError(\"Model broker response must be an object.\", {\n code: \"invalid_broker_response\",\n });\n }\n const response = value as Partial<ModelBrokerResponse>;\n if (response.protocolVersion !== ADVERSARY_MODEL_PROTOCOL_VERSION) {\n throw new ModelReviewError(\n `Model broker protocol version must be ${ADVERSARY_MODEL_PROTOCOL_VERSION}.`,\n { code: \"unsupported_model_protocol\" },\n );\n }\n if (typeof response.provider !== \"string\" || response.provider.trim() === \"\") {\n throw new ModelReviewError(\"Model broker response provider must be a non-empty string.\", {\n code: \"invalid_broker_response\",\n });\n }\n if (typeof response.model !== \"string\" || response.model.trim() === \"\") {\n throw new ModelReviewError(\"Model broker response model must be a non-empty string.\", {\n code: \"invalid_broker_response\",\n });\n }\n if (!Object.hasOwn(response, \"output\")) {\n throw new ModelReviewError(\"Model broker response is missing output.\", {\n code: \"invalid_broker_response\",\n });\n }\n if (response.usage !== undefined) {\n validateUsage(response.usage);\n }\n return response as ModelBrokerResponse;\n}\n\nfunction validateUsage(value: unknown): asserts value is ModelReviewUsage {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new ModelReviewError(\"Model broker response usage must be an object.\", {\n code: \"invalid_broker_response\",\n });\n }\n for (const field of [\"inputTokens\", \"outputTokens\"] as const) {\n const count = (value as ModelReviewUsage)[field];\n if (count !== undefined && (!Number.isInteger(count) || count < 0)) {\n throw new ModelReviewError(\n `Model broker response usage.${field} must be a non-negative integer.`,\n {\n code: \"invalid_broker_response\",\n },\n );\n }\n }\n}\n\nexport function validateModelOutput(\n schema: Record<string, unknown>,\n output: unknown,\n usage?: ModelReviewUsage,\n): void {\n const ajv = new Ajv2020({ allErrors: true, strict: true });\n let validate: ReturnType<Ajv2020[\"compile\"]>;\n try {\n validate = ajv.compile(schema);\n } catch (error) {\n throw new ModelReviewError(\n `Model review schema is invalid: ${error instanceof Error ? error.message : String(error)}`,\n { code: \"invalid_model_schema\" },\n );\n }\n if (!validate(output)) {\n const detail = ajv.errorsText(validate.errors, { separator: \"; \" });\n throw new ModelReviewError(`Model output does not match the requested schema: ${detail}`, {\n code: \"invalid_model_output\",\n ...(usage === undefined ? {} : { usage }),\n });\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"repository-model.d.ts","sourceRoot":"","sources":["../src/repository-model.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EAEtB,KAAK,WAAW,EAEjB,MAAM,YAAY,CAAC;AA0CpB,MAAM,WAAW,0BAA0B;IACzC,mFAAmF;IACnF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kFAAkF;IAClF,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,uEAAuE;IACvE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,mFAAmF;AACnF,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,yFAAyF;IACzF,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gFAAgF;IAChF,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,+EAA+E;IAC/E,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,qFAAqF;IACrF,QAAQ,CAAC,EAAE,uBAAuB,CAAC;IACnC,oFAAoF;IACpF,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,SAAS,uBAAuB,EAAE,GAAG,SAAS,EACzD,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,uBAAuB,GAAG,SAAS,CAOrC;AAmHD,wBAAsB,yBAAyB,CAAC,CAAC,EAC/C,KAAK,EAAE,WAAW,EAClB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,OAAO,EAAE,kBAAkB,EAC3B,YAAY,CAAC,EAAE,qBAAqB,GAAG,IAAI,EAC3C,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAyX/B"}
1
+ {"version":3,"file":"repository-model.d.ts","sourceRoot":"","sources":["../src/repository-model.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EAEtB,KAAK,WAAW,EAKjB,MAAM,YAAY,CAAC;AA0CpB,MAAM,WAAW,0BAA0B;IACzC,mFAAmF;IACnF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kFAAkF;IAClF,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,uEAAuE;IACvE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,mFAAmF;AACnF,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,yFAAyF;IACzF,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gFAAgF;IAChF,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,+EAA+E;IAC/E,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,qFAAqF;IACrF,QAAQ,CAAC,EAAE,uBAAuB,CAAC;IACnC,oFAAoF;IACpF,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,SAAS,uBAAuB,EAAE,GAAG,SAAS,EACzD,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,uBAAuB,GAAG,SAAS,CAOrC;AAmHD,wBAAsB,yBAAyB,CAAC,CAAC,EAC/C,KAAK,EAAE,WAAW,EAClB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,OAAO,EAAE,kBAAkB,EAC3B,YAAY,CAAC,EAAE,qBAAqB,GAAG,IAAI,EAC3C,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAsZ/B"}