{"version":3,"sources":["../cli/run.ts","../telemetry/helpers/formatting/terminal.ts","../cli/utils/theme.ts","../cli/commands/build/index.ts","../cli/utils/header.ts","../cli/utils/version.ts","../compiler/index.ts","../compiler/helpers/dependencies-map.ts","../compiler/options.ts","../cli/commands/build/action.ts","../cli/commands/dev/index.ts","../cli/commands/dev/action.ts","../cli/commands/dev/ui/index.tsx","../cli/commands/dev/components/conditional-mouse-provider.tsx","../cli/commands/dev/components/divider.tsx","../cli/commands/dev/components/fullscreen-box.tsx","../cli/commands/dev/hooks/use-screen-size.ts","../cli/commands/dev/components/link.tsx","../cli/commands/dev/lib/inkui-theme.ts","../cli/commands/dev/lib/tabs.ts","../cli/commands/dev/tasks/exit.ts","../cli/commands/dev/tasks/init.ts","../server/index.ts","../transport/providers/livekit/auth.ts","../transport/auth.ts","../server/agent-process/client.ts","../server/api/index.ts","../server/api/definition.ts","../server/api/handlers.ts","../server/api/types.ts","../server/options.ts","../cli/commands/dev/lib/check-livekit-install.ts","../cli/commands/dev/lib/clean-std-data.ts","../cli/commands/dev/ui/content.tsx","../cli/commands/dev/components/scroll-text-box.tsx","../cli/commands/dev/lib/filter-tab-logs.ts","../cli/commands/dev/ui/footer.tsx","../cli/commands/dev/ui/loader.tsx","../cli/commands/dev/ui/sidebar.tsx","../cli/commands/init/index.ts","../cli/commands/init/action.ts","../cli/commands/start/index.ts","../cli/commands/start/action.ts","../cli/utils/help-formatter.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { TelemetryClient } from \"@/telemetry/clients/base\";\nimport { createTelemetryClient } from \"@/telemetry/clients/node\";\nimport { formatLogForTerminal } from \"@/telemetry/helpers/formatting/terminal\";\nimport { pipeConsoleToTelemetryClient } from \"@/telemetry/helpers/patch-console\";\nimport type { TelemetryLog, TelemetryLogLevel } from \"@/telemetry/types\";\nimport { createBuildCommand } from \"./commands/build\";\nimport { createDevCommand } from \"./commands/dev\";\nimport { createInitCommand } from \"./commands/init\";\nimport { createStartCommand } from \"./commands/start\";\nimport { applyHelpFormatting } from \"./utils/help-formatter\";\nimport { formatVersion, getVersion } from \"./utils/version\";\n\nasync function main() {\n  // Capture initial telemetry logs, and expose a callback to listen for new logs\n  let logLevel = process.argv.includes(\"--debug\") ? \"debug\" : undefined;\n  logLevel = logLevel ?? (process.env.LOG_LEVEL as TelemetryLogLevel) ?? \"info\";\n  const logs: TelemetryLog[] = [];\n  const logsListeners: ((log: TelemetryLog) => void)[] = [];\n  const onTelemetryLog = (callback: (log: TelemetryLog) => void) => {\n    logsListeners.push(callback);\n    return () => {\n      logsListeners.splice(logsListeners.indexOf(callback), 1);\n    };\n  };\n  TelemetryClient.registerGlobalConsumer({\n    async start(queue) {\n      for await (const item of queue) {\n        if (item.type !== \"log\") continue;\n        try {\n          logs.push(item);\n          for (const listener of logsListeners) listener(item);\n        } catch {\n          console.error(\"Failed to forward telemetry log to listeners.\");\n        }\n      }\n    },\n  });\n\n  // Stream formatted telemetry logs to the terminal (except for dev command without --no-tui flag)\n  const originalConsoleLog = console.log;\n  const isDevCommand = process.argv.includes(\"dev\") && !process.argv.includes(\"--no-tui\");\n  if (!isDevCommand) {\n    TelemetryClient.registerGlobalConsumer({\n      start: async (queue) => {\n        for await (const item of queue) {\n          if (item.type !== \"log\") continue;\n          originalConsoleLog(formatLogForTerminal(item));\n        }\n      },\n    });\n  }\n\n  // Create the CLI telemety client\n  const cliTelemetry = createTelemetryClient(\"cli\", {\n    command: process.argv.at(2) ?? \"unknown\",\n    args: process.argv.slice(3) ?? [],\n  });\n\n  // Forward console.* methods to the CLI telemetry client\n  pipeConsoleToTelemetryClient(cliTelemetry);\n\n  // Set up cleanup function to run before process exits\n  let cleanupDone = false;\n  const cleanup = async () => {\n    if (cleanupDone) return;\n    cleanupDone = true;\n    await TelemetryClient.flushAllConsumers();\n    originalConsoleLog(\"\"); // Newline for better readability\n  };\n  process.on(\"SIGINT\", () => setImmediate(cleanup));\n  process.on(\"SIGTERM\", () => setImmediate(cleanup));\n  process.on(\"beforeExit\", cleanup);\n  process.on(\"exit\", cleanup);\n\n  // Initialize program\n  const program = new Command();\n  const version = await getVersion();\n\n  // Configure the main program\n  program\n    .name(\"life\")\n    .version(formatVersion(version).output, \"-v, --version\", \"Display version number.\")\n    .helpOption(\"-h, --help\", \"Display help for command.\");\n\n  // Register commands\n  const commands = [\n    createDevCommand(cliTelemetry, logs, onTelemetryLog),\n    createBuildCommand(cliTelemetry),\n    createStartCommand(cliTelemetry),\n    createInitCommand(cliTelemetry),\n  ];\n\n  // Apply formatting to commands\n  await Promise.all([\n    applyHelpFormatting(program, true),\n    ...commands.map((c) => applyHelpFormatting(c, false)),\n  ]);\n\n  // Add commands to program\n  for (const command of commands) program.addCommand(command);\n\n  // Parse command line arguments\n  program.parse();\n\n  // Show help if no command provided\n  if (!process.argv.slice(2).length) program.outputHelp();\n}\n\nmain();\n","import path from \"node:path\";\nimport chalk from \"chalk\";\nimport esbuild, { type BuildFailure, type PartialMessage } from \"esbuild\";\nimport z from \"zod\";\nimport { themeChalk } from \"@/cli/utils/theme\";\nimport { isLifeError } from \"@/shared/error\";\nimport { telemetryBrowserScopesDefinition } from \"@/telemetry/clients/browser\";\nimport { telemetryNodeScopesDefinition } from \"@/telemetry/clients/node\";\nimport type { TelemetryLog } from \"@/telemetry/types\";\n\nconst isEsbuildError = (error: Error | unknown): error is BuildFailure => {\n  if (error instanceof Error && \"errors\" in error) {\n    const errorsSchema = z.array(\n      z.object({\n        id: z.string().optional(),\n        pluginName: z.string().optional(),\n        text: z.string().optional(),\n      }),\n    );\n    const { success } = errorsSchema.safeParse(error.errors);\n    return success;\n  }\n  return false;\n};\n\nfunction formatErrorForTerminal(error: Error | unknown): string {\n  let code = \"\";\n  let message = \"\";\n  let stack = \"\";\n  let after = \"\";\n  let processed = false;\n\n  // Format LifeError\n  if (isLifeError(error)) {\n    code = `LifeError (${chalk.bold(error.code)})`;\n    message = error.message;\n    stack = error.stack ? error.stack.split(\"\\n\").slice(3).join(\"\\n\") : \"\";\n\n    if (error.cause) {\n      // Append the error after the LifeError\n      after += formatErrorForTerminal(error.cause);\n\n      // If the cause has a stack and the error is \"Unknown\", hide the error stack (redundant)\n      const typedCause = error.cause as { stack?: string };\n      if (error.code === \"Unknown\" && typedCause?.stack) stack = \"\";\n    }\n\n    processed = true;\n  }\n\n  // Format ZodError\n  else if (error instanceof z.ZodError) {\n    code = \"ZodError\";\n    message = z.prettifyError(error);\n    stack = error.stack ?? \"\";\n    if (stack.includes(\" at \")) {\n      stack = `   ${\n        stack\n          .split(\" at \")\n          .slice(1)\n          .map((line) => ` at ${line}`)\n          .join(\"\") ?? \"\"\n      }`;\n    }\n    processed = true;\n  }\n\n  // Format ESBuild errors\n  else if (isEsbuildError(error)) {\n    const formatEsbuildMessage = (msg: PartialMessage) =>\n      esbuild\n        .formatMessagesSync([msg], { kind: \"error\", color: true })?.[0]\n        ?.replace(\"\\x1B[31m✘ \\x1B[41;31m[\\x1B[41;97mERROR\\x1B[41;31m]\\x1B[0m \\x1B[1m\", \"\")\n        ?.trim() ?? \"\";\n    try {\n      const esbuildError = error as BuildFailure;\n      const formattedMessages = esbuildError.errors.map(formatEsbuildMessage);\n      message = `BuildError: ${formattedMessages.join(\"\\n\\n\")}`;\n      processed = true;\n    } catch (_) {\n      /* Ignore, that wasn't an ESBuild error */\n    }\n  }\n\n  // Format other errors\n  if (!processed && error instanceof Error) {\n    // Try to infer the code\n    if (\"name\" in error && typeof error.name === \"string\") code = error.name;\n    else if (\"code\" in error && typeof error.code === \"string\") code = error.code;\n\n    // Try to infer the message\n    if (\"message\" in error && typeof error.message === \"string\") message = error.message;\n    else if (\"reason\" in error && typeof error.reason === \"string\") message = error.reason;\n\n    // Try to infer the stack\n    if (\"stack\" in error && typeof error.stack === \"string\") stack = error.stack;\n\n    // Remove first line of stack if it includes the error message\n    stack =\n      stack\n        ?.split(\"\\n\")\n        ?.filter((line) => !line.includes(error.message.trim()))\n        ?.join(\"\\n\") ?? \"\";\n\n    // If no code, message, or stack is present, use the default\n    if (!code) code = \"Unknown Error\";\n    if (!message) message = \"An unknown error occurred.\";\n    if (!stack) stack = \"\";\n  }\n\n  // If a cause is present, format it as well (unless already processed)\n  // Note: LifeError already handles its cause above, so we skip it here\n  if (error instanceof Error && error.cause && !isLifeError(error)) {\n    after += `${formatErrorForTerminal(error.cause)}`;\n  }\n\n  // Replace all the absolute paths in stack with relative paths (if shorter)\n  stack = stack.replace(/\\/[^\\s\\n\\r:;,()[\\]{}'\"<>]+/g, (match) => {\n    try {\n      if (path.isAbsolute(match)) {\n        const relativePath = path.relative(process.cwd(), match);\n        // Use relative path if it's shorter than the absolute path\n        if (relativePath.length < match.length) return relativePath;\n      }\n      return match;\n    } catch {\n      return match;\n    }\n  });\n\n  return `${code}${code ? \": \" : \"\"}${message}${message ? \" \" : \"\"}${stack ? `\\n${stack}` : \"\"}${after ? `\\n\\n${after}` : \"\"}`;\n}\n\nexport function formatLogForTerminal(log: TelemetryLog) {\n  // Get prefix and color based on level\n  let style: { prefix: string; color?: (m: string) => string };\n  if (log.level === \"fatal\")\n    style = { prefix: themeChalk.level.fatal.bold(\"✘\"), color: themeChalk.level.fatal };\n  else if (log.level === \"error\")\n    style = { prefix: themeChalk.level.error.bold(\"✘\"), color: themeChalk.level.error };\n  else if (log.level === \"warn\")\n    style = { prefix: themeChalk.level.warn.bold(\"▲\"), color: themeChalk.level.warn };\n  else if (log.level === \"info\")\n    style = { prefix: themeChalk.level.info.bold(\"⦿\"), color: themeChalk.level.info };\n  else style = { prefix: themeChalk.level.debug.bold(\"∴\"), color: themeChalk.level.debug };\n\n  // Format the log scope\n  const scopeDefinition =\n    telemetryNodeScopesDefinition?.[log.scope as keyof typeof telemetryNodeScopesDefinition] ??\n    telemetryBrowserScopesDefinition?.[log.scope as keyof typeof telemetryBrowserScopesDefinition];\n  const scopeDisplayName =\n    scopeDefinition?.displayName instanceof Function\n      ? // biome-ignore lint/suspicious/noExplicitAny: fine here\n        scopeDefinition.displayName(log.attributes as any)\n      : scopeDefinition?.displayName;\n  const scope = `${chalk.gray(`[${chalk.italic(scopeDisplayName ?? \"Unknown\")}]`)} `;\n\n  // Format the log message\n  const message = log.message || \"\";\n\n  // Build the log header\n  const header = `${style.prefix} ${scope}${style.color ? style.color(message) : message}`;\n\n  // Format the log error content (if any)\n  const error = formatErrorForTerminal(log.error);\n  const errorColor = [\"error\", \"fatal\"].includes(log.level)\n    ? themeChalk.level.error\n    : themeChalk.level.warn;\n\n  // Build the output (if an error is present, add it with padding)\n  let output = header;\n  if (error)\n    output += `\\n${errorColor.dim(\"-----\")}\\n${errorColor(error)}\\n${errorColor.dim(\"-----\")}`;\n\n  // Otherwise, just return the header\n  return output;\n}\n","import chalk from \"chalk\";\n\n// To be used in Ink.js components' color properties\nexport const theme = {\n  orange: \"#E77823\",\n  gray: {\n    light: \"#bbbbbb\",\n    medium: \"#888888\",\n    dark: \"#444444\",\n  },\n  level: {\n    fatal: \"red\",\n    error: \"red\",\n    warn: \"#FFA500\",\n    info: \"cyan\",\n    debug: \"gray\",\n  },\n} as const;\n\n// To be used in plain-text manipulation\nexport const themeChalk = {\n  orange: chalk.hex(theme.orange),\n  gray: {\n    light: chalk.hex(theme.gray.light),\n    medium: chalk.hex(theme.gray.medium),\n    dark: chalk.hex(theme.gray.dark),\n  },\n  level: {\n    fatal: chalk.bgRed,\n    error: chalk.red,\n    info: chalk.cyan,\n    debug: chalk.gray,\n    warn: chalk.hex(theme.level.warn),\n  },\n} as const;\n","import { resolve } from \"node:path\";\nimport { Command } from \"commander\";\nimport { TelemetryClient } from \"@/telemetry/clients/base\";\nimport { BuildOptions, executeBuild } from \"./action\";\n\nexport function createBuildCommand(telemetry: TelemetryClient) {\n  const command = new Command(\"build\")\n    .description(\"Build agents for production deployment.\")\n    .helpOption(\"--help\", \"Display help for command.\")\n    .option(\"-o, --output <dir>\", \"Output directory.\", \".life\")\n    .option(\"-r, --root <dir>\", \"Project root directory.\", resolve(process.cwd()))\n    .option(\"-w, --watch\", \"Watch for changes and rebuild automatically.\")\n    .option(\n      \"--no-optimize\",\n      \"Disable build optimization, e.g., for faster builds during development.\",\n    )\n    .option(\"--debug\", \"Enable debug mode logs, same as LOG_LEVEL=debug.\")\n    .action(async (options: BuildOptions) => await executeBuild(telemetry, options));\n\n  return command;\n}\n","import chalk from \"chalk\";\nimport { themeChalk } from \"./theme\";\nimport { formatVersion, getVersion } from \"./version\";\n\nexport async function generateHeader(name: string) {\n  const nameLength = `Life.js ${name}`.length;\n  const formattedVersion = formatVersion(await getVersion());\n  const gap = 13;\n  const padding = 1;\n  const headerSeparator = chalk.gray(\n    \"─\".repeat(nameLength + gap + formattedVersion.raw.length + padding * 2),\n  );\n  return `\n${headerSeparator}\n${\" \".repeat(padding)}${themeChalk.gray.medium(\"Life.js\")} ${themeChalk.orange(chalk.italic(name))}${\" \".repeat(gap)}${formattedVersion.output}${\" \".repeat(padding)}\n${headerSeparator}\n`;\n}\n","import chalk from \"chalk\";\nimport { getLatestVersion } from \"fast-npm-meta\";\nimport packageJson from \"../../package.json\" with { type: \"json\" };\nimport { themeChalk } from \"./theme\";\n\nexport interface VersionInfo {\n  current: string;\n  latest?: string;\n  hasUpdate: boolean;\n}\n\n/**\n * Check if a new version is available from npm\n */\nexport async function getVersion(): Promise<VersionInfo> {\n  const currentVersion = packageJson.version;\n  try {\n    const latestVersionData = await getLatestVersion(\"life\");\n    const latestVersion = latestVersionData.version;\n    return {\n      current: currentVersion,\n      latest: latestVersion ?? undefined,\n      hasUpdate: currentVersion !== latestVersion,\n    };\n  } catch {\n    return {\n      current: currentVersion,\n      hasUpdate: false,\n    };\n  }\n}\n\nexport function formatVersion(versionInfo: VersionInfo) {\n  const hasUpdate = versionInfo.hasUpdate && versionInfo.latest;\n  const raw = hasUpdate ? `${versionInfo.current} (↑ ${versionInfo.latest})` : versionInfo.current;\n  const output = hasUpdate\n    ? `${themeChalk.gray.medium(versionInfo.current)} ${chalk.green(chalk.bold(`(↑ ${versionInfo.latest})`))}`\n    : themeChalk.gray.medium(versionInfo.current);\n  return { raw, output };\n}\n","import { createHash } from \"node:crypto\";\nimport { access, mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path, { dirname, join, relative } from \"node:path\";\nimport { Lang, parseAsync } from \"@ast-grep/napi\";\nimport chalk from \"chalk\";\nimport chokidar, { type FSWatcher } from \"chokidar\";\nimport esbuild from \"esbuild\";\nimport { globbySync } from \"globby\";\nimport ts from \"typescript\";\nimport { deepClone } from \"@/shared/deep-clone\";\nimport { ns } from \"@/shared/nanoseconds\";\nimport * as op from \"@/shared/operation\";\nimport type { TelemetryClient } from \"@/telemetry/clients/base\";\nimport { createTelemetryClient } from \"@/telemetry/clients/node\";\nimport { getDependenciesMap } from \"./helpers/dependencies-map\";\nimport { type CompilerOptions, compilerOptionsSchema } from \"./options\";\nimport type { CompilerPathType } from \"./types\";\n\nconst EXCLUDED_DEFAULTS = [\"**/node_modules/**\", \"**/build/**\", \"**/generated/**\", \"**/dist/**\"];\n\nexport class LifeCompiler {\n  options: CompilerOptions<\"output\">;\n  hashes = new Map<string, string>();\n  watcher: FSWatcher | null = null;\n\n  paths = {\n    configs: new Set<string>(),\n    servers: new Set<string>(),\n    clients: new Set<string>(),\n    dependencies: new Map<string, Set<string>>(), // entryPath -> dependencies\n    serverBuilds: new Map<string, string>(), // entryPath -> buildPath\n    clientBuilds: new Map<string, string>(), // entryPath -> buildPath\n  };\n\n  // Language Service for faster type extraction\n  telemetry: TelemetryClient;\n  #serverBundleContext: esbuild.BuildContext | null = null;\n  #languageService?: ts.LanguageService;\n  #serviceHost?: ts.LanguageServiceHost;\n  readonly #virtualFiles = new Map<string, string>();\n  readonly #pluginNamesCache = new Map<string, { hash: string; names: string[] }>();\n\n  constructor(options: CompilerOptions<\"input\">) {\n    this.options = compilerOptionsSchema.parse(options);\n\n    // Default stopOnError to false if watch mode and stopOnError is not provided\n    if (this.options.watch && options?.stopOnError === undefined) {\n      this.options.stopOnError = false;\n    }\n\n    // Initialize telemetry\n    this.telemetry = createTelemetryClient(\"compiler\", {\n      watch: this.options.watch,\n    });\n\n    // Ensure outputDir is absolute\n    this.options.outputDirectory = this.options.outputDirectory.startsWith(\"/\")\n      ? this.options.outputDirectory\n      : join(this.options.projectDirectory, this.options.outputDirectory);\n  }\n\n  async start() {\n    return await this.telemetry.trace(\"start()\", async (span) => {\n      try {\n        span.log.info({ message: \"Starting compiler.\" });\n        span.log.debug({ message: `Project directory: ${this.options.projectDirectory}` });\n        span.log.debug({ message: `Output directory: ${this.options.outputDirectory}` });\n        this.telemetry.counter(\"compiler_started\").increment();\n\n        await this.telemetry.trace(\"initial-compilation\", async (spanCompilation) => {\n          // 1. Ensure the build directory exists and link the build directory output to life/build\n          await Promise.all([this.ensureBuildDirectory(), this.linkBuildDirectory()]);\n\n          // 2. Find all Life.js agents and config files, and their dependencies\n          const entryPaths = globbySync(\n            [\n              \"**/agent/{server.ts,client.ts}\",\n              \"**/agents/*/{server.ts,client.ts}\",\n              \"**/life.config.ts\",\n            ],\n            {\n              cwd: this.options.projectDirectory,\n              ignore: EXCLUDED_DEFAULTS,\n              dot: false,\n              onlyFiles: true,\n              absolute: true,\n              gitignore: true,\n              unique: true,\n            },\n          );\n          await Promise.all(entryPaths.map(async (p) => this.refreshEntryPathDependencies(p)));\n\n          // 3. Perform an initial compilation on entry paths\n          // Compile configs first, so that agents can use them\n          const configResults = await Promise.all(\n            entryPaths\n              .filter((p) => p.endsWith(\"life.config.ts\"))\n              .map(\n                async (absPath) =>\n                  await this.processFileEvent({\n                    action: \"added\",\n                    absPath,\n                    type: \"config\",\n                    noTimingLogs: true,\n                  }),\n              ),\n          );\n          // Compile agents servers and clients\n          const agentResults = await Promise.all([\n            ...entryPaths\n              .filter((p) => p.endsWith(\"server.ts\"))\n              .map(\n                async (absPath) =>\n                  await this.processFileEvent({\n                    action: \"added\",\n                    absPath,\n                    type: \"server\",\n                    noTimingLogs: true,\n                  }),\n              ),\n            ...entryPaths\n              .filter((p) => p.endsWith(\"client.ts\"))\n              .map(\n                async (absPath) =>\n                  await this.processFileEvent({\n                    action: \"added\",\n                    absPath,\n                    type: \"client\",\n                    noTimingLogs: true,\n                  }),\n              ),\n          ]);\n\n          // 4. If some agents have been compiled, show the results\n          const results = [...configResults, ...agentResults];\n          spanCompilation.end();\n          const duration = spanCompilation.getData().duration;\n          const errorsCount = results.filter((r) => Boolean(r?.[0])).length;\n          const hasAgents = entryPaths.filter((p) => p.endsWith(\"server.ts\")).length > 0;\n          if (hasAgents) {\n            span.log.info({\n              message: `Initial compilation in ${chalk.bold(`${ns.toMs(duration)}ms`)}. ${errorsCount > 0 ? chalk.red(`(${chalk.bold(errorsCount)} error${errorsCount > 1 ? \"s\" : \"\"})`) : chalk.dim(\"(no errors)\")}`,\n            });\n          }\n          // Else show a helpful message if no agent server paths are found\n          else\n            span.log.info({\n              message:\n                \"No agent server to compile yet. Create a first `agent/server.ts` file in your project.\",\n            });\n        });\n\n        // 5. (if watch mode) Watch for changes in agents / configs files\n        if (this.options.watch) {\n          this.watchEntryPaths();\n          span.log.info({ message: \"Watching for changes...\" });\n\n          // Listen for SIGINT and SIGTERM to gracefully stop the compiler\n          const handleShutdown = async (signal: string) => {\n            console.log(\"\");\n            this.telemetry.log.info({ message: `Received ${signal}, shutting down gracefully...` });\n            await this.stop();\n          };\n          process.once(\"SIGINT\", () => handleShutdown(\"SIGINT\"));\n          process.once(\"SIGTERM\", () => handleShutdown(\"SIGTERM\"));\n        }\n\n        // 6. Or stop the compiler\n        else await this.stop();\n\n        // 7. Return success\n        return op.success();\n      } catch (error) {\n        return op.failure({ code: \"Unknown\", cause: error });\n      }\n    });\n  }\n\n  #stopStarted = false;\n  async stop() {\n    return await this.telemetry.trace(\"stop()\", async (span) => {\n      if (this.#stopStarted) return;\n      this.#stopStarted = true;\n      span.log.info({ message: \"Stopping compiler.\" });\n\n      // Dispose all ESBuild contexts\n      this.#serverBundleContext?.dispose();\n      this.#serverBundleContext = null;\n\n      // Stop the watcher\n      await this.watcher?.close();\n      this.watcher = null;\n\n      // Ensure telemetry consumers have finished processing\n      await this.telemetry.flushConsumers();\n    });\n  }\n\n  async ensureBuildDirectory() {\n    await Promise.all([\n      mkdir(path.join(this.options.outputDirectory, \"server\", \"raw\"), { recursive: true }),\n      mkdir(path.join(this.options.outputDirectory, \"server\", \"dist\"), { recursive: true }),\n      mkdir(path.join(this.options.outputDirectory, \"server\", \"signal\"), { recursive: true }),\n      mkdir(path.join(this.options.outputDirectory, \"client\"), { recursive: true }),\n    ]);\n  }\n\n  async linkBuildDirectory() {\n    // Paths to generated build files in .life/build/\n    const generatedClientPath = join(this.options.outputDirectory, \"client\", \"index.ts\");\n    const generatedServerPath = join(this.options.outputDirectory, \"server\", \"dist\", \"index.js\");\n\n    //\n    const [errDistDir, distDir] = await this.findDistDirectory();\n    if (errDistDir) return op.failure(errDistDir);\n\n    // Get all files in the dist directory recursively\n    const distFiles = globbySync(\"**/*\", {\n      cwd: distDir,\n      onlyFiles: true,\n      absolute: false,\n    });\n\n    const CODE_FILE_EXTENSIONS = [\".js\", \".mjs\", \".cjs\", \".ts\", \".mts\", \".cts\", \".jsx\", \".tsx\"];\n    const codeFiles = distFiles.filter((file) => {\n      const ext = path.extname(file).toLowerCase();\n      return CODE_FILE_EXTENSIONS.includes(ext);\n    });\n\n    // Process all files concurrently, replacing placeholders\n    await Promise.all(\n      codeFiles.map(async (file) => {\n        const filePath = join(distDir, file);\n        const content = await readFile(filePath, \"utf-8\");\n\n        // Replace placeholders\n        // @dev '()' empty groups are used in regexes to avoid those mathching themselves.\n        const clientPath = relative(dirname(filePath), generatedClientPath);\n        const serverPath = relative(dirname(filePath), generatedServerPath);\n        const updatedContent = content\n          .replaceAll(/\"LIFE()_CLIENT_BUILD_PATH\"/g, `\"${clientPath}\"`)\n          .replaceAll(/String\\(\"LIFE()_CLIENT_BUILD_MODULE\"\\)/g, `import(\"${clientPath}\")`)\n          .replaceAll(/\"LIFE()_CLIENT_BUILD_MODULE\"/g, `import(\"${clientPath}\")`)\n          .replaceAll(/\"LIFE()_SERVER_BUILD_PATH\"/g, `\"${serverPath}\"`)\n          .replaceAll(/\"LIFE()_BUILD_MODE\"/g, '\"production\"')\n          .replaceAll(/'LIFE()_CLIENT_BUILD_PATH'/g, `'${clientPath}'`)\n          .replaceAll(/String\\('LIFE()_CLIENT_BUILD_MODULE'\\)/g, `import(\"${clientPath}\")`)\n          .replaceAll(/'LIFE()_CLIENT_BUILD_MODULE'/g, `import(\"${clientPath}\")`)\n          .replaceAll(/'LIFE()_SERVER_BUILD_PATH'/g, `'${serverPath}'`)\n          .replaceAll(/'LIFE()_BUILD_MODE'/g, \"'production'\");\n\n        // Write back if content changed\n        if (updatedContent !== content) await writeFile(filePath, updatedContent, \"utf-8\");\n      }),\n    );\n  }\n\n  async getPathDisplayName(\n    _path: string,\n    type: \"config\" | \"server\" | \"client\" | \"dependency\" | \"unknown\",\n  ) {\n    const relativePath = path.relative(this.options.projectDirectory, _path);\n    if ([\"config\", \"dependency\", \"unknown\"].includes(type)) return relativePath;\n\n    // Else try to extract the agent name from the file\n    const clientContent = await readFile(_path, \"utf-8\");\n    const ast = await parseAsync(Lang.TypeScript, clientContent);\n    const root = ast.root();\n    const defineCall = root.find({\n      rule: {\n        kind: \"call_expression\",\n        any: [\n          { pattern: `defineAgent${type === \"client\" ? \"Client\" : \"\"}<$$$>($ARG)` },\n          { pattern: `defineAgent${type === \"client\" ? \"Client\" : \"\"}($ARG)` },\n        ],\n      },\n    });\n    if (!defineCall) return relativePath;\n    let name = defineCall?.getMatch(\"ARG\")?.text() ?? null;\n    if (name) name = JSON.parse(name) as string;\n    else return relativePath;\n    return name;\n  }\n\n  /**\n   * Main compiler entry point. Used to process a file.\n   * @param params - The parameters for the file event.\n   * @returns The result of the file event.\n   */\n  async processFileEvent({\n    type,\n    action,\n    absPath,\n    noCache = false,\n    noTimingLogs = false,\n  }: {\n    type: CompilerPathType;\n    action: \"added\" | \"removed\" | \"changed\";\n    absPath: string;\n    noCache?: boolean;\n    noTimingLogs?: boolean;\n  }) {\n    const result = await this.telemetry.trace(\"processFileEvent()\", async (span) => {\n      span.setAttributes({ action, relPath: absPath });\n\n      // Helper to emit timing logs\n      const emitTimingLogs = async (recompiled: boolean) => {\n        if (noTimingLogs) return;\n        if (![\"server\", \"client\"].includes(type)) return;\n        span.end();\n        const name = await this.getPathDisplayName(absPath, type);\n        this.telemetry.log.info({\n          message: `Agent ${type} '${chalk.bold.italic(name)}' ${recompiled ? \"re-compiled\" : \"compiled\"} in ${chalk.bold(`${ns.toMs(span.getData().duration)}ms`)}.`,\n          attributes: { type, name },\n        });\n      };\n\n      // Ensure the path is absolute\n      absPath = this.ensureAbsolute(absPath);\n\n      // Ignore unknown path type\n      if (type === \"unknown\") return op.success();\n\n      // Process the event\n      // - Added\n      if (action === \"added\") {\n        // Compute the path hash\n        this.hashes.set(absPath, await this.hashFile(absPath));\n        // Telemetry\n        span.log.debug({\n          message: `Added '${type}' path: ${absPath}`,\n          attributes: { path: absPath },\n        });\n        // Handle the path type\n        if (type === \"config\") return await this.onAddedConfig(absPath);\n        else if (type === \"server\") {\n          const res = await this.onAddedServer(absPath);\n          if (!res?.[0]) await emitTimingLogs(false);\n          return res;\n        } else if (type === \"client\") {\n          const res = await this.onAddedClient(absPath);\n          if (!res?.[0]) await emitTimingLogs(false);\n          return res;\n        } else if (type === \"dependency\")\n          return op.failure({\n            code: \"Conflict\",\n            message: \"'added' action is not supported for dependency paths. Shouldn't happen.\",\n          });\n      }\n      // - Removed\n      else if (action === \"removed\") {\n        // Clean up the path hash\n        this.hashes.delete(absPath);\n        // Telemetry\n        span.log.debug({\n          message: `Removed '${type}' path: ${absPath}`,\n          attributes: { path: absPath },\n        });\n        // Handle the path type\n        if (type === \"config\") return await this.onRemovedConfig(absPath);\n        else if (type === \"server\") return await this.onRemovedServer(absPath);\n        else if (type === \"client\") return await this.onRemovedClient(absPath);\n        else if (type === \"dependency\") return await this.onRemovedDependency(absPath);\n      }\n      // - Changed\n      else if (action === \"changed\") {\n        // Return early if the hash hasn't changed\n        const newHash = await this.hashFile(absPath);\n        if (newHash === this.hashes.get(absPath) && !noCache) return op.success();\n        this.hashes.set(absPath, newHash);\n        // Telemetry\n        span.log.debug({\n          message: `Changed '${type}' path: ${absPath}`,\n          attributes: { path: absPath },\n        });\n        // If not a dependency, refresh the dependencies\n        if (type !== \"dependency\") await this.refreshEntryPathDependencies(absPath);\n        // Handle the path type\n        if (type === \"config\") return await this.onChangedConfig(absPath);\n        else if (type === \"server\") {\n          const res = await this.onChangedServer(absPath);\n          if (!res?.[0]) await emitTimingLogs(true);\n          return res;\n        } else if (type === \"client\") {\n          const res = await this.onChangedClient(absPath);\n          if (!res?.[0]) await emitTimingLogs(true);\n          return res;\n        } else if (type === \"dependency\") return await this.onChangedDependency(absPath);\n      }\n\n      throw new Error(\"Invalid action. Shouldn't happen.\");\n    });\n\n    // Handle any error\n    const [error] = result;\n    if (error) {\n      // Build the base error message\n      const displayName = await this.getPathDisplayName(absPath, type);\n      let baseMessage = \"Failed to compile \";\n      if ([\"client\", \"server\"].includes(type))\n        baseMessage += `agent ${type} '${chalk.bold.italic(displayName)}'.`;\n      else baseMessage += `'${chalk.bold.italic(displayName)}' ${type} file.`;\n      const relativePath = path.relative(this.options.projectDirectory, absPath);\n\n      // If requested, log and stop the compiler on error\n      if (this.options.stopOnError) {\n        this.telemetry.log.error({ message: `${baseMessage}\\nPath: ${relativePath}`, error });\n        await this.stop();\n      }\n      // Else gracefully warn and ignore the file\n      else\n        this.telemetry.log.warn({\n          message: `${baseMessage} It has been ignored.\\nPath: ${relativePath}`,\n          error,\n        });\n    }\n    return result;\n  }\n\n  // Configs Events Handlers\n\n  async onAddedConfig(configPath: string) {\n    return await this.telemetry.trace(\n      \"onAddedConfig()\",\n      async () => {\n        try {\n          // Add the config to the configs paths array\n          this.paths.configs.add(configPath);\n\n          // Call the change handler\n          return await this.onChangedConfig(configPath);\n        } catch (error) {\n          return op.failure({ code: \"Unknown\", cause: error });\n        }\n      },\n      { attributes: { configPath } },\n    );\n  }\n\n  async onRemovedConfig(configPath: string) {\n    return await this.telemetry.trace(\n      \"onRemovedConfig()\",\n      async () => {\n        try {\n          // Remove the config from the configs paths array\n          this.paths.configs.delete(configPath);\n\n          // Call the change handler\n          return await this.onChangedConfig(configPath);\n        } catch (error) {\n          return op.failure({ code: \"Unknown\", cause: error });\n        }\n      },\n      { attributes: { configPath } },\n    );\n  }\n\n  async onChangedConfig(configPath: string) {\n    return await this.telemetry.trace(\n      \"onChangedConfig()\",\n      async () => {\n        try {\n          // 1. Ensure the config contains a defineConfig() call\n          const configContent = await readFile(configPath, \"utf-8\");\n          const ast = await parseAsync(Lang.TypeScript, configContent);\n          const root = ast.root();\n          const defineConfigCall = root.find({\n            rule: { kind: \"call_expression\", pattern: \"defineConfig($ARG)\" },\n          });\n          if (!defineConfigCall) {\n            return op.failure({\n              code: \"Validation\",\n              message: \"Config file does not contain a defineConfig() call.\",\n              attributes: { path: configPath },\n            });\n          }\n\n          // 2. Ensure the defineConfig() call is exported as default\n          const exportDefaultStatement = root.find({\n            rule: {\n              kind: \"export_statement\",\n              pattern: \"export default\",\n              has: {\n                regex: \"defineConfig(.*)\",\n              },\n            },\n          });\n          if (!exportDefaultStatement) {\n            return op.failure({\n              code: \"Validation\",\n              message: `Config file has defineConfig() but doesn't export it as default. Use \\`export default defineConfig(...)\\` instead.`,\n              attributes: { path: configPath },\n            });\n          }\n\n          // 4. Recompiling affected agents servers\n          const affected = Array.from(this.paths.servers).filter((p) =>\n            this.isEntryPathTouchedByConfig(p, configPath),\n          );\n          await Promise.all(\n            affected.map(async (serverPath) => {\n              const absPath = this.ensureAbsolute(serverPath);\n              return await this.processFileEvent({\n                action: \"changed\",\n                absPath,\n                type: \"server\",\n                noCache: true,\n              });\n            }),\n          );\n\n          return op.success();\n        } catch (error) {\n          return op.failure({ code: \"Unknown\", cause: error });\n        }\n      },\n      { attributes: { configPath } },\n    );\n  }\n\n  // Agent Servers Events Handlers\n\n  async onAddedServer(serverPath: string) {\n    return await this.telemetry.trace(\n      \"onAddedServer()\",\n      async () => {\n        try {\n          // Add the server to the servers paths array\n          this.paths.servers.add(serverPath);\n\n          // Call the change handler\n          return await this.onChangedServer(serverPath);\n        } catch (error) {\n          return op.failure({ code: \"Unknown\", cause: error });\n        }\n      },\n      { attributes: { serverPath } },\n    );\n  }\n\n  async onRemovedServer(serverPath: string) {\n    return await this.telemetry.trace(\n      \"onRemovedServer()\",\n      async () => {\n        try {\n          // Remove the server from the servers paths array\n          this.paths.servers.delete(serverPath);\n\n          // Find and remove the server build path\n          const buildPath = this.paths.serverBuilds.get(serverPath);\n          if (buildPath) {\n            this.paths.serverBuilds.delete(serverPath);\n            await rm(buildPath);\n          }\n\n          // Request a rebuild of the server bundle\n          const res = await this.generateServerBundle();\n          if (!res?.[0]) return res;\n\n          // Signal the server removal\n          const name = this.getPathDisplayName(serverPath, \"server\");\n          const signalPath = path.join(\n            this.options.outputDirectory,\n            \"server\",\n            \"signal\",\n            `${name}.txt`,\n          );\n          if (await this.fileExists(signalPath)) {\n            await writeFile(signalPath, \"removed\", \"utf-8\");\n            // await rm(signalPath);\n          }\n\n          return op.success();\n        } catch (error) {\n          return op.failure({ code: \"Unknown\", cause: error });\n        }\n      },\n      { attributes: { serverPath } },\n    );\n  }\n\n  async onChangedServer(serverPath: string) {\n    return await this.telemetry.trace(\n      \"onChangedServer()\",\n      async (span) => {\n        try {\n          // 1. Ensure the server file contains a defineAgent() call\n          const serverContent = await readFile(serverPath, \"utf-8\");\n          const ast = await parseAsync(Lang.TypeScript, serverContent);\n          const root = ast.root();\n          const defineAgentCall = root.find({\n            rule: { kind: \"call_expression\", pattern: \"defineAgent($ARG)\" },\n          });\n          if (!defineAgentCall) {\n            return op.failure({\n              code: \"Validation\",\n              message: `Agent server '${chalk.bold.italic(path.relative(this.options.projectDirectory, serverPath))}' doesn't contain a ${chalk.bold.italic(\"defineAgent(...)\")} call.`,\n              attributes: { serverPath },\n            });\n          }\n\n          // 2. Ensure the defineAgent() call is exported as default\n          const exportDefaultStatement = root.find({\n            rule: {\n              kind: \"export_statement\",\n              pattern: \"export default\",\n              has: {\n                regex: \"defineAgent(.*)\",\n              },\n            },\n          });\n          if (!exportDefaultStatement) {\n            return op.failure({\n              code: \"Validation\",\n              message: `Agent server '${chalk.bold.italic(path.relative(this.options.projectDirectory, serverPath))}' doesn't export ${chalk.bold.italic(\"defineAgent(...)\")} call as default. Use ${chalk.bold.italic(\"export default defineAgent(...)\")}.`,\n              attributes: { serverPath },\n            });\n          }\n\n          // 3. Retrieve the agent name\n          let name = defineAgentCall?.getMatch(\"ARG\")?.text() ?? null;\n          if (name) name = JSON.parse(name) as string;\n          if (!name) {\n            return op.failure({\n              code: \"Validation\",\n              message: `Agent server '${chalk.bold.italic(name)}' has ${chalk.bold.italic(\"defineAgent()\")} but doesn't provide a name. Use ${chalk.bold.italic(\"defineAgent(<name>)\")}.`,\n              attributes: { serverPath },\n            });\n          }\n\n          // 4. Retrieve all the configs touching this server\n          const configPaths: string[] = [];\n          for (const configPath of this.paths.configs) {\n            if (this.isEntryPathTouchedByConfig(serverPath, configPath))\n              configPaths.push(configPath);\n          }\n          configPaths.sort((a, b) => b.length - a.length);\n\n          // 5. Obtain a unified sha of the server file dependencies tree\n          const treeFiles = new Set<string>([serverPath, ...configPaths]);\n          // - Add all dependencies from the dependenciesMap\n          for (const file of deepClone(treeFiles)) {\n            const deps = this.paths.dependencies.get(file);\n            if (deps) for (const dep of deps) treeFiles.add(dep);\n          }\n          // - Obtain the hashes for all tree files\n          const treeHashes = Array.from(treeFiles).map((file) => this.hashes.get(file));\n          const filteredTreeHashes = treeHashes.filter((hash) => hash !== undefined);\n\n          if (treeHashes.length !== filteredTreeHashes.length) {\n            span.log.warn({\n              message: \"Some tree files have no hash. Shouldn't happen.\",\n              attributes: { treeFiles },\n            });\n          }\n          // - Compute the unified hash from all tree hashes\n          const sha = createHash(\"md5\").update(treeHashes.join(\":\")).digest(\"hex\");\n\n          // 6. Generate agent server build content\n          const buildPath = path.join(this.options.outputDirectory, \"server\", \"raw\", `${name}.ts`);\n          const relServerPath = path.relative(path.dirname(buildPath), serverPath);\n          const relConfigPaths = configPaths.map((configPath) =>\n            path.relative(path.dirname(buildPath), configPath),\n          );\n          const content = `\n        ${relConfigPaths.map((configPath, i) => `import config${i} from \"${configPath}\";`).join(\"\\n\")}\nimport agent from \"${relServerPath}\";\nexport default {\n  definition: agent.def,\n  globalConfigs: [${configPaths.map((_, i) => `config${i}`).join(\", \")}],\n  sha: \"${sha}\"\n} as const;\n        `.trim();\n\n          // 7. Write the agent server build content\n          await writeFile(buildPath, content, \"utf-8\");\n          this.paths.serverBuilds.set(serverPath, buildPath);\n\n          // 8. Re-bundle the server index\n          const [errBundle] = await this.generateServerBundle();\n          if (errBundle) return op.failure(errBundle);\n\n          // 9. If everything went well, reflect the new sha in the signal/ folder\n          const signalPath = path.join(\n            this.options.outputDirectory,\n            \"server\",\n            \"signal\",\n            `${name}.txt`,\n          );\n          await writeFile(signalPath, sha, \"utf-8\");\n\n          return op.success();\n        } catch (error) {\n          return op.failure({ code: \"Unknown\", cause: error });\n        }\n      },\n      { attributes: { serverPath } },\n    );\n  }\n\n  // Agent Clients Events Handlers\n\n  async onAddedClient(clientPath: string) {\n    return await this.telemetry.trace(\n      \"onAddedClient()\",\n      async () => {\n        try {\n          // Add the client to the clients paths array\n          this.paths.clients.add(clientPath);\n\n          // Call the change handler\n          return await this.onChangedClient(clientPath);\n        } catch (error) {\n          return op.failure({ code: \"Unknown\", cause: error });\n        }\n      },\n      { attributes: { clientPath } },\n    );\n  }\n\n  async onRemovedClient(clientPath: string) {\n    return await this.telemetry.trace(\n      \"onRemovedClient()\",\n      async () => {\n        try {\n          // Remove the client from the clients paths array\n          this.paths.clients.delete(clientPath);\n\n          // Find and remove the client build path\n          const buildPath = this.paths.clientBuilds.get(clientPath);\n          if (buildPath) {\n            this.paths.clientBuilds.delete(clientPath);\n            await rm(buildPath);\n          }\n\n          // Request a rebuild of the client bundle\n          return await this.onChangedClient(clientPath);\n        } catch (error) {\n          return op.failure({ code: \"Unknown\", cause: error });\n        }\n      },\n      { attributes: { clientPath } },\n    );\n  }\n\n  async onChangedClient(clientPath: string) {\n    return await this.telemetry.trace(\n      \"onChangedClient()\",\n      async () => {\n        try {\n          // 1. Ensure the client file contains a defineAgentClient() call\n          const clientContent = await readFile(clientPath, \"utf-8\");\n          const ast = await parseAsync(Lang.TypeScript, clientContent);\n          const root = ast.root();\n          const defineAgentClientCall = root.find({\n            rule: {\n              kind: \"call_expression\",\n              any: [\n                { pattern: \"defineAgentClient<$$$>($ARG)\" },\n                { pattern: \"defineAgentClient($ARG)\" },\n              ],\n            },\n          });\n          if (!defineAgentClientCall) {\n            return op.failure({\n              code: \"Validation\",\n              message: `Agent client '${chalk.bold.italic(path.relative(this.options.projectDirectory, clientPath))}' doesn't contain a ${chalk.bold.italic(\"defineAgentClient(...)\")} call. It has been ignored.`,\n              attributes: { clientPath },\n            });\n          }\n\n          // 2. Ensure the defineAgentClient() call is exported as default\n          const exportDefaultStatement = root.find({\n            rule: {\n              kind: \"export_statement\",\n              pattern: \"export default\",\n              has: {\n                regex: \"defineAgentClient(<.*>)?(.*)\",\n              },\n            },\n          });\n          if (!exportDefaultStatement) {\n            return op.failure({\n              code: \"Validation\",\n              message: `Agent client '${chalk.bold.italic(path.relative(this.options.projectDirectory, clientPath))}' doesn't export ${chalk.bold.italic(\"defineAgentClient(...)\")} call as default. It has been ignored. Use ${chalk.bold.italic(\"export default defineAgentClient(...)\")}.`,\n              attributes: { clientPath },\n            });\n          }\n\n          // 3. Retrieve the agent name\n          let name = defineAgentClientCall?.getMatch(\"ARG\")?.text() ?? null;\n          if (name) name = JSON.parse(name) as string;\n          if (!name) {\n            return op.failure({\n              code: \"Validation\",\n              message: `Agent client '${chalk.bold.italic(path.relative(this.options.projectDirectory, clientPath))}' has ${chalk.bold.italic(\"defineAgentClient()\")} but doesn't provide a name. It has been ignored. Use ${chalk.bold.italic(\"defineAgentClient(<name>)\")}.`,\n              attributes: { clientPath },\n            });\n          }\n\n          // 4. Retrieve all the names of the plugins registered on this agent client\n          const pluginNames = await this.extractClientPluginNames(clientPath);\n\n          // 5. Generate agent client build content\n          const plugins = pluginNames\n            .map(\n              (pluginName) => `    \"${pluginName}\": {\n      def: p[\"${pluginName}\"],\n      $types: {\n        atoms: (mock as typeof p[\"${pluginName}\"][\"atoms\"])<PC[\"${pluginName}\"]>(null as any),\n        class: (mock as typeof p[\"${pluginName}\"][\"class\"])<PC[\"${pluginName}\"]>(null as any),\n        clientConfig: {} as PC[\"${pluginName}\"][\"client\"],\n        serverConfig: {} as PC[\"${pluginName}\"][\"server\"],\n      }\n    }`,\n            )\n            .join(\",\\n\");\n\n          const buildPath = path.join(this.options.outputDirectory, \"client\", `${name}.ts`);\n          const relClientPath = path.relative(path.dirname(buildPath), clientPath);\n          const content = `import agentClient from \"${relClientPath.replace(\".ts\", \"\")}\";\ntype SC = typeof agentClient[\"def\"][\"$serverDef\"][\"pluginConfigs\"];\ntype CC = typeof agentClient[\"def\"][\"pluginConfigs\"];\ntype PC = {\n${pluginNames.map((pluginName) => ` \"${pluginName}\": { client: CC[\"${pluginName}\"], server: SC extends { \"${pluginName}\": unknown } ? SC[\"${pluginName}\"] : never }`).join(\",\\n\")}\n}\nconst p = {\n${pluginNames.map((pluginName) => ` \"${pluginName}\": agentClient.def.plugins.find(p => p.name === \"${pluginName}\")!`).join(\",\\n\")}\n} as const;\nconst mock = (() => void 0) as any;\nexport default {\n  definition: agentClient.def,\n  plugins: {\n${plugins}\n  }\n} as const;\n        `.trim();\n\n          // 6. Write the agent client build content\n          await writeFile(buildPath, content, \"utf-8\");\n          this.paths.clientBuilds.set(clientPath, buildPath);\n\n          // 7. Re-bundle the client index\n          const [errBundle] = await this.generateClientBundle();\n          if (errBundle) return op.failure(errBundle);\n\n          return op.success();\n        } catch (error) {\n          return op.failure({ code: \"Unknown\", cause: error });\n        }\n      },\n      { attributes: { clientPath } },\n    );\n  }\n\n  // Dependency Paths Events Handlers\n\n  async onRemovedDependency(dependencyPath: string) {\n    return await this.telemetry.trace(\n      \"onRemovedDependency()\",\n      async () => {\n        try {\n          // Call the change handler\n          return await this.onChangedDependency(dependencyPath);\n        } catch (error) {\n          return op.failure({ code: \"Unknown\", cause: error });\n        }\n      },\n      { attributes: { dependencyPath } },\n    );\n  }\n\n  async onChangedDependency(dependencyPath: string) {\n    return await this.telemetry.trace(\n      \"onChangedDependency()\",\n      async () => {\n        try {\n          // Find the affected entry paths\n          const affected = new Set<string>();\n          for (const [entryPath, dependencies] of this.paths.dependencies) {\n            if (dependencies.has(dependencyPath)) affected.add(entryPath);\n          }\n\n          // Recompile the affected entry paths\n          await Promise.all(\n            Array.from(affected).map((p) => {\n              const absPath = this.ensureAbsolute(p);\n              const type = this.getPathType(absPath);\n              return this.processFileEvent({ action: \"changed\", absPath, type, noCache: true });\n            }),\n          );\n\n          return op.success();\n        } catch (error) {\n          return op.failure({ code: \"Unknown\", cause: error });\n        }\n      },\n      { attributes: { dependencyPath } },\n    );\n  }\n\n  watchEntryPaths() {\n    return this.telemetry.trace(\"watchEntryPaths()\", () => {\n      /**\n       * Detect if running on macOS 26.1.x (darwin 25.1.x) which has a broken FSEvents implementation.\n       * FSEvents on Darwin 25.x corrupts process state and causes fork() to fail with EBADF.\n       */\n      function isMacOS26_1_x(): boolean {\n        if (process.platform !== \"darwin\") return false;\n        const release = os.release();\n        const majorVersion = Number.parseInt(release?.split(\".\")[0] ?? \"0\", 10) ?? 0;\n        const minorVersion = Number.parseInt(release?.split(\".\")[1] ?? \"0\", 10) ?? 0;\n        return majorVersion >= 25 && minorVersion >= 1;\n      }\n      const enableFSEventsWorkaround = isMacOS26_1_x();\n\n      this.watcher = chokidar.watch(\".\", {\n        cwd: this.options.projectDirectory,\n        ignoreInitial: true,\n        ignored: EXCLUDED_DEFAULTS,\n        awaitWriteFinish: {\n          stabilityThreshold: 20,\n          pollInterval: 5,\n        },\n        // Apply workaround on affected macOS versions\n        ...(enableFSEventsWorkaround && {\n          usePolling: true,\n          interval: 100,\n        }),\n      });\n\n      // Helper function to receive watcher events\n      const onWatcherEventFn = (action: \"added\" | \"removed\" | \"changed\") => (p: string) => {\n        const absPath = this.ensureAbsolute(p);\n        const type = this.getPathType(absPath);\n        this.processFileEvent({ action, absPath, type });\n      };\n\n      this.watcher.on(\"add\", onWatcherEventFn(\"added\"));\n      this.watcher.on(\"unlink\", onWatcherEventFn(\"removed\"));\n      this.watcher.on(\"change\", onWatcherEventFn(\"changed\"));\n    });\n  }\n\n  async refreshEntryPathDependencies(entryPath: string) {\n    const absPath = this.ensureAbsolute(entryPath);\n\n    // If this is a client path, exclude the server path\n    const exclude: string[] = [];\n    if (this.getPathType(absPath) === \"client\") {\n      exclude.push(absPath.replace(\"/client.ts\", \"/server.ts\"));\n    }\n\n    const [error, dependencies] = await getDependenciesMap(absPath, exclude, true);\n    if (error) {\n      this.telemetry.log.error({\n        message: \"Obtaining entry path dependencies failed.\",\n        error,\n        attributes: { entryPath },\n      });\n      return;\n    }\n    // Store the dependencies for this entry path\n    this.paths.dependencies.set(entryPath, new Set(dependencies));\n\n    // Hash all the dependencies\n    await Promise.all(dependencies.map(async (d) => this.hashes.set(d, await this.hashFile(d))));\n  }\n\n  getPathType(absPath: string): CompilerPathType {\n    const pathParts = absPath.split(\"/\");\n    const parentDir = pathParts.at(-2);\n    const grandParentDir = pathParts.at(-3);\n\n    if (absPath.endsWith(\"/life.config.ts\")) return \"config\";\n    else if (\n      // Match only agent/* or agents/<name>/*\n      (parentDir === \"agent\" || grandParentDir === \"agents\") &&\n      // Exclude false positives if a plugins folder is present at the root of agents/\n      !absPath.includes(\"/plugins/\")\n    ) {\n      if (absPath.endsWith(\"/server.ts\")) return \"server\";\n      else if (absPath.endsWith(\"/client.ts\")) return \"client\";\n    }\n\n    // Check if this path is a dependency of any entry path\n    for (const dependencies of this.paths.dependencies.values()) {\n      if (dependencies.has(absPath)) return \"dependency\";\n    }\n\n    return \"unknown\";\n  }\n\n  ensureAbsolute(p: string) {\n    return path.resolve(this.options.projectDirectory, p);\n  }\n\n  async hashFile(filePath: string) {\n    const content = await readFile(filePath, \"utf-8\");\n    return createHash(\"md5\").update(content).digest(\"hex\");\n  }\n\n  isEntryPathTouchedByConfig(entryPath: string, configPath: string): boolean {\n    const configDir = path.dirname(configPath);\n    const relativePath = path.relative(configDir, entryPath);\n    return !relativePath.startsWith(\"..\");\n  }\n\n  /**\n   * Finds the absolute path to node_modules/life/dist/\n   * @param startPath - The path to start searching from\n   * @returns The absolute path to node_modules/life/dist/\n   */\n  async findDistDirectory() {\n    // Start from the current code file path\n    const currentFilePath = import.meta.url.replace(\"file://\", \"\");\n\n    // Walk up until we find the package root (where package.json with \"name\": \"life\" exists)\n    let packageRoot: string | null = null;\n    let searchDir = dirname(currentFilePath);\n    for (let i = 0; i < 10; i++) {\n      const packageJsonPath = join(searchDir, \"package.json\");\n      // biome-ignore lint/performance/noAwaitInLoops: need to check sequentially\n      if (await this.fileExists(packageJsonPath)) {\n        const packageJson = JSON.parse(await readFile(packageJsonPath, \"utf-8\"));\n        if (packageJson.name === \"life\") {\n          packageRoot = searchDir;\n          break;\n        }\n      }\n      searchDir = dirname(searchDir);\n    }\n    if (!packageRoot)\n      return op.failure({\n        code: \"NotFound\",\n        message: \"Could not find life package root.\",\n      });\n\n    // Build path to the life dist directory\n    const distDir = join(packageRoot, \"dist\");\n    if (!(await this.fileExists(distDir)))\n      return op.failure({\n        code: \"NotFound\",\n        message: \"Could not find life dist directory.\",\n      });\n\n    return op.success(distDir);\n  }\n\n  // -------------------------------------\n\n  async generateServerBundle() {\n    return await this.telemetry.trace(\"generateServerBundle()\", async () => {\n      try {\n        // 1. Generate a map of server names to their paths\n        const serversMap: Record<string, string> = {};\n        for (const serverPath of this.paths.serverBuilds.values()) {\n          const name = path.basename(serverPath, \".ts\");\n          serversMap[name] = serverPath;\n        }\n\n        // 2. Produce the raw bundle index file\n        const indexPath = path.join(this.options.outputDirectory, \"server\", \"raw\", \"index.ts\");\n        const indexContent = `${Object.entries(serversMap)\n          .map(\n            ([name, p]) =>\n              `import ${name} from \"./${path.relative(path.dirname(indexPath), p).replace(\".ts\", \"\")}\";`,\n          )\n          .join(\"\\n\")}\nexport default {\n  ${Object.keys(serversMap)\n    .map((name) => `\"${name}\": ${name}`)\n    .join(\",\\n\")}\n}\n  `.trim();\n        await writeFile(indexPath, indexContent, \"utf-8\");\n\n        // 3. Use ESBuild to bundle the raw index\n        if (this.#serverBundleContext) await this.#serverBundleContext.cancel();\n        else {\n          this.#serverBundleContext = await esbuild.context({\n            entryPoints: [indexPath],\n            outdir: path.join(this.options.outputDirectory, \"server\", \"dist\"),\n            bundle: true,\n            format: \"esm\",\n            platform: \"node\",\n            target: \"node20\",\n            packages: \"external\",\n            keepNames: true,\n            jsx: \"automatic\",\n            write: true,\n            logLevel: \"silent\",\n            treeShaking: true,\n            loader: {\n              \".node\": \"file\",\n            },\n            minify: true,\n          });\n        }\n        await this.#serverBundleContext.rebuild();\n\n        return op.success();\n      } catch (error) {\n        return op.failure({ code: \"Unknown\", cause: error });\n      }\n    });\n  }\n\n  async generateClientBundle() {\n    return await this.telemetry.trace(\"generateClientBundle()\", async () => {\n      try {\n        // 1. Generate a map of client names to their paths\n        const clientsMap: Record<string, string> = {};\n        for (const clientPath of this.paths.clientBuilds.values()) {\n          const name = path.basename(clientPath, \".ts\");\n          clientsMap[name] = clientPath;\n        }\n\n        // 2. Produce the raw bundle index file\n        const indexPath = path.join(this.options.outputDirectory, \"client\", \"index.ts\");\n        const indexContent = `${Object.entries(clientsMap)\n          .map(\n            ([name, p]) =>\n              `import ${name} from \"./${path.relative(path.dirname(indexPath), p).replace(\".ts\", \"\")}\";`,\n          )\n          .join(\"\\n\")}\nexport default {\n  ${Object.keys(clientsMap)\n    .map((name) => `\"${name}\": ${name}`)\n    .join(\",\\n\")}\n}\n  `.trim();\n        await writeFile(indexPath, indexContent, \"utf-8\");\n\n        return op.success();\n      } catch (error) {\n        return op.failure({ code: \"Unknown\", cause: error });\n      }\n    });\n  }\n\n  async fileExists(filePath: string) {\n    try {\n      await access(filePath);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  private readonly fileVersions = new Map<string, number>();\n\n  private initLanguageService() {\n    if (this.#languageService) return;\n\n    const configPath = ts.findConfigFile(\n      this.options.projectDirectory,\n      ts.sys.fileExists,\n      \"tsconfig.json\",\n    );\n    if (!configPath) return;\n\n    const { config } = ts.readConfigFile(configPath, ts.sys.readFile);\n    const parsedConfig = ts.parseJsonConfigFileContent(\n      config,\n      ts.sys,\n      this.options.projectDirectory,\n    );\n\n    // Optimize for performance\n    parsedConfig.options.skipLibCheck = true;\n    parsedConfig.options.skipDefaultLibCheck = true;\n\n    this.#serviceHost = {\n      getScriptFileNames: () => Array.from(this.#virtualFiles.keys()),\n      getScriptVersion: (fileName: string) => {\n        // Return version number that increments on each change\n        return String(this.fileVersions.get(fileName) || 1);\n      },\n      getScriptSnapshot: (fileName: string) => {\n        // Check virtual files first\n        const virtualContent = this.#virtualFiles.get(fileName);\n        if (virtualContent) {\n          return ts.ScriptSnapshot.fromString(virtualContent);\n        }\n        // Fall back to file system\n        const content = ts.sys.readFile(fileName);\n        return content ? ts.ScriptSnapshot.fromString(content) : undefined;\n      },\n      getCurrentDirectory: () => this.options.projectDirectory,\n      getCompilationSettings: () => parsedConfig.options,\n      getDefaultLibFileName: (options) => ts.getDefaultLibFilePath(options),\n      fileExists: ts.sys.fileExists,\n      readFile: ts.sys.readFile,\n      readDirectory: ts.sys.readDirectory,\n      directoryExists: ts.sys.directoryExists,\n      getDirectories: ts.sys.getDirectories,\n    };\n\n    this.#languageService = ts.createLanguageService(\n      this.#serviceHost,\n      ts.createDocumentRegistry(),\n    );\n  }\n\n  private async extractPluginsArray(content: string): Promise<string | null> {\n    const ast = await parseAsync(Lang.TypeScript, content);\n    const root = ast.root();\n\n    // Find .plugins() call\n    const calls = root.findAll({ rule: { kind: \"call_expression\" } });\n    // biome-ignore lint/suspicious/noExplicitAny: reason\n    const pluginsCall = calls.find((call: any) => call.text().includes(\".plugins(\"));\n    if (!pluginsCall) return null;\n\n    // Extract array argument\n    const arrayArg = pluginsCall.find({ rule: { kind: \"array\" } });\n    return arrayArg?.text() || null;\n  }\n\n  private async extractImports(content: string): Promise<string> {\n    const ast = await parseAsync(Lang.TypeScript, content);\n    const root = ast.root();\n\n    const imports = root.findAll({ rule: { kind: \"import_statement\" } });\n    // biome-ignore lint/suspicious/noExplicitAny: reason\n    return imports.map((stmt: any) => stmt.text()).join(\"\\n\");\n  }\n\n  private findTypeAlias(node: ts.Node): ts.TypeAliasDeclaration | null {\n    if (ts.isTypeAliasDeclaration(node) && node.name.text === \"__ExtractedPlugins\") {\n      return node;\n    }\n\n    let result: ts.TypeAliasDeclaration | null = null;\n    ts.forEachChild(node, (child: ts.Node) => {\n      if (!result) result = this.findTypeAlias(child);\n    });\n    return result;\n  }\n\n  private extractUnionMembers(type: ts.Type): string[] {\n    if (!type.isUnion()) {\n      if (type.isStringLiteral()) return [type.value];\n      return [];\n    }\n\n    const names: string[] = [];\n    for (const member of (type as ts.UnionType).types) {\n      if (member.isStringLiteral()) {\n        names.push((member as ts.StringLiteralType).value);\n      }\n    }\n    return names;\n  }\n\n  async extractClientPluginNames(clientPath: string): Promise<string[]> {\n    try {\n      // Initialize language service once\n      if (!this.#languageService) {\n        this.initLanguageService();\n        if (!this.#languageService) return [];\n      }\n\n      // Extract plugins array from source\n      const content = await readFile(clientPath, \"utf-8\");\n      const pluginsArray = await this.extractPluginsArray(content);\n      if (!pluginsArray) return [];\n\n      // Check cache\n      const hash = createHash(\"md5\").update(pluginsArray).digest(\"hex\");\n      const cached = this.#pluginNamesCache.get(clientPath);\n      if (cached?.hash === hash) return cached.names;\n\n      // Build minimal TypeScript content\n      const imports = await this.extractImports(content);\n      const virtualContent = `${imports}\n\nconst plugins = ${pluginsArray} as const;\ntype __ExtractedPlugins = typeof plugins[number][\"def\"][\"name\"];`;\n\n      // Update virtual file\n      this.#virtualFiles.set(clientPath, virtualContent);\n      const version = (this.fileVersions.get(clientPath) || 0) + 1;\n      this.fileVersions.set(clientPath, version);\n\n      // Get type information\n      const program = this.#languageService.getProgram();\n      if (!program) return [];\n\n      const sourceFile = program.getSourceFile(clientPath);\n      if (!sourceFile) return [];\n\n      const typeAlias = this.findTypeAlias(sourceFile);\n      if (!typeAlias) return [];\n\n      const type = program.getTypeChecker().getTypeAtLocation(typeAlias.type || typeAlias);\n      const pluginNames = this.extractUnionMembers(type);\n\n      // Cache result\n      this.#pluginNamesCache.set(clientPath, { hash, names: pluginNames });\n      return pluginNames;\n    } catch (error) {\n      this.telemetry.log.debug({\n        message: \"Failed to extract plugin names via type analysis\",\n        error,\n        attributes: { clientPath },\n      });\n      return [];\n    }\n  }\n}\n","// biome-ignore-all lint/performance/noAwaitInLoops: synchronous execution required here\n\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { type Node, type ParseResult, parseAsync } from \"oxc-parser\";\nimport { walk } from \"oxc-walker\";\nimport resolve from \"resolve\";\nimport * as op from \"@/shared/operation\";\n\nconst EXTENSIONS = [\".ts\", \".tsx\", \".mts\", \".cts\", \".js\", \".jsx\", \".mjs\", \".cjs\", \".json\"];\n\nconst detectLanguage = (f: string) => {\n  const ext = path.extname(f).toLowerCase();\n  if (ext === \".tsx\") return \"tsx\";\n  if (ext === \".ts\" || ext === \".mts\" || ext === \".cts\") return \"ts\";\n  if (ext === \".jsx\") return \"jsx\";\n  return \"js\";\n};\n\nconst resolveLocalFrom = (spec: string, basedir: string): string | null => {\n  try {\n    const resolved = resolve.sync(spec, {\n      basedir,\n      extensions: EXTENSIONS,\n      preserveSymlinks: true,\n      includeCoreModules: false,\n    });\n    // Only return paths that are not in node_modules (i.e., local dependencies)\n    return resolved.includes(\"/node_modules/\") ? null : resolved;\n  } catch {\n    return null;\n  }\n};\n\nconst isTypeOnlyImport = (node: Node): boolean => {\n  // Handle `import type { ... } from '...'` or `import type * as ... from '...'`\n  if (node.type === \"ImportDeclaration\" && node.importKind === \"type\") {\n    return true;\n  }\n\n  // Handle mixed imports like `import { value, type Type } from '...'`\n  if (node.type === \"ImportDeclaration\" && node.specifiers) {\n    // If there are no specifiers, it's a side effect import (never type-only)\n    if (node.specifiers.length === 0) {\n      return false;\n    }\n\n    // Check if ALL specifiers are type-only\n    const hasValueImports = node.specifiers.some((spec) => {\n      // ImportDefaultSpecifier and ImportNamespaceSpecifier don't have importKind\n      if (spec.type === \"ImportDefaultSpecifier\" || spec.type === \"ImportNamespaceSpecifier\") {\n        return true; // These are always value imports\n      }\n      // ImportSpecifier can have importKind: \"type\" for individual type imports\n      return spec.type === \"ImportSpecifier\" && spec.importKind !== \"type\";\n    });\n\n    return !hasValueImports;\n  }\n\n  return false;\n};\n\n/**\n * Return all transitive import dependencies for one or many entry files.\n * Supports TS/TSX/JS/JSX and ESM/CJS. Syntax errors tolerant.\n *\n * @param entries - The absolute entry path(s) to get the dependencies for.\n * @param exclude - Absolute path(s) to exclude from the dependency tree (excludes the file and its entire subtree).\n * @param skipTypeOnlyDependencies - Whether to exclude TypeScript type-only imports (default: false).\n * @returns An array of absolute paths to the dependencies.\n */\nexport const getDependenciesMap = async (\n  entries: string | string[],\n  exclude: string | string[] = [],\n  skipTypeOnlyDependencies = false,\n) => {\n  const output = new Set<string>();\n\n  // Ensure entries is an array, of clean absolute paths\n  const entriesArray = Array.isArray(entries) ? entries : [entries];\n  for (const p of entriesArray) {\n    if (!path.isAbsolute(p))\n      return op.failure({\n        code: \"Validation\",\n        message: `Provided entry path must be absolute: ${p}`,\n      });\n  }\n  const entriesSet = new Set(entriesArray.map((p) => path.resolve(p)));\n\n  // Ensure exclude is an array, of clean absolute paths\n  const excludeArray = Array.isArray(exclude) ? exclude : [exclude];\n  for (const p of excludeArray) {\n    if (p && !path.isAbsolute(p))\n      return op.failure({\n        code: \"Validation\",\n        message: `Provided exclude path must be absolute: ${p}`,\n      });\n  }\n  const excludeSet = new Set(excludeArray.filter(Boolean).map((p) => path.resolve(p)));\n\n  // Initialize the queue\n  const queue = [...entriesSet];\n\n  // Track already visited files\n  const visited = new Set<string>();\n\n  // Process the queue\n  while (queue.length) {\n    const file = queue.pop();\n    if (!file) throw new Error(\"Shouldn't happen\");\n\n    // Skip if already visited or excluded\n    if (visited.has(file) || excludeSet.has(file)) continue;\n    visited.add(file);\n\n    // Read the file content\n    let content: string;\n    try {\n      content = await fs.readFile(file, \"utf8\");\n    } catch {\n      continue;\n    }\n\n    // Parse the file content\n    let ast: ParseResult;\n    try {\n      ast = await parseAsync(file, content, {\n        sourceType: \"module\",\n        lang: detectLanguage(file),\n      });\n    } catch {\n      // oxc-parser can rarely panic. In this case, skip this file.\n      continue;\n    }\n\n    const specifiers = new Set<string>();\n    walk(ast.program, {\n      enter(node) {\n        // import ... from 'x'\n        if (node.type === \"ImportDeclaration\" && node.source?.value) {\n          // Skip type-only imports if skipTypeOnlyDependencies is true\n          if (skipTypeOnlyDependencies && isTypeOnlyImport(node)) {\n            return;\n          }\n          specifiers.add(node.source.value);\n        }\n        // export * from 'x' / export { ... } from 'x'\n        if (\n          (node.type === \"ExportAllDeclaration\" || node.type === \"ExportNamedDeclaration\") &&\n          node.source?.value\n        ) {\n          // Skip type-only exports if skipTypeOnlyDependencies is true\n          if (skipTypeOnlyDependencies && node.exportKind === \"type\") {\n            return;\n          }\n          specifiers.add(node.source.value);\n        }\n        // import('x')\n        if (\n          node.type === \"ImportExpression\" &&\n          node.source?.type === \"Literal\" &&\n          typeof node.source.value === \"string\"\n        ) {\n          specifiers.add(node.source.value);\n        }\n        // require('x') / require.resolve('x')\n        if (node.type === \"CallExpression\" && node.arguments?.length === 1) {\n          const arg = node.arguments[0];\n          const literalArg =\n            arg && arg.type === \"Literal\" && typeof arg.value === \"string\"\n              ? (arg.value as string)\n              : null;\n\n          if (literalArg && node.callee.type === \"Identifier\" && node.callee.name === \"require\") {\n            specifiers.add(literalArg);\n          } else if (\n            literalArg &&\n            node.callee.type === \"MemberExpression\" &&\n            node.callee.object.type === \"Identifier\" &&\n            node.callee.object.name === \"require\" &&\n            node.callee.property.type === \"Identifier\" &&\n            node.callee.property.name === \"resolve\"\n          ) {\n            specifiers.add(literalArg);\n          }\n        }\n      },\n    });\n\n    const basedir = path.dirname(file);\n    for (const spec of specifiers) {\n      const resolved = resolveLocalFrom(spec, basedir);\n      if (!resolved || excludeSet.has(resolved)) continue;\n      if (!entriesSet.has(resolved)) output.add(resolved);\n      if (!visited.has(resolved)) queue.push(resolved);\n    }\n  }\n\n  return op.success(Array.from(output));\n};\n","import z from \"zod\";\n\nexport const compilerOptionsSchema = z.object({\n  projectDirectory: z.string(),\n  outputDirectory: z.string().prefault(\".life\"),\n  watch: z.boolean().prefault(false),\n  stopOnError: z.boolean().prefault(true),\n});\n\nexport type CompilerOptions<T extends \"input\" | \"output\"> = T extends \"input\"\n  ? z.input<typeof compilerOptionsSchema>\n  : z.output<typeof compilerOptionsSchema>;\n","import { generateHeader } from \"@/cli/utils/header\";\nimport { LifeCompiler } from \"@/compiler\";\nimport { TelemetryClient } from \"@/telemetry/clients/base\";\n\nexport interface BuildOptions {\n  root: string;\n  output?: string;\n  watch?: boolean;\n  optimize?: boolean;\n  debug?: boolean;\n}\n\nconst errorMessage = \"An error occurred while starting the compiler.\";\n\nexport const executeBuild = async (telemetry: TelemetryClient, options: BuildOptions) => {\n  try {\n    // Print header\n    console.log(await generateHeader(\"Build\"));\n  \n  \n    // Initialize compiler\n    const compiler = new LifeCompiler({\n      projectDirectory: options.root,\n      outputDirectory: options.output,\n      watch: options.watch,\n    });\n  \n    // Start compiler\n    const [errCompiler] = await compiler.start();\n    if (errCompiler) telemetry.log.error({ message: errorMessage, error: errCompiler });\n  } catch (error) {\n    telemetry.log.error({ message: errorMessage, error });\n  }\n}","import { resolve } from \"node:path\";\nimport { Command } from \"commander\";\nimport type { TelemetryClient } from \"@/telemetry/clients/base\";\nimport type { TelemetryLog } from \"@/telemetry/types\";\nimport { type DevOptions, executeDev } from \"./action\";\n\nexport function createDevCommand(\n  telemetry: TelemetryClient,\n  initialTelemetryLogs: TelemetryLog[],\n  onTelemetryLog: (callback: (log: TelemetryLog) => void) => void,\n) {\n  const command = new Command(\"dev\")\n    .description(\"Start the development server.\")\n    .helpOption(\"--help\", \"Display help for command.\")\n    .option(\"-p, --port <port>\", \"Port to run the server on.\", \"3003\")\n    .option(\"-h, --host <host>\", \"Host to bind the server to.\", \"localhost\")\n    .option(\"-r, --root <dir>\", \"Project root directory.\", resolve(process.cwd()))\n    .option(\"--no-tui\", \"Disable the terminal UI.\")\n    .option(\n      \"-t, --token <token>\",\n      \"Token to authenticate with the server. You can also set LIFE_SERVER_TOKEN environment variable.\",\n    )\n    .option(\"--debug\", \"Enable debug mode logs, same as LOG_LEVEL=debug.\")\n    .action(\n      async (options: DevOptions) =>\n        await executeDev(options, telemetry, initialTelemetryLogs, onTelemetryLog),\n    );\n\n  return command;\n}\n","import { render } from \"ink\";\nimport React from \"react\";\nimport type { TelemetryClient } from \"@/telemetry/clients/base\";\nimport type { TelemetryLog } from \"@/telemetry/types\";\nimport { DevUI } from \"./ui\";\n\nexport interface DevOptions {\n  root: string;\n  port?: string;\n  host?: string;\n  config?: string;\n  token?: string;\n  debug?: boolean;\n  tui?: boolean;\n}\n\nexport const executeDev = (\n  options: DevOptions,\n  telemetry: TelemetryClient,\n  initialTelemetryLogs: TelemetryLog[],\n  onTelemetryLog: (callback: (log: TelemetryLog) => void) => void,\n) => {\n  try {\n    // Render the terminal UI if enabled\n    if (options.tui) {\n      render(\n        React.createElement(DevUI, { options, telemetry, initialTelemetryLogs, onTelemetryLog }),\n        {\n          exitOnCtrlC: false,\n          patchConsole: false, // We have our own patch in cli/index.ts\n          incrementalRendering: true,\n          maxFps: 25\n        },\n      );\n    }\n    // Else just call the initialization task\n    else telemetry.log.warn({ message: \"--no-tui mode is not implemented yet.\" });\n  } catch (error) {\n    telemetry.log.error({\n      message: \"An error occurred while starting the development server.\",\n      error,\n    });\n  }\n};\n","import type { ChildProcess } from \"node:child_process\";\nimport { ThemeProvider } from \"@inkjs/ui\";\nimport chalk from \"chalk\";\nimport { Box, Text, useInput } from \"ink\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { VersionInfo } from \"@/cli/utils/version\";\nimport type { LifeCompiler } from \"@/compiler\";\nimport type { LifeServer } from \"@/server\";\nimport type { AgentProcessClient } from \"@/server/agent-process/client\";\nimport { canon } from \"@/shared/canon\";\nimport type { TelemetryClient } from \"@/telemetry/clients/base\";\nimport { formatLogForTerminal } from \"@/telemetry/helpers/formatting/terminal\";\nimport type { TelemetryLog } from \"@/telemetry/types\";\nimport { theme } from \"../../../utils/theme\";\nimport type { DevOptions } from \"../action\";\nimport { ConditionalMouseProvider } from \"../components/conditional-mouse-provider\";\nimport { Divider } from \"../components/divider\";\nimport { FullScreenBox } from \"../components/fullscreen-box.js\";\nimport { Link } from \"../components/link\";\nimport { useScreenSize } from \"../hooks/use-screen-size\";\nimport { customInkUITheme } from \"../lib/inkui-theme\";\nimport { DEFAULT_TABS, getSortedTabs } from \"../lib/tabs\";\nimport { ExitTask } from \"../tasks/exit\";\nimport { InitTask } from \"../tasks/init\";\nimport { DevContent } from \"./content\";\nimport { DevFooter } from \"./footer\";\nimport { DevLoader } from \"./loader\";\n\nimport { DevSidebar } from \"./sidebar\";\n\nexport const DevUI = ({\n  options,\n  telemetry,\n  initialTelemetryLogs,\n  onTelemetryLog,\n}: {\n  options: DevOptions;\n  telemetry: TelemetryClient;\n  initialTelemetryLogs: TelemetryLog[];\n  onTelemetryLog: (callback: (log: TelemetryLog) => void) => void;\n}) => {\n  // Logs (displayed in tabs)\n  const [logs, setLogs] = useState<TelemetryLog[]>([]);\n  useEffect(() => {\n    // Inject initial telemetry logs (recorded before the UI is mounted)\n    setLogs((prev) => [...prev, ...initialTelemetryLogs]);\n    // Listen for new telemetry logs\n    onTelemetryLog((log) =>\n      setLogs((prev) => (prev && Array.isArray(prev) ? [...prev, log] : [log])),\n    );\n  }, []);\n\n  // States\n  const [version, setVersion] = useState<VersionInfo | null>(null);\n  const server = useRef<LifeServer | null>(null);\n  const compiler = useRef<LifeCompiler | null>(null);\n  const livekitProcess = useRef<ChildProcess | null>(null);\n\n  // Initialize on mount, and track its states\n  const [initProgress, setInitProgress] = useState(0);\n  const [initStatus, setInitStatus] = useState<string | null>(\"Initializing...\");\n  const [initError, setInitError] = useState<string | null>(null);\n  useEffect(() => {\n    const initTask = new InitTask({\n      telemetry,\n      options,\n      listeners: {\n        onProgress: setInitProgress,\n        onStatus: setInitStatus,\n        onError: (error) => {\n          telemetry.log.error({ error });\n          setInitError(error);\n          exit();\n        },\n        onVersion: setVersion,\n        onServer: (s) => (server.current = s),\n        onCompiler: (c) => (compiler.current = c),\n        onLivekitProcess: (l) => (livekitProcess.current = l),\n      },\n    });\n    initTask.run().then(([err]) => {\n      if (err) {\n        telemetry.log.error({ error: err });\n        setInitError(err.message);\n        exit();\n      }\n    });\n  }, []);\n\n  // Helper function to run the exit task, and track its states\n  const [exitProgress, setExitProgress] = useState(0);\n  const [exitStatus, setExitStatus] = useState<string | null>(\"Exiting...\");\n  async function exit() {\n    const exitTask = new ExitTask({\n      telemetry,\n      server: server.current,\n      compiler: compiler.current,\n      livekitProcess: livekitProcess.current,\n      listeners: {\n        onProgressUpdate: setExitProgress,\n        onStatusUpdate: setExitStatus,\n      },\n    });\n    await exitTask.run();\n  }\n\n  // When debug mode is enabled, UI controls are hidden and debug logs are shown\n  const [debugModeEnabled, setDebugModeEnabled] = useState(false);\n\n  // Tabs\n  const [tabs, setTabs] = useState<string[]>(\n    options.debug ? DEFAULT_TABS : DEFAULT_TABS.filter((tab) => tab !== \"cli\"),\n  );\n  const [selectedTab, setSelectedTab] = useState(\"server\");\n\n  // Add keyboard navigation\n  useInput((input, key) => {\n    const sortedTabs = getSortedTabs(tabs, agentProcesses);\n    const currentIndex = sortedTabs.indexOf(selectedTab);\n    // Switch to previous tab on 'up'\n    if (key.upArrow) {\n      const newIndex = (currentIndex - 1 + sortedTabs.length) % sortedTabs.length;\n      setSelectedTab(sortedTabs[newIndex] || \"server\");\n    }\n    // Switch to next tab on 'down'\n    else if (key.downArrow) {\n      const newIndex = (currentIndex + 1) % sortedTabs.length;\n      setSelectedTab(sortedTabs[newIndex] || \"server\");\n    }\n    // Toggle debug mode on 'd'\n    else if (input.toLowerCase() === \"d\") setDebugModeEnabled((prev) => !prev);\n    // Exit on 'q' or 'ctrl+c'\n    else if (input.toLowerCase() === \"q\" || (key.ctrl && input === \"c\")) exit();\n  });\n\n  // Processes\n  const [agentProcesses, setAgentProcesses] = useState<Map<string, AgentProcessClient>>(new Map());\n  const startProcessesMonitoring = () =>\n    setInterval(() => {\n      setAgentProcesses((value) => {\n        const currentIds = Array.from(value.keys());\n        const newIds = Array.from(server.current?.agentProcesses.keys() ?? []);\n        const [error, areEqual] = canon.equal(currentIds, newIds);\n        if (error) telemetry.log.error({ error });\n        if (!areEqual) return new Map(server.current?.agentProcesses ?? []);\n        return value;\n      });\n    }, 500);\n  useEffect(() => {\n    const interval = startProcessesMonitoring();\n    return () => clearInterval(interval);\n  }, []);\n\n  // Update tabs and logs when agent processes change\n  useEffect(() => {\n    // Determine base tabs based on debug mode\n    const baseTabs = options.debug ? DEFAULT_TABS : DEFAULT_TABS.filter((tab) => tab !== \"cli\");\n\n    // Identify added/removed processes\n    const addedProcesses = Array.from(agentProcesses.values()).filter(\n      (process) => !tabs.includes(process.id),\n    );\n    const removedProcessesIds = tabs.filter(\n      (tabId) =>\n        !(\n          baseTabs.includes(tabId) ||\n          Array.from(agentProcesses.values()).some((process) => process.id === tabId)\n        ),\n    );\n\n    // Update tabs\n    if (addedProcesses.length || removedProcessesIds.length) {\n      setTabs([...baseTabs, ...Array.from(agentProcesses.values()).map((process) => process.id)]);\n    }\n\n    // If the current selected tab is removed, switch to \"server\" tab\n    if (removedProcessesIds.includes(selectedTab)) setSelectedTab(\"server\");\n\n    // Clean up logs of removed processes\n    for (const processId of removedProcessesIds) {\n      setLogs((prev) => ({ ...prev, [processId]: [] }));\n    }\n  }, [agentProcesses]);\n\n  // Enter fullscreen mode if not in debug mode\n  const isFullscreen = !debugModeEnabled && exitProgress !== 100;\n  const Container = isFullscreen ? FullScreenBox : Box;\n  const { height: screenHeight } = useScreenSize();\n\n  return (\n    <ThemeProvider theme={customInkUITheme}>\n      <Container\n        flexDirection=\"column\"\n        marginRight={debugModeEnabled ? 0 : 5}\n        minHeight={isFullscreen ? screenHeight - 1 : undefined}\n        paddingX={1}\n        width=\"100%\"\n      >\n        {/* Init Loader */}\n        {initProgress < 100 && exitProgress === 0 && (\n          <DevLoader loadingProgress={initProgress} loadingStatus={initStatus} />\n        )}\n\n        {/* Exit Loader */}\n        {exitProgress > 0 && exitProgress < 100 && (\n          <DevLoader loadingProgress={exitProgress} loadingStatus={exitStatus} />\n        )}\n\n        {/* Successful exit */}\n        {exitProgress === 100 && !initError && (\n          <Box\n            alignItems=\"center\"\n            flexDirection=\"column\"\n            gap={1}\n            justifyContent=\"center\"\n            margin={2}\n          >\n            <Box\n              alignItems=\"center\"\n              borderColor=\"gray\"\n              borderStyle=\"round\"\n              justifyContent=\"center\"\n              paddingX={1}\n            >\n              <Text>Stopped successfully. Enjoy {chalk.hex(theme.orange)(\"life\")}!</Text>\n            </Box>\n            <Text>\n              <Link url=\"https://lifejs.org/docs\">Docs</Link>\n              {\"    \"}\n              <Link url=\"https://github.com/lifejs/lifejs/issues\">Report an issue</Link>\n              {\"    \"}\n              <Link url=\"https://discord.gg/U5wHjT5Ryj\">Get support</Link>\n            </Text>\n          </Box>\n        )}\n\n        {/* Failure exit */}\n        {exitProgress === 100 && initError && (\n          <Box\n            alignItems=\"center\"\n            flexDirection=\"column\"\n            gap={1}\n            justifyContent=\"center\"\n            margin={2}\n          >\n            <Box\n              alignItems=\"center\"\n              borderColor=\"red\"\n              borderStyle=\"round\"\n              justifyContent=\"center\"\n              paddingX={1}\n            >\n              <Text color={\"red\"}>Error starting the Life.js development server</Text>\n            </Box>\n            <Text color={\"red\"}>{initError}</Text>\n            {!options.debug && (\n              <Box alignItems=\"center\" flexDirection=\"column\" justifyContent=\"center\">\n                <Divider borderDimColor={true} color={\"red\"} width={32} />\n                <Text color={\"red\"} dimColor={true}>\n                  Run with --debug to see logs.\n                </Text>\n              </Box>\n            )}\n          </Box>\n        )}\n\n        {/* Main */}\n        {initProgress === 100 && exitProgress === 0 && (\n          <ConditionalMouseProvider enabled={!debugModeEnabled}>\n            <Box flexDirection=\"column\" height={\"100%\"} width=\"100%\">\n              <Box flexGrow={1} gap={1} overflow=\"hidden\" width=\"100%\">\n                {!debugModeEnabled && server && (\n                  <DevSidebar\n                    agentProcesses={agentProcesses}\n                    selectedTab={selectedTab}\n                    tabs={tabs}\n                    version={version}\n                  />\n                )}\n                <DevContent\n                  debugModeEnabled={debugModeEnabled}\n                  logs={logs}\n                  options={options}\n                  selectedTab={selectedTab}\n                />\n              </Box>\n              <DevFooter\n                agentProcesses={agentProcesses}\n                debugModeEnabled={debugModeEnabled}\n                selectedTab={selectedTab}\n              />\n            </Box>\n          </ConditionalMouseProvider>\n        )}\n      </Container>\n\n      {/* Debug logs */}\n      {exitProgress === 100 && initError && options.debug && (\n        <Box flexDirection=\"column\" padding={1}>\n          <Text>Debug logs:</Text>\n          <Divider color={theme.orange} minWidth={\"100%\"} width=\"100%\" />\n          {logs?.length ? (\n            logs.map((log) => <Text key={log.id}>{formatLogForTerminal(log)}</Text>)\n          ) : (\n            <Text>No debug logs.</Text>\n          )}\n        </Box>\n      )}\n    </ThemeProvider>\n  );\n};\n","import { MouseProvider } from \"@zenobius/ink-mouse\";\nimport type { ReactNode } from \"react\";\n\nexport const ConditionalMouseProvider = (params: { children: ReactNode; enabled: boolean }) => {\n  if (params.enabled) return <MouseProvider>{params.children}</MouseProvider>;\n  return params.children;\n};\n","import { Box, type BoxProps } from \"ink\";\nimport type React from \"react\";\n\n/**\n * Props for the Divider component.\n */\nexport interface DividerProps extends BoxProps {\n  /**\n   * Color of the divider's border. Matches the type of `borderColor` in the Ink `Box` component.\n   * Accepts standard Ink color names or hex codes.\n   * @default \"blackBright\"\n   */\n  color?: BoxProps[\"borderColor\"];\n}\n\n/**\n * A horizontal divider component styled as a single border line.\n *\n * @param props - Properties to customize the divider.\n * @returns A styled Ink `Box` component representing a divider.\n */\nexport const Divider: React.FC<DividerProps> = ({ color = \"blackBright\", ...props }) => (\n  <Box\n    borderBottom={true}\n    borderColor={color}\n    borderLeft={false}\n    borderRight={false}\n    borderStyle=\"single\"\n    borderTop={false}\n    {...props}\n  />\n);\n","import { Box, useInput } from \"ink\";\nimport type { ComponentProps, FC } from \"react\";\nimport { useScreenSize } from \"../hooks/use-screen-size\";\n\nexport type BoxProps = ComponentProps<typeof Box>;\n\nexport const FullScreenBox: FC<BoxProps> = (props) => {\n  // biome-ignore lint/suspicious/noEmptyBlockStatements: reason\n  useInput(() => {}); // prevent input from rendering and shifting the layout\n  const { height, width } = useScreenSize();\n  return <Box height={height} ref={props.ref} width={width} {...props} />;\n};\n","import { useStdout } from \"ink\";\nimport { useCallback, useEffect, useState } from \"react\";\n\nexport function useScreenSize() {\n  const { stdout } = useStdout();\n  const getSize = useCallback(() => ({ height: stdout.rows - 1, width: stdout.columns }), [stdout]);\n  const [size, setSize] = useState(getSize);\n\n  useEffect(() => {\n    const onResize = () => setSize(getSize());\n    stdout.on(\"resize\", onResize);\n    return () => {\n      stdout.off(\"resize\", onResize);\n    };\n  }, [stdout, getSize]);\n\n  return size;\n}\n","import InkLink from \"ink-link\";\n\nconst fallback = (text: string, url: string) => `${text} (${url})`;\n\nexport const Link = ({ children, url }: { children: React.ReactNode; url: string }) => (\n  <InkLink fallback={fallback} url={url}>\n    {children}\n  </InkLink>\n);\n","import { defaultTheme, extendTheme } from \"@inkjs/ui\";\nimport figures from \"figures\";\nimport type { BoxProps, TextProps } from \"ink\";\nimport { theme } from \"@/cli/utils/theme\";\n\n// Define a custom Ink UI theme for progress bar\nexport const customInkUITheme = extendTheme(defaultTheme, {\n  components: {\n    ProgressBar: {\n      styles: {\n        container: (): BoxProps => ({\n          flexGrow: 1,\n          minWidth: 0,\n        }),\n        completed: (): TextProps => ({\n          color: theme.orange,\n        }),\n        remaining: (): TextProps => ({\n          dimColor: true,\n        }),\n      },\n      config: () => ({\n        completedCharacter: figures.square,\n        remainingCharacter: figures.squareLightShade,\n      }),\n    },\n  },\n});\n","import chalk from \"chalk\";\nimport type { AgentProcessClient } from \"@/server/agent-process/client\";\n\nexport const DEFAULT_TABS = [\"server\", \"compiler\", \"webrtc\", \"cli\"];\n\nexport const getTabName = (\n  selectedTab: string,\n  agentProcesses: Map<string, AgentProcessClient>,\n) => {\n  // Match default tabs names\n  const defaultTabName = {\n    server: \"Server\",\n    compiler: \"Compiler\",\n    webrtc: \"WebRTC\",\n    cli: \"CLI\",\n  }[selectedTab];\n  if (defaultTabName) return defaultTabName;\n\n  // Match agent process names\n  const agentId = selectedTab;\n  const agentName = agentProcesses.get(agentId)?.definition.name ?? \"unknown\";\n  return `${chalk.gray.italic(agentName)} (${agentId.replace(\"agent_\", \"\").slice(0, 6) ?? \"unknown\"})`;\n};\n\nexport const getSortedTabs = (\n  tabs: string[],\n  agentProcesses: Map<string, AgentProcessClient>,\n): string[] => {\n  const defaultTabs = tabs.filter((tab) => DEFAULT_TABS.includes(tab));\n  const agentTabs = tabs\n    .filter((tab) => !DEFAULT_TABS.includes(tab))\n    .sort((a, b) => {\n      const aProcess = agentProcesses.get(a);\n      const bProcess = agentProcesses.get(b);\n\n      const getPriority = (status: string | undefined) => {\n        if (status === \"running\") return 0;\n        if (status === \"starting\" || status === \"stopping\") return 1;\n        return 2; // stopped\n      };\n\n      return getPriority(aProcess?.status) - getPriority(bProcess?.status);\n    });\n\n  return [...defaultTabs, ...agentTabs];\n};\n","import type { ChildProcess } from \"node:child_process\";\nimport type { LifeCompiler } from \"@/compiler\";\nimport type { LifeServer } from \"@/server\";\nimport type { LifeError } from \"@/shared/error\";\nimport * as op from \"@/shared/operation\";\nimport type { MaybePromise } from \"@/shared/types\";\nimport type { TelemetryClient } from \"@/telemetry/clients/base\";\n\ntype ExitTaskListeners = {\n  onStatusUpdate?: (status: string) => void;\n  onProgressUpdate?: (progress: number) => void;\n};\n\ntype ExitStep = {\n  name: string;\n  run: () => MaybePromise<op.OperationResult<unknown>>;\n  timeout: number;\n  onError?: (error: LifeError) => void;\n};\n\nexport class ExitTask {\n  readonly telemetry: TelemetryClient;\n  readonly server: LifeServer | null;\n  readonly compiler: LifeCompiler | null;\n  readonly livekitProcess: ChildProcess | null;\n  listeners: ExitTaskListeners;\n  steps: ExitStep[] = [];\n  _status = \"Exiting...\";\n  _progress = 0;\n\n  constructor({\n    telemetry,\n    server,\n    compiler,\n    livekitProcess,\n    listeners,\n  }: {\n    telemetry: TelemetryClient;\n    server: LifeServer | null;\n    compiler: LifeCompiler | null;\n    livekitProcess: ChildProcess | null;\n    listeners?: ExitTaskListeners;\n  }) {\n    this.telemetry = telemetry;\n    this.server = server;\n    this.compiler = compiler;\n    this.livekitProcess = livekitProcess;\n    this.listeners = listeners ?? {};\n  }\n\n  setStatus(status: string) {\n    this._status = status;\n    this.listeners.onStatusUpdate?.(status);\n  }\n\n  setProgress(progress: number) {\n    this._progress = progress;\n    this.listeners.onProgressUpdate?.(progress);\n  }\n\n  registerStep({\n    name,\n    run,\n    timeout = 5000,\n    onError,\n  }: {\n    name: string;\n    run: () => MaybePromise<op.OperationResult<unknown>>;\n    timeout?: number;\n    onError?: (error: LifeError) => void;\n  }) {\n    this.steps.push({ name, run, timeout, onError });\n  }\n\n  async runSteps() {\n    const totalSteps = this.steps.length;\n    let completedSteps = 0;\n\n    await Promise.all(\n      this.steps.map(async (step) => {\n        try {\n          this.telemetry.log.debug({ message: `Running exit step '${step.name}'.` });\n\n          // Schedule a timeout promise\n          const timeoutPromise = new Promise<op.OperationResult<unknown>>((resolve) => {\n            setTimeout(() => {\n              resolve(\n                op.failure({\n                  code: \"Timeout\",\n                  message: `Exit step '${step.name}' timed out after ${step.timeout}ms.`,\n                }),\n              );\n            }, step.timeout);\n          });\n\n          // Wait for the step or the timeout to resolve\n          const result = await Promise.race([step.run(), timeoutPromise]);\n\n          if (result[0]) {\n            this.telemetry.log.error({\n              message: `Exit step '${step.name}' failed.`,\n              error: result[0],\n            });\n            step.onError?.(result[0]);\n          } else {\n            this.telemetry.log.debug({\n              message: `Exit step '${step.name}' completed successfully.`,\n            });\n          }\n\n          // Update progress based on completed steps\n          completedSteps++;\n          const progress = Math.round((completedSteps / totalSteps) * 100);\n          this.setProgress(progress);\n        } catch (error) {\n          const operationError = op.failure({\n            code: \"Unknown\",\n            message: `Failed to run exit step '${step.name}'.`,\n            cause: error,\n          })[0];\n          this.telemetry.log.error({ message: `Exit step '${step.name}' threw error.`, error });\n          step.onError?.(operationError);\n\n          // Update progress even on error\n          completedSteps++;\n          const progress = Math.round((completedSteps / totalSteps) * 100);\n          this.setProgress(progress);\n        }\n      }),\n    );\n  }\n\n  async run() {\n    this.setStatus(\"Stopping services...\");\n\n    // Register all cleanup steps\n    this.registerStep({\n      name: \"Stopping LiveKit server...\",\n      timeout: 5000,\n      run: () => {\n        this.livekitProcess?.kill();\n        return op.success();\n      },\n    });\n\n    this.registerStep({\n      name: \"Stopping server...\",\n      timeout: 10_000,\n      run: async () => {\n        await this.server?.stop();\n        return op.success();\n      },\n    });\n\n    this.registerStep({\n      name: \"Stopping compiler...\",\n      timeout: 10_000,\n      run: async () => {\n        await this.compiler?.stop();\n        return op.success();\n      },\n    });\n\n    // Run all steps in parallel\n    await this.runSteps();\n\n    this.setStatus(\"Done!\");\n    await new Promise((resolve) => setTimeout(resolve, 10));\n\n    this.telemetry.log.debug({ message: \"Exiting process...\" });\n    process.exit(0);\n  }\n}\n","import { type ChildProcess, execSync, spawn } from \"node:child_process\";\nimport { randomBytes } from \"node:crypto\";\nimport { createServer } from \"node:net\";\nimport chalk from \"chalk\";\nimport { getVersion, type VersionInfo } from \"@/cli/utils/version\";\nimport { LifeCompiler } from \"@/compiler\";\nimport { LifeServer } from \"@/server\";\nimport * as op from \"@/shared/operation\";\nimport type { MaybePromise } from \"@/shared/types\";\nimport type { TelemetryClient } from \"@/telemetry/clients/base\";\nimport { createTelemetryClient } from \"@/telemetry/clients/node\";\nimport type { TelemetryLogLevel } from \"@/telemetry/types\";\nimport type { DevOptions } from \"../action\";\nimport { checkLivekitInstall } from \"../lib/check-livekit-install\";\nimport { cleanStdData } from \"../lib/clean-std-data\";\n\ntype InitTaskListeners = {\n  onStatus?: (status: string) => void;\n  onProgress?: (progress: number) => void;\n  onError?: (error: string) => void;\n  onVersion?: (version: VersionInfo) => void;\n  onServer?: (server: LifeServer) => void;\n  onCompiler?: (compiler: LifeCompiler) => void;\n  onLivekitProcess?: (livekitProcess: ChildProcess) => void;\n};\n\nexport class InitTask {\n  readonly telemetry: TelemetryClient;\n  readonly options: DevOptions;\n  listeners: InitTaskListeners;\n  intervals: NodeJS.Timeout[] = [];\n  _status = \"Initializing...\";\n  _progress = 0;\n  _error: string | null = null;\n  _version: VersionInfo | null = null;\n  _server: LifeServer | null = null;\n  _compiler: LifeCompiler | null = null;\n  _livekitProcess: ChildProcess | null = null;\n\n  constructor({\n    telemetry,\n    options,\n    listeners,\n  }: {\n    telemetry: TelemetryClient;\n    options: DevOptions;\n    listeners?: InitTaskListeners;\n  }) {\n    this.telemetry = telemetry;\n    this.options = options;\n    this.listeners = listeners ?? {};\n  }\n\n  setStatus(status: string) {\n    this._status = status;\n    this.listeners.onStatus?.(status);\n  }\n\n  setProgress(progress: number) {\n    this._progress = progress;\n    this.listeners.onProgress?.(progress);\n  }\n\n  setError(error: string) {\n    this._error = error;\n    this.listeners.onError?.(error);\n  }\n\n  setVersion(version: VersionInfo) {\n    this._version = version;\n    this.listeners.onVersion?.(version);\n  }\n\n  setServer(server: LifeServer) {\n    this._server = server;\n    this.listeners.onServer?.(server);\n  }\n\n  setCompiler(compiler: LifeCompiler) {\n    this._compiler = compiler;\n    this.listeners.onCompiler?.(compiler);\n  }\n\n  setLivekitProcess(livekitProcess: ChildProcess) {\n    this._livekitProcess = livekitProcess;\n    this.listeners.onLivekitProcess?.(livekitProcess);\n  }\n\n  // Helper function to execute initialization commands and capture output\n  command(command: string) {\n    try {\n      this.telemetry.log.debug({ message: `Running init command \\`${command}\\`.` });\n      const output = execSync(command, { stdio: [\"pipe\", \"pipe\", \"pipe\"] });\n      for (const line of cleanStdData(output ?? []).map((l) => `[${command}] ${l}`)) {\n        this.telemetry.log.info({ message: line });\n      }\n      return op.success();\n    } catch (error) {\n      // Node's execSync error includes stderr property when command fails\n      if (error instanceof Error) {\n        const execError = error as Error & { stderr?: Buffer };\n        error.message = execError.stderr?.toString(\"utf-8\") || error.message || \"Command failed\";\n      }\n      return op.failure({\n        code: \"Unknown\",\n        message: `Uncaught error during this.command('${command}').`,\n        cause: error,\n      });\n    }\n  }\n\n  // Helper function to check if a port is available\n  checkPort(port: number): Promise<boolean> {\n    return new Promise((resolve) => {\n      const testServer = createServer();\n      testServer.once(\"error\", (err: NodeJS.ErrnoException) => {\n        resolve(err.code !== \"EADDRINUSE\");\n      });\n      testServer.once(\"listening\", () => {\n        testServer.close();\n        resolve(true);\n      });\n      testServer.listen(port, \"127.0.0.1\");\n    });\n  }\n\n  waitForPort(port: number, maxWaitMs: number): Promise<boolean> {\n    const startTime = Date.now();\n\n    const tryPort = async (): Promise<boolean> => {\n      if (Date.now() - startTime >= maxWaitMs) return false;\n\n      const isAvailable = await this.checkPort(port);\n      if (isAvailable) return true;\n\n      await new Promise((res) => setTimeout(res, 500));\n      return tryPort();\n    };\n\n    return tryPort();\n  }\n\n  // Helper function to run a step of the initialization\n  async step<T extends MaybePromise<op.OperationResult<unknown>>>({\n    name,\n    progressAfter,\n    run,\n    timeout = 5000,\n  }: {\n    name: string;\n    progressAfter: number;\n    run: () => MaybePromise<T>;\n    timeout?: number;\n  }): Promise<T> {\n    try {\n      this.telemetry.log.debug({ message: `Running init step '${name}'.` });\n\n      // Reflect current step status in the UI\n      this.setStatus(name);\n      await new Promise((resolve) => setTimeout(resolve, 10));\n\n      // Schedule a timeout promise\n      const timeoutPromise = new Promise<T>((resolve) => {\n        setTimeout(() => {\n          resolve(\n            op.failure({\n              code: \"Timeout\",\n              message: `Init step '${name}' timed out after ${timeout}ms.`,\n            }) as T,\n          );\n        }, timeout);\n      });\n\n      // Wait for the step or the timeout to resolve, and return the result\n      const result = await Promise.race([run(), timeoutPromise]);\n      if (!result[0]) {\n        this.setProgress(progressAfter);\n        await new Promise((resolve) => setTimeout(resolve, 10));\n      }\n      return result;\n    } catch (error) {\n      return op.failure({\n        code: \"Unknown\",\n        message: `Failed to run init step '${name}'.`,\n        cause: error,\n      }) as T;\n    }\n  }\n\n  async run() {\n    // Ensure server token is set\n    const [errServerToken, serverToken] = await this.step({\n      name: \"Checking server token...\",\n      progressAfter: 10,\n      run: () => {\n        const _serverToken = this.options.token ?? process.env.LIFE_SERVER_TOKEN ?? null;\n        if (!_serverToken)\n          return op.failure({\n            code: \"NotFound\",\n            message: `Server token is required.\\nUse the --token flag or set LIFE_SERVER_TOKEN environment variable.\\n\\nHere is one generated for you :)\\n\\n${chalk.bold(`LIFE_SERVER_TOKEN=${randomBytes(32).toString(\"base64url\")}`)}\\n\\nJust put it in your .env file.`,\n          });\n        return op.success(_serverToken);\n      },\n    });\n    if (errServerToken) return op.failure(errServerToken);\n\n    // Obtain Livekit server installation status\n    let [errLkInstall, lkInstall] = await this.step({\n      name: \"Checking LiveKit server installation...\",\n      progressAfter: 20,\n      run: async () => op.success(await checkLivekitInstall()),\n    });\n    if (errLkInstall) return op.failure(errLkInstall);\n\n    // Install Livekit server if missing\n    const [errInstallLk] = await this.step({\n      name: \"Installing LiveKit server...\",\n      progressAfter: 30,\n      timeout: 60_000,\n      run: async () => {\n        if (lkInstall.installed) return op.success();\n\n        // - MacOS\n        if (process.platform === \"darwin\") {\n          this.telemetry.log.info({ message: \"Running: brew update && brew install livekit\" });\n          const [err] = this.command(\"brew update && brew install livekit\");\n          if (err) {\n            return op.failure({\n              code: \"Unknown\",\n              message:\n                \"Failed to install LiveKit server via Homebrew.\\nPlease install it manually by visiting https://docs.livekit.io/home/self-hosting/local/\",\n            });\n          }\n        }\n        // - Linux\n        else if (process.platform === \"linux\") {\n          this.telemetry.log.info({ message: \"Running: curl -sSL https://get.livekit.io | bash\" });\n          const [err] = this.command(\"curl -sSL https://get.livekit.io | bash\");\n          if (err) {\n            return op.failure({\n              code: \"Unknown\",\n              message:\n                \"Failed to install LiveKit server.\\nPlease install it manually by visiting https://docs.livekit.io/home/self-hosting/local/\",\n            });\n          }\n        }\n        // - Windows\n        else if (process.platform === \"win32\") {\n          return op.failure({\n            code: \"Unknown\",\n            message:\n              \"Server requires the 'livekit-server' command to be installed.\\nAutomatic installation is not supported on Windows yet.\\nPlease install it manually by visiting https://docs.livekit.io/home/self-hosting/local/\",\n          });\n        }\n        // - Unsupported\n        else {\n          return op.failure({\n            code: \"Unknown\",\n            message:\n              \"Server requires the 'livekit-server' command to be installed.\\nAutomatic installation is not supported on this platform yet.\\nPlease install it manually by visiting https://docs.livekit.io/home/self-hosting/local/\",\n          });\n        }\n\n        // Check the install again\n        lkInstall = await checkLivekitInstall();\n        if (!lkInstall.installed) {\n          return op.failure({\n            code: \"Unknown\",\n            message:\n              \"Server requires the 'livekit-server' command to be installed.\\nAutomatic installation failed.\\nPlease install it manually by visiting https://docs.livekit.io/home/self-hosting/local/\",\n          });\n        }\n        return op.success();\n      },\n    });\n    if (errInstallLk) return op.failure(errInstallLk);\n\n    // Upgrade LiveKit server if needed\n    const minLivekitVersionPrefix = \"1.9\";\n    const [errUpgradeLk] = await this.step({\n      name: \"Upgrading LiveKit server...\",\n      progressAfter: 40,\n      timeout: 60_000,\n      run: async () => {\n        if (!lkInstall.version?.startsWith(minLivekitVersionPrefix)) {\n          // - MacOS\n          if (process.platform === \"darwin\") {\n            this.telemetry.log.info({ message: \"Running: brew update && brew upgrade livekit\" });\n            const [err] = this.command(\"brew update && brew upgrade livekit\");\n            if (err) {\n              return op.failure({\n                code: \"Unknown\",\n                message:\n                  \"Failed to upgrade LiveKit server via Homebrew.\\nPlease upgrade it manually by visiting https://docs.livekit.io/home/self-hosting/local/\",\n              });\n            }\n          }\n          // - Linux\n          else if (process.platform === \"linux\") {\n            this.telemetry.log.info({\n              message: \"Running: curl -sSL https://get.livekit.io | bash\",\n            });\n            const [err] = this.command(\"curl -sSL https://get.livekit.io | bash\");\n            if (err) {\n              return op.failure({\n                code: \"Unknown\",\n                message:\n                  \"Failed to upgrade LiveKit server.\\nPlease upgrade it manually by visiting https://docs.livekit.io/home/self-hosting/local/\",\n              });\n            }\n          }\n          // - Windows\n          else if (process.platform === \"win32\") {\n            return op.failure({\n              code: \"Unknown\",\n              message: `Server requires the 'livekit-server' command version >= ${minLivekitVersionPrefix}.* (current version: ${lkInstall.version}).\\nAutomatic upgrade is not supported on Windows yet.\\nPlease upgrade it manually by visiting https://docs.livekit.io/home/self-hosting/local/`,\n            });\n          }\n          // - Unsupported\n          else {\n            return op.failure({\n              code: \"Unknown\",\n              message: `Server requires the 'livekit-server' command version >= ${minLivekitVersionPrefix}.* (current version: ${lkInstall.version}).\\nAutomatic upgrade is not supported on this platform yet.\\nPlease upgrade it manually by visiting https://docs.livekit.io/home/self-hosting/local/`,\n            });\n          }\n\n          // Check the install again\n          lkInstall = await checkLivekitInstall();\n          if (!(lkInstall.installed && lkInstall.version?.startsWith(minLivekitVersionPrefix))) {\n            return op.failure({\n              code: \"Unknown\",\n              message: `Server requires the 'livekit-server' command version >= ${minLivekitVersionPrefix}.* (current version: ${lkInstall.version}).\\nAutomatic upgrade failed.\\nPlease upgrade it manually by visiting https://docs.livekit.io/home/self-hosting/local/`,\n            });\n          }\n        }\n        return op.success();\n      },\n    });\n    if (errUpgradeLk) return op.failure(errUpgradeLk);\n\n    // Start LiveKit server\n    const [errStartLk] = await this.step({\n      name: \"Starting LiveKit server...\",\n      progressAfter: 50,\n      timeout: 15_000,\n      run: async () => {\n        // Wait for port 7880 to be available\n        const livekitPort = 7880;\n        const isPortAvailable = await this.waitForPort(livekitPort, 10_000);\n\n        // Initialize webrtc telemetry client\n        const webrtcTelemetry = createTelemetryClient(\"webrtc\", {});\n\n        if (!isPortAvailable) {\n          return op.failure({\n            code: \"Unknown\",\n            message: `Port ${livekitPort} is still in use after waiting. Please free the port and try again.`,\n          });\n        }\n\n        // Spawn the LiveKit server process\n        const livekitServer = spawn(\"livekit-server\", [\"--dev\"], {\n          stdio: [\"ignore\", \"pipe\", \"pipe\"],\n        });\n        this.setLivekitProcess(livekitServer);\n\n        // Clean LiveKit logs and push them to the logs states\n        const cleanLivekitLogs = (\n          lines: string[],\n        ): { level: TelemetryLogLevel; message: string }[] => {\n          return (\n            lines\n              // Remove DEBUG logs\n              .filter((line) => !line.trim().includes(\"DEBUG livekit\"))\n              // Format the log\n              .map((line) => {\n                let logLevel: TelemetryLogLevel;\n                if (line.includes(\" DEBUG \")) logLevel = \"debug\";\n                else if (line.includes(\" WARN \")) logLevel = \"warn\";\n                else if (line.includes(\" ERROR \")) logLevel = \"error\";\n                else if (line.includes(\" FATAL \")) logLevel = \"fatal\";\n                else logLevel = \"info\";\n                return {\n                  level: logLevel,\n                  message: line\n                    .replaceAll(\" WARN livekit\", \"\")\n                    .replaceAll(\" ERROR livekit\", \"\")\n                    .replaceAll(\" DEBUG livekit\", \"\")\n                    .replaceAll(\" INFO livekit\", \"\")\n                    .replaceAll(\" FATAL livekit\", \"\")\n                    // Remove datetime like \"2025-09-16T07:29:29.693-0700\"\n                    .replace(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}[+-]\\d{4}\\s*/, \"\")\n                    .trim(),\n                };\n              })\n          );\n        };\n\n        for (const channel of [\"stdout\", \"stderr\"] as const) {\n          livekitServer[channel]?.on(\"data\", (data) => {\n            const formattedLogs = cleanLivekitLogs(cleanStdData(data));\n            for (const line of formattedLogs) {\n              webrtcTelemetry.log[line.level as TelemetryLogLevel]({ message: line.message });\n            }\n          });\n        }\n\n        return op.success();\n      },\n    });\n    if (errStartLk) return op.failure(errStartLk);\n\n    // Obtain Life.js version\n    const [errGetVersion] = await this.step({\n      name: \"Checking Life.js version...\",\n      progressAfter: 60,\n      run: async () => {\n        this.setVersion(await getVersion());\n        return op.success();\n      },\n    });\n    if (errGetVersion) return op.failure(errGetVersion);\n\n    // Initialize compiler\n    const [errInitializeCompiler] = await this.step({\n      name: \"Initializing compiler...\",\n      progressAfter: 70,\n      run: () => {\n        const newCompiler = new LifeCompiler({\n          projectDirectory: this.options.root,\n          outputDirectory: \".life\",\n          watch: true,\n        });\n        this.setCompiler(newCompiler);\n        return op.success();\n      },\n    });\n    if (errInitializeCompiler) return op.failure(errInitializeCompiler);\n\n    // Start compiler\n    const [errStartCompiler] = await this.step({\n      name: \"Starting Life.js compiler...\",\n      progressAfter: 75,\n      timeout: 60_000,\n      run: async () => {\n        if (!this._compiler)\n          return op.failure({\n            code: \"NotFound\",\n            message: \"Compiler is not initialized.\",\n          });\n        const [errCompiler] = await this._compiler.start();\n        if (errCompiler) return op.failure(errCompiler);\n        return op.success();\n      },\n    });\n    if (errStartCompiler) return op.failure(errStartCompiler);\n\n    // Initialize server\n    const [errInitializeServer] = await this.step({\n      name: \"Initializing server...\",\n      progressAfter: 80,\n      run: () => {\n        // Create server instance\n        const newServer = new LifeServer({\n          projectDirectory: this.options.root,\n          token: serverToken,\n          watch: true,\n          host: this.options.host,\n          port: this.options.port,\n        });\n        this.setServer(newServer);\n        return op.success();\n      },\n    });\n    if (errInitializeServer) return op.failure(errInitializeServer);\n\n    // Start Life.js server\n    const [errStartServer] = await this.step({\n      name: \"Starting Life.js server...\",\n      progressAfter: 90,\n      run: async () => {\n        if (!this._server)\n          return op.failure({\n            code: \"NotFound\",\n            message: \"Server is not initialized.\",\n          });\n        const [errServer] = await this._server.start();\n        if (errServer) return op.failure(errServer);\n        return op.success();\n      },\n    });\n    if (errStartServer) return op.failure(errStartServer);\n\n    // Done\n    const [errDone] = await this.step({\n      name: \"Done!\",\n      progressAfter: 100,\n      run: () => {\n        setTimeout(() => this.setProgress(100), 50);\n        return op.success();\n      },\n    });\n    if (errDone) return op.failure(errDone);\n\n    // Return success\n    return op.success();\n  }\n}\n","import { createHash } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { basename, join } from \"node:path\";\nimport chalk from \"chalk\";\nimport chokidar, { type FSWatcher } from \"chokidar\";\nimport { prepareAgentConfig } from \"@/agent/server/config\";\nimport type { AgentScope } from \"@/agent/server/types\";\nimport { importServerBuild } from \"@/exports/build/server\";\nimport { type LifeError, lifeError } from \"@/shared/error\";\nimport { ns } from \"@/shared/nanoseconds\";\nimport * as op from \"@/shared/operation\";\nimport { newId } from \"@/shared/prefixed-id\";\nimport { ProcessStats } from \"@/shared/process-stats\";\nimport type { TelemetryClient } from \"@/telemetry/clients/base\";\nimport { createTelemetryClient } from \"@/telemetry/clients/node\";\nimport { transportProviderGetToken } from \"@/transport/auth\";\nimport packageJson from \"../package.json\" with { type: \"json\" };\nimport { AgentProcessClient } from \"./agent-process/client\";\nimport { LifeApi } from \"./api\";\nimport { type ServerOptions, serverOptionsSchema } from \"./options\";\n\nconst EXCLUDED_DEFAULTS = [\"**/node_modules/**\", \"**/build/**\", \"**/generated/**\", \"**/dist/**\"];\n\nexport class LifeServer {\n  options: ServerOptions<\"output\">;\n  telemetry: TelemetryClient;\n  watcher: FSWatcher | null = null;\n  api: LifeApi;\n  readonly agentProcesses = new Map<string, AgentProcessClient>();\n\n  readonly #processStats = new ProcessStats();\n  readonly #fileHashes = new Map<string, string>();\n  #startedAt: number | null = null;\n\n  constructor(options: ServerOptions<\"input\">) {\n    this.options = serverOptionsSchema.parse(options);\n    this.api = new LifeApi(this);\n\n    this.telemetry = createTelemetryClient(\"server\", {\n      watch: this.options.watch,\n    });\n  }\n\n  async start() {\n    return await this.telemetry.trace(\"start()\", async (span) => {\n      try {\n        span.log.info({ message: \"Starting server.\" });\n        span.log.debug({ message: `Project directory: ${this.options.projectDirectory}` });\n        span.log.debug({ message: `Watch: ${this.options.watch}` });\n        span.log.debug({ message: `Host: ${this.options.host}` });\n        span.log.debug({ message: `Port: ${this.options.port}` });\n\n        // 1. Start watching build directory if in watch mode\n        if (this.options.watch) {\n          const [errWatch] = await this.watchBuildDirectory();\n          if (errWatch) return op.failure(errWatch);\n        }\n        // Or ensure a valid build directory exists\n        else {\n          const [errDir] = await this.ensureBuildDirectory();\n          if (errDir) return op.failure(errDir);\n        }\n\n        // 2. Start the API\n        const [errApi] = await this.api.start();\n        if (errApi) return op.failure(errApi);\n        this.#startedAt = Date.now();\n        this.telemetry.log.info({\n          message: `⧉ ${chalk.italic(\"API\")} listening on         → http://${this.options.host}:${this.options.port}/api`,\n        });\n\n        // 3. Start the Observatory web app\n        // TODO\n        this.telemetry.log.info({\n          message: `⧉ ${chalk.italic(\"Observatory\")} listening on → http://${this.options.host}:${this.options.port}`,\n        });\n\n        // 4. Listen for SIGINT and SIGTERM to gracefully stop the server\n        const handleShutdown = async (signal: string) => {\n          console.log(\"\"); // new line for readability\n          this.telemetry.log.info({ message: `Received ${signal}, shutting down gracefully...` });\n          await this.stop();\n        };\n        process.once(\"SIGINT\", () => handleShutdown(\"SIGINT\"));\n        process.once(\"SIGTERM\", () => handleShutdown(\"SIGTERM\"));\n\n        // Count the server starts\n        this.telemetry.counter(\"server_started\").increment();\n\n        // Log operation with timing\n        span.end();\n        this.telemetry.log.info({\n          message: `Server ready in ${chalk.bold(`${ns.toMs(span.getData().duration)}ms`)}.`,\n        });\n        if (this.options.watch) {\n          this.telemetry.log.info({ message: \"Watching for changes...\" });\n        }\n\n        return op.success();\n      } catch (error) {\n        return op.failure({ code: \"Unknown\", cause: error });\n      }\n    });\n  }\n\n  #stopStarted = false;\n  async stop() {\n    return await this.telemetry.trace(\"stop()\", async () => {\n      try {\n        if (this.#stopStarted) return;\n        this.#stopStarted = true;\n\n        // Stop the API\n        const [errApi] = await this.api.stop();\n        if (errApi) return op.failure(errApi);\n\n        // Stop the watcher\n        await this.watcher?.close();\n        this.watcher = null;\n\n        // Stop the agent processes\n        const results = await Promise.all(\n          Array.from(this.agentProcesses.values()).map((process) =>\n            this.agent.stop({ id: process.id, sessionToken: process.sessionToken }),\n          ),\n        );\n        const err = results.find((result) => result[0])?.[0];\n        if (err) return op.failure(err);\n\n        // Ensure telemetry consumers have finished processing\n        await this.telemetry.flushConsumers();\n\n        return op.success();\n      } catch (error) {\n        return op.failure({ code: \"Unknown\", cause: error });\n      }\n    });\n  }\n\n  ensureBuildDirectory() {\n    return this.telemetry.trace(\"ensureBuildDirectory()\", (span) => {\n      try {\n        // Check if project directory exists\n        if (!existsSync(this.options.projectDirectory)) {\n          return op.failure({\n            code: \"NotFound\",\n            message: `Provided project directory not found: ${this.options.projectDirectory}`,\n          });\n        }\n\n        // Check if .life directory exists\n        const buildDir = join(this.options.projectDirectory, \".life\");\n        if (!existsSync(buildDir)) {\n          return op.failure({\n            code: \"NotFound\",\n            message: `No .life/ directory found at: ${buildDir}. Run 'life build' first.`,\n          });\n        }\n\n        // Check if client index exists\n        const clientIndex = join(buildDir, \"client\", \"index.ts\");\n        if (!existsSync(clientIndex)) {\n          return op.failure({\n            code: \"NotFound\",\n            message: `The .life/ build directory appears to be incomplete. Run 'life build' again.`,\n          });\n        }\n\n        // Check if server dist index exists\n        const serverIndex = join(buildDir, \"server\", \"dist\", \"index.js\");\n        if (!existsSync(serverIndex)) {\n          return op.failure({\n            code: \"NotFound\",\n            message: `The .life/ build directory appears to be incomplete. Run 'life build' again.`,\n          });\n        }\n\n        span.log.debug({\n          message: \"Valid .life/ build directory found.\",\n          attributes: {\n            projectDirectory: this.options.projectDirectory,\n            buildDirectory: buildDir,\n          },\n        });\n\n        return op.success();\n      } catch (error) {\n        return op.failure({ code: \"Unknown\", cause: error });\n      }\n    });\n  }\n\n  async watchBuildDirectory() {\n    return await this.telemetry.trace(\"watchBuildDirectory()\", async () => {\n      try {\n        // Get the raw server directory\n        const buildDir = join(this.options.projectDirectory, \".life\");\n        const signalDir = join(buildDir, \"server\", \"signal\");\n\n        // Initialize content hashes for existing agent files to track actual changes\n        const { readdirSync } = await import(\"node:fs\");\n        const files = readdirSync(signalDir).filter((file) => file.endsWith(\".txt\"));\n\n        // Read all files in parallel to avoid await-in-loop issue\n        await Promise.all(\n          files.map(async (file) => {\n            const filePath = join(signalDir, file);\n            try {\n              const content = await readFile(filePath, \"utf-8\");\n              const hash = createHash(\"md5\").update(content).digest(\"hex\");\n              this.#fileHashes.set(filePath, hash);\n            } catch (error) {\n              this.telemetry.log.debug({\n                message: \"Failed to initialize hash for file\",\n                error,\n                attributes: { path: filePath },\n              });\n            }\n          }),\n        );\n\n        // Watch for changes to agent build files\n        this.watcher = chokidar.watch(\".\", {\n          cwd: signalDir,\n          ignoreInitial: true,\n          ignored: EXCLUDED_DEFAULTS,\n          awaitWriteFinish: {\n            stabilityThreshold: 50,\n            pollInterval: 5,\n          },\n        });\n\n        const processWatchEvent = async (action: \"change\", relPath: string) => {\n          await this.telemetry.trace(\"processWatchEvent()\", async (span) => {\n            span.setAttributes({ action, relPath });\n\n            try {\n              const absPath = join(signalDir, relPath);\n\n              // Only process change events (add/unlink ignored for now)\n              if (action !== \"change\") return;\n\n              // Check if file content has actually changed using hash comparison\n              const content = await readFile(absPath, \"utf-8\");\n              const newHash = createHash(\"md5\").update(content).digest(\"hex\");\n              const oldHash = this.#fileHashes.get(absPath);\n              if (oldHash === newHash) return;\n\n              // Update stored hash\n              this.#fileHashes.set(absPath, newHash);\n\n              // Extract agent name from filename\n              const agentName = basename(relPath, \".txt\");\n              const formattedAgentName = chalk.bold.italic(agentName);\n              span.log.info({\n                message: `Detected change in agent '${formattedAgentName}', restarting affected processes...`,\n                attributes: { agentName, path: absPath },\n              });\n\n              // Find all running processes for this agent\n              const processesToRestart: AgentProcessClient[] = [];\n              for (const [, process] of this.agentProcesses) {\n                if (process.definition.name === agentName && process.status === \"running\") {\n                  processesToRestart.push(process);\n                }\n              }\n\n              if (processesToRestart.length === 0) {\n                span.log.info({\n                  message: `No running processes found for agent '${formattedAgentName}'.`,\n                  attributes: { agentName },\n                });\n                return;\n              }\n\n              // Restart affected processes in parallel and track timing\n              await Promise.all(processesToRestart.map((p) => p.restart()));\n\n              // Log operation with timing similar to compiler\n              span.end();\n              const instanceCount = processesToRestart.length;\n              this.telemetry.log.info({\n                message: `Restarted ${instanceCount} instance${instanceCount > 1 ? \"s\" : \"\"} of agent '${formattedAgentName}' in ${chalk.bold(`${ns.toMs(span.getData().duration)}ms`)}.`,\n                attributes: { agentName, instanceCount },\n              });\n            } catch (error) {\n              span.log.error({\n                message: \"Failed to process watch event\",\n                error,\n                attributes: { path: relPath },\n              });\n            }\n          });\n        };\n\n        // Listen for file changes\n        this.watcher.on(\"change\", (relPath) => processWatchEvent(\"change\", relPath));\n\n        return op.success();\n      } catch (error) {\n        return op.failure({ code: \"Unknown\", cause: error });\n      }\n    });\n  }\n\n  checkSessionToken(id: string, sessionToken: string) {\n    return this.telemetry.trace(\"checkSessionToken()\", (span) => {\n      span.setAttributes({ id });\n\n      try {\n        const [errGet, process] = this.getAgentProcess(id);\n        if (errGet) return op.failure(errGet);\n\n        if (process.sessionToken !== sessionToken) {\n          return op.failure({\n            code: \"Forbidden\",\n            message: `Invalid session token for agent process '${id}'.`,\n          });\n        }\n\n        return op.success(process);\n      } catch (error) {\n        return op.failure({ code: \"Unknown\", cause: error });\n      }\n    });\n  }\n\n  getAgentProcess(id: string) {\n    return this.telemetry.trace(\"getAgentProcess()\", (span) => {\n      span.setAttributes({ id });\n\n      try {\n        const process = this.agentProcesses.get(id);\n        if (!process)\n          return op.failure({ code: \"NotFound\", message: `Agent process '${id}' not found.` });\n        return op.success(process);\n      } catch (error) {\n        return op.failure({\n          code: \"Unknown\",\n          message: `Failed to obtain agent process '${id}'.`,\n          cause: error,\n        });\n      }\n    });\n  }\n\n  server = {\n    //\n    available: async () =>\n      await this.telemetry.trace(\"server.available()\", async () => {\n        try {\n          const [errIndex, buildIndex] = await importServerBuild({\n            projectDirectory: this.options.projectDirectory,\n            noCache: true,\n          });\n          if (errIndex) return op.failure(errIndex);\n          return op.success(\n            Object.entries(buildIndex).map(([name, { definition }]) => ({\n              name,\n              scopeKeys: definition?.scope?.schema?.shape\n                ? Object.keys(definition.scope.schema.shape)\n                : [],\n            })),\n          );\n        } catch (error) {\n          return op.failure({ code: \"Unknown\", cause: error });\n        }\n      }),\n    //\n    ping: () => {\n      return this.telemetry.trace(\"server.ping()\", () => {\n        try {\n          const [errStats, stats] = this.#processStats.get();\n          if (errStats) return op.failure(errStats);\n          return op.success({\n            lifeVersion: packageJson.version,\n            nodeVersion: process.version,\n            // biome-ignore lint/style/noNonNullAssertion: cannot be null here\n            startedAt: this.#startedAt!,\n            ...(stats ?? {}),\n          });\n        } catch (error) {\n          return op.failure({\n            code: \"Unknown\",\n            message: \"Failed to get server info\",\n            cause: error,\n          });\n        }\n      });\n    },\n    //\n    processes: () =>\n      this.telemetry.trace(\"server.processes()\", () => {\n        try {\n          return op.success(\n            Array.from(this.agentProcesses.values()).map((process) => ({\n              id: process.id,\n              name: process.definition.name,\n              status: process.status,\n              lastStartedAt: process.lastStartedAt,\n            })),\n          );\n        } catch (error) {\n          return op.failure({ code: \"Unknown\", cause: error });\n        }\n      }),\n    // info\n    info: () =>\n      this.telemetry.trace(\"server.info()\", () => {\n        try {\n          const [errStats, stats] = this.#processStats.get();\n          if (errStats) return op.failure(errStats);\n          return op.success({\n            lifeVersion: packageJson.version,\n            nodeVersion: process.version,\n            // biome-ignore lint/style/noNonNullAssertion: cannot be null here\n            startedAt: this.#startedAt!,\n            ...(stats ?? {}),\n          });\n        } catch (error) {\n          return op.failure({\n            code: \"Unknown\",\n            message: \"Failed to get server info\",\n            cause: error,\n          });\n        }\n      }),\n  };\n\n  #createProcessErrorHint(initialError: LifeError, id: string, name: string, message: string) {\n    const formattedName = chalk.bold(\n      `${chalk.italic(name)} (${id.replace(\"agent_\", \"\").slice(0, 6)})`,\n    );\n    const hint = `${message}. See agent ${formattedName} logs for more details.`;\n    const hintError = lifeError({\n      code: initialError.code,\n      message: hint,\n    });\n    hintError.stack = undefined;\n    return hintError;\n  }\n\n  agent = {\n    //\n    create: async ({ id, name }: { id?: string; name: string }) => {\n      return await this.telemetry.trace(\"agent.create()\", async (span) => {\n        try {\n          // Ensure the request agent exists\n          const [errIndex, buildIndex] = await importServerBuild({\n            projectDirectory: this.options.projectDirectory,\n            noCache: true,\n          });\n          if (errIndex) return op.failure(errIndex);\n          const build = buildIndex[name as keyof typeof buildIndex];\n          if (!build)\n            return op.failure({\n              code: \"NotFound\",\n              message: `Agent '${name}' not found.`,\n              isPublic: true,\n            });\n\n          // Obtain the final agent config\n          const [errConfig, config] = prepareAgentConfig(\n            build.definition.config,\n            build.globalConfigs,\n          );\n          if (errConfig) return op.failure(errConfig);\n\n          // Create the agent process\n          const process = new AgentProcessClient({\n            id,\n            definition: build.definition,\n            config: config.server,\n            server: this,\n          });\n          span.setAttributes({ id: process.id, name });\n\n          // Add the agent process to the map\n          this.agentProcesses.set(process.id, process);\n\n          return op.success({ id: process.id, clientConfig: config.client });\n        } catch (error) {\n          return op.failure({\n            code: \"Unknown\",\n            message: `Failed to create agent process '${name}'.`,\n            cause: error,\n          });\n        }\n      });\n    },\n    //\n    start: async ({ id, request, scope }: { id: string; request: Request; scope: AgentScope }) => {\n      return await this.telemetry.trace(\"agent.start()\", async (span) => {\n        span.setAttributes({ id });\n\n        try {\n          const [errGet, process] = this.getAgentProcess(id);\n          if (errGet) return op.failure(errGet);\n\n          // Ensure the request emitter has access to this agent and scope\n          if (!(await process.definition.scope.hasAccess({ request, scope }))) {\n            return op.failure({\n              code: \"Forbidden\",\n              message: `Access denied for agent '${process.definition.name}'.`,\n              isPublic: true,\n            });\n          }\n\n          // Generate a room name for the WebRTC session\n          const roomName = newId(\"room\");\n\n          // Generate transport tokens for both the agent and the user\n          const transportProvider = process.config.transport.provider;\n          const transportGetToken =\n            transportProviderGetToken[transportProvider as keyof typeof transportProviderGetToken];\n          const [errAgentToken, agentToken] = await transportGetToken(\n            process.config.transport,\n            roomName,\n            \"agent\",\n          );\n          if (errAgentToken) return op.failure(errAgentToken);\n          const [errUserToken, userToken] = await transportGetToken(\n            process.config.transport,\n            roomName,\n            \"user\",\n          );\n          if (errUserToken) return op.failure(errUserToken);\n\n          // Start the process\n          const [errStart] = await process.start({\n            scope,\n            transportRoom: { name: roomName, token: agentToken },\n          });\n\n          if (errStart) {\n            const hintError = this.#createProcessErrorHint(\n              errStart,\n              process.id,\n              process.definition.name,\n              \"Error while starting agent process\",\n            );\n            return op.failure(hintError);\n          }\n\n          return op.success({\n            sessionToken: process.sessionToken,\n            transportRoom: { name: roomName, token: userToken },\n          });\n        } catch (error) {\n          return op.failure({\n            code: \"Unknown\",\n            message: `Failed to start agent process '${id}'.`,\n            cause: error,\n          });\n        }\n      });\n    },\n    //\n    stop: async ({ id, sessionToken }: { id: string; sessionToken: string }) => {\n      return await this.telemetry.trace(\"agent.stop()\", async (span) => {\n        span.setAttributes({ id });\n\n        try {\n          // Get the agent process\n          const [errGet, process] = this.getAgentProcess(id);\n          if (errGet) return op.failure(errGet);\n\n          // Ensure the session token is valid\n          const [errCheckSessionToken] = await this.checkSessionToken(id, sessionToken);\n          if (errCheckSessionToken) return op.failure(errCheckSessionToken);\n\n          // Track timing for stopping the process\n\n          // Stop the process\n          const [errStop] = await process.stop();\n          if (errStop) {\n            const hintError = this.#createProcessErrorHint(\n              errStop,\n              process.id,\n              process.definition.name,\n              \"Error while stopping agent process\",\n            );\n            return op.failure(hintError);\n          }\n\n          // Remove the process from the map\n          this.agentProcesses.delete(process.id);\n\n          return op.success();\n        } catch (error) {\n          return op.failure({\n            code: \"Unknown\",\n            message: `Failed to stop agent process '${id}'.`,\n            cause: error,\n          });\n        }\n      });\n    },\n    //\n    restart: async ({ id, sessionToken }: { id: string; sessionToken: string }) => {\n      return await this.telemetry.trace(\"agent.restart()\", async (span) => {\n        span.setAttributes({ id });\n\n        try {\n          // Get the agent process\n          const [errGet, process] = this.getAgentProcess(id);\n          if (errGet) return op.failure(errGet);\n\n          // Ensure the session token is valid\n          const [errCheckSessionToken] = await this.checkSessionToken(id, sessionToken);\n          if (errCheckSessionToken) return op.failure(errCheckSessionToken);\n\n          // Track timing for restarting the process\n\n          // Restart the process\n          const [errRestart] = await process.restart();\n          if (errRestart) {\n            const hintError = this.#createProcessErrorHint(\n              errRestart,\n              process.id,\n              process.definition.name,\n              \"Error while restarting agent process\",\n            );\n            return op.failure(hintError);\n          }\n\n          return op.success();\n        } catch (error) {\n          return op.failure({\n            code: \"Unknown\",\n            message: `Failed to restart agent process '${id}'.`,\n            cause: error,\n          });\n        }\n      });\n    },\n    //\n    ping: async ({ id, sessionToken }: { id: string; sessionToken: string }) => {\n      return await this.telemetry.trace(\"agent.ping()\", async (span) => {\n        span.setAttributes({ id });\n\n        try {\n          // Get the agent process\n          const [errGet, process] = this.getAgentProcess(id);\n          if (errGet) return op.failure(errGet);\n\n          // Ensure the session token is valid\n          const [errCheckSessionToken] = await this.checkSessionToken(id, sessionToken);\n          if (errCheckSessionToken) return op.failure(errCheckSessionToken);\n\n          // Ping the process\n          const [errPing] = await process.ping();\n          if (errPing) {\n            const hintError = this.#createProcessErrorHint(\n              errPing,\n              process.id,\n              process.definition.name,\n              \"Error while pinging agent process\",\n            );\n            return op.failure(hintError);\n          }\n\n          return op.success(\"pong\");\n        } catch (error) {\n          return op.failure({\n            code: \"Unknown\",\n            message: `Failed to ping agent process '${id}'.`,\n            cause: error,\n          });\n        }\n      });\n    },\n    //\n    info: async ({ id, sessionToken }: { id: string; sessionToken: string }) => {\n      return await this.telemetry.trace(\"agent.info()\", async (span) => {\n        span.setAttributes({ id });\n\n        try {\n          // Get the agent process\n          const [errGet, process] = this.getAgentProcess(id);\n          if (errGet) return op.failure(errGet);\n\n          // Ensure the session token is valid\n          const [errCheckSessionToken] = await this.checkSessionToken(id, sessionToken);\n          if (errCheckSessionToken) return op.failure(errCheckSessionToken);\n\n          // Get the process stats\n          const [errStats, stats] = await process.getProcessStats();\n          if (errStats) {\n            const hintError = this.#createProcessErrorHint(\n              errStats,\n              process.id,\n              process.definition.name,\n              \"Error while obtaining agent process stats\",\n            );\n            return op.failure(hintError);\n          }\n\n          return op.success({\n            id,\n            name: process.definition.name,\n            scope: process.lastScope,\n            status: process.status,\n            lastStartedAt: process.lastStartedAt,\n            lastSeenAt: process.lastSeenAt,\n            restartCount: process.restartCount,\n            ...(stats ?? {}),\n          });\n        } catch (error) {\n          return op.failure({\n            code: \"Unknown\",\n            message: `Failed to get info for agent process '${id}'.`,\n            cause: error,\n          });\n        }\n      });\n    },\n  };\n}\n","import { AccessToken } from \"livekit-server-sdk\";\nimport * as op from \"@/shared/operation\";\nimport type { GetTokenFunction } from \"@/transport/auth\";\n\nexport const getToken: GetTokenFunction<\"livekit\"> = async (config, roomName, participantId) => {\n  try {\n    // Create a token with the room name and participant name\n    const token = new AccessToken(config.apiKey, config.apiSecret, {\n      identity: participantId,\n    });\n\n    token.addGrant({\n      roomJoin: true,\n      room: roomName,\n      canPublish: true,\n      canSubscribe: true,\n      canPublishData: true,\n      roomCreate: true,\n    });\n\n    return op.success(await token.toJwt());\n  } catch (error) {\n    return op.failure({ code: \"Unknown\", cause: error });\n  }\n};\n","import type * as op from \"@/shared/operation\";\nimport type { nodeTransportProviders } from \"./client/node\";\nimport { getToken } from \"./providers/livekit/auth\";\n\nexport type GetTokenFunction<ProviderId extends keyof typeof nodeTransportProviders> = (\n  config: ConstructorParameters<(typeof nodeTransportProviders)[ProviderId]>[0],\n  roomName: string,\n  participantId: string,\n) => Promise<op.OperationResult<string>>;\n\nexport const transportProviderGetToken = {\n  livekit: getToken,\n} as const satisfies Record<\n  keyof typeof nodeTransportProviders,\n  GetTokenFunction<keyof typeof nodeTransportProviders>\n>;\n","import { type ChildProcess, fork } from \"node:child_process\";\nimport { randomBytes } from \"node:crypto\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { type BirpcReturn, createBirpc } from \"birpc\";\nimport chalk from \"chalk\";\nimport type z from \"zod\";\nimport type { agentServerConfig } from \"@/agent/server/config\";\nimport type { AgentDefinition, AgentScope } from \"@/agent/server/types\";\nimport { canon, type SerializableValue } from \"@/shared/canon\";\nimport { isLifeError, lifeError } from \"@/shared/error\";\nimport * as op from \"@/shared/operation\";\nimport { newId } from \"@/shared/prefixed-id\";\nimport type { TelemetryClient } from \"@/telemetry/clients/base\";\nimport { createTelemetryClient } from \"@/telemetry/clients/node\";\nimport type { LifeServer } from \"..\";\nimport type { ChildMethods, ParentMethods } from \"./types\";\n\nexport class AgentProcessClient {\n  readonly id: string;\n  readonly sessionToken = randomBytes(32).toString(\"base64url\");\n  readonly config: z.output<typeof agentServerConfig.schema>;\n  readonly definition: AgentDefinition;\n  readonly #server: LifeServer;\n  readonly #telemetry: TelemetryClient;\n\n  lastScope: AgentScope | null = null;\n  lastTransportRoom: { name: string; token: string } | null = null;\n\n  // Health infos\n  status: \"stopped\" | \"stopping\" | \"starting\" | \"running\" = \"stopped\";\n  lastStartedAt?: number;\n  lastSeenAt?: number;\n  restartCount = 0;\n  nodeProcess: ChildProcess | null = null;\n\n  // Stdio output captured immediately after fork\n  stdLines: string[] = [];\n  #stdLineCallbacks: Array<(line: string) => void> = [];\n\n  //\n  readonly #pluginsContexts = {} as Record<string, SerializableValue>;\n  #process: BirpcReturn<ChildMethods, ParentMethods> | null = null;\n  #pingInterval: NodeJS.Timeout | null = null;\n  #restartTimeout: NodeJS.Timeout | null = null;\n  #readyResolve: (() => void) | null = null;\n  #handleProcessExitCallback: ((code: number | null, signal: string | null) => void) | null = null;\n\n  constructor({\n    id,\n    definition,\n    config,\n    server,\n  }: {\n    id?: string;\n    definition: AgentDefinition;\n    config: z.output<typeof agentServerConfig.schema>;\n    server: LifeServer;\n  }) {\n    this.id = id ?? newId(\"agent\");\n    this.definition = definition;\n    this.config = config;\n    this.#server = server;\n\n    // Initialize telemetry client with scope \"server.agentProcess\"\n    this.#telemetry = createTelemetryClient(\"agent.process\", { agentId: this.id });\n  }\n\n  // Wrapper function, to log errors to telemetry\n  async start({\n    scope,\n    transportRoom,\n  }: {\n    scope: AgentScope;\n    transportRoom: { name: string; token: string };\n  }) {\n    const [error, result] = await this._start({ scope, transportRoom });\n    if (error) {\n      this.#telemetry.log.error({ message: \"Failed to start agent process.\", error });\n      return op.failure(error);\n    }\n    return op.success(result);\n  }\n\n  async _start({\n    scope,\n    transportRoom,\n  }: {\n    scope: AgentScope;\n    transportRoom: { name: string; token: string };\n  }) {\n    return await this.#telemetry.trace(\"AgentProcessClient.start()\", async (span) => {\n      span.setAttributes({ agentId: this.id });\n\n      try {\n        // Return early if the agent is already running or starting\n        if (this.status === \"running\" || this.status === \"starting\") {\n          span.log.warn({\n            message: `start() was called on an already '${this.status}' agent process.`,\n          });\n          return op.success();\n        }\n\n        // Error if the agent is stopping\n        if (this.status === \"stopping\") {\n          await this.stop();\n          return op.failure({\n            code: \"Conflict\",\n            message: `Cannot start agent in '${this.status}' state.`,\n            isPublic: true,\n          });\n        }\n\n        // Update the status\n        this.status = \"starting\";\n        const waitReady = new Promise<void>((resolve) => (this.#readyResolve = resolve));\n\n        // Update the scope and transport room\n        this.lastScope = scope;\n        this.lastTransportRoom = transportRoom;\n\n        // Fork the child process\n        const currentDir = path.dirname(fileURLToPath(import.meta.url));\n\n        // Since we're running from TypeScript source, but need to fork the compiled child,\n        // we need to resolve to the dist directory\n        const childPath = path.join(\n          currentDir,\n          \"..\",\n          \"dist\",\n          \"server\",\n          \"agent-process\",\n          \"process.mjs\",\n        );\n        this.nodeProcess = fork(childPath, [], {\n          serialization: \"json\",\n          silent: true,\n          cwd: path.resolve(this.#server.options.projectDirectory),\n          // Disable anonymous telemetry in the child process (managed by the parent)\n          env: { ...process.env, LIFE_TELEMETRY_DISABLED: \"true\" },\n        });\n\n        // Capture stdout/stderr immediately to avoid losing output\n        for (const channel of [\"stdout\", \"stderr\"] as const) {\n          this.nodeProcess[channel]?.on(\"data\", (data: Buffer) => {\n            const lines = data\n              .toString()\n              .split(\"\\n\")\n              .filter((line) => line.trim());\n            this.stdLines.push(...lines);\n            for (const line of lines) {\n              for (const callback of this.#stdLineCallbacks) {\n                callback(line);\n              }\n            }\n          });\n        }\n\n        // Set up RPC channel with the child process (after child is ready)\n        this.#process = createBirpc<ChildMethods, ParentMethods>(\n          {\n            syncContext: (params) => {\n              try {\n                this.#pluginsContexts[params.pluginName] = params.context;\n                this.lastSeenAt = Date.now();\n                return op.success();\n              } catch (error) {\n                return op.failure({ code: \"Unknown\", cause: error });\n              }\n            },\n            syncTelemetry: (signal) => {\n              try {\n                // Forward the signal to the client telemetry client\n                this.#telemetry._unsafeSendSignal(signal);\n                return op.success();\n              } catch (error) {\n                return op.failure({ code: \"Unknown\", cause: error });\n              }\n            },\n            ready: () => {\n              try {\n                this.#readyResolve?.();\n                return op.success();\n              } catch (error) {\n                return op.failure({ code: \"Unknown\", cause: error });\n              }\n            },\n          },\n          {\n            post: (data) => this.nodeProcess?.send(data),\n            on: (fn) => this.nodeProcess?.on(\"message\", fn),\n            serialize: (data) => {\n              const [error, result] = canon.serialize(data);\n              if (error) {\n                throw lifeError({\n                  code: \"Validation\",\n                  message:\n                    \"Failed to serialize data from server to agent process. The message has been discarded.\",\n                  attributes: { agentId: this.id, agentName: this.definition.name, data },\n                  cause: error,\n                });\n              }\n              return result;\n            },\n            deserialize: (data) => {\n              const [error, result] = canon.deserialize(data);\n              if (error) {\n                throw lifeError({\n                  code: \"Validation\",\n                  message:\n                    \"Failed to deserialize data from server to agent process. The message has been discarded.\",\n                  attributes: { agentId: this.id, agentName: this.definition.name, data },\n                  cause: error,\n                });\n              }\n              return result;\n            },\n            onFunctionError: (error) => {\n              this.#telemetry.log.error(\n                isLifeError(error)\n                  ? error\n                  : lifeError({\n                      code: \"Unknown\",\n                      cause: error,\n                    }),\n              );\n            },\n            onGeneralError: (error) => {\n              this.#telemetry.log.error(\n                isLifeError(error)\n                  ? error\n                  : lifeError({\n                      code: \"Unknown\",\n                      cause: error,\n                    }),\n              );\n            },\n            // Disable Birpc timeout\n            onTimeoutError: () => true,\n            timeout: -1,\n          },\n        );\n\n        // Initialize the child process\n        const [errInit] = await this.#process.init({ agentId: this.id });\n        if (errInit) {\n          await this.stop();\n          return op.failure(errInit);\n        }\n\n        // Handle child process exit\n        this.#handleProcessExitCallback = this.handleProcessExit.bind(this);\n        this.nodeProcess.on(\"exit\", this.#handleProcessExitCallback);\n\n        // Start the agent server in the child process\n        const [errStart] = await this.#process.start({\n          id: this.id,\n          name: this.definition.name,\n          scope: this.lastScope,\n          transportRoom,\n          pluginsContexts: this.#pluginsContexts,\n          isRestart: this.restartCount > 0,\n        });\n        if (errStart) {\n          await this.stop();\n          return op.failure(errStart);\n        }\n\n        // Wait for the agent to be ready\n        await waitReady;\n\n        // Start health check\n        this.startHealthCheck();\n\n        // Update the status\n        this.status = \"running\";\n        this.lastStartedAt = Date.now();\n        this.lastSeenAt = Date.now();\n        this.#readyResolve = null;\n\n        // Return that the agent was started successfully\n        return op.success();\n      } catch (error) {\n        await this.stop();\n        return op.failure({ code: \"Unknown\", cause: error });\n      }\n    });\n  }\n\n  async stop() {\n    const [error, result] = await this._stop();\n    if (error) {\n      this.#telemetry.log.error({ message: \"Failed to stop agent process.\", error });\n      return op.failure(error);\n    }\n    return op.success(result);\n  }\n\n  async _stop() {\n    return await this.#telemetry.trace(\"AgentProcessClient.stop()\", async (span) => {\n      span.setAttributes({ agentId: this.id });\n\n      try {\n        // Return early if the agent is stopped or already stopping\n        if (this.status === \"stopped\" || this.status === \"stopping\") return op.success();\n\n        // Update the status\n        this.status = \"stopping\";\n\n        // Clear any pending restart\n        if (this.#restartTimeout) {\n          clearTimeout(this.#restartTimeout);\n          this.#restartTimeout = null;\n        }\n\n        // Stop health check\n        this.stopHealthCheck();\n\n        // Stop listening for child process exit\n        if (this.#handleProcessExitCallback)\n          this.nodeProcess?.off(\"exit\", this.#handleProcessExitCallback);\n\n        // Gracefully stop the agent (10s timeout)\n        if (this.#process) {\n          const [errStop] = await Promise.race([\n            this.#process.stop(),\n            new Promise<op.OperationResult<void>>((resolve) =>\n              setTimeout(() => resolve(op.failure({ code: \"Timeout\" })), 10_000),\n            ),\n          ]);\n          if (errStop) {\n            span.log.warn({\n              message: `Agent process '${this.definition.name}' did not shutdown gracefully, will force kill. (${errStop ? \"see error\" : \"timeout\"})`,\n              error: errStop,\n            });\n          }\n        }\n\n        // Terminate the child process\n        this.nodeProcess?.kill(\"SIGKILL\");\n\n        // Update the status\n        this.status = \"stopped\";\n        this.nodeProcess = null;\n        this.lastStartedAt = undefined;\n        this.lastSeenAt = undefined;\n\n        // Clear stdio buffer and callbacks\n        this.stdLines = [];\n        this.#stdLineCallbacks = [];\n\n        // Return that the agent was stopped successfully\n        return op.success();\n      } catch (error) {\n        // Uncaught error\n        if (this.nodeProcess && this.nodeProcess.exitCode === null)\n          this.nodeProcess.kill(\"SIGKILL\");\n        this.status = \"stopped\";\n        this.nodeProcess = null;\n        this.lastStartedAt = undefined;\n        this.lastSeenAt = undefined;\n        return op.failure({ code: \"Unknown\", cause: error });\n      }\n    });\n  }\n\n  async restart() {\n    const [error, result] = await this._restart();\n    if (error) {\n      this.#telemetry.log.error({ message: \"Failed to restart agent process.\", error });\n      return op.failure(error);\n    }\n    return op.success(result);\n  }\n\n  async _restart() {\n    return await this.#telemetry.trace(\"AgentProcessClient.restart()\", async (span) => {\n      span.setAttributes({ agentId: this.id });\n\n      try {\n        const [errStop] = await this.stop();\n        if (errStop) return op.failure(errStop);\n        if (!(this.lastScope && this.lastTransportRoom)) {\n          return op.failure({\n            code: \"Conflict\",\n            message: \"Agent must be started before it can be restarted.\",\n            isPublic: true,\n          });\n        }\n        this.restartCount++;\n        const [errStart] = await this.start({\n          scope: this.lastScope,\n          transportRoom: this.lastTransportRoom,\n        });\n        if (errStart) return op.failure(errStart);\n        return op.success();\n      } catch (error) {\n        return op.failure({ code: \"Unknown\", cause: error });\n      }\n    });\n  }\n\n  // Start pinging the agent every 10 seconds\n  startHealthCheck() {\n    this.#pingInterval = setInterval(async () => {\n      if (this.#process && this.status === \"running\") {\n        // Send a ping to the agent\n        const [errPing] = await Promise.race([\n          this.#process?.ping(),\n          new Promise<op.OperationResult<void>>((resolve) =>\n            setTimeout(() => resolve(op.failure({ code: \"Timeout\" })), 3000),\n          ),\n        ]);\n\n        // In case of error, kill the agent and restart\n        if (errPing) {\n          this.#telemetry.log.error({\n            message: `Health check failed for agent '${this.definition.name}'. Will kill and restart.`,\n            error: errPing,\n          });\n          if (this.nodeProcess) this.nodeProcess.kill(\"SIGKILL\");\n          this.lastSeenAt = undefined;\n        }\n\n        // Otherwise, update the last seen at\n        else this.lastSeenAt = Date.now();\n      }\n    }, 10_000);\n  }\n\n  // Stop pinging the agent\n  stopHealthCheck() {\n    if (this.#pingInterval) {\n      clearInterval(this.#pingInterval);\n      this.#pingInterval = null;\n    }\n  }\n\n  handleProcessExit(code: number | null, signal: string | null) {\n    // Figure whether a restart is needed\n    const wasRunning = this.status === \"running\" || this.status === \"starting\";\n    const needRestart = wasRunning && this.restartCount < 3;\n    let restartDelay = 0;\n    if (needRestart && this.restartCount > 0) {\n      restartDelay = Math.min(1000 * 2 ** this.restartCount, 30_000);\n    }\n\n    // Telemetry\n    const restartDelayMessage = restartDelay > 0 ? `in ${restartDelay}ms.` : \"immediately.\";\n    const restartMessage = chalk.bold(\n      needRestart ? `Restarting ${restartDelayMessage}` : \"Not restarting.\",\n    );\n    this.#server.telemetry.log.error({\n      message: `Agent process crashed. ${restartMessage}`,\n      attributes: { name: this.definition.name, id: this.id, code, signal },\n    });\n\n    // Update the status\n    this.status = \"stopped\";\n    this.nodeProcess = null;\n    this.lastStartedAt = undefined;\n    this.lastSeenAt = undefined;\n\n    // Stop health check\n    this.stopHealthCheck();\n\n    // Schedule a restart if needed\n    if (needRestart) {\n      if (restartDelay > 0) {\n        this.#restartTimeout = setTimeout(async () => {\n          await this.restart();\n        }, restartDelay);\n      } else {\n        // Restart immediately\n        this.restart();\n      }\n    }\n  }\n\n  async getProcessStats() {\n    const [error, result] = await this._getProcessStats();\n    if (error) {\n      this.#telemetry.log.error({ message: \"Failed to get agent process stats.\", error });\n      return op.failure(error);\n    }\n    return op.success(result);\n  }\n\n  async _getProcessStats() {\n    if (!this.#process || this.status !== \"running\")\n      return op.failure({ code: \"Validation\", message: \"Agent is not running.\", isPublic: true });\n    try {\n      const [errStats, stats] = await this.#process.getProcessStats();\n      if (errStats) return op.failure(errStats);\n      return op.success(stats);\n    } catch (error) {\n      return op.failure({ code: \"Unknown\", cause: error });\n    }\n  }\n\n  async ping() {\n    const [error, result] = await this._ping();\n    if (error) {\n      this.#telemetry.log.error({ message: \"Failed to ping agent process.\", error });\n      return op.failure(error);\n    }\n    return op.success(result);\n  }\n\n  async _ping() {\n    try {\n      if (!this.#process || this.status !== \"running\")\n        return op.failure({ code: \"Validation\", message: \"Agent is not running.\", isPublic: true });\n      const [errPing] = await this.#process.ping();\n      if (errPing) return op.failure(errPing);\n      return op.success();\n    } catch (error) {\n      return op.failure({ code: \"Unknown\", cause: error });\n    }\n  }\n\n  onStdLine(callback: (line: string) => void): () => void {\n    this.#stdLineCallbacks.push(callback);\n    return () => {\n      const index = this.#stdLineCallbacks.indexOf(callback);\n      if (index > -1) {\n        this.#stdLineCallbacks.splice(index, 1);\n      }\n    };\n  }\n}\n","import { serve } from \"@hono/node-server\";\nimport { createNodeWebSocket } from \"@hono/node-ws\";\nimport chalk from \"chalk\";\nimport { Hono } from \"hono\";\nimport { bodyLimit } from \"hono/body-limit\";\nimport { cors } from \"hono/cors\";\nimport type { WSMessageReceive } from \"hono/ws\";\nimport z from \"zod\";\nimport { themeChalk } from \"@/cli/utils/theme\";\nimport { AsyncQueue } from \"@/shared/async-queue\";\nimport { canon, type SerializableValue } from \"@/shared/canon\";\nimport { type LifeErrorUnion, obfuscateLifeError } from \"@/shared/error\";\nimport { ns } from \"@/shared/nanoseconds\";\nimport * as op from \"@/shared/operation\";\nimport type { MaybePromise } from \"@/shared/types\";\nimport type { LifeServer } from \"..\";\nimport { definition } from \"./definition\";\nimport { getHandlers } from \"./handlers\";\nimport {\n  type LifeApiCallDefinition,\n  type LifeApiCallHandler,\n  type LifeApiCallInput,\n  type LifeApiCastDefinition,\n  type LifeApiCastHandler,\n  type LifeApiCastInput,\n  type LifeApiHandlerDefinition,\n  type LifeApiStreamDefinition,\n  type LifeApiStreamHandler,\n  type LifeApiStreamInput,\n  type LifeApiStreamQueueEvent,\n  type LifeApiStreamSendFunction,\n  lifeApiBaseInputSchema,\n  lifeApiCallInputSchema,\n  lifeApiCastInputSchema,\n  lifeApiStreamInputSchema,\n} from \"./types\";\n\nexport class LifeApi {\n  app = new Hono();\n  server: LifeServer;\n  #honoServer: ReturnType<typeof serve> | null = null;\n  #injectWebSocket: ReturnType<typeof createNodeWebSocket>[\"injectWebSocket\"];\n  #streamHandlersQueues = new Map<\n    string,\n    AsyncQueue<LifeApiStreamQueueEvent<LifeApiStreamDefinition>>\n  >();\n\n  constructor(server: LifeServer) {\n    this.server = server;\n\n    // Setup CORS policy\n    this.app.use(\n      \"*\",\n      cors({\n        credentials: true,\n        origin: \"*\",\n      }),\n    );\n\n    // Setup body limit policy (50kb)\n    this.app.use(\n      \"*\",\n      bodyLimit({\n        maxSize: 50 * 1024,\n        onError: (c) =>\n          c.json(op.failure({ code: \"Validation\", message: \"Request body is too large.\" }), 413),\n      }),\n    );\n\n    this.app.get(\"/api\", (c) =>\n      c.text(\"Hello Life.\", 200, {\n        \"Content-Type\": \"application/json\",\n      }),\n    );\n\n    // Setup HTTP requests handler\n    this.app.post(\"/api/http\", async (c) => {\n      const { response, error } = await this.handleRequest({\n        type: \"http\",\n        request: c.req.raw,\n        inputStr: await c.req.text(),\n      });\n\n      return c.text(response, (error?.httpEquivalent as 200) ?? 200, {\n        \"Content-Type\": \"application/json\",\n      });\n    });\n\n    // Setup WebSocket messages handler\n    const { injectWebSocket, upgradeWebSocket } = createNodeWebSocket({ app: this.app });\n    this.#injectWebSocket = injectWebSocket;\n    this.app.get(\n      \"/api/ws\",\n      upgradeWebSocket((c) => ({\n        onMessage: async (event, ws) => {\n          const { response } = await this.handleRequest({\n            type: \"ws\",\n            inputStr: event.data,\n            request: c.req.raw,\n            send: (message) => ws.send(message),\n          });\n          ws.send(response);\n        },\n        onClose: () => {\n          this.server.telemetry.log.info({ message: \"WebSocket connection closed.\" });\n        },\n        onOpen: () => {\n          this.server.telemetry.log.info({ message: \"WebSocket connection opened.\" });\n        },\n        onError: () => {\n          this.server.telemetry.log.error({ message: \"WebSocket error.\" });\n        },\n      })),\n    );\n\n    // Start stream handlers\n    for (const [handlerId, handlerDef] of Object.entries(definition)) {\n      if (handlerDef.type === \"stream\") {\n        const queue = new AsyncQueue<LifeApiStreamQueueEvent<LifeApiStreamDefinition>>();\n        this.#streamHandlersQueues.set(handlerId, queue);\n        const handler = getHandlers(this.server.telemetry)[\n          handlerId as keyof ReturnType<typeof getHandlers>\n        ] as LifeApiStreamHandler<LifeApiStreamDefinition>;\n        handler.onStart({\n          api: this,\n          queue,\n        });\n      }\n    }\n  }\n\n  async start() {\n    return await this.server.telemetry.trace(\"start()\", () => {\n      try {\n        this.#honoServer = serve({\n          fetch: this.app.fetch,\n          port: Number.parseInt(this.server.options.port, 10),\n          hostname: this.server.options.host,\n        });\n        this.#injectWebSocket?.(this.#honoServer);\n\n        return op.success();\n      } catch (error) {\n        return op.failure({ code: \"Unknown\", cause: error });\n      }\n    });\n  }\n\n  async stop() {\n    return await this.server.telemetry.trace(\"stop()\", async () => {\n      try {\n        await new Promise<void>((resolve, reject) => {\n          const timeoutId = setTimeout(() => {\n            this.server.telemetry.log.error({\n              message: \"API server took longer than 10 seconds to close (timeout).\",\n            });\n            reject(new Error(\"API server took longer than 10 seconds to close (timeout).\"));\n          }, 10_000);\n          if (!this.#honoServer) return resolve();\n          this.#honoServer.close((err) => {\n            clearTimeout(timeoutId);\n            if (err) reject(err);\n            else resolve();\n          });\n        });\n        this.#honoServer = null;\n\n        return op.success();\n      } catch (error) {\n        return op.failure({ code: \"Unknown\", cause: error });\n      }\n    });\n  }\n\n  async handleRequest({\n    type,\n    inputStr,\n    request,\n    send,\n  }: {\n    type: \"http\" | \"ws\";\n    inputStr: string | WSMessageReceive;\n    request: Request;\n    send?: (message: string) => void;\n  }): Promise<{ response: string; error?: LifeErrorUnion | null }> {\n    return await this.server.telemetry.trace(\"handleRequest()\", async (span) => {\n      span.setAttributes({ inputStr });\n\n      // Helper to sanitize the result (public and stringified result)\n      const sanitizeResult = (result: op.OperationResult<unknown>) => {\n        const [error, data] = result;\n        const resultPublic = error ? op.failure(obfuscateLifeError(error)) : op.success(data);\n        const [errorCanon, response] = canon.stringify(\n          resultPublic as unknown as SerializableValue,\n        );\n        if (errorCanon)\n          return sanitizeResult(\n            op.failure({ code: \"Internal\", message: \"Failed to serialize response.\" }),\n          );\n        return { response, error };\n      };\n\n      // Helper to prepare the response\n      let handlerId = \"(unknown)\";\n      const prepareResponse = (result: op.OperationResult<unknown>) => {\n        // Log the request\n        const [error] = result;\n        const status = error ? (error.httpEquivalent ?? 500) : 200;\n        let statusColor = chalk.gray;\n        if (status >= 400) statusColor = themeChalk.level.error;\n        else if (status >= 300) statusColor = themeChalk.level.info;\n        else if (status >= 200) statusColor = chalk.green;\n        const logFn =\n          status >= 400 ? this.server.telemetry.log.error : this.server.telemetry.log.info;\n        span.end();\n        const durationMs = ns.toMs(span.getData().duration);\n        logFn({\n          message: `Request ${type === \"http\" ? `${statusColor.bold(status)}` : \"\"} /${handlerId} in ${chalk.bold(`${durationMs > 0 ? durationMs : \"<0\"}ms.`)}`,\n          error,\n        });\n\n        // Log the raw input if the request failed\n        if (status >= 400) {\n          this.server.telemetry.log.debug({\n            message: `Failed request raw input: ${(typeof inputStr === \"string\" ? inputStr : \"Non-string data.\") ?? \"No data.\"}`,\n          });\n        }\n\n        // Return the sanitized result\n        return sanitizeResult(result);\n      };\n\n      // Process the message\n      try {\n        // Ensure input is a string\n        if (typeof inputStr !== \"string\")\n          return prepareResponse(\n            op.failure({\n              code: \"Validation\",\n              message: `${type === \"ws\" ? \"WebSocket message\" : \"HTTP request body\"} must be a string.`,\n            }),\n          );\n\n        // Try to deserialize the data\n        const [errCanon, inputRaw] = canon.parse(inputStr);\n        if (errCanon) return prepareResponse(op.failure(errCanon));\n\n        // Ensure the message is a valid input object\n        const { data: rawInput, error: rawInputError } = lifeApiBaseInputSchema.safeParse(inputRaw);\n        if (rawInputError)\n          return prepareResponse(\n            op.failure({\n              code: \"Validation\",\n              message: `Input object must contain a 'handlerId' field.`,\n            }),\n          );\n\n        // Ensure the handlerId is valid\n        const handlerDef = definition[\n          rawInput.handlerId as keyof typeof definition\n        ] as unknown as LifeApiHandlerDefinition;\n        if (!handlerDef) {\n          handlerId = `${rawInput.handlerId} (unknown)`;\n          return prepareResponse(\n            op.failure({\n              code: \"Validation\",\n              message: `Input object 'type' key must be one of the following: ${Object.keys(getHandlers(this.server.telemetry)).join(\", \")}`,\n            }),\n          );\n        }\n        handlerId = rawInput.handlerId;\n\n        // Validate the input\n        let schema: z.ZodObject;\n        if (handlerDef.type === \"stream\") schema = lifeApiStreamInputSchema;\n        else if (handlerDef.type === \"call\") schema = lifeApiCallInputSchema;\n        else if (handlerDef.type === \"cast\") schema = lifeApiCastInputSchema;\n        else throw new Error(\"Should never happen.\");\n        schema = schema.extend({\n          data: handlerDef.inputDataSchema ?? z.any(),\n        });\n        const { data: input, error: inputError } = schema.safeParse(rawInput);\n        if (inputError)\n          return prepareResponse(\n            op.failure({\n              code: \"Validation\",\n              message: `Invalid input shape for handler '${rawInput.handlerId}'.`,\n              cause: inputError,\n            }),\n          );\n\n        // Prepare a timeout promise\n        const timeoutPromise = new Promise<op.OperationResult<unknown>>((resolve) => {\n          setTimeout(() => {\n            resolve(\n              op.failure({\n                code: \"Timeout\",\n                message: `Request to handler '${rawInput.handlerId}' timed out.`,\n                isPublic: true,\n              }),\n            );\n          }, handlerDef.timeoutMs ?? 10_000);\n        });\n\n        // Handle the request based on the handler type\n        let outputPromise: MaybePromise<op.OperationResult<unknown>>;\n        if (handlerDef.type === \"call\") {\n          outputPromise = this.handleCallRequest({ input: input as LifeApiCallInput, request });\n        } else if (handlerDef.type === \"cast\") {\n          outputPromise = this.handleCastRequest({ input: input as LifeApiCastInput });\n        } else if (handlerDef.type === \"stream\") {\n          outputPromise = this.handleStreamRequest({\n            input: input as LifeApiStreamInput,\n            send: (data) => send?.(prepareResponse(data).response),\n          });\n        } else throw new Error(\"Should never happen.\");\n\n        // Capture whichever resolves first between timeout or result\n        const output = await Promise.race([timeoutPromise, outputPromise]);\n\n        // Return the prepared response\n        return prepareResponse(output);\n      } catch (error) {\n        return prepareResponse(op.failure({ code: \"Unknown\", cause: error }));\n      }\n    });\n  }\n\n  async handleCallRequest({ input, request }: { input: LifeApiCallInput; request: Request }) {\n    try {\n      const handler = getHandlers(this.server.telemetry)[\n        input.handlerId as keyof ReturnType<typeof getHandlers>\n      ] as LifeApiCallHandler<LifeApiCallDefinition>;\n      const result = await handler.onCall({ api: this, data: input.data as never, request });\n      return result;\n    } catch (error) {\n      return op.failure({ code: \"Unknown\", cause: error });\n    }\n  }\n\n  async handleCastRequest({ input }: { input: LifeApiCastInput }) {\n    try {\n      const handler = getHandlers(this.server.telemetry)[\n        input.handlerId as keyof ReturnType<typeof getHandlers>\n      ] as LifeApiCastHandler<LifeApiCastDefinition>;\n      const result = await handler.onCast({ api: this, data: input.data as never });\n      return result;\n    } catch (error) {\n      return op.failure({ code: \"Unknown\", cause: error });\n    }\n  }\n\n  handleStreamRequest({\n    input,\n    send,\n  }: {\n    input: LifeApiStreamInput;\n    send: LifeApiStreamSendFunction<LifeApiStreamDefinition>;\n  }) {\n    try {\n      const queue = this.#streamHandlersQueues.get(input.handlerId);\n      if (!queue) return op.failure({ code: \"Validation\", message: \"Stream queue not found.\" });\n      queue.push({\n        action: input.action === \"subscribe\" ? \"add\" : \"remove\",\n        subscriptionId: input.subscriptionId,\n        data: input.data as never,\n        send,\n      });\n      return op.success();\n    } catch (error) {\n      return op.failure({ code: \"Unknown\", cause: error });\n    }\n  }\n}\n","import z from \"zod\";\nimport { agentClientConfig } from \"@/agent/client/config\";\nimport { telemetrySignalSchema } from \"@/telemetry/schemas\";\nimport type { LifeApiDefinition } from \"./types\";\n\nexport const definition = {\n  \"telemetry.send-signal\": {\n    type: \"cast\",\n    protected: false,\n    inputDataSchema: z.object({\n      signal: telemetrySignalSchema,\n    }),\n  },\n  \"telemetry.signals-stream\": {\n    type: \"stream\",\n    protected: true,\n    outputDataSchema: telemetrySignalSchema,\n  },\n  \"agent.create\": {\n    type: \"call\",\n    protected: false,\n    inputDataSchema: z.object({\n      id: z.string().optional(),\n      name: z.string(),\n    }),\n    outputDataSchema: z.object({\n      id: z.string(),\n      clientConfig: agentClientConfig.schema,\n    }),\n  },\n  \"agent.start\": {\n    type: \"call\",\n    protected: false,\n    inputDataSchema: z.object({\n      id: z.string(),\n      scope: z.record(z.string(), z.unknown()),\n    }),\n    outputDataSchema: z.object({\n      sessionToken: z.string(),\n      transportRoom: z.object({ name: z.string(), token: z.string() }),\n    }),\n  },\n  \"agent.stop\": {\n    type: \"call\",\n    protected: false,\n    inputDataSchema: z.object({\n      id: z.string(),\n      sessionToken: z.string(),\n    }),\n    timeoutMs: 30_000,\n  },\n  \"agent.ping\": {\n    type: \"call\",\n    protected: false,\n    inputDataSchema: z.object({\n      id: z.string(),\n      sessionToken: z.string(),\n    }),\n    outputDataSchema: z.literal(\"pong\"),\n  },\n  \"agent.info\": {\n    type: \"call\",\n    protected: false,\n    inputDataSchema: z.object({\n      id: z.string(),\n      sessionToken: z.string(),\n    }),\n    outputDataSchema: z.object({\n      id: z.string(),\n      name: z.string(),\n      scope: z.record(z.string(), z.unknown()).nullable(),\n      status: z.enum([\"stopped\", \"starting\", \"running\", \"stopping\"]),\n      lastStartedAt: z.number().optional(),\n      lastSeenAt: z.number().optional(),\n      restartCount: z.number(),\n      cpu: z.object({\n        usedPercent: z.number(),\n        usedNs: z.number(),\n      }),\n      memory: z.object({\n        usedPercent: z.number(),\n        totalBytes: z.number(),\n        freeBytes: z.number(),\n        usedBytes: z.number(),\n      }),\n    }),\n  },\n  \"agent.info-stream\": {\n    type: \"stream\",\n    protected: false,\n    inputDataSchema: z.object({\n      id: z.string(),\n      sessionToken: z.string(),\n      pollingIntervalMs: z.number().min(1000).max(30_000).prefault(5000),\n    }),\n    outputDataSchema: z.object({\n      id: z.string(),\n      name: z.string(),\n      scope: z.record(z.string(), z.unknown()).nullable(),\n      status: z.string(),\n      lastStartedAt: z.number().optional(),\n      lastSeenAt: z.number().optional(),\n      restartCount: z.number(),\n      cpu: z.object({\n        usedPercent: z.number(),\n        usedNs: z.number(),\n      }),\n      memory: z.object({\n        usedPercent: z.number(),\n        totalBytes: z.number(),\n        freeBytes: z.number(),\n        usedBytes: z.number(),\n      }),\n    }),\n  },\n  \"server.ping\": {\n    type: \"call\",\n    protected: true,\n    outputDataSchema: z.literal(\"pong\"),\n  },\n  \"server.available\": {\n    type: \"call\",\n    protected: true,\n    outputDataSchema: z.array(z.object({ name: z.string(), scopeKeys: z.array(z.string()) })),\n  },\n  \"server.info\": {\n    type: \"call\",\n    protected: true,\n    outputDataSchema: z.object({\n      lifeVersion: z.string(),\n      nodeVersion: z.string(),\n      startedAt: z.number(),\n      cpu: z.object({\n        usedPercent: z.number(),\n        usedNs: z.number(),\n      }),\n      memory: z.object({\n        usedPercent: z.number(),\n        totalBytes: z.number(),\n        freeBytes: z.number(),\n        usedBytes: z.number(),\n      }),\n    }),\n  },\n  \"server.info-stream\": {\n    type: \"stream\",\n    protected: true,\n    inputDataSchema: z.object({\n      pollingIntervalMs: z.number().min(1000).max(30_000).prefault(5000),\n    }),\n    outputDataSchema: z.object({\n      lifeVersion: z.string(),\n      nodeVersion: z.string(),\n      startedAt: z.number(),\n      cpu: z.object({\n        usedPercent: z.number(),\n        usedNs: z.number(),\n      }),\n      memory: z.object({\n        usedPercent: z.number(),\n        totalBytes: z.number(),\n        freeBytes: z.number(),\n        usedBytes: z.number(),\n      }),\n    }),\n  },\n  \"server.processes\": {\n    type: \"call\",\n    protected: true,\n    outputDataSchema: z.array(\n      z.object({\n        id: z.string(),\n        name: z.string(),\n        status: z.string(),\n        lastStartedAt: z.number().optional(),\n      }),\n    ),\n  },\n  \"server.processes-stream\": {\n    type: \"stream\",\n    protected: true,\n    inputDataSchema: z.object({\n      pollingIntervalMs: z.number().min(1000).max(30_000).prefault(5000),\n    }),\n    outputDataSchema: z.array(\n      z.object({\n        id: z.string(),\n        name: z.string(),\n        status: z.string(),\n        lastStartedAt: z.number().optional(),\n      }),\n    ),\n  },\n} as const satisfies LifeApiDefinition;\n","import * as op from \"@/shared/operation\";\nimport { TelemetryClient } from \"@/telemetry/clients/base\";\nimport type { TelemetryConsumer } from \"@/telemetry/types\";\nimport type { definition } from \"./definition\";\nimport type { LifeApiHandlers, LifeApiStreamSendFunction } from \"./types\";\n\nexport const getHandlers = (serverTelemetry: TelemetryClient) =>\n  ({\n    \"telemetry.send-signal\": {\n      onCast: ({ data }) => {\n        // Ensure the signal scope is client to prevent server-side telemetry data tampering\n        if ([\"client\", \"agent.client\", \"plugin.client\"].includes(data.signal.scope))\n          return op.failure({\n            code: \"Validation\",\n            message: `Telemetry signal scope must be in [\"client\", \"agent.client\", \"plugin.client\"].`,\n            isPublic: true,\n          });\n\n        // Send the signal\n        serverTelemetry.sendSignal(data.signal);\n\n        return op.success();\n      },\n    },\n    \"telemetry.signals-stream\": {\n      onStart: async ({ queue }) => {\n        // Track subscribers\n        const subscribers = new Map<\n          string,\n          { send: LifeApiStreamSendFunction<(typeof definition)[\"telemetry.signals-stream\"]> }\n        >();\n\n        // Register consumer to receive telemetry signals\n        TelemetryClient.registerGlobalConsumer({\n          isProcessing: () => false,\n          start: async (_queue: Parameters<TelemetryConsumer[\"start\"]>[0]) => {\n            for await (const signal of _queue) {\n              for (const subscriber of subscribers.values()) {\n                subscriber.send(op.success(signal));\n              }\n            }\n          },\n        });\n\n        // Handle subcriptions events\n        for await (const event of queue) {\n          if (event.action === \"add\") subscribers.set(event.subscriptionId, { send: event.send });\n          else if (event.action === \"remove\") subscribers.delete(event.subscriptionId);\n        }\n      },\n    },\n    \"agent.create\": {\n      onCall: async ({ api, data }) => {\n        const { id, name } = data;\n        return await api.server.agent.create({ id, name });\n      },\n    },\n    \"agent.start\": {\n      onCall: async ({ api, data, request }) => {\n        const { id, scope } = data;\n        return await api.server.agent.start({ id, request, scope });\n      },\n    },\n    \"agent.stop\": {\n      onCall: async ({ api, data }) => {\n        const { id, sessionToken } = data;\n        return await api.server.agent.stop({ id, sessionToken });\n      },\n    },\n    \"agent.ping\": {\n      onCall: async ({ api, data }) => {\n        const { id, sessionToken } = data;\n        return await api.server.agent.ping({ id, sessionToken });\n      },\n    },\n    \"agent.info\": {\n      onCall: async ({ api, data }) => {\n        const { id, sessionToken } = data;\n        return await api.server.agent.info({ id, sessionToken });\n      },\n    },\n    \"server.ping\": {\n      onCall: (_) => op.success(\"pong\"),\n    },\n    \"server.available\": {\n      onCall: ({ api }) => api.server.server.available(),\n    },\n    \"server.info\": {\n      onCall: async ({ api }) => await api.server.server.info(),\n    },\n    \"agent.info-stream\": {\n      onStart: async ({ queue, api }) => {\n        // Track subscribers\n        const subscribers = new Map<string, { intervalId: NodeJS.Timeout }>();\n\n        // Handle subcriptions events\n        for await (const event of queue) {\n          if (event.action === \"add\") {\n            const { pollingIntervalMs, ...infoParams } = event?.data ?? {};\n            subscribers.set(event.subscriptionId, {\n              intervalId: setInterval(async () => {\n                const [errGet, info] = await api.server.agent.info(infoParams);\n                if (errGet) return event.send(op.failure(errGet));\n                event.send(op.success(info));\n              }, pollingIntervalMs),\n            });\n          } else if (event.action === \"remove\") {\n            clearInterval(subscribers.get(event.subscriptionId)?.intervalId);\n            subscribers.delete(event.subscriptionId);\n          }\n        }\n      },\n    },\n    \"server.info-stream\": {\n      onStart: async ({ queue, api }) => {\n        // Track subscribers\n        const subscribers = new Map<string, { intervalId: NodeJS.Timeout }>();\n\n        // Handle subcriptions events\n        for await (const event of queue) {\n          if (event.action === \"add\") {\n            subscribers.set(event.subscriptionId, {\n              intervalId: setInterval(async () => {\n                const [errGet, info] = await api.server.server.info();\n                if (errGet) return event.send(op.failure(errGet));\n                event.send(op.success(info));\n              }, event.data.pollingIntervalMs),\n            });\n          } else if (event.action === \"remove\") {\n            clearInterval(subscribers.get(event.subscriptionId)?.intervalId);\n            subscribers.delete(event.subscriptionId);\n          }\n        }\n      },\n    },\n    \"server.processes\": {\n      onCall: ({ api }) => api.server.server.processes(),\n    },\n\n    \"server.processes-stream\": {\n      onStart: async ({ queue, api }) => {\n        // Track subscribers\n        const subscribers = new Map<string, { intervalId: NodeJS.Timeout }>();\n\n        // Handle subcriptions events\n        for await (const event of queue) {\n          if (event.action === \"add\") {\n            subscribers.set(event.subscriptionId, {\n              intervalId: setInterval(() => {\n                const [errGet, processes] = api.server.server.processes();\n                if (errGet) return event.send(op.failure(errGet));\n                event.send(op.success(processes));\n              }, event.data.pollingIntervalMs),\n            });\n          } else if (event.action === \"remove\") {\n            clearInterval(subscribers.get(event.subscriptionId)?.intervalId);\n            subscribers.delete(event.subscriptionId);\n          }\n        }\n      },\n    },\n  }) satisfies LifeApiHandlers<typeof definition>;\n","import z from \"zod\";\nimport type { AsyncQueue } from \"@/shared/async-queue\";\nimport type * as op from \"@/shared/operation\";\nimport type { MaybePromise } from \"@/shared/types\";\nimport type { LifeApi } from \".\";\n\n// Definition\nexport type LifeApiCallDefinition = {\n  type: \"call\";\n  protected: boolean;\n  inputDataSchema?: z.ZodType;\n  outputDataSchema?: z.ZodType;\n  timeoutMs?: number;\n};\n\nexport type LifeApiCastDefinition = {\n  type: \"cast\";\n  protected: boolean;\n  inputDataSchema?: z.ZodType;\n  outputDataSchema?: never;\n  timeoutMs?: number;\n};\n\nexport type LifeApiStreamDefinition = {\n  type: \"stream\";\n  protected: boolean;\n  inputDataSchema?: z.ZodType;\n  outputDataSchema?: z.ZodType;\n  timeoutMs?: number;\n};\n\nexport type LifeApiHandlerDefinition =\n  | LifeApiCallDefinition\n  | LifeApiCastDefinition\n  | LifeApiStreamDefinition;\n\nexport type LifeApiDefinition = Record<string, LifeApiHandlerDefinition>;\n\n// Input\nexport const lifeApiBaseInputSchema = z.object({\n  handlerId: z.string(),\n  serverToken: z.string().optional(),\n  data: z.any().optional(),\n});\nexport type LifeApiInputBase = z.infer<typeof lifeApiBaseInputSchema>;\n\nexport const lifeApiCallInputSchema = lifeApiBaseInputSchema;\nexport type LifeApiCallInput = z.infer<typeof lifeApiCallInputSchema>;\n\nexport const lifeApiCastInputSchema = lifeApiBaseInputSchema;\nexport type LifeApiCastInput = z.infer<typeof lifeApiCastInputSchema>;\n\nexport const lifeApiStreamInputSchema = lifeApiBaseInputSchema.extend({\n  subscriptionId: z.string(),\n  action: z.enum([\"subscribe\", \"unsubscribe\"]),\n});\nexport type LifeApiStreamInput = z.infer<typeof lifeApiStreamInputSchema>;\n\n// Input Data\nexport type LifeApiInputData<Def extends LifeApiHandlerDefinition> =\n  Def[\"inputDataSchema\"] extends z.ZodType ? z.infer<Def[\"inputDataSchema\"]> : never;\n\n// Output\nexport type LifeApiOutput<Def extends LifeApiHandlerDefinition> = Def extends\n  | LifeApiCallDefinition\n  | LifeApiStreamDefinition\n  ? Def[\"outputDataSchema\"] extends z.ZodType\n    ? op.OperationResult<z.infer<Def[\"outputDataSchema\"]>>\n    : op.OperationResult<void>\n  : op.OperationResult<void>;\n\n// 'call' handler\nexport type LifeApiCallHandler<Def extends LifeApiCallDefinition> = {\n  onCall: (params: {\n    api: LifeApi;\n    data: LifeApiInputData<Def>;\n    request: Request;\n  }) => MaybePromise<LifeApiOutput<Def>>;\n};\n\n// 'cast' handler\nexport type LifeApiCastHandler<Def extends LifeApiCastDefinition> = {\n  onCast: (params: {\n    api: LifeApi;\n    data: LifeApiInputData<Def>;\n  }) => MaybePromise<LifeApiOutput<Def>>;\n};\n\n// 'stream' handler\nexport type LifeApiStreamSendFunction<Def extends LifeApiStreamDefinition> = (\n  data: LifeApiOutput<Def>,\n) => void;\n\nexport type LifeApiStreamQueueEvent<Def extends LifeApiStreamDefinition> =\n  | {\n      action: \"add\";\n      subscriptionId: string;\n      data: LifeApiInputData<Def>;\n      send: LifeApiStreamSendFunction<Def>;\n    }\n  | {\n      action: \"remove\";\n      subscriptionId: string;\n    };\n\nexport type LifeApiStreamHandler<Def extends LifeApiStreamDefinition> = {\n  onStart: (params: {\n    api: LifeApi;\n    queue: AsyncQueue<LifeApiStreamQueueEvent<Def>>;\n  }) => MaybePromise<void>;\n};\n\n// Handlers\nexport type LifeApiHandler<Def extends LifeApiHandlerDefinition> = Def extends LifeApiCallDefinition\n  ? LifeApiCallHandler<Def>\n  : Def extends LifeApiCastDefinition\n    ? LifeApiCastHandler<Def>\n    : Def extends LifeApiStreamDefinition\n      ? LifeApiStreamHandler<Def>\n      : never;\n\nexport type LifeApiHandlers<Defs extends LifeApiDefinition> = {\n  [K in keyof Defs]: LifeApiHandler<Defs[K]>;\n};\n","import z from \"zod\";\n\nexport const serverOptionsSchema = z.object({\n  projectDirectory: z.string(),\n  token: z.string(),\n  watch: z.boolean().prefault(false),\n  host: z.string().prefault(\"localhost\"),\n  port: z.string().prefault(\"3003\"),\n});\n\nexport type ServerOptions<T extends \"input\" | \"output\"> = T extends \"input\"\n  ? z.input<typeof serverOptionsSchema>\n  : z.output<typeof serverOptionsSchema>;\n","import { exec } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst execAsync = promisify(exec);\n\n// Define regex at module level for better performance\nconst VERSION_REGEX = /version\\s+(\\d+\\.\\d+\\.\\d+)/;\n\nexport const checkLivekitInstall = async () => {\n  try {\n    const { stdout } = await execAsync(\"livekit-server --version\");\n\n    // Parse version from output like \"livekit-server version 1.8.4\"\n    const versionMatch = stdout.match(VERSION_REGEX);\n\n    if (versionMatch?.[1]) {\n      return {\n        installed: true,\n        version: versionMatch[1],\n      };\n    }\n\n    // If we got output but couldn't parse version, still consider it installed\n    return {\n      installed: true,\n      version: \"unknown\",\n    };\n  } catch {\n    // Command not found or execution failed means LiveKit is not installed\n    return {\n      installed: false,\n      version: null,\n    };\n  }\n};\n","import stripAnsi from \"@/telemetry/helpers/strip-ansi\";\n\n/**\n * Cleans log output by stripping ANSI codes and replacing tab characters\n */\nexport const cleanStdData = (rawOutput: Buffer): string[] => {\n  const text = rawOutput.toString(\"utf8\");\n  const strippedText = stripAnsi(text);\n  const cleanedLines = strippedText\n    .split(\"\\n\")\n    .filter(Boolean)\n    .map((line) => line.replaceAll(\"\\t\", \" \"));\n  return cleanedLines;\n};\n","import chalk from \"chalk\";\nimport { Box, Text } from \"ink\";\nimport { type FC, useMemo } from \"react\";\nimport { theme } from \"@/cli/utils/theme\";\nimport { formatLogForTerminal } from \"@/telemetry/helpers/formatting/terminal\";\nimport type { TelemetryLog } from \"@/telemetry/types\";\nimport type { DevOptions } from \"../action\";\nimport { Divider } from \"../components/divider\";\nimport { ScrollTextBox } from \"../components/scroll-text-box\";\nimport { filterTabLogs } from \"../lib/filter-tab-logs\";\nimport { DEFAULT_TABS } from \"../lib/tabs\";\n\ninterface DevContentProps {\n  options: DevOptions;\n  debugModeEnabled: boolean;\n  selectedTab: string;\n  logs: TelemetryLog[];\n}\n\nexport const DevContent: FC<DevContentProps> = ({\n  debugModeEnabled,\n  selectedTab,\n  logs,\n  options,\n}) => {\n  const currentTabLogs = filterTabLogs(\n    logs,\n    selectedTab,\n    options.debug || debugModeEnabled ? \"debug\" : \"info\",\n  );\n  const formattedLogs = useMemo(\n    () => currentTabLogs.map((log) => formatLogForTerminal(log)),\n    [currentTabLogs],\n  );\n  const showEmptyPlaceholder = !(currentTabLogs.length || DEFAULT_TABS.includes(selectedTab));\n  const emptyPlaceholder = useMemo(\n    () => (\n      <Text color={theme.gray.light} italic>\n        This agent is not running.{\"\\n\\n\"}Run `{chalk.bold(\"agent.start()\")}` on the frontend to\n        start it.\n      </Text>\n    ),\n    [],\n  );\n\n  return (\n    <Box\n      borderColor={debugModeEnabled ? undefined : \"gray\"}\n      borderStyle={debugModeEnabled ? undefined : \"round\"}\n      paddingLeft={debugModeEnabled ? 0 : 1}\n      width=\"100%\"\n    >\n      {debugModeEnabled && (\n        <Box flexDirection=\"column\" gap={1} width=\"100%\">\n          <Box alignItems=\"center\" flexDirection=\"column\" justifyContent=\"center\" width=\"100%\">\n            <Divider color={theme.orange} width=\"100%\" />\n          </Box>\n          <Box flexDirection=\"column\">\n            {showEmptyPlaceholder ? (\n              emptyPlaceholder\n            ) : (\n              <Text wrap=\"wrap\">{formattedLogs.join(\"\\n\")}</Text>\n            )}\n          </Box>\n        </Box>\n      )}\n      {!debugModeEnabled &&\n        (showEmptyPlaceholder ? (\n          emptyPlaceholder\n        ) : (\n          <ScrollTextBox key={`tab-${selectedTab}`} lines={formattedLogs} width={\"100%\"} />\n        ))}\n    </Box>\n  );\n};\n","import { useMouseAction } from \"@zenobius/ink-mouse\";\nimport { Box, type DOMElement, measureElement, Text, useInput } from \"ink\";\nimport type React from \"react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport wrapAnsi from \"wrap-ansi\";\nimport { useScreenSize } from \"../hooks/use-screen-size.js\";\n\ninterface ScrollAreaProps extends React.ComponentProps<typeof Box> {\n  lines: string[];\n  showScrollbar?: boolean;\n}\n\nexport const ScrollTextBox = ({ lines, showScrollbar = true, ...props }: ScrollAreaProps) => {\n  // Prevents the scroll characters to be rendered\n  useInput(() => void 0);\n\n  // Track inner and container boxes\n  const containerRef = useRef<DOMElement | null>(null);\n\n  // Track container sizes\n  const { height, width } = useScreenSize();\n  const [containerHeight, setContainerHeight] = useState(0);\n  const [containerWidth, setContainerWidth] = useState(0);\n  useEffect(() => {\n    if (!containerRef.current) return;\n    const measure = measureElement(containerRef.current);\n    setContainerHeight(measure.height);\n    setContainerWidth(measure.width);\n  }, [containerRef, height, width]);\n\n  // Compute non-breaking lines\n  const wrappedLinesCacheRef = useRef({ lines: [] as string[], width: 0, wrapped: [] as string[] });\n  const maxWidth = containerWidth - 2;\n  const wrappedLines = useMemo(() => {\n    const cache = wrappedLinesCacheRef.current;\n\n    // If width changed, invalidate the cache\n    if (cache.width !== maxWidth) {\n      cache.lines = [];\n      cache.width = maxWidth;\n      cache.wrapped = [];\n    }\n\n    // Return cached wrapped lines if lines haven't changed\n    const lastCachedIndex = cache.lines.length;\n    if (lines.length === lastCachedIndex && lines.every((line, i) => line === cache.lines[i])) {\n      return cache.wrapped;\n    }\n\n    // Only wrap new lines and append to cache\n    const newLines = lines.slice(lastCachedIndex);\n    const newWrapped: string[] = [];\n    for (const line of newLines)\n      newWrapped.push(...wrapAnsi(line, maxWidth, { hard: true, trim: false }).split(\"\\n\"));\n\n    // Update cache\n    cache.lines = [...lines];\n    cache.wrapped = [...cache.wrapped, ...newWrapped];\n    return cache.wrapped;\n  }, [lines, maxWidth]);\n\n  // Set follow mode if the scroll position is at the bottom of the content\n  const [scroll, setScroll] = useState<number>(0);\n  const [follow, setFollow] = useState(true);\n  useEffect(() => {\n    if (scroll === contentHeight - containerHeight) setFollow(true);\n    else setFollow(false);\n  }, [wrappedLines, scroll, containerHeight]);\n\n  // Handle mouse scroll actions\n  const event = useMouseAction();\n  const contentHeight = wrappedLines.length;\n  const maxScroll = contentHeight - containerHeight;\n  const contentIsOverflowing = contentHeight > containerHeight;\n  useEffect(() => {\n    // Prevent scrolling if content doesn't overflow the container\n    if (!contentIsOverflowing) return;\n\n    // Else compute the new scroll position\n    if (event === \"scrollup\") setScroll((prev) => Math.max(0, (follow ? maxScroll : prev) - 1));\n    else if (event === \"scrolldown\")\n      setScroll((prev) => Math.min(maxScroll, (follow ? maxScroll : prev) + 1));\n\n    // Set scrollbar to active when scrolling\n    if (event === \"scrollup\" || event === \"scrolldown\") setIsScrollbarActive(true);\n  }, [event, follow]);\n\n  // Compute visible lines\n  const visibleLines = useMemo(\n    () => wrappedLines.slice(scroll, scroll + containerHeight),\n    [wrappedLines, scroll, containerHeight],\n  );\n\n  // Track scrollbar activity for opacity effect\n  const [isScrollbarActive, setIsScrollbarActive] = useState(true);\n\n  // Set scrollbar to inactive after 1000ms of inactivity\n  useEffect(() => {\n    if (!isScrollbarActive) return;\n    const inactivityTimeout = setTimeout(() => setIsScrollbarActive(false), 1000);\n    return () => clearTimeout(inactivityTimeout);\n  }, [isScrollbarActive]);\n\n  // Adjust scroll position when dimensions change\n  useEffect(() => {\n    // If content doesn't overflow, reset scroll\n    if (contentHeight <= containerHeight) return setScroll(0);\n    // If in follow mode, stay at the bottom\n    if (follow) setScroll(maxScroll);\n    // If not in follow mode, ensure scroll doesn't exceed new boundaries\n    else setScroll((prev) => Math.min(prev, maxScroll));\n  }, [wrappedLines, containerHeight, follow]);\n\n  // Calculate scrollbar dimensions and position\n  const scrollbarHeight = Math.max(\n    3,\n    Math.floor((containerHeight / (contentHeight || 1)) * containerHeight),\n  );\n\n  const scrollbarPosition =\n    (scroll / (contentHeight - containerHeight || 1)) * (containerHeight - scrollbarHeight);\n\n  return (\n    <Box\n      flexDirection=\"column\"\n      flexGrow={1}\n      justifyContent={follow && contentIsOverflowing ? \"flex-end\" : \"flex-start\"}\n      overflow=\"hidden\"\n      position=\"relative\"\n      ref={containerRef}\n      {...props}\n    >\n      <Text>{visibleLines.join(\"\\n\")}</Text>\n      {showScrollbar && contentIsOverflowing && (\n        <Box\n          alignItems=\"flex-end\"\n          flexDirection=\"row\"\n          justifyContent=\"flex-end\"\n          position=\"absolute\"\n          width=\"100%\"\n        >\n          <Box\n            borderColor={isScrollbarActive ? \"#E75E23\" : \"gray\"}\n            borderDimColor={!isScrollbarActive}\n            borderStyle=\"round\"\n            height={scrollbarHeight}\n            marginTop={scrollbarPosition}\n            width={1}\n          />\n        </Box>\n      )}\n    </Box>\n  );\n};\n","import { logLevelPriority } from \"@/telemetry/helpers/log-level-priority\";\nimport type { TelemetryLog, TelemetryLogLevel } from \"@/telemetry/types\";\n\nexport const filterTabLogs = (\n  logs: TelemetryLog[],\n  selectedTab: string,\n  logLevel: TelemetryLogLevel,\n) =>\n  logs.filter((log) => {\n    let logTab = \"cli\";\n    if (log.scope === \"server\") logTab = \"server\";\n    else if (log.scope === \"compiler\") logTab = \"compiler\";\n    else if (log.scope === \"webrtc\") logTab = \"webrtc\";\n    else if (\n      (log.scope === \"agent.process\" ||\n        log.scope === \"agent.server\" ||\n        log.scope === \"plugin.server\") &&\n      log.attributes?.agentId\n    )\n      logTab = log.attributes.agentId as string;\n    if (logTab !== selectedTab) return false;\n    return logLevelPriority(log.level) >= logLevelPriority(logLevel);\n  });\n","import chalk from \"chalk\";\nimport { Box, Text } from \"ink\";\nimport type { FC } from \"react\";\nimport { theme } from \"@/cli/utils/theme\";\nimport type { AgentProcessClient } from \"@/server/agent-process/client\";\nimport { getTabName } from \"../lib/tabs\";\n\ninterface DevFooterProps {\n  debugModeEnabled: boolean;\n  selectedTab: string;\n  agentProcesses: Map<string, AgentProcessClient>;\n}\n\nexport const DevFooter: FC<DevFooterProps> = ({\n  debugModeEnabled,\n  selectedTab,\n  agentProcesses,\n}) => {\n  return (\n    // flexShrink={0} is needed to prevent the footer from sometimes shrinking when the content is too long\n    <Box flexDirection=\"column\" flexShrink={0} width=\"100%\">\n      {debugModeEnabled && (\n        <Box alignItems=\"center\" justifyContent=\"flex-end\" marginTop={5} width=\"100%\">\n          <Box borderColor={\"gray\"} borderStyle={\"round\"} paddingX={1}>\n            <Text>Current Tab: {chalk.bold(getTabName(selectedTab, agentProcesses))}</Text>\n          </Box>\n        </Box>\n      )}\n      {debugModeEnabled && (\n        <Box\n          alignItems=\"center\"\n          borderColor={theme.orange}\n          borderStyle=\"doubleSingle\"\n          justifyContent=\"center\"\n          paddingX={2}\n          paddingY={1}\n          width=\"100%\"\n        >\n          <Text>\n            You entered <Text color={theme.orange}>debug mode</Text>. UI controls are hidden so you\n            can freely copy your logs. Press <Text color={theme.orange}>d</Text> again to exit debug\n            mode.\n          </Text>\n        </Box>\n      )}\n      <Box\n        alignItems=\"center\"\n        borderBottom={false}\n        borderLeft={false}\n        borderRight={false}\n        borderStyle=\"round\"\n        borderTop={debugModeEnabled}\n        borderTopColor=\"gray\"\n        flexShrink={0}\n        justifyContent=\"space-between\"\n        paddingX={2}\n        width=\"100%\"\n      >\n        <Text color=\"gray\">\n          <Text bold color={theme.orange}>\n            ↑/↓\n          </Text>\n          : Switch tabs\n        </Text>\n        <Text color=\"gray\">\n          <Text bold color={theme.orange}>\n            d\n          </Text>\n          : {debugModeEnabled ? \"Exit debug mode\" : \"Debug mode\"}\n        </Text>\n        <Text color=\"gray\">\n          <Text bold color={theme.orange}>\n            CTRL-C/q\n          </Text>\n          : Quit\n        </Text>\n      </Box>\n    </Box>\n  );\n};\n","import { ProgressBar } from \"@inkjs/ui\";\nimport { Box, Text } from \"ink\";\nimport type { FC } from \"react\";\nimport { theme } from \"@/cli/utils/theme\";\n\ninterface DevLoaderProps {\n  loadingProgress: number;\n  loadingStatus: string | null;\n  loadingError?: string | null;\n}\n\nexport const DevLoader: FC<DevLoaderProps> = ({ loadingProgress, loadingStatus }) => (\n  <Box\n    alignItems=\"center\"\n    borderColor=\"gray\"\n    borderStyle=\"round\"\n    flexDirection=\"column\"\n    height=\"100%\"\n    justifyContent=\"center\"\n    padding={3}\n    width=\"100%\"\n  >\n    <Box alignItems=\"center\" flexDirection=\"column\" gap={1} justifyContent=\"center\">\n      <Text color={theme.orange}>Life.js</Text>\n      <Box width={40}>\n        <ProgressBar value={loadingProgress} />\n      </Box>\n      <Text color={theme.gray.medium}>{loadingStatus}</Text>\n    </Box>\n  </Box>\n);\n","import { Box, Text } from \"ink\";\nimport type { FC } from \"react\";\nimport { theme } from \"@/cli/utils/theme\";\nimport { formatVersion, type VersionInfo } from \"@/cli/utils/version\";\nimport type { AgentProcessClient } from \"@/server/agent-process/client\";\nimport { Divider } from \"../components/divider\";\nimport { DEFAULT_TABS, getSortedTabs, getTabName } from \"../lib/tabs\";\n\nconst getStatusIndicator = (process: AgentProcessClient) => {\n  const { status, restartCount } = process;\n\n  if (status === \"running\") {\n    return <Text color=\"green\">● </Text>;\n  }\n\n  if (status === \"starting\") {\n    return <Text color={theme.level.warn}>● </Text>;\n  }\n\n  if (status === \"stopping\") {\n    return <Text color={theme.level.warn}>● </Text>;\n  }\n\n  // status === \"stopped\"\n  if (restartCount > 0) {\n    return <Text color={theme.level.error}>● </Text>;\n  }\n\n  // Never started\n  return <Text color={theme.gray.medium}>○ </Text>;\n};\n\ninterface DevSidebarProps {\n  version: VersionInfo | null;\n  selectedTab: string;\n  tabs: string[];\n  agentProcesses: Map<string, AgentProcessClient>;\n}\n\nexport const DevSidebar: FC<DevSidebarProps> = ({ version, selectedTab, tabs, agentProcesses }) => {\n  return (\n    <Box borderColor=\"gray\" borderStyle=\"round\" height=\"100%\" minWidth={33} width={33}>\n      <Box flexDirection=\"column\" gap={1} width=\"100%\">\n        <Box alignItems=\"center\" flexDirection=\"column\" justifyContent=\"center\" width=\"100%\">\n          {/* Header */}\n          <Box\n            flexDirection=\"row\"\n            justifyContent=\"space-between\"\n            paddingLeft={1}\n            paddingRight={0.5}\n            width=\"100%\"\n          >\n            <Text color={theme.gray.medium}>\n              Life.js{\" \"}\n              <Text color={theme.orange} italic>\n                Dev\n              </Text>\n            </Text>\n            <Text>{version ? formatVersion(version).output : \"\"}</Text>\n          </Box>\n          <Divider color=\"gray\" width=\"100%\" />\n        </Box>\n        {/* Tabs */}\n        <Box flexDirection=\"column\" gap={1}>\n          {/* Default Tabs */}\n          <Box flexDirection=\"column\" paddingX={2}>\n            {tabs\n              .filter((tab) => DEFAULT_TABS.includes(tab))\n              .map((tab) => (\n                <Text\n                  bold={selectedTab === tab}\n                  color={selectedTab === tab ? theme.orange : theme.gray.medium}\n                  key={tab}\n                >\n                  {getTabName(tab, agentProcesses)}\n                </Text>\n              ))}\n          </Box>\n          {/* Agent Tabs */}\n          <Box flexDirection=\"column\" paddingX={2} width=\"100%\">\n            <Box flexDirection=\"row\" gap={1}>\n              <Text bold={true} color={theme.gray.medium} dimColor={true} italic={true}>\n                Agents\n              </Text>\n              <Divider borderDimColor={true} color=\"gray\" flexGrow={1} />\n              <Text color={theme.gray.dark} italic>\n                ({agentProcesses.size})\n              </Text>\n            </Box>\n            <Box flexDirection=\"column\" paddingLeft={2}>\n              {getSortedTabs(tabs, agentProcesses)\n                .filter((tab) => !DEFAULT_TABS.includes(tab))\n                .map((agentId) => {\n                  const process = agentProcesses.get(agentId);\n                  return (\n                    <Box flexDirection=\"row\" key={agentId}>\n                      {process && getStatusIndicator(process)}\n                      <Text\n                        bold={selectedTab === agentId}\n                        color={selectedTab === agentId ? theme.orange : theme.gray.medium}\n                        wrap=\"truncate-end\"\n                      >\n                        {getTabName(agentId, agentProcesses)}\n                      </Text>\n                    </Box>\n                  );\n                })}\n            </Box>\n          </Box>\n        </Box>\n      </Box>\n    </Box>\n  );\n};\n","import { Command } from \"commander\";\nimport type { TelemetryClient } from \"@/telemetry/clients/base\";\nimport type { InitOptions } from \"./action\";\nimport { executeInit } from \"./action\";\n\nexport function createInitCommand(telemetry: TelemetryClient) {\n  const command = new Command(\"init\")\n    .argument(\"[project-name]\", \"Name of the project to create\")\n    .description(\"Initialize a new Life.js project.\")\n    .helpOption(\"--help\", \"Display help for command.\")\n    .option(\"-t, --template <name>\", \"Template to use.\", \"default\")\n    .option(\"--typescript\", \"Use TypeScript (default).\", true)\n    .option(\"--no-typescript\", \"Use JavaScript instead of TypeScript.\")\n    .option(\"--git\", \"Initialize a git repository.\", true)\n    .option(\"--no-git\", \"Skip git initialization.\")\n    .option(\"--install\", \"Install dependencies.\", true)\n    .option(\"--no-install\", \"Skip dependency installation.\")\n    .option(\"-p, --package-manager <pm>\", \"Package manager to use.\", \"bun\")\n    .action(\n      async (projectName: string | undefined, options: InitOptions) =>\n        await executeInit(telemetry, projectName, options),\n    );\n\n  return command;\n}\n","import { generateHeader } from \"@/cli/utils/header\";\nimport type { TelemetryClient } from \"@/telemetry/clients/base\";\n\nexport interface InitOptions {\n  template?: string;\n  typescript?: boolean;\n  git?: boolean;\n  install?: boolean;\n  packageManager?: string;\n}\n\nconst errorMessage = \"An error occurred while initializing the project.\";\n\nexport const executeInit = async (\n  telemetry: TelemetryClient,\n  projectName?: string,\n  options: InitOptions = {},\n) => {\n  try {\n    // Print header\n    console.log(await generateHeader(\"Init\"));\n\n    const name = projectName || \"my-life-app\";\n\n    console.log(`Creating a new Life.js project: ${name}`);\n    console.log(`Template: ${options.template || \"default\"}`);\n    console.log(`Language: ${options.typescript !== false ? \"TypeScript\" : \"JavaScript\"}`);\n    console.log(`Package manager: ${options.packageManager || \"bun\"}`);\n\n    // TODO: Implement project initialization\n    console.log(\"\\n⚠️  Project initialization coming soon!\");\n    console.log(\"For now, please clone the starter template from GitHub.\");\n  } catch (error) {\n    telemetry.log.error({ message: errorMessage, error });\n  }\n};\n","import { resolve } from \"node:path\";\nimport { Command } from \"commander\";\nimport type { TelemetryClient } from \"@/telemetry/clients/base\";\nimport { executeStart, type StartOptions } from \"./action\";\n\nexport function createStartCommand(telemetry: TelemetryClient) {\n  const command = new Command(\"start\")\n    .description(\"Start the production server.\")\n    .helpOption(\"--help\", \"Display help for command.\")\n    .option(\"-p, --port <port>\", \"Port to run the server on.\", \"3003\")\n    .option(\"-h, --host <host>\", \"Host to bind the server to.\", \"localhost\")\n    .option(\"-r, --root <dir>\", \"Project root directory.\", resolve(process.cwd()))\n    .option(\"-w, --watch\", \"Watch for changes and hot-reload automatically.\")\n    .option(\n      \"-t, --token <token>\",\n      \"Token to authenticate with the server. You can also set LIFE_SERVER_TOKEN environment variable.\",\n    )\n    .option(\"--debug\", \"Enable debug mode logs, same as LOG_LEVEL=debug.\")\n    .action(async (options: StartOptions) => await executeStart(telemetry, options));\n\n  return command;\n}\n","import { randomBytes } from \"node:crypto\";\nimport chalk from \"chalk\";\nimport { generateHeader } from \"@/cli/utils/header\";\nimport { LifeServer } from \"@/server\";\nimport type { TelemetryClient } from \"@/telemetry/clients/base\";\n\nexport interface StartOptions {\n  root: string;\n  watch?: boolean;\n  port?: string;\n  host?: string;\n  debug?: boolean;\n  token?: string;\n}\n\nconst errorMessage = \"An error occurred while starting the server.\";\n\nexport const executeStart = async (telemetry: TelemetryClient, options: StartOptions) => {\n  try {\n    // Print header\n    console.log(await generateHeader(\"Server\"));\n\n    // Retrieve server token from options or environment variable\n    const serverToken = options.token ?? process.env.LIFE_SERVER_TOKEN;\n    if (!serverToken) {\n      return telemetry.log.error({\n        message: `Server token is required.\\nUse the --token flag or set LIFE_SERVER_TOKEN environment variable.\\n\\nHere is one generated for you :)\\n\\n${chalk.bold(`LIFE_SERVER_TOKEN=${randomBytes(32).toString(\"base64url\")}`)}\\n\\nJust put it in your .env file.`,\n      });\n    }\n\n    // Initialize server\n    const server = new LifeServer({\n      projectDirectory: options.root,\n      token: serverToken,\n      watch: options.watch,\n      host: options.host,\n      port: options.port,\n    });\n\n    // Start server\n    const [errStart] = await server.start();\n    if (errStart) telemetry.log.error({ message: errorMessage, error: errStart });\n  } catch (error) {\n    telemetry.log.error({ message: errorMessage, error });\n  }\n};\n","import chalk from \"chalk\";\nimport type { Command, Help } from \"commander\";\nimport { generateHeader } from \"./header\";\nimport { themeChalk } from \"./theme\";\n\n// Resources URLs\nconst docsUrl = \"https://lifejs.org/docs\";\nconst supportUrl = \"https://discord.gg/U5wHjT5Ryj\";\n\n// Track when the process started\nconst startTime = Date.now();\n\n/**\n * Apply consistent help formatting to any command\n */\nexport async function applyHelpFormatting(command: Command, showHeader: boolean): Promise<Command> {\n  // Configure help text formatting\n  const help = command.createHelp();\n  const originalFormatHelp = help.formatHelp.bind(help);\n\n  help.formatHelp = (cmd: Command, helper: Help) => {\n    let text = originalFormatHelp(cmd, helper);\n\n    // Swap Options and Commands sections\n    // biome-ignore lint/performance/useTopLevelRegex: reason\n    const match = text.match(/(Options:[\\s\\S]*?)(Commands:[\\s\\S]*?)(?=\\n\\n|$)/);\n    if (match) text = text.replace(match[0], `${match[2]}\\n${match[1]}`);\n\n    // Remove help command line\n    text = text.replace(/^ {2}help \\[command\\].*\\n/gm, \"\");\n\n    // Style section headers - bold\n    text = text.replace(/^(Usage:|Options:|Commands:|Arguments:)/gm, (_match) =>\n      chalk.bold(_match),\n    );\n\n    // Style command names - orange\n    text = text.replace(\n      /^ {2}(dev|build|start|init)\\s/gm,\n      (_match, c) => `  ${themeChalk.orange(c)} `,\n    );\n\n    // Style option flags - orange\n    text = text.replace(/^ {2}(-[^\\s]+)/gm, (_match, flag) => `  ${themeChalk.orange(flag)}`);\n\n    // Style placeholders in gray\n    text = text.replace(\n      /\\[(options|project-name|command|port|host|path|dir|name|pm)\\]/g,\n      (_match, placeholder) => themeChalk.gray.medium(`[${placeholder}]`),\n    );\n\n    return text;\n  };\n\n  command.configureHelp(help);\n\n  // Configure error output\n  command.configureOutput({\n    outputError: (str, write) => write(chalk.red(str)),\n  });\n  command.showHelpAfterError(true);\n\n  // Add header if requested (only for main CLI)\n  if (showHeader) command.addHelpText(\"beforeAll\", await generateHeader(\"CLI\"));\n\n  // Add docs and support footer\n  command.addHelpText(\n    \"after\",\n    `${command.name() === \"life\" ? \"\" : \"\\n\"}${chalk.bold(\"Docs:\")} ${themeChalk.gray.medium(docsUrl)}\n\n${chalk.bold(\"Support:\")} ${themeChalk.gray.medium(supportUrl)}\n\n${chalk.italic(themeChalk.gray.medium(`[Ran in ${chalk.bold(`${Date.now() - startTime}ms`)}]`))}\\n`,\n  );\n\n  return command;\n}\n"],"mappings":"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","names":["Command","chalk","success","chalk","resolve","chalk","chalk","chalk","chalk","path","parseAsync","chalk","esbuild","path","path","z","chalk","path","parseAsync","esbuild","resolve","resolve","Command","chalk","Box","Text","useInput","useEffect","useRef","useState","jsx","Box","jsx","Box","jsx","chalk","chalk","resolve","randomBytes","chalk","createHash","readFile","join","chalk","chokidar","path","chalk","definition","resolve","path","chalk","chalk","z","z","z","z","resolve","chalk","z","z","EXCLUDED_DEFAULTS","chalk","process","join","readFile","createHash","chokidar","definition","resolve","startTime","chalk","randomBytes","chalk","Box","Text","useMemo","Box","useInput","useEffect","useState","jsx","useInput","useState","useEffect","Box","jsx","jsxs","useMemo","Text","chalk","Box","chalk","Box","Text","jsx","jsxs","Box","Text","chalk","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","process","Text","Box","jsx","jsxs","useState","useEffect","useRef","useInput","process","Box","Text","chalk","Command","resolve","Command","errorMessage","Command","resolve","Command","randomBytes","chalk","errorMessage","chalk","randomBytes","Command","resolve","chalk","chalk","Command"]}