@agent-surface/compiler 0.16.0 → 0.18.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 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 provenance; and provides `virtual:agent-surface-contract`.
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,18 +8,39 @@ 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.16.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
- interface PinnedContractInput {
15
- path: string;
14
+ /**
15
+ * One dependency the consumer has approved as a capability contributor.
16
+ *
17
+ * Keyed by package name rather than path: a path is a property of the installer
18
+ * (pnpm store layout, hoisting, workspace links), while the name is what a
19
+ * reviewer actually approves.
20
+ */
21
+ interface ExternalContractAllowEntry {
22
+ /** npm package name, exactly as in its package.json. */
23
+ package: string;
24
+ /** sha256 of that package's contribution, as reported by a failing build. */
16
25
  digest: string;
26
+ /**
27
+ * Explicit sidecar path, for a contract that is not reachable from the
28
+ * production module graph. Auto-discovered sidecars need no path.
29
+ */
30
+ path?: string;
31
+ }
32
+ interface ExternalContractPolicy {
33
+ /**
34
+ * Dependencies allowed to contribute capabilities. A contribution from a
35
+ * package absent here fails the build: discovery is not authorization.
36
+ */
37
+ allow?: ExternalContractAllowEntry[];
17
38
  }
18
39
  interface AgentSurfaceCompilerOptions {
19
40
  target?: string;
20
41
  emit?: boolean;
21
42
  fileName?: string;
22
- externalContracts?: PinnedContractInput[];
43
+ externalContracts?: ExternalContractPolicy;
23
44
  onManifest?: (manifest: CapabilityContractManifest) => void;
24
45
  }
25
46
  declare function agentSurface(options?: AgentSurfaceCompilerOptions): Plugin;
@@ -28,8 +49,14 @@ interface CompileCapabilityContractOptions {
28
49
  root?: string;
29
50
  configFile?: string;
30
51
  target?: string;
52
+ /**
53
+ * Which dependencies may contribute capabilities. Forwarded to the compiler
54
+ * plugin: without it, every discovered external contract is unauthorized and
55
+ * the build fails.
56
+ */
57
+ externalContracts?: ExternalContractPolicy;
31
58
  vite?: InlineConfig;
32
59
  }
33
60
  declare function compileCapabilityContract(options?: CompileCapabilityContractOptions): Promise<CapabilityContractManifest>;
34
61
 
35
- export { type AgentSurfaceCompilerOptions, COMPILER_VERSION, CONTRACT_FILE, type CompileCapabilityContractOptions, type PinnedContractInput, VIRTUAL_CONTRACT_ID, agentSurface, canonicalJson, canonicalManifestJson, compileCapabilityContract, computeManifestHash, manifestPayload, sha256, verifyManifest };
62
+ export { type AgentSurfaceCompilerOptions, COMPILER_VERSION, CONTRACT_FILE, type CompileCapabilityContractOptions, type ExternalContractAllowEntry, type ExternalContractPolicy, VIRTUAL_CONTRACT_ID, agentSurface, canonicalJson, canonicalManifestJson, compileCapabilityContract, computeManifestHash, manifestPayload, sha256, verifyManifest };
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.localeCompare(b)).map(([key, entry]) => [key, normalize(entry)])
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) {
@@ -32,7 +32,7 @@ function verifyManifest(manifest) {
32
32
 
33
33
  // src/plugin.ts
34
34
  import { existsSync, readFileSync } from "fs";
35
- import { dirname, isAbsolute, join, resolve as resolve2 } from "path";
35
+ import { dirname, isAbsolute, join, relative as relative2, resolve as resolve2, sep } from "path";
36
36
  import {
37
37
  DEFAULT_LIMITS,
38
38
  parseCapabilityId,
@@ -375,7 +375,7 @@ function extractModule(options) {
375
375
  }
376
376
 
377
377
  // src/plugin.ts
378
- var COMPILER_VERSION = "0.16.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}`;
@@ -411,39 +411,83 @@ function validateEntries(entries) {
411
411
  }
412
412
  }
413
413
  }
414
- function readPinnedContract(input, root) {
415
- if (!input.digest) throw new Error(`external contract "${input.path}" is not content-addressed`);
416
- const path = isAbsolute(input.path) ? input.path : resolve2(root, input.path);
417
- const bytes = readFileSync(path);
418
- const actual = sha256(bytes);
419
- if (actual !== input.digest) {
420
- throw new Error(`external contract "${input.path}" digest mismatch: expected ${input.digest}, got ${actual}`);
421
- }
422
- const manifest = JSON.parse(bytes.toString("utf8"));
423
- verifyManifest(manifest);
424
- return manifest;
425
- }
426
- function nearestPackageSidecar(id, seen) {
414
+ function nearestPackage(id) {
427
415
  if (id.startsWith("\0") || !isAbsolute(id)) return void 0;
428
416
  let dir = dirname(id.split("?")[0]);
429
417
  while (dir !== dirname(dir)) {
430
418
  const packagePath = join(dir, "package.json");
431
419
  if (existsSync(packagePath)) {
432
- if (seen.has(packagePath)) return void 0;
433
- seen.add(packagePath);
434
420
  const pkg = JSON.parse(readFileSync(packagePath, "utf8"));
435
- return pkg.agentSurface?.contract ? resolve2(dir, pkg.agentSurface.contract) : void 0;
421
+ if (!pkg.name) return void 0;
422
+ return {
423
+ name: pkg.name,
424
+ dir,
425
+ packagePath,
426
+ ...pkg.agentSurface?.contract ? { sidecar: resolve2(dir, pkg.agentSurface.contract) } : {}
427
+ };
436
428
  }
437
429
  dir = dirname(dir);
438
430
  }
439
431
  return void 0;
440
432
  }
433
+ function isDependencyModule(id) {
434
+ return id.split("?")[0].includes(`${sep}node_modules${sep}`);
435
+ }
436
+ function readSidecar(path) {
437
+ const bytes = readFileSync(path);
438
+ const manifest = JSON.parse(bytes.toString("utf8"));
439
+ verifyManifest(manifest);
440
+ return { manifest, digest: sha256(bytes) };
441
+ }
442
+ function authorizeContributions(contributions, policy) {
443
+ const allow = new Map((policy?.allow ?? []).map((entry) => [entry.package, entry]));
444
+ const unauthorized = [];
445
+ const mismatched = [];
446
+ const attributions = [];
447
+ for (const contribution of contributions) {
448
+ const approved = allow.get(contribution.package);
449
+ if (!approved) {
450
+ unauthorized.push(
451
+ ` ${contribution.package} (${contribution.route}: ${contribution.source})
452
+ { "package": "${contribution.package}", "digest": "${contribution.contractDigest}" }`
453
+ );
454
+ continue;
455
+ }
456
+ if (approved.digest !== contribution.contractDigest) {
457
+ mismatched.push(
458
+ ` ${contribution.package}: approved ${approved.digest}, this build computed ${contribution.contractDigest}`
459
+ );
460
+ continue;
461
+ }
462
+ attributions.push({
463
+ package: contribution.package,
464
+ source: contribution.source,
465
+ route: contribution.route,
466
+ contractDigest: contribution.contractDigest,
467
+ authorization: { mode: "pinned", expectedDigest: approved.digest }
468
+ });
469
+ }
470
+ if (unauthorized.length > 0) {
471
+ throw new Error(
472
+ `unauthorized external capability contract(s). A dependency cannot contribute capabilities until the consumer approves it. Add to externalContracts.allow:
473
+ ${unauthorized.join("\n")}`
474
+ );
475
+ }
476
+ if (mismatched.length > 0) {
477
+ throw new Error(
478
+ `external capability contract digest mismatch. The dependency changed what it contributes; review the change before updating the approved digest:
479
+ ${mismatched.join("\n")}`
480
+ );
481
+ }
482
+ return attributions.sort((a, b) => a.package.localeCompare(b.package));
483
+ }
441
484
  function agentSurface(options = {}) {
442
485
  const target = options.target ?? "web-production";
443
486
  const placeholder = `__AGENT_SURFACE_MANIFEST_HASH_${Math.random().toString(36).slice(2)}__`;
444
487
  const manifestPlaceholder = `__AGENT_SURFACE_MANIFEST_${Math.random().toString(36).slice(2)}__`;
445
488
  let root = process.cwd();
446
489
  let entries = [];
490
+ let sourceEntries = /* @__PURE__ */ new Map();
447
491
  let manifest;
448
492
  return {
449
493
  name: "agent-surface:compiler",
@@ -457,10 +501,14 @@ function agentSurface(options = {}) {
457
501
  },
458
502
  load(id) {
459
503
  if (id !== RESOLVED_VIRTUAL_CONTRACT_ID) return null;
460
- return `export default ${manifestPlaceholder};`;
504
+ return `import { createCapabilityAuthority } from "@agent-surface/core";
505
+ const manifest = ${manifestPlaceholder};
506
+ export { manifest };
507
+ export default createCapabilityAuthority(manifest);`;
461
508
  },
462
509
  buildStart() {
463
510
  entries = [];
511
+ sourceEntries = /* @__PURE__ */ new Map();
464
512
  manifest = void 0;
465
513
  },
466
514
  transform(code, id) {
@@ -480,40 +528,76 @@ function agentSurface(options = {}) {
480
528
  return null;
481
529
  }
482
530
  const extracted = extractModule({ code, id, root, target, placeholder });
483
- entries.push(...extracted.entries);
531
+ const owner = isDependencyModule(id) ? nearestPackage(id) : void 0;
532
+ if (owner) {
533
+ const existing = sourceEntries.get(owner.name) ?? [];
534
+ existing.push(...extracted.entries);
535
+ sourceEntries.set(owner.name, existing);
536
+ } else {
537
+ entries.push(...extracted.entries);
538
+ }
484
539
  return extracted.code === code ? null : { code: extracted.code, map: null };
485
540
  },
486
541
  buildEnd(error) {
487
542
  if (error) return;
488
- const externalContracts = [];
489
- const externalEntries = [];
490
- const seenPackages = /* @__PURE__ */ new Set();
491
- const sidecars = /* @__PURE__ */ new Set();
543
+ const contributions = [];
544
+ const seenSidecars = /* @__PURE__ */ new Set();
492
545
  for (const id of this.getModuleIds()) {
493
- const sidecar = nearestPackageSidecar(id, seenPackages);
494
- if (sidecar) sidecars.add(sidecar);
546
+ if (!isDependencyModule(id)) continue;
547
+ const owner = nearestPackage(id);
548
+ if (!owner?.sidecar || seenSidecars.has(owner.sidecar)) continue;
549
+ seenSidecars.add(owner.sidecar);
550
+ const { manifest: external, digest } = readSidecar(owner.sidecar);
551
+ contributions.push({
552
+ package: owner.name,
553
+ source: relative2(root, owner.sidecar).split(sep).join("/"),
554
+ route: "sidecar",
555
+ contractDigest: digest,
556
+ entries: external.capabilities
557
+ });
495
558
  }
496
- for (const sidecar of sidecars) {
497
- const bytes = readFileSync(sidecar);
498
- const external = JSON.parse(bytes.toString("utf8"));
499
- verifyManifest(external);
500
- externalEntries.push(...external.capabilities);
501
- externalContracts.push({ source: sidecar.split("/").slice(-3).join("/"), digest: sha256(bytes) });
559
+ for (const allowed of options.externalContracts?.allow ?? []) {
560
+ if (!allowed.path) continue;
561
+ const path = isAbsolute(allowed.path) ? allowed.path : resolve2(root, allowed.path);
562
+ if (seenSidecars.has(path)) continue;
563
+ seenSidecars.add(path);
564
+ const owner = nearestPackage(path);
565
+ if (owner && owner.name !== allowed.package) {
566
+ throw new Error(
567
+ `external contract "${allowed.path}" belongs to "${owner.name}", not the approved "${allowed.package}"`
568
+ );
569
+ }
570
+ const { manifest: external, digest } = readSidecar(path);
571
+ contributions.push({
572
+ package: owner?.name ?? allowed.package,
573
+ source: allowed.path,
574
+ route: "sidecar",
575
+ contractDigest: digest,
576
+ entries: external.capabilities
577
+ });
502
578
  }
503
- for (const pinned of options.externalContracts ?? []) {
504
- const external = readPinnedContract(pinned, root);
505
- externalEntries.push(...external.capabilities);
506
- externalContracts.push({ source: pinned.path, digest: pinned.digest });
579
+ for (const [name, extracted] of [...sourceEntries].sort(([a], [b]) => a.localeCompare(b))) {
580
+ if (extracted.length === 0) continue;
581
+ const sorted = mergeEntries(extracted);
582
+ contributions.push({
583
+ package: name,
584
+ source: sorted[0]?.origin ?? name,
585
+ route: "source",
586
+ contractDigest: sha256(canonicalJson(sorted)),
587
+ entries: sorted
588
+ });
507
589
  }
590
+ const externalContracts = authorizeContributions(contributions, options.externalContracts);
591
+ const externalEntries = contributions.flatMap((contribution) => contribution.entries);
508
592
  const capabilities = mergeEntries([...entries, ...externalEntries]);
509
593
  validateEntries(capabilities);
510
594
  const targets = [...new Set(capabilities.flatMap((entry) => entry.targets))].sort();
511
595
  const payload = {
512
- formatVersion: 3,
596
+ formatVersion: 5,
513
597
  compilerVersion: COMPILER_VERSION,
514
598
  targets,
515
599
  capabilities,
516
- externalContracts: externalContracts.sort((a, b) => a.source.localeCompare(b.source)),
600
+ externalContracts,
517
601
  completeness: { status: "proven" }
518
602
  };
519
603
  manifest = { ...payload, hash: computeManifestHash(payload) };
@@ -557,6 +641,7 @@ async function compileCapabilityContract(options = {}) {
557
641
  agentSurface({
558
642
  target: options.target,
559
643
  emit: false,
644
+ ...options.externalContracts ? { externalContracts: options.externalContracts } : {},
560
645
  onManifest: (value) => {
561
646
  manifest = value;
562
647
  }
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, relative, resolve, sep } 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 { canonicalJson, 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\n/**\n * One dependency the consumer has approved as a capability contributor.\n *\n * Keyed by package name rather than path: a path is a property of the installer\n * (pnpm store layout, hoisting, workspace links), while the name is what a\n * reviewer actually approves.\n */\nexport interface ExternalContractAllowEntry {\n /** npm package name, exactly as in its package.json. */\n package: string;\n /** sha256 of that package's contribution, as reported by a failing build. */\n digest: string;\n /**\n * Explicit sidecar path, for a contract that is not reachable from the\n * production module graph. Auto-discovered sidecars need no path.\n */\n path?: string;\n}\n\nexport interface ExternalContractPolicy {\n /**\n * Dependencies allowed to contribute capabilities. A contribution from a\n * package absent here fails the build: discovery is not authorization.\n */\n allow?: ExternalContractAllowEntry[];\n}\n\nexport interface AgentSurfaceCompilerOptions {\n target?: string;\n emit?: boolean;\n fileName?: string;\n externalContracts?: ExternalContractPolicy;\n onManifest?: (manifest: CapabilityContractManifest) => void;\n}\n\n/** A dependency's capabilities plus how they were found, before authorization. */\ninterface ExternalContribution {\n package: string;\n source: string;\n route: \"sidecar\" | \"source\";\n contractDigest: string;\n entries: CapabilityContractEntry[];\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\ninterface NearestPackage {\n name: string;\n dir: string;\n packagePath: string;\n sidecar?: string;\n}\n\n/** The package.json governing a module id, with its declared sidecar if any. */\nfunction nearestPackage(id: string): NearestPackage | 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 const pkg = JSON.parse(readFileSync(packagePath, \"utf8\")) as {\n name?: string;\n agentSurface?: { contract?: string };\n };\n if (!pkg.name) return undefined;\n return {\n name: pkg.name,\n dir,\n packagePath,\n ...(pkg.agentSurface?.contract ? { sidecar: resolve(dir, pkg.agentSurface.contract) } : {}),\n };\n }\n dir = dirname(dir);\n }\n return undefined;\n}\n\n/**\n * A module is first-party when it is not installed as a dependency. Vite\n * resolves to real paths, so a workspace package symlinked into node_modules\n * reads as first-party — which is correct: the authority describes one\n * deployable build, and its own workspace is part of it.\n */\nfunction isDependencyModule(id: string): boolean {\n return id.split(\"?\")[0]!.includes(`${sep}node_modules${sep}`);\n}\n\nfunction readSidecar(path: string): { manifest: CapabilityContractManifest; digest: string } {\n const bytes = readFileSync(path);\n const manifest = JSON.parse(bytes.toString(\"utf8\")) as CapabilityContractManifest;\n verifyManifest(manifest);\n return { manifest, digest: sha256(bytes) };\n}\n\n/**\n * Match each contribution against the consumer's allow list.\n *\n * Discovery is deliberately not authorization: an unapproved dependency is\n * reported with the digest to approve, so the fix is a reviewable one-line\n * addition rather than a flag that turns the check off.\n */\nfunction authorizeContributions(\n contributions: readonly ExternalContribution[],\n policy: ExternalContractPolicy | undefined,\n): CapabilityContractManifest[\"externalContracts\"] {\n const allow = new Map((policy?.allow ?? []).map((entry) => [entry.package, entry]));\n const unauthorized: string[] = [];\n const mismatched: string[] = [];\n const attributions: CapabilityContractManifest[\"externalContracts\"] = [];\n\n for (const contribution of contributions) {\n const approved = allow.get(contribution.package);\n if (!approved) {\n unauthorized.push(\n ` ${contribution.package} (${contribution.route}: ${contribution.source})\\n` +\n ` { \"package\": \"${contribution.package}\", \"digest\": \"${contribution.contractDigest}\" }`,\n );\n continue;\n }\n if (approved.digest !== contribution.contractDigest) {\n mismatched.push(\n ` ${contribution.package}: approved ${approved.digest}, this build computed ${contribution.contractDigest}`,\n );\n continue;\n }\n attributions.push({\n package: contribution.package,\n source: contribution.source,\n route: contribution.route,\n contractDigest: contribution.contractDigest,\n authorization: { mode: \"pinned\", expectedDigest: approved.digest },\n });\n }\n\n if (unauthorized.length > 0) {\n throw new Error(\n `unauthorized external capability contract(s). A dependency cannot contribute capabilities ` +\n `until the consumer approves it. Add to externalContracts.allow:\\n${unauthorized.join(\"\\n\")}`,\n );\n }\n if (mismatched.length > 0) {\n throw new Error(\n `external capability contract digest mismatch. The dependency changed what it contributes; ` +\n `review the change before updating the approved digest:\\n${mismatched.join(\"\\n\")}`,\n );\n }\n return attributions.sort((a, b) => a.package.localeCompare(b.package));\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 /** Capabilities extracted from a dependency's own source, by package. */\n let sourceEntries = new Map<string, 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 sourceEntries = new Map();\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 // A dependency that calls a contract macro in its own source contributes\n // capabilities with no sidecar and no file to digest. Attribute them to\n // the owning package now, so buildEnd can put them through the same\n // authorization as a sidecar instead of admitting them silently.\n const owner = isDependencyModule(id) ? nearestPackage(id) : undefined;\n if (owner) {\n const existing = sourceEntries.get(owner.name) ?? [];\n existing.push(...extracted.entries);\n sourceEntries.set(owner.name, existing);\n } else {\n entries.push(...extracted.entries);\n }\n return extracted.code === code ? null : { code: extracted.code, map: null };\n },\n buildEnd(error) {\n if (error) return;\n const contributions: ExternalContribution[] = [];\n const seenSidecars = new Set<string>();\n\n // Sidecars declared by packages reachable from the production graph.\n for (const id of this.getModuleIds()) {\n if (!isDependencyModule(id)) continue;\n const owner = nearestPackage(id);\n if (!owner?.sidecar || seenSidecars.has(owner.sidecar)) continue;\n seenSidecars.add(owner.sidecar);\n const { manifest: external, digest } = readSidecar(owner.sidecar);\n contributions.push({\n package: owner.name,\n source: relative(root, owner.sidecar).split(sep).join(\"/\"),\n route: \"sidecar\",\n contractDigest: digest,\n entries: external.capabilities,\n });\n }\n\n // Sidecars named explicitly, for contracts outside the module graph.\n for (const allowed of options.externalContracts?.allow ?? []) {\n if (!allowed.path) continue;\n const path = isAbsolute(allowed.path) ? allowed.path : resolve(root, allowed.path);\n if (seenSidecars.has(path)) continue;\n seenSidecars.add(path);\n // The package name comes from where the file lives, not from the entry\n // that approves it — otherwise a path-pinned contract would always\n // authorize itself under whatever name the consumer happened to write.\n const owner = nearestPackage(path);\n if (owner && owner.name !== allowed.package) {\n throw new Error(\n `external contract \"${allowed.path}\" belongs to \"${owner.name}\", not the approved \"${allowed.package}\"`,\n );\n }\n const { manifest: external, digest } = readSidecar(path);\n contributions.push({\n package: owner?.name ?? allowed.package,\n source: allowed.path,\n route: \"sidecar\",\n contractDigest: digest,\n entries: external.capabilities,\n });\n }\n\n // Contract macros in a dependency's own source: no file to digest, so the\n // digest covers the canonical set of entries it actually contributed.\n for (const [name, extracted] of [...sourceEntries].sort(([a], [b]) => a.localeCompare(b))) {\n if (extracted.length === 0) continue;\n const sorted = mergeEntries(extracted);\n contributions.push({\n package: name,\n source: sorted[0]?.origin ?? name,\n route: \"source\",\n contractDigest: sha256(canonicalJson(sorted)),\n entries: sorted,\n });\n }\n\n const externalContracts = authorizeContributions(contributions, options.externalContracts);\n const externalEntries = contributions.flatMap((contribution) => contribution.entries);\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: 5 as const,\n compilerVersion: COMPILER_VERSION,\n targets,\n capabilities,\n externalContracts,\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, type ExternalContractPolicy } from \"./plugin.js\";\n\nexport interface CompileCapabilityContractOptions {\n root?: string;\n configFile?: string;\n target?: string;\n /**\n * Which dependencies may contribute capabilities. Forwarded to the compiler\n * plugin: without it, every discovered external contract is unauthorized and\n * the build fails.\n */\n externalContracts?: ExternalContractPolicy;\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 ...(options.externalContracts ? { externalContracts: options.externalContracts } : {}),\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":["relative","resolve","resolve","relative","resolve","resolve"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-surface/compiler",
3
- "version": "0.16.0",
3
+ "version": "0.18.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.16.0"
23
+ "@agent-surface/core": "^0.18.0"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@types/node": "^20.19.0"