#!/usr/bin/env bun /** * Run tela-skills against localhost (discovers ports via Docker). * Usage: bun run localhost -- "console.log(await tela.listProjects())" * or: bun localhost.ts "console.log(await tela.listProjects())" */ import { existsSync } from 'node:fs' import { dirname, join } from 'node:path' import { homedir } from 'node:os' import { fileURLToPath } from 'node:url' import { discoverLocalhostServices, writeLocalhostEnv } from './skill/localhost-utils.ts' const __dirname = dirname(fileURLToPath(import.meta.url)) const TELA_PRELOAD = join(__dirname, 'skill', 'preload.ts') const SESSION_PATH = join(homedir(), '.tela', 'session.local') const args = process.argv.slice(2) const code = args.join(' ').trim() if (!code) { console.error('Usage: bun localhost.ts "console.log(await tela.listProjects())"') process.exit(1) } // Check session.local exists if (!existsSync(SESSION_PATH)) { console.error('Error: No localhost session found at ~/.tela/session.local') console.error('Run CLI setup first: bunx @meistrari/tela-skills → select Localhost') process.exit(1) } // Discover ports from Docker const services = discoverLocalhostServices() if (!services.telaApiPort) { console.error('Error: tela-api Docker container not found. Are local services running?') process.exit(1) } // Write .env with discovered ports writeLocalhostEnv(services.telaApiPort, services.telaAppPort) // Do not inherit a hosted run token: this command must use session.local. delete process.env.DATA_TOKEN const proc = Bun.spawn(['bun', '--preload', TELA_PRELOAD, '-e', code], { env: { ...process.env, TELA_API_URL: `http://localhost:${services.telaApiPort}`, TELA_APP_URL: `http://localhost:${services.telaAppPort ?? 3000}`, }, stdio: ['inherit', 'inherit', 'inherit'], }) process.exit(await proc.exited)