{"version":3,"sources":["../src/index.ts","../src/config/defineMeshConfig.ts","../src/config/MeshConfigLoader.ts","../src/core/errors.ts","../src/utils/fs.ts","../src/config/MeshConfigNormalizer.ts","../src/hsm/HsmSchemaValidator.ts","../src/hsm/HsmRouteMapper.ts","../src/utils/origin.ts","../src/hsm/HsmSchemaLoader.ts","../src/ids/InstanceIdResolver.ts","../src/logs/LogStore.ts","../src/runtime/MeshProcessSupervisor.ts","../src/utils/time.ts","../src/process/ProcessInstanceSpawner.ts","../src/ids/MeshIdFactory.ts","../src/process/PortAllocator.ts","../src/process/ProcessTakeover.ts","../src/state/MeshStateStore.ts","../src/registry/RegistryRecordTools.ts","../src/registry/FileMeshRegistry.ts","../src/registry/RegistrationSigner.ts","../src/registry/redis/SimpleRedisClient.ts","../src/registry/redis/RedisMeshRegistry.ts","../src/registry/RegistryFactory.ts","../src/registry/HeartbeatLoop.ts","../src/streaming/MemoryMeshStream.ts","../src/streaming/MeshStreamSerializer.ts","../src/streaming/MeshStreamChannels.ts","../src/streaming/redis/RedisPubSubConnection.ts","../src/streaming/redis/RedisMeshStream.ts","../src/streaming/MeshStreamFactory.ts","../src/podman/PodmanSupervisor.ts","../src/podman/PodmanCommandBuilder.ts","../src/podman/PodmanPlan.ts","../src/podman/PodmanRunner.ts","../src/runtime/MeshRuntime.ts","../src/state/ProcessHealth.ts","../src/router/MeshRouterServer.ts","../src/drain/ActiveConnectionTracker.ts","../src/router/InstanceRegistry.ts","../src/router/LoadBalancer.ts","../src/router/ProxyHeaders.ts","../src/router/RouteMatcher.ts","../src/router/CookieSigner.ts","../src/router/StickySession.ts","../src/observability/RouterMetrics.ts","../src/node/MeshNode.ts","../src/events/MeshEventBus.ts","../src/drain/DrainController.ts","../src/ci/CiGenerateCommand.ts","../src/ci/drs.ts","../src/podman/quadlet/PodmanQuadletGenerator.ts","../src/podman/PodmanCommands.ts","../src/hsm/HsmMeshPlanner.ts","../src/observability/ObservabilitySnapshotBuilder.ts","../src/locks/LockLease.ts","../src/locks/MemoryLockBackend.ts","../src/locks/LockManager.ts","../src/locks/LockErrors.ts","../src/locks/redis/RedisLockBackend.ts","../src/locks/LockFactory.ts","../src/leader/LeaderElection.ts","../src/observability/DashboardRenderer.ts","../src/observability/DashboardCommand.ts","../src/streaming/StreamCommand.ts","../src/cleanup/CleanupScheduler.ts"],"sourcesContent":["export { defineMeshConfig } from './config/defineMeshConfig.js'\nexport { MeshConfigLoader } from './config/MeshConfigLoader.js'\nexport { MeshConfigNormalizer } from './config/MeshConfigNormalizer.js'\nexport { MeshRuntime } from './runtime/MeshRuntime.js'\nexport { MeshProcessSupervisor } from './runtime/MeshProcessSupervisor.js'\nexport { MeshStateStore } from './state/MeshStateStore.js'\nexport { ProcessHealth } from './state/ProcessHealth.js'\nexport { LogStore } from './logs/LogStore.js'\nexport { MeshIdFactory } from './ids/MeshIdFactory.js'\nexport { InstanceIdResolver } from './ids/InstanceIdResolver.js'\nexport { MeshError, MeshConfigError, MeshIdResolutionError, MeshProcessError, MeshStateError } from './core/errors.js'\nexport { MeshRouterServer } from './router/MeshRouterServer.js'\nexport { RouteMatcher } from './router/RouteMatcher.js'\nexport { StickySession } from './router/StickySession.js'\nexport { CookieSigner } from './router/CookieSigner.js'\nexport { FileMeshRegistry } from './registry/FileMeshRegistry.js'\nexport { RegistryFactory } from './registry/RegistryFactory.js'\nexport { RegistrationSigner } from './registry/RegistrationSigner.js'\nexport { HeartbeatLoop } from './registry/HeartbeatLoop.js'\nexport { RedisMeshRegistry } from './registry/redis/RedisMeshRegistry.js'\nexport { createMeshNode, MeshNode } from './node/MeshNode.js'\nexport { MemoryMeshEventBus } from './events/MeshEventBus.js'\nexport { ActiveConnectionTracker, DrainController } from './drain/index.js'\nexport type {\n  MeshConfig,\n  MeshRouterConfig,\n  MeshRouterTlsConfig,\n  MeshRuntimeConfig,\n  MeshRegistryConfig,\n  MeshObservabilityConfig,\n  MeshStreamingConfig,\n  MeshCoordinationConfig,\n  MeshRegistryType,\n  MeshStreamTransport,\n  MeshServiceConfig,\n  MeshServiceType,\n  MeshServiceStrategy,\n  MeshInstanceRecord,\n  MeshInstanceStatus,\n  MeshRunOptions,\n  MeshPsOptions,\n  MeshWatchOptions,\n  MeshStopOptions,\n  MeshConnectionCounters,\n  NormalizedMeshConfig,\n  NormalizedMeshRouterConfig,\n  NormalizedMeshRouterTlsConfig,\n  NormalizedMeshServiceConfig,\n  NormalizedMeshRegistryConfig,\n  NormalizedMeshObservabilityConfig,\n  NormalizedMeshStreamingConfig,\n  NormalizedMeshCoordinationConfig,\n  // CI workflow generation\n  MeshCiConfig,\n  MeshCiFrontendConfig,\n  MeshCiBackendConfig,\n  MeshCiDrsConfig,\n  MeshCiFrontendStrategy,\n  MeshCiBackendStrategy,\n  MeshCiGenerateOptions,\n  NormalizedMeshCiConfig,\n  NormalizedMeshCiFrontendConfig,\n  NormalizedMeshCiBackendConfig,\n  NormalizedMeshCiDrsConfig,\n} from './core/types.js'\nexport { CiGenerateCommand } from './ci/CiGenerateCommand.js'\nexport type { MeshRegistry, MeshRegistryFactory } from './registry/types.js'\nexport type { MeshNodeOptions, MeshNodeSignalHandlerOptions } from './node/MeshNode.js'\nexport type { MeshEventBus, MeshEventEnvelope, MeshEventHandler } from './events/MeshEventBus.js'\nexport type { ActiveConnectionSnapshot, DrainControllerOptions, DrainTargetResult } from './drain/index.js'\nexport * from './podman/index.js'\nexport * from './hsm/index.js'\nexport * from './observability/index.js'\nexport * from './streaming/index.js'\n\nexport * from './locks/index.js'\nexport * from './leader/index.js'\nexport * from './cleanup/index.js'\n","import type { MeshConfig } from '../core/types.js'\n\nexport function defineMeshConfig(config: MeshConfig): MeshConfig {\n  return config\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { createJiti } from 'jiti'\nimport { MeshConfigError } from '../core/errors.js'\nimport type { MeshConfig, NormalizedMeshConfig } from '../core/types.js'\nimport { pathExists } from '../utils/fs.js'\nimport { MeshConfigNormalizer } from './MeshConfigNormalizer.js'\nimport { HsmSchemaLoader } from '../hsm/HsmSchemaLoader.js'\n\nconst CONFIG_FILES = [\n  'mesh.config.ts',\n  'mesh.config.mts',\n  'mesh.config.cts',\n  'mesh.config.js',\n  'mesh.config.mjs',\n  'mesh.config.cjs',\n  'mesh.config.json'\n] as const\n\nexport class MeshConfigLoader {\n  private readonly normalizer = new MeshConfigNormalizer()\n  private readonly hsmLoader = new HsmSchemaLoader()\n\n  public async findConfig(projectRoot = process.cwd()): Promise<string> {\n    for (const file of CONFIG_FILES) {\n      const candidate = path.resolve(projectRoot, file)\n      if (await pathExists(candidate)) return candidate\n    }\n    throw new MeshConfigError(`No mesh config found in ${projectRoot}. Run: npx @panomapp/mesh init`)\n  }\n\n  public async load(configPath?: string, projectRoot = process.cwd()): Promise<NormalizedMeshConfig> {\n    const resolvedPath = configPath ? path.resolve(projectRoot, configPath) : await this.findConfig(projectRoot)\n    const raw = await this.loadRaw(resolvedPath)\n    const hydrated = await this.hsmLoader.hydrateConfig(raw, resolvedPath)\n    return this.normalizer.normalize(hydrated, path.dirname(resolvedPath), resolvedPath)\n  }\n\n  private async loadRaw(configPath: string): Promise<MeshConfig> {\n    if (!fs.existsSync(configPath)) throw new MeshConfigError(`Mesh config not found: ${configPath}`)\n\n    if (configPath.endsWith('.json')) {\n      const text = await fs.promises.readFile(configPath, 'utf8')\n      return JSON.parse(text) as MeshConfig\n    }\n\n    const jiti = createJiti(configPath, { interopDefault: true })\n    const mod = await jiti.import(configPath)\n    const loaded = (mod as { default?: unknown }).default ?? mod\n    if (!loaded || typeof loaded !== 'object') {\n      throw new MeshConfigError(`Mesh config must export an object: ${configPath}`)\n    }\n    return loaded as MeshConfig\n  }\n}\n","export class MeshError extends Error {\n  public constructor(message: string) {\n    super(message)\n    this.name = new.target.name\n  }\n}\n\nexport class MeshConfigError extends MeshError {}\nexport class MeshStateError extends MeshError {}\nexport class MeshProcessError extends MeshError {}\nexport class MeshIdResolutionError extends MeshError {}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nexport async function ensureDir(dir: string): Promise<void> {\n  await fs.promises.mkdir(dir, { recursive: true })\n}\n\nexport async function pathExists(filePath: string): Promise<boolean> {\n  try {\n    await fs.promises.access(filePath)\n    return true\n  } catch {\n    return false\n  }\n}\n\nexport async function atomicWriteJson(filePath: string, value: unknown): Promise<void> {\n  await ensureDir(path.dirname(filePath))\n  const tempPath = `${filePath}.${process.pid}.${Date.now()}.tmp`\n  await fs.promises.writeFile(tempPath, `${JSON.stringify(value, null, 2)}\\n`, 'utf8')\n  await fs.promises.rename(tempPath, filePath)\n}\n","import path from 'node:path'\nimport { MeshConfigError } from '../core/errors.js'\nimport type {\n  MeshConfig,\n  MeshPortRange,\n  MeshServiceConfig,\n  NormalizedMeshConfig,\n  NormalizedMeshRegistryConfig,\n  NormalizedMeshRuntimeConfig,\n  NormalizedMeshServiceConfig,\n  NormalizedMeshRouterConfig,\n  NormalizedMeshObservabilityConfig,\n  NormalizedMeshStreamingConfig,\n  NormalizedMeshCoordinationConfig,\n  MeshHsmMappedRoute,\n  NormalizedMeshHsmBridgeConfig,\n  NormalizedMeshCiConfig,\n  NormalizedMeshTestConfig\n} from '../core/types.js'\nimport { HsmRouteMapper } from '../hsm/HsmRouteMapper.js'\nimport { HsmSchemaValidator } from '../hsm/HsmSchemaValidator.js'\nimport { formatOrigin } from '../utils/origin.js'\n\nconst DEFAULT_PORT_RANGE: MeshPortRange = { from: 31_000, to: 32_999 }\n\nexport class MeshConfigNormalizer {\n  public normalize(config: MeshConfig, projectRoot = process.cwd(), configPath = path.join(projectRoot, 'mesh.config.ts')): NormalizedMeshConfig {\n    this.assertConfig(config)\n\n    const runtime = this.normalizeRuntime(config, projectRoot)\n    const router = this.normalizeRouter(config, projectRoot)\n    const observability = this.normalizeObservability(config)\n    const registry = this.normalizeRegistry(config, router)\n    const streaming = this.normalizeStreaming(config, registry)\n    const coordination = this.normalizeCoordination(config, registry, streaming)\n    const hsm = this.normalizeHsm(config)\n    const hsmRoutesByService = this.groupHsmRoutes(hsm.routes)\n    const services = new Map<string, NormalizedMeshServiceConfig>()\n    const tests = this.normalizeTests(config, projectRoot)\n\n    for (const [name, service] of Object.entries(config.services)) {\n      services.set(name, this.normalizeService(name, service, runtime, projectRoot, hsmRoutesByService.get(name) ?? []))\n    }\n\n    const ci = this.normalizeCi(config, services)\n\n    return {\n      app: config.app,\n      projectRoot,\n      configPath,\n      router,\n      observability,\n      streaming,\n      coordination,\n      runtime,\n      registry,\n      hsm,\n      ci,\n      tests,\n      services\n    }\n  }\n\n  private normalizeTests(config: MeshConfig, projectRoot: string): ReadonlyMap<string, NormalizedMeshTestConfig> {\n    const normalized = new Map<string, NormalizedMeshTestConfig>()\n    for (const [name, test] of Object.entries(config.tests ?? {})) {\n      if (!name.trim()) throw new MeshConfigError('Mesh test names must be non-empty.')\n      const command = typeof test.command === 'string' ? test.command : test.command.join(' ')\n      if (!command.trim()) throw new MeshConfigError(`Mesh test \"${name}\" must define a non-empty command.`)\n      normalized.set(name, {\n        name,\n        command: command.trim(),\n        cwd: path.resolve(projectRoot, test.cwd ?? '.'),\n        env: this.normalizeEnv(test.env ?? {})\n      })\n    }\n    return normalized\n  }\n\n  private normalizeHsm(config: MeshConfig): NormalizedMeshHsmBridgeConfig {\n    const hsm = config.hsm\n    const routeMode = hsm?.routeMode ?? 'both'\n    const strict = hsm?.strict ?? false\n    if (!hsm) {\n      return { enabled: false, routeMode, strict, routes: [] }\n    }\n    if (routeMode !== 'canonical' && routeMode !== 'backend' && routeMode !== 'both') {\n      throw new MeshConfigError('hsm.routeMode must be canonical, backend or both.')\n    }\n    const schema = hsm.schema\n    if (!schema) {\n      if (strict) throw new MeshConfigError('hsm.schema or hsm.schemaPath is required when hsm.strict is true.')\n      return {\n        enabled: false,\n        ...(hsm.schemaPath !== undefined ? { schemaPath: hsm.schemaPath } : {}),\n        routeMode,\n        strict,\n        routes: []\n      }\n    }\n    const hsmValidator: HsmSchemaValidator = new HsmSchemaValidator()\n    hsmValidator.assertValid(schema)\n    const routes = new HsmRouteMapper().map({\n      schema,\n      routeMode,\n      strict,\n      mappings: hsm.mappings ?? [],\n      services: config.services\n    })\n    return {\n      enabled: true,\n      schema,\n      ...(hsm.schemaPath !== undefined ? { schemaPath: hsm.schemaPath } : {}),\n      routeMode,\n      strict,\n      routes\n    }\n  }\n\n  private groupHsmRoutes(routes: readonly MeshHsmMappedRoute[]): ReadonlyMap<string, readonly MeshHsmMappedRoute[]> {\n    const grouped = new Map<string, MeshHsmMappedRoute[]>()\n    for (const route of routes) {\n      const existing = grouped.get(route.service) ?? []\n      existing.push(route)\n      grouped.set(route.service, existing)\n    }\n    return grouped\n  }\n\n  private normalizeRuntime(config: MeshConfig, projectRoot: string): NormalizedMeshRuntimeConfig {\n    const runtime = config.runtime ?? {}\n    return {\n      mode: runtime.mode ?? 'process',\n      podman: this.normalizePodman(config.app, runtime.podman ?? {}, projectRoot),\n      stateDir: path.resolve(projectRoot, runtime.stateDir ?? '.mesh'),\n      logsDir: path.resolve(projectRoot, runtime.logsDir ?? '.mesh/logs'),\n      defaultWatch: runtime.defaultWatch ?? true,\n      portRange: this.normalizePortRange(runtime.portRange ?? DEFAULT_PORT_RANGE, 'runtime.portRange'),\n      drainTimeoutMs: runtime.drainTimeoutMs ?? 10_000,\n      shutdownTimeoutMs: runtime.shutdownTimeoutMs ?? 8_000,\n      killTimeoutMs: runtime.killTimeoutMs ?? 2_000\n    }\n  }\n\n\n  private normalizePodman(app: string, podman: NonNullable<MeshConfig['runtime']>['podman'], projectRoot: string) {\n    const prefix = podman?.containerPrefix ?? this.slug(app)\n    return {\n      podmanPath: podman?.podmanPath ?? 'podman',\n      network: podman?.network ?? `${prefix}-mesh`,\n      createNetwork: podman?.createNetwork ?? true,\n      containerPrefix: prefix,\n      routerImage: podman?.routerImage ?? 'ghcr.io/panomapp/mesh-router:latest',\n      routerContainerPort: podman?.routerContainerPort ?? 8080,\n      publishHost: podman?.publishHost ?? '127.0.0.1',\n      replace: podman?.replace ?? true,\n      pull: podman?.pull ?? 'missing',\n      quadlet: {\n        outputDir: path.resolve(projectRoot, podman?.quadlet?.outputDir ?? '.mesh/quadlet'),\n        user: podman?.quadlet?.user ?? true,\n        installCommand: podman?.quadlet?.installCommand ?? true,\n        configSourceDir: path.resolve(projectRoot, podman?.quadlet?.configSourceDir ?? '.mesh/runtime-bundle'),\n        configTargetDir: podman?.quadlet?.configTargetDir ?? '/workspace'\n      },\n      redis: {\n        enabled: podman?.redis?.enabled ?? false,\n        image: podman?.redis?.image ?? 'docker.io/redis:7-alpine',\n        containerName: podman?.redis?.containerName ?? `${prefix}-redis`,\n        port: podman?.redis?.port ?? 6379,\n        volume: podman?.redis?.volume ?? `${prefix}-redis-data`\n      }\n    }\n  }\n\n  private normalizeRegistry(config: MeshConfig, router: NormalizedMeshRouterConfig): NormalizedMeshRegistryConfig {\n    const registry = config.registry ?? {}\n    const type = registry.type ?? (registry.url ? 'redis' : 'file')\n    if (type === 'redis' && !registry.url) {\n      throw new MeshConfigError('registry.url is required when registry.type is \"redis\".')\n    }\n    return {\n      type,\n      url: registry.url ?? '',\n      ...(registry.keyPrefix !== undefined ? { keyPrefix: registry.keyPrefix } : {}),\n      secret: registry.secret ?? router.secret,\n      requireSignature: registry.requireSignature ?? type === 'redis',\n      heartbeatIntervalMs: registry.heartbeatIntervalMs ?? 5_000,\n      ttlMs: registry.ttlMs ?? 15_000,\n      connectTimeoutMs: registry.connectTimeoutMs ?? 5_000\n    }\n  }\n\n\n  private normalizeStreaming(config: MeshConfig, registry: NormalizedMeshRegistryConfig): NormalizedMeshStreamingConfig {\n    const streaming = config.streaming ?? {}\n    const transport = streaming.transport ?? (registry.type === 'redis' ? 'redis' : 'memory')\n    if (transport !== 'memory' && transport !== 'redis') {\n      throw new MeshConfigError('streaming.transport must be memory or redis.')\n    }\n    if (transport === 'redis' && !(streaming.url ?? registry.url)) {\n      throw new MeshConfigError('streaming.url or registry.url is required when streaming.transport is \"redis\".')\n    }\n    const keyPrefix = streaming.keyPrefix ?? registry.keyPrefix ?? `mesh:${config.app}`\n    return {\n      enabled: streaming.enabled ?? registry.type === 'redis',\n      transport,\n      url: streaming.url ?? registry.url,\n      keyPrefix,\n      logs: streaming.logs ?? true,\n      events: streaming.events ?? true,\n      maxLogChunkBytes: streaming.maxLogChunkBytes ?? 32_768,\n      connectTimeoutMs: streaming.connectTimeoutMs ?? registry.connectTimeoutMs\n    }\n  }\n\n\n  private normalizeCoordination(config: MeshConfig, registry: NormalizedMeshRegistryConfig, streaming: NormalizedMeshStreamingConfig): NormalizedMeshCoordinationConfig {\n    const coordination = config.coordination ?? {}\n    const backend = coordination.backend ?? (registry.type === 'redis' ? 'redis' : 'memory')\n    if (backend !== 'memory' && backend !== 'redis') {\n      throw new MeshConfigError('coordination.backend must be memory or redis.')\n    }\n    const url = coordination.url ?? registry.url ?? streaming.url\n    if (backend === 'redis' && !url) {\n      throw new MeshConfigError('coordination.url or registry.url is required when coordination.backend is \"redis\".')\n    }\n    const keyPrefix = coordination.keyPrefix ?? registry.keyPrefix ?? streaming.keyPrefix ?? `mesh:${config.app}`\n    const locks = coordination.locks ?? {}\n    const lockBackend = locks.backend ?? backend\n    const lockUrl = locks.url ?? url\n    if (lockBackend === 'redis' && !lockUrl) {\n      throw new MeshConfigError('coordination.locks.url or coordination.url is required when lock backend is \"redis\".')\n    }\n    const leader = coordination.leader ?? {}\n    const cleanup = coordination.cleanup ?? {}\n    const enabled = coordination.enabled ?? locks.enabled ?? leader.enabled ?? cleanup.enabled ?? backend === 'redis'\n    return {\n      enabled,\n      backend,\n      url,\n      keyPrefix,\n      connectTimeoutMs: coordination.connectTimeoutMs ?? registry.connectTimeoutMs,\n      locks: {\n        enabled: locks.enabled ?? enabled,\n        backend: lockBackend,\n        url: lockUrl,\n        ttlMs: locks.ttlMs ?? 30_000,\n        waitMs: locks.waitMs ?? 0\n      },\n      leader: {\n        enabled: leader.enabled ?? enabled,\n        ttlMs: leader.ttlMs ?? 30_000,\n        renewEveryMs: leader.renewEveryMs ?? 10_000\n      },\n      cleanup: {\n        enabled: cleanup.enabled ?? false\n      }\n    }\n  }\n\n  private normalizeObservability(config: MeshConfig): NormalizedMeshObservabilityConfig {\n    const observability = config.observability ?? {}\n    const rawPath = observability.path ?? '/_mesh'\n    const path = rawPath === '/' ? '/_mesh' : `/${rawPath.replace(/^\\/+|\\/+$/g, '')}`\n    return {\n      enabled: observability.enabled ?? true,\n      path,\n      refreshIntervalMs: observability.refreshIntervalMs ?? 1_000,\n      logLines: observability.logLines ?? 20,\n      includeLogs: observability.includeLogs ?? false\n    }\n  }\n\n\n  private normalizeRouter(config: MeshConfig, projectRoot: string): NormalizedMeshRouterConfig {\n    const router = config.router ?? {}\n    const tls = router.tls ?? {}\n    const tlsEnabled = tls.enabled ?? false\n    const additionalPorts = this.normalizeAdditionalPorts(tls.additionalPorts ?? [], router.port ?? 8080)\n    const certPath = tls.certPath ? path.resolve(projectRoot, tls.certPath) : undefined\n    const keyPath = tls.keyPath ? path.resolve(projectRoot, tls.keyPath) : undefined\n    const caPath = tls.caPath ? path.resolve(projectRoot, tls.caPath) : undefined\n    if (tlsEnabled && (!certPath || !keyPath)) {\n      throw new MeshConfigError('router.tls.certPath and router.tls.keyPath are required when router.tls.enabled is true.')\n    }\n    const port = router.port ?? 8080\n    const protocol = tlsEnabled ? 'https' as const : 'http' as const\n    const publicPorts = [port, ...additionalPorts]\n    const canonicalPort = tlsEnabled && publicPorts.includes(443) ? 443 : port\n    return {\n      enabled: router.enabled ?? true,\n      host: router.host ?? '127.0.0.1',\n      port,\n      sessionAffinity: router.sessionAffinity ?? true,\n      cookieName: router.cookieName ?? 'pm_mesh',\n      secret: router.secret ?? 'dev-only-mesh-secret',\n      requestTimeoutMs: router.requestTimeoutMs ?? 30_000,\n      secureCookies: router.secureCookies ?? tlsEnabled,\n      drainTimeoutMs: router.drainTimeoutMs ?? 15_000,\n      socketDrainTimeoutMs: router.socketDrainTimeoutMs ?? 10_000,\n      protocol,\n      publicOrigin: formatOrigin(protocol, router.host ?? '127.0.0.1', canonicalPort),\n      publicOrigins: publicPorts.map((listenPort) => formatOrigin(protocol, router.host ?? '127.0.0.1', listenPort)),\n      tls: {\n        enabled: tlsEnabled,\n        ...(certPath ? { certPath } : {}),\n        ...(keyPath ? { keyPath } : {}),\n        ...(caPath ? { caPath } : {}),\n        ...(tls.passphraseEnv ? { passphraseEnv: tls.passphraseEnv } : {}),\n        ...(tls.minVersion ? { minVersion: tls.minVersion } : {}),\n        additionalPorts,\n      }\n    }\n  }\n\n  private normalizeAdditionalPorts(ports: readonly number[], primaryPort: number): readonly number[] {\n    const unique = new Set<number>()\n    for (const port of ports) {\n      if (!Number.isInteger(port) || port < 1 || port > 65_535) {\n        throw new MeshConfigError('router.tls.additionalPorts must contain valid TCP ports.')\n      }\n      if (port !== primaryPort) unique.add(port)\n    }\n    return [...unique].sort((a, b) => a - b)\n  }\n\n  private normalizeService(\n    name: string,\n    service: MeshServiceConfig,\n    runtime: NormalizedMeshRuntimeConfig,\n    projectRoot: string,\n    hsmRoutes: readonly MeshHsmMappedRoute[] = []\n  ): NormalizedMeshServiceConfig {\n    if (!/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(name)) {\n      throw new MeshConfigError(`Invalid service name \"${name}\". Use letters, numbers, _ or -.`)\n    }\n\n    const command = Array.isArray(service.command) ? service.command : [service.command]\n    if (command.length === 0 || command.some(part => !part.trim())) {\n      throw new MeshConfigError(`Service \"${name}\" must define a non-empty command.`)\n    }\n\n    const instances = service.instances ?? 1\n    if (!Number.isInteger(instances) || instances < 0) {\n      throw new MeshConfigError(`Service \"${name}\" instances must be a non-negative integer.`)\n    }\n\n    const configuredRoutes = service.route === undefined\n      ? []\n      : Array.isArray(service.route)\n        ? service.route\n        : [service.route]\n    const routes = this.dedupeRoutes([...configuredRoutes, ...hsmRoutes.map(route => route.route)])\n\n    for (const route of routes) {\n      if (!route.startsWith('/')) {\n        throw new MeshConfigError(`Service \"${name}\" route \"${route}\" must start with /.`)\n      }\n    }\n\n    return {\n      name,\n      type: service.type ?? 'backend',\n      command,\n      ...(service.image !== undefined ? { image: service.image } : {}),\n      podman: this.normalizeServicePodman(name, service),\n      shell: typeof service.command === 'string',\n      cwd: path.resolve(projectRoot, service.cwd ?? '.'),\n      instances,\n      ...(service.port !== undefined ? { port: service.port } : {}),\n      portRange: this.normalizePortRange(service.portRange ?? runtime.portRange, `services.${name}.portRange`),\n      routes,\n      hsmRoutes,\n      ...(service.healthPath !== undefined ? { healthPath: service.healthPath } : {}),\n      strategy: service.strategy ?? 'round-robin',\n      watch: service.watch ?? runtime.defaultWatch,\n      env: this.normalizeEnv(service.env ?? {}),\n      autoRestart: service.autoRestart ?? false,\n      drainTimeoutMs: service.drainTimeoutMs ?? runtime.drainTimeoutMs,\n      shutdownTimeoutMs: service.shutdownTimeoutMs ?? runtime.shutdownTimeoutMs\n    }\n  }\n\n  private normalizeServicePodman(name: string, service: MeshServiceConfig) {\n    const podman = service.podman ?? {}\n    const toCommand = (value: string | readonly string[] | undefined): readonly string[] | undefined => {\n      if (value === undefined) return undefined\n      return typeof value === 'string' ? [value] : value\n    }\n    const containerPort = podman.containerPort ?? service.port ?? (service.type === 'frontend' ? 5173 : 3000)\n    if (!Number.isInteger(containerPort) || containerPort < 1 || containerPort > 65_535) {\n      throw new MeshConfigError(`Service \"${name}\" podman.containerPort must be a valid TCP port.`)\n    }\n    return {\n      ...(podman.image !== undefined ? { image: podman.image } : {}),\n      ...(toCommand(podman.command) !== undefined ? { command: toCommand(podman.command)! } : {}),\n      ...(toCommand(podman.entrypoint) !== undefined ? { entrypoint: toCommand(podman.entrypoint)! } : {}),\n      containerPort,\n      publish: podman.publish ?? [],\n      volumes: podman.volumes ?? [],\n      labels: this.normalizeEnv(podman.labels ?? {}),\n      env: this.normalizeEnv(podman.env ?? {}),\n      user: podman.user ?? '',\n      workdir: podman.workdir ?? '',\n      restartPolicy: podman.restartPolicy ?? 'unless-stopped',\n      networkAliases: podman.networkAliases ?? [],\n      extraArgs: podman.extraArgs ?? []\n    }\n  }\n\n  private dedupeRoutes(routes: readonly string[]): readonly string[] {\n    const seen = new Set<string>()\n    const output: string[] = []\n    for (const route of routes) {\n      const normalized = route.startsWith('/') ? (route === '/' ? '/' : `/${route.replace(/^\\/+|\\/+$/g, '')}`) : route\n      if (seen.has(normalized)) continue\n      seen.add(normalized)\n      output.push(normalized)\n    }\n    output.sort((a, b) => b.length - a.length || a.localeCompare(b))\n    return output\n  }\n\n  private slug(value: string): string {\n    const slug = value.toLowerCase().replace(/[^a-z0-9_-]+/g, '-').replace(/^-+|-+$/g, '')\n    return slug || 'mesh'\n  }\n\n  private normalizeCi(config: MeshConfig, services: ReadonlyMap<string, NormalizedMeshServiceConfig>): NormalizedMeshCiConfig {\n    const ci = config.ci ?? {}\n    const enabled = config.ci !== undefined\n\n    // Derive default backend envSecrets from the union of all backend/worker service env keys.\n    const derivedBackendSecrets = (): readonly string[] => {\n      const keys = new Set<string>()\n      for (const svc of services.values()) {\n        if (svc.type === 'backend' || svc.type === 'worker') {\n          for (const key of Object.keys(svc.env)) keys.add(key)\n        }\n      }\n      return [...keys].sort()\n    }\n\n    // Derive default frontend buildArgs from the frontend service's podman.env keys (VITE_* etc.).\n    const derivedFrontendArgs = (): readonly string[] => {\n      const keys = new Set<string>()\n      for (const svc of services.values()) {\n        if (svc.type === 'frontend') {\n          for (const key of Object.keys(svc.podman.env)) keys.add(key)\n        }\n      }\n      return [...keys].sort()\n    }\n\n    return {\n      enabled,\n      branch: ci.branch ?? 'main',\n      frontend: {\n        strategy: ci.frontend?.strategy ?? 'rsync',\n        buildArgs: ci.frontend?.buildArgs ?? derivedFrontendArgs()\n      },\n      backend: {\n        strategy: ci.backend?.strategy ?? 'podman',\n        envSecrets: ci.backend?.envSecrets ?? derivedBackendSecrets()\n      },\n      drs: {\n        enabled: ci.drs?.enabled ?? false\n      }\n    }\n  }\n\n  private normalizeEnv(env: Record<string, string | number | boolean | null | undefined>): Record<string, string> {\n    const normalized: Record<string, string> = {}\n    for (const [key, value] of Object.entries(env)) {\n      if (value === null || value === undefined) continue\n      normalized[key] = String(value)\n    }\n    return normalized\n  }\n\n  private normalizePortRange(range: MeshPortRange, field: string): MeshPortRange {\n    if (!Number.isInteger(range.from) || !Number.isInteger(range.to) || range.from < 1 || range.to > 65_535 || range.from > range.to) {\n      throw new MeshConfigError(`${field} must be a valid TCP port range.`)\n    }\n    return range\n  }\n\n  private assertConfig(config: MeshConfig): void {\n    if (!config || typeof config !== 'object') throw new MeshConfigError('Mesh config must be an object.')\n    if (!config.app || typeof config.app !== 'string') throw new MeshConfigError('Mesh config requires app name.')\n    if (!config.services || typeof config.services !== 'object') throw new MeshConfigError('Mesh config requires services.')\n  }\n}\n","import { MeshConfigError } from '../core/errors.js'\nimport type { MeshHsmSchemaLike } from '../core/types.js'\n\nexport class HsmSchemaValidator {\n  public assertValid(schema: unknown): asserts schema is MeshHsmSchemaLike {\n    if (!schema || typeof schema !== 'object' || Array.isArray(schema)) {\n      throw new MeshConfigError('hsm.schema must be an object compatible with a compiled @panomapp/hsm schema.')\n    }\n    const candidate = schema as MeshHsmSchemaLike\n    if (candidate.kind !== undefined && candidate.kind !== 'panom-hsm.schema') {\n      throw new MeshConfigError(`Unsupported hsm.schema kind: ${String(candidate.kind)}.`)\n    }\n    if (!candidate.index || typeof candidate.index !== 'object') {\n      throw new MeshConfigError('hsm.schema.index is required.')\n    }\n    if (!Array.isArray(candidate.index.states)) {\n      throw new MeshConfigError('hsm.schema.index.states must be an array.')\n    }\n    if (candidate.index.routes !== undefined && !Array.isArray(candidate.index.routes)) {\n      throw new MeshConfigError('hsm.schema.index.routes must be an array when provided.')\n    }\n    for (const [index, state] of candidate.index.states.entries()) {\n      if (!state || typeof state !== 'object' || typeof state.id !== 'string' || state.id.length === 0) {\n        throw new MeshConfigError(`hsm.schema.index.states[${index}].id must be a non-empty string.`)\n      }\n    }\n    for (const [index, route] of (candidate.index.routes ?? []).entries()) {\n      if (!route || typeof route !== 'object' || typeof route.stateId !== 'string' || route.stateId.length === 0) {\n        throw new MeshConfigError(`hsm.schema.index.routes[${index}].stateId must be a non-empty string.`)\n      }\n      const pattern = route.canonicalPattern ?? route.pattern\n      if (pattern !== undefined && (typeof pattern !== 'string' || !pattern.startsWith('/'))) {\n        throw new MeshConfigError(`hsm.schema.index.routes[${index}] pattern must start with /.`)\n      }\n    }\n  }\n}\n","import { MeshConfigError } from '../core/errors.js'\nimport type {\n  MeshHsmMappedRoute,\n  MeshHsmRouteMode,\n  MeshHsmSchemaLike,\n  MeshHsmSchemaStateIndexEntry,\n  MeshHsmServiceBinding,\n  MeshHsmServiceMapping,\n  MeshServiceConfig\n} from '../core/types.js'\nimport { HsmSchemaValidator } from './HsmSchemaValidator.js'\n\nexport interface HsmRouteMapperOptions {\n  readonly schema: MeshHsmSchemaLike\n  readonly routeMode: MeshHsmRouteMode\n  readonly strict: boolean\n  readonly mappings: readonly MeshHsmServiceMapping[]\n  readonly services: Record<string, MeshServiceConfig>\n}\n\nexport class HsmRouteMapper {\n  private readonly validator: HsmSchemaValidator = new HsmSchemaValidator()\n\n  public map(options: HsmRouteMapperOptions): readonly MeshHsmMappedRoute[] {\n    this.validator.assertValid(options.schema)\n    const routes: MeshHsmMappedRoute[] = []\n    const stateById = new Map<string, MeshHsmSchemaStateIndexEntry>()\n    for (const state of options.schema.index?.states ?? []) stateById.set(state.id, state)\n\n    const mappings = this.collectMappings(options.services, options.mappings)\n    for (const mapping of mappings) {\n      if (!options.services[mapping.service]) {\n        if (options.strict) throw new MeshConfigError(`HSM mapping references unknown mesh service: ${mapping.service}`)\n        continue\n      }\n      const selectedStates = this.selectStates(stateById, mapping)\n      if (selectedStates.length === 0 && options.strict) {\n        throw new MeshConfigError(`HSM mapping for service \"${mapping.service}\" matched no states.`)\n      }\n      const selectedIds = new Set(selectedStates.map(state => state.id))\n      if (this.includeCanonical(mapping, options.routeMode)) {\n        for (const route of options.schema.index?.routes ?? []) {\n          if (!selectedIds.has(route.stateId)) continue\n          if (route.kind === 'virtual') continue\n          if (route.isAlias && route.redirectToCanonical) continue\n          const pattern = route.canonicalPattern ?? route.pattern\n          if (!pattern) continue\n          routes.push(this.toMappedRoute(mapping, 'hsm:canonical', route.stateId, pattern))\n        }\n      }\n      if (this.includeBackend(mapping, options.routeMode)) {\n        for (const state of selectedStates) {\n          for (const route of state.backend?.routes ?? []) {\n            routes.push(this.toMappedRoute(mapping, 'hsm:backend', state.id, route, state.backend?.methods))\n          }\n        }\n      }\n    }\n\n    return this.dedupe(routes)\n  }\n\n  public summarize(routes: readonly MeshHsmMappedRoute[]): string {\n    if (routes.length === 0) return 'No HSM routes mapped.\\n'\n    const rows = routes.map(route => ({\n      service: route.service,\n      route: route.route,\n      source: route.source,\n      state: route.stateId,\n      methods: route.methods?.join(',') ?? '-'\n    }))\n    const headers = ['SERVICE', 'ROUTE', 'SOURCE', 'STATE', 'METHODS']\n    const keys = ['service', 'route', 'source', 'state', 'methods'] as const\n    const widths = keys.map((key, index) => Math.max(headers[index]!.length, ...rows.map(row => row[key].length)))\n    const fmt = (values: readonly string[]) => values.map((value, index) => value.padEnd(widths[index]!)).join('  ')\n    return `${fmt(headers)}\\n${fmt(widths.map(w => '-'.repeat(w)))}\\n${rows.map(row => fmt(keys.map(key => row[key]))).join('\\n')}\\n`\n  }\n\n  private collectMappings(services: Record<string, MeshServiceConfig>, topLevel: readonly MeshHsmServiceMapping[]): readonly MeshHsmServiceMapping[] {\n    const mappings: MeshHsmServiceMapping[] = [...topLevel]\n    for (const [service, config] of Object.entries(services)) {\n      if (!config.hsm) continue\n      mappings.push({ service, ...config.hsm })\n    }\n    return mappings\n  }\n\n  private selectStates(stateById: Map<string, MeshHsmSchemaStateIndexEntry>, mapping: MeshHsmServiceMapping): readonly MeshHsmSchemaStateIndexEntry[] {\n    const states = Array.from(stateById.values())\n    const selectors = mapping.states ?? []\n    const tags = new Set(mapping.tags ?? [])\n    if (selectors.length === 0 && tags.size === 0) return []\n    return states.filter(state => {\n      const byState = selectors.some(selector => this.matchesStateSelector(state.id, selector))\n      const byTag = (state.tags ?? []).some(tag => tags.has(tag))\n      return byState || byTag\n    })\n  }\n\n  private matchesStateSelector(stateId: string, selector: string): boolean {\n    if (selector === stateId) return true\n    if (selector.endsWith('.*')) return stateId.startsWith(selector.slice(0, -2) + '.')\n    return false\n  }\n\n  private includeCanonical(mapping: MeshHsmServiceBinding, mode: MeshHsmRouteMode): boolean {\n    if (mapping.includeCanonicalRoutes !== undefined) return mapping.includeCanonicalRoutes\n    return mode === 'canonical' || mode === 'both'\n  }\n\n  private includeBackend(mapping: MeshHsmServiceBinding, mode: MeshHsmRouteMode): boolean {\n    if (mapping.includeBackendRoutes !== undefined) return mapping.includeBackendRoutes\n    return mode === 'backend' || mode === 'both'\n  }\n\n  private toMappedRoute(\n    mapping: MeshHsmServiceMapping,\n    source: MeshHsmMappedRoute['source'],\n    stateId: string,\n    pattern: string,\n    methods?: readonly string[]\n  ): MeshHsmMappedRoute {\n    const transformed = this.applyRouteTransforms(pattern, mapping)\n    const effectiveMethods = mapping.methods ?? methods\n    const mapped: MeshHsmMappedRoute = {\n      service: mapping.service,\n      route: this.toRoutablePattern(transformed),\n      source,\n      stateId,\n      originalPattern: pattern\n    }\n    return effectiveMethods === undefined ? mapped : { ...mapped, methods: effectiveMethods }\n  }\n\n  private applyRouteTransforms(route: string, mapping: MeshHsmServiceMapping): string {\n    let output = this.normalizePattern(route)\n    if (mapping.stripPrefix) {\n      const prefix = this.normalizePattern(mapping.stripPrefix)\n      if (output === prefix) output = '/'\n      else if (output.startsWith(`${prefix}/`)) output = output.slice(prefix.length) || '/'\n    }\n    if (mapping.routePrefix) {\n      const prefix = this.normalizePattern(mapping.routePrefix)\n      if (prefix !== '/') output = output === '/' ? prefix : `${prefix}${output}`\n    }\n    return this.normalizePattern(output)\n  }\n\n  private toRoutablePattern(pattern: string): string {\n    const normalized = this.normalizePattern(pattern)\n    if (normalized === '/') return '/'\n    return normalized\n  }\n\n  private normalizePattern(route: string): string {\n    const trimmed = route.trim()\n    if (!trimmed || !trimmed.startsWith('/')) throw new MeshConfigError(`HSM route pattern must start with /: ${route}`)\n    if (trimmed === '/') return '/'\n    return `/${trimmed.replace(/^\\/+|\\/+$/g, '')}`\n  }\n\n  private dedupe(routes: readonly MeshHsmMappedRoute[]): readonly MeshHsmMappedRoute[] {\n    const seen = new Set<string>()\n    const output: MeshHsmMappedRoute[] = []\n    for (const route of routes) {\n      const key = `${route.service}:${route.route}:${route.source}:${route.stateId}:${route.methods?.join(',') ?? '*'}`\n      if (seen.has(key)) continue\n      seen.add(key)\n      output.push(route)\n    }\n    output.sort((a, b) => a.service.localeCompare(b.service) || b.route.length - a.route.length || a.route.localeCompare(b.route))\n    return output\n  }\n}\n","export function formatOrigin(protocol: 'http' | 'https', host: string, port: number): string {\n  const defaultPort = protocol === 'https' ? 443 : 80\n  return port === defaultPort ? `${protocol}://${host}` : `${protocol}://${host}:${port}`\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { createJiti } from 'jiti'\nimport { MeshConfigError } from '../core/errors.js'\nimport type { MeshConfig, MeshHsmSchemaLike } from '../core/types.js'\nimport { HsmSchemaValidator } from './HsmSchemaValidator.js'\n\nexport class HsmSchemaLoader {\n  private readonly validator: HsmSchemaValidator = new HsmSchemaValidator()\n\n  public async hydrateConfig(config: MeshConfig, configPath: string): Promise<MeshConfig> {\n    const hsm = config.hsm\n    if (!hsm?.schemaPath || hsm.schema) return config\n    const schema = await this.loadSchema(path.resolve(path.dirname(configPath), hsm.schemaPath))\n    return {\n      ...config,\n      hsm: {\n        ...hsm,\n        schema\n      }\n    }\n  }\n\n  public async loadSchema(schemaPath: string): Promise<MeshHsmSchemaLike> {\n    if (!fs.existsSync(schemaPath)) throw new MeshConfigError(`HSM schema file not found: ${schemaPath}`)\n    let loaded: unknown\n    if (schemaPath.endsWith('.json')) {\n      loaded = JSON.parse(await fs.promises.readFile(schemaPath, 'utf8'))\n    } else {\n      const jiti = createJiti(schemaPath, { interopDefault: true })\n      const mod = await jiti.import(schemaPath)\n      loaded = (mod as { default?: unknown }).default ?? mod\n    }\n    this.validator.assertValid(loaded)\n    return loaded\n  }\n}\n","import { MeshIdResolutionError } from '../core/errors.js'\nimport type { MeshInstanceRecord } from '../core/types.js'\n\nexport class InstanceIdResolver {\n  public resolve(instances: readonly MeshInstanceRecord[], prefix: string): MeshInstanceRecord {\n    const normalized = prefix.trim()\n    if (!normalized) throw new MeshIdResolutionError('Instance id prefix is required.')\n\n    const matches = instances.filter(instance => instance.id.startsWith(normalized) || instance.id.includes(normalized))\n    if (matches.length === 0) throw new MeshIdResolutionError(`No instance matches \"${prefix}\".`)\n    if (matches.length > 1) {\n      throw new MeshIdResolutionError(`Ambiguous instance id \"${prefix}\": ${matches.map(match => match.id).join(', ')}`)\n    }\n    return matches[0]!\n  }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { ensureDir } from '../utils/fs.js'\n\nexport class LogStore {\n  public constructor(private readonly logsDir: string) {}\n\n  public getLogPath(instanceId: string): string {\n    return path.join(this.logsDir, `${instanceId}.log`)\n  }\n\n  public async createStream(instanceId: string): Promise<fs.WriteStream> {\n    await ensureDir(this.logsDir)\n    return fs.createWriteStream(this.getLogPath(instanceId), { flags: 'a' })\n  }\n\n  public async readLastLines(logFile: string, lines: number): Promise<string> {\n    try {\n      const text = await fs.promises.readFile(logFile, 'utf8')\n      return text.split(/\\r?\\n/).slice(-Math.max(1, lines)).join('\\n')\n    } catch {\n      return ''\n    }\n  }\n\n  public tail(logFile: string, onChunk: (chunk: string) => void): () => void {\n    let position = 0\n    let closed = false\n\n    const readNew = async (): Promise<void> => {\n      if (closed) return\n      try {\n        const stat = await fs.promises.stat(logFile)\n        if (stat.size < position) position = 0\n        if (stat.size === position) return\n        const handle = await fs.promises.open(logFile, 'r')\n        const buffer = Buffer.alloc(stat.size - position)\n        await handle.read(buffer, 0, buffer.length, position)\n        await handle.close()\n        position = stat.size\n        onChunk(buffer.toString('utf8'))\n      } catch {\n        // log file can be created after tail starts\n      }\n    }\n\n    void readNew()\n    const interval = setInterval(() => void readNew(), 500)\n    return () => {\n      closed = true\n      clearInterval(interval)\n    }\n  }\n}\n","import process from 'node:process'\nimport type { ChildProcess } from 'node:child_process'\nimport { spawn } from 'node:child_process'\nimport type { MeshRunOptions, NormalizedMeshConfig, MeshInstanceRecord } from '../core/types.js'\nimport { LogStore } from '../logs/LogStore.js'\nimport { nowIso } from '../utils/time.js'\nimport { ProcessInstanceSpawner } from '../process/ProcessInstanceSpawner.js'\nimport { ProcessTakeover } from '../process/ProcessTakeover.js'\nimport { MeshIdFactory } from '../ids/MeshIdFactory.js'\nimport { RegistryFactory } from '../registry/RegistryFactory.js'\nimport { HeartbeatLoop } from '../registry/HeartbeatLoop.js'\nimport type { MeshRegistry } from '../registry/types.js'\nimport { sleep } from '../utils/time.js'\nimport { MeshStreamFactory } from '../streaming/MeshStreamFactory.js'\nimport type { MeshStreamPublisher } from '../streaming/types.js'\n\ninterface ManagedChild {\n  readonly record: MeshInstanceRecord\n  readonly child: ChildProcess\n  readonly heartbeat: HeartbeatLoop\n}\n\nexport class MeshProcessSupervisor {\n  private readonly logStore: LogStore\n  private readonly spawner: ProcessInstanceSpawner\n  private readonly registry: MeshRegistry\n  private readonly children = new Map<string, ManagedChild>()\n  private readonly ids = new MeshIdFactory()\n  private readonly streamPublisher: MeshStreamPublisher | null\n  private readonly takeover = new ProcessTakeover()\n  private stopping = false\n\n  public constructor(private readonly config: NormalizedMeshConfig) {\n    this.logStore = new LogStore(config.runtime.logsDir)\n    this.registry = new RegistryFactory().create(config)\n    this.streamPublisher = new MeshStreamFactory().createPublisher(config)\n    this.spawner = new ProcessInstanceSpawner(config, this.logStore, this.streamPublisher)\n  }\n\n  public async run(options: MeshRunOptions = {}): Promise<void> {\n    const services = this.selectServices(options)\n    await this.reconcilePreexistingInstances(services, options)\n    for (const service of services) {\n      const count = options.instances ?? service.instances\n      for (let index = 0; index < count; index += 1) {\n        const managed = await this.registerManaged(await this.spawner.spawn(service, index))\n        this.children.set(managed.record.id, managed)\n        this.bindExit(managed)\n        if (options.watch ?? service.watch) this.pipeToConsole(managed)\n      }\n    }\n\n    if (this.shouldStartRouter(options, services)) {\n      const router = await this.registerManaged(await this.spawnRouter(options.cliPath))\n      this.children.set(router.record.id, router)\n      this.bindExit(router)\n      if (options.watch ?? this.config.runtime.defaultWatch) this.pipeToConsole(router)\n    }\n\n    if (options.detach) return\n    this.installSignalHandlers()\n    await this.waitForever()\n  }\n\n  private async registerManaged(spawned: { record: MeshInstanceRecord; child: ChildProcess }): Promise<ManagedChild> {\n    const record = await this.registry.register(spawned.record, { ttlMs: this.config.registry.ttlMs })\n    await this.streamPublisher?.publish({ kind: 'lifecycle', type: 'mesh.instance.started', instanceId: record.id, service: record.service, payload: { status: 'running', metadata: record.metadata } })\n    const heartbeat = new HeartbeatLoop(this.registry, record.id, this.config.registry.heartbeatIntervalMs, this.config.registry.ttlMs)\n    heartbeat.start()\n    return { record, child: spawned.child, heartbeat }\n  }\n\n  private selectServices(options: MeshRunOptions) {\n    const all = Array.from(this.config.services.values())\n    if (options.all || !options.services || options.services.length === 0) return all.filter(service => service.instances > 0)\n    const selected = new Set(options.services)\n    const missing = Array.from(selected).filter(name => !this.config.services.has(name))\n    if (missing.length > 0) throw new Error(`Unknown mesh service(s): ${missing.join(', ')}`)\n    return all.filter(service => selected.has(service.name) && service.instances > 0)\n  }\n\n  private shouldStartRouter(options: MeshRunOptions, services: readonly { routes: readonly string[] }[]): boolean {\n    if (!this.config.router.enabled) return false\n    if (options.router === false) return false\n    return services.some(service => service.routes.length > 0)\n  }\n\n  private async reconcilePreexistingInstances(\n    services: readonly { name: string; port?: number; routes: readonly string[] }[],\n    options: MeshRunOptions\n  ): Promise<void> {\n    const existing = await this.registry.list({ includeExpired: true })\n    const serviceNames = new Set(services.map(service => service.name))\n    const shouldStartRouter = this.shouldStartRouter(options, services)\n\n    for (const instance of existing) {\n      const shouldReconcile = instance.service === 'router'\n        ? shouldStartRouter\n        : serviceNames.has(instance.service)\n      if (!shouldReconcile) continue\n\n      let portReleased = instance.port === null\n      if (instance.port !== null) {\n        await this.takeover.forceFreePort(instance.port, { label: `${instance.service} instance ${instance.id} port ${instance.port}` })\n        portReleased = true\n      }\n      if (instance.pid && this.isAlive(instance.pid) && !portReleased) {\n        const canProveOwnership = await this.canSafelyTerminateInstancePid(instance)\n        if (canProveOwnership) {\n          await this.takeover.killPid(instance.pid, { label: `${instance.service} instance ${instance.id}` })\n        } else {\n          console.warn(`[mesh] skipping stale pid cleanup for ${instance.id}; process is alive but no longer provably owned by mesh`)\n        }\n      }\n      await this.registry.unregister(instance.id).catch(() => undefined)\n    }\n  }\n\n  private async spawnRouter(cliPath?: string): Promise<{ record: MeshInstanceRecord; child: ChildProcess }> {\n    const id = this.ids.createInstanceId('router')\n    const resolvedCliPath = cliPath ?? process.argv[1]\n    if (!resolvedCliPath) {\n      throw new Error('Cannot start mesh router automatically without a CLI path. Use the mesh CLI or run MeshRouterServer directly.')\n    }\n    await this.takeover.forceFreePort(this.config.router.port, { label: `router port ${this.config.router.port}` })\n    const logFile = this.logStore.getLogPath(id)\n    const logStream = await this.logStore.createStream(id)\n    const command = [process.execPath, resolvedCliPath, 'router', '--config', this.config.configPath]\n    const child = spawn(process.execPath, [resolvedCliPath, 'router', '--config', this.config.configPath], {\n      cwd: this.config.projectRoot,\n      env: {\n        ...process.env,\n        MESH_APP: this.config.app,\n        MESH_SERVICE: 'router',\n        MESH_SERVICE_TYPE: 'router',\n        MESH_INSTANCE_ID: id,\n        MESH_REGISTRY_TYPE: this.config.registry.type,\n        MESH_REGISTRY_URL: this.config.registry.url,\n        PORT: String(this.config.router.port),\n        MESH_PORT: String(this.config.router.port)\n      },\n      stdio: ['ignore', 'pipe', 'pipe']\n    })\n    child.stdout?.pipe(logStream, { end: false })\n    child.stderr?.pipe(logStream, { end: false })\n    child.stdout?.on('data', chunk => {\n      void this.streamPublisher?.publishLog({ instanceId: id, service: 'router', serviceType: 'router', stream: 'stdout', chunk, source: 'router' })\n    })\n    child.stderr?.on('data', chunk => {\n      void this.streamPublisher?.publishLog({ instanceId: id, service: 'router', serviceType: 'router', stream: 'stderr', chunk, source: 'router' })\n    })\n    child.once('exit', () => logStream.end())\n    const record: MeshInstanceRecord = {\n      id,\n      service: 'router',\n      serviceType: 'router',\n      status: 'running',\n      pid: child.pid ?? null,\n      port: this.config.router.port,\n      host: this.config.router.host,\n      url: this.config.router.publicOrigin,\n      command,\n      cwd: this.config.projectRoot,\n      logFile,\n      startedAt: nowIso(),\n      metadata: {\n        meshApp: this.config.app,\n        role: 'mesh-router',\n        publicOrigins: this.config.router.publicOrigins,\n        listenerPorts: [this.config.router.port, ...this.config.router.tls.additionalPorts],\n      }\n    }\n    return { record, child }\n  }\n\n  private bindExit(managed: ManagedChild): void {\n    managed.child.once('exit', async (code, signal) => {\n      managed.heartbeat.stop()\n      this.children.delete(managed.record.id)\n      if (code === 0 || this.stopping) {\n        await this.streamPublisher?.publish({ kind: 'lifecycle', type: 'mesh.instance.stopped', instanceId: managed.record.id, service: managed.record.service, payload: { status: 'stopped', exitCode: code, signal } }).catch(() => undefined)\n        await this.registry.unregister(managed.record.id).catch(() => undefined)\n        return\n      }\n      await this.streamPublisher?.publish({ kind: 'lifecycle', type: 'mesh.instance.failed', instanceId: managed.record.id, service: managed.record.service, payload: { status: 'failed', exitCode: code, signal } }).catch(() => undefined)\n      await this.registry.heartbeat(managed.record.id, {\n        ttlMs: this.config.registry.ttlMs,\n        patch: {\n          status: 'failed',\n          stoppedAt: nowIso(),\n          exitCode: code,\n          signal\n        }\n      }).catch(() => undefined)\n    })\n  }\n\n  private pipeToConsole(managed: ManagedChild): void {\n    const prefix = `[${managed.record.id}] `\n    managed.child.stdout?.on('data', chunk => process.stdout.write(this.prefixChunk(prefix, chunk)))\n    managed.child.stderr?.on('data', chunk => process.stderr.write(this.prefixChunk(prefix, chunk)))\n  }\n\n  private prefixChunk(prefix: string, chunk: Buffer): string {\n    return chunk.toString('utf8').split(/(?<=\\n)/).map(line => line.length ? `${prefix}${line}` : line).join('')\n  }\n\n  private installSignalHandlers(): void {\n    const stop = (): void => {\n      void this.stopAll()\n    }\n    process.once('SIGINT', stop)\n    process.once('SIGTERM', stop)\n  }\n\n  public async stopAll(): Promise<void> {\n    if (this.stopping) return\n    this.stopping = true\n    const children = Array.from(this.children.values())\n\n    for (const managed of children) {\n      managed.heartbeat.stop()\n      await this.streamPublisher?.publish({ kind: 'lifecycle', type: 'mesh.instance.draining', instanceId: managed.record.id, service: managed.record.service, payload: { status: 'draining' } }).catch(() => undefined)\n      await this.registry.markDraining(managed.record.id).catch(() => undefined)\n    }\n\n    await sleep(this.config.runtime.drainTimeoutMs)\n\n    for (const managed of children) {\n      if (!this.hasExited(managed.child)) managed.child.kill('SIGTERM')\n    }\n\n    const graceful = await this.waitForChildren(children, this.config.runtime.shutdownTimeoutMs)\n    if (!graceful) {\n      for (const managed of children) {\n        if (!this.hasExited(managed.child)) managed.child.kill('SIGKILL')\n      }\n      await this.waitForChildren(children, this.config.runtime.killTimeoutMs)\n    }\n\n    for (const managed of children) {\n      await this.registry.unregister(managed.record.id).catch(() => undefined)\n    }\n    process.exitCode = 0\n  }\n\n  private hasExited(child: ChildProcess): boolean {\n    return child.exitCode !== null || child.signalCode !== null\n  }\n\n  private isAlive(pid: number): boolean {\n    try {\n      process.kill(pid, 0)\n      return true\n    } catch {\n      return false\n    }\n  }\n\n  private async canSafelyTerminateInstancePid(instance: MeshInstanceRecord): Promise<boolean> {\n    if (!instance.pid) return false\n    if (instance.port !== null) {\n      const ownsPort = await this.takeover.pidOwnsListeningPort(instance.pid, instance.port)\n      if (ownsPort) return true\n    }\n    return await this.takeover.processMatchesRecord(instance.pid, instance)\n  }\n\n  private async waitForChildren(children: readonly ManagedChild[], timeoutMs: number): Promise<boolean> {\n    const deadline = Date.now() + timeoutMs\n    while (Date.now() < deadline) {\n      if (children.every(managed => this.hasExited(managed.child))) return true\n      await sleep(100)\n    }\n    return children.every(managed => this.hasExited(managed.child))\n  }\n\n  private async waitForever(): Promise<void> {\n    await new Promise<void>(() => undefined)\n  }\n}\n","export function nowIso(): string {\n  return new Date().toISOString()\n}\n\nexport function formatDurationSince(iso: string): string {\n  const started = new Date(iso).getTime()\n  const diff = Math.max(0, Date.now() - started)\n  const seconds = Math.floor(diff / 1000)\n  if (seconds < 60) return `${seconds}s`\n  const minutes = Math.floor(seconds / 60)\n  if (minutes < 60) return `${minutes}m`\n  const hours = Math.floor(minutes / 60)\n  if (hours < 24) return `${hours}h`\n  const days = Math.floor(hours / 24)\n  return `${days}d`\n}\n\nexport async function sleep(ms: number): Promise<void> {\n  if (ms <= 0) return\n  await new Promise<void>(resolve => setTimeout(resolve, ms))\n}\n","import { spawn, type ChildProcess } from 'node:child_process'\nimport type { NormalizedMeshConfig, NormalizedMeshServiceConfig, MeshInstanceRecord } from '../core/types.js'\nimport { MeshIdFactory } from '../ids/MeshIdFactory.js'\nimport { LogStore } from '../logs/LogStore.js'\nimport { nowIso } from '../utils/time.js'\nimport { PortAllocator } from './PortAllocator.js'\nimport { ProcessTakeover } from './ProcessTakeover.js'\nimport type { MeshStreamPublisher } from '../streaming/types.js'\n\nexport interface SpawnedMeshInstance {\n  readonly record: MeshInstanceRecord\n  readonly child: ChildProcess\n}\n\nexport class ProcessInstanceSpawner {\n  private readonly ids = new MeshIdFactory()\n  private readonly ports = new PortAllocator()\n  private readonly takeover = new ProcessTakeover()\n\n  public constructor(\n    private readonly config: NormalizedMeshConfig,\n    private readonly logStore: LogStore,\n    private readonly streamPublisher: MeshStreamPublisher | null = null\n  ) {}\n\n  public async spawn(service: NormalizedMeshServiceConfig, index: number): Promise<SpawnedMeshInstance> {\n    const id = this.ids.createInstanceId(service.name)\n    if (service.type !== 'worker' && service.port !== undefined) {\n      await this.takeover.forceFreePort(service.port, { label: `${service.name} preferred port ${service.port}` })\n    }\n    const port = service.type === 'worker'\n      ? null\n      : await this.ports.reservePreferred(index === 0 ? service.port : undefined, service.portRange)\n    const logFile = this.logStore.getLogPath(id)\n    const logStream = await this.logStore.createStream(id)\n    const env = this.buildEnv(service, id, port, index)\n    const [command, ...args] = service.command\n\n    const child = spawn(command!, args, {\n      cwd: service.cwd,\n      env,\n      shell: service.shell,\n      stdio: ['ignore', 'pipe', 'pipe']\n    })\n\n    child.stdout?.pipe(logStream, { end: false })\n    child.stderr?.pipe(logStream, { end: false })\n    child.stdout?.on('data', chunk => {\n      void this.streamPublisher?.publishLog({ instanceId: id, service: service.name, serviceType: service.type, stream: 'stdout', chunk, source: 'process' })\n    })\n    child.stderr?.on('data', chunk => {\n      void this.streamPublisher?.publishLog({ instanceId: id, service: service.name, serviceType: service.type, stream: 'stderr', chunk, source: 'process' })\n    })\n\n    const record: MeshInstanceRecord = {\n      id,\n      service: service.name,\n      serviceType: service.type,\n      status: 'running',\n      pid: child.pid ?? null,\n      port,\n      host: this.config.router.host,\n      url: port === null ? null : `http://${this.config.router.host}:${port}`,\n      command: service.command,\n      cwd: service.cwd,\n      logFile,\n      startedAt: nowIso(),\n      metadata: {\n        index,\n        routes: service.routes,\n        hsmRoutes: service.hsmRoutes,\n        strategy: service.strategy,\n        healthPath: service.healthPath,\n        meshApp: this.config.app\n      }\n    }\n\n    child.once('exit', () => {\n      logStream.end()\n    })\n\n    return { record, child }\n  }\n\n  private buildEnv(\n    service: NormalizedMeshServiceConfig,\n    instanceId: string,\n    port: number | null,\n    index: number\n  ): NodeJS.ProcessEnv {\n    return {\n      ...process.env,\n      ...service.env,\n      MESH_APP: this.config.app,\n      MESH_SERVICE: service.name,\n      MESH_SERVICE_TYPE: service.type,\n      MESH_INSTANCE_ID: instanceId,\n      MESH_INSTANCE_INDEX: String(index),\n      MESH_REGISTRY_TYPE: this.config.registry.type,\n      MESH_REGISTRY_URL: this.config.registry.url,\n      MESH_REGISTRY_TTL_MS: String(this.config.registry.ttlMs),\n      MESH_HEARTBEAT_INTERVAL_MS: String(this.config.registry.heartbeatIntervalMs),\n      MESH_ROUTER_HOST: this.config.router.host,\n      MESH_ROUTER_PORT: String(this.config.router.port),\n      ...(port === null ? {} : { PORT: String(port), MESH_PORT: String(port) })\n    }\n  }\n}\n","import crypto from 'node:crypto'\n\nexport class MeshIdFactory {\n  public createInstanceId(service: string): string {\n    const suffix = crypto.randomBytes(3).toString('hex')\n    return `${service}-${suffix}`\n  }\n}\n","import net from 'node:net'\nimport type { MeshPortRange } from '../core/types.js'\n\nexport class PortAllocator {\n  private readonly reserved = new Set<number>()\n\n  public async reservePreferred(preferred: number | undefined, range: MeshPortRange): Promise<number> {\n    if (preferred !== undefined && !this.reserved.has(preferred) && await this.isAvailable(preferred)) {\n      this.reserved.add(preferred)\n      return preferred\n    }\n\n    for (let port = range.from; port <= range.to; port += 1) {\n      if (this.reserved.has(port)) continue\n      if (await this.isAvailable(port)) {\n        this.reserved.add(port)\n        return port\n      }\n    }\n\n    throw new Error(`No available port in range ${range.from}-${range.to}.`)\n  }\n\n  private async isAvailable(port: number): Promise<boolean> {\n    return await this.canBind(port, '::') && await this.canBind(port, '0.0.0.0')\n  }\n\n  private async canBind(port: number, host: string): Promise<boolean> {\n    return new Promise(resolve => {\n      const server = net.createServer()\n      server.unref()\n      server.once('error', () => resolve(false))\n      server.once('listening', () => {\n        server.close(() => resolve(true))\n      })\n      server.listen({ port, host, exclusive: true })\n    })\n  }\n}\n","import { execFile } from 'node:child_process'\nimport net from 'node:net'\nimport { promisify } from 'node:util'\nimport type { MeshInstanceRecord } from '../core/types.js'\nimport { sleep } from '../utils/time.js'\n\nconst execFileAsync = promisify(execFile)\n\nexport interface ProcessTakeoverOptions {\n  readonly label?: string\n  readonly timeoutMs?: number\n  readonly quiet?: boolean\n}\n\nexport class ProcessTakeover {\n  public async forceFreePort(port: number, options: ProcessTakeoverOptions = {}): Promise<void> {\n    const timeoutMs = options.timeoutMs ?? 2_500\n    const deadline = Date.now() + timeoutMs\n    const label = options.label ?? `port ${port}`\n\n    while (Date.now() < deadline) {\n      const listeners = await this.listListeningPids(port)\n      if (listeners.length === 0) {\n        if (await this.isAvailable(port)) return\n        await sleep(100)\n        continue\n      }\n\n      if (!options.quiet) {\n        console.warn(`[mesh] force-freeing ${label} from PIDs: ${listeners.join(', ')}`)\n      }\n\n      await this.signalPids(listeners, 'SIGTERM')\n      await sleep(250)\n\n      const remaining = await this.listListeningPids(port)\n      if (remaining.length === 0 && await this.isAvailable(port)) return\n\n      if (remaining.length > 0) {\n        await this.signalPids(remaining, 'SIGKILL')\n        await sleep(250)\n      }\n\n      const afterKill = await this.listListeningPids(port)\n      if (afterKill.length === 0 && await this.isAvailable(port)) return\n    }\n\n    throw new Error(`Mesh could not free ${label}. Another process is still bound after aggressive termination attempts.`)\n  }\n\n  public async killPid(pid: number, options: ProcessTakeoverOptions = {}): Promise<void> {\n    const timeoutMs = options.timeoutMs ?? 2_500\n    const deadline = Date.now() + timeoutMs\n    const label = options.label ?? `pid ${pid}`\n    let warned = false\n\n    while (Date.now() < deadline) {\n      if (!this.isAlive(pid)) return\n      if (!options.quiet && !warned) {\n        console.warn(`[mesh] terminating ${label}`)\n        warned = true\n      }\n      try {\n        process.kill(pid, 'SIGTERM')\n      } catch {\n        return\n      }\n      await sleep(250)\n      if (!this.isAlive(pid)) return\n      try {\n        process.kill(pid, 'SIGKILL')\n      } catch {\n        return\n      }\n      await sleep(250)\n    }\n\n    if (this.isAlive(pid)) {\n      throw new Error(`Mesh could not terminate ${label}.`)\n    }\n  }\n\n  public async pidOwnsListeningPort(pid: number, port: number): Promise<boolean> {\n    const listeners = await this.listListeningPids(port)\n    return listeners.includes(pid)\n  }\n\n  public async processMatchesRecord(pid: number, record: Pick<MeshInstanceRecord, 'command' | 'cwd'>): Promise<boolean> {\n    const commandLine = await this.readCommandLine(pid)\n    if (!commandLine) return false\n\n    const expectedTokens = record.command\n      .map(token => token.trim())\n      .filter(Boolean)\n      .filter(token => !token.startsWith('--'))\n      .slice(0, 3)\n\n    if (expectedTokens.length > 0 && !expectedTokens.every(token => commandLine.includes(token))) {\n      return false\n    }\n\n    if (record.cwd) {\n      const cwd = await this.readWorkingDirectory(pid)\n      if (cwd && cwd !== record.cwd) return false\n    }\n\n    return true\n  }\n\n  public async listListeningPids(port: number): Promise<number[]> {\n    try {\n      const { stdout } = await execFileAsync('lsof', ['-nP', '-tiTCP:' + String(port), '-sTCP:LISTEN'])\n      return Array.from(new Set(stdout.split(/\\s+/).map(value => Number(value.trim())).filter(value => Number.isInteger(value) && value > 0)))\n    } catch {\n      return []\n    }\n  }\n\n  private async readCommandLine(pid: number): Promise<string | null> {\n    try {\n      const { stdout } = await execFileAsync('ps', ['-p', String(pid), '-o', 'command='])\n      const value = stdout.trim()\n      return value.length > 0 ? value : null\n    } catch {\n      return null\n    }\n  }\n\n  private async readWorkingDirectory(pid: number): Promise<string | null> {\n    try {\n      const { stdout } = await execFileAsync('lsof', ['-a', '-d', 'cwd', '-p', String(pid), '-Fn'])\n      const line = stdout.split('\\n').find(entry => entry.startsWith('n'))\n      return line ? line.slice(1) : null\n    } catch {\n      return null\n    }\n  }\n\n  public async isAvailable(port: number): Promise<boolean> {\n    return await this.canBind(port, '::') && await this.canBind(port, '0.0.0.0')\n  }\n\n  private async signalPids(pids: readonly number[], signal: NodeJS.Signals): Promise<void> {\n    for (const pid of pids) {\n      try {\n        process.kill(pid, signal)\n      } catch {\n        // ignore races with already exited processes\n      }\n    }\n  }\n\n  private async canBind(port: number, host: string): Promise<boolean> {\n    return await new Promise<boolean>(resolve => {\n      const server = net.createServer()\n      server.unref()\n      server.once('error', () => resolve(false))\n      server.once('listening', () => {\n        server.close(() => resolve(true))\n      })\n      server.listen({ port, host, exclusive: true })\n    })\n  }\n\n  private isAlive(pid: number): boolean {\n    try {\n      process.kill(pid, 0)\n      return true\n    } catch {\n      return false\n    }\n  }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { MeshStateError } from '../core/errors.js'\nimport type { MeshInstanceRecord, MeshStateFile } from '../core/types.js'\nimport { atomicWriteJson, ensureDir, pathExists } from '../utils/fs.js'\nimport { nowIso } from '../utils/time.js'\n\nexport class MeshStateStore {\n  public constructor(\n    private readonly app: string,\n    private readonly stateDir: string\n  ) {}\n\n  public get statePath(): string {\n    return path.join(this.stateDir, 'state.json')\n  }\n\n  public async read(): Promise<MeshStateFile> {\n    if (!(await pathExists(this.statePath))) {\n      return this.empty()\n    }\n    try {\n      const text = await fs.promises.readFile(this.statePath, 'utf8')\n      const parsed = this.parseState(text)\n      if (parsed.version !== 1) throw new MeshStateError(`Unsupported mesh state version: ${String(parsed.version)}`)\n      return parsed\n    } catch (error) {\n      if (error instanceof SyntaxError) {\n        const recovered = await this.recoverCorruptedState()\n        if (recovered) return recovered\n      }\n      if (error instanceof MeshStateError) throw error\n      throw new MeshStateError(`Failed to read mesh state: ${(error as Error).message}`)\n    }\n  }\n\n  public async write(instances: readonly MeshInstanceRecord[]): Promise<void> {\n    await ensureDir(this.stateDir)\n    await atomicWriteJson(this.statePath, {\n      version: 1,\n      app: this.app,\n      updatedAt: nowIso(),\n      instances\n    } satisfies MeshStateFile)\n  }\n\n  public async upsert(instance: MeshInstanceRecord): Promise<void> {\n    const state = await this.read()\n    const others = state.instances.filter(item => item.id !== instance.id)\n    await this.write([...others, instance])\n  }\n\n  public async update(instanceId: string, patch: Partial<MeshInstanceRecord>): Promise<MeshInstanceRecord> {\n    const state = await this.read()\n    const current = state.instances.find(item => item.id === instanceId)\n    if (!current) throw new MeshStateError(`Instance not found in state: ${instanceId}`)\n    const next = { ...current, ...patch } as MeshInstanceRecord\n    await this.write(state.instances.map(item => item.id === instanceId ? next : item))\n    return next\n  }\n\n  public async remove(instanceIds: readonly string[]): Promise<void> {\n    const set = new Set(instanceIds)\n    const state = await this.read()\n    await this.write(state.instances.filter(instance => !set.has(instance.id)))\n  }\n\n  public empty(): MeshStateFile {\n    return {\n      version: 1,\n      app: this.app,\n      updatedAt: nowIso(),\n      instances: []\n    }\n  }\n\n  private parseState(text: string): MeshStateFile {\n    return JSON.parse(text) as MeshStateFile\n  }\n\n  private async recoverCorruptedState(): Promise<MeshStateFile | null> {\n    const text = await fs.promises.readFile(this.statePath, 'utf8')\n    const prefix = this.extractRootJsonPrefix(text)\n    if (!prefix) return null\n\n    try {\n      const parsed = this.parseState(prefix)\n      if (parsed.version !== 1) throw new MeshStateError(`Unsupported mesh state version: ${String(parsed.version)}`)\n      await atomicWriteJson(this.statePath, parsed)\n      return parsed\n    } catch {\n      return null\n    }\n  }\n\n  private extractRootJsonPrefix(text: string): string | null {\n    const start = text.search(/\\s*[{[]/)\n    if (start < 0) return null\n\n    let depth = 0\n    let inString = false\n    let escaped = false\n\n    for (let index = start; index < text.length; index += 1) {\n      const char = text[index]\n\n      if (inString) {\n        if (escaped) {\n          escaped = false\n          continue\n        }\n        if (char === '\\\\') {\n          escaped = true\n          continue\n        }\n        if (char === '\"') inString = false\n        continue\n      }\n\n      if (char === '\"') {\n        inString = true\n        continue\n      }\n\n      if (char === '{' || char === '[') {\n        depth += 1\n        continue\n      }\n\n      if (char === '}' || char === ']') {\n        depth -= 1\n        if (depth === 0) {\n          return text.slice(start, index + 1)\n        }\n      }\n    }\n\n    return null\n  }\n}\n","import type { MeshInstanceRecord, MeshInstanceStatus } from '../core/types.js'\n\nexport class RegistryRecordTools {\n  public static touch(instance: MeshInstanceRecord, ttlMs: number, now = Date.now()): MeshInstanceRecord {\n    return {\n      ...instance,\n      status: instance.status === 'expired' ? 'running' : instance.status,\n      lastSeenAt: new Date(now).toISOString(),\n      expiresAt: new Date(now + ttlMs).toISOString()\n    }\n  }\n\n  public static markExpired(instance: MeshInstanceRecord, now = Date.now()): MeshInstanceRecord {\n    if (!this.isExpired(instance, now)) return instance\n    return { ...instance, status: 'expired' as MeshInstanceStatus }\n  }\n\n  public static isExpired(instance: MeshInstanceRecord, now = Date.now()): boolean {\n    if (!instance.expiresAt) return false\n    return new Date(instance.expiresAt).getTime() <= now\n  }\n\n  public static isRoutable(instance: MeshInstanceRecord, now = Date.now()): boolean {\n    return instance.status === 'running'\n      && instance.url !== null\n      && instance.serviceType !== 'worker'\n      && instance.serviceType !== 'router'\n      && !this.isExpired(instance, now)\n  }\n}\n","import type { MeshInstanceRecord } from '../core/types.js'\nimport { MeshStateStore } from '../state/MeshStateStore.js'\nimport type { MeshRegistry, MeshRegistryHeartbeatOptions, MeshRegistryListOptions, MeshRegistryRegisterOptions } from './types.js'\nimport { RegistryRecordTools } from './RegistryRecordTools.js'\n\nexport class FileMeshRegistry implements MeshRegistry {\n  public readonly kind = 'file'\n  private readonly store: MeshStateStore\n\n  public constructor(app: string, stateDir: string) {\n    this.store = new MeshStateStore(app, stateDir)\n  }\n\n  public async register(instance: MeshInstanceRecord, options: MeshRegistryRegisterOptions = {}): Promise<MeshInstanceRecord> {\n    const record = options.ttlMs ? RegistryRecordTools.touch(instance, options.ttlMs) : instance\n    await this.store.upsert(record)\n    return record\n  }\n\n  public async heartbeat(instanceId: string, options: MeshRegistryHeartbeatOptions = {}): Promise<MeshInstanceRecord | null> {\n    const current = await this.get(instanceId)\n    if (!current) return null\n    const patched = { ...current, ...(options.patch ?? {}) } as MeshInstanceRecord\n    const next = options.ttlMs ? RegistryRecordTools.touch(patched, options.ttlMs) : patched\n    await this.store.upsert(next)\n    return next\n  }\n\n  public async list(options: MeshRegistryListOptions = {}): Promise<readonly MeshInstanceRecord[]> {\n    const state = await this.store.read()\n    const refreshed = state.instances.map(instance => RegistryRecordTools.markExpired(instance))\n    if (refreshed.some((instance, index) => instance !== state.instances[index])) {\n      await this.store.write(refreshed)\n    }\n    return refreshed.filter(instance => {\n      if (options.service && instance.service !== options.service) return false\n      if (!options.includeExpired && instance.status === 'expired') return false\n      return true\n    })\n  }\n\n  public async get(instanceId: string): Promise<MeshInstanceRecord | null> {\n    const state = await this.store.read()\n    return state.instances.find(instance => instance.id === instanceId) ?? null\n  }\n\n  public async markDraining(instanceId: string): Promise<MeshInstanceRecord | null> {\n    const current = await this.get(instanceId)\n    if (!current) return null\n    const next = { ...current, status: 'draining' as const }\n    await this.store.upsert(next)\n    return next\n  }\n\n  public async unregister(instanceId: string): Promise<void> {\n    await this.store.remove([instanceId])\n  }\n}\n","import crypto from 'node:crypto'\nimport type { MeshInstanceRecord } from '../core/types.js'\n\nexport interface RegistrationSignaturePayload {\n  readonly app: string\n  readonly id: string\n  readonly service: string\n  readonly serviceType: string\n  readonly url: string | null\n  readonly pid: number | null\n  readonly issuedAt: string\n}\n\nexport class RegistrationSigner {\n  public constructor(\n    private readonly app: string,\n    private readonly secret: string\n  ) {}\n\n  public sign(instance: MeshInstanceRecord, issuedAt = new Date().toISOString()): string {\n    return this.hmac(this.payload(instance, issuedAt))\n  }\n\n  public attach(instance: MeshInstanceRecord, issuedAt = new Date().toISOString()): MeshInstanceRecord {\n    const signature = this.sign(instance, issuedAt)\n    return {\n      ...instance,\n      metadata: {\n        ...(instance.metadata ?? {}),\n        registration: {\n          app: this.app,\n          issuedAt,\n          signature\n        }\n      }\n    }\n  }\n\n  public verify(instance: MeshInstanceRecord): boolean {\n    const registration = this.registration(instance)\n    if (!registration) return false\n    const expected = this.sign(instance, registration.issuedAt)\n    return this.safeEqual(expected, registration.signature)\n  }\n\n  private payload(instance: MeshInstanceRecord, issuedAt: string): RegistrationSignaturePayload {\n    return {\n      app: this.app,\n      id: instance.id,\n      service: instance.service,\n      serviceType: instance.serviceType,\n      url: instance.url,\n      pid: instance.pid,\n      issuedAt\n    }\n  }\n\n  private hmac(payload: RegistrationSignaturePayload): string {\n    return crypto.createHmac('sha256', this.secret).update(JSON.stringify(payload)).digest('base64url')\n  }\n\n  private registration(instance: MeshInstanceRecord): { issuedAt: string; signature: string } | null {\n    const value = instance.metadata?.registration\n    if (!value || typeof value !== 'object') return null\n    const record = value as Record<string, unknown>\n    if (record.app !== this.app || typeof record.issuedAt !== 'string' || typeof record.signature !== 'string') return null\n    return { issuedAt: record.issuedAt, signature: record.signature }\n  }\n\n  private safeEqual(a: string, b: string): boolean {\n    const left = Buffer.from(a)\n    const right = Buffer.from(b)\n    return left.length === right.length && crypto.timingSafeEqual(left, right)\n  }\n}\n","import net from 'node:net'\nimport tls from 'node:tls'\n\nexport type RedisCommandArg = string | number\n\nexport interface SimpleRedisClientOptions {\n  readonly url: string\n  readonly connectTimeoutMs?: number\n}\n\nexport class SimpleRedisClient {\n  private readonly url: URL\n  private readonly timeoutMs: number\n\n  public constructor(options: SimpleRedisClientOptions) {\n    this.url = new URL(options.url)\n    this.timeoutMs = options.connectTimeoutMs ?? 5_000\n  }\n\n  public async command(args: readonly RedisCommandArg[]): Promise<unknown> {\n    const socket = await this.connect()\n    try {\n      const reader = new RespReader(socket)\n      socket.write(this.encode(args))\n      return await reader.read()\n    } finally {\n      socket.end()\n    }\n  }\n\n  private async connect(): Promise<net.Socket> {\n    const port = Number(this.url.port || (this.url.protocol === 'rediss:' ? 6380 : 6379))\n    const host = this.url.hostname || '127.0.0.1'\n    const socket = this.url.protocol === 'rediss:' ? tls.connect({ port, host }) : net.connect({ port, host })\n\n    await new Promise<void>((resolve, reject) => {\n      const timer = setTimeout(() => {\n        socket.destroy(new Error('Redis connection timed out.'))\n      }, this.timeoutMs)\n      socket.once('connect', () => {\n        clearTimeout(timer)\n        resolve()\n      })\n      socket.once('error', error => {\n        clearTimeout(timer)\n        reject(error)\n      })\n    })\n\n    if (this.url.password) {\n      if (this.url.username) await this.commandOnSocket(socket, ['AUTH', decodeURIComponent(this.url.username), decodeURIComponent(this.url.password)])\n      else await this.commandOnSocket(socket, ['AUTH', decodeURIComponent(this.url.password)])\n    }\n\n    const db = this.url.pathname.replace(/^\\//, '')\n    if (db) await this.commandOnSocket(socket, ['SELECT', db])\n    return socket\n  }\n\n  private async commandOnSocket(socket: net.Socket, args: readonly RedisCommandArg[]): Promise<unknown> {\n    const reader = new RespReader(socket)\n    socket.write(this.encode(args))\n    return reader.read()\n  }\n\n  private encode(args: readonly RedisCommandArg[]): string {\n    return `*${args.length}\\r\\n${args.map(arg => {\n      const value = String(arg)\n      return `$${Buffer.byteLength(value)}\\r\\n${value}\\r\\n`\n    }).join('')}`\n  }\n}\n\nclass RespReader {\n  private buffer = Buffer.alloc(0)\n  private waiters: Array<() => void> = []\n\n  public constructor(private readonly socket: net.Socket) {\n    socket.on('data', chunk => {\n      this.buffer = Buffer.concat([this.buffer, chunk])\n      for (const waiter of this.waiters.splice(0)) waiter()\n    })\n  }\n\n  public async read(): Promise<unknown> {\n    while (true) {\n      const parsed = this.tryParse(0)\n      if (parsed) {\n        this.buffer = this.buffer.subarray(parsed.offset)\n        if (parsed.value instanceof RedisError) throw parsed.value\n        return parsed.value\n      }\n      await new Promise<void>((resolve, reject) => {\n        const onError = (error: Error): void => {\n          cleanup()\n          reject(error)\n        }\n        const onClose = (): void => {\n          cleanup()\n          reject(new Error('Redis socket closed before response.'))\n        }\n        const wake = (): void => {\n          cleanup()\n          resolve()\n        }\n        const cleanup = (): void => {\n          this.socket.off('error', onError)\n          this.socket.off('close', onClose)\n          const index = this.waiters.indexOf(wake)\n          if (index >= 0) this.waiters.splice(index, 1)\n        }\n        this.socket.once('error', onError)\n        this.socket.once('close', onClose)\n        this.waiters.push(wake)\n      })\n    }\n  }\n\n  private tryParse(offset: number): { value: unknown; offset: number } | null {\n    if (offset >= this.buffer.length) return null\n    const type = String.fromCharCode(this.buffer[offset]!)\n    const line = this.readLine(offset + 1)\n    if (!line) return null\n\n    if (type === '+') return { value: line.text, offset: line.offset }\n    if (type === '-') return { value: new RedisError(line.text), offset: line.offset }\n    if (type === ':') return { value: Number(line.text), offset: line.offset }\n    if (type === '$') {\n      const length = Number(line.text)\n      if (length === -1) return { value: null, offset: line.offset }\n      const end = line.offset + length\n      if (this.buffer.length < end + 2) return null\n      return { value: this.buffer.subarray(line.offset, end).toString('utf8'), offset: end + 2 }\n    }\n    if (type === '*') {\n      const count = Number(line.text)\n      if (count === -1) return { value: null, offset: line.offset }\n      const values: unknown[] = []\n      let current = line.offset\n      for (let index = 0; index < count; index += 1) {\n        const item = this.tryParse(current)\n        if (!item) return null\n        values.push(item.value)\n        current = item.offset\n      }\n      return { value: values, offset: current }\n    }\n    return null\n  }\n\n  private readLine(offset: number): { text: string; offset: number } | null {\n    const end = this.buffer.indexOf('\\r\\n', offset)\n    if (end < 0) return null\n    return { text: this.buffer.subarray(offset, end).toString('utf8'), offset: end + 2 }\n  }\n}\n\nclass RedisError extends Error {\n  public constructor(message: string) {\n    super(message)\n    this.name = 'RedisError'\n  }\n}\n","import type { MeshInstanceRecord } from '../../core/types.js'\nimport type { MeshRegistry, MeshRegistryHeartbeatOptions, MeshRegistryListOptions, MeshRegistryRegisterOptions } from '../types.js'\nimport { RegistryRecordTools } from '../RegistryRecordTools.js'\nimport { RegistrationSigner } from '../RegistrationSigner.js'\nimport { SimpleRedisClient, type SimpleRedisClientOptions } from './SimpleRedisClient.js'\n\nexport interface RedisMeshRegistryOptions extends SimpleRedisClientOptions {\n  readonly app: string\n  readonly secret?: string\n  readonly keyPrefix?: string\n  readonly requireSignature?: boolean\n}\n\nexport class RedisMeshRegistry implements MeshRegistry {\n  public readonly kind = 'redis'\n  private readonly client: SimpleRedisClient\n  private readonly prefix: string\n  private readonly signer: RegistrationSigner | undefined\n  private readonly requireSignature: boolean\n\n  public constructor(private readonly options: RedisMeshRegistryOptions) {\n    this.client = new SimpleRedisClient(options)\n    this.prefix = options.keyPrefix ?? `mesh:${options.app}`\n    this.signer = options.secret ? new RegistrationSigner(options.app, options.secret) : undefined\n    this.requireSignature = options.requireSignature ?? Boolean(options.secret)\n  }\n\n  public async register(instance: MeshInstanceRecord, options: MeshRegistryRegisterOptions = {}): Promise<MeshInstanceRecord> {\n    const ttlMs = options.ttlMs ?? 15_000\n    const touched = RegistryRecordTools.touch(instance, ttlMs)\n    const signed = this.signer ? this.signer.attach(touched) : touched\n    await this.client.command(['SADD', this.indexKey(), signed.id])\n    await this.client.command(['SET', this.instanceKey(signed.id), JSON.stringify(signed), 'PX', ttlMs])\n    return signed\n  }\n\n  public async heartbeat(instanceId: string, options: MeshRegistryHeartbeatOptions = {}): Promise<MeshInstanceRecord | null> {\n    const current = await this.get(instanceId)\n    if (!current) return null\n    const ttlMs = options.ttlMs ?? this.remainingTtl(current) ?? 15_000\n    const patched = { ...current, ...(options.patch ?? {}) } as MeshInstanceRecord\n    const touched = RegistryRecordTools.touch(patched, ttlMs)\n    const signed = this.signer ? this.signer.attach(touched) : touched\n    await this.client.command(['SET', this.instanceKey(instanceId), JSON.stringify(signed), 'PX', ttlMs])\n    return signed\n  }\n\n  public async list(options: MeshRegistryListOptions = {}): Promise<readonly MeshInstanceRecord[]> {\n    const ids = await this.ids()\n    const items = await Promise.all(ids.map(id => this.get(id)))\n    const now = Date.now()\n    const alive: MeshInstanceRecord[] = []\n    const staleIds: string[] = []\n\n    for (let index = 0; index < ids.length; index += 1) {\n      const id = ids[index]!\n      const item = items[index]\n      if (!item) {\n        staleIds.push(id)\n        continue\n      }\n      const refreshed = RegistryRecordTools.markExpired(item, now)\n      if (options.service && refreshed.service !== options.service) continue\n      if (!options.includeExpired && refreshed.status === 'expired') continue\n      alive.push(refreshed)\n    }\n\n    if (staleIds.length > 0) await this.client.command(['SREM', this.indexKey(), ...staleIds])\n    return alive\n  }\n\n  public async get(instanceId: string): Promise<MeshInstanceRecord | null> {\n    const raw = await this.client.command(['GET', this.instanceKey(instanceId)])\n    if (typeof raw !== 'string') return null\n    const parsed = JSON.parse(raw) as MeshInstanceRecord\n    if (this.requireSignature && (!this.signer || !this.signer.verify(parsed))) return null\n    return parsed\n  }\n\n  public async markDraining(instanceId: string): Promise<MeshInstanceRecord | null> {\n    const current = await this.get(instanceId)\n    if (!current) return null\n    return this.heartbeat(instanceId, { patch: { status: 'draining' } })\n  }\n\n  public async unregister(instanceId: string): Promise<void> {\n    await this.client.command(['DEL', this.instanceKey(instanceId)])\n    await this.client.command(['SREM', this.indexKey(), instanceId])\n  }\n\n  private async ids(): Promise<readonly string[]> {\n    const value = await this.client.command(['SMEMBERS', this.indexKey()])\n    return Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string') : []\n  }\n\n  private remainingTtl(instance: MeshInstanceRecord): number | null {\n    if (!instance.expiresAt) return null\n    return Math.max(1_000, new Date(instance.expiresAt).getTime() - Date.now())\n  }\n\n  private indexKey(): string {\n    return `${this.prefix}:instances`\n  }\n\n  private instanceKey(id: string): string {\n    return `${this.prefix}:instance:${id}`\n  }\n}\n","import { FileMeshRegistry } from './FileMeshRegistry.js'\nimport type { MeshRegistry } from './types.js'\nimport type { NormalizedMeshConfig } from '../core/types.js'\nimport { RedisMeshRegistry } from './redis/RedisMeshRegistry.js'\n\nexport class RegistryFactory {\n  public create(config: NormalizedMeshConfig): MeshRegistry {\n    if (config.registry.type === 'file') {\n      return new FileMeshRegistry(config.app, config.runtime.stateDir)\n    }\n    return new RedisMeshRegistry({\n      app: config.app,\n      url: config.registry.url,\n      ...(config.registry.keyPrefix !== undefined ? { keyPrefix: config.registry.keyPrefix } : {}),\n      ...(config.registry.secret !== undefined ? { secret: config.registry.secret } : {}),\n      requireSignature: config.registry.requireSignature,\n      connectTimeoutMs: config.registry.connectTimeoutMs\n    })\n  }\n}\n","import type { MeshRegistry } from './types.js'\n\nexport class HeartbeatLoop {\n  private timer: NodeJS.Timeout | null = null\n\n  public constructor(\n    private readonly registry: MeshRegistry,\n    private readonly instanceId: string,\n    private readonly intervalMs: number,\n    private readonly ttlMs: number\n  ) {}\n\n  public start(): void {\n    if (this.timer) return\n    this.timer = setInterval(() => {\n      void this.registry.heartbeat(this.instanceId, { ttlMs: this.ttlMs }).catch(() => undefined)\n    }, this.intervalMs)\n    this.timer.unref?.()\n  }\n\n  public stop(): void {\n    if (!this.timer) return\n    clearInterval(this.timer)\n    this.timer = null\n  }\n}\n","import { EventEmitter } from 'node:events'\nimport type { NormalizedMeshConfig } from '../core/types.js'\nimport { MeshStreamSerializer } from './MeshStreamSerializer.js'\nimport type { MeshLogPublishInput, MeshLogStreamPayload, MeshStreamEnvelope, MeshStreamHandler, MeshStreamPublisher, MeshStreamSubscriber } from './types.js'\n\nclass MemoryMeshStreamHub {\n  public readonly emitter = new EventEmitter()\n}\n\nconst hubs = new Map<string, MemoryMeshStreamHub>()\n\nfunction hubFor(app: string): MemoryMeshStreamHub {\n  const existing = hubs.get(app)\n  if (existing) return existing\n  const created = new MemoryMeshStreamHub()\n  hubs.set(app, created)\n  return created\n}\n\nexport class MemoryMeshStream implements MeshStreamPublisher, MeshStreamSubscriber {\n  private readonly serializer = new MeshStreamSerializer()\n  private readonly hub: MemoryMeshStreamHub\n  private logSequence = 0\n\n  public constructor(private readonly config: NormalizedMeshConfig) {\n    this.hub = hubFor(config.app)\n  }\n\n  public async publish<TPayload>(input: Omit<MeshStreamEnvelope<TPayload>, 'id' | 'emittedAt' | 'app'> & { readonly app?: string }): Promise<MeshStreamEnvelope<TPayload>> {\n    const envelope = this.serializer.create(this.config.app, input)\n    this.hub.emitter.emit(envelope.type, envelope)\n    this.hub.emitter.emit('*', envelope)\n    return envelope\n  }\n\n  public async publishLog(input: MeshLogPublishInput): Promise<MeshStreamEnvelope<MeshLogStreamPayload> | null> {\n    if (!this.config.streaming.enabled || !this.config.streaming.logs) return null\n    const raw = Buffer.isBuffer(input.chunk) ? input.chunk.toString('utf8') : input.chunk\n    const max = this.config.streaming.maxLogChunkBytes\n    const chunk = raw.length > max ? raw.slice(0, max) : raw\n    return this.publish<MeshLogStreamPayload>({\n      kind: 'log',\n      type: 'mesh.log',\n      ...(input.source !== undefined ? { source: input.source } : {}),\n      instanceId: input.instanceId,\n      service: input.service,\n      payload: {\n        stream: input.stream,\n        chunk,\n        sequence: this.logSequence += 1,\n        truncated: raw.length > max,\n        ...(input.serviceType !== undefined ? { serviceType: input.serviceType } : {})\n      }\n    })\n  }\n\n  public async subscribe(types: readonly string[], handler: MeshStreamHandler): Promise<() => void> {\n    const eventNames = types.length > 0 ? types : ['*']\n    const wrapped = (event: MeshStreamEnvelope): void => { void handler(event) }\n    for (const type of eventNames) this.hub.emitter.on(type, wrapped)\n    return () => {\n      for (const type of eventNames) this.hub.emitter.off(type, wrapped)\n    }\n  }\n}\n","import { randomUUID } from 'node:crypto'\nimport type { MeshStreamEnvelope } from './types.js'\n\nexport class MeshStreamSerializer {\n  public create<TPayload>(app: string, input: Omit<MeshStreamEnvelope<TPayload>, 'id' | 'emittedAt' | 'app'> & { readonly app?: string }): MeshStreamEnvelope<TPayload> {\n    return {\n      id: randomUUID(),\n      app: input.app ?? app,\n      kind: input.kind,\n      type: input.type,\n      payload: input.payload,\n      emittedAt: new Date().toISOString(),\n      ...(input.source !== undefined ? { source: input.source } : {}),\n      ...(input.instanceId !== undefined ? { instanceId: input.instanceId } : {}),\n      ...(input.service !== undefined ? { service: input.service } : {})\n    }\n  }\n\n  public encode(event: MeshStreamEnvelope): string {\n    return JSON.stringify(event)\n  }\n\n  public decode(value: string): MeshStreamEnvelope | null {\n    try {\n      const parsed = JSON.parse(value) as Partial<MeshStreamEnvelope>\n      if (!parsed || typeof parsed !== 'object') return null\n      if (typeof parsed.id !== 'string' || typeof parsed.app !== 'string' || typeof parsed.kind !== 'string' || typeof parsed.type !== 'string') return null\n      return parsed as MeshStreamEnvelope\n    } catch {\n      return null\n    }\n  }\n}\n","import type { NormalizedMeshStreamingConfig } from '../core/types.js'\n\nexport class MeshStreamChannels {\n  public constructor(private readonly config: NormalizedMeshStreamingConfig) {}\n\n  public logs(): string {\n    return `${this.config.keyPrefix}:stream:logs`\n  }\n\n  public events(): string {\n    return `${this.config.keyPrefix}:stream:events`\n  }\n\n  public all(): readonly string[] {\n    return [this.logs(), this.events()]\n  }\n}\n","import net from 'node:net'\nimport tls from 'node:tls'\nimport type { RedisCommandArg } from '../../registry/redis/SimpleRedisClient.js'\n\nexport interface RedisPubSubConnectionOptions {\n  readonly url: string\n  readonly connectTimeoutMs?: number\n}\n\nexport class RedisPubSubConnection {\n  private socket: net.Socket | null = null\n  private reader: RespStreamReader | null = null\n  private closed = false\n\n  public constructor(private readonly options: RedisPubSubConnectionOptions) {}\n\n  public async subscribe(channels: readonly string[], onMessage: (channel: string, message: string) => void): Promise<() => Promise<void>> {\n    if (channels.length === 0) throw new Error('RedisPubSubConnection.subscribe requires at least one channel.')\n    const socket = await this.connect()\n    this.socket = socket\n    this.reader = new RespStreamReader(socket)\n    socket.write(encode(['SUBSCRIBE', ...channels]))\n\n    void this.readLoop(onMessage)\n\n    return async () => {\n      this.closed = true\n      if (!socket.destroyed) {\n        try { socket.write(encode(['UNSUBSCRIBE', ...channels])) } catch { /* noop */ }\n        socket.end()\n      }\n    }\n  }\n\n  private async readLoop(onMessage: (channel: string, message: string) => void): Promise<void> {\n    const reader = this.reader\n    if (!reader) return\n    while (!this.closed) {\n      try {\n        const value = await reader.read()\n        if (!Array.isArray(value) || value.length < 3) continue\n        const [kind, channel, message] = value\n        if (kind === 'message' && typeof channel === 'string' && typeof message === 'string') {\n          onMessage(channel, message)\n        }\n      } catch {\n        if (!this.closed) this.closed = true\n      }\n    }\n  }\n\n  private async connect(): Promise<net.Socket> {\n    const url = new URL(this.options.url)\n    const port = Number(url.port || (url.protocol === 'rediss:' ? 6380 : 6379))\n    const host = url.hostname || '127.0.0.1'\n    const socket = url.protocol === 'rediss:' ? tls.connect({ port, host }) : net.connect({ port, host })\n    const timeoutMs = this.options.connectTimeoutMs ?? 5_000\n\n    await new Promise<void>((resolve, reject) => {\n      const timer = setTimeout(() => {\n        socket.destroy(new Error('Redis pub/sub connection timed out.'))\n      }, timeoutMs)\n      socket.once('connect', () => {\n        clearTimeout(timer)\n        resolve()\n      })\n      socket.once('error', error => {\n        clearTimeout(timer)\n        reject(error)\n      })\n    })\n\n    if (url.password) {\n      if (url.username) await commandOnSocket(socket, ['AUTH', decodeURIComponent(url.username), decodeURIComponent(url.password)])\n      else await commandOnSocket(socket, ['AUTH', decodeURIComponent(url.password)])\n    }\n    const db = url.pathname.replace(/^\\//, '')\n    if (db) await commandOnSocket(socket, ['SELECT', db])\n    return socket\n  }\n}\n\nasync function commandOnSocket(socket: net.Socket, args: readonly RedisCommandArg[]): Promise<unknown> {\n  const reader = new RespStreamReader(socket)\n  socket.write(encode(args))\n  return reader.read()\n}\n\nfunction encode(args: readonly RedisCommandArg[]): string {\n  return `*${args.length}\\r\\n${args.map(arg => {\n    const value = String(arg)\n    return `$${Buffer.byteLength(value)}\\r\\n${value}\\r\\n`\n  }).join('')}`\n}\n\nclass RespStreamReader {\n  private buffer = Buffer.alloc(0)\n  private waiters: Array<() => void> = []\n\n  public constructor(private readonly socket: net.Socket) {\n    socket.on('data', chunk => {\n      this.buffer = Buffer.concat([this.buffer, chunk])\n      for (const waiter of this.waiters.splice(0)) waiter()\n    })\n  }\n\n  public async read(): Promise<unknown> {\n    while (true) {\n      const parsed = this.tryParse(0)\n      if (parsed) {\n        this.buffer = this.buffer.subarray(parsed.offset)\n        return parsed.value\n      }\n      await new Promise<void>((resolve, reject) => {\n        const onError = (error: Error): void => {\n          cleanup()\n          reject(error)\n        }\n        const onClose = (): void => {\n          cleanup()\n          reject(new Error('Redis socket closed before response.'))\n        }\n        const wake = (): void => {\n          cleanup()\n          resolve()\n        }\n        const cleanup = (): void => {\n          this.socket.off('error', onError)\n          this.socket.off('close', onClose)\n          const index = this.waiters.indexOf(wake)\n          if (index >= 0) this.waiters.splice(index, 1)\n        }\n        this.socket.once('error', onError)\n        this.socket.once('close', onClose)\n        this.waiters.push(wake)\n      })\n    }\n  }\n\n  private tryParse(offset: number): { value: unknown; offset: number } | null {\n    if (offset >= this.buffer.length) return null\n    const type = String.fromCharCode(this.buffer[offset]!)\n    const line = this.readLine(offset + 1)\n    if (!line) return null\n    if (type === '+') return { value: line.text, offset: line.offset }\n    if (type === '-') throw new Error(line.text)\n    if (type === ':') return { value: Number(line.text), offset: line.offset }\n    if (type === '$') {\n      const length = Number(line.text)\n      if (length === -1) return { value: null, offset: line.offset }\n      const end = line.offset + length\n      if (this.buffer.length < end + 2) return null\n      return { value: this.buffer.subarray(line.offset, end).toString('utf8'), offset: end + 2 }\n    }\n    if (type === '*') {\n      const count = Number(line.text)\n      if (count === -1) return { value: null, offset: line.offset }\n      const values: unknown[] = []\n      let current = line.offset\n      for (let index = 0; index < count; index += 1) {\n        const item = this.tryParse(current)\n        if (!item) return null\n        values.push(item.value)\n        current = item.offset\n      }\n      return { value: values, offset: current }\n    }\n    return null\n  }\n\n  private readLine(offset: number): { text: string; offset: number } | null {\n    const end = this.buffer.indexOf('\\r\\n', offset)\n    if (end < 0) return null\n    return { text: this.buffer.subarray(offset, end).toString('utf8'), offset: end + 2 }\n  }\n}\n","import type { NormalizedMeshConfig } from '../../core/types.js'\nimport { SimpleRedisClient } from '../../registry/redis/SimpleRedisClient.js'\nimport { MeshStreamChannels } from '../MeshStreamChannels.js'\nimport { MeshStreamSerializer } from '../MeshStreamSerializer.js'\nimport type { MeshLogPublishInput, MeshLogStreamPayload, MeshStreamEnvelope, MeshStreamHandler, MeshStreamPublisher, MeshStreamSubscriber } from '../types.js'\nimport { RedisPubSubConnection } from './RedisPubSubConnection.js'\n\nexport class RedisMeshStream implements MeshStreamPublisher, MeshStreamSubscriber {\n  private readonly client: SimpleRedisClient\n  private readonly channels: MeshStreamChannels\n  private readonly serializer = new MeshStreamSerializer()\n  private logSequence = 0\n\n  public constructor(private readonly config: NormalizedMeshConfig) {\n    this.client = new SimpleRedisClient({ url: config.streaming.url, connectTimeoutMs: config.streaming.connectTimeoutMs })\n    this.channels = new MeshStreamChannels(config.streaming)\n  }\n\n  public async publish<TPayload>(input: Omit<MeshStreamEnvelope<TPayload>, 'id' | 'emittedAt' | 'app'> & { readonly app?: string }): Promise<MeshStreamEnvelope<TPayload>> {\n    const envelope = this.serializer.create(this.config.app, input)\n    const channel = envelope.kind === 'log' ? this.channels.logs() : this.channels.events()\n    await this.client.command(['PUBLISH', channel, this.serializer.encode(envelope)])\n    return envelope\n  }\n\n  public async publishLog(input: MeshLogPublishInput): Promise<MeshStreamEnvelope<MeshLogStreamPayload> | null> {\n    if (!this.config.streaming.enabled || !this.config.streaming.logs) return null\n    const raw = Buffer.isBuffer(input.chunk) ? input.chunk.toString('utf8') : input.chunk\n    const max = this.config.streaming.maxLogChunkBytes\n    const chunk = raw.length > max ? raw.slice(0, max) : raw\n    return this.publish<MeshLogStreamPayload>({\n      kind: 'log',\n      type: 'mesh.log',\n      ...(input.source !== undefined ? { source: input.source } : {}),\n      instanceId: input.instanceId,\n      service: input.service,\n      payload: {\n        stream: input.stream,\n        chunk,\n        sequence: this.logSequence += 1,\n        truncated: raw.length > max,\n        ...(input.serviceType !== undefined ? { serviceType: input.serviceType } : {})\n      }\n    })\n  }\n\n  public async subscribe(types: readonly string[], handler: MeshStreamHandler): Promise<() => Promise<void>> {\n    const channels = this.channels.all()\n    const wanted = new Set(types)\n    const any = wanted.size === 0 || wanted.has('*')\n    const connection = new RedisPubSubConnection({ url: this.config.streaming.url, connectTimeoutMs: this.config.streaming.connectTimeoutMs })\n    return connection.subscribe(channels, (_channel, message) => {\n      const envelope = this.serializer.decode(message)\n      if (!envelope) return\n      if (!any && !wanted.has(envelope.type) && !wanted.has(envelope.kind)) return\n      void handler(envelope)\n    })\n  }\n}\n","import type { NormalizedMeshConfig } from '../core/types.js'\nimport { MemoryMeshStream } from './MemoryMeshStream.js'\nimport { RedisMeshStream } from './redis/RedisMeshStream.js'\nimport type { MeshStreamPublisher, MeshStreamSubscriber } from './types.js'\n\nexport class MeshStreamFactory {\n  public createPublisher(config: NormalizedMeshConfig): MeshStreamPublisher | null {\n    if (!config.streaming.enabled) return null\n    if (config.streaming.transport === 'redis') return new RedisMeshStream(config)\n    return new MemoryMeshStream(config)\n  }\n\n  public createSubscriber(config: NormalizedMeshConfig): MeshStreamSubscriber | null {\n    if (!config.streaming.enabled) return null\n    if (config.streaming.transport === 'redis') return new RedisMeshStream(config)\n    return new MemoryMeshStream(config)\n  }\n}\n","import process from 'node:process'\nimport { spawn, type ChildProcess } from 'node:child_process'\nimport type { MeshRunOptions, MeshInstanceRecord, NormalizedMeshConfig } from '../core/types.js'\nimport { RegistryFactory } from '../registry/RegistryFactory.js'\nimport { HeartbeatLoop } from '../registry/HeartbeatLoop.js'\nimport type { MeshRegistry } from '../registry/types.js'\nimport { LogStore } from '../logs/LogStore.js'\nimport { nowIso, sleep } from '../utils/time.js'\nimport { PodmanCommandBuilder, type PodmanContainerSpec } from './PodmanCommandBuilder.js'\nimport { PodmanPlan } from './PodmanPlan.js'\nimport { PodmanRunner } from './PodmanRunner.js'\nimport { MeshIdFactory } from '../ids/MeshIdFactory.js'\nimport { ProcessTakeover } from '../process/ProcessTakeover.js'\n\ninterface ManagedPodmanContainer {\n  readonly spec: PodmanContainerSpec\n  readonly record: MeshInstanceRecord\n  readonly heartbeat: HeartbeatLoop\n}\n\ninterface ManagedRouterProcess {\n  readonly record: MeshInstanceRecord\n  readonly child: ChildProcess\n  readonly heartbeat: HeartbeatLoop\n}\n\nexport class PodmanSupervisor {\n  private readonly registry: MeshRegistry\n  private readonly logStore: LogStore\n  private readonly builder: PodmanCommandBuilder\n  private readonly runner: PodmanRunner\n  private readonly plan: PodmanPlan\n  private readonly ids = new MeshIdFactory()\n  private readonly takeover = new ProcessTakeover()\n  private readonly containers = new Map<string, ManagedPodmanContainer>()\n  private readonly routers = new Map<string, ManagedRouterProcess>()\n  private stopping = false\n\n  public constructor(private readonly config: NormalizedMeshConfig) {\n    this.registry = new RegistryFactory().create(config)\n    this.logStore = new LogStore(config.runtime.logsDir)\n    this.builder = new PodmanCommandBuilder(config)\n    this.runner = new PodmanRunner(config.runtime.podman.podmanPath)\n    this.plan = new PodmanPlan(config)\n  }\n\n  public async run(options: MeshRunOptions = {}): Promise<void> {\n    const services = this.selectServices(options)\n    if (this.config.runtime.podman.createNetwork) await this.ensureNetwork()\n    if (this.config.runtime.podman.redis.enabled) await this.ensureRedis()\n\n    const specs = await this.plan.build(services, options.instances)\n    for (const spec of specs) {\n      const managed = await this.startContainer(spec)\n      this.containers.set(managed.record.id, managed)\n    }\n\n    if (this.shouldStartRouter(options, services)) {\n      const router = await this.startRouterProcess(options.cliPath)\n      this.routers.set(router.record.id, router)\n      if (options.watch ?? this.config.runtime.defaultWatch) this.pipeToConsole(router)\n    }\n\n    if (options.detach) return\n    this.installSignalHandlers()\n    await this.waitForever()\n  }\n\n  public async stop(serviceOrId?: string, options: { readonly force?: boolean; readonly shutdownTimeoutMs?: number } = {}): Promise<string> {\n    const instances = await this.registry.list({ includeExpired: true })\n    const targets = serviceOrId\n      ? instances.filter(instance => instance.service === serviceOrId || instance.id.startsWith(serviceOrId))\n      : instances\n    let stopped = 0\n    for (const target of targets) {\n      await this.registry.markDraining(target.id).catch(() => undefined)\n      const containerName = this.containerNameFrom(target)\n      if (containerName) {\n        const timeoutSeconds = Math.ceil((options.shutdownTimeoutMs ?? this.config.runtime.shutdownTimeoutMs) / 1000)\n        await this.runner.run(this.builder.stopContainerArgs(containerName, timeoutSeconds), { allowFailure: true })\n        if (options.force) await this.runner.run(this.builder.rmContainerArgs(containerName), { allowFailure: true })\n        stopped += 1\n      } else if (target.pid) {\n        try {\n          process.kill(target.pid, options.force ? 'SIGKILL' : 'SIGTERM')\n          stopped += 1\n        } catch {}\n      }\n      await this.registry.unregister(target.id).catch(() => undefined)\n    }\n    return `Stopped ${stopped} podman-managed instance(s).\\n`\n  }\n\n  private async startContainer(spec: PodmanContainerSpec): Promise<ManagedPodmanContainer> {\n    const args = this.builder.runServiceArgs(spec)\n    await this.runner.run(args)\n    const record = await this.registry.register(this.builder.buildRecord(spec), { ttlMs: this.config.registry.ttlMs })\n    const heartbeat = new HeartbeatLoop(this.registry, record.id, this.config.registry.heartbeatIntervalMs, this.config.registry.ttlMs)\n    heartbeat.start()\n    return { spec, record, heartbeat }\n  }\n\n  private async ensureNetwork(): Promise<void> {\n    const exists = await this.runner.run(this.builder.networkExistsArgs(), { allowFailure: true })\n    if (exists.code !== 0) await this.runner.run(this.builder.createNetworkArgs())\n  }\n\n  private async ensureRedis(): Promise<void> {\n    await this.runner.run(this.builder.runRedisArgs(), { allowFailure: true })\n  }\n\n  private selectServices(options: MeshRunOptions) {\n    const all = Array.from(this.config.services.values())\n    if (options.all || !options.services || options.services.length === 0) return all.filter(service => service.instances > 0)\n    const selected = new Set(options.services)\n    const missing = Array.from(selected).filter(name => !this.config.services.has(name))\n    if (missing.length > 0) throw new Error(`Unknown mesh service(s): ${missing.join(', ')}`)\n    return all.filter(service => selected.has(service.name) && service.instances > 0)\n  }\n\n  private shouldStartRouter(options: MeshRunOptions, services: readonly { routes: readonly string[] }[]): boolean {\n    if (!this.config.router.enabled) return false\n    if (options.router === false) return false\n    return services.some(service => service.routes.length > 0)\n  }\n\n  private async startRouterProcess(cliPath?: string): Promise<ManagedRouterProcess> {\n    const id = this.ids.createInstanceId('router')\n    const resolvedCliPath = cliPath ?? process.argv[1]\n    if (!resolvedCliPath) throw new Error('Cannot start mesh router automatically without a CLI path.')\n    await this.takeover.forceFreePort(this.config.router.port, { label: `router port ${this.config.router.port}` })\n    const logFile = this.logStore.getLogPath(id)\n    const logStream = await this.logStore.createStream(id)\n    const command = [process.execPath, resolvedCliPath, 'router', '--config', this.config.configPath]\n    const child = spawn(process.execPath, [resolvedCliPath, 'router', '--config', this.config.configPath], {\n      cwd: this.config.projectRoot,\n      env: {\n        ...process.env,\n        MESH_APP: this.config.app,\n        MESH_SERVICE: 'router',\n        MESH_SERVICE_TYPE: 'router',\n        MESH_INSTANCE_ID: id,\n        MESH_REGISTRY_TYPE: this.config.registry.type,\n        MESH_REGISTRY_URL: this.config.registry.url,\n        PORT: String(this.config.router.port),\n        MESH_PORT: String(this.config.router.port)\n      },\n      stdio: ['ignore', 'pipe', 'pipe']\n    })\n    child.stdout?.pipe(logStream, { end: false })\n    child.stderr?.pipe(logStream, { end: false })\n    child.once('exit', () => logStream.end())\n    const record: MeshInstanceRecord = {\n      id,\n      service: 'router',\n      serviceType: 'router',\n      status: 'running',\n      pid: child.pid ?? null,\n      port: this.config.router.port,\n      host: this.config.router.host,\n      url: `http://${this.config.router.host}:${this.config.router.port}`,\n      command,\n      cwd: this.config.projectRoot,\n      logFile,\n      startedAt: nowIso(),\n      metadata: { runtime: 'process', role: 'mesh-router', meshApp: this.config.app }\n    }\n    const registered = await this.registry.register(record, { ttlMs: this.config.registry.ttlMs })\n    const heartbeat = new HeartbeatLoop(this.registry, registered.id, this.config.registry.heartbeatIntervalMs, this.config.registry.ttlMs)\n    heartbeat.start()\n    child.once('exit', () => {\n      heartbeat.stop()\n      void this.registry.unregister(registered.id).catch(() => undefined)\n    })\n    return { record: registered, child, heartbeat }\n  }\n\n  private pipeToConsole(managed: ManagedRouterProcess): void {\n    const prefix = `[${managed.record.id}] `\n    managed.child.stdout?.on('data', chunk => process.stdout.write(this.prefixChunk(prefix, chunk)))\n    managed.child.stderr?.on('data', chunk => process.stderr.write(this.prefixChunk(prefix, chunk)))\n  }\n\n  private prefixChunk(prefix: string, chunk: Buffer): string {\n    return chunk.toString('utf8').split(/(?<=\\n)/).map(line => line.length ? `${prefix}${line}` : line).join('')\n  }\n\n  private installSignalHandlers(): void {\n    const stop = (): void => { void this.stopAll() }\n    process.once('SIGINT', stop)\n    process.once('SIGTERM', stop)\n  }\n\n  private async stopAll(): Promise<void> {\n    if (this.stopping) return\n    this.stopping = true\n    for (const managed of this.containers.values()) managed.heartbeat.stop()\n    for (const router of this.routers.values()) router.heartbeat.stop()\n    for (const managed of this.containers.values()) {\n      await this.registry.markDraining(managed.record.id).catch(() => undefined)\n    }\n    await sleep(this.config.runtime.drainTimeoutMs)\n    for (const managed of this.containers.values()) {\n      await this.runner.run(this.builder.stopContainerArgs(managed.spec.name, Math.ceil(this.config.runtime.shutdownTimeoutMs / 1000)), { allowFailure: true })\n      await this.registry.unregister(managed.record.id).catch(() => undefined)\n    }\n    for (const router of this.routers.values()) {\n      if (router.child.exitCode === null && router.child.signalCode === null) router.child.kill('SIGTERM')\n      await this.registry.unregister(router.record.id).catch(() => undefined)\n    }\n    process.exitCode = 0\n  }\n\n  private containerNameFrom(instance: MeshInstanceRecord): string | null {\n    const value = instance.metadata?.containerName\n    return typeof value === 'string' ? value : null\n  }\n\n  private async waitForever(): Promise<void> {\n    await new Promise<void>(() => undefined)\n  }\n}\n","import type { MeshInstanceRecord, NormalizedMeshConfig, NormalizedMeshServiceConfig } from '../core/types.js'\n\nexport interface PodmanContainerSpec {\n  readonly id: string\n  readonly name: string\n  readonly image: string\n  readonly service: NormalizedMeshServiceConfig\n  readonly index: number\n  readonly hostPort: number | null\n  readonly containerPort: number | null\n  readonly logFile: string\n}\n\nexport class PodmanCommandBuilder {\n  public constructor(private readonly config: NormalizedMeshConfig) {}\n\n  public networkExistsArgs(): readonly string[] {\n    return ['network', 'exists', this.config.runtime.podman.network]\n  }\n\n  public createNetworkArgs(): readonly string[] {\n    return ['network', 'create', this.config.runtime.podman.network]\n  }\n\n  public runRedisArgs(): readonly string[] {\n    const podman = this.config.runtime.podman\n    return [\n      'run', '-d', '--replace',\n      '--name', podman.redis.containerName,\n      '--network', podman.network,\n      '--label', `panom.mesh.app=${this.config.app}`,\n      '--label', 'panom.mesh.service=redis',\n      '--label', 'panom.mesh.serviceType=worker',\n      '--volume', `${podman.redis.volume}:/data`,\n      podman.redis.image\n    ]\n  }\n\n  public runServiceArgs(spec: PodmanContainerSpec): readonly string[] {\n    const podman = this.config.runtime.podman\n    const service = spec.service\n    const env = this.buildEnv(spec)\n    const labels = this.buildLabels(spec)\n    const args: string[] = ['run', '-d']\n    if (podman.replace) args.push('--replace')\n    args.push('--name', spec.name)\n    args.push('--network', podman.network)\n    args.push('--pull', podman.pull)\n\n    for (const alias of service.podman.networkAliases) args.push('--network-alias', alias)\n    for (const [key, value] of Object.entries(labels)) args.push('--label', `${key}=${value}`)\n    for (const [key, value] of Object.entries(env)) args.push('--env', `${key}=${value}`)\n    for (const volume of service.podman.volumes) args.push('--volume', volume)\n    for (const publish of service.podman.publish) args.push('--publish', publish)\n    if (spec.hostPort !== null && spec.containerPort !== null) {\n      args.push('--publish', `${podman.publishHost}:${spec.hostPort}:${spec.containerPort}`)\n    }\n    if (service.podman.user) args.push('--user', service.podman.user)\n    if (service.podman.workdir) args.push('--workdir', service.podman.workdir)\n    if (service.podman.entrypoint) args.push('--entrypoint', service.podman.entrypoint.join(' '))\n    args.push(...service.podman.extraArgs)\n    args.push(spec.image)\n    if (service.podman.command) args.push(...service.podman.command)\n    return args\n  }\n\n  public stopContainerArgs(containerName: string, timeoutSeconds: number): readonly string[] {\n    return ['stop', '--time', String(Math.max(0, timeoutSeconds)), containerName]\n  }\n\n  public rmContainerArgs(containerName: string): readonly string[] {\n    return ['rm', '-f', containerName]\n  }\n\n  public buildRecord(spec: PodmanContainerSpec): MeshInstanceRecord {\n    const host = this.config.router.host\n    const url = spec.hostPort === null ? null : `http://${host}:${spec.hostPort}`\n    return {\n      id: spec.id,\n      service: spec.service.name,\n      serviceType: spec.service.type,\n      status: 'running',\n      pid: null,\n      port: spec.hostPort,\n      host,\n      url,\n      command: this.runServiceArgs(spec),\n      cwd: spec.service.cwd,\n      logFile: spec.logFile,\n      startedAt: new Date().toISOString(),\n      metadata: {\n        runtime: 'podman',\n        containerName: spec.name,\n        containerPort: spec.containerPort,\n        image: spec.image,\n        index: spec.index,\n        routes: spec.service.routes,\n        hsmRoutes: spec.service.hsmRoutes,\n        strategy: spec.service.strategy,\n        healthPath: spec.service.healthPath,\n        meshApp: this.config.app\n      }\n    }\n  }\n\n  private buildEnv(spec: PodmanContainerSpec): Record<string, string> {\n    const service = spec.service\n    return {\n      ...service.env,\n      ...service.podman.env,\n      MESH_APP: this.config.app,\n      MESH_SERVICE: service.name,\n      MESH_SERVICE_TYPE: service.type,\n      MESH_INSTANCE_ID: spec.id,\n      MESH_INSTANCE_INDEX: String(spec.index),\n      MESH_REGISTRY_TYPE: this.config.registry.type,\n      MESH_REGISTRY_URL: this.config.registry.url,\n      MESH_ROUTER_HOST: this.config.router.host,\n      MESH_ROUTER_PORT: String(this.config.router.port),\n      ...(spec.containerPort === null ? {} : { PORT: String(spec.containerPort), MESH_PORT: String(spec.containerPort) })\n    }\n  }\n\n  private buildLabels(spec: PodmanContainerSpec): Record<string, string> {\n    return {\n      ...spec.service.podman.labels,\n      'panom.mesh.app': this.config.app,\n      'panom.mesh.id': spec.id,\n      'panom.mesh.service': spec.service.name,\n      'panom.mesh.serviceType': spec.service.type,\n      'panom.mesh.routes': JSON.stringify(spec.service.routes),\n      'panom.mesh.hsmRoutes': JSON.stringify(spec.service.hsmRoutes),\n      'panom.mesh.strategy': spec.service.strategy,\n      'panom.mesh.healthPath': spec.service.healthPath ?? '',\n      'panom.mesh.hostPort': spec.hostPort === null ? '' : String(spec.hostPort),\n      'panom.mesh.containerPort': spec.containerPort === null ? '' : String(spec.containerPort)\n    }\n  }\n}\n","import type { NormalizedMeshConfig, NormalizedMeshServiceConfig } from '../core/types.js'\nimport { MeshIdFactory } from '../ids/MeshIdFactory.js'\nimport { PortAllocator } from '../process/PortAllocator.js'\nimport { LogStore } from '../logs/LogStore.js'\nimport type { PodmanContainerSpec } from './PodmanCommandBuilder.js'\n\nexport class PodmanPlan {\n  private readonly ids = new MeshIdFactory()\n  private readonly ports = new PortAllocator()\n  private readonly logs: LogStore\n\n  public constructor(private readonly config: NormalizedMeshConfig) {\n    this.logs = new LogStore(config.runtime.logsDir)\n  }\n\n  public async build(services = Array.from(this.config.services.values()), instancesOverride?: number): Promise<readonly PodmanContainerSpec[]> {\n    const specs: PodmanContainerSpec[] = []\n    for (const service of services) {\n      const image = this.imageFor(service)\n      const count = instancesOverride ?? service.instances\n      for (let index = 0; index < count; index += 1) {\n        const id = this.ids.createInstanceId(service.name)\n        const containerPort = service.type === 'worker' ? null : service.podman.containerPort\n        const hostPort = containerPort === null\n          ? null\n          : await this.ports.reservePreferred(index === 0 ? service.port : undefined, service.portRange)\n        specs.push({\n          id,\n          name: this.containerName(service.name, index, id),\n          image,\n          service,\n          index,\n          hostPort,\n          containerPort,\n          logFile: this.logs.getLogPath(id)\n        })\n      }\n    }\n    return specs\n  }\n\n  public containerName(serviceName: string, index: number, id: string): string {\n    const suffix = id.split('-').pop() ?? String(index + 1)\n    return `${this.config.runtime.podman.containerPrefix}-${serviceName}-${index + 1}-${suffix}`\n  }\n\n  private imageFor(service: NormalizedMeshServiceConfig): string {\n    const image = service.podman.image ?? service.image\n    if (!image) {\n      throw new Error(`Service \"${service.name}\" needs image or podman.image when runtime.mode is \"podman\".`)\n    }\n    return image\n  }\n}\n","import { spawn } from 'node:child_process'\n\nexport interface PodmanRunResult {\n  readonly code: number\n  readonly stdout: string\n  readonly stderr: string\n}\n\nexport class PodmanRunner {\n  public constructor(private readonly podmanPath: string) {}\n\n  public async run(args: readonly string[], options: { readonly allowFailure?: boolean } = {}): Promise<PodmanRunResult> {\n    const result = await new Promise<PodmanRunResult>((resolve, reject) => {\n      const child = spawn(this.podmanPath, [...args], { stdio: ['ignore', 'pipe', 'pipe'] })\n      let stdout = ''\n      let stderr = ''\n      child.stdout?.on('data', chunk => { stdout += chunk.toString('utf8') })\n      child.stderr?.on('data', chunk => { stderr += chunk.toString('utf8') })\n      child.once('error', reject)\n      child.once('exit', code => resolve({ code: code ?? 0, stdout, stderr }))\n    })\n    if (!options.allowFailure && result.code !== 0) {\n      throw new Error(`podman ${args.join(' ')} failed with code ${result.code}: ${result.stderr || result.stdout}`.trim())\n    }\n    return result\n  }\n}\n","import type { MeshPsOptions, MeshRunOptions, MeshWatchOptions, NormalizedMeshConfig } from '../core/types.js'\nimport { InstanceIdResolver } from '../ids/InstanceIdResolver.js'\nimport { LogStore } from '../logs/LogStore.js'\nimport { MeshProcessSupervisor } from './MeshProcessSupervisor.js'\nimport { RegistryFactory } from '../registry/RegistryFactory.js'\nimport type { MeshRegistry } from '../registry/types.js'\nimport { PodmanSupervisor } from '../podman/PodmanSupervisor.js'\nimport { MeshStreamFactory } from '../streaming/MeshStreamFactory.js'\nimport type { MeshLogStreamPayload } from '../streaming/types.js'\n\nexport class MeshRuntime {\n  private readonly registry: MeshRegistry\n  private readonly logStore: LogStore\n\n  public constructor(private readonly config: NormalizedMeshConfig) {\n    this.registry = new RegistryFactory().create(config)\n    this.logStore = new LogStore(config.runtime.logsDir)\n  }\n\n  public async run(options: MeshRunOptions = {}): Promise<void> {\n    if (this.config.runtime.mode === 'podman') {\n      await new PodmanSupervisor(this.config).run(options)\n      return\n    }\n    await new MeshProcessSupervisor(this.config).run(options)\n  }\n\n  public async ps(options: MeshPsOptions = {}): Promise<string> {\n    const instances = await this.registry.list({ includeExpired: true })\n\n    if (options.json) return `${JSON.stringify(instances, null, 2)}\\n`\n    if (instances.length === 0) return 'No mesh instances found.\\n'\n\n    const rows = instances.map(instance => ({\n      id: instance.id,\n      service: instance.service,\n      status: instance.status,\n      port: instance.port === null ? '-' : String(instance.port),\n      pid: instance.pid === null ? '-' : String(instance.pid),\n      url: instance.url ?? '-',\n      seen: instance.lastSeenAt ? this.age(instance.lastSeenAt) : '-'\n    }))\n\n    return this.table(rows)\n  }\n\n  public async watch(prefix: string, options: MeshWatchOptions = {}): Promise<() => void> {\n    const instances = await this.registry.list({ includeExpired: true })\n    const instance = new InstanceIdResolver().resolve(instances, prefix)\n    const last = await this.logStore.readLastLines(instance.logFile, options.lines ?? 80)\n    if (last) process.stdout.write(`${last}\\n`)\n    if (options.stream) {\n      const subscriber = new MeshStreamFactory().createSubscriber(this.config)\n      if (!subscriber) return this.logStore.tail(instance.logFile, chunk => process.stdout.write(chunk))\n      return Promise.resolve(subscriber.subscribe(['mesh.log'], event => {\n        if (event.instanceId !== instance.id) return\n        const payload = event.payload as MeshLogStreamPayload\n        process.stdout.write(payload.chunk)\n      })).then(stop => () => { void stop() })\n    }\n    return this.logStore.tail(instance.logFile, chunk => process.stdout.write(chunk))\n  }\n\n  private table(rows: readonly Record<string, string>[]): string {\n    const headers = ['ID', 'SERVICE', 'STATUS', 'PORT', 'PID', 'URL', 'LAST SEEN']\n    const keys = ['id', 'service', 'status', 'port', 'pid', 'url', 'seen']\n    const widths = keys.map((key, index) => Math.max(headers[index]!.length, ...rows.map(row => row[key]!.length)))\n    const format = (values: readonly string[]) => values.map((value, index) => value.padEnd(widths[index]!)).join('  ')\n    return `${format(headers)}\\n${format(widths.map(width => '-'.repeat(width)))}\\n${rows.map(row => format(keys.map(key => row[key]!))).join('\\n')}\\n`\n  }\n\n  private age(iso: string): string {\n    const ms = Date.now() - new Date(iso).getTime()\n    if (!Number.isFinite(ms) || ms < 0) return 'now'\n    if (ms < 1_000) return 'now'\n    if (ms < 60_000) return `${Math.floor(ms / 1_000)}s ago`\n    if (ms < 3_600_000) return `${Math.floor(ms / 60_000)}m ago`\n    return `${Math.floor(ms / 3_600_000)}h ago`\n  }\n}\n","import type { MeshInstanceRecord } from '../core/types.js'\n\nexport class ProcessHealth {\n  public isAlive(pid: number | null): boolean {\n    if (pid === null) return false\n    try {\n      process.kill(pid, 0)\n      return true\n    } catch {\n      return false\n    }\n  }\n\n  public refresh(instance: MeshInstanceRecord): MeshInstanceRecord {\n    if (instance.status === 'stopped' || instance.status === 'failed') return instance\n    return this.isAlive(instance.pid)\n      ? { ...instance, status: 'running' }\n      : { ...instance, status: 'unknown' }\n  }\n}\n","import http, { type IncomingMessage, type ServerResponse } from 'node:http'\nimport https, { type ServerOptions as HttpsServerOptions } from 'node:https'\nimport net from 'node:net'\nimport fs from 'node:fs'\nimport { randomUUID } from 'node:crypto'\nimport type { MeshConnectionCounters, NormalizedMeshConfig } from '../core/types.js'\nimport { ActiveConnectionTracker, type ActiveConnectionSnapshot } from '../drain/ActiveConnectionTracker.js'\nimport { InstanceRegistry } from './InstanceRegistry.js'\nimport { LoadBalancer } from './LoadBalancer.js'\nimport { ProxyHeaders } from './ProxyHeaders.js'\nimport { RouteMatcher } from './RouteMatcher.js'\nimport { StickySession } from './StickySession.js'\nimport { RouterMetrics } from '../observability/RouterMetrics.js'\nimport { formatOrigin } from '../utils/origin.js'\n\nexport interface MeshRouterServerOptions {\n  readonly config: NormalizedMeshConfig\n  readonly log?: (line: string) => void\n}\n\nexport interface MeshRouterDrainResult {\n  readonly idle: boolean\n  readonly snapshot: ActiveConnectionSnapshot\n}\n\nexport class MeshRouterServer {\n  private readonly servers: http.Server[]\n  private readonly registry: InstanceRegistry\n  private readonly matcher = new RouteMatcher()\n  private readonly headers = new ProxyHeaders()\n  private readonly balancer: LoadBalancer\n  private readonly tracker = new ActiveConnectionTracker()\n  private readonly metrics = new RouterMetrics()\n  private readonly instanceService = new Map<string, string>()\n  private closed = false\n  private draining = false\n\n  public constructor(private readonly options: MeshRouterServerOptions) {\n    this.registry = new InstanceRegistry(options.config)\n    this.balancer = new LoadBalancer(new StickySession({\n      cookieName: options.config.router.cookieName,\n      secret: options.config.router.secret,\n      secure: options.config.router.secureCookies\n    }))\n    this.servers = this.createServers()\n  }\n\n  public async listen(): Promise<void> {\n    const primaryPort = this.options.config.router.port\n    const additionalPorts = this.options.config.router.tls.enabled\n      ? this.options.config.router.tls.additionalPorts\n      : []\n    const ports = [primaryPort, ...additionalPorts]\n\n    for (let index = 0; index < ports.length; index += 1) {\n      const port = ports[index]!\n      const isPrimary = index === 0\n      const server = this.servers[index]!\n      try {\n        await this.listenServer(server, port)\n        this.log(`mesh router listening on ${formatOrigin(this.protocolFor(server), this.options.config.router.host, port)}`)\n      } catch (error) {\n        if (isPrimary) throw error\n        this.log(`mesh router could not listen on ${formatOrigin(this.protocolFor(server), this.options.config.router.host, port)} (${(error as NodeJS.ErrnoException).code ?? (error as Error).message}); continuing with primary listener`)\n      }\n    }\n  }\n\n  public connectionSnapshot(): ActiveConnectionSnapshot {\n    return this.tracker.snapshot()\n  }\n\n  public async close(): Promise<void> {\n    await this.drainAndClose({\n      drainTimeoutMs: this.options.config.router.drainTimeoutMs,\n      socketDrainTimeoutMs: this.options.config.router.socketDrainTimeoutMs\n    })\n  }\n\n  public async drainAndClose(options: { readonly drainTimeoutMs?: number; readonly socketDrainTimeoutMs?: number } = {}): Promise<MeshRouterDrainResult> {\n    if (this.closed) return { idle: true, snapshot: this.tracker.snapshot() }\n    this.closed = true\n    this.draining = true\n\n    await Promise.all(this.servers.map(server => new Promise<void>(resolve => server.close(() => resolve()))))\n    const drainTimeoutMs = options.drainTimeoutMs ?? this.options.config.router.drainTimeoutMs\n    const socketDrainTimeoutMs = options.socketDrainTimeoutMs ?? this.options.config.router.socketDrainTimeoutMs\n    const httpIdle = await this.tracker.waitForIdle(drainTimeoutMs)\n\n    if (!httpIdle && socketDrainTimeoutMs >= 0) {\n      this.tracker.destroySockets()\n      await this.tracker.waitForIdle(socketDrainTimeoutMs)\n    }\n\n    const snapshot = this.tracker.snapshot()\n    this.log(`router drained: idle=${snapshot.total.total === 0} active=${snapshot.total.total}`)\n    return { idle: snapshot.total.total === 0, snapshot }\n  }\n\n  private async handle(req: IncomingMessage, res: ServerResponse): Promise<void> {\n    const requestId = randomUUID().slice(0, 8)\n    const forwardedProto = this.protocolForSocket(req.socket)\n    try {\n      const url = new URL(req.url ?? '/', `${forwardedProto}://${req.headers.host ?? 'localhost'}`)\n      if (this.handleManagement(url, req, res)) return\n      if (this.draining) {\n        this.respond(res, 503, { error: 'mesh_router_draining', requestId })\n        return\n      }\n\n      const routed = await this.selectTarget(url.pathname, req)\n      if (!routed) {\n        this.metrics.recordNoTarget()\n        this.respond(res, 503, { error: 'mesh_no_target', requestId })\n        return\n      }\n\n      const { instance, service, target, setCookie } = routed\n      this.metrics.recordProxy(service)\n      if (setCookie) res.setHeader('Set-Cookie', setCookie)\n      this.balancer.begin(instance.id)\n      const endTracked = this.tracker.beginHttp(instance.id)\n      await this.proxyHttp(req, res, target, requestId, instance.serviceType, forwardedProto)\n        .finally(() => {\n          endTracked()\n          this.balancer.end(instance.id)\n        })\n    } catch (error) {\n      this.metrics.recordError()\n      this.respond(res, 502, { error: 'mesh_proxy_error', message: (error as Error).message, requestId })\n    }\n  }\n\n  private async handleUpgrade(req: IncomingMessage, socket: net.Socket, head: Buffer): Promise<void> {\n    if (this.draining) {\n      socket.write('HTTP/1.1 503 Service Unavailable\\r\\nConnection: close\\r\\n\\r\\n')\n      socket.destroy()\n      return\n    }\n\n    try {\n      const forwardedProto = this.protocolForSocket(req.socket)\n      const url = new URL(req.url ?? '/', `${forwardedProto}://${req.headers.host ?? 'localhost'}`)\n      const routed = await this.selectTarget(url.pathname, req)\n      if (!routed) {\n        this.metrics.recordNoTarget()\n        socket.write('HTTP/1.1 503 Service Unavailable\\r\\nConnection: close\\r\\n\\r\\n')\n        socket.destroy()\n        return\n      }\n      const { instance, service, target } = routed\n      this.metrics.recordUpgrade(service)\n      this.balancer.begin(instance.id)\n      const targetSocket = net.connect(Number(target.port || 80), target.hostname, () => {\n        const path = `${target.pathname}${target.search}`\n        const proxiedHeaders = this.headers.build(req.headers, target, req.socket.remoteAddress, {\n          serviceType: instance.serviceType,\n          meshCookieName: this.options.config.router.cookieName,\n          forwardedProto,\n        })\n        targetSocket.write(`${req.method ?? 'GET'} ${path} HTTP/${req.httpVersion}\\r\\n`)\n        for (const [key, value] of Object.entries(proxiedHeaders)) {\n          if (key.toLowerCase() === 'host') continue\n          if (Array.isArray(value)) {\n            for (const item of value) targetSocket.write(`${key}: ${item}\\r\\n`)\n          } else if (value !== undefined) {\n            targetSocket.write(`${key}: ${value}\\r\\n`)\n          }\n        }\n        targetSocket.write(`host: ${target.host}\\r\\n`)\n        if (req.headers.connection) targetSocket.write(`connection: ${req.headers.connection}\\r\\n`)\n        if (req.headers.upgrade) targetSocket.write(`upgrade: ${req.headers.upgrade}\\r\\n`)\n        targetSocket.write(`x-forwarded-host: ${req.headers.host ?? ''}\\r\\n`)\n        targetSocket.write(`x-forwarded-proto: ${forwardedProto}\\r\\n`)\n        targetSocket.write('\\r\\n')\n        if (head.length) targetSocket.write(head)\n        targetSocket.pipe(socket)\n        socket.pipe(targetSocket)\n      })\n      const endTracked = this.tracker.trackSocket(instance.id, socket, targetSocket)\n      let closed = false\n      const close = (): void => {\n        if (closed) return\n        closed = true\n        endTracked()\n        this.balancer.end(instance.id)\n      }\n      socket.once('close', close)\n      targetSocket.once('close', close)\n      targetSocket.once('error', () => socket.destroy())\n      socket.once('error', () => targetSocket.destroy())\n    } catch {\n      this.metrics.recordError()\n      socket.write('HTTP/1.1 502 Bad Gateway\\r\\nConnection: close\\r\\n\\r\\n')\n      socket.destroy()\n    }\n  }\n\n  private async selectTarget(pathname: string, req: IncomingMessage): Promise<{ instance: import('../core/types.js').MeshInstanceRecord; service: string; target: URL; setCookie?: string } | null> {\n    const routable = await this.registry.listRoutable()\n    const match = this.matcher.match(pathname, routable)\n    if (!match) return null\n\n    const service = this.options.config.services.get(match.service)\n    if (!service) return null\n    const healthy = await this.registry.listHealthyByService(match.service)\n    const selection = this.balancer.select(match.service, service.strategy, healthy, req.headers)\n    if (!selection || !selection.instance.url) return null\n    const target = new URL(req.url ?? '/', selection.instance.url)\n    this.instanceService.set(selection.instance.id, match.service)\n    return { instance: selection.instance, service: match.service, target, ...(selection.setCookie ? { setCookie: selection.setCookie } : {}) }\n  }\n\n  private handleManagement(url: URL, req: IncomingMessage, res: ServerResponse): boolean {\n    if (!this.options.config.observability.enabled) return false\n    if (req.method !== 'GET') return false\n    const base = this.options.config.observability.path\n    if (url.pathname !== base && !url.pathname.startsWith(`${base}/`)) return false\n\n    if (url.pathname === base || url.pathname === `${base}/health`) {\n      this.respond(res, 200, { ok: true, app: this.options.config.app, generatedAt: new Date().toISOString(), draining: this.draining })\n      return true\n    }\n\n    if (url.pathname === `${base}/metrics`) {\n      this.respond(res, 200, this.metrics.snapshot(this.tracker.snapshot().total, this.activeByService(), this.draining) as unknown as Record<string, unknown>)\n      return true\n    }\n\n    if (url.pathname === `${base}/routes`) {\n      this.respond(res, 200, { routes: this.routePlan() })\n      return true\n    }\n\n    this.respond(res, 404, { error: 'mesh_management_not_found' })\n    return true\n  }\n\n  private activeByService(): ReadonlyMap<string, MeshConnectionCounters> {\n    const byService = new Map<string, MeshConnectionCounters>()\n    const snapshot = this.tracker.snapshot()\n    for (const [instanceId, counters] of Object.entries(snapshot.byInstance)) {\n      const service = this.instanceService.get(instanceId) ?? instanceId.split('-')[0] ?? 'unknown'\n      const existing = byService.get(service) ?? { http: 0, sockets: 0, total: 0 }\n      byService.set(service, {\n        http: existing.http + counters.http,\n        sockets: existing.sockets + counters.sockets,\n        total: existing.total + counters.total\n      })\n    }\n    return byService\n  }\n\n  private routePlan(): readonly Record<string, unknown>[] {\n    const routes: Record<string, unknown>[] = []\n    for (const service of this.options.config.services.values()) {\n      for (const route of service.routes) routes.push({ service: service.name, route, strategy: service.strategy })\n    }\n    routes.sort((a, b) => String(b.route).length - String(a.route).length || String(a.service).localeCompare(String(b.service)))\n    return routes\n  }\n\n\n  private async proxyHttp(\n    req: IncomingMessage,\n    res: ServerResponse,\n    target: URL,\n    requestId: string,\n    serviceType: import('../core/types.js').MeshServiceType,\n    forwardedProto: 'http' | 'https'\n  ): Promise<void> {\n    await new Promise<void>((resolve, reject) => {\n      const proxyReq = http.request(target, {\n        method: req.method,\n        headers: this.headers.build(req.headers, target, req.socket.remoteAddress, {\n          serviceType,\n          meshCookieName: this.options.config.router.cookieName,\n          forwardedProto,\n        }),\n        timeout: this.options.config.router.requestTimeoutMs\n      }, proxyRes => {\n        res.statusCode = proxyRes.statusCode ?? 502\n        res.statusMessage = proxyRes.statusMessage ?? res.statusMessage\n        for (const [key, value] of Object.entries(proxyRes.headers)) {\n          if (value !== undefined) res.setHeader(key, value)\n        }\n        res.setHeader('x-mesh-request-id', requestId)\n        proxyRes.pipe(res)\n        proxyRes.once('end', resolve)\n      })\n\n      proxyReq.once('timeout', () => {\n        proxyReq.destroy(new Error('Target request timed out.'))\n      })\n      proxyReq.once('error', reject)\n      req.pipe(proxyReq)\n    })\n  }\n\n  private createServers(): http.Server[] {\n    const requestHandler = (req: IncomingMessage, res: ServerResponse) => void this.handle(req, res)\n    const upgradeHandler = (req: IncomingMessage, socket: net.Socket, head: Buffer) => void this.handleUpgrade(req, socket, head)\n    const createHttpServer = () => {\n      const server = http.createServer(requestHandler)\n      server.on('upgrade', upgradeHandler)\n      return server\n    }\n    if (!this.options.config.router.tls.enabled) return [createHttpServer()]\n\n    const httpsOptions = this.httpsOptions()\n    return [createHttpServerForTls(httpsOptions, requestHandler, upgradeHandler), ...this.options.config.router.tls.additionalPorts.map(() => createHttpServerForTls(httpsOptions, requestHandler, upgradeHandler))]\n  }\n\n  private httpsOptions(): HttpsServerOptions {\n    const tls = this.options.config.router.tls\n    return {\n      cert: fs.readFileSync(tls.certPath!, 'utf8'),\n      key: fs.readFileSync(tls.keyPath!, 'utf8'),\n      ...(tls.caPath ? { ca: fs.readFileSync(tls.caPath, 'utf8') } : {}),\n      ...(tls.passphraseEnv ? { passphrase: process.env[tls.passphraseEnv] ?? '' } : {}),\n      ...(tls.minVersion ? { minVersion: tls.minVersion } : {}),\n    }\n  }\n\n  private async listenServer(server: http.Server, port: number): Promise<void> {\n    await new Promise<void>((resolve, reject) => {\n      server.once('error', reject)\n      server.listen(port, this.options.config.router.host, () => {\n        server.off('error', reject)\n        resolve()\n      })\n    })\n  }\n\n  private protocolFor(server: http.Server): 'http' | 'https' {\n    return server instanceof https.Server ? 'https' : 'http'\n  }\n\n  private protocolForSocket(socket: IncomingMessage['socket']): 'http' | 'https' {\n    return 'encrypted' in socket && Boolean((socket as IncomingMessage['socket'] & { encrypted?: boolean }).encrypted)\n      ? 'https'\n      : 'http'\n  }\n\n  private respond(res: ServerResponse, statusCode: number, body: Record<string, unknown>): void {\n    res.statusCode = statusCode\n    res.setHeader('content-type', 'application/json; charset=utf-8')\n    res.end(`${JSON.stringify(body)}\\n`)\n  }\n\n  private log(line: string): void {\n    this.options.log?.(`[router] ${line}`)\n  }\n}\n\nfunction createHttpServerForTls(\n  options: HttpsServerOptions,\n  requestHandler: (req: IncomingMessage, res: ServerResponse) => void,\n  upgradeHandler: (req: IncomingMessage, socket: net.Socket, head: Buffer) => void\n): http.Server {\n  const server = https.createServer(options, requestHandler)\n  server.on('upgrade', upgradeHandler)\n  return server\n}\n","import net from 'node:net'\nimport type { MeshConnectionCounters } from '../core/types.js'\n\nexport interface ActiveConnectionSnapshot {\n  readonly total: MeshConnectionCounters\n  readonly byInstance: Readonly<Record<string, MeshConnectionCounters>>\n}\n\nexport class ActiveConnectionTracker {\n  private readonly http = new Map<string, number>()\n  private readonly sockets = new Map<string, Set<net.Socket>>()\n  private readonly waiters = new Set<() => void>()\n\n  public beginHttp(instanceId: string): () => void {\n    this.http.set(instanceId, (this.http.get(instanceId) ?? 0) + 1)\n    let ended = false\n    return () => {\n      if (ended) return\n      ended = true\n      this.http.set(instanceId, Math.max(0, (this.http.get(instanceId) ?? 0) - 1))\n      this.notifyIfIdle()\n    }\n  }\n\n  public trackSocket(instanceId: string, ...tracked: net.Socket[]): () => void {\n    let set = this.sockets.get(instanceId)\n    if (!set) {\n      set = new Set()\n      this.sockets.set(instanceId, set)\n    }\n    for (const socket of tracked) set.add(socket)\n\n    let ended = false\n    const done = (): void => {\n      if (ended) return\n      ended = true\n      const current = this.sockets.get(instanceId)\n      if (current) {\n        for (const socket of tracked) current.delete(socket)\n        if (current.size === 0) this.sockets.delete(instanceId)\n      }\n      this.notifyIfIdle()\n    }\n\n    for (const socket of tracked) {\n      socket.once('close', done)\n      socket.once('error', done)\n    }\n\n    return done\n  }\n\n  public snapshot(): ActiveConnectionSnapshot {\n    const ids = new Set([...this.http.keys(), ...this.sockets.keys()])\n    const byInstance: Record<string, MeshConnectionCounters> = {}\n    let totalHttp = 0\n    let totalSockets = 0\n\n    for (const id of ids) {\n      const http = this.http.get(id) ?? 0\n      const sockets = this.sockets.get(id)?.size ?? 0\n      byInstance[id] = { http, sockets, total: http + sockets }\n      totalHttp += http\n      totalSockets += sockets\n    }\n\n    return {\n      total: { http: totalHttp, sockets: totalSockets, total: totalHttp + totalSockets },\n      byInstance\n    }\n  }\n\n  public isIdle(): boolean {\n    return this.snapshot().total.total === 0\n  }\n\n  public async waitForIdle(timeoutMs: number): Promise<boolean> {\n    if (this.isIdle()) return true\n    if (timeoutMs <= 0) return false\n\n    return await new Promise<boolean>(resolve => {\n      const timeout = setTimeout(() => {\n        this.waiters.delete(done)\n        resolve(false)\n      }, timeoutMs)\n      timeout.unref?.()\n\n      const done = (): void => {\n        clearTimeout(timeout)\n        this.waiters.delete(done)\n        resolve(true)\n      }\n\n      this.waiters.add(done)\n    })\n  }\n\n  public destroySockets(): void {\n    for (const set of this.sockets.values()) {\n      for (const socket of set) socket.destroy()\n    }\n    this.notifyIfIdle()\n  }\n\n  private notifyIfIdle(): void {\n    if (!this.isIdle()) return\n    for (const waiter of Array.from(this.waiters)) waiter()\n  }\n}\n","import http from 'node:http'\nimport type { MeshInstanceRecord, NormalizedMeshConfig } from '../core/types.js'\nimport { RegistryFactory } from '../registry/RegistryFactory.js'\nimport { RegistryRecordTools } from '../registry/RegistryRecordTools.js'\nimport type { MeshRegistry } from '../registry/types.js'\n\nexport class InstanceRegistry {\n  private readonly registry: MeshRegistry\n  private readonly healthCache = new Map<string, { healthy: boolean; checkedAt: number }>()\n\n  public constructor(private readonly config: NormalizedMeshConfig) {\n    this.registry = new RegistryFactory().create(config)\n  }\n\n  public async listRoutable(): Promise<readonly MeshInstanceRecord[]> {\n    const records = await this.registry.list()\n    return records.filter(instance => RegistryRecordTools.isRoutable(instance))\n  }\n\n  public async listHealthyByService(service: string): Promise<readonly MeshInstanceRecord[]> {\n    const instances = (await this.listRoutable()).filter(instance => instance.service === service)\n    const serviceConfig = this.config.services.get(service)\n    if (!serviceConfig?.healthPath) return instances\n\n    const results = await Promise.all(instances.map(async instance => ({\n      instance,\n      healthy: await this.checkHttpHealth(instance, serviceConfig.healthPath!)\n    })))\n    return results.filter(result => result.healthy).map(result => result.instance)\n  }\n\n  private async checkHttpHealth(instance: MeshInstanceRecord, healthPath: string): Promise<boolean> {\n    if (!instance.url) return false\n    const cache = this.healthCache.get(instance.id)\n    const now = Date.now()\n    if (cache && now - cache.checkedAt < 1_000) return cache.healthy\n\n    const target = new URL(healthPath, instance.url)\n    const healthy = await new Promise<boolean>(resolve => {\n      const req = http.request(target, { method: 'GET', timeout: 1_000 }, res => {\n        res.resume()\n        resolve((res.statusCode ?? 500) >= 200 && (res.statusCode ?? 500) < 500)\n      })\n      req.on('timeout', () => {\n        req.destroy()\n        resolve(false)\n      })\n      req.on('error', () => resolve(false))\n      req.end()\n    })\n    this.healthCache.set(instance.id, { healthy, checkedAt: now })\n    return healthy\n  }\n}\n","import type { IncomingHttpHeaders } from 'node:http'\nimport type { MeshInstanceRecord, MeshServiceStrategy } from '../core/types.js'\nimport { StickySession } from './StickySession.js'\n\nexport interface LoadBalancerSelection {\n  readonly instance: MeshInstanceRecord\n  readonly setCookie?: string\n}\n\nexport class LoadBalancer {\n  private readonly cursors = new Map<string, number>()\n  private readonly active = new Map<string, number>()\n\n  public constructor(private readonly sticky: StickySession) {}\n\n  public select(\n    service: string,\n    strategy: MeshServiceStrategy,\n    instances: readonly MeshInstanceRecord[],\n    headers: IncomingHttpHeaders\n  ): LoadBalancerSelection | null {\n    if (instances.length === 0) return null\n\n    if (strategy === 'session-affinity') {\n      const cookie = this.sticky.read(headers, service)\n      const stickyTarget = cookie ? instances.find(instance => instance.id === cookie.nodeId) : undefined\n      if (stickyTarget) return { instance: stickyTarget }\n      const instance = this.roundRobin(service, instances)\n      return { instance, setCookie: this.sticky.createHeader(service, instance.id) }\n    }\n\n    if (strategy === 'least-connections') {\n      return { instance: this.leastConnections(instances) }\n    }\n\n    return { instance: this.roundRobin(service, instances) }\n  }\n\n  public begin(instanceId: string): void {\n    this.active.set(instanceId, (this.active.get(instanceId) ?? 0) + 1)\n  }\n\n  public end(instanceId: string): void {\n    this.active.set(instanceId, Math.max(0, (this.active.get(instanceId) ?? 0) - 1))\n  }\n\n  private roundRobin(service: string, instances: readonly MeshInstanceRecord[]): MeshInstanceRecord {\n    const cursor = this.cursors.get(service) ?? 0\n    const instance = instances[cursor % instances.length]!\n    this.cursors.set(service, cursor + 1)\n    return instance\n  }\n\n  private leastConnections(instances: readonly MeshInstanceRecord[]): MeshInstanceRecord {\n    return [...instances].sort((a, b) => (this.active.get(a.id) ?? 0) - (this.active.get(b.id) ?? 0))[0]!\n  }\n}\n","import type { IncomingHttpHeaders } from 'node:http'\nimport type { MeshServiceType } from '../core/types.js'\n\nconst HOP_BY_HOP = new Set([\n  'connection',\n  'keep-alive',\n  'proxy-authenticate',\n  'proxy-authorization',\n  'te',\n  'trailer',\n  'transfer-encoding',\n  'upgrade'\n])\n\nexport class ProxyHeaders {\n  public build(\n    headers: IncomingHttpHeaders,\n    target: URL,\n    remoteAddress?: string,\n    options: { serviceType?: MeshServiceType; meshCookieName?: string; forwardedProto?: 'http' | 'https' } = {}\n  ): IncomingHttpHeaders {\n    const next: IncomingHttpHeaders = {}\n    for (const [key, value] of Object.entries(headers)) {\n      if (HOP_BY_HOP.has(key.toLowerCase())) continue\n      next[key] = value\n    }\n\n    if (options.serviceType === 'frontend') {\n      delete next.cookie\n    } else if (typeof next.cookie === 'string' && options.meshCookieName) {\n      const sanitized = this.stripCookie(next.cookie, options.meshCookieName)\n      if (sanitized) next.cookie = sanitized\n      else delete next.cookie\n    }\n\n    next.host = target.host\n    next['x-forwarded-host'] = headers.host\n    next['x-forwarded-proto'] = options.forwardedProto ?? 'http'\n    if (remoteAddress) {\n      const current = headers['x-forwarded-for']\n      next['x-forwarded-for'] = current ? `${String(current)}, ${remoteAddress}` : remoteAddress\n    }\n    return next\n  }\n\n  private stripCookie(cookieHeader: string, cookieName: string): string {\n    return cookieHeader\n      .split(';')\n      .map(part => part.trim())\n      .filter(Boolean)\n      .filter(part => !part.startsWith(`${cookieName}=`))\n      .join('; ')\n  }\n}\n","import type { MeshInstanceRecord } from '../core/types.js'\nimport type { MeshRouteMatch } from './types.js'\n\ninterface RouteCandidate {\n  readonly service: string\n  readonly route: string\n}\n\nexport class RouteMatcher {\n  public match(pathname: string, instances: readonly MeshInstanceRecord[]): MeshRouteMatch | null {\n    const routes = [...this.collectRoutes(instances)]\n    routes.sort((a, b) => this.score(b.route) - this.score(a.route) || a.route.localeCompare(b.route))\n    for (const route of routes) {\n      if (this.matches(pathname, route.route)) {\n        return { service: route.service, route: route.route, pathname }\n      }\n    }\n    return null\n  }\n\n  public collectRoutes(instances: readonly MeshInstanceRecord[]): readonly RouteCandidate[] {\n    const seen = new Set<string>()\n    const routes: RouteCandidate[] = []\n    for (const instance of instances) {\n      const metadata = instance.metadata ?? {}\n      const rawRoutes = Array.isArray(metadata.routes) ? metadata.routes : []\n      for (const item of rawRoutes) {\n        if (typeof item !== 'string') continue\n        const route = this.normalizeRoute(item)\n        const key = `${instance.service}:${route}`\n        if (seen.has(key)) continue\n        seen.add(key)\n        routes.push({ service: instance.service, route })\n      }\n    }\n    return routes\n  }\n\n  private matches(pathname: string, route: string): boolean {\n    const path = this.normalizeRoute(pathname)\n    if (route === '/') return true\n    if (!route.includes(':') && !route.includes('*')) return path === route || path.startsWith(`${route}/`)\n    return this.matchesPatternPrefix(path, route)\n  }\n\n  private matchesPatternPrefix(pathname: string, pattern: string): boolean {\n    const pathSegments = this.segments(pathname)\n    const routeSegments = this.segments(pattern)\n    if (routeSegments.length > pathSegments.length) return false\n    for (let index = 0; index < routeSegments.length; index += 1) {\n      const route = routeSegments[index]!\n      const path = pathSegments[index]!\n      if (route === '*') return true\n      if (route.startsWith(':')) {\n        if (!path) return false\n        continue\n      }\n      if (route !== path) return false\n    }\n    return true\n  }\n\n  private normalizeRoute(route: string): string {\n    if (route === '/') return '/'\n    return `/${route.replace(/^\\/+|\\/+$/g, '')}`\n  }\n\n  private segments(route: string): readonly string[] {\n    return route.split('/').filter(Boolean)\n  }\n\n  private score(route: string): number {\n    if (route === '/') return 0\n    return this.segments(route).reduce((score, segment) => {\n      if (segment === '*') return score + 1\n      if (segment.startsWith(':')) return score + 5\n      return score + 20 + segment.length\n    }, route.length)\n  }\n}\n","import crypto from 'node:crypto'\n\nexport interface StickyCookiePayload {\n  readonly service: string\n  readonly nodeId: string\n  readonly exp: number\n}\n\nexport class CookieSigner {\n  public constructor(private readonly secret: string) {\n    if (!secret || secret.length < 8) {\n      throw new Error('Mesh router secret must be at least 8 characters long.')\n    }\n  }\n\n  public sign(payload: StickyCookiePayload): string {\n    const body = Buffer.from(JSON.stringify(payload), 'utf8').toString('base64url')\n    const signature = this.hmac(body)\n    return `${body}.${signature}`\n  }\n\n  public verify(value: string | undefined, expectedService?: string): StickyCookiePayload | null {\n    if (!value) return null\n    const [body, signature] = value.split('.')\n    if (!body || !signature) return null\n    if (!this.safeEqual(signature, this.hmac(body))) return null\n\n    try {\n      const decoded = JSON.parse(Buffer.from(body, 'base64url').toString('utf8')) as Partial<StickyCookiePayload>\n      if (!decoded.service || !decoded.nodeId || typeof decoded.exp !== 'number') return null\n      if (decoded.exp < Math.floor(Date.now() / 1000)) return null\n      if (expectedService && decoded.service !== expectedService) return null\n      return { service: decoded.service, nodeId: decoded.nodeId, exp: decoded.exp }\n    } catch {\n      return null\n    }\n  }\n\n  private hmac(value: string): string {\n    return crypto.createHmac('sha256', this.secret).update(value).digest('base64url')\n  }\n\n  private safeEqual(left: string, right: string): boolean {\n    const a = Buffer.from(left)\n    const b = Buffer.from(right)\n    return a.length === b.length && crypto.timingSafeEqual(a, b)\n  }\n}\n","import type { IncomingHttpHeaders } from 'node:http'\nimport { CookieSigner, type StickyCookiePayload } from './CookieSigner.js'\n\nexport interface StickySessionOptions {\n  readonly cookieName: string\n  readonly secret: string\n  readonly ttlSeconds?: number\n  readonly secure?: boolean\n}\n\nexport class StickySession {\n  private readonly signer: CookieSigner\n  private readonly ttlSeconds: number\n\n  public constructor(private readonly options: StickySessionOptions) {\n    this.signer = new CookieSigner(options.secret)\n    this.ttlSeconds = options.ttlSeconds ?? 60 * 60 * 24 * 14\n  }\n\n  public read(headers: IncomingHttpHeaders, service: string): StickyCookiePayload | null {\n    const cookie = headers.cookie\n    const value = this.parseCookies(cookie)[this.options.cookieName]\n    return this.signer.verify(value, service)\n  }\n\n  public createHeader(service: string, nodeId: string): string {\n    const payload: StickyCookiePayload = {\n      service,\n      nodeId,\n      exp: Math.floor(Date.now() / 1000) + this.ttlSeconds\n    }\n    const parts = [\n      `${this.options.cookieName}=${this.signer.sign(payload)}`,\n      'Path=/',\n      'HttpOnly',\n      'SameSite=Lax'\n    ]\n    if (this.options.secure) parts.push('Secure')\n    return parts.join('; ')\n  }\n\n  private parseCookies(cookieHeader: string | undefined): Record<string, string> {\n    const cookies: Record<string, string> = {}\n    if (!cookieHeader) return cookies\n    for (const part of cookieHeader.split(';')) {\n      const index = part.indexOf('=')\n      if (index < 0) continue\n      const key = part.slice(0, index).trim()\n      const value = part.slice(index + 1).trim()\n      if (key) cookies[key] = value\n    }\n    return cookies\n  }\n}\n","import type { MeshConnectionCounters } from '../core/types.js'\nimport type { MeshRouterMetricsSnapshot, MeshRouterServiceStats } from './types.js'\n\ninterface MutableServiceStats {\n  service: string\n  requests: number\n  upgrades: number\n  errors: number\n}\n\nexport class RouterMetrics {\n  private readonly startedAt = new Date()\n  private requestsTotal = 0\n  private proxiedTotal = 0\n  private noTargetTotal = 0\n  private errorsTotal = 0\n  private upgradesTotal = 0\n  private readonly services = new Map<string, MutableServiceStats>()\n\n  public recordProxy(service: string): void {\n    this.requestsTotal += 1\n    this.proxiedTotal += 1\n    this.service(service).requests += 1\n  }\n\n  public recordUpgrade(service: string): void {\n    this.requestsTotal += 1\n    this.proxiedTotal += 1\n    this.upgradesTotal += 1\n    const stats = this.service(service)\n    stats.requests += 1\n    stats.upgrades += 1\n  }\n\n  public recordNoTarget(): void {\n    this.requestsTotal += 1\n    this.noTargetTotal += 1\n  }\n\n  public recordError(service?: string): void {\n    this.errorsTotal += 1\n    if (service) this.service(service).errors += 1\n  }\n\n  public snapshot(active: MeshConnectionCounters, serviceActive: ReadonlyMap<string, MeshConnectionCounters>, draining: boolean): MeshRouterMetricsSnapshot {\n    const services: MeshRouterServiceStats[] = []\n    for (const stats of this.services.values()) {\n      services.push({\n        service: stats.service,\n        requests: stats.requests,\n        upgrades: stats.upgrades,\n        errors: stats.errors,\n        active: serviceActive.get(stats.service) ?? { http: 0, sockets: 0, total: 0 }\n      })\n    }\n    services.sort((a, b) => a.service.localeCompare(b.service))\n    return {\n      router: {\n        startedAt: this.startedAt.toISOString(),\n        uptimeMs: Date.now() - this.startedAt.getTime(),\n        draining\n      },\n      requests: {\n        total: this.requestsTotal,\n        proxied: this.proxiedTotal,\n        noTarget: this.noTargetTotal,\n        errors: this.errorsTotal,\n        upgrades: this.upgradesTotal\n      },\n      active,\n      services\n    }\n  }\n\n  private service(service: string): MutableServiceStats {\n    const existing = this.services.get(service)\n    if (existing) return existing\n    const created: MutableServiceStats = { service, requests: 0, upgrades: 0, errors: 0 }\n    this.services.set(service, created)\n    return created\n  }\n}\n","import os from 'node:os'\nimport { MeshIdFactory } from '../ids/MeshIdFactory.js'\nimport { FileMeshRegistry } from '../registry/FileMeshRegistry.js'\nimport { RedisMeshRegistry } from '../registry/redis/RedisMeshRegistry.js'\nimport { HeartbeatLoop } from '../registry/HeartbeatLoop.js'\nimport type { MeshRegistry } from '../registry/types.js'\nimport type { MeshInstanceRecord, MeshServiceType, NormalizedMeshConfig } from '../core/types.js'\nimport { nowIso } from '../utils/time.js'\nimport type { MeshStreamPublisher } from '../streaming/types.js'\nimport { MeshStreamFactory } from '../streaming/MeshStreamFactory.js'\n\nexport interface MeshNodeOptions {\n  readonly app: string\n  readonly service: string\n  readonly serviceType?: MeshServiceType\n  readonly nodeId?: string\n  readonly internalUrl?: string\n  readonly port?: number\n  readonly host?: string\n  readonly registry?: MeshRegistry | { type: 'file'; stateDir: string } | { type: 'redis'; url: string; secret?: string; keyPrefix?: string }\n  readonly secret?: string\n  readonly heartbeatIntervalMs?: number\n  readonly ttlMs?: number\n  readonly metadata?: Record<string, unknown>\n  readonly stream?: MeshStreamPublisher | NormalizedMeshConfig\n}\n\nexport interface MeshNodeSignalHandlerOptions {\n  readonly onDrain?: () => Promise<void> | void\n  readonly onStop?: () => Promise<void> | void\n  readonly exit?: boolean\n}\n\nexport class MeshNode {\n  private readonly registry: MeshRegistry\n  private readonly id: string\n  private heartbeat: HeartbeatLoop | null = null\n  private readonly streamPublisher: MeshStreamPublisher | null\n  private record: MeshInstanceRecord | null = null\n  private stopping = false\n\n  public constructor(private readonly options: MeshNodeOptions) {\n    this.id = options.nodeId ?? new MeshIdFactory().createInstanceId(options.service)\n    this.registry = this.resolveRegistry(options)\n    this.streamPublisher = this.resolveStream(options)\n  }\n\n  public async start(): Promise<MeshInstanceRecord> {\n    const ttlMs = this.options.ttlMs ?? 15_000\n    const record = this.buildRecord()\n    this.record = await this.registry.register(record, { ttlMs })\n    this.heartbeat = new HeartbeatLoop(this.registry, this.record.id, this.options.heartbeatIntervalMs ?? 5_000, ttlMs)\n    this.heartbeat.start()\n    await this.streamPublisher?.publish({ kind: 'lifecycle', type: 'mesh.instance.started', instanceId: this.record.id, service: this.record.service, payload: { status: 'running', metadata: this.record.metadata } }).catch(() => undefined)\n    return this.record\n  }\n\n  public async drain(): Promise<void> {\n    if (!this.record) return\n    await this.streamPublisher?.publish({ kind: 'lifecycle', type: 'mesh.instance.draining', instanceId: this.record.id, service: this.record.service, payload: { status: 'draining' } }).catch(() => undefined)\n    await this.registry.markDraining(this.record.id)\n  }\n\n  public async stop(): Promise<void> {\n    if (!this.record) return\n    this.heartbeat?.stop()\n    await this.streamPublisher?.publish({ kind: 'lifecycle', type: 'mesh.instance.stopped', instanceId: this.record.id, service: this.record.service, payload: { status: 'stopped' } }).catch(() => undefined)\n    await this.registry.unregister(this.record.id)\n  }\n\n\n  public async emit<TPayload>(type: string, payload: TPayload): Promise<void> {\n    await this.streamPublisher?.publish({\n      kind: 'event',\n      type,\n      instanceId: this.record?.id ?? this.id,\n      service: this.options.service,\n      payload,\n      source: 'node'\n    })\n  }\n\n  public async log(stream: 'stdout' | 'stderr' | 'system', chunk: string | Buffer): Promise<void> {\n    await this.streamPublisher?.publishLog({\n      instanceId: this.record?.id ?? this.id,\n      service: this.options.service,\n      serviceType: this.options.serviceType ?? 'backend',\n      stream,\n      chunk,\n      source: 'node'\n    })\n  }\n\n  public installSignalHandlers(options: MeshNodeSignalHandlerOptions = {}): void {\n    const handler = (signal: NodeJS.Signals): void => {\n      void this.gracefulSignalStop(signal, options)\n    }\n    process.once('SIGTERM', handler)\n    process.once('SIGINT', handler)\n  }\n\n  private async gracefulSignalStop(signal: NodeJS.Signals, options: MeshNodeSignalHandlerOptions): Promise<void> {\n    if (this.stopping) return\n    this.stopping = true\n    await this.drain().catch(() => undefined)\n    await options.onDrain?.()\n    await options.onStop?.()\n    await this.stop().catch(() => undefined)\n    if (options.exit ?? true) {\n      process.exitCode = signal === 'SIGINT' ? 130 : 0\n      process.exit()\n    }\n  }\n\n  private buildRecord(): MeshInstanceRecord {\n    const port = this.options.port ?? numberFromEnv('MESH_PORT') ?? numberFromEnv('PORT')\n    const internalUrl = this.options.internalUrl ?? process.env.MESH_INTERNAL_URL ?? (port ? `http://${this.options.host ?? '127.0.0.1'}:${port}` : null)\n    return {\n      id: this.id,\n      service: this.options.service,\n      serviceType: this.options.serviceType ?? 'backend',\n      status: 'running',\n      pid: process.pid,\n      port: port ?? null,\n      host: this.options.host ?? os.hostname(),\n      url: internalUrl,\n      command: process.argv,\n      cwd: process.cwd(),\n      logFile: '',\n      startedAt: nowIso(),\n      metadata: {\n        ...(this.options.metadata ?? {}),\n        meshApp: this.options.app,\n        externalNode: true,\n        gracefulDrain: true\n      }\n    }\n  }\n\n\n  private resolveStream(options: MeshNodeOptions): MeshStreamPublisher | null {\n    if (!options.stream) return null\n    if ('publish' in options.stream) return options.stream\n    return new MeshStreamFactory().createPublisher(options.stream)\n  }\n\n  private resolveRegistry(options: MeshNodeOptions): MeshRegistry {\n    if (options.registry && 'register' in options.registry) return options.registry\n    const declared = options.registry\n    if (declared?.type === 'file') return new FileMeshRegistry(options.app, declared.stateDir)\n    if (declared?.type === 'redis') return new RedisMeshRegistry({ app: options.app, url: declared.url, ...((declared.secret ?? options.secret) !== undefined ? { secret: (declared.secret ?? options.secret)! } : {}), ...(declared.keyPrefix !== undefined ? { keyPrefix: declared.keyPrefix } : {}) })\n    if (process.env.MESH_REGISTRY_TYPE === 'redis' && process.env.MESH_REGISTRY_URL) {\n      return new RedisMeshRegistry({ app: options.app, url: process.env.MESH_REGISTRY_URL, ...(options.secret !== undefined ? { secret: options.secret } : {}) })\n    }\n    return new FileMeshRegistry(options.app, '.mesh')\n  }\n}\n\nexport function createMeshNode(options: MeshNodeOptions): MeshNode {\n  return new MeshNode(options)\n}\n\nfunction numberFromEnv(key: string): number | undefined {\n  const value = process.env[key]\n  if (!value) return undefined\n  const parsed = Number(value)\n  return Number.isInteger(parsed) ? parsed : undefined\n}\n","import { EventEmitter } from 'node:events'\nimport { randomUUID } from 'node:crypto'\n\nexport interface MeshEventEnvelope<TPayload = unknown> {\n  readonly id: string\n  readonly app: string\n  readonly type: string\n  readonly payload: TPayload\n  readonly emittedAt: string\n  readonly source?: string\n}\n\nexport type MeshEventHandler<TPayload = unknown> = (event: MeshEventEnvelope<TPayload>) => void | Promise<void>\n\nexport interface MeshEventBus {\n  emit<TPayload>(type: string, payload: TPayload, source?: string): Promise<MeshEventEnvelope<TPayload>>\n  on<TPayload>(type: string, handler: MeshEventHandler<TPayload>): () => void\n}\n\nexport class MemoryMeshEventBus implements MeshEventBus {\n  private readonly emitter = new EventEmitter()\n\n  public constructor(private readonly app: string) {}\n\n  public async emit<TPayload>(type: string, payload: TPayload, source?: string): Promise<MeshEventEnvelope<TPayload>> {\n    const envelope: MeshEventEnvelope<TPayload> = {\n      id: randomUUID(),\n      app: this.app,\n      type,\n      payload,\n      emittedAt: new Date().toISOString(),\n      ...(source !== undefined ? { source } : {})\n    }\n    this.emitter.emit(type, envelope)\n    this.emitter.emit('*', envelope)\n    return envelope\n  }\n\n  public on<TPayload>(type: string, handler: MeshEventHandler<TPayload>): () => void {\n    const wrapped = (event: MeshEventEnvelope<TPayload>): void => {\n      void handler(event)\n    }\n    this.emitter.on(type, wrapped)\n    return () => this.emitter.off(type, wrapped)\n  }\n}\n","import type { MeshRegistry } from '../registry/types.js'\nimport type { MeshInstanceRecord } from '../core/types.js'\nimport { ProcessHealth } from '../state/ProcessHealth.js'\nimport { sleep } from '../utils/time.js'\n\nexport interface DrainTargetResult {\n  readonly instance: MeshInstanceRecord\n  readonly signalled: boolean\n  readonly killed: boolean\n  readonly unregistered: boolean\n}\n\nexport interface DrainControllerOptions {\n  readonly registry: MeshRegistry\n  readonly drainTimeoutMs: number\n  readonly shutdownTimeoutMs: number\n  readonly killTimeoutMs: number\n  readonly force?: boolean\n}\n\nexport class DrainController {\n  private readonly health = new ProcessHealth()\n\n  public constructor(private readonly options: DrainControllerOptions) {}\n\n  public async drainAndStop(instances: readonly MeshInstanceRecord[]): Promise<readonly DrainTargetResult[]> {\n    for (const instance of instances) {\n      if (!this.options.force) await this.options.registry.markDraining(instance.id).catch(() => undefined)\n    }\n\n    if (!this.options.force && this.options.drainTimeoutMs > 0) {\n      await sleep(this.options.drainTimeoutMs)\n    }\n\n    const results: DrainTargetResult[] = []\n    await Promise.all(instances.map(async instance => {\n      const signalled = this.signal(instance, 'SIGTERM')\n      if (signalled) await this.waitUntilDead(instance.pid, this.options.shutdownTimeoutMs)\n      const killed = this.health.isAlive(instance.pid) ? this.signal(instance, 'SIGKILL') : false\n      if (killed) await this.waitUntilDead(instance.pid, this.options.killTimeoutMs)\n      await this.options.registry.unregister(instance.id).catch(() => undefined)\n      results.push({ instance, signalled, killed, unregistered: true })\n    }))\n\n    return results.sort((a, b) => a.instance.id.localeCompare(b.instance.id))\n  }\n\n  private signal(instance: MeshInstanceRecord, signal: NodeJS.Signals): boolean {\n    if (!this.health.isAlive(instance.pid)) return false\n    try {\n      process.kill(instance.pid!, signal)\n      return true\n    } catch {\n      return false\n    }\n  }\n\n  private async waitUntilDead(pid: number | null, timeoutMs: number): Promise<void> {\n    const started = Date.now()\n    while (this.health.isAlive(pid) && Date.now() - started < timeoutMs) {\n      await sleep(100)\n    }\n  }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { ensureDir } from '../utils/fs.js'\nimport { getDrsPackageEntry, getDrsWorkflowPlan, syncDrsGeneratedModules } from './drs.js'\nimport type {\n  NormalizedMeshConfig,\n  NormalizedMeshServiceConfig,\n  MeshCiGenerateOptions,\n  NormalizedMeshCiConfig,\n} from '../core/types.js'\n\ninterface CiArtifact {\n  readonly repoDir: string\n  readonly name: string\n  readonly content: string\n}\n\n// Groups services by their resolved cwd so that api+worker (same cwd) produce\n// a single backend workflow while frontend (different cwd) gets its own file.\ninterface ServiceGroup {\n  readonly cwd: string\n  readonly services: NormalizedMeshServiceConfig[]\n}\n\nconst RUNTIME_BUNDLE_DIR = path.join('.mesh', 'runtime-bundle')\nconst RUNTIME_BUNDLE_COPY_EXCLUDES = new Set(['.git', 'node_modules', 'dist', '.turbo', '.next', '.DS_Store'])\n\nexport class CiGenerateCommand {\n  public constructor(private readonly config: NormalizedMeshConfig) {}\n\n  public async generate(options: MeshCiGenerateOptions = {}): Promise<string> {\n    const artifacts = this.buildArtifacts(options.service)\n\n    if (this.config.ci.drs.enabled) {\n      await this.syncGeneratedModules(options.service)\n    }\n\n    await this.syncGeneratedRuntimeBundles(options.service)\n\n    if (options.print) {\n      return artifacts.map(a => `# ${a.repoDir}/.github/workflows/${a.name}\\n${a.content.trim()}\\n`).join('\\n') + '\\n'\n    }\n\n    for (const artifact of artifacts) {\n      const dir = path.join(artifact.repoDir, '.github', 'workflows')\n      await ensureDir(dir)\n      const target = path.join(dir, artifact.name)\n      await fs.promises.writeFile(target, artifact.content, 'utf8')\n    }\n\n    const lines = [`Generated ${artifacts.length} CI workflow file(s):`]\n    for (const artifact of artifacts) {\n      lines.push(`  ${path.join(artifact.repoDir, '.github', 'workflows', artifact.name)}`)\n    }\n    return `${lines.join('\\n')}\\n`\n  }\n\n  private async syncGeneratedModules(onlyService?: string): Promise<void> {\n    const serviceCwds = new Set<string>()\n\n    for (const group of this.groupByCwd(onlyService)) {\n      const hasDeployableService = group.services.some(\n        s => s.type === 'frontend' || s.type === 'backend' || s.type === 'worker'\n      )\n      if (hasDeployableService) {\n        serviceCwds.add(group.cwd)\n      }\n    }\n\n    for (const cwd of serviceCwds) {\n      await syncDrsGeneratedModules(this.config.projectRoot, cwd)\n    }\n  }\n\n  private async syncGeneratedRuntimeBundles(onlyService?: string): Promise<void> {\n    if (this.config.ci.backend.strategy !== 'mesh') return\n\n    for (const group of this.groupByCwd(onlyService)) {\n      const apiSvc = group.services.find(service => service.type === 'backend')\n      if (!apiSvc) continue\n      const workerSvc = group.services.find(service => service.type === 'worker')\n      await this.syncBackendMeshRuntimeBundle(apiSvc, workerSvc)\n    }\n  }\n\n  // ─── artifact builder ────────────────────────────────────────────────────\n\n  private buildArtifacts(onlyService?: string): readonly CiArtifact[] {\n    const ci = this.config.ci\n    const groups = this.groupByCwd(onlyService)\n    const artifacts: CiArtifact[] = []\n\n    for (const group of groups) {\n      const hasFrontend = group.services.some(s => s.type === 'frontend')\n      const hasBackend = group.services.some(s => s.type === 'backend' || s.type === 'worker')\n\n      if (hasFrontend) {\n        const frontendSvc = group.services.find(s => s.type === 'frontend')!\n        artifacts.push({\n          repoDir: group.cwd,\n          name: 'deploy.yml',\n          content: this.frontendWorkflow(frontendSvc, ci),\n        })\n      }\n\n      if (hasBackend) {\n        const apiSvc = group.services.find(s => s.type === 'backend')\n        const workerSvc = group.services.find(s => s.type === 'worker')\n        artifacts.push({\n          repoDir: group.cwd,\n          name: 'deploy.yml',\n          content: this.backendWorkflow(apiSvc ?? workerSvc!, workerSvc, ci),\n        })\n      }\n    }\n\n    return artifacts\n  }\n\n  private groupByCwd(onlyService?: string): readonly ServiceGroup[] {\n    const byDir = new Map<string, NormalizedMeshServiceConfig[]>()\n\n    for (const [name, svc] of this.config.services) {\n      if (onlyService && name !== onlyService) continue\n      const existing = byDir.get(svc.cwd) ?? []\n      existing.push(svc)\n      byDir.set(svc.cwd, existing)\n    }\n\n    return [...byDir.entries()].map(([cwd, services]) => ({ cwd, services }))\n  }\n\n  // ─── Frontend workflow ───────────────────────────────────────────────────\n\n  private frontendWorkflow(svc: NormalizedMeshServiceConfig, ci: NormalizedMeshCiConfig): string {\n    return ci.frontend.strategy === 'image'\n      ? this.frontendImageWorkflow(svc, ci)\n      : this.frontendRsyncWorkflow(svc, ci)\n  }\n\n  private frontendDrsPlan(svc: NormalizedMeshServiceConfig) {\n    return getDrsWorkflowPlan(this.config.projectRoot, svc.cwd)\n  }\n\n  private frontendDrsBootstrapSteps(plan: ReturnType<typeof getDrsWorkflowPlan>): string[] {\n    const steps: string[] = []\n\n    for (const sourcePackage of plan.sourcePackages) {\n      steps.push(\n        '      - name: Prepare ' + sourcePackage.name + ' source',\n        '        working-directory: ' + sourcePackage.generatedPath,\n        '        run: |',\n          '          npm install',\n          '          ' + (sourcePackage.buildCommand ?? 'npm run build'),\n        '',\n      )\n    }\n\n    return steps\n  }\n\n  private frontendInstallCommand(ci: NormalizedMeshCiConfig, plan?: ReturnType<typeof getDrsWorkflowPlan>): string {\n    if (!ci.drs.enabled || !plan) {\n      return 'npm ci'\n    }\n\n    return plan.installCommand\n  }\n\n  private frontendRsyncWorkflow(svc: NormalizedMeshServiceConfig, ci: NormalizedMeshCiConfig): string {\n    const buildArgs = ci.frontend.buildArgs\n    const buildEnvLines = buildArgs.map(k => `          ${k}: ${this.ghaSecret(k)}`).join('\\n')\n    const buildEnvBlock = buildArgs.length > 0 ? '\\n' + buildEnvLines : ''\n    const plan = ci.drs.enabled ? this.frontendDrsPlan(svc) : undefined\n    const installCommand = this.frontendInstallCommand(ci, plan)\n    const checkoutStep = [\n      '      - name: Checkout',\n      '        uses: actions/checkout@v4',\n      '',\n      ...(ci.drs.enabled ? this.frontendDrsBootstrapSteps(plan!) : []),\n    ]\n    const setupNodeStep = [\n      '      - name: Setup Node',\n      '        uses: actions/setup-node@v4',\n      '        with:',\n      '          node-version: 20',\n      '          cache: npm',\n      ...(ci.drs.enabled ? ['          cache-dependency-path: package-lock.json'] : []),\n      '',\n    ]\n    const installStepName = ci.drs.enabled ? 'Install DRS dependencies' : 'Install Dependencies'\n\n    return [\n      'name: Deploy Frontend',\n      '',\n      'on:',\n      '  push:',\n      '    branches:',\n      '      - ' + ci.branch,\n      '',\n      'jobs:',\n      '  deploy:',\n      '    runs-on: ubuntu-latest',\n      '',\n      '    steps:',\n      ...checkoutStep,\n      ...setupNodeStep,\n      '      - name: ' + installStepName,\n      '        run: |',\n      '          ' + installCommand,\n      '',\n      '      - name: Build Frontend',\n      '        env:',\n      '          VITE_API_URL: /api' + buildEnvBlock,\n      '        run: npm run build',\n      '',\n      '      - name: Generate nginx config',\n      '        run: npm run nginx:generate',\n      '',\n      '      - name: Setup SSH',\n      '        env:',\n      '          DEPLOY_SSH_KEY: ' + this.ghaSecret('DEPLOY_SSH_KEY'),\n      '          DEPLOY_HOST: ' + this.ghaSecret('DEPLOY_HOST'),\n      '          DEPLOY_PORT: ' + this.ghaSecret('DEPLOY_PORT'),\n      '        run: |',\n      '          mkdir -p ~/.ssh',\n      '          echo \"$DEPLOY_SSH_KEY\" > ~/.ssh/id_rsa',\n      '          chmod 600 ~/.ssh/id_rsa',\n      '          ssh-keyscan -p \"${DEPLOY_PORT:-22}\" \"$DEPLOY_HOST\" >> ~/.ssh/known_hosts',\n      '',\n      '      - name: Deploy dist to server',\n      '        env:',\n      '          DEPLOY_HOST: ' + this.ghaSecret('DEPLOY_HOST'),\n      '          DEPLOY_USER: ' + this.ghaSecret('DEPLOY_USER'),\n      '          DEPLOY_PORT: ' + this.ghaSecret('DEPLOY_PORT'),\n      '          DEPLOY_PATH: ' + this.ghaSecret('DEPLOY_PATH'),\n      '        run: |',\n      '          rsync -az --delete --no-perms --no-times -e \"ssh -p ${DEPLOY_PORT:-22}\" dist/ \"${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/\"',\n      '',\n      '      - name: Upload nginx config',\n      '        env:',\n      '          DEPLOY_HOST: ' + this.ghaSecret('DEPLOY_HOST'),\n      '          DEPLOY_USER: ' + this.ghaSecret('DEPLOY_USER'),\n      '          DEPLOY_PORT: ' + this.ghaSecret('DEPLOY_PORT'),\n      '        run: |',\n      '          scp -P \"${DEPLOY_PORT:-22}\" deploy/generated-nginx/panom.conf \"${DEPLOY_USER}@${DEPLOY_HOST}:/tmp/panom.conf\"',\n      '',\n      '      - name: Validate and reload nginx',\n      '        env:',\n      '          DEPLOY_HOST: ' + this.ghaSecret('DEPLOY_HOST'),\n      '          DEPLOY_USER: ' + this.ghaSecret('DEPLOY_USER'),\n      '          DEPLOY_PORT: ' + this.ghaSecret('DEPLOY_PORT'),\n      \"        run: |\",\n      '          ssh -p \"${DEPLOY_PORT:-22}\" \"${DEPLOY_USER}@${DEPLOY_HOST}\" <<\\'EOF\\'',\n      '            set -e',\n      '            TARGET_NGINX_PATH=\"/etc/nginx/conf.d/panom.conf\"',\n      '            if [ -f \"${TARGET_NGINX_PATH}\" ]; then',\n      '              sudo cp \"${TARGET_NGINX_PATH}\" \"${TARGET_NGINX_PATH}.bak\"',\n      '            fi',\n      '            sudo cp /tmp/panom.conf \"${TARGET_NGINX_PATH}\"',\n      '            if sudo nginx -t; then',\n      '              sudo systemctl reload nginx',\n      '              rm -f /tmp/panom.conf',\n      '            else',\n      '              if [ -f \"${TARGET_NGINX_PATH}.bak\" ]; then',\n      '                sudo cp \"${TARGET_NGINX_PATH}.bak\" \"${TARGET_NGINX_PATH}\"',\n      '              fi',\n      '              sudo nginx -t',\n      '              exit 1',\n      '            fi',\n      '          EOF',\n      '',\n    ].join('\\n')\n  }\n\n  private frontendImageWorkflow(svc: NormalizedMeshServiceConfig, ci: NormalizedMeshCiConfig): string {\n    const image = svc.podman.image ?? 'ghcr.io/' + this.ghaCtx('github.repository_owner') + '/' + this.config.app + '-frontend:latest'\n    const buildArgs = ci.frontend.buildArgs\n    const buildArgEnvLines = buildArgs.map(k => '          ' + k + ': ' + this.ghaSecret(k)).join('\\n')\n    const buildArgEnvBlock = buildArgs.length > 0 ? '\\n' + buildArgEnvLines : ''\n    const buildArgFlagLines = [\n      '            --build-arg VITE_API_URL=\"$VITE_API_URL\" \\\\',\n      ...buildArgs.map(k => '            --build-arg ' + k + '=\"$' + k + '\" \\\\'),\n    ].join('\\n')\n    const plan = ci.drs.enabled ? this.frontendDrsPlan(svc) : undefined\n    const installCommand = this.frontendInstallCommand(ci, plan)\n    const installStepName = ci.drs.enabled ? 'Install DRS dependencies' : 'Install Dependencies'\n    const dockerfilePath = 'Dockerfile'\n    const checkoutSteps = [\n      '      - name: Checkout',\n      '        uses: actions/checkout@v4',\n      '',\n      ...(ci.drs.enabled ? this.frontendDrsBootstrapSteps(plan!) : []),\n    ]\n    const setupNodeStep = [\n      '      - name: Setup Node',\n      '        uses: actions/setup-node@v4',\n      '        with:',\n      '          node-version: 20',\n      '          cache: npm',\n      ...(ci.drs.enabled ? ['          cache-dependency-path: package-lock.json'] : []),\n      '',\n    ]\n\n    return [\n      'name: Deploy Frontend',\n      '',\n      'on:',\n      '  push:',\n      '    branches:',\n      '      - ' + ci.branch,\n      '',\n      'jobs:',\n      '  deploy:',\n      '    runs-on: ubuntu-latest',\n      '',\n      '    permissions:',\n      '      contents: read',\n      '      packages: write',\n      '',\n      '    env:',\n      '      FRONTEND_IMAGE: ' + image,\n      '',\n      '    steps:',\n      ...checkoutSteps,\n      ...setupNodeStep,\n      '      - name: ' + installStepName,\n      '        run: |',\n      '          ' + installCommand,\n      '',\n      '      - name: Login GHCR',\n      '        env:',\n      '          GHCR_TOKEN: ' + this.ghaSecret('GITHUB_TOKEN'),\n      '          GHCR_USER: ' + this.ghaCtx('github.actor'),\n      '        run: |',\n      '          for attempt in 1 2 3 4 5; do',\n      '            echo \"$GHCR_TOKEN\" | docker login ghcr.io -u \"$GHCR_USER\" --password-stdin && exit 0',\n      '            echo \"GHCR login failed, retrying (${attempt}/5)...\"',\n      '            sleep $((attempt * 2))',\n      '          done',\n      '          exit 1',\n      '',\n      '      - name: Build frontend image',\n      '        env:',\n      '          VITE_API_URL: /api' + buildArgEnvBlock,\n      '        run: |',\n      '          docker build \\\\',\n      '            -t \"$FRONTEND_IMAGE\" \\\\',\n      buildArgFlagLines,\n      '            -f \"' + dockerfilePath + '\" .',\n      '',\n      '      - name: Push frontend image',\n      '        run: docker push \"$FRONTEND_IMAGE\"',\n      '',\n      '      - name: Setup SSH',\n      '        env:',\n      '          DEPLOY_SSH_KEY: ' + this.ghaSecret('DEPLOY_SSH_KEY'),\n      '          DEPLOY_HOST: ' + this.ghaSecret('DEPLOY_HOST'),\n      '          DEPLOY_PORT: ' + this.ghaSecret('DEPLOY_PORT'),\n      '        run: |',\n      '          mkdir -p ~/.ssh',\n      '          echo \"$DEPLOY_SSH_KEY\" > ~/.ssh/id_rsa',\n      '          chmod 600 ~/.ssh/id_rsa',\n      '          ssh-keyscan -p \"${DEPLOY_PORT:-22}\" \"$DEPLOY_HOST\" >> ~/.ssh/known_hosts',\n      '',\n      '      - name: Pull and restart frontend on server',\n      '        env:',\n      '          DEPLOY_HOST: ' + this.ghaSecret('DEPLOY_HOST'),\n      '          DEPLOY_USER: ' + this.ghaSecret('DEPLOY_USER'),\n      '          DEPLOY_PORT: ' + this.ghaSecret('DEPLOY_PORT'),\n      '        run: |',\n      '          IMAGE=\"$FRONTEND_IMAGE\"',\n      '          ssh -p \"${DEPLOY_PORT:-22}\" \"${DEPLOY_USER}@${DEPLOY_HOST}\" \"bash -s -- \\'$IMAGE\\'\" <<\\'EOF\\'',\n      '          set -euo pipefail',\n      '          IMAGE=\"$1\"',\n      '          podman stop panom-frontend >/dev/null 2>&1 || true',\n      '          podman rm -f panom-frontend >/dev/null 2>&1 || true',\n      '          podman pull \"${IMAGE}\"',\n      '          podman run -d \\\\',\n      '            -p 4173:4173 \\\\',\n      '            --name panom-frontend \\\\',\n      '            \"${IMAGE}\"',\n      '          echo \"[deploy] Frontend is UP.\"',\n      '          EOF',\n      '',\n    ].join('\\n')\n  }\n\n  // ─── Backend workflow ────────────────────────────────────────────────────\n\n  private async syncBackendMeshRuntimeBundle(\n    apiSvc: NormalizedMeshServiceConfig,\n    workerSvc: NormalizedMeshServiceConfig | undefined,\n  ): Promise<void> {\n    const runtimeBundleDir = path.join(apiSvc.cwd, RUNTIME_BUNDLE_DIR)\n    const generatedModulesDir = path.join(runtimeBundleDir, 'generated_modules')\n    const meshPackage = getDrsPackageEntry(this.config.projectRoot, '@panomapp/mesh')\n    if (meshPackage.prebuilt !== true) {\n      throw new Error('DRS package \"@panomapp/mesh\" must set \"prebuilt\": true for backend mesh runtime generation.')\n    }\n\n    const meshSourceDir = path.resolve(this.config.projectRoot, meshPackage.local.path)\n    const generatedMeshDir = path.join(generatedModulesDir, 'panom-mesh')\n\n    if (!fs.existsSync(meshSourceDir)) {\n      throw new Error(`Mesh runtime source package is missing: ${meshSourceDir}`)\n    }\n\n    await fs.promises.rm(runtimeBundleDir, { recursive: true, force: true })\n    await ensureDir(generatedModulesDir)\n    await fs.promises.cp(meshSourceDir, generatedMeshDir, {\n      recursive: true,\n      filter: source => {\n        const entryName = path.basename(source)\n        return !RUNTIME_BUNDLE_COPY_EXCLUDES.has(entryName) && !entryName.startsWith('._')\n      },\n    })\n\n    await this.pruneGeneratedRuntimeNoise(generatedMeshDir)\n    await fs.promises.writeFile(\n      path.join(runtimeBundleDir, 'mesh.config.cjs'),\n      this.renderBackendRuntimeMeshConfig(apiSvc, workerSvc),\n      'utf8',\n    )\n  }\n\n  private async pruneGeneratedRuntimeNoise(dir: string): Promise<void> {\n    const entries = await fs.promises.readdir(dir, { withFileTypes: true })\n    for (const entry of entries) {\n      const target = path.join(dir, entry.name)\n      if (entry.name.startsWith('._') || entry.name === '.DS_Store') {\n        await fs.promises.rm(target, { recursive: true, force: true })\n        continue\n      }\n      if (entry.isDirectory()) {\n        await this.pruneGeneratedRuntimeNoise(target)\n      }\n    }\n  }\n\n  private renderBackendRuntimeMeshConfig(\n    apiSvc: NormalizedMeshServiceConfig,\n    workerSvc: NormalizedMeshServiceConfig | undefined,\n  ): string {\n    const envKeys = JSON.stringify(this.config.ci.backend.envSecrets, null, 2)\n    const backendImageFallback = apiSvc.podman.image ?? 'ghcr.io/' + this.config.app + '/panom-backend:latest'\n    const firstApiPort = this.config.runtime.portRange.from\n    const portRange = JSON.stringify(apiSvc.portRange)\n    const apiRoutes = JSON.stringify(apiSvc.routes)\n    const apiStrategy = JSON.stringify(apiSvc.strategy)\n    const meshSecret = JSON.stringify(this.config.router.secret)\n    const network = JSON.stringify(this.config.runtime.podman.network)\n    const containerPrefix = JSON.stringify(this.config.runtime.podman.containerPrefix)\n    const publishHost = JSON.stringify(this.config.runtime.podman.publishHost)\n    const apiInstances = JSON.stringify(apiSvc.instances)\n    const shutdownTimeoutMs = JSON.stringify(this.config.runtime.shutdownTimeoutMs)\n    const drainTimeoutMs = JSON.stringify(this.config.runtime.drainTimeoutMs)\n    const logsDir = JSON.stringify('.state/logs')\n    const stateDir = JSON.stringify('.state')\n    const workerBlock = workerSvc ? `\n    worker: {\n      type: 'worker',\n      command: 'npm run worker',\n      cwd: '.',\n      instances: 1,\n      watch: false,\n      env: runtimeEnv(backendEnvKeys, {\n        NODE_ENV: 'production',\n        PANOM_ENABLE_BACKGROUND_JOBS: 'true',\n      }),\n      podman: {\n        image: backendImage,\n        command: ['node', 'dist/worker.js'],\n      },\n    },` : ''\n\n    return `const { defineMeshConfig } = require('@panomapp/mesh')\n\nconst backendEnvKeys = ${envKeys}\nconst backendImage = process.env.PANOM_BACKEND_IMAGE?.trim() || ${JSON.stringify(backendImageFallback)}\n\nfunction runtimeEnv(keys, extras = {}) {\n  const env = { ...extras }\n  for (const key of keys) {\n    const value = process.env[key]\n    if (value !== undefined && value !== '') env[key] = value\n  }\n  return env\n}\n\nmodule.exports = defineMeshConfig({\n  app: ${JSON.stringify(this.config.app)},\n\n  router: {\n    enabled: true,\n    host: '127.0.0.1',\n    port: 8080,\n    sessionAffinity: true,\n    secureCookies: true,\n    secret: process.env.MESH_SECRET ?? ${meshSecret},\n  },\n\n  runtime: {\n    mode: 'podman',\n    stateDir: ${stateDir},\n    logsDir: ${logsDir},\n    defaultWatch: false,\n    portRange: ${portRange},\n    drainTimeoutMs: ${drainTimeoutMs},\n    shutdownTimeoutMs: ${shutdownTimeoutMs},\n    podman: {\n      network: ${network},\n      containerPrefix: ${containerPrefix},\n      publishHost: ${publishHost},\n      replace: true,\n      pull: 'always',\n      redis: {\n        enabled: false,\n      },\n    },\n  },\n\n  registry: {\n    type: 'file',\n  },\n\n  streaming: {\n    enabled: false,\n  },\n\n  coordination: {\n    enabled: true,\n    backend: 'memory',\n    cleanup: {\n      enabled: true,\n    },\n  },\n\n  services: {\n    api: {\n      type: 'backend',\n      command: 'npm run start',\n      cwd: '.',\n      instances: ${apiInstances},\n      port: ${JSON.stringify(firstApiPort)},\n      route: ${apiRoutes},\n      healthPath: '/health',\n      strategy: ${apiStrategy},\n      watch: false,\n      env: runtimeEnv(backendEnvKeys, {\n        NODE_ENV: 'production',\n        PANOM_ENABLE_BACKGROUND_JOBS: 'false',\n      }),\n      podman: {\n        image: backendImage,\n        containerPort: 8080,\n      },\n    },${workerBlock}\n  },\n})\n`\n  }\n\n  private backendWorkflow(\n    apiSvc: NormalizedMeshServiceConfig,\n    workerSvc: NormalizedMeshServiceConfig | undefined,\n    ci: NormalizedMeshCiConfig\n  ): string {\n    if (ci.backend.strategy === 'mesh') {\n      return this.backendMeshWorkflow(apiSvc, workerSvc, ci)\n    }\n\n    return ci.backend.strategy === 'quadlet'\n      ? this.backendQuadletWorkflow(apiSvc, workerSvc, ci)\n      : this.backendPodmanWorkflow(apiSvc, workerSvc, ci)\n  }\n\n  private backendPodmanWorkflow(\n    apiSvc: NormalizedMeshServiceConfig,\n    workerSvc: NormalizedMeshServiceConfig | undefined,\n    ci: NormalizedMeshCiConfig\n  ): string {\n    const image = apiSvc.podman.image ?? 'ghcr.io/' + this.ghaCtx('github.repository_owner') + '/' + this.config.app + '-backend:latest'\n    const secrets = ci.backend.envSecrets\n    const hasWorker = workerSvc !== undefined\n    const plan = ci.drs.enabled ? this.frontendDrsPlan(apiSvc) : undefined\n    const backendDockerfilePath = 'Dockerfile'\n\n    const FIXED_KEYS = new Set(['NODE_ENV', 'PORT'])\n    const envSecretsLines = secrets.map(k => '          ' + k + ': ' + this.ghaSecret(k)).join('\\n')\n    const envContentLines = secrets\n      .filter(k => !FIXED_KEYS.has(k))\n      .map(k => '          ' + k + '=${' + k + '}')\n      .join('\\n')\n\n    const workerLines = hasWorker ? [\n      '          echo \"[deploy] Starting worker container...\"',\n      '          podman stop panom-worker >/dev/null 2>&1 || true',\n      '          podman rm -f panom-worker >/dev/null 2>&1 || true',\n      '          podman run -d \\\\',\n      '            --env-file ~/.panom.env \\\\',\n      '            -e PANOM_ENABLE_BACKGROUND_JOBS=true \\\\',\n      '            --name panom-worker \\\\',\n      '            \"${IMAGE}\" node dist/worker.js',\n      '          echo \"[deploy] Worker container started.\"',\n      '',\n    ].join('\\n') : ''\n\n    const checkoutSteps = [\n      '      - name: Checkout',\n      '        uses: actions/checkout@v4',\n      '',\n      ...(ci.drs.enabled ? this.frontendDrsBootstrapSteps(plan!) : []),\n    ]\n\n    const setupNodeStep = [\n      '      - name: Setup Node',\n      '        uses: actions/setup-node@v4',\n      '        with:',\n      '          node-version: 20',\n      '          cache: npm',\n      ...(ci.drs.enabled ? ['          cache-dependency-path: package-lock.json'] : []),\n      '',\n    ]\n\n    const installStep = ci.drs.enabled\n      ? [\n        '      - name: Install DRS dependencies',\n        '        run: |',\n        '          ' + plan!.installCommand,\n        '',\n      ]\n      : []\n\n    return [\n      'name: Deploy',\n      '',\n      'on:',\n      '  push:',\n      '    branches:',\n      '      - ' + ci.branch,\n      '',\n      '# Prevent multiple deployments from running concurrently and clashing on Podman locks',\n      'concurrency:',\n      '  group: deploy-backend',\n      '  cancel-in-progress: false',\n      '',\n      'jobs:',\n      '  docker:',\n      '    runs-on: ubuntu-latest',\n      '',\n      '    permissions:',\n      '      contents: read',\n      '      packages: write',\n      '',\n      '    steps:',\n      ...checkoutSteps,\n      ...setupNodeStep,\n      ...installStep,\n      '      - name: Login GHCR',\n      '        env:',\n      '          GHCR_TOKEN: ' + this.ghaSecret('GITHUB_TOKEN'),\n      '          GHCR_USER: ' + this.ghaCtx('github.actor'),\n      '        run: |',\n      '          for attempt in 1 2 3 4 5; do',\n      '            echo \"$GHCR_TOKEN\" | docker login ghcr.io -u \"$GHCR_USER\" --password-stdin && exit 0',\n      '            echo \"GHCR login failed, retrying (${attempt}/5)...\"',\n      '            sleep $((attempt * 2))',\n      '          done',\n      '          exit 1',\n      '',\n      '      - name: Build Image',\n      '        run: |',\n      '          docker build -t ' + image + ' -f ' + backendDockerfilePath + ' .',\n      '',\n      '      - name: Push Image',\n      '        run: |',\n      '          docker push ' + image,\n      '',\n      '      - name: Setup SSH',\n      '        env:',\n      '          DEPLOY_SSH_KEY: ' + this.ghaSecret('DEPLOY_SSH_KEY'),\n      '          DEPLOY_HOST: ' + this.ghaSecret('DEPLOY_HOST'),\n      '          DEPLOY_PORT: ' + this.ghaSecret('DEPLOY_PORT'),\n      '        run: |',\n      '          mkdir -p ~/.ssh',\n      '          echo \"$DEPLOY_SSH_KEY\" > ~/.ssh/id_rsa',\n      '          chmod 600 ~/.ssh/id_rsa',\n      '          ssh-keyscan -p \"${DEPLOY_PORT:-22}\" \"$DEPLOY_HOST\" >> ~/.ssh/known_hosts',\n      '',\n      '      - name: Write .env on server',\n      '        env:',\n      '          DEPLOY_HOST: ' + this.ghaSecret('DEPLOY_HOST'),\n      '          DEPLOY_USER: ' + this.ghaSecret('DEPLOY_USER'),\n      '          DEPLOY_PORT: ' + this.ghaSecret('DEPLOY_PORT'),\n      envSecretsLines,\n      '        run: |',\n      '          # Build .env content locally (never touches disk unencrypted, stays in memory)',\n      '          ENV_CONTENT=\"NODE_ENV=production',\n      '          PORT=8080',\n      envContentLines + '\"',\n      '',\n      '          # Write .env to server atomically (chmod 600 before writing content)',\n      '          ssh -p \"${DEPLOY_PORT:-22}\" \"${DEPLOY_USER}@${DEPLOY_HOST}\" \\\\',\n      \"            'install -m 600 /dev/null ~/.panom.env'\",\n      '          printf \\'%s\\\\n\\' \"$ENV_CONTENT\" | \\\\',\n      '            ssh -p \"${DEPLOY_PORT:-22}\" \"${DEPLOY_USER}@${DEPLOY_HOST}\" \\\\',\n      \"            'cat > ~/.panom.env'\",\n      '',\n      '      - name: Restart Backend on server',\n      '        env:',\n      '          DEPLOY_HOST: ' + this.ghaSecret('DEPLOY_HOST'),\n      '          DEPLOY_USER: ' + this.ghaSecret('DEPLOY_USER'),\n      '          DEPLOY_PORT: ' + this.ghaSecret('DEPLOY_PORT'),\n      '        run: |',\n      '          IMAGE=\"' + image + '\"',\n      '          ssh -p \"${DEPLOY_PORT:-22}\" \"${DEPLOY_USER}@${DEPLOY_HOST}\" \"bash -s -- \\'$IMAGE\\'\" <<\\'EOF\\'',\n      '          set -euo pipefail',\n      '',\n      '          podman container prune -f || true',\n      '          podman image prune -a -f || true',\n      '          podman system prune -f || true',\n      '',\n      '          IMAGE=\"$1\"',\n      '          HEALTH_URL=\"http://127.0.0.1:8080/health\"',\n      '',\n      '          check_podman() {',\n      '            local output',\n      '            output=$(podman ps 2>&1) || {',\n      '              echo \"[deploy] podman ps command failed with exit code $?\"',\n      '              echo \"$output\"',\n      '              return 1',\n      '            }',\n      '            if echo \"$output\" | grep -q \"ERRO\"; then',\n      '              echo \"[deploy] Podman reported errors in output:\"',\n      '              echo \"$output\" | grep \"ERRO\"',\n      '              return 1',\n      '            fi',\n      '            return 0',\n      '          }',\n      '',\n      '          attempt_lock_recovery() {',\n      '            echo \"[deploy] Podman lock/state issue detected, attempting recovery...\"',\n      '            pkill -u \"$(id -u)\" -f podman || true',\n      '            sleep 2',\n      '            podman system renumber || true',\n      '            podman system migrate || true',\n      '',\n      '            if ! check_podman; then',\n      '              echo \"[deploy] Still unhealthy, performing aggressive lock cleanup...\"',\n      '              LOCK_BASE=\"${XDG_RUNTIME_DIR:-/run/user/$(id -u)}\"',\n      '              rm -rf \"${LOCK_BASE}/containers/locks\"/* >/dev/null 2>&1 || true',\n      '              rm -rf \"${LOCK_BASE}/libpod/tmp\"/*lock* >/dev/null 2>&1 || true',\n      '              STORAGE_DIR=\"${HOME}/.local/share/containers/storage\"',\n      '              rm -rf \"${STORAGE_DIR}/libpod/locks\"/* >/dev/null 2>&1 || true',\n      '              rm -rf \"${STORAGE_DIR}/libpod/tmp\"/*lock* >/dev/null 2>&1 || true',\n      '              podman unshare rm -rf \"${STORAGE_DIR}/libpod/locks\"/* >/dev/null 2>&1 || true',\n      '              podman unshare rm -rf \"${STORAGE_DIR}/libpod/tmp\"/*lock* >/dev/null 2>&1 || true',\n      '              podman system renumber || true',\n      '              podman system migrate || true',\n      '            fi',\n      '          }',\n      '',\n      '          if ! check_podman; then',\n      '            attempt_lock_recovery',\n      '          fi',\n      '',\n      '          if ! check_podman; then',\n      '            echo \"[deploy] ERROR: Podman is still unhealthy after lock recovery attempts.\"',\n      '            podman ps || true',\n      '            exit 1',\n      '          fi',\n      '',\n      '          echo \"[deploy] Pulling image: ${IMAGE}\"',\n      '          podman pull \"${IMAGE}\"',\n      '',\n      '          echo \"[deploy] Recreating api container\"',\n      '          podman stop panom >/dev/null 2>&1 || true',\n      '          podman rm -f panom >/dev/null 2>&1 || true',\n      '',\n      '          echo \"[deploy] Starting new api container...\"',\n      '          podman run -d \\\\',\n      '            --env-file ~/.panom.env \\\\',\n      '            -e PANOM_ENABLE_BACKGROUND_JOBS=false \\\\',\n      '            -p 8080:8080 \\\\',\n      '            --name panom \\\\',\n      '            \"${IMAGE}\"',\n      '',\n      workerLines,\n      '          if ! podman ps -a --format \\'{{.Names}}\\' | grep -qx \\'panom\\'; then',\n      '            echo \"[deploy] ERROR: Container \\'panom\\' failed to even create/start.\"',\n      '            exit 1',\n      '          fi',\n      '',\n      '          echo \"[deploy] Verifying container is running...\"',\n      '          sleep 3',\n      '          if ! podman ps --filter \"name=panom\" --filter \"status=running\" --format \\'{{.Names}}\\' | grep -qx \\'panom\\'; then',\n      '            echo \"[deploy] ERROR: Container \\'panom\\' is NOT in running state.\"',\n      '            podman ps -a --filter \"name=panom\"',\n      '            podman logs --tail 100 panom || true',\n      '            exit 1',\n      '          fi',\n      '',\n      '          echo \"[deploy] Waiting for backend health: ${HEALTH_URL}\"',\n      '          healthy=0',\n      '          for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do',\n      '            if curl -fsS --max-time 5 \"${HEALTH_URL}\" >/dev/null; then',\n      '              healthy=1',\n      '              break',\n      '            fi',\n      '            echo \"[deploy] Health check attempt $i failed, retrying...\"',\n      '            sleep 3',\n      '          done',\n      '',\n      '          if [ \"${healthy}\" -ne 1 ]; then',\n      '            echo \"[deploy] ERROR: Backend health check failed after deploy.\"',\n      '            podman ps -a --filter \"name=panom\"',\n      '            podman logs --tail 200 panom || true',\n      '            exit 1',\n      '          fi',\n      '',\n      '          echo \"[deploy] Backend is UP and healthy.\"',\n      '          EOF',\n      '',\n    ].join('\\n')\n  }\n\n  private backendMeshWorkflow(\n    apiSvc: NormalizedMeshServiceConfig,\n    workerSvc: NormalizedMeshServiceConfig | undefined,\n    ci: NormalizedMeshCiConfig,\n  ): string {\n    const backendImage = apiSvc.podman.image ?? 'ghcr.io/' + this.ghaCtx('github.repository_owner') + '/' + this.config.app + '-backend:latest'\n    const secrets = ci.backend.envSecrets\n    const plan = ci.drs.enabled ? this.frontendDrsPlan(apiSvc) : undefined\n    const runtimeBundlePath = `${RUNTIME_BUNDLE_DIR}/`\n    const fixedKeys = new Set(['NODE_ENV', 'PORT', 'MESH_RUNTIME_MODE', 'PANOM_BACKEND_IMAGE', 'MESH_SECRET'])\n    const envSecretsLines = secrets.map(key => '          ' + key + ': ' + this.ghaSecret(key)).join('\\n')\n    const envContentLines = secrets\n      .filter(key => !fixedKeys.has(key))\n      .map(key => '          ' + key + '=${' + key + '}')\n      .join('\\n')\n\n    const checkoutSteps = [\n      '      - name: Checkout',\n      '        uses: actions/checkout@v4',\n      '',\n      ...(ci.drs.enabled ? this.frontendDrsBootstrapSteps(plan!) : []),\n      '      - name: Prepare @panomapp/mesh prebuilt runtime',\n        '        working-directory: .mesh/runtime-bundle/generated_modules/panom-mesh',\n        '        run: |',\n          '          npm install',\n          '          npm run build',\n          '          npm prune --omit=dev',\n          '          rm -rf src tests examples docs',\n          '          rm -f tsconfig.json tsup.config.ts package-lock.json',\n        '',\n    ]\n\n    const setupNodeStep = [\n      '      - name: Setup Node',\n      '        uses: actions/setup-node@v4',\n      '        with:',\n      '          node-version: 20',\n      '          cache: npm',\n      ...(ci.drs.enabled ? ['          cache-dependency-path: package-lock.json'] : []),\n      '',\n    ]\n\n    const installStep = ci.drs.enabled\n      ? [\n        '      - name: Install DRS dependencies',\n        '        run: |',\n        '          ' + plan!.installCommand,\n        '',\n      ]\n      : [\n        '      - name: Install dependencies',\n        '        run: npm ci',\n        '',\n      ]\n\n    const runtimeEnvLines = [\n      '          ENV_CONTENT=\"NODE_ENV=production',\n      '          MESH_RUNTIME_MODE=podman',\n      '          PANOM_BACKEND_IMAGE=$BACKEND_IMAGE',\n      '          MESH_SECRET=$MESH_SECRET',\n      envContentLines + '\"',\n    ]\n\n    return [\n      'name: Deploy',\n      '',\n      'on:',\n      '  push:',\n      '    branches:',\n      '      - ' + ci.branch,\n      '',\n      'concurrency:',\n      '  group: deploy-backend',\n      '  cancel-in-progress: false',\n      '',\n      'jobs:',\n      '  deploy:',\n      '    runs-on: ubuntu-latest',\n      '',\n      '    permissions:',\n      '      contents: read',\n      '      packages: write',\n      '',\n      '    env:',\n      '      BACKEND_IMAGE: ' + backendImage,\n      '',\n      '    steps:',\n      ...checkoutSteps,\n      ...setupNodeStep,\n      ...installStep,\n      '      - name: Login GHCR',\n      '        env:',\n      '          GHCR_TOKEN: ' + this.ghaSecret('GITHUB_TOKEN'),\n      '          GHCR_USER: ' + this.ghaCtx('github.actor'),\n      '        run: |',\n      '          for attempt in 1 2 3 4 5; do',\n      '            echo \"$GHCR_TOKEN\" | docker login ghcr.io -u \"$GHCR_USER\" --password-stdin && exit 0',\n      '            echo \"GHCR login failed, retrying (${attempt}/5)...\"',\n      '            sleep $((attempt * 2))',\n      '          done',\n      '          exit 1',\n      '',\n      '      - name: Build backend image',\n      '        run: docker build -t \"$BACKEND_IMAGE\" -f Dockerfile .',\n      '',\n      '      - name: Push backend image',\n      '        run: docker push \"$BACKEND_IMAGE\"',\n      '',\n      '      - name: Setup SSH',\n      '        env:',\n      '          DEPLOY_SSH_KEY: ' + this.ghaSecret('DEPLOY_SSH_KEY'),\n      '          DEPLOY_HOST: ' + this.ghaSecret('DEPLOY_HOST'),\n      '          DEPLOY_PORT: ' + this.ghaSecret('DEPLOY_PORT'),\n      '        run: |',\n      '          mkdir -p ~/.ssh',\n      '          echo \"$DEPLOY_SSH_KEY\" > ~/.ssh/id_rsa',\n      '          chmod 600 ~/.ssh/id_rsa',\n      '          ssh-keyscan -p \"${DEPLOY_PORT:-22}\" \"$DEPLOY_HOST\" >> ~/.ssh/known_hosts',\n      '',\n      '      - name: Upload backend mesh runtime bundle',\n      '        env:',\n      '          DEPLOY_HOST: ' + this.ghaSecret('DEPLOY_HOST'),\n      '          DEPLOY_USER: ' + this.ghaSecret('DEPLOY_USER'),\n      '          DEPLOY_PORT: ' + this.ghaSecret('DEPLOY_PORT'),\n      '        run: |',\n          '          ssh -p \"${DEPLOY_PORT:-22}\" \"${DEPLOY_USER}@${DEPLOY_HOST}\" \\'mkdir -p ~/.panom/backend-runtime\\'',\n          '          rsync -az --delete -e \"ssh -p ${DEPLOY_PORT:-22}\" ' + runtimeBundlePath + ' \"${DEPLOY_USER}@${DEPLOY_HOST}:~/.panom/backend-runtime/\"',\n      '',\n      '      - name: Write backend mesh environment on server',\n      '        env:',\n      '          DEPLOY_HOST: ' + this.ghaSecret('DEPLOY_HOST'),\n      '          DEPLOY_USER: ' + this.ghaSecret('DEPLOY_USER'),\n      '          DEPLOY_PORT: ' + this.ghaSecret('DEPLOY_PORT'),\n      '          MESH_SECRET: ' + this.ghaSecret('MESH_SECRET'),\n      '          BACKEND_IMAGE: ' + this.ghaEnv('BACKEND_IMAGE'),\n      envSecretsLines,\n      '        run: |',\n      ...runtimeEnvLines,\n      '          ssh -p \"${DEPLOY_PORT:-22}\" \"${DEPLOY_USER}@${DEPLOY_HOST}\" \\'install -d -m 700 ~/.panom/backend-runtime\\'',\n      '          ssh -p \"${DEPLOY_PORT:-22}\" \"${DEPLOY_USER}@${DEPLOY_HOST}\" \\'install -m 600 /dev/null ~/.panom/backend-runtime/.env\\'',\n      '          printf \\'%s\\\\n\\' \"$ENV_CONTENT\" | ssh -p \"${DEPLOY_PORT:-22}\" \"${DEPLOY_USER}@${DEPLOY_HOST}\" \\'cat > ~/.panom/backend-runtime/.env\\'',\n      '',\n      '      - name: Restart backend under Mesh on server',\n      '        env:',\n          '          DEPLOY_HOST: ' + this.ghaSecret('DEPLOY_HOST'),\n          '          DEPLOY_USER: ' + this.ghaSecret('DEPLOY_USER'),\n          '          DEPLOY_PORT: ' + this.ghaSecret('DEPLOY_PORT'),\n      '        run: |',\n          '          ssh -p \"${DEPLOY_PORT:-22}\" \"${DEPLOY_USER}@${DEPLOY_HOST}\" <<\\'EOF\\'',\n          '            set -euo pipefail',\n          '            APP_DIR=\"$HOME/.panom/backend-runtime\"',\n          '            SERVICE_FILE=\"$HOME/.config/systemd/user/panom-backend-mesh.service\"',\n          '            MESH_CLI_REL=\"./generated_modules/panom-mesh/dist/cli/index.js\"',\n          '',\n          '            resolve_node_bin() {',\n          '              if command -v node >/dev/null 2>&1; then',\n          '                command -v node',\n          '                return 0',\n          '              fi',\n          '              if [ -s \"$HOME/.nvm/nvm.sh\" ]; then',\n          '                . \"$HOME/.nvm/nvm.sh\"',\n          '                if command -v node >/dev/null 2>&1; then',\n          '                  command -v node',\n          '                  return 0',\n          '                fi',\n          '              fi',\n          '              if [ -s \"$HOME/.asdf/asdf.sh\" ]; then',\n          '                . \"$HOME/.asdf/asdf.sh\"',\n          '                if command -v node >/dev/null 2>&1; then',\n          '                  command -v node',\n          '                  return 0',\n          '                fi',\n          '              fi',\n          '              if [ -x \"$HOME/.volta/bin/node\" ]; then',\n          '                echo \"$HOME/.volta/bin/node\"',\n          '                return 0',\n          '              fi',\n          '              if [ -x \"$HOME/.local/share/fnm/fnm\" ]; then',\n          '                eval \"$(\"$HOME/.local/share/fnm/fnm\" env --use-on-cd)\"',\n          '                if command -v node >/dev/null 2>&1; then',\n          '                  command -v node',\n          '                  return 0',\n          '                fi',\n          '              fi',\n          '              return 1',\n          '            }',\n          '',\n          '            mkdir -p \"$HOME/.config/systemd/user\"',\n          '            cd \"$APP_DIR\"',\n          '            NODE_BIN=\"$(resolve_node_bin)\" || {',\n          '              echo \"[deploy] ERROR: node binary could not be resolved for non-interactive shell.\"',\n          '              exit 1',\n          '            }',\n          '            if [ ! -f \"$APP_DIR/$MESH_CLI_REL\" ]; then',\n          '              echo \"[deploy] ERROR: prebuilt mesh CLI is missing at $APP_DIR/$MESH_CLI_REL\"',\n          '              exit 1',\n          '            fi',\n          '',\n          '            cat > \"$SERVICE_FILE\" <<UNIT',\n          '            [Unit]',\n          '            Description=Panom backend mesh runtime',\n          '            After=network-online.target',\n      '            Wants=network-online.target',\n          '',\n          '            [Service]',\n          '            WorkingDirectory=%h/.panom/backend-runtime',\n          '            EnvironmentFile=%h/.panom/backend-runtime/.env',\n          '            ExecStart=${NODE_BIN} %h/.panom/backend-runtime/generated_modules/panom-mesh/dist/cli/index.js run --all --config %h/.panom/backend-runtime/mesh.config.cjs',\n          '            ExecStop=${NODE_BIN} %h/.panom/backend-runtime/generated_modules/panom-mesh/dist/cli/index.js podman:stop --config %h/.panom/backend-runtime/mesh.config.cjs --force',\n          '            Restart=always',\n          '            RestartSec=5',\n          '            TimeoutStopSec=20',\n      '',\n      '            [Install]',\n      '            WantedBy=default.target',\n      '            UNIT',\n      '',\n      '            systemctl --user stop panom-backend-mesh.service >/dev/null 2>&1 || true',\n      '            podman stop panom >/dev/null 2>&1 || true',\n      '            podman stop panom-worker >/dev/null 2>&1 || true',\n      '            podman rm -f panom >/dev/null 2>&1 || true',\n      '            podman rm -f panom-worker >/dev/null 2>&1 || true',\n      '            podman ps -a --format \\'{{.Names}}\\' | grep \\'^panom-\\' | xargs -r podman rm -f || true',\n      '',\n      '            systemctl --user daemon-reload',\n      '            systemctl --user enable panom-backend-mesh.service >/dev/null 2>&1 || true',\n      '            systemctl --user restart panom-backend-mesh.service',\n      '',\n      '            healthy=0',\n      '            for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do',\n      '              if curl -fsS --max-time 5 http://127.0.0.1:8080/health >/dev/null; then',\n      '                healthy=1',\n      '                break',\n      '              fi',\n      '              sleep 3',\n      '            done',\n      '',\n      '            if [ \"$healthy\" -ne 1 ]; then',\n      '              echo \"[deploy] Backend mesh service failed health check.\"',\n      '              systemctl --user --no-pager --full status panom-backend-mesh.service || true',\n      '              journalctl --user -u panom-backend-mesh.service -n 200 --no-pager || true',\n      '              podman ps -a || true',\n      '              exit 1',\n      '            fi',\n      '',\n      '            systemctl --user --no-pager --full status panom-backend-mesh.service',\n      '          EOF',\n      '',\n    ].join('\\n')\n  }\n\n  private backendQuadletWorkflow(\n    apiSvc: NormalizedMeshServiceConfig,\n    _workerSvc: NormalizedMeshServiceConfig | undefined,\n    ci: NormalizedMeshCiConfig\n  ): string {\n    const backendImage = apiSvc.podman.image ?? 'ghcr.io/' + this.ghaCtx('github.repository') + '/panom-backend:latest'\n    const secrets = ci.backend.envSecrets\n    const plan = ci.drs.enabled ? this.frontendDrsPlan(apiSvc) : undefined\n    const envSecretsLines = secrets.map(k => '          ' + k + ': ' + this.ghaSecret(k)).join('\\n')\n    const checkoutSteps = [\n      '      - name: Checkout',\n      '        uses: actions/checkout@v4',\n      '',\n      ...(ci.drs.enabled ? this.frontendDrsBootstrapSteps(plan!) : []),\n    ]\n\n    const setupNodeStep = [\n      '      - name: Setup Node',\n      '        uses: actions/setup-node@v4',\n      '        with:',\n      '          node-version: 20',\n      '          cache: npm',\n      ...(ci.drs.enabled ? ['          cache-dependency-path: package-lock.json'] : []),\n      '',\n    ]\n\n    const installStep = ci.drs.enabled\n      ? [\n        '      - name: Install DRS dependencies',\n        '        run: ' + plan!.installCommand,\n        '',\n      ]\n      : [\n        '      - name: Install root dependencies',\n        '        run: npm ci',\n        '',\n      ]\n\n    const buildImageStep = ci.drs.enabled\n      ? [\n        '      - name: Build backend image',\n        '        run: docker build -t \"$BACKEND_IMAGE\" .',\n        '',\n      ]\n      : [\n        '      - name: Build backend image',\n        '        run: docker build -t \"$BACKEND_IMAGE\" .',\n        '',\n      ]\n\n    const generateQuadletStep = ci.drs.enabled\n      ? [\n        '      - name: Generate Quadlet files',\n        '        env:',\n        '          MESH_RUNTIME_MODE: podman',\n        '          MESH_SECRET: ' + this.ghaSecret('MESH_SECRET'),\n        '          REDIS_URL: ' + this.ghaSecret('REDIS_URL'),\n        '          PANOM_BACKEND_IMAGE: ' + this.ghaEnv('BACKEND_IMAGE'),\n        '          MESH_CONFIG_MOUNT_SOURCE: /home/' + this.ghaSecret('DEPLOY_USER') + '/.panom-mesh/runtime',\n        envSecretsLines,\n        '        run: npm run mesh:podman:generate -- --force --out .mesh/quadlet',\n        '',\n      ]\n      : [\n        '      - name: Generate Quadlet files',\n        '        env:',\n        '          MESH_RUNTIME_MODE: podman',\n        '          MESH_SECRET: ' + this.ghaSecret('MESH_SECRET'),\n        '          REDIS_URL: ' + this.ghaSecret('REDIS_URL'),\n        '          PANOM_BACKEND_IMAGE: ' + this.ghaEnv('BACKEND_IMAGE'),\n        '          MESH_CONFIG_MOUNT_SOURCE: /home/' + this.ghaSecret('DEPLOY_USER') + '/.panom-mesh/runtime',\n        envSecretsLines,\n        '        run: npm run mesh:podman:generate -- --force --out .mesh/quadlet',\n        '',\n      ]\n    const quadletPath = '.mesh/quadlet/'\n\n    return [\n      'name: Deploy',\n      '',\n      'on:',\n      '  push:',\n      '    branches:',\n      '      - ' + ci.branch,\n      '',\n      'concurrency:',\n      '  group: deploy-backend',\n      '  cancel-in-progress: false',\n      '',\n      'jobs:',\n      '  deploy:',\n      '    runs-on: ubuntu-latest',\n      '',\n      '    permissions:',\n      '      contents: read',\n      '      packages: write',\n      '',\n      '    env:',\n      '      BACKEND_IMAGE: ' + backendImage,\n      '',\n      '    steps:',\n      ...checkoutSteps,\n      ...setupNodeStep,\n      ...installStep,\n      '',\n      '      - name: Login GHCR',\n      '        env:',\n      '          GHCR_TOKEN: ' + this.ghaSecret('GITHUB_TOKEN'),\n      '          GHCR_USER: ' + this.ghaCtx('github.actor'),\n      '        run: |',\n      '          for attempt in 1 2 3 4 5; do',\n      '            echo \"$GHCR_TOKEN\" | docker login ghcr.io -u \"$GHCR_USER\" --password-stdin && exit 0',\n      '            echo \"GHCR login failed, retrying (${attempt}/5)...\"',\n      '            sleep $((attempt * 2))',\n      '          done',\n      '          exit 1',\n      '',\n      ...buildImageStep,\n      '',\n      '      - name: Push backend image',\n      '        run: docker push \"$BACKEND_IMAGE\"',\n      '',\n      ...generateQuadletStep,\n      '',\n      '      - name: Setup SSH',\n      '        env:',\n      '          DEPLOY_SSH_KEY: ' + this.ghaSecret('DEPLOY_SSH_KEY'),\n      '          DEPLOY_HOST: ' + this.ghaSecret('DEPLOY_HOST'),\n      '          DEPLOY_PORT: ' + this.ghaSecret('DEPLOY_PORT'),\n      '        run: |',\n      '          mkdir -p ~/.ssh',\n      '          echo \"$DEPLOY_SSH_KEY\" > ~/.ssh/id_rsa',\n      '          chmod 600 ~/.ssh/id_rsa',\n      '          ssh-keyscan -p \"${DEPLOY_PORT:-22}\" \"$DEPLOY_HOST\" >> ~/.ssh/known_hosts',\n      '',\n      '      - name: Upload quadlet files',\n      '        env:',\n      '          DEPLOY_HOST: ' + this.ghaSecret('DEPLOY_HOST'),\n      '          DEPLOY_USER: ' + this.ghaSecret('DEPLOY_USER'),\n      '          DEPLOY_PORT: ' + this.ghaSecret('DEPLOY_PORT'),\n      '        run: |',\n      \"          ssh -p \\\"${DEPLOY_PORT:-22}\\\" \\\"${DEPLOY_USER}@${DEPLOY_HOST}\\\" 'mkdir -p ~/.config/containers/systemd'\",\n      '          rsync -az --delete -e \"ssh -p ${DEPLOY_PORT:-22}\" ' + quadletPath + ' \"${DEPLOY_USER}@${DEPLOY_HOST}:~/.config/containers/systemd/\"',\n      '',\n      '      - name: Reload and restart backend units',\n      '        env:',\n      '          DEPLOY_HOST: ' + this.ghaSecret('DEPLOY_HOST'),\n      '          DEPLOY_USER: ' + this.ghaSecret('DEPLOY_USER'),\n      '          DEPLOY_PORT: ' + this.ghaSecret('DEPLOY_PORT'),\n      '        run: |',\n      '          ssh -p \"${DEPLOY_PORT:-22}\" \"${DEPLOY_USER}@${DEPLOY_HOST}\" <<\\'EOF\\'',\n      '            set -euo pipefail',\n      '            QUADLET_DIR=\"$HOME/.config/containers/systemd\"',\n      '',\n      \"            podman ps --format '{{.Names}}' | grep '^panom-' | xargs -r podman rm -f || true\",\n      '',\n      '            systemctl --user daemon-reload',\n      '            systemctl --user reset-failed || true',\n      '',\n      \"            mapfile -t APP_UNITS < <(find \\\"$QUADLET_DIR\\\" -maxdepth 1 -type f -name 'panom-*.container' ! -name 'panom-mesh-router.container' -printf '%f\\\\n' | sort)\",\n      '',\n      '            for unit in \"${APP_UNITS[@]}\"; do systemctl --user restart \"$unit\"; done',\n      '',\n      \"            systemctl --user --no-pager --plain list-units 'panom*'\",\n      '          EOF',\n      '',\n    ].join('\\n')\n  }\n\n  // ─── GitHub Actions expression helpers ───────────────────────────────────\n  // These avoid TypeScript template literal interpolation conflicts with ${{ }}\n\n  /** Produces: ${{ secrets.KEY }} */\n  private ghaSecret(key: string): string {\n    return '${{ secrets.' + key + ' }}'\n  }\n\n  /** Produces: ${{ env.KEY }} */\n  private ghaEnv(key: string): string {\n    return '${{ env.' + key + ' }}'\n  }\n\n  /** Produces: ${{ github.actor }} etc. */\n  private ghaCtx(path: string): string {\n    return '${{ ' + path + ' }}'\n  }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nexport interface DrsPackageEntry {\n  readonly to?: readonly string[]\n  readonly 'only-source'?: boolean\n  readonly prebuilt?: boolean\n  readonly local: {\n    readonly path: string\n    readonly build?: string\n  }\n  readonly registry: {\n    readonly version: string\n  }\n}\n\ninterface DrsConsumerEntry {\n  readonly dir: string\n  readonly dependencies: readonly string[]\n}\n\ninterface DrsConfigFile {\n  readonly root?: string\n  readonly packages: Record<string, DrsPackageEntry>\n  readonly consumers: Record<string, DrsConsumerEntry>\n}\n\nexport interface DrsSourcePackagePlan {\n  readonly name: string\n  readonly sourcePath: string\n  readonly generatedPath: string\n  readonly installSpecifier: string\n  readonly buildCommand?: string\n  readonly dependencyNames: readonly string[]\n}\n\nexport interface DrsWorkflowPlan {\n  readonly consumerPath: string\n  readonly consumerSlug: string\n  readonly installSpecifiers: readonly string[]\n  readonly installCommand: string\n  readonly sourcePackages: readonly DrsSourcePackagePlan[]\n}\n\nconst GENERATED_MODULES_DIR = 'generated_modules'\nconst COPY_EXCLUDES = new Set(['.git', 'node_modules', 'dist', '.turbo', '.next', '.DS_Store'])\n\nexport function formatNpmInstallCommand(specifiers: readonly string[]): string {\n  return specifiers.length > 0 ? `npm install ${specifiers.join(' ')}` : 'npm install'\n}\n\nexport function getDrsWorkflowPlan(projectRoot: string, consumerCwd: string): DrsWorkflowPlan {\n  const config = loadDrsConfig(projectRoot)\n  const drsRoot = path.resolve(projectRoot, config.root ?? '.')\n  const normalizedConsumerPath = path.resolve(consumerCwd)\n  const consumerEntry = findConsumerEntry(config, drsRoot, normalizedConsumerPath)\n  const consumerSlug = path.relative(projectRoot, normalizedConsumerPath) || '.'\n\n  const installSpecifiers: string[] = []\n  const sourcePackages: DrsSourcePackagePlan[] = []\n  const sourcePackageNames = new Set<string>()\n\n  for (const packageName of consumerEntry.dependencies) {\n    const packageEntry = config.packages[packageName]\n    if (!packageEntry) {\n      throw new Error(`DRS consumer \"${consumerEntry.dir}\" depends on unknown package \"${packageName}\".`)\n    }\n\n    const absoluteLocalPath = path.resolve(drsRoot, packageEntry.local.path)\n    const sourceTargets = packageEntry.to ?? []\n    const sourceForConsumer = sourceTargets.length === 0 || sourceTargets.includes(consumerSlug)\n\n    if (!sourceForConsumer) {\n      installSpecifiers.push(`${packageName}@${packageEntry.registry.version}`)\n      continue\n    }\n\n    if (!fs.existsSync(absoluteLocalPath)) {\n      throw new Error(\n        `DRS package \"${packageName}\" is marked only-source but local path is missing: ${absoluteLocalPath}.`\n      )\n    }\n\n    const generatedPath = resolveGeneratedModulePath(packageEntry.local.path)\n    sourcePackageNames.add(packageName)\n    sourcePackages.push({\n      name: packageName,\n      sourcePath: path.relative(projectRoot, absoluteLocalPath) || '.',\n      generatedPath,\n      installSpecifier: `file:./${generatedPath}`,\n      // Only include buildCommand when it is explicitly defined to avoid\n      // assigning `undefined` to a present property (exactOptionalPropertyTypes).\n      ...(packageEntry.local.build !== undefined ? { buildCommand: packageEntry.local.build } : {}),\n      dependencyNames: [],\n    })\n  }\n\n  const sourcePackagesByName = new Map(sourcePackages.map(pkg => [pkg.name, pkg]))\n  for (let index = 0; index < sourcePackages.length; index += 1) {\n    const sourcePackage = sourcePackages[index]!\n    const packageJson = readPackageJson(path.resolve(projectRoot, sourcePackage.sourcePath), sourcePackage.name)\n    sourcePackages[index] = {\n      ...sourcePackage,\n      dependencyNames: listDrsDependencies(packageJson, sourcePackageNames),\n    }\n  }\n\n  const orderedSourcePackages = sortSourcePackages(sourcePackages)\n  const allSpecifiers = [...installSpecifiers, ...orderedSourcePackages.map(pkg => pkg.installSpecifier)]\n\n  return {\n    consumerPath: path.relative(projectRoot, normalizedConsumerPath) || '.',\n    consumerSlug,\n    installSpecifiers: allSpecifiers,\n    installCommand: formatNpmInstallCommand(allSpecifiers),\n    sourcePackages: orderedSourcePackages,\n  }\n}\n\nexport async function syncDrsGeneratedModules(projectRoot: string, consumerCwd: string): Promise<void> {\n  const plan = getDrsWorkflowPlan(projectRoot, consumerCwd)\n  const generatedRoot = path.join(consumerCwd, GENERATED_MODULES_DIR)\n\n  await fs.promises.rm(generatedRoot, { recursive: true, force: true })\n  await fs.promises.mkdir(generatedRoot, { recursive: true })\n\n  for (const sourcePackage of plan.sourcePackages) {\n    const absoluteSourcePath = path.resolve(projectRoot, sourcePackage.sourcePath)\n    const absoluteGeneratedPath = path.join(consumerCwd, sourcePackage.generatedPath)\n    await fs.promises.mkdir(path.dirname(absoluteGeneratedPath), { recursive: true })\n    await fs.promises.cp(absoluteSourcePath, absoluteGeneratedPath, {\n      recursive: true,\n      filter: source => {\n        const entryName = path.basename(source)\n        return !COPY_EXCLUDES.has(entryName) && !entryName.startsWith('._')\n      },\n    })\n    await pruneGeneratedNoise(absoluteGeneratedPath)\n  }\n\n  const generatedPackages = new Map(plan.sourcePackages.map(pkg => [pkg.name, pkg]))\n  for (const sourcePackage of plan.sourcePackages) {\n    await rewriteGeneratedPackageManifest(path.join(consumerCwd, sourcePackage.generatedPath), generatedPackages)\n  }\n}\n\nfunction resolveGeneratedModulePath(localPath: string): string {\n  const normalized = localPath.replace(/\\\\/g, '/').replace(/^\\.?\\//, '').replace(/\\/+$/, '')\n  if (normalized === '' || normalized === '.' || normalized.startsWith('../') || normalized.includes('/../')) {\n    throw new Error(`DRS local.path must stay inside the repository root: ${localPath}`)\n  }\n  return path.posix.join(GENERATED_MODULES_DIR, normalized)\n}\n\nasync function pruneGeneratedNoise(dir: string): Promise<void> {\n  const entries = await fs.promises.readdir(dir, { withFileTypes: true })\n  for (const entry of entries) {\n    const target = path.join(dir, entry.name)\n    if (entry.name.startsWith('._') || entry.name === '.DS_Store') {\n      await fs.promises.rm(target, { recursive: true, force: true })\n      continue\n    }\n    if (entry.isDirectory()) {\n      await pruneGeneratedNoise(target)\n    }\n  }\n}\n\nasync function rewriteGeneratedPackageManifest(\n  generatedPackageDir: string,\n  generatedPackages: ReadonlyMap<string, DrsSourcePackagePlan>\n): Promise<void> {\n  const packageJsonPath = path.join(generatedPackageDir, 'package.json')\n  if (!fs.existsSync(packageJsonPath)) {\n    throw new Error(`Generated DRS package is missing package.json: ${generatedPackageDir}`)\n  }\n\n  const packageJson = JSON.parse(await fs.promises.readFile(packageJsonPath, 'utf8')) as PackageJson\n  rewriteDependencyBlock(packageJson.dependencies, generatedPackageDir, generatedPackages)\n  rewriteDependencyBlock(packageJson.devDependencies, generatedPackageDir, generatedPackages)\n  rewriteDependencyBlock(packageJson.peerDependencies, generatedPackageDir, generatedPackages)\n  rewriteDependencyBlock(packageJson.optionalDependencies, generatedPackageDir, generatedPackages)\n\n  await fs.promises.writeFile(packageJsonPath, `${JSON.stringify(packageJson, null, 2)}\\n`, 'utf8')\n  await fs.promises.rm(path.join(generatedPackageDir, 'package-lock.json'), { force: true })\n}\n\nfunction rewriteDependencyBlock(\n  dependencies: Record<string, string> | undefined,\n  generatedPackageDir: string,\n  generatedPackages: ReadonlyMap<string, DrsSourcePackagePlan>\n): void {\n  if (!dependencies) return\n\n  for (const dependencyName of Object.keys(dependencies)) {\n    const generatedDependency = generatedPackages.get(dependencyName)\n    if (!generatedDependency) continue\n    const generatedPath = generatedDependency.generatedPath\n    if (!generatedPath) continue\n    const consumerRoot = generatedPackageDir.split(`${path.sep}${GENERATED_MODULES_DIR}${path.sep}`)[0]\n    const targetDir = path.join(String(consumerRoot), String(generatedPath))\n    dependencies[dependencyName] = `file:${path.relative(generatedPackageDir, targetDir) || '.'}`\n  }\n}\n\ninterface PackageJson {\n  readonly name?: string\n  dependencies?: Record<string, string>\n  devDependencies?: Record<string, string>\n  peerDependencies?: Record<string, string>\n  optionalDependencies?: Record<string, string>\n}\n\nfunction readPackageJson(packageDir: string, packageName: string): PackageJson {\n  const packageJsonPath = path.join(packageDir, 'package.json')\n  if (!fs.existsSync(packageJsonPath)) {\n    throw new Error(`DRS package \"${packageName}\" is missing package.json at ${packageJsonPath}.`)\n  }\n  return JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')) as PackageJson\n}\n\nfunction listDrsDependencies(packageJson: PackageJson, sourcePackageNames: ReadonlySet<string>): readonly string[] {\n  const names = new Set<string>()\n  for (const block of [\n    packageJson.dependencies,\n    packageJson.devDependencies,\n    packageJson.optionalDependencies,\n  ]) {\n    for (const dependencyName of Object.keys(block ?? {})) {\n      if (sourcePackageNames.has(dependencyName)) {\n        names.add(dependencyName)\n      }\n    }\n  }\n  return [...names]\n}\n\nfunction sortSourcePackages(sourcePackages: readonly DrsSourcePackagePlan[]): readonly DrsSourcePackagePlan[] {\n  const byName = new Map(sourcePackages.map(pkg => [pkg.name, pkg]))\n  const remainingDependencies = new Map<string, Set<string>>()\n  const dependents = new Map<string, Set<string>>()\n\n  for (const sourcePackage of sourcePackages) {\n    const dependencies = new Set(sourcePackage.dependencyNames.filter(name => byName.has(name)))\n    remainingDependencies.set(sourcePackage.name, dependencies)\n    for (const dependencyName of dependencies) {\n      const nextDependents = dependents.get(dependencyName) ?? new Set<string>()\n      nextDependents.add(sourcePackage.name)\n      dependents.set(dependencyName, nextDependents)\n    }\n  }\n\n  const ready = sourcePackages\n    .filter(pkg => (remainingDependencies.get(pkg.name)?.size ?? 0) === 0)\n    .map(pkg => pkg.name)\n  const ordered: DrsSourcePackagePlan[] = []\n\n  while (ready.length > 0) {\n    const nextName = ready.shift()!\n    ordered.push(byName.get(nextName)!)\n    for (const dependentName of dependents.get(nextName) ?? []) {\n      const dependencySet = remainingDependencies.get(dependentName)\n      if (!dependencySet) continue\n      dependencySet.delete(nextName)\n      if (dependencySet.size === 0) {\n        ready.push(dependentName)\n      }\n    }\n  }\n\n  if (ordered.length !== sourcePackages.length) {\n    const unresolved = sourcePackages\n      .filter(pkg => !ordered.some(candidate => candidate.name === pkg.name))\n      .map(pkg => pkg.name)\n      .join(', ')\n    throw new Error(`DRS source packages contain a dependency cycle: ${unresolved}`)\n  }\n\n  return ordered\n}\n\nfunction loadDrsConfig(projectRoot: string): DrsConfigFile {\n  const configPath = path.join(projectRoot, 'drs.config.json')\n  if (!fs.existsSync(configPath)) {\n    throw new Error(`DRS config not found at ${configPath}.`)\n  }\n\n  const raw = JSON.parse(fs.readFileSync(configPath, 'utf8')) as Partial<DrsConfigFile>\n  if (!raw.packages || typeof raw.packages !== 'object') {\n    throw new Error(`DRS config at ${configPath} must define packages.`)\n  }\n  if (!raw.consumers || typeof raw.consumers !== 'object') {\n    throw new Error(`DRS config at ${configPath} must define consumers.`)\n  }\n\n  if (raw.root !== undefined) {\n    return {\n      root: raw.root,\n      packages: raw.packages as Record<string, DrsPackageEntry>,\n      consumers: raw.consumers as Record<string, DrsConsumerEntry>,\n    }\n  }\n\n  return {\n    packages: raw.packages as Record<string, DrsPackageEntry>,\n    consumers: raw.consumers as Record<string, DrsConsumerEntry>,\n  }\n}\n\nexport function getDrsPackageEntry(projectRoot: string, packageName: string): DrsPackageEntry {\n  const config = loadDrsConfig(projectRoot)\n  const entry = config.packages[packageName]\n  if (!entry) {\n    throw new Error(`DRS package \"${packageName}\" is not defined in ${path.join(projectRoot, 'drs.config.json')}.`)\n  }\n  return entry\n}\n\nfunction findConsumerEntry(\n  config: DrsConfigFile,\n  drsRoot: string,\n  consumerCwd: string\n): DrsConsumerEntry {\n  for (const consumer of Object.values(config.consumers)) {\n    const consumerPath = path.resolve(drsRoot, consumer.dir)\n    if (consumerPath === consumerCwd) {\n      return consumer\n    }\n  }\n\n  throw new Error(`No DRS consumer matches frontend directory: ${consumerCwd}.`)\n}\n","import path from 'node:path'\nimport type { NormalizedMeshConfig } from '../../core/types.js'\nimport { PodmanPlan } from '../PodmanPlan.js'\n\nexport interface QuadletFile {\n  readonly name: string\n  readonly content: string\n}\n\nexport class PodmanQuadletGenerator {\n  public constructor(private readonly config: NormalizedMeshConfig) {}\n\n  public async generate(): Promise<readonly QuadletFile[]> {\n    const files: QuadletFile[] = []\n    if (this.config.runtime.podman.createNetwork) files.push(this.networkFile())\n    if (this.config.runtime.podman.redis.enabled) files.push(this.redisFile())\n    const specs = await new PodmanPlan(this.config).build()\n    for (const spec of specs) files.push(this.serviceFile(spec))\n    if (this.config.router.enabled && specs.some(spec => spec.service.routes.length > 0)) files.push(this.routerFile())\n    return files\n  }\n\n  private networkFile(): QuadletFile {\n    const network = this.config.runtime.podman.network\n    return {\n      name: `${network}.network`,\n      content: `[Network]\\nNetworkName=${network}\\n`\n    }\n  }\n\n  private redisFile(): QuadletFile {\n    const podman = this.config.runtime.podman\n    return {\n      name: `${podman.redis.containerName}.container`,\n      content: [\n        '[Unit]',\n        `Description=${this.config.app} mesh Redis registry`,\n        '',\n        '[Container]',\n        `ContainerName=${podman.redis.containerName}`,\n        `Image=${podman.redis.image}`,\n        `Network=${podman.network}`,\n        `Volume=${podman.redis.volume}:/data`,\n        `Label=panom.mesh.app=${this.config.app}`,\n        'Label=panom.mesh.service=redis',\n        '',\n        '[Service]',\n        'Restart=always',\n        '',\n        '[Install]',\n        'WantedBy=default.target',\n        ''\n      ].join('\\n')\n    }\n  }\n\n  private serviceFile(spec: Awaited<ReturnType<PodmanPlan['build']>>[number]): QuadletFile {\n    const service = spec.service\n    const podman = this.config.runtime.podman\n    const lines: string[] = [\n      '[Unit]',\n      `Description=${this.config.app} mesh ${service.name} ${spec.index + 1}`,\n      '',\n      '[Container]',\n      `ContainerName=${spec.name}`,\n      `Image=${spec.image}`,\n      `Network=${podman.network}`,\n      `Label=panom.mesh.app=${this.config.app}`,\n      `Label=panom.mesh.id=${spec.id}`,\n      `Label=panom.mesh.service=${service.name}`,\n      `Label=panom.mesh.serviceType=${service.type}`,\n      `Label=panom.mesh.routes=${JSON.stringify(service.routes)}`,\n      `Label=panom.mesh.strategy=${service.strategy}`\n    ]\n\n    for (const [key, value] of Object.entries(service.podman.labels)) lines.push(`Label=${key}=${value}`)\n    for (const [key, value] of Object.entries({ ...service.env, ...service.podman.env, ...this.meshEnv(spec) })) lines.push(`Environment=${key}=${this.escape(String(value))}`)\n    for (const volume of service.podman.volumes) lines.push(`Volume=${volume}`)\n    for (const publish of service.podman.publish) lines.push(`PublishPort=${publish}`)\n    if (spec.hostPort !== null && spec.containerPort !== null) lines.push(`PublishPort=${podman.publishHost}:${spec.hostPort}:${spec.containerPort}`)\n    if (service.podman.user) lines.push(`User=${service.podman.user}`)\n    if (service.podman.workdir) lines.push(`WorkingDir=${service.podman.workdir}`)\n    if (service.podman.entrypoint) lines.push(`Entrypoint=${service.podman.entrypoint.join(' ')}`)\n    if (service.podman.command) lines.push(`Exec=${service.podman.command.join(' ')}`)\n    for (const extra of service.podman.extraArgs) lines.push(`PodmanArgs=${extra}`)\n\n    lines.push('', '[Service]', `Restart=${service.podman.restartPolicy}`, '', '[Install]', 'WantedBy=default.target', '')\n    return { name: `${spec.name}.container`, content: lines.join('\\n') }\n  }\n\n  private routerFile(): QuadletFile {\n    const podman = this.config.runtime.podman\n    const configMount = `${podman.quadlet.configSourceDir}:${podman.quadlet.configTargetDir}:ro`\n    const lines = [\n      '[Unit]',\n      `Description=${this.config.app} mesh router`,\n      '',\n      '[Container]',\n      `ContainerName=${podman.containerPrefix}-mesh-router`,\n      `Image=${podman.routerImage}`,\n      `Network=${podman.network}`,\n      `PublishPort=${podman.publishHost}:${this.config.router.port}:${podman.routerContainerPort}`,\n      `Volume=${configMount}`,\n      `WorkingDir=${podman.quadlet.configTargetDir}`,\n      `Environment=MESH_APP=${this.config.app}`,\n      `Environment=MESH_REGISTRY_TYPE=${this.config.registry.type}`,\n      `Environment=MESH_REGISTRY_URL=${this.config.registry.url}`,\n      `Environment=PORT=${podman.routerContainerPort}`,\n      `Environment=MESH_PORT=${podman.routerContainerPort}`,\n      `Exec=mesh router --config ${this.routerConfigPath()}`,\n      '',\n      '[Service]',\n      'Restart=always',\n      '',\n      '[Install]',\n      'WantedBy=default.target',\n      ''\n    ]\n    return { name: `${podman.containerPrefix}-mesh-router.container`, content: lines.join('\\n') }\n  }\n\n  private meshEnv(spec: Awaited<ReturnType<PodmanPlan['build']>>[number]): Record<string, string> {\n    return {\n      MESH_APP: this.config.app,\n      MESH_SERVICE: spec.service.name,\n      MESH_SERVICE_TYPE: spec.service.type,\n      MESH_INSTANCE_ID: spec.id,\n      MESH_INSTANCE_INDEX: String(spec.index),\n      MESH_REGISTRY_TYPE: this.config.registry.type,\n      MESH_REGISTRY_URL: this.config.registry.url,\n      MESH_ROUTER_HOST: this.config.router.host,\n      MESH_ROUTER_PORT: String(this.config.router.port),\n      ...(spec.containerPort === null ? {} : { PORT: String(spec.containerPort), MESH_PORT: String(spec.containerPort) })\n    }\n  }\n\n  private routerConfigPath(): string {\n    const sourceDir = this.config.runtime.podman.quadlet.configSourceDir\n    const targetDir = this.config.runtime.podman.quadlet.configTargetDir\n    const relative = this.config.configPath.startsWith(sourceDir)\n      ? path.relative(sourceDir, this.config.configPath)\n      : path.basename(this.config.configPath)\n    return path.posix.join(targetDir, relative.split(path.sep).join(path.posix.sep))\n  }\n\n  private escape(value: string): string {\n    return value.replace(/\\n/g, '\\\\n')\n  }\n}\n","import type { MeshPodmanGenerateOptions, MeshPodmanPlanOptions, NormalizedMeshConfig } from '../core/types.js'\nimport { ensureDir } from '../utils/fs.js'\nimport { PodmanCommandBuilder } from './PodmanCommandBuilder.js'\nimport { PodmanPlan } from './PodmanPlan.js'\nimport { PodmanQuadletGenerator } from './quadlet/PodmanQuadletGenerator.js'\n\nexport class PodmanCommands {\n  public constructor(private readonly config: NormalizedMeshConfig) {}\n\n  public async plan(options: MeshPodmanPlanOptions = {}): Promise<string> {\n    const specs = await new PodmanPlan(this.config).build()\n    const builder = new PodmanCommandBuilder(this.config)\n    const rows = specs.map(spec => ({\n      id: spec.id,\n      service: spec.service.name,\n      name: spec.name,\n      image: spec.image,\n      port: spec.hostPort === null ? '-' : `${spec.hostPort}:${spec.containerPort}`,\n      command: `${this.config.runtime.podman.podmanPath} ${builder.runServiceArgs(spec).join(' ')}`\n    }))\n    if (options.json) return `${JSON.stringify(rows, null, 2)}\\n`\n    return rows.map(row => `${row.service}\\t${row.name}\\t${row.image}\\t${row.port}\\n  ${row.command}`).join('\\n') + '\\n'\n  }\n\n  public async generate(options: MeshPodmanGenerateOptions = {}): Promise<string> {\n    const outDir = options.outputDir ?? this.config.runtime.podman.quadlet.outputDir\n    const files = await new PodmanQuadletGenerator(this.config).generate()\n    await ensureDir(outDir)\n    const fs = await import('node:fs')\n    for (const file of files) {\n      const target = `${outDir}/${file.name}`\n      if (!options.force && fs.existsSync(target)) throw new Error(`Quadlet file already exists: ${target}. Use --force to overwrite.`)\n      await fs.promises.writeFile(target, file.content, 'utf8')\n    }\n    const lines = [`Generated ${files.length} Quadlet file(s) in ${outDir}.`]\n    if (options.print) lines.push('', ...files.flatMap(file => [`# ${file.name}`, file.content.trim(), '']))\n    if (this.config.runtime.podman.quadlet.installCommand) {\n      lines.push('Reload systemd after copying/installing:', this.config.runtime.podman.quadlet.user ? '  systemctl --user daemon-reload' : '  sudo systemctl daemon-reload')\n    }\n    return `${lines.join('\\n')}\\n`\n  }\n}\n","import type { NormalizedMeshConfig, MeshHsmPlanOptions } from '../core/types.js'\nimport { HsmRouteMapper } from './HsmRouteMapper.js'\n\nexport class HsmMeshPlanner {\n  public constructor(private readonly config: NormalizedMeshConfig) {}\n\n  public plan(options: MeshHsmPlanOptions = {}): string {\n    const routes = this.config.hsm.routes\n    if (options.json) return `${JSON.stringify(routes, null, 2)}\\n`\n    return new HsmRouteMapper().summarize(routes)\n  }\n}\n","import http from 'node:http'\nimport type { MeshInstanceRecord, NormalizedMeshConfig } from '../core/types.js'\nimport { RegistryFactory } from '../registry/RegistryFactory.js'\nimport { LogStore } from '../logs/LogStore.js'\nimport type { MeshRegistry } from '../registry/types.js'\nimport { LockFactory } from '../locks/LockFactory.js'\nimport { LeaderElection } from '../leader/LeaderElection.js'\nimport type { MeshDashboardBuildOptions, MeshDashboardLogEntry, MeshDashboardRouteSummary, MeshDashboardServiceSummary, MeshDashboardSnapshot, MeshRouterMetricsSnapshot } from './types.js'\n\nexport class ObservabilitySnapshotBuilder {\n  private readonly registry: MeshRegistry\n  private readonly logs: LogStore\n\n  public constructor(private readonly config: NormalizedMeshConfig) {\n    this.registry = new RegistryFactory().create(config)\n    this.logs = new LogStore(config.runtime.logsDir)\n  }\n\n  public async build(options: MeshDashboardBuildOptions = {}): Promise<MeshDashboardSnapshot> {\n    const instances = await this.registry.list({ includeExpired: true })\n    const routerUrl = `http://${this.config.router.host}:${this.config.router.port}`\n    const metricsPath = `${this.config.observability.path}/metrics`\n    const metrics = await this.readRouterMetrics(`${routerUrl}${metricsPath}`)\n    const serviceSummaries = this.serviceSummaries(instances)\n    const routes = this.routeSummaries()\n    const logs = options.includeLogs ? await this.readLogs(instances, options.logLines ?? this.config.observability.logLines) : undefined\n    const coordination = await this.readCoordination()\n\n    return {\n      app: this.config.app,\n      generatedAt: new Date().toISOString(),\n      projectRoot: this.config.projectRoot,\n      router: {\n        enabled: this.config.router.enabled,\n        url: routerUrl,\n        metricsPath,\n        ...(metrics.ok ? { metrics: metrics.value } : { metricsError: metrics.error })\n      },\n      registry: {\n        type: this.config.registry.type,\n        ttlMs: this.config.registry.ttlMs,\n        heartbeatIntervalMs: this.config.registry.heartbeatIntervalMs\n      },\n      streaming: {\n        enabled: this.config.streaming.enabled,\n        transport: this.config.streaming.transport,\n        logs: this.config.streaming.logs,\n        events: this.config.streaming.events,\n        keyPrefix: this.config.streaming.keyPrefix\n      },\n      services: serviceSummaries,\n      instances,\n      routes,\n      coordination,\n      hsm: {\n        enabled: this.config.hsm.enabled,\n        routeCount: this.config.hsm.routes.length,\n        ...(this.config.hsm.schema?.id !== undefined ? { schemaId: this.config.hsm.schema.id } : {}),\n        ...(this.config.hsm.schema?.version !== undefined ? { schemaVersion: this.config.hsm.schema.version } : {})\n      },\n      ...(logs ? { logs } : {})\n    }\n  }\n\n  private serviceSummaries(instances: readonly MeshInstanceRecord[]): readonly MeshDashboardServiceSummary[] {\n    const summaries: MeshDashboardServiceSummary[] = []\n    for (const service of this.config.services.values()) {\n      const owned = instances.filter(instance => instance.service === service.name)\n      summaries.push({\n        service: service.name,\n        type: service.type,\n        strategy: service.strategy,\n        configuredInstances: service.instances,\n        running: owned.filter(instance => instance.status === 'running' || instance.status === 'starting').length,\n        draining: owned.filter(instance => instance.status === 'draining').length,\n        expired: owned.filter(instance => instance.status === 'expired').length,\n        failed: owned.filter(instance => instance.status === 'failed').length,\n        routes: service.routes\n      })\n    }\n    summaries.sort((a, b) => a.service.localeCompare(b.service))\n    return summaries\n  }\n\n  private routeSummaries(): readonly MeshDashboardRouteSummary[] {\n    const routes: MeshDashboardRouteSummary[] = []\n    for (const service of this.config.services.values()) {\n      const hsmRoutes = new Set(service.hsmRoutes.map(route => route.route))\n      for (const route of service.routes) {\n        if (hsmRoutes.has(route)) continue\n        routes.push({ service: service.name, route, source: 'config' })\n      }\n      for (const route of service.hsmRoutes) {\n        routes.push({ service: service.name, route: route.route, source: route.source, stateId: route.stateId })\n      }\n    }\n    routes.sort((a, b) => b.route.length - a.route.length || a.service.localeCompare(b.service) || a.route.localeCompare(b.route))\n    return routes\n  }\n\n\n  private async readCoordination() {\n    if (!this.config.coordination.enabled) {\n      return { enabled: false, backend: this.config.coordination.backend, locks: [], leaders: [] }\n    }\n    try {\n      const locks = new LockFactory().createManager(this.config, 'dashboard')\n      const leader = new LeaderElection(locks, 'dashboard')\n      return {\n        enabled: true,\n        backend: this.config.coordination.locks.backend,\n        locks: await locks.list(),\n        leaders: await leader.list()\n      }\n    } catch (error) {\n      return {\n        enabled: true,\n        backend: this.config.coordination.locks.backend,\n        locks: [],\n        leaders: [],\n        errors: [error instanceof Error ? error.message : String(error)]\n      }\n    }\n  }\n\n  private async readLogs(instances: readonly MeshInstanceRecord[], lines: number): Promise<readonly MeshDashboardLogEntry[]> {\n    const selected = instances\n      .filter(instance => instance.logFile)\n      .sort((a, b) => a.service.localeCompare(b.service) || a.id.localeCompare(b.id))\n    const output: MeshDashboardLogEntry[] = []\n    for (const instance of selected) {\n      const text = await this.logs.readLastLines(instance.logFile, lines)\n      output.push({ instanceId: instance.id, service: instance.service, logFile: instance.logFile, text })\n    }\n    return output\n  }\n\n  private async readRouterMetrics(url: string): Promise<{ ok: true; value: MeshRouterMetricsSnapshot } | { ok: false; error: string }> {\n    return await new Promise(resolve => {\n      const request = http.request(url, { method: 'GET', timeout: 750 }, response => {\n        let body = ''\n        response.setEncoding('utf8')\n        response.on('data', chunk => { body += String(chunk) })\n        response.on('end', () => {\n          try {\n            if ((response.statusCode ?? 500) < 200 || (response.statusCode ?? 500) >= 300) {\n              resolve({ ok: false, error: `router metrics returned HTTP ${response.statusCode ?? 'unknown'}` })\n              return\n            }\n            resolve({ ok: true, value: JSON.parse(body) as MeshRouterMetricsSnapshot })\n          } catch (error) {\n            resolve({ ok: false, error: error instanceof Error ? error.message : String(error) })\n          }\n        })\n      })\n      request.once('timeout', () => {\n        request.destroy()\n        resolve({ ok: false, error: 'router metrics timed out' })\n      })\n      request.once('error', error => resolve({ ok: false, error: error.message }))\n      request.end()\n    })\n  }\n}\n","import type { MeshLockBackend, MeshLockLease as MeshLockLeaseContract } from './types.js'\n\nexport class LockLease implements MeshLockLeaseContract {\n  public constructor(\n    private readonly backend: MeshLockBackend,\n    public readonly key: string,\n    public readonly ownerId: string,\n    public readonly acquiredAt: string,\n    public readonly expiresAt: string\n  ) {}\n\n  public async renew(ttlMs = 30_000): Promise<boolean> {\n    return this.backend.renew(this.key, this.ownerId, ttlMs)\n  }\n\n  public async release(): Promise<boolean> {\n    return this.backend.release(this.key, this.ownerId)\n  }\n}\n","import { LockLease } from './LockLease.js'\nimport type { MeshLockAcquireOptions, MeshLockBackend, MeshLockLease, MeshLockRecord } from './types.js'\n\nexport class MemoryLockBackend implements MeshLockBackend {\n  public readonly kind = 'memory'\n  private readonly locks = new Map<string, MeshLockRecord>()\n\n  public async acquire(key: string, ownerId: string, options: MeshLockAcquireOptions = {}): Promise<MeshLockLease | null> {\n    this.pruneExpired()\n    if (this.locks.has(key)) return null\n    const ttlMs = options.ttlMs ?? 30_000\n    const acquiredAt = new Date().toISOString()\n    const expiresAt = new Date(Date.now() + ttlMs).toISOString()\n    const record: MeshLockRecord = { key, ownerId, acquiredAt, expiresAt, ...(options.metadata ? { metadata: options.metadata } : {}) }\n    this.locks.set(key, record)\n    return new LockLease(this, key, ownerId, acquiredAt, expiresAt)\n  }\n\n  public async renew(key: string, ownerId: string, ttlMs: number): Promise<boolean> {\n    this.pruneExpired()\n    const current = this.locks.get(key)\n    if (!current || current.ownerId !== ownerId) return false\n    this.locks.set(key, { ...current, expiresAt: new Date(Date.now() + ttlMs).toISOString() })\n    return true\n  }\n\n  public async release(key: string, ownerId: string): Promise<boolean> {\n    this.pruneExpired()\n    const current = this.locks.get(key)\n    if (!current || current.ownerId !== ownerId) return false\n    this.locks.delete(key)\n    return true\n  }\n\n  public async list(): Promise<readonly MeshLockRecord[]> {\n    this.pruneExpired()\n    return Array.from(this.locks.values()).sort((a, b) => a.key.localeCompare(b.key))\n  }\n\n  private pruneExpired(): void {\n    const now = Date.now()\n    for (const [key, record] of this.locks) {\n      if (new Date(record.expiresAt).getTime() <= now) this.locks.delete(key)\n    }\n  }\n}\n","import { randomUUID } from 'node:crypto'\nimport { sleep } from '../utils/time.js'\nimport { MeshLockTimeoutError } from './LockErrors.js'\nimport type { MeshLockAcquireOptions, MeshLockBackend, MeshLockLease, MeshLockRecord, MeshLockRunOptions } from './types.js'\n\nexport class LockManager {\n  private readonly ownerId: string\n\n  public constructor(private readonly backend: MeshLockBackend, ownerId?: string) {\n    this.ownerId = ownerId ?? `mesh-${process.pid}-${randomUUID()}`\n  }\n\n  public async tryAcquire(key: string, options: MeshLockAcquireOptions = {}): Promise<MeshLockLease | null> {\n    return this.backend.acquire(key, this.ownerId, options)\n  }\n\n  public async acquire(key: string, options: MeshLockAcquireOptions = {}): Promise<MeshLockLease> {\n    const waitMs = options.waitMs ?? 0\n    const retryMs = options.retryMs ?? 250\n    const deadline = Date.now() + waitMs\n    while (true) {\n      const lease = await this.tryAcquire(key, options)\n      if (lease) return lease\n      if (Date.now() >= deadline) throw new MeshLockTimeoutError(key)\n      await sleep(Math.min(retryMs, Math.max(1, deadline - Date.now())))\n    }\n  }\n\n  public async runExclusive<T>(key: string, fn: (lease: MeshLockLease) => Promise<T> | T, options: MeshLockRunOptions = {}): Promise<T> {\n    const lease = await this.acquire(key, options)\n    const ttlMs = options.ttlMs ?? 30_000\n    let stopped = false\n    let timer: NodeJS.Timeout | null = null\n    if (options.autoRenew ?? true) {\n      const every = options.renewEveryMs ?? Math.max(1_000, Math.floor(ttlMs / 2))\n      timer = setInterval(() => { if (!stopped) void lease.renew(ttlMs) }, every)\n      timer.unref?.()\n    }\n    try {\n      return await fn(lease)\n    } finally {\n      stopped = true\n      if (timer) clearInterval(timer)\n      await lease.release()\n    }\n  }\n\n  public list(): Promise<readonly MeshLockRecord[]> {\n    return this.backend.list()\n  }\n}\n","export class MeshLockError extends Error {\n  public constructor(message: string) {\n    super(message)\n    this.name = 'MeshLockError'\n  }\n}\n\nexport class MeshLockTimeoutError extends MeshLockError {\n  public constructor(key: string) {\n    super(`Timed out waiting for mesh lock \"${key}\".`)\n    this.name = 'MeshLockTimeoutError'\n  }\n}\n","import { SimpleRedisClient, type SimpleRedisClientOptions } from '../../registry/redis/SimpleRedisClient.js'\nimport { LockLease } from '../LockLease.js'\nimport type { MeshLockAcquireOptions, MeshLockBackend, MeshLockLease, MeshLockRecord } from '../types.js'\n\nexport interface RedisLockBackendOptions extends SimpleRedisClientOptions {\n  readonly app: string\n  readonly keyPrefix?: string\n}\n\ninterface StoredLock {\n  readonly key: string\n  readonly ownerId: string\n  readonly acquiredAt: string\n  readonly expiresAt: string\n  readonly metadata?: Record<string, unknown>\n}\n\nexport class RedisLockBackend implements MeshLockBackend {\n  public readonly kind = 'redis'\n  private readonly client: SimpleRedisClient\n  private readonly prefix: string\n\n  public constructor(options: RedisLockBackendOptions) {\n    this.client = new SimpleRedisClient(options)\n    this.prefix = options.keyPrefix ?? `mesh:${options.app}`\n  }\n\n  public async acquire(key: string, ownerId: string, options: MeshLockAcquireOptions = {}): Promise<MeshLockLease | null> {\n    const ttlMs = options.ttlMs ?? 30_000\n    const acquiredAt = new Date().toISOString()\n    const expiresAt = new Date(Date.now() + ttlMs).toISOString()\n    const stored: StoredLock = { key, ownerId, acquiredAt, expiresAt, ...(options.metadata ? { metadata: options.metadata } : {}) }\n    const response = await this.client.command(['SET', this.lockKey(key), JSON.stringify(stored), 'NX', 'PX', ttlMs])\n    if (response !== 'OK') return null\n    await this.client.command(['SADD', this.indexKey(), key])\n    return new LockLease(this, key, ownerId, acquiredAt, expiresAt)\n  }\n\n  public async renew(key: string, ownerId: string, ttlMs: number): Promise<boolean> {\n    const script = `local v = redis.call('GET', KEYS[1]); if not v then return 0 end; local ok, decoded = pcall(cjson.decode, v); if not ok or decoded.ownerId ~= ARGV[1] then return 0 end; decoded.expiresAt = ARGV[3]; redis.call('SET', KEYS[1], cjson.encode(decoded), 'PX', ARGV[2]); return 1`\n    const result = await this.client.command(['EVAL', script, 1, this.lockKey(key), ownerId, ttlMs, new Date(Date.now() + ttlMs).toISOString()])\n    return result === 1\n  }\n\n  public async release(key: string, ownerId: string): Promise<boolean> {\n    const script = `local v = redis.call('GET', KEYS[1]); if not v then return 0 end; local ok, decoded = pcall(cjson.decode, v); if not ok or decoded.ownerId ~= ARGV[1] then return 0 end; redis.call('DEL', KEYS[1]); redis.call('SREM', KEYS[2], ARGV[2]); return 1`\n    const result = await this.client.command(['EVAL', script, 2, this.lockKey(key), this.indexKey(), ownerId, key])\n    return result === 1\n  }\n\n  public async list(): Promise<readonly MeshLockRecord[]> {\n    const keys = await this.keys()\n    const records: MeshLockRecord[] = []\n    const stale: string[] = []\n    for (const key of keys) {\n      const raw = await this.client.command(['GET', this.lockKey(key)])\n      if (typeof raw !== 'string') {\n        stale.push(key)\n        continue\n      }\n      try {\n        const parsed = JSON.parse(raw) as MeshLockRecord\n        records.push(parsed)\n      } catch {\n        stale.push(key)\n      }\n    }\n    if (stale.length > 0) await this.client.command(['SREM', this.indexKey(), ...stale])\n    return records.sort((a, b) => a.key.localeCompare(b.key))\n  }\n\n  private async keys(): Promise<readonly string[]> {\n    const value = await this.client.command(['SMEMBERS', this.indexKey()])\n    return Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string') : []\n  }\n\n  private lockKey(key: string): string { return `${this.prefix}:lock:${key}` }\n  private indexKey(): string { return `${this.prefix}:locks` }\n}\n","import type { NormalizedMeshConfig } from '../core/types.js'\nimport { MemoryLockBackend } from './MemoryLockBackend.js'\nimport { LockManager } from './LockManager.js'\nimport { RedisLockBackend } from './redis/RedisLockBackend.js'\nimport type { MeshLockBackend } from './types.js'\n\nexport class LockFactory {\n  public createBackend(config: NormalizedMeshConfig): MeshLockBackend {\n    if (config.coordination.locks.backend === 'redis') {\n      return new RedisLockBackend({\n        app: config.app,\n        url: config.coordination.locks.url,\n        keyPrefix: config.coordination.keyPrefix,\n        connectTimeoutMs: config.coordination.connectTimeoutMs\n      })\n    }\n    return new MemoryLockBackend()\n  }\n\n  public createManager(config: NormalizedMeshConfig, ownerId?: string): LockManager {\n    return new LockManager(this.createBackend(config), ownerId)\n  }\n}\n","import type { LockManager } from '../locks/LockManager.js'\nimport type { MeshLockLease } from '../locks/types.js'\nimport type { MeshLeaderHandle, MeshLeaderRecord, MeshLeaderRunOptions } from './types.js'\n\nexport class LeaderElection {\n  public constructor(private readonly locks: LockManager, private readonly leaderId: string) {}\n\n  public async tryElect(group: string, options: MeshLeaderRunOptions = {}): Promise<MeshLeaderHandle | null> {\n    const lease = await this.locks.tryAcquire(this.key(group), {\n      ttlMs: options.ttlMs ?? 30_000,\n      waitMs: 0,\n      metadata: { ...(options.metadata ?? {}), group, leaderId: this.leaderId, kind: 'leader' }\n    })\n    return lease ? this.toHandle(group, lease) : null\n  }\n\n  public async elect(group: string, options: MeshLeaderRunOptions = {}): Promise<MeshLeaderHandle> {\n    const lease = await this.locks.acquire(this.key(group), {\n      ttlMs: options.ttlMs ?? 30_000,\n      waitMs: options.waitMs ?? 0,\n      metadata: { ...(options.metadata ?? {}), group, leaderId: this.leaderId, kind: 'leader' }\n    })\n    return this.toHandle(group, lease)\n  }\n\n  public async runWhenLeader<T>(group: string, fn: (signal: AbortSignal, leader: MeshLeaderHandle) => Promise<T> | T, options: MeshLeaderRunOptions = {}): Promise<T | null> {\n    const handle = await this.tryElect(group, options)\n    if (!handle) return null\n    const controller = new AbortController()\n    const ttlMs = options.ttlMs ?? 30_000\n    const every = options.renewEveryMs ?? Math.max(1_000, Math.floor(ttlMs / 2))\n    const timer = setInterval(() => { void handleRenew(handle, ttlMs, controller) }, every)\n    timer.unref?.()\n    try {\n      return await fn(controller.signal, handle)\n    } finally {\n      controller.abort()\n      clearInterval(timer)\n      await handle.release()\n    }\n  }\n\n  public async list(): Promise<readonly MeshLeaderRecord[]> {\n    const locks = await this.locks.list()\n    return locks\n      .filter(lock => lock.metadata?.kind === 'leader' && typeof lock.metadata.group === 'string')\n      .map(lock => ({\n        group: String(lock.metadata!.group),\n        leaderId: String(lock.metadata!.leaderId ?? lock.ownerId),\n        acquiredAt: lock.acquiredAt,\n        expiresAt: lock.expiresAt,\n        ...(lock.metadata ? { metadata: lock.metadata } : {})\n      }))\n      .sort((a, b) => a.group.localeCompare(b.group))\n  }\n\n  private toHandle(group: string, lease: MeshLockLease): MeshLeaderHandle & { renew(ttlMs?: number): Promise<boolean> } {\n    return {\n      group,\n      leaderId: this.leaderId,\n      acquiredAt: lease.acquiredAt,\n      expiresAt: lease.expiresAt,\n      release: () => lease.release(),\n      renew: (ttlMs?: number) => lease.renew(ttlMs)\n    }\n  }\n\n  private key(group: string): string {\n    return `leader:${group}`\n  }\n}\n\nasync function handleRenew(handle: MeshLeaderHandle & { renew?: (ttlMs?: number) => Promise<boolean> }, ttlMs: number, controller: AbortController): Promise<void> {\n  const renew = handle.renew\n  if (!renew) return\n  const ok = await renew(ttlMs)\n  if (!ok) controller.abort()\n}\n","import type { MeshDashboardRenderOptions, MeshDashboardSnapshot } from './types.js'\n\nexport class DashboardRenderer {\n  public render(snapshot: MeshDashboardSnapshot, options: MeshDashboardRenderOptions = {}): string {\n    const color = (code: string, value: string): string => options.colors === false ? value : `\\u001b[${code}m${value}\\u001b[0m`\n    const lines: string[] = []\n    lines.push(color('1;36', `@panomapp/mesh dashboard — ${snapshot.app}`))\n    lines.push(`generated: ${snapshot.generatedAt}`)\n    lines.push(`router:    ${snapshot.router.enabled ? snapshot.router.url : 'disabled'}${snapshot.router.metricsError ? ` (${snapshot.router.metricsError})` : ''}`)\n    lines.push(`registry:  ${snapshot.registry.type}, ttl=${snapshot.registry.ttlMs}ms, heartbeat=${snapshot.registry.heartbeatIntervalMs}ms`)\n    lines.push(`streaming: ${snapshot.streaming.enabled ? snapshot.streaming.transport : 'disabled'}${snapshot.streaming.enabled ? `, logs=${snapshot.streaming.logs}, events=${snapshot.streaming.events}` : ''}`)\n    if (snapshot.coordination.enabled) lines.push(`coordination: ${snapshot.coordination.backend}, locks=${snapshot.coordination.locks.length}, leaders=${snapshot.coordination.leaders.length}`)\n    if (snapshot.hsm.enabled) lines.push(`hsm:       ${snapshot.hsm.schemaId ?? 'schema'}${snapshot.hsm.schemaVersion ? `@${snapshot.hsm.schemaVersion}` : ''}, routes=${snapshot.hsm.routeCount}`)\n\n    if (snapshot.router.metrics) {\n      const metrics = snapshot.router.metrics\n      lines.push('')\n      lines.push(color('1', 'Router Metrics'))\n      lines.push(this.table([\n        ['uptime', this.duration(metrics.router.uptimeMs)],\n        ['draining', String(metrics.router.draining)],\n        ['requests', String(metrics.requests.total)],\n        ['proxied', String(metrics.requests.proxied)],\n        ['errors', String(metrics.requests.errors)],\n        ['no target', String(metrics.requests.noTarget)],\n        ['upgrades', String(metrics.requests.upgrades)],\n        ['active', `${metrics.active.total} total / ${metrics.active.http} http / ${metrics.active.sockets} socket`]\n      ], ['METRIC', 'VALUE']))\n    }\n\n    lines.push('')\n    lines.push(color('1', 'Services'))\n    lines.push(this.table(snapshot.services.map(service => [\n      service.service,\n      service.type,\n      service.strategy,\n      String(service.configuredInstances),\n      String(service.running),\n      String(service.draining),\n      String(service.expired),\n      String(service.failed),\n      service.routes.join(', ') || '-'\n    ]), ['SERVICE', 'TYPE', 'STRATEGY', 'CFG', 'RUN', 'DRAIN', 'EXP', 'FAIL', 'ROUTES']))\n\n    lines.push('')\n    lines.push(color('1', 'Instances'))\n    lines.push(this.table(snapshot.instances.map(instance => [\n      instance.id,\n      instance.service,\n      instance.status,\n      instance.port === null ? '-' : String(instance.port),\n      instance.pid === null ? '-' : String(instance.pid),\n      instance.url ?? '-',\n      instance.lastSeenAt ? this.age(instance.lastSeenAt) : '-'\n    ]), ['ID', 'SERVICE', 'STATUS', 'PORT', 'PID', 'URL', 'LAST SEEN']))\n\n\n    if (!options.compact && snapshot.coordination.enabled) {\n      lines.push('')\n      lines.push(color('1', 'Coordination'))\n      lines.push(this.table(snapshot.coordination.locks.map(lock => [\n        lock.key,\n        lock.ownerId,\n        this.age(lock.acquiredAt),\n        lock.expiresAt,\n        lock.metadata?.kind ? String(lock.metadata.kind) : '-'\n      ]), ['LOCK', 'OWNER', 'AGE', 'EXPIRES', 'KIND']))\n      lines.push('')\n      lines.push(color('1', 'Leaders'))\n      lines.push(this.table(snapshot.coordination.leaders.map(leader => [\n        leader.group,\n        leader.leaderId,\n        this.age(leader.acquiredAt),\n        leader.expiresAt\n      ]), ['GROUP', 'LEADER', 'AGE', 'EXPIRES']))\n      if (snapshot.coordination.errors?.length) lines.push(`coordination errors: ${snapshot.coordination.errors.join('; ')}`)\n    }\n\n    if (!options.compact) {\n      lines.push('')\n      lines.push(color('1', 'Route Plan'))\n      lines.push(this.table(snapshot.routes.map(route => [\n        route.route,\n        route.service,\n        route.source,\n        route.stateId ?? '-'\n      ]), ['ROUTE', 'SERVICE', 'SOURCE', 'STATE']))\n    }\n\n    if (snapshot.logs && snapshot.logs.length > 0) {\n      lines.push('')\n      lines.push(color('1', 'Logs'))\n      for (const log of snapshot.logs) {\n        lines.push(color('2', `--- ${log.instanceId} (${log.service}) ${log.logFile}`))\n        lines.push(log.text.trimEnd() || '(no log output)')\n      }\n    }\n\n    return `${lines.join('\\n')}\\n`\n  }\n\n  private table(rows: readonly (readonly string[])[], headers: readonly string[]): string {\n    if (rows.length === 0) return '(none)'\n    const widths = headers.map((header, index) => Math.max(header.length, ...rows.map(row => (row[index] ?? '').length)))\n    const format = (row: readonly string[]): string => row.map((cell, index) => (cell ?? '').padEnd(widths[index] ?? 0)).join('  ')\n    return [format(headers), format(widths.map(width => '-'.repeat(width))), ...rows.map(format)].join('\\n')\n  }\n\n  private duration(ms: number): string {\n    if (ms < 1_000) return `${ms}ms`\n    if (ms < 60_000) return `${Math.floor(ms / 1_000)}s`\n    if (ms < 3_600_000) return `${Math.floor(ms / 60_000)}m ${Math.floor((ms % 60_000) / 1_000)}s`\n    return `${Math.floor(ms / 3_600_000)}h ${Math.floor((ms % 3_600_000) / 60_000)}m`\n  }\n\n  private age(iso: string): string {\n    const ms = Date.now() - new Date(iso).getTime()\n    if (!Number.isFinite(ms) || ms < 1_000) return 'now'\n    if (ms < 60_000) return `${Math.floor(ms / 1_000)}s ago`\n    if (ms < 3_600_000) return `${Math.floor(ms / 60_000)}m ago`\n    return `${Math.floor(ms / 3_600_000)}h ago`\n  }\n}\n","import process from 'node:process'\nimport type { NormalizedMeshConfig } from '../core/types.js'\nimport { sleep } from '../utils/time.js'\nimport { DashboardRenderer } from './DashboardRenderer.js'\nimport { ObservabilitySnapshotBuilder } from './ObservabilitySnapshotBuilder.js'\nimport type { MeshDashboardCommandOptions } from './types.js'\n\nexport class DashboardCommand {\n  private readonly builder: ObservabilitySnapshotBuilder\n  private readonly renderer = new DashboardRenderer()\n\n  public constructor(private readonly config: NormalizedMeshConfig) {\n    this.builder = new ObservabilitySnapshotBuilder(config)\n  }\n\n  public async renderOnce(options: MeshDashboardCommandOptions = {}): Promise<string> {\n    const snapshot = await this.builder.build({\n      includeLogs: options.includeLogs ?? this.config.observability.includeLogs,\n      logLines: options.logLines ?? this.config.observability.logLines\n    })\n    if (options.json) return `${JSON.stringify(snapshot, null, 2)}\\n`\n    return this.renderer.render(snapshot, options)\n  }\n\n  public async watch(options: MeshDashboardCommandOptions = {}): Promise<void> {\n    const intervalMs = options.intervalMs ?? this.config.observability.refreshIntervalMs\n    let stopped = false\n    const stop = (): void => { stopped = true }\n    process.once('SIGINT', stop)\n    process.once('SIGTERM', stop)\n\n    while (!stopped) {\n      const output = await this.renderOnce(options)\n      if (options.json) {\n        process.stdout.write(output)\n        return\n      }\n      process.stdout.write('\\u001b[2J\\u001b[H')\n      process.stdout.write(output)\n      await sleep(intervalMs)\n    }\n  }\n}\n","import process from 'node:process'\nimport type { NormalizedMeshConfig } from '../core/types.js'\nimport { InstanceIdResolver } from '../ids/InstanceIdResolver.js'\nimport { RegistryFactory } from '../registry/RegistryFactory.js'\nimport { MeshStreamFactory } from './MeshStreamFactory.js'\nimport type { MeshLogStreamPayload, MeshStreamEnvelope, MeshStreamSubscribeOptions } from './types.js'\n\nexport interface MeshStreamCommandOptions extends MeshStreamSubscribeOptions {\n  readonly json?: boolean\n  readonly raw?: boolean\n}\n\nexport class StreamCommand {\n  public constructor(private readonly config: NormalizedMeshConfig) {}\n\n  public async run(options: MeshStreamCommandOptions = {}): Promise<void> {\n    const subscriber = new MeshStreamFactory().createSubscriber(this.config)\n    if (!subscriber) throw new Error('Mesh streaming is disabled. Enable streaming in mesh.config.ts.')\n    const filters = await this.resolveFilters(options)\n    const stop = await subscriber.subscribe(options.types ?? [], event => {\n      if (!this.matches(event, filters)) return\n      process.stdout.write(this.format(event, options))\n    })\n    const close = (): void => { void Promise.resolve(stop()).finally(() => process.exit(0)) }\n    process.once('SIGINT', close)\n    process.once('SIGTERM', close)\n    await new Promise<void>(() => undefined)\n  }\n\n  private async resolveFilters(options: MeshStreamCommandOptions): Promise<MeshStreamSubscribeOptions> {\n    if (!options.instances || options.instances.length === 0) return options\n    const registry = new RegistryFactory().create(this.config)\n    const instances = await registry.list({ includeExpired: true })\n    const resolver = new InstanceIdResolver()\n    return {\n      ...options,\n      instances: options.instances.map(prefix => resolver.resolve(instances, prefix).id)\n    }\n  }\n\n  private matches(event: MeshStreamEnvelope, options: MeshStreamSubscribeOptions): boolean {\n    if (options.kinds && options.kinds.length > 0 && !options.kinds.includes(event.kind)) return false\n    if (options.services && options.services.length > 0 && (!event.service || !options.services.includes(event.service))) return false\n    if (options.instances && options.instances.length > 0 && (!event.instanceId || !options.instances.includes(event.instanceId))) return false\n    return true\n  }\n\n  private format(event: MeshStreamEnvelope, options: MeshStreamCommandOptions): string {\n    if (options.json) return `${JSON.stringify(event)}\\n`\n    if (options.raw && event.kind === 'log') return (event.payload as MeshLogStreamPayload).chunk\n    if (event.kind === 'log') {\n      const payload = event.payload as MeshLogStreamPayload\n      const id = event.instanceId ?? 'unknown'\n      return `[${id}:${payload.stream}] ${payload.chunk}`\n    }\n    return `[${event.kind}:${event.type}] ${event.service ?? '-'} ${event.instanceId ?? '-'} ${JSON.stringify(event.payload)}\\n`\n  }\n}\n","import { sleep } from '../utils/time.js'\nimport type { LeaderElection } from '../leader/LeaderElection.js'\nimport type { LockManager } from '../locks/LockManager.js'\nimport type { MeshCleanupTaskOptions, MeshCleanupTaskSnapshot, MeshCleanupTaskStatus } from './types.js'\n\ninterface RegisteredTask {\n  readonly name: string\n  readonly options: MeshCleanupTaskOptions\n  status: MeshCleanupTaskStatus\n  runs: number\n  failures: number\n  lastRunAt?: string\n  nextRunAt?: string\n  lastDurationMs?: number\n  lastError?: string\n  controller?: AbortController\n}\n\nexport class CleanupScheduler {\n  private readonly tasks = new Map<string, RegisteredTask>()\n  private stopped = false\n\n  public constructor(private readonly deps: { readonly locks?: LockManager; readonly leader?: LeaderElection } = {}) {}\n\n  public task(name: string, options: MeshCleanupTaskOptions): this {\n    if (!name.trim()) throw new Error('Cleanup task name is required.')\n    if (!Number.isFinite(options.intervalMs) || options.intervalMs < 1) throw new Error(`Cleanup task \"${name}\" intervalMs must be positive.`)\n    this.tasks.set(name, { name, options, status: 'idle', runs: 0, failures: 0 })\n    return this\n  }\n\n  public start(): void {\n    for (const task of this.tasks.values()) this.schedule(task, task.options.initialDelayMs ?? 0)\n  }\n\n  public async stop(): Promise<void> {\n    this.stopped = true\n    for (const task of this.tasks.values()) {\n      task.status = 'stopped'\n      task.controller?.abort()\n    }\n  }\n\n  public snapshots(): readonly MeshCleanupTaskSnapshot[] {\n    return Array.from(this.tasks.values()).map(task => ({\n      name: task.name,\n      status: task.status,\n      intervalMs: task.options.intervalMs,\n      ...(task.lastRunAt ? { lastRunAt: task.lastRunAt } : {}),\n      ...(task.nextRunAt ? { nextRunAt: task.nextRunAt } : {}),\n      ...(task.lastDurationMs !== undefined ? { lastDurationMs: task.lastDurationMs } : {}),\n      ...(task.lastError ? { lastError: task.lastError } : {}),\n      runs: task.runs,\n      failures: task.failures\n    })).sort((a, b) => a.name.localeCompare(b.name))\n  }\n\n  private schedule(task: RegisteredTask, delayMs: number): void {\n    if (this.stopped) return\n    const jitter = task.options.jitterMs ? Math.floor(Math.random() * task.options.jitterMs) : 0\n    const wait = Math.max(0, delayMs + jitter)\n    task.nextRunAt = new Date(Date.now() + wait).toISOString()\n    const timer = setTimeout(() => { void this.runTask(task) }, wait)\n    timer.unref?.()\n  }\n\n  private async runTask(task: RegisteredTask): Promise<void> {\n    if (this.stopped) return\n    const started = Date.now()\n    const controller = new AbortController()\n    task.controller = controller\n    task.status = 'running'\n    task.lastRunAt = new Date(started).toISOString()\n    let timeout: NodeJS.Timeout | null = null\n    if (task.options.maxRuntimeMs) {\n      timeout = setTimeout(() => controller.abort(), task.options.maxRuntimeMs)\n      timeout.unref?.()\n    }\n\n    try {\n      await this.runProtected(task, controller)\n      task.status = 'succeeded'\n      task.runs += 1\n      delete task.lastError\n    } catch (error) {\n      task.status = 'failed'\n      task.failures += 1\n      task.lastError = error instanceof Error ? error.message : String(error)\n    } finally {\n      if (timeout) clearTimeout(timeout)\n      delete task.controller\n      task.lastDurationMs = Date.now() - started\n      if (!this.stopped) this.schedule(task, task.options.intervalMs)\n    }\n  }\n\n  private async runProtected(task: RegisteredTask, controller: AbortController): Promise<void> {\n    const leaderGroup = typeof task.options.leader === 'string' ? task.options.leader : task.options.leader ? `cleanup:${task.name}` : undefined\n    const lockKey = task.options.lockKey ?? (task.options.leader ? undefined : `cleanup:${task.name}`)\n    const execute = async (): Promise<void> => {\n      await task.options.run({ task: task.name, signal: controller.signal, startedAt: new Date() })\n    }\n    if (leaderGroup) {\n      if (!this.deps.leader) throw new Error(`Cleanup task \"${task.name}\" requires a leader election dependency.`)\n      const result = await this.deps.leader.runWhenLeader(leaderGroup, async signal => {\n        signal.addEventListener('abort', () => controller.abort(), { once: true })\n        await execute()\n      }, { ttlMs: Math.max(task.options.intervalMs * 2, 30_000), metadata: { task: task.name } })\n      if (result === null) task.status = 'skipped'\n      return\n    }\n    if (lockKey) {\n      if (!this.deps.locks) throw new Error(`Cleanup task \"${task.name}\" requires a lock dependency.`)\n      await this.deps.locks.runExclusive(lockKey, async () => execute(), { ttlMs: Math.max(task.options.intervalMs * 2, 30_000), waitMs: 0, metadata: { task: task.name, kind: 'cleanup' } })\n      return\n    }\n    await execute()\n  }\n}\n\nexport async function sleepForCleanup(ms: number, signal?: AbortSignal): Promise<void> {\n  if (!signal) return sleep(ms)\n  await new Promise<void>((resolve, reject) => {\n    const timer = setTimeout(resolve, ms)\n    const abort = (): void => {\n      clearTimeout(timer)\n      reject(new Error('Cleanup sleep aborted.'))\n    }\n    signal.addEventListener('abort', abort, { once: true })\n  })\n}\n"],"mappings":"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","names":["import_node_fs","import_node_path","import_jiti","fs","path","import_node_path","path","tls","import_node_fs","import_node_path","path","fs","path","fs","import_node_fs","import_node_path","path","fs","import_node_child_process","import_node_child_process","crypto","net","import_node_net","net","import_node_fs","import_node_path","path","fs","import_node_crypto","crypto","import_node_net","tls","net","import_node_crypto","import_node_net","import_node_tls","tls","net","process","import_node_process","import_node_child_process","import_node_child_process","process","import_node_http","import_node_net","import_node_fs","import_node_crypto","http","http","instance","path","import_node_crypto","crypto","net","path","http","tls","fs","https","os","import_node_events","import_node_crypto","import_node_fs","import_node_path","import_node_fs","import_node_path","path","fs","path","fs","import_node_path","path","fs","import_node_http","import_node_crypto","http","import_node_process","process","import_node_process","process"]}