{"version":3,"file":"daemon.js","names":[],"sources":["esm/cli/daemon.js"],"sourcesContent":["import colors from \"picocolors\";\nimport { labelProcess } from \"./label-process\";\nasync function daemon(args) {\n  const subcommand = args.subcommand || \"run\";\n  switch (subcommand) {\n    case \"run\":\n    case \"start\":\n      return daemonStart(args);\n    case \"stop\":\n      return daemonStop();\n    case \"status\":\n      return daemonStatus();\n    case \"route\":\n      return daemonRoute(args);\n    default:\n      console.log(`Unknown daemon subcommand: ${subcommand}`);\n      console.log(\"Available: start, stop, status, route\");\n      process.exit(1);\n  }\n}\nasync function daemonStart(args) {\n  labelProcess(\"daemon\");\n  const { isDaemonRunning } = await import(\"../daemon/ipc\");\n  if (await isDaemonRunning()) {\n    console.log(colors.yellow(\"Daemon is already running\"));\n    console.log(\"Use 'one daemon status' to see registered servers\");\n    process.exit(1);\n  }\n  await suggestTrayApp();\n  const { startDaemon } = await import(\"../daemon/server\");\n  const useTUI = args.tui ?? process.stdin.isTTY;\n  const { state } = await startDaemon({\n    port: args.port ? parseInt(args.port, 10) : void 0,\n    host: args.host,\n    quiet: useTUI\n    // suppress normal logs when TUI is active\n  });\n  if (useTUI) {\n    const { startTUI } = await import(\"../daemon/tui\");\n    startTUI(state);\n  }\n}\nasync function daemonStop() {\n  const { isDaemonRunning, getSocketPath } = await import(\"../daemon/ipc\");\n  if (!await isDaemonRunning()) {\n    console.log(colors.yellow(\"Daemon is not running\"));\n    process.exit(1);\n  }\n  console.log(\n    colors.yellow(\n      \"Note: daemon runs in foreground. Press Ctrl+C in the daemon terminal to stop.\"\n    )\n  );\n  console.log(colors.dim(`Socket path: ${getSocketPath()}`));\n}\nasync function daemonStatus() {\n  const { isDaemonRunning, getDaemonStatus, getLastActiveDaemonServer } = await import(\"../daemon/ipc\");\n  if (!await isDaemonRunning()) {\n    console.log(colors.yellow(\"Daemon is not running\"));\n    console.log(colors.dim(\"Start with 'one daemon'\"));\n    process.exit(1);\n  }\n  try {\n    const status = await getDaemonStatus();\n    const lastActive = await getLastActiveDaemonServer();\n    console.log(colors.cyan(\"\\n\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\"));\n    console.log(colors.cyan(\"  one daemon status\"));\n    console.log(colors.cyan(\"\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\n\"));\n    if (status.servers.length === 0) {\n      console.log(colors.dim(\"  No servers registered\"));\n    } else {\n      console.log(\"  Registered servers:\");\n      for (const server of status.servers) {\n        const shortRoot = server.root.replace(process.env.HOME || \"\", \"~\");\n        const isActive = lastActive?.id === server.id;\n        const activeMarker = isActive ? colors.yellow(\" \\u2605\") : \"\";\n        console.log(\n          `    ${colors.green(server.id)} ${server.bundleId} \\u2192 :${server.port} (${shortRoot})${activeMarker}`\n        );\n      }\n      if (lastActive) {\n        console.log(colors.dim(\"\\n  \\u2605 = last active (used by oi/oa)\"));\n      }\n    }\n    if (status.routes.length > 0) {\n      console.log(\"\\n  Active routes:\");\n      for (const route of status.routes) {\n        console.log(`    ${route.key} \\u2192 ${route.serverId}`);\n      }\n    }\n    console.log(\"\");\n  } catch (err) {\n    console.log(colors.red(\"Failed to get daemon status\"));\n    console.error(err);\n    process.exit(1);\n  }\n}\nasync function openPlatform(platform) {\n  const { isDaemonRunning, getDaemonStatus, setDaemonRoute, touchDaemonServer } = await import(\"../daemon/ipc\");\n  const { getBundleIdFromConfig } = await import(\"../daemon/utils\");\n  const cwd = process.cwd();\n  const bundleId = getBundleIdFromConfig(cwd);\n  if (!bundleId) {\n    console.log(colors.yellow(\"No app.json found in current directory\"));\n    console.log(colors.dim(\"Run this command from a One project directory\"));\n    process.exit(1);\n  }\n  if (await isDaemonRunning()) {\n    try {\n      const status = await getDaemonStatus();\n      const server = status.servers.find((s) => s.root === cwd);\n      if (server) {\n        await setDaemonRoute(bundleId, server.id);\n        await touchDaemonServer(server.id);\n        console.log(colors.cyan(`[daemon] Route set: ${bundleId} \\u2192 this project`));\n      } else {\n        console.log(colors.yellow(`[daemon] No server registered for this project`));\n        console.log(\n          colors.dim(`Run 'one dev' first, or the simulator will connect directly`)\n        );\n      }\n    } catch (err) {\n      console.log(colors.dim(`[daemon] Could not set route: ${err}`));\n    }\n  }\n  if (platform === \"ios\") {\n    const { run } = await import(\"./runIos\");\n    await run({});\n  } else {\n    const { run } = await import(\"./runAndroid\");\n    await run({});\n  }\n}\nasync function daemonRoute(args) {\n  const { isDaemonRunning, getDaemonStatus, setDaemonRoute } = await import(\"../daemon/ipc\");\n  if (!await isDaemonRunning()) {\n    console.log(colors.yellow(\"Daemon is not running\"));\n    process.exit(1);\n  }\n  if (!args.app) {\n    console.log(colors.red(\"Missing --app parameter\"));\n    console.log(\"Usage: one daemon route --app=com.example.app --slot=0\");\n    console.log(\"   or: one daemon route --app=com.example.app --project=~/myapp\");\n    process.exit(1);\n  }\n  const status = await getDaemonStatus();\n  let targetServer;\n  if (args.slot !== void 0) {\n    const slotIndex = parseInt(args.slot, 10);\n    const matchingServers = status.servers.filter((s) => s.bundleId === args.app);\n    if (slotIndex < 0 || slotIndex >= matchingServers.length) {\n      console.log(colors.red(`Invalid slot: ${args.slot}`));\n      console.log(`Available slots for ${args.app}: 0-${matchingServers.length - 1}`);\n      process.exit(1);\n    }\n    targetServer = matchingServers[slotIndex];\n  } else if (args.project) {\n    const normalizedProject = args.project.replace(/^~/, process.env.HOME || \"\");\n    targetServer = status.servers.find(\n      (s) => s.bundleId === args.app && s.root === normalizedProject\n    );\n    if (!targetServer) {\n      console.log(colors.red(`No server found for ${args.app} at ${args.project}`));\n      process.exit(1);\n    }\n  } else {\n    console.log(colors.red(\"Missing --slot or --project parameter\"));\n    process.exit(1);\n  }\n  await setDaemonRoute(args.app, targetServer.id);\n  const shortRoot = targetServer.root.replace(process.env.HOME || \"\", \"~\");\n  console.log(colors.green(`Route set: ${args.app} \\u2192 ${targetServer.id} (${shortRoot})`));\n}\nasync function suggestTrayApp() {\n  const { existsSync } = await import(\"node:fs\");\n  const trayPaths = [\n    \"/Applications/OneTray.app\",\n    `${process.env.HOME}/Applications/OneTray.app`\n  ];\n  const installed = trayPaths.some((p) => existsSync(p));\n  if (!installed) {\n    console.log(\n      colors.dim(\"  Tip: install OneTray.app for a native macOS cable interface\")\n    );\n    console.log(colors.dim(\"  https://github.com/onejs/one/releases?q=one-tray\"));\n    console.log(\"\");\n  }\n}\nexport {\n  daemon,\n  openPlatform\n};\n//# sourceMappingURL=daemon.js.map\n"],"mappings":"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"}