{"version":3,"sources":["../../src/deploy/aeon-config.ts","../../src/deploy/quality.ts","../../src/deploy/scaffold.ts","../../src/deploy/clone.ts","../../src/deploy/mcp.ts","../../src/deploy/smoke.ts","../../src/deploy/index.ts"],"names":["existsSync","readFileSync","resolve","process","readdirSync","join","basename","packageJson","DEFAULT_GATEWAY_URL","hasCommand","spawnSync","installDependencies","smokeServe","createServer","ensureEmptyDirectory","mkdirSync","list","writeFileSync","authHeaders","statSync","resolveProcessBaseUrl","hasLegacyWorkersRedirect"],"mappings":"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","file":"index.mjs","sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\n\nimport type { AeonConfig, FeatureToggles } from './types';\n\nconst FEATURE_KEYS: Array<keyof FeatureToggles> = [\n  'analytics',\n  'sitemap',\n  'robots',\n  'metadata',\n  'esi',\n  'dashrelay',\n  'dash',\n  'neural',\n  'presence',\n  'ucan',\n  'zk',\n  'd1',\n  'r2',\n  'kv',\n  'mcp',\n];\n\nconst DEFAULT_FEATURES: FeatureToggles = {\n  analytics: true,\n  sitemap: true,\n  robots: true,\n  metadata: true,\n  esi: true,\n  dashrelay: true,\n  dash: true,\n  neural: true,\n  presence: true,\n  ucan: true,\n  zk: true,\n  d1: true,\n  r2: true,\n  kv: true,\n  mcp: true,\n};\n\nconst PRESET_FEATURES: Record<AeonConfig['preset'], FeatureToggles> = {\n  all: { ...DEFAULT_FEATURES },\n  core: {\n    ...DEFAULT_FEATURES,\n    zk: false,\n    neural: false,\n    r2: false,\n  },\n  minimal: {\n    ...DEFAULT_FEATURES,\n    esi: false,\n    dashrelay: false,\n    dash: false,\n    neural: false,\n    presence: false,\n    ucan: false,\n    zk: false,\n    d1: false,\n    r2: false,\n    kv: false,\n    mcp: false,\n  },\n  'mcp-server': {\n    ...DEFAULT_FEATURES,\n    esi: false,\n    dashrelay: false,\n    dash: false,\n    neural: false,\n    presence: false,\n    ucan: false,\n    zk: false,\n    d1: false,\n    r2: false,\n    kv: false,\n    mcp: true,\n  },\n};\nexport function detectFeatureKey(input: string): keyof FeatureToggles | null {\n  const normalized = input\n    .trim()\n    .toLowerCase()\n    .replace(/[^a-z0-9]/g, '');\n  const map: Record<string, keyof FeatureToggles> = {\n    analytics: 'analytics',\n    sitemap: 'sitemap',\n    robots: 'robots',\n    metadata: 'metadata',\n    esi: 'esi',\n    dashrelay: 'dashrelay',\n    dash: 'dash',\n    neural: 'neural',\n    presence: 'presence',\n    ucan: 'ucan',\n    zk: 'zk',\n    d1: 'd1',\n    r2: 'r2',\n    kv: 'kv',\n    mcp: 'mcp',\n  };\n  return map[normalized] || null;\n}\n\nfunction cloneDefaultConfig(projectName?: string): AeonConfig {\n  const safeName = sanitizeProjectName(projectName || 'aeon-foundation');\n  return {\n    project: {\n      name: safeName,\n      runtime: 'cloudflare-worker',\n      deploymentTarget: 'aeon',\n    },\n    preset: 'all',\n    features: { ...DEFAULT_FEATURES },\n    quality: {\n      staticThreshold: 100,\n      interactiveThreshold: 95,\n      crawlFromSitemap: true,\n      strict: true,\n      ratchetToHundred: true,\n    },\n    integrations: {\n      dashrelayChannels: ['presence', 'collective', 'deploy'],\n      analyticsId: 'GTM-XXXXXXX',\n      observabilitySink: 'dash',\n      mcpServerCommand: 'npx @emotions-app/edgework-mcp',\n    },\n    storage: {\n      d1Binding: 'AEON_D1',\n      kvBinding: 'AEON_KV',\n      r2Binding: 'AEON_R2',\n      migrationStrategy: 'safe',\n    },\n    security: {\n      ucanIssuer: 'did:key:aeon-foundation',\n      ucanAudience: 'did:web:aeon.local',\n      zkVerificationMode: 'strict',\n    },\n    performance: {\n      esiMode: 'deep',\n      prefetch: true,\n      speculation: true,\n      cacheControl:\n        'public, max-age=300, s-maxage=900, stale-while-revalidate=300',\n    },\n  };\n}\n\nfunction sanitizeProjectName(input: string): string {\n  const normalized = input\n    .trim()\n    .toLowerCase()\n    .replace(/[^a-z0-9-]/g, '-')\n    .replace(/-+/g, '-')\n    .replace(/^-|-$/g, '');\n  return normalized || 'aeon-foundation';\n}\n\nfunction stripTomlComment(line: string): string {\n  let inSingle = false;\n  let inDouble = false;\n  for (let index = 0; index < line.length; index += 1) {\n    const char = line[index];\n    if (char === \"'\" && !inDouble) {\n      inSingle = !inSingle;\n      continue;\n    }\n    if (char === '\"' && !inSingle) {\n      inDouble = !inDouble;\n      continue;\n    }\n    if (char === '#' && !inSingle && !inDouble) {\n      return line.slice(0, index);\n    }\n  }\n  return line;\n}\n\nfunction splitArrayValues(raw: string): string[] {\n  const values: string[] = [];\n  let current = '';\n  let inSingle = false;\n  let inDouble = false;\n\n  for (let index = 0; index < raw.length; index += 1) {\n    const char = raw[index];\n    if (char === \"'\" && !inDouble) {\n      inSingle = !inSingle;\n      current += char;\n      continue;\n    }\n    if (char === '\"' && !inSingle) {\n      inDouble = !inDouble;\n      current += char;\n      continue;\n    }\n    if (char === ',' && !inSingle && !inDouble) {\n      values.push(current.trim());\n      current = '';\n      continue;\n    }\n    current += char;\n  }\n\n  if (current.trim().length > 0) {\n    values.push(current.trim());\n  }\n\n  return values;\n}\n\nfunction parseTomlScalar(raw: string): unknown {\n  const value = raw.trim();\n  if (!value) return '';\n\n  if (\n    (value.startsWith('\"') && value.endsWith('\"')) ||\n    (value.startsWith(\"'\") && value.endsWith(\"'\"))\n  ) {\n    return value.slice(1, -1);\n  }\n\n  if (value === 'true' || value === 'false') {\n    return value === 'true';\n  }\n\n  if (/^-?\\d+(\\.\\d+)?$/.test(value)) {\n    return Number(value);\n  }\n\n  if (value.startsWith('[') && value.endsWith(']')) {\n    const inner = value.slice(1, -1).trim();\n    if (!inner) return [];\n    return splitArrayValues(inner).map((item) => parseTomlScalar(item));\n  }\n\n  return value;\n}\n\nfunction parseTomlDocument(text: string): Record<string, unknown> {\n  const root: Record<string, unknown> = {};\n  let currentPath: string[] = [];\n\n  for (const lineRaw of text.split(/\\r?\\n/)) {\n    const line = stripTomlComment(lineRaw).trim();\n    if (!line) continue;\n\n    if (line.startsWith('[') && line.endsWith(']')) {\n      currentPath = line\n        .slice(1, -1)\n        .split('.')\n        .map((part) => part.trim())\n        .filter(Boolean);\n      continue;\n    }\n\n    const equalsIndex = line.indexOf('=');\n    if (equalsIndex < 0) continue;\n\n    const key = line.slice(0, equalsIndex).trim();\n    const rawValue = line.slice(equalsIndex + 1).trim();\n    const value = parseTomlScalar(rawValue);\n\n    let cursor: Record<string, unknown> = root;\n    for (const segment of currentPath) {\n      const existing = cursor[segment];\n      if (\n        !existing ||\n        typeof existing !== 'object' ||\n        Array.isArray(existing)\n      ) {\n        cursor[segment] = {};\n      }\n      cursor = cursor[segment] as Record<string, unknown>;\n    }\n\n    cursor[key] = value;\n  }\n\n  return root;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n  if (value && typeof value === 'object' && !Array.isArray(value)) {\n    return value as Record<string, unknown>;\n  }\n  return {};\n}\n\nfunction asString(value: unknown, fallback: string): string {\n  return typeof value === 'string' && value.trim().length > 0\n    ? value\n    : fallback;\n}\n\nfunction asBoolean(value: unknown, fallback: boolean): boolean {\n  return typeof value === 'boolean' ? value : fallback;\n}\n\nfunction asNumber(value: unknown, fallback: number): number {\n  return typeof value === 'number' && Number.isFinite(value) ? value : fallback;\n}\n\nfunction asStringArray(value: unknown, fallback: string[]): string[] {\n  if (!Array.isArray(value)) return fallback;\n  const out = value\n    .filter((entry) => typeof entry === 'string')\n    .map((entry) => entry.trim())\n    .filter(Boolean);\n  return out.length > 0 ? out : fallback;\n}\n\nfunction mergeConfig(base: AeonConfig, patch: Partial<AeonConfig>): AeonConfig {\n  const merged: AeonConfig = {\n    ...base,\n    ...patch,\n    project: {\n      ...base.project,\n      ...(patch.project || {}),\n      name: sanitizeProjectName(\n        patch.project?.name || base.project.name || 'aeon-foundation'\n      ),\n    },\n    features: {\n      ...base.features,\n      ...(patch.features || {}),\n    },\n    quality: {\n      ...base.quality,\n      ...(patch.quality || {}),\n    },\n    integrations: {\n      ...base.integrations,\n      ...(patch.integrations || {}),\n      dashrelayChannels:\n        patch.integrations?.dashrelayChannels ||\n        base.integrations.dashrelayChannels,\n    },\n    storage: {\n      ...base.storage,\n      ...(patch.storage || {}),\n    },\n    security: {\n      ...base.security,\n      ...(patch.security || {}),\n    },\n    performance: {\n      ...base.performance,\n      ...(patch.performance || {}),\n    },\n  };\n  return merged;\n}\n\nfunction partialConfigFromToml(\n  raw: Record<string, unknown>\n): Partial<AeonConfig> {\n  const project = asRecord(raw.project);\n  const features = asRecord(raw.features);\n  const quality = asRecord(raw.quality);\n  const integrations = asRecord(raw.integrations);\n  const storage = asRecord(raw.storage);\n  const security = asRecord(raw.security);\n  const performance = asRecord(raw.performance);\n\n  const featurePatch: Partial<FeatureToggles> = {};\n  for (const key of FEATURE_KEYS) {\n    if (typeof features[key] === 'boolean') {\n      featurePatch[key] = features[key] as boolean;\n    }\n  }\n\n  const presetRaw = asString(raw.preset, 'all');\n  const preset: AeonConfig['preset'] =\n    presetRaw === 'core' ||\n    presetRaw === 'minimal' ||\n    presetRaw === 'mcp-server'\n      ? presetRaw\n      : 'all';\n\n  return {\n    preset,\n    project: {\n      name: asString(project.name, 'aeon-foundation'),\n      runtime: 'cloudflare-worker',\n      deploymentTarget: asString(project.deploymentTarget, 'aeon'),\n    },\n    features: featurePatch as FeatureToggles,\n    quality: {\n      staticThreshold: asNumber(quality.staticThreshold, 100),\n      interactiveThreshold: asNumber(quality.interactiveThreshold, 95),\n      crawlFromSitemap: asBoolean(quality.crawlFromSitemap, true),\n      strict: asBoolean(quality.strict, true),\n      ratchetToHundred: asBoolean(quality.ratchetToHundred, true),\n    },\n    integrations: {\n      dashrelayChannels: asStringArray(integrations.dashrelayChannels, [\n        'presence',\n        'collective',\n        'deploy',\n      ]),\n      analyticsId: asString(integrations.analyticsId, 'GTM-XXXXXXX'),\n      observabilitySink: asString(integrations.observabilitySink, 'dash'),\n      mcpServerCommand: asString(\n        integrations.mcpServerCommand,\n        'npx @emotions-app/edgework-mcp'\n      ),\n    },\n    storage: {\n      d1Binding: asString(storage.d1Binding, 'AEON_D1'),\n      kvBinding: asString(storage.kvBinding, 'AEON_KV'),\n      r2Binding: asString(storage.r2Binding, 'AEON_R2'),\n      migrationStrategy: 'safe',\n    },\n    security: {\n      ucanIssuer: asString(security.ucanIssuer, 'did:key:aeon-foundation'),\n      ucanAudience: asString(security.ucanAudience, 'did:web:aeon.local'),\n      zkVerificationMode:\n        asString(security.zkVerificationMode, 'strict') === 'permissive'\n          ? 'permissive'\n          : 'strict',\n    },\n    performance: {\n      esiMode:\n        asString(performance.esiMode, 'deep') === 'light' ? 'light' : 'deep',\n      prefetch: asBoolean(performance.prefetch, true),\n      speculation: asBoolean(performance.speculation, true),\n      cacheControl: asString(\n        performance.cacheControl,\n        'public, max-age=300, s-maxage=900, stale-while-revalidate=300'\n      ),\n    },\n  };\n}\n\nexport function loadAeonConfigFromFile(\n  configPath: string\n): Partial<AeonConfig> {\n  const absolutePath = resolve(configPath);\n  if (!existsSync(absolutePath)) {\n    throw new Error(`aeon.toml not found: ${absolutePath}`);\n  }\n\n  const rawText = readFileSync(absolutePath, 'utf8');\n  const parsed = parseTomlDocument(rawText);\n  return partialConfigFromToml(parsed);\n}\n\nexport function resolveAeonConfig(options: {\n  projectName: string;\n  preset?: AeonConfig['preset'];\n  configPath?: string;\n  enable?: string[];\n  disable?: string[];\n}): AeonConfig {\n  const preset = options.preset || 'all';\n  const projectName = sanitizeProjectName(options.projectName);\n\n  const defaults = cloneDefaultConfig(projectName);\n  defaults.preset = preset;\n  defaults.features = { ...PRESET_FEATURES[preset] };\n\n  let merged = defaults;\n  if (options.configPath) {\n    const fileConfig = loadAeonConfigFromFile(options.configPath);\n    const filePreset = fileConfig.preset || merged.preset;\n    const presetBase = {\n      ...merged,\n      preset: filePreset,\n      features: { ...PRESET_FEATURES[filePreset] },\n    };\n    merged = mergeConfig(presetBase, fileConfig);\n  }\n\n  for (const featureInput of options.enable || []) {\n    const key = detectFeatureKey(featureInput);\n    if (key) {\n      merged.features[key] = true;\n    }\n  }\n\n  for (const featureInput of options.disable || []) {\n    const key = detectFeatureKey(featureInput);\n    if (key) {\n      merged.features[key] = false;\n    }\n  }\n\n  return merged;\n}\n\nexport function serializeAeonToml(config: AeonConfig): string {\n  const lines: string[] = [\n    '# aeon.toml',\n    '# Generated by edgework deploy scaffold aeon-foundation',\n    '',\n    '[project]',\n    `name = \"${config.project.name}\"`,\n    `runtime = \"${config.project.runtime}\"`,\n    `deploymentTarget = \"${config.project.deploymentTarget}\"`,\n    '',\n    `preset = \"${config.preset}\"`,\n    '',\n    '[features]',\n    ...FEATURE_KEYS.map(\n      (feature) => `${feature} = ${config.features[feature]}`\n    ),\n    '',\n    '[quality]',\n    `staticThreshold = ${config.quality.staticThreshold}`,\n    `interactiveThreshold = ${config.quality.interactiveThreshold}`,\n    `crawlFromSitemap = ${config.quality.crawlFromSitemap}`,\n    `strict = ${config.quality.strict}`,\n    `ratchetToHundred = ${config.quality.ratchetToHundred}`,\n    '',\n    '[integrations]',\n    `dashrelayChannels = [${config.integrations.dashrelayChannels\n      .map((channel) => `\"${channel}\"`)\n      .join(', ')}]`,\n    `analyticsId = \"${config.integrations.analyticsId}\"`,\n    `observabilitySink = \"${config.integrations.observabilitySink}\"`,\n    `mcpServerCommand = \"${config.integrations.mcpServerCommand}\"`,\n    '',\n    '[storage]',\n    `d1Binding = \"${config.storage.d1Binding}\"`,\n    `kvBinding = \"${config.storage.kvBinding}\"`,\n    `r2Binding = \"${config.storage.r2Binding}\"`,\n    `migrationStrategy = \"${config.storage.migrationStrategy}\"`,\n    '',\n    '[security]',\n    `ucanIssuer = \"${config.security.ucanIssuer}\"`,\n    `ucanAudience = \"${config.security.ucanAudience}\"`,\n    `zkVerificationMode = \"${config.security.zkVerificationMode}\"`,\n    '',\n    '[performance]',\n    `esiMode = \"${config.performance.esiMode}\"`,\n    `prefetch = ${config.performance.prefetch}`,\n    `speculation = ${config.performance.speculation}`,\n    `cacheControl = \"${config.performance.cacheControl}\"`,\n    '',\n  ];\n\n  return lines.join('\\n');\n}\n","import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';\nimport { basename, join, resolve } from 'node:path';\n\nimport {\n  createEdgeworkAuthHeader,\n  resolveEdgeworkApiKey,\n} from '../edgework-api-key';\nimport type {\n  GatewayQualityTarget,\n  QualityAutopilotOptions,\n  QualityAutopilotReport,\n  QualityIssue,\n  QualityIssueCode,\n  QualityIssueSeverity,\n  QualityPathSpec,\n  QualityPathSmokeResult,\n  QualityPathStatus,\n  QualitySmokeOptions,\n  QualityTarget,\n  QualityTargetReport,\n  QualityTargetSource,\n  SitePathSmokeTestOptions,\n  SitePathSmokeTestResult,\n} from './types';\n\ntype WorkerStatus = 'yes' | 'no' | 'n/a';\ntype ClientStatus = 'yes' | 'no' | 'n/a';\n\nconst DEFAULT_GATEWAY_URL = 'https://api.edgework.ai';\nconst DEFAULT_APPS_DIR = 'apps';\nconst DEFAULT_SOURCE: QualityTargetSource = 'workspace';\n\nconst DEFAULT_PATH_SPECS: QualityPathSpec[] = [\n  // Legal/Trust pages\n  { path: '/terms', category: 'legal', required: true },\n  { path: '/privacy', category: 'legal', required: true },\n  { path: '/cookies', category: 'legal', required: true },\n  { path: '/help', category: 'legal', required: true },\n  { path: '/contact', category: 'legal', required: true },\n  { path: '/confidentiality', category: 'legal', required: true },\n\n  // SEO essentials\n  { path: '/sitemap.xml', category: 'seo', required: true },\n  { path: '/robots.txt', category: 'seo', required: true },\n\n  // Standard app metadata\n  { path: '/favicon.ico', category: 'icon', required: false },\n  { path: '/favicon.svg', category: 'icon', required: false },\n  { path: '/apple-touch-icon.png', category: 'icon', required: false },\n  { path: '/site.webmanifest', category: 'manifest', required: false },\n  { path: '/manifest.webmanifest', category: 'manifest', required: false },\n  { path: '/manifest.json', category: 'manifest', required: false },\n\n  // Agent discovery + LLM metadata\n  { path: '/agents.txt', category: 'agent', required: false },\n  { path: '/llms.txt', category: 'agent', required: false },\n  { path: '/.well-known/agents.json', category: 'agent', required: false },\n  { path: '/.well-known/ai-plugin.json', category: 'agent', required: false },\n\n  // Well-known operational files\n  {\n    path: '/.well-known/security.txt',\n    category: 'well-known',\n    required: false,\n  },\n  {\n    path: '/.well-known/assetlinks.json',\n    category: 'well-known',\n    required: false,\n  },\n  {\n    path: '/.well-known/apple-app-site-association',\n    category: 'well-known',\n    required: false,\n  },\n];\n\nconst SOURCE_OPTIONS = new Set(['workspace', 'gateway', 'all']);\n\nconst SKIP_DIRS = new Set([\n  'node_modules',\n  'dist',\n  '.aeon',\n  '.wrangler',\n  'coverage',\n  'build',\n  '.next',\n]);\n\nconst FILE_EXT_RE = /\\.(ts|tsx|js|jsx|html|mdx)$/;\n\nconst PAGE_SLUG_RE = /^\\/[a-z0-9-]+$/;\n\nexport function getDefaultQualityPathSpecs(): QualityPathSpec[] {\n  return DEFAULT_PATH_SPECS.map((spec) => ({ ...spec }));\n}\n\nfunction normalizeCsv(value?: string): string[] {\n  if (!value) return [];\n  return value\n    .split(',')\n    .map((part) => part.trim())\n    .filter((part) => part.length > 0);\n}\n\nfunction normalizePath(path: string): string {\n  if (!path.startsWith('/')) {\n    return `/${path}`;\n  }\n  return path;\n}\n\nfunction normalizeUnique(values: string[]): string[] {\n  return [...new Set(values.map((value) => value.trim()).filter(Boolean))];\n}\n\nfunction resolvePathSpecs(options: QualityAutopilotOptions): QualityPathSpec[] {\n  const requestedPaths = normalizeUnique([\n    ...normalizeCsv(options.paths),\n    ...(options.pathSpecs || []).map((spec) => spec.path),\n  ]).map(normalizePath);\n\n  const customByPath = new Map<string, QualityPathSpec>();\n  for (const spec of options.pathSpecs || []) {\n    customByPath.set(normalizePath(spec.path), {\n      ...spec,\n      path: normalizePath(spec.path),\n    });\n  }\n\n  const baseSpecs = getDefaultQualityPathSpecs();\n  const baseByPath = new Map(baseSpecs.map((spec) => [spec.path, spec]));\n\n  if (requestedPaths.length === 0 && customByPath.size === 0) {\n    return baseSpecs;\n  }\n\n  const out: QualityPathSpec[] = [];\n  for (const path of requestedPaths) {\n    const custom = customByPath.get(path);\n    if (custom) {\n      out.push(custom);\n      continue;\n    }\n\n    const base = baseByPath.get(path);\n    if (base) {\n      out.push({ ...base });\n      continue;\n    }\n\n    out.push({\n      path,\n      category: 'custom',\n      required: false,\n      severityWhenMissing: 'warn',\n    });\n  }\n\n  for (const [path, custom] of customByPath) {\n    if (!requestedPaths.includes(path)) {\n      out.push(custom);\n    }\n  }\n\n  return normalizePathSpecs(out);\n}\n\nfunction normalizePathSpecs(specs: QualityPathSpec[]): QualityPathSpec[] {\n  const seen = new Set<string>();\n  const out: QualityPathSpec[] = [];\n\n  for (const rawSpec of specs) {\n    const path = normalizePath(rawSpec.path);\n    if (seen.has(path)) continue;\n    seen.add(path);\n\n    out.push({\n      ...rawSpec,\n      path,\n      severityWhenMissing:\n        rawSpec.severityWhenMissing || (rawSpec.required ? 'error' : 'warn'),\n    });\n  }\n\n  return out;\n}\n\nfunction parseSitemapPaths(xml: string): string[] {\n  const matches = [...xml.matchAll(/<loc>([^<]+)<\\/loc>/g)];\n  const paths: string[] = [];\n  for (const match of matches) {\n    const loc = match[1]?.trim();\n    if (!loc) continue;\n    try {\n      const parsed = new URL(loc);\n      paths.push(normalizePath(parsed.pathname));\n    } catch {\n      if (loc.startsWith('/')) {\n        paths.push(normalizePath(loc));\n      }\n    }\n  }\n  return normalizeUnique(paths);\n}\n\nfunction extractRouteLiterals(text: string): string[] {\n  const routes = new Set<string>();\n  const literalRegex = /['\"`](\\/[a-z0-9\\-./]*)['\"`]/gi;\n  for (const match of text.matchAll(literalRegex)) {\n    const candidate = match[1];\n    if (!candidate) continue;\n    const normalized = normalizePath(candidate);\n    if (!normalized.startsWith('/')) continue;\n    if (\n      normalized.includes('*') ||\n      normalized.includes(':') ||\n      normalized.includes('{')\n    ) {\n      continue;\n    }\n    routes.add(normalized);\n  }\n  return [...routes];\n}\n\nfunction discoveredPathSpecsForTarget(\n  target: QualityTarget,\n  baseSpecs: QualityPathSpec[]\n): QualityPathSpec[] {\n  if (!target.appDir) return baseSpecs;\n\n  const discoveredPaths = new Set<string>();\n  const sitemapPath = join(target.appDir, 'public', 'sitemap.xml');\n  if (existsSync(sitemapPath)) {\n    const sitemapText = safeReadUtf8(sitemapPath);\n    for (const path of parseSitemapPaths(sitemapText)) {\n      discoveredPaths.add(path);\n    }\n  }\n\n  const workerEntryCandidates = [\n    join(target.appDir, 'src', 'worker.ts'),\n    join(target.appDir, 'src', 'worker.js'),\n    join(target.appDir, 'src', 'index.ts'),\n    join(target.appDir, 'src', 'index.js'),\n    join(target.appDir, 'worker.ts'),\n    join(target.appDir, 'index.ts'),\n  ];\n  for (const candidate of workerEntryCandidates) {\n    if (!existsSync(candidate)) continue;\n    for (const route of extractRouteLiterals(safeReadUtf8(candidate))) {\n      if (\n        route === '/' ||\n        route.startsWith('/api/') ||\n        route === '/health' ||\n        route.endsWith('/health') ||\n        route === '/readyz' ||\n        route === '/probe' ||\n        route === '/livez' ||\n        route.includes('/ws')\n      ) {\n        continue;\n      }\n      discoveredPaths.add(route);\n    }\n  }\n\n  if (discoveredPaths.size === 0) {\n    return baseSpecs;\n  }\n\n  const extras: QualityPathSpec[] = [...discoveredPaths]\n    .filter((path) => !baseSpecs.some((spec) => spec.path === path))\n    .map((path) => ({\n      path,\n      category: 'custom',\n      required: false,\n      severityWhenMissing: 'warn' as const,\n    }));\n\n  return normalizePathSpecs([...baseSpecs, ...extras]);\n}\n\nfunction buildIssue(\n  code: QualityIssueCode,\n  severity: QualityIssueSeverity,\n  message: string,\n  details?: {\n    path?: string;\n    appDir?: string;\n    process?: string;\n    suggestion?: string;\n  }\n): QualityIssue {\n  return {\n    code,\n    severity,\n    message,\n    path: details?.path,\n    appDir: details?.appDir,\n    process: details?.process,\n    suggestion: details?.suggestion,\n  };\n}\n\nfunction safeReadUtf8(filePath: string): string {\n  try {\n    return readFileSync(filePath, 'utf8');\n  } catch {\n    return '';\n  }\n}\n\nfunction walkFiles(rootDir: string): string[] {\n  const out: string[] = [];\n\n  function visit(dir: string): void {\n    let entries: string[] = [];\n    try {\n      entries = readdirSync(dir);\n    } catch {\n      return;\n    }\n\n    for (const entry of entries) {\n      const fullPath = join(dir, entry);\n\n      let isDirectory = false;\n      try {\n        isDirectory = statSync(fullPath).isDirectory();\n      } catch {\n        continue;\n      }\n\n      if (isDirectory) {\n        if (!SKIP_DIRS.has(entry)) {\n          visit(fullPath);\n        }\n        continue;\n      }\n\n      if (FILE_EXT_RE.test(entry)) {\n        out.push(fullPath);\n      }\n    }\n  }\n\n  visit(rootDir);\n  return out;\n}\n\nfunction discoverWorkspaceTargets(\n  workspaceRoot: string,\n  appsDir: string\n): QualityTarget[] {\n  const absoluteAppsDir = resolve(workspaceRoot, appsDir);\n  let entries: string[] = [];\n  try {\n    entries = readdirSync(absoluteAppsDir);\n  } catch {\n    return [];\n  }\n\n  const targets: QualityTarget[] = [];\n\n  for (const entry of entries) {\n    const appDir = join(absoluteAppsDir, entry);\n\n    let isDir = false;\n    try {\n      isDir = statSync(appDir).isDirectory();\n    } catch {\n      continue;\n    }\n\n    if (!isDir) continue;\n\n    const configPath = join(appDir, 'aeon.config.ts');\n    if (!existsSync(configPath)) continue;\n\n    targets.push({\n      name: entry,\n      source: 'workspace',\n      appDir,\n      configPath,\n      aeonPid: entry,\n    });\n  }\n\n  return targets.sort((a, b) => a.name.localeCompare(b.name));\n}\n\ninterface GatewayListResponse {\n  processes?: Array<{\n    name?: string;\n    cid?: string;\n    state?: string;\n  }>;\n}\n\nasync function discoverGatewayTargets(\n  options: QualityAutopilotOptions\n): Promise<GatewayQualityTarget[]> {\n  const gatewayUrl = (options.gatewayUrl || DEFAULT_GATEWAY_URL).replace(\n    /\\/+$/,\n    ''\n  );\n  const owner = options.owner?.trim();\n  const params = new URLSearchParams();\n  if (owner) {\n    params.set('owner', owner);\n  }\n\n  const qs = params.toString();\n  const url = `${gatewayUrl}/v1/aeon-deploy/list${qs ? `?${qs}` : ''}`;\n  const apiKey = resolveEdgeworkApiKey(options.apiKey);\n  const response = await fetch(url, {\n    method: 'GET',\n    headers: {\n      'Content-Type': 'application/json',\n      ...createEdgeworkAuthHeader(apiKey),\n    },\n    signal: options.signal,\n  });\n\n  if (!response.ok) {\n    const body = await response.text();\n    throw new Error(`Gateway list failed (${response.status}): ${body}`);\n  }\n\n  const payload = (await response.json()) as GatewayListResponse;\n  const processes = Array.isArray(payload.processes) ? payload.processes : [];\n\n  const targets: GatewayQualityTarget[] = [];\n  for (const process of processes) {\n    const name = process.name?.trim();\n    if (!name) continue;\n\n    targets.push({\n      name,\n      source: 'gateway',\n      aeonPid: name,\n      cid: process.cid,\n      state: process.state,\n    });\n  }\n\n  targets.sort((a, b) => a.name.localeCompare(b.name));\n  return targets;\n}\n\nfunction mergeTargets(\n  workspaceTargets: QualityTarget[],\n  gatewayTargets: GatewayQualityTarget[]\n): QualityTarget[] {\n  const out = new Map<string, QualityTarget>();\n\n  for (const target of workspaceTargets) {\n    out.set(target.name, { ...target });\n  }\n\n  for (const target of gatewayTargets) {\n    const existing = out.get(target.name);\n    if (!existing) {\n      out.set(target.name, { ...target });\n      continue;\n    }\n\n    out.set(target.name, {\n      ...existing,\n      source:\n        existing.source === 'workspace' ? 'workspace+gateway' : existing.source,\n      cid: target.cid || existing.cid,\n      state: target.state || existing.state,\n      aeonPid: target.aeonPid || existing.aeonPid,\n    });\n  }\n\n  return [...out.values()].sort((a, b) => a.name.localeCompare(b.name));\n}\n\nfunction applyTargetFilters(\n  targets: QualityTarget[],\n  options: QualityAutopilotOptions\n): QualityTarget[] {\n  const includeSet = new Set(\n    normalizeCsv(options.targets).map((v) => v.trim())\n  );\n  const excludeSet = new Set(\n    normalizeCsv(options.excludeTargets).map((v) => v.trim())\n  );\n\n  return targets.filter((target) => {\n    if (includeSet.size > 0 && !includeSet.has(target.name)) {\n      return false;\n    }\n    if (excludeSet.has(target.name)) {\n      return false;\n    }\n    return true;\n  });\n}\n\nfunction escapeRegex(value: string): string {\n  return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction countPathLinks(files: string[], path: string): number {\n  const quoteClass = '[\"\\'`]';\n  const escapedPath = escapeRegex(path);\n  const linkRegex = new RegExp(\n    `${quoteClass}${escapedPath}(?:${quoteClass}|[/?#])`,\n    'g'\n  );\n\n  let total = 0;\n  for (const file of files) {\n    const text = safeReadUtf8(file);\n    if (!text) continue;\n    const matches = text.match(linkRegex);\n    if (matches) {\n      total += matches.length;\n    }\n  }\n\n  return total;\n}\n\nfunction pageCandidates(appDir: string, slug: string): string[] {\n  return [\n    join(appDir, 'public', slug, 'index.html'),\n    join(appDir, 'public', `${slug}.html`),\n    join(appDir, 'app', slug, 'page.tsx'),\n    join(appDir, 'app', slug, 'page.ts'),\n    join(appDir, 'app', slug, 'page.jsx'),\n    join(appDir, 'app', slug, 'page.js'),\n    join(appDir, 'src', 'app', slug, 'page.tsx'),\n    join(appDir, 'src', 'app', slug, 'page.ts'),\n    join(appDir, 'src', 'app', slug, 'page.jsx'),\n    join(appDir, 'src', 'app', slug, 'page.js'),\n    join(appDir, 'src', 'pages', `${slug}.tsx`),\n    join(appDir, 'src', 'pages', `${slug}.ts`),\n    join(appDir, 'src', 'pages', `${slug}.jsx`),\n    join(appDir, 'src', 'pages', `${slug}.js`),\n    join(appDir, 'client', 'pages', `${slug}.tsx`),\n    join(appDir, 'client', 'pages', `${slug}.ts`),\n    join(appDir, 'client', 'pages', `${slug}.jsx`),\n    join(appDir, 'client', 'pages', `${slug}.js`),\n  ];\n}\n\nfunction routeFileCandidates(appDir: string, path: string): string[] {\n  const trimmed = path.startsWith('/') ? path.slice(1) : path;\n  const parts = trimmed.split('/').filter(Boolean);\n  if (parts.length === 0) return [];\n\n  const appRouteBase = join(appDir, 'app', ...parts, 'route');\n  const srcRouteBase = join(appDir, 'src', 'app', ...parts, 'route');\n\n  return [\n    `${appRouteBase}.ts`,\n    `${appRouteBase}.tsx`,\n    `${appRouteBase}.js`,\n    `${appRouteBase}.jsx`,\n    `${srcRouteBase}.ts`,\n    `${srcRouteBase}.tsx`,\n    `${srcRouteBase}.js`,\n    `${srcRouteBase}.jsx`,\n  ];\n}\n\nfunction nextMetadataCandidates(appDir: string, baseName: string): string[] {\n  return [\n    join(appDir, 'app', `${baseName}.ts`),\n    join(appDir, 'app', `${baseName}.js`),\n    join(appDir, 'src', 'app', `${baseName}.ts`),\n    join(appDir, 'src', 'app', `${baseName}.js`),\n  ];\n}\n\nfunction publicCandidates(appDir: string, relativePath: string): string[] {\n  const rel = relativePath.startsWith('/')\n    ? relativePath.slice(1)\n    : relativePath;\n  return [join(appDir, 'public', rel)];\n}\n\nfunction pathCandidates(appDir: string, path: string): string[] {\n  if (PAGE_SLUG_RE.test(path)) {\n    return pageCandidates(appDir, path.slice(1));\n  }\n\n  switch (path) {\n    case '/sitemap.xml':\n      return [\n        ...publicCandidates(appDir, 'sitemap.xml'),\n        ...nextMetadataCandidates(appDir, 'sitemap'),\n        ...routeFileCandidates(appDir, '/sitemap.xml'),\n      ];\n    case '/robots.txt':\n      return [\n        ...publicCandidates(appDir, 'robots.txt'),\n        ...nextMetadataCandidates(appDir, 'robots'),\n        ...routeFileCandidates(appDir, '/robots.txt'),\n      ];\n    case '/favicon.ico':\n      return [\n        ...publicCandidates(appDir, 'favicon.ico'),\n        ...routeFileCandidates(appDir, '/favicon.ico'),\n        join(appDir, 'app', 'favicon.ico'),\n        join(appDir, 'src', 'app', 'favicon.ico'),\n      ];\n    case '/favicon.svg':\n      return [\n        ...publicCandidates(appDir, 'favicon.svg'),\n        ...routeFileCandidates(appDir, '/favicon.svg'),\n        join(appDir, 'app', 'favicon.svg'),\n        join(appDir, 'src', 'app', 'favicon.svg'),\n      ];\n    case '/apple-touch-icon.png':\n      return [\n        ...publicCandidates(appDir, 'apple-touch-icon.png'),\n        ...routeFileCandidates(appDir, '/apple-touch-icon.png'),\n        join(appDir, 'app', 'apple-touch-icon.png'),\n        join(appDir, 'src', 'app', 'apple-touch-icon.png'),\n      ];\n    case '/site.webmanifest':\n      return [\n        ...publicCandidates(appDir, 'site.webmanifest'),\n        ...routeFileCandidates(appDir, '/site.webmanifest'),\n      ];\n    case '/manifest.webmanifest':\n      return [\n        ...publicCandidates(appDir, 'manifest.webmanifest'),\n        ...nextMetadataCandidates(appDir, 'manifest'),\n        ...routeFileCandidates(appDir, '/manifest.webmanifest'),\n      ];\n    case '/manifest.json':\n      return [...publicCandidates(appDir, 'manifest.json')];\n    case '/agents.txt':\n      return [\n        ...publicCandidates(appDir, 'agents.txt'),\n        ...routeFileCandidates(appDir, '/agents.txt'),\n      ];\n    case '/llms.txt':\n      return [\n        ...publicCandidates(appDir, 'llms.txt'),\n        ...routeFileCandidates(appDir, '/llms.txt'),\n      ];\n    case '/.well-known/security.txt':\n    case '/.well-known/assetlinks.json':\n    case '/.well-known/apple-app-site-association':\n    case '/.well-known/agents.json':\n    case '/.well-known/ai-plugin.json':\n      return [\n        ...publicCandidates(appDir, path),\n        ...routeFileCandidates(appDir, path),\n      ];\n    default:\n      return [\n        ...publicCandidates(appDir, path),\n        ...routeFileCandidates(appDir, path),\n      ];\n  }\n}\n\nfunction findExistingCandidate(candidates: string[]): string | undefined {\n  return candidates.find((candidate) => existsSync(candidate));\n}\n\nfunction detectWorkerRouteStatus(\n  workerText: string,\n  routeInventory: Set<string>,\n  hasWorkerEntry: boolean,\n  hasAssetsFallback: boolean,\n  path: string\n): WorkerStatus {\n  if (!hasWorkerEntry) return 'n/a';\n  if (hasAssetsFallback && PAGE_SLUG_RE.test(path)) return 'yes';\n  if (routeInventory.has(path)) return 'yes';\n\n  const singleQuoted = `'${path}'`;\n  const doubleQuoted = `\"${path}\"`;\n  const tickQuoted = `\\`${path}\\``;\n  if (workerText.includes(singleQuoted) || workerText.includes(doubleQuoted)) {\n    return 'yes';\n  }\n  if (workerText.includes(tickQuoted)) return 'yes';\n\n  return 'no';\n}\n\nfunction detectClientRootStatus(\n  clientText: string,\n  clientRootExists: boolean,\n  slug: string,\n  workerStatus: WorkerStatus,\n  hasWorkerEntry: boolean\n): ClientStatus {\n  if (!hasWorkerEntry || workerStatus !== 'yes') return 'n/a';\n  if (!clientRootExists) return 'n/a';\n\n  return clientText.includes(`${slug}-root`) ? 'yes' : 'no';\n}\n\nfunction baseMissingSeverity(\n  spec: QualityPathSpec,\n  linkedCount: number\n): QualityIssueSeverity {\n  if (linkedCount > 0 && spec.required !== false) {\n    return 'error';\n  }\n  return spec.severityWhenMissing || (spec.required ? 'error' : 'warn');\n}\n\nfunction auditWorkspaceTarget(\n  target: QualityTarget,\n  specs: QualityPathSpec[]\n): QualityTargetReport {\n  const appDir = target.appDir;\n  if (!appDir) {\n    return {\n      target,\n      pathResults: [],\n      issues: [\n        buildIssue(\n          'invalid-target',\n          'error',\n          'Target does not include an appDir for local lint checks',\n          { process: target.name }\n        ),\n      ],\n      ok: false,\n    };\n  }\n\n  const files = ['app', 'src', 'client'].flatMap((dirName) =>\n    walkFiles(join(appDir, dirName))\n  );\n\n  const workerCandidates = [\n    join(appDir, 'src', 'worker.ts'),\n    join(appDir, 'src', 'worker.js'),\n    join(appDir, 'src', 'index.ts'),\n    join(appDir, 'src', 'index.js'),\n    join(appDir, 'worker.ts'),\n    join(appDir, 'index.ts'),\n  ];\n  const workerTexts = workerCandidates\n    .filter((candidate) => existsSync(candidate))\n    .map((candidate) => safeReadUtf8(candidate));\n  const hasWorkerEntry = workerTexts.length > 0;\n  const workerText = workerTexts.join('\\n');\n  const routeInventory = new Set<string>(extractRouteLiterals(workerText));\n  const hasAssetsFallback =\n    workerText.includes('ASSETS.fetch(request)') ||\n    workerText.includes('ASSETS.fetch(');\n\n  const clientRootCandidates = [\n    join(appDir, 'src', 'client', 'index.tsx'),\n    join(appDir, 'src', 'client', 'main.tsx'),\n    join(appDir, 'client', 'index.tsx'),\n    join(appDir, 'client', 'main.tsx'),\n  ];\n  const clientTexts = clientRootCandidates\n    .filter((candidate) => existsSync(candidate))\n    .map((candidate) => safeReadUtf8(candidate));\n  const clientRootExists = clientTexts.length > 0;\n  const clientText = clientTexts.join('\\n');\n\n  const pathResults: QualityPathStatus[] = [];\n  const issues: QualityIssue[] = [];\n\n  for (const spec of specs) {\n    const path = spec.path;\n    const linkedCount = countPathLinks(files, path);\n    const candidates = pathCandidates(appDir, path);\n    const existingCandidate = findExistingCandidate(candidates);\n    const exists = Boolean(existingCandidate);\n\n    let worker: WorkerStatus = 'n/a';\n    let client: ClientStatus = 'n/a';\n\n    if (PAGE_SLUG_RE.test(path)) {\n      worker = detectWorkerRouteStatus(\n        workerText,\n        routeInventory,\n        hasWorkerEntry,\n        hasAssetsFallback,\n        path\n      );\n      const slug = path.slice(1);\n      client = detectClientRootStatus(\n        clientText,\n        clientRootExists,\n        slug,\n        worker,\n        hasWorkerEntry\n      );\n    }\n\n    const pathIssues: QualityIssue[] = [];\n\n    if (!exists) {\n      const severity = baseMissingSeverity(spec, linkedCount);\n      const candidatePreview = candidates.slice(0, 3).join(' or ');\n      const suggestion = candidatePreview\n        ? `Create one of: ${candidatePreview}`\n        : undefined;\n\n      pathIssues.push(\n        buildIssue(\n          'missing-path-implementation',\n          severity,\n          `Missing implementation for ${path}`,\n          {\n            path,\n            appDir,\n            process: target.name,\n            suggestion,\n          }\n        )\n      );\n    }\n\n    if (PAGE_SLUG_RE.test(path) && hasWorkerEntry && worker === 'no') {\n      pathIssues.push(\n        buildIssue(\n          'missing-worker-route',\n          'error',\n          `Worker PAGE_ROUTES is missing ${path}`,\n          {\n            path,\n            appDir,\n            process: target.name,\n            suggestion: `Add ${path} to worker route handling (src/index.ts or src/worker.ts)`,\n          }\n        )\n      );\n    }\n\n    if (PAGE_SLUG_RE.test(path) && client === 'no') {\n      pathIssues.push(\n        buildIssue(\n          'missing-client-root',\n          'error',\n          `Client hydration root is missing for ${path}`,\n          {\n            path,\n            appDir,\n            process: target.name,\n            suggestion: `Add ${path.slice(\n              1\n            )}-root mapping in src/client/index.tsx`,\n          }\n        )\n      );\n    }\n\n    pathResults.push({\n      path,\n      category: spec.category,\n      required: spec.required,\n      linkedCount,\n      exists,\n      candidate: existingCandidate,\n      worker,\n      client,\n      issues: pathIssues,\n    });\n\n    issues.push(...pathIssues);\n  }\n\n  return {\n    target,\n    pathResults,\n    issues,\n    ok: issues.length === 0,\n  };\n}\n\nfunction resolveProcessBaseUrl(\n  processName: string,\n  smokeOptions: QualitySmokeOptions\n): string {\n  const explicit = smokeOptions.processUrlByName?.[processName];\n  if (explicit) return explicit.replace(/\\/+$/, '');\n\n  if (/^https?:\\/\\//i.test(processName)) {\n    return processName.replace(/\\/+$/, '');\n  }\n\n  if (processName.includes('.')) {\n    return `https://${processName}`.replace(/\\/+$/, '');\n  }\n\n  return `https://${processName}.edgework.ai`;\n}\n\nfunction hasLegacyWorkersRedirect(content: string): boolean {\n  const jsLocationRedirect =\n    /window\\.location(?:\\.(?:href|assign|replace))?[\\s=('\"`]*https?:\\/\\/[a-z0-9.-]+\\.workers\\.dev/i;\n  const metaRefreshRedirect =\n    /<meta[^>]+http-equiv=[\"']refresh[\"'][^>]+url=https?:\\/\\/[^\\s\"'<>]+\\.workers\\.dev/i;\n  return jsLocationRedirect.test(content) || metaRefreshRedirect.test(content);\n}\n\nasync function smokeFetchPath(\n  processName: string,\n  path: string,\n  options: SitePathSmokeTestOptions\n): Promise<QualityPathSmokeResult> {\n  const baseUrl = resolveProcessBaseUrl(processName, options);\n  const targetUrl = `${baseUrl}${path}`;\n\n  const response = await fetch(targetUrl, {\n    method: 'GET',\n    redirect: 'manual',\n    signal: options.signal,\n    headers: {\n      Accept: '*/*',\n      ...createEdgeworkAuthHeader(resolveEdgeworkApiKey(options.apiKey)),\n    },\n  });\n\n  const location = response.headers.get('location');\n  if (location && /\\.workers\\.dev/i.test(location)) {\n    return {\n      path,\n      url: targetUrl,\n      ok: false,\n      status: response.status,\n      contentType: response.headers.get('content-type'),\n      legacyRedirectDetected: true,\n      details: `HTTP redirect points to workers.dev: ${location}`,\n    };\n  }\n\n  const contentType = response.headers.get('content-type');\n  if (\n    contentType?.includes('text/html') ||\n    contentType?.includes('application/xhtml+xml')\n  ) {\n    const body = await response.text();\n    if (hasLegacyWorkersRedirect(body)) {\n      return {\n        path,\n        url: targetUrl,\n        ok: false,\n        status: response.status,\n        contentType,\n        legacyRedirectDetected: true,\n        details: 'HTML contains legacy workers.dev client-side redirect',\n      };\n    }\n  }\n\n  return {\n    path,\n    url: targetUrl,\n    ok: response.ok,\n    status: response.status,\n    contentType,\n    legacyRedirectDetected: false,\n    details: response.ok\n      ? undefined\n      : `Unexpected non-2xx status: ${response.status}`,\n  };\n}\n\nfunction createSmokeIssue(\n  result: QualityPathSmokeResult,\n  target: QualityTarget\n): QualityIssue {\n  const code: QualityIssueCode = result.legacyRedirectDetected\n    ? 'legacy-workers-redirect'\n    : 'smoke-path-failed';\n\n  return buildIssue(\n    code,\n    'error',\n    `Smoke check failed for ${result.path} (${result.status})`,\n    {\n      path: result.path,\n      process: target.name,\n      appDir: target.appDir,\n      suggestion: result.details,\n    }\n  );\n}\n\nfunction withTimeoutSignal(\n  timeoutMs: number,\n  upstream?: AbortSignal\n): { signal: AbortSignal; cleanup: () => void } {\n  const controller = new AbortController();\n  const timeout = setTimeout(() => controller.abort(), timeoutMs);\n\n  if (upstream) {\n    if (upstream.aborted) {\n      controller.abort();\n    } else {\n      const onAbort = () => controller.abort();\n      upstream.addEventListener('abort', onAbort, { once: true });\n    }\n  }\n\n  return {\n    signal: controller.signal,\n    cleanup: () => clearTimeout(timeout),\n  };\n}\n\nasync function smokeTargetPaths(\n  target: QualityTarget,\n  pathSpecs: QualityPathSpec[],\n  options: QualitySmokeOptions\n): Promise<SitePathSmokeTestResult | undefined> {\n  const paths = normalizeUnique([\n    '/',\n    ...(options.paths || []),\n    ...(pathSpecs.map((spec) => spec.path) || []),\n  ]).map(normalizePath);\n\n  const timeoutMs = options.timeoutMs || 10_000;\n  const signalWrap = withTimeoutSignal(timeoutMs, options.signal);\n\n  try {\n    const pathResults: QualityPathSmokeResult[] = [];\n\n    for (const path of paths) {\n      const result = await smokeFetchPath(target.name, path, {\n        ...options,\n        signal: signalWrap.signal,\n      });\n      pathResults.push(result);\n    }\n\n    const failures = pathResults.filter((result) => !result.ok);\n\n    return {\n      process: target.name,\n      baseUrl: resolveProcessBaseUrl(target.name, options),\n      paths: pathResults,\n      ok: failures.length === 0,\n      failures,\n    };\n  } finally {\n    signalWrap.cleanup();\n  }\n}\n\nfunction summarize(targetReports: QualityTargetReport[]): {\n  targets: number;\n  issues: number;\n  errors: number;\n  warnings: number;\n  smokeFailures: number;\n} {\n  let issues = 0;\n  let errors = 0;\n  let warnings = 0;\n  let smokeFailures = 0;\n\n  for (const report of targetReports) {\n    for (const issue of report.issues) {\n      issues += 1;\n      if (issue.severity === 'error') {\n        errors += 1;\n      } else {\n        warnings += 1;\n      }\n\n      if (\n        issue.code === 'smoke-path-failed' ||\n        issue.code === 'legacy-workers-redirect'\n      ) {\n        smokeFailures += 1;\n      }\n    }\n  }\n\n  return {\n    targets: targetReports.length,\n    issues,\n    errors,\n    warnings,\n    smokeFailures,\n  };\n}\n\nexport async function runQualityAutopilot(\n  options: QualityAutopilotOptions = {}\n): Promise<QualityAutopilotReport> {\n  const workspaceRoot = resolve(options.workspaceRoot || process.cwd());\n  const appsDir = options.appsDir || DEFAULT_APPS_DIR;\n  const source = options.source || DEFAULT_SOURCE;\n\n  if (!SOURCE_OPTIONS.has(source)) {\n    throw new Error(\n      `Invalid quality source: ${source}. Expected one of workspace|gateway|all`\n    );\n  }\n\n  const pathSpecs = resolvePathSpecs(options);\n\n  const workspaceTargets =\n    source === 'workspace' || source === 'all'\n      ? discoverWorkspaceTargets(workspaceRoot, appsDir)\n      : [];\n\n  let gatewayTargets: GatewayQualityTarget[] = [];\n  const discoveryIssues: QualityIssue[] = [];\n\n  if (source === 'gateway' || source === 'all') {\n    try {\n      gatewayTargets = await discoverGatewayTargets(options);\n    } catch (error: unknown) {\n      const message =\n        error instanceof Error\n          ? error.message\n          : 'unknown gateway discovery error';\n      discoveryIssues.push(\n        buildIssue('gateway-discovery-failed', 'error', message, {\n          suggestion:\n            'Set EDGEWORK_API_KEY (or --api-key) and ensure gateway access is available',\n        })\n      );\n    }\n  }\n\n  const mergedTargets = mergeTargets(workspaceTargets, gatewayTargets);\n  const filteredTargets = applyTargetFilters(mergedTargets, options);\n\n  const targetReports: QualityTargetReport[] = [];\n\n  for (const target of filteredTargets) {\n    const targetPathSpecs = discoveredPathSpecsForTarget(target, pathSpecs);\n    const lintReport =\n      target.appDir && (source === 'workspace' || source === 'all')\n        ? auditWorkspaceTarget(target, targetPathSpecs)\n        : undefined;\n\n    const smokeEnabled = Boolean(options.smoke);\n    const smokeReport = smokeEnabled\n      ? await smokeTargetPaths(target, targetPathSpecs, {\n          apiKey: options.apiKey,\n          signal: options.signal,\n          timeoutMs: options.smokeTimeoutMs,\n          paths: normalizeCsv(options.smokePaths).map(normalizePath),\n          processUrlByName: options.processUrlByName,\n        })\n      : undefined;\n\n    const smokeIssues = smokeReport\n      ? smokeReport.failures.map((f) => createSmokeIssue(f, target))\n      : [];\n\n    const issues = [...(lintReport?.issues || []), ...smokeIssues];\n\n    targetReports.push({\n      target,\n      pathResults: lintReport?.pathResults || [],\n      smoke: smokeReport,\n      issues,\n      ok: issues.length === 0,\n    });\n  }\n\n  if (discoveryIssues.length > 0) {\n    targetReports.push({\n      target: {\n        name: 'gateway-discovery',\n        source: 'manual',\n      },\n      pathResults: [],\n      issues: discoveryIssues,\n      ok: false,\n    });\n  }\n\n  const summary = summarize(targetReports);\n\n  return {\n    generatedAt: new Date().toISOString(),\n    options: {\n      workspaceRoot,\n      appsDir,\n      source,\n      smoke: Boolean(options.smoke),\n      strict: options.strict ?? true,\n      targets: normalizeCsv(options.targets),\n      excludeTargets: normalizeCsv(options.excludeTargets),\n      pathSpecs,\n    },\n    targets: targetReports,\n    summary,\n    ok: summary.errors === 0,\n  };\n}\n\nfunction formatPathStatus(pathStatus: QualityPathStatus): string {\n  const existence = pathStatus.exists ? 'yes' : 'no';\n  const issues =\n    pathStatus.issues.length > 0\n      ? pathStatus.issues.map((issue) => issue.code).join(',')\n      : 'none';\n\n  return `${pathStatus.path} links:${pathStatus.linkedCount} exists:${existence} worker:${pathStatus.worker} client:${pathStatus.client} issues:${issues}`;\n}\n\nexport function formatQualityAutopilotReport(\n  report: QualityAutopilotReport\n): string {\n  const lines: string[] = [];\n\n  lines.push('Quality Autopilot Report');\n  lines.push(`Generated: ${report.generatedAt}`);\n  lines.push(`Source: ${report.options.source}`);\n  lines.push(`Smoke: ${report.options.smoke ? 'enabled' : 'disabled'}`);\n\n  for (const target of report.targets) {\n    lines.push('');\n    lines.push(`${target.target.name} (${target.target.source})`);\n\n    if (target.target.appDir) {\n      lines.push(`  appDir: ${target.target.appDir}`);\n    }\n\n    if (target.pathResults.length === 0) {\n      lines.push('  no local path checks');\n    } else {\n      for (const pathStatus of target.pathResults) {\n        lines.push(`  ${formatPathStatus(pathStatus)}`);\n      }\n    }\n\n    if (target.smoke) {\n      lines.push(\n        `  smoke: ${target.smoke.ok ? 'pass' : 'fail'} (${\n          target.smoke.baseUrl\n        })`\n      );\n      for (const smokePath of target.smoke.paths) {\n        lines.push(\n          `    ${smokePath.path} -> ${smokePath.status} ${\n            smokePath.ok ? 'ok' : 'fail'\n          }`\n        );\n      }\n    }\n\n    if (target.issues.length > 0) {\n      for (const issue of target.issues) {\n        lines.push(\n          `  [${issue.severity.toUpperCase()}] ${issue.code}: ${issue.message}`\n        );\n        if (issue.suggestion) {\n          lines.push(`    suggestion: ${issue.suggestion}`);\n        }\n      }\n    }\n  }\n\n  lines.push('');\n  lines.push('Summary');\n  lines.push(`  targets: ${report.summary.targets}`);\n  lines.push(`  issues: ${report.summary.issues}`);\n  lines.push(`  errors: ${report.summary.errors}`);\n  lines.push(`  warnings: ${report.summary.warnings}`);\n  lines.push(`  smokeFailures: ${report.summary.smokeFailures}`);\n\n  return lines.join('\\n');\n}\n","import { spawnSync } from 'node:child_process';\nimport { existsSync, mkdirSync, readdirSync, writeFileSync } from 'node:fs';\nimport { createServer } from 'node:http';\nimport { basename, dirname, join, resolve } from 'node:path';\n\nimport { resolveAeonConfig, serializeAeonToml } from './aeon-config';\nimport { runQualityAutopilot } from './quality';\nimport type {\n  AeonConfig,\n  FeatureToggles,\n  QualityPolicy,\n  ScaffoldOptions,\n  ScaffoldResult,\n} from './types';\n\nconst STATIC_ROUTES = [\n  '/',\n  '/aeon',\n  '/flux',\n  '/dash',\n  '/dash-relay',\n  '/relay',\n  '/edgework',\n  '/neural',\n  '/aegis',\n  '/docs',\n  '/privacy',\n  '/terms',\n  '/cookies',\n  '/help',\n  '/contact',\n  '/confidentiality',\n];\n\nconst INTERACTIVE_ROUTES = [\n  '/',\n  '/dash',\n  '/dash-relay',\n  '/relay',\n  '/edgework',\n  '/neural',\n];\n\nfunction resolveSiteBaseUrl(config: AeonConfig): string {\n  const deploymentTarget = config.project.deploymentTarget.trim();\n  if (!deploymentTarget) {\n    return `https://${config.project.name}.edgework.ai`;\n  }\n  if (/^https?:\\/\\//i.test(deploymentTarget)) {\n    return deploymentTarget.replace(/\\/+$/, '');\n  }\n  if (deploymentTarget.includes('.')) {\n    return `https://${deploymentTarget}`.replace(/\\/+$/, '');\n  }\n  return `https://${config.project.name}.edgework.ai`;\n}\n\nfunction ensureEmptyDirectory(targetDir: string): void {\n  if (!existsSync(targetDir)) {\n    mkdirSync(targetDir, { recursive: true });\n    return;\n  }\n\n  const entries = readdirSync(targetDir);\n  if (entries.length > 0) {\n    throw new Error(\n      `Target directory must be empty for scaffold: ${targetDir} (${entries.length} entries found)`\n    );\n  }\n}\n\nfunction writeFiles(\n  targetDir: string,\n  files: Record<string, string>\n): string[] {\n  const written: string[] = [];\n\n  for (const [relativePath, content] of Object.entries(files)) {\n    const absolutePath = join(targetDir, relativePath);\n    mkdirSync(dirname(absolutePath), { recursive: true });\n    writeFileSync(absolutePath, content, 'utf8');\n    written.push(absolutePath);\n  }\n\n  written.sort();\n  return written;\n}\n\nfunction hasCommand(command: string): boolean {\n  const check = spawnSync(command, ['--version'], {\n    stdio: 'ignore',\n  });\n  return check.status === 0;\n}\n\nfunction installDependencies(targetDir: string): boolean {\n  const installer = hasCommand('bun') ? 'bun' : 'npm';\n  const args = installer === 'bun' ? ['install'] : ['install', '--no-audit'];\n  const result = spawnSync(installer, args, {\n    cwd: targetDir,\n    stdio: 'inherit',\n  });\n  return result.status === 0;\n}\n\nasync function smokeServe(targetDir: string): Promise<boolean> {\n  const publicDir = join(targetDir, 'public');\n  const staticIndex = join(publicDir, 'index.html');\n  const staticHealth = JSON.stringify({\n    status: 'ok',\n    source: 'aeon-foundation-scaffold',\n  });\n\n  const server = createServer((request, response) => {\n    const url = request.url || '/';\n    if (url === '/health' || url === '/api/health') {\n      response.writeHead(200, {\n        'content-type': 'application/json; charset=utf-8',\n      });\n      response.end(staticHealth);\n      return;\n    }\n\n    if (!existsSync(staticIndex)) {\n      response.writeHead(404, {\n        'content-type': 'text/plain; charset=utf-8',\n      });\n      response.end('missing scaffold index');\n      return;\n    }\n\n    response.writeHead(200, {\n      'content-type': 'text/html; charset=utf-8',\n      'cache-control':\n        'public, max-age=300, s-maxage=900, stale-while-revalidate=300',\n    });\n    response.end(\n      `<!doctype html><html><body><h1>aeon-foundation scaffold</h1><p>Route: ${url}</p></body></html>`\n    );\n  });\n\n  const listenResult = await new Promise<boolean>((resolvePromise) => {\n    server.once('error', () => resolvePromise(false));\n    server.listen(0, '127.0.0.1', () => resolvePromise(true));\n  });\n  if (!listenResult) {\n    server.close();\n    return false;\n  }\n\n  const address = server.address();\n  const port =\n    address && typeof address === 'object' && typeof address.port === 'number'\n      ? address.port\n      : null;\n  if (!port) {\n    server.close();\n    return false;\n  }\n\n  try {\n    const response = await fetch(`http://127.0.0.1:${port}/health`);\n    return response.ok;\n  } catch {\n    return false;\n  } finally {\n    await new Promise<void>((resolvePromise) => {\n      server.close(() => resolvePromise());\n    });\n  }\n}\n\nfunction routeTitle(route: string): string {\n  if (route === '/') return 'Aeon Foundation';\n  return route\n    .slice(1)\n    .split('-')\n    .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n    .join(' ');\n}\n\nfunction pageTemplate(route: string, config: AeonConfig): string {\n  const title = routeTitle(route);\n  const siteBaseUrl = resolveSiteBaseUrl(config);\n  return `<!doctype html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\" />\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n  <title>${title} | ${config.project.name}</title>\n  <meta name=\"description\" content=\"${config.project.name} route: ${route}\" />\n  <link rel=\"canonical\" href=\"${siteBaseUrl}${route}\" />\n  <meta property=\"og:title\" content=\"${title} | ${config.project.name}\" />\n  <meta property=\"og:type\" content=\"website\" />\n  <meta property=\"og:url\" content=\"${siteBaseUrl}${route}\" />\n  <meta property=\"og:description\" content=\"Full-stack Aeon Foundation demo with DashRelay, ESI, UCAN, ZK, and Presence.\" />\n  <meta name=\"twitter:card\" content=\"summary_large_image\" />\n  <meta name=\"theme-color\" content=\"#0b0f14\" />\n  <script type=\"application/ld+json\">\n  {\"@context\":\"https://schema.org\",\"@type\":\"WebPage\",\"name\":\"${title}\",\"url\":\"${siteBaseUrl}${route}\"}\n  </script>\n  <style>\n    :root { color-scheme: light; --bg:#f6fbff; --ink:#0f1a24; --accent:#2077ad; --muted:#4f6475; }\n    body { font-family: \"Georama\", \"Segoe UI\", sans-serif; margin:0; background:radial-gradient(circle at 20% -10%, #e0f1ff 0%, var(--bg) 50%, #f2f8ff 100%); color:var(--ink); min-height:100vh; }\n    main { max-width:980px; margin:0 auto; padding:64px 24px; }\n    nav { display:flex; gap:12px; flex-wrap:wrap; margin-bottom:28px; }\n    a { color:var(--accent); text-decoration:none; font-weight:600; }\n    a:hover { text-decoration:underline; }\n    h1 { margin:0 0 12px 0; line-height:1.1; font-size:clamp(2rem,5vw,3.5rem); }\n    p { color:var(--muted); font-size:1.05rem; }\n    .pill { display:inline-flex; align-items:center; border-radius:999px; background:#e8f4ff; color:#175f8a; padding:6px 12px; font-size:0.8rem; letter-spacing:0.08em; text-transform:uppercase; margin-bottom:16px; }\n  </style>\n</head>\n<body>\n  <main>\n    <div class=\"pill\">Aeon Foundation Demo</div>\n    <h1>${title}</h1>\n    <p>Route <code>${route}</code> is pre-rendered and tuned for high Lighthouse scores.</p>\n    <nav>\n      <a href=\"/\">Home</a>\n      <a href=\"/dash\">Dash</a>\n      <a href=\"/dash-relay\">DashRelay</a>\n      <a href=\"/edgework\">Edgework</a>\n      <a href=\"/neural\">Neural</a>\n      <a href=\"/docs\">Docs</a>\n      <a href=\"/privacy\">Privacy</a>\n      <a href=\"/terms\">Terms</a>\n      <a href=\"/cookies\">Cookies</a>\n    </nav>\n  </main>\n</body>\n</html>\n`;\n}\n\nfunction createPublicPages(config: AeonConfig): Record<string, string> {\n  const files: Record<string, string> = {};\n  const siteBaseUrl = resolveSiteBaseUrl(config);\n\n  for (const route of STATIC_ROUTES) {\n    const relativePath =\n      route === '/' ? 'public/index.html' : `public${route}/index.html`;\n    files[relativePath] = pageTemplate(route, config);\n  }\n\n  files['public/sitemap.xml'] = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n${STATIC_ROUTES.map((route) => {\n  const url = `${siteBaseUrl}${route}`;\n  return `  <url><loc>${url}</loc></url>`;\n}).join('\\n')}\n</urlset>\n`;\n\n  files['public/robots.txt'] = `User-agent: *\nAllow: /\nSitemap: ${siteBaseUrl}/sitemap.xml\n`;\n\n  files['public/manifest.webmanifest'] = JSON.stringify(\n    {\n      name: config.project.name,\n      short_name: 'aeon-foundation',\n      display: 'standalone',\n      start_url: '/',\n      background_color: '#f6fbff',\n      theme_color: '#2077ad',\n      icons: [\n        {\n          src: '/favicon.svg',\n          sizes: 'any',\n          type: 'image/svg+xml',\n        },\n      ],\n    },\n    null,\n    2\n  );\n\n  files[\n    'public/favicon.svg'\n  ] = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 128 128\" role=\"img\" aria-label=\"Aeon\">\n  <defs>\n    <linearGradient id=\"g\" x1=\"0\" x2=\"1\" y1=\"0\" y2=\"1\">\n      <stop offset=\"0%\" stop-color=\"#2077ad\"/>\n      <stop offset=\"100%\" stop-color=\"#22c3b5\"/>\n    </linearGradient>\n  </defs>\n  <rect width=\"128\" height=\"128\" rx=\"24\" fill=\"#0f1a24\"/>\n  <path d=\"M20 88L64 16l44 72H92L64 44 36 88z\" fill=\"url(#g)\"/>\n</svg>\n`;\n\n  files['public/agents.txt'] = `# ${config.project.name}\nAgent endpoint: ${siteBaseUrl}/.well-known/agents.json\nMCP: ${config.integrations.mcpServerCommand}\n`;\n\n  files['public/llms.txt'] = `# ${config.project.name}\nModel endpoint: ${siteBaseUrl}/v1/chat/completions\nEmbeddings endpoint: ${siteBaseUrl}/v1/embeddings\nSafety: zero external paid AI calls\n`;\n\n  files['public/.well-known/agents.json'] = JSON.stringify(\n    {\n      name: config.project.name,\n      mcp: {\n        command: config.integrations.mcpServerCommand,\n      },\n      capabilities: {\n        deploy: true,\n        quality: true,\n        presence: config.features.presence,\n        ucan: config.features.ucan,\n        zk: config.features.zk,\n      },\n    },\n    null,\n    2\n  );\n\n  files['public/.well-known/ai-plugin.json'] = JSON.stringify(\n    {\n      schema_version: 'v1',\n      name_for_human: `${config.project.name} edgework`,\n      name_for_model: `${config.project.name.replace(/-/g, '_')}_edgework`,\n      description_for_human:\n        'Aeon Foundation full-stack demo with deploy + quality integrations',\n      description_for_model:\n        'Use deploy scaffold, deploy clone, and quality endpoints to build and validate Aeon apps.',\n      auth: { type: 'none' },\n      api: {\n        type: 'openapi',\n        url: `${siteBaseUrl}/openapi.json`,\n      },\n      logo_url: `${siteBaseUrl}/favicon.svg`,\n      contact_email: 'ops@affectively.ai',\n      legal_info_url: `${siteBaseUrl}/terms`,\n    },\n    null,\n    2\n  );\n\n  files[\n    'public/.well-known/security.txt'\n  ] = `Contact: mailto:security@affectively.ai\nExpires: 2030-01-01T00:00:00.000Z\nCanonical: ${siteBaseUrl}/.well-known/security.txt\n`;\n\n  return files;\n}\n\nfunction workerSource(config: AeonConfig): string {\n  return `/// <reference types=\"@cloudflare/workers-types\" />\n\ntype Env = {\n  ASSETS: Fetcher;\n  ${config.features.d1 ? `${config.storage.d1Binding}: D1Database;` : ''}\n  ${config.features.kv ? `${config.storage.kvBinding}: KVNamespace;` : ''}\n  ${config.features.r2 ? `${config.storage.r2Binding}: R2Bucket;` : ''}\n};\n\nconst FEATURES = ${JSON.stringify(config.features, null, 2)} as const;\nconst QUALITY: { staticThreshold: number; interactiveThreshold: number } = {\n  staticThreshold: ${config.quality.staticThreshold},\n  interactiveThreshold: ${config.quality.interactiveThreshold},\n};\n\nconst CACHE_CONTROL = '${config.performance.cacheControl}';\n\nfunction json(data: unknown, init?: ResponseInit): Response {\n  return new Response(JSON.stringify(data), {\n    ...init,\n    headers: {\n      'content-type': 'application/json; charset=utf-8',\n      'cache-control': CACHE_CONTROL,\n      ...(init?.headers || {}),\n    },\n  });\n}\n\nfunction text(data: string, init?: ResponseInit): Response {\n  return new Response(data, {\n    ...init,\n    headers: {\n      'content-type': 'text/plain; charset=utf-8',\n      'cache-control': CACHE_CONTROL,\n      ...(init?.headers || {}),\n    },\n  });\n}\n\nasync function verifyUcan(token: string): Promise<boolean> {\n  if (!FEATURES.ucan) return false;\n  return token.startsWith('ucan:');\n}\n\nasync function verifyZkProof(proof: string): Promise<boolean> {\n  if (!FEATURES.zk) return false;\n  return proof.length >= 16;\n}\n\nfunction pseudoNeuralVector(input: string): number[] {\n  const out: number[] = [];\n  let hash = 2166136261;\n  for (let index = 0; index < input.length; index += 1) {\n    hash ^= input.charCodeAt(index);\n    hash = Math.imul(hash, 16777619);\n    out.push(((hash >>> 0) % 1000) / 1000);\n    if (out.length === 8) break;\n  }\n  while (out.length < 8) out.push(0);\n  return out;\n}\n\nexport default {\n  async fetch(request: Request, env: Env): Promise<Response> {\n    const url = new URL(request.url);\n    const path = url.pathname;\n\n    if (path === '/health' || path === '/api/health' || path === '/readyz') {\n      return json({\n        status: 'ready',\n        project: '${config.project.name}',\n        quality: QUALITY,\n        features: FEATURES,\n      });\n    }\n\n    if (path === '/probe' || path === '/livez') {\n      return json({\n        status: 'exists',\n      });\n    }\n\n    if (path === '/api/deploy/features') {\n      return json({\n        features: FEATURES,\n        quality: QUALITY,\n        mcp: '${config.integrations.mcpServerCommand}',\n      });\n    }\n\n    if (FEATURES.presence && (path === '/ws' || path === '/api/presence/ws')) {\n      return new Response('WebSocket upgrade expected', { status: 426 });\n    }\n\n    if (FEATURES.ucan && path === '/api/ucan/verify' && request.method === 'POST') {\n      const payload = (await request.json()) as { token?: string };\n      const token = payload.token || '';\n      const valid = await verifyUcan(token);\n      return json({ valid, issuer: '${\n        config.security.ucanIssuer\n      }', audience: '${config.security.ucanAudience}' });\n    }\n\n    if (FEATURES.zk && path === '/api/zk/verify' && request.method === 'POST') {\n      const payload = (await request.json()) as { proof?: string };\n      const proof = payload.proof || '';\n      const valid = await verifyZkProof(proof);\n      return json({ valid, mode: '${config.security.zkVerificationMode}' });\n    }\n\n    if (FEATURES.neural && path === '/api/neural/infer' && request.method === 'POST') {\n      const payload = (await request.json()) as { input?: string };\n      const input = payload.input || '';\n      const embedding = pseudoNeuralVector(input);\n      return json({\n        engine: 'zero-cost-local',\n        embedding,\n      });\n    }\n\n    if (FEATURES.sitemap && path === '/sitemap.xml') {\n      return new Response(await env.ASSETS.fetch('https://local/sitemap.xml').then((r) => r.text()), {\n        headers: { 'content-type': 'application/xml; charset=utf-8', 'cache-control': CACHE_CONTROL },\n      });\n    }\n\n    if (FEATURES.robots && path === '/robots.txt') {\n      return text('User-agent: *\\\\nAllow: /\\\\nSitemap: /sitemap.xml\\\\n');\n    }\n\n    if (FEATURES.dashrelay && path === '/api/dashrelay/ping') {\n      return json({ ok: true, channel: '${\n        config.integrations.dashrelayChannels[0] || 'presence'\n      }' });\n    }\n\n    if (FEATURES.esi && path === '/api/esi/structured') {\n      return json({\n        mode: '${config.performance.esiMode}',\n        blocks: [\n          { type: 'summary', value: 'ESI.Structured stream' },\n          { type: 'collaborative', value: true },\n          { type: 'optimize', value: '${config.performance.speculation}' },\n        ],\n      });\n    }\n\n    if (FEATURES.analytics && path === '/api/analytics/ping') {\n      return json({\n        ok: true,\n        id: '${config.integrations.analyticsId}',\n      });\n    }\n\n    return env.ASSETS.fetch(request);\n  },\n};\n`;\n}\n\nfunction wranglerToml(config: AeonConfig): string {\n  return `name = \"${config.project.name}\"\nmain = \"src/index.ts\"\ncompatibility_date = \"2026-02-26\"\n\n[assets]\ndirectory = \"./public\"\nbinding = \"ASSETS\"\n\n[vars]\nPROJECT_NAME = \"${config.project.name}\"\nEDGEWORK_MCP = \"${config.integrations.mcpServerCommand}\"\n\n# Workers AI is intentionally disabled to enforce zero paid AI usage.\n# [ai]\n# binding = \"AI\"\n\n${\n  config.features.d1\n    ? `[[d1_databases]]\nbinding = \"${config.storage.d1Binding}\"\ndatabase_name = \"${config.project.name.replace(/-/g, '_')}\"\ndatabase_id = \"replace-with-d1-id\"\nmigrations_dir = \"./migrations\"`\n    : ''\n}\n\n${\n  config.features.kv\n    ? `[[kv_namespaces]]\nbinding = \"${config.storage.kvBinding}\"\nid = \"replace-with-kv-id\"`\n    : ''\n}\n\n${\n  config.features.r2\n    ? `[[r2_buckets]]\nbinding = \"${config.storage.r2Binding}\"\nbucket_name = \"${config.project.name}-assets\"`\n    : ''\n}\n`;\n}\n\nfunction packageJson(config: AeonConfig): string {\n  return JSON.stringify(\n    {\n      name: config.project.name,\n      version: '0.1.0',\n      private: true,\n      type: 'module',\n      scripts: {\n        dev: 'node scripts/dev-server.mjs',\n        serve: 'node scripts/dev-server.mjs --once',\n        quality: 'node scripts/quality-check.mjs',\n        lighthouse: 'node scripts/lighthouse-gate.mjs',\n        benchmark: 'node scripts/benchmark-startup.mjs',\n      },\n    },\n    null,\n    2\n  );\n}\n\nfunction mcpConfig(config: AeonConfig): string {\n  return JSON.stringify(\n    {\n      $schema: 'https://spec.modelcontextprotocol.io/mcp.json',\n      mcpServers: {\n        edgework: {\n          command: 'npx',\n          args: ['@emotions-app/edgework-mcp'],\n          env: {\n            EDGEWORK_API_KEY: '${EDGEWORK_API_KEY}',\n          },\n        },\n        'edgework-deploy': {\n          command: 'npx',\n          args: ['@emotions-app/edgework-node', 'mcp-server'],\n          env: {\n            EDGEWORK_GATEWAY_URL: 'https://api.edgework.ai',\n          },\n        },\n        'aeon-foundation': {\n          command: 'edgework',\n          args: ['deploy', 'quality', '--source', 'workspace'],\n        },\n      },\n    },\n    null,\n    2\n  );\n}\n\nfunction devServerScript(): string {\n  return `import { createServer } from 'node:http';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { extname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst args = process.argv.slice(2);\nconst once = args.includes('--once');\nconst portArg = args.find((value) => value.startsWith('--port='));\nconst port = portArg ? Number(portArg.split('=')[1]) : 8787;\n\nconst rootDir = fileURLToPath(new URL('..', import.meta.url));\nconst publicDir = join(rootDir, 'public');\n\nconst MIME = new Map([\n  ['.html', 'text/html; charset=utf-8'],\n  ['.xml', 'application/xml; charset=utf-8'],\n  ['.txt', 'text/plain; charset=utf-8'],\n  ['.json', 'application/json; charset=utf-8'],\n  ['.webmanifest', 'application/manifest+json; charset=utf-8'],\n  ['.svg', 'image/svg+xml'],\n]);\n\nconst server = createServer((request, response) => {\n  const pathname = new URL(request.url || '/', 'http://localhost').pathname;\n  if (pathname === '/health' || pathname === '/api/health' || pathname === '/readyz') {\n    response.writeHead(200, { 'content-type': 'application/json; charset=utf-8' });\n    response.end(JSON.stringify({ status: 'ready', source: 'dev-server' }));\n    if (once) {\n      setTimeout(() => server.close(), 25);\n    }\n    return;\n  }\n\n  if (pathname === '/probe' || pathname === '/livez') {\n    response.writeHead(200, { 'content-type': 'application/json; charset=utf-8' });\n    response.end(JSON.stringify({ status: 'exists', source: 'dev-server' }));\n    return;\n  }\n\n  const filePath =\n    pathname === '/'\n      ? join(publicDir, 'index.html')\n      : join(publicDir, pathname.replace(/^\\\\/+/, ''), 'index.html');\n  const fallback = join(publicDir, pathname.replace(/^\\\\/+/, ''));\n  const resolved = existsSync(filePath) ? filePath : existsSync(fallback) ? fallback : null;\n\n  if (!resolved) {\n    response.writeHead(404, { 'content-type': 'text/plain; charset=utf-8' });\n    response.end('not found');\n    return;\n  }\n\n  const ext = extname(resolved);\n  response.writeHead(200, {\n    'content-type': MIME.get(ext) || 'application/octet-stream',\n    'cache-control': 'public, max-age=120',\n  });\n  response.end(readFileSync(resolved));\n});\n\nserver.listen(port, '127.0.0.1', () => {\n  console.log('[aeon-foundation] dev server on http://127.0.0.1:' + port);\n});\n`;\n}\n\nfunction qualityScript(config: AeonConfig): string {\n  return `import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\n\nconst requiredFiles = [\n  'public/index.html',\n  'public/sitemap.xml',\n  'public/robots.txt',\n  'public/privacy/index.html',\n  'public/terms/index.html',\n  'public/cookies/index.html',\n  'public/.well-known/ai-plugin.json',\n  'mcp.json',\n  'wrangler.toml',\n  'aeon.toml',\n];\n\nconst issues = [];\nfor (const file of requiredFiles) {\n  if (!existsSync(join(process.cwd(), file))) {\n    issues.push('Missing required file: ' + file);\n  }\n}\n\nconst policy = {\n  staticThreshold: ${config.quality.staticThreshold},\n  interactiveThreshold: ${config.quality.interactiveThreshold},\n};\n\nconsole.log('[quality] policy', policy);\n\nif (issues.length > 0) {\n  for (const issue of issues) {\n    console.error('[quality] ' + issue);\n  }\n  process.exit(1);\n}\n\nconsole.log('[quality] baseline checks passed');\n`;\n}\n\nfunction lighthouseScript(policy: QualityPolicy): string {\n  return `import { spawnSync } from 'node:child_process';\n\nconst staticRoutes = ${JSON.stringify(STATIC_ROUTES, null, 2)};\nconst interactiveRoutes = ${JSON.stringify(INTERACTIVE_ROUTES, null, 2)};\n\nconsole.log('[lighthouse] static routes target:', ${policy.staticThreshold});\nconsole.log('[lighthouse] interactive routes target:', ${\n    policy.interactiveThreshold\n  });\n\nif (!process.env.LIGHTHOUSE_URL_BASE) {\n  console.log('[lighthouse] set LIGHTHOUSE_URL_BASE to run full audit');\n  process.exit(0);\n}\n\nconst base = process.env.LIGHTHOUSE_URL_BASE.replace(/\\\\/+$/, '');\nconst lighthouseCmd = process.platform === 'win32' ? 'npx.cmd' : 'npx';\n\nfunction run(url) {\n  const result = spawnSync(\n    lighthouseCmd,\n    ['lighthouse', url, '--quiet', '--chrome-flags=--headless', '--output=json', '--output-path=stdout'],\n    { encoding: 'utf8' }\n  );\n  if (result.status !== 0 || !result.stdout) {\n    throw new Error('lighthouse failed for ' + url + ': ' + (result.stderr || 'unknown'));\n  }\n  const report = JSON.parse(result.stdout);\n  return {\n    performance: Math.round((report.categories.performance.score || 0) * 100),\n    accessibility: Math.round((report.categories.accessibility.score || 0) * 100),\n    bestPractices: Math.round((report.categories['best-practices'].score || 0) * 100),\n    seo: Math.round((report.categories.seo.score || 0) * 100),\n  };\n}\n\nlet failures = 0;\nfor (const route of staticRoutes) {\n  const score = run(base + route);\n  const min = Math.min(score.performance, score.accessibility, score.bestPractices, score.seo);\n  if (min < ${policy.staticThreshold}) {\n    failures += 1;\n    console.error('[lighthouse] static route failed', route, score);\n  }\n}\n\nfor (const route of interactiveRoutes) {\n  const score = run(base + route);\n  const min = Math.min(score.performance, score.accessibility, score.bestPractices, score.seo);\n  if (min < ${policy.interactiveThreshold}) {\n    failures += 1;\n    console.error('[lighthouse] interactive route failed', route, score);\n  }\n}\n\nif (failures > 0) {\n  process.exit(1);\n}\n\nconsole.log('[lighthouse] all routes passed policy');\n`;\n}\n\nfunction benchmarkScript(): string {\n  return `import { performance } from 'node:perf_hooks';\nimport { spawnSync } from 'node:child_process';\n\nconst start = performance.now();\nconst command = process.platform === 'win32' ? 'node.exe' : 'node';\nconst args = ['scripts/dev-server.mjs', '--once'];\n\nconst server = spawnSync(command, args, {\n  stdio: 'inherit',\n});\nconst elapsedMs = Math.round(performance.now() - start);\n\nconsole.log('[benchmark] serve lifecycle ms:', elapsedMs);\nif (server.status !== 0) {\n  process.exit(server.status || 1);\n}\n`;\n}\n\nfunction workerMcpReadme(): string {\n  return `# Deploy Framework MCP\n\nThis scaffold ships a deploy-oriented MCP stack for agents:\n\n1. \\`edgework\\` server via \\`@emotions-app/edgework-mcp\\`\n2. \\`edgework-deploy\\` server via \\`@emotions-app/edgework-node mcp-server\\`\n3. \\`aeon-foundation\\` quality shim for route and policy checks\n\nUse the generated \\`mcp.json\\` directly in Claude Code, Cursor, or any MCP-capable client.\n`;\n}\n\nfunction readme(config: AeonConfig): string {\n  return `# ${config.project.name}\n\nCanonical Aeon Foundation demo scaffold generated by:\n\n\\`\\`\\`bash\nedgework deploy scaffold aeon-foundation .\n\\`\\`\\`\n\n## Included by Default\n\n- Analytics (${config.integrations.analyticsId})\n- SEO (${config.features.sitemap ? 'sitemap' : 'no sitemap'}, ${\n    config.features.robots ? 'robots' : 'no robots'\n  }, metadata)\n- ESI (${config.performance.esiMode})\n- DashRelay / Dash / Presence\n- UCAN and ZK verification stubs\n- Zero-cost neural endpoint (no paid AI)\n- D1 / KV / R2 scaffolding\n- MCP integration (\\`mcp.json\\`) including edgework deploy framework tools\n\n## Commands\n\n\\`\\`\\`bash\n# Local preview\nbun run dev\n\n# Quality baseline\nbun run quality\n\n# Lighthouse gate (set LIGHTHOUSE_URL_BASE first)\nbun run lighthouse\n\\`\\`\\`\n\n## Deploy / Lift-and-Shift\n\n\\`\\`\\`bash\n# Canonical deploy\nedgework deploy . --name ${config.project.name}\n\n# Alias deploy\nedgework lift . --name ${config.project.name}\n\n# Clone deployed site to local disk\nedgework deploy clone <source> ./clone-dir\n\n# Alias clone/download\nedgework shift <source> ./clone-dir\n\\`\\`\\`\n`;\n}\n\nfunction sourceManifest(config: AeonConfig): string {\n  return JSON.stringify(\n    {\n      template: 'aeon-foundation',\n      generatedAt: new Date().toISOString(),\n      preset: config.preset,\n      features: config.features,\n      quality: config.quality,\n      routes: {\n        static: STATIC_ROUTES,\n        interactive: INTERACTIVE_ROUTES,\n      },\n      mcp: {\n        enabled: config.features.mcp,\n        server: config.integrations.mcpServerCommand,\n      },\n    },\n    null,\n    2\n  );\n}\n\nfunction buildScaffoldFiles(config: AeonConfig): Record<string, string> {\n  const files: Record<string, string> = {\n    'aeon.toml': serializeAeonToml(config),\n    'aeon.config.ts': `export default { name: '${config.project.name}', preset: '${config.preset}' };\\n`,\n    'package.json': packageJson(config),\n    'wrangler.toml': wranglerToml(config),\n    '.env.example': `EDGEWORK_API_KEY=ew_live_replace_me\nEDGEWORK_GATEWAY_URL=https://api.edgework.ai\nDASHRELAY_URL=wss://dashrelay.edgework.ai\n`,\n    'README.md': readme(config),\n    'mcp.json': mcpConfig(config),\n    'docs/DEPLOY_FRAMEWORK_MCP.md': workerMcpReadme(),\n    'scripts/dev-server.mjs': devServerScript(),\n    'scripts/quality-check.mjs': qualityScript(config),\n    'scripts/lighthouse-gate.mjs': lighthouseScript(config.quality),\n    'scripts/benchmark-startup.mjs': benchmarkScript(),\n    'src/index.ts': workerSource(config),\n    '.aeon/source-manifest.json': sourceManifest(config),\n  };\n\n  if (config.features.d1) {\n    files['migrations/0001_init.sql'] = `-- ${config.project.name} schema\nCREATE TABLE IF NOT EXISTS events (\n  id TEXT PRIMARY KEY,\n  type TEXT NOT NULL,\n  payload TEXT NOT NULL,\n  created_at TEXT NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_events_type_created ON events(type, created_at);\n`;\n  }\n\n  if (config.features.kv) {\n    files['seeds/kv.bootstrap.json'] = JSON.stringify(\n      {\n        welcome: 'aeon-foundation',\n        mode: 'demo',\n        updatedAt: new Date().toISOString(),\n      },\n      null,\n      2\n    );\n  }\n\n  if (config.features.r2) {\n    files[\n      'seeds/r2/README.md'\n    ] = `Upload static objects to the ${config.storage.r2Binding} bucket.\nUse signed URLs in production; keep this scaffold free of secrets.\n`;\n  }\n\n  return {\n    ...files,\n    ...createPublicPages(config),\n  };\n}\n\nexport function createScaffoldFilesForConfig(\n  config: AeonConfig\n): Record<string, string> {\n  return buildScaffoldFiles(config);\n}\n\nexport async function scaffoldAeonFoundation(\n  options: ScaffoldOptions\n): Promise<ScaffoldResult> {\n  const targetDir = resolve(options.targetDir);\n  const inferredName = targetDir.split(/[\\\\/]/).pop() || 'aeon-foundation';\n\n  const config = resolveAeonConfig({\n    projectName: inferredName,\n    preset: options.preset || 'all',\n    configPath: options.configPath,\n    enable: options.enable,\n    disable: options.disable,\n  });\n\n  ensureEmptyDirectory(targetDir);\n  const files = buildScaffoldFiles(config);\n  const filesWritten = writeFiles(targetDir, files);\n\n  const qualityReport =\n    options.quality === false\n      ? undefined\n      : await runQualityAutopilot({\n          source: 'workspace',\n          workspaceRoot: dirname(targetDir),\n          appsDir: '.',\n          targets: basename(targetDir),\n        });\n\n  const installed = options.install ? installDependencies(targetDir) : false;\n  const served = options.serve ? await smokeServe(targetDir) : false;\n\n  if (options.install && !installed) {\n    throw new Error(`Dependency installation failed in ${targetDir}`);\n  }\n  if (options.serve && !served) {\n    throw new Error(`Local serve smoke check failed in ${targetDir}`);\n  }\n  if (qualityReport && !qualityReport.ok) {\n    const issues = qualityReport.targets.flatMap((targetReport) =>\n      targetReport.issues.map((issue) => issue.message)\n    );\n    throw new Error(\n      `Scaffold quality checks failed:\\n${issues\n        .map((issue) => `- ${issue}`)\n        .join('\\n')}`\n    );\n  }\n\n  return {\n    targetDir,\n    config,\n    filesWritten,\n    installed,\n    served,\n    qualityReport: qualityReport\n      ? {\n          ok: qualityReport.ok,\n          issues: qualityReport.targets.flatMap((targetReport) =>\n            targetReport.issues.map((issue) => issue.message)\n          ),\n        }\n      : undefined,\n  };\n}\n\nfunction buildMcpServerScaffoldFiles(\n  config: AeonConfig\n): Record<string, string> {\n  const packageJson = {\n    name: config.project.name,\n    version: '0.1.0',\n    private: true,\n    type: 'module',\n    scripts: {\n      build: 'bun build src/index.ts --outdir dist --target node',\n      start: 'bun run src/index.ts',\n      dev: 'bun run --watch src/index.ts',\n      deploy: 'aeon deploy',\n    },\n    dependencies: {\n      '@affectively/edgework-sdk': 'workspace:*',\n      '@affectively/mcp-framework': 'workspace:*',\n      '@modelcontextprotocol/sdk': '^1.4.1',\n      zod: '^3.23.0',\n    },\n    devDependencies: {\n      typescript: '^5.7.0',\n      '@types/node': '^22.0.0',\n    },\n  };\n\n  const tsconfig = {\n    compilerOptions: {\n      target: 'ESNext',\n      module: 'NodeNext',\n      moduleResolution: 'NodeNext',\n      strict: true,\n      esModuleInterop: true,\n      skipLibCheck: true,\n      forceConsistentCasingInFileNames: true,\n      outDir: './dist',\n    },\n    include: ['src/**/*'],\n  };\n\n  const indexTs = `import { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n  CallToolRequestSchema,\n  ListToolsRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\n\nconst server = new Server(\n  {\n    name: '${config.project.name}',\n    version: '0.1.0',\n  },\n  {\n    capabilities: {\n      tools: {},\n    },\n  }\n);\n\nserver.setRequestHandler(ListToolsRequestSchema, async () => {\n  return {\n    tools: [\n      {\n        name: 'hello_world',\n        description: 'A simple hello world tool',\n        inputSchema: {\n          type: 'object',\n          properties: {\n            name: { type: 'string', description: 'Name to greet' }\n          },\n          required: ['name']\n        },\n      }\n    ],\n  };\n});\n\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n  if (request.params.name === 'hello_world') {\n    const args = request.params.arguments || {};\n    const name = args.name || 'World';\n    return {\n      content: [\n        {\n          type: 'text',\n          text: \\`Hello, \\${name}!\\`\n        }\n      ]\n    };\n  }\n  \n  throw new Error(\"Tool not found\");\n});\n\nasync function main() {\n  const transport = new StdioServerTransport();\n  await server.connect(transport);\n  console.error('${config.project.name} MCP Server running on stdio');\n}\n\nmain().catch(console.error);\n`;\n\n  const aeonToml = serializeAeonToml(config);\n\n  return {\n    'package.json': JSON.stringify(packageJson, null, 2),\n    'tsconfig.json': JSON.stringify(tsconfig, null, 2),\n    'aeon.toml': aeonToml,\n    'aeon.config.ts': `export default { name: '${config.project.name}', entry: './src/index.ts', preset: 'mcp-server' };\\n`,\n    'src/index.ts': indexTs,\n    'README.md': `# ${config.project.name}\\n\\nA custom MCP server.\\n\\n## Usage\\n\\n\\`\\`\\`bash\\nbun install\\nbun run build\\nbun start\\n\\`\\`\\`\\n`,\n  };\n}\n\nexport async function scaffoldMcpServer(\n  options: ScaffoldOptions\n): Promise<ScaffoldResult> {\n  const targetDir = resolve(options.targetDir);\n  const inferredName = targetDir.split(/[\\\\/]/).pop() || 'my-mcp-server';\n\n  const config = resolveAeonConfig({\n    projectName: inferredName,\n    preset: options.preset || 'mcp-server',\n    configPath: options.configPath,\n    enable: options.enable,\n    disable: options.disable,\n  });\n\n  ensureEmptyDirectory(targetDir);\n  const files = buildMcpServerScaffoldFiles(config);\n  const filesWritten = writeFiles(targetDir, files);\n\n  const installed = options.install ? installDependencies(targetDir) : false;\n\n  return {\n    targetDir,\n    config,\n    filesWritten,\n    installed,\n    served: false,\n  };\n}\n\nexport function featureKeys(): Array<keyof FeatureToggles> {\n  return [\n    'analytics',\n    'sitemap',\n    'robots',\n    'metadata',\n    'esi',\n    'dashrelay',\n    'dash',\n    'neural',\n    'presence',\n    'ucan',\n    'zk',\n    'd1',\n    'r2',\n    'kv',\n    'mcp',\n  ];\n}\n","import { spawnSync } from 'node:child_process';\nimport { existsSync, mkdirSync, readdirSync, writeFileSync } from 'node:fs';\nimport { createServer } from 'node:http';\nimport { extname, join, resolve } from 'node:path';\n\nimport {\n  createEdgeworkAuthHeader,\n  resolveEdgeworkApiKey,\n} from '../edgework-api-key';\nimport { scaffoldAeonFoundation } from './scaffold';\nimport type { CloneOptions, CloneResult, SourceRef } from './types';\n\nconst DEFAULT_GATEWAY_URL = 'https://api.edgework.ai';\n\ninterface GatewayListItem {\n  cid?: string;\n  name?: string;\n  state?: string;\n}\n\ninterface GatewayListResponse {\n  processes?: GatewayListItem[];\n}\n\ninterface GatewayStatusResponse {\n  cid: string;\n  name: string;\n  url?: string;\n}\n\ninterface SnapshotAsset {\n  path: string;\n  contentType: string;\n  textBody?: string;\n  binaryBody?: Uint8Array;\n}\n\nfunction hasCommand(command: string): boolean {\n  const check = spawnSync(command, ['--version'], {\n    stdio: 'ignore',\n  });\n  return check.status === 0;\n}\n\nfunction installDependencies(targetDir: string): boolean {\n  const installer = hasCommand('bun') ? 'bun' : 'npm';\n  const args = installer === 'bun' ? ['install'] : ['install', '--no-audit'];\n  const result = spawnSync(installer, args, {\n    cwd: targetDir,\n    stdio: 'inherit',\n  });\n  return result.status === 0;\n}\n\nasync function smokeServe(targetDir: string): Promise<boolean> {\n  const server = createServer((request, response) => {\n    const pathname = new URL(request.url || '/', 'http://localhost').pathname;\n    if (pathname === '/health' || pathname === '/api/health') {\n      response.writeHead(200, {\n        'content-type': 'application/json; charset=utf-8',\n      });\n      response.end(JSON.stringify({ ok: true, mode: 'clone' }));\n      return;\n    }\n\n    response.writeHead(200, {\n      'content-type': 'text/plain; charset=utf-8',\n    });\n    response.end('clone-ready');\n  });\n\n  const ready = await new Promise<boolean>((resolvePromise) => {\n    server.once('error', () => resolvePromise(false));\n    server.listen(0, '127.0.0.1', () => resolvePromise(true));\n  });\n  if (!ready) {\n    server.close();\n    return false;\n  }\n\n  const address = server.address();\n  const port =\n    address && typeof address === 'object' && typeof address.port === 'number'\n      ? address.port\n      : null;\n  if (!port) {\n    server.close();\n    return false;\n  }\n\n  try {\n    const response = await fetch(`http://127.0.0.1:${port}/health`);\n    return response.ok;\n  } catch {\n    return false;\n  } finally {\n    await new Promise<void>((resolvePromise) => {\n      server.close(() => resolvePromise());\n    });\n  }\n}\n\nfunction ensureEmptyDirectory(targetDir: string): void {\n  if (!existsSync(targetDir)) {\n    mkdirSync(targetDir, { recursive: true });\n    return;\n  }\n\n  const entries = readdirSync(targetDir);\n  if (entries.length > 0) {\n    throw new Error(\n      `Target directory must be empty for clone: ${targetDir} (${entries.length} entries found)`\n    );\n  }\n}\n\nfunction authHeaders(apiKey?: string): Record<string, string> {\n  return {\n    Accept: '*/*',\n    ...createEdgeworkAuthHeader(resolveEdgeworkApiKey(apiKey)),\n  };\n}\n\nasync function fetchGatewayList(\n  gatewayUrl: string,\n  apiKey?: string\n): Promise<GatewayListItem[]> {\n  const response = await fetch(`${gatewayUrl}/v1/aeon-deploy/list`, {\n    method: 'GET',\n    headers: authHeaders(apiKey),\n  });\n  if (!response.ok) {\n    return [];\n  }\n\n  const payload = (await response.json()) as GatewayListResponse;\n  return Array.isArray(payload.processes) ? payload.processes : [];\n}\n\nasync function fetchGatewayStatus(\n  gatewayUrl: string,\n  cid: string,\n  apiKey?: string\n): Promise<GatewayStatusResponse | null> {\n  const response = await fetch(`${gatewayUrl}/v1/aeon-deploy/${cid}/status`, {\n    method: 'GET',\n    headers: authHeaders(apiKey),\n  });\n  if (!response.ok) {\n    return null;\n  }\n\n  return (await response.json()) as GatewayStatusResponse;\n}\n\nfunction classifySource(input: string): SourceRef {\n  const value = input.trim();\n\n  try {\n    const parsedUrl = new URL(value);\n    const processName = parsedUrl.hostname.split('.')[0] || undefined;\n    return {\n      input,\n      kind: 'url',\n      value,\n      processName,\n      baseUrl: parsedUrl.origin,\n    };\n  } catch {\n    // Continue with non-URL classifiers.\n  }\n\n  if (value.startsWith('did:')) {\n    return {\n      input,\n      kind: 'pid',\n      value,\n      processName: value,\n      baseUrl: `https://${value}.edgework.ai`,\n    };\n  }\n\n  if (/^[a-f0-9]{24,}$/i.test(value)) {\n    return {\n      input,\n      kind: 'deployment-id',\n      value,\n      cid: value,\n    };\n  }\n\n  if (/^bafy[a-z0-9]+$/i.test(value)) {\n    return {\n      input,\n      kind: 'cid',\n      value,\n      cid: value,\n    };\n  }\n\n  return {\n    input,\n    kind: 'slug',\n    value,\n    processName: value,\n    baseUrl: `https://${value}.edgework.ai`,\n  };\n}\n\nfunction uniqueSorted(values: string[]): string[] {\n  return [...new Set(values)].sort();\n}\n\nasync function resolveSource(\n  source: string,\n  gatewayUrl: string,\n  apiKey?: string\n): Promise<SourceRef> {\n  const ref = classifySource(source);\n  const list = await fetchGatewayList(gatewayUrl, apiKey);\n\n  if (ref.kind === 'deployment-id' || ref.kind === 'cid') {\n    const status = await fetchGatewayStatus(gatewayUrl, ref.value, apiKey);\n    if (status) {\n      return {\n        ...ref,\n        cid: status.cid,\n        processName: status.name,\n        baseUrl:\n          status.url && status.url.startsWith('http')\n            ? status.url\n            : `https://${status.name}.edgework.ai`,\n      };\n    }\n\n    const byCid = list.find((item) => item.cid === ref.value);\n    if (byCid?.name) {\n      return {\n        ...ref,\n        cid: byCid.cid,\n        processName: byCid.name,\n        baseUrl: `https://${byCid.name}.edgework.ai`,\n      };\n    }\n  }\n\n  if (ref.kind === 'slug' || ref.kind === 'pid') {\n    const byName = list.find((item) => item.name === ref.value);\n    if (byName?.name) {\n      return {\n        ...ref,\n        processName: byName.name,\n        cid: byName.cid,\n        baseUrl: `https://${byName.name}.edgework.ai`,\n      };\n    }\n  }\n\n  if (ref.kind === 'url' && ref.processName) {\n    const byUrlName = list.find((item) => item.name === ref.processName);\n    if (byUrlName?.cid) {\n      return {\n        ...ref,\n        cid: byUrlName.cid,\n      };\n    }\n  }\n\n  if (!ref.baseUrl && ref.processName) {\n    ref.baseUrl = `https://${ref.processName}.edgework.ai`;\n  }\n  return ref;\n}\n\nfunction parseSitemapLocations(xml: string): string[] {\n  const matches = [...xml.matchAll(/<loc>([^<]+)<\\/loc>/g)];\n  return matches.map((match) => match[1]).filter(Boolean);\n}\n\nfunction normalizePathForSnapshot(pathname: string): string {\n  if (!pathname.startsWith('/')) return '/';\n  const clean = pathname.split('#')[0].split('?')[0];\n  return clean || '/';\n}\n\nfunction snapshotTargetPath(pathname: string, contentType: string): string {\n  const normalized = normalizePathForSnapshot(pathname);\n  const extension = extname(normalized);\n\n  if (normalized === '/') {\n    return 'public/index.html';\n  }\n  if (!extension) {\n    return `public${normalized}/index.html`;\n  }\n  return `public${normalized}`;\n}\n\nasync function fetchAsset(\n  baseUrl: string,\n  pathname: string,\n  apiKey?: string\n): Promise<SnapshotAsset | null> {\n  const targetUrl = `${baseUrl.replace(/\\/+$/, '')}${pathname}`;\n  const response = await fetch(targetUrl, {\n    method: 'GET',\n    headers: authHeaders(apiKey),\n  });\n  if (!response.ok) {\n    return null;\n  }\n\n  const contentType =\n    response.headers.get('content-type') || 'application/octet-stream';\n  if (\n    contentType.includes('text/') ||\n    contentType.includes('json') ||\n    contentType.includes('xml') ||\n    contentType.includes('svg')\n  ) {\n    const textBody = await response.text();\n    return {\n      path: pathname,\n      contentType,\n      textBody,\n    };\n  }\n\n  const binary = new Uint8Array(await response.arrayBuffer());\n  return {\n    path: pathname,\n    contentType,\n    binaryBody: binary,\n  };\n}\n\nasync function downloadSnapshotAssets(\n  source: SourceRef,\n  apiKey?: string\n): Promise<SnapshotAsset[]> {\n  if (!source.baseUrl) return [];\n\n  const assets: SnapshotAsset[] = [];\n  const sitemap = await fetchAsset(source.baseUrl, '/sitemap.xml', apiKey);\n  if (sitemap) {\n    assets.push(sitemap);\n  }\n\n  const locs = sitemap?.textBody ? parseSitemapLocations(sitemap.textBody) : [];\n  const routes = uniqueSorted([\n    '/',\n    ...locs.map((loc) => {\n      try {\n        return normalizePathForSnapshot(new URL(loc).pathname);\n      } catch {\n        return '/';\n      }\n    }),\n    '/robots.txt',\n    '/manifest.webmanifest',\n    '/favicon.svg',\n    '/agents.txt',\n    '/llms.txt',\n    '/.well-known/ai-plugin.json',\n  ]);\n\n  for (const route of routes) {\n    if (route === '/sitemap.xml' && sitemap) {\n      continue;\n    }\n    const asset = await fetchAsset(source.baseUrl, route, apiKey);\n    if (asset) {\n      assets.push(asset);\n    }\n  }\n\n  return assets;\n}\n\nfunction writeSnapshotAssets(\n  targetDir: string,\n  assets: SnapshotAsset[]\n): string[] {\n  const filesWritten: string[] = [];\n\n  for (const asset of assets) {\n    const relativeTarget = snapshotTargetPath(asset.path, asset.contentType);\n    const absoluteTarget = join(targetDir, relativeTarget);\n    mkdirSync(dirnameFor(absoluteTarget), { recursive: true });\n\n    if (typeof asset.textBody === 'string') {\n      writeFileSync(absoluteTarget, asset.textBody, 'utf8');\n    } else if (asset.binaryBody) {\n      writeFileSync(absoluteTarget, Buffer.from(asset.binaryBody));\n    } else {\n      continue;\n    }\n    filesWritten.push(relativeTarget);\n  }\n\n  return uniqueSorted(filesWritten);\n}\n\nfunction dirnameFor(pathname: string): string {\n  const index = pathname.lastIndexOf('/');\n  if (index <= 0) return pathname;\n  return pathname.slice(0, index);\n}\n\nexport async function cloneDeploymentToDirectory(\n  options: CloneOptions\n): Promise<CloneResult> {\n  const targetDir = resolve(options.targetDir);\n  ensureEmptyDirectory(targetDir);\n\n  const gatewayUrl = (options.gatewayUrl || DEFAULT_GATEWAY_URL).replace(\n    /\\/+$/,\n    ''\n  );\n  const source = await resolveSource(\n    options.source,\n    gatewayUrl,\n    options.apiKey\n  );\n\n  const filesWritten: string[] = [];\n  const downloadedPaths: string[] = [];\n\n  if (!options.envTemplateOnly) {\n    const scaffold = await scaffoldAeonFoundation({\n      targetDir,\n      preset: 'all',\n      quality: true,\n      install: false,\n      serve: false,\n    });\n    for (const absolutePath of scaffold.filesWritten) {\n      filesWritten.push(absolutePath);\n    }\n\n    const assets = await downloadSnapshotAssets(source, options.apiKey);\n    const writtenSnapshotPaths = writeSnapshotAssets(targetDir, assets);\n    downloadedPaths.push(...writtenSnapshotPaths);\n  } else {\n    writeFileSync(\n      join(targetDir, '.env.example'),\n      `EDGEWORK_API_KEY=ew_live_replace_me\\nEDGEWORK_GATEWAY_URL=${gatewayUrl}\\n`,\n      'utf8'\n    );\n    filesWritten.push(join(targetDir, '.env.example'));\n  }\n\n  const cloneManifestPath = join(targetDir, '.aeon', 'clone-manifest.json');\n  mkdirSync(dirnameFor(cloneManifestPath), { recursive: true });\n  writeFileSync(\n    cloneManifestPath,\n    JSON.stringify(\n      {\n        generatedAt: new Date().toISOString(),\n        source,\n        mode: options.mode || 'full',\n        downloadedPaths,\n      },\n      null,\n      2\n    ),\n    'utf8'\n  );\n  filesWritten.push(cloneManifestPath);\n\n  const installed = options.install ? installDependencies(targetDir) : false;\n  const served = options.serve ? await smokeServe(targetDir) : false;\n\n  if (options.install && !installed) {\n    throw new Error(`Dependency installation failed in ${targetDir}`);\n  }\n  if (options.serve && !served) {\n    throw new Error(`Serve smoke check failed in ${targetDir}`);\n  }\n\n  return {\n    targetDir,\n    source,\n    filesWritten: uniqueSorted(filesWritten),\n    installed,\n    served,\n    downloadedPaths: uniqueSorted(downloadedPaths),\n  };\n}\n","import { z } from 'zod';\nimport type { Tool } from '../agent/core/types';\nimport { ForgoLogsClient } from './forgo-logs-client';\n\n/**\n * MCP Tools for ForgoCD Deployment Engine\n */\nexport function createForgoMCPTools(\n  routerUrl = 'http://localhost:3334'\n): Tool[] {\n  return [\n    {\n      name: 'forgo_status',\n      description:\n        'Get the status of all processes running on the local ForgoCD engine',\n      inputSchema: z.object({}),\n      execute: async () => {\n        try {\n          const res = await fetch(`${routerUrl}/__forgo/status`);\n          if (!res.ok) {\n            throw new Error(`HTTP ${res.status}`);\n          }\n          const processes = await res.json();\n          return {\n            content: [\n              {\n                type: 'text',\n                text: JSON.stringify(processes, null, 2),\n              },\n            ],\n          };\n        } catch (err: any) {\n          throw new Error(\n            `Failed to connect to ForgoCD engine at ${routerUrl}: ${err.message}`\n          );\n        }\n      },\n    } as unknown as Tool,\n    {\n      name: 'forgo_stop',\n      description: 'Stop a running ForgoCD process by name',\n      inputSchema: z.object({\n        name: z.string().describe('The name of the process to stop'),\n      }),\n      execute: async (input: unknown) => {\n        const { name } = input as { name: string };\n        return {\n          content: [\n            {\n              type: 'text',\n              text: `To stop process \"${name}\", please use the CLI: bun run forge:stop ${name} or connect to the deploy engine.`,\n            },\n          ],\n        };\n      },\n    } as unknown as Tool,\n  ];\n}\n\n/**\n * MCP Tools for Forgo Logs Observability Platform\n */\nexport function createForgoLogsMCPTools(\n  logsUrl = 'http://localhost:8787',\n  orgId = 'default'\n): Tool[] {\n  const client = new ForgoLogsClient({ baseUrl: logsUrl, orgId });\n\n  return [\n    {\n      name: 'forgo_logs_query',\n      description:\n        'Search/filter logs by source, level, category, worker, trace, or text',\n      inputSchema: z.object({\n        source: z\n          .string()\n          .optional()\n          .describe('Log source: forgo-cd, workflow, worker, app, system'),\n        level: z\n          .string()\n          .optional()\n          .describe('Log level: debug, info, warn, error, fatal'),\n        category: z\n          .string()\n          .optional()\n          .describe('Category: deploy, health, request, build, cron, general'),\n        workerName: z.string().optional().describe('Worker name filter'),\n        search: z.string().optional().describe('Text search in message'),\n        limit: z.number().optional().describe('Max results (default 100)'),\n      }),\n      execute: async (input: unknown) => {\n        const query = input as any;\n        const result = await client.queryLogs(query);\n        return {\n          content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n        };\n      },\n    } as unknown as Tool,\n\n    {\n      name: 'forgo_logs_tail',\n      description: 'Get the latest N log entries (real-time tail)',\n      inputSchema: z.object({\n        count: z.number().optional().describe('Number of entries (default 50)'),\n      }),\n      execute: async (input: unknown) => {\n        const { count } = input as { count?: number };\n        const result = await client.tail(count ?? 50);\n        return {\n          content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n        };\n      },\n    } as unknown as Tool,\n\n    {\n      name: 'forgo_logs_trace',\n      description: 'Follow a distributed trace by trace ID',\n      inputSchema: z.object({\n        traceId: z.string().describe('The trace ID to follow'),\n      }),\n      execute: async (input: unknown) => {\n        const { traceId } = input as { traceId: string };\n        const result = await client.trace(traceId);\n        return {\n          content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n        };\n      },\n    } as unknown as Tool,\n\n    {\n      name: 'forgo_analytics_dashboard',\n      description: 'Get summary metrics for log analytics dashboard',\n      inputSchema: z.object({}),\n      execute: async () => {\n        const result = await client.dashboard();\n        return {\n          content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n        };\n      },\n    } as unknown as Tool,\n\n    {\n      name: 'forgo_analytics_rollups',\n      description: 'Query pre-aggregated rollups from R2 storage',\n      inputSchema: z.object({\n        granularity: z\n          .enum(['hourly', 'daily', 'weekly'])\n          .describe('Rollup granularity'),\n        metricName: z.string().optional().describe('Filter by metric name'),\n        since: z.number().optional().describe('Start timestamp (ms)'),\n        until: z.number().optional().describe('End timestamp (ms)'),\n      }),\n      execute: async (input: unknown) => {\n        const query = input as any;\n        const result = await client.rollups({ orgId, ...query });\n        return {\n          content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n        };\n      },\n    } as unknown as Tool,\n\n    {\n      name: 'forgo_analytics_export',\n      description: 'Export logs/events as JSON or CSV',\n      inputSchema: z.object({\n        format: z\n          .enum(['json', 'csv'])\n          .optional()\n          .describe('Export format (default json)'),\n        source: z.string().optional().describe('Log source filter'),\n        level: z.string().optional().describe('Log level filter'),\n        limit: z.number().optional().describe('Max entries'),\n      }),\n      execute: async (input: unknown) => {\n        const { format, ...query } = input as any;\n        const result = await client.exportLogs(query, format ?? 'json');\n        return {\n          content: [{ type: 'text', text: result }],\n        };\n      },\n    } as unknown as Tool,\n\n    {\n      name: 'forgo_archives_list',\n      description: 'List R2 log archive manifests',\n      inputSchema: z.object({\n        limit: z.number().optional().describe('Max archives (default 50)'),\n      }),\n      execute: async (input: unknown) => {\n        const { limit } = input as { limit?: number };\n        const result = await client.listArchives(limit ?? 50);\n        return {\n          content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n        };\n      },\n    } as unknown as Tool,\n\n    {\n      name: 'forgo_archives_search',\n      description: 'Search archived logs (decrypt + decompress)',\n      inputSchema: z.object({\n        query: z.string().describe('Search query text'),\n      }),\n      execute: async (input: unknown) => {\n        const { query } = input as { query: string };\n        const result = await client.searchArchives(query);\n        return {\n          content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n        };\n      },\n    } as unknown as Tool,\n\n    {\n      name: 'forgo_health',\n      description: 'Get pipeline health: buffer stats, archive status',\n      inputSchema: z.object({}),\n      execute: async () => {\n        const result = await client.health();\n        return {\n          content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n        };\n      },\n    } as unknown as Tool,\n\n    {\n      name: 'forgo_quota',\n      description: 'Get org quota usage and remaining capacity',\n      inputSchema: z.object({}),\n      execute: async () => {\n        const result = await client.quota();\n        return {\n          content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n        };\n      },\n    } as unknown as Tool,\n  ];\n}\n","import { writeFile } from 'node:fs/promises';\n\nconst DEFAULT_SMOKE_MAX_WAIT_MS = 120_000;\nconst DEFAULT_SMOKE_RETRY_INTERVAL_MS = 5_000;\nconst MCP_SESSION_HEADER = 'mcp-session-id';\n\ntype Awaitable<T> = T | Promise<T>;\n\ntype SmokeHeaders = HeadersInit | undefined;\n\nexport interface SmokeCleanup {\n  name: string;\n  run: () => Awaitable<void>;\n}\n\nexport interface SmokeStep {\n  name: string;\n  run: (context: SmokeContext) => Awaitable<void>;\n}\n\nexport interface SmokeStepResult {\n  name: string;\n  ok: boolean;\n  startedAt: string;\n  finishedAt: string;\n  durationMs: number;\n  error?: string;\n}\n\nexport interface SmokeLiveRouteResult {\n  path: string;\n  url: string;\n  attempts: number;\n  status: number;\n  durationMs: number;\n}\n\nexport interface SmokeResult {\n  suite: string;\n  baseUrl: string;\n  runId: string;\n  ok: boolean;\n  startedAt: string;\n  finishedAt: string;\n  durationMs: number;\n  liveRoute?: SmokeLiveRouteResult;\n  steps: SmokeStepResult[];\n  cleanup: {\n    attempted: number;\n    failed: number;\n    failures: string[];\n  };\n  metadata: Record<string, unknown>;\n  failedStep?: string;\n  failureMessage?: string;\n}\n\nexport interface WaitForLiveRouteOptions {\n  path: string;\n  init?: RequestInit;\n  timeoutMs?: number;\n  retryIntervalMs?: number;\n  validate?: (response: Response, bodyText: string) => boolean;\n}\n\nexport interface ProbeHtmlOptions {\n  headers?: SmokeHeaders;\n}\n\nexport interface ProbeJsonOptions {\n  headers?: SmokeHeaders;\n}\n\nexport interface ProbeExpectedStatusOptions {\n  headers?: SmokeHeaders;\n}\n\nexport interface ProbeWellKnownOptions {\n  headers?: SmokeHeaders;\n}\n\nexport interface SmokeSuite {\n  name: string;\n  baseUrl: string;\n  waitFor?: WaitForLiveRouteOptions;\n  steps: SmokeStep[];\n  reportPath?: string;\n  runId?: string;\n  maxWaitMs?: number;\n  retryIntervalMs?: number;\n}\n\nexport interface McpSession {\n  endpoint: string;\n  sessionId: string;\n  initializedAt: string;\n}\n\nexport interface McpCallResult<TResult = unknown> {\n  id: string | number | null;\n  sessionId: string;\n  result: TResult;\n}\n\nexport interface SmokeFetchJsonResult<T> {\n  response: Response;\n  text: string;\n  data: T;\n}\n\nexport interface SmokeContext {\n  baseUrl: string;\n  runId: string;\n  maxWaitMs: number;\n  retryIntervalMs: number;\n  metadata: Record<string, unknown>;\n  state: Map<string, unknown>;\n  onCleanup: (name: string, cleanup: () => Awaitable<void>) => void;\n  setMetadata: (key: string, value: unknown) => void;\n  assert: (condition: unknown, message: string) => asserts condition;\n  fail: (message: string) => never;\n  resolveUrl: (pathOrUrl: string) => string;\n  fetch: (pathOrUrl: string, init?: RequestInit) => Promise<Response>;\n  fetchText: (\n    pathOrUrl: string,\n    init?: RequestInit\n  ) => Promise<{ response: Response; text: string }>;\n  fetchJson: <T>(\n    pathOrUrl: string,\n    init?: RequestInit\n  ) => Promise<SmokeFetchJsonResult<T>>;\n  probeHtml: (\n    pathOrUrl: string,\n    options?: ProbeHtmlOptions\n  ) => Promise<{ response: Response; text: string }>;\n  probeJson: <T>(\n    pathOrUrl: string,\n    options?: ProbeJsonOptions\n  ) => Promise<SmokeFetchJsonResult<T>>;\n  probeExpectedStatus: (\n    pathOrUrl: string,\n    expectedStatus: number | number[],\n    options?: ProbeExpectedStatusOptions\n  ) => Promise<Response>;\n  probeWellKnown: <T>(\n    pathOrUrl: string,\n    options?: ProbeWellKnownOptions\n  ) => Promise<SmokeFetchJsonResult<T>>;\n  waitForLiveRoute: (\n    options: WaitForLiveRouteOptions\n  ) => Promise<SmokeLiveRouteResult>;\n  withRetry: <T>(\n    label: string,\n    run: () => Promise<T>,\n    options?: { timeoutMs?: number; retryIntervalMs?: number }\n  ) => Promise<T>;\n  mcpInitialize: <TResult = unknown>(\n    pathOrUrl?: string,\n    params?: Record<string, unknown>,\n    init?: RequestInit\n  ) => Promise<McpCallResult<TResult>>;\n  mcpListTools: <TResult = unknown>(\n    pathOrUrl?: string,\n    init?: RequestInit\n  ) => Promise<McpCallResult<TResult>>;\n  mcpListResources: <TResult = unknown>(\n    pathOrUrl?: string,\n    init?: RequestInit\n  ) => Promise<McpCallResult<TResult>>;\n  mcpCallTool: <TResult = unknown>(\n    name: string,\n    args?: Record<string, unknown>,\n    pathOrUrl?: string,\n    init?: RequestInit\n  ) => Promise<McpCallResult<TResult>>;\n  mcpReadResource: <TResult = unknown>(\n    uri: string,\n    pathOrUrl?: string,\n    init?: RequestInit\n  ) => Promise<McpCallResult<TResult>>;\n}\n\nfunction normalizeBaseUrl(rawBaseUrl: string): string {\n  return rawBaseUrl.replace(/\\/+$/, '');\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction normalizeRunId(value: string | undefined): string {\n  const trimmed = value?.trim();\n  return trimmed && trimmed.length > 0 ? trimmed : crypto.randomUUID();\n}\n\nfunction resolveMaxWaitMs(value: string | undefined): number {\n  const parsed = Number.parseInt(value ?? '', 10);\n  return Number.isFinite(parsed) && parsed > 0\n    ? parsed\n    : DEFAULT_SMOKE_MAX_WAIT_MS;\n}\n\nfunction resolveRetryIntervalMs(value: string | undefined): number {\n  const parsed = Number.parseInt(value ?? '', 10);\n  return Number.isFinite(parsed) && parsed > 0\n    ? parsed\n    : DEFAULT_SMOKE_RETRY_INTERVAL_MS;\n}\n\nfunction toErrorMessage(error: unknown): string {\n  if (error instanceof Error) {\n    return error.stack ?? error.message;\n  }\n  return String(error);\n}\n\nfunction mergeHeaders(\n  headers: SmokeHeaders,\n  extraHeaders?: SmokeHeaders\n): Headers {\n  const merged = new Headers(headers ?? {});\n  const additions = new Headers(extraHeaders ?? {});\n  additions.forEach((value, key) => {\n    merged.set(key, value);\n  });\n  return merged;\n}\n\nfunction parseJsonText<T>(text: string): T {\n  try {\n    return JSON.parse(text) as T;\n  } catch (error) {\n    throw new Error(\n      `Expected JSON response but received invalid JSON: ${toErrorMessage(\n        error\n      )}`\n    );\n  }\n}\n\nfunction detectLegacyWorkersRedirect(content: string): boolean {\n  const jsLocationRedirect =\n    /window\\.location(?:\\.(?:href|assign|replace))?[\\s=('\"`]*https?:\\/\\/[a-z0-9.-]+\\.workers\\.dev/i;\n  const metaRefreshRedirect =\n    /<meta[^>]+http-equiv=[\"']refresh[\"'][^>]+url=https?:\\/\\/[^\\s\"'<>]+\\.workers\\.dev/i;\n  return jsLocationRedirect.test(content) || metaRefreshRedirect.test(content);\n}\n\nasync function readResponseText(response: Response): Promise<string> {\n  return response.text();\n}\n\nasync function readJsonResponse<T>(\n  pathOrUrl: string,\n  fetcher: (pathOrUrl: string, init?: RequestInit) => Promise<Response>,\n  init?: RequestInit\n): Promise<SmokeFetchJsonResult<T>> {\n  const response = await fetcher(pathOrUrl, init);\n  const text = await readResponseText(response);\n  if (!response.ok) {\n    throw new Error(\n      `${pathOrUrl} returned ${response.status}: ${text || response.statusText}`\n    );\n  }\n  return {\n    response,\n    text,\n    data: parseJsonText<T>(text),\n  };\n}\n\nexport function resolveSmokeBaseUrl(\n  defaultBaseUrl: string,\n  specificEnvVar?: string\n): string {\n  const specificValue =\n    specificEnvVar !== undefined ? process.env[specificEnvVar]?.trim() : '';\n  if (specificValue) {\n    return normalizeBaseUrl(specificValue);\n  }\n  const sharedValue = process.env.SMOKE_BASE_URL?.trim();\n  if (sharedValue) {\n    return normalizeBaseUrl(sharedValue);\n  }\n  return normalizeBaseUrl(defaultBaseUrl);\n}\n\nexport function resolveSmokeSuiteOptions(\n  baseUrl: string,\n  options?: Pick<\n    SmokeSuite,\n    'runId' | 'maxWaitMs' | 'retryIntervalMs' | 'reportPath'\n  >\n): {\n  baseUrl: string;\n  runId: string;\n  maxWaitMs: number;\n  retryIntervalMs: number;\n  reportPath?: string;\n} {\n  return {\n    baseUrl: normalizeBaseUrl(baseUrl),\n    runId: normalizeRunId(options?.runId ?? process.env.SMOKE_RUN_ID),\n    maxWaitMs:\n      options?.maxWaitMs ?? resolveMaxWaitMs(process.env.SMOKE_MAX_WAIT_MS),\n    retryIntervalMs:\n      options?.retryIntervalMs ??\n      resolveRetryIntervalMs(process.env.SMOKE_RETRY_INTERVAL_MS),\n    reportPath:\n      options?.reportPath ??\n      (process.env.SMOKE_REPORT_PATH?.trim() || undefined),\n  };\n}\n\nexport async function withRetry<T>(\n  label: string,\n  run: () => Promise<T>,\n  options?: { timeoutMs?: number; retryIntervalMs?: number }\n): Promise<T> {\n  const timeoutMs = options?.timeoutMs ?? DEFAULT_SMOKE_MAX_WAIT_MS;\n  const retryIntervalMs =\n    options?.retryIntervalMs ?? DEFAULT_SMOKE_RETRY_INTERVAL_MS;\n  const startedAt = Date.now();\n  let lastError: unknown;\n\n  while (Date.now() - startedAt <= timeoutMs) {\n    try {\n      return await run();\n    } catch (error) {\n      lastError = error;\n      if (Date.now() - startedAt > timeoutMs) {\n        break;\n      }\n      await new Promise((resolvePromise) => {\n        setTimeout(resolvePromise, retryIntervalMs);\n      });\n    }\n  }\n\n  throw new Error(\n    `${label} did not succeed within ${timeoutMs}ms: ${toErrorMessage(\n      lastError\n    )}`\n  );\n}\n\nexport async function runSmokeSuite(suite: SmokeSuite): Promise<SmokeResult> {\n  const resolved = resolveSmokeSuiteOptions(suite.baseUrl, {\n    runId: suite.runId,\n    maxWaitMs: suite.maxWaitMs,\n    retryIntervalMs: suite.retryIntervalMs,\n    reportPath: suite.reportPath,\n  });\n  const cleanups: SmokeCleanup[] = [];\n  const metadata: Record<string, unknown> = {};\n  const state = new Map<string, unknown>();\n  const mcpSessions = new Map<string, McpSession>();\n  let liveRouteResult: SmokeLiveRouteResult | undefined;\n  const startedAt = Date.now();\n  const stepResults: SmokeStepResult[] = [];\n  let failedStep: string | undefined;\n  let failureMessage: string | undefined;\n\n  const context: SmokeContext = {\n    baseUrl: resolved.baseUrl,\n    runId: resolved.runId,\n    maxWaitMs: resolved.maxWaitMs,\n    retryIntervalMs: resolved.retryIntervalMs,\n    metadata,\n    state,\n    onCleanup: (name, cleanup) => {\n      cleanups.push({ name, run: cleanup });\n    },\n    setMetadata: (key, value) => {\n      metadata[key] = value;\n    },\n    assert: (condition, message): asserts condition => {\n      if (!condition) {\n        throw new Error(message);\n      }\n    },\n    fail: (message): never => {\n      throw new Error(message);\n    },\n    resolveUrl: (pathOrUrl): string => {\n      if (/^https?:\\/\\//i.test(pathOrUrl)) {\n        return pathOrUrl;\n      }\n      const normalizedPath = pathOrUrl.startsWith('/')\n        ? pathOrUrl\n        : `/${pathOrUrl}`;\n      return `${resolved.baseUrl}${normalizedPath}`;\n    },\n    fetch: async (pathOrUrl, init) => {\n      return fetch(context.resolveUrl(pathOrUrl), init);\n    },\n    fetchText: async (pathOrUrl, init) => {\n      const response = await context.fetch(pathOrUrl, init);\n      const text = await readResponseText(response);\n      return { response, text };\n    },\n    fetchJson: async <T>(pathOrUrl: string, init?: RequestInit) => {\n      return readJsonResponse<T>(pathOrUrl, context.fetch, init);\n    },\n    probeHtml: async (pathOrUrl, options) => {\n      const { response, text } = await context.fetchText(pathOrUrl, {\n        method: 'GET',\n        headers: options?.headers,\n      });\n      if (!response.ok) {\n        throw new Error(\n          `${pathOrUrl} returned ${response.status}: ${\n            text || response.statusText\n          }`\n        );\n      }\n      const contentType = response.headers.get('content-type') ?? '';\n      if (!/text\\/html|application\\/xhtml\\+xml/i.test(contentType)) {\n        throw new Error(\n          `${pathOrUrl} did not return HTML (content-type: ${\n            contentType || 'unknown'\n          })`\n        );\n      }\n      if (detectLegacyWorkersRedirect(text)) {\n        throw new Error(`${pathOrUrl} leaked a legacy workers.dev redirect`);\n      }\n      return { response, text };\n    },\n    probeJson: async <T>(pathOrUrl: string, options?: ProbeJsonOptions) => {\n      return readJsonResponse<T>(pathOrUrl, context.fetch, {\n        method: 'GET',\n        headers: options?.headers,\n      });\n    },\n    probeExpectedStatus: async (pathOrUrl, expectedStatus, options) => {\n      const response = await context.fetch(pathOrUrl, {\n        method: 'GET',\n        headers: options?.headers,\n      });\n      const accepted = Array.isArray(expectedStatus)\n        ? expectedStatus\n        : [expectedStatus];\n      if (!accepted.includes(response.status)) {\n        const text = await response.text();\n        throw new Error(\n          `${pathOrUrl} returned ${response.status}; expected ${accepted.join(\n            ', '\n          )}: ${text || response.statusText}`\n        );\n      }\n      return response;\n    },\n    probeWellKnown: async <T>(\n      pathOrUrl: string,\n      options?: ProbeWellKnownOptions\n    ) => {\n      return readJsonResponse<T>(pathOrUrl, context.fetch, {\n        method: 'GET',\n        headers: options?.headers,\n      });\n    },\n    waitForLiveRoute: async (\n      options: WaitForLiveRouteOptions\n    ): Promise<SmokeLiveRouteResult> => {\n      const targetUrl = context.resolveUrl(options.path);\n      const started = Date.now();\n      let attempts = 0;\n      let finalStatus = 0;\n      await withRetry(\n        `wait for ${targetUrl}`,\n        async () => {\n          attempts += 1;\n          const response = await context.fetch(targetUrl, options.init);\n          const text = await response.text();\n          finalStatus = response.status;\n          const isValid = options.validate\n            ? options.validate(response, text)\n            : response.ok;\n          if (!isValid) {\n            throw new Error(\n              `${targetUrl} returned ${response.status}: ${\n                text || response.statusText\n              }`\n            );\n          }\n          return undefined;\n        },\n        {\n          timeoutMs: options.timeoutMs ?? resolved.maxWaitMs,\n          retryIntervalMs: options.retryIntervalMs ?? resolved.retryIntervalMs,\n        }\n      );\n      return {\n        path: options.path,\n        url: targetUrl,\n        attempts,\n        status: finalStatus,\n        durationMs: Date.now() - started,\n      };\n    },\n    withRetry: async <T>(\n      label: string,\n      run: () => Promise<T>,\n      options?: { timeoutMs?: number; retryIntervalMs?: number }\n    ): Promise<T> => {\n      return withRetry(label, run, {\n        timeoutMs: options?.timeoutMs ?? resolved.maxWaitMs,\n        retryIntervalMs: options?.retryIntervalMs ?? resolved.retryIntervalMs,\n      });\n    },\n    mcpInitialize: async <TResult = unknown>(\n      pathOrUrl = '/mcp',\n      params?: Record<string, unknown>,\n      init?: RequestInit\n    ): Promise<McpCallResult<TResult>> => {\n      return requestMcp<TResult>(\n        context,\n        mcpSessions,\n        pathOrUrl,\n        'initialize',\n        params,\n        init\n      );\n    },\n    mcpListTools: async <TResult = unknown>(\n      pathOrUrl = '/mcp',\n      init?: RequestInit\n    ): Promise<McpCallResult<TResult>> => {\n      return requestMcp<TResult>(\n        context,\n        mcpSessions,\n        pathOrUrl,\n        'tools/list',\n        undefined,\n        init\n      );\n    },\n    mcpListResources: async <TResult = unknown>(\n      pathOrUrl = '/mcp',\n      init?: RequestInit\n    ): Promise<McpCallResult<TResult>> => {\n      return requestMcp<TResult>(\n        context,\n        mcpSessions,\n        pathOrUrl,\n        'resources/list',\n        undefined,\n        init\n      );\n    },\n    mcpCallTool: async <TResult = unknown>(\n      name: string,\n      args?: Record<string, unknown>,\n      pathOrUrl = '/mcp',\n      init?: RequestInit\n    ): Promise<McpCallResult<TResult>> => {\n      return requestMcp<TResult>(\n        context,\n        mcpSessions,\n        pathOrUrl,\n        'tools/call',\n        {\n          name,\n          arguments: args ?? {},\n        },\n        init\n      );\n    },\n    mcpReadResource: async <TResult = unknown>(\n      uri: string,\n      pathOrUrl = '/mcp',\n      init?: RequestInit\n    ): Promise<McpCallResult<TResult>> => {\n      return requestMcp<TResult>(\n        context,\n        mcpSessions,\n        pathOrUrl,\n        'resources/read',\n        { uri },\n        init\n      );\n    },\n  };\n\n  if (suite.waitFor) {\n    try {\n      liveRouteResult = await context.waitForLiveRoute(suite.waitFor);\n    } catch (error) {\n      failedStep = 'waitForLiveRoute';\n      failureMessage = toErrorMessage(error);\n    }\n  }\n\n  if (!failureMessage) {\n    for (const step of suite.steps) {\n      const stepStarted = Date.now();\n      const startedIso = new Date(stepStarted).toISOString();\n      try {\n        await step.run(context);\n        stepResults.push({\n          name: step.name,\n          ok: true,\n          startedAt: startedIso,\n          finishedAt: new Date().toISOString(),\n          durationMs: Date.now() - stepStarted,\n        });\n      } catch (error) {\n        failedStep = step.name;\n        failureMessage = toErrorMessage(error);\n        stepResults.push({\n          name: step.name,\n          ok: false,\n          startedAt: startedIso,\n          finishedAt: new Date().toISOString(),\n          durationMs: Date.now() - stepStarted,\n          error: failureMessage,\n        });\n        break;\n      }\n    }\n  }\n\n  const cleanupFailures: string[] = [];\n  for (const cleanup of [...cleanups].reverse()) {\n    try {\n      await cleanup.run();\n    } catch (error) {\n      cleanupFailures.push(`${cleanup.name}: ${toErrorMessage(error)}`);\n    }\n  }\n\n  const finishedAt = Date.now();\n  const result: SmokeResult = {\n    suite: suite.name,\n    baseUrl: resolved.baseUrl,\n    runId: resolved.runId,\n    ok:\n      failureMessage === undefined &&\n      cleanupFailures.length === 0 &&\n      stepResults.every((step) => step.ok),\n    startedAt: new Date(startedAt).toISOString(),\n    finishedAt: new Date(finishedAt).toISOString(),\n    durationMs: finishedAt - startedAt,\n    ...(liveRouteResult ? { liveRoute: liveRouteResult } : {}),\n    steps: stepResults,\n    cleanup: {\n      attempted: cleanups.length,\n      failed: cleanupFailures.length,\n      failures: cleanupFailures,\n    },\n    metadata,\n    ...(failedStep ? { failedStep } : {}),\n    ...(failureMessage ? { failureMessage } : {}),\n  };\n\n  if (resolved.reportPath) {\n    await writeFile(\n      resolved.reportPath,\n      JSON.stringify(result, null, 2),\n      'utf8'\n    );\n  }\n\n  return result;\n}\n\nexport async function assertPreferencesRoundTrip(\n  context: SmokeContext,\n  options: {\n    path?: string;\n    headers?: SmokeHeaders;\n    update: Record<string, unknown>;\n    verify?: (preferences: Record<string, unknown>) => boolean;\n  }\n): Promise<Record<string, unknown>> {\n  const path = options.path ?? '/api/preferences';\n  const initial = await context.fetchJson<{\n    preferences: Record<string, unknown>;\n  }>(path, {\n    method: 'GET',\n    headers: options.headers,\n  });\n  context.assert(\n    isRecord(initial.data.preferences),\n    `${path} did not return preferences`\n  );\n\n  const updated = await context.fetchJson<{\n    preferences: Record<string, unknown>;\n  }>(path, {\n    method: 'PUT',\n    headers: mergeHeaders(options.headers, {\n      'content-type': 'application/json',\n    }),\n    body: JSON.stringify(options.update),\n  });\n  context.assert(\n    isRecord(updated.data.preferences),\n    `${path} did not return updated preferences`\n  );\n\n  if (options.verify) {\n    context.assert(\n      options.verify(updated.data.preferences),\n      `${path} did not persist the expected preference update`\n    );\n  }\n\n  const reread = await context.fetchJson<{\n    preferences: Record<string, unknown>;\n  }>(path, {\n    method: 'GET',\n    headers: options.headers,\n  });\n  context.assert(\n    isRecord(reread.data.preferences),\n    `${path} did not return readable preferences after update`\n  );\n  if (options.verify) {\n    context.assert(\n      options.verify(reread.data.preferences),\n      `${path} did not preserve the preference update on reread`\n    );\n  }\n\n  return reread.data.preferences;\n}\n\nexport async function assertFlagsReadable(\n  context: SmokeContext,\n  options?: {\n    path?: string;\n    headers?: SmokeHeaders;\n    minimumFlags?: number;\n  }\n): Promise<Record<string, unknown>> {\n  const path = options?.path ?? '/api/flags';\n  const minimumFlags = options?.minimumFlags ?? 1;\n  const response = await context.fetchJson<Record<string, unknown>>(path, {\n    method: 'GET',\n    headers: options?.headers,\n  });\n  const flags = response.data.flags;\n  context.assert(Array.isArray(flags), `${path} did not return a flags array`);\n  context.assert(\n    flags.length >= minimumFlags,\n    `${path} returned fewer than ${minimumFlags} flags`\n  );\n  return response.data;\n}\n\nasync function requestMcp<TResult>(\n  context: SmokeContext,\n  sessions: Map<string, McpSession>,\n  pathOrUrl: string,\n  method: string,\n  params?: Record<string, unknown>,\n  init?: RequestInit\n): Promise<McpCallResult<TResult>> {\n  const endpoint = context.resolveUrl(pathOrUrl);\n  const existingSession = sessions.get(endpoint);\n  const headers = mergeHeaders(init?.headers, {\n    'content-type': 'application/json',\n  });\n  if (existingSession) {\n    headers.set(MCP_SESSION_HEADER, existingSession.sessionId);\n  }\n\n  const response = await context.fetch(endpoint, {\n    ...init,\n    method: 'POST',\n    headers,\n    body: JSON.stringify({\n      jsonrpc: '2.0',\n      id: `${method}:${crypto.randomUUID()}`,\n      method,\n      ...(params ? { params } : {}),\n    }),\n  });\n\n  const text = await response.text();\n  if (!response.ok) {\n    throw new Error(\n      `MCP ${method} on ${endpoint} returned ${response.status}: ${\n        text || response.statusText\n      }`\n    );\n  }\n\n  const payload = parseJsonText<Record<string, unknown>>(text);\n  const error = payload.error;\n  if (isRecord(error)) {\n    const message =\n      typeof error.message === 'string' ? error.message : JSON.stringify(error);\n    throw new Error(`MCP ${method} on ${endpoint} failed: ${message}`);\n  }\n\n  const sessionId = response.headers.get(MCP_SESSION_HEADER);\n  if (!existingSession) {\n    if (!sessionId) {\n      throw new Error(\n        `MCP ${method} on ${endpoint} did not return ${MCP_SESSION_HEADER}`\n      );\n    }\n    sessions.set(endpoint, {\n      endpoint,\n      sessionId,\n      initializedAt: new Date().toISOString(),\n    });\n  } else if (sessionId && sessionId !== existingSession.sessionId) {\n    sessions.set(endpoint, {\n      endpoint,\n      sessionId,\n      initializedAt: existingSession.initializedAt,\n    });\n  }\n\n  const activeSession = sessions.get(endpoint);\n  if (!activeSession) {\n    throw new Error(`MCP ${method} on ${endpoint} has no active session`);\n  }\n\n  return {\n    id:\n      typeof payload.id === 'string' || typeof payload.id === 'number'\n        ? payload.id\n        : null,\n    sessionId: activeSession.sessionId,\n    result: payload.result as TResult,\n  };\n}\n","/**\n * Aeon Deploy — Dead simple deployment for Aeon Flux apps\n *\n * Usage:\n *   import { deploy, getStatus, stop, start } from '@affectively/edgework-sdk/deploy';\n *   const result = await deploy({ appDir: './my-site', name: 'halos-agency', ... });\n */\n\nimport type {\n  AeonConfig,\n  CloneOptions,\n  CloneResult,\n  DeployConfig,\n  DeployResult,\n  DeploymentStatus,\n  DeploymentMetrics,\n  DeploymentLog,\n  DeploymentListItem,\n  CnameRegistration,\n  SeedConfig,\n  AeonContainerRepoSeedConfig,\n  AeonContainerRepoSeedFile,\n  AeonContainerRepoSeedResult,\n  AeonContainerSnapshotConfig,\n  AeonContainerSnapshotResult,\n  ProcessStreamRequest,\n  ProcessOpenAIChatRequest,\n  ProcessAnthropicMessageRequest,\n  ProcessRequestOptions,\n  ProcessStreamEvent,\n  QualityPolicy,\n  SiteSmokeTestOptions,\n  SiteSmokeTestResult,\n  ScaffoldOptions,\n  ScaffoldResult,\n  SourceRef,\n  QualityIssue,\n  QualityIssueCode,\n  QualityIssueSeverity,\n  QualityPathSpec,\n  QualityPathStatus,\n  QualityPathSmokeResult,\n  QualityTarget,\n  QualityTargetSource,\n  QualityTargetReport,\n  QualitySmokeOptions,\n  QualityAutopilotOptions,\n  QualityAutopilotResolvedOptions,\n  QualityAutopilotReport,\n  GatewayQualityTarget,\n  SitePathSmokeTestOptions,\n  SitePathSmokeTestResult,\n  SmokeCleanup,\n  SmokeContext,\n  SmokeFetchJsonResult,\n  SmokeLiveRouteResult,\n  SmokeResult,\n  SmokeStep,\n  SmokeStepResult,\n  SmokeSuite,\n  McpCallResult,\n  McpSession,\n  WaitForLiveRouteOptions,\n} from './types';\nimport {\n  createEdgeworkAuthHeader,\n  resolveEdgeworkApiKey,\n} from '../edgework-api-key';\nimport { scaffoldAeonFoundation, scaffoldMcpServer } from './scaffold';\nimport { cloneDeploymentToDirectory } from './clone';\nimport {\n  detectFeatureKey,\n  loadAeonConfigFromFile,\n  resolveAeonConfig,\n  serializeAeonToml,\n} from './aeon-config';\nexport {\n  formatQualityAutopilotReport,\n  getDefaultQualityPathSpecs,\n  runQualityAutopilot,\n} from './quality';\nexport { createForgoMCPTools } from './mcp';\nexport {\n  assertFlagsReadable,\n  assertPreferencesRoundTrip,\n  resolveSmokeBaseUrl,\n  resolveSmokeSuiteOptions,\n  runSmokeSuite,\n  withRetry,\n} from './smoke';\n\nexport type {\n  AeonConfig,\n  CloneOptions,\n  CloneResult,\n  DeployConfig,\n  DeployResult,\n  DeploymentStatus,\n  DeploymentMetrics,\n  DeploymentLog,\n  DeploymentListItem,\n  CnameRegistration,\n  SeedConfig,\n  AeonContainerRepoSeedConfig,\n  AeonContainerRepoSeedFile,\n  AeonContainerRepoSeedResult,\n  AeonContainerSnapshotConfig,\n  AeonContainerSnapshotResult,\n  ProcessStreamRequest,\n  ProcessOpenAIChatRequest,\n  ProcessAnthropicMessageRequest,\n  ProcessRequestOptions,\n  ProcessStreamEvent,\n  QualityPolicy,\n  SiteSmokeTestOptions,\n  SiteSmokeTestResult,\n  ScaffoldOptions,\n  ScaffoldResult,\n  SourceRef,\n  QualityIssue,\n  QualityIssueCode,\n  QualityIssueSeverity,\n  QualityPathSpec,\n  QualityPathStatus,\n  QualityPathSmokeResult,\n  QualityTarget,\n  QualityTargetSource,\n  QualityTargetReport,\n  QualitySmokeOptions,\n  QualityAutopilotOptions,\n  QualityAutopilotResolvedOptions,\n  QualityAutopilotReport,\n  GatewayQualityTarget,\n  SitePathSmokeTestOptions,\n  SitePathSmokeTestResult,\n  SmokeCleanup,\n  SmokeContext,\n  SmokeFetchJsonResult,\n  SmokeLiveRouteResult,\n  SmokeResult,\n  SmokeStep,\n  SmokeStepResult,\n  SmokeSuite,\n  McpCallResult,\n  McpSession,\n  WaitForLiveRouteOptions,\n};\n\nexport {\n  cloneDeploymentToDirectory,\n  detectFeatureKey,\n  loadAeonConfigFromFile,\n  resolveAeonConfig,\n  scaffoldAeonFoundation,\n  scaffoldMcpServer,\n  serializeAeonToml,\n};\n\n/** Default gateway URL */\nconst DEFAULT_GATEWAY = 'https://api.edgework.ai';\n\nfunction authHeaders(apiKey?: string): Record<string, string> {\n  const headers: Record<string, string> = {\n    'Content-Type': 'application/json',\n    ...createEdgeworkAuthHeader(apiKey),\n  };\n  return headers;\n}\n\nfunction resolveContainerApiBase(endpointBaseUrl: string): string {\n  const trimmed = endpointBaseUrl.replace(/\\/+$/, '');\n  if (\n    trimmed.endsWith('/api/container') ||\n    trimmed.endsWith('/v1/aeon-container')\n  ) {\n    return trimmed;\n  }\n\n  if (/^https?:\\/\\/[^/]+$/i.test(trimmed)) {\n    try {\n      const parsed = new URL(trimmed);\n      if (\n        parsed.hostname.endsWith('halo.place') ||\n        parsed.hostname.endsWith('aeonflux.dev')\n      ) {\n        return `${trimmed}/api/container`;\n      }\n    } catch {\n      // Fall through to default container route shape.\n    }\n    return `${trimmed}/v1/aeon-container`;\n  }\n\n  return trimmed;\n}\n\nfunction containerAuthHeaders(\n  apiKey?: string,\n  ucanToken?: string\n): Record<string, string> {\n  const headers: Record<string, string> = {\n    'Content-Type': 'application/json',\n    ...createEdgeworkAuthHeader(resolveEdgeworkApiKey(apiKey)),\n  };\n  if (ucanToken) {\n    headers.Authorization = `Bearer ${ucanToken}`;\n  }\n  return headers;\n}\n\nasync function containerApiRequest<T>(\n  endpointBaseUrl: string,\n  path: string,\n  options: RequestInit & { apiKey?: string; ucanToken?: string }\n): Promise<T> {\n  const { apiKey, ucanToken, ...fetchOptions } = options;\n  const base = resolveContainerApiBase(endpointBaseUrl);\n  const response = await fetch(`${base}${path}`, {\n    ...fetchOptions,\n    headers: {\n      ...containerAuthHeaders(apiKey, ucanToken),\n      ...(fetchOptions.headers || {}),\n    },\n  });\n\n  if (!response.ok) {\n    const body = await response.text();\n    throw new Error(\n      `Container API error (${response.status}): ${body || response.statusText}`\n    );\n  }\n\n  return response.json() as Promise<T>;\n}\n\nfunction detectRepoSeedLanguage(path: string): string | undefined {\n  const extension = path.split('.').pop()?.toLowerCase();\n  switch (extension) {\n    case 'ts':\n    case 'tsx':\n      return 'typescript';\n    case 'js':\n    case 'jsx':\n      return 'javascript';\n    case 'go':\n      return 'go';\n    case 'py':\n      return 'python';\n    case 'rs':\n      return 'rust';\n    case 'lua':\n      return 'lua';\n    case 'md':\n      return 'markdown';\n    case 'json':\n      return 'json';\n    default:\n      return undefined;\n  }\n}\n\nasync function loadRepoSeedFilesFromDir(\n  fromDir: string\n): Promise<AeonContainerRepoSeedFile[]> {\n  const { existsSync, readdirSync, readFileSync, statSync } = await import(\n    'fs'\n  );\n  const { join, relative } = await import('path');\n\n  if (!existsSync(fromDir)) {\n    throw new Error(`Seed directory not found: ${fromDir}`);\n  }\n\n  const files: AeonContainerRepoSeedFile[] = [];\n  const stack: string[] = [fromDir];\n\n  while (stack.length > 0) {\n    const currentDir = stack.pop();\n    if (!currentDir) continue;\n    const entries = readdirSync(currentDir, { withFileTypes: true });\n\n    for (const entry of entries) {\n      if (entry.name.startsWith('.git')) continue;\n      const absolutePath = join(currentDir, entry.name);\n      if (entry.isDirectory()) {\n        stack.push(absolutePath);\n        continue;\n      }\n      if (!entry.isFile()) continue;\n\n      const relativePath = `/${relative(fromDir, absolutePath).replace(\n        /\\\\/g,\n        '/'\n      )}`;\n      const content = readFileSync(absolutePath, 'utf-8');\n      const size = statSync(absolutePath).size;\n      if (size > 512_000) {\n        // Avoid oversized payloads for single-file ingest requests.\n        continue;\n      }\n\n      files.push({\n        path: relativePath,\n        content,\n        language: detectRepoSeedLanguage(relativePath),\n      });\n    }\n  }\n\n  return files;\n}\n\nasync function apiRequest<T>(\n  url: string,\n  options: RequestInit & { apiKey?: string }\n): Promise<T> {\n  const { apiKey, ...fetchOpts } = options;\n  const resolvedApiKey = resolveEdgeworkApiKey(apiKey);\n  const response = await fetch(url, {\n    ...fetchOpts,\n    headers: {\n      ...authHeaders(resolvedApiKey),\n      ...(fetchOpts.headers || {}),\n    },\n  });\n\n  if (!response.ok) {\n    const body = await response.text();\n    let message: string;\n    try {\n      const json = JSON.parse(body);\n      message = json.error || json.message || body;\n    } catch {\n      message = body;\n    }\n    throw new Error(`Deploy API error (${response.status}): ${message}`);\n  }\n\n  return response.json() as Promise<T>;\n}\n\nfunction resolveProcessBaseUrl(\n  process: string,\n  options?: ProcessRequestOptions\n): string {\n  if (options?.processUrl) {\n    return options.processUrl.replace(/\\/+$/, '');\n  }\n  if (/^https?:\\/\\//i.test(process)) {\n    return process.replace(/\\/+$/, '');\n  }\n  if (process.includes('.')) {\n    return `https://${process}`.replace(/\\/+$/, '');\n  }\n  return `https://${process}.edgework.ai`;\n}\n\nfunction processAuthHeaders(apiKey?: string): Record<string, string> {\n  return {\n    'Content-Type': 'application/json',\n    Accept: 'text/event-stream',\n    ...createEdgeworkAuthHeader(resolveEdgeworkApiKey(apiKey)),\n  };\n}\n\nasync function processRequest(\n  process: string,\n  path: string,\n  init: RequestInit,\n  options?: ProcessRequestOptions\n): Promise<Response> {\n  const baseUrl = resolveProcessBaseUrl(process, options);\n  const response = await fetch(`${baseUrl}${path}`, {\n    ...init,\n    signal: options?.signal,\n    headers: {\n      ...processAuthHeaders(options?.apiKey),\n      ...(init.headers || {}),\n    },\n  });\n\n  if (!response.ok) {\n    const body = await response.text();\n    throw new Error(\n      `Process request failed (${response.status}): ${\n        body || response.statusText\n      }`\n    );\n  }\n  return response;\n}\n\nasync function* parseSseStream(\n  stream: ReadableStream<Uint8Array>\n): AsyncGenerator<ProcessStreamEvent> {\n  const reader = stream.getReader();\n  const decoder = new TextDecoder();\n  let buffer = '';\n  let event = 'message';\n  let dataLines: string[] = [];\n\n  const flush = (): ProcessStreamEvent | null => {\n    if (dataLines.length === 0) {\n      event = 'message';\n      return null;\n    }\n\n    const data = dataLines.join('\\n');\n    const parsedEvent: ProcessStreamEvent = { event, data };\n    if (data !== '[DONE]') {\n      try {\n        parsedEvent.json = JSON.parse(data) as unknown;\n      } catch {\n        // Non-JSON SSE payloads are still valid.\n      }\n    }\n\n    event = 'message';\n    dataLines = [];\n    return parsedEvent;\n  };\n\n  while (true) {\n    const { done, value } = await reader.read();\n    if (done) break;\n    buffer += decoder.decode(value, { stream: true });\n\n    let lineBreakIndex = buffer.indexOf('\\n');\n    while (lineBreakIndex >= 0) {\n      const rawLine = buffer.slice(0, lineBreakIndex);\n      buffer = buffer.slice(lineBreakIndex + 1);\n      const line = rawLine.endsWith('\\r') ? rawLine.slice(0, -1) : rawLine;\n\n      if (line === '') {\n        const evt = flush();\n        if (evt) {\n          yield evt;\n        }\n      } else if (line.startsWith('event:')) {\n        event = line.slice(6).trim() || 'message';\n      } else if (line.startsWith('data:')) {\n        dataLines.push(line.slice(5).trimStart());\n      }\n\n      lineBreakIndex = buffer.indexOf('\\n');\n    }\n  }\n\n  if (buffer.length > 0) {\n    const line = buffer.endsWith('\\r') ? buffer.slice(0, -1) : buffer;\n    if (line.startsWith('data:')) {\n      dataLines.push(line.slice(5).trimStart());\n    }\n  }\n\n  const tailEvent = flush();\n  if (tailEvent) {\n    yield tailEvent;\n  }\n}\n\n/**\n * Build an Aeon Flux app directory into deployment artifacts.\n * Returns the manifest and encoded filesystem.\n */\nasync function buildApp(\n  appDir: string,\n  appName: string,\n  skipBuild?: boolean\n): Promise<{\n  manifest: Record<string, unknown>;\n  files: Record<string, string>;\n  sourceBundle: Record<string, unknown>;\n}> {\n  const { existsSync, readFileSync, readdirSync, statSync } = await import(\n    'fs'\n  );\n  const { createHash } = await import('crypto');\n  const { join, relative } = await import('path');\n\n  // Run build if not skipping\n  if (!skipBuild) {\n    const { execSync } = await import('child_process');\n    try {\n      execSync('bun run build', { cwd: appDir, stdio: 'pipe' });\n    } catch {\n      // Try aeon build as fallback\n      try {\n        execSync('npx aeon build', { cwd: appDir, stdio: 'pipe' });\n      } catch {\n        // Build may not be needed for static sites\n        console.warn('[deploy] Build step skipped — no build script found');\n      }\n    }\n  }\n\n  // Look for manifest\n  const manifestPath = join(appDir, 'manifest.json');\n  let manifest: Record<string, unknown> = {};\n  if (existsSync(manifestPath)) {\n    manifest = JSON.parse(readFileSync(manifestPath, 'utf-8'));\n  }\n\n  // Collect files from dist/ or the app dir itself\n  const distDir = existsSync(join(appDir, 'dist'))\n    ? join(appDir, 'dist')\n    : appDir;\n\n  const files: Record<string, string> = {};\n\n  function collectFiles(dir: string): void {\n    const entries = readdirSync(dir);\n    for (const entry of entries) {\n      const fullPath = join(dir, entry);\n      const stat = statSync(fullPath);\n      if (stat.isDirectory()) {\n        // Skip node_modules, .git, etc\n        if (entry === 'node_modules' || entry === '.git' || entry === '.next') {\n          continue;\n        }\n        collectFiles(fullPath);\n      } else if (stat.isFile()) {\n        const relPath = '/' + relative(distDir, fullPath);\n        const content = readFileSync(fullPath);\n        files[relPath] = content.toString('base64');\n      }\n    }\n  }\n\n  collectFiles(distDir);\n\n  if (files['/remoteEntry.js'] && !files['/aeon-remote.json']) {\n    const remoteDef = {\n      id: `remote.pid.${appName.replace(/[^a-z0-9-]/g, '')}`,\n      name: manifest.name || appName,\n      entry: '/remoteEntry.js',\n      expose: './aeonShellPlugin',\n      type: 'var',\n      entryGlobalName:\n        manifest.entryGlobalName ||\n        appName.replace(/[^a-zA-Z0-9]/g, '') + 'Remote',\n      enabled: true,\n      source: 'network',\n    };\n    const jsonStr = JSON.stringify(remoteDef, null, 2);\n    files['/aeon-remote.json'] =\n      typeof Buffer !== 'undefined'\n        ? Buffer.from(jsonStr).toString('base64')\n        : btoa(jsonStr);\n  }\n\n  const sourceFiles: Array<{ path: string; sha256: string; size: number }> = [];\n  const sourceDirs = ['src', 'public', 'migrations', 'scripts'];\n\n  for (const sourceDir of sourceDirs) {\n    const absolute = join(appDir, sourceDir);\n    if (!existsSync(absolute)) continue;\n\n    const stack = [absolute];\n    while (stack.length > 0) {\n      const current = stack.pop();\n      if (!current) continue;\n\n      const entries = readdirSync(current);\n      for (const entry of entries) {\n        const fullPath = join(current, entry);\n        const stat = statSync(fullPath);\n        if (stat.isDirectory()) {\n          if (entry === 'node_modules' || entry === '.git') {\n            continue;\n          }\n          stack.push(fullPath);\n          continue;\n        }\n        if (!stat.isFile()) continue;\n\n        const bytes = readFileSync(fullPath);\n        const hash = createHash('sha256').update(bytes).digest('hex');\n        sourceFiles.push({\n          path: `/${relative(appDir, fullPath)}`,\n          sha256: hash,\n          size: stat.size,\n        });\n      }\n    }\n  }\n\n  const sourceBundle: Record<string, unknown> = {\n    template: 'aeon-foundation',\n    generatedAt: new Date().toISOString(),\n    sourceFileCount: sourceFiles.length,\n    sourceFiles: sourceFiles.sort((a, b) => a.path.localeCompare(b.path)),\n    includes: {\n      wranglerToml: existsSync(join(appDir, 'wrangler.toml')),\n      aeonToml: existsSync(join(appDir, 'aeon.toml')),\n      mcpJson: existsSync(join(appDir, 'mcp.json')),\n      migrationsDir: existsSync(join(appDir, 'migrations')),\n    },\n  };\n\n  // Ensure manifest has required fields\n  if (!manifest.entryPoint) {\n    manifest.entryPoint = '/index.html';\n  }\n  if (!manifest.language) {\n    manifest.language = 'javascript';\n  }\n\n  return { manifest, files, sourceBundle };\n}\n\n/**\n * Encode files into an envelope-compatible binary format.\n * Returns base64-encoded envelope data.\n */\nfunction encodeEnvelope(\n  manifest: Record<string, unknown>,\n  files: Record<string, string>\n): string {\n  // Create a simple envelope format:\n  // JSON header with manifest + file listing\n  const envelope = {\n    version: 1,\n    manifest,\n    files,\n    timestamp: new Date().toISOString(),\n  };\n\n  const json = JSON.stringify(envelope);\n  // Convert to base64 for transport\n  if (typeof Buffer !== 'undefined') {\n    return Buffer.from(json).toString('base64');\n  }\n  return btoa(json);\n}\n\n/**\n * Deploy an Aeon Flux app to the edge.\n *\n * @example\n * ```typescript\n * const result = await deploy({\n *   appDir: './my-site',\n *   name: 'halos-agency',\n *   gatewayUrl: 'https://api.edgework.ai',\n *   // apiKey is optional if EDGEWORK_API_KEY is set\n *   ownerDid: 'did:key:z...',\n * });\n * console.log(`Deployed to ${result.url}`);\n * ```\n */\nexport async function deploy(config: DeployConfig): Promise<DeployResult> {\n  const gatewayUrl = config.gatewayUrl || DEFAULT_GATEWAY;\n\n  // Step 1: Build the app\n  const { manifest, files, sourceBundle } = await buildApp(\n    config.appDir,\n    config.name,\n    config.build?.skipBuild\n  );\n\n  // Step 2: Encode as envelope\n  const envelope = encodeEnvelope(manifest, files);\n\n  // Step 3: Upload to gateway\n  const result = await apiRequest<DeployResult>(\n    `${gatewayUrl}/v1/aeon-deploy/upload`,\n    {\n      method: 'POST',\n      apiKey: config.apiKey,\n      body: JSON.stringify({\n        name: config.name,\n        ownerDid: config.ownerDid,\n        manifest,\n        envelope,\n        sourceBundle,\n      }),\n    }\n  );\n\n  // Step 4: Register CNAME if provided\n  if (config.cname && result.cid) {\n    try {\n      await registerCname(result.cid, config.cname, {\n        gatewayUrl,\n        apiKey: config.apiKey,\n      });\n    } catch (err) {\n      console.warn(\n        `[deploy] CNAME registration failed: ${\n          err instanceof Error ? err.message : 'Unknown error'\n        }`\n      );\n    }\n  }\n\n  // Optional side-channel source manifest upload for deploy clone workflows.\n  if (result.cid) {\n    try {\n      await apiRequest<{ ok: boolean }>(\n        `${gatewayUrl}/v1/aeon-deploy/${result.cid}/source`,\n        {\n          method: 'POST',\n          apiKey: config.apiKey,\n          body: JSON.stringify({\n            sourceBundle,\n          }),\n        }\n      );\n    } catch {\n      // Non-blocking: clone manifest support is best-effort until all gateways expose this endpoint.\n    }\n  }\n\n  return result;\n}\n\n/**\n * Get the status of a deployed process.\n */\nexport async function getStatus(\n  cid: string,\n  options?: { gatewayUrl?: string; apiKey?: string }\n): Promise<DeploymentStatus> {\n  const gatewayUrl = options?.gatewayUrl || DEFAULT_GATEWAY;\n  return apiRequest<DeploymentStatus>(\n    `${gatewayUrl}/v1/aeon-deploy/${cid}/status`,\n    { method: 'GET', apiKey: options?.apiKey }\n  );\n}\n\n/**\n * Fetch app content through AeonPID/CID proxy route.\n * Useful when process DNS is not propagated yet.\n */\nexport async function fetchAppByCid(\n  cid: string,\n  options?: { gatewayUrl?: string; apiKey?: string; path?: string }\n): Promise<Response> {\n  const gatewayUrl = options?.gatewayUrl || DEFAULT_GATEWAY;\n  const params = new URLSearchParams();\n  params.set('path', options?.path || '/');\n  const response = await fetch(\n    `${gatewayUrl}/v1/aeon-deploy/${cid}/app?${params.toString()}`,\n    {\n      method: 'GET',\n      headers: authHeaders(options?.apiKey),\n    }\n  );\n\n  if (!response.ok) {\n    const body = await response.text();\n    throw new Error(`App proxy error (${response.status}): ${body}`);\n  }\n\n  return response;\n}\n\nfunction hasLegacyWorkersRedirect(content: string): boolean {\n  const jsLocationRedirect =\n    /window\\.location(?:\\.(?:href|assign|replace))?[\\s=('\"`]*https?:\\/\\/[a-z0-9.-]+\\.workers\\.dev/i;\n  const metaRefreshRedirect =\n    /<meta[^>]+http-equiv=[\"']refresh[\"'][^>]+url=https?:\\/\\/[^\\s\"'<>]+\\.workers\\.dev/i;\n  return jsLocationRedirect.test(content) || metaRefreshRedirect.test(content);\n}\n\n/**\n * Smoke test a deployed process host and fail if it redirects to workers.dev.\n */\nexport async function smokeTestSite(\n  process: string,\n  options?: SiteSmokeTestOptions\n): Promise<SiteSmokeTestResult> {\n  const baseUrl = resolveProcessBaseUrl(process, options);\n  const targetUrl = `${baseUrl}/`;\n  const timeoutMs = options?.timeoutMs ?? 10_000;\n  const controller = new AbortController();\n  const timeout = setTimeout(() => controller.abort(), timeoutMs);\n\n  try {\n    const response = await fetch(targetUrl, {\n      method: 'GET',\n      redirect: 'manual',\n      signal: options?.signal || controller.signal,\n      headers: processAuthHeaders(options?.apiKey),\n    });\n\n    const location = response.headers.get('location');\n    if (location && /\\.workers\\.dev/i.test(location)) {\n      return {\n        ok: false,\n        url: targetUrl,\n        status: response.status,\n        contentType: response.headers.get('content-type'),\n        legacyRedirectDetected: true,\n        details: `HTTP redirect points to workers.dev: ${location}`,\n      };\n    }\n\n    const proxyOrigin =\n      response.headers.get('x-aeon-proxy-origin') ||\n      response.headers.get('x-proxy-origin');\n    if (proxyOrigin && /\\.workers\\.dev/i.test(proxyOrigin)) {\n      return {\n        ok: false,\n        url: targetUrl,\n        status: response.status,\n        contentType: response.headers.get('content-type'),\n        legacyRedirectDetected: true,\n        details: `Proxy origin leaks workers.dev upstream: ${proxyOrigin}`,\n      };\n    }\n\n    const contentType = response.headers.get('content-type');\n    if (\n      contentType?.includes('text/html') ||\n      contentType?.includes('application/xhtml+xml')\n    ) {\n      const body = await response.text();\n      if (hasLegacyWorkersRedirect(body)) {\n        return {\n          ok: false,\n          url: targetUrl,\n          status: response.status,\n          contentType,\n          legacyRedirectDetected: true,\n          details: 'HTML contains legacy workers.dev client-side redirect',\n        };\n      }\n    }\n\n    // Standard smoke check passed, now check health and probe endpoints\n    const healthUrl = `${baseUrl}/health`;\n    const healthResponse = await fetch(healthUrl, {\n      method: 'GET',\n      signal: options?.signal || controller.signal,\n      headers: processAuthHeaders(options?.apiKey),\n    });\n\n    if (!healthResponse.ok) {\n      return {\n        ok: false,\n        url: targetUrl,\n        status: healthResponse.status,\n        contentType: healthResponse.headers.get('content-type'),\n        legacyRedirectDetected: false,\n        details: `Health check failed at ${healthUrl}: ${healthResponse.status}`,\n      };\n    }\n\n    const healthData = (await healthResponse.json()) as { status: string };\n    if (healthData.status !== 'ready' && healthData.status !== 'healthy') {\n      return {\n        ok: false,\n        url: targetUrl,\n        status: 200,\n        contentType: 'application/json',\n        legacyRedirectDetected: false,\n        details: `Health status not ready: ${healthData.status}`,\n      };\n    }\n\n    const probeUrl = `${baseUrl}/probe`;\n    const probeResponse = await fetch(probeUrl, {\n      method: 'GET',\n      signal: options?.signal || controller.signal,\n      headers: processAuthHeaders(options?.apiKey),\n    });\n\n    if (!probeResponse.ok) {\n      // Fallback: check /livez if /probe fails (for k8s compatibility)\n      const livezUrl = `${baseUrl}/livez`;\n      const livezResponse = await fetch(livezUrl, {\n        method: 'GET',\n        signal: options?.signal || controller.signal,\n        headers: processAuthHeaders(options?.apiKey),\n      });\n      if (!livezResponse.ok) {\n        return {\n          ok: false,\n          url: targetUrl,\n          status: probeResponse.status,\n          contentType: probeResponse.headers.get('content-type'),\n          legacyRedirectDetected: false,\n          details: `Probe check failed at both ${probeUrl} and ${livezUrl}`,\n        };\n      }\n    }\n\n    return {\n      ok: response.ok,\n      url: targetUrl,\n      status: response.status,\n      contentType,\n      legacyRedirectDetected: false,\n      details: response.ok\n        ? undefined\n        : `Unexpected non-2xx status: ${response.status}`,\n    };\n  } finally {\n    clearTimeout(timeout);\n  }\n}\n\n/**\n * Stop (hibernate) a deployed process.\n */\nexport async function stop(\n  cid: string,\n  options?: { gatewayUrl?: string; apiKey?: string }\n): Promise<{ cid: string; state: string }> {\n  const gatewayUrl = options?.gatewayUrl || DEFAULT_GATEWAY;\n  return apiRequest<{ cid: string; state: string }>(\n    `${gatewayUrl}/v1/aeon-deploy/${cid}/stop`,\n    { method: 'POST', apiKey: options?.apiKey }\n  );\n}\n\n/**\n * Start (wake) a hibernated process.\n */\nexport async function start(\n  cid: string,\n  options?: { gatewayUrl?: string; apiKey?: string }\n): Promise<{ cid: string; state: string }> {\n  const gatewayUrl = options?.gatewayUrl || DEFAULT_GATEWAY;\n  return apiRequest<{ cid: string; state: string }>(\n    `${gatewayUrl}/v1/aeon-deploy/${cid}/start`,\n    { method: 'POST', apiKey: options?.apiKey }\n  );\n}\n\n/**\n * Migrate a process to a different execution tier.\n */\nexport async function migrate(\n  cid: string,\n  tier: 'browser' | 'peer' | 'edge',\n  options?: { gatewayUrl?: string; apiKey?: string }\n): Promise<{ cid: string; tier: string; state: string }> {\n  const gatewayUrl = options?.gatewayUrl || DEFAULT_GATEWAY;\n  return apiRequest<{ cid: string; tier: string; state: string }>(\n    `${gatewayUrl}/v1/aeon-deploy/${cid}/migrate`,\n    {\n      method: 'POST',\n      apiKey: options?.apiKey,\n      body: JSON.stringify({ tier }),\n    }\n  );\n}\n\n/**\n * Get process logs.\n */\nexport async function logs(\n  cid: string,\n  options?: {\n    gatewayUrl?: string;\n    apiKey?: string;\n    limit?: number;\n    level?: string;\n  }\n): Promise<{ logs: DeploymentLog[]; count: number }> {\n  const gatewayUrl = options?.gatewayUrl || DEFAULT_GATEWAY;\n  const params = new URLSearchParams();\n  if (options?.limit) params.set('limit', String(options.limit));\n  if (options?.level) params.set('level', options.level);\n  const qs = params.toString();\n  return apiRequest<{ logs: DeploymentLog[]; count: number }>(\n    `${gatewayUrl}/v1/aeon-deploy/${cid}/logs${qs ? '?' + qs : ''}`,\n    { method: 'GET', apiKey: options?.apiKey }\n  );\n}\n\n/**\n * Get process metrics.\n */\nexport async function metrics(\n  cid: string,\n  options?: { gatewayUrl?: string; apiKey?: string }\n): Promise<DeploymentMetrics> {\n  const gatewayUrl = options?.gatewayUrl || DEFAULT_GATEWAY;\n  return apiRequest<DeploymentMetrics>(\n    `${gatewayUrl}/v1/aeon-deploy/${cid}/metrics`,\n    { method: 'GET', apiKey: options?.apiKey }\n  );\n}\n\n/**\n * List all deployments.\n */\nexport async function list(options?: {\n  gatewayUrl?: string;\n  apiKey?: string;\n  owner?: string;\n}): Promise<{ processes: DeploymentListItem[]; count: number }> {\n  const gatewayUrl = options?.gatewayUrl || DEFAULT_GATEWAY;\n  const params = new URLSearchParams();\n  if (options?.owner) params.set('owner', options.owner);\n  const qs = params.toString();\n  return apiRequest<{ processes: DeploymentListItem[]; count: number }>(\n    `${gatewayUrl}/v1/aeon-deploy/list${qs ? '?' + qs : ''}`,\n    { method: 'GET', apiKey: options?.apiKey }\n  );\n}\n\n/**\n * Register a custom domain (CNAME) for a process.\n */\nexport async function registerCname(\n  cid: string,\n  domain: string,\n  options?: { gatewayUrl?: string; apiKey?: string }\n): Promise<CnameRegistration> {\n  const gatewayUrl = options?.gatewayUrl || DEFAULT_GATEWAY;\n  return apiRequest<CnameRegistration>(\n    `${gatewayUrl}/v1/aeon-deploy/${cid}/cname`,\n    {\n      method: 'POST',\n      apiKey: options?.apiKey,\n      body: JSON.stringify({ domain }),\n    }\n  );\n}\n\n/**\n * Seed D1/KV data for a deployed process.\n */\nexport async function seed(config: SeedConfig): Promise<{ ok: boolean }> {\n  const { existsSync, readFileSync, readdirSync } = await import('fs');\n  const { join } = await import('path');\n\n  if (!existsSync(config.fromDir)) {\n    throw new Error(`Seed directory not found: ${config.fromDir}`);\n  }\n\n  const gatewayUrl = config.gatewayUrl || DEFAULT_GATEWAY;\n\n  // Read all seed files\n  const seedFiles = readdirSync(config.fromDir).filter(\n    (f) => f.endsWith('.json') || f.endsWith('.sql')\n  );\n\n  for (const file of seedFiles) {\n    const content = readFileSync(join(config.fromDir, file), 'utf-8');\n    const key = file.replace(/\\.(json|sql)$/, '');\n\n    // POST to the process's KV via the deploy API\n    // This is a simplified approach — full implementation would use bulk KV operations\n    await apiRequest<{ ok: boolean }>(\n      `${gatewayUrl}/v1/aeon-deploy/${config.name}/seed`,\n      {\n        method: 'POST',\n        apiKey: config.apiKey,\n        body: JSON.stringify({\n          key,\n          content,\n          type: file.endsWith('.sql') ? 'sql' : 'json',\n        }),\n      }\n    );\n  }\n\n  return { ok: true };\n}\n\n/**\n * Seed repository content into aeon-container D1 index.\n * This is the Dash -> D1 bridge for CLI-seeded workspaces.\n */\nexport async function seedContainerRepo(\n  config: AeonContainerRepoSeedConfig\n): Promise<AeonContainerRepoSeedResult> {\n  const sourceType =\n    config.sourceType || (config.repoUrl ? 'github-public' : 'local-import');\n  let files = config.files || [];\n\n  if (sourceType === 'local-import' && config.fromDir) {\n    files = await loadRepoSeedFilesFromDir(config.fromDir);\n  }\n\n  if (sourceType === 'local-import' && files.length === 0) {\n    throw new Error(\n      'No local files to ingest. Provide --from directory or inline files.'\n    );\n  }\n\n  if (sourceType !== 'local-import' && !config.repoUrl) {\n    throw new Error('repoUrl is required for github source ingest');\n  }\n\n  return containerApiRequest<AeonContainerRepoSeedResult>(\n    config.endpointBaseUrl,\n    '/repos/ingest',\n    {\n      method: 'POST',\n      apiKey: config.apiKey,\n      ucanToken: config.ucanToken,\n      body: JSON.stringify({\n        container_id: config.containerId,\n        source_type: sourceType,\n        repo_url: config.repoUrl,\n        repo_ref: config.repoRef || 'HEAD',\n        files: sourceType === 'local-import' ? files : undefined,\n      }),\n    }\n  );\n}\n\n/**\n * Persist a workspace snapshot to D1-backed aeon-container metadata.\n */\nexport async function snapshotContainerWorkspace(\n  config: AeonContainerSnapshotConfig\n): Promise<AeonContainerSnapshotResult> {\n  return containerApiRequest<AeonContainerSnapshotResult>(\n    config.endpointBaseUrl,\n    `/fs/${encodeURIComponent(config.containerId)}/snapshot`,\n    {\n      method: 'POST',\n      apiKey: config.apiKey,\n      ucanToken: config.ucanToken,\n      body: '{}',\n    }\n  );\n}\n\n/**\n * Stream generic process SSE output from /stream.\n */\nexport async function streamProcess(\n  process: string,\n  request: ProcessStreamRequest,\n  options?: ProcessRequestOptions\n): Promise<AsyncGenerator<ProcessStreamEvent>> {\n  const payload: Record<string, unknown> = {\n    format: request.format || 'text',\n  };\n\n  if (request.model) payload.model = request.model;\n  if (request.system) payload.system = request.system;\n  if (typeof request.chunkSize === 'number')\n    payload.chunkSize = request.chunkSize;\n  if (typeof request.maxTokens === 'number')\n    payload.maxTokens = request.maxTokens;\n  if (typeof request.temperature === 'number') {\n    payload.temperature = request.temperature;\n  }\n\n  const inputText =\n    request.text || request.prompt || request.input || request.message || '';\n  if (inputText) {\n    payload.text = inputText;\n  }\n\n  const response = await processRequest(\n    process,\n    '/stream',\n    {\n      method: 'POST',\n      body: JSON.stringify(payload),\n    },\n    options\n  );\n\n  if (!response.body) {\n    throw new Error('Process stream response did not include a body');\n  }\n\n  return parseSseStream(response.body);\n}\n\n/**\n * Stream OpenAI-compatible chat completions from a process host.\n */\nexport async function streamProcessOpenAIChat(\n  process: string,\n  request: ProcessOpenAIChatRequest,\n  options?: ProcessRequestOptions\n): Promise<AsyncGenerator<ProcessStreamEvent>> {\n  const response = await processRequest(\n    process,\n    '/v1/chat/completions',\n    {\n      method: 'POST',\n      body: JSON.stringify({ ...request, stream: true }),\n    },\n    options\n  );\n\n  if (!response.body) {\n    throw new Error('OpenAI process stream response did not include a body');\n  }\n\n  return parseSseStream(response.body);\n}\n\n/**\n * Stream Anthropic-compatible message events from a process host.\n */\nexport async function streamProcessAnthropicMessages(\n  process: string,\n  request: ProcessAnthropicMessageRequest,\n  options?: ProcessRequestOptions\n): Promise<AsyncGenerator<ProcessStreamEvent>> {\n  const response = await processRequest(\n    process,\n    '/anthropic/v1/messages',\n    {\n      method: 'POST',\n      body: JSON.stringify({ ...request, stream: true }),\n    },\n    options\n  );\n\n  if (!response.body) {\n    throw new Error('Anthropic process stream response did not include a body');\n  }\n\n  return parseSseStream(response.body);\n}\n\n/* ------------------------------------------------------------------ */\n/*  registerAeonPid — Programmatic AeonPID registration               */\n/* ------------------------------------------------------------------ */\n\nexport interface RegisterAeonPidConfig {\n  appName: string;\n  env?: 'dev' | 'staging' | 'production';\n  gatewayUrl?: string;\n  ownerDid?: string;\n  apiKey?: string;\n  appDir?: string;\n  dryRun?: boolean;\n}\n\nexport interface RegisterAeonPidResult {\n  cid: string;\n  processName: string;\n  siteHost: string;\n  state: string;\n}\n\nfunction processNameForEnv(\n  app: string,\n  env: 'dev' | 'staging' | 'production'\n): string {\n  switch (env) {\n    case 'production':\n      return app;\n    case 'staging':\n      return `staging-${app}`;\n    case 'dev':\n      return `dev-${app}`;\n  }\n}\n\nfunction siteHostForEnv(\n  app: string,\n  env: 'dev' | 'staging' | 'production'\n): string {\n  switch (env) {\n    case 'production':\n      return `www-${app}.edgework.ai`;\n    case 'staging':\n      return `staging-www-${app}.edgework.ai`;\n    case 'dev':\n      return `dev-www-${app}.edgework.ai`;\n  }\n}\n\nfunction registerReadPackageVersion(appDir: string): string {\n  const { existsSync, readFileSync } =\n    require('node:fs') as typeof import('node:fs');\n  const { join } = require('node:path') as typeof import('node:path');\n  const packageJsonPath = join(appDir, 'package.json');\n  if (!existsSync(packageJsonPath)) {\n    return '0.0.0';\n  }\n  const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as {\n    version?: string;\n  };\n  return packageJson.version || '0.0.0';\n}\n\nfunction ensureDistEnvelope(\n  appDir: string,\n  appName: string,\n  processName: string,\n  env: 'dev' | 'staging' | 'production',\n  siteHost: string\n): void {\n  const { mkdirSync, writeFileSync } =\n    require('node:fs') as typeof import('node:fs');\n  const { join } = require('node:path') as typeof import('node:path');\n\n  const distDir = join(appDir, 'dist');\n  mkdirSync(distDir, { recursive: true });\n\n  const version = registerReadPackageVersion(appDir);\n  const workerUrl = `https://${siteHost}`;\n  const manifest = {\n    name: processName,\n    version,\n    description: `${appName} registration envelope for edgework.ai`,\n    entryPoint: '/index.html',\n    language: 'typescript',\n    runtime: 'cloudflare-workers',\n    tier: 'edge',\n    routes: ['/'],\n    workerUrl,\n    capabilities: ['services'],\n    metadata: {\n      environment: env,\n      siteHost,\n      generatedBy: 'edgework-sdk/registerAeonPid',\n      generatedAt: new Date().toISOString(),\n    },\n  };\n\n  writeFileSync(\n    join(distDir, 'manifest.json'),\n    JSON.stringify(manifest, null, 2)\n  );\n\n  const indexHtml = `<!doctype html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\" />\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n  <title>${processName}</title>\n  <meta name=\"description\" content=\"Edgework registration envelope for ${appName}\" />\n</head>\n<body>\n  <main>\n    <h1>${appName} registered</h1>\n    <p>Process: <strong>${processName}</strong></p>\n    <p>Host: <a href=\"https://${siteHost}\">${siteHost}</a></p>\n  </main>\n</body>\n</html>\n`;\n\n  writeFileSync(join(distDir, 'index.html'), indexHtml);\n}\n\nfunction registerSleepMs(ms: number): Promise<void> {\n  return new Promise((resolve) => {\n    setTimeout(resolve, ms);\n  });\n}\n\n/**\n * Register an app with the Edgework deploy gateway (AeonPID).\n *\n * This is the canonical programmatic entry point — CLI commands and scripts\n * are thin wrappers around this function.\n */\nexport async function registerAeonPid(\n  config: RegisterAeonPidConfig\n): Promise<RegisterAeonPidResult> {\n  const { existsSync } = require('node:fs') as typeof import('node:fs');\n  const { join, resolve } = require('node:path') as typeof import('node:path');\n\n  const env = config.env || 'production';\n  const gatewayUrl = config.gatewayUrl || DEFAULT_GATEWAY;\n  const ownerDid =\n    config.ownerDid ||\n    process.env.EDGEWORK_OWNER_DID ||\n    'did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK';\n  const apiKey = config.apiKey || resolveEdgeworkApiKey();\n\n  const processName = processNameForEnv(config.appName, env);\n  const siteHost = siteHostForEnv(config.appName, env);\n\n  // Resolve app directory — check cwd first (when run from app dir),\n  // then try repo-root/apps/<name>\n  let appDir: string;\n  if (config.appDir) {\n    appDir = resolve(config.appDir);\n  } else {\n    const cwd = process.cwd();\n    const cwdAppsPath = join(cwd, 'apps', config.appName);\n    if (existsSync(join(cwdAppsPath, 'package.json'))) {\n      appDir = cwdAppsPath;\n    } else if (\n      existsSync(join(cwd, 'package.json')) &&\n      cwd.endsWith(config.appName)\n    ) {\n      appDir = cwd;\n    } else {\n      appDir = cwdAppsPath;\n    }\n  }\n\n  if (!existsSync(join(appDir, 'package.json'))) {\n    throw new Error(\n      `Unable to resolve app directory for \"${config.appName}\". Expected ${appDir}/package.json to exist.`\n    );\n  }\n\n  // Create minimal dist envelope\n  ensureDistEnvelope(appDir, config.appName, processName, env, siteHost);\n\n  console.log(`Registering AeonPID: ${processName}`);\n  console.log(`  app:       ${config.appName}`);\n  console.log(`  env:       ${env}`);\n  console.log(`  host:      ${siteHost}`);\n  console.log(`  gateway:   ${gatewayUrl}`);\n  console.log(`  owner DID: ${ownerDid}`);\n  console.log(`  app dir:   ${appDir}`);\n\n  if (config.dryRun) {\n    console.log('Dry run enabled. Skipping deploy call.');\n    return { cid: 'dry-run', processName, siteHost, state: 'dry-run' };\n  }\n\n  let cid: string;\n\n  try {\n    const result = await deploy({\n      appDir,\n      name: processName,\n      gatewayUrl,\n      ownerDid,\n      apiKey,\n      tier: 'edge',\n      build: { skipBuild: true },\n    });\n\n    cid = result.cid;\n    console.log('AeonPID registration complete.');\n    console.log(`  cid:     ${result.cid}`);\n    console.log(`  url:     ${result.url}`);\n    console.log(`  r2 key:  ${result.r2Key}`);\n    console.log(`  updated: ${result.updated}`);\n  } catch (error: unknown) {\n    const message = error instanceof Error ? error.message : String(error);\n    const payloadTooLarge =\n      message.includes('Deploy API error (413)') ||\n      message.toLowerCase().includes('payload too large') ||\n      message.toLowerCase().includes('socket connection was closed') ||\n      message.toLowerCase().includes('fetch failed');\n\n    if (!payloadTooLarge) {\n      throw error;\n    }\n\n    console.warn(\n      `AeonPID upload too large for ${processName}; checking existing process...`\n    );\n\n    const processes = await list({ gatewayUrl, apiKey });\n    const existing = processes.processes.find((p) => p.name === processName);\n\n    if (!existing) {\n      throw error;\n    }\n\n    console.warn(`Reusing existing AeonPID ${processName} (${existing.cid})`);\n    cid = existing.cid;\n  }\n\n  // Poll for non-spawn state\n  let state = 'spawn';\n  let latest = await getStatus(cid, { gatewayUrl, apiKey });\n  state = latest.state;\n\n  if (state === 'spawn') {\n    for (let attempt = 1; attempt <= 5; attempt += 1) {\n      await registerSleepMs(1000);\n      latest = await getStatus(cid, { gatewayUrl, apiKey });\n      state = latest.state;\n      if (state !== 'spawn') break;\n    }\n  }\n\n  console.log('Gateway status:');\n  console.log(`  state: ${state}`);\n  console.log(`  tier:  ${latest.tier}`);\n\n  return { cid, processName, siteHost, state };\n}\n"]}