@agent-inspect/eval 6.17.3 → 6.17.5

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../circuit/src/analyze.ts","../../redact/src/sensitive-key.ts","../../redact/src/index.ts","../../guardrails/src/rules.ts","../../guardrails/src/run.ts","../src/safety-rules.ts","../src/index.ts"],"names":["createHash","crypto","toolArgs","ALL_RULES","runRule","pass","fileURLToPath","read","openTrace","TraceReadError","fail"],"mappings":"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","file":"index.cjs","sourcesContent":["import { createHash } from \"node:crypto\";\n\nimport type {\n CircuitEvidence,\n CircuitResult,\n CircuitRuleId,\n CircuitRunResult,\n CircuitTraceEvent,\n RunCircuitsOptions,\n} from \"./types.js\";\n\nconst ALL_RULES: CircuitRuleId[] = [\n \"circuit.same-tool-repetition\",\n \"circuit.same-args-repetition\",\n \"circuit.max-loop-iterations\",\n \"circuit.max-retries\",\n \"circuit.tool-timeout\",\n \"circuit.runaway-llm-loop\",\n \"circuit.excessive-branch-width\",\n];\n\nfunction closed(ruleId: string, message: string): CircuitResult {\n return { ruleId, status: \"closed\", severity: \"info\", message, evidence: [] };\n}\n\nfunction open(\n ruleId: string,\n message: string,\n evidence: CircuitEvidence[],\n severity: \"error\" | \"warning\" = \"error\",\n): CircuitResult {\n return {\n ruleId,\n status: severity === \"warning\" ? \"warn\" : \"open\",\n severity,\n message,\n evidence,\n };\n}\n\nfunction isToolEvent(event: CircuitTraceEvent): boolean {\n const name = event.name.toLowerCase();\n return (\n event.kind === \"tool\" ||\n name.startsWith(\"tool:\") ||\n name.startsWith(\"function:\") ||\n name.includes(\".tool.\") ||\n name.startsWith(\"mcp:\")\n );\n}\n\nfunction isLlmEvent(event: CircuitTraceEvent): boolean {\n const name = event.name.toLowerCase();\n return event.kind === \"llm\" || name.startsWith(\"llm:\") || name.includes(\".llm.\") || name.includes(\"generation\");\n}\n\nfunction toolLabel(event: CircuitTraceEvent): string {\n const attrs = event.attributes ?? {};\n const fromAttr = attrs.toolName ?? attrs.tool ?? attrs.function;\n if (typeof fromAttr === \"string\" && fromAttr.length > 0) return fromAttr;\n return event.name.replace(/^(tool:|function:|mcp:)/i, \"\");\n}\n\nfunction argsHash(toolName: string, args: unknown): string {\n return createHash(\"sha256\").update(`${toolName}:${JSON.stringify(args ?? null)}`).digest(\"hex\").slice(0, 16);\n}\n\nfunction toolArgs(event: CircuitTraceEvent): unknown {\n const attrs = event.attributes ?? {};\n return attrs.arguments ?? attrs.args ?? attrs.input ?? attrs.parameters;\n}\n\nfunction durationMs(event: CircuitTraceEvent): number | undefined {\n if (typeof event.durationMs === \"number\") return event.durationMs;\n const attrs = event.attributes ?? {};\n const fromAttr = attrs.durationMs ?? attrs.duration;\n return typeof fromAttr === \"number\" ? fromAttr : undefined;\n}\n\nfunction attemptNumber(event: CircuitTraceEvent): number | undefined {\n const attrs = event.attributes ?? {};\n const value = attrs.attempt ?? attrs.retryAttempt ?? attrs.retryCount;\n return typeof value === \"number\" ? value : undefined;\n}\n\nexport function evaluateSameToolRepetition(\n events: readonly CircuitTraceEvent[],\n maxRepeats: number,\n): CircuitResult {\n const ruleId = \"circuit.same-tool-repetition\";\n const counts = new Map<string, number>();\n for (const event of events.filter(isToolEvent)) {\n const label = toolLabel(event);\n counts.set(label, (counts.get(label) ?? 0) + 1);\n }\n const evidence: CircuitEvidence[] = [];\n for (const [toolName, count] of counts) {\n if (count > maxRepeats) {\n evidence.push({ ruleId, toolName, count, threshold: maxRepeats });\n }\n }\n if (evidence.length === 0) {\n return closed(ruleId, \"Tool repetition within threshold.\");\n }\n return open(ruleId, \"Same tool repeated beyond threshold.\", evidence);\n}\n\nexport function evaluateSameArgsRepetition(\n events: readonly CircuitTraceEvent[],\n maxRepeats: number,\n): CircuitResult {\n const ruleId = \"circuit.same-args-repetition\";\n const counts = new Map<string, { toolName: string; count: number }>();\n for (const event of events.filter(isToolEvent)) {\n const label = toolLabel(event);\n const hash = argsHash(label, toolArgs(event));\n const key = `${label}:${hash}`;\n const current = counts.get(key) ?? { toolName: label, count: 0 };\n current.count += 1;\n counts.set(key, current);\n }\n const evidence: CircuitEvidence[] = [];\n for (const entry of counts.values()) {\n if (entry.count > maxRepeats) {\n evidence.push({ ruleId, toolName: entry.toolName, count: entry.count, threshold: maxRepeats });\n }\n }\n if (evidence.length === 0) {\n return closed(ruleId, \"Tool argument repetition within threshold.\");\n }\n return open(ruleId, \"Same tool arguments repeated beyond threshold.\", evidence);\n}\n\nexport function evaluateMaxLoopIterations(\n events: readonly CircuitTraceEvent[],\n maxIterations: number,\n): CircuitResult {\n const ruleId = \"circuit.max-loop-iterations\";\n const iterationEvents = events.filter((event) => {\n const attrs = event.attributes ?? {};\n return typeof attrs.iteration === \"number\" || event.name.toLowerCase().includes(\"loop\");\n });\n const maxSeen = iterationEvents.reduce((max, event) => {\n const attrs = event.attributes ?? {};\n const iteration = typeof attrs.iteration === \"number\" ? attrs.iteration : max;\n return Math.max(max, iteration);\n }, iterationEvents.length);\n if (maxSeen <= maxIterations) {\n return closed(ruleId, \"Loop iterations within threshold.\");\n }\n return open(ruleId, \"Loop iterations exceeded threshold.\", [\n { ruleId, count: maxSeen, threshold: maxIterations },\n ]);\n}\n\nexport function evaluateMaxRetries(\n events: readonly CircuitTraceEvent[],\n maxRetries: number,\n): CircuitResult {\n const ruleId = \"circuit.max-retries\";\n const attempts = events.map(attemptNumber).filter((value): value is number => value !== undefined);\n const maxAttempt = attempts.length > 0 ? Math.max(...attempts) : 0;\n if (maxAttempt <= maxRetries) {\n return closed(ruleId, \"Retry count within threshold.\");\n }\n return open(ruleId, \"Retry count exceeded threshold.\", [\n { ruleId, count: maxAttempt, threshold: maxRetries },\n ]);\n}\n\nexport function evaluateToolTimeout(\n events: readonly CircuitTraceEvent[],\n maxDurationMs: number,\n): CircuitResult {\n const ruleId = \"circuit.tool-timeout\";\n const evidence: CircuitEvidence[] = [];\n for (const event of events.filter(isToolEvent)) {\n const duration = durationMs(event);\n if (duration !== undefined && duration > maxDurationMs) {\n evidence.push({\n ruleId,\n toolName: toolLabel(event),\n count: duration,\n threshold: maxDurationMs,\n eventId: event.eventId,\n });\n }\n }\n if (evidence.length === 0) {\n return closed(ruleId, \"Tool durations within timeout.\");\n }\n return open(ruleId, \"Tool call exceeded configured timeout.\", evidence, \"warning\");\n}\n\nexport function evaluateRunawayLlmLoop(\n events: readonly CircuitTraceEvent[],\n maxLlmCalls: number,\n): CircuitResult {\n const ruleId = \"circuit.runaway-llm-loop\";\n const llmCount = events.filter(isLlmEvent).length;\n const hasTerminal = events.some((event) => {\n const status = (event.status ?? event.attributes?.status ?? \"\").toString().toLowerCase();\n return status === \"ok\" || status === \"success\" || status === \"completed\";\n });\n if (llmCount <= maxLlmCalls || hasTerminal) {\n return closed(ruleId, \"LLM call count within threshold or run completed.\");\n }\n return open(ruleId, \"Runaway LLM loop detected.\", [\n { ruleId, count: llmCount, threshold: maxLlmCalls },\n ]);\n}\n\nexport function evaluateExcessiveBranchWidth(\n events: readonly CircuitTraceEvent[],\n maxWidth: number,\n): CircuitResult {\n const ruleId = \"circuit.excessive-branch-width\";\n const children = new Map<string, number>();\n for (const event of events) {\n const parentId = event.parentId;\n if (!parentId) continue;\n children.set(parentId, (children.get(parentId) ?? 0) + 1);\n }\n const evidence: CircuitEvidence[] = [];\n for (const [parentId, count] of children) {\n if (count > maxWidth) {\n evidence.push({ ruleId, path: parentId, count, threshold: maxWidth });\n }\n }\n if (evidence.length === 0) {\n return closed(ruleId, \"Branch width within threshold.\");\n }\n return open(ruleId, \"Excessive parallel branch width detected.\", evidence, \"warning\");\n}\n\nfunction runRule(\n ruleId: CircuitRuleId,\n events: readonly CircuitTraceEvent[],\n options: RunCircuitsOptions,\n): CircuitResult | undefined {\n switch (ruleId) {\n case \"circuit.same-tool-repetition\":\n if (options.sameToolRepetition === undefined) return undefined;\n return evaluateSameToolRepetition(events, options.sameToolRepetition.maxRepeats);\n case \"circuit.same-args-repetition\":\n if (options.sameArgsRepetition === undefined) return undefined;\n return evaluateSameArgsRepetition(events, options.sameArgsRepetition.maxRepeats);\n case \"circuit.max-loop-iterations\":\n if (options.maxLoopIterations === undefined) return undefined;\n return evaluateMaxLoopIterations(events, options.maxLoopIterations.maxIterations);\n case \"circuit.max-retries\":\n if (options.maxRetries === undefined) return undefined;\n return evaluateMaxRetries(events, options.maxRetries.maxRetries);\n case \"circuit.tool-timeout\":\n if (options.toolTimeout === undefined) return undefined;\n return evaluateToolTimeout(events, options.toolTimeout.maxDurationMs);\n case \"circuit.runaway-llm-loop\":\n if (options.runawayLlmLoop === undefined) return undefined;\n return evaluateRunawayLlmLoop(events, options.runawayLlmLoop.maxLlmCalls);\n case \"circuit.excessive-branch-width\":\n if (options.excessiveBranchWidth === undefined) return undefined;\n return evaluateExcessiveBranchWidth(events, options.excessiveBranchWidth.maxWidth);\n default:\n return undefined;\n }\n}\n\nexport function runCircuits(\n events: readonly CircuitTraceEvent[],\n options: RunCircuitsOptions = {},\n): CircuitRunResult {\n const selected = options.rules ?? ALL_RULES;\n const results: CircuitResult[] = [];\n for (const ruleId of selected) {\n const result = runRule(ruleId, events, options);\n if (result) results.push(result);\n }\n const ok = !results.some((result) => result.status === \"open\" && result.severity === \"error\");\n return { ok, results };\n}\n\nexport { ALL_RULES as DEFAULT_CIRCUIT_RULES };\n","/**\n * Mirrors `packages/core/src/safety/sensitive-key.ts` for dependency-light\n * @agent-inspect/redact consumers. Keep both copies in sync (6.14.2 parity).\n */\n\nexport function normalizeSensitiveKey(value: string): string {\n return value.toLowerCase().replace(/[^a-z0-9_]/g, \"\");\n}\n\nexport const NON_CREDENTIAL_TOKEN_CONFIG_KEYS: ReadonlySet<string> = new Set(\n [\n \"tokens\",\n \"max_tokens\",\n \"min_tokens\",\n \"ls_max_tokens\",\n \"token_count\",\n \"token_limit\",\n \"token_budget\",\n \"input_tokens\",\n \"output_tokens\",\n \"total_tokens\",\n \"cached_tokens\",\n \"prompt_tokens\",\n \"completion_tokens\",\n ].map(normalizeSensitiveKey),\n);\n\nfunction isTokenCredentialKey(normalized: string): boolean {\n if (NON_CREDENTIAL_TOKEN_CONFIG_KEYS.has(normalized)) return false;\n if (normalized === \"token\") return true;\n if (normalized.endsWith(\"tokens\")) return false;\n return normalized.endsWith(\"token\");\n}\n\nexport function isCredentialSensitiveKey(\n key: string | undefined,\n sensitiveKeys: readonly string[],\n): boolean {\n if (!key) return false;\n const normalized = normalizeSensitiveKey(key);\n if (!normalized) return false;\n if (NON_CREDENTIAL_TOKEN_CONFIG_KEYS.has(normalized)) return false;\n\n for (const sensitive of sensitiveKeys) {\n const s = normalizeSensitiveKey(sensitive);\n if (!s) continue;\n if (s === \"token\") {\n if (isTokenCredentialKey(normalized)) return true;\n continue;\n }\n if (normalized === s) return true;\n if (normalized.endsWith(`_${s}`) || normalized.startsWith(`${s}_`)) return true;\n }\n return false;\n}\n","import crypto from \"node:crypto\";\nimport { isCredentialSensitiveKey } from \"./sensitive-key.js\";\n\nexport type RedactionProfile = \"local\" | \"share\" | \"strict\";\n\nexport type RedactionAction = \"replace\" | \"hash\" | \"prefix\" | \"truncate\" | \"keep\";\n\nexport type RedactionSeverity = \"info\" | \"warning\" | \"error\";\n\nexport type RedactionMatchKind = \"key\" | \"value\" | \"custom\";\n\nexport type RedactionRule =\n | string\n | { key: string; strategy: \"full\" }\n | { key: string; strategy: \"prefix\"; keep?: number }\n | { key: string; strategy: \"hash\" };\n\nexport interface RedactionFinding {\n path: string;\n detector: string;\n action: RedactionAction;\n severity: RedactionSeverity;\n matchKind: RedactionMatchKind;\n preview?: string;\n}\n\nexport interface RedactionDetection {\n action?: RedactionAction;\n replacement?: unknown;\n severity?: RedactionSeverity;\n matchKind?: RedactionMatchKind;\n preview?: string;\n}\n\nexport interface RedactionDetectorInput {\n path: string;\n key?: string;\n value: unknown;\n}\n\nexport interface RedactionDetector {\n id: string;\n severity?: RedactionSeverity;\n matchKind?: RedactionMatchKind;\n detect(input: RedactionDetectorInput): RedactionDetection[];\n}\n\nexport interface RedactionResult<T = unknown> {\n value: T;\n findings: RedactionFinding[];\n redacted: boolean;\n profile: RedactionProfile;\n}\n\nexport interface ResolvedRedactionProfile {\n profile: RedactionProfile;\n extraKeys: readonly string[];\n maxMetadataValueLengthCap?: number;\n maxPreviewLengthCap?: number;\n}\n\nexport interface RedactOptions {\n profile?: RedactionProfile;\n detectors?: RedactionDetector[];\n rules?: RedactionRule[];\n replacement?: string;\n maxDepth?: number;\n maxStringLength?: number;\n collectFindings?: boolean;\n}\n\nexport interface RedactorOptions extends RedactOptions {\n extraKeys?: readonly string[];\n}\n\nexport const DEFAULT_REDACT_KEYS = [\n \"authorization\",\n \"cookie\",\n \"token\",\n \"apiKey\",\n \"password\",\n \"secret\",\n \"email\",\n] as const;\n\nexport const SHARE_PROFILE_EXTRA_KEYS = [\n \"userEmail\",\n \"customerEmail\",\n \"phone\",\n \"phoneNumber\",\n \"address\",\n \"ip\",\n \"ipAddress\",\n \"sessionId\",\n \"requestId\",\n \"correlationId\",\n \"decisionId\",\n \"groupId\",\n \"customerId\",\n \"userId\",\n \"accountId\",\n \"tenantId\",\n \"orgId\",\n \"organizationId\",\n \"traceId\",\n \"spanId\",\n \"parentSpanId\",\n \"currentTask\",\n \"task\",\n \"userInput\",\n \"requestText\",\n \"conversationText\",\n] as const;\n\nexport const STRICT_PROFILE_EXTRA_KEYS = [\n \"prompt\",\n \"completion\",\n \"input\",\n \"output\",\n \"inputPreview\",\n \"outputPreview\",\n \"message\",\n \"messages\",\n \"transcript\",\n \"context\",\n \"document\",\n \"documents\",\n \"chunk\",\n \"chunks\",\n \"retrieval\",\n \"query\",\n] as const;\n\ntype CompiledRule =\n | { key: string; strategy: \"full\" }\n | { key: string; strategy: \"prefix\"; keep: number }\n | { key: string; strategy: \"hash\" };\n\ninterface RedactionState {\n findings: RedactionFinding[];\n seen: WeakMap<object, unknown>;\n}\n\ninterface PatternDetectorOptions {\n id: string;\n pattern: RegExp;\n severity?: RedactionSeverity;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n\nfunction toKey(key: string): string {\n return key.toLowerCase();\n}\n\nfunction findCompiledKeyRule(\n key: string,\n rules: readonly CompiledRule[],\n): CompiledRule | undefined {\n const exact = toKey(key);\n const direct = rules.find((candidate) => candidate.key === exact);\n if (direct) return direct;\n return rules.find((candidate) => isCredentialSensitiveKey(key, [candidate.key]));\n}\n\nfunction stableHash(value: string): string {\n const hash = crypto.createHash(\"sha256\").update(value, \"utf8\").digest(\"hex\");\n return hash.slice(0, 8);\n}\n\nfunction stringifyScalar(value: unknown): string | undefined {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n return String(value);\n }\n return undefined;\n}\n\nfunction patternDetector(options: PatternDetectorOptions): RedactionDetector {\n return {\n id: options.id,\n severity: options.severity ?? \"warning\",\n matchKind: \"value\",\n detect(input) {\n if (typeof input.value !== \"string\") return [];\n options.pattern.lastIndex = 0;\n return options.pattern.test(input.value)\n ? [{ action: \"replace\", severity: options.severity ?? \"warning\", matchKind: \"value\" }]\n : [];\n },\n };\n}\n\nfunction digitsOnly(value: string): string {\n return value.replace(/\\D/g, \"\");\n}\n\nfunction passesLuhn(value: string): boolean {\n const digits = digitsOnly(value);\n if (digits.length < 13 || digits.length > 19) return false;\n\n let sum = 0;\n let double = false;\n for (let i = digits.length - 1; i >= 0; i -= 1) {\n let digit = Number(digits[i]);\n if (double) {\n digit *= 2;\n if (digit > 9) digit -= 9;\n }\n sum += digit;\n double = !double;\n }\n return sum % 10 === 0;\n}\n\nconst UUID_RE =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n/** 13-digit Unix epoch milliseconds in a plausible modern range. */\nconst EPOCH_MS_RE = /^1[0-9]{12}$/;\n\nconst EMAIL_RE = /\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b/gi;\n\nfunction pathSuggestsNonCard(path: string): boolean {\n const normalized = path.toLowerCase().replace(/[^a-z0-9._]/g, \"\");\n return (\n /(^|\\.)(tokenusage|usage)(\\.|$)/.test(normalized) ||\n /(startedat|endedat|durationms|timestamp|createdat|updatedat)(\\.|$)/.test(normalized) ||\n /(^|\\.)(runid|traceid|spanid|eventid|sessionid|userid|parentid|requestid|correlationid)(\\.|$)/.test(\n normalized,\n ) ||\n /(^|\\.)ts(\\.|$)/.test(normalized)\n );\n}\n\nfunction isUuidLike(value: string): boolean {\n return UUID_RE.test(value.trim());\n}\n\nfunction isPlausibleCardCandidate(candidate: string, fullValue: string): boolean {\n const digits = digitsOnly(candidate);\n if (digits.length < 13 || digits.length > 19) return false;\n if (!passesLuhn(candidate)) return false;\n\n const trimmed = fullValue.trim();\n if (isUuidLike(trimmed)) return false;\n\n // Naked epoch-ms timestamps are not PANs.\n if (EPOCH_MS_RE.test(digits) && digitsOnly(trimmed) === digits && /^\\d+$/.test(trimmed)) {\n return false;\n }\n\n // Reject candidates glued inside longer alphanumeric IDs without card separators.\n const start = fullValue.indexOf(candidate);\n if (start >= 0) {\n const before = fullValue[start - 1];\n const after = fullValue[start + candidate.length];\n if (before && /[A-Za-z0-9_]/.test(before)) return false;\n if (after && /[A-Za-z0-9_]/.test(after)) return false;\n }\n\n return true;\n}\n\nfunction looksLikePathOrPackageOrUrl(value: string): boolean {\n const trimmed = value.trim();\n if (/^(?:[a-z][a-z0-9+.-]*:)?\\/\\//i.test(trimmed)) return true;\n if (/^webpack:/i.test(trimmed)) return true;\n if (/^@[A-Za-z0-9_.-]+\\/[A-Za-z0-9_.@/-]+$/.test(trimmed)) return true;\n if (/^[A-Za-z]:[\\\\/]/.test(trimmed) || /^[/\\\\]/.test(trimmed)) return true;\n // Path-like single token (slashes, no whitespace).\n if (/[\\\\/]/.test(trimmed) && !/\\s/.test(trimmed)) return true;\n return false;\n}\n\nfunction emailMatchIsPathAdjacent(value: string, index: number, length: number): boolean {\n const before = value[index - 1];\n const after = value[index + length];\n return before === \"/\" || before === \"\\\\\" || after === \"/\" || after === \"\\\\\";\n}\n\nfunction valueContainsEmail(value: string): boolean {\n if (looksLikePathOrPackageOrUrl(value)) return false;\n EMAIL_RE.lastIndex = 0;\n for (const match of value.matchAll(EMAIL_RE)) {\n const text = match[0] ?? \"\";\n const index = match.index ?? 0;\n if (emailMatchIsPathAdjacent(value, index, text.length)) continue;\n return true;\n }\n return false;\n}\n\nconst credentialDetectors: readonly RedactionDetector[] = [\n patternDetector({\n id: \"value.authorizationHeader\",\n pattern: /^(?:basic|bearer|digest|apikey)\\s+[a-z0-9._~+/=-]+$/i,\n severity: \"error\",\n }),\n patternDetector({\n id: \"value.bearerToken\",\n pattern: /\\bbearer\\s+[a-z0-9._~+/=-]{12,}\\b/i,\n severity: \"error\",\n }),\n patternDetector({\n id: \"value.cookie\",\n pattern: /\\b[a-z0-9_.-]+=[^;\\s]+(?:;\\s*[a-z0-9_.-]+=[^;\\s]+)+/i,\n severity: \"error\",\n }),\n patternDetector({\n id: \"value.jwt\",\n pattern: /\\beyJ[a-zA-Z0-9_-]{8,}\\.[a-zA-Z0-9_-]{8,}\\.[a-zA-Z0-9_-]{8,}\\b/,\n severity: \"error\",\n }),\n patternDetector({\n id: \"value.providerApiKey\",\n pattern: /\\b(?:sk-(?:proj-)?[a-zA-Z0-9_-]{16,}|sk-ant-[a-zA-Z0-9_-]{16,}|AIza[0-9A-Za-z_-]{20,})\\b/,\n severity: \"error\",\n }),\n patternDetector({\n id: \"value.githubToken\",\n pattern: /\\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9_]{20,}\\b/,\n severity: \"error\",\n }),\n patternDetector({\n id: \"value.awsAccessKey\",\n pattern: /\\b(?:AKIA|ASIA)[A-Z0-9]{16}\\b/,\n severity: \"error\",\n }),\n patternDetector({\n id: \"value.privateKey\",\n pattern: /-----BEGIN [A-Z ]*PRIVATE KEY-----[\\s\\S]*-----END [A-Z ]*PRIVATE KEY-----/,\n severity: \"error\",\n }),\n {\n id: \"value.creditCard\",\n severity: \"error\",\n matchKind: \"value\",\n detect(input) {\n if (typeof input.value !== \"string\") return [];\n if (pathSuggestsNonCard(input.path)) return [];\n if (isUuidLike(input.value)) return [];\n const candidatePattern = /(?:\\d[ -]?){13,19}/g;\n for (const match of input.value.matchAll(candidatePattern)) {\n const candidate = match[0] ?? \"\";\n if (isPlausibleCardCandidate(candidate, input.value)) {\n return [{ action: \"replace\", severity: \"error\", matchKind: \"value\" }];\n }\n }\n return [];\n },\n },\n];\n\nconst identifierDetectors: readonly RedactionDetector[] = [\n {\n id: \"value.email\",\n severity: \"warning\",\n matchKind: \"value\",\n detect(input) {\n if (typeof input.value !== \"string\") return [];\n return valueContainsEmail(input.value)\n ? [{ action: \"replace\", severity: \"warning\", matchKind: \"value\" }]\n : [];\n },\n },\n patternDetector({\n id: \"value.phone\",\n pattern: /\\b(?:\\+\\d{1,3}[\\s.-]?)?(?:\\(?\\d{3}\\)?[\\s.-])\\d{3}[\\s.-]\\d{4}\\b/,\n }),\n patternDetector({\n id: \"value.ipv4\",\n pattern: /\\b(?:(?:25[0-5]|2[0-4]\\d|1?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1?\\d?\\d)\\b/,\n }),\n patternDetector({\n id: \"value.ipv6\",\n pattern: /\\b(?:[0-9a-f]{1,4}:){2,7}[0-9a-f]{1,4}\\b/i,\n }),\n];\n\nfunction builtInDetectorsForProfile(profile: RedactionProfile): readonly RedactionDetector[] {\n if (profile === \"local\") return credentialDetectors;\n return [...credentialDetectors, ...identifierDetectors];\n}\n\nfunction compileRules(\n rules?: RedactionRule[],\n extraKeys?: readonly string[],\n): CompiledRule[] {\n const out = new Map<string, CompiledRule>();\n\n const set = (rule: CompiledRule) => {\n const key = toKey(rule.key);\n out.set(key, { ...rule, key } as CompiledRule);\n };\n\n for (const key of DEFAULT_REDACT_KEYS) {\n set({ key, strategy: \"full\" });\n }\n\n for (const key of extraKeys ?? []) {\n if (typeof key === \"string\" && key.length > 0) {\n set({ key, strategy: \"full\" });\n }\n }\n\n for (const rule of rules ?? []) {\n if (typeof rule === \"string\") {\n set({ key: rule, strategy: \"full\" });\n continue;\n }\n\n if (rule.strategy === \"full\") set({ key: rule.key, strategy: \"full\" });\n if (rule.strategy === \"hash\") set({ key: rule.key, strategy: \"hash\" });\n if (rule.strategy === \"prefix\") {\n set({\n key: rule.key,\n strategy: \"prefix\",\n keep: typeof rule.keep === \"number\" ? rule.keep : 8,\n });\n }\n }\n\n return [...out.values()];\n}\n\nfunction actionForRule(rule: CompiledRule): RedactionAction {\n if (rule.strategy === \"full\") return \"replace\";\n return rule.strategy;\n}\n\nfunction applyRule(\n rule: CompiledRule,\n value: unknown,\n replacement: string,\n): unknown {\n if (rule.strategy === \"full\") return replacement;\n\n const asString = stringifyScalar(value);\n if (rule.strategy === \"prefix\") {\n if (asString === undefined) return replacement;\n const keep = Math.max(0, Math.floor(rule.keep));\n return asString.length <= keep ? `${asString}…` : `${asString.slice(0, keep)}…`;\n }\n\n if (rule.strategy === \"hash\") {\n if (asString === undefined) return \"[HASH:unknown]\";\n return `[HASH:${stableHash(asString)}]`;\n }\n\n return value;\n}\n\nfunction childPath(path: string, key: string): string {\n if (/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key)) {\n return path ? `${path}.${key}` : key;\n }\n return `${path || \"$\"}[${JSON.stringify(key)}]`;\n}\n\nfunction indexPath(path: string, index: number): string {\n return `${path || \"$\"}[${index}]`;\n}\n\nfunction makeFinding(\n path: string,\n detector: string,\n action: RedactionAction,\n matchKind: RedactionMatchKind,\n severity: RedactionSeverity = \"warning\",\n preview?: string,\n): RedactionFinding {\n return preview === undefined\n ? { path, detector, action, severity, matchKind }\n : { path, detector, action, severity, matchKind, preview };\n}\n\nexport function createRedactionProfile(profile: RedactionProfile = \"local\"): ResolvedRedactionProfile {\n switch (profile) {\n case \"local\":\n return { profile: \"local\", extraKeys: [] };\n case \"share\":\n return {\n profile: \"share\",\n extraKeys: SHARE_PROFILE_EXTRA_KEYS,\n maxMetadataValueLengthCap: 500,\n maxPreviewLengthCap: 200,\n };\n case \"strict\":\n return {\n profile: \"strict\",\n extraKeys: [...SHARE_PROFILE_EXTRA_KEYS, ...STRICT_PROFILE_EXTRA_KEYS],\n maxMetadataValueLengthCap: 200,\n maxPreviewLengthCap: 80,\n };\n }\n}\n\nexport class Redactor {\n readonly #rules: CompiledRule[];\n readonly #detectors: readonly RedactionDetector[];\n readonly #profile: RedactionProfile;\n readonly #replacement: string;\n readonly #maxDepth: number;\n readonly #collectFindings: boolean;\n\n constructor(options?: RedactorOptions) {\n const resolved = createRedactionProfile(options?.profile ?? \"local\");\n this.#profile = resolved.profile;\n this.#rules = compileRules(options?.rules, [\n ...resolved.extraKeys,\n ...(options?.extraKeys ?? []),\n ]);\n this.#detectors = [\n ...builtInDetectorsForProfile(this.#profile),\n ...(options?.detectors ?? []),\n ];\n this.#replacement = options?.replacement ?? \"[REDACTED]\";\n this.#maxDepth = options?.maxDepth ?? 32;\n this.#collectFindings = options?.collectFindings ?? true;\n }\n\n redactValue(key: string, value: unknown): unknown {\n return this.#redactValue(value, key, key, 0, {\n findings: [],\n seen: new WeakMap<object, unknown>(),\n });\n }\n\n redactRecord(record: Record<string, unknown>): Record<string, unknown> {\n return this.redact(record).value as Record<string, unknown>;\n }\n\n redact<T = unknown>(value: T): RedactionResult<T> {\n const state: RedactionState = {\n findings: [],\n seen: new WeakMap<object, unknown>(),\n };\n const redacted = this.#redactValue(value, undefined, \"$\", 0, state);\n return {\n value: redacted as T,\n findings: state.findings,\n redacted: state.findings.some((finding) => finding.action !== \"keep\"),\n profile: this.#profile,\n };\n }\n\n #recordFinding(state: RedactionState, finding: RedactionFinding): void {\n if (this.#collectFindings) state.findings.push(finding);\n }\n\n #redactValue(\n value: unknown,\n key: string | undefined,\n path: string,\n depth: number,\n state: RedactionState,\n ): unknown {\n if (depth > this.#maxDepth) {\n this.#recordFinding(\n state,\n makeFinding(path, \"structure.maxDepth\", \"truncate\", \"value\", \"warning\"),\n );\n return \"[Truncated]\";\n }\n\n if (key !== undefined) {\n const rule = findCompiledKeyRule(key, this.#rules);\n if (rule) {\n this.#recordFinding(\n state,\n makeFinding(path, `key.${rule.key}`, actionForRule(rule), \"key\", \"warning\"),\n );\n return applyRule(rule, value, this.#replacement);\n }\n }\n\n for (const detector of this.#detectors) {\n const detections = detector.detect({ path, key, value });\n for (const detection of detections) {\n const action = detection.action ?? \"replace\";\n this.#recordFinding(\n state,\n makeFinding(\n path,\n detector.id,\n action,\n detection.matchKind ?? detector.matchKind ?? \"custom\",\n detection.severity ?? detector.severity ?? \"warning\",\n detection.preview,\n ),\n );\n if (action !== \"keep\") {\n return detection.replacement ?? this.#replacement;\n }\n }\n }\n\n if (Array.isArray(value)) {\n if (state.seen.has(value)) return state.seen.get(value);\n const out: unknown[] = [];\n state.seen.set(value, out);\n value.forEach((item, index) => {\n out[index] = this.#redactValue(item, undefined, indexPath(path, index), depth + 1, state);\n });\n return out;\n }\n\n if (isRecord(value)) {\n if (state.seen.has(value)) return state.seen.get(value);\n const out: Record<string, unknown> = {};\n state.seen.set(value, out);\n for (const [entryKey, entryValue] of Object.entries(value)) {\n out[entryKey] = this.#redactValue(\n entryValue,\n entryKey,\n childPath(path === \"$\" ? \"\" : path, entryKey),\n depth + 1,\n state,\n );\n }\n return out;\n }\n\n return value;\n }\n}\n\nexport function createRedactor(options?: RedactorOptions): Redactor {\n return new Redactor(options);\n}\n\nexport function redact<T = unknown>(value: T, options?: RedactOptions): RedactionResult<T> {\n return createRedactor(options).redact(value);\n}\n","import { redact, type RedactionFinding } from \"@agent-inspect/redact\";\n\nimport type {\n BannedPhraseOptions,\n GuardrailEvidence,\n GuardrailResult,\n OversizeOutputOptions,\n PiiLeakOptions,\n PromptInjectionOptions,\n RequiredJsonShapeOptions,\n StructuredOutputOptions,\n UnsafeToolArgsOptions,\n} from \"./types.js\";\n\nconst DEFAULT_INJECTION_PATTERNS = [\n \"ignore previous instructions\",\n \"ignore all prior\",\n \"disregard your instructions\",\n \"system prompt\",\n \"you are now\",\n \"jailbreak\",\n] as const;\n\nfunction pass(ruleId: string, message: string): GuardrailResult {\n return { ruleId, status: \"pass\", severity: \"info\", message, evidence: [] };\n}\n\nfunction fail(\n ruleId: string,\n message: string,\n evidence: GuardrailEvidence[],\n severity: \"error\" | \"warning\" = \"error\",\n): GuardrailResult {\n return { ruleId, status: severity === \"warning\" ? \"warn\" : \"fail\", severity, message, evidence };\n}\n\nfunction boundedPreview(value: string, max = 80): string {\n if (value.length <= max) return value;\n return `${value.slice(0, max - 3)}...`;\n}\n\nexport function evaluateBannedPhrase(\n text: string,\n options: BannedPhraseOptions,\n): GuardrailResult {\n const ruleId = \"guardrail.banned-phrase\";\n const haystack = options.caseInsensitive !== false ? text.toLowerCase() : text;\n const evidence: GuardrailEvidence[] = [];\n for (const phrase of options.phrases) {\n const needle = options.caseInsensitive !== false ? phrase.toLowerCase() : phrase;\n if (needle.length > 0 && haystack.includes(needle)) {\n evidence.push({ ruleId, match: phrase, preview: boundedPreview(text) });\n }\n }\n if (evidence.length === 0) {\n return pass(ruleId, \"No banned phrases matched.\");\n }\n return fail(ruleId, `Matched ${evidence.length} banned phrase(s).`, evidence);\n}\n\nconst SEVERITY_RANK = { info: 0, warning: 1, error: 2 } as const;\n\nexport function evaluatePiiLeak(value: unknown, options: PiiLeakOptions = {}): GuardrailResult {\n const ruleId = \"guardrail.pii-leak\";\n const minSeverity = options.minSeverity ?? \"warning\";\n const result = redact(value, { profile: options.profile ?? \"share\", collectFindings: true });\n const findings = result.findings.filter(\n (finding: RedactionFinding) => SEVERITY_RANK[finding.severity] >= SEVERITY_RANK[minSeverity],\n );\n if (findings.length === 0) {\n return pass(ruleId, \"No PII-style redaction findings.\");\n }\n const evidence: GuardrailEvidence[] = findings.map((finding) => ({\n ruleId,\n path: finding.path,\n detector: finding.detector,\n preview: finding.preview,\n }));\n return fail(ruleId, `Detected ${findings.length} PII-style finding(s).`, evidence);\n}\n\nfunction measureDepth(value: unknown): number {\n if (value === null || typeof value !== \"object\") return 0;\n if (Array.isArray(value)) {\n return 1 + Math.max(0, ...value.map((item) => measureDepth(item)));\n }\n const depths = Object.values(value as Record<string, unknown>).map((item) => measureDepth(item));\n return 1 + (depths.length === 0 ? 0 : Math.max(...depths));\n}\n\nfunction maxStringLength(value: unknown): number {\n if (typeof value === \"string\") return value.length;\n if (value === null || typeof value !== \"object\") return 0;\n if (Array.isArray(value)) {\n return Math.max(0, ...value.map((item) => maxStringLength(item)));\n }\n return Math.max(0, ...Object.values(value as Record<string, unknown>).map((item) => maxStringLength(item)));\n}\n\nexport function evaluateUnsafeToolArgs(\n toolName: string,\n toolArgs: unknown,\n options: UnsafeToolArgsOptions = {},\n): GuardrailResult {\n const ruleId = \"guardrail.unsafe-tool-args\";\n const blocked = new Set((options.blockedTools ?? []).map((name) => name.toLowerCase()));\n const evidence: GuardrailEvidence[] = [];\n if (blocked.has(toolName.toLowerCase())) {\n evidence.push({ ruleId, preview: toolName, match: toolName });\n }\n const maxDepth = options.maxDepth ?? 12;\n const depth = measureDepth(toolArgs);\n if (depth > maxDepth) {\n evidence.push({ ruleId, path: \"args\", preview: `depth=${depth}` });\n }\n const maxLen = options.maxStringLength ?? 16_384;\n const longest = maxStringLength(toolArgs);\n if (longest > maxLen) {\n evidence.push({ ruleId, path: \"args\", preview: `maxStringLength=${longest}` });\n }\n if (evidence.length === 0) {\n return pass(ruleId, \"Tool arguments within configured bounds.\");\n }\n return fail(ruleId, \"Unsafe or oversized tool arguments detected.\", evidence);\n}\n\nexport function evaluatePromptInjection(\n text: string,\n options: PromptInjectionOptions = {},\n): GuardrailResult {\n const ruleId = \"guardrail.prompt-injection\";\n const patterns = options.patterns ?? DEFAULT_INJECTION_PATTERNS;\n const haystack = text.toLowerCase();\n const evidence: GuardrailEvidence[] = [];\n for (const pattern of patterns) {\n const needle = pattern.toLowerCase();\n if (needle.length > 0 && haystack.includes(needle)) {\n evidence.push({ ruleId, match: pattern, preview: boundedPreview(text) });\n }\n }\n if (evidence.length === 0) {\n return pass(ruleId, \"No prompt-injection patterns matched.\");\n }\n return fail(ruleId, `Matched ${evidence.length} injection pattern(s).`, evidence, \"warning\");\n}\n\nfunction validateSchemaField(\n value: unknown,\n field: StructuredOutputOptions[\"schema\"][string],\n path: string,\n evidence: GuardrailEvidence[],\n): void {\n const ruleId = \"guardrail.structured-output\";\n if (field.type) {\n const actual =\n value === null\n ? \"null\"\n : Array.isArray(value)\n ? \"array\"\n : typeof value;\n if (actual !== field.type) {\n evidence.push({ ruleId, path, preview: `expected ${field.type}, got ${actual}` });\n return;\n }\n }\n if (field.enum && !field.enum.some((item) => Object.is(item, value))) {\n evidence.push({ ruleId, path, preview: \"value not in enum\" });\n }\n if (field.type === \"object\" && field.required && value && typeof value === \"object\" && !Array.isArray(value)) {\n const record = value as Record<string, unknown>;\n for (const key of field.required) {\n if (!(key in record)) {\n evidence.push({ ruleId, path: `${path}.${key}`, preview: \"missing required key\" });\n }\n }\n }\n}\n\nexport function evaluateStructuredOutput(\n value: unknown,\n options: StructuredOutputOptions,\n): GuardrailResult {\n const ruleId = \"guardrail.structured-output\";\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return fail(ruleId, \"Structured output must be an object.\", [\n { ruleId, preview: typeof value },\n ]);\n }\n const record = value as Record<string, unknown>;\n const evidence: GuardrailEvidence[] = [];\n for (const [key, field] of Object.entries(options.schema)) {\n validateSchemaField(record[key], field, key, evidence);\n }\n if (evidence.length === 0) {\n return pass(ruleId, \"Structured output matches schema subset.\");\n }\n return fail(ruleId, \"Structured output schema violation.\", evidence);\n}\n\nexport function evaluateOversizeOutput(\n value: unknown,\n options: OversizeOutputOptions = {},\n): GuardrailResult {\n const ruleId = \"guardrail.oversize-output\";\n const text = typeof value === \"string\" ? value : JSON.stringify(value);\n const maxLength = options.maxLength ?? options.maxSerializedLength ?? 32_768;\n if (text.length <= maxLength) {\n return pass(ruleId, \"Output within size limits.\");\n }\n return fail(ruleId, `Output exceeds max length (${text.length} > ${maxLength}).`, [\n { ruleId, preview: `length=${text.length}` },\n ]);\n}\n\nexport function evaluateRequiredJsonShape(\n value: unknown,\n options: RequiredJsonShapeOptions,\n): GuardrailResult {\n const ruleId = \"guardrail.required-json-shape\";\n let parsed: unknown = value;\n if (typeof value === \"string\") {\n try {\n parsed = JSON.parse(value);\n } catch {\n return fail(ruleId, \"Value is not valid JSON.\", [{ ruleId, preview: boundedPreview(value) }]);\n }\n }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return fail(ruleId, \"JSON value must be an object.\", [{ ruleId, preview: typeof parsed }]);\n }\n const record = parsed as Record<string, unknown>;\n const evidence: GuardrailEvidence[] = [];\n for (const key of options.requiredKeys) {\n if (!(key in record)) {\n evidence.push({ ruleId, path: key, preview: \"missing required key\" });\n }\n }\n if (evidence.length === 0) {\n return pass(ruleId, \"Required JSON keys present.\");\n }\n return fail(ruleId, \"Missing required JSON keys.\", evidence);\n}\n","import {\n evaluateBannedPhrase,\n evaluateOversizeOutput,\n evaluatePiiLeak,\n evaluatePromptInjection,\n evaluateRequiredJsonShape,\n evaluateStructuredOutput,\n evaluateUnsafeToolArgs,\n} from \"./rules.js\";\nimport type {\n GuardrailInput,\n GuardrailResult,\n GuardrailRuleId,\n GuardrailRunResult,\n RunGuardrailsOptions,\n} from \"./types.js\";\n\nconst ALL_RULES: GuardrailRuleId[] = [\n \"guardrail.banned-phrase\",\n \"guardrail.pii-leak\",\n \"guardrail.unsafe-tool-args\",\n \"guardrail.prompt-injection\",\n \"guardrail.structured-output\",\n \"guardrail.oversize-output\",\n \"guardrail.required-json-shape\",\n];\n\nfunction isErrorFailure(result: GuardrailResult): boolean {\n return result.status === \"fail\" && result.severity === \"error\";\n}\n\nfunction runRule(ruleId: GuardrailRuleId, input: GuardrailInput, options: RunGuardrailsOptions): GuardrailResult | undefined {\n switch (ruleId) {\n case \"guardrail.banned-phrase\": {\n if (!options.bannedPhrase || input.text === undefined) return undefined;\n return evaluateBannedPhrase(input.text, options.bannedPhrase);\n }\n case \"guardrail.pii-leak\": {\n if (input.value === undefined && input.text === undefined) return undefined;\n return evaluatePiiLeak(input.value ?? input.text, options.piiLeak);\n }\n case \"guardrail.unsafe-tool-args\": {\n if (!input.toolName) return undefined;\n return evaluateUnsafeToolArgs(input.toolName, input.toolArgs ?? {}, options.unsafeToolArgs);\n }\n case \"guardrail.prompt-injection\": {\n if (input.text === undefined) return undefined;\n return evaluatePromptInjection(input.text, options.promptInjection);\n }\n case \"guardrail.structured-output\": {\n if (!options.structuredOutput || input.value === undefined) return undefined;\n return evaluateStructuredOutput(input.value, options.structuredOutput);\n }\n case \"guardrail.oversize-output\": {\n if (input.value === undefined && input.text === undefined) return undefined;\n return evaluateOversizeOutput(input.value ?? input.text, options.oversizeOutput);\n }\n case \"guardrail.required-json-shape\": {\n if (!options.requiredJsonShape || (input.value === undefined && input.text === undefined)) return undefined;\n return evaluateRequiredJsonShape(input.value ?? input.text!, options.requiredJsonShape);\n }\n default:\n return undefined;\n }\n}\n\nexport function runGuardrails(input: GuardrailInput, options: RunGuardrailsOptions = {}): GuardrailRunResult {\n const selected = options.rules ?? ALL_RULES;\n const results: GuardrailResult[] = [];\n for (const ruleId of selected) {\n const result = runRule(ruleId, input, options);\n if (result) results.push(result);\n }\n const ok = !results.some(isErrorFailure);\n return { ok, results };\n}\n\nexport { ALL_RULES as DEFAULT_GUARDRAIL_RULES };\n","import { runCircuits, type CircuitResult, type CircuitRuleId, type RunCircuitsOptions } from \"@agent-inspect/circuit\";\nimport {\n runGuardrails,\n type GuardrailResult,\n type GuardrailRuleId,\n type RunGuardrailsOptions,\n} from \"@agent-inspect/guardrails\";\n\nimport type { EvalContext, EvalFinding, EvalRule } from \"./index.js\";\n\nfunction pass(ruleId: string, message: string): EvalFinding {\n return { ruleId, status: \"pass\", severity: \"info\", message, evidence: [] };\n}\n\nfunction failFinding(\n ruleId: string,\n message: string,\n expected?: unknown,\n actual?: unknown,\n): EvalFinding {\n return {\n ruleId,\n status: \"fail\",\n severity: \"error\",\n message,\n expected,\n actual,\n evidence: [],\n };\n}\n\nfunction warnFinding(ruleId: string, message: string, actual?: unknown): EvalFinding {\n return {\n ruleId,\n status: \"warning\",\n severity: \"warning\",\n message,\n actual,\n evidence: [],\n };\n}\n\nfunction collectAnswerText(context: EvalContext): string {\n const parts: string[] = [];\n for (const node of context.nodes) {\n const attrs = node.event.attributes ?? {};\n for (const key of [\"answer\", \"output\", \"text\", \"content\"]) {\n const value = attrs[key];\n if (typeof value === \"string\") parts.push(value);\n }\n }\n return parts.join(\"\\n\");\n}\n\nexport interface EvalGuardrailRuleOptions extends RunGuardrailsOptions {\n rules: readonly GuardrailRuleId[];\n}\n\nexport interface EvalCircuitRuleOptions extends RunCircuitsOptions {\n rules: readonly CircuitRuleId[];\n}\n\nexport function createEvalGuardrailRule(options: EvalGuardrailRuleOptions): EvalRule {\n return {\n id: \"eval.guardrails\",\n category: \"safety\",\n evaluate(context) {\n const text = collectAnswerText(context);\n const run = runGuardrails({ text, value: context.events }, options);\n return run.results.flatMap((result: GuardrailResult) => {\n if (result.status === \"pass\") return [pass(result.ruleId, result.message)];\n if (result.status === \"warn\") return [warnFinding(result.ruleId, result.message)];\n return [failFinding(result.ruleId, result.message)];\n });\n },\n };\n}\n\nexport function createEvalCircuitRule(options: EvalCircuitRuleOptions): EvalRule {\n return {\n id: \"eval.circuits\",\n category: \"structure\",\n evaluate(context) {\n const events = context.events.map((event) => ({\n eventId: event.eventId,\n runId: event.runId,\n name: event.name,\n kind: event.kind,\n parentId: event.parentId,\n startedAt: event.startedAt,\n endedAt: event.endedAt,\n durationMs: event.durationMs,\n attributes: event.attributes,\n status: event.status,\n }));\n const run = runCircuits(events, options);\n return run.results.flatMap((result: CircuitResult) => {\n if (result.status === \"closed\") return [pass(result.ruleId, result.message)];\n if (result.status === \"warn\") return [warnFinding(result.ruleId, result.message, result.evidence[0]?.count)];\n return [failFinding(result.ruleId, result.message, result.evidence[0]?.threshold, result.evidence[0]?.count)];\n });\n },\n };\n}\n","import { fileURLToPath } from \"node:url\";\n\nimport {\n openTrace,\n TraceReadError,\n type TraceInput,\n type TraceReadResult,\n} from \"agent-inspect/readers\";\n\nexport type EvalStatus = \"pass\" | \"fail\" | \"error\";\nexport type EvalSeverity = \"error\" | \"warning\" | \"info\";\nexport type EvalFindingStatus = \"pass\" | \"fail\" | \"warning\";\nexport type EvalRuleCategory =\n | \"run\"\n | \"tool\"\n | \"llm\"\n | \"retrieval\"\n | \"structure\"\n | \"safety\"\n | \"custom\";\n\nexport interface EvalEvidence {\n runId?: string;\n eventId?: string;\n parentId?: string;\n traceId?: string;\n spanId?: string;\n kind?: string;\n name?: string;\n path?: string;\n}\n\nexport interface EvalFinding {\n ruleId: string;\n status: EvalFindingStatus;\n severity: EvalSeverity;\n message: string;\n expected?: unknown;\n actual?: unknown;\n evidence: EvalEvidence[];\n}\n\nexport interface EvalDiagnostic {\n code:\n | \"AI_EVAL_TRACE_UNREADABLE\"\n | \"AI_EVAL_UNSUPPORTED_FORMAT\"\n | \"AI_EVAL_AMBIGUOUS_FORMAT\"\n | \"AI_EVAL_RUN_SELECTION_REQUIRED\"\n | \"AI_EVAL_RULE_FAILED\"\n | \"AI_EVAL_INVALID_ARGUMENTS\"\n | \"AI_EVAL_INVALID_CONFIG\"\n | \"AI_EVAL_CONFIG_LOAD_FAILED\";\n severity: EvalSeverity;\n message: string;\n ruleId?: string;\n}\n\nexport type EvalDiagnosticCode = EvalDiagnostic[\"code\"];\n\nexport interface EvalSummary {\n passed: number;\n failed: number;\n warnings: number;\n errors: number;\n}\n\nexport interface EvalRunResult {\n ok: boolean;\n status: EvalStatus;\n format: string;\n runId?: string;\n summary: EvalSummary;\n findings: EvalFinding[];\n diagnostics: EvalDiagnostic[];\n}\n\nexport interface EvalInput {\n trace: string | URL | TraceReadResult;\n runId?: string;\n format?: \"agent-inspect-jsonl\" | \"openinference-json\" | \"otlp-json\" | \"auto\";\n}\n\nexport interface EvalRunOptions {\n checks?: readonly EvalRule[];\n runId?: string;\n format?: EvalInput[\"format\"];\n}\n\nexport type EvalRunInput = EvalInput | string | TraceReadResult;\n\n/** Experimental options for deterministic answer/context overlap checks. */\nexport interface ContextOverlapOptions {\n minOverlap?: number;\n minSharedTerms?: number;\n answerKeys?: readonly string[];\n contextKeys?: readonly string[];\n}\n\n/** Experimental options for deterministic quote grounding checks. */\nexport interface QuoteOverlapOptions {\n answerKeys?: readonly string[];\n contextKeys?: readonly string[];\n minQuoteLength?: number;\n requireQuote?: boolean;\n}\n\n/** Experimental options for deterministic citation presence checks. */\nexport interface CitationPresenceOptions {\n answerKeys?: readonly string[];\n citationKeys?: readonly string[];\n}\n\n/** Experimental options for deterministic source-id checks. */\nexport interface RequiredSourceIdsOptions {\n sourceIdKeys?: readonly string[];\n}\n\n/** Experimental options for deterministic answer length checks. */\nexport interface AnswerLengthBoundsOptions {\n minCharacters?: number;\n maxCharacters?: number;\n minWords?: number;\n maxWords?: number;\n answerKeys?: readonly string[];\n}\n\n/** Experimental options for deterministic unsupported-phrase checks. */\nexport interface BannedUnsupportedPhrasesOptions {\n answerKeys?: readonly string[];\n}\n\nexport interface EvalRule {\n id: string;\n category: EvalRuleCategory;\n severity?: EvalSeverity;\n evaluate(context: EvalContext): readonly EvalFinding[];\n}\n\ntype EvalRunTree = TraceReadResult[\"runs\"][number];\ntype EvalNode = EvalRunTree[\"children\"][number];\ntype EvalEvent = EvalNode[\"event\"];\n\nexport interface EvalContext {\n format: string;\n run: EvalRunTree;\n nodes: readonly EvalNode[];\n events: readonly TraceReadResult[\"events\"][number][];\n}\n\nfunction isTraceReadResult(value: unknown): value is TraceReadResult {\n return (\n value !== null &&\n typeof value === \"object\" &&\n \"runs\" in value &&\n \"events\" in value &&\n \"format\" in value\n );\n}\n\nfunction traceInputFrom(value: string | URL): TraceInput {\n // URL.pathname is not a filesystem path on Windows (leading slash before\n // the drive letter); fileURLToPath handles file: URLs on every platform.\n return { type: \"file\", path: value instanceof URL ? fileURLToPath(value) : value };\n}\n\nasync function resolveRead(\n input: EvalRunInput,\n options: EvalRunOptions,\n): Promise<{ read?: TraceReadResult; runId?: string; diagnostics: EvalDiagnostic[] }> {\n try {\n if (typeof input === \"string\") {\n const read = await openTrace(traceInputFrom(input), {\n ...(options.format !== undefined && options.format !== \"auto\"\n ? { format: options.format }\n : {}),\n });\n return { read, runId: options.runId, diagnostics: [] };\n }\n\n if (isTraceReadResult(input)) {\n return { read: input, runId: options.runId, diagnostics: [] };\n }\n\n if (isTraceReadResult(input.trace)) {\n return { read: input.trace, runId: options.runId ?? input.runId, diagnostics: [] };\n }\n\n const format = options.format ?? input.format;\n const read = await openTrace(traceInputFrom(input.trace), {\n ...(format !== undefined && format !== \"auto\" ? { format } : {}),\n });\n return { read, runId: options.runId ?? input.runId, diagnostics: [] };\n } catch (error) {\n return { diagnostics: [diagnosticFromError(error)] };\n }\n}\n\nfunction diagnosticFromError(error: unknown): EvalDiagnostic {\n if (error instanceof TraceReadError) {\n const code =\n error.code === \"unsupported_format\"\n ? \"AI_EVAL_UNSUPPORTED_FORMAT\"\n : error.code === \"ambiguous_format\"\n ? \"AI_EVAL_AMBIGUOUS_FORMAT\"\n : \"AI_EVAL_TRACE_UNREADABLE\";\n return { code, severity: \"error\", message: error.message };\n }\n return {\n code: \"AI_EVAL_TRACE_UNREADABLE\",\n severity: \"error\",\n message: error instanceof Error ? error.message : String(error),\n };\n}\n\nfunction flatten(nodes: readonly EvalNode[]): EvalNode[] {\n return nodes.flatMap((node) => [node, ...flatten(node.children)]);\n}\n\nfunction selectRun(\n read: TraceReadResult,\n runId: string | undefined,\n): { run?: EvalRunTree; diagnostics: EvalDiagnostic[] } {\n if (runId !== undefined) {\n const run = read.runs.find((candidate) => candidate.runId === runId);\n return run === undefined\n ? {\n diagnostics: [\n {\n code: \"AI_EVAL_RUN_SELECTION_REQUIRED\",\n severity: \"error\",\n message: `Run not found: ${runId}.`,\n },\n ],\n }\n : { run, diagnostics: [] };\n }\n\n if (read.runs.length === 1) {\n return { run: read.runs[0], diagnostics: [] };\n }\n\n if (read.runs.length === 0) {\n return {\n diagnostics: [\n {\n code: \"AI_EVAL_RUN_SELECTION_REQUIRED\",\n severity: \"error\",\n message: \"No runs are available for eval.\",\n },\n ],\n };\n }\n\n return {\n diagnostics: [\n {\n code: \"AI_EVAL_RUN_SELECTION_REQUIRED\",\n severity: \"error\",\n message: \"Multiple runs are available; select a run before eval.\",\n },\n ],\n };\n}\n\nfunction errorResult(\n format: string,\n diagnostics: readonly EvalDiagnostic[],\n runId?: string,\n): EvalRunResult {\n const errors = diagnostics.filter((item) => item.severity === \"error\").length;\n return {\n ok: false,\n status: \"error\",\n format,\n ...(runId !== undefined ? { runId } : {}),\n summary: { passed: 0, failed: 0, warnings: 0, errors },\n findings: [],\n diagnostics: [...diagnostics],\n };\n}\n\nfunction normalizeFinding(rule: EvalRule, finding: EvalFinding): EvalFinding {\n return {\n ...finding,\n ruleId: finding.ruleId || rule.id,\n severity: finding.severity ?? rule.severity ?? \"error\",\n evidence: [...finding.evidence],\n };\n}\n\nfunction compareFindings(a: EvalFinding, b: EvalFinding): number {\n const aEvidence = a.evidence[0];\n const bEvidence = b.evidence[0];\n return (\n a.ruleId.localeCompare(b.ruleId) ||\n (aEvidence?.runId ?? \"\").localeCompare(bEvidence?.runId ?? \"\") ||\n (aEvidence?.eventId ?? \"\").localeCompare(bEvidence?.eventId ?? \"\") ||\n (aEvidence?.path ?? \"\").localeCompare(bEvidence?.path ?? \"\") ||\n a.message.localeCompare(b.message)\n );\n}\n\nfunction summarize(findings: readonly EvalFinding[], ruleCount: number): EvalSummary {\n const failed = findings.filter((item) => item.status === \"fail\").length;\n const warnings = findings.filter((item) => item.status === \"warning\").length;\n const errors = findings.filter((item) => item.severity === \"error\").length;\n return {\n passed: Math.max(0, ruleCount - failed - warnings),\n failed,\n warnings,\n errors,\n };\n}\n\nfunction defaultRules(): EvalRule[] {\n return [checks.requireSuccess()];\n}\n\nexport async function evalRun(\n input: EvalRunInput,\n options: EvalRunOptions = {},\n): Promise<EvalRunResult> {\n const resolved = await resolveRead(input, options);\n if (resolved.read === undefined) {\n return errorResult(\"unknown\", resolved.diagnostics);\n }\n\n const selected = selectRun(resolved.read, resolved.runId);\n if (selected.run === undefined) {\n return errorResult(resolved.read.format, selected.diagnostics, resolved.runId);\n }\n\n const rules = [...(options.checks ?? defaultRules())].sort((a, b) =>\n a.id.localeCompare(b.id),\n );\n const context: EvalContext = {\n format: resolved.read.format,\n run: selected.run,\n nodes: flatten(selected.run.children),\n events: resolved.read.events.filter((event) => event.runId === selected.run?.runId),\n };\n\n const diagnostics: EvalDiagnostic[] = [];\n const findings: EvalFinding[] = [];\n for (const rule of rules) {\n try {\n findings.push(...rule.evaluate(context).map((finding) => normalizeFinding(rule, finding)));\n } catch (error) {\n diagnostics.push({\n code: \"AI_EVAL_RULE_FAILED\",\n severity: \"error\",\n ruleId: rule.id,\n message: `Eval rule ${rule.id} failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n });\n }\n }\n\n if (diagnostics.length > 0) {\n return errorResult(resolved.read.format, diagnostics, selected.run.runId);\n }\n\n const sortedFindings = findings.sort(compareFindings);\n const summary = summarize(sortedFindings, rules.length);\n const status = summary.failed > 0 ? \"fail\" : \"pass\";\n return {\n ok: status === \"pass\",\n status,\n format: resolved.read.format,\n runId: selected.run.runId,\n summary,\n findings: sortedFindings,\n diagnostics: [],\n };\n}\n\nfunction evidenceForRun(run: EvalRunTree, path?: string): EvalEvidence[] {\n return [{ runId: run.runId, ...(path !== undefined ? { path } : {}) }];\n}\n\nfunction evidenceForEvent(event: EvalEvent, path?: string): EvalEvidence[] {\n return [\n {\n runId: event.runId,\n eventId: event.eventId,\n ...(event.parentId !== undefined ? { parentId: event.parentId } : {}),\n kind: event.kind,\n name: event.name,\n ...(path !== undefined ? { path } : {}),\n },\n ];\n}\n\nfunction fail(\n ruleId: string,\n message: string,\n evidence: EvalEvidence[],\n expected?: unknown,\n actual?: unknown,\n): EvalFinding {\n return {\n ruleId,\n status: \"fail\",\n severity: \"error\",\n message,\n ...(expected !== undefined ? { expected } : {}),\n ...(actual !== undefined ? { actual } : {}),\n evidence,\n };\n}\n\nfunction nodeNames(nodes: readonly EvalNode[], kind?: string): string[] {\n return nodes\n .filter((node) => kind === undefined || node.event.kind === kind)\n .map((node) => node.event.name)\n .sort((a, b) => a.localeCompare(b));\n}\n\nfunction hasAttribute(node: EvalNode, key: string): boolean {\n return (\n node.event.attributes !== undefined &&\n Object.prototype.hasOwnProperty.call(node.event.attributes, key)\n );\n}\n\nfunction numericAttribute(node: EvalNode, keys: readonly string[]): number | undefined {\n const attrs = node.event.attributes;\n if (attrs === undefined) return undefined;\n for (const key of keys) {\n const value = attrs[key];\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n }\n return undefined;\n}\n\nfunction totalTokenCount(events: readonly TraceReadResult[\"events\"][number][]): number {\n return events.reduce((total, event) => {\n const usage = event.tokenUsage;\n if (usage?.total !== undefined) return total + usage.total;\n return total + (usage?.input ?? 0) + (usage?.output ?? 0);\n }, 0);\n}\n\nfunction createRule(\n id: string,\n category: EvalRuleCategory,\n evaluate: EvalRule[\"evaluate\"],\n): EvalRule {\n return { id, category, severity: \"error\", evaluate };\n}\n\nconst DEFAULT_ANSWER_KEYS = [\n \"answer\",\n \"finalAnswer\",\n \"final\",\n \"response\",\n \"result\",\n \"output\",\n \"outputPreview\",\n \"completion\",\n \"text\",\n] as const;\n\nconst DEFAULT_CONTEXT_KEYS = [\n \"context\",\n \"contexts\",\n \"document\",\n \"documents\",\n \"retrieved\",\n \"retrieval\",\n \"chunks\",\n \"chunk\",\n \"source\",\n \"sources\",\n \"sourceText\",\n] as const;\n\nconst DEFAULT_CITATION_KEYS = [\n \"citation\",\n \"citations\",\n \"reference\",\n \"references\",\n \"sourceId\",\n \"sourceIds\",\n \"source_id\",\n \"source_ids\",\n] as const;\n\nconst DEFAULT_SOURCE_ID_KEYS = [\n ...DEFAULT_CITATION_KEYS,\n \"id\",\n \"ids\",\n \"documentId\",\n \"documentIds\",\n \"docId\",\n \"docIds\",\n] as const;\n\nconst DEFAULT_BANNED_UNSUPPORTED_PHRASES = [\n \"i don't have enough information\",\n \"i do not have enough information\",\n \"not enough context\",\n \"cannot determine from the context\",\n \"unable to determine from the provided context\",\n] as const;\n\nconst STOP_WORDS = new Set([\n \"a\",\n \"an\",\n \"and\",\n \"are\",\n \"but\",\n \"for\",\n \"from\",\n \"have\",\n \"into\",\n \"not\",\n \"that\",\n \"the\",\n \"their\",\n \"this\",\n \"was\",\n \"were\",\n \"with\",\n \"you\",\n \"your\",\n]);\n\ninterface TextField {\n text: string;\n node: EvalNode;\n path: string;\n}\n\nfunction normalizeKey(key: string): string {\n return key.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n}\n\nfunction keySet(keys: readonly string[]): Set<string> {\n return new Set(keys.map(normalizeKey));\n}\n\nfunction valuesAsStrings(value: unknown, depth = 0): string[] {\n if (depth > 5) return [];\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n return trimmed.length > 0 ? [trimmed] : [];\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") return [String(value)];\n if (Array.isArray(value)) {\n return value.flatMap((item) => valuesAsStrings(item, depth + 1));\n }\n if (value !== null && typeof value === \"object\") {\n return Object.values(value as Record<string, unknown>).flatMap((item) =>\n valuesAsStrings(item, depth + 1),\n );\n }\n return [];\n}\n\nfunction collectTextFields(\n nodes: readonly EvalNode[],\n keys: readonly string[],\n preferredKinds: readonly string[] = [],\n): TextField[] {\n const wanted = keySet(keys);\n const preferred = new Set(preferredKinds);\n const orderedNodes = [...nodes].sort((a, b) => {\n const aPreferred = preferred.has(a.event.kind) ? 0 : 1;\n const bPreferred = preferred.has(b.event.kind) ? 0 : 1;\n return aPreferred - bPreferred || a.event.eventId.localeCompare(b.event.eventId);\n });\n const fields: TextField[] = [];\n for (const node of orderedNodes) {\n const attrs = node.event.attributes;\n if (attrs === undefined) continue;\n for (const [key, value] of Object.entries(attrs)) {\n if (!wanted.has(normalizeKey(key))) continue;\n for (const text of valuesAsStrings(value)) {\n fields.push({ text, node, path: `attributes.${key}` });\n }\n }\n }\n return fields;\n}\n\nfunction tokenize(text: string): string[] {\n return [...text.toLowerCase().matchAll(/[a-z0-9][a-z0-9'-]{2,}/g)]\n .map((match) => match[0].replace(/^['-]+|['-]+$/g, \"\"))\n .filter((token) => token.length > 2 && !STOP_WORDS.has(token));\n}\n\nfunction firstEvidence(\n fields: readonly TextField[],\n run: EvalRunTree,\n path: string,\n): EvalEvidence[] {\n const first = fields[0];\n return first === undefined\n ? evidenceForRun(run, path)\n : evidenceForEvent(first.node.event, first.path);\n}\n\nfunction collectSourceIds(\n nodes: readonly EvalNode[],\n keys: readonly string[],\n): string[] {\n const wanted = keySet(keys);\n const ids = new Set<string>();\n for (const node of nodes) {\n const attrs = node.event.attributes;\n if (attrs === undefined) continue;\n for (const [key, value] of Object.entries(attrs)) {\n if (!wanted.has(normalizeKey(key))) continue;\n for (const candidate of valuesAsStrings(value)) {\n const trimmed = candidate.trim();\n if (trimmed.length > 0 && trimmed.length <= 128) ids.add(trimmed);\n }\n }\n }\n return [...ids].sort((a, b) => a.localeCompare(b));\n}\n\nfunction citationCount(answer: string, citationFields: readonly TextField[]): number {\n const inline =\n answer.match(/\\[[^\\]\\n]{1,40}\\]|\\([A-Za-z][A-Za-z0-9_-]{0,39}\\)/g)?.length ?? 0;\n return inline + citationFields.length;\n}\n\nfunction quotedSnippets(text: string, minLength: number): string[] {\n const snippets = new Set<string>();\n const pattern = /\"([^\"\\n]+)\"|'([^'\\n]+)'|“([^”\\n]+)”/g;\n for (const match of text.matchAll(pattern)) {\n const snippet = (match[1] ?? match[2] ?? match[3] ?? \"\").trim();\n if (snippet.length >= minLength) snippets.add(snippet);\n }\n return [...snippets].sort((a, b) => a.localeCompare(b));\n}\n\nfunction wordCount(text: string): number {\n return tokenize(text).length;\n}\n\nexport const checks = {\n requireSuccess(): EvalRule {\n return createRule(\"eval.requireSuccess\", \"run\", (context) =>\n context.run.status === \"ok\"\n ? []\n : [\n fail(\n \"eval.requireSuccess\",\n \"Run did not complete successfully.\",\n evidenceForRun(context.run, \"status\"),\n \"ok\",\n context.run.status ?? \"unknown\",\n ),\n ],\n );\n },\n\n requiredTools(required: readonly string[]): EvalRule {\n const expected = [...required].sort((a, b) => a.localeCompare(b));\n return createRule(\"eval.requiredTools\", \"tool\", (context) => {\n const tools = new Set(nodeNames(context.nodes, \"TOOL\"));\n return expected\n .filter((name) => !tools.has(name))\n .map((name) =>\n fail(\n \"eval.requiredTools\",\n `Required tool ${name} did not appear.`,\n evidenceForRun(context.run, \"children\"),\n name,\n [...tools].sort((a, b) => a.localeCompare(b)),\n ),\n );\n });\n },\n\n forbiddenTools(forbidden: readonly string[]): EvalRule {\n const blocked = [...forbidden].sort((a, b) => a.localeCompare(b));\n return createRule(\"eval.forbiddenTools\", \"tool\", (context) =>\n context.nodes\n .filter((node) => node.event.kind === \"TOOL\" && blocked.includes(node.event.name))\n .map((node) =>\n fail(\n \"eval.forbiddenTools\",\n `Forbidden tool ${node.event.name} appeared.`,\n evidenceForEvent(node.event, \"name\"),\n \"tool absent\",\n node.event.name,\n ),\n ),\n );\n },\n\n maxDurationMs(maxDurationMs: number): EvalRule {\n return createRule(\"eval.maxDurationMs\", \"run\", (context) =>\n context.run.durationMs !== undefined && context.run.durationMs > maxDurationMs\n ? [\n fail(\n \"eval.maxDurationMs\",\n `Run duration exceeded ${maxDurationMs}ms.`,\n evidenceForRun(context.run, \"durationMs\"),\n { maxDurationMs },\n context.run.durationMs,\n ),\n ]\n : [],\n );\n },\n\n maxDepth(maxDepth: number): EvalRule {\n return createRule(\"eval.maxDepth\", \"structure\", (context) => {\n const deepest = context.nodes.reduce<EvalNode | undefined>(\n (current, node) =>\n current === undefined || node.depth > current.depth ? node : current,\n undefined,\n );\n return deepest !== undefined && deepest.depth > maxDepth\n ? [\n fail(\n \"eval.maxDepth\",\n `Run tree depth exceeded ${maxDepth}.`,\n evidenceForEvent(deepest.event, \"depth\"),\n { maxDepth },\n deepest.depth,\n ),\n ]\n : [];\n });\n },\n\n maxRetries(maxRetries: number): EvalRule {\n return createRule(\"eval.maxRetries\", \"structure\", (context) =>\n context.nodes.flatMap((node) => {\n const retries = numericAttribute(node, [\"retryCount\", \"retries\", \"attempt\"]);\n return retries !== undefined && retries > maxRetries\n ? [\n fail(\n \"eval.maxRetries\",\n `Retry count exceeded ${maxRetries}.`,\n evidenceForEvent(node.event, \"attributes.retryCount\"),\n { maxRetries },\n retries,\n ),\n ]\n : [];\n }),\n );\n },\n\n maxTotalTokens(maxTotalTokens: number): EvalRule {\n return createRule(\"eval.maxTotalTokens\", \"llm\", (context) => {\n const total = totalTokenCount(context.events);\n return total > maxTotalTokens\n ? [\n fail(\n \"eval.maxTotalTokens\",\n `Total token usage exceeded ${maxTotalTokens}.`,\n evidenceForRun(context.run, \"tokenUsage.total\"),\n { maxTotalTokens },\n total,\n ),\n ]\n : [];\n });\n },\n\n noFailedSteps(): EvalRule {\n return createRule(\"eval.noFailedSteps\", \"run\", (context) =>\n context.nodes\n .filter((node) => node.event.status === \"error\" || node.event.kind === \"ERROR\")\n .map((node) =>\n fail(\n \"eval.noFailedSteps\",\n \"Run contains a failed step or error node.\",\n evidenceForEvent(node.event, \"status\"),\n \"no failed nodes\",\n node.event.status ?? node.event.kind,\n ),\n ),\n );\n },\n\n requiredRetrievalBeforeGeneration(): EvalRule {\n return createRule(\"eval.requiredRetrievalBeforeGeneration\", \"retrieval\", (context) => {\n const firstLlmIndex = context.nodes.findIndex((node) => node.event.kind === \"LLM\");\n if (firstLlmIndex === -1) return [];\n const retrievalIndex = context.nodes.findIndex(\n (node, index) => index < firstLlmIndex && node.event.kind === \"RETRIEVER\",\n );\n return retrievalIndex === -1\n ? [\n fail(\n \"eval.requiredRetrievalBeforeGeneration\",\n \"No retrieval step appeared before the first LLM generation.\",\n evidenceForEvent(context.nodes[firstLlmIndex].event, \"kind\"),\n \"RETRIEVER before LLM\",\n \"LLM before RETRIEVER\",\n ),\n ]\n : [];\n });\n },\n\n requiredDecisionMetadata(keys: readonly string[]): EvalRule {\n const required = [...keys].sort((a, b) => a.localeCompare(b));\n return createRule(\"eval.requiredDecisionMetadata\", \"structure\", (context) => {\n const decisions = context.nodes.filter((node) => node.event.kind === \"DECISION\");\n if (decisions.length === 0) {\n return [\n fail(\n \"eval.requiredDecisionMetadata\",\n \"No decision node is available for required metadata.\",\n evidenceForRun(context.run, \"children\"),\n { decisionMetadata: required },\n \"no decision nodes\",\n ),\n ];\n }\n return decisions.flatMap((node) =>\n required\n .filter((key) => !hasAttribute(node, key))\n .map((key) =>\n fail(\n \"eval.requiredDecisionMetadata\",\n `Decision metadata ${key} is missing.`,\n evidenceForEvent(node.event, `attributes.${key}`),\n key,\n \"missing\",\n ),\n ),\n );\n });\n },\n\n contextOverlap(options: ContextOverlapOptions = {}): EvalRule {\n const minOverlap = options.minOverlap ?? 0.1;\n const minSharedTerms = options.minSharedTerms ?? 1;\n const answerKeys = options.answerKeys ?? DEFAULT_ANSWER_KEYS;\n const contextKeys = options.contextKeys ?? DEFAULT_CONTEXT_KEYS;\n return createRule(\"eval.contextOverlap\", \"retrieval\", (context) => {\n const answers = collectTextFields(context.nodes, answerKeys, [\"RESULT\", \"LLM\", \"AGENT\"]);\n const contexts = collectTextFields(context.nodes, contextKeys, [\"RETRIEVER\", \"TOOL\"]);\n if (answers.length === 0 || contexts.length === 0) {\n return [\n fail(\n \"eval.contextOverlap\",\n \"Answer and context text are required for overlap evaluation.\",\n firstEvidence(answers.length > 0 ? answers : contexts, context.run, \"children\"),\n { answer: \"present\", context: \"present\" },\n { answerFields: answers.length, contextFields: contexts.length },\n ),\n ];\n }\n\n const answerTerms = new Set(tokenize(answers.map((field) => field.text).join(\" \")));\n const contextTerms = new Set(tokenize(contexts.map((field) => field.text).join(\" \")));\n const sharedTerms = [...answerTerms].filter((term) => contextTerms.has(term)).length;\n const overlap = answerTerms.size === 0 ? 0 : sharedTerms / answerTerms.size;\n return sharedTerms < minSharedTerms || overlap < minOverlap\n ? [\n fail(\n \"eval.contextOverlap\",\n \"Answer text did not sufficiently overlap retrieved context.\",\n firstEvidence(answers, context.run, \"attributes.answer\"),\n { minOverlap, minSharedTerms },\n {\n answerTerms: answerTerms.size,\n contextTerms: contextTerms.size,\n sharedTerms,\n overlap: Number(overlap.toFixed(4)),\n },\n ),\n ]\n : [];\n });\n },\n\n quoteOverlap(options: QuoteOverlapOptions = {}): EvalRule {\n const answerKeys = options.answerKeys ?? DEFAULT_ANSWER_KEYS;\n const contextKeys = options.contextKeys ?? DEFAULT_CONTEXT_KEYS;\n const minQuoteLength = options.minQuoteLength ?? 6;\n const requireQuote = options.requireQuote ?? true;\n return createRule(\"eval.quoteOverlap\", \"retrieval\", (context) => {\n const answers = collectTextFields(context.nodes, answerKeys, [\"RESULT\", \"LLM\", \"AGENT\"]);\n const contexts = collectTextFields(context.nodes, contextKeys, [\"RETRIEVER\", \"TOOL\"]);\n const answerText = answers.map((field) => field.text).join(\" \");\n const contextText = contexts.map((field) => field.text).join(\" \").toLowerCase();\n const quotes = quotedSnippets(answerText, minQuoteLength);\n if (quotes.length === 0) {\n return requireQuote\n ? [\n fail(\n \"eval.quoteOverlap\",\n \"Answer did not contain a quote for overlap evaluation.\",\n firstEvidence(answers, context.run, \"attributes.answer\"),\n { quotedText: \"present\" },\n { quoteCount: 0 },\n ),\n ]\n : [];\n }\n const missing = quotes.filter((quote) => !contextText.includes(quote.toLowerCase()));\n return missing.length > 0\n ? [\n fail(\n \"eval.quoteOverlap\",\n \"Quoted answer text did not appear in retrieved context.\",\n firstEvidence(answers, context.run, \"attributes.answer\"),\n { allQuotesInContext: true },\n { quoteCount: quotes.length, missingQuotes: missing.length },\n ),\n ]\n : [];\n });\n },\n\n citationPresence(options: CitationPresenceOptions = {}): EvalRule {\n const answerKeys = options.answerKeys ?? DEFAULT_ANSWER_KEYS;\n const citationKeys = options.citationKeys ?? DEFAULT_CITATION_KEYS;\n return createRule(\"eval.citationPresence\", \"retrieval\", (context) => {\n const answers = collectTextFields(context.nodes, answerKeys, [\"RESULT\", \"LLM\", \"AGENT\"]);\n const citations = collectTextFields(context.nodes, citationKeys);\n const count = citationCount(answers.map((field) => field.text).join(\" \"), citations);\n return count === 0\n ? [\n fail(\n \"eval.citationPresence\",\n \"Answer did not include citations or source references.\",\n firstEvidence(answers, context.run, \"attributes.answer\"),\n { citationCount: \">= 1\" },\n { citationCount: 0 },\n ),\n ]\n : [];\n });\n },\n\n requiredSourceIds(\n requiredIds: readonly string[],\n options: RequiredSourceIdsOptions = {},\n ): EvalRule {\n const expected = [...requiredIds].sort((a, b) => a.localeCompare(b));\n const sourceIdKeys = options.sourceIdKeys ?? DEFAULT_SOURCE_ID_KEYS;\n return createRule(\"eval.requiredSourceIds\", \"retrieval\", (context) => {\n const available = collectSourceIds(context.nodes, sourceIdKeys);\n const availableSet = new Set(available);\n const missing = expected.filter((id) => !availableSet.has(id));\n return missing.length > 0\n ? [\n fail(\n \"eval.requiredSourceIds\",\n \"Required source IDs were not present in trace context or citations.\",\n evidenceForRun(context.run, \"children\"),\n { sourceIds: expected },\n { missingSourceIds: missing, availableSourceIds: available.slice(0, 20) },\n ),\n ]\n : [];\n });\n },\n\n answerLengthBounds(options: AnswerLengthBoundsOptions): EvalRule {\n const answerKeys = options.answerKeys ?? DEFAULT_ANSWER_KEYS;\n return createRule(\"eval.answerLengthBounds\", \"llm\", (context) => {\n const answers = collectTextFields(context.nodes, answerKeys, [\"RESULT\", \"LLM\", \"AGENT\"]);\n const answer = answers.map((field) => field.text).join(\" \").trim();\n const characters = answer.length;\n const words = wordCount(answer);\n const tooShort =\n (options.minCharacters !== undefined && characters < options.minCharacters) ||\n (options.minWords !== undefined && words < options.minWords);\n const tooLong =\n (options.maxCharacters !== undefined && characters > options.maxCharacters) ||\n (options.maxWords !== undefined && words > options.maxWords);\n return answer.length === 0 || tooShort || tooLong\n ? [\n fail(\n \"eval.answerLengthBounds\",\n \"Answer length fell outside required bounds.\",\n firstEvidence(answers, context.run, \"attributes.answer\"),\n {\n minCharacters: options.minCharacters,\n maxCharacters: options.maxCharacters,\n minWords: options.minWords,\n maxWords: options.maxWords,\n },\n { characters, words },\n ),\n ]\n : [];\n });\n },\n\n bannedUnsupportedPhrases(\n phrases: readonly string[] = DEFAULT_BANNED_UNSUPPORTED_PHRASES,\n options: BannedUnsupportedPhrasesOptions = {},\n ): EvalRule {\n const answerKeys = options.answerKeys ?? DEFAULT_ANSWER_KEYS;\n const banned = [...phrases].map((phrase) => phrase.toLowerCase()).sort();\n return createRule(\"eval.bannedUnsupportedPhrases\", \"safety\", (context) => {\n const answers = collectTextFields(context.nodes, answerKeys, [\"RESULT\", \"LLM\", \"AGENT\"]);\n const answer = answers.map((field) => field.text).join(\" \").toLowerCase();\n const matches = banned.filter((phrase) => answer.includes(phrase));\n return matches.length > 0\n ? [\n fail(\n \"eval.bannedUnsupportedPhrases\",\n \"Answer contained banned unsupported-answer phrasing.\",\n firstEvidence(answers, context.run, \"attributes.answer\"),\n { bannedPhraseCount: banned.length },\n { matchedPhraseCount: matches.length },\n ),\n ]\n : [];\n });\n },\n} as const;\n\nexport function renderEvalMarkdown(result: EvalRunResult): string {\n const lines = [\n `# AgentInspect Eval`,\n \"\",\n `Status: ${result.status}`,\n `Format: ${result.format}`,\n ...(result.runId !== undefined ? [`Run: ${result.runId}`] : []),\n `Summary: ${result.summary.passed} passed, ${result.summary.failed} failed, ${result.summary.warnings} warnings, ${result.summary.errors} errors`,\n ];\n\n if (result.diagnostics.length > 0) {\n lines.push(\"\", \"## Diagnostics\");\n for (const diagnostic of result.diagnostics) {\n lines.push(`- ${diagnostic.code}: ${diagnostic.message}`);\n }\n }\n\n if (result.findings.length > 0) {\n lines.push(\"\", \"## Findings\");\n for (const finding of result.findings) {\n const path = finding.evidence[0]?.path;\n lines.push(`- ${finding.ruleId}: ${finding.message}${path ? ` (${path})` : \"\"}`);\n }\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nexport {\n createEvalCircuitRule,\n createEvalGuardrailRule,\n type EvalCircuitRuleOptions,\n type EvalGuardrailRuleOptions,\n} from \"./safety-rules.js\";\n"]}
1
+ {"version":3,"sources":["../../circuit/src/analyze.ts","../../redact/src/sensitive-key.ts","../../redact/src/index.ts","../../guardrails/src/rules.ts","../../guardrails/src/run.ts","../src/safety-rules.ts","../src/index.ts"],"names":["createHash","crypto","toolArgs","ALL_RULES","runRule","pass","fileURLToPath","read","openTrace","TraceReadError","fail"],"mappings":";;;;;;;;;;;AAWA,IAAM,SAAA,GAA6B;AAAA,EACjC,8BAAA;AAAA,EACA,8BAAA;AAAA,EACA,6BAAA;AAAA,EACA,qBAAA;AAAA,EACA,sBAAA;AAAA,EACA,0BAAA;AAAA,EACA;AACF,CAAA;AAEA,SAAS,MAAA,CAAO,QAAgB,OAAA,EAAgC;AAC9D,EAAA,OAAO,EAAE,QAAQ,MAAA,EAAQ,QAAA,EAAU,UAAU,MAAA,EAAQ,OAAA,EAAS,QAAA,EAAU,EAAC,EAAE;AAC7E;AAEA,SAAS,IAAA,CACP,MAAA,EACA,OAAA,EACA,QAAA,EACA,WAAgC,OAAA,EACjB;AACf,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,MAAA,EAAQ,QAAA,KAAa,SAAA,GAAY,MAAA,GAAS,MAAA;AAAA,IAC1C,QAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,YAAY,KAAA,EAAmC;AACtD,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,WAAA,EAAY;AACpC,EAAA,OACE,MAAM,IAAA,KAAS,MAAA,IACf,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA,IACvB,IAAA,CAAK,UAAA,CAAW,WAAW,KAC3B,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,IACtB,IAAA,CAAK,WAAW,MAAM,CAAA;AAE1B;AAEA,SAAS,WAAW,KAAA,EAAmC;AACrD,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,WAAA,EAAY;AACpC,EAAA,OAAO,KAAA,CAAM,IAAA,KAAS,KAAA,IAAS,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,IAAK,IAAA,CAAK,SAAS,YAAY,CAAA;AAChH;AAEA,SAAS,UAAU,KAAA,EAAkC;AACnD,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,UAAA,IAAc,EAAC;AACnC,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,QAAQ,KAAA,CAAM,QAAA;AACvD,EAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,QAAA,CAAS,MAAA,GAAS,GAAG,OAAO,QAAA;AAChE,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,0BAAA,EAA4B,EAAE,CAAA;AAC1D;AAEA,SAAS,QAAA,CAAS,UAAkB,IAAA,EAAuB;AACzD,EAAA,OAAOA,kBAAW,QAAQ,CAAA,CAAE,OAAO,CAAA,EAAG,QAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,QAAQ,IAAI,CAAC,EAAE,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AAC7G;AAEA,SAAS,SAAS,KAAA,EAAmC;AACnD,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,UAAA,IAAc,EAAC;AACnC,EAAA,OAAO,MAAM,SAAA,IAAa,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,SAAS,KAAA,CAAM,UAAA;AAC/D;AAEA,SAAS,WAAW,KAAA,EAA8C;AAChE,EAAA,IAAI,OAAO,KAAA,CAAM,UAAA,KAAe,QAAA,SAAiB,KAAA,CAAM,UAAA;AACvD,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,UAAA,IAAc,EAAC;AACnC,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,QAAA;AAC3C,EAAA,OAAO,OAAO,QAAA,KAAa,QAAA,GAAW,QAAA,GAAW,MAAA;AACnD;AAEA,SAAS,cAAc,KAAA,EAA8C;AACnE,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,UAAA,IAAc,EAAC;AACnC,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,gBAAgB,KAAA,CAAM,UAAA;AAC3D,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,MAAA;AAC7C;AAEO,SAAS,0BAAA,CACd,QACA,UAAA,EACe;AACf,EAAA,MAAM,MAAA,GAAS,8BAAA;AACf,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AACvC,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,WAAW,CAAA,EAAG;AAC9C,IAAA,MAAM,KAAA,GAAQ,UAAU,KAAK,CAAA;AAC7B,IAAA,MAAA,CAAO,IAAI,KAAA,EAAA,CAAQ,MAAA,CAAO,IAAI,KAAK,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,EAChD;AACA,EAAA,MAAM,WAA8B,EAAC;AACrC,EAAA,KAAA,MAAW,CAAC,QAAA,EAAU,KAAK,CAAA,IAAK,MAAA,EAAQ;AACtC,IAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,MAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,UAAU,KAAA,EAAO,SAAA,EAAW,YAAY,CAAA;AAAA,IAClE;AAAA,EACF;AACA,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,MAAA,CAAO,QAAQ,mCAAmC,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO,IAAA,CAAK,MAAA,EAAQ,sCAAA,EAAwC,QAAQ,CAAA;AACtE;AAEO,SAAS,0BAAA,CACd,QACA,UAAA,EACe;AACf,EAAA,MAAM,MAAA,GAAS,8BAAA;AACf,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAiD;AACpE,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,WAAW,CAAA,EAAG;AAC9C,IAAA,MAAM,KAAA,GAAQ,UAAU,KAAK,CAAA;AAC7B,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,EAAO,QAAA,CAAS,KAAK,CAAC,CAAA;AAC5C,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAC5B,IAAA,MAAM,OAAA,GAAU,OAAO,GAAA,CAAI,GAAG,KAAK,EAAE,QAAA,EAAU,KAAA,EAAO,KAAA,EAAO,CAAA,EAAE;AAC/D,IAAA,OAAA,CAAQ,KAAA,IAAS,CAAA;AACjB,IAAA,MAAA,CAAO,GAAA,CAAI,KAAK,OAAO,CAAA;AAAA,EACzB;AACA,EAAA,MAAM,WAA8B,EAAC;AACrC,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,EAAO,EAAG;AACnC,IAAA,IAAI,KAAA,CAAM,QAAQ,UAAA,EAAY;AAC5B,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,QAAA,EAAU,KAAA,CAAM,QAAA,EAAU,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,SAAA,EAAW,UAAA,EAAY,CAAA;AAAA,IAC/F;AAAA,EACF;AACA,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,MAAA,CAAO,QAAQ,4CAA4C,CAAA;AAAA,EACpE;AACA,EAAA,OAAO,IAAA,CAAK,MAAA,EAAQ,gDAAA,EAAkD,QAAQ,CAAA;AAChF;AAEO,SAAS,yBAAA,CACd,QACA,aAAA,EACe;AACf,EAAA,MAAM,MAAA,GAAS,6BAAA;AACf,EAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU;AAC/C,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,UAAA,IAAc,EAAC;AACnC,IAAA,OAAO,OAAO,MAAM,SAAA,KAAc,QAAA,IAAY,MAAM,IAAA,CAAK,WAAA,EAAY,CAAE,QAAA,CAAS,MAAM,CAAA;AAAA,EACxF,CAAC,CAAA;AACD,EAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,MAAA,CAAO,CAAC,KAAK,KAAA,KAAU;AACrD,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,UAAA,IAAc,EAAC;AACnC,IAAA,MAAM,YAAY,OAAO,KAAA,CAAM,SAAA,KAAc,QAAA,GAAW,MAAM,SAAA,GAAY,GAAA;AAC1E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,SAAS,CAAA;AAAA,EAChC,CAAA,EAAG,gBAAgB,MAAM,CAAA;AACzB,EAAA,IAAI,WAAW,aAAA,EAAe;AAC5B,IAAA,OAAO,MAAA,CAAO,QAAQ,mCAAmC,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO,IAAA,CAAK,QAAQ,qCAAA,EAAuC;AAAA,IACzD,EAAE,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS,WAAW,aAAA;AAAc,GACpD,CAAA;AACH;AAEO,SAAS,kBAAA,CACd,QACA,UAAA,EACe;AACf,EAAA,MAAM,MAAA,GAAS,qBAAA;AACf,EAAA,MAAM,QAAA,GAAW,OAAO,GAAA,CAAI,aAAa,EAAE,MAAA,CAAO,CAAC,KAAA,KAA2B,KAAA,KAAU,MAAS,CAAA;AACjG,EAAA,MAAM,UAAA,GAAa,SAAS,MAAA,GAAS,CAAA,GAAI,KAAK,GAAA,CAAI,GAAG,QAAQ,CAAA,GAAI,CAAA;AACjE,EAAA,IAAI,cAAc,UAAA,EAAY;AAC5B,IAAA,OAAO,MAAA,CAAO,QAAQ,+BAA+B,CAAA;AAAA,EACvD;AACA,EAAA,OAAO,IAAA,CAAK,QAAQ,iCAAA,EAAmC;AAAA,IACrD,EAAE,MAAA,EAAQ,KAAA,EAAO,UAAA,EAAY,WAAW,UAAA;AAAW,GACpD,CAAA;AACH;AAEO,SAAS,mBAAA,CACd,QACA,aAAA,EACe;AACf,EAAA,MAAM,MAAA,GAAS,sBAAA;AACf,EAAA,MAAM,WAA8B,EAAC;AACrC,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,WAAW,CAAA,EAAG;AAC9C,IAAA,MAAM,QAAA,GAAW,WAAW,KAAK,CAAA;AACjC,IAAA,IAAI,QAAA,KAAa,MAAA,IAAa,QAAA,GAAW,aAAA,EAAe;AACtD,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,MAAA;AAAA,QACA,QAAA,EAAU,UAAU,KAAK,CAAA;AAAA,QACzB,KAAA,EAAO,QAAA;AAAA,QACP,SAAA,EAAW,aAAA;AAAA,QACX,SAAS,KAAA,CAAM;AAAA,OAChB,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,MAAA,CAAO,QAAQ,gCAAgC,CAAA;AAAA,EACxD;AACA,EAAA,OAAO,IAAA,CAAK,MAAA,EAAQ,wCAAA,EAA0C,QAAA,EAAU,SAAS,CAAA;AACnF;AAEO,SAAS,sBAAA,CACd,QACA,WAAA,EACe;AACf,EAAA,MAAM,MAAA,GAAS,0BAAA;AACf,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA,CAAE,MAAA;AAC3C,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU;AACzC,IAAA,MAAM,MAAA,GAAA,CAAU,MAAM,MAAA,IAAU,KAAA,CAAM,YAAY,MAAA,IAAU,EAAA,EAAI,QAAA,EAAS,CAAE,WAAA,EAAY;AACvF,IAAA,OAAO,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,SAAA,IAAa,MAAA,KAAW,WAAA;AAAA,EAC/D,CAAC,CAAA;AACD,EAAA,IAAI,QAAA,IAAY,eAAe,WAAA,EAAa;AAC1C,IAAA,OAAO,MAAA,CAAO,QAAQ,mDAAmD,CAAA;AAAA,EAC3E;AACA,EAAA,OAAO,IAAA,CAAK,QAAQ,4BAAA,EAA8B;AAAA,IAChD,EAAE,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,WAAW,WAAA;AAAY,GACnD,CAAA;AACH;AAEO,SAAS,4BAAA,CACd,QACA,QAAA,EACe;AACf,EAAA,MAAM,MAAA,GAAS,gCAAA;AACf,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAoB;AACzC,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,WAAW,KAAA,CAAM,QAAA;AACvB,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,QAAA,CAAS,IAAI,QAAA,EAAA,CAAW,QAAA,CAAS,IAAI,QAAQ,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,EAC1D;AACA,EAAA,MAAM,WAA8B,EAAC;AACrC,EAAA,KAAA,MAAW,CAAC,QAAA,EAAU,KAAK,CAAA,IAAK,QAAA,EAAU;AACxC,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAA,EAAM,UAAU,KAAA,EAAO,SAAA,EAAW,UAAU,CAAA;AAAA,IACtE;AAAA,EACF;AACA,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,MAAA,CAAO,QAAQ,gCAAgC,CAAA;AAAA,EACxD;AACA,EAAA,OAAO,IAAA,CAAK,MAAA,EAAQ,2CAAA,EAA6C,QAAA,EAAU,SAAS,CAAA;AACtF;AAEA,SAAS,OAAA,CACP,MAAA,EACA,MAAA,EACA,OAAA,EAC2B;AAC3B,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,8BAAA;AACH,MAAA,IAAI,OAAA,CAAQ,kBAAA,KAAuB,MAAA,EAAW,OAAO,MAAA;AACrD,MAAA,OAAO,0BAAA,CAA2B,MAAA,EAAQ,OAAA,CAAQ,kBAAA,CAAmB,UAAU,CAAA;AAAA,IACjF,KAAK,8BAAA;AACH,MAAA,IAAI,OAAA,CAAQ,kBAAA,KAAuB,MAAA,EAAW,OAAO,MAAA;AACrD,MAAA,OAAO,0BAAA,CAA2B,MAAA,EAAQ,OAAA,CAAQ,kBAAA,CAAmB,UAAU,CAAA;AAAA,IACjF,KAAK,6BAAA;AACH,MAAA,IAAI,OAAA,CAAQ,iBAAA,KAAsB,MAAA,EAAW,OAAO,MAAA;AACpD,MAAA,OAAO,yBAAA,CAA0B,MAAA,EAAQ,OAAA,CAAQ,iBAAA,CAAkB,aAAa,CAAA;AAAA,IAClF,KAAK,qBAAA;AACH,MAAA,IAAI,OAAA,CAAQ,UAAA,KAAe,MAAA,EAAW,OAAO,MAAA;AAC7C,MAAA,OAAO,kBAAA,CAAmB,MAAA,EAAQ,OAAA,CAAQ,UAAA,CAAW,UAAU,CAAA;AAAA,IACjE,KAAK,sBAAA;AACH,MAAA,IAAI,OAAA,CAAQ,WAAA,KAAgB,MAAA,EAAW,OAAO,MAAA;AAC9C,MAAA,OAAO,mBAAA,CAAoB,MAAA,EAAQ,OAAA,CAAQ,WAAA,CAAY,aAAa,CAAA;AAAA,IACtE,KAAK,0BAAA;AACH,MAAA,IAAI,OAAA,CAAQ,cAAA,KAAmB,MAAA,EAAW,OAAO,MAAA;AACjD,MAAA,OAAO,sBAAA,CAAuB,MAAA,EAAQ,OAAA,CAAQ,cAAA,CAAe,WAAW,CAAA;AAAA,IAC1E,KAAK,gCAAA;AACH,MAAA,IAAI,OAAA,CAAQ,oBAAA,KAAyB,MAAA,EAAW,OAAO,MAAA;AACvD,MAAA,OAAO,4BAAA,CAA6B,MAAA,EAAQ,OAAA,CAAQ,oBAAA,CAAqB,QAAQ,CAAA;AAAA,IACnF;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAEO,SAAS,WAAA,CACd,MAAA,EACA,OAAA,GAA8B,EAAC,EACb;AAClB,EAAA,MAAM,QAAA,GAAW,QAAQ,KAAA,IAAS,SAAA;AAClC,EAAA,MAAM,UAA2B,EAAC;AAClC,EAAA,KAAA,MAAW,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,EAAQ,MAAA,EAAQ,OAAO,CAAA;AAC9C,IAAA,IAAI,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,EACjC;AACA,EAAA,MAAM,EAAA,GAAK,CAAC,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,MAAA,KAAW,MAAA,IAAU,MAAA,CAAO,QAAA,KAAa,OAAO,CAAA;AAC5F,EAAA,OAAO,EAAE,IAAI,OAAA,EAAQ;AACvB;;;ACjRA,SAAS,wBAAwB,KAAA,EAAwB;AACvD,EAAA,OAAO,QAAA,CAAS,KAAK,KAAK,CAAA;AAC5B;AAOO,SAAS,sBAAsB,KAAA,EAAuB;AAC3D,EAAA,OAAO,KAAA,CACJ,OAAA,CAAQ,oBAAA,EAAsB,OAAO,CAAA,CACrC,WAAA,EAAY,CACZ,OAAA,CAAQ,aAAA,EAAe,GAAG,CAAA,CAC1B,OAAA,CAAQ,YAAY,EAAE,CAAA;AAC3B;AAEO,IAAM,mCAAwD,IAAI,GAAA;AAAA,EACvE;AAAA,IACE,QAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF,CAAE,IAAI,qBAAqB;AAC7B,CAAA;AAEA,SAAS,qBAAqB,UAAA,EAA6B;AACzD,EAAA,IAAI,gCAAA,CAAiC,GAAA,CAAI,UAAU,CAAA,EAAG,OAAO,KAAA;AAC7D,EAAA,IAAI,UAAA,KAAe,SAAS,OAAO,IAAA;AACnC,EAAA,IAAI,UAAA,CAAW,QAAA,CAAS,QAAQ,CAAA,EAAG,OAAO,KAAA;AAC1C,EAAA,OAAO,UAAA,CAAW,SAAS,OAAO,CAAA;AACpC;AAUO,SAAS,wBAAA,CACd,KACA,aAAA,EACS;AACT,EAAA,IAAI,CAAC,KAAK,OAAO,KAAA;AACjB,EAAA,MAAM,UAAA,GAAa,sBAAsB,GAAG,CAAA;AAC5C,EAAA,IAAI,CAAC,YAAY,OAAO,KAAA;AACxB,EAAA,IAAI,gCAAA,CAAiC,GAAA,CAAI,UAAU,CAAA,EAAG,OAAO,KAAA;AAE7D,EAAA,MAAM,mBAAA,GAAsB,wBAAwB,GAAG,CAAA;AAEvD,EAAA,KAAA,MAAW,aAAa,aAAA,EAAe;AACrC,IAAA,MAAM,CAAA,GAAI,sBAAsB,SAAS,CAAA;AACzC,IAAA,IAAI,CAAC,CAAA,EAAG;AACR,IAAA,IAAI,MAAM,OAAA,EAAS;AACjB,MAAA,IAAI,oBAAA,CAAqB,UAAU,CAAA,EAAG,OAAO,IAAA;AAC7C,MAAA;AAAA,IACF;AACA,IAAA,IAAI,UAAA,KAAe,GAAG,OAAO,IAAA;AAC7B,IAAA,IAAI,WAAW,QAAA,CAAS,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,GAAG,OAAO,IAAA;AACzC,IAAA,IAAI,uBAAuB,UAAA,CAAW,UAAA,CAAW,GAAG,CAAC,CAAA,CAAA,CAAG,GAAG,OAAO,IAAA;AAAA,EACpE;AACA,EAAA,OAAO,KAAA;AACT;;;ACJO,IAAM,mBAAA,GAAsB;AAAA,EACjC,eAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,wBAAA,GAA2B;AAAA,EACtC,WAAA;AAAA,EACA,eAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,yBAAA,GAA4B;AAAA,EACvC,QAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA;AAkBA,SAAS,SAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAGA,SAAS,MAAM,GAAA,EAAqB;AAClC,EAAA,OAAO,IAAI,WAAA,EAAY;AACzB;AAEA,SAAS,mBAAA,CACP,KACA,KAAA,EAC0B;AAC1B,EAAA,MAAM,KAAA,GAAQ,MAAM,GAAG,CAAA;AACvB,EAAA,MAAM,SAAS,KAAA,CAAM,IAAA,CAAK,CAAC,SAAA,KAAc,SAAA,CAAU,QAAQ,KAAK,CAAA;AAChE,EAAA,IAAI,QAAQ,OAAO,MAAA;AACnB,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,CAAC,SAAA,KAAc,wBAAA,CAAyB,KAAK,CAAC,SAAA,CAAU,GAAG,CAAC,CAAC,CAAA;AACjF;AAEA,SAAS,WAAW,KAAA,EAAuB;AACzC,EAAA,MAAM,IAAA,GAAOC,uBAAA,CAAO,UAAA,CAAW,QAAQ,CAAA,CAAE,OAAO,KAAA,EAAO,MAAM,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAC3E,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACxB;AAEA,SAAS,gBAAgB,KAAA,EAAoC;AAC3D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,SAAA,IAAa,OAAO,UAAU,QAAA,EAAU;AACxF,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,gBAAgB,OAAA,EAAoD;AAC3E,EAAA,OAAO;AAAA,IACL,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,QAAA,EAAU,QAAQ,QAAA,IAAY,SAAA;AAAA,IAC9B,SAAA,EAAW,OAAA;AAAA,IACX,OAAO,KAAA,EAAO;AACZ,MAAA,IAAI,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,SAAiB,EAAC;AAC7C,MAAA,OAAA,CAAQ,QAAQ,SAAA,GAAY,CAAA;AAC5B,MAAA,OAAO,QAAQ,OAAA,CAAQ,IAAA,CAAK,MAAM,KAAK,CAAA,GACnC,CAAC,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,QAAQ,QAAA,IAAY,SAAA,EAAW,WAAW,OAAA,EAAS,IACnF,EAAC;AAAA,IACP;AAAA,GACF;AACF;AAEA,SAAS,WAAW,KAAA,EAAuB;AACzC,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAChC;AAEA,SAAS,WAAW,KAAA,EAAwB;AAC1C,EAAA,MAAM,MAAA,GAAS,WAAW,KAAK,CAAA;AAC/B,EAAA,IAAI,OAAO,MAAA,GAAS,EAAA,IAAM,MAAA,CAAO,MAAA,GAAS,IAAI,OAAO,KAAA;AAErD,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,KAAA,IAAS,IAAI,MAAA,CAAO,MAAA,GAAS,GAAG,CAAA,IAAK,CAAA,EAAG,KAAK,CAAA,EAAG;AAC9C,IAAA,IAAI,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,CAAC,CAAC,CAAA;AAC5B,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,KAAA,IAAS,CAAA;AACT,MAAA,IAAI,KAAA,GAAQ,GAAG,KAAA,IAAS,CAAA;AAAA,IAC1B;AACA,IAAA,GAAA,IAAO,KAAA;AACP,IAAA,MAAA,GAAS,CAAC,MAAA;AAAA,EACZ;AACA,EAAA,OAAO,MAAM,EAAA,KAAO,CAAA;AACtB;AAEA,IAAM,OAAA,GACJ,4EAAA;AAGF,IAAM,WAAA,GAAc,cAAA;AAEpB,IAAM,QAAA,GAAW,6CAAA;AAEjB,SAAS,oBAAoB,IAAA,EAAuB;AAClD,EAAA,MAAM,aAAa,IAAA,CAAK,WAAA,EAAY,CAAE,OAAA,CAAQ,gBAAgB,EAAE,CAAA;AAChE,EAAA,OACE,gCAAA,CAAiC,KAAK,UAAU,CAAA,IAChD,qEAAqE,IAAA,CAAK,UAAU,KACpF,8FAAA,CAA+F,IAAA;AAAA,IAC7F;AAAA,GACF,IACA,gBAAA,CAAiB,IAAA,CAAK,UAAU,CAAA;AAEpC;AAEA,SAAS,WAAW,KAAA,EAAwB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAA;AAClC;AAEA,SAAS,wBAAA,CAAyB,WAAmB,SAAA,EAA4B;AAC/E,EAAA,MAAM,MAAA,GAAS,WAAW,SAAS,CAAA;AACnC,EAAA,IAAI,OAAO,MAAA,GAAS,EAAA,IAAM,MAAA,CAAO,MAAA,GAAS,IAAI,OAAO,KAAA;AACrD,EAAA,IAAI,CAAC,UAAA,CAAW,SAAS,CAAA,EAAG,OAAO,KAAA;AAEnC,EAAA,MAAM,OAAA,GAAU,UAAU,IAAA,EAAK;AAC/B,EAAA,IAAI,UAAA,CAAW,OAAO,CAAA,EAAG,OAAO,KAAA;AAGhC,EAAA,IAAI,WAAA,CAAY,IAAA,CAAK,MAAM,CAAA,IAAK,UAAA,CAAW,OAAO,CAAA,KAAM,MAAA,IAAU,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,EAAG;AACvF,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,OAAA,CAAQ,SAAS,CAAA;AACzC,EAAA,IAAI,SAAS,CAAA,EAAG;AACd,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,KAAA,GAAQ,CAAC,CAAA;AAClC,IAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,GAAQ,SAAA,CAAU,MAAM,CAAA;AAChD,IAAA,IAAI,MAAA,IAAU,cAAA,CAAe,IAAA,CAAK,MAAM,GAAG,OAAO,KAAA;AAClD,IAAA,IAAI,KAAA,IAAS,cAAA,CAAe,IAAA,CAAK,KAAK,GAAG,OAAO,KAAA;AAAA,EAClD;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,4BAA4B,KAAA,EAAwB;AAC3D,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,+BAAA,CAAgC,IAAA,CAAK,OAAO,CAAA,EAAG,OAAO,IAAA;AAC1D,EAAA,IAAI,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA,EAAG,OAAO,IAAA;AACvC,EAAA,IAAI,uCAAA,CAAwC,IAAA,CAAK,OAAO,CAAA,EAAG,OAAO,IAAA;AAClE,EAAA,IAAI,iBAAA,CAAkB,KAAK,OAAO,CAAA,IAAK,SAAS,IAAA,CAAK,OAAO,GAAG,OAAO,IAAA;AAEtE,EAAA,IAAI,OAAA,CAAQ,KAAK,OAAO,CAAA,IAAK,CAAC,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,EAAG,OAAO,IAAA;AACzD,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,wBAAA,CAAyB,KAAA,EAAe,KAAA,EAAe,MAAA,EAAyB;AACvF,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,GAAQ,MAAM,CAAA;AAClC,EAAA,OAAO,WAAW,GAAA,IAAO,MAAA,KAAW,IAAA,IAAQ,KAAA,KAAU,OAAO,KAAA,KAAU,IAAA;AACzE;AAEA,SAAS,mBAAmB,KAAA,EAAwB;AAClD,EAAA,IAAI,2BAAA,CAA4B,KAAK,CAAA,EAAG,OAAO,KAAA;AAC/C,EAAA,QAAA,CAAS,SAAA,GAAY,CAAA;AACrB,EAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC5C,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AACzB,IAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,IAAS,CAAA;AAC7B,IAAA,IAAI,wBAAA,CAAyB,KAAA,EAAO,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACzD,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAEA,IAAM,mBAAA,GAAoD;AAAA,EACxD,eAAA,CAAgB;AAAA,IACd,EAAA,EAAI,2BAAA;AAAA,IACJ,OAAA,EAAS,sDAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACX,CAAA;AAAA,EACD,eAAA,CAAgB;AAAA,IACd,EAAA,EAAI,mBAAA;AAAA,IACJ,OAAA,EAAS,oCAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACX,CAAA;AAAA,EACD,eAAA,CAAgB;AAAA,IACd,EAAA,EAAI,cAAA;AAAA,IACJ,OAAA,EAAS,sDAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACX,CAAA;AAAA,EACD,eAAA,CAAgB;AAAA,IACd,EAAA,EAAI,WAAA;AAAA,IACJ,OAAA,EAAS,gEAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACX,CAAA;AAAA,EACD,eAAA,CAAgB;AAAA,IACd,EAAA,EAAI,sBAAA;AAAA,IACJ,OAAA,EAAS,0FAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACX,CAAA;AAAA,EACD,eAAA,CAAgB;AAAA,IACd,EAAA,EAAI,mBAAA;AAAA,IACJ,OAAA,EAAS,+CAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACX,CAAA;AAAA,EACD,eAAA,CAAgB;AAAA,IACd,EAAA,EAAI,oBAAA;AAAA,IACJ,OAAA,EAAS,+BAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACX,CAAA;AAAA,EACD,eAAA,CAAgB;AAAA,IACd,EAAA,EAAI,kBAAA;AAAA,IACJ,OAAA,EAAS,2EAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACX,CAAA;AAAA,EACD;AAAA,IACE,EAAA,EAAI,kBAAA;AAAA,IACJ,QAAA,EAAU,OAAA;AAAA,IACV,SAAA,EAAW,OAAA;AAAA,IACX,OAAO,KAAA,EAAO;AACZ,MAAA,IAAI,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,SAAiB,EAAC;AAC7C,MAAA,IAAI,mBAAA,CAAoB,KAAA,CAAM,IAAI,CAAA,SAAU,EAAC;AAC7C,MAAA,IAAI,UAAA,CAAW,KAAA,CAAM,KAAK,CAAA,SAAU,EAAC;AACrC,MAAA,MAAM,gBAAA,GAAmB,qBAAA;AACzB,MAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,KAAA,CAAM,QAAA,CAAS,gBAAgB,CAAA,EAAG;AAC1D,QAAA,MAAM,SAAA,GAAY,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AAC9B,QAAA,IAAI,wBAAA,CAAyB,SAAA,EAAW,KAAA,CAAM,KAAK,CAAA,EAAG;AACpD,UAAA,OAAO,CAAC,EAAE,MAAA,EAAQ,SAAA,EAAW,UAAU,OAAA,EAAS,SAAA,EAAW,SAAS,CAAA;AAAA,QACtE;AAAA,MACF;AACA,MAAA,OAAO,EAAC;AAAA,IACV;AAAA;AAEJ,CAAA;AAEA,IAAM,mBAAA,GAAoD;AAAA,EACxD;AAAA,IACE,EAAA,EAAI,aAAA;AAAA,IACJ,QAAA,EAAU,SAAA;AAAA,IACV,SAAA,EAAW,OAAA;AAAA,IACX,OAAO,KAAA,EAAO;AACZ,MAAA,IAAI,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,SAAiB,EAAC;AAC7C,MAAA,OAAO,kBAAA,CAAmB,KAAA,CAAM,KAAK,CAAA,GACjC,CAAC,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,SAAA,EAAW,SAAA,EAAW,OAAA,EAAS,IAC/D,EAAC;AAAA,IACP;AAAA,GACF;AAAA,EACA,eAAA,CAAgB;AAAA,IACd,EAAA,EAAI,aAAA;AAAA,IACJ,OAAA,EAAS;AAAA,GACV,CAAA;AAAA,EACD,eAAA,CAAgB;AAAA,IACd,EAAA,EAAI,YAAA;AAAA,IACJ,OAAA,EAAS;AAAA,GACV,CAAA;AAAA,EACD,eAAA,CAAgB;AAAA,IACd,EAAA,EAAI,YAAA;AAAA,IACJ,OAAA,EAAS;AAAA,GACV;AACH,CAAA;AAEA,SAAS,2BAA2B,OAAA,EAAyD;AAC3F,EAAA,IAAI,OAAA,KAAY,SAAS,OAAO,mBAAA;AAChC,EAAA,OAAO,CAAC,GAAG,mBAAA,EAAqB,GAAG,mBAAmB,CAAA;AACxD;AAEA,SAAS,YAAA,CACP,OACA,SAAA,EACgB;AAChB,EAAA,MAAM,GAAA,uBAAU,GAAA,EAA0B;AAE1C,EAAA,MAAM,GAAA,GAAM,CAAC,IAAA,KAAuB;AAClC,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA;AAC1B,IAAA,GAAA,CAAI,IAAI,GAAA,EAAK,EAAE,GAAG,IAAA,EAAM,KAAqB,CAAA;AAAA,EAC/C,CAAA;AAEA,EAAA,KAAA,MAAW,OAAO,mBAAA,EAAqB;AACrC,IAAA,GAAA,CAAI,EAAE,GAAA,EAAK,QAAA,EAAU,MAAA,EAAQ,CAAA;AAAA,EAC/B;AAEA,EAAA,KAAA,MAAW,GAAA,IAAO,SAAA,IAAa,EAAC,EAAG;AACjC,IAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,CAAI,SAAS,CAAA,EAAG;AAC7C,MAAA,GAAA,CAAI,EAAE,GAAA,EAAK,QAAA,EAAU,MAAA,EAAQ,CAAA;AAAA,IAC/B;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,IAAS,EAAC,EAAG;AAC9B,IAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,MAAA,GAAA,CAAI,EAAE,GAAA,EAAK,IAAA,EAAM,QAAA,EAAU,QAAQ,CAAA;AACnC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,QAAA,KAAa,MAAA,EAAQ,GAAA,CAAI,EAAE,KAAK,IAAA,CAAK,GAAA,EAAK,QAAA,EAAU,MAAA,EAAQ,CAAA;AACrE,IAAA,IAAI,IAAA,CAAK,QAAA,KAAa,MAAA,EAAQ,GAAA,CAAI,EAAE,KAAK,IAAA,CAAK,GAAA,EAAK,QAAA,EAAU,MAAA,EAAQ,CAAA;AACrE,IAAA,IAAI,IAAA,CAAK,aAAa,QAAA,EAAU;AAC9B,MAAA,GAAA,CAAI;AAAA,QACF,KAAK,IAAA,CAAK,GAAA;AAAA,QACV,QAAA,EAAU,QAAA;AAAA,QACV,MAAM,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,GAAW,KAAK,IAAA,GAAO;AAAA,OACnD,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,CAAC,GAAG,GAAA,CAAI,MAAA,EAAQ,CAAA;AACzB;AAEA,SAAS,cAAc,IAAA,EAAqC;AAC1D,EAAA,IAAI,IAAA,CAAK,QAAA,KAAa,MAAA,EAAQ,OAAO,SAAA;AACrC,EAAA,OAAO,IAAA,CAAK,QAAA;AACd;AAEA,SAAS,SAAA,CACP,IAAA,EACA,KAAA,EACA,WAAA,EACS;AACT,EAAA,IAAI,IAAA,CAAK,QAAA,KAAa,MAAA,EAAQ,OAAO,WAAA;AAErC,EAAA,MAAM,QAAA,GAAW,gBAAgB,KAAK,CAAA;AACtC,EAAA,IAAI,IAAA,CAAK,aAAa,QAAA,EAAU;AAC9B,IAAA,IAAI,QAAA,KAAa,QAAW,OAAO,WAAA;AACnC,IAAA,MAAM,IAAA,GAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA;AAC9C,IAAA,OAAO,QAAA,CAAS,MAAA,IAAU,IAAA,GAAO,CAAA,EAAG,QAAQ,CAAA,MAAA,CAAA,GAAM,CAAA,EAAG,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,IAAI,CAAC,CAAA,MAAA,CAAA;AAAA,EAC9E;AAEA,EAAA,IAAI,IAAA,CAAK,aAAa,MAAA,EAAQ;AAC5B,IAAA,IAAI,QAAA,KAAa,QAAW,OAAO,gBAAA;AACnC,IAAA,OAAO,CAAA,MAAA,EAAS,UAAA,CAAW,QAAQ,CAAC,CAAA,CAAA,CAAA;AAAA,EACtC;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,SAAA,CAAU,MAAc,GAAA,EAAqB;AACpD,EAAA,IAAI,4BAAA,CAA6B,IAAA,CAAK,GAAG,CAAA,EAAG;AAC1C,IAAA,OAAO,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,GAAK,GAAA;AAAA,EACnC;AACA,EAAA,OAAO,GAAG,IAAA,IAAQ,GAAG,IAAI,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA,CAAA,CAAA;AAC9C;AAEA,SAAS,SAAA,CAAU,MAAc,KAAA,EAAuB;AACtD,EAAA,OAAO,CAAA,EAAG,IAAA,IAAQ,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAA;AAChC;AAEA,SAAS,YACP,IAAA,EACA,QAAA,EACA,QACA,SAAA,EACA,QAAA,GAA8B,WAC9B,OAAA,EACkB;AAClB,EAAA,OAAO,OAAA,KAAY,MAAA,GACf,EAAE,IAAA,EAAM,UAAU,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAU,GAC9C,EAAE,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,WAAW,OAAA,EAAQ;AAC7D;AAEO,SAAS,sBAAA,CAAuB,UAA4B,OAAA,EAAmC;AACpG,EAAA,QAAQ,OAAA;AAAS,IACf,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,EAAC,EAAE;AAAA,IAC3C,KAAK,OAAA;AACH,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,OAAA;AAAA,QACT,SAAA,EAAW,wBAAA;AAAA,QACX,yBAAA,EAA2B,GAAA;AAAA,QAC3B,mBAAA,EAAqB;AAAA,OACvB;AAAA,IACF,KAAK,QAAA;AACH,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,QAAA;AAAA,QACT,SAAA,EAAW,CAAC,GAAG,wBAAA,EAA0B,GAAG,yBAAyB,CAAA;AAAA,QACrE,yBAAA,EAA2B,GAAA;AAAA,QAC3B,mBAAA,EAAqB;AAAA,OACvB;AAAA;AAEN;AAEO,IAAM,WAAN,MAAe;AAAA,EACX,MAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EAET,YAAY,OAAA,EAA2B;AACrC,IAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,OAAA,EAAS,OAAA,IAAW,OAAO,CAAA;AACnE,IAAA,IAAA,CAAK,WAAW,QAAA,CAAS,OAAA;AACzB,IAAA,IAAA,CAAK,MAAA,GAAS,YAAA,CAAa,OAAA,EAAS,KAAA,EAAO;AAAA,MACzC,GAAG,QAAA,CAAS,SAAA;AAAA,MACZ,GAAI,OAAA,EAAS,SAAA,IAAa;AAAC,KAC5B,CAAA;AACD,IAAA,IAAA,CAAK,UAAA,GAAa;AAAA,MAChB,GAAG,0BAAA,CAA2B,IAAA,CAAK,QAAQ,CAAA;AAAA,MAC3C,GAAI,OAAA,EAAS,SAAA,IAAa;AAAC,KAC7B;AACA,IAAA,IAAA,CAAK,YAAA,GAAe,SAAS,WAAA,IAAe,YAAA;AAC5C,IAAA,IAAA,CAAK,SAAA,GAAY,SAAS,QAAA,IAAY,EAAA;AACtC,IAAA,IAAA,CAAK,gBAAA,GAAmB,SAAS,eAAA,IAAmB,IAAA;AAAA,EACtD;AAAA,EAEA,WAAA,CAAY,KAAa,KAAA,EAAyB;AAChD,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,KAAA,EAAO,GAAA,EAAK,KAAK,CAAA,EAAG;AAAA,MAC3C,UAAU,EAAC;AAAA,MACX,IAAA,sBAAU,OAAA;AAAyB,KACpC,CAAA;AAAA,EACH;AAAA,EAEA,aAAa,MAAA,EAA0D;AACrE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,CAAE,KAAA;AAAA,EAC7B;AAAA,EAEA,OAAoB,KAAA,EAA8B;AAChD,IAAA,MAAM,KAAA,GAAwB;AAAA,MAC5B,UAAU,EAAC;AAAA,MACX,IAAA,sBAAU,OAAA;AAAyB,KACrC;AACA,IAAA,MAAM,WAAW,IAAA,CAAK,YAAA,CAAa,OAAO,MAAA,EAAW,GAAA,EAAK,GAAG,KAAK,CAAA;AAClE,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,QAAA;AAAA,MACP,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,QAAA,EAAU,MAAM,QAAA,CAAS,IAAA,CAAK,CAAC,OAAA,KAAY,OAAA,CAAQ,WAAW,MAAM,CAAA;AAAA,MACpE,SAAS,IAAA,CAAK;AAAA,KAChB;AAAA,EACF;AAAA,EAEA,cAAA,CAAe,OAAuB,OAAA,EAAiC;AACrE,IAAA,IAAI,IAAA,CAAK,gBAAA,EAAkB,KAAA,CAAM,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,EACxD;AAAA,EAEA,YAAA,CACE,KAAA,EACA,GAAA,EACA,IAAA,EACA,OACA,KAAA,EACS;AACT,IAAA,IAAI,KAAA,GAAQ,KAAK,SAAA,EAAW;AAC1B,MAAA,IAAA,CAAK,cAAA;AAAA,QACH,KAAA;AAAA,QACA,WAAA,CAAY,IAAA,EAAM,oBAAA,EAAsB,UAAA,EAAY,SAAS,SAAS;AAAA,OACxE;AACA,MAAA,OAAO,aAAA;AAAA,IACT;AAEA,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,MAAM,IAAA,GAAO,mBAAA,CAAoB,GAAA,EAAK,IAAA,CAAK,MAAM,CAAA;AACjD,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,IAAA,CAAK,cAAA;AAAA,UACH,KAAA;AAAA,UACA,WAAA,CAAY,IAAA,EAAM,CAAA,IAAA,EAAO,IAAA,CAAK,GAAG,IAAI,aAAA,CAAc,IAAI,CAAA,EAAG,KAAA,EAAO,SAAS;AAAA,SAC5E;AACA,QAAA,OAAO,SAAA,CAAU,IAAA,EAAM,KAAA,EAAO,IAAA,CAAK,YAAY,CAAA;AAAA,MACjD;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,QAAA,IAAY,KAAK,UAAA,EAAY;AACtC,MAAA,MAAM,aAAa,QAAA,CAAS,MAAA,CAAO,EAAE,IAAA,EAAM,GAAA,EAAK,OAAO,CAAA;AACvD,MAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,QAAA,MAAM,MAAA,GAAS,UAAU,MAAA,IAAU,SAAA;AACnC,QAAA,IAAA,CAAK,cAAA;AAAA,UACH,KAAA;AAAA,UACA,WAAA;AAAA,YACE,IAAA;AAAA,YACA,QAAA,CAAS,EAAA;AAAA,YACT,MAAA;AAAA,YACA,SAAA,CAAU,SAAA,IAAa,QAAA,CAAS,SAAA,IAAa,QAAA;AAAA,YAC7C,SAAA,CAAU,QAAA,IAAY,QAAA,CAAS,QAAA,IAAY,SAAA;AAAA,YAC3C,SAAA,CAAU;AAAA;AACZ,SACF;AACA,QAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,UAAA,OAAO,SAAA,CAAU,eAAe,IAAA,CAAK,YAAA;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,IAAI,KAAA,CAAM,KAAK,GAAA,CAAI,KAAK,GAAG,OAAO,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AACtD,MAAA,MAAM,MAAiB,EAAC;AACxB,MAAA,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,GAAG,CAAA;AACzB,MAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU;AAC7B,QAAA,GAAA,CAAI,KAAK,CAAA,GAAI,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM,MAAA,EAAW,SAAA,CAAU,IAAA,EAAM,KAAK,CAAA,EAAG,KAAA,GAAQ,CAAA,EAAG,KAAK,CAAA;AAAA,MAC1F,CAAC,CAAA;AACD,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAA,IAAI,QAAA,CAAS,KAAK,CAAA,EAAG;AACnB,MAAA,IAAI,KAAA,CAAM,KAAK,GAAA,CAAI,KAAK,GAAG,OAAO,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AACtD,MAAA,MAAM,MAA+B,EAAC;AACtC,MAAA,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,GAAG,CAAA;AACzB,MAAA,KAAA,MAAW,CAAC,QAAA,EAAU,UAAU,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC1D,QAAA,GAAA,CAAI,QAAQ,IAAI,IAAA,CAAK,YAAA;AAAA,UACnB,UAAA;AAAA,UACA,QAAA;AAAA,UACA,SAAA,CAAU,IAAA,KAAS,GAAA,GAAM,EAAA,GAAK,MAAM,QAAQ,CAAA;AAAA,UAC5C,KAAA,GAAQ,CAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AACF,CAAA;AAEO,SAAS,eAAe,OAAA,EAAqC;AAClE,EAAA,OAAO,IAAI,SAAS,OAAO,CAAA;AAC7B;AAEO,SAAS,MAAA,CAAoB,OAAU,OAAA,EAA6C;AACzF,EAAA,OAAO,cAAA,CAAe,OAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAC7C;;;AC/mBA,IAAM,0BAAA,GAA6B;AAAA,EACjC,8BAAA;AAAA,EACA,kBAAA;AAAA,EACA,6BAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA;AAEA,SAAS,IAAA,CAAK,QAAgB,OAAA,EAAkC;AAC9D,EAAA,OAAO,EAAE,QAAQ,MAAA,EAAQ,MAAA,EAAQ,UAAU,MAAA,EAAQ,OAAA,EAAS,QAAA,EAAU,EAAC,EAAE;AAC3E;AAEA,SAAS,IAAA,CACP,MAAA,EACA,OAAA,EACA,QAAA,EACA,WAAgC,OAAA,EACf;AACjB,EAAA,OAAO,EAAE,QAAQ,MAAA,EAAQ,QAAA,KAAa,YAAY,MAAA,GAAS,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAS,QAAA,EAAS;AACjG;AAEA,SAAS,cAAA,CAAe,KAAA,EAAe,GAAA,GAAM,EAAA,EAAY;AACvD,EAAA,IAAI,KAAA,CAAM,MAAA,IAAU,GAAA,EAAK,OAAO,KAAA;AAChC,EAAA,OAAO,GAAG,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,GAAA,GAAM,CAAC,CAAC,CAAA,GAAA,CAAA;AACnC;AAEO,SAAS,oBAAA,CACd,MACA,OAAA,EACiB;AACjB,EAAA,MAAM,MAAA,GAAS,yBAAA;AACf,EAAA,MAAM,WAAW,OAAA,CAAQ,eAAA,KAAoB,KAAA,GAAQ,IAAA,CAAK,aAAY,GAAI,IAAA;AAC1E,EAAA,MAAM,WAAgC,EAAC;AACvC,EAAA,KAAA,MAAW,MAAA,IAAU,QAAQ,OAAA,EAAS;AACpC,IAAA,MAAM,SAAS,OAAA,CAAQ,eAAA,KAAoB,KAAA,GAAQ,MAAA,CAAO,aAAY,GAAI,MAAA;AAC1E,IAAA,IAAI,OAAO,MAAA,GAAS,CAAA,IAAK,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,EAAG;AAClD,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAO,QAAQ,OAAA,EAAS,cAAA,CAAe,IAAI,CAAA,EAAG,CAAA;AAAA,IACxE;AAAA,EACF;AACA,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,IAAA,CAAK,QAAQ,4BAA4B,CAAA;AAAA,EAClD;AACA,EAAA,OAAO,KAAK,MAAA,EAAQ,CAAA,QAAA,EAAW,QAAA,CAAS,MAAM,sBAAsB,QAAQ,CAAA;AAC9E;AAEA,IAAM,gBAAgB,EAAE,IAAA,EAAM,GAAG,OAAA,EAAS,CAAA,EAAG,OAAO,CAAA,EAAE;AAE/C,SAAS,eAAA,CAAgB,KAAA,EAAgB,OAAA,GAA0B,EAAC,EAAoB;AAC7F,EAAA,MAAM,MAAA,GAAS,oBAAA;AACf,EAAA,MAAM,WAAA,GAAc,QAAQ,WAAA,IAAe,SAAA;AAC3C,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,EAAO,EAAE,OAAA,EAAS,QAAQ,OAAA,IAAW,OAAA,EAAS,eAAA,EAAiB,IAAA,EAAM,CAAA;AAC3F,EAAA,MAAM,QAAA,GAAW,OAAO,QAAA,CAAS,MAAA;AAAA,IAC/B,CAAC,OAAA,KAA8B,aAAA,CAAc,QAAQ,QAAQ,CAAA,IAAK,cAAc,WAAW;AAAA,GAC7F;AACA,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,IAAA,CAAK,QAAQ,kCAAkC,CAAA;AAAA,EACxD;AACA,EAAA,MAAM,QAAA,GAAgC,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,MAAa;AAAA,IAC/D,MAAA;AAAA,IACA,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,SAAS,OAAA,CAAQ;AAAA,GACnB,CAAE,CAAA;AACF,EAAA,OAAO,KAAK,MAAA,EAAQ,CAAA,SAAA,EAAY,QAAA,CAAS,MAAM,0BAA0B,QAAQ,CAAA;AACnF;AAEA,SAAS,aAAa,KAAA,EAAwB;AAC5C,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,CAAA;AACxD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,YAAA,CAAa,IAAI,CAAC,CAAC,CAAA;AAAA,EACnE;AACA,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,KAAgC,CAAA,CAAE,IAAI,CAAC,IAAA,KAAS,YAAA,CAAa,IAAI,CAAC,CAAA;AAC/F,EAAA,OAAO,CAAA,IAAK,OAAO,MAAA,KAAW,CAAA,GAAI,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,MAAM,CAAA,CAAA;AAC1D;AAEA,SAAS,gBAAgB,KAAA,EAAwB;AAC/C,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA,CAAM,MAAA;AAC5C,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,CAAA;AACxD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,eAAA,CAAgB,IAAI,CAAC,CAAC,CAAA;AAAA,EAClE;AACA,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,OAAO,MAAA,CAAO,KAAgC,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS,eAAA,CAAgB,IAAI,CAAC,CAAC,CAAA;AAC5G;AAEO,SAAS,sBAAA,CACd,QAAA,EACAC,SAAAA,EACA,OAAA,GAAiC,EAAC,EACjB;AACjB,EAAA,MAAM,MAAA,GAAS,4BAAA;AACf,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAA,CAAK,OAAA,CAAQ,YAAA,IAAgB,EAAC,EAAG,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,WAAA,EAAa,CAAC,CAAA;AACtF,EAAA,MAAM,WAAgC,EAAC;AACvC,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,CAAS,WAAA,EAAa,CAAA,EAAG;AACvC,IAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,SAAS,QAAA,EAAU,KAAA,EAAO,UAAU,CAAA;AAAA,EAC9D;AACA,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,EAAA;AACrC,EAAA,MAAM,KAAA,GAAQ,aAAaA,SAAQ,CAAA;AACnC,EAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,IAAA,QAAA,CAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAA,EAAM,QAAQ,OAAA,EAAS,CAAA,MAAA,EAAS,KAAK,CAAA,CAAA,EAAI,CAAA;AAAA,EACnE;AACA,EAAA,MAAM,MAAA,GAAS,QAAQ,eAAA,IAAmB,KAAA;AAC1C,EAAA,MAAM,OAAA,GAAU,gBAAgBA,SAAQ,CAAA;AACxC,EAAA,IAAI,UAAU,MAAA,EAAQ;AACpB,IAAA,QAAA,CAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAA,EAAM,QAAQ,OAAA,EAAS,CAAA,gBAAA,EAAmB,OAAO,CAAA,CAAA,EAAI,CAAA;AAAA,EAC/E;AACA,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,IAAA,CAAK,QAAQ,0CAA0C,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,IAAA,CAAK,MAAA,EAAQ,8CAAA,EAAgD,QAAQ,CAAA;AAC9E;AAEO,SAAS,uBAAA,CACd,IAAA,EACA,OAAA,GAAkC,EAAC,EAClB;AACjB,EAAA,MAAM,MAAA,GAAS,4BAAA;AACf,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,0BAAA;AACrC,EAAA,MAAM,QAAA,GAAW,KAAK,WAAA,EAAY;AAClC,EAAA,MAAM,WAAgC,EAAC;AACvC,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,MAAA,GAAS,QAAQ,WAAA,EAAY;AACnC,IAAA,IAAI,OAAO,MAAA,GAAS,CAAA,IAAK,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,EAAG;AAClD,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAO,SAAS,OAAA,EAAS,cAAA,CAAe,IAAI,CAAA,EAAG,CAAA;AAAA,IACzE;AAAA,EACF;AACA,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,IAAA,CAAK,QAAQ,uCAAuC,CAAA;AAAA,EAC7D;AACA,EAAA,OAAO,KAAK,MAAA,EAAQ,CAAA,QAAA,EAAW,SAAS,MAAM,CAAA,sBAAA,CAAA,EAA0B,UAAU,SAAS,CAAA;AAC7F;AAEA,SAAS,mBAAA,CACP,KAAA,EACA,KAAA,EACA,IAAA,EACA,QAAA,EACM;AACN,EAAA,MAAM,MAAA,GAAS,6BAAA;AACf,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,MAAM,MAAA,GACJ,UAAU,IAAA,GACN,MAAA,GACA,MAAM,OAAA,CAAQ,KAAK,CAAA,GACjB,OAAA,GACA,OAAO,KAAA;AACf,IAAA,IAAI,MAAA,KAAW,MAAM,IAAA,EAAM;AACzB,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAS,CAAA,SAAA,EAAY,KAAA,CAAM,IAAI,CAAA,MAAA,EAAS,MAAM,CAAA,CAAA,EAAI,CAAA;AAChF,MAAA;AAAA,IACF;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,IAAA,IAAQ,CAAC,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,CAAC,IAAA,KAAS,MAAA,CAAO,EAAA,CAAG,IAAA,EAAM,KAAK,CAAC,CAAA,EAAG;AACpE,IAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAS,qBAAqB,CAAA;AAAA,EAC9D;AACA,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,QAAA,IAAY,KAAA,CAAM,QAAA,IAAY,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC5G,IAAA,MAAM,MAAA,GAAS,KAAA;AACf,IAAA,KAAA,MAAW,GAAA,IAAO,MAAM,QAAA,EAAU;AAChC,MAAA,IAAI,EAAE,OAAO,MAAA,CAAA,EAAS;AACpB,QAAA,QAAA,CAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,OAAA,EAAS,sBAAA,EAAwB,CAAA;AAAA,MACnF;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,wBAAA,CACd,OACA,OAAA,EACiB;AACjB,EAAA,MAAM,MAAA,GAAS,6BAAA;AACf,EAAA,IAAI,CAAC,SAAS,OAAO,KAAA,KAAU,YAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/D,IAAA,OAAO,IAAA,CAAK,QAAQ,sCAAA,EAAwC;AAAA,MAC1D,EAAE,MAAA,EAAQ,OAAA,EAAS,OAAO,KAAA;AAAM,KACjC,CAAA;AAAA,EACH;AACA,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,MAAM,WAAgC,EAAC;AACvC,EAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzD,IAAA,mBAAA,CAAoB,MAAA,CAAO,GAAG,CAAA,EAAG,KAAA,EAAO,KAAK,QAAQ,CAAA;AAAA,EACvD;AACA,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,IAAA,CAAK,QAAQ,0CAA0C,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,IAAA,CAAK,MAAA,EAAQ,qCAAA,EAAuC,QAAQ,CAAA;AACrE;AAEO,SAAS,sBAAA,CACd,KAAA,EACA,OAAA,GAAiC,EAAC,EACjB;AACjB,EAAA,MAAM,MAAA,GAAS,2BAAA;AACf,EAAA,MAAM,OAAO,OAAO,KAAA,KAAU,WAAW,KAAA,GAAQ,IAAA,CAAK,UAAU,KAAK,CAAA;AACrE,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,mBAAA,IAAuB,KAAA;AACtE,EAAA,IAAI,IAAA,CAAK,UAAU,SAAA,EAAW;AAC5B,IAAA,OAAO,IAAA,CAAK,QAAQ,4BAA4B,CAAA;AAAA,EAClD;AACA,EAAA,OAAO,KAAK,MAAA,EAAQ,CAAA,2BAAA,EAA8B,KAAK,MAAM,CAAA,GAAA,EAAM,SAAS,CAAA,EAAA,CAAA,EAAM;AAAA,IAChF,EAAE,MAAA,EAAQ,OAAA,EAAS,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,CAAA;AAAG,GAC5C,CAAA;AACH;AAEO,SAAS,yBAAA,CACd,OACA,OAAA,EACiB;AACjB,EAAA,MAAM,MAAA,GAAS,+BAAA;AACf,EAAA,IAAI,MAAA,GAAkB,KAAA;AACtB,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,IAC3B,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA,CAAK,MAAA,EAAQ,0BAAA,EAA4B,CAAC,EAAE,MAAA,EAAQ,OAAA,EAAS,cAAA,CAAe,KAAK,CAAA,EAAG,CAAC,CAAA;AAAA,IAC9F;AAAA,EACF;AACA,EAAA,IAAI,CAAC,UAAU,OAAO,MAAA,KAAW,YAAY,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAClE,IAAA,OAAO,IAAA,CAAK,MAAA,EAAQ,+BAAA,EAAiC,CAAC,EAAE,QAAQ,OAAA,EAAS,OAAO,MAAA,EAAQ,CAAC,CAAA;AAAA,EAC3F;AACA,EAAA,MAAM,MAAA,GAAS,MAAA;AACf,EAAA,MAAM,WAAgC,EAAC;AACvC,EAAA,KAAA,MAAW,GAAA,IAAO,QAAQ,YAAA,EAAc;AACtC,IAAA,IAAI,EAAE,OAAO,MAAA,CAAA,EAAS;AACpB,MAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,MAAM,GAAA,EAAK,OAAA,EAAS,wBAAwB,CAAA;AAAA,IACtE;AAAA,EACF;AACA,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,IAAA,CAAK,QAAQ,6BAA6B,CAAA;AAAA,EACnD;AACA,EAAA,OAAO,IAAA,CAAK,MAAA,EAAQ,6BAAA,EAA+B,QAAQ,CAAA;AAC7D;;;AChOA,IAAMC,UAAAA,GAA+B;AAAA,EACnC,yBAAA;AAAA,EACA,oBAAA;AAAA,EACA,4BAAA;AAAA,EACA,4BAAA;AAAA,EACA,6BAAA;AAAA,EACA,2BAAA;AAAA,EACA;AACF,CAAA;AAEA,SAAS,eAAe,MAAA,EAAkC;AACxD,EAAA,OAAO,MAAA,CAAO,MAAA,KAAW,MAAA,IAAU,MAAA,CAAO,QAAA,KAAa,OAAA;AACzD;AAEA,SAASC,QAAAA,CAAQ,MAAA,EAAyB,KAAA,EAAuB,OAAA,EAA4D;AAC3H,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,yBAAA,EAA2B;AAC9B,MAAA,IAAI,CAAC,OAAA,CAAQ,YAAA,IAAgB,KAAA,CAAM,IAAA,KAAS,QAAW,OAAO,MAAA;AAC9D,MAAA,OAAO,oBAAA,CAAqB,KAAA,CAAM,IAAA,EAAM,OAAA,CAAQ,YAAY,CAAA;AAAA,IAC9D;AAAA,IACA,KAAK,oBAAA,EAAsB;AACzB,MAAA,IAAI,MAAM,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,IAAA,KAAS,QAAW,OAAO,MAAA;AAClE,MAAA,OAAO,gBAAgB,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,IAAA,EAAM,QAAQ,OAAO,CAAA;AAAA,IACnE;AAAA,IACA,KAAK,4BAAA,EAA8B;AACjC,MAAA,IAAI,CAAC,KAAA,CAAM,QAAA,EAAU,OAAO,MAAA;AAC5B,MAAA,OAAO,sBAAA,CAAuB,MAAM,QAAA,EAAU,KAAA,CAAM,YAAY,EAAC,EAAG,QAAQ,cAAc,CAAA;AAAA,IAC5F;AAAA,IACA,KAAK,4BAAA,EAA8B;AACjC,MAAA,IAAI,KAAA,CAAM,IAAA,KAAS,MAAA,EAAW,OAAO,MAAA;AACrC,MAAA,OAAO,uBAAA,CAAwB,KAAA,CAAM,IAAA,EAAM,OAAA,CAAQ,eAAe,CAAA;AAAA,IACpE;AAAA,IACA,KAAK,6BAAA,EAA+B;AAClC,MAAA,IAAI,CAAC,OAAA,CAAQ,gBAAA,IAAoB,KAAA,CAAM,KAAA,KAAU,QAAW,OAAO,MAAA;AACnE,MAAA,OAAO,wBAAA,CAAyB,KAAA,CAAM,KAAA,EAAO,OAAA,CAAQ,gBAAgB,CAAA;AAAA,IACvE;AAAA,IACA,KAAK,2BAAA,EAA6B;AAChC,MAAA,IAAI,MAAM,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,IAAA,KAAS,QAAW,OAAO,MAAA;AAClE,MAAA,OAAO,uBAAuB,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,IAAA,EAAM,QAAQ,cAAc,CAAA;AAAA,IACjF;AAAA,IACA,KAAK,+BAAA,EAAiC;AACpC,MAAA,IAAI,CAAC,QAAQ,iBAAA,IAAsB,KAAA,CAAM,UAAU,MAAA,IAAa,KAAA,CAAM,IAAA,KAAS,MAAA,EAAY,OAAO,MAAA;AAClG,MAAA,OAAO,0BAA0B,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,IAAA,EAAO,QAAQ,iBAAiB,CAAA;AAAA,IACxF;AAAA,IACA;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAEO,SAAS,aAAA,CAAc,KAAA,EAAuB,OAAA,GAAgC,EAAC,EAAuB;AAC3G,EAAA,MAAM,QAAA,GAAW,QAAQ,KAAA,IAASD,UAAAA;AAClC,EAAA,MAAM,UAA6B,EAAC;AACpC,EAAA,KAAA,MAAW,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,MAAA,GAASC,QAAAA,CAAQ,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAC7C,IAAA,IAAI,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,EACjC;AACA,EAAA,MAAM,EAAA,GAAK,CAAC,OAAA,CAAQ,IAAA,CAAK,cAAc,CAAA;AACvC,EAAA,OAAO,EAAE,IAAI,OAAA,EAAQ;AACvB;;;ACjEA,SAASC,KAAAA,CAAK,QAAgB,OAAA,EAA8B;AAC1D,EAAA,OAAO,EAAE,QAAQ,MAAA,EAAQ,MAAA,EAAQ,UAAU,MAAA,EAAQ,OAAA,EAAS,QAAA,EAAU,EAAC,EAAE;AAC3E;AAEA,SAAS,WAAA,CACP,MAAA,EACA,OAAA,EACA,QAAA,EACA,MAAA,EACa;AACb,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,MAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAU,OAAA;AAAA,IACV,OAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAU;AAAC,GACb;AACF;AAEA,SAAS,WAAA,CAAY,MAAA,EAAgB,OAAA,EAAiB,MAAA,EAA+B;AACnF,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,MAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAU,SAAA;AAAA,IACV,OAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAU;AAAC,GACb;AACF;AAEA,SAAS,kBAAkB,OAAA,EAA8B;AACvD,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,IAAA,IAAQ,QAAQ,KAAA,EAAO;AAChC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,UAAA,IAAc,EAAC;AACxC,IAAA,KAAA,MAAW,OAAO,CAAC,QAAA,EAAU,QAAA,EAAU,MAAA,EAAQ,SAAS,CAAA,EAAG;AACzD,MAAA,MAAM,KAAA,GAAQ,MAAM,GAAG,CAAA;AACvB,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,IACjD;AAAA,EACF;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAUO,SAAS,wBAAwB,OAAA,EAA6C;AACnF,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,iBAAA;AAAA,IACJ,QAAA,EAAU,QAAA;AAAA,IACV,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,IAAA,GAAO,kBAAkB,OAAO,CAAA;AACtC,MAAA,MAAM,GAAA,GAAM,cAAc,EAAE,IAAA,EAAM,OAAO,OAAA,CAAQ,MAAA,IAAU,OAAO,CAAA;AAClE,MAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,KAA4B;AACtD,QAAA,IAAI,MAAA,CAAO,MAAA,KAAW,MAAA,EAAQ,OAAO,CAACA,MAAK,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,OAAO,CAAC,CAAA;AACzE,QAAA,IAAI,MAAA,CAAO,MAAA,KAAW,MAAA,EAAQ,OAAO,CAAC,YAAY,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,OAAO,CAAC,CAAA;AAChF,QAAA,OAAO,CAAC,WAAA,CAAY,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,MACpD,CAAC,CAAA;AAAA,IACH;AAAA,GACF;AACF;AAEO,SAAS,sBAAsB,OAAA,EAA2C;AAC/E,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,eAAA;AAAA,IACJ,QAAA,EAAU,WAAA;AAAA,IACV,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,QAC5C,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,QAAQ,KAAA,CAAM;AAAA,OAChB,CAAE,CAAA;AACF,MAAA,MAAM,GAAA,GAAM,WAAA,CAAY,MAAA,EAAQ,OAAO,CAAA;AACvC,MAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,KAA0B;AACpD,QAAA,IAAI,MAAA,CAAO,MAAA,KAAW,QAAA,EAAU,OAAO,CAACA,MAAK,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,OAAO,CAAC,CAAA;AAC3E,QAAA,IAAI,MAAA,CAAO,MAAA,KAAW,MAAA,EAAQ,OAAO,CAAC,WAAA,CAAY,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,SAAS,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,EAAG,KAAK,CAAC,CAAA;AAC3G,QAAA,OAAO,CAAC,WAAA,CAAY,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,SAAS,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,EAAG,WAAW,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,EAAG,KAAK,CAAC,CAAA;AAAA,MAC9G,CAAC,CAAA;AAAA,IACH;AAAA,GACF;AACF;;;AC8CA,SAAS,kBAAkB,KAAA,EAA0C;AACnE,EAAA,OACE,KAAA,KAAU,QACV,OAAO,KAAA,KAAU,YACjB,MAAA,IAAU,KAAA,IACV,QAAA,IAAY,KAAA,IACZ,QAAA,IAAY,KAAA;AAEhB;AAEA,SAAS,eAAe,KAAA,EAAiC;AAGvD,EAAA,OAAO,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,iBAAiB,GAAA,GAAMC,iBAAA,CAAc,KAAK,CAAA,GAAI,KAAA,EAAM;AACnF;AAEA,eAAe,WAAA,CACb,OACA,OAAA,EACoF;AACpF,EAAA,IAAI;AACF,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,MAAMC,KAAAA,GAAO,MAAMC,iBAAA,CAAU,cAAA,CAAe,KAAK,CAAA,EAAG;AAAA,QAClD,GAAI,OAAA,CAAQ,MAAA,KAAW,KAAA,CAAA,IAAa,OAAA,CAAQ,MAAA,KAAW,MAAA,GACnD,EAAE,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAO,GACzB;AAAC,OACN,CAAA;AACD,MAAA,OAAO,EAAE,MAAAD,KAAAA,EAAM,KAAA,EAAO,QAAQ,KAAA,EAAO,WAAA,EAAa,EAAC,EAAE;AAAA,IACvD;AAEA,IAAA,IAAI,iBAAA,CAAkB,KAAK,CAAA,EAAG;AAC5B,MAAA,OAAO,EAAE,MAAM,KAAA,EAAO,KAAA,EAAO,QAAQ,KAAA,EAAO,WAAA,EAAa,EAAC,EAAE;AAAA,IAC9D;AAEA,IAAA,IAAI,iBAAA,CAAkB,KAAA,CAAM,KAAK,CAAA,EAAG;AAClC,MAAA,OAAO,EAAE,IAAA,EAAM,KAAA,CAAM,KAAA,EAAO,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,KAAA,CAAM,KAAA,EAAO,WAAA,EAAa,EAAC,EAAE;AAAA,IACnF;AAEA,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,IAAU,KAAA,CAAM,MAAA;AACvC,IAAA,MAAM,OAAO,MAAMC,iBAAA,CAAU,cAAA,CAAe,KAAA,CAAM,KAAK,CAAA,EAAG;AAAA,MACxD,GAAI,WAAW,KAAA,CAAA,IAAa,MAAA,KAAW,SAAS,EAAE,MAAA,KAAW;AAAC,KAC/D,CAAA;AACD,IAAA,OAAO,EAAE,MAAM,KAAA,EAAO,OAAA,CAAQ,SAAS,KAAA,CAAM,KAAA,EAAO,WAAA,EAAa,EAAC,EAAE;AAAA,EACtE,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,EAAE,WAAA,EAAa,CAAC,mBAAA,CAAoB,KAAK,CAAC,CAAA,EAAE;AAAA,EACrD;AACF;AAEA,SAAS,oBAAoB,KAAA,EAAgC;AAC3D,EAAA,IAAI,iBAAiBC,sBAAA,EAAgB;AACnC,IAAA,MAAM,IAAA,GACJ,MAAM,IAAA,KAAS,oBAAA,GACX,+BACA,KAAA,CAAM,IAAA,KAAS,qBACb,0BAAA,GACA,0BAAA;AACR,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,OAAA,EAAS,MAAM,OAAA,EAAQ;AAAA,EAC3D;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,0BAAA;AAAA,IACN,QAAA,EAAU,OAAA;AAAA,IACV,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,GAChE;AACF;AAEA,SAAS,QAAQ,KAAA,EAAwC;AACvD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS,CAAC,IAAA,EAAM,GAAG,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAC,CAAC,CAAA;AAClE;AAEA,SAAS,SAAA,CACP,MACA,KAAA,EACsD;AACtD,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,MAAM,GAAA,GAAM,KAAK,IAAA,CAAK,IAAA,CAAK,CAAC,SAAA,KAAc,SAAA,CAAU,UAAU,KAAK,CAAA;AACnE,IAAA,OAAO,QAAQ,MAAA,GACX;AAAA,MACE,WAAA,EAAa;AAAA,QACX;AAAA,UACE,IAAA,EAAM,gCAAA;AAAA,UACN,QAAA,EAAU,OAAA;AAAA,UACV,OAAA,EAAS,kBAAkB,KAAK,CAAA,CAAA;AAAA;AAClC;AACF,KACF,GACA,EAAE,GAAA,EAAK,WAAA,EAAa,EAAC,EAAE;AAAA,EAC7B;AAEA,EAAA,IAAI,IAAA,CAAK,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AAC1B,IAAA,OAAO,EAAE,KAAK,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG,WAAA,EAAa,EAAC,EAAE;AAAA,EAC9C;AAEA,EAAA,IAAI,IAAA,CAAK,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AAC1B,IAAA,OAAO;AAAA,MACL,WAAA,EAAa;AAAA,QACX;AAAA,UACE,IAAA,EAAM,gCAAA;AAAA,UACN,QAAA,EAAU,OAAA;AAAA,UACV,OAAA,EAAS;AAAA;AACX;AACF,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,WAAA,EAAa;AAAA,MACX;AAAA,QACE,IAAA,EAAM,gCAAA;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,OAAA,EAAS;AAAA;AACX;AACF,GACF;AACF;AAEA,SAAS,WAAA,CACP,MAAA,EACA,WAAA,EACA,KAAA,EACe;AACf,EAAA,MAAM,MAAA,GAAS,YAAY,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,QAAA,KAAa,OAAO,CAAA,CAAE,MAAA;AACvE,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,KAAA;AAAA,IACJ,MAAA,EAAQ,OAAA;AAAA,IACR,MAAA;AAAA,IACA,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU,EAAC;AAAA,IACvC,OAAA,EAAS,EAAE,MAAA,EAAQ,CAAA,EAAG,QAAQ,CAAA,EAAG,QAAA,EAAU,GAAG,MAAA,EAAO;AAAA,IACrD,UAAU,EAAC;AAAA,IACX,WAAA,EAAa,CAAC,GAAG,WAAW;AAAA,GAC9B;AACF;AAEA,SAAS,gBAAA,CAAiB,MAAgB,OAAA,EAAmC;AAC3E,EAAA,OAAO;AAAA,IACL,GAAG,OAAA;AAAA,IACH,MAAA,EAAQ,OAAA,CAAQ,MAAA,IAAU,IAAA,CAAK,EAAA;AAAA,IAC/B,QAAA,EAAU,OAAA,CAAQ,QAAA,IAAY,IAAA,CAAK,QAAA,IAAY,OAAA;AAAA,IAC/C,QAAA,EAAU,CAAC,GAAG,OAAA,CAAQ,QAAQ;AAAA,GAChC;AACF;AAEA,SAAS,eAAA,CAAgB,GAAgB,CAAA,EAAwB;AAC/D,EAAA,MAAM,SAAA,GAAY,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA;AAC9B,EAAA,MAAM,SAAA,GAAY,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA;AAC9B,EAAA,OACE,CAAA,CAAE,MAAA,CAAO,aAAA,CAAc,CAAA,CAAE,MAAM,CAAA,IAAA,CAC9B,SAAA,EAAW,KAAA,IAAS,EAAA,EAAI,cAAc,SAAA,EAAW,KAAA,IAAS,EAAE,CAAA,IAAA,CAC5D,WAAW,OAAA,IAAW,EAAA,EAAI,aAAA,CAAc,SAAA,EAAW,OAAA,IAAW,EAAE,CAAA,IAAA,CAChE,SAAA,EAAW,QAAQ,EAAA,EAAI,aAAA,CAAc,SAAA,EAAW,IAAA,IAAQ,EAAE,CAAA,IAC3D,CAAA,CAAE,OAAA,CAAQ,aAAA,CAAc,EAAE,OAAO,CAAA;AAErC;AAEA,SAAS,SAAA,CAAU,UAAkC,SAAA,EAAgC;AACnF,EAAA,MAAM,MAAA,GAAS,SAAS,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,MAAA,KAAW,MAAM,CAAA,CAAE,MAAA;AACjE,EAAA,MAAM,QAAA,GAAW,SAAS,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,MAAA,KAAW,SAAS,CAAA,CAAE,MAAA;AACtE,EAAA,MAAM,MAAA,GAAS,SAAS,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,QAAA,KAAa,OAAO,CAAA,CAAE,MAAA;AACpE,EAAA,OAAO;AAAA,IACL,QAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,SAAA,GAAY,SAAS,QAAQ,CAAA;AAAA,IACjD,MAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,YAAA,GAA2B;AAClC,EAAA,OAAO,CAAC,MAAA,CAAO,cAAA,EAAgB,CAAA;AACjC;AAEA,eAAsB,OAAA,CACpB,KAAA,EACA,OAAA,GAA0B,EAAC,EACH;AACxB,EAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,KAAA,EAAO,OAAO,CAAA;AACjD,EAAA,IAAI,QAAA,CAAS,SAAS,MAAA,EAAW;AAC/B,IAAA,OAAO,WAAA,CAAY,SAAA,EAAW,QAAA,CAAS,WAAW,CAAA;AAAA,EACpD;AAEA,EAAA,MAAM,QAAA,GAAW,SAAA,CAAU,QAAA,CAAS,IAAA,EAAM,SAAS,KAAK,CAAA;AACxD,EAAA,IAAI,QAAA,CAAS,QAAQ,MAAA,EAAW;AAC9B,IAAA,OAAO,YAAY,QAAA,CAAS,IAAA,CAAK,QAAQ,QAAA,CAAS,WAAA,EAAa,SAAS,KAAK,CAAA;AAAA,EAC/E;AAEA,EAAA,MAAM,QAAQ,CAAC,GAAI,QAAQ,MAAA,IAAU,YAAA,EAAe,CAAA,CAAE,IAAA;AAAA,IAAK,CAAC,CAAA,EAAG,CAAA,KAC7D,EAAE,EAAA,CAAG,aAAA,CAAc,EAAE,EAAE;AAAA,GACzB;AACA,EAAA,MAAM,OAAA,GAAuB;AAAA,IAC3B,MAAA,EAAQ,SAAS,IAAA,CAAK,MAAA;AAAA,IACtB,KAAK,QAAA,CAAS,GAAA;AAAA,IACd,KAAA,EAAO,OAAA,CAAQ,QAAA,CAAS,GAAA,CAAI,QAAQ,CAAA;AAAA,IACpC,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,KAAA,KAAU,QAAA,CAAS,GAAA,EAAK,KAAK;AAAA,GACpF;AAEA,EAAA,MAAM,cAAgC,EAAC;AACvC,EAAA,MAAM,WAA0B,EAAC;AACjC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI;AACF,MAAA,QAAA,CAAS,IAAA,CAAK,GAAG,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,OAAA,KAAY,gBAAA,CAAiB,IAAA,EAAM,OAAO,CAAC,CAAC,CAAA;AAAA,IAC3F,SAAS,KAAA,EAAO;AACd,MAAA,WAAA,CAAY,IAAA,CAAK;AAAA,QACf,IAAA,EAAM,qBAAA;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,QAAQ,IAAA,CAAK,EAAA;AAAA,QACb,OAAA,EAAS,CAAA,UAAA,EAAa,IAAA,CAAK,EAAE,CAAA,SAAA,EAC3B,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CACvD,CAAA;AAAA,OACD,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,IAAA,OAAO,YAAY,QAAA,CAAS,IAAA,CAAK,QAAQ,WAAA,EAAa,QAAA,CAAS,IAAI,KAAK,CAAA;AAAA,EAC1E;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,IAAA,CAAK,eAAe,CAAA;AACpD,EAAA,MAAM,OAAA,GAAU,SAAA,CAAU,cAAA,EAAgB,KAAA,CAAM,MAAM,CAAA;AACtD,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,MAAA,GAAS,MAAA;AAC7C,EAAA,OAAO;AAAA,IACL,IAAI,MAAA,KAAW,MAAA;AAAA,IACf,MAAA;AAAA,IACA,MAAA,EAAQ,SAAS,IAAA,CAAK,MAAA;AAAA,IACtB,KAAA,EAAO,SAAS,GAAA,CAAI,KAAA;AAAA,IACpB,OAAA;AAAA,IACA,QAAA,EAAU,cAAA;AAAA,IACV,aAAa;AAAC,GAChB;AACF;AAEA,SAAS,cAAA,CAAe,KAAkB,IAAA,EAA+B;AACvE,EAAA,OAAO,CAAC,EAAE,KAAA,EAAO,GAAA,CAAI,KAAA,EAAO,GAAI,IAAA,KAAS,MAAA,GAAY,EAAE,IAAA,EAAK,GAAI,IAAK,CAAA;AACvE;AAEA,SAAS,gBAAA,CAAiB,OAAkB,IAAA,EAA+B;AACzE,EAAA,OAAO;AAAA,IACL;AAAA,MACE,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,GAAI,MAAM,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,KAAA,CAAM,QAAA,EAAS,GAAI,EAAC;AAAA,MACnE,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,GAAI,IAAA,KAAS,MAAA,GAAY,EAAE,IAAA,KAAS;AAAC;AACvC,GACF;AACF;AAEA,SAASC,KAAAA,CACP,MAAA,EACA,OAAA,EACA,QAAA,EACA,UACA,MAAA,EACa;AACb,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,MAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAU,OAAA;AAAA,IACV,OAAA;AAAA,IACA,GAAI,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,KAAa,EAAC;AAAA,IAC7C,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,IACzC;AAAA,GACF;AACF;AAEA,SAAS,SAAA,CAAU,OAA4B,IAAA,EAAyB;AACtE,EAAA,OAAO,KAAA,CACJ,MAAA,CAAO,CAAC,IAAA,KAA+B,IAAA,CAAK,KAAA,CAAM,IAAA,KAAS,IAAI,CAAA,CAC/D,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,CAC7B,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AACtC;AAEA,SAAS,YAAA,CAAa,MAAgB,GAAA,EAAsB;AAC1D,EAAA,OACE,IAAA,CAAK,KAAA,CAAM,UAAA,KAAe,MAAA,IAC1B,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,UAAA,EAAY,GAAG,CAAA;AAEnE;AAEA,SAAS,gBAAA,CAAiB,MAAgB,IAAA,EAA6C;AACrF,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,CAAM,UAAA;AACzB,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAChC,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,KAAA,GAAQ,MAAM,GAAG,CAAA;AACvB,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,QAAA,CAAS,KAAK,GAAG,OAAO,KAAA;AAAA,EAClE;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,gBAAgB,MAAA,EAA8D;AACrF,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,EAAO,KAAA,KAAU;AACrC,IAAA,MAAM,QAAQ,KAAA,CAAM,UAAA;AACpB,IAAA,IAAI,KAAA,EAAO,KAAA,KAAU,MAAA,EAAW,OAAO,QAAQ,KAAA,CAAM,KAAA;AACrD,IAAA,OAAO,KAAA,IAAS,KAAA,EAAO,KAAA,IAAS,CAAA,CAAA,IAAM,OAAO,MAAA,IAAU,CAAA,CAAA;AAAA,EACzD,GAAG,CAAC,CAAA;AACN;AAEA,SAAS,UAAA,CACP,EAAA,EACA,QAAA,EACA,QAAA,EACU;AACV,EAAA,OAAO,EAAE,EAAA,EAAI,QAAA,EAAU,QAAA,EAAU,SAAS,QAAA,EAAS;AACrD;AAEA,IAAM,mBAAA,GAAsB;AAAA,EAC1B,QAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,oBAAA,GAAuB;AAAA,EAC3B,SAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,qBAAA,GAAwB;AAAA,EAC5B,UAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,sBAAA,GAAyB;AAAA,EAC7B,GAAG,qBAAA;AAAA,EACH,IAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,kCAAA,GAAqC;AAAA,EACzC,iCAAA;AAAA,EACA,kCAAA;AAAA,EACA,oBAAA;AAAA,EACA,mCAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,UAAA,uBAAiB,GAAA,CAAI;AAAA,EACzB,GAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAC,CAAA;AAQD,SAAS,aAAa,GAAA,EAAqB;AACzC,EAAA,OAAO,GAAA,CAAI,WAAA,EAAY,CAAE,OAAA,CAAQ,cAAc,EAAE,CAAA;AACnD;AAEA,SAAS,OAAO,IAAA,EAAsC;AACpD,EAAA,OAAO,IAAI,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,YAAY,CAAC,CAAA;AACvC;AAEA,SAAS,eAAA,CAAgB,KAAA,EAAgB,KAAA,GAAQ,CAAA,EAAa;AAC5D,EAAA,IAAI,KAAA,GAAQ,CAAA,EAAG,OAAO,EAAC;AACvB,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,IAAA,OAAO,QAAQ,MAAA,GAAS,CAAA,GAAI,CAAC,OAAO,IAAI,EAAC;AAAA,EAC3C;AACA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,WAAW,OAAO,CAAC,MAAA,CAAO,KAAK,CAAC,CAAA;AAClF,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,QAAQ,CAAC,IAAA,KAAS,gBAAgB,IAAA,EAAM,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,EACjE;AACA,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,EAAU;AAC/C,IAAA,OAAO,MAAA,CAAO,MAAA,CAAO,KAAgC,CAAA,CAAE,OAAA;AAAA,MAAQ,CAAC,IAAA,KAC9D,eAAA,CAAgB,IAAA,EAAM,QAAQ,CAAC;AAAA,KACjC;AAAA,EACF;AACA,EAAA,OAAO,EAAC;AACV;AAEA,SAAS,iBAAA,CACP,KAAA,EACA,IAAA,EACA,cAAA,GAAoC,EAAC,EACxB;AACb,EAAA,MAAM,MAAA,GAAS,OAAO,IAAI,CAAA;AAC1B,EAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,cAAc,CAAA;AACxC,EAAA,MAAM,YAAA,GAAe,CAAC,GAAG,KAAK,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AAC7C,IAAA,MAAM,aAAa,SAAA,CAAU,GAAA,CAAI,EAAE,KAAA,CAAM,IAAI,IAAI,CAAA,GAAI,CAAA;AACrD,IAAA,MAAM,aAAa,SAAA,CAAU,GAAA,CAAI,EAAE,KAAA,CAAM,IAAI,IAAI,CAAA,GAAI,CAAA;AACrD,IAAA,OAAO,UAAA,GAAa,cAAc,CAAA,CAAE,KAAA,CAAM,QAAQ,aAAA,CAAc,CAAA,CAAE,MAAM,OAAO,CAAA;AAAA,EACjF,CAAC,CAAA;AACD,EAAA,MAAM,SAAsB,EAAC;AAC7B,EAAA,KAAA,MAAW,QAAQ,YAAA,EAAc;AAC/B,IAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,CAAM,UAAA;AACzB,IAAA,IAAI,UAAU,MAAA,EAAW;AACzB,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,MAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,YAAA,CAAa,GAAG,CAAC,CAAA,EAAG;AACpC,MAAA,KAAA,MAAW,IAAA,IAAQ,eAAA,CAAgB,KAAK,CAAA,EAAG;AACzC,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,EAAM,MAAM,CAAA,WAAA,EAAc,GAAG,IAAI,CAAA;AAAA,MACvD;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,SAAS,IAAA,EAAwB;AACxC,EAAA,OAAO,CAAC,GAAG,IAAA,CAAK,WAAA,EAAY,CAAE,QAAA,CAAS,yBAAyB,CAAC,CAAA,CAC9D,GAAA,CAAI,CAAC,KAAA,KAAU,MAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,gBAAA,EAAkB,EAAE,CAAC,CAAA,CACrD,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,CAAC,UAAA,CAAW,GAAA,CAAI,KAAK,CAAC,CAAA;AACjE;AAEA,SAAS,aAAA,CACP,MAAA,EACA,GAAA,EACA,IAAA,EACgB;AAChB,EAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,EAAA,OAAO,KAAA,KAAU,MAAA,GACb,cAAA,CAAe,GAAA,EAAK,IAAI,CAAA,GACxB,gBAAA,CAAiB,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,KAAA,CAAM,IAAI,CAAA;AACnD;AAEA,SAAS,gBAAA,CACP,OACA,IAAA,EACU;AACV,EAAA,MAAM,MAAA,GAAS,OAAO,IAAI,CAAA;AAC1B,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAY;AAC5B,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,CAAM,UAAA;AACzB,IAAA,IAAI,UAAU,MAAA,EAAW;AACzB,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,MAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,YAAA,CAAa,GAAG,CAAC,CAAA,EAAG;AACpC,MAAA,KAAA,MAAW,SAAA,IAAa,eAAA,CAAgB,KAAK,CAAA,EAAG;AAC9C,QAAA,MAAM,OAAA,GAAU,UAAU,IAAA,EAAK;AAC/B,QAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,IAAK,OAAA,CAAQ,UAAU,GAAA,EAAK,GAAA,CAAI,IAAI,OAAO,CAAA;AAAA,MAClE;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,CAAC,GAAG,GAAG,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AACnD;AAEA,SAAS,aAAA,CAAc,QAAgB,cAAA,EAA8C;AACnF,EAAA,MAAM,MAAA,GACJ,MAAA,CAAO,KAAA,CAAM,oDAAoD,GAAG,MAAA,IAAU,CAAA;AAChF,EAAA,OAAO,SAAS,cAAA,CAAe,MAAA;AACjC;AAEA,SAAS,cAAA,CAAe,MAAc,SAAA,EAA6B;AACjE,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAY;AACjC,EAAA,MAAM,OAAA,GAAU,sCAAA;AAChB,EAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,EAAG;AAC1C,IAAA,MAAM,OAAA,GAAA,CAAW,KAAA,CAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA,EAAI,IAAA,EAAK;AAC9D,IAAA,IAAI,OAAA,CAAQ,MAAA,IAAU,SAAA,EAAW,QAAA,CAAS,IAAI,OAAO,CAAA;AAAA,EACvD;AACA,EAAA,OAAO,CAAC,GAAG,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AACxD;AAEA,SAAS,UAAU,IAAA,EAAsB;AACvC,EAAA,OAAO,QAAA,CAAS,IAAI,CAAA,CAAE,MAAA;AACxB;AAEO,IAAM,MAAA,GAAS;AAAA,EACpB,cAAA,GAA2B;AACzB,IAAA,OAAO,UAAA;AAAA,MAAW,qBAAA;AAAA,MAAuB,KAAA;AAAA,MAAO,CAAC,OAAA,KAC/C,OAAA,CAAQ,IAAI,MAAA,KAAW,IAAA,GACnB,EAAC,GACD;AAAA,QACEA,KAAAA;AAAA,UACE,qBAAA;AAAA,UACA,oCAAA;AAAA,UACA,cAAA,CAAe,OAAA,CAAQ,GAAA,EAAK,QAAQ,CAAA;AAAA,UACpC,IAAA;AAAA,UACA,OAAA,CAAQ,IAAI,MAAA,IAAU;AAAA;AACxB;AACF,KACN;AAAA,EACF,CAAA;AAAA,EAEA,cAAc,QAAA,EAAuC;AACnD,IAAA,MAAM,QAAA,GAAW,CAAC,GAAG,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AAChE,IAAA,OAAO,UAAA,CAAW,oBAAA,EAAsB,MAAA,EAAQ,CAAC,OAAA,KAAY;AAC3D,MAAA,MAAM,QAAQ,IAAI,GAAA,CAAI,UAAU,OAAA,CAAQ,KAAA,EAAO,MAAM,CAAC,CAAA;AACtD,MAAA,OAAO,QAAA,CACJ,OAAO,CAAC,IAAA,KAAS,CAAC,KAAA,CAAM,GAAA,CAAI,IAAI,CAAC,CAAA,CACjC,GAAA;AAAA,QAAI,CAAC,IAAA,KACJA,KAAAA;AAAA,UACE,oBAAA;AAAA,UACA,iBAAiB,IAAI,CAAA,gBAAA,CAAA;AAAA,UACrB,cAAA,CAAe,OAAA,CAAQ,GAAA,EAAK,UAAU,CAAA;AAAA,UACtC,IAAA;AAAA,UACA,CAAC,GAAG,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC;AAAA;AAC9C,OACF;AAAA,IACJ,CAAC,CAAA;AAAA,EACH,CAAA;AAAA,EAEA,eAAe,SAAA,EAAwC;AACrD,IAAA,MAAM,OAAA,GAAU,CAAC,GAAG,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AAChE,IAAA,OAAO,UAAA;AAAA,MAAW,qBAAA;AAAA,MAAuB,MAAA;AAAA,MAAQ,CAAC,OAAA,KAChD,OAAA,CAAQ,KAAA,CACL,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,KAAA,CAAM,IAAA,KAAS,UAAU,OAAA,CAAQ,QAAA,CAAS,KAAK,KAAA,CAAM,IAAI,CAAC,CAAA,CAChF,GAAA;AAAA,QAAI,CAAC,IAAA,KACJA,KAAAA;AAAA,UACE,qBAAA;AAAA,UACA,CAAA,eAAA,EAAkB,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,UAAA,CAAA;AAAA,UACjC,gBAAA,CAAiB,IAAA,CAAK,KAAA,EAAO,MAAM,CAAA;AAAA,UACnC,aAAA;AAAA,UACA,KAAK,KAAA,CAAM;AAAA;AACb;AACF,KACJ;AAAA,EACF,CAAA;AAAA,EAEA,cAAc,aAAA,EAAiC;AAC7C,IAAA,OAAO,UAAA;AAAA,MAAW,oBAAA;AAAA,MAAsB,KAAA;AAAA,MAAO,CAAC,YAC9C,OAAA,CAAQ,GAAA,CAAI,eAAe,MAAA,IAAa,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAa,aAAA,GAC7D;AAAA,QACEA,KAAAA;AAAA,UACE,oBAAA;AAAA,UACA,yBAAyB,aAAa,CAAA,GAAA,CAAA;AAAA,UACtC,cAAA,CAAe,OAAA,CAAQ,GAAA,EAAK,YAAY,CAAA;AAAA,UACxC,EAAE,aAAA,EAAc;AAAA,UAChB,QAAQ,GAAA,CAAI;AAAA;AACd,UAEF;AAAC,KACP;AAAA,EACF,CAAA;AAAA,EAEA,SAAS,QAAA,EAA4B;AACnC,IAAA,OAAO,UAAA,CAAW,eAAA,EAAiB,WAAA,EAAa,CAAC,OAAA,KAAY;AAC3D,MAAA,MAAM,OAAA,GAAU,QAAQ,KAAA,CAAM,MAAA;AAAA,QAC5B,CAAC,SAAS,IAAA,KACR,OAAA,KAAY,UAAa,IAAA,CAAK,KAAA,GAAQ,OAAA,CAAQ,KAAA,GAAQ,IAAA,GAAO,OAAA;AAAA,QAC/D;AAAA,OACF;AACA,MAAA,OAAO,OAAA,KAAY,MAAA,IAAa,OAAA,CAAQ,KAAA,GAAQ,QAAA,GAC5C;AAAA,QACEA,KAAAA;AAAA,UACE,eAAA;AAAA,UACA,2BAA2B,QAAQ,CAAA,CAAA,CAAA;AAAA,UACnC,gBAAA,CAAiB,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,UACvC,EAAE,QAAA,EAAS;AAAA,UACX,OAAA,CAAQ;AAAA;AACV,UAEF,EAAC;AAAA,IACP,CAAC,CAAA;AAAA,EACH,CAAA;AAAA,EAEA,WAAW,UAAA,EAA8B;AACvC,IAAA,OAAO,UAAA;AAAA,MAAW,iBAAA;AAAA,MAAmB,WAAA;AAAA,MAAa,CAAC,OAAA,KACjD,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS;AAC9B,QAAA,MAAM,UAAU,gBAAA,CAAiB,IAAA,EAAM,CAAC,YAAA,EAAc,SAAA,EAAW,SAAS,CAAC,CAAA;AAC3E,QAAA,OAAO,OAAA,KAAY,MAAA,IAAa,OAAA,GAAU,UAAA,GACtC;AAAA,UACEA,KAAAA;AAAA,YACE,iBAAA;AAAA,YACA,wBAAwB,UAAU,CAAA,CAAA,CAAA;AAAA,YAClC,gBAAA,CAAiB,IAAA,CAAK,KAAA,EAAO,uBAAuB,CAAA;AAAA,YACpD,EAAE,UAAA,EAAW;AAAA,YACb;AAAA;AACF,YAEF,EAAC;AAAA,MACP,CAAC;AAAA,KACH;AAAA,EACF,CAAA;AAAA,EAEA,eAAe,cAAA,EAAkC;AAC/C,IAAA,OAAO,UAAA,CAAW,qBAAA,EAAuB,KAAA,EAAO,CAAC,OAAA,KAAY;AAC3D,MAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,OAAA,CAAQ,MAAM,CAAA;AAC5C,MAAA,OAAO,QAAQ,cAAA,GACX;AAAA,QACEA,KAAAA;AAAA,UACE,qBAAA;AAAA,UACA,8BAA8B,cAAc,CAAA,CAAA,CAAA;AAAA,UAC5C,cAAA,CAAe,OAAA,CAAQ,GAAA,EAAK,kBAAkB,CAAA;AAAA,UAC9C,EAAE,cAAA,EAAe;AAAA,UACjB;AAAA;AACF,UAEF,EAAC;AAAA,IACP,CAAC,CAAA;AAAA,EACH,CAAA;AAAA,EAEA,aAAA,GAA0B;AACxB,IAAA,OAAO,UAAA;AAAA,MAAW,oBAAA;AAAA,MAAsB,KAAA;AAAA,MAAO,CAAC,OAAA,KAC9C,OAAA,CAAQ,KAAA,CACL,OAAO,CAAC,IAAA,KAAS,IAAA,CAAK,KAAA,CAAM,WAAW,OAAA,IAAW,IAAA,CAAK,KAAA,CAAM,IAAA,KAAS,OAAO,CAAA,CAC7E,GAAA;AAAA,QAAI,CAAC,IAAA,KACJA,KAAAA;AAAA,UACE,oBAAA;AAAA,UACA,2CAAA;AAAA,UACA,gBAAA,CAAiB,IAAA,CAAK,KAAA,EAAO,QAAQ,CAAA;AAAA,UACrC,iBAAA;AAAA,UACA,IAAA,CAAK,KAAA,CAAM,MAAA,IAAU,IAAA,CAAK,KAAA,CAAM;AAAA;AAClC;AACF,KACJ;AAAA,EACF,CAAA;AAAA,EAEA,iCAAA,GAA8C;AAC5C,IAAA,OAAO,UAAA,CAAW,wCAAA,EAA0C,WAAA,EAAa,CAAC,OAAA,KAAY;AACpF,MAAA,MAAM,aAAA,GAAgB,QAAQ,KAAA,CAAM,SAAA,CAAU,CAAC,IAAA,KAAS,IAAA,CAAK,KAAA,CAAM,IAAA,KAAS,KAAK,CAAA;AACjF,MAAA,IAAI,aAAA,KAAkB,EAAA,EAAI,OAAO,EAAC;AAClC,MAAA,MAAM,cAAA,GAAiB,QAAQ,KAAA,CAAM,SAAA;AAAA,QACnC,CAAC,IAAA,EAAM,KAAA,KAAU,QAAQ,aAAA,IAAiB,IAAA,CAAK,MAAM,IAAA,KAAS;AAAA,OAChE;AACA,MAAA,OAAO,mBAAmB,EAAA,GACtB;AAAA,QACEA,KAAAA;AAAA,UACE,wCAAA;AAAA,UACA,6DAAA;AAAA,UACA,iBAAiB,OAAA,CAAQ,KAAA,CAAM,aAAa,CAAA,CAAE,OAAO,MAAM,CAAA;AAAA,UAC3D,sBAAA;AAAA,UACA;AAAA;AACF,UAEF,EAAC;AAAA,IACP,CAAC,CAAA;AAAA,EACH,CAAA;AAAA,EAEA,yBAAyB,IAAA,EAAmC;AAC1D,IAAA,MAAM,QAAA,GAAW,CAAC,GAAG,IAAI,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AAC5D,IAAA,OAAO,UAAA,CAAW,+BAAA,EAAiC,WAAA,EAAa,CAAC,OAAA,KAAY;AAC3E,MAAA,MAAM,SAAA,GAAY,QAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,KAAA,CAAM,IAAA,KAAS,UAAU,CAAA;AAC/E,MAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,QAAA,OAAO;AAAA,UACLA,KAAAA;AAAA,YACE,+BAAA;AAAA,YACA,sDAAA;AAAA,YACA,cAAA,CAAe,OAAA,CAAQ,GAAA,EAAK,UAAU,CAAA;AAAA,YACtC,EAAE,kBAAkB,QAAA,EAAS;AAAA,YAC7B;AAAA;AACF,SACF;AAAA,MACF;AACA,MAAA,OAAO,SAAA,CAAU,OAAA;AAAA,QAAQ,CAAC,IAAA,KACxB,QAAA,CACG,MAAA,CAAO,CAAC,GAAA,KAAQ,CAAC,YAAA,CAAa,IAAA,EAAM,GAAG,CAAC,CAAA,CACxC,GAAA;AAAA,UAAI,CAAC,GAAA,KACJA,KAAAA;AAAA,YACE,+BAAA;AAAA,YACA,qBAAqB,GAAG,CAAA,YAAA,CAAA;AAAA,YACxB,gBAAA,CAAiB,IAAA,CAAK,KAAA,EAAO,CAAA,WAAA,EAAc,GAAG,CAAA,CAAE,CAAA;AAAA,YAChD,GAAA;AAAA,YACA;AAAA;AACF;AACF,OACJ;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AAAA,EAEA,cAAA,CAAe,OAAA,GAAiC,EAAC,EAAa;AAC5D,IAAA,MAAM,UAAA,GAAa,QAAQ,UAAA,IAAc,GAAA;AACzC,IAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,CAAA;AACjD,IAAA,MAAM,UAAA,GAAa,QAAQ,UAAA,IAAc,mBAAA;AACzC,IAAA,MAAM,WAAA,GAAc,QAAQ,WAAA,IAAe,oBAAA;AAC3C,IAAA,OAAO,UAAA,CAAW,qBAAA,EAAuB,WAAA,EAAa,CAAC,OAAA,KAAY;AACjE,MAAA,MAAM,OAAA,GAAU,kBAAkB,OAAA,CAAQ,KAAA,EAAO,YAAY,CAAC,QAAA,EAAU,KAAA,EAAO,OAAO,CAAC,CAAA;AACvF,MAAA,MAAM,QAAA,GAAW,kBAAkB,OAAA,CAAQ,KAAA,EAAO,aAAa,CAAC,WAAA,EAAa,MAAM,CAAC,CAAA;AACpF,MAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,IAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AACjD,QAAA,OAAO;AAAA,UACLA,KAAAA;AAAA,YACE,qBAAA;AAAA,YACA,8DAAA;AAAA,YACA,aAAA,CAAc,QAAQ,MAAA,GAAS,CAAA,GAAI,UAAU,QAAA,EAAU,OAAA,CAAQ,KAAK,UAAU,CAAA;AAAA,YAC9E,EAAE,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,SAAA,EAAU;AAAA,YACxC,EAAE,YAAA,EAAc,OAAA,CAAQ,MAAA,EAAQ,aAAA,EAAe,SAAS,MAAA;AAAO;AACjE,SACF;AAAA,MACF;AAEA,MAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,QAAA,CAAS,QAAQ,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,IAAI,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAC,CAAA;AAClF,MAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,QAAA,CAAS,SAAS,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,IAAI,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAC,CAAA;AACpF,MAAA,MAAM,WAAA,GAAc,CAAC,GAAG,WAAW,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,YAAA,CAAa,GAAA,CAAI,IAAI,CAAC,CAAA,CAAE,MAAA;AAC9E,MAAA,MAAM,UAAU,WAAA,CAAY,IAAA,KAAS,CAAA,GAAI,CAAA,GAAI,cAAc,WAAA,CAAY,IAAA;AACvE,MAAA,OAAO,WAAA,GAAc,cAAA,IAAkB,OAAA,GAAU,UAAA,GAC7C;AAAA,QACEA,KAAAA;AAAA,UACE,qBAAA;AAAA,UACA,6DAAA;AAAA,UACA,aAAA,CAAc,OAAA,EAAS,OAAA,CAAQ,GAAA,EAAK,mBAAmB,CAAA;AAAA,UACvD,EAAE,YAAY,cAAA,EAAe;AAAA,UAC7B;AAAA,YACE,aAAa,WAAA,CAAY,IAAA;AAAA,YACzB,cAAc,YAAA,CAAa,IAAA;AAAA,YAC3B,WAAA;AAAA,YACA,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAC;AAAA;AACpC;AACF,UAEF,EAAC;AAAA,IACP,CAAC,CAAA;AAAA,EACH,CAAA;AAAA,EAEA,YAAA,CAAa,OAAA,GAA+B,EAAC,EAAa;AACxD,IAAA,MAAM,UAAA,GAAa,QAAQ,UAAA,IAAc,mBAAA;AACzC,IAAA,MAAM,WAAA,GAAc,QAAQ,WAAA,IAAe,oBAAA;AAC3C,IAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,CAAA;AACjD,IAAA,MAAM,YAAA,GAAe,QAAQ,YAAA,IAAgB,IAAA;AAC7C,IAAA,OAAO,UAAA,CAAW,mBAAA,EAAqB,WAAA,EAAa,CAAC,OAAA,KAAY;AAC/D,MAAA,MAAM,OAAA,GAAU,kBAAkB,OAAA,CAAQ,KAAA,EAAO,YAAY,CAAC,QAAA,EAAU,KAAA,EAAO,OAAO,CAAC,CAAA;AACvF,MAAA,MAAM,QAAA,GAAW,kBAAkB,OAAA,CAAQ,KAAA,EAAO,aAAa,CAAC,WAAA,EAAa,MAAM,CAAC,CAAA;AACpF,MAAA,MAAM,UAAA,GAAa,QAAQ,GAAA,CAAI,CAAC,UAAU,KAAA,CAAM,IAAI,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC9D,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,IAAI,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,CAAE,WAAA,EAAY;AAC9E,MAAA,MAAM,MAAA,GAAS,cAAA,CAAe,UAAA,EAAY,cAAc,CAAA;AACxD,MAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,QAAA,OAAO,YAAA,GACH;AAAA,UACEA,KAAAA;AAAA,YACE,mBAAA;AAAA,YACA,wDAAA;AAAA,YACA,aAAA,CAAc,OAAA,EAAS,OAAA,CAAQ,GAAA,EAAK,mBAAmB,CAAA;AAAA,YACvD,EAAE,YAAY,SAAA,EAAU;AAAA,YACxB,EAAE,YAAY,CAAA;AAAE;AAClB,YAEF,EAAC;AAAA,MACP;AACA,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU,CAAC,WAAA,CAAY,QAAA,CAAS,KAAA,CAAM,WAAA,EAAa,CAAC,CAAA;AACnF,MAAA,OAAO,OAAA,CAAQ,SAAS,CAAA,GACpB;AAAA,QACEA,KAAAA;AAAA,UACE,mBAAA;AAAA,UACA,yDAAA;AAAA,UACA,aAAA,CAAc,OAAA,EAAS,OAAA,CAAQ,GAAA,EAAK,mBAAmB,CAAA;AAAA,UACvD,EAAE,oBAAoB,IAAA,EAAK;AAAA,UAC3B,EAAE,UAAA,EAAY,MAAA,CAAO,MAAA,EAAQ,aAAA,EAAe,QAAQ,MAAA;AAAO;AAC7D,UAEF,EAAC;AAAA,IACP,CAAC,CAAA;AAAA,EACH,CAAA;AAAA,EAEA,gBAAA,CAAiB,OAAA,GAAmC,EAAC,EAAa;AAChE,IAAA,MAAM,UAAA,GAAa,QAAQ,UAAA,IAAc,mBAAA;AACzC,IAAA,MAAM,YAAA,GAAe,QAAQ,YAAA,IAAgB,qBAAA;AAC7C,IAAA,OAAO,UAAA,CAAW,uBAAA,EAAyB,WAAA,EAAa,CAAC,OAAA,KAAY;AACnE,MAAA,MAAM,OAAA,GAAU,kBAAkB,OAAA,CAAQ,KAAA,EAAO,YAAY,CAAC,QAAA,EAAU,KAAA,EAAO,OAAO,CAAC,CAAA;AACvF,MAAA,MAAM,SAAA,GAAY,iBAAA,CAAkB,OAAA,CAAQ,KAAA,EAAO,YAAY,CAAA;AAC/D,MAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,IAAI,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,EAAG,SAAS,CAAA;AACnF,MAAA,OAAO,UAAU,CAAA,GACb;AAAA,QACEA,KAAAA;AAAA,UACE,uBAAA;AAAA,UACA,wDAAA;AAAA,UACA,aAAA,CAAc,OAAA,EAAS,OAAA,CAAQ,GAAA,EAAK,mBAAmB,CAAA;AAAA,UACvD,EAAE,eAAe,MAAA,EAAO;AAAA,UACxB,EAAE,eAAe,CAAA;AAAE;AACrB,UAEF,EAAC;AAAA,IACP,CAAC,CAAA;AAAA,EACH,CAAA;AAAA,EAEA,iBAAA,CACE,WAAA,EACA,OAAA,GAAoC,EAAC,EAC3B;AACV,IAAA,MAAM,QAAA,GAAW,CAAC,GAAG,WAAW,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AACnE,IAAA,MAAM,YAAA,GAAe,QAAQ,YAAA,IAAgB,sBAAA;AAC7C,IAAA,OAAO,UAAA,CAAW,wBAAA,EAA0B,WAAA,EAAa,CAAC,OAAA,KAAY;AACpE,MAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,OAAA,CAAQ,KAAA,EAAO,YAAY,CAAA;AAC9D,MAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,SAAS,CAAA;AACtC,MAAA,MAAM,OAAA,GAAU,SAAS,MAAA,CAAO,CAAC,OAAO,CAAC,YAAA,CAAa,GAAA,CAAI,EAAE,CAAC,CAAA;AAC7D,MAAA,OAAO,OAAA,CAAQ,SAAS,CAAA,GACpB;AAAA,QACEA,KAAAA;AAAA,UACE,wBAAA;AAAA,UACA,qEAAA;AAAA,UACA,cAAA,CAAe,OAAA,CAAQ,GAAA,EAAK,UAAU,CAAA;AAAA,UACtC,EAAE,WAAW,QAAA,EAAS;AAAA,UACtB,EAAE,kBAAkB,OAAA,EAAS,kBAAA,EAAoB,UAAU,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAE;AAC1E,UAEF,EAAC;AAAA,IACP,CAAC,CAAA;AAAA,EACH,CAAA;AAAA,EAEA,mBAAmB,OAAA,EAA8C;AAC/D,IAAA,MAAM,UAAA,GAAa,QAAQ,UAAA,IAAc,mBAAA;AACzC,IAAA,OAAO,UAAA,CAAW,yBAAA,EAA2B,KAAA,EAAO,CAAC,OAAA,KAAY;AAC/D,MAAA,MAAM,OAAA,GAAU,kBAAkB,OAAA,CAAQ,KAAA,EAAO,YAAY,CAAC,QAAA,EAAU,KAAA,EAAO,OAAO,CAAC,CAAA;AACvF,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,IAAI,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,CAAE,IAAA,EAAK;AACjE,MAAA,MAAM,aAAa,MAAA,CAAO,MAAA;AAC1B,MAAA,MAAM,KAAA,GAAQ,UAAU,MAAM,CAAA;AAC9B,MAAA,MAAM,QAAA,GACH,OAAA,CAAQ,aAAA,KAAkB,MAAA,IAAa,UAAA,GAAa,OAAA,CAAQ,aAAA,IAC5D,OAAA,CAAQ,QAAA,KAAa,MAAA,IAAa,KAAA,GAAQ,OAAA,CAAQ,QAAA;AACrD,MAAA,MAAM,OAAA,GACH,OAAA,CAAQ,aAAA,KAAkB,MAAA,IAAa,UAAA,GAAa,OAAA,CAAQ,aAAA,IAC5D,OAAA,CAAQ,QAAA,KAAa,MAAA,IAAa,KAAA,GAAQ,OAAA,CAAQ,QAAA;AACrD,MAAA,OAAO,MAAA,CAAO,MAAA,KAAW,CAAA,IAAK,QAAA,IAAY,OAAA,GACtC;AAAA,QACEA,KAAAA;AAAA,UACE,yBAAA;AAAA,UACA,6CAAA;AAAA,UACA,aAAA,CAAc,OAAA,EAAS,OAAA,CAAQ,GAAA,EAAK,mBAAmB,CAAA;AAAA,UACvD;AAAA,YACE,eAAe,OAAA,CAAQ,aAAA;AAAA,YACvB,eAAe,OAAA,CAAQ,aAAA;AAAA,YACvB,UAAU,OAAA,CAAQ,QAAA;AAAA,YAClB,UAAU,OAAA,CAAQ;AAAA,WACpB;AAAA,UACA,EAAE,YAAY,KAAA;AAAM;AACtB,UAEF,EAAC;AAAA,IACP,CAAC,CAAA;AAAA,EACH,CAAA;AAAA,EAEA,wBAAA,CACE,OAAA,GAA6B,kCAAA,EAC7B,OAAA,GAA2C,EAAC,EAClC;AACV,IAAA,MAAM,UAAA,GAAa,QAAQ,UAAA,IAAc,mBAAA;AACzC,IAAA,MAAM,MAAA,GAAS,CAAC,GAAG,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,WAAA,EAAa,CAAA,CAAE,IAAA,EAAK;AACvE,IAAA,OAAO,UAAA,CAAW,+BAAA,EAAiC,QAAA,EAAU,CAAC,OAAA,KAAY;AACxE,MAAA,MAAM,OAAA,GAAU,kBAAkB,OAAA,CAAQ,KAAA,EAAO,YAAY,CAAC,QAAA,EAAU,KAAA,EAAO,OAAO,CAAC,CAAA;AACvF,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,IAAI,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,CAAE,WAAA,EAAY;AACxE,MAAA,MAAM,OAAA,GAAU,OAAO,MAAA,CAAO,CAAC,WAAW,MAAA,CAAO,QAAA,CAAS,MAAM,CAAC,CAAA;AACjE,MAAA,OAAO,OAAA,CAAQ,SAAS,CAAA,GACpB;AAAA,QACEA,KAAAA;AAAA,UACE,+BAAA;AAAA,UACA,sDAAA;AAAA,UACA,aAAA,CAAc,OAAA,EAAS,OAAA,CAAQ,GAAA,EAAK,mBAAmB,CAAA;AAAA,UACvD,EAAE,iBAAA,EAAmB,MAAA,CAAO,MAAA,EAAO;AAAA,UACnC,EAAE,kBAAA,EAAoB,OAAA,CAAQ,MAAA;AAAO;AACvC,UAEF,EAAC;AAAA,IACP,CAAC,CAAA;AAAA,EACH;AACF;AAEO,SAAS,mBAAmB,MAAA,EAA+B;AAChE,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,CAAA,mBAAA,CAAA;AAAA,IACA,EAAA;AAAA,IACA,CAAA,QAAA,EAAW,OAAO,MAAM,CAAA,CAAA;AAAA,IACxB,CAAA,QAAA,EAAW,OAAO,MAAM,CAAA,CAAA;AAAA,IACxB,GAAI,MAAA,CAAO,KAAA,KAAU,MAAA,GAAY,CAAC,QAAQ,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA,GAAI,EAAC;AAAA,IAC7D,CAAA,SAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,MAAM,YAAY,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,SAAA,EAAY,OAAO,OAAA,CAAQ,QAAQ,CAAA,WAAA,EAAc,MAAA,CAAO,QAAQ,MAAM,CAAA,OAAA;AAAA,GAC1I;AAEA,EAAA,IAAI,MAAA,CAAO,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACjC,IAAA,KAAA,CAAM,IAAA,CAAK,IAAI,gBAAgB,CAAA;AAC/B,IAAA,KAAA,MAAW,UAAA,IAAc,OAAO,WAAA,EAAa;AAC3C,MAAA,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,UAAA,CAAW,IAAI,CAAA,EAAA,EAAK,UAAA,CAAW,OAAO,CAAA,CAAE,CAAA;AAAA,IAC1D;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC9B,IAAA,KAAA,CAAM,IAAA,CAAK,IAAI,aAAa,CAAA;AAC5B,IAAA,KAAA,MAAW,OAAA,IAAW,OAAO,QAAA,EAAU;AACrC,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,QAAA,CAAS,CAAC,CAAA,EAAG,IAAA;AAClC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,OAAA,CAAQ,MAAM,CAAA,EAAA,EAAK,OAAA,CAAQ,OAAO,CAAA,EAAG,IAAA,GAAO,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,CAAE,CAAA;AAAA,IACjF;AAAA,EACF;AAEA,EAAA,OAAO,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;AAAA,CAAA;AAC5B","file":"index.cjs","sourcesContent":["import { createHash } from \"node:crypto\";\n\nimport type {\n CircuitEvidence,\n CircuitResult,\n CircuitRuleId,\n CircuitRunResult,\n CircuitTraceEvent,\n RunCircuitsOptions,\n} from \"./types.js\";\n\nconst ALL_RULES: CircuitRuleId[] = [\n \"circuit.same-tool-repetition\",\n \"circuit.same-args-repetition\",\n \"circuit.max-loop-iterations\",\n \"circuit.max-retries\",\n \"circuit.tool-timeout\",\n \"circuit.runaway-llm-loop\",\n \"circuit.excessive-branch-width\",\n];\n\nfunction closed(ruleId: string, message: string): CircuitResult {\n return { ruleId, status: \"closed\", severity: \"info\", message, evidence: [] };\n}\n\nfunction open(\n ruleId: string,\n message: string,\n evidence: CircuitEvidence[],\n severity: \"error\" | \"warning\" = \"error\",\n): CircuitResult {\n return {\n ruleId,\n status: severity === \"warning\" ? \"warn\" : \"open\",\n severity,\n message,\n evidence,\n };\n}\n\nfunction isToolEvent(event: CircuitTraceEvent): boolean {\n const name = event.name.toLowerCase();\n return (\n event.kind === \"tool\" ||\n name.startsWith(\"tool:\") ||\n name.startsWith(\"function:\") ||\n name.includes(\".tool.\") ||\n name.startsWith(\"mcp:\")\n );\n}\n\nfunction isLlmEvent(event: CircuitTraceEvent): boolean {\n const name = event.name.toLowerCase();\n return event.kind === \"llm\" || name.startsWith(\"llm:\") || name.includes(\".llm.\") || name.includes(\"generation\");\n}\n\nfunction toolLabel(event: CircuitTraceEvent): string {\n const attrs = event.attributes ?? {};\n const fromAttr = attrs.toolName ?? attrs.tool ?? attrs.function;\n if (typeof fromAttr === \"string\" && fromAttr.length > 0) return fromAttr;\n return event.name.replace(/^(tool:|function:|mcp:)/i, \"\");\n}\n\nfunction argsHash(toolName: string, args: unknown): string {\n return createHash(\"sha256\").update(`${toolName}:${JSON.stringify(args ?? null)}`).digest(\"hex\").slice(0, 16);\n}\n\nfunction toolArgs(event: CircuitTraceEvent): unknown {\n const attrs = event.attributes ?? {};\n return attrs.arguments ?? attrs.args ?? attrs.input ?? attrs.parameters;\n}\n\nfunction durationMs(event: CircuitTraceEvent): number | undefined {\n if (typeof event.durationMs === \"number\") return event.durationMs;\n const attrs = event.attributes ?? {};\n const fromAttr = attrs.durationMs ?? attrs.duration;\n return typeof fromAttr === \"number\" ? fromAttr : undefined;\n}\n\nfunction attemptNumber(event: CircuitTraceEvent): number | undefined {\n const attrs = event.attributes ?? {};\n const value = attrs.attempt ?? attrs.retryAttempt ?? attrs.retryCount;\n return typeof value === \"number\" ? value : undefined;\n}\n\nexport function evaluateSameToolRepetition(\n events: readonly CircuitTraceEvent[],\n maxRepeats: number,\n): CircuitResult {\n const ruleId = \"circuit.same-tool-repetition\";\n const counts = new Map<string, number>();\n for (const event of events.filter(isToolEvent)) {\n const label = toolLabel(event);\n counts.set(label, (counts.get(label) ?? 0) + 1);\n }\n const evidence: CircuitEvidence[] = [];\n for (const [toolName, count] of counts) {\n if (count > maxRepeats) {\n evidence.push({ ruleId, toolName, count, threshold: maxRepeats });\n }\n }\n if (evidence.length === 0) {\n return closed(ruleId, \"Tool repetition within threshold.\");\n }\n return open(ruleId, \"Same tool repeated beyond threshold.\", evidence);\n}\n\nexport function evaluateSameArgsRepetition(\n events: readonly CircuitTraceEvent[],\n maxRepeats: number,\n): CircuitResult {\n const ruleId = \"circuit.same-args-repetition\";\n const counts = new Map<string, { toolName: string; count: number }>();\n for (const event of events.filter(isToolEvent)) {\n const label = toolLabel(event);\n const hash = argsHash(label, toolArgs(event));\n const key = `${label}:${hash}`;\n const current = counts.get(key) ?? { toolName: label, count: 0 };\n current.count += 1;\n counts.set(key, current);\n }\n const evidence: CircuitEvidence[] = [];\n for (const entry of counts.values()) {\n if (entry.count > maxRepeats) {\n evidence.push({ ruleId, toolName: entry.toolName, count: entry.count, threshold: maxRepeats });\n }\n }\n if (evidence.length === 0) {\n return closed(ruleId, \"Tool argument repetition within threshold.\");\n }\n return open(ruleId, \"Same tool arguments repeated beyond threshold.\", evidence);\n}\n\nexport function evaluateMaxLoopIterations(\n events: readonly CircuitTraceEvent[],\n maxIterations: number,\n): CircuitResult {\n const ruleId = \"circuit.max-loop-iterations\";\n const iterationEvents = events.filter((event) => {\n const attrs = event.attributes ?? {};\n return typeof attrs.iteration === \"number\" || event.name.toLowerCase().includes(\"loop\");\n });\n const maxSeen = iterationEvents.reduce((max, event) => {\n const attrs = event.attributes ?? {};\n const iteration = typeof attrs.iteration === \"number\" ? attrs.iteration : max;\n return Math.max(max, iteration);\n }, iterationEvents.length);\n if (maxSeen <= maxIterations) {\n return closed(ruleId, \"Loop iterations within threshold.\");\n }\n return open(ruleId, \"Loop iterations exceeded threshold.\", [\n { ruleId, count: maxSeen, threshold: maxIterations },\n ]);\n}\n\nexport function evaluateMaxRetries(\n events: readonly CircuitTraceEvent[],\n maxRetries: number,\n): CircuitResult {\n const ruleId = \"circuit.max-retries\";\n const attempts = events.map(attemptNumber).filter((value): value is number => value !== undefined);\n const maxAttempt = attempts.length > 0 ? Math.max(...attempts) : 0;\n if (maxAttempt <= maxRetries) {\n return closed(ruleId, \"Retry count within threshold.\");\n }\n return open(ruleId, \"Retry count exceeded threshold.\", [\n { ruleId, count: maxAttempt, threshold: maxRetries },\n ]);\n}\n\nexport function evaluateToolTimeout(\n events: readonly CircuitTraceEvent[],\n maxDurationMs: number,\n): CircuitResult {\n const ruleId = \"circuit.tool-timeout\";\n const evidence: CircuitEvidence[] = [];\n for (const event of events.filter(isToolEvent)) {\n const duration = durationMs(event);\n if (duration !== undefined && duration > maxDurationMs) {\n evidence.push({\n ruleId,\n toolName: toolLabel(event),\n count: duration,\n threshold: maxDurationMs,\n eventId: event.eventId,\n });\n }\n }\n if (evidence.length === 0) {\n return closed(ruleId, \"Tool durations within timeout.\");\n }\n return open(ruleId, \"Tool call exceeded configured timeout.\", evidence, \"warning\");\n}\n\nexport function evaluateRunawayLlmLoop(\n events: readonly CircuitTraceEvent[],\n maxLlmCalls: number,\n): CircuitResult {\n const ruleId = \"circuit.runaway-llm-loop\";\n const llmCount = events.filter(isLlmEvent).length;\n const hasTerminal = events.some((event) => {\n const status = (event.status ?? event.attributes?.status ?? \"\").toString().toLowerCase();\n return status === \"ok\" || status === \"success\" || status === \"completed\";\n });\n if (llmCount <= maxLlmCalls || hasTerminal) {\n return closed(ruleId, \"LLM call count within threshold or run completed.\");\n }\n return open(ruleId, \"Runaway LLM loop detected.\", [\n { ruleId, count: llmCount, threshold: maxLlmCalls },\n ]);\n}\n\nexport function evaluateExcessiveBranchWidth(\n events: readonly CircuitTraceEvent[],\n maxWidth: number,\n): CircuitResult {\n const ruleId = \"circuit.excessive-branch-width\";\n const children = new Map<string, number>();\n for (const event of events) {\n const parentId = event.parentId;\n if (!parentId) continue;\n children.set(parentId, (children.get(parentId) ?? 0) + 1);\n }\n const evidence: CircuitEvidence[] = [];\n for (const [parentId, count] of children) {\n if (count > maxWidth) {\n evidence.push({ ruleId, path: parentId, count, threshold: maxWidth });\n }\n }\n if (evidence.length === 0) {\n return closed(ruleId, \"Branch width within threshold.\");\n }\n return open(ruleId, \"Excessive parallel branch width detected.\", evidence, \"warning\");\n}\n\nfunction runRule(\n ruleId: CircuitRuleId,\n events: readonly CircuitTraceEvent[],\n options: RunCircuitsOptions,\n): CircuitResult | undefined {\n switch (ruleId) {\n case \"circuit.same-tool-repetition\":\n if (options.sameToolRepetition === undefined) return undefined;\n return evaluateSameToolRepetition(events, options.sameToolRepetition.maxRepeats);\n case \"circuit.same-args-repetition\":\n if (options.sameArgsRepetition === undefined) return undefined;\n return evaluateSameArgsRepetition(events, options.sameArgsRepetition.maxRepeats);\n case \"circuit.max-loop-iterations\":\n if (options.maxLoopIterations === undefined) return undefined;\n return evaluateMaxLoopIterations(events, options.maxLoopIterations.maxIterations);\n case \"circuit.max-retries\":\n if (options.maxRetries === undefined) return undefined;\n return evaluateMaxRetries(events, options.maxRetries.maxRetries);\n case \"circuit.tool-timeout\":\n if (options.toolTimeout === undefined) return undefined;\n return evaluateToolTimeout(events, options.toolTimeout.maxDurationMs);\n case \"circuit.runaway-llm-loop\":\n if (options.runawayLlmLoop === undefined) return undefined;\n return evaluateRunawayLlmLoop(events, options.runawayLlmLoop.maxLlmCalls);\n case \"circuit.excessive-branch-width\":\n if (options.excessiveBranchWidth === undefined) return undefined;\n return evaluateExcessiveBranchWidth(events, options.excessiveBranchWidth.maxWidth);\n default:\n return undefined;\n }\n}\n\nexport function runCircuits(\n events: readonly CircuitTraceEvent[],\n options: RunCircuitsOptions = {},\n): CircuitRunResult {\n const selected = options.rules ?? ALL_RULES;\n const results: CircuitResult[] = [];\n for (const ruleId of selected) {\n const result = runRule(ruleId, events, options);\n if (result) results.push(result);\n }\n const ok = !results.some((result) => result.status === \"open\" && result.severity === \"error\");\n return { ok, results };\n}\n\nexport { ALL_RULES as DEFAULT_CIRCUIT_RULES };\n","/**\n * Mirrors `packages/core/src/safety/sensitive-key.ts` for dependency-light\n * @agent-inspect/redact consumers. Keep both copies in sync (6.14.2 parity).\n */\n\n/** True when the original key already uses an explicit separator. */\nfunction keyHasExplicitSeparator(value: string): boolean {\n return /[_\\-.]/.test(value);\n}\n\n/**\n * Canonicalize field names so camelCase / kebab / dot / snake forms share a\n * snake_case shape the compound matcher can recognize (`userPassword` →\n * `user_password`).\n */\nexport function normalizeSensitiveKey(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, \"$1_$2\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\");\n}\n\nexport const NON_CREDENTIAL_TOKEN_CONFIG_KEYS: ReadonlySet<string> = new Set(\n [\n \"tokens\",\n \"max_tokens\",\n \"min_tokens\",\n \"ls_max_tokens\",\n \"token_count\",\n \"token_limit\",\n \"token_budget\",\n \"input_tokens\",\n \"output_tokens\",\n \"total_tokens\",\n \"cached_tokens\",\n \"prompt_tokens\",\n \"completion_tokens\",\n ].map(normalizeSensitiveKey),\n);\n\nfunction isTokenCredentialKey(normalized: string): boolean {\n if (NON_CREDENTIAL_TOKEN_CONFIG_KEYS.has(normalized)) return false;\n if (normalized === \"token\") return true;\n if (normalized.endsWith(\"tokens\")) return false;\n return normalized.endsWith(\"token\");\n}\n\n/**\n * True when the field name looks credential-sensitive under the shared policy.\n *\n * Suffix compounds (`user_password`, `userPassword`) always match. Prefix\n * compounds (`email_note`) match only when the original key already contained\n * an explicit separator, so camelCase topic fields like `emailNote` stay for\n * value detectors instead of key redaction.\n */\nexport function isCredentialSensitiveKey(\n key: string | undefined,\n sensitiveKeys: readonly string[],\n): boolean {\n if (!key) return false;\n const normalized = normalizeSensitiveKey(key);\n if (!normalized) return false;\n if (NON_CREDENTIAL_TOKEN_CONFIG_KEYS.has(normalized)) return false;\n\n const allowPrefixCompound = keyHasExplicitSeparator(key);\n\n for (const sensitive of sensitiveKeys) {\n const s = normalizeSensitiveKey(sensitive);\n if (!s) continue;\n if (s === \"token\") {\n if (isTokenCredentialKey(normalized)) return true;\n continue;\n }\n if (normalized === s) return true;\n if (normalized.endsWith(`_${s}`)) return true;\n if (allowPrefixCompound && normalized.startsWith(`${s}_`)) return true;\n }\n return false;\n}\n","import crypto from \"node:crypto\";\nimport { isCredentialSensitiveKey } from \"./sensitive-key.js\";\n\nexport type RedactionProfile = \"local\" | \"share\" | \"strict\";\n\nexport type RedactionAction = \"replace\" | \"hash\" | \"prefix\" | \"truncate\" | \"keep\";\n\nexport type RedactionSeverity = \"info\" | \"warning\" | \"error\";\n\nexport type RedactionMatchKind = \"key\" | \"value\" | \"custom\";\n\nexport type RedactionRule =\n | string\n | { key: string; strategy: \"full\" }\n | { key: string; strategy: \"prefix\"; keep?: number }\n | { key: string; strategy: \"hash\" };\n\nexport interface RedactionFinding {\n path: string;\n detector: string;\n action: RedactionAction;\n severity: RedactionSeverity;\n matchKind: RedactionMatchKind;\n preview?: string;\n}\n\nexport interface RedactionDetection {\n action?: RedactionAction;\n replacement?: unknown;\n severity?: RedactionSeverity;\n matchKind?: RedactionMatchKind;\n preview?: string;\n}\n\nexport interface RedactionDetectorInput {\n path: string;\n key?: string;\n value: unknown;\n}\n\nexport interface RedactionDetector {\n id: string;\n severity?: RedactionSeverity;\n matchKind?: RedactionMatchKind;\n detect(input: RedactionDetectorInput): RedactionDetection[];\n}\n\nexport interface RedactionResult<T = unknown> {\n value: T;\n findings: RedactionFinding[];\n redacted: boolean;\n profile: RedactionProfile;\n}\n\nexport interface ResolvedRedactionProfile {\n profile: RedactionProfile;\n extraKeys: readonly string[];\n maxMetadataValueLengthCap?: number;\n maxPreviewLengthCap?: number;\n}\n\nexport interface RedactOptions {\n profile?: RedactionProfile;\n detectors?: RedactionDetector[];\n rules?: RedactionRule[];\n replacement?: string;\n maxDepth?: number;\n maxStringLength?: number;\n collectFindings?: boolean;\n}\n\nexport interface RedactorOptions extends RedactOptions {\n extraKeys?: readonly string[];\n}\n\nexport const DEFAULT_REDACT_KEYS = [\n \"authorization\",\n \"cookie\",\n \"token\",\n \"apiKey\",\n \"password\",\n \"secret\",\n \"email\",\n] as const;\n\nexport const SHARE_PROFILE_EXTRA_KEYS = [\n \"userEmail\",\n \"customerEmail\",\n \"phone\",\n \"phoneNumber\",\n \"address\",\n \"ip\",\n \"ipAddress\",\n \"sessionId\",\n \"requestId\",\n \"correlationId\",\n \"decisionId\",\n \"groupId\",\n \"customerId\",\n \"userId\",\n \"accountId\",\n \"tenantId\",\n \"orgId\",\n \"organizationId\",\n \"traceId\",\n \"spanId\",\n \"parentSpanId\",\n \"currentTask\",\n \"task\",\n \"userInput\",\n \"requestText\",\n \"conversationText\",\n] as const;\n\nexport const STRICT_PROFILE_EXTRA_KEYS = [\n \"prompt\",\n \"completion\",\n \"input\",\n \"output\",\n \"inputPreview\",\n \"outputPreview\",\n \"message\",\n \"messages\",\n \"transcript\",\n \"context\",\n \"document\",\n \"documents\",\n \"chunk\",\n \"chunks\",\n \"retrieval\",\n \"query\",\n] as const;\n\ntype CompiledRule =\n | { key: string; strategy: \"full\" }\n | { key: string; strategy: \"prefix\"; keep: number }\n | { key: string; strategy: \"hash\" };\n\ninterface RedactionState {\n findings: RedactionFinding[];\n seen: WeakMap<object, unknown>;\n}\n\ninterface PatternDetectorOptions {\n id: string;\n pattern: RegExp;\n severity?: RedactionSeverity;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n\nfunction toKey(key: string): string {\n return key.toLowerCase();\n}\n\nfunction findCompiledKeyRule(\n key: string,\n rules: readonly CompiledRule[],\n): CompiledRule | undefined {\n const exact = toKey(key);\n const direct = rules.find((candidate) => candidate.key === exact);\n if (direct) return direct;\n return rules.find((candidate) => isCredentialSensitiveKey(key, [candidate.key]));\n}\n\nfunction stableHash(value: string): string {\n const hash = crypto.createHash(\"sha256\").update(value, \"utf8\").digest(\"hex\");\n return hash.slice(0, 8);\n}\n\nfunction stringifyScalar(value: unknown): string | undefined {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n return String(value);\n }\n return undefined;\n}\n\nfunction patternDetector(options: PatternDetectorOptions): RedactionDetector {\n return {\n id: options.id,\n severity: options.severity ?? \"warning\",\n matchKind: \"value\",\n detect(input) {\n if (typeof input.value !== \"string\") return [];\n options.pattern.lastIndex = 0;\n return options.pattern.test(input.value)\n ? [{ action: \"replace\", severity: options.severity ?? \"warning\", matchKind: \"value\" }]\n : [];\n },\n };\n}\n\nfunction digitsOnly(value: string): string {\n return value.replace(/\\D/g, \"\");\n}\n\nfunction passesLuhn(value: string): boolean {\n const digits = digitsOnly(value);\n if (digits.length < 13 || digits.length > 19) return false;\n\n let sum = 0;\n let double = false;\n for (let i = digits.length - 1; i >= 0; i -= 1) {\n let digit = Number(digits[i]);\n if (double) {\n digit *= 2;\n if (digit > 9) digit -= 9;\n }\n sum += digit;\n double = !double;\n }\n return sum % 10 === 0;\n}\n\nconst UUID_RE =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n/** 13-digit Unix epoch milliseconds in a plausible modern range. */\nconst EPOCH_MS_RE = /^1[0-9]{12}$/;\n\nconst EMAIL_RE = /\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b/gi;\n\nfunction pathSuggestsNonCard(path: string): boolean {\n const normalized = path.toLowerCase().replace(/[^a-z0-9._]/g, \"\");\n return (\n /(^|\\.)(tokenusage|usage)(\\.|$)/.test(normalized) ||\n /(startedat|endedat|durationms|timestamp|createdat|updatedat)(\\.|$)/.test(normalized) ||\n /(^|\\.)(runid|traceid|spanid|eventid|sessionid|userid|parentid|requestid|correlationid)(\\.|$)/.test(\n normalized,\n ) ||\n /(^|\\.)ts(\\.|$)/.test(normalized)\n );\n}\n\nfunction isUuidLike(value: string): boolean {\n return UUID_RE.test(value.trim());\n}\n\nfunction isPlausibleCardCandidate(candidate: string, fullValue: string): boolean {\n const digits = digitsOnly(candidate);\n if (digits.length < 13 || digits.length > 19) return false;\n if (!passesLuhn(candidate)) return false;\n\n const trimmed = fullValue.trim();\n if (isUuidLike(trimmed)) return false;\n\n // Naked epoch-ms timestamps are not PANs.\n if (EPOCH_MS_RE.test(digits) && digitsOnly(trimmed) === digits && /^\\d+$/.test(trimmed)) {\n return false;\n }\n\n // Reject candidates glued inside longer alphanumeric IDs without card separators.\n const start = fullValue.indexOf(candidate);\n if (start >= 0) {\n const before = fullValue[start - 1];\n const after = fullValue[start + candidate.length];\n if (before && /[A-Za-z0-9_]/.test(before)) return false;\n if (after && /[A-Za-z0-9_]/.test(after)) return false;\n }\n\n return true;\n}\n\nfunction looksLikePathOrPackageOrUrl(value: string): boolean {\n const trimmed = value.trim();\n if (/^(?:[a-z][a-z0-9+.-]*:)?\\/\\//i.test(trimmed)) return true;\n if (/^webpack:/i.test(trimmed)) return true;\n if (/^@[A-Za-z0-9_.-]+\\/[A-Za-z0-9_.@/-]+$/.test(trimmed)) return true;\n if (/^[A-Za-z]:[\\\\/]/.test(trimmed) || /^[/\\\\]/.test(trimmed)) return true;\n // Path-like single token (slashes, no whitespace).\n if (/[\\\\/]/.test(trimmed) && !/\\s/.test(trimmed)) return true;\n return false;\n}\n\nfunction emailMatchIsPathAdjacent(value: string, index: number, length: number): boolean {\n const before = value[index - 1];\n const after = value[index + length];\n return before === \"/\" || before === \"\\\\\" || after === \"/\" || after === \"\\\\\";\n}\n\nfunction valueContainsEmail(value: string): boolean {\n if (looksLikePathOrPackageOrUrl(value)) return false;\n EMAIL_RE.lastIndex = 0;\n for (const match of value.matchAll(EMAIL_RE)) {\n const text = match[0] ?? \"\";\n const index = match.index ?? 0;\n if (emailMatchIsPathAdjacent(value, index, text.length)) continue;\n return true;\n }\n return false;\n}\n\nconst credentialDetectors: readonly RedactionDetector[] = [\n patternDetector({\n id: \"value.authorizationHeader\",\n pattern: /^(?:basic|bearer|digest|apikey)\\s+[a-z0-9._~+/=-]+$/i,\n severity: \"error\",\n }),\n patternDetector({\n id: \"value.bearerToken\",\n pattern: /\\bbearer\\s+[a-z0-9._~+/=-]{12,}\\b/i,\n severity: \"error\",\n }),\n patternDetector({\n id: \"value.cookie\",\n pattern: /\\b[a-z0-9_.-]+=[^;\\s]+(?:;\\s*[a-z0-9_.-]+=[^;\\s]+)+/i,\n severity: \"error\",\n }),\n patternDetector({\n id: \"value.jwt\",\n pattern: /\\beyJ[a-zA-Z0-9_-]{8,}\\.[a-zA-Z0-9_-]{8,}\\.[a-zA-Z0-9_-]{8,}\\b/,\n severity: \"error\",\n }),\n patternDetector({\n id: \"value.providerApiKey\",\n pattern: /\\b(?:sk-(?:proj-)?[a-zA-Z0-9_-]{16,}|sk-ant-[a-zA-Z0-9_-]{16,}|AIza[0-9A-Za-z_-]{20,})\\b/,\n severity: \"error\",\n }),\n patternDetector({\n id: \"value.githubToken\",\n pattern: /\\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9_]{20,}\\b/,\n severity: \"error\",\n }),\n patternDetector({\n id: \"value.awsAccessKey\",\n pattern: /\\b(?:AKIA|ASIA)[A-Z0-9]{16}\\b/,\n severity: \"error\",\n }),\n patternDetector({\n id: \"value.privateKey\",\n pattern: /-----BEGIN [A-Z ]*PRIVATE KEY-----[\\s\\S]*-----END [A-Z ]*PRIVATE KEY-----/,\n severity: \"error\",\n }),\n {\n id: \"value.creditCard\",\n severity: \"error\",\n matchKind: \"value\",\n detect(input) {\n if (typeof input.value !== \"string\") return [];\n if (pathSuggestsNonCard(input.path)) return [];\n if (isUuidLike(input.value)) return [];\n const candidatePattern = /(?:\\d[ -]?){13,19}/g;\n for (const match of input.value.matchAll(candidatePattern)) {\n const candidate = match[0] ?? \"\";\n if (isPlausibleCardCandidate(candidate, input.value)) {\n return [{ action: \"replace\", severity: \"error\", matchKind: \"value\" }];\n }\n }\n return [];\n },\n },\n];\n\nconst identifierDetectors: readonly RedactionDetector[] = [\n {\n id: \"value.email\",\n severity: \"warning\",\n matchKind: \"value\",\n detect(input) {\n if (typeof input.value !== \"string\") return [];\n return valueContainsEmail(input.value)\n ? [{ action: \"replace\", severity: \"warning\", matchKind: \"value\" }]\n : [];\n },\n },\n patternDetector({\n id: \"value.phone\",\n pattern: /\\b(?:\\+\\d{1,3}[\\s.-]?)?(?:\\(?\\d{3}\\)?[\\s.-])\\d{3}[\\s.-]\\d{4}\\b/,\n }),\n patternDetector({\n id: \"value.ipv4\",\n pattern: /\\b(?:(?:25[0-5]|2[0-4]\\d|1?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1?\\d?\\d)\\b/,\n }),\n patternDetector({\n id: \"value.ipv6\",\n pattern: /\\b(?:[0-9a-f]{1,4}:){2,7}[0-9a-f]{1,4}\\b/i,\n }),\n];\n\nfunction builtInDetectorsForProfile(profile: RedactionProfile): readonly RedactionDetector[] {\n if (profile === \"local\") return credentialDetectors;\n return [...credentialDetectors, ...identifierDetectors];\n}\n\nfunction compileRules(\n rules?: RedactionRule[],\n extraKeys?: readonly string[],\n): CompiledRule[] {\n const out = new Map<string, CompiledRule>();\n\n const set = (rule: CompiledRule) => {\n const key = toKey(rule.key);\n out.set(key, { ...rule, key } as CompiledRule);\n };\n\n for (const key of DEFAULT_REDACT_KEYS) {\n set({ key, strategy: \"full\" });\n }\n\n for (const key of extraKeys ?? []) {\n if (typeof key === \"string\" && key.length > 0) {\n set({ key, strategy: \"full\" });\n }\n }\n\n for (const rule of rules ?? []) {\n if (typeof rule === \"string\") {\n set({ key: rule, strategy: \"full\" });\n continue;\n }\n\n if (rule.strategy === \"full\") set({ key: rule.key, strategy: \"full\" });\n if (rule.strategy === \"hash\") set({ key: rule.key, strategy: \"hash\" });\n if (rule.strategy === \"prefix\") {\n set({\n key: rule.key,\n strategy: \"prefix\",\n keep: typeof rule.keep === \"number\" ? rule.keep : 8,\n });\n }\n }\n\n return [...out.values()];\n}\n\nfunction actionForRule(rule: CompiledRule): RedactionAction {\n if (rule.strategy === \"full\") return \"replace\";\n return rule.strategy;\n}\n\nfunction applyRule(\n rule: CompiledRule,\n value: unknown,\n replacement: string,\n): unknown {\n if (rule.strategy === \"full\") return replacement;\n\n const asString = stringifyScalar(value);\n if (rule.strategy === \"prefix\") {\n if (asString === undefined) return replacement;\n const keep = Math.max(0, Math.floor(rule.keep));\n return asString.length <= keep ? `${asString}…` : `${asString.slice(0, keep)}…`;\n }\n\n if (rule.strategy === \"hash\") {\n if (asString === undefined) return \"[HASH:unknown]\";\n return `[HASH:${stableHash(asString)}]`;\n }\n\n return value;\n}\n\nfunction childPath(path: string, key: string): string {\n if (/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key)) {\n return path ? `${path}.${key}` : key;\n }\n return `${path || \"$\"}[${JSON.stringify(key)}]`;\n}\n\nfunction indexPath(path: string, index: number): string {\n return `${path || \"$\"}[${index}]`;\n}\n\nfunction makeFinding(\n path: string,\n detector: string,\n action: RedactionAction,\n matchKind: RedactionMatchKind,\n severity: RedactionSeverity = \"warning\",\n preview?: string,\n): RedactionFinding {\n return preview === undefined\n ? { path, detector, action, severity, matchKind }\n : { path, detector, action, severity, matchKind, preview };\n}\n\nexport function createRedactionProfile(profile: RedactionProfile = \"local\"): ResolvedRedactionProfile {\n switch (profile) {\n case \"local\":\n return { profile: \"local\", extraKeys: [] };\n case \"share\":\n return {\n profile: \"share\",\n extraKeys: SHARE_PROFILE_EXTRA_KEYS,\n maxMetadataValueLengthCap: 500,\n maxPreviewLengthCap: 200,\n };\n case \"strict\":\n return {\n profile: \"strict\",\n extraKeys: [...SHARE_PROFILE_EXTRA_KEYS, ...STRICT_PROFILE_EXTRA_KEYS],\n maxMetadataValueLengthCap: 200,\n maxPreviewLengthCap: 80,\n };\n }\n}\n\nexport class Redactor {\n readonly #rules: CompiledRule[];\n readonly #detectors: readonly RedactionDetector[];\n readonly #profile: RedactionProfile;\n readonly #replacement: string;\n readonly #maxDepth: number;\n readonly #collectFindings: boolean;\n\n constructor(options?: RedactorOptions) {\n const resolved = createRedactionProfile(options?.profile ?? \"local\");\n this.#profile = resolved.profile;\n this.#rules = compileRules(options?.rules, [\n ...resolved.extraKeys,\n ...(options?.extraKeys ?? []),\n ]);\n this.#detectors = [\n ...builtInDetectorsForProfile(this.#profile),\n ...(options?.detectors ?? []),\n ];\n this.#replacement = options?.replacement ?? \"[REDACTED]\";\n this.#maxDepth = options?.maxDepth ?? 32;\n this.#collectFindings = options?.collectFindings ?? true;\n }\n\n redactValue(key: string, value: unknown): unknown {\n return this.#redactValue(value, key, key, 0, {\n findings: [],\n seen: new WeakMap<object, unknown>(),\n });\n }\n\n redactRecord(record: Record<string, unknown>): Record<string, unknown> {\n return this.redact(record).value as Record<string, unknown>;\n }\n\n redact<T = unknown>(value: T): RedactionResult<T> {\n const state: RedactionState = {\n findings: [],\n seen: new WeakMap<object, unknown>(),\n };\n const redacted = this.#redactValue(value, undefined, \"$\", 0, state);\n return {\n value: redacted as T,\n findings: state.findings,\n redacted: state.findings.some((finding) => finding.action !== \"keep\"),\n profile: this.#profile,\n };\n }\n\n #recordFinding(state: RedactionState, finding: RedactionFinding): void {\n if (this.#collectFindings) state.findings.push(finding);\n }\n\n #redactValue(\n value: unknown,\n key: string | undefined,\n path: string,\n depth: number,\n state: RedactionState,\n ): unknown {\n if (depth > this.#maxDepth) {\n this.#recordFinding(\n state,\n makeFinding(path, \"structure.maxDepth\", \"truncate\", \"value\", \"warning\"),\n );\n return \"[Truncated]\";\n }\n\n if (key !== undefined) {\n const rule = findCompiledKeyRule(key, this.#rules);\n if (rule) {\n this.#recordFinding(\n state,\n makeFinding(path, `key.${rule.key}`, actionForRule(rule), \"key\", \"warning\"),\n );\n return applyRule(rule, value, this.#replacement);\n }\n }\n\n for (const detector of this.#detectors) {\n const detections = detector.detect({ path, key, value });\n for (const detection of detections) {\n const action = detection.action ?? \"replace\";\n this.#recordFinding(\n state,\n makeFinding(\n path,\n detector.id,\n action,\n detection.matchKind ?? detector.matchKind ?? \"custom\",\n detection.severity ?? detector.severity ?? \"warning\",\n detection.preview,\n ),\n );\n if (action !== \"keep\") {\n return detection.replacement ?? this.#replacement;\n }\n }\n }\n\n if (Array.isArray(value)) {\n if (state.seen.has(value)) return state.seen.get(value);\n const out: unknown[] = [];\n state.seen.set(value, out);\n value.forEach((item, index) => {\n out[index] = this.#redactValue(item, undefined, indexPath(path, index), depth + 1, state);\n });\n return out;\n }\n\n if (isRecord(value)) {\n if (state.seen.has(value)) return state.seen.get(value);\n const out: Record<string, unknown> = {};\n state.seen.set(value, out);\n for (const [entryKey, entryValue] of Object.entries(value)) {\n out[entryKey] = this.#redactValue(\n entryValue,\n entryKey,\n childPath(path === \"$\" ? \"\" : path, entryKey),\n depth + 1,\n state,\n );\n }\n return out;\n }\n\n return value;\n }\n}\n\nexport function createRedactor(options?: RedactorOptions): Redactor {\n return new Redactor(options);\n}\n\nexport function redact<T = unknown>(value: T, options?: RedactOptions): RedactionResult<T> {\n return createRedactor(options).redact(value);\n}\n","import { redact, type RedactionFinding } from \"@agent-inspect/redact\";\n\nimport type {\n BannedPhraseOptions,\n GuardrailEvidence,\n GuardrailResult,\n OversizeOutputOptions,\n PiiLeakOptions,\n PromptInjectionOptions,\n RequiredJsonShapeOptions,\n StructuredOutputOptions,\n UnsafeToolArgsOptions,\n} from \"./types.js\";\n\nconst DEFAULT_INJECTION_PATTERNS = [\n \"ignore previous instructions\",\n \"ignore all prior\",\n \"disregard your instructions\",\n \"system prompt\",\n \"you are now\",\n \"jailbreak\",\n] as const;\n\nfunction pass(ruleId: string, message: string): GuardrailResult {\n return { ruleId, status: \"pass\", severity: \"info\", message, evidence: [] };\n}\n\nfunction fail(\n ruleId: string,\n message: string,\n evidence: GuardrailEvidence[],\n severity: \"error\" | \"warning\" = \"error\",\n): GuardrailResult {\n return { ruleId, status: severity === \"warning\" ? \"warn\" : \"fail\", severity, message, evidence };\n}\n\nfunction boundedPreview(value: string, max = 80): string {\n if (value.length <= max) return value;\n return `${value.slice(0, max - 3)}...`;\n}\n\nexport function evaluateBannedPhrase(\n text: string,\n options: BannedPhraseOptions,\n): GuardrailResult {\n const ruleId = \"guardrail.banned-phrase\";\n const haystack = options.caseInsensitive !== false ? text.toLowerCase() : text;\n const evidence: GuardrailEvidence[] = [];\n for (const phrase of options.phrases) {\n const needle = options.caseInsensitive !== false ? phrase.toLowerCase() : phrase;\n if (needle.length > 0 && haystack.includes(needle)) {\n evidence.push({ ruleId, match: phrase, preview: boundedPreview(text) });\n }\n }\n if (evidence.length === 0) {\n return pass(ruleId, \"No banned phrases matched.\");\n }\n return fail(ruleId, `Matched ${evidence.length} banned phrase(s).`, evidence);\n}\n\nconst SEVERITY_RANK = { info: 0, warning: 1, error: 2 } as const;\n\nexport function evaluatePiiLeak(value: unknown, options: PiiLeakOptions = {}): GuardrailResult {\n const ruleId = \"guardrail.pii-leak\";\n const minSeverity = options.minSeverity ?? \"warning\";\n const result = redact(value, { profile: options.profile ?? \"share\", collectFindings: true });\n const findings = result.findings.filter(\n (finding: RedactionFinding) => SEVERITY_RANK[finding.severity] >= SEVERITY_RANK[minSeverity],\n );\n if (findings.length === 0) {\n return pass(ruleId, \"No PII-style redaction findings.\");\n }\n const evidence: GuardrailEvidence[] = findings.map((finding) => ({\n ruleId,\n path: finding.path,\n detector: finding.detector,\n preview: finding.preview,\n }));\n return fail(ruleId, `Detected ${findings.length} PII-style finding(s).`, evidence);\n}\n\nfunction measureDepth(value: unknown): number {\n if (value === null || typeof value !== \"object\") return 0;\n if (Array.isArray(value)) {\n return 1 + Math.max(0, ...value.map((item) => measureDepth(item)));\n }\n const depths = Object.values(value as Record<string, unknown>).map((item) => measureDepth(item));\n return 1 + (depths.length === 0 ? 0 : Math.max(...depths));\n}\n\nfunction maxStringLength(value: unknown): number {\n if (typeof value === \"string\") return value.length;\n if (value === null || typeof value !== \"object\") return 0;\n if (Array.isArray(value)) {\n return Math.max(0, ...value.map((item) => maxStringLength(item)));\n }\n return Math.max(0, ...Object.values(value as Record<string, unknown>).map((item) => maxStringLength(item)));\n}\n\nexport function evaluateUnsafeToolArgs(\n toolName: string,\n toolArgs: unknown,\n options: UnsafeToolArgsOptions = {},\n): GuardrailResult {\n const ruleId = \"guardrail.unsafe-tool-args\";\n const blocked = new Set((options.blockedTools ?? []).map((name) => name.toLowerCase()));\n const evidence: GuardrailEvidence[] = [];\n if (blocked.has(toolName.toLowerCase())) {\n evidence.push({ ruleId, preview: toolName, match: toolName });\n }\n const maxDepth = options.maxDepth ?? 12;\n const depth = measureDepth(toolArgs);\n if (depth > maxDepth) {\n evidence.push({ ruleId, path: \"args\", preview: `depth=${depth}` });\n }\n const maxLen = options.maxStringLength ?? 16_384;\n const longest = maxStringLength(toolArgs);\n if (longest > maxLen) {\n evidence.push({ ruleId, path: \"args\", preview: `maxStringLength=${longest}` });\n }\n if (evidence.length === 0) {\n return pass(ruleId, \"Tool arguments within configured bounds.\");\n }\n return fail(ruleId, \"Unsafe or oversized tool arguments detected.\", evidence);\n}\n\nexport function evaluatePromptInjection(\n text: string,\n options: PromptInjectionOptions = {},\n): GuardrailResult {\n const ruleId = \"guardrail.prompt-injection\";\n const patterns = options.patterns ?? DEFAULT_INJECTION_PATTERNS;\n const haystack = text.toLowerCase();\n const evidence: GuardrailEvidence[] = [];\n for (const pattern of patterns) {\n const needle = pattern.toLowerCase();\n if (needle.length > 0 && haystack.includes(needle)) {\n evidence.push({ ruleId, match: pattern, preview: boundedPreview(text) });\n }\n }\n if (evidence.length === 0) {\n return pass(ruleId, \"No prompt-injection patterns matched.\");\n }\n return fail(ruleId, `Matched ${evidence.length} injection pattern(s).`, evidence, \"warning\");\n}\n\nfunction validateSchemaField(\n value: unknown,\n field: StructuredOutputOptions[\"schema\"][string],\n path: string,\n evidence: GuardrailEvidence[],\n): void {\n const ruleId = \"guardrail.structured-output\";\n if (field.type) {\n const actual =\n value === null\n ? \"null\"\n : Array.isArray(value)\n ? \"array\"\n : typeof value;\n if (actual !== field.type) {\n evidence.push({ ruleId, path, preview: `expected ${field.type}, got ${actual}` });\n return;\n }\n }\n if (field.enum && !field.enum.some((item) => Object.is(item, value))) {\n evidence.push({ ruleId, path, preview: \"value not in enum\" });\n }\n if (field.type === \"object\" && field.required && value && typeof value === \"object\" && !Array.isArray(value)) {\n const record = value as Record<string, unknown>;\n for (const key of field.required) {\n if (!(key in record)) {\n evidence.push({ ruleId, path: `${path}.${key}`, preview: \"missing required key\" });\n }\n }\n }\n}\n\nexport function evaluateStructuredOutput(\n value: unknown,\n options: StructuredOutputOptions,\n): GuardrailResult {\n const ruleId = \"guardrail.structured-output\";\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return fail(ruleId, \"Structured output must be an object.\", [\n { ruleId, preview: typeof value },\n ]);\n }\n const record = value as Record<string, unknown>;\n const evidence: GuardrailEvidence[] = [];\n for (const [key, field] of Object.entries(options.schema)) {\n validateSchemaField(record[key], field, key, evidence);\n }\n if (evidence.length === 0) {\n return pass(ruleId, \"Structured output matches schema subset.\");\n }\n return fail(ruleId, \"Structured output schema violation.\", evidence);\n}\n\nexport function evaluateOversizeOutput(\n value: unknown,\n options: OversizeOutputOptions = {},\n): GuardrailResult {\n const ruleId = \"guardrail.oversize-output\";\n const text = typeof value === \"string\" ? value : JSON.stringify(value);\n const maxLength = options.maxLength ?? options.maxSerializedLength ?? 32_768;\n if (text.length <= maxLength) {\n return pass(ruleId, \"Output within size limits.\");\n }\n return fail(ruleId, `Output exceeds max length (${text.length} > ${maxLength}).`, [\n { ruleId, preview: `length=${text.length}` },\n ]);\n}\n\nexport function evaluateRequiredJsonShape(\n value: unknown,\n options: RequiredJsonShapeOptions,\n): GuardrailResult {\n const ruleId = \"guardrail.required-json-shape\";\n let parsed: unknown = value;\n if (typeof value === \"string\") {\n try {\n parsed = JSON.parse(value);\n } catch {\n return fail(ruleId, \"Value is not valid JSON.\", [{ ruleId, preview: boundedPreview(value) }]);\n }\n }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return fail(ruleId, \"JSON value must be an object.\", [{ ruleId, preview: typeof parsed }]);\n }\n const record = parsed as Record<string, unknown>;\n const evidence: GuardrailEvidence[] = [];\n for (const key of options.requiredKeys) {\n if (!(key in record)) {\n evidence.push({ ruleId, path: key, preview: \"missing required key\" });\n }\n }\n if (evidence.length === 0) {\n return pass(ruleId, \"Required JSON keys present.\");\n }\n return fail(ruleId, \"Missing required JSON keys.\", evidence);\n}\n","import {\n evaluateBannedPhrase,\n evaluateOversizeOutput,\n evaluatePiiLeak,\n evaluatePromptInjection,\n evaluateRequiredJsonShape,\n evaluateStructuredOutput,\n evaluateUnsafeToolArgs,\n} from \"./rules.js\";\nimport type {\n GuardrailInput,\n GuardrailResult,\n GuardrailRuleId,\n GuardrailRunResult,\n RunGuardrailsOptions,\n} from \"./types.js\";\n\nconst ALL_RULES: GuardrailRuleId[] = [\n \"guardrail.banned-phrase\",\n \"guardrail.pii-leak\",\n \"guardrail.unsafe-tool-args\",\n \"guardrail.prompt-injection\",\n \"guardrail.structured-output\",\n \"guardrail.oversize-output\",\n \"guardrail.required-json-shape\",\n];\n\nfunction isErrorFailure(result: GuardrailResult): boolean {\n return result.status === \"fail\" && result.severity === \"error\";\n}\n\nfunction runRule(ruleId: GuardrailRuleId, input: GuardrailInput, options: RunGuardrailsOptions): GuardrailResult | undefined {\n switch (ruleId) {\n case \"guardrail.banned-phrase\": {\n if (!options.bannedPhrase || input.text === undefined) return undefined;\n return evaluateBannedPhrase(input.text, options.bannedPhrase);\n }\n case \"guardrail.pii-leak\": {\n if (input.value === undefined && input.text === undefined) return undefined;\n return evaluatePiiLeak(input.value ?? input.text, options.piiLeak);\n }\n case \"guardrail.unsafe-tool-args\": {\n if (!input.toolName) return undefined;\n return evaluateUnsafeToolArgs(input.toolName, input.toolArgs ?? {}, options.unsafeToolArgs);\n }\n case \"guardrail.prompt-injection\": {\n if (input.text === undefined) return undefined;\n return evaluatePromptInjection(input.text, options.promptInjection);\n }\n case \"guardrail.structured-output\": {\n if (!options.structuredOutput || input.value === undefined) return undefined;\n return evaluateStructuredOutput(input.value, options.structuredOutput);\n }\n case \"guardrail.oversize-output\": {\n if (input.value === undefined && input.text === undefined) return undefined;\n return evaluateOversizeOutput(input.value ?? input.text, options.oversizeOutput);\n }\n case \"guardrail.required-json-shape\": {\n if (!options.requiredJsonShape || (input.value === undefined && input.text === undefined)) return undefined;\n return evaluateRequiredJsonShape(input.value ?? input.text!, options.requiredJsonShape);\n }\n default:\n return undefined;\n }\n}\n\nexport function runGuardrails(input: GuardrailInput, options: RunGuardrailsOptions = {}): GuardrailRunResult {\n const selected = options.rules ?? ALL_RULES;\n const results: GuardrailResult[] = [];\n for (const ruleId of selected) {\n const result = runRule(ruleId, input, options);\n if (result) results.push(result);\n }\n const ok = !results.some(isErrorFailure);\n return { ok, results };\n}\n\nexport { ALL_RULES as DEFAULT_GUARDRAIL_RULES };\n","import { runCircuits, type CircuitResult, type CircuitRuleId, type RunCircuitsOptions } from \"@agent-inspect/circuit\";\nimport {\n runGuardrails,\n type GuardrailResult,\n type GuardrailRuleId,\n type RunGuardrailsOptions,\n} from \"@agent-inspect/guardrails\";\n\nimport type { EvalContext, EvalFinding, EvalRule } from \"./index.js\";\n\nfunction pass(ruleId: string, message: string): EvalFinding {\n return { ruleId, status: \"pass\", severity: \"info\", message, evidence: [] };\n}\n\nfunction failFinding(\n ruleId: string,\n message: string,\n expected?: unknown,\n actual?: unknown,\n): EvalFinding {\n return {\n ruleId,\n status: \"fail\",\n severity: \"error\",\n message,\n expected,\n actual,\n evidence: [],\n };\n}\n\nfunction warnFinding(ruleId: string, message: string, actual?: unknown): EvalFinding {\n return {\n ruleId,\n status: \"warning\",\n severity: \"warning\",\n message,\n actual,\n evidence: [],\n };\n}\n\nfunction collectAnswerText(context: EvalContext): string {\n const parts: string[] = [];\n for (const node of context.nodes) {\n const attrs = node.event.attributes ?? {};\n for (const key of [\"answer\", \"output\", \"text\", \"content\"]) {\n const value = attrs[key];\n if (typeof value === \"string\") parts.push(value);\n }\n }\n return parts.join(\"\\n\");\n}\n\nexport interface EvalGuardrailRuleOptions extends RunGuardrailsOptions {\n rules: readonly GuardrailRuleId[];\n}\n\nexport interface EvalCircuitRuleOptions extends RunCircuitsOptions {\n rules: readonly CircuitRuleId[];\n}\n\nexport function createEvalGuardrailRule(options: EvalGuardrailRuleOptions): EvalRule {\n return {\n id: \"eval.guardrails\",\n category: \"safety\",\n evaluate(context) {\n const text = collectAnswerText(context);\n const run = runGuardrails({ text, value: context.events }, options);\n return run.results.flatMap((result: GuardrailResult) => {\n if (result.status === \"pass\") return [pass(result.ruleId, result.message)];\n if (result.status === \"warn\") return [warnFinding(result.ruleId, result.message)];\n return [failFinding(result.ruleId, result.message)];\n });\n },\n };\n}\n\nexport function createEvalCircuitRule(options: EvalCircuitRuleOptions): EvalRule {\n return {\n id: \"eval.circuits\",\n category: \"structure\",\n evaluate(context) {\n const events = context.events.map((event) => ({\n eventId: event.eventId,\n runId: event.runId,\n name: event.name,\n kind: event.kind,\n parentId: event.parentId,\n startedAt: event.startedAt,\n endedAt: event.endedAt,\n durationMs: event.durationMs,\n attributes: event.attributes,\n status: event.status,\n }));\n const run = runCircuits(events, options);\n return run.results.flatMap((result: CircuitResult) => {\n if (result.status === \"closed\") return [pass(result.ruleId, result.message)];\n if (result.status === \"warn\") return [warnFinding(result.ruleId, result.message, result.evidence[0]?.count)];\n return [failFinding(result.ruleId, result.message, result.evidence[0]?.threshold, result.evidence[0]?.count)];\n });\n },\n };\n}\n","import { fileURLToPath } from \"node:url\";\n\nimport {\n openTrace,\n TraceReadError,\n type TraceInput,\n type TraceReadResult,\n} from \"agent-inspect/readers\";\n\nexport type EvalStatus = \"pass\" | \"fail\" | \"error\";\nexport type EvalSeverity = \"error\" | \"warning\" | \"info\";\nexport type EvalFindingStatus = \"pass\" | \"fail\" | \"warning\";\nexport type EvalRuleCategory =\n | \"run\"\n | \"tool\"\n | \"llm\"\n | \"retrieval\"\n | \"structure\"\n | \"safety\"\n | \"custom\";\n\nexport interface EvalEvidence {\n runId?: string;\n eventId?: string;\n parentId?: string;\n traceId?: string;\n spanId?: string;\n kind?: string;\n name?: string;\n path?: string;\n}\n\nexport interface EvalFinding {\n ruleId: string;\n status: EvalFindingStatus;\n severity: EvalSeverity;\n message: string;\n expected?: unknown;\n actual?: unknown;\n evidence: EvalEvidence[];\n}\n\nexport interface EvalDiagnostic {\n code:\n | \"AI_EVAL_TRACE_UNREADABLE\"\n | \"AI_EVAL_UNSUPPORTED_FORMAT\"\n | \"AI_EVAL_AMBIGUOUS_FORMAT\"\n | \"AI_EVAL_RUN_SELECTION_REQUIRED\"\n | \"AI_EVAL_RULE_FAILED\"\n | \"AI_EVAL_INVALID_ARGUMENTS\"\n | \"AI_EVAL_INVALID_CONFIG\"\n | \"AI_EVAL_CONFIG_LOAD_FAILED\";\n severity: EvalSeverity;\n message: string;\n ruleId?: string;\n}\n\nexport type EvalDiagnosticCode = EvalDiagnostic[\"code\"];\n\nexport interface EvalSummary {\n passed: number;\n failed: number;\n warnings: number;\n errors: number;\n}\n\nexport interface EvalRunResult {\n ok: boolean;\n status: EvalStatus;\n format: string;\n runId?: string;\n summary: EvalSummary;\n findings: EvalFinding[];\n diagnostics: EvalDiagnostic[];\n}\n\nexport interface EvalInput {\n trace: string | URL | TraceReadResult;\n runId?: string;\n format?: \"agent-inspect-jsonl\" | \"openinference-json\" | \"otlp-json\" | \"auto\";\n}\n\nexport interface EvalRunOptions {\n checks?: readonly EvalRule[];\n runId?: string;\n format?: EvalInput[\"format\"];\n}\n\nexport type EvalRunInput = EvalInput | string | TraceReadResult;\n\n/** Experimental options for deterministic answer/context overlap checks. */\nexport interface ContextOverlapOptions {\n minOverlap?: number;\n minSharedTerms?: number;\n answerKeys?: readonly string[];\n contextKeys?: readonly string[];\n}\n\n/** Experimental options for deterministic quote grounding checks. */\nexport interface QuoteOverlapOptions {\n answerKeys?: readonly string[];\n contextKeys?: readonly string[];\n minQuoteLength?: number;\n requireQuote?: boolean;\n}\n\n/** Experimental options for deterministic citation presence checks. */\nexport interface CitationPresenceOptions {\n answerKeys?: readonly string[];\n citationKeys?: readonly string[];\n}\n\n/** Experimental options for deterministic source-id checks. */\nexport interface RequiredSourceIdsOptions {\n sourceIdKeys?: readonly string[];\n}\n\n/** Experimental options for deterministic answer length checks. */\nexport interface AnswerLengthBoundsOptions {\n minCharacters?: number;\n maxCharacters?: number;\n minWords?: number;\n maxWords?: number;\n answerKeys?: readonly string[];\n}\n\n/** Experimental options for deterministic unsupported-phrase checks. */\nexport interface BannedUnsupportedPhrasesOptions {\n answerKeys?: readonly string[];\n}\n\nexport interface EvalRule {\n id: string;\n category: EvalRuleCategory;\n severity?: EvalSeverity;\n evaluate(context: EvalContext): readonly EvalFinding[];\n}\n\ntype EvalRunTree = TraceReadResult[\"runs\"][number];\ntype EvalNode = EvalRunTree[\"children\"][number];\ntype EvalEvent = EvalNode[\"event\"];\n\nexport interface EvalContext {\n format: string;\n run: EvalRunTree;\n nodes: readonly EvalNode[];\n events: readonly TraceReadResult[\"events\"][number][];\n}\n\nfunction isTraceReadResult(value: unknown): value is TraceReadResult {\n return (\n value !== null &&\n typeof value === \"object\" &&\n \"runs\" in value &&\n \"events\" in value &&\n \"format\" in value\n );\n}\n\nfunction traceInputFrom(value: string | URL): TraceInput {\n // URL.pathname is not a filesystem path on Windows (leading slash before\n // the drive letter); fileURLToPath handles file: URLs on every platform.\n return { type: \"file\", path: value instanceof URL ? fileURLToPath(value) : value };\n}\n\nasync function resolveRead(\n input: EvalRunInput,\n options: EvalRunOptions,\n): Promise<{ read?: TraceReadResult; runId?: string; diagnostics: EvalDiagnostic[] }> {\n try {\n if (typeof input === \"string\") {\n const read = await openTrace(traceInputFrom(input), {\n ...(options.format !== undefined && options.format !== \"auto\"\n ? { format: options.format }\n : {}),\n });\n return { read, runId: options.runId, diagnostics: [] };\n }\n\n if (isTraceReadResult(input)) {\n return { read: input, runId: options.runId, diagnostics: [] };\n }\n\n if (isTraceReadResult(input.trace)) {\n return { read: input.trace, runId: options.runId ?? input.runId, diagnostics: [] };\n }\n\n const format = options.format ?? input.format;\n const read = await openTrace(traceInputFrom(input.trace), {\n ...(format !== undefined && format !== \"auto\" ? { format } : {}),\n });\n return { read, runId: options.runId ?? input.runId, diagnostics: [] };\n } catch (error) {\n return { diagnostics: [diagnosticFromError(error)] };\n }\n}\n\nfunction diagnosticFromError(error: unknown): EvalDiagnostic {\n if (error instanceof TraceReadError) {\n const code =\n error.code === \"unsupported_format\"\n ? \"AI_EVAL_UNSUPPORTED_FORMAT\"\n : error.code === \"ambiguous_format\"\n ? \"AI_EVAL_AMBIGUOUS_FORMAT\"\n : \"AI_EVAL_TRACE_UNREADABLE\";\n return { code, severity: \"error\", message: error.message };\n }\n return {\n code: \"AI_EVAL_TRACE_UNREADABLE\",\n severity: \"error\",\n message: error instanceof Error ? error.message : String(error),\n };\n}\n\nfunction flatten(nodes: readonly EvalNode[]): EvalNode[] {\n return nodes.flatMap((node) => [node, ...flatten(node.children)]);\n}\n\nfunction selectRun(\n read: TraceReadResult,\n runId: string | undefined,\n): { run?: EvalRunTree; diagnostics: EvalDiagnostic[] } {\n if (runId !== undefined) {\n const run = read.runs.find((candidate) => candidate.runId === runId);\n return run === undefined\n ? {\n diagnostics: [\n {\n code: \"AI_EVAL_RUN_SELECTION_REQUIRED\",\n severity: \"error\",\n message: `Run not found: ${runId}.`,\n },\n ],\n }\n : { run, diagnostics: [] };\n }\n\n if (read.runs.length === 1) {\n return { run: read.runs[0], diagnostics: [] };\n }\n\n if (read.runs.length === 0) {\n return {\n diagnostics: [\n {\n code: \"AI_EVAL_RUN_SELECTION_REQUIRED\",\n severity: \"error\",\n message: \"No runs are available for eval.\",\n },\n ],\n };\n }\n\n return {\n diagnostics: [\n {\n code: \"AI_EVAL_RUN_SELECTION_REQUIRED\",\n severity: \"error\",\n message: \"Multiple runs are available; select a run before eval.\",\n },\n ],\n };\n}\n\nfunction errorResult(\n format: string,\n diagnostics: readonly EvalDiagnostic[],\n runId?: string,\n): EvalRunResult {\n const errors = diagnostics.filter((item) => item.severity === \"error\").length;\n return {\n ok: false,\n status: \"error\",\n format,\n ...(runId !== undefined ? { runId } : {}),\n summary: { passed: 0, failed: 0, warnings: 0, errors },\n findings: [],\n diagnostics: [...diagnostics],\n };\n}\n\nfunction normalizeFinding(rule: EvalRule, finding: EvalFinding): EvalFinding {\n return {\n ...finding,\n ruleId: finding.ruleId || rule.id,\n severity: finding.severity ?? rule.severity ?? \"error\",\n evidence: [...finding.evidence],\n };\n}\n\nfunction compareFindings(a: EvalFinding, b: EvalFinding): number {\n const aEvidence = a.evidence[0];\n const bEvidence = b.evidence[0];\n return (\n a.ruleId.localeCompare(b.ruleId) ||\n (aEvidence?.runId ?? \"\").localeCompare(bEvidence?.runId ?? \"\") ||\n (aEvidence?.eventId ?? \"\").localeCompare(bEvidence?.eventId ?? \"\") ||\n (aEvidence?.path ?? \"\").localeCompare(bEvidence?.path ?? \"\") ||\n a.message.localeCompare(b.message)\n );\n}\n\nfunction summarize(findings: readonly EvalFinding[], ruleCount: number): EvalSummary {\n const failed = findings.filter((item) => item.status === \"fail\").length;\n const warnings = findings.filter((item) => item.status === \"warning\").length;\n const errors = findings.filter((item) => item.severity === \"error\").length;\n return {\n passed: Math.max(0, ruleCount - failed - warnings),\n failed,\n warnings,\n errors,\n };\n}\n\nfunction defaultRules(): EvalRule[] {\n return [checks.requireSuccess()];\n}\n\nexport async function evalRun(\n input: EvalRunInput,\n options: EvalRunOptions = {},\n): Promise<EvalRunResult> {\n const resolved = await resolveRead(input, options);\n if (resolved.read === undefined) {\n return errorResult(\"unknown\", resolved.diagnostics);\n }\n\n const selected = selectRun(resolved.read, resolved.runId);\n if (selected.run === undefined) {\n return errorResult(resolved.read.format, selected.diagnostics, resolved.runId);\n }\n\n const rules = [...(options.checks ?? defaultRules())].sort((a, b) =>\n a.id.localeCompare(b.id),\n );\n const context: EvalContext = {\n format: resolved.read.format,\n run: selected.run,\n nodes: flatten(selected.run.children),\n events: resolved.read.events.filter((event) => event.runId === selected.run?.runId),\n };\n\n const diagnostics: EvalDiagnostic[] = [];\n const findings: EvalFinding[] = [];\n for (const rule of rules) {\n try {\n findings.push(...rule.evaluate(context).map((finding) => normalizeFinding(rule, finding)));\n } catch (error) {\n diagnostics.push({\n code: \"AI_EVAL_RULE_FAILED\",\n severity: \"error\",\n ruleId: rule.id,\n message: `Eval rule ${rule.id} failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n });\n }\n }\n\n if (diagnostics.length > 0) {\n return errorResult(resolved.read.format, diagnostics, selected.run.runId);\n }\n\n const sortedFindings = findings.sort(compareFindings);\n const summary = summarize(sortedFindings, rules.length);\n const status = summary.failed > 0 ? \"fail\" : \"pass\";\n return {\n ok: status === \"pass\",\n status,\n format: resolved.read.format,\n runId: selected.run.runId,\n summary,\n findings: sortedFindings,\n diagnostics: [],\n };\n}\n\nfunction evidenceForRun(run: EvalRunTree, path?: string): EvalEvidence[] {\n return [{ runId: run.runId, ...(path !== undefined ? { path } : {}) }];\n}\n\nfunction evidenceForEvent(event: EvalEvent, path?: string): EvalEvidence[] {\n return [\n {\n runId: event.runId,\n eventId: event.eventId,\n ...(event.parentId !== undefined ? { parentId: event.parentId } : {}),\n kind: event.kind,\n name: event.name,\n ...(path !== undefined ? { path } : {}),\n },\n ];\n}\n\nfunction fail(\n ruleId: string,\n message: string,\n evidence: EvalEvidence[],\n expected?: unknown,\n actual?: unknown,\n): EvalFinding {\n return {\n ruleId,\n status: \"fail\",\n severity: \"error\",\n message,\n ...(expected !== undefined ? { expected } : {}),\n ...(actual !== undefined ? { actual } : {}),\n evidence,\n };\n}\n\nfunction nodeNames(nodes: readonly EvalNode[], kind?: string): string[] {\n return nodes\n .filter((node) => kind === undefined || node.event.kind === kind)\n .map((node) => node.event.name)\n .sort((a, b) => a.localeCompare(b));\n}\n\nfunction hasAttribute(node: EvalNode, key: string): boolean {\n return (\n node.event.attributes !== undefined &&\n Object.prototype.hasOwnProperty.call(node.event.attributes, key)\n );\n}\n\nfunction numericAttribute(node: EvalNode, keys: readonly string[]): number | undefined {\n const attrs = node.event.attributes;\n if (attrs === undefined) return undefined;\n for (const key of keys) {\n const value = attrs[key];\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n }\n return undefined;\n}\n\nfunction totalTokenCount(events: readonly TraceReadResult[\"events\"][number][]): number {\n return events.reduce((total, event) => {\n const usage = event.tokenUsage;\n if (usage?.total !== undefined) return total + usage.total;\n return total + (usage?.input ?? 0) + (usage?.output ?? 0);\n }, 0);\n}\n\nfunction createRule(\n id: string,\n category: EvalRuleCategory,\n evaluate: EvalRule[\"evaluate\"],\n): EvalRule {\n return { id, category, severity: \"error\", evaluate };\n}\n\nconst DEFAULT_ANSWER_KEYS = [\n \"answer\",\n \"finalAnswer\",\n \"final\",\n \"response\",\n \"result\",\n \"output\",\n \"outputPreview\",\n \"completion\",\n \"text\",\n] as const;\n\nconst DEFAULT_CONTEXT_KEYS = [\n \"context\",\n \"contexts\",\n \"document\",\n \"documents\",\n \"retrieved\",\n \"retrieval\",\n \"chunks\",\n \"chunk\",\n \"source\",\n \"sources\",\n \"sourceText\",\n] as const;\n\nconst DEFAULT_CITATION_KEYS = [\n \"citation\",\n \"citations\",\n \"reference\",\n \"references\",\n \"sourceId\",\n \"sourceIds\",\n \"source_id\",\n \"source_ids\",\n] as const;\n\nconst DEFAULT_SOURCE_ID_KEYS = [\n ...DEFAULT_CITATION_KEYS,\n \"id\",\n \"ids\",\n \"documentId\",\n \"documentIds\",\n \"docId\",\n \"docIds\",\n] as const;\n\nconst DEFAULT_BANNED_UNSUPPORTED_PHRASES = [\n \"i don't have enough information\",\n \"i do not have enough information\",\n \"not enough context\",\n \"cannot determine from the context\",\n \"unable to determine from the provided context\",\n] as const;\n\nconst STOP_WORDS = new Set([\n \"a\",\n \"an\",\n \"and\",\n \"are\",\n \"but\",\n \"for\",\n \"from\",\n \"have\",\n \"into\",\n \"not\",\n \"that\",\n \"the\",\n \"their\",\n \"this\",\n \"was\",\n \"were\",\n \"with\",\n \"you\",\n \"your\",\n]);\n\ninterface TextField {\n text: string;\n node: EvalNode;\n path: string;\n}\n\nfunction normalizeKey(key: string): string {\n return key.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n}\n\nfunction keySet(keys: readonly string[]): Set<string> {\n return new Set(keys.map(normalizeKey));\n}\n\nfunction valuesAsStrings(value: unknown, depth = 0): string[] {\n if (depth > 5) return [];\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n return trimmed.length > 0 ? [trimmed] : [];\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") return [String(value)];\n if (Array.isArray(value)) {\n return value.flatMap((item) => valuesAsStrings(item, depth + 1));\n }\n if (value !== null && typeof value === \"object\") {\n return Object.values(value as Record<string, unknown>).flatMap((item) =>\n valuesAsStrings(item, depth + 1),\n );\n }\n return [];\n}\n\nfunction collectTextFields(\n nodes: readonly EvalNode[],\n keys: readonly string[],\n preferredKinds: readonly string[] = [],\n): TextField[] {\n const wanted = keySet(keys);\n const preferred = new Set(preferredKinds);\n const orderedNodes = [...nodes].sort((a, b) => {\n const aPreferred = preferred.has(a.event.kind) ? 0 : 1;\n const bPreferred = preferred.has(b.event.kind) ? 0 : 1;\n return aPreferred - bPreferred || a.event.eventId.localeCompare(b.event.eventId);\n });\n const fields: TextField[] = [];\n for (const node of orderedNodes) {\n const attrs = node.event.attributes;\n if (attrs === undefined) continue;\n for (const [key, value] of Object.entries(attrs)) {\n if (!wanted.has(normalizeKey(key))) continue;\n for (const text of valuesAsStrings(value)) {\n fields.push({ text, node, path: `attributes.${key}` });\n }\n }\n }\n return fields;\n}\n\nfunction tokenize(text: string): string[] {\n return [...text.toLowerCase().matchAll(/[a-z0-9][a-z0-9'-]{2,}/g)]\n .map((match) => match[0].replace(/^['-]+|['-]+$/g, \"\"))\n .filter((token) => token.length > 2 && !STOP_WORDS.has(token));\n}\n\nfunction firstEvidence(\n fields: readonly TextField[],\n run: EvalRunTree,\n path: string,\n): EvalEvidence[] {\n const first = fields[0];\n return first === undefined\n ? evidenceForRun(run, path)\n : evidenceForEvent(first.node.event, first.path);\n}\n\nfunction collectSourceIds(\n nodes: readonly EvalNode[],\n keys: readonly string[],\n): string[] {\n const wanted = keySet(keys);\n const ids = new Set<string>();\n for (const node of nodes) {\n const attrs = node.event.attributes;\n if (attrs === undefined) continue;\n for (const [key, value] of Object.entries(attrs)) {\n if (!wanted.has(normalizeKey(key))) continue;\n for (const candidate of valuesAsStrings(value)) {\n const trimmed = candidate.trim();\n if (trimmed.length > 0 && trimmed.length <= 128) ids.add(trimmed);\n }\n }\n }\n return [...ids].sort((a, b) => a.localeCompare(b));\n}\n\nfunction citationCount(answer: string, citationFields: readonly TextField[]): number {\n const inline =\n answer.match(/\\[[^\\]\\n]{1,40}\\]|\\([A-Za-z][A-Za-z0-9_-]{0,39}\\)/g)?.length ?? 0;\n return inline + citationFields.length;\n}\n\nfunction quotedSnippets(text: string, minLength: number): string[] {\n const snippets = new Set<string>();\n const pattern = /\"([^\"\\n]+)\"|'([^'\\n]+)'|“([^”\\n]+)”/g;\n for (const match of text.matchAll(pattern)) {\n const snippet = (match[1] ?? match[2] ?? match[3] ?? \"\").trim();\n if (snippet.length >= minLength) snippets.add(snippet);\n }\n return [...snippets].sort((a, b) => a.localeCompare(b));\n}\n\nfunction wordCount(text: string): number {\n return tokenize(text).length;\n}\n\nexport const checks = {\n requireSuccess(): EvalRule {\n return createRule(\"eval.requireSuccess\", \"run\", (context) =>\n context.run.status === \"ok\"\n ? []\n : [\n fail(\n \"eval.requireSuccess\",\n \"Run did not complete successfully.\",\n evidenceForRun(context.run, \"status\"),\n \"ok\",\n context.run.status ?? \"unknown\",\n ),\n ],\n );\n },\n\n requiredTools(required: readonly string[]): EvalRule {\n const expected = [...required].sort((a, b) => a.localeCompare(b));\n return createRule(\"eval.requiredTools\", \"tool\", (context) => {\n const tools = new Set(nodeNames(context.nodes, \"TOOL\"));\n return expected\n .filter((name) => !tools.has(name))\n .map((name) =>\n fail(\n \"eval.requiredTools\",\n `Required tool ${name} did not appear.`,\n evidenceForRun(context.run, \"children\"),\n name,\n [...tools].sort((a, b) => a.localeCompare(b)),\n ),\n );\n });\n },\n\n forbiddenTools(forbidden: readonly string[]): EvalRule {\n const blocked = [...forbidden].sort((a, b) => a.localeCompare(b));\n return createRule(\"eval.forbiddenTools\", \"tool\", (context) =>\n context.nodes\n .filter((node) => node.event.kind === \"TOOL\" && blocked.includes(node.event.name))\n .map((node) =>\n fail(\n \"eval.forbiddenTools\",\n `Forbidden tool ${node.event.name} appeared.`,\n evidenceForEvent(node.event, \"name\"),\n \"tool absent\",\n node.event.name,\n ),\n ),\n );\n },\n\n maxDurationMs(maxDurationMs: number): EvalRule {\n return createRule(\"eval.maxDurationMs\", \"run\", (context) =>\n context.run.durationMs !== undefined && context.run.durationMs > maxDurationMs\n ? [\n fail(\n \"eval.maxDurationMs\",\n `Run duration exceeded ${maxDurationMs}ms.`,\n evidenceForRun(context.run, \"durationMs\"),\n { maxDurationMs },\n context.run.durationMs,\n ),\n ]\n : [],\n );\n },\n\n maxDepth(maxDepth: number): EvalRule {\n return createRule(\"eval.maxDepth\", \"structure\", (context) => {\n const deepest = context.nodes.reduce<EvalNode | undefined>(\n (current, node) =>\n current === undefined || node.depth > current.depth ? node : current,\n undefined,\n );\n return deepest !== undefined && deepest.depth > maxDepth\n ? [\n fail(\n \"eval.maxDepth\",\n `Run tree depth exceeded ${maxDepth}.`,\n evidenceForEvent(deepest.event, \"depth\"),\n { maxDepth },\n deepest.depth,\n ),\n ]\n : [];\n });\n },\n\n maxRetries(maxRetries: number): EvalRule {\n return createRule(\"eval.maxRetries\", \"structure\", (context) =>\n context.nodes.flatMap((node) => {\n const retries = numericAttribute(node, [\"retryCount\", \"retries\", \"attempt\"]);\n return retries !== undefined && retries > maxRetries\n ? [\n fail(\n \"eval.maxRetries\",\n `Retry count exceeded ${maxRetries}.`,\n evidenceForEvent(node.event, \"attributes.retryCount\"),\n { maxRetries },\n retries,\n ),\n ]\n : [];\n }),\n );\n },\n\n maxTotalTokens(maxTotalTokens: number): EvalRule {\n return createRule(\"eval.maxTotalTokens\", \"llm\", (context) => {\n const total = totalTokenCount(context.events);\n return total > maxTotalTokens\n ? [\n fail(\n \"eval.maxTotalTokens\",\n `Total token usage exceeded ${maxTotalTokens}.`,\n evidenceForRun(context.run, \"tokenUsage.total\"),\n { maxTotalTokens },\n total,\n ),\n ]\n : [];\n });\n },\n\n noFailedSteps(): EvalRule {\n return createRule(\"eval.noFailedSteps\", \"run\", (context) =>\n context.nodes\n .filter((node) => node.event.status === \"error\" || node.event.kind === \"ERROR\")\n .map((node) =>\n fail(\n \"eval.noFailedSteps\",\n \"Run contains a failed step or error node.\",\n evidenceForEvent(node.event, \"status\"),\n \"no failed nodes\",\n node.event.status ?? node.event.kind,\n ),\n ),\n );\n },\n\n requiredRetrievalBeforeGeneration(): EvalRule {\n return createRule(\"eval.requiredRetrievalBeforeGeneration\", \"retrieval\", (context) => {\n const firstLlmIndex = context.nodes.findIndex((node) => node.event.kind === \"LLM\");\n if (firstLlmIndex === -1) return [];\n const retrievalIndex = context.nodes.findIndex(\n (node, index) => index < firstLlmIndex && node.event.kind === \"RETRIEVER\",\n );\n return retrievalIndex === -1\n ? [\n fail(\n \"eval.requiredRetrievalBeforeGeneration\",\n \"No retrieval step appeared before the first LLM generation.\",\n evidenceForEvent(context.nodes[firstLlmIndex].event, \"kind\"),\n \"RETRIEVER before LLM\",\n \"LLM before RETRIEVER\",\n ),\n ]\n : [];\n });\n },\n\n requiredDecisionMetadata(keys: readonly string[]): EvalRule {\n const required = [...keys].sort((a, b) => a.localeCompare(b));\n return createRule(\"eval.requiredDecisionMetadata\", \"structure\", (context) => {\n const decisions = context.nodes.filter((node) => node.event.kind === \"DECISION\");\n if (decisions.length === 0) {\n return [\n fail(\n \"eval.requiredDecisionMetadata\",\n \"No decision node is available for required metadata.\",\n evidenceForRun(context.run, \"children\"),\n { decisionMetadata: required },\n \"no decision nodes\",\n ),\n ];\n }\n return decisions.flatMap((node) =>\n required\n .filter((key) => !hasAttribute(node, key))\n .map((key) =>\n fail(\n \"eval.requiredDecisionMetadata\",\n `Decision metadata ${key} is missing.`,\n evidenceForEvent(node.event, `attributes.${key}`),\n key,\n \"missing\",\n ),\n ),\n );\n });\n },\n\n contextOverlap(options: ContextOverlapOptions = {}): EvalRule {\n const minOverlap = options.minOverlap ?? 0.1;\n const minSharedTerms = options.minSharedTerms ?? 1;\n const answerKeys = options.answerKeys ?? DEFAULT_ANSWER_KEYS;\n const contextKeys = options.contextKeys ?? DEFAULT_CONTEXT_KEYS;\n return createRule(\"eval.contextOverlap\", \"retrieval\", (context) => {\n const answers = collectTextFields(context.nodes, answerKeys, [\"RESULT\", \"LLM\", \"AGENT\"]);\n const contexts = collectTextFields(context.nodes, contextKeys, [\"RETRIEVER\", \"TOOL\"]);\n if (answers.length === 0 || contexts.length === 0) {\n return [\n fail(\n \"eval.contextOverlap\",\n \"Answer and context text are required for overlap evaluation.\",\n firstEvidence(answers.length > 0 ? answers : contexts, context.run, \"children\"),\n { answer: \"present\", context: \"present\" },\n { answerFields: answers.length, contextFields: contexts.length },\n ),\n ];\n }\n\n const answerTerms = new Set(tokenize(answers.map((field) => field.text).join(\" \")));\n const contextTerms = new Set(tokenize(contexts.map((field) => field.text).join(\" \")));\n const sharedTerms = [...answerTerms].filter((term) => contextTerms.has(term)).length;\n const overlap = answerTerms.size === 0 ? 0 : sharedTerms / answerTerms.size;\n return sharedTerms < minSharedTerms || overlap < minOverlap\n ? [\n fail(\n \"eval.contextOverlap\",\n \"Answer text did not sufficiently overlap retrieved context.\",\n firstEvidence(answers, context.run, \"attributes.answer\"),\n { minOverlap, minSharedTerms },\n {\n answerTerms: answerTerms.size,\n contextTerms: contextTerms.size,\n sharedTerms,\n overlap: Number(overlap.toFixed(4)),\n },\n ),\n ]\n : [];\n });\n },\n\n quoteOverlap(options: QuoteOverlapOptions = {}): EvalRule {\n const answerKeys = options.answerKeys ?? DEFAULT_ANSWER_KEYS;\n const contextKeys = options.contextKeys ?? DEFAULT_CONTEXT_KEYS;\n const minQuoteLength = options.minQuoteLength ?? 6;\n const requireQuote = options.requireQuote ?? true;\n return createRule(\"eval.quoteOverlap\", \"retrieval\", (context) => {\n const answers = collectTextFields(context.nodes, answerKeys, [\"RESULT\", \"LLM\", \"AGENT\"]);\n const contexts = collectTextFields(context.nodes, contextKeys, [\"RETRIEVER\", \"TOOL\"]);\n const answerText = answers.map((field) => field.text).join(\" \");\n const contextText = contexts.map((field) => field.text).join(\" \").toLowerCase();\n const quotes = quotedSnippets(answerText, minQuoteLength);\n if (quotes.length === 0) {\n return requireQuote\n ? [\n fail(\n \"eval.quoteOverlap\",\n \"Answer did not contain a quote for overlap evaluation.\",\n firstEvidence(answers, context.run, \"attributes.answer\"),\n { quotedText: \"present\" },\n { quoteCount: 0 },\n ),\n ]\n : [];\n }\n const missing = quotes.filter((quote) => !contextText.includes(quote.toLowerCase()));\n return missing.length > 0\n ? [\n fail(\n \"eval.quoteOverlap\",\n \"Quoted answer text did not appear in retrieved context.\",\n firstEvidence(answers, context.run, \"attributes.answer\"),\n { allQuotesInContext: true },\n { quoteCount: quotes.length, missingQuotes: missing.length },\n ),\n ]\n : [];\n });\n },\n\n citationPresence(options: CitationPresenceOptions = {}): EvalRule {\n const answerKeys = options.answerKeys ?? DEFAULT_ANSWER_KEYS;\n const citationKeys = options.citationKeys ?? DEFAULT_CITATION_KEYS;\n return createRule(\"eval.citationPresence\", \"retrieval\", (context) => {\n const answers = collectTextFields(context.nodes, answerKeys, [\"RESULT\", \"LLM\", \"AGENT\"]);\n const citations = collectTextFields(context.nodes, citationKeys);\n const count = citationCount(answers.map((field) => field.text).join(\" \"), citations);\n return count === 0\n ? [\n fail(\n \"eval.citationPresence\",\n \"Answer did not include citations or source references.\",\n firstEvidence(answers, context.run, \"attributes.answer\"),\n { citationCount: \">= 1\" },\n { citationCount: 0 },\n ),\n ]\n : [];\n });\n },\n\n requiredSourceIds(\n requiredIds: readonly string[],\n options: RequiredSourceIdsOptions = {},\n ): EvalRule {\n const expected = [...requiredIds].sort((a, b) => a.localeCompare(b));\n const sourceIdKeys = options.sourceIdKeys ?? DEFAULT_SOURCE_ID_KEYS;\n return createRule(\"eval.requiredSourceIds\", \"retrieval\", (context) => {\n const available = collectSourceIds(context.nodes, sourceIdKeys);\n const availableSet = new Set(available);\n const missing = expected.filter((id) => !availableSet.has(id));\n return missing.length > 0\n ? [\n fail(\n \"eval.requiredSourceIds\",\n \"Required source IDs were not present in trace context or citations.\",\n evidenceForRun(context.run, \"children\"),\n { sourceIds: expected },\n { missingSourceIds: missing, availableSourceIds: available.slice(0, 20) },\n ),\n ]\n : [];\n });\n },\n\n answerLengthBounds(options: AnswerLengthBoundsOptions): EvalRule {\n const answerKeys = options.answerKeys ?? DEFAULT_ANSWER_KEYS;\n return createRule(\"eval.answerLengthBounds\", \"llm\", (context) => {\n const answers = collectTextFields(context.nodes, answerKeys, [\"RESULT\", \"LLM\", \"AGENT\"]);\n const answer = answers.map((field) => field.text).join(\" \").trim();\n const characters = answer.length;\n const words = wordCount(answer);\n const tooShort =\n (options.minCharacters !== undefined && characters < options.minCharacters) ||\n (options.minWords !== undefined && words < options.minWords);\n const tooLong =\n (options.maxCharacters !== undefined && characters > options.maxCharacters) ||\n (options.maxWords !== undefined && words > options.maxWords);\n return answer.length === 0 || tooShort || tooLong\n ? [\n fail(\n \"eval.answerLengthBounds\",\n \"Answer length fell outside required bounds.\",\n firstEvidence(answers, context.run, \"attributes.answer\"),\n {\n minCharacters: options.minCharacters,\n maxCharacters: options.maxCharacters,\n minWords: options.minWords,\n maxWords: options.maxWords,\n },\n { characters, words },\n ),\n ]\n : [];\n });\n },\n\n bannedUnsupportedPhrases(\n phrases: readonly string[] = DEFAULT_BANNED_UNSUPPORTED_PHRASES,\n options: BannedUnsupportedPhrasesOptions = {},\n ): EvalRule {\n const answerKeys = options.answerKeys ?? DEFAULT_ANSWER_KEYS;\n const banned = [...phrases].map((phrase) => phrase.toLowerCase()).sort();\n return createRule(\"eval.bannedUnsupportedPhrases\", \"safety\", (context) => {\n const answers = collectTextFields(context.nodes, answerKeys, [\"RESULT\", \"LLM\", \"AGENT\"]);\n const answer = answers.map((field) => field.text).join(\" \").toLowerCase();\n const matches = banned.filter((phrase) => answer.includes(phrase));\n return matches.length > 0\n ? [\n fail(\n \"eval.bannedUnsupportedPhrases\",\n \"Answer contained banned unsupported-answer phrasing.\",\n firstEvidence(answers, context.run, \"attributes.answer\"),\n { bannedPhraseCount: banned.length },\n { matchedPhraseCount: matches.length },\n ),\n ]\n : [];\n });\n },\n} as const;\n\nexport function renderEvalMarkdown(result: EvalRunResult): string {\n const lines = [\n `# AgentInspect Eval`,\n \"\",\n `Status: ${result.status}`,\n `Format: ${result.format}`,\n ...(result.runId !== undefined ? [`Run: ${result.runId}`] : []),\n `Summary: ${result.summary.passed} passed, ${result.summary.failed} failed, ${result.summary.warnings} warnings, ${result.summary.errors} errors`,\n ];\n\n if (result.diagnostics.length > 0) {\n lines.push(\"\", \"## Diagnostics\");\n for (const diagnostic of result.diagnostics) {\n lines.push(`- ${diagnostic.code}: ${diagnostic.message}`);\n }\n }\n\n if (result.findings.length > 0) {\n lines.push(\"\", \"## Findings\");\n for (const finding of result.findings) {\n const path = finding.evidence[0]?.path;\n lines.push(`- ${finding.ruleId}: ${finding.message}${path ? ` (${path})` : \"\"}`);\n }\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nexport {\n createEvalCircuitRule,\n createEvalGuardrailRule,\n type EvalCircuitRuleOptions,\n type EvalGuardrailRuleOptions,\n} from \"./safety-rules.js\";\n"]}