@agent-surface/compiler 0.16.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -8,4 +8,4 @@ import { agentSurface } from "@agent-surface/compiler";
|
|
|
8
8
|
export default defineConfig({ plugins: [agentSurface()] });
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
It traverses the actual production graph, including static/lazy chunks and virtual modules; composes pinned sidecars; emits `agent-surface.contract.json`; injects runtime
|
|
11
|
+
It traverses the actual production graph, including static/lazy chunks and virtual modules; composes pinned sidecars; emits `agent-surface.contract.json`; injects private runtime proof; and provides `virtual:agent-surface-contract` as the immutable runtime authority.
|
package/dist/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ declare function computeManifestHash(manifest: Omit<CapabilityContractManifest,
|
|
|
8
8
|
declare function canonicalManifestJson(manifest: CapabilityContractManifest): string;
|
|
9
9
|
declare function verifyManifest(manifest: CapabilityContractManifest): void;
|
|
10
10
|
|
|
11
|
-
declare const COMPILER_VERSION = "0.
|
|
11
|
+
declare const COMPILER_VERSION = "0.17.0";
|
|
12
12
|
declare const CONTRACT_FILE = "agent-surface.contract.json";
|
|
13
13
|
declare const VIRTUAL_CONTRACT_ID = "virtual:agent-surface-contract";
|
|
14
14
|
interface PinnedContractInput {
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@ function normalize(value) {
|
|
|
4
4
|
if (Array.isArray(value)) return value.map(normalize);
|
|
5
5
|
if (typeof value !== "object" || value === null) return value;
|
|
6
6
|
return Object.fromEntries(
|
|
7
|
-
Object.entries(value).filter(([, entry]) => entry !== void 0).sort(([a], [b]) => a
|
|
7
|
+
Object.entries(value).filter(([, entry]) => entry !== void 0).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0).map(([key, entry]) => [key, normalize(entry)])
|
|
8
8
|
);
|
|
9
9
|
}
|
|
10
10
|
function canonicalJson(value, pretty = false) {
|
|
@@ -375,7 +375,7 @@ function extractModule(options) {
|
|
|
375
375
|
}
|
|
376
376
|
|
|
377
377
|
// src/plugin.ts
|
|
378
|
-
var COMPILER_VERSION = "0.
|
|
378
|
+
var COMPILER_VERSION = "0.17.0";
|
|
379
379
|
var CONTRACT_FILE = "agent-surface.contract.json";
|
|
380
380
|
var VIRTUAL_CONTRACT_ID = "virtual:agent-surface-contract";
|
|
381
381
|
var RESOLVED_VIRTUAL_CONTRACT_ID = `\0${VIRTUAL_CONTRACT_ID}`;
|
|
@@ -457,7 +457,10 @@ function agentSurface(options = {}) {
|
|
|
457
457
|
},
|
|
458
458
|
load(id) {
|
|
459
459
|
if (id !== RESOLVED_VIRTUAL_CONTRACT_ID) return null;
|
|
460
|
-
return `
|
|
460
|
+
return `import { createCapabilityAuthority } from "@agent-surface/core";
|
|
461
|
+
const manifest = ${manifestPlaceholder};
|
|
462
|
+
export { manifest };
|
|
463
|
+
export default createCapabilityAuthority(manifest);`;
|
|
461
464
|
},
|
|
462
465
|
buildStart() {
|
|
463
466
|
entries = [];
|
|
@@ -509,7 +512,7 @@ function agentSurface(options = {}) {
|
|
|
509
512
|
validateEntries(capabilities);
|
|
510
513
|
const targets = [...new Set(capabilities.flatMap((entry) => entry.targets))].sort();
|
|
511
514
|
const payload = {
|
|
512
|
-
formatVersion:
|
|
515
|
+
formatVersion: 4,
|
|
513
516
|
compilerVersion: COMPILER_VERSION,
|
|
514
517
|
targets,
|
|
515
518
|
capabilities,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/canonical.ts","../src/plugin.ts","../src/extract.ts","../src/compile.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport type { CapabilityContractManifest } from \"@agent-surface/core\";\n\nfunction normalize(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(normalize);\n if (typeof value !== \"object\" || value === null) return value;\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .filter(([, entry]) => entry !== undefined)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, entry]) => [key, normalize(entry)]),\n );\n}\n\nexport function canonicalJson(value: unknown, pretty = false): string {\n return `${JSON.stringify(normalize(value), null, pretty ? 2 : undefined)}\\n`;\n}\n\nexport function sha256(value: string | Uint8Array): string {\n return createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nexport function manifestPayload(\n manifest: Omit<CapabilityContractManifest, \"hash\"> | CapabilityContractManifest,\n): Omit<CapabilityContractManifest, \"hash\"> {\n const { hash: _hash, ...payload } = manifest as CapabilityContractManifest;\n return payload;\n}\n\nexport function computeManifestHash(\n manifest: Omit<CapabilityContractManifest, \"hash\"> | CapabilityContractManifest,\n): string {\n return sha256(canonicalJson(manifestPayload(manifest)));\n}\n\nexport function canonicalManifestJson(manifest: CapabilityContractManifest): string {\n return canonicalJson(manifest, true);\n}\n\nexport function verifyManifest(manifest: CapabilityContractManifest): void {\n if (computeManifestHash(manifest) !== manifest.hash) {\n throw new Error(`capability contract hash mismatch: ${manifest.hash}`);\n }\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, isAbsolute, join, resolve } from \"node:path\";\nimport {\n DEFAULT_LIMITS,\n parseCapabilityId,\n validateJsonSchemaDocument,\n} from \"@agent-surface/core\";\nimport type { CapabilityContractEntry, CapabilityContractManifest } from \"@agent-surface/core\";\nimport type { Plugin } from \"vite\";\nimport { canonicalManifestJson, computeManifestHash, sha256, verifyManifest } from \"./canonical.js\";\nimport { extractModule } from \"./extract.js\";\n\nexport const COMPILER_VERSION = \"0.16.0\";\nexport const CONTRACT_FILE = \"agent-surface.contract.json\";\nexport const VIRTUAL_CONTRACT_ID = \"virtual:agent-surface-contract\";\nconst RESOLVED_VIRTUAL_CONTRACT_ID = `\\0${VIRTUAL_CONTRACT_ID}`;\n\nexport interface PinnedContractInput {\n path: string;\n digest: string;\n}\n\nexport interface AgentSurfaceCompilerOptions {\n target?: string;\n emit?: boolean;\n fileName?: string;\n externalContracts?: PinnedContractInput[];\n onManifest?: (manifest: CapabilityContractManifest) => void;\n}\n\nfunction mergeEntries(entries: CapabilityContractEntry[]): CapabilityContractEntry[] {\n const byKey = new Map<string, CapabilityContractEntry>();\n for (const entry of entries) {\n const key = `${entry.declarationId}\\0${entry.capabilityId}`;\n const current = byKey.get(key);\n if (!current) {\n byKey.set(key, { ...entry, targets: [...entry.targets] });\n continue;\n }\n if (current.contractHash !== entry.contractHash) {\n throw new Error(`contract \"${entry.declarationId}\" / \"${entry.capabilityId}\" differs across build targets`);\n }\n current.targets = [...new Set([...current.targets, ...entry.targets])].sort();\n }\n return [...byKey.values()].sort((a, b) =>\n `${a.declarationId}\\0${a.capabilityId}`.localeCompare(`${b.declarationId}\\0${b.capabilityId}`),\n );\n}\n\nfunction validateEntries(entries: readonly CapabilityContractEntry[]): void {\n for (const entry of entries) {\n if (entry.kind !== \"external\" && !parseCapabilityId(entry.capabilityId)) {\n throw new Error(`invalid compiled capability id \"${entry.capabilityId}\"`);\n }\n for (const [label, schema] of [[\"input\", entry.inputSchema], [\"output\", entry.outputSchema]] as const) {\n if (!schema) continue;\n const result = validateJsonSchemaDocument(schema, DEFAULT_LIMITS);\n if (!result.ok) {\n throw new Error(`${entry.declarationId} ${label} schema: ${result.reason}`);\n }\n }\n }\n}\n\nfunction readPinnedContract(input: PinnedContractInput, root: string): CapabilityContractManifest {\n if (!input.digest) throw new Error(`external contract \"${input.path}\" is not content-addressed`);\n const path = isAbsolute(input.path) ? input.path : resolve(root, input.path);\n const bytes = readFileSync(path);\n const actual = sha256(bytes);\n if (actual !== input.digest) {\n throw new Error(`external contract \"${input.path}\" digest mismatch: expected ${input.digest}, got ${actual}`);\n }\n const manifest = JSON.parse(bytes.toString(\"utf8\")) as CapabilityContractManifest;\n verifyManifest(manifest);\n return manifest;\n}\n\nfunction nearestPackageSidecar(id: string, seen: Set<string>): string | undefined {\n if (id.startsWith(\"\\0\") || !isAbsolute(id)) return undefined;\n let dir = dirname(id.split(\"?\")[0]!);\n while (dir !== dirname(dir)) {\n const packagePath = join(dir, \"package.json\");\n if (existsSync(packagePath)) {\n if (seen.has(packagePath)) return undefined;\n seen.add(packagePath);\n const pkg = JSON.parse(readFileSync(packagePath, \"utf8\")) as {\n agentSurface?: { contract?: string };\n };\n return pkg.agentSurface?.contract ? resolve(dir, pkg.agentSurface.contract) : undefined;\n }\n dir = dirname(dir);\n }\n return undefined;\n}\n\nexport function agentSurface(options: AgentSurfaceCompilerOptions = {}): Plugin {\n const target = options.target ?? \"web-production\";\n const placeholder = `__AGENT_SURFACE_MANIFEST_HASH_${Math.random().toString(36).slice(2)}__`;\n const manifestPlaceholder = `__AGENT_SURFACE_MANIFEST_${Math.random().toString(36).slice(2)}__`;\n let root = process.cwd();\n let entries: CapabilityContractEntry[] = [];\n let manifest: CapabilityContractManifest | undefined;\n\n return {\n name: \"agent-surface:compiler\",\n apply: \"build\",\n enforce: \"pre\",\n configResolved(config) {\n root = config.root;\n },\n resolveId(id) {\n return id === VIRTUAL_CONTRACT_ID ? RESOLVED_VIRTUAL_CONTRACT_ID : null;\n },\n load(id) {\n if (id !== RESOLVED_VIRTUAL_CONTRACT_ID) return null;\n return `export default ${manifestPlaceholder};`;\n },\n buildStart() {\n entries = [];\n manifest = undefined;\n },\n transform(code, id) {\n if (\n id.includes(\"/node_modules/@agent-surface/\") ||\n /\\/packages\\/(?:core|react|orpc|testing|webmcp|cli|compiler)\\//.test(id)\n ) {\n return null;\n }\n if (/\\buseAgentComponent\\s*\\(\\s*\\{/.test(code)) {\n throw new Error(`${id}: inline useAgentComponent registration is unsupported; bind a compiled contract`);\n }\n if (/\\b(?:useAgentAction|useAgentObservation)\\s*\\(/.test(code)) {\n throw new Error(`${id}: granular runtime capability construction is unsupported by the compiled contract`);\n }\n if (/\\bdefineAgentComponent\\s*\\(/.test(code) || /\\bregistry\\s*\\.\\s*register\\s*\\(\\s*\\{/.test(code)) {\n throw new Error(`${id}: raw capability registration bypasses the compiled exposure ceiling`);\n }\n if (\n !code.includes(\"defineAgentComponentContract\") &&\n !code.includes(\"defineAgentProcedureContract\") &&\n !code.includes(\"defineExternalAgentToolContract\")\n ) {\n return null;\n }\n const extracted = extractModule({ code, id, root, target, placeholder });\n entries.push(...extracted.entries);\n return extracted.code === code ? null : { code: extracted.code, map: null };\n },\n buildEnd(error) {\n if (error) return;\n const externalContracts: CapabilityContractManifest[\"externalContracts\"] = [];\n const externalEntries: CapabilityContractEntry[] = [];\n const seenPackages = new Set<string>();\n const sidecars = new Set<string>();\n for (const id of this.getModuleIds()) {\n const sidecar = nearestPackageSidecar(id, seenPackages);\n if (sidecar) sidecars.add(sidecar);\n }\n for (const sidecar of sidecars) {\n const bytes = readFileSync(sidecar);\n const external = JSON.parse(bytes.toString(\"utf8\")) as CapabilityContractManifest;\n verifyManifest(external);\n externalEntries.push(...external.capabilities);\n externalContracts.push({ source: sidecar.split(\"/\").slice(-3).join(\"/\"), digest: sha256(bytes) });\n }\n for (const pinned of options.externalContracts ?? []) {\n const external = readPinnedContract(pinned, root);\n externalEntries.push(...external.capabilities);\n externalContracts.push({ source: pinned.path, digest: pinned.digest });\n }\n const capabilities = mergeEntries([...entries, ...externalEntries]);\n validateEntries(capabilities);\n const targets = [...new Set(capabilities.flatMap((entry) => entry.targets))].sort();\n const payload = {\n formatVersion: 3 as const,\n compilerVersion: COMPILER_VERSION,\n targets,\n capabilities,\n externalContracts: externalContracts.sort((a, b) => a.source.localeCompare(b.source)),\n completeness: { status: \"proven\" as const },\n };\n manifest = { ...payload, hash: computeManifestHash(payload) };\n options.onManifest?.(manifest);\n },\n renderChunk(code) {\n if (!manifest || (!code.includes(placeholder) && !code.includes(manifestPlaceholder))) return null;\n return {\n code: code\n .replaceAll(placeholder, manifest.hash)\n .replaceAll(manifestPlaceholder, JSON.stringify(manifest)),\n map: null,\n };\n },\n generateBundle() {\n if (!manifest || options.emit === false) return;\n this.emitFile({\n type: \"asset\",\n fileName: options.fileName ?? CONTRACT_FILE,\n source: canonicalManifestJson(manifest),\n });\n },\n };\n}\n","import { posix, relative, resolve } from \"node:path\";\nimport ts from \"typescript\";\nimport type {\n CapabilityContractEntry,\n CapabilityPolicyAttachment,\n CompiledCapabilityToken,\n CompiledComponentProvenance,\n JsonSchema,\n} from \"@agent-surface/core\";\nimport { canonicalJson, sha256 } from \"./canonical.js\";\n\nconst CORE = \"@agent-surface/core\";\nconst COMPONENT_MACRO = \"defineAgentComponentContract\";\nconst PROCEDURE_MACRO = \"defineAgentProcedureContract\";\nconst EXTERNAL_MACRO = \"defineExternalAgentToolContract\";\nconst WRAPPERS = new Set([\n \"observationContract\",\n \"actionContract\",\n \"fromJsonSchema\",\n \"defineAgentComponentContract\",\n \"defineAgentProcedureContract\",\n \"defineExternalAgentToolContract\",\n]);\n\ntype Json = null | boolean | number | string | Json[] | { [key: string]: Json };\n\nexport interface ExtractedModule {\n code: string;\n entries: CapabilityContractEntry[];\n}\n\nfunction sourceKind(id: string): ts.ScriptKind {\n if (/\\.tsx(?:\\?|$)/.test(id)) return ts.ScriptKind.TSX;\n if (/\\.jsx(?:\\?|$)/.test(id)) return ts.ScriptKind.JSX;\n if (/\\.js(?:\\?|$)/.test(id)) return ts.ScriptKind.JS;\n return ts.ScriptKind.TS;\n}\n\nfunction unwrap(node: ts.Expression): ts.Expression {\n while (\n ts.isParenthesizedExpression(node) ||\n ts.isAsExpression(node) ||\n ts.isTypeAssertionExpression(node) ||\n ts.isSatisfiesExpression(node) ||\n ts.isNonNullExpression(node)\n ) {\n node = node.expression;\n }\n return node;\n}\n\nfunction propertyName(node: ts.PropertyName): string | undefined {\n if (ts.isIdentifier(node) || ts.isStringLiteral(node) || ts.isNumericLiteral(node)) {\n return node.text;\n }\n if (ts.isComputedPropertyName(node) && ts.isStringLiteral(unwrap(node.expression))) {\n return (unwrap(node.expression) as ts.StringLiteral).text;\n }\n return undefined;\n}\n\nfunction calleeName(node: ts.Expression): string | undefined {\n node = unwrap(node);\n if (ts.isIdentifier(node)) return node.text;\n if (ts.isPropertyAccessExpression(node)) return node.name.text;\n if (\n ts.isElementAccessExpression(node) &&\n node.argumentExpression &&\n ts.isStringLiteral(unwrap(node.argumentExpression))\n ) {\n return (unwrap(node.argumentExpression) as ts.StringLiteral).text;\n }\n return undefined;\n}\n\nfunction normalizedOrigin(root: string, id: string): string {\n const clean = id.replace(/^\\0/, \"virtual:\").split(\"?\")[0]!;\n if (clean.startsWith(\"virtual:\")) return clean;\n const path = clean.startsWith(\"/\\@fs/\") ? clean.slice(4) : clean;\n return posix.normalize(relative(root, resolve(path)).split(\"\\\\\").join(\"/\"));\n}\n\nclass StaticEvaluator {\n private readonly constants = new Map<string, ts.Expression>();\n private readonly active = new Set<string>();\n\n constructor(private readonly file: ts.SourceFile) {\n const visit = (node: ts.Node): void => {\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.initializer) {\n this.constants.set(node.name.text, node.initializer);\n }\n ts.forEachChild(node, visit);\n };\n visit(file);\n }\n\n evaluate(input: ts.Expression, where: string): Json {\n const node = unwrap(input);\n if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) return node.text;\n if (ts.isNumericLiteral(node)) return Number(node.text);\n if (node.kind === ts.SyntaxKind.TrueKeyword) return true;\n if (node.kind === ts.SyntaxKind.FalseKeyword) return false;\n if (node.kind === ts.SyntaxKind.NullKeyword) return null;\n if (ts.isPrefixUnaryExpression(node) && node.operator === ts.SyntaxKind.MinusToken) {\n const value = this.evaluate(node.operand, where);\n if (typeof value === \"number\") return -value;\n }\n if (ts.isArrayLiteralExpression(node)) {\n return node.elements.map((entry, index) => {\n if (ts.isSpreadElement(entry)) {\n const spread = this.evaluate(entry.expression, `${where}[${index}]`);\n if (!Array.isArray(spread)) throw this.failure(entry, `${where}: array spread is not static`);\n return spread;\n }\n return this.evaluate(entry as ts.Expression, `${where}[${index}]`);\n }).flat() as Json[];\n }\n if (ts.isObjectLiteralExpression(node)) {\n const result: Record<string, Json> = {};\n for (const property of node.properties) {\n if (ts.isSpreadAssignment(property)) {\n const spread = this.evaluate(property.expression, `${where} spread`);\n if (typeof spread !== \"object\" || spread === null || Array.isArray(spread)) {\n throw this.failure(property, `${where}: object spread is not static`);\n }\n Object.assign(result, spread);\n continue;\n }\n if (ts.isShorthandPropertyAssignment(property)) {\n result[property.name.text] = this.evaluate(property.name, `${where}.${property.name.text}`);\n continue;\n }\n if (!ts.isPropertyAssignment(property)) {\n throw this.failure(property, `${where}: methods/accessors are runtime code`);\n }\n const name = propertyName(property.name);\n if (name === undefined) throw this.failure(property.name, `${where}: computed key is not static`);\n result[name] = this.evaluate(property.initializer, `${where}.${name}`);\n }\n return result;\n }\n if (ts.isIdentifier(node)) {\n if (node.text === \"undefined\") throw this.failure(node, `${where}: undefined is not serializable`);\n if (node.text === \"emptyObjectSchema\") {\n return { type: \"object\", properties: {}, additionalProperties: false };\n }\n const value = this.constants.get(node.text);\n if (!value) throw this.failure(node, `${where}: imported/dynamic value \"${node.text}\" is not static`);\n if (this.active.has(node.text)) throw this.failure(node, `${where}: cyclic static value \"${node.text}\"`);\n this.active.add(node.text);\n try {\n return this.evaluate(value, where);\n } finally {\n this.active.delete(node.text);\n }\n }\n if (ts.isCallExpression(node)) {\n const name = calleeName(node.expression);\n if (name && WRAPPERS.has(name) && node.arguments[0]) {\n return this.evaluate(node.arguments[0], where);\n }\n throw this.failure(node, `${where}: call \"${name ?? \"<computed>\"}\" is not a compiler macro`);\n }\n if (ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) {\n const owner = this.evaluate(node.expression, where);\n const name = ts.isPropertyAccessExpression(node)\n ? node.name.text\n : node.argumentExpression && ts.isStringLiteral(unwrap(node.argumentExpression))\n ? (unwrap(node.argumentExpression) as ts.StringLiteral).text\n : undefined;\n if (name !== undefined && typeof owner === \"object\" && owner !== null && !Array.isArray(owner)) {\n const value = owner[name];\n if (value !== undefined) return value;\n }\n }\n throw this.failure(node, `${where}: expression is dynamic or non-serializable`);\n }\n\n private failure(node: ts.Node, message: string): Error {\n const position = this.file.getLineAndCharacterOfPosition(node.getStart(this.file));\n return new Error(`${this.file.fileName}:${position.line + 1}:${position.character + 1}: ${message}`);\n }\n}\n\nfunction record(value: Json, where: string): Record<string, Json> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new Error(`${where} must be a static object`);\n }\n return value;\n}\n\nfunction string(value: Json | undefined, where: string): string {\n if (typeof value !== \"string\" || value.length === 0) throw new Error(`${where} must be a string`);\n return value;\n}\n\nfunction policies(value: Json | undefined): CapabilityPolicyAttachment[] | undefined {\n if (value === undefined) return undefined;\n if (!Array.isArray(value)) throw new Error(\"policies must be a static array\");\n return value.map((entry) => record(entry, \"policy\")) as unknown as CapabilityPolicyAttachment[];\n}\n\nfunction combine<T>(inherited: readonly T[] | undefined, local: readonly T[] | undefined): T[] | undefined {\n const values = [...(inherited ?? []), ...(local ?? [])];\n if (values.length === 0) return undefined;\n const unique = new Map(values.map((value) => [canonicalJson(value), value]));\n return [...unique.entries()].sort(([a], [b]) => a.localeCompare(b)).map(([, value]) => value);\n}\n\nfunction entryHash(entry: Omit<CapabilityContractEntry, \"contractHash\" | \"targets\">): string {\n return sha256(canonicalJson(entry));\n}\n\nfunction declarationVariable(call: ts.CallExpression): string | undefined {\n let node: ts.Node = call;\n while (\n node.parent &&\n (ts.isParenthesizedExpression(node.parent) ||\n ts.isAsExpression(node.parent) ||\n ts.isSatisfiesExpression(node.parent))\n ) {\n node = node.parent;\n }\n return node.parent && ts.isVariableDeclaration(node.parent) && ts.isIdentifier(node.parent.name)\n ? node.parent.name.text\n : undefined;\n}\n\nfunction isMacroCall(\n call: ts.CallExpression,\n names: ReadonlySet<string>,\n namespaces: ReadonlySet<string>,\n aliases: ReadonlyMap<string, string>,\n): \"component\" | \"procedure\" | \"external\" | undefined {\n const expression = unwrap(call.expression);\n let imported: string | undefined;\n if (ts.isIdentifier(expression)) imported = aliases.get(expression.text);\n else if (ts.isPropertyAccessExpression(expression) && ts.isIdentifier(expression.expression)) {\n if (namespaces.has(expression.expression.text)) imported = expression.name.text;\n } else if (\n ts.isElementAccessExpression(expression) &&\n ts.isIdentifier(expression.expression) &&\n namespaces.has(expression.expression.text) &&\n expression.argumentExpression &&\n ts.isStringLiteral(unwrap(expression.argumentExpression))\n ) {\n imported = (unwrap(expression.argumentExpression) as ts.StringLiteral).text;\n }\n if (imported === COMPONENT_MACRO) return \"component\";\n if (imported === PROCEDURE_MACRO) return \"procedure\";\n if (imported === EXTERNAL_MACRO) return \"external\";\n return undefined;\n}\n\nexport function extractModule(options: {\n code: string;\n id: string;\n root: string;\n target: string;\n placeholder: string;\n}): ExtractedModule {\n const file = ts.createSourceFile(options.id, options.code, ts.ScriptTarget.Latest, true, sourceKind(options.id));\n const namespaces = new Set<string>();\n const aliases = new Map<string, string>();\n for (const statement of file.statements) {\n if (!ts.isImportDeclaration(statement) || !ts.isStringLiteral(statement.moduleSpecifier)) continue;\n if (statement.moduleSpecifier.text !== CORE || !statement.importClause) continue;\n const bindings = statement.importClause.namedBindings;\n if (bindings && ts.isNamespaceImport(bindings)) namespaces.add(bindings.name.text);\n if (bindings && ts.isNamedImports(bindings)) {\n for (const binding of bindings.elements) {\n aliases.set(binding.name.text, binding.propertyName?.text ?? binding.name.text);\n }\n }\n }\n // Assigned aliases are resolved transitively within the module.\n let changed = true;\n while (changed) {\n changed = false;\n const visitAlias = (node: ts.Node): void => {\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.initializer) {\n const init = unwrap(node.initializer);\n let source: string | undefined;\n if (ts.isIdentifier(init)) source = aliases.get(init.text);\n else if (ts.isPropertyAccessExpression(init) && ts.isIdentifier(init.expression) && namespaces.has(init.expression.text)) {\n source = init.name.text;\n }\n if (source && !aliases.has(node.name.text)) {\n aliases.set(node.name.text, source);\n changed = true;\n }\n }\n ts.forEachChild(node, visitAlias);\n };\n visitAlias(file);\n }\n\n const macroNames = new Set([COMPONENT_MACRO, PROCEDURE_MACRO, EXTERNAL_MACRO]);\n if (![...aliases.values()].some((name) => macroNames.has(name)) && namespaces.size === 0) {\n return { code: options.code, entries: [] };\n }\n\n const evaluator = new StaticEvaluator(file);\n const entries: CapabilityContractEntry[] = [];\n const injections: Array<{ position: number; text: string }> = [];\n const origin = normalizedOrigin(options.root, options.id);\n\n const visit = (node: ts.Node): void => {\n if (ts.isCallExpression(node)) {\n const macro = isMacroCall(node, macroNames, namespaces, aliases);\n if (macro) {\n if (!node.arguments[0]) throw new Error(`${origin}: contract declaration needs an argument`);\n const variable = declarationVariable(node);\n if (!variable) throw new Error(`${origin}: contract declaration must initialize a named module constant`);\n const declarationId = `${origin}#${variable}`;\n const definition = record(evaluator.evaluate(node.arguments[0], declarationId), declarationId);\n const emitted: CapabilityContractEntry[] = [];\n if (macro === \"component\") {\n const type = string(definition.type, `${declarationId}.type`);\n const inheritedPolicies = policies(definition.policies);\n const inheritedTags = definition.tags as string[] | undefined;\n const groups = [\n [\"observations\", \"observation\", \"read\"],\n [\"actions\", \"action\", undefined],\n ] as const;\n for (const [groupName, kind, defaultEffect] of groups) {\n const groupValue = definition[groupName];\n if (groupValue === undefined) continue;\n const group = record(groupValue, `${declarationId}.${groupName}`);\n for (const [name, rawMember] of Object.entries(group)) {\n const member = record(rawMember, `${declarationId}.${groupName}.${name}`);\n const capabilityPolicies = combine(inheritedPolicies, policies(member.policies));\n const capabilityTags = combine(inheritedTags, member.tags as string[] | undefined);\n const base = {\n declarationId,\n capabilityId: `view:${type}.${name}`,\n kind,\n description: string(member.description, `${declarationId}.${name}.description`),\n effect: string(member.effect ?? defaultEffect, `${declarationId}.${name}.effect`) as CapabilityContractEntry[\"effect\"],\n ...(member.input ? { inputSchema: member.input as JsonSchema } : {}),\n ...(member.output ? { outputSchema: member.output as JsonSchema } : {}),\n ...(member.confirmation ? { confirmation: member.confirmation as \"never\" | \"optional\" | \"required\" } : {}),\n ...(capabilityPolicies ? { policies: capabilityPolicies } : {}),\n ...(capabilityTags ? { tags: capabilityTags } : {}),\n origin,\n } satisfies Omit<CapabilityContractEntry, \"contractHash\" | \"targets\">;\n emitted.push({ ...base, contractHash: entryHash(base), targets: [options.target] });\n }\n }\n } else {\n const id = string(definition.id, `${declarationId}.id`);\n const base = {\n declarationId,\n capabilityId: id,\n kind: macro === \"procedure\" ? \"procedure\" as const : \"external\" as const,\n description: string(definition.description, `${declarationId}.description`),\n effect: string(definition.effect, `${declarationId}.effect`) as CapabilityContractEntry[\"effect\"],\n ...(definition.input ? { inputSchema: definition.input as JsonSchema } : {}),\n ...(definition.output ? { outputSchema: definition.output as JsonSchema } : {}),\n ...(definition.confirmation ? { confirmation: definition.confirmation as \"never\" | \"optional\" | \"required\" } : {}),\n ...(policies(definition.policies) ? { policies: policies(definition.policies) } : {}),\n ...(definition.tags ? { tags: definition.tags as string[] } : {}),\n origin,\n } satisfies Omit<CapabilityContractEntry, \"contractHash\" | \"targets\">;\n emitted.push({ ...base, contractHash: entryHash(base), targets: [options.target] });\n }\n entries.push(...emitted);\n if (node.arguments.length < 2) {\n if (macro === \"component\") {\n const capabilities: Record<string, CompiledCapabilityToken> = {};\n for (const entry of emitted) {\n capabilities[entry.capabilityId] = {\n manifestHash: options.placeholder,\n declarationId: entry.declarationId,\n capabilityId: entry.capabilityId,\n contractHash: entry.contractHash,\n };\n }\n const provenance: CompiledComponentProvenance = {\n manifestHash: options.placeholder,\n declarationId,\n capabilities,\n };\n injections.push({ position: node.arguments.end, text: `, ${JSON.stringify(provenance)}` });\n } else {\n const entry = emitted[0]!;\n const token: CompiledCapabilityToken = {\n manifestHash: options.placeholder,\n declarationId,\n capabilityId: entry.capabilityId,\n contractHash: entry.contractHash,\n };\n injections.push({ position: node.arguments.end, text: `, ${JSON.stringify(token)}` });\n }\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n visit(file);\n\n let code = options.code;\n for (const injection of injections.sort((a, b) => b.position - a.position)) {\n code = `${code.slice(0, injection.position)}${injection.text}${code.slice(injection.position)}`;\n }\n return { code, entries };\n}\n","import { resolve } from \"node:path\";\nimport type { CapabilityContractManifest } from \"@agent-surface/core\";\nimport { build, type InlineConfig } from \"vite\";\nimport { agentSurface } from \"./plugin.js\";\n\nexport interface CompileCapabilityContractOptions {\n root?: string;\n configFile?: string;\n target?: string;\n vite?: InlineConfig;\n}\n\nexport async function compileCapabilityContract(\n options: CompileCapabilityContractOptions = {},\n): Promise<CapabilityContractManifest> {\n let manifest: CapabilityContractManifest | undefined;\n const root = resolve(options.root ?? process.cwd());\n const result = await build({\n ...(options.vite ?? {}),\n root,\n ...(options.configFile ? { configFile: resolve(root, options.configFile) } : {}),\n logLevel: options.vite?.logLevel ?? \"silent\",\n build: {\n ...(options.vite?.build ?? {}),\n write: false,\n },\n plugins: [\n ...(options.vite?.plugins ?? []),\n agentSurface({\n target: options.target,\n emit: false,\n onManifest: (value) => {\n manifest = value;\n },\n }),\n ],\n });\n const outputs = Array.isArray(result) ? result : [result];\n for (const output of outputs) {\n if (!(\"output\" in output)) continue;\n const asset = output.output.find(\n (entry) => entry.type === \"asset\" && entry.fileName === \"agent-surface.contract.json\",\n );\n if (asset?.type === \"asset\") {\n const source = typeof asset.source === \"string\"\n ? asset.source\n : new TextDecoder().decode(asset.source);\n manifest = JSON.parse(source) as CapabilityContractManifest;\n break;\n }\n }\n if (!manifest) throw new Error(\"compiler did not produce a capability contract\");\n return manifest;\n}\n"],"mappings":"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","names":["resolve","resolve","resolve","resolve"]}
|
|
1
|
+
{"version":3,"sources":["../src/canonical.ts","../src/plugin.ts","../src/extract.ts","../src/compile.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport type { CapabilityContractManifest } from \"@agent-surface/core\";\n\nfunction normalize(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(normalize);\n if (typeof value !== \"object\" || value === null) return value;\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .filter(([, entry]) => entry !== undefined)\n .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))\n .map(([key, entry]) => [key, normalize(entry)]),\n );\n}\n\nexport function canonicalJson(value: unknown, pretty = false): string {\n return `${JSON.stringify(normalize(value), null, pretty ? 2 : undefined)}\\n`;\n}\n\nexport function sha256(value: string | Uint8Array): string {\n return createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nexport function manifestPayload(\n manifest: Omit<CapabilityContractManifest, \"hash\"> | CapabilityContractManifest,\n): Omit<CapabilityContractManifest, \"hash\"> {\n const { hash: _hash, ...payload } = manifest as CapabilityContractManifest;\n return payload;\n}\n\nexport function computeManifestHash(\n manifest: Omit<CapabilityContractManifest, \"hash\"> | CapabilityContractManifest,\n): string {\n return sha256(canonicalJson(manifestPayload(manifest)));\n}\n\nexport function canonicalManifestJson(manifest: CapabilityContractManifest): string {\n return canonicalJson(manifest, true);\n}\n\nexport function verifyManifest(manifest: CapabilityContractManifest): void {\n if (computeManifestHash(manifest) !== manifest.hash) {\n throw new Error(`capability contract hash mismatch: ${manifest.hash}`);\n }\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, isAbsolute, join, resolve } from \"node:path\";\nimport {\n DEFAULT_LIMITS,\n parseCapabilityId,\n validateJsonSchemaDocument,\n} from \"@agent-surface/core\";\nimport type { CapabilityContractEntry, CapabilityContractManifest } from \"@agent-surface/core\";\nimport type { Plugin } from \"vite\";\nimport { canonicalManifestJson, computeManifestHash, sha256, verifyManifest } from \"./canonical.js\";\nimport { extractModule } from \"./extract.js\";\n\nexport const COMPILER_VERSION = \"0.17.0\";\nexport const CONTRACT_FILE = \"agent-surface.contract.json\";\nexport const VIRTUAL_CONTRACT_ID = \"virtual:agent-surface-contract\";\nconst RESOLVED_VIRTUAL_CONTRACT_ID = `\\0${VIRTUAL_CONTRACT_ID}`;\n\nexport interface PinnedContractInput {\n path: string;\n digest: string;\n}\n\nexport interface AgentSurfaceCompilerOptions {\n target?: string;\n emit?: boolean;\n fileName?: string;\n externalContracts?: PinnedContractInput[];\n onManifest?: (manifest: CapabilityContractManifest) => void;\n}\n\nfunction mergeEntries(entries: CapabilityContractEntry[]): CapabilityContractEntry[] {\n const byKey = new Map<string, CapabilityContractEntry>();\n for (const entry of entries) {\n const key = `${entry.declarationId}\\0${entry.capabilityId}`;\n const current = byKey.get(key);\n if (!current) {\n byKey.set(key, { ...entry, targets: [...entry.targets] });\n continue;\n }\n if (current.contractHash !== entry.contractHash) {\n throw new Error(`contract \"${entry.declarationId}\" / \"${entry.capabilityId}\" differs across build targets`);\n }\n current.targets = [...new Set([...current.targets, ...entry.targets])].sort();\n }\n return [...byKey.values()].sort((a, b) =>\n `${a.declarationId}\\0${a.capabilityId}`.localeCompare(`${b.declarationId}\\0${b.capabilityId}`),\n );\n}\n\nfunction validateEntries(entries: readonly CapabilityContractEntry[]): void {\n for (const entry of entries) {\n if (entry.kind !== \"external\" && !parseCapabilityId(entry.capabilityId)) {\n throw new Error(`invalid compiled capability id \"${entry.capabilityId}\"`);\n }\n for (const [label, schema] of [[\"input\", entry.inputSchema], [\"output\", entry.outputSchema]] as const) {\n if (!schema) continue;\n const result = validateJsonSchemaDocument(schema, DEFAULT_LIMITS);\n if (!result.ok) {\n throw new Error(`${entry.declarationId} ${label} schema: ${result.reason}`);\n }\n }\n }\n}\n\nfunction readPinnedContract(input: PinnedContractInput, root: string): CapabilityContractManifest {\n if (!input.digest) throw new Error(`external contract \"${input.path}\" is not content-addressed`);\n const path = isAbsolute(input.path) ? input.path : resolve(root, input.path);\n const bytes = readFileSync(path);\n const actual = sha256(bytes);\n if (actual !== input.digest) {\n throw new Error(`external contract \"${input.path}\" digest mismatch: expected ${input.digest}, got ${actual}`);\n }\n const manifest = JSON.parse(bytes.toString(\"utf8\")) as CapabilityContractManifest;\n verifyManifest(manifest);\n return manifest;\n}\n\nfunction nearestPackageSidecar(id: string, seen: Set<string>): string | undefined {\n if (id.startsWith(\"\\0\") || !isAbsolute(id)) return undefined;\n let dir = dirname(id.split(\"?\")[0]!);\n while (dir !== dirname(dir)) {\n const packagePath = join(dir, \"package.json\");\n if (existsSync(packagePath)) {\n if (seen.has(packagePath)) return undefined;\n seen.add(packagePath);\n const pkg = JSON.parse(readFileSync(packagePath, \"utf8\")) as {\n agentSurface?: { contract?: string };\n };\n return pkg.agentSurface?.contract ? resolve(dir, pkg.agentSurface.contract) : undefined;\n }\n dir = dirname(dir);\n }\n return undefined;\n}\n\nexport function agentSurface(options: AgentSurfaceCompilerOptions = {}): Plugin {\n const target = options.target ?? \"web-production\";\n const placeholder = `__AGENT_SURFACE_MANIFEST_HASH_${Math.random().toString(36).slice(2)}__`;\n const manifestPlaceholder = `__AGENT_SURFACE_MANIFEST_${Math.random().toString(36).slice(2)}__`;\n let root = process.cwd();\n let entries: CapabilityContractEntry[] = [];\n let manifest: CapabilityContractManifest | undefined;\n\n return {\n name: \"agent-surface:compiler\",\n apply: \"build\",\n enforce: \"pre\",\n configResolved(config) {\n root = config.root;\n },\n resolveId(id) {\n return id === VIRTUAL_CONTRACT_ID ? RESOLVED_VIRTUAL_CONTRACT_ID : null;\n },\n load(id) {\n if (id !== RESOLVED_VIRTUAL_CONTRACT_ID) return null;\n return `import { createCapabilityAuthority } from \"@agent-surface/core\";\nconst manifest = ${manifestPlaceholder};\nexport { manifest };\nexport default createCapabilityAuthority(manifest);`;\n },\n buildStart() {\n entries = [];\n manifest = undefined;\n },\n transform(code, id) {\n if (\n id.includes(\"/node_modules/@agent-surface/\") ||\n /\\/packages\\/(?:core|react|orpc|testing|webmcp|cli|compiler)\\//.test(id)\n ) {\n return null;\n }\n if (/\\buseAgentComponent\\s*\\(\\s*\\{/.test(code)) {\n throw new Error(`${id}: inline useAgentComponent registration is unsupported; bind a compiled contract`);\n }\n if (/\\b(?:useAgentAction|useAgentObservation)\\s*\\(/.test(code)) {\n throw new Error(`${id}: granular runtime capability construction is unsupported by the compiled contract`);\n }\n if (/\\bdefineAgentComponent\\s*\\(/.test(code) || /\\bregistry\\s*\\.\\s*register\\s*\\(\\s*\\{/.test(code)) {\n throw new Error(`${id}: raw capability registration bypasses the compiled exposure ceiling`);\n }\n if (\n !code.includes(\"defineAgentComponentContract\") &&\n !code.includes(\"defineAgentProcedureContract\") &&\n !code.includes(\"defineExternalAgentToolContract\")\n ) {\n return null;\n }\n const extracted = extractModule({ code, id, root, target, placeholder });\n entries.push(...extracted.entries);\n return extracted.code === code ? null : { code: extracted.code, map: null };\n },\n buildEnd(error) {\n if (error) return;\n const externalContracts: CapabilityContractManifest[\"externalContracts\"] = [];\n const externalEntries: CapabilityContractEntry[] = [];\n const seenPackages = new Set<string>();\n const sidecars = new Set<string>();\n for (const id of this.getModuleIds()) {\n const sidecar = nearestPackageSidecar(id, seenPackages);\n if (sidecar) sidecars.add(sidecar);\n }\n for (const sidecar of sidecars) {\n const bytes = readFileSync(sidecar);\n const external = JSON.parse(bytes.toString(\"utf8\")) as CapabilityContractManifest;\n verifyManifest(external);\n externalEntries.push(...external.capabilities);\n externalContracts.push({ source: sidecar.split(\"/\").slice(-3).join(\"/\"), digest: sha256(bytes) });\n }\n for (const pinned of options.externalContracts ?? []) {\n const external = readPinnedContract(pinned, root);\n externalEntries.push(...external.capabilities);\n externalContracts.push({ source: pinned.path, digest: pinned.digest });\n }\n const capabilities = mergeEntries([...entries, ...externalEntries]);\n validateEntries(capabilities);\n const targets = [...new Set(capabilities.flatMap((entry) => entry.targets))].sort();\n const payload = {\n formatVersion: 4 as const,\n compilerVersion: COMPILER_VERSION,\n targets,\n capabilities,\n externalContracts: externalContracts.sort((a, b) => a.source.localeCompare(b.source)),\n completeness: { status: \"proven\" as const },\n };\n manifest = { ...payload, hash: computeManifestHash(payload) };\n options.onManifest?.(manifest);\n },\n renderChunk(code) {\n if (!manifest || (!code.includes(placeholder) && !code.includes(manifestPlaceholder))) return null;\n return {\n code: code\n .replaceAll(placeholder, manifest.hash)\n .replaceAll(manifestPlaceholder, JSON.stringify(manifest)),\n map: null,\n };\n },\n generateBundle() {\n if (!manifest || options.emit === false) return;\n this.emitFile({\n type: \"asset\",\n fileName: options.fileName ?? CONTRACT_FILE,\n source: canonicalManifestJson(manifest),\n });\n },\n };\n}\n","import { posix, relative, resolve } from \"node:path\";\nimport ts from \"typescript\";\nimport type {\n CapabilityContractEntry,\n CapabilityPolicyAttachment,\n JsonSchema,\n} from \"@agent-surface/core\";\nimport { canonicalJson, sha256 } from \"./canonical.js\";\n\nconst CORE = \"@agent-surface/core\";\nconst COMPONENT_MACRO = \"defineAgentComponentContract\";\nconst PROCEDURE_MACRO = \"defineAgentProcedureContract\";\nconst EXTERNAL_MACRO = \"defineExternalAgentToolContract\";\nconst WRAPPERS = new Set([\n \"observationContract\",\n \"actionContract\",\n \"fromJsonSchema\",\n \"defineAgentComponentContract\",\n \"defineAgentProcedureContract\",\n \"defineExternalAgentToolContract\",\n]);\n\ntype Json = null | boolean | number | string | Json[] | { [key: string]: Json };\n\ninterface CompiledCapabilityToken {\n manifestHash: string;\n declarationId: string;\n capabilityId: string;\n contractHash: string;\n}\n\ninterface CompiledComponentProvenance {\n manifestHash: string;\n declarationId: string;\n capabilities: Record<string, CompiledCapabilityToken>;\n}\n\nexport interface ExtractedModule {\n code: string;\n entries: CapabilityContractEntry[];\n}\n\nfunction sourceKind(id: string): ts.ScriptKind {\n if (/\\.tsx(?:\\?|$)/.test(id)) return ts.ScriptKind.TSX;\n if (/\\.jsx(?:\\?|$)/.test(id)) return ts.ScriptKind.JSX;\n if (/\\.js(?:\\?|$)/.test(id)) return ts.ScriptKind.JS;\n return ts.ScriptKind.TS;\n}\n\nfunction unwrap(node: ts.Expression): ts.Expression {\n while (\n ts.isParenthesizedExpression(node) ||\n ts.isAsExpression(node) ||\n ts.isTypeAssertionExpression(node) ||\n ts.isSatisfiesExpression(node) ||\n ts.isNonNullExpression(node)\n ) {\n node = node.expression;\n }\n return node;\n}\n\nfunction propertyName(node: ts.PropertyName): string | undefined {\n if (ts.isIdentifier(node) || ts.isStringLiteral(node) || ts.isNumericLiteral(node)) {\n return node.text;\n }\n if (ts.isComputedPropertyName(node) && ts.isStringLiteral(unwrap(node.expression))) {\n return (unwrap(node.expression) as ts.StringLiteral).text;\n }\n return undefined;\n}\n\nfunction calleeName(node: ts.Expression): string | undefined {\n node = unwrap(node);\n if (ts.isIdentifier(node)) return node.text;\n if (ts.isPropertyAccessExpression(node)) return node.name.text;\n if (\n ts.isElementAccessExpression(node) &&\n node.argumentExpression &&\n ts.isStringLiteral(unwrap(node.argumentExpression))\n ) {\n return (unwrap(node.argumentExpression) as ts.StringLiteral).text;\n }\n return undefined;\n}\n\nfunction normalizedOrigin(root: string, id: string): string {\n const clean = id.replace(/^\\0/, \"virtual:\").split(\"?\")[0]!;\n if (clean.startsWith(\"virtual:\")) return clean;\n const path = clean.startsWith(\"/\\@fs/\") ? clean.slice(4) : clean;\n return posix.normalize(relative(root, resolve(path)).split(\"\\\\\").join(\"/\"));\n}\n\nclass StaticEvaluator {\n private readonly constants = new Map<string, ts.Expression>();\n private readonly active = new Set<string>();\n\n constructor(private readonly file: ts.SourceFile) {\n const visit = (node: ts.Node): void => {\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.initializer) {\n this.constants.set(node.name.text, node.initializer);\n }\n ts.forEachChild(node, visit);\n };\n visit(file);\n }\n\n evaluate(input: ts.Expression, where: string): Json {\n const node = unwrap(input);\n if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) return node.text;\n if (ts.isNumericLiteral(node)) return Number(node.text);\n if (node.kind === ts.SyntaxKind.TrueKeyword) return true;\n if (node.kind === ts.SyntaxKind.FalseKeyword) return false;\n if (node.kind === ts.SyntaxKind.NullKeyword) return null;\n if (ts.isPrefixUnaryExpression(node) && node.operator === ts.SyntaxKind.MinusToken) {\n const value = this.evaluate(node.operand, where);\n if (typeof value === \"number\") return -value;\n }\n if (ts.isArrayLiteralExpression(node)) {\n return node.elements.map((entry, index) => {\n if (ts.isSpreadElement(entry)) {\n const spread = this.evaluate(entry.expression, `${where}[${index}]`);\n if (!Array.isArray(spread)) throw this.failure(entry, `${where}: array spread is not static`);\n return spread;\n }\n return this.evaluate(entry as ts.Expression, `${where}[${index}]`);\n }).flat() as Json[];\n }\n if (ts.isObjectLiteralExpression(node)) {\n const result: Record<string, Json> = {};\n for (const property of node.properties) {\n if (ts.isSpreadAssignment(property)) {\n const spread = this.evaluate(property.expression, `${where} spread`);\n if (typeof spread !== \"object\" || spread === null || Array.isArray(spread)) {\n throw this.failure(property, `${where}: object spread is not static`);\n }\n Object.assign(result, spread);\n continue;\n }\n if (ts.isShorthandPropertyAssignment(property)) {\n result[property.name.text] = this.evaluate(property.name, `${where}.${property.name.text}`);\n continue;\n }\n if (!ts.isPropertyAssignment(property)) {\n throw this.failure(property, `${where}: methods/accessors are runtime code`);\n }\n const name = propertyName(property.name);\n if (name === undefined) throw this.failure(property.name, `${where}: computed key is not static`);\n result[name] = this.evaluate(property.initializer, `${where}.${name}`);\n }\n return result;\n }\n if (ts.isIdentifier(node)) {\n if (node.text === \"undefined\") throw this.failure(node, `${where}: undefined is not serializable`);\n if (node.text === \"emptyObjectSchema\") {\n return { type: \"object\", properties: {}, additionalProperties: false };\n }\n const value = this.constants.get(node.text);\n if (!value) throw this.failure(node, `${where}: imported/dynamic value \"${node.text}\" is not static`);\n if (this.active.has(node.text)) throw this.failure(node, `${where}: cyclic static value \"${node.text}\"`);\n this.active.add(node.text);\n try {\n return this.evaluate(value, where);\n } finally {\n this.active.delete(node.text);\n }\n }\n if (ts.isCallExpression(node)) {\n const name = calleeName(node.expression);\n if (name && WRAPPERS.has(name) && node.arguments[0]) {\n return this.evaluate(node.arguments[0], where);\n }\n throw this.failure(node, `${where}: call \"${name ?? \"<computed>\"}\" is not a compiler macro`);\n }\n if (ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) {\n const owner = this.evaluate(node.expression, where);\n const name = ts.isPropertyAccessExpression(node)\n ? node.name.text\n : node.argumentExpression && ts.isStringLiteral(unwrap(node.argumentExpression))\n ? (unwrap(node.argumentExpression) as ts.StringLiteral).text\n : undefined;\n if (name !== undefined && typeof owner === \"object\" && owner !== null && !Array.isArray(owner)) {\n const value = owner[name];\n if (value !== undefined) return value;\n }\n }\n throw this.failure(node, `${where}: expression is dynamic or non-serializable`);\n }\n\n private failure(node: ts.Node, message: string): Error {\n const position = this.file.getLineAndCharacterOfPosition(node.getStart(this.file));\n return new Error(`${this.file.fileName}:${position.line + 1}:${position.character + 1}: ${message}`);\n }\n}\n\nfunction record(value: Json, where: string): Record<string, Json> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new Error(`${where} must be a static object`);\n }\n return value;\n}\n\nfunction string(value: Json | undefined, where: string): string {\n if (typeof value !== \"string\" || value.length === 0) throw new Error(`${where} must be a string`);\n return value;\n}\n\nfunction policies(value: Json | undefined): CapabilityPolicyAttachment[] | undefined {\n if (value === undefined) return undefined;\n if (!Array.isArray(value)) throw new Error(\"policies must be a static array\");\n return value.map((entry) => record(entry, \"policy\")) as unknown as CapabilityPolicyAttachment[];\n}\n\nfunction combine<T>(inherited: readonly T[] | undefined, local: readonly T[] | undefined): T[] | undefined {\n const values = [...(inherited ?? []), ...(local ?? [])];\n if (values.length === 0) return undefined;\n const unique = new Map(values.map((value) => [canonicalJson(value), value]));\n return [...unique.entries()].sort(([a], [b]) => a.localeCompare(b)).map(([, value]) => value);\n}\n\nfunction entryHash(entry: Omit<CapabilityContractEntry, \"contractHash\" | \"targets\">): string {\n return sha256(canonicalJson(entry));\n}\n\nfunction declarationVariable(call: ts.CallExpression): string | undefined {\n let node: ts.Node = call;\n while (\n node.parent &&\n (ts.isParenthesizedExpression(node.parent) ||\n ts.isAsExpression(node.parent) ||\n ts.isSatisfiesExpression(node.parent))\n ) {\n node = node.parent;\n }\n return node.parent && ts.isVariableDeclaration(node.parent) && ts.isIdentifier(node.parent.name)\n ? node.parent.name.text\n : undefined;\n}\n\nfunction isMacroCall(\n call: ts.CallExpression,\n names: ReadonlySet<string>,\n namespaces: ReadonlySet<string>,\n aliases: ReadonlyMap<string, string>,\n): \"component\" | \"procedure\" | \"external\" | undefined {\n const expression = unwrap(call.expression);\n let imported: string | undefined;\n if (ts.isIdentifier(expression)) imported = aliases.get(expression.text);\n else if (ts.isPropertyAccessExpression(expression) && ts.isIdentifier(expression.expression)) {\n if (namespaces.has(expression.expression.text)) imported = expression.name.text;\n } else if (\n ts.isElementAccessExpression(expression) &&\n ts.isIdentifier(expression.expression) &&\n namespaces.has(expression.expression.text) &&\n expression.argumentExpression &&\n ts.isStringLiteral(unwrap(expression.argumentExpression))\n ) {\n imported = (unwrap(expression.argumentExpression) as ts.StringLiteral).text;\n }\n if (imported === COMPONENT_MACRO) return \"component\";\n if (imported === PROCEDURE_MACRO) return \"procedure\";\n if (imported === EXTERNAL_MACRO) return \"external\";\n return undefined;\n}\n\nexport function extractModule(options: {\n code: string;\n id: string;\n root: string;\n target: string;\n placeholder: string;\n}): ExtractedModule {\n const file = ts.createSourceFile(options.id, options.code, ts.ScriptTarget.Latest, true, sourceKind(options.id));\n const namespaces = new Set<string>();\n const aliases = new Map<string, string>();\n for (const statement of file.statements) {\n if (!ts.isImportDeclaration(statement) || !ts.isStringLiteral(statement.moduleSpecifier)) continue;\n if (statement.moduleSpecifier.text !== CORE || !statement.importClause) continue;\n const bindings = statement.importClause.namedBindings;\n if (bindings && ts.isNamespaceImport(bindings)) namespaces.add(bindings.name.text);\n if (bindings && ts.isNamedImports(bindings)) {\n for (const binding of bindings.elements) {\n aliases.set(binding.name.text, binding.propertyName?.text ?? binding.name.text);\n }\n }\n }\n // Assigned aliases are resolved transitively within the module.\n let changed = true;\n while (changed) {\n changed = false;\n const visitAlias = (node: ts.Node): void => {\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.initializer) {\n const init = unwrap(node.initializer);\n let source: string | undefined;\n if (ts.isIdentifier(init)) source = aliases.get(init.text);\n else if (ts.isPropertyAccessExpression(init) && ts.isIdentifier(init.expression) && namespaces.has(init.expression.text)) {\n source = init.name.text;\n }\n if (source && !aliases.has(node.name.text)) {\n aliases.set(node.name.text, source);\n changed = true;\n }\n }\n ts.forEachChild(node, visitAlias);\n };\n visitAlias(file);\n }\n\n const macroNames = new Set([COMPONENT_MACRO, PROCEDURE_MACRO, EXTERNAL_MACRO]);\n if (![...aliases.values()].some((name) => macroNames.has(name)) && namespaces.size === 0) {\n return { code: options.code, entries: [] };\n }\n\n const evaluator = new StaticEvaluator(file);\n const entries: CapabilityContractEntry[] = [];\n const injections: Array<{ position: number; text: string }> = [];\n const origin = normalizedOrigin(options.root, options.id);\n\n const visit = (node: ts.Node): void => {\n if (ts.isCallExpression(node)) {\n const macro = isMacroCall(node, macroNames, namespaces, aliases);\n if (macro) {\n if (!node.arguments[0]) throw new Error(`${origin}: contract declaration needs an argument`);\n const variable = declarationVariable(node);\n if (!variable) throw new Error(`${origin}: contract declaration must initialize a named module constant`);\n const declarationId = `${origin}#${variable}`;\n const definition = record(evaluator.evaluate(node.arguments[0], declarationId), declarationId);\n const emitted: CapabilityContractEntry[] = [];\n if (macro === \"component\") {\n const type = string(definition.type, `${declarationId}.type`);\n const inheritedPolicies = policies(definition.policies);\n const inheritedTags = definition.tags as string[] | undefined;\n const groups = [\n [\"observations\", \"observation\", \"read\"],\n [\"actions\", \"action\", undefined],\n ] as const;\n for (const [groupName, kind, defaultEffect] of groups) {\n const groupValue = definition[groupName];\n if (groupValue === undefined) continue;\n const group = record(groupValue, `${declarationId}.${groupName}`);\n for (const [name, rawMember] of Object.entries(group)) {\n const member = record(rawMember, `${declarationId}.${groupName}.${name}`);\n const capabilityPolicies = combine(inheritedPolicies, policies(member.policies));\n const capabilityTags = combine(inheritedTags, member.tags as string[] | undefined);\n const base = {\n declarationId,\n capabilityId: `view:${type}.${name}`,\n kind,\n description: string(member.description, `${declarationId}.${name}.description`),\n effect: string(member.effect ?? defaultEffect, `${declarationId}.${name}.effect`) as CapabilityContractEntry[\"effect\"],\n ...(member.input ? { inputSchema: member.input as JsonSchema } : {}),\n ...(member.output ? { outputSchema: member.output as JsonSchema } : {}),\n ...(member.confirmation ? { confirmation: member.confirmation as \"never\" | \"optional\" | \"required\" } : {}),\n ...(capabilityPolicies ? { policies: capabilityPolicies } : {}),\n ...(capabilityTags ? { tags: capabilityTags } : {}),\n origin,\n } satisfies Omit<CapabilityContractEntry, \"contractHash\" | \"targets\">;\n emitted.push({ ...base, contractHash: entryHash(base), targets: [options.target] });\n }\n }\n } else {\n const id = string(definition.id, `${declarationId}.id`);\n const base = {\n declarationId,\n capabilityId: id,\n kind: macro === \"procedure\" ? \"procedure\" as const : \"external\" as const,\n description: string(definition.description, `${declarationId}.description`),\n effect: string(definition.effect, `${declarationId}.effect`) as CapabilityContractEntry[\"effect\"],\n ...(definition.input ? { inputSchema: definition.input as JsonSchema } : {}),\n ...(definition.output ? { outputSchema: definition.output as JsonSchema } : {}),\n ...(definition.confirmation ? { confirmation: definition.confirmation as \"never\" | \"optional\" | \"required\" } : {}),\n ...(policies(definition.policies) ? { policies: policies(definition.policies) } : {}),\n ...(definition.tags ? { tags: definition.tags as string[] } : {}),\n origin,\n } satisfies Omit<CapabilityContractEntry, \"contractHash\" | \"targets\">;\n emitted.push({ ...base, contractHash: entryHash(base), targets: [options.target] });\n }\n entries.push(...emitted);\n if (node.arguments.length < 2) {\n if (macro === \"component\") {\n const capabilities: Record<string, CompiledCapabilityToken> = {};\n for (const entry of emitted) {\n capabilities[entry.capabilityId] = {\n manifestHash: options.placeholder,\n declarationId: entry.declarationId,\n capabilityId: entry.capabilityId,\n contractHash: entry.contractHash,\n };\n }\n const provenance: CompiledComponentProvenance = {\n manifestHash: options.placeholder,\n declarationId,\n capabilities,\n };\n injections.push({ position: node.arguments.end, text: `, ${JSON.stringify(provenance)}` });\n } else {\n const entry = emitted[0]!;\n const token: CompiledCapabilityToken = {\n manifestHash: options.placeholder,\n declarationId,\n capabilityId: entry.capabilityId,\n contractHash: entry.contractHash,\n };\n injections.push({ position: node.arguments.end, text: `, ${JSON.stringify(token)}` });\n }\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n visit(file);\n\n let code = options.code;\n for (const injection of injections.sort((a, b) => b.position - a.position)) {\n code = `${code.slice(0, injection.position)}${injection.text}${code.slice(injection.position)}`;\n }\n return { code, entries };\n}\n","import { resolve } from \"node:path\";\nimport type { CapabilityContractManifest } from \"@agent-surface/core\";\nimport { build, type InlineConfig } from \"vite\";\nimport { agentSurface } from \"./plugin.js\";\n\nexport interface CompileCapabilityContractOptions {\n root?: string;\n configFile?: string;\n target?: string;\n vite?: InlineConfig;\n}\n\nexport async function compileCapabilityContract(\n options: CompileCapabilityContractOptions = {},\n): Promise<CapabilityContractManifest> {\n let manifest: CapabilityContractManifest | undefined;\n const root = resolve(options.root ?? process.cwd());\n const result = await build({\n ...(options.vite ?? {}),\n root,\n ...(options.configFile ? { configFile: resolve(root, options.configFile) } : {}),\n logLevel: options.vite?.logLevel ?? \"silent\",\n build: {\n ...(options.vite?.build ?? {}),\n write: false,\n },\n plugins: [\n ...(options.vite?.plugins ?? []),\n agentSurface({\n target: options.target,\n emit: false,\n onManifest: (value) => {\n manifest = value;\n },\n }),\n ],\n });\n const outputs = Array.isArray(result) ? result : [result];\n for (const output of outputs) {\n if (!(\"output\" in output)) continue;\n const asset = output.output.find(\n (entry) => entry.type === \"asset\" && entry.fileName === \"agent-surface.contract.json\",\n );\n if (asset?.type === \"asset\") {\n const source = typeof asset.source === \"string\"\n ? asset.source\n : new TextDecoder().decode(asset.source);\n manifest = JSON.parse(source) as CapabilityContractManifest;\n break;\n }\n }\n if (!manifest) throw new Error(\"compiler did not produce a capability contract\");\n return manifest;\n}\n"],"mappings":";AAAA,SAAS,kBAAkB;AAG3B,SAAS,UAAU,OAAyB;AAC1C,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,MAAM,IAAI,SAAS;AACpD,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AACxD,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,KAAgC,EAC5C,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS,EACzC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAO,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAE,EAC/C,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,CAAC;AAAA,EAClD;AACF;AAEO,SAAS,cAAc,OAAgB,SAAS,OAAe;AACpE,SAAO,GAAG,KAAK,UAAU,UAAU,KAAK,GAAG,MAAM,SAAS,IAAI,MAAS,CAAC;AAAA;AAC1E;AAEO,SAAS,OAAO,OAAoC;AACzD,SAAO,WAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AACxD;AAEO,SAAS,gBACd,UAC0C;AAC1C,QAAM,EAAE,MAAM,OAAO,GAAG,QAAQ,IAAI;AACpC,SAAO;AACT;AAEO,SAAS,oBACd,UACQ;AACR,SAAO,OAAO,cAAc,gBAAgB,QAAQ,CAAC,CAAC;AACxD;AAEO,SAAS,sBAAsB,UAA8C;AAClF,SAAO,cAAc,UAAU,IAAI;AACrC;AAEO,SAAS,eAAe,UAA4C;AACzE,MAAI,oBAAoB,QAAQ,MAAM,SAAS,MAAM;AACnD,UAAM,IAAI,MAAM,sCAAsC,SAAS,IAAI,EAAE;AAAA,EACvE;AACF;;;AC3CA,SAAS,YAAY,oBAAoB;AACzC,SAAS,SAAS,YAAY,MAAM,WAAAA,gBAAe;AACnD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACNP,SAAS,OAAO,UAAU,eAAe;AACzC,OAAO,QAAQ;AAQf,IAAM,OAAO;AACb,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AACxB,IAAM,iBAAiB;AACvB,IAAM,WAAW,oBAAI,IAAI;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAsBD,SAAS,WAAW,IAA2B;AAC7C,MAAI,gBAAgB,KAAK,EAAE,EAAG,QAAO,GAAG,WAAW;AACnD,MAAI,gBAAgB,KAAK,EAAE,EAAG,QAAO,GAAG,WAAW;AACnD,MAAI,eAAe,KAAK,EAAE,EAAG,QAAO,GAAG,WAAW;AAClD,SAAO,GAAG,WAAW;AACvB;AAEA,SAAS,OAAO,MAAoC;AAClD,SACE,GAAG,0BAA0B,IAAI,KACjC,GAAG,eAAe,IAAI,KACtB,GAAG,0BAA0B,IAAI,KACjC,GAAG,sBAAsB,IAAI,KAC7B,GAAG,oBAAoB,IAAI,GAC3B;AACA,WAAO,KAAK;AAAA,EACd;AACA,SAAO;AACT;AAEA,SAAS,aAAa,MAA2C;AAC/D,MAAI,GAAG,aAAa,IAAI,KAAK,GAAG,gBAAgB,IAAI,KAAK,GAAG,iBAAiB,IAAI,GAAG;AAClF,WAAO,KAAK;AAAA,EACd;AACA,MAAI,GAAG,uBAAuB,IAAI,KAAK,GAAG,gBAAgB,OAAO,KAAK,UAAU,CAAC,GAAG;AAClF,WAAQ,OAAO,KAAK,UAAU,EAAuB;AAAA,EACvD;AACA,SAAO;AACT;AAEA,SAAS,WAAW,MAAyC;AAC3D,SAAO,OAAO,IAAI;AAClB,MAAI,GAAG,aAAa,IAAI,EAAG,QAAO,KAAK;AACvC,MAAI,GAAG,2BAA2B,IAAI,EAAG,QAAO,KAAK,KAAK;AAC1D,MACE,GAAG,0BAA0B,IAAI,KACjC,KAAK,sBACL,GAAG,gBAAgB,OAAO,KAAK,kBAAkB,CAAC,GAClD;AACA,WAAQ,OAAO,KAAK,kBAAkB,EAAuB;AAAA,EAC/D;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,MAAc,IAAoB;AAC1D,QAAM,QAAQ,GAAG,QAAQ,OAAO,UAAU,EAAE,MAAM,GAAG,EAAE,CAAC;AACxD,MAAI,MAAM,WAAW,UAAU,EAAG,QAAO;AACzC,QAAM,OAAO,MAAM,WAAW,OAAQ,IAAI,MAAM,MAAM,CAAC,IAAI;AAC3D,SAAO,MAAM,UAAU,SAAS,MAAM,QAAQ,IAAI,CAAC,EAAE,MAAM,IAAI,EAAE,KAAK,GAAG,CAAC;AAC5E;AAEA,IAAM,kBAAN,MAAsB;AAAA,EAIpB,YAA6B,MAAqB;AAArB;AAC3B,UAAM,QAAQ,CAAC,SAAwB;AACrC,UAAI,GAAG,sBAAsB,IAAI,KAAK,GAAG,aAAa,KAAK,IAAI,KAAK,KAAK,aAAa;AACpF,aAAK,UAAU,IAAI,KAAK,KAAK,MAAM,KAAK,WAAW;AAAA,MACrD;AACA,SAAG,aAAa,MAAM,KAAK;AAAA,IAC7B;AACA,UAAM,IAAI;AAAA,EACZ;AAAA,EAR6B;AAAA,EAHZ,YAAY,oBAAI,IAA2B;AAAA,EAC3C,SAAS,oBAAI,IAAY;AAAA,EAY1C,SAAS,OAAsB,OAAqB;AAClD,UAAM,OAAO,OAAO,KAAK;AACzB,QAAI,GAAG,gBAAgB,IAAI,KAAK,GAAG,gCAAgC,IAAI,EAAG,QAAO,KAAK;AACtF,QAAI,GAAG,iBAAiB,IAAI,EAAG,QAAO,OAAO,KAAK,IAAI;AACtD,QAAI,KAAK,SAAS,GAAG,WAAW,YAAa,QAAO;AACpD,QAAI,KAAK,SAAS,GAAG,WAAW,aAAc,QAAO;AACrD,QAAI,KAAK,SAAS,GAAG,WAAW,YAAa,QAAO;AACpD,QAAI,GAAG,wBAAwB,IAAI,KAAK,KAAK,aAAa,GAAG,WAAW,YAAY;AAClF,YAAM,QAAQ,KAAK,SAAS,KAAK,SAAS,KAAK;AAC/C,UAAI,OAAO,UAAU,SAAU,QAAO,CAAC;AAAA,IACzC;AACA,QAAI,GAAG,yBAAyB,IAAI,GAAG;AACrC,aAAO,KAAK,SAAS,IAAI,CAAC,OAAO,UAAU;AACzC,YAAI,GAAG,gBAAgB,KAAK,GAAG;AAC7B,gBAAM,SAAS,KAAK,SAAS,MAAM,YAAY,GAAG,KAAK,IAAI,KAAK,GAAG;AACnE,cAAI,CAAC,MAAM,QAAQ,MAAM,EAAG,OAAM,KAAK,QAAQ,OAAO,GAAG,KAAK,8BAA8B;AAC5F,iBAAO;AAAA,QACT;AACA,eAAO,KAAK,SAAS,OAAwB,GAAG,KAAK,IAAI,KAAK,GAAG;AAAA,MACnE,CAAC,EAAE,KAAK;AAAA,IACV;AACA,QAAI,GAAG,0BAA0B,IAAI,GAAG;AACtC,YAAM,SAA+B,CAAC;AACtC,iBAAW,YAAY,KAAK,YAAY;AACtC,YAAI,GAAG,mBAAmB,QAAQ,GAAG;AACnC,gBAAM,SAAS,KAAK,SAAS,SAAS,YAAY,GAAG,KAAK,SAAS;AACnE,cAAI,OAAO,WAAW,YAAY,WAAW,QAAQ,MAAM,QAAQ,MAAM,GAAG;AAC1E,kBAAM,KAAK,QAAQ,UAAU,GAAG,KAAK,+BAA+B;AAAA,UACtE;AACA,iBAAO,OAAO,QAAQ,MAAM;AAC5B;AAAA,QACF;AACA,YAAI,GAAG,8BAA8B,QAAQ,GAAG;AAC9C,iBAAO,SAAS,KAAK,IAAI,IAAI,KAAK,SAAS,SAAS,MAAM,GAAG,KAAK,IAAI,SAAS,KAAK,IAAI,EAAE;AAC1F;AAAA,QACF;AACA,YAAI,CAAC,GAAG,qBAAqB,QAAQ,GAAG;AACtC,gBAAM,KAAK,QAAQ,UAAU,GAAG,KAAK,sCAAsC;AAAA,QAC7E;AACA,cAAM,OAAO,aAAa,SAAS,IAAI;AACvC,YAAI,SAAS,OAAW,OAAM,KAAK,QAAQ,SAAS,MAAM,GAAG,KAAK,8BAA8B;AAChG,eAAO,IAAI,IAAI,KAAK,SAAS,SAAS,aAAa,GAAG,KAAK,IAAI,IAAI,EAAE;AAAA,MACvE;AACA,aAAO;AAAA,IACT;AACA,QAAI,GAAG,aAAa,IAAI,GAAG;AACzB,UAAI,KAAK,SAAS,YAAa,OAAM,KAAK,QAAQ,MAAM,GAAG,KAAK,iCAAiC;AACjG,UAAI,KAAK,SAAS,qBAAqB;AACrC,eAAO,EAAE,MAAM,UAAU,YAAY,CAAC,GAAG,sBAAsB,MAAM;AAAA,MACvE;AACA,YAAM,QAAQ,KAAK,UAAU,IAAI,KAAK,IAAI;AAC1C,UAAI,CAAC,MAAO,OAAM,KAAK,QAAQ,MAAM,GAAG,KAAK,6BAA6B,KAAK,IAAI,iBAAiB;AACpG,UAAI,KAAK,OAAO,IAAI,KAAK,IAAI,EAAG,OAAM,KAAK,QAAQ,MAAM,GAAG,KAAK,0BAA0B,KAAK,IAAI,GAAG;AACvG,WAAK,OAAO,IAAI,KAAK,IAAI;AACzB,UAAI;AACF,eAAO,KAAK,SAAS,OAAO,KAAK;AAAA,MACnC,UAAE;AACA,aAAK,OAAO,OAAO,KAAK,IAAI;AAAA,MAC9B;AAAA,IACF;AACA,QAAI,GAAG,iBAAiB,IAAI,GAAG;AAC7B,YAAM,OAAO,WAAW,KAAK,UAAU;AACvC,UAAI,QAAQ,SAAS,IAAI,IAAI,KAAK,KAAK,UAAU,CAAC,GAAG;AACnD,eAAO,KAAK,SAAS,KAAK,UAAU,CAAC,GAAG,KAAK;AAAA,MAC/C;AACA,YAAM,KAAK,QAAQ,MAAM,GAAG,KAAK,WAAW,QAAQ,YAAY,2BAA2B;AAAA,IAC7F;AACA,QAAI,GAAG,2BAA2B,IAAI,KAAK,GAAG,0BAA0B,IAAI,GAAG;AAC7E,YAAM,QAAQ,KAAK,SAAS,KAAK,YAAY,KAAK;AAClD,YAAM,OAAO,GAAG,2BAA2B,IAAI,IAC3C,KAAK,KAAK,OACV,KAAK,sBAAsB,GAAG,gBAAgB,OAAO,KAAK,kBAAkB,CAAC,IAC1E,OAAO,KAAK,kBAAkB,EAAuB,OACtD;AACN,UAAI,SAAS,UAAa,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK,GAAG;AAC9F,cAAM,QAAQ,MAAM,IAAI;AACxB,YAAI,UAAU,OAAW,QAAO;AAAA,MAClC;AAAA,IACF;AACA,UAAM,KAAK,QAAQ,MAAM,GAAG,KAAK,6CAA6C;AAAA,EAChF;AAAA,EAEQ,QAAQ,MAAe,SAAwB;AACrD,UAAM,WAAW,KAAK,KAAK,8BAA8B,KAAK,SAAS,KAAK,IAAI,CAAC;AACjF,WAAO,IAAI,MAAM,GAAG,KAAK,KAAK,QAAQ,IAAI,SAAS,OAAO,CAAC,IAAI,SAAS,YAAY,CAAC,KAAK,OAAO,EAAE;AAAA,EACrG;AACF;AAEA,SAAS,OAAO,OAAa,OAAqC;AAChE,MAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GAAG;AACvE,UAAM,IAAI,MAAM,GAAG,KAAK,0BAA0B;AAAA,EACpD;AACA,SAAO;AACT;AAEA,SAAS,OAAO,OAAyB,OAAuB;AAC9D,MAAI,OAAO,UAAU,YAAY,MAAM,WAAW,EAAG,OAAM,IAAI,MAAM,GAAG,KAAK,mBAAmB;AAChG,SAAO;AACT;AAEA,SAAS,SAAS,OAAmE;AACnF,MAAI,UAAU,OAAW,QAAO;AAChC,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,OAAM,IAAI,MAAM,iCAAiC;AAC5E,SAAO,MAAM,IAAI,CAAC,UAAU,OAAO,OAAO,QAAQ,CAAC;AACrD;AAEA,SAAS,QAAW,WAAqC,OAAkD;AACzG,QAAM,SAAS,CAAC,GAAI,aAAa,CAAC,GAAI,GAAI,SAAS,CAAC,CAAE;AACtD,MAAI,OAAO,WAAW,EAAG,QAAO;AAChC,QAAM,SAAS,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,KAAK,GAAG,KAAK,CAAC,CAAC;AAC3E,SAAO,CAAC,GAAG,OAAO,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,KAAK;AAC9F;AAEA,SAAS,UAAU,OAA0E;AAC3F,SAAO,OAAO,cAAc,KAAK,CAAC;AACpC;AAEA,SAAS,oBAAoB,MAA6C;AACxE,MAAI,OAAgB;AACpB,SACE,KAAK,WACJ,GAAG,0BAA0B,KAAK,MAAM,KACvC,GAAG,eAAe,KAAK,MAAM,KAC7B,GAAG,sBAAsB,KAAK,MAAM,IACtC;AACA,WAAO,KAAK;AAAA,EACd;AACA,SAAO,KAAK,UAAU,GAAG,sBAAsB,KAAK,MAAM,KAAK,GAAG,aAAa,KAAK,OAAO,IAAI,IAC3F,KAAK,OAAO,KAAK,OACjB;AACN;AAEA,SAAS,YACP,MACA,OACA,YACA,SACoD;AACpD,QAAM,aAAa,OAAO,KAAK,UAAU;AACzC,MAAI;AACJ,MAAI,GAAG,aAAa,UAAU,EAAG,YAAW,QAAQ,IAAI,WAAW,IAAI;AAAA,WAC9D,GAAG,2BAA2B,UAAU,KAAK,GAAG,aAAa,WAAW,UAAU,GAAG;AAC5F,QAAI,WAAW,IAAI,WAAW,WAAW,IAAI,EAAG,YAAW,WAAW,KAAK;AAAA,EAC7E,WACE,GAAG,0BAA0B,UAAU,KACvC,GAAG,aAAa,WAAW,UAAU,KACrC,WAAW,IAAI,WAAW,WAAW,IAAI,KACzC,WAAW,sBACX,GAAG,gBAAgB,OAAO,WAAW,kBAAkB,CAAC,GACxD;AACA,eAAY,OAAO,WAAW,kBAAkB,EAAuB;AAAA,EACzE;AACA,MAAI,aAAa,gBAAiB,QAAO;AACzC,MAAI,aAAa,gBAAiB,QAAO;AACzC,MAAI,aAAa,eAAgB,QAAO;AACxC,SAAO;AACT;AAEO,SAAS,cAAc,SAMV;AAClB,QAAM,OAAO,GAAG,iBAAiB,QAAQ,IAAI,QAAQ,MAAM,GAAG,aAAa,QAAQ,MAAM,WAAW,QAAQ,EAAE,CAAC;AAC/G,QAAM,aAAa,oBAAI,IAAY;AACnC,QAAM,UAAU,oBAAI,IAAoB;AACxC,aAAW,aAAa,KAAK,YAAY;AACvC,QAAI,CAAC,GAAG,oBAAoB,SAAS,KAAK,CAAC,GAAG,gBAAgB,UAAU,eAAe,EAAG;AAC1F,QAAI,UAAU,gBAAgB,SAAS,QAAQ,CAAC,UAAU,aAAc;AACxE,UAAM,WAAW,UAAU,aAAa;AACxC,QAAI,YAAY,GAAG,kBAAkB,QAAQ,EAAG,YAAW,IAAI,SAAS,KAAK,IAAI;AACjF,QAAI,YAAY,GAAG,eAAe,QAAQ,GAAG;AAC3C,iBAAW,WAAW,SAAS,UAAU;AACvC,gBAAQ,IAAI,QAAQ,KAAK,MAAM,QAAQ,cAAc,QAAQ,QAAQ,KAAK,IAAI;AAAA,MAChF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,UAAU;AACd,SAAO,SAAS;AACd,cAAU;AACV,UAAM,aAAa,CAAC,SAAwB;AAC1C,UAAI,GAAG,sBAAsB,IAAI,KAAK,GAAG,aAAa,KAAK,IAAI,KAAK,KAAK,aAAa;AACpF,cAAM,OAAO,OAAO,KAAK,WAAW;AACpC,YAAI;AACJ,YAAI,GAAG,aAAa,IAAI,EAAG,UAAS,QAAQ,IAAI,KAAK,IAAI;AAAA,iBAChD,GAAG,2BAA2B,IAAI,KAAK,GAAG,aAAa,KAAK,UAAU,KAAK,WAAW,IAAI,KAAK,WAAW,IAAI,GAAG;AACxH,mBAAS,KAAK,KAAK;AAAA,QACrB;AACA,YAAI,UAAU,CAAC,QAAQ,IAAI,KAAK,KAAK,IAAI,GAAG;AAC1C,kBAAQ,IAAI,KAAK,KAAK,MAAM,MAAM;AAClC,oBAAU;AAAA,QACZ;AAAA,MACF;AACA,SAAG,aAAa,MAAM,UAAU;AAAA,IAClC;AACA,eAAW,IAAI;AAAA,EACjB;AAEA,QAAM,aAAa,oBAAI,IAAI,CAAC,iBAAiB,iBAAiB,cAAc,CAAC;AAC7E,MAAI,CAAC,CAAC,GAAG,QAAQ,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,WAAW,IAAI,IAAI,CAAC,KAAK,WAAW,SAAS,GAAG;AACxF,WAAO,EAAE,MAAM,QAAQ,MAAM,SAAS,CAAC,EAAE;AAAA,EAC3C;AAEA,QAAM,YAAY,IAAI,gBAAgB,IAAI;AAC1C,QAAM,UAAqC,CAAC;AAC5C,QAAM,aAAwD,CAAC;AAC/D,QAAM,SAAS,iBAAiB,QAAQ,MAAM,QAAQ,EAAE;AAExD,QAAM,QAAQ,CAAC,SAAwB;AACrC,QAAI,GAAG,iBAAiB,IAAI,GAAG;AAC7B,YAAM,QAAQ,YAAY,MAAM,YAAY,YAAY,OAAO;AAC/D,UAAI,OAAO;AACT,YAAI,CAAC,KAAK,UAAU,CAAC,EAAG,OAAM,IAAI,MAAM,GAAG,MAAM,0CAA0C;AAC3F,cAAM,WAAW,oBAAoB,IAAI;AACzC,YAAI,CAAC,SAAU,OAAM,IAAI,MAAM,GAAG,MAAM,gEAAgE;AACxG,cAAM,gBAAgB,GAAG,MAAM,IAAI,QAAQ;AAC3C,cAAM,aAAa,OAAO,UAAU,SAAS,KAAK,UAAU,CAAC,GAAG,aAAa,GAAG,aAAa;AAC7F,cAAM,UAAqC,CAAC;AAC5C,YAAI,UAAU,aAAa;AACzB,gBAAM,OAAO,OAAO,WAAW,MAAM,GAAG,aAAa,OAAO;AAC5D,gBAAM,oBAAoB,SAAS,WAAW,QAAQ;AACtD,gBAAM,gBAAgB,WAAW;AACjC,gBAAM,SAAS;AAAA,YACb,CAAC,gBAAgB,eAAe,MAAM;AAAA,YACtC,CAAC,WAAW,UAAU,MAAS;AAAA,UACjC;AACA,qBAAW,CAAC,WAAW,MAAM,aAAa,KAAK,QAAQ;AACrD,kBAAM,aAAa,WAAW,SAAS;AACvC,gBAAI,eAAe,OAAW;AAC9B,kBAAM,QAAQ,OAAO,YAAY,GAAG,aAAa,IAAI,SAAS,EAAE;AAChE,uBAAW,CAAC,MAAM,SAAS,KAAK,OAAO,QAAQ,KAAK,GAAG;AACrD,oBAAM,SAAS,OAAO,WAAW,GAAG,aAAa,IAAI,SAAS,IAAI,IAAI,EAAE;AACxE,oBAAM,qBAAqB,QAAQ,mBAAmB,SAAS,OAAO,QAAQ,CAAC;AAC/E,oBAAM,iBAAiB,QAAQ,eAAe,OAAO,IAA4B;AACjF,oBAAM,OAAO;AAAA,gBACX;AAAA,gBACA,cAAc,QAAQ,IAAI,IAAI,IAAI;AAAA,gBAClC;AAAA,gBACA,aAAa,OAAO,OAAO,aAAa,GAAG,aAAa,IAAI,IAAI,cAAc;AAAA,gBAC9E,QAAQ,OAAO,OAAO,UAAU,eAAe,GAAG,aAAa,IAAI,IAAI,SAAS;AAAA,gBAChF,GAAI,OAAO,QAAQ,EAAE,aAAa,OAAO,MAAoB,IAAI,CAAC;AAAA,gBAClE,GAAI,OAAO,SAAS,EAAE,cAAc,OAAO,OAAqB,IAAI,CAAC;AAAA,gBACrE,GAAI,OAAO,eAAe,EAAE,cAAc,OAAO,aAAkD,IAAI,CAAC;AAAA,gBACxG,GAAI,qBAAqB,EAAE,UAAU,mBAAmB,IAAI,CAAC;AAAA,gBAC7D,GAAI,iBAAiB,EAAE,MAAM,eAAe,IAAI,CAAC;AAAA,gBACjD;AAAA,cACF;AACA,sBAAQ,KAAK,EAAE,GAAG,MAAM,cAAc,UAAU,IAAI,GAAG,SAAS,CAAC,QAAQ,MAAM,EAAE,CAAC;AAAA,YACpF;AAAA,UACF;AAAA,QACF,OAAO;AACL,gBAAM,KAAK,OAAO,WAAW,IAAI,GAAG,aAAa,KAAK;AACtD,gBAAM,OAAO;AAAA,YACX;AAAA,YACA,cAAc;AAAA,YACd,MAAM,UAAU,cAAc,cAAuB;AAAA,YACrD,aAAa,OAAO,WAAW,aAAa,GAAG,aAAa,cAAc;AAAA,YAC1E,QAAQ,OAAO,WAAW,QAAQ,GAAG,aAAa,SAAS;AAAA,YAC3D,GAAI,WAAW,QAAQ,EAAE,aAAa,WAAW,MAAoB,IAAI,CAAC;AAAA,YAC1E,GAAI,WAAW,SAAS,EAAE,cAAc,WAAW,OAAqB,IAAI,CAAC;AAAA,YAC7E,GAAI,WAAW,eAAe,EAAE,cAAc,WAAW,aAAkD,IAAI,CAAC;AAAA,YAChH,GAAI,SAAS,WAAW,QAAQ,IAAI,EAAE,UAAU,SAAS,WAAW,QAAQ,EAAE,IAAI,CAAC;AAAA,YACnF,GAAI,WAAW,OAAO,EAAE,MAAM,WAAW,KAAiB,IAAI,CAAC;AAAA,YAC/D;AAAA,UACF;AACA,kBAAQ,KAAK,EAAE,GAAG,MAAM,cAAc,UAAU,IAAI,GAAG,SAAS,CAAC,QAAQ,MAAM,EAAE,CAAC;AAAA,QACpF;AACA,gBAAQ,KAAK,GAAG,OAAO;AACvB,YAAI,KAAK,UAAU,SAAS,GAAG;AAC7B,cAAI,UAAU,aAAa;AACzB,kBAAM,eAAwD,CAAC;AAC/D,uBAAW,SAAS,SAAS;AAC3B,2BAAa,MAAM,YAAY,IAAI;AAAA,gBACjC,cAAc,QAAQ;AAAA,gBACtB,eAAe,MAAM;AAAA,gBACrB,cAAc,MAAM;AAAA,gBACpB,cAAc,MAAM;AAAA,cACtB;AAAA,YACF;AACA,kBAAM,aAA0C;AAAA,cAC9C,cAAc,QAAQ;AAAA,cACtB;AAAA,cACA;AAAA,YACF;AACA,uBAAW,KAAK,EAAE,UAAU,KAAK,UAAU,KAAK,MAAM,KAAK,KAAK,UAAU,UAAU,CAAC,GAAG,CAAC;AAAA,UAC3F,OAAO;AACL,kBAAM,QAAQ,QAAQ,CAAC;AACvB,kBAAM,QAAiC;AAAA,cACrC,cAAc,QAAQ;AAAA,cACtB;AAAA,cACA,cAAc,MAAM;AAAA,cACpB,cAAc,MAAM;AAAA,YACtB;AACA,uBAAW,KAAK,EAAE,UAAU,KAAK,UAAU,KAAK,MAAM,KAAK,KAAK,UAAU,KAAK,CAAC,GAAG,CAAC;AAAA,UACtF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,OAAG,aAAa,MAAM,KAAK;AAAA,EAC7B;AACA,QAAM,IAAI;AAEV,MAAI,OAAO,QAAQ;AACnB,aAAW,aAAa,WAAW,KAAK,CAAC,GAAG,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAG;AAC1E,WAAO,GAAG,KAAK,MAAM,GAAG,UAAU,QAAQ,CAAC,GAAG,UAAU,IAAI,GAAG,KAAK,MAAM,UAAU,QAAQ,CAAC;AAAA,EAC/F;AACA,SAAO,EAAE,MAAM,QAAQ;AACzB;;;ADrZO,IAAM,mBAAmB;AACzB,IAAM,gBAAgB;AACtB,IAAM,sBAAsB;AACnC,IAAM,+BAA+B,KAAK,mBAAmB;AAe7D,SAAS,aAAa,SAA+D;AACnF,QAAM,QAAQ,oBAAI,IAAqC;AACvD,aAAW,SAAS,SAAS;AAC3B,UAAM,MAAM,GAAG,MAAM,aAAa,KAAK,MAAM,YAAY;AACzD,UAAM,UAAU,MAAM,IAAI,GAAG;AAC7B,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI,KAAK,EAAE,GAAG,OAAO,SAAS,CAAC,GAAG,MAAM,OAAO,EAAE,CAAC;AACxD;AAAA,IACF;AACA,QAAI,QAAQ,iBAAiB,MAAM,cAAc;AAC/C,YAAM,IAAI,MAAM,aAAa,MAAM,aAAa,QAAQ,MAAM,YAAY,gCAAgC;AAAA,IAC5G;AACA,YAAQ,UAAU,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,QAAQ,SAAS,GAAG,MAAM,OAAO,CAAC,CAAC,EAAE,KAAK;AAAA,EAC9E;AACA,SAAO,CAAC,GAAG,MAAM,OAAO,CAAC,EAAE;AAAA,IAAK,CAAC,GAAG,MAClC,GAAG,EAAE,aAAa,KAAK,EAAE,YAAY,GAAG,cAAc,GAAG,EAAE,aAAa,KAAK,EAAE,YAAY,EAAE;AAAA,EAC/F;AACF;AAEA,SAAS,gBAAgB,SAAmD;AAC1E,aAAW,SAAS,SAAS;AAC3B,QAAI,MAAM,SAAS,cAAc,CAAC,kBAAkB,MAAM,YAAY,GAAG;AACvE,YAAM,IAAI,MAAM,mCAAmC,MAAM,YAAY,GAAG;AAAA,IAC1E;AACA,eAAW,CAAC,OAAO,MAAM,KAAK,CAAC,CAAC,SAAS,MAAM,WAAW,GAAG,CAAC,UAAU,MAAM,YAAY,CAAC,GAAY;AACrG,UAAI,CAAC,OAAQ;AACb,YAAM,SAAS,2BAA2B,QAAQ,cAAc;AAChE,UAAI,CAAC,OAAO,IAAI;AACd,cAAM,IAAI,MAAM,GAAG,MAAM,aAAa,IAAI,KAAK,YAAY,OAAO,MAAM,EAAE;AAAA,MAC5E;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,mBAAmB,OAA4B,MAA0C;AAChG,MAAI,CAAC,MAAM,OAAQ,OAAM,IAAI,MAAM,sBAAsB,MAAM,IAAI,4BAA4B;AAC/F,QAAM,OAAO,WAAW,MAAM,IAAI,IAAI,MAAM,OAAOC,SAAQ,MAAM,MAAM,IAAI;AAC3E,QAAM,QAAQ,aAAa,IAAI;AAC/B,QAAM,SAAS,OAAO,KAAK;AAC3B,MAAI,WAAW,MAAM,QAAQ;AAC3B,UAAM,IAAI,MAAM,sBAAsB,MAAM,IAAI,+BAA+B,MAAM,MAAM,SAAS,MAAM,EAAE;AAAA,EAC9G;AACA,QAAM,WAAW,KAAK,MAAM,MAAM,SAAS,MAAM,CAAC;AAClD,iBAAe,QAAQ;AACvB,SAAO;AACT;AAEA,SAAS,sBAAsB,IAAY,MAAuC;AAChF,MAAI,GAAG,WAAW,IAAI,KAAK,CAAC,WAAW,EAAE,EAAG,QAAO;AACnD,MAAI,MAAM,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAC,CAAE;AACnC,SAAO,QAAQ,QAAQ,GAAG,GAAG;AAC3B,UAAM,cAAc,KAAK,KAAK,cAAc;AAC5C,QAAI,WAAW,WAAW,GAAG;AAC3B,UAAI,KAAK,IAAI,WAAW,EAAG,QAAO;AAClC,WAAK,IAAI,WAAW;AACpB,YAAM,MAAM,KAAK,MAAM,aAAa,aAAa,MAAM,CAAC;AAGxD,aAAO,IAAI,cAAc,WAAWA,SAAQ,KAAK,IAAI,aAAa,QAAQ,IAAI;AAAA,IAChF;AACA,UAAM,QAAQ,GAAG;AAAA,EACnB;AACA,SAAO;AACT;AAEO,SAAS,aAAa,UAAuC,CAAC,GAAW;AAC9E,QAAM,SAAS,QAAQ,UAAU;AACjC,QAAM,cAAc,iCAAiC,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;AACxF,QAAM,sBAAsB,4BAA4B,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;AAC3F,MAAI,OAAO,QAAQ,IAAI;AACvB,MAAI,UAAqC,CAAC;AAC1C,MAAI;AAEJ,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,eAAe,QAAQ;AACrB,aAAO,OAAO;AAAA,IAChB;AAAA,IACA,UAAU,IAAI;AACZ,aAAO,OAAO,sBAAsB,+BAA+B;AAAA,IACrE;AAAA,IACA,KAAK,IAAI;AACP,UAAI,OAAO,6BAA8B,QAAO;AAChD,aAAO;AAAA,mBACM,mBAAmB;AAAA;AAAA;AAAA,IAGlC;AAAA,IACA,aAAa;AACX,gBAAU,CAAC;AACX,iBAAW;AAAA,IACb;AAAA,IACA,UAAU,MAAM,IAAI;AAClB,UACE,GAAG,SAAS,+BAA+B,KAC3C,gEAAgE,KAAK,EAAE,GACvE;AACA,eAAO;AAAA,MACT;AACA,UAAI,gCAAgC,KAAK,IAAI,GAAG;AAC9C,cAAM,IAAI,MAAM,GAAG,EAAE,kFAAkF;AAAA,MACzG;AACA,UAAI,gDAAgD,KAAK,IAAI,GAAG;AAC9D,cAAM,IAAI,MAAM,GAAG,EAAE,oFAAoF;AAAA,MAC3G;AACA,UAAI,8BAA8B,KAAK,IAAI,KAAK,uCAAuC,KAAK,IAAI,GAAG;AACjG,cAAM,IAAI,MAAM,GAAG,EAAE,sEAAsE;AAAA,MAC7F;AACA,UACE,CAAC,KAAK,SAAS,8BAA8B,KAC7C,CAAC,KAAK,SAAS,8BAA8B,KAC7C,CAAC,KAAK,SAAS,iCAAiC,GAChD;AACA,eAAO;AAAA,MACT;AACA,YAAM,YAAY,cAAc,EAAE,MAAM,IAAI,MAAM,QAAQ,YAAY,CAAC;AACvE,cAAQ,KAAK,GAAG,UAAU,OAAO;AACjC,aAAO,UAAU,SAAS,OAAO,OAAO,EAAE,MAAM,UAAU,MAAM,KAAK,KAAK;AAAA,IAC5E;AAAA,IACA,SAAS,OAAO;AACd,UAAI,MAAO;AACX,YAAM,oBAAqE,CAAC;AAC5E,YAAM,kBAA6C,CAAC;AACpD,YAAM,eAAe,oBAAI,IAAY;AACrC,YAAM,WAAW,oBAAI,IAAY;AACjC,iBAAW,MAAM,KAAK,aAAa,GAAG;AACpC,cAAM,UAAU,sBAAsB,IAAI,YAAY;AACtD,YAAI,QAAS,UAAS,IAAI,OAAO;AAAA,MACnC;AACA,iBAAW,WAAW,UAAU;AAC9B,cAAM,QAAQ,aAAa,OAAO;AAClC,cAAM,WAAW,KAAK,MAAM,MAAM,SAAS,MAAM,CAAC;AAClD,uBAAe,QAAQ;AACvB,wBAAgB,KAAK,GAAG,SAAS,YAAY;AAC7C,0BAAkB,KAAK,EAAE,QAAQ,QAAQ,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,GAAG,GAAG,QAAQ,OAAO,KAAK,EAAE,CAAC;AAAA,MAClG;AACA,iBAAW,UAAU,QAAQ,qBAAqB,CAAC,GAAG;AACpD,cAAM,WAAW,mBAAmB,QAAQ,IAAI;AAChD,wBAAgB,KAAK,GAAG,SAAS,YAAY;AAC7C,0BAAkB,KAAK,EAAE,QAAQ,OAAO,MAAM,QAAQ,OAAO,OAAO,CAAC;AAAA,MACvE;AACA,YAAM,eAAe,aAAa,CAAC,GAAG,SAAS,GAAG,eAAe,CAAC;AAClE,sBAAgB,YAAY;AAC5B,YAAM,UAAU,CAAC,GAAG,IAAI,IAAI,aAAa,QAAQ,CAAC,UAAU,MAAM,OAAO,CAAC,CAAC,EAAE,KAAK;AAClF,YAAM,UAAU;AAAA,QACd,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB;AAAA,QACA;AAAA,QACA,mBAAmB,kBAAkB,KAAK,CAAC,GAAG,MAAM,EAAE,OAAO,cAAc,EAAE,MAAM,CAAC;AAAA,QACpF,cAAc,EAAE,QAAQ,SAAkB;AAAA,MAC5C;AACA,iBAAW,EAAE,GAAG,SAAS,MAAM,oBAAoB,OAAO,EAAE;AAC5D,cAAQ,aAAa,QAAQ;AAAA,IAC/B;AAAA,IACA,YAAY,MAAM;AAChB,UAAI,CAAC,YAAa,CAAC,KAAK,SAAS,WAAW,KAAK,CAAC,KAAK,SAAS,mBAAmB,EAAI,QAAO;AAC9F,aAAO;AAAA,QACL,MAAM,KACH,WAAW,aAAa,SAAS,IAAI,EACrC,WAAW,qBAAqB,KAAK,UAAU,QAAQ,CAAC;AAAA,QAC3D,KAAK;AAAA,MACP;AAAA,IACF;AAAA,IACA,iBAAiB;AACf,UAAI,CAAC,YAAY,QAAQ,SAAS,MAAO;AACzC,WAAK,SAAS;AAAA,QACZ,MAAM;AAAA,QACN,UAAU,QAAQ,YAAY;AAAA,QAC9B,QAAQ,sBAAsB,QAAQ;AAAA,MACxC,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;AE7MA,SAAS,WAAAC,gBAAe;AAExB,SAAS,aAAgC;AAUzC,eAAsB,0BACpB,UAA4C,CAAC,GACR;AACrC,MAAI;AACJ,QAAM,OAAOC,SAAQ,QAAQ,QAAQ,QAAQ,IAAI,CAAC;AAClD,QAAM,SAAS,MAAM,MAAM;AAAA,IACzB,GAAI,QAAQ,QAAQ,CAAC;AAAA,IACrB;AAAA,IACA,GAAI,QAAQ,aAAa,EAAE,YAAYA,SAAQ,MAAM,QAAQ,UAAU,EAAE,IAAI,CAAC;AAAA,IAC9E,UAAU,QAAQ,MAAM,YAAY;AAAA,IACpC,OAAO;AAAA,MACL,GAAI,QAAQ,MAAM,SAAS,CAAC;AAAA,MAC5B,OAAO;AAAA,IACT;AAAA,IACA,SAAS;AAAA,MACP,GAAI,QAAQ,MAAM,WAAW,CAAC;AAAA,MAC9B,aAAa;AAAA,QACX,QAAQ,QAAQ;AAAA,QAChB,MAAM;AAAA,QACN,YAAY,CAAC,UAAU;AACrB,qBAAW;AAAA,QACb;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACD,QAAM,UAAU,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,MAAM;AACxD,aAAW,UAAU,SAAS;AAC5B,QAAI,EAAE,YAAY,QAAS;AAC3B,UAAM,QAAQ,OAAO,OAAO;AAAA,MAC1B,CAAC,UAAU,MAAM,SAAS,WAAW,MAAM,aAAa;AAAA,IAC1D;AACA,QAAI,OAAO,SAAS,SAAS;AAC3B,YAAM,SAAS,OAAO,MAAM,WAAW,WACnC,MAAM,SACN,IAAI,YAAY,EAAE,OAAO,MAAM,MAAM;AACzC,iBAAW,KAAK,MAAM,MAAM;AAC5B;AAAA,IACF;AAAA,EACF;AACA,MAAI,CAAC,SAAU,OAAM,IAAI,MAAM,gDAAgD;AAC/E,SAAO;AACT;","names":["resolve","resolve","resolve","resolve"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-surface/compiler",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.0",
|
|
4
4
|
"description": "Vite compiler for deterministic agent capability contracts",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"typescript": "^5.9.2",
|
|
22
22
|
"vite": "^7.1.3",
|
|
23
|
-
"@agent-surface/core": "^0.
|
|
23
|
+
"@agent-surface/core": "^0.17.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@types/node": "^20.19.0"
|