{"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.5.0_jiti@2.6.0_postcss@8.5.6_tsx@4.20.5_typescript@5.9.3_yaml@2.8.1/node_modules/tsup/assets/cjs_shims.js","../src/deploy/providers/sprite.provider.ts","../src/deploy/providers/e2b.provider.ts","../src/deploy/providers/northflank.provider.ts","../src/deploy/providers/daytona.provider.ts","../src/deploy/index.ts","../src/deploy/deploy.ts","../src/cli.ts"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () =>\n  typeof document === 'undefined'\n    ? new URL(`file:${__filename}`).href\n    : (document.currentScript && document.currentScript.src) ||\n      new URL('main.js', document.baseURI).href\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","import { execFileSync, spawn } from \"node:child_process\"\nimport { existsSync, unlinkSync } from \"node:fs\"\nimport { tmpdir } from \"node:os\"\nimport { basename, join } from \"node:path\"\nimport type {\n\tDeployProvider,\n\tInstanceStatus,\n\tProvisionOpts\n} from \"../deploy-provider\"\n\n// ============================================================================\n// Sprites.dev Provider\n// ============================================================================\n\nexport const spriteProvider: DeployProvider = {\n\tname: \"sprites\",\n\tlabel: \"Sprites.dev (Firecracker)\",\n\n\tdefaultName(projectDir: string): string {\n\t\t// Sanitize: sprites.dev names must be lowercase alphanumeric + hyphens\n\t\treturn basename(projectDir)\n\t\t\t.toLowerCase()\n\t\t\t.replace(/[^a-z0-9-]/g, \"-\")\n\t\t\t.replace(/-+/g, \"-\")\n\t\t\t.replace(/^-+|-+$/g, \"\")\n\t\t\t.slice(0, 40)\n\t},\n\n\tasync authCheck(): Promise<void> {\n\t\ttry {\n\t\t\texecFileSync(\"sprite\", [\"list\"], { stdio: \"pipe\", timeout: 5000 })\n\t\t} catch (err: any) {\n\t\t\tif (err.code === \"ENOENT\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"'sprite' CLI not found.\\n\" +\n\t\t\t\t\t\t\"   Install: https://sprites.dev/docs/install\\n\" +\n\t\t\t\t\t\t\"   Or: npm i -g sprite-cli\"\n\t\t\t\t)\n\t\t\t}\n\t\t\tthrow new Error(\n\t\t\t\t`Sprite CLI authentication failed.\\n   Run: sprite login\\n   Error: ${err.stderr || err.message}`\n\t\t\t)\n\t\t}\n\t},\n\n\tasync provision(name: string, _opts?: ProvisionOpts): Promise<string> {\n\t\t// Validate name\n\t\tif (!/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(name)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid sprite name: ${name}\\nName must start with a letter/digit and contain only letters, digits, hyphens, and underscores.`\n\t\t\t)\n\t\t}\n\n\t\t// Check if sprite already exists\n\t\ttry {\n\t\t\tconst existing = execFileSync(\"sprite\", [\"list\"], {\n\t\t\t\tencoding: \"utf-8\"\n\t\t\t})\n\t\t\tif (existing.includes(name)) {\n\t\t\t\treturn name\n\t\t\t}\n\t\t} catch {\n\t\t\t// sprite list failed for some reason, try to create anyway\n\t\t}\n\n\t\tconsole.log(`\\n📦 Creating sprite: ${name}`)\n\t\ttry {\n\t\t\texecFileSync(\"sprite\", [\"create\", \"-skip-console\", name], {\n\t\t\t\tstdio: \"inherit\"\n\t\t\t})\n\t\t} catch {\n\t\t\t// May already exist (race condition) — verify\n\t\t\tconst existing = execFileSync(\"sprite\", [\"list\"], {\n\t\t\t\tencoding: \"utf-8\"\n\t\t\t})\n\t\t\tif (existing.includes(name)) {\n\t\t\t\tconsole.log(`   Sprite ${name} already exists, using it`)\n\t\t\t\treturn name\n\t\t\t}\n\t\t\tthrow new Error(\"Failed to create sprite\")\n\t\t}\n\n\t\t// Wait for sprite to be ready\n\t\tconsole.log(\"\\n⏳ Waiting for sprite to be ready...\")\n\t\tfor (let i = 0; i < 30; i++) {\n\t\t\ttry {\n\t\t\t\texecFileSync(\"sprite\", [\"exec\", \"-s\", name, \"--\", \"echo\", \"ready\"], {\n\t\t\t\t\tstdio: \"pipe\"\n\t\t\t\t})\n\t\t\t\tconsole.log(\"   ✓ Sprite ready\")\n\t\t\t\treturn name\n\t\t\t} catch {\n\t\t\t\tif (i % 5 === 4) {\n\t\t\t\t\tconsole.log(`   Still waiting... (${i + 1}/30)`)\n\t\t\t\t}\n\t\t\t\tawait new Promise((r) => setTimeout(r, 2000))\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\"Sprite did not become ready in time\")\n\t},\n\n\tasync deploy(instanceId: string, distDir: string): Promise<void> {\n\t\tconsole.log(\"\\n📤 Uploading build artifacts...\")\n\t\tconst tarPath = join(tmpdir(), `hybrid-deploy-${Date.now()}.tar.gz`)\n\n\t\t// Create tarball\n\t\texecFileSync(\"tar\", [\"-czf\", tarPath, \"-C\", distDir, \".\"], {\n\t\t\tstdio: \"pipe\"\n\t\t})\n\n\t\t// Ensure /app directory exists\n\t\texecFileSync(\n\t\t\t\"sprite\",\n\t\t\t[\"exec\", \"-s\", instanceId, \"--\", \"mkdir\", \"-p\", \"/app\"],\n\t\t\t{\n\t\t\t\tstdio: \"pipe\"\n\t\t\t}\n\t\t)\n\n\t\t// Upload and extract (retry up to 3 times)\n\t\tlet uploadSuccess = false\n\t\tfor (let attempt = 0; attempt < 3; attempt++) {\n\t\t\ttry {\n\t\t\t\texecFileSync(\n\t\t\t\t\t\"sprite\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"exec\",\n\t\t\t\t\t\t\"-s\",\n\t\t\t\t\t\tinstanceId,\n\t\t\t\t\t\t\"-file\",\n\t\t\t\t\t\t`${tarPath}:/tmp/hybrid-deploy.tar.gz`,\n\t\t\t\t\t\t\"--\",\n\t\t\t\t\t\t\"tar\",\n\t\t\t\t\t\t\"-xzf\",\n\t\t\t\t\t\t\"/tmp/hybrid-deploy.tar.gz\",\n\t\t\t\t\t\t\"-C\",\n\t\t\t\t\t\t\"/app\"\n\t\t\t\t\t],\n\t\t\t\t\t{ stdio: \"inherit\" }\n\t\t\t\t)\n\t\t\t\tuploadSuccess = true\n\t\t\t\tbreak\n\t\t\t} catch {\n\t\t\t\tif (attempt < 2) {\n\t\t\t\t\tconsole.log(`   Upload failed, retrying... (${attempt + 1}/3)`)\n\t\t\t\t\tawait new Promise((r) => setTimeout(r, 5000))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Clean up local tarball\n\t\tif (existsSync(tarPath)) {\n\t\t\ttry {\n\t\t\t\tunlinkSync(tarPath)\n\t\t\t} catch {}\n\t\t}\n\n\t\tif (!uploadSuccess) {\n\t\t\tthrow new Error(\"Failed to upload build artifacts after 3 attempts\")\n\t\t}\n\n\t\t// Install dependencies\n\t\tconsole.log(\"\\n📦 Installing dependencies...\")\n\t\texecFileSync(\n\t\t\t\"sprite\",\n\t\t\t[\n\t\t\t\t\"exec\",\n\t\t\t\t\"-s\",\n\t\t\t\tinstanceId,\n\t\t\t\t\"--\",\n\t\t\t\t\"bash\",\n\t\t\t\t\"-c\",\n\t\t\t\t\"cd /app && npm install --production\"\n\t\t\t],\n\t\t\t{ stdio: \"inherit\" }\n\t\t)\n\n\t\t// Set up and start the agent\n\t\tconsole.log(\"\\n🔧 Starting agent...\")\n\t\tconst { writeFileSync } = await import(\"node:fs\")\n\t\tconst scriptPath = join(tmpdir(), `hybrid-start-${Date.now()}.sh`)\n\t\tconst startupScript = `#!/bin/bash\ncd /app\nexport NODE_ENV=production\nexport AGENT_PORT=8454\nexec nohup node server/index.cjs > /app/agent.log 2>&1 &\necho $! > /app/agent.pid\n`\n\t\twriteFileSync(scriptPath, startupScript, { mode: 0o755 })\n\n\t\texecFileSync(\n\t\t\t\"sprite\",\n\t\t\t[\n\t\t\t\t\"exec\",\n\t\t\t\t\"-s\",\n\t\t\t\tinstanceId,\n\t\t\t\t\"-file\",\n\t\t\t\t`${scriptPath}:/app/start-agent.sh`,\n\t\t\t\t\"--\",\n\t\t\t\t\"chmod\",\n\t\t\t\t\"+x\",\n\t\t\t\t\"/app/start-agent.sh\"\n\t\t\t],\n\t\t\t{ stdio: \"pipe\" }\n\t\t)\n\n\t\texecFileSync(\n\t\t\t\"sprite\",\n\t\t\t[\"exec\", \"-s\", instanceId, \"--\", \"bash\", \"/app/start-agent.sh\"],\n\t\t\t{ stdio: \"inherit\" }\n\t\t)\n\n\t\ttry {\n\t\t\tunlinkSync(scriptPath)\n\t\t} catch {}\n\n\t\t// Wait for agent to be ready\n\t\tconsole.log(\"\\n⏳ Waiting for agent to start...\")\n\t\tlet ready = false\n\t\tfor (let i = 0; i < 15; i++) {\n\t\t\ttry {\n\t\t\t\tconst result = execFileSync(\n\t\t\t\t\t\"sprite\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"exec\",\n\t\t\t\t\t\t\"-s\",\n\t\t\t\t\t\tinstanceId,\n\t\t\t\t\t\t\"--\",\n\t\t\t\t\t\t\"curl\",\n\t\t\t\t\t\t\"-s\",\n\t\t\t\t\t\t\"http://localhost:8454/health\"\n\t\t\t\t\t],\n\t\t\t\t\t{ encoding: \"utf-8\", stdio: [\"pipe\", \"pipe\", \"pipe\"] }\n\t\t\t\t)\n\t\t\t\tif (result) {\n\t\t\t\t\tready = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Agent not ready yet\n\t\t\t}\n\t\t\tawait new Promise((r) => setTimeout(r, 2000))\n\t\t}\n\n\t\tif (!ready) {\n\t\t\tconsole.log(\"   ⚠️  Agent may not be fully ready (health check timed out)\")\n\t\t} else {\n\t\t\tconsole.log(\"   ✓ Agent running\")\n\t\t}\n\t},\n\n\tasync status(instanceId: string): Promise<InstanceStatus> {\n\t\ttry {\n\t\t\tconst output = execFileSync(\"sprite\", [\"list\"], {\n\t\t\t\tencoding: \"utf-8\"\n\t\t\t})\n\t\t\tif (!output.includes(instanceId)) {\n\t\t\t\treturn \"stopped\"\n\t\t\t}\n\t\t\t// Parse sprite list output to determine state\n\t\t\t// This is heuristic — sprites.list format may vary\n\t\t\tconst lines = output.split(\"\\n\")\n\t\t\tfor (const line of lines) {\n\t\t\t\tif (line.includes(instanceId)) {\n\t\t\t\t\tif (line.includes(\"sleeping\") || line.includes(\"paused\")) {\n\t\t\t\t\t\treturn \"sleeping\"\n\t\t\t\t\t}\n\t\t\t\t\tif (line.includes(\"running\")) {\n\t\t\t\t\t\treturn \"running\"\n\t\t\t\t\t}\n\t\t\t\t\tif (line.includes(\"stopped\") || line.includes(\"terminated\")) {\n\t\t\t\t\t\treturn \"stopped\"\n\t\t\t\t\t}\n\t\t\t\t\treturn \"running\" // assume running if found and no explicit state\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn \"unknown\"\n\t\t} catch {\n\t\t\treturn \"unknown\"\n\t\t}\n\t},\n\n\tasync sleep(instanceId: string): Promise<void> {\n\t\tconsole.log(`\\n💤 Sleeping sprite: ${instanceId}`)\n\t\ttry {\n\t\t\texecFileSync(\"sprite\", [\"sleep\", instanceId], { stdio: \"inherit\" })\n\t\t\tconsole.log(\"   ✓ Sprite sleeping\")\n\t\t} catch (err: any) {\n\t\t\tthrow new Error(`Failed to sleep sprite: ${err.stderr || err.message}`)\n\t\t}\n\t},\n\n\tasync wake(instanceId: string): Promise<void> {\n\t\tconsole.log(`\\n☀️  Waking sprite: ${instanceId}`)\n\t\ttry {\n\t\t\texecFileSync(\"sprite\", [\"exec\", \"-s\", instanceId, \"--\", \"echo\", \"wake\"], {\n\t\t\t\tstdio: \"pipe\"\n\t\t\t})\n\t\t\tconsole.log(\"   ✓ Sprite awake\")\n\t\t} catch (err: any) {\n\t\t\tthrow new Error(`Failed to wake sprite: ${err.stderr || err.message}`)\n\t\t}\n\t},\n\n\tasync logs(instanceId: string, follow = true): Promise<void> {\n\t\tconst args = follow\n\t\t\t? [\"logs\", \"-s\", instanceId, \"-f\"]\n\t\t\t: [\"logs\", \"-s\", instanceId]\n\t\tconst child = spawn(\"sprite\", args, { stdio: \"inherit\" })\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tchild.on(\"exit\", (code) => {\n\t\t\t\tif (code === 0) resolve()\n\t\t\t\telse reject(new Error(`sprite logs exited with code ${code}`))\n\t\t\t})\n\t\t})\n\t},\n\n\tasync endpoint(instanceId: string): Promise<string> {\n\t\treturn `https://${instanceId}.sprites.dev`\n\t},\n\n\tasync teardown(instanceId: string): Promise<void> {\n\t\tconsole.log(`\\n🗑️  Destroying sprite: ${instanceId}`)\n\t\ttry {\n\t\t\texecFileSync(\"sprite\", [\"delete\", instanceId], { stdio: \"inherit\" })\n\t\t\tconsole.log(\"   ✓ Sprite destroyed\")\n\t\t} catch (err: any) {\n\t\t\tthrow new Error(`Failed to destroy sprite: ${err.stderr || err.message}`)\n\t\t}\n\t}\n}\n","import { execFileSync } from \"node:child_process\"\nimport { existsSync, unlinkSync } from \"node:fs\"\nimport { tmpdir } from \"node:os\"\nimport { basename, join } from \"node:path\"\nimport type {\n\tDeployProvider,\n\tInstanceStatus,\n\tProvisionOpts,\n} from \"../deploy-provider\"\n\n// ============================================================================\n// E2B.dev Provider\n//\n// Uses the `e2b` npm package for sandbox management.\n// Requires E2B_API_KEY environment variable.\n//\n// Sleep/wake: sandbox.pause() freezes state.\n//             Sandbox.connect(sandboxId) resumes (auto-resumes if paused).\n// ============================================================================\n\nconst DEFAULT_TEMPLATE = \"base\"\n\ntype SandboxInstance = any // eslint-disable-line @typescript-eslint/no-explicit-any\n\nconst sandboxes = new Map<string, SandboxInstance>()\n\n/** Look up a sandbox by name or ID via the E2B API. Works across CLI invocations.\n *  Status-only — does NOT call connect(), so it won't auto-resume paused sandboxes. */\nasync function findSandbox(name: string): Promise<SandboxInstance | null> {\n\tconst Sandbox = await getSDK()\n\tconst paginator = Sandbox.list()\n\twhile (paginator.hasNext) {\n\t\tconst items = await paginator.nextItems()\n\t\tfor (const s of items) {\n\t\t\tconst info = (s as unknown) as Record<string, unknown>\n\t\t\tconst meta = info.metadata as\n\t\t\t\t| Record<string, string>\n\t\t\t\t| undefined\n\t\t\tif (\n\t\t\t\tmeta?.[\"hybrid-name\"] === name ||\n\t\t\t\tinfo.sandboxId === name ||\n\t\t\t\t(info.sandboxId as string)?.startsWith(name)\n\t\t\t) {\n\t\t\t\treturn s as SandboxInstance\n\t\t\t}\n\t\t}\n\t}\n\treturn null\n}\n\nasync function getSDK() {\n\ttry {\n\t\tconst { Sandbox } = await import(\"e2b\")\n\t\treturn Sandbox\n\t} catch {\n\t\tthrow new Error(\n\t\t\t\"e2b not installed.\\nInstall with: npm install e2b\",\n\t\t)\n\t}\n}\n\nfunction getAPIKey(): string {\n\tconst key = process.env.E2B_API_KEY\n\tif (!key) {\n\t\tthrow new Error(\n\t\t\t\"E2B_API_KEY not set.\\nGet your key: https://e2b.dev/dashboard?tab=keys\\nSet with: export E2B_API_KEY=e2b_xxx\",\n\t\t)\n\t}\n\treturn key\n}\n\n/** Get a sandbox instance, trying cache first then API lookup + connect.\n *  Connect will auto-resume paused sandboxes. */\nasync function getSandbox(name: string): Promise<SandboxInstance | null> {\n\tconst cached = sandboxes.get(name)\n\tif (cached) return cached\n\n\tconst found = await findSandbox(name)\n\tif (!found) return null\n\n\tconst Sandbox = await getSDK()\n\tconst sandbox = await Sandbox.connect((found as any).sandboxId)\n\tsandboxes.set(name, sandbox)\n\treturn sandbox\n}\n\nexport const e2bProvider: DeployProvider = {\n\tname: \"e2b\",\n\tlabel: \"E2B.dev (Firecracker)\",\n\n\tdefaultName(projectDir: string): string {\n\t\treturn basename(projectDir)\n\t\t\t.toLowerCase()\n\t\t\t.replace(/[^a-z0-9-]/g, \"-\")\n\t\t\t.replace(/-+/g, \"-\")\n\t\t\t.replace(/^-+|-+$/g, \"\")\n\t\t\t.slice(0, 40)\n\t},\n\n\tasync authCheck(): Promise<void> {\n\t\tgetAPIKey()\n\t\tconst Sandbox = await getSDK()\n\t\ttry {\n\t\t\tconst paginator = Sandbox.list()\n\t\t\tawait paginator.nextItems()\n\t\t} catch (err: unknown) {\n\t\t\tconst msg = err instanceof Error ? err.message : String(err)\n\t\t\tif (msg.includes(\"401\") || msg.includes(\"unauthorized\")) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"E2B API key is invalid.\\nGet your key: https://e2b.dev/dashboard?tab=keys\",\n\t\t\t\t)\n\t\t\t}\n\t\t\tthrow new Error(`E2B connection failed: ${msg}`)\n\t\t}\n\t},\n\n\tasync provision(name: string, _opts?: ProvisionOpts): Promise<string> {\n\t\tconst Sandbox = await getSDK()\n\n\t\tconsole.log(`\\n📦 Creating E2B sandbox: ${name}`)\n\n\t\tconst existing = await findSandbox(name)\n\t\tif (existing) {\n\t\t\tconst sandbox = await Sandbox.connect(\n\t\t\t\t(existing as any).sandboxId,\n\t\t\t)\n\t\t\tsandboxes.set(name, sandbox)\n\t\t\tconsole.log(\n\t\t\t\t`   ✓ Resumed existing sandbox: ${(existing as any).sandboxId}`,\n\t\t\t)\n\t\t\treturn (existing as any).sandboxId\n\t\t}\n\n\t\tconst sandbox = await Sandbox.create(DEFAULT_TEMPLATE, {\n\t\t\tmetadata: { \"hybrid-name\": name },\n\t\t})\n\n\t\tsandboxes.set(name, sandbox)\n\t\tconsole.log(`   ✓ Sandbox created: ${sandbox.sandboxId}`)\n\t\treturn sandbox.sandboxId\n\t},\n\n\tasync deploy(instanceId: string, distDir: string): Promise<void> {\n\t\tconst sandbox = await getSandbox(instanceId)\n\t\tif (!sandbox) {\n\t\t\tthrow new Error(\n\t\t\t\t`Sandbox ${instanceId} not found.\\nRun 'hybrid deploy' again to reconnect.`,\n\t\t\t)\n\t\t}\n\n\t\tconsole.log(\"\\n📤 Uploading build artifacts...\")\n\n\t\tconst tarPath = join(\n\t\t\ttmpdir(),\n\t\t\t`hybrid-e2b-deploy-${Date.now()}.tar.gz`,\n\t\t)\n\t\texecFileSync(\"tar\", [\"-czf\", tarPath, \"-C\", distDir, \".\"], {\n\t\t\tstdio: \"pipe\",\n\t\t})\n\n\t\ttry {\n\t\t\tconst fs = await import(\"node:fs/promises\")\n\t\t\tconst tarBuffer = await fs.readFile(tarPath)\n\t\t\tawait sandbox.files.write(\"/tmp/hybrid-deploy.tar.gz\", tarBuffer, {\n\t\t\t\tonProgress: () => {},\n\t\t\t})\n\t\t\tconsole.log(\"   ✓ Upload complete\")\n\t\t} catch (err: unknown) {\n\t\t\tthrow new Error(\n\t\t\t\t`Upload failed: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t)\n\t\t} finally {\n\t\t\tif (existsSync(tarPath)) {\n\t\t\t\ttry {\n\t\t\t\t\tunlinkSync(tarPath)\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t}\n\n\t\tconsole.log(\"\\n📦 Extracting and installing dependencies...\")\n\t\tconst result = await sandbox.commands.run(\n\t\t\t\"cd /home/user && mkdir -p app && tar -xzf /tmp/hybrid-deploy.tar.gz -C app && cd app && npm install --production 2>&1\",\n\t\t\t{ timeout: 120000 },\n\t\t)\n\n\t\tif (result.stderr) {\n\t\t\tconsole.log(`   ⚠️  ${result.stderr.slice(0, 200)}`)\n\t\t}\n\n\t\tif (result.exitCode !== 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`Dependency installation failed (exit ${result.exitCode})`,\n\t\t\t)\n\t\t}\n\n\t\tconsole.log(\"\\n🔧 Starting agent...\")\n\t\tawait sandbox.commands.run(\n\t\t\t\"cd /home/user/app && export NODE_ENV=production AGENT_PORT=8454 && nohup node server/index.cjs > /tmp/agent.log 2>&1 & echo $! > /tmp/agent.pid\",\n\t\t\t{ timeout: 10000 },\n\t\t)\n\n\t\tconsole.log(\"\\n⏳ Waiting for agent to start...\")\n\t\tlet ready = false\n\t\tfor (let i = 0; i < 15; i++) {\n\t\t\ttry {\n\t\t\t\tconst health = await sandbox.commands.run(\n\t\t\t\t\t\"curl -sf http://localhost:8454/health || echo 'not ready'\",\n\t\t\t\t)\n\t\t\t\tif (health.stdout && !health.stdout.includes(\"not ready\")) {\n\t\t\t\t\tready = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Not ready yet\n\t\t\t}\n\t\t\tawait new Promise((r) => setTimeout(r, 2000))\n\t\t}\n\n\t\tif (!ready) {\n\t\t\tconsole.log(\n\t\t\t\t\"   ⚠️  Agent health check timed out (may still be starting)\",\n\t\t\t)\n\t\t} else {\n\t\t\tconsole.log(\"   ✓ Agent running\")\n\t\t}\n\t},\n\n\tasync status(instanceId: string): Promise<InstanceStatus> {\n\t\t// NOTE: Must use findSandbox only — doGetSandbox() calls connect()\n\t\t// which auto-resumes paused sandboxes, so status would never show \"sleeping\".\n\t\tconst info = await findSandbox(instanceId)\n\t\tif (!info) return \"stopped\"\n\t\tconst sbInfo = info as any\n\t\tif (sbInfo.status === \"paused\") return \"sleeping\"\n\t\tif (sbInfo.status === \"running\") return \"running\"\n\t\treturn \"unknown\"\n\t},\n\n\tasync sleep(instanceId: string): Promise<void> {\n\t\tconst sandbox = await getSandbox(instanceId)\n\t\tif (!sandbox) {\n\t\t\tthrow new Error(\n\t\t\t\t`Sandbox ${instanceId} not found.\\nRun 'hybrid deploy' again to reconnect.`,\n\t\t\t)\n\t\t}\n\n\t\tconsole.log(`\\n💤 Pausing E2B sandbox: ${instanceId}`)\n\t\tawait sandbox.pause()\n\t\tsandboxes.delete(instanceId)\n\t\tconsole.log(\"   ✓ Sandbox paused (state preserved on disk)\")\n\t},\n\n\tasync wake(instanceId: string): Promise<void> {\n\t\tconst Sandbox = await getSDK()\n\n\t\tconsole.log(`\\n☀️  Resuming E2B sandbox: ${instanceId}`)\n\t\ttry {\n\t\t\tconst sandbox = await Sandbox.connect(instanceId)\n\t\t\tsandboxes.set(instanceId, sandbox)\n\t\t\tconsole.log(\"   ✓ Sandbox resumed\")\n\t\t} catch (err: unknown) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to resume sandbox: ${err instanceof Error ? err.message : String(err)}\\nThe sandbox may have expired (E2B sandboxes have a maximum lifetime).`,\n\t\t\t)\n\t\t}\n\t},\n\n\tasync logs(instanceId: string, follow = true): Promise<void> {\n\t\tconst sandbox = await getSandbox(instanceId)\n\t\tif (!sandbox) {\n\t\t\tthrow new Error(\n\t\t\t\t`Sandbox ${instanceId} not found.\\nRun 'hybrid deploy' again to reconnect.`,\n\t\t\t)\n\t\t}\n\n\t\tif (follow) {\n\t\t\tlet offset = 0\n\t\t\twhile (true) {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await sandbox.commands.run(\n\t\t\t\t\t\t\"cat /tmp/agent.log 2>/dev/null || echo 'No logs yet'\",\n\t\t\t\t\t)\n\t\t\t\t\tconst output = result.stdout || \"\"\n\t\t\t\t\tif (output.length > offset) {\n\t\t\t\t\t\tprocess.stdout.write(output.slice(offset))\n\t\t\t\t\t\toffset = output.length\n\t\t\t\t\t}\n\t\t\t\t\tawait new Promise((r) => setTimeout(r, 2000))\n\t\t\t\t} catch {\n\t\t\t\t\tawait new Promise((r) => setTimeout(r, 2000))\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst result = await sandbox.commands.run(\n\t\t\t\t\"cat /tmp/agent.log 2>/dev/null || echo 'No logs yet'\",\n\t\t\t)\n\t\t\tconsole.log(result.stdout || \"No logs yet\")\n\t\t}\n\t},\n\n\tasync endpoint(instanceId: string): Promise<string> {\n\t\tconst sandbox = sandboxes.get(instanceId)\n\t\tif (!sandbox) return `https://${instanceId}-8454.e2b.dev`\n\n\t\ttry {\n\t\t\tconst host = await sandbox.getHost(8454)\n\t\t\treturn `https://${host}`\n\t\t} catch {\n\t\t\treturn `https://${instanceId}-8454.e2b.dev`\n\t\t}\n\t},\n\n\tasync teardown(instanceId: string): Promise<void> {\n\t\tconst Sandbox = await getSDK()\n\n\t\tconsole.log(`\\n🗑️  Destroying E2B sandbox: ${instanceId}`)\n\t\ttry {\n\t\t\tconst cached = sandboxes.get(instanceId)\n\t\t\tif (cached) {\n\t\t\t\tawait cached.kill()\n\t\t\t} else {\n\t\t\t\tconst sandbox = await Sandbox.connect(instanceId)\n\t\t\t\tawait sandbox.kill()\n\t\t\t}\n\t\t\tsandboxes.delete(instanceId)\n\t\t\tconsole.log(\"   ✓ Sandbox destroyed\")\n\t\t} catch (err: unknown) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to destroy sandbox: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t)\n\t\t}\n\t},\n}\n","import { execFileSync, spawn } from \"node:child_process\"\nimport { existsSync, unlinkSync } from \"node:fs\"\nimport { tmpdir } from \"node:os\"\nimport { basename, join } from \"node:path\"\nimport type {\n\tDeployProvider,\n\tInstanceStatus,\n\tProvisionOpts\n} from \"../deploy-provider\"\n\n// ============================================================================\n// Northflank Provider\n//\n// Uses the `nf` CLI (or direct API calls) for service management.\n// Northflank deploys Docker containers on Firecracker VMs with\n// auto-scale-to-zero support.\n//\n// Sleep/wake: Scale replicas to 0 (sleep) → inbound request triggers auto-scale to 1 (wake)\n//             Platform manages the cold start automatically.\n// ============================================================================\n\nconst CLI = \"nf\"\n\nfunction runNf(args: string[]): string {\n\treturn execFileSync(CLI, args, {\n\t\tencoding: \"utf-8\",\n\t\tstdio: [\"pipe\", \"pipe\", \"pipe\"]\n\t})\n}\n\nfunction runNfInherit(args: string[]): void {\n\texecFileSync(CLI, args, { stdio: \"inherit\" })\n}\n\nexport const northflankProvider: DeployProvider = {\n\tname: \"northflank\",\n\tlabel: \"Northflank (Firecracker / Auto-scale)\",\n\n\tdefaultName(projectDir: string): string {\n\t\treturn basename(projectDir)\n\t\t\t.toLowerCase()\n\t\t\t.replace(/[^a-z0-9-]/g, \"-\")\n\t\t\t.replace(/-+/g, \"-\")\n\t\t\t.replace(/^-+|-+$/g, \"\")\n\t\t\t.slice(0, 40)\n\t},\n\n\tasync authCheck(): Promise<void> {\n\t\ttry {\n\t\t\tconst result = runNf([\"auth\", \"whoami\"])\n\t\t\tif (!result || result.includes(\"not logged in\")) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Not authenticated with Northflank.\\n    Run: nf auth login\"\n\t\t\t\t)\n\t\t\t}\n\t\t} catch (err: any) {\n\t\t\tif (err.code === \"ENOENT\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"`nf` CLI not found.\\n    Install: https://docs.northflank.com/docs/cli\\n    Or: npm install -g @northflank/cli\"\n\t\t\t\t)\n\t\t\t}\n\t\t\tthrow new Error(\n\t\t\t\t`Northflank CLI error: ${err.stderr || err.message}\\nRun: nf auth login`\n\t\t\t)\n\t\t}\n\t},\n\n\tasync provision(name: string, opts?: ProvisionOpts): Promise<string> {\n\t\t// Northflank provision = create a service via API\n\t\t// We use the CLI to check if a service already exists\n\t\tconst projectId = process.env.NF_PROJECT_ID\n\t\tif (!projectId) {\n\t\t\tthrow new Error(\n\t\t\t\t\"NF_PROJECT_ID not set.\\n    Create a project on Northflank and set: export NF_PROJECT_ID=your-project-id\"\n\t\t\t)\n\t\t}\n\n\t\t// Check if service already exists\n\t\ttry {\n\t\t\tconst existing = runNf([\"services\", \"list\", \"--projectId\", projectId])\n\t\t\tif (existing.toLowerCase().includes(name)) {\n\t\t\t\tconsole.log(`   ✓ Service already exists: ${name}`)\n\t\t\t\treturn name\n\t\t\t}\n\t\t} catch {\n\t\t\t// Service doesn't exist, create it\n\t\t}\n\n\t\t// Create the service using the Northflank API\n\t\t// The nf CLI doesn't support create for all service types, so we use the API\n\t\tconst apiUrl = process.env.NF_API_URL || \"https://api.northflank.com\"\n\t\tconst memory = opts?.memory || 512\n\t\tconst cpus = opts?.cpus || 1\n\n\t\tconsole.log(`\\n📦 Creating Northflank service: ${name}`)\n\t\tconsole.log(`   Project: ${projectId}`)\n\t\tconsole.log(`   Memory: ${memory}MB, CPUs: ${cpus}`)\n\n\t\t// Build the service spec JSON\n\t\tconst spec = {\n\t\t\tname: name,\n\t\t\tprojectId: projectId,\n\t\t\ttype: \"service\",\n\t\t\timage: {\n\t\t\t\timage: `registry.northflank.com/${projectId}/${name}:latest`\n\t\t\t},\n\t\t\tresources: {\n\t\t\t\tinstances: 1,\n\t\t\t\tcontainerResources: {\n\t\t\t\t\tcpu: {\n\t\t\t\t\t\treq: cpus,\n\t\t\t\t\t\tlimit: cpus\n\t\t\t\t\t},\n\t\t\t\t\tmemory: {\n\t\t\t\t\t\treq: memory,\n\t\t\t\t\t\tlimit: memory\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tports: [\n\t\t\t\t{\n\t\t\t\t\tname: \"default\",\n\t\t\t\t\tprotocol: \"HTTP\",\n\t\t\t\t\tcontainerPort: 8454,\n\t\t\t\t\tingress: {\n\t\t\t\t\t\tautoSubdomain: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\tautoscaling: {\n\t\t\t\tenabled: true,\n\t\t\t\tminReplicas: 0,\n\t\t\t\tmaxReplicas: 1\n\t\t\t}\n\t\t}\n\n\t\tconst specPath = join(tmpdir(), `nf-spec-${Date.now()}.json`)\n\t\tconst { writeFileSync } = await import(\"node:fs\")\n\t\twriteFileSync(specPath, JSON.stringify(spec, null, 2))\n\n\t\t// Use nf deploy or the API to create the service\n\t\ttry {\n\t\t\trunNfInherit([\"deploy\", \"service\", specPath])\n\t\t} finally {\n\t\t\tif (existsSync(specPath)) {\n\t\t\t\ttry {\n\t\t\t\t\tunlinkSync(specPath)\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t}\n\n\t\tconsole.log(\"   ✓ Service created with auto-scale-to-zero enabled\")\n\t\treturn name\n\t},\n\n\tasync deploy(instanceId: string, distDir: string): Promise<void> {\n\t\tconst projectId = process.env.NF_PROJECT_ID\n\t\tif (!projectId) {\n\t\t\tthrow new Error(\"NF_PROJECT_ID not set.\")\n\t\t}\n\n\t\tconsole.log(\"\\n📦 Building and pushing Docker image...\")\n\n\t\t// Build Docker image from dist\n\t\tconst imageTag = `registry.northflank.com/${projectId}/${instanceId}:latest`\n\n\t\t// Check if docker is available\n\t\trunNf([\"info\"]) // Just to verify CLI works\n\n\t\t// Build the image\n\t\tconsole.log(\"   Building Docker image...\")\n\t\texecFileSync(\"docker\", [\"build\", \"-t\", imageTag, \".\"], {\n\t\t\tcwd: distDir,\n\t\t\tstdio: \"inherit\"\n\t\t})\n\n\t\t// Push the image\n\t\tconsole.log(\"   Pushing to Northflank registry...\")\n\t\texecFileSync(\"docker\", [\"push\", imageTag], {\n\t\t\tstdio: \"inherit\"\n\t\t})\n\n\t\t// Deploy/update the service with the new image\n\t\tconsole.log(\"\\n🔧 Deploying service...\")\n\t\ttry {\n\t\t\trunNfInherit([\n\t\t\t\t\"services\",\n\t\t\t\t\"set-image\",\n\t\t\t\t\"--projectId\",\n\t\t\t\tprojectId,\n\t\t\t\t\"--serviceId\",\n\t\t\t\tinstanceId,\n\t\t\t\t\"--image\",\n\t\t\t\timageTag\n\t\t\t])\n\t\t} catch (err: any) {\n\t\t\t// Service may already be deploying, ignore\n\t\t\tconsole.log(\"   ⚠️  Service update initiated\")\n\t\t}\n\n\t\t// Wait for deployment to be ready\n\t\tconsole.log(\"\\n⏳ Waiting for deployment to be ready...\")\n\t\tfor (let i = 0; i < 60; i++) {\n\t\t\ttry {\n\t\t\t\tconst status = runNf([\n\t\t\t\t\t\"services\",\n\t\t\t\t\t\"status\",\n\t\t\t\t\t\"--projectId\",\n\t\t\t\t\tprojectId,\n\t\t\t\t\t\"--serviceId\",\n\t\t\t\t\tinstanceId\n\t\t\t\t])\n\t\t\t\tif (\n\t\t\t\t\tstatus.toLowerCase().includes(\"deployed\") ||\n\t\t\t\t\tstatus.toLowerCase().includes(\"running\")\n\t\t\t\t) {\n\t\t\t\t\tconsole.log(\"   ✓ Service deployed\")\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Not ready yet\n\t\t\t}\n\t\t\tif (i % 10 === 9) {\n\t\t\t\tconsole.log(`   Still deploying... (${i + 1}/60)`)\n\t\t\t}\n\t\t\tawait new Promise((r) => setTimeout(r, 5000))\n\t\t}\n\n\t\tconsole.log(\"   ⚠️  Deployment may still be in progress\")\n\t},\n\n\tasync status(instanceId: string): Promise<InstanceStatus> {\n\t\tconst projectId = process.env.NF_PROJECT_ID\n\t\tif (!projectId) return \"unknown\"\n\n\t\ttry {\n\t\t\tconst status = runNf([\n\t\t\t\t\"services\",\n\t\t\t\t\"status\",\n\t\t\t\t\"--projectId\",\n\t\t\t\tprojectId,\n\t\t\t\t\"--serviceId\",\n\t\t\t\tinstanceId\n\t\t\t])\n\n\t\t\tconst lower = status.toLowerCase()\n\t\t\tif (lower.includes(\"deployed\") || lower.includes(\"running\")) {\n\t\t\t\treturn \"running\"\n\t\t\t}\n\t\t\tif (lower.includes(\"stopped\") || lower.includes(\"paused\")) {\n\t\t\t\treturn \"sleeping\"\n\t\t\t}\n\t\t\tif (lower.includes(\"deploying\")) {\n\t\t\t\treturn \"provisioning\"\n\t\t\t}\n\t\t\treturn \"unknown\"\n\t\t} catch {\n\t\t\treturn \"stopped\"\n\t\t}\n\t},\n\n\tasync sleep(instanceId: string): Promise<void> {\n\t\tconst projectId = process.env.NF_PROJECT_ID\n\t\tif (!projectId) {\n\t\t\tthrow new Error(\"NF_PROJECT_ID not set.\")\n\t\t}\n\n\t\tconsole.log(`\\n💤 Scaling Northflank service to 0: ${instanceId}`)\n\t\ttry {\n\t\t\trunNfInherit([\n\t\t\t\t\"services\",\n\t\t\t\t\"scale\",\n\t\t\t\t\"--projectId\",\n\t\t\t\tprojectId,\n\t\t\t\t\"--serviceId\",\n\t\t\t\tinstanceId,\n\t\t\t\t\"--replicas\",\n\t\t\t\t\"0\"\n\t\t\t])\n\t\t\tconsole.log(\"   ✓ Service scaled to 0 (sleeping)\")\n\t\t} catch (err: any) {\n\t\t\tthrow new Error(`Failed to scale down: ${err.stderr || err.message}`)\n\t\t}\n\t},\n\n\tasync wake(instanceId: string): Promise<void> {\n\t\tconst projectId = process.env.NF_PROJECT_ID\n\t\tif (!projectId) {\n\t\t\tthrow new Error(\"NF_PROJECT_ID not set.\")\n\t\t}\n\n\t\tconsole.log(`\\n☀️  Scaling Northflank service to 1: ${instanceId}`)\n\t\ttry {\n\t\t\trunNfInherit([\n\t\t\t\t\"services\",\n\t\t\t\t\"scale\",\n\t\t\t\t\"--projectId\",\n\t\t\t\tprojectId,\n\t\t\t\t\"--serviceId\",\n\t\t\t\tinstanceId,\n\t\t\t\t\"--replicas\",\n\t\t\t\t\"1\"\n\t\t\t])\n\t\t\tconsole.log(\"   ✓ Service scaling up (may take 30-60s)\")\n\t\t} catch (err: any) {\n\t\t\tthrow new Error(`Failed to scale up: ${err.stderr || err.message}`)\n\t\t}\n\t},\n\n\tasync logs(instanceId: string, follow = true): Promise<void> {\n\t\tconst projectId = process.env.NF_PROJECT_ID\n\t\tif (!projectId) {\n\t\t\tthrow new Error(\"NF_PROJECT_ID not set.\")\n\t\t}\n\n\t\tconst args = [\n\t\t\t\"services\",\n\t\t\t\"logs\",\n\t\t\t\"--projectId\",\n\t\t\tprojectId,\n\t\t\t\"--serviceId\",\n\t\t\tinstanceId\n\t\t]\n\t\tif (follow) args.push(\"--follow\")\n\n\t\tconst child = spawn(CLI, args, { stdio: \"inherit\" })\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tchild.on(\"exit\", (code) => {\n\t\t\t\tif (code === 0) resolve()\n\t\t\t\telse reject(new Error(`nf logs exited with code ${code}`))\n\t\t\t})\n\t\t})\n\t},\n\n\tasync endpoint(instanceId: string): Promise<string> {\n\t\tconst projectId = process.env.NF_PROJECT_ID\n\t\tif (!projectId) return `https://${instanceId}.northflank.app`\n\n\t\ttry {\n\t\t\t// Try to get the actual URL from the service info\n\t\t\tconst info = runNf([\n\t\t\t\t\"services\",\n\t\t\t\t\"info\",\n\t\t\t\t\"--projectId\",\n\t\t\t\tprojectId,\n\t\t\t\t\"--serviceId\",\n\t\t\t\tinstanceId\n\t\t\t])\n\t\t\t// Parse URL from service info\n\t\t\tconst match = info.match(/https?:\\/\\/[^\\s]+/i)\n\t\t\tif (match) return match[0]\n\t\t} catch {\n\t\t\t// Fallback to predicted URL\n\t\t}\n\n\t\treturn `https://${instanceId}.${projectId}.northflank.app`\n\t},\n\n\tasync teardown(instanceId: string): Promise<void> {\n\t\tconst projectId = process.env.NF_PROJECT_ID\n\t\tif (!projectId) {\n\t\t\tthrow new Error(\"NF_PROJECT_ID not set.\")\n\t\t}\n\n\t\tconsole.log(`\\n🗑️  Destroying Northflank service: ${instanceId}`)\n\t\ttry {\n\t\t\trunNfInherit([\n\t\t\t\t\"services\",\n\t\t\t\t\"delete\",\n\t\t\t\t\"--projectId\",\n\t\t\t\tprojectId,\n\t\t\t\t\"--serviceId\",\n\t\t\t\tinstanceId,\n\t\t\t\t\"--permanent\"\n\t\t\t])\n\t\t\tconsole.log(\"   ✓ Service destroyed\")\n\t\t} catch (err: any) {\n\t\t\tthrow new Error(`Failed to destroy service: ${err.stderr || err.message}`)\n\t\t}\n\t}\n}\n","import { execFileSync, spawn } from \"node:child_process\"\nimport { existsSync, unlinkSync } from \"node:fs\"\nimport { tmpdir } from \"node:os\"\nimport { basename, join } from \"node:path\"\nimport type {\n\tDeployProvider,\n\tInstanceStatus,\n\tProvisionOpts\n} from \"../deploy-provider\"\n\n// ============================================================================\n// Daytona Provider\n//\n// Uses the `daytona` CLI for workspace management.\n// Daytona creates Firecracker-based dev workspaces on local or cloud providers.\n//\n// Sleep/wake: `daytona stop` / `daytona start` — full stop/start cycle (~30s wake)\n// This is the slowest wake time of all providers.\n// ============================================================================\n\nconst CLI = \"daytona\"\n\nfunction runDaytona(args: string[]): string {\n\treturn execFileSync(CLI, args, {\n\t\tencoding: \"utf-8\",\n\t\tstdio: [\"pipe\", \"pipe\", \"pipe\"]\n\t})\n}\n\nfunction runDaytonaInherit(args: string[]): void {\n\texecFileSync(CLI, args, { stdio: \"inherit\" })\n}\n\nexport const daytonaProvider: DeployProvider = {\n\tname: \"daytona\",\n\tlabel: \"Daytona.io (Firecracker / Dev Workspace)\",\n\n\tdefaultName(projectDir: string): string {\n\t\treturn basename(projectDir)\n\t\t\t.toLowerCase()\n\t\t\t.replace(/[^a-z0-9-]/g, \"-\")\n\t\t\t.replace(/-+/g, \"-\")\n\t\t\t.replace(/^-+|-+$/g, \"\")\n\t\t\t.slice(0, 40)\n\t},\n\n\tasync authCheck(): Promise<void> {\n\t\ttry {\n\t\t\trunDaytona([\"info\"])\n\t\t} catch (err: any) {\n\t\t\tif (err.code === \"ENOENT\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"`daytona` CLI not found.\\n    \" +\n\t\t\t\t\t\t\"Install: https://www.daytona.io/docs/getting-started/installation/\\n    \" +\n\t\t\t\t\t\t\"Or: curl -NF https://download.daytona.io/daytona/install.sh | sh\"\n\t\t\t\t)\n\t\t\t}\n\t\t\tthrow new Error(`Daytona CLI error: ${err.stderr || err.message}`)\n\t\t}\n\t},\n\n\tasync provision(name: string, opts?: ProvisionOpts): Promise<string> {\n\t\t// Check if workspace already exists\n\t\ttry {\n\t\t\tconst existing = runDaytona([\"list\"])\n\t\t\t// Parse daytona list output to find matching workspace\n\t\t\tconst lines = existing.split(\"\\n\")\n\t\t\tconst found = lines.find((l) => l.includes(name))\n\t\t\tif (found) {\n\t\t\t\tconsole.log(`   ⚠️  Workspace already exists: ${name}`)\n\t\t\t\treturn name\n\t\t\t}\n\t\t} catch {\n\t\t\t// No workspaces listed, create new\n\t\t}\n\n\t\tconsole.log(`\\n📦 Creating Daytona workspace: ${name}`)\n\n\t\t// Create workspace with Node.js image\n\t\tconst image = opts?.memory ? \"node:20\" : \"node:20\"\n\t\tconst args = [\"create\", \"--name\", name, \"--image\", image]\n\n\t\t// Add provider flag if specified\n\t\tconst provider = process.env.DAYTONA_PROVIDER\n\t\tif (provider) {\n\t\t\targs.push(\"--provider\", provider)\n\t\t}\n\n\t\trunDaytonaInherit(args)\n\t\tconsole.log(\"   ✓ Workspace created\")\n\t\treturn name\n\t},\n\n\tasync deploy(instanceId: string, distDir: string): Promise<void> {\n\t\tconsole.log(\"\\n📤 Uploading build artifacts...\")\n\n\t\tconst tarPath = join(tmpdir(), `hybrid-daytona-${Date.now()}.tar.gz`)\n\t\texecFileSync(\"tar\", [\"-czf\", tarPath, \"-C\", distDir, \".\"], {\n\t\t\tstdio: \"pipe\"\n\t\t})\n\n\t\t// Create app directory\n\t\trunDaytonaInherit([\n\t\t\t\"code\",\n\t\t\tinstanceId,\n\t\t\t\"--command\",\n\t\t\t\"mkdir -p /workspace/app\"\n\t\t])\n\n\t\t// Upload tarball using daytona cp (if available) or code command\n\t\ttry {\n\t\t\trunDaytonaInherit([\n\t\t\t\t\"cp\",\n\t\t\t\ttarPath,\n\t\t\t\t`${instanceId}:/workspace/app/hybrid-deploy.tar.gz`\n\t\t\t])\n\t\t} catch {\n\t\t\tthrow new Error(\n\t\t\t\t`daytona cp failed for instance ${instanceId}.\\n` +\n\t\t\t\t\t`Ensure the Daytona CLI supports file copy: daytona cp ${tarPath} ${instanceId}:/workspace/app/hybrid-deploy.tar.gz`\n\t\t\t)\n\t\t}\n\n\t\t// Extract and install deps\n\t\trunDaytonaInherit([\n\t\t\t\"code\",\n\t\t\tinstanceId,\n\t\t\t\"--command\",\n\t\t\t\"cd /workspace/app && tar -xzf hybrid-deploy.tar.gz && npm install --production\"\n\t\t])\n\n\t\t// Clean up tarball\n\t\tif (existsSync(tarPath)) {\n\t\t\ttry {\n\t\t\t\tunlinkSync(tarPath)\n\t\t\t} catch {}\n\t\t}\n\n\t\t// Start the agent\n\t\tconsole.log(\"\\n🔧 Starting agent...\")\n\t\trunDaytonaInherit([\n\t\t\t\"code\",\n\t\t\tinstanceId,\n\t\t\t\"--command\",\n\t\t\t\"cd /workspace/app && export NODE_ENV=production AGENT_PORT=8454 && nohup node server/index.cjs > /workspace/app/agent.log 2>&1 &\"\n\t\t])\n\n\t\t// Wait for health check\n\t\tconsole.log(\"\\n⏳ Waiting for agent to start...\")\n\t\tlet ready = false\n\t\tfor (let i = 0; i < 15; i++) {\n\t\t\ttry {\n\t\t\t\tconst result = runDaytona([\n\t\t\t\t\t\"code\",\n\t\t\t\t\tinstanceId,\n\t\t\t\t\t\"--command\",\n\t\t\t\t\t\"curl -sf http://localhost:8454/health || echo not-ready\"\n\t\t\t\t])\n\t\t\t\tif (result && !result.includes(\"not-ready\")) {\n\t\t\t\t\tready = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Agent not ready yet\n\t\t\t}\n\t\t\tawait new Promise((r) => setTimeout(r, 2000))\n\t\t}\n\n\t\tif (!ready) {\n\t\t\tconsole.log(\"   ⚠️  Agent health check timed out\")\n\t\t} else {\n\t\t\tconsole.log(\"   ✓ Agent running\")\n\t\t}\n\t},\n\n\tasync status(instanceId: string): Promise<InstanceStatus> {\n\t\ttry {\n\t\t\tconst list = runDaytona([\"list\"])\n\t\t\tconst lines = list.split(\"\\n\")\n\t\t\tconst found = lines.find((l) => l.includes(instanceId))\n\t\t\tif (!found) return \"stopped\"\n\n\t\t\tconst lower = found.toLowerCase()\n\t\t\tif (lower.includes(\"started\") || lower.includes(\"running\")) {\n\t\t\t\treturn \"running\"\n\t\t\t}\n\t\t\tif (lower.includes(\"stopped\")) {\n\t\t\t\treturn \"stopped\"\n\t\t\t}\n\t\t\treturn \"unknown\"\n\t\t} catch {\n\t\t\treturn \"unknown\"\n\t\t}\n\t},\n\n\tasync sleep(instanceId: string): Promise<void> {\n\t\tconsole.log(`\\n💤 Stopping Daytona workspace: ${instanceId}`)\n\t\ttry {\n\t\t\trunDaytonaInherit([\"stop\", instanceId])\n\t\t\tconsole.log(\"   ✓ Workspace stopped\")\n\t\t} catch (err: any) {\n\t\t\tthrow new Error(`Failed to stop workspace: ${err.stderr || err.message}`)\n\t\t}\n\t},\n\n\tasync wake(instanceId: string): Promise<void> {\n\t\tconsole.log(`\\n☀️  Starting Daytona workspace: ${instanceId}`)\n\t\ttry {\n\t\t\trunDaytonaInherit([\"start\", instanceId])\n\t\t\tconsole.log(\"   ✓ Workspace starting (~30s)\")\n\t\t} catch (err: any) {\n\t\t\tthrow new Error(`Failed to start workspace: ${err.stderr || err.message}`)\n\t\t}\n\t},\n\n\tasync logs(instanceId: string, follow = true): Promise<void> {\n\t\tconst args = follow\n\t\t\t? [\"code\", instanceId, \"--command\", \"tail -f /workspace/app/agent.log\"]\n\t\t\t: [\"code\", instanceId, \"--command\", \"cat /workspace/app/agent.log\"]\n\n\t\tconst child = spawn(CLI, args, { stdio: \"inherit\" })\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tchild.on(\"exit\", (code) => {\n\t\t\t\tif (code === 0) resolve()\n\t\t\t\telse reject(new Error(`daytona exited with code ${code}`))\n\t\t\t})\n\t\t})\n\t},\n\n\tasync endpoint(instanceId: string): Promise<string> {\n\t\t// Daytona workspaces don't have public endpoints by default\n\t\t// Would need to configure port forwarding\n\t\treturn `daytona://${instanceId}`\n\t},\n\n\tasync teardown(instanceId: string): Promise<void> {\n\t\tconsole.log(`\\n🗑️  Destroying Daytona workspace: ${instanceId}`)\n\t\ttry {\n\t\t\trunDaytonaInherit([\"remove\", instanceId])\n\t\t\tconsole.log(\"   ✓ Workspace destroyed\")\n\t\t} catch (err: any) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to destroy workspace: ${err.stderr || err.message}`\n\t\t\t)\n\t\t}\n\t}\n}\n","import type { DeployProvider, ProviderName } from \"./deploy-provider\"\n\ntype ProviderEntry = DeployProvider | (() => Promise<DeployProvider>)\n\nconst providers: Record<ProviderName, ProviderEntry | undefined> = {\n\tsprites: () =>\n\t\timport(\"./providers/sprite.provider\").then((m) => m.spriteProvider),\n\te2b: () => import(\"./providers/e2b.provider\").then((m) => m.e2bProvider),\n\tnorthflank: () =>\n\t\timport(\"./providers/northflank.provider\").then((m) => m.northflankProvider),\n\tdaytona: () =>\n\t\timport(\"./providers/daytona.provider\").then((m) => m.daytonaProvider)\n}\n\nexport async function getProvider(name: ProviderName): Promise<DeployProvider> {\n\tconst entry = providers[name]\n\tif (!entry) {\n\t\tthrow new Error(\n\t\t\t`Provider \"${name}\" is not yet implemented.\\nAvailable providers: sprites, e2b, northflank, daytona`\n\t\t)\n\t}\n\tif (typeof entry === \"function\") {\n\t\treturn entry()\n\t}\n\treturn entry as DeployProvider\n}\n\nexport function getAvailableProviders(): ProviderName[] {\n\treturn (Object.keys(providers) as ProviderName[]).filter(\n\t\t(n) => providers[n] != null\n\t)\n}\n","import {\n\tcpSync,\n\texistsSync,\n\tmkdirSync,\n\treadFileSync,\n\trmSync,\n\twriteFileSync\n} from \"node:fs\"\nimport { resolve } from \"node:path\"\nimport type { ProviderName } from \"./deploy-provider\"\nimport { getProvider } from \"./index\"\n\n// ============================================================================\n// Unified Deploy Orchestration\n// ============================================================================\n\nexport interface DeployOptions {\n\t/** Platform/provider name (sprites, e2b, northflank, daytona) */\n\tplatform?: string\n\t/** Instance name (VM name) */\n\tname?: string\n\t/** Skip build step */\n\tskipBuild?: boolean\n\t/** Force recreate instance even if it exists */\n\tforce?: boolean\n}\n\nexport async function runDeploy(\n\toptions: DeployOptions,\n\tprojectRoot: string,\n\tpackageDir: string\n) {\n\t// 1. Resolve platform\n\tconst platform = resolvePlatform(options.platform, projectRoot)\n\n\t// 2. Load provider\n\tconst provider = await getProvider(platform as ProviderName)\n\tconsole.log(`\\n🚀 Deploying to ${provider.label}...`)\n\n\t// 3. Auth check\n\ttry {\n\t\tawait provider.authCheck()\n\t} catch (err: any) {\n\t\tconsole.error(`\\n❌ ${err.message}`)\n\t\tprocess.exit(1)\n\t}\n\n\t// 4. Build\n\tif (!options.skipBuild) {\n\t\tawait runBuild(projectRoot, packageDir)\n\t}\n\n\t// 5. Determine instance name\n\tconst distDir = resolve(projectRoot, \"dist\")\n\tconst instanceName = options.name || provider.defaultName(projectRoot)\n\n\t// 6. Provision or reuse based on current status\n\tconsole.log(`\\n📋 Instance: ${instanceName}`)\n\tconst existingStatus = await provider.status(instanceName)\n\n\tif (options.force) {\n\t\tif (existingStatus === \"running\" || existingStatus === \"sleeping\") {\n\t\t\tawait provider.teardown(instanceName)\n\t\t}\n\t\tawait provider.provision(instanceName)\n\t} else if (existingStatus === \"sleeping\") {\n\t\tconsole.log(`   ☀️  Waking sleeping instance...`)\n\t\tawait provider.wake(instanceName)\n\t} else if (existingStatus === \"running\") {\n\t\tconsole.log(`   ⚠️  Instance \"${instanceName}\" is already running.`)\n\t\tconst prompts = (await import(\"prompts\")).default\n\t\tconst choice = await prompts({\n\t\t\ttype: \"select\",\n\t\t\tname: \"action\",\n\t\t\tmessage: \"What do you want to do?\",\n\t\t\tchoices: [\n\t\t\t\t{ title: \"Redeploy (overwrite artifacts)\", value: \"redeploy\" },\n\t\t\t\t{ title: \"Force recreate VM\", value: \"force\" },\n\t\t\t\t{ title: \"Cancel\", value: \"cancel\" },\n\t\t\t],\n\t\t})\n\t\tif (choice.action === \"cancel\") {\n\t\t\tconsole.log(\"\\n  Cancelled.\\n\")\n\t\t\tprocess.exit(0)\n\t\t}\n\t\tif (choice.action === \"force\") {\n\t\t\tawait provider.teardown(instanceName)\n\t\t\tawait provider.provision(instanceName)\n\t\t}\n\t\t// redeploy: use existing instance, just push new artifacts\n\t} else if (existingStatus === \"unknown\" || existingStatus === \"stopped\") {\n\t\tawait provider.provision(instanceName)\n\t} else if (existingStatus === \"provisioning\") {\n\t\tconsole.error(`   ⏳ Instance still provisioning, try again shortly.`)\n\t\tprocess.exit(1)\n\t} else if (existingStatus === \"error\") {\n\t\tconsole.error(`   ❌ Instance in error state. Run 'hybrid deploy teardown ${instanceName}' then retry.`)\n\t\tprocess.exit(1)\n\t}\n\n\t// 7. Deploy artifacts\n\tawait provider.deploy(instanceName, distDir)\n\n\t// 8. Print results\n\tconst endpoint = await provider.endpoint(instanceName)\n\tconsole.log(`\\n   Instance: ${instanceName}`)\n\tconsole.log(`   URL: ${endpoint}`)\n\tconsole.log(`   Health: ${endpoint}/health`)\n\tconsole.log(`   Chat: ${endpoint}/api/chat`)\n\tconsole.log(\"\\n✅ Deployed!\")\n}\n\nexport async function runSleep(\n\tname: string,\n\tplatform: string | undefined,\n\tprojectRoot: string\n) {\n\tconst provider = await getProvider(\n\t\tresolvePlatform(platform, projectRoot) as ProviderName\n\t)\n\tawait provider.authCheck()\n\tawait provider.sleep(name)\n}\n\nexport async function runWake(\n\tname: string,\n\tplatform: string | undefined,\n\tprojectRoot: string\n) {\n\tconst provider = await getProvider(\n\t\tresolvePlatform(platform, projectRoot) as ProviderName\n\t)\n\tawait provider.authCheck()\n\tawait provider.wake(name)\n}\n\nexport async function runStatus(\n\tname: string,\n\tplatform: string | undefined,\n\tprojectRoot: string\n) {\n\tconst provider = await getProvider(\n\t\tresolvePlatform(platform, projectRoot) as ProviderName\n\t)\n\tawait provider.authCheck()\n\tconst status = await provider.status(name)\n\tconst endpoint = await provider.endpoint(name)\n\tconsole.log(`\\n📋 Instance: ${name}`)\n\tconsole.log(`   Status: ${status}`)\n\tconsole.log(`   URL: ${endpoint}`)\n}\n\nexport async function runLogs(\n\tname: string,\n\tfollow: boolean,\n\tplatform: string | undefined,\n\tprojectRoot: string\n) {\n\tconst provider = await getProvider(\n\t\tresolvePlatform(platform, projectRoot) as ProviderName\n\t)\n\tawait provider.authCheck()\n\tawait provider.logs(name, follow)\n}\n\nexport async function runTeardown(\n\tname: string,\n\tplatform: string | undefined,\n\tprojectRoot: string\n) {\n\tconst provider = await getProvider(\n\t\tresolvePlatform(platform, projectRoot) as ProviderName\n\t)\n\tawait provider.authCheck()\n\tawait provider.teardown(name)\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction resolvePlatform(\n\tplatform?: string,\n\tprojectRoot?: string\n): ProviderName {\n\tif (platform) return platform as ProviderName\n\n\t// Check hybrid.config.ts\n\tif (projectRoot) {\n\t\tconst configPath = resolve(projectRoot, \"hybrid.config.ts\")\n\t\tif (existsSync(configPath)) {\n\t\t\tconst content = readFileSync(configPath, \"utf-8\")\n\t\t\tconst match = content.match(\n\t\t\t\t/(?:platform|deployPlatform)\\s*[=:]\\s*[\"']([^\"']+)[\"']/\n\t\t\t)\n\t\t\tif (match) return match[1] as ProviderName\n\t\t}\n\t}\n\n\t// Default to sprites (only implemented provider right now)\n\treturn \"sprites\"\n}\n\n// ============================================================================\n// Build (extracted subset for deploy use)\n// ============================================================================\n\nasync function runBuild(projectRoot: string, packageDir: string) {\n\tconst distDir = resolve(projectRoot, \"dist\")\n\n\tconsole.log(\"\\n🔧 Building agent...\")\n\n\tif (existsSync(distDir)) {\n\t\trmSync(distDir, { recursive: true, force: true })\n\t}\n\tmkdirSync(distDir, { recursive: true })\n\tmkdirSync(resolve(distDir, \"server\"), { recursive: true })\n\n\tconsole.log(\"📦 Copying agent runtime...\")\n\tconst agentDistDir = resolve(packageDir, \"dist\")\n\tconst files = [\"server/index.cjs\"]\n\tfor (const file of files) {\n\t\tconst src = resolve(agentDistDir, file)\n\t\tif (existsSync(src)) {\n\t\t\tcpSync(src, resolve(distDir, file))\n\t\t}\n\t}\n\n\tconsole.log(\"📋 Copying agent config...\")\n\tconst configFiles = [\n\t\t\"SOUL.md\",\n\t\t\"AGENTS.md\",\n\t\t\"IDENTITY.md\",\n\t\t\"TOOLS.md\",\n\t\t\"BOOT.md\",\n\t\t\"BOOTSTRAP.md\",\n\t\t\"HEARTBEAT.md\",\n\t\t\"USER.md\"\n\t]\n\tfor (const file of configFiles) {\n\t\tconst src = resolve(projectRoot, file)\n\t\tif (existsSync(src)) {\n\t\t\tcpSync(src, resolve(distDir, file))\n\t\t}\n\t}\n\n\t// Copy credentials\n\tconst credsDir = resolve(projectRoot, \"credentials\")\n\tif (existsSync(credsDir)) {\n\t\tcpSync(credsDir, resolve(distDir, \"credentials\"), { recursive: true })\n\t}\n\n\t// package.json\n\tconst deployPkg = {\n\t\tname: \"hybrid\",\n\t\tversion: \"1.0.0\",\n\t\ttype: \"module\",\n\t\tdependencies: {\n\t\t\t\"@anthropic-ai/claude-agent-sdk\": \"^0.2.38\",\n\t\t\t\"@hono/node-server\": \"^1.13.5\",\n\t\t\tai: \"^6.0.0\",\n\t\t\t\"better-sqlite3\": \"^11.0.0\",\n\t\t\tdotenv: \"^16.4.5\",\n\t\t\thono: \"^4.10.8\",\n\t\t\t\"sql.js\": \"^1.11.0\",\n\t\t\tzod: \"^4.0.0\"\n\t\t}\n\t}\n\twriteFileSync(\n\t\tresolve(distDir, \"package.json\"),\n\t\tJSON.stringify(deployPkg, null, 2)\n\t)\n\n\t// Generate Dockerfile — only COPY files that exist in dist\n\tconst present = configFiles.filter((f) =>\n\t\texistsSync(resolve(distDir, f)),\n\t)\n\tconst hasCredentials = existsSync(resolve(distDir, \"credentials\"))\n\tconst configCopy =\n\t\tpresent.length > 0 ? `COPY ${present.join(\" \")} ./` : \"\"\n\tconst credCopy = hasCredentials\n\t\t? \"COPY credentials/ ./credentials/\"\n\t\t: \"COPY .hybrid-deploy.json ./\"\n\n\twriteFileSync(\n\t\tresolve(distDir, \"Dockerfile\"),\n\t\t`FROM node:20-bookworm-slim\nWORKDIR /app\nCOPY package.json ./\nRUN npm install --production\nCOPY server/ ./server/\nCOPY ${configCopy} ./\n${credCopy}\nENV AGENT_PORT=8454\nENV NODE_ENV=production\nENV DATA_ROOT=/app/data\nEXPOSE 8454\nUSER node\nCMD [\"node\", \"server/index.cjs\"]\n`\n\t)\n\n\t// start.sh\n\twriteFileSync(\n\t\tresolve(distDir, \"start.sh\"),\n\t\t`#!/bin/sh\\nnode server/index.cjs\\n`\n\t)\n\n\t// .hybrid-deploy.json manifest\n\twriteFileSync(\n\t\tresolve(distDir, \".hybrid-deploy.json\"),\n\t\tJSON.stringify(\n\t\t\t{\n\t\t\t\tversion: 1,\n\t\t\t\tprovider: \"firecracker\",\n\t\t\t\tstartCommand: \"node server/index.cjs\",\n\t\t\t\tport: 8454,\n\t\t\t\thealthPath: \"/health\"\n\t\t\t},\n\t\t\tnull,\n\t\t\t2\n\t\t)\n\t)\n\n\tconsole.log(\"\\n✅ Build complete!\")\n\tconsole.log(`   Output: ${distDir}`)\n}\n","#!/usr/bin/env node\n\nimport { existsSync } from \"node:fs\"\nimport { dirname, resolve } from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\nimport { config } from \"dotenv\"\n\nfunction findProjectRoot(startDir: string): string {\n\tconst markers = [\"package.json\", \"hybrid.config.ts\", \"SOUL.md\"]\n\tlet current = startDir\n\twhile (current !== \"/\") {\n\t\tfor (const marker of markers) {\n\t\t\tif (existsSync(resolve(current, marker))) {\n\t\t\t\treturn current\n\t\t\t}\n\t\t}\n\t\tconst parent = resolve(current, \"..\")\n\t\tif (parent === current) break\n\t\tcurrent = parent\n\t}\n\treturn startDir\n}\n\nconst cwdIndex = process.argv.findIndex((a) => a === \"--cwd\")\nif (cwdIndex !== -1 && process.argv[cwdIndex + 1]) {\n\tprocess.chdir(process.argv[cwdIndex + 1])\n\tprocess.argv.splice(cwdIndex, 2)\n}\n\nconst projectRoot = findProjectRoot(process.cwd())\n\nfor (const envFile of [\".env\", \".env.local\"]) {\n\tconst path = resolve(projectRoot, envFile)\n\tif (existsSync(path)) {\n\t\tconfig({ path })\n\t}\n}\n\n// Node version check\nconst [major] = process.versions.node.split(\".\").map(Number)\nif (!major || major < 20) {\n\tconsole.error(\"Error: Node.js version 20 or higher is required\")\n\tprocess.exit(1)\n}\n\n// Get package directory (where bundled files live)\nconst __dirname = dirname(fileURLToPath(import.meta.url))\nconst packageDir = resolve(__dirname, \"..\")\n\nasync function main() {\n\tconst args = process.argv.slice(2)\n\tconst command = args[0]\n\n\tif (command === \"build\") {\n\t\tconst targetFlag = args.indexOf(\"--target\")\n\t\treturn build(targetFlag !== -1 ? args[targetFlag + 1] : args[1])\n\t}\n\tif (command === \"dev\") return dev(args.includes(\"--docker\"))\n\tif (command === \"start\") return start()\n\tif (command === \"deploy\") return deployCommand(args)\n\tif (command === \"init\") return init(args[1])\n\n\tif (command === \"owner\") {\n\t\tconst subcommand = args[1]\n\t\tif (subcommand === \"add\") return ownerAdd(args[2])\n\t\tif (subcommand === \"remove\" || subcommand === \"rm\")\n\t\t\treturn ownerRemove(args[2])\n\t\tif (subcommand === \"list\" || subcommand === \"ls\") return ownerList()\n\t\tconsole.log(\"\\nUsage: hybrid owner <command>\")\n\t\tconsole.log(\"\\nCommands:\")\n\t\tconsole.log(\"  owner add <address>     Add an owner\")\n\t\tconsole.log(\"  owner remove <address>  Remove an owner\")\n\t\tconsole.log(\"  owner list              List all owners\")\n\t\tprocess.exit(1)\n\t}\n\n\tif (command === \"skills\") {\n\t\tconst subcommand = args[1]\n\t\tif (subcommand === \"add\") {\n\t\t\tconst isGlobal = args.includes(\"-g\") || args.includes(\"--global\")\n\t\t\tconst source = args.find((a, i) => i > 1 && !a.startsWith(\"-\"))\n\t\t\treturn skillsAdd(source, isGlobal)\n\t\t}\n\t\tif (subcommand === \"remove\" || subcommand === \"rm\") {\n\t\t\tconst isGlobal = args.includes(\"-g\") || args.includes(\"--global\")\n\t\t\tconst name = args.find((a, i) => i > 1 && !a.startsWith(\"-\"))\n\t\t\treturn skillsRemove(name, isGlobal)\n\t\t}\n\t\tif (subcommand === \"list\" || subcommand === \"ls\" || !subcommand) {\n\t\t\treturn skillsList()\n\t\t}\n\t\tconsole.error(`Unknown skills subcommand: ${subcommand}`)\n\t\tconsole.error(\"Usage: hybrid skills add|remove|list\")\n\t\tprocess.exit(1)\n\t}\n\n\tif (command === \"clawhub\" || command === \"ch\") {\n\t\tconst subcommand = args[1]\n\t\tconst passThroughArgs = args.slice(2).join(\" \")\n\t\tif (subcommand === \"install\") return clawhubInstall(passThroughArgs)\n\t\tif (subcommand === \"search\") return clawhubSearch(passThroughArgs)\n\t\tif (subcommand === \"publish\") return clawhubPublish(passThroughArgs)\n\t\tif (subcommand === \"update\") return clawhubUpdate(passThroughArgs)\n\t\tif (subcommand === \"list\") return clawhubList()\n\t\tif (subcommand === \"login\") return clawhubLogin()\n\t\tif (subcommand === \"logout\") return clawhubLogout()\n\t\tif (subcommand === \"whoami\") return clawhubWhoami()\n\t\tconsole.log(\"\\nUsage: hybrid clawhub <command>\")\n\t\tconsole.log(\"\\nCommands:\")\n\t\tconsole.log(\"  install <slug>    Install a skill from ClawHub\")\n\t\tconsole.log(\"  search <query>    Search for skills\")\n\t\tconsole.log(\"  publish <path>    Publish a skill\")\n\t\tconsole.log(\"  update [slug]     Update installed skills\")\n\t\tconsole.log(\"  list              List installed skills\")\n\t\tconsole.log(\"  login             Authenticate with ClawHub\")\n\t\tconsole.log(\"  logout            Remove stored credentials\")\n\t\tconsole.log(\"  whoami            Check authentication status\")\n\t\tprocess.exit(1)\n\t}\n\n\t// Show help\n\tconsole.log(\"Usage: hybrid <command>\")\n\tconsole.log(\"\")\n\tconsole.log(\"Commands:\")\n\tconsole.log(\"  init <name>               Initialize a new agent\")\n\tconsole.log(\"  dev                       Start development server\")\n\tconsole.log(\"  build [--target]          Build for deployment (firecracker)\")\n\tconsole.log(\"  start                     Run built agent\")\n\tconsole.log(\n\t\t\"  deploy [platform]              Deploy to a Firecracker provider\"\n\t)\n\tconsole.log(\"  deploy sleep <name>            Put VM to sleep\")\n\tconsole.log(\"  deploy wake <name>             Wake VM\")\n\tconsole.log(\"  deploy status <name>           Show VM status\")\n\tconsole.log(\"  deploy logs <name>             Stream agent logs\")\n\tconsole.log(\"  deploy teardown <name> [--all] Destroy VM\")\n\tconsole.log(\"\")\n\tconsole.log(\"Deploy flags:\")\n\tconsole.log(\"  --provider <name>  Override provider (sprites, e2b, northflank, daytona)\")\n\tconsole.log(\"  --name <name>         Override instance name\")\n\tconsole.log(\"  --force               Recreate VM even if it exists\")\n\tconsole.log(\"  --no-build            Skip build step\")\n\tconsole.log(\"\")\n\tconsole.log(\"Owner:\")\n\tconsole.log(\"  owner add <address>     Add an owner\")\n\tconsole.log(\"  owner remove <address>  Remove an owner\")\n\tconsole.log(\"  owner list              List all owners\")\n\tconsole.log(\"\")\n\tconsole.log(\"Skills:\")\n\tconsole.log(\"  skills add <source> [-g]    Install a skill\")\n\tconsole.log(\"  skills remove <name> [-g]   Remove a skill\")\n\tconsole.log(\"  skills list                 List installed skills\")\n\tconsole.log(\"\")\n\tconsole.log(\"  Uses npx skills --agent openclaw under the hood\")\n\tconsole.log(\"  -g, --global    Install to ~/.openclaw/skills/\")\n\tconsole.log(\"\")\n\tconsole.log(\"Sources:\")\n\tconsole.log(\"  owner/repo          GitHub shorthand\")\n\tconsole.log(\"  owner/repo/skill    GitHub skill path\")\n\tconsole.log(\"  @scope/package     npm package\")\n\tconsole.log(\"  ./local-path       Local directory\")\n\tconsole.log(\"\")\n\tconsole.log(\"ClawHub:\")\n\tconsole.log(\"  clawhub install <slug>   Install from ClawHub registry\")\n\tconsole.log(\"  clawhub search <query>   Search ClawHub skills\")\n\tconsole.log(\"  clawhub publish <path>   Publish a skill\")\n\tconsole.log(\"  clawhub update [slug]    Update installed skills\")\n\tconsole.log(\"  clawhub list             List ClawHub skills\")\n\tconsole.log(\"  clawhub login            Authenticate with ClawHub\")\n\tconsole.log(\"\")\n\n\tif (command) process.exit(1)\n}\n\n// ============================================================================\n// Skills - Thin wrapper around npx skills --agent openclaw\n// ============================================================================\n\nasync function skillsAdd(source?: string, isGlobal = false) {\n\tif (!source) {\n\t\tconsole.error(\"Error: Skill source required\")\n\t\tconsole.error(\"Usage: hybrid skills add <source>\")\n\t\tconsole.error(\"       hybrid skills add <source> -g  # Global install\")\n\t\tprocess.exit(1)\n\t}\n\n\tconst { execSync } = await import(\"node:child_process\")\n\tconst cmdArgs = [\"skills\", \"add\", source, \"-a\", \"openclaw\", \"-y\"]\n\tif (isGlobal) cmdArgs.push(\"-g\")\n\n\tconsole.log(\n\t\t`\\n📥 Installing skill: ${source}${isGlobal ? \" (global)\" : \"\"}\\n`\n\t)\n\texecSync(`npx ${cmdArgs.join(\" \")}`, { stdio: \"inherit\" })\n}\n\nasync function skillsRemove(name?: string, isGlobal = false) {\n\tif (!name) {\n\t\tconsole.error(\"Error: Skill name required\")\n\t\tconsole.error(\"Usage: hybrid skills remove <skill-name>\")\n\t\tprocess.exit(1)\n\t}\n\n\tconst { execSync } = await import(\"node:child_process\")\n\tconst cmdArgs = [\"skills\", \"remove\", name, \"-a\", \"openclaw\", \"-y\"]\n\tif (isGlobal) cmdArgs.push(\"-g\")\n\n\texecSync(`npx ${cmdArgs.join(\" \")}`, { stdio: \"inherit\" })\n}\n\nasync function skillsList() {\n\tconst { execSync } = await import(\"node:child_process\")\n\texecSync(\"npx skills list -a openclaw\", { stdio: \"inherit\" })\n}\n\n// ============================================================================\n// ClawHub - Wrapper around clawhub CLI\n// ============================================================================\n\nasync function clawhubInstall(extraArgs: string) {\n\tconst { execSync } = await import(\"node:child_process\")\n\tconsole.log(\"\\n📥 Installing from ClawHub...\\n\")\n\texecSync(`npx clawhub install ${extraArgs}`, { stdio: \"inherit\" })\n}\n\nasync function clawhubSearch(query: string) {\n\tconst { execSync } = await import(\"node:child_process\")\n\texecSync(`npx clawhub search ${query}`, { stdio: \"inherit\" })\n}\n\nasync function clawhubPublish(extraArgs: string) {\n\tconst { execSync } = await import(\"node:child_process\")\n\tconsole.log(\"\\n📤 Publishing to ClawHub...\\n\")\n\texecSync(`npx clawhub publish ${extraArgs}`, { stdio: \"inherit\" })\n}\n\nasync function clawhubUpdate(extraArgs: string) {\n\tconst { execSync } = await import(\"node:child_process\")\n\tconsole.log(\"\\n🔄 Updating skills from ClawHub...\\n\")\n\texecSync(`npx clawhub update ${extraArgs}`, { stdio: \"inherit\" })\n}\n\nasync function clawhubList() {\n\tconst { execSync } = await import(\"node:child_process\")\n\texecSync(\"npx clawhub list\", { stdio: \"inherit\" })\n}\n\nasync function clawhubLogin() {\n\tconst { execSync } = await import(\"node:child_process\")\n\tconsole.log(\"\\n🔐 Logging into ClawHub...\\n\")\n\texecSync(\"npx clawhub login\", { stdio: \"inherit\" })\n}\n\nasync function clawhubLogout() {\n\tconst { execSync } = await import(\"node:child_process\")\n\texecSync(\"npx clawhub logout\", { stdio: \"inherit\" })\n}\n\nasync function clawhubWhoami() {\n\tconst { execSync } = await import(\"node:child_process\")\n\texecSync(\"npx clawhub whoami\", { stdio: \"inherit\" })\n}\n\n// ============================================================================\n// Init\n// ============================================================================\n\nasync function init(name?: string) {\n\tif (!name) {\n\t\tconsole.error(\"Error: Agent name required\")\n\t\tconsole.error(\"Usage: hybrid init <name>\")\n\t\tprocess.exit(1)\n\t}\n\n\tconst {\n\t\tcpSync,\n\t\texistsSync,\n\t\tmkdirSync,\n\t\twriteFileSync,\n\t\treaddirSync,\n\t\treadFileSync\n\t} = await import(\"node:fs\")\n\n\n\tconst templateDir = resolve(packageDir, \"templates\", \"agent\")\n\tconst targetDir = resolve(process.cwd(), name)\n\n\tif (existsSync(targetDir)) {\n\t\tconsole.error(`Error: Directory '${name}' already exists`)\n\t\tprocess.exit(1)\n\t}\n\n\tconsole.log(`\\n📦 Creating agent: ${name}\\n`)\n\n\t// Copy template\n\tcpSync(templateDir, targetDir, { recursive: true })\n\n\t// Update package.json with agent name\n\tconst pkgPath = resolve(targetDir, \"package.json\")\n\tconst pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"))\n\tpkg.name = name\n\twriteFileSync(pkgPath, JSON.stringify(pkg, null, 2))\n\n\t// Copy core skills from bundled package\n\tconst skillsDir = resolve(packageDir, \"skills\")\n\tconst targetSkillsDir = resolve(targetDir, \"skills\")\n\n\tif (existsSync(skillsDir)) {\n\t\tconsole.log(\"📚 Copying core skills...\")\n\t\tconst coreSkills = readdirSync(skillsDir, { withFileTypes: true })\n\t\t\t.filter((d) => d.isDirectory())\n\t\t\t.map((d) => d.name)\n\n\t\tmkdirSync(targetSkillsDir, { recursive: true })\n\n\t\tfor (const skill of coreSkills) {\n\t\t\tcpSync(resolve(skillsDir, skill), resolve(targetSkillsDir, skill), {\n\t\t\t\trecursive: true\n\t\t\t})\n\t\t\tconsole.log(`   ✓ ${skill}`)\n\t\t}\n\n\t\t// Create skills-lock.json\n\t\tconst lockfile: Record<string, { source: string; installedAt: string }> = {}\n\t\tconst now = new Date().toISOString()\n\t\tfor (const skill of coreSkills) {\n\t\t\tlockfile[skill] = { source: \"core\", installedAt: now }\n\t\t}\n\t\twriteFileSync(\n\t\t\tresolve(targetDir, \"skills-lock.json\"),\n\t\t\tJSON.stringify(lockfile, null, 2)\n\t\t)\n\t}\n\n\t// Copy .env.example to .env\n\tconst envExamplePath = resolve(targetDir, \".env.example\")\n\tconst envPath = resolve(targetDir, \".env\")\n\tif (existsSync(envExamplePath)) {\n\t\tcpSync(envExamplePath, envPath)\n\t}\n\n\t// Collect configuration via prompts\n\tconst prompts = (await import(\"prompts\")).default\n\tconst providerResponse = await prompts({\n\t\ttype: \"select\",\n\t\tname: \"provider\",\n\t\tmessage: \"LLM Provider\",\n\t\tchoices: [\n\t\t\t{ title: \"Anthropic\", value: \"anthropic\" },\n\t\t\t{ title: \"OpenRouter\", value: \"openrouter\" }\n\t\t],\n\t\tinitial: 0\n\t})\n\n\tif (providerResponse.provider === undefined) {\n\t\tconsole.log(\"\\nCancelled.\")\n\t\tprocess.exit(0)\n\t}\n\n\tlet anthropicKey = \"\"\n\tlet openrouterKey = \"\"\n\n\tif (providerResponse.provider === \"anthropic\") {\n\t\tconst keyResponse = await prompts({\n\t\t\ttype: \"password\",\n\t\t\tname: \"key\",\n\t\t\tmessage: \"Anthropic API key\"\n\t\t})\n\t\tanthropicKey = keyResponse.key || \"\"\n\t} else if (providerResponse.provider === \"openrouter\") {\n\t\tconst keyResponse = await prompts({\n\t\t\ttype: \"password\",\n\t\t\tname: \"key\",\n\t\t\tmessage: \"OpenRouter API key\"\n\t\t})\n\t\topenrouterKey = keyResponse.key || \"\"\n\t}\n\n\t// Create ACL file with owner\n\tconst credentialsDir = resolve(targetDir, \"credentials\")\n\tmkdirSync(credentialsDir, { recursive: true })\n\tconst acl: { version: number; allowFrom: string[] } = {\n\t\tversion: 1,\n\t\tallowFrom: []\n\t}\n\tconst ownerResponse = await prompts({\n\t\ttype: \"text\",\n\t\tname: \"address\",\n\t\tmessage: \"Enter your wallet address (owner, optional)\"\n\t})\n\tconst ownerAddress = ownerResponse?.address?.trim() || \"\"\n\tif (ownerAddress) {\n\t\tacl.allowFrom.push(ownerAddress.toLowerCase())\n\t\tconsole.log(`\\n✅ Added owner: ${ownerAddress.toLowerCase()}`)\n\t}\n\twriteFileSync(\n\t\tresolve(credentialsDir, \"allowFrom.json\"),\n\t\tJSON.stringify(acl, null, 2)\n\t)\n\n\t// Close readline now that all prompts are done\n\t// (rl is not used — all prompts use the prompts library now)\n\n\t// Update .env file with generated key and API keys\n\tlet envContent = readFileSync(envPath, \"utf-8\")\n\n\t// Update API keys based on provider choice\n\tif (anthropicKey) {\n\t\tenvContent = envContent.replace(\n\t\t\t/ANTHROPIC_API_KEY=.*/,\n\t\t\t`ANTHROPIC_API_KEY=${anthropicKey}`\n\t\t)\n\t\t// Comment out OpenRouter lines if present\n\t\tenvContent = envContent.replace(\n\t\t\t/^ANTHROPIC_BASE_URL=https:\\/\\/openrouter\\.ai\\/api/m,\n\t\t\t\"# ANTHROPIC_BASE_URL=https://openrouter.ai/api\"\n\t\t)\n\t\tenvContent = envContent.replace(\n\t\t\t/^ANTHROPIC_AUTH_TOKEN=(?!your_openrouter_key)/m,\n\t\t\t\"# ANTHROPIC_AUTH_TOKEN=\"\n\t\t)\n\t}\n\n\tif (openrouterKey) {\n\t\t// Uncomment/set OpenRouter lines\n\t\tenvContent = envContent.replace(\n\t\t\t/# ANTHROPIC_BASE_URL=https:\\/\\/openrouter\\.ai\\/api/,\n\t\t\t\"ANTHROPIC_BASE_URL=https://openrouter.ai/api\"\n\t\t)\n\t\t// Replace commented placeholder OR existing AUTH_TOKEN in one pass\n\t\tenvContent = envContent.replace(\n\t\t\t/^#?\\s*ANTHROPIC_AUTH_TOKEN=.*/m,\n\t\t\t`ANTHROPIC_AUTH_TOKEN=${openrouterKey}`\n\t\t)\n\t\t// Comment out direct Anthropic key if OpenRouter is used\n\t\tenvContent = envContent.replace(\n\t\t\t/^ANTHROPIC_API_KEY=/m,\n\t\t\t(match) => `# ${match}`\n\t\t)\n\t}\n\n\twriteFileSync(envPath, envContent)\n\tconsole.log(\"✅ Updated .env file\")\n\n\tconsole.log(`\\n✅ Created agent at: ${name}/`)\n\tconsole.log(\"\\nNext steps:\")\n\tconsole.log(`  cd ${name}`)\n\tconsole.log(\"  npm install  # or pnpm install\")\n\tconsole.log(\"  hybrid dev   # Start development\")\n}\n\n// ============================================================================\n// Build\n// ============================================================================\n\nasync function build(target?: string) {\n\tconst { execSync } = await import(\"node:child_process\")\n\tconst {\n\t\tcpSync,\n\t\texistsSync,\n\t\tmkdirSync,\n\t\trmSync,\n\t\twriteFileSync,\n\t\treaddirSync,\n\t\treadFileSync\n\t} = await import(\"node:fs\")\n\n\tconst projectDir = projectRoot\n\tconst distDir = resolve(projectDir, \"dist\")\n\tconst buildTarget = target || \"firecracker\"\n\n\tconsole.log(\"\\n🔧 Building agent...\")\n\n\t// Clean dist\n\tif (existsSync(distDir)) {\n\t\trmSync(distDir, { recursive: true, force: true })\n\t}\n\tmkdirSync(distDir, { recursive: true })\n\tmkdirSync(resolve(distDir, \"server\"), { recursive: true })\n\n\t// Copy agent runtime from bundled package\n\tconsole.log(\"📦 Copying agent runtime...\")\n\tconst agentDistDir = resolve(packageDir, \"dist\")\n\n\tconst files = [\"server/index.cjs\"]\n\n\tfor (const file of files) {\n\t\tconst src = resolve(agentDistDir, file)\n\t\tif (existsSync(src)) {\n\t\t\tcpSync(src, resolve(distDir, file))\n\t\t} else {\n\t\t\tconsole.error(`  Missing: ${file} - run 'pnpm build' in hybrid package`)\n\t\t}\n\t}\n\n\t// Copy config files\n\tconsole.log(\"📋 Copying agent config...\")\n\tfor (const file of [\n\t\t\"SOUL.md\",\n\t\t\"AGENTS.md\",\n\t\t\"IDENTITY.md\",\n\t\t\"TOOLS.md\",\n\t\t\"BOOT.md\",\n\t\t\"BOOTSTRAP.md\",\n\t\t\"HEARTBEAT.md\",\n\t\t\"USER.md\"\n\t]) {\n\t\tconst src = resolve(projectDir, file)\n\t\tif (existsSync(src)) {\n\t\t\tcpSync(src, resolve(distDir, file))\n\t\t\tconsole.log(`   ✓ ${file}`)\n\t\t}\n\t}\n\n\t// Copy/migrate config file\n\tconst hybridConfig = resolve(projectDir, \"hybrid.config.ts\")\n\tconst openclawConfig = resolve(projectDir, \"openclaw.json\")\n\tconst agentConfig = resolve(projectDir, \"agent.ts\")\n\n\tif (existsSync(hybridConfig)) {\n\t\t// TODO: Compile TypeScript config\n\t\tcpSync(hybridConfig, resolve(distDir, \"hybrid.config.ts\"))\n\t\tconsole.log(\"   ✓ hybrid.config.ts\")\n\t} else if (existsSync(openclawConfig)) {\n\t\tconst content = readFileSync(openclawConfig, \"utf-8\")\n\t\twriteFileSync(\n\t\t\tresolve(projectDir, \"hybrid.config.ts\"),\n\t\t\t`// Migrated from openclaw.json\\nexport default ${content}`\n\t\t)\n\t\tconsole.log(\"   ✓ Migrated openclaw.json → hybrid.config.ts\")\n\t} else if (existsSync(agentConfig)) {\n\t\tcpSync(agentConfig, resolve(distDir, \"agent.ts\"))\n\t\tconsole.log(\"   ✓ agent.ts (legacy)\")\n\t}\n\n\t// Skills stay in ./skills/ at project root - not copied\n\t// Verify skills exist\n\tconst skillsDir = resolve(projectDir, \"skills\")\n\tif (existsSync(skillsDir)) {\n\t\tconst skills = readdirSync(skillsDir, { withFileTypes: true })\n\t\t\t.filter((d) => d.isDirectory())\n\t\t\t.map((d) => d.name)\n\t\tconsole.log(`📚 Skills: ${skills.length} in ./skills/`)\n\t} else {\n\t\tconsole.log(\"⚠️  No ./skills/ directory found - run 'hybrid init' first?\")\n\t}\n\n\t// Copy credentials if exist\n\tconst credsDir = resolve(projectDir, \"credentials\")\n\tif (existsSync(credsDir)) {\n\t\tmkdirSync(resolve(distDir, \"credentials\"), { recursive: true })\n\t\tcpSync(credsDir, resolve(distDir, \"credentials\"), { recursive: true })\n\t\tconsole.log(\"   ✓ credentials/\")\n\t}\n\n\t// Generate package.json for deployment\n\tconst deployPkg = {\n\t\tname: \"hybrid\",\n\t\tversion: \"1.0.0\",\n\t\ttype: \"module\",\n\t\tdependencies: {\n\t\t\t\"@anthropic-ai/claude-agent-sdk\": \"^0.2.38\",\n\t\t\t\"@hono/node-server\": \"^1.13.5\",\n\t\t\tai: \"^6.0.0\",\n\t\t\t\"better-sqlite3\": \"^11.0.0\",\n\t\t\tdotenv: \"^16.4.5\",\n\t\t\thono: \"^4.10.8\",\n\t\t\t\"sql.js\": \"^1.11.0\",\n\t\t\tzod: \"^4.0.0\"\n\t\t}\n\t}\n\twriteFileSync(\n\t\tresolve(distDir, \"package.json\"),\n\t\tJSON.stringify(deployPkg, null, 2)\n\t)\n\n\t// Generate Dockerfile (only COPY files that exist in dist)\n\twriteFileSync(resolve(distDir, \"Dockerfile\"), generateDockerfile(distDir))\n\n\t// .hybrid-deploy.json manifest for provider consumption\n\twriteFileSync(\n\t\tresolve(distDir, \".hybrid-deploy.json\"),\n\t\tJSON.stringify(\n\t\t\t{\n\t\t\t\tversion: 1,\n\t\t\t\tprovider: \"firecracker\",\n\t\t\t\tstartCommand: \"node server/index.cjs\",\n\t\t\t\tport: 8454,\n\t\t\t\thealthPath: \"/health\"\n\t\t\t},\n\t\t\tnull,\n\t\t\t2\n\t\t)\n\t)\n\n\t// Generate start script\n\twriteFileSync(\n\t\tresolve(distDir, \"start.sh\"),\n\t\t`#!/bin/sh\nnode server/index.cjs\n`\n\t)\n\n\tconsole.log(\"\\n✅ Build complete!\")\n\tconsole.log(`   Output: ${distDir}`)\n\tconsole.log(`   Target: ${buildTarget}`)\n}\n\nfunction generateDockerfile(distDir: string): string {\n\tconst configFiles = [\n\t\t\"SOUL.md\",\n\t\t\"AGENTS.md\",\n\t\t\"IDENTITY.md\",\n\t\t\"TOOLS.md\",\n\t\t\"BOOT.md\",\n\t\t\"BOOTSTRAP.md\",\n\t\t\"HEARTBEAT.md\",\n\t\t\"USER.md\",\n\t]\n\tconst present = configFiles.filter((f) =>\n\t\texistsSync(resolve(distDir, f)),\n\t)\n\tconst hasCredentials = existsSync(resolve(distDir, \"credentials\"))\n\tconst configCopy = present.length > 0 ? `COPY ${present.join(\" \")} ./` : \"\"\n\tconst credCopy = hasCredentials ? \"COPY credentials/ ./credentials/\" : \"\"\n\n\treturn `FROM node:20-bookworm-slim\nWORKDIR /app\nCOPY package.json ./\nRUN npm install --production\nCOPY server/ ./server/\n${configCopy}\n${credCopy}\nENV AGENT_PORT=8454\nENV NODE_ENV=production\nENV DATA_ROOT=/app/data\nEXPOSE 8454\nUSER node\nCMD [\"node\", \"server/index.cjs\"]\n`\n}\n\n// ============================================================================\n// Dev\n// ============================================================================\n\nasync function dev(useDocker: boolean) {\n\tconst { execSync } = await import(\"node:child_process\")\n\n\tif (useDocker) {\n\t\tconsole.log(\"\\n🐳 Docker dev not yet implemented for new structure\")\n\t\tconsole.log(\"Use 'hybrid dev' without --docker for now\")\n\t\treturn\n\t}\n\n\tconst projectDir = projectRoot\n\tconst agentServer = resolve(packageDir, \"dist\", \"server\", \"index.cjs\")\n\n\tconsole.log(\"\\n🚀 Starting development server...\\n\")\n\tconsole.log(`   Project: ${projectDir}`)\n\tconsole.log(`   Runtime: ${packageDir}\\n`)\n\n\ttry {\n\t\texecSync(`node ${agentServer}`, {\n\t\t\tcwd: projectDir,\n\t\t\tstdio: \"inherit\",\n\t\t\tenv: {\n\t\t\t\t...process.env,\n\t\t\t\tAGENT_PROJECT_ROOT: projectDir\n\t\t\t}\n\t\t})\n\t} catch {\n\t\tconsole.error(\"\\n❌ Failed to start dev server\")\n\t\tprocess.exit(1)\n\t}\n}\n\n// ============================================================================\n// Start\n// ============================================================================\n\nasync function start() {\n\tconst { spawn } = await import(\"node:child_process\")\n\tconst { existsSync } = await import(\"node:fs\")\n\n\tconst projectDir = projectRoot\n\tconst distDir = resolve(projectDir, \"dist\")\n\n\tif (!existsSync(resolve(distDir, \"server\", \"simple.cjs\"))) {\n\t\tconsole.error(\"Error: No build found. Run 'hybrid build' first.\")\n\t\tprocess.exit(1)\n\t}\n\n\tconsole.log(\"\\n🚀 Starting agent from ./dist/...\\n\")\n\n\tconst server = spawn(\"node\", [resolve(distDir, \"server\", \"simple.cjs\")], {\n\t\tcwd: projectDir,\n\t\tstdio: \"inherit\",\n\t\tenv: { ...process.env, AGENT_PROJECT_ROOT: projectDir }\n\t})\n\n\tconst exitHandler = (code: number | null) => {\n\t\tif (code !== 0 && code !== null) process.exit(code)\n\t}\n\n\tserver.on(\"exit\", exitHandler)\n\n\tprocess.on(\"SIGINT\", () => {\n\t\tserver.kill(\"SIGINT\")\n\t\tprocess.exit(0)\n\t})\n}\n\n// ============================================================================\n// Deploy — delegates to deploy/ providers\n// ============================================================================\n\nlet deployModule: typeof import(\"./deploy/deploy\") | null = null\nasync function loadDeploy() {\n\tif (!deployModule) {\n\t\tdeployModule = await import(\"./deploy/deploy\")\n\t}\n\treturn deployModule\n}\n\nfunction parseDeployArgs(args: string[]) {\n\t// Collect known flag indices so we don't mistake flag values as positional names\n\tconst skipSet = new Set<number>()\n\t// Only flags that consume a value should skip the NEXT index\n\tconst valuedFlags = new Set([\n\t\t\"--provider\",\n\t\t\"-p\",\n\t\t\"--name\",\n\t\t\"-n\",\n\t])\n\tfor (let i = 0; i < args.length; i++) {\n\t\tif (valuedFlags.has(args[i])) {\n\t\t\tskipSet.add(i)\n\t\t\tskipSet.add(i + 1)\n\t\t}\n\t}\n\tconst providerIdx = args.indexOf(\"--provider\")\n\tconst providerAltIdx = args.indexOf(\"-p\")\n\tconst nameIdx = args.indexOf(\"--name\")\n\tconst nameAltIdx = args.indexOf(\"-n\")\n\tconst providerFlag =\n\t\t(providerIdx !== -1 ? args[providerIdx + 1] : undefined) ||\n\t\t(providerAltIdx !== -1 ? args[providerAltIdx + 1] : undefined)\n\tconst nameFlag =\n\t\t(nameIdx !== -1 ? args[nameIdx + 1] : undefined) ||\n\t\t(nameAltIdx !== -1 ? args[nameAltIdx + 1] : undefined)\n\n\t// Find the first positional arg that isn't a flag, flag value, or subcommand\n\tconst name = args.find(\n\t\t(a, i) =>\n\t\t\ti > 1 &&\n\t\t\t!a.startsWith(\"--\") &&\n\t\t\t!a.startsWith(\"-\") &&\n\t\t\t!skipSet.has(i) &&\n\t\t\ta !== \"deploy\" &&\n\t\t\ta !== \"sleep\" &&\n\t\t\ta !== \"wake\" &&\n\t\t\ta !== \"status\" &&\n\t\t\ta !== \"logs\" &&\n\t\t\ta !== \"teardown\" &&\n\t\t\ta !== providerFlag &&\n\t\t\ta !== nameFlag,\n\t)\n\tconst skipBuild = args.includes(\"--no-build\")\n\tconst force = args.includes(\"--force\")\n\tconst follow = !args.includes(\"--no-follow\")\n\treturn {\n\t\tplatform: providerFlag,\n\t\tname: name || nameFlag,\n\t\tskipBuild,\n\t\tforce,\n\t\tfollow,\n\t}\n}\n\nasync function deployCommand(args: string[]) {\n\tconst sub = args[1]\n\n\t// If sub looks like a known provider, treat it as the platform and deploy.\n\t// Otherwise treat it as a subcommand.\n\tconst knownProviders = new Set([\n\t\t\"sprites\",\n\t\t\"e2b\",\n\t\t\"daytona\",\n\t\t\"northflank\",\n\t])\n\tconst isPlatform = sub && !sub.startsWith(\"-\") && knownProviders.has(sub)\n\n\tif (!sub || sub.startsWith(\"-\") || isPlatform) {\n\t\tconst flags = parseDeployArgs(args)\n\t\tconst { runDeploy } = await loadDeploy()\n\t\tawait runDeploy(\n\t\t\t{\n\t\t\t\tplatform: flags.platform || (isPlatform ? sub : undefined),\n\t\t\t\tname: flags.name,\n\t\t\t\tskipBuild: flags.skipBuild,\n\t\t\t\tforce: flags.force,\n\t\t\t},\n\t\t\tprojectRoot,\n\t\t\tpackageDir,\n\t\t)\n\t\treturn\n\t}\n\n\tconst pIdx = args.indexOf(\"--provider\")\n\tconst pAlt = args.indexOf(\"-p\")\n\tconst nIdx = args.indexOf(\"--name\")\n\tconst nAlt = args.indexOf(\"-n\")\n\tconst subPlatform =\n\t\t(pIdx !== -1 ? args[pIdx + 1] : undefined) ||\n\t\t(pAlt !== -1 ? args[pAlt + 1] : undefined)\n\tconst subSkipIdx = new Set<number>()\n\tsubSkipIdx.add(pIdx)\n\tsubSkipIdx.add(pAlt)\n\tsubSkipIdx.add(nIdx)\n\tsubSkipIdx.add(nAlt)\n\t// Skip the values after valued flags too\n\tif (pIdx !== -1) subSkipIdx.add(pIdx + 1)\n\tif (pAlt !== -1) subSkipIdx.add(pAlt + 1)\n\tif (nIdx !== -1) subSkipIdx.add(nIdx + 1)\n\tif (nAlt !== -1) subSkipIdx.add(nAlt + 1)\n\tconst name = args.find(\n\t\t(a, i) => i > 1 && !a.startsWith(\"-\") && !subSkipIdx.has(i),\n\t)\n\n\tswitch (sub) {\n\t\tcase \"sleep\": {\n\t\t\tif (!name) {\n\t\t\t\tconsole.error(\"Usage: hybrid deploy sleep <name>\")\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t\tconst { runSleep } = await loadDeploy()\n\t\t\tawait runSleep(name, subPlatform, projectRoot)\n\t\t\tbreak\n\t\t}\n\t\tcase \"wake\": {\n\t\t\tif (!name) {\n\t\t\t\tconsole.error(\"Usage: hybrid deploy wake <name>\")\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t\tconst { runWake } = await loadDeploy()\n\t\t\tawait runWake(name, subPlatform, projectRoot)\n\t\t\tbreak\n\t\t}\n\t\tcase \"status\": {\n\t\t\tif (!name) {\n\t\t\t\tconsole.error(\"Usage: hybrid deploy status <name>\")\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t\tconst { runStatus } = await loadDeploy()\n\t\t\tawait runStatus(name, subPlatform, projectRoot)\n\t\t\tbreak\n\t\t}\n\t\tcase \"logs\": {\n\t\t\tif (!name) {\n\t\t\t\tconsole.error(\"Usage: hybrid deploy logs <name>\")\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t\tconst follow = !args.includes(\"--no-follow\")\n\t\t\tconst { runLogs } = await loadDeploy()\n\t\t\tawait runLogs(name, follow, subPlatform, projectRoot)\n\t\t\tbreak\n\t\t}\n\t\tcase \"teardown\": {\n\t\t\tif (!name) {\n\t\t\t\tconsole.error(\"Usage: hybrid deploy teardown <name>\")\n\t\t\t\tprocess.exit(1)\n\t\t\t}\n\t\t\tconst { runTeardown } = await loadDeploy()\n\t\t\tawait runTeardown(name, subPlatform, projectRoot)\n\t\t\tbreak\n\t\t}\n\t\tdefault:\n\t\t\tconsole.error(`Unknown deploy subcommand: ${sub}`)\n\t\t\tprintDeployHelp()\n\t\t\tprocess.exit(1)\n\t}\n}\n\nfunction printDeployHelp() {\n\tconsole.error(\"\")\n\tconsole.error(\"Usage: hybrid deploy <subcommand>\")\n\tconsole.error(\"\")\n\tconsole.error(\"Commands:\")\n\tconsole.error(\n\t\t\"  deploy [platform]             Deploy to a Firecracker provider\"\n\t)\n\tconsole.error(\"  deploy sleep <name>            Put VM to sleep\")\n\tconsole.error(\"  deploy wake <name>             Wake VM\")\n\tconsole.error(\"  deploy status <name>           Show VM status\")\n\tconsole.error(\"  deploy logs <name>             Stream agent logs\")\n\tconsole.error(\"  deploy teardown <name> [--all] Destroy VM\")\n\tconsole.error(\"\")\n\tconsole.error(\n\t\t\"Flags: --provider <name>  --name <name>  --force  --no-build  --no-follow\"\n\t)\n}\n\n// ============================================================================\n// Owner\n// ============================================================================\n\nasync function ownerAdd(address?: string) {\n\tconst { join } = await import(\"node:path\")\n\tconst { existsSync, mkdirSync, writeFileSync, readFileSync } = await import(\n\t\t\"node:fs\"\n\t)\n\n\tif (!address) {\n\t\tconsole.error(\"Usage: hybrid owner add <address>\")\n\t\tprocess.exit(1)\n\t}\n\n\tconst projectDir = projectRoot\n\tconst aclPath = join(projectDir, \"credentials\", \"allowFrom.json\")\n\tconst normalized = address.toLowerCase().trim()\n\n\tmkdirSync(join(projectDir, \"credentials\"), { recursive: true })\n\n\tlet acl: { version: number; allowFrom: string[] } = {\n\t\tversion: 1,\n\t\tallowFrom: []\n\t}\n\tif (existsSync(aclPath)) {\n\t\ttry {\n\t\t\tacl = JSON.parse(readFileSync(aclPath, \"utf-8\"))\n\t\t} catch {}\n\t}\n\n\tif (!acl.allowFrom.includes(normalized)) {\n\t\tacl.allowFrom.push(normalized)\n\t\twriteFileSync(aclPath, JSON.stringify(acl, null, \"\\t\"))\n\t\tconsole.log(`\\n✅ Added owner: ${normalized}`)\n\t} else {\n\t\tconsole.log(`\\n⚠️  Already an owner: ${normalized}`)\n\t}\n\n\tconsole.log(`\\n📋 Owners (${acl.allowFrom.length}):`)\n\tfor (const owner of acl.allowFrom) console.log(`  - ${owner}`)\n}\n\nasync function ownerRemove(address?: string) {\n\tconst { join } = await import(\"node:path\")\n\tconst { existsSync, writeFileSync, readFileSync } = await import(\"node:fs\")\n\n\tif (!address) {\n\t\tconsole.error(\"Usage: hybrid owner remove <address>\")\n\t\tprocess.exit(1)\n\t}\n\n\tconst projectDir = projectRoot\n\tconst aclPath = join(projectDir, \"credentials\", \"allowFrom.json\")\n\n\tif (!existsSync(aclPath)) {\n\t\tconsole.error(\"No ACL file. Run 'hybrid init' first.\")\n\t\tprocess.exit(1)\n\t}\n\n\tconst acl: { version: number; allowFrom: string[] } = JSON.parse(\n\t\treadFileSync(aclPath, \"utf-8\")\n\t)\n\tconst normalized = address.toLowerCase().trim()\n\tconst index = acl.allowFrom.indexOf(normalized)\n\n\tif (index === -1) {\n\t\tconsole.log(`\\n⚠️  Not an owner: ${normalized}`)\n\t\tprocess.exit(1)\n\t}\n\n\tacl.allowFrom.splice(index, 1)\n\twriteFileSync(aclPath, JSON.stringify(acl, null, \"\\t\"))\n\tconsole.log(`\\n✅ Removed owner: ${normalized}`)\n\n\tif (acl.allowFrom.length > 0) {\n\t\tconsole.log(`\\n📋 Remaining (${acl.allowFrom.length}):`)\n\t\tfor (const owner of acl.allowFrom) console.log(`  - ${owner}`)\n\t} else {\n\t\tconsole.log(\"\\n⚠️  No owners. Agent is open to all users.\")\n\t}\n}\n\nasync function ownerList() {\n\tconst { join } = await import(\"node:path\")\n\tconst { existsSync, readFileSync } = await import(\"node:fs\")\n\n\tconst projectDir = projectRoot\n\tconst aclPath = join(projectDir, \"credentials\", \"allowFrom.json\")\n\n\tif (!existsSync(aclPath)) {\n\t\tconsole.log(\"\\n⚠️  No ACL file. Run 'hybrid init' first.\")\n\t\tconsole.log(\"\\n  Agent is open to all users.\")\n\t\treturn\n\t}\n\n\tconst acl: { version: number; allowFrom: string[] } = JSON.parse(\n\t\treadFileSync(aclPath, \"utf-8\")\n\t)\n\n\tif (acl.allowFrom.length === 0) {\n\t\tconsole.log(\"\\n📋 No owners. Agent is open to all users.\")\n\t\treturn\n\t}\n\n\tconsole.log(`\\n📋 Owners (${acl.allowFrom.length}):`)\n\tfor (const owner of acl.allowFrom) console.log(`  - ${owner}`)\n}\n\n// ============================================================================\n// Run\n// ============================================================================\n\n// Export for testing\nexport { init }\n\nmain().catch((error) => {\n\tconsole.error(\"CLI error:\", error)\n\tprocess.exit(1)\n})\n"],"mappings":"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","names":["writeFileSync","resolve","import_node_child_process","import_node_fs","import_node_os","import_node_path","sandbox","import_node_child_process","import_node_fs","import_node_os","import_node_path","writeFileSync","resolve","CLI","import_node_child_process","import_node_fs","import_node_os","import_node_path","resolve","projectRoot","packageDir","import_node_fs","import_node_path","init_deploy","import_node_fs","import_node_path","cpSync","existsSync","mkdirSync","writeFileSync","readFileSync","rmSync","spawn","runDeploy","runSleep","runWake","runStatus","runLogs","runTeardown","join"]}