{"version":3,"sources":["../../src/runtime/index.ts","../../src/core/errors.ts","../../src/ids/InstanceIdResolver.ts","../../src/logs/LogStore.ts","../../src/utils/fs.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"],"sourcesContent":["export { MeshRuntime } from './MeshRuntime.js'\nexport { MeshProcessSupervisor } from './MeshProcessSupervisor.js'\nexport { PodmanSupervisor } from '../podman/PodmanSupervisor.js'\nexport type { MeshRunOptions, MeshPsOptions, MeshWatchOptions } from '../core/types.js'\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 { 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 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 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"],"mappings":"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","names":["import_node_fs","import_node_path","fs","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"]}